Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 Jan 2005 19:41:09 GMT
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 68219 for review
Message-ID:  <200501031941.j03Jf9ft045876@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=68219

Change 68219 by sam@sam_ebb on 2005/01/03 19:41:08

	combine separate arrays indexed by h/w rate ix into a
	single array of structures; appears to be no cost (code
	size goes down, no obvious performance diff)

Affected files ...

.. //depot/projects/wifi/sys/dev/ath/if_ath.c#54 edit
.. //depot/projects/wifi/sys/dev/ath/if_athvar.h#22 edit

Differences ...

==== //depot/projects/wifi/sys/dev/ath/if_ath.c#54 (text+ko) ====

@@ -2636,8 +2636,8 @@
 				goto rx_next;
 			}
 			rix = ds->ds_rxstat.rs_rate;
-			sc->sc_rx_th.wr_flags = sc->sc_hwflags[rix];
-			sc->sc_rx_th.wr_rate = sc->sc_hwmap[rix];
+			sc->sc_rx_th.wr_flags = sc->sc_hwmap[rix].flags;
+			sc->sc_rx_th.wr_rate = sc->sc_hwmap[rix].ieeerate;
 			sc->sc_rx_th.wr_antsignal = ds->ds_rxstat.rs_rssi;
 			sc->sc_rx_th.wr_antenna = ds->ds_rxstat.rs_antenna;
 			/* XXX TSF */
@@ -2685,7 +2685,7 @@
 
 		if (IFF_DUMPPKTS(sc, ATH_DEBUG_RECV)) {
 			ieee80211_dump_pkt(ic, mtod(m, caddr_t), len,
-				   sc->sc_hwmap[ds->ds_rxstat.rs_rate],
+				   sc->sc_hwmap[ds->ds_rxstat.rs_rate].ieeerate,
 				   ds->ds_rxstat.rs_rssi);
 		}
 
@@ -3237,15 +3237,15 @@
 
 	if (IFF_DUMPPKTS(sc, ATH_DEBUG_XMIT))
 		ieee80211_dump_pkt(ic, mtod(m0, caddr_t), m0->m_len,
-			sc->sc_hwmap[txrate], -1);
+			sc->sc_hwmap[txrate].ieeerate, -1);
 
 	if (ic->ic_rawbpf)
 		bpf_mtap(ic->ic_rawbpf, m0);
 	if (sc->sc_drvbpf) {
-		sc->sc_tx_th.wt_flags = sc->sc_hwflags[txrate];
+		sc->sc_tx_th.wt_flags = sc->sc_hwmap[txrate].flags;
 		if (iswep)
 			sc->sc_tx_th.wt_flags |= IEEE80211_RADIOTAP_F_WEP;
-		sc->sc_tx_th.wt_rate = sc->sc_hwmap[txrate];
+		sc->sc_tx_th.wt_rate = sc->sc_hwmap[txrate].ieeerate;
 		sc->sc_tx_th.wt_txpower = ni->ni_txpower;
 		sc->sc_tx_th.wt_antenna = sc->sc_txantenna;
 
@@ -4064,18 +4064,16 @@
 static void
 ath_led_event(struct ath_softc *sc, int event)
 {
-	struct ieee80211com *ic = &sc->sc_ic;
-
 	if (sc->sc_blinking)		/* don't interrupt active blink */
 		return;
 	switch (event) {
 	case ATH_LED_TX:
-		ath_led_blink(sc, sc->sc_hwledon[sc->sc_txrate],
-			sc->sc_hwledoff[sc->sc_txrate]);
+		ath_led_blink(sc, sc->sc_hwmap[sc->sc_txrate].ledon,
+			sc->sc_hwmap[sc->sc_txrate].ledoff);
 		break;
 	case ATH_LED_RX:
-		ath_led_blink(sc, sc->sc_hwledon[sc->sc_rxrate],
-			sc->sc_hwledoff[sc->sc_rxrate]);
+		ath_led_blink(sc, sc->sc_hwmap[sc->sc_rxrate].ledon,
+			sc->sc_hwmap[sc->sc_rxrate].ledoff);
 		break;
 	}
 }
@@ -4181,26 +4179,26 @@
 	for (i = 0; i < rt->rateCount; i++)
 		sc->sc_rixmap[rt->info[i].dot11Rate & IEEE80211_RATE_VAL] = i;
 	memset(sc->sc_hwmap, 0, sizeof(sc->sc_hwmap));
-	memset(sc->sc_hwflags, 0, sizeof(sc->sc_hwflags));
 	for (i = 0; i < 32; i++) {
 		u_int8_t ix = rt->rateCodeToIndex[i];
 		if (ix == 0xff) {
-			sc->sc_hwledon[i] = (500 * hz) / 1000;
-			sc->sc_hwledoff[i] = (130 * hz) / 1000;
+			sc->sc_hwmap[i].ledon = (500 * hz) / 1000;
+			sc->sc_hwmap[i].ledoff = (130 * hz) / 1000;
 			continue;
 		}
-		sc->sc_hwmap[i] = rt->info[ix].dot11Rate & IEEE80211_RATE_VAL;
+		sc->sc_hwmap[i].ieeerate =
+			rt->info[ix].dot11Rate & IEEE80211_RATE_VAL;
 		if (rt->info[ix].shortPreamble ||
 		    rt->info[ix].phy == IEEE80211_T_OFDM)
-			sc->sc_hwflags[i] |= IEEE80211_RADIOTAP_F_SHORTPRE;
+			sc->sc_hwmap[i].flags |= IEEE80211_RADIOTAP_F_SHORTPRE;
 		/* setup blink rate table to avoid per-packet lookup */
 		for (j = 0; j < N(blinkrates)-1; j++)
-			if (blinkrates[j].rate == sc->sc_hwmap[i])
+			if (blinkrates[j].rate == sc->sc_hwmap[i].ieeerate)
 				break;
 		/* NB: this uses the last entry if the rate isn't found */
 		/* XXX beware of overlow */
-		sc->sc_hwledon[i] = (blinkrates[j].timeOn * hz) / 1000;
-		sc->sc_hwledoff[i] = (blinkrates[j].timeOff * hz) / 1000;
+		sc->sc_hwmap[i].ledon = (blinkrates[j].timeOn * hz) / 1000;
+		sc->sc_hwmap[i].ledoff = (blinkrates[j].timeOff * hz) / 1000;
 	}
 	sc->sc_currates = rt;
 	sc->sc_curmode = mode;

==== //depot/projects/wifi/sys/dev/ath/if_athvar.h#22 (text+ko) ====

@@ -183,8 +183,12 @@
 	u_int16_t		sc_curtxpow;	/* current tx power limit */
 	HAL_CHANNEL		sc_curchan;	/* current h/w channel */
 	u_int8_t		sc_rixmap[256];	/* IEEE to h/w rate table ix */
-	u_int8_t		sc_hwmap[32];	/* h/w rate ix to IEEE table */
-	u_int8_t		sc_hwflags[32];	/* " " " to radiotap flags */
+	struct {
+		u_int8_t	ieeerate;	/* IEEE rate */
+		u_int8_t	flags;		/* radiotap flags */
+		u_int16_t	ledon;		/* softled on time */
+		u_int16_t	ledoff;		/* softled off time */
+	} sc_hwmap[32];				/* h/w rate ix mappings */
 	u_int8_t		sc_protrix;	/* protection rate index */
 	u_int			sc_txantenna;	/* tx antenna (fixed or auto) */
 	HAL_INT			sc_imask;	/* interrupt mask copy */
@@ -197,8 +201,6 @@
 	u_int8_t		sc_rxrate;	/* current rx rate for LED */
 	u_int8_t		sc_txrate;	/* current tx rate for LED */
 	u_int16_t		sc_ledoff;	/* off time for current blink */
-	u_int16_t		sc_hwledon[32];	/* h/w rate ix to LED on time */
-	u_int16_t		sc_hwledoff[32];/* " " " to LED off time */
 	struct callout		sc_ledtimer;	/* led off timer */
 
 	struct bpf_if		*sc_drvbpf;



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