PERFORCE change 140798 for review

Sam Leffler sam at FreeBSD.org
Mon Apr 28 17:54:43 UTC 2008


http://perforce.freebsd.org/chv.cgi?CH=140798

Change 140798 by sam at sam_ebb on 2008/04/28 17:53:59

	o restore private routines to convert tx rate code to a plcp
	  signal value for handing to the device now that
	  ieee80211_rate2plcp follows the spec.
	o update ieee80211_plcp2rate use to follow api change

Affected files ...

.. //depot/projects/vap/sys/dev/ral/rt2560.c#30 edit
.. //depot/projects/vap/sys/dev/ral/rt2661.c#28 edit
.. //depot/projects/vap/sys/dev/usb/if_rum.c#19 edit
.. //depot/projects/vap/sys/dev/usb/if_ural.c#20 edit
.. //depot/projects/vap/sys/dev/usb/if_zyd.c#18 edit

Differences ...

==== //depot/projects/vap/sys/dev/ral/rt2560.c#30 (text) ====

@@ -1237,7 +1237,8 @@
 			    htole64(((uint64_t)tsf_hi << 32) | tsf_lo);
 			tap->wr_flags = 0;
 			tap->wr_rate = ieee80211_plcp2rate(desc->rate,
-			    le32toh(desc->flags) & RT2560_RX_OFDM);
+			    (desc->flags & htole32(RT2560_RX_OFDM)) ?
+				IEEE80211_T_OFDM : IEEE80211_T_CCK);
 			tap->wr_antenna = sc->rx_ant;
 			tap->wr_antsignal = RT2560_RSSI(sc, desc->rssi);
 
@@ -1432,6 +1433,29 @@
 
 #define RT2560_TXRX_TURNAROUND	10	/* us */
 
+static uint8_t
+rt2560_plcp_signal(int rate)
+{
+	switch (rate) {
+	/* OFDM rates (cf IEEE Std 802.11a-1999, pp. 14 Table 80) */
+	case 12:	return 0xb;
+	case 18:	return 0xf;
+	case 24:	return 0xa;
+	case 36:	return 0xe;
+	case 48:	return 0x9;
+	case 72:	return 0xd;
+	case 96:	return 0x8;
+	case 108:	return 0xc;
+
+	/* CCK rates (NB: not IEEE std, device-specific) */
+	case 2:		return 0x0;
+	case 4:		return 0x1;
+	case 11:	return 0x2;
+	case 22:	return 0x3;
+	}
+	return 0xff;		/* XXX unsupported/unknown rate */
+}
+
 static void
 rt2560_setup_tx_desc(struct rt2560_softc *sc, struct rt2560_tx_desc *desc,
     uint32_t flags, int len, int rate, int encrypt, bus_addr_t physaddr)
@@ -1451,7 +1475,7 @@
 	    RT2560_LOGCWMAX(8));
 
 	/* setup PLCP fields */
-	desc->plcp_signal  = ieee80211_rate2plcp(rate);
+	desc->plcp_signal  = rt2560_plcp_signal(rate);
 	desc->plcp_service = 4;
 
 	len += IEEE80211_CRC_LEN;

==== //depot/projects/vap/sys/dev/ral/rt2661.c#28 (text) ====

@@ -1118,7 +1118,8 @@
 			    htole64(((uint64_t)tsf_hi << 32) | tsf_lo);
 			tap->wr_flags = 0;
 			tap->wr_rate = ieee80211_plcp2rate(desc->rate,
-			    le32toh(desc->flags) & RT2661_RX_OFDM);
+			    (desc->flags & htole32(RT2661_RX_OFDM)) ?
+				IEEE80211_T_OFDM : IEEE80211_T_CCK);
 			tap->wr_antsignal = rssi < 0 ? 0 : rssi;
 
 			bpf_mtap2(ifp->if_bpf, tap, sc->sc_rxtap_len, m);
@@ -1245,6 +1246,29 @@
 	RAL_UNLOCK(sc);
 }
 
+static uint8_t
+rt2661_plcp_signal(int rate)
+{
+	switch (rate) {
+	/* OFDM rates (cf IEEE Std 802.11a-1999, pp. 14 Table 80) */
+	case 12:	return 0xb;
+	case 18:	return 0xf;
+	case 24:	return 0xa;
+	case 36:	return 0xe;
+	case 48:	return 0x9;
+	case 72:	return 0xd;
+	case 96:	return 0x8;
+	case 108:	return 0xc;
+
+	/* CCK rates (NB: not IEEE std, device-specific) */
+	case 2:		return 0x0;
+	case 4:		return 0x1;
+	case 11:	return 0x2;
+	case 22:	return 0x3;
+	}
+	return 0xff;		/* XXX unsupported/unknown rate */
+}
+
 static void
 rt2661_setup_tx_desc(struct rt2661_softc *sc, struct rt2661_tx_desc *desc,
     uint32_t flags, uint16_t xflags, int len, int rate,
@@ -1276,7 +1300,7 @@
 	desc->qid = ac;
 
 	/* setup PLCP fields */
-	desc->plcp_signal  = ieee80211_rate2plcp(rate);
+	desc->plcp_signal  = rt2661_plcp_signal(rate);
 	desc->plcp_service = 4;
 
 	len += IEEE80211_CRC_LEN;

==== //depot/projects/vap/sys/dev/usb/if_rum.c#19 (text+ko) ====

@@ -936,7 +936,8 @@
 
 		tap->wr_flags = IEEE80211_RADIOTAP_F_FCS;
 		tap->wr_rate = ieee80211_plcp2rate(desc->rate,
-		    le32toh(desc->flags) & RT2573_RX_OFDM);
+		    (desc->flags & htole32(RT2573_RX_OFDM)) ?
+			IEEE80211_T_OFDM : IEEE80211_T_CCK);
 		tap->wr_chan_freq = htole16(ic->ic_curchan->ic_freq);
 		tap->wr_chan_flags = htole16(ic->ic_curchan->ic_flags);
 		tap->wr_antenna = sc->rx_ant;
@@ -963,6 +964,29 @@
 	usbd_transfer(xfer);
 }
 
+static uint8_t
+rum_plcp_signal(int rate)
+{
+	switch (rate) {
+	/* OFDM rates (cf IEEE Std 802.11a-1999, pp. 14 Table 80) */
+	case 12:	return 0xb;
+	case 18:	return 0xf;
+	case 24:	return 0xa;
+	case 36:	return 0xe;
+	case 48:	return 0x9;
+	case 72:	return 0xd;
+	case 96:	return 0x8;
+	case 108:	return 0xc;
+
+	/* CCK rates (NB: not IEEE std, device-specific) */
+	case 2:		return 0x0;
+	case 4:		return 0x1;
+	case 11:	return 0x2;
+	case 22:	return 0x3;
+	}
+	return 0xff;		/* XXX unsupported/unknown rate */
+}
+
 static void
 rum_setup_tx_desc(struct rum_softc *sc, struct rum_tx_desc *desc,
     uint32_t flags, uint16_t xflags, int len, int rate)
@@ -982,7 +1006,7 @@
 	    RT2573_LOGCWMIN(4) | RT2573_LOGCWMAX(10));
 
 	/* setup PLCP fields */
-	desc->plcp_signal  = ieee80211_rate2plcp(rate);
+	desc->plcp_signal  = rum_plcp_signal(rate);
 	desc->plcp_service = 4;
 
 	len += IEEE80211_CRC_LEN;

==== //depot/projects/vap/sys/dev/usb/if_ural.c#20 (text+ko) ====

@@ -966,7 +966,8 @@
 
 		tap->wr_flags = IEEE80211_RADIOTAP_F_FCS;   
 		tap->wr_rate = ieee80211_plcp2rate(desc->rate,
-		    le32toh(desc->flags) & RAL_RX_OFDM);
+		    (desc->flags & htole32(RAL_RX_OFDM)) ?
+			IEEE80211_T_OFDM : IEEE80211_T_CCK);
 		tap->wr_chan_freq = htole16(ic->ic_curchan->ic_freq);
 		tap->wr_chan_flags = htole16(ic->ic_curchan->ic_flags);
 		tap->wr_antenna = sc->rx_ant;
@@ -994,6 +995,29 @@
 	usbd_transfer(xfer);
 }
 
+static uint8_t
+ural_plcp_signal(int rate)
+{
+	switch (rate) {
+	/* OFDM rates (cf IEEE Std 802.11a-1999, pp. 14 Table 80) */
+	case 12:	return 0xb;
+	case 18:	return 0xf;
+	case 24:	return 0xa;
+	case 36:	return 0xe;
+	case 48:	return 0x9;
+	case 72:	return 0xd;
+	case 96:	return 0x8;
+	case 108:	return 0xc;
+
+	/* CCK rates (NB: not IEEE std, device-specific) */
+	case 2:		return 0x0;
+	case 4:		return 0x1;
+	case 11:	return 0x2;
+	case 22:	return 0x3;
+	}
+	return 0xff;		/* XXX unsupported/unknown rate */
+}
+
 static void
 ural_setup_tx_desc(struct ural_softc *sc, struct ural_tx_desc *desc,
     uint32_t flags, int len, int rate)
@@ -1011,7 +1035,7 @@
 	desc->wme |= htole16(RAL_IVOFFSET(sizeof (struct ieee80211_frame)));
 
 	/* setup PLCP fields */
-	desc->plcp_signal  = ieee80211_rate2plcp(rate);
+	desc->plcp_signal  = ural_plcp_signal(rate);
 	desc->plcp_service = 4;
 
 	len += IEEE80211_CRC_LEN;

==== //depot/projects/vap/sys/dev/usb/if_zyd.c#18 (text+ko) ====

@@ -1986,7 +1986,8 @@
 		if (stat->flags & ZYD_RX_DECRYPTERR)
 			tap->wr_flags |= IEEE80211_RADIOTAP_F_BADFCS;
 		tap->wr_rate = ieee80211_plcp2rate(plcp->signal,
-		    stat->flags & ZYD_RX_OFDM);
+		    (stat->flags & ZYD_RX_OFDM) ?
+			IEEE80211_T_OFDM : IEEE80211_T_CCK);
 		tap->wr_antsignal = stat->rssi + -95;
 		tap->wr_antnoise = -95;		/* XXX */
 		
@@ -2063,6 +2064,29 @@
 	(void)usbd_transfer(xfer);
 }
 
+static uint8_t
+zyd_plcp_signal(int rate)
+{
+	switch (rate) {
+	/* OFDM rates (cf IEEE Std 802.11a-1999, pp. 14 Table 80) */
+	case 12:	return 0xb;
+	case 18:	return 0xf;
+	case 24:	return 0xa;
+	case 36:	return 0xe;
+	case 48:	return 0x9;
+	case 72:	return 0xd;
+	case 96:	return 0x8;
+	case 108:	return 0xc;
+
+	/* CCK rates (NB: not IEEE std, device-specific) */
+	case 2:		return 0x0;
+	case 4:		return 0x1;
+	case 11:	return 0x2;
+	case 22:	return 0x3;
+	}
+	return 0xff;		/* XXX unsupported/unknown rate */
+}
+
 static int
 zyd_tx_mgt(struct zyd_softc *sc, struct mbuf *m0, struct ieee80211_node *ni)
 {
@@ -2123,7 +2147,7 @@
 	    (IEEE80211_FC0_TYPE_CTL | IEEE80211_FC0_SUBTYPE_PS_POLL))
 		desc->flags |= ZYD_TX_FLAG_TYPE(ZYD_TX_TYPE_PS_POLL);
 
-	desc->phy = ieee80211_rate2plcp(rate);
+	desc->phy = zyd_plcp_signal(rate);
 	if (ZYD_RATE_IS_OFDM(rate)) {
 		desc->phy |= ZYD_TX_PHY_OFDM;
 		if (IEEE80211_IS_CHAN_5GHZ(ic->ic_curchan))
@@ -2294,7 +2318,7 @@
 	    (IEEE80211_FC0_TYPE_CTL | IEEE80211_FC0_SUBTYPE_PS_POLL))
 		desc->flags |= ZYD_TX_FLAG_TYPE(ZYD_TX_TYPE_PS_POLL);
 
-	desc->phy = ieee80211_rate2plcp(rate);
+	desc->phy = zyd_plcp_signal(rate);
 	if (ZYD_RATE_IS_OFDM(rate)) {
 		desc->phy |= ZYD_TX_PHY_OFDM;
 		if (IEEE80211_IS_CHAN_5GHZ(ic->ic_curchan))


More information about the p4-projects mailing list