diff --git a/sys/dev/ic/rtl8169.c b/sys/dev/ic/rtl8169.c index 071d08c3fcb1..f80fa0230b7c 100644 --- a/sys/dev/ic/rtl8169.c +++ b/sys/dev/ic/rtl8169.c @@ -1,4 +1,4 @@ -/* $NetBSD: rtl8169.c,v 1.8 2005/02/13 16:04:18 jdolecek Exp $ */ +/* $NetBSD: rtl8169.c,v 1.9 2005/02/20 15:56:03 jdolecek Exp $ */ /* * Copyright (c) 1997, 1998-2003 @@ -1124,7 +1124,6 @@ re_rxeof(struct rtk_softc *sc) struct ifnet *ifp; int i, total_len; struct rtk_desc *cur_rx; - struct m_tag *mtag; u_int32_t rxstat, rxvlan; ifp = &sc->ethercom.ec_if; @@ -1273,16 +1272,9 @@ re_rxeof(struct rtk_softc *sc) } if (rxvlan & RTK_RDESC_VLANCTL_TAG) { - mtag = m_tag_get(PACKET_TAG_VLAN, sizeof(u_int), - M_NOWAIT); - if (mtag == NULL) { - ifp->if_ierrors++; - m_freem(m); - continue; - } - *(u_int *)(mtag + 1) = - be16toh(rxvlan & RTK_RDESC_VLANCTL_DATA); - m_tag_prepend(m, mtag); + VLAN_INPUT_TAG(ifp, m, + be16toh(rxvlan & RTK_RDESC_VLANCTL_DATA), + continue); } #if NBPFILTER > 0 if (ifp->if_bpf) @@ -1609,11 +1601,11 @@ re_encap(struct rtk_softc *sc, struct mbuf *m_head, int *idx) * transmission attempt. */ - if (sc->ethercom.ec_nvlans && - (mtag = m_tag_find(m_head, PACKET_TAG_VLAN, NULL)) != NULL) + if ((mtag = VLAN_OUTPUT_TAG(&sc->ethercom, m_head)) != NULL) { sc->rtk_ldata.rtk_tx_list[*idx].rtk_vlanctl = - htole32(htons(*(u_int *)(mtag + 1)) | + htole32(htons(VLAN_TAG_VALUE(mtag)) | RTK_TDESC_VLANCTL_TAG); + } /* Transfer ownership of packet to the chip. */ diff --git a/sys/dev/pci/if_sip.c b/sys/dev/pci/if_sip.c index 5fd78c89c3e1..939e542ea492 100644 --- a/sys/dev/pci/if_sip.c +++ b/sys/dev/pci/if_sip.c @@ -1,4 +1,4 @@ -/* $NetBSD: if_sip.c,v 1.99 2005/02/06 08:52:08 cube Exp $ */ +/* $NetBSD: if_sip.c,v 1.100 2005/02/20 15:56:03 jdolecek Exp $ */ /*- * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc. @@ -80,7 +80,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: if_sip.c,v 1.99 2005/02/06 08:52:08 cube Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_sip.c,v 1.100 2005/02/20 15:56:03 jdolecek Exp $"); #include "bpfilter.h" #include "rnd.h" @@ -1354,11 +1354,10 @@ SIP_DECL(start)(struct ifnet *ifp) * This apparently has to be on the last descriptor of * the packet. */ - if (sc->sc_ethercom.ec_nvlans != 0 && - (mtag = m_tag_find(m0, PACKET_TAG_VLAN, NULL)) != NULL) { + if ((mtag = VLAN_OUTPUT_TAG(&sc->sc_ethercom, m0)) != NULL) { sc->sc_txdescs[lasttx].sipd_extsts |= htole32(EXTSTS_VPKT | - (*(u_int *)(mtag + 1) & EXTSTS_VTCI)); + (VLAN_TAG_VALUE(mtag) & EXTSTS_VTCI)); } /* @@ -1970,21 +1969,9 @@ SIP_DECL(rxintr)(struct sip_softc *sc) * If VLANs are enabled, VLAN packets have been unwrapped * for us. Associate the tag with the packet. */ - if (sc->sc_ethercom.ec_nvlans != 0 && - (extsts & EXTSTS_VPKT) != 0) { - struct m_tag *vtag; - - vtag = m_tag_get(PACKET_TAG_VLAN, sizeof(u_int), - M_NOWAIT); - if (vtag == NULL) { - ifp->if_ierrors++; - printf("%s: unable to allocate VLAN tag\n", - sc->sc_dev.dv_xname); - m_freem(m); - continue; - } - - *(u_int *)(vtag + 1) = ntohs(extsts & EXTSTS_VTCI); + if ((extsts & EXTSTS_VPKT) != 0) { + VLAN_INPUT_TAG(ifp, m, ntohs(extsts & EXTSTS_VTCI), + continue); } /* @@ -2475,7 +2462,7 @@ SIP_DECL(init)(struct ifnet *ifp) if (ifp->if_capenable & (IFCAP_CSUM_IPv4|IFCAP_CSUM_TCPv4|IFCAP_CSUM_UDPv4)) reg |= VRCR_IPEN; - if (sc->sc_ethercom.ec_nvlans != 0) + if (VLAN_ATTACHED(&sc->sc_ethercom)) reg |= VRCR_VTDEN|VRCR_VTREN; bus_space_write_4(st, sh, SIP_VRCR, reg); @@ -2488,7 +2475,7 @@ SIP_DECL(init)(struct ifnet *ifp) if (ifp->if_capenable & (IFCAP_CSUM_IPv4|IFCAP_CSUM_TCPv4|IFCAP_CSUM_UDPv4)) reg |= VTCR_PPCHK; - if (sc->sc_ethercom.ec_nvlans != 0) + if (VLAN_ATTACHED(&sc->sc_ethercom)) reg |= VTCR_VPPTI; bus_space_write_4(st, sh, SIP_VTCR, reg); @@ -2497,7 +2484,7 @@ SIP_DECL(init)(struct ifnet *ifp) * To understand why we bswap the VLAN Ethertype, see section * 4.2.36 of the DP83820 manual. */ - if (sc->sc_ethercom.ec_nvlans != 0) + if (VLAN_ATTACHED(&sc->sc_ethercom)) bus_space_write_4(st, sh, SIP_VDR, bswap16(ETHERTYPE_VLAN)); #endif /* DP83820 */ diff --git a/sys/dev/pci/if_stge.c b/sys/dev/pci/if_stge.c index 0a699704a417..fc47d8f8658a 100644 --- a/sys/dev/pci/if_stge.c +++ b/sys/dev/pci/if_stge.c @@ -1,4 +1,4 @@ -/* $NetBSD: if_stge.c,v 1.22 2004/10/30 18:09:22 thorpej Exp $ */ +/* $NetBSD: if_stge.c,v 1.23 2005/02/20 15:56:03 jdolecek Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -42,7 +42,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: if_stge.c,v 1.22 2004/10/30 18:09:22 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_stge.c,v 1.23 2005/02/20 15:56:03 jdolecek Exp $"); #include "bpfilter.h" @@ -817,8 +817,7 @@ stge_start(struct ifnet *ifp) /* * See if we have any VLAN stuff. */ - mtag = sc->sc_ethercom.ec_nvlans ? - m_tag_find(m0, PACKET_TAG_VLAN, NULL) : NULL; + mtag = VLAN_OUTPUT_TAG(&sc->sc_ethercom, m0); /* * Get the last and next available transmit descriptor. @@ -934,7 +933,7 @@ stge_start(struct ifnet *ifp) #ifdef STGE_VLAN_CFI TFD_CFI | #endif - TFD_VID((*(u_int *)(mtag + 1))); + TFD_VID(VLAN_TAG_VALUE(mtag)); } tfd->tfd_control = htole64(tfc); @@ -1361,18 +1360,9 @@ stge_rxintr(struct stge_softc *sc) /* * Check for VLAN tagged packets */ - if (status & RFD_VLANDetected) { - struct m_tag *mtag = - m_tag_get(PACKET_TAG_VLAN, sizeof(u_int), M_NOWAIT); - if (mtag == NULL) { - printf("%s: no mbuf for VLAN tag\n", - ifp->if_xname); - m_freem(m); - continue; - } - *(u_int *)(mtag + 1) = RFD_TCI(status); - m_tag_prepend(m, mtag); - } + if (status & RFD_VLANDetected) + VLAN_INPUT_TAG(ifp, m, RFD_TCI(status), continue); + #endif #if 0 if (status & RFD_VLANDetected) { diff --git a/sys/dev/pci/if_txp.c b/sys/dev/pci/if_txp.c index fdbc50812b77..f2abe7a385f1 100644 --- a/sys/dev/pci/if_txp.c +++ b/sys/dev/pci/if_txp.c @@ -1,4 +1,4 @@ -/* $NetBSD: if_txp.c,v 1.8 2004/10/30 18:09:22 thorpej Exp $ */ +/* $NetBSD: if_txp.c,v 1.9 2005/02/20 15:56:03 jdolecek Exp $ */ /* * Copyright (c) 2001 @@ -32,7 +32,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: if_txp.c,v 1.8 2004/10/30 18:09:22 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_txp.c,v 1.9 2005/02/20 15:56:03 jdolecek Exp $"); #include "bpfilter.h" #include "opt_inet.h" @@ -764,18 +764,8 @@ txp_rx_reclaim(sc, r, dma) m->m_pkthdr.csum_flags = sumflags; if (rxd->rx_stat & htole32(RX_STAT_VLAN)) { - struct m_tag *mtag; - - mtag = m_tag_get(PACKET_TAG_VLAN, sizeof(u_int), - M_NOWAIT); - if (!m) { - printf("%s: no mbuf for tag\n", - sc->sc_dev.dv_xname); - m_freem(m); - goto next; - } - *(u_int *)(mtag + 1) = htons(rxd->rx_vlan >> 16); - m_tag_prepend(m, mtag); + VLAN_INPUT_TAG(ifp, m, htons(rxd->rx_vlan >> 16), + continue); } (*ifp->if_input)(ifp, m); @@ -1477,10 +1467,9 @@ txp_start(ifp) if (++cnt >= (TX_ENTRIES - 4)) goto oactive; - mtag = m_tag_find(m, PACKET_TAG_VLAN, NULL); - if (mtag) + if ((mtag = VLAN_OUTPUT_TAG(sc->sc_ethercom, m))) txd->tx_pflags = TX_PFLAGS_VLAN | - (htons(*(u_int *)(mtag + 1)) << TX_PFLAGS_VLANTAG_S); + (htons(VLAN_TAG_VALUE(mtag)) << TX_PFLAGS_VLANTAG_S); if (m->m_pkthdr.csum_flags & M_CSUM_IPv4) txd->tx_pflags |= TX_PFLAGS_IPCKSUM;