Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 May 2016 20:18:23 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r300075 - head/sys/dev/bwn
Message-ID:  <201605172018.u4HKIN7e071593@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Tue May 17 20:18:23 2016
New Revision: 300075
URL: https://svnweb.freebsd.org/changeset/base/300075

Log:
  [bwn] always allocate maximum size txhdr entries; prepare for fw 598
  
  * always allocate maximum size txhdr entries
  * set the right rx header offset/framesize based on firmware
  
  This still isn't what's completely required for fw 598 support; there's
  more to come.
  
  Tested:
  
  * Apple BCM94321MC 11abgn NIC, 11a STA mode, firmware version 4xx.
  
  Obtained from:	DragonflyBSD (txhdr entry sizing), fw 598 RX header size (linux b43)

Modified:
  head/sys/dev/bwn/if_bwn.c
  head/sys/dev/bwn/if_bwnreg.h
  head/sys/dev/bwn/if_bwnvar.h

Modified: head/sys/dev/bwn/if_bwn.c
==============================================================================
--- head/sys/dev/bwn/if_bwn.c	Tue May 17 19:48:28 2016	(r300074)
+++ head/sys/dev/bwn/if_bwn.c	Tue May 17 20:18:23 2016	(r300075)
@@ -2656,8 +2656,21 @@ bwn_dma_ringsetup(struct bwn_mac *mac, i
 		dr->dr_curslot = -1;
 	} else {
 		if (dr->dr_index == 0) {
-			dr->dr_rx_bufsize = BWN_DMA0_RX_BUFFERSIZE;
-			dr->dr_frameoffset = BWN_DMA0_RX_FRAMEOFFSET;
+			switch (mac->mac_fw.fw_hdr_format) {
+			case BWN_FW_HDR_351:
+			case BWN_FW_HDR_410:
+				dr->dr_rx_bufsize =
+				    BWN_DMA0_RX_BUFFERSIZE_FW351;
+				dr->dr_frameoffset =
+				    BWN_DMA0_RX_FRAMEOFFSET_FW351;
+				break;
+			case BWN_FW_HDR_598:
+				dr->dr_rx_bufsize =
+				    BWN_DMA0_RX_BUFFERSIZE_FW598;
+				dr->dr_frameoffset =
+				    BWN_DMA0_RX_FRAMEOFFSET_FW598;
+				break;
+			}
 		} else
 			KASSERT(0 == 1, ("%s:%d: fail", __func__, __LINE__));
 	}
@@ -2676,7 +2689,7 @@ bwn_dma_ringsetup(struct bwn_mac *mac, i
 
 		dr->dr_txhdr_cache = contigmalloc(
 		    (dr->dr_numslots / BWN_TX_SLOTS_PER_FRAME) *
-		    BWN_HDRSIZE(mac), M_DEVBUF, M_ZERO,
+		    BWN_MAXTXHDRSIZE, M_DEVBUF, M_ZERO,
 		    0, BUS_SPACE_MAXADDR, 8, 0);
 		if (dr->dr_txhdr_cache == NULL) {
 			device_printf(sc->sc_dev,
@@ -2773,7 +2786,7 @@ fail2:
 	if (dr->dr_txhdr_cache != NULL) {
 		contigfree(dr->dr_txhdr_cache,
 		    (dr->dr_numslots / BWN_TX_SLOTS_PER_FRAME) *
-		    BWN_HDRSIZE(mac), M_DEVBUF);
+		    BWN_MAXTXHDRSIZE, M_DEVBUF);
 	}
 fail1:
 	free(dr->dr_meta, M_DEVBUF);
@@ -2795,7 +2808,7 @@ bwn_dma_ringfree(struct bwn_dma_ring **d
 	if ((*dr)->dr_txhdr_cache != NULL) {
 		contigfree((*dr)->dr_txhdr_cache,
 		    ((*dr)->dr_numslots / BWN_TX_SLOTS_PER_FRAME) *
-		    BWN_HDRSIZE((*dr)->dr_mac), M_DEVBUF);
+		    BWN_MAXTXHDRSIZE, M_DEVBUF);
 	}
 	free((*dr)->dr_meta, M_DEVBUF);
 	free(*dr, M_DEVBUF);

Modified: head/sys/dev/bwn/if_bwnreg.h
==============================================================================
--- head/sys/dev/bwn/if_bwnreg.h	Tue May 17 19:48:28 2016	(r300074)
+++ head/sys/dev/bwn/if_bwnreg.h	Tue May 17 20:18:23 2016	(r300075)
@@ -453,11 +453,13 @@
 #define	BWN_DMA64_RXSTAT		0xf0000000
 #define	BWN_DMA64_RXSTAT_DISABLED	0x00000000
 #define	BWN_DMA_RINGMEMSIZE		PAGE_SIZE
-#define	BWN_DMA0_RX_FRAMEOFFSET		30
+#define	BWN_DMA0_RX_FRAMEOFFSET_FW351	30
+#define	BWN_DMA0_RX_FRAMEOFFSET_FW598	38
 
 #define	BWN_TXRING_SLOTS		64
 #define	BWN_RXRING_SLOTS		64
-#define	BWN_DMA0_RX_BUFFERSIZE		IEEE80211_MAX_LEN
+#define	BWN_DMA0_RX_BUFFERSIZE_FW351	(IEEE80211_MAX_LEN + BWN_DMA0_RX_FRAMEOFFSET_FW351)
+#define	BWN_DMA0_RX_BUFFERSIZE_FW598	(IEEE80211_MAX_LEN + BWN_DMA0_RX_FRAMEOFFSET_FW598)
 
 #define	BWN_PHYROUTE_BASE		0x0000
 #define	BWN_PHYROUTE_MASK		0x0c00

Modified: head/sys/dev/bwn/if_bwnvar.h
==============================================================================
--- head/sys/dev/bwn/if_bwnvar.h	Tue May 17 19:48:28 2016	(r300074)
+++ head/sys/dev/bwn/if_bwnvar.h	Tue May 17 20:18:23 2016	(r300075)
@@ -59,6 +59,7 @@ struct bwn_mac;
 #define	BWN_TSSI2DBM(num, den)						\
 	((int32_t)((num < 0) ? num / den : (num + den / 2) / den))
 #define	BWN_HDRSIZE(mac)	bwn_tx_hdrsize(mac)
+#define	BWN_MAXTXHDRSIZE	(112 + (sizeof(struct bwn_plcp6)))
 
 #define	BWN_PIO_COOKIE(tq, tp)						\
 	((uint16_t)((((uint16_t)tq->tq_index + 1) << 12) | tp->tp_index))



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201605172018.u4HKIN7e071593>