diff options
author | Christian Weisgerber <naddy@cvs.openbsd.org> | 2008-09-18 15:16:31 +0000 |
---|---|---|
committer | Christian Weisgerber <naddy@cvs.openbsd.org> | 2008-09-18 15:16:31 +0000 |
commit | 5eab433266681d6216c8e05ad5786344f11779c3 (patch) | |
tree | 9dfd93a6804acadebfb92a46d8dcdd141d2b3dd4 /sys/dev/pci | |
parent | 80e73464cddea0a649b4991ab2b43d25504d8f4f (diff) |
Introduce the infrastructure required to support hardware VLAN tag
stripping: Add a field to the mbuf pkthdr to hold the tag and an
mbuf flag that tells if the tag is valid. Inspired by FreeBSD.
Struct packing suggested by kettenis@. csum_flags is now 16 bits.
Adapt to this in the drivers.
ok reyk@, henning@
Diffstat (limited to 'sys/dev/pci')
-rw-r--r-- | sys/dev/pci/if_bge.c | 4 | ||||
-rw-r--r-- | sys/dev/pci/if_san_xilinx.c | 8 | ||||
-rw-r--r-- | sys/dev/pci/if_ti.c | 4 | ||||
-rw-r--r-- | sys/dev/pci/if_txp.c | 5 |
4 files changed, 12 insertions, 9 deletions
diff --git a/sys/dev/pci/if_bge.c b/sys/dev/pci/if_bge.c index 1c330c05fe9..943ddcce938 100644 --- a/sys/dev/pci/if_bge.c +++ b/sys/dev/pci/if_bge.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_bge.c,v 1.243 2008/09/10 14:01:22 blambert Exp $ */ +/* $OpenBSD: if_bge.c,v 1.244 2008/09/18 15:16:30 naddy Exp $ */ /* * Copyright (c) 2001 Wind River Systems @@ -2449,7 +2449,7 @@ bge_rxeof(struct bge_softc *sc) u_int32_t rxidx; struct mbuf *m = NULL; #ifdef BGE_CHECKSUM - int sumflags = 0; + u_int16_t sumflags = 0; #endif cur_rx = &sc->bge_rdata-> diff --git a/sys/dev/pci/if_san_xilinx.c b/sys/dev/pci/if_san_xilinx.c index 4a4f7e87665..bc0df31f743 100644 --- a/sys/dev/pci/if_san_xilinx.c +++ b/sys/dev/pci/if_san_xilinx.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_san_xilinx.c,v 1.22 2008/09/10 14:01:22 blambert Exp $ */ +/* $OpenBSD: if_san_xilinx.c,v 1.23 2008/09/18 15:16:30 naddy Exp $ */ /*- * Copyright (c) 2001-2004 Sangoma Technologies (SAN) @@ -1977,7 +1977,8 @@ xilinx_dma_tx_complete(sdla_t *card, xilinx_softc_t *sc) } sc->pci_retry = 0; - sc->tx_dma_mbuf->m_pkthdr.csum_flags = reg; + sc->tx_dma_mbuf->m_pkthdr.csum_flags = reg & 0xFFFF; + sc->tx_dma_mbuf->m_pkthdr.ether_vtag = (reg >> 16) & 0xFFFF; IF_ENQUEUE(&sc->wp_tx_complete_list, sc->tx_dma_mbuf); sc->tx_dma_mbuf = NULL; @@ -1990,9 +1991,10 @@ static void xilinx_tx_post_complete(sdla_t *card, xilinx_softc_t *sc, struct mbuf *m) { struct ifnet *ifp; - unsigned long reg = m->m_pkthdr.csum_flags; + u_int32_t reg; WAN_ASSERT1(sc == NULL); + reg = (m->m_pkthdr.ether_vtag << 16) + m->m_pkthdr.csum_flags; ifp = (struct ifnet *)&sc->common.ifp; if ((bit_test((u_int8_t *)®, TxDMA_HI_DMA_GO_READY_BIT)) || (reg & TxDMA_HI_DMA_DATA_LENGTH_MASK) || diff --git a/sys/dev/pci/if_ti.c b/sys/dev/pci/if_ti.c index 06fd41a89a0..c1abaa89262 100644 --- a/sys/dev/pci/if_ti.c +++ b/sys/dev/pci/if_ti.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_ti.c,v 1.85 2008/06/07 19:03:13 brad Exp $ */ +/* $OpenBSD: if_ti.c,v 1.86 2008/09/18 15:16:30 naddy Exp $ */ /* * Copyright (c) 1997, 1998, 1999 @@ -1767,7 +1767,7 @@ ti_rxeof(struct ti_softc *sc) struct ti_rx_desc *cur_rx; u_int32_t rxidx; struct mbuf *m = NULL; - int sumflags = 0; + u_int16_t sumflags = 0; bus_dmamap_t dmamap; cur_rx = diff --git a/sys/dev/pci/if_txp.c b/sys/dev/pci/if_txp.c index 37beacde363..7642e8a1183 100644 --- a/sys/dev/pci/if_txp.c +++ b/sys/dev/pci/if_txp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_txp.c,v 1.93 2008/09/10 14:01:23 blambert Exp $ */ +/* $OpenBSD: if_txp.c,v 1.94 2008/09/18 15:16:30 naddy Exp $ */ /* * Copyright (c) 2001 @@ -609,7 +609,8 @@ txp_rx_reclaim(struct txp_softc *sc, struct txp_rx_ring *r, struct mbuf *m; struct txp_swdesc *sd; u_int32_t roff, woff; - int sumflags = 0, idx; + int idx; + u_int16_t sumflags = 0; roff = letoh32(*r->r_roff); woff = letoh32(*r->r_woff); |