PERFORCE change 142399 for review

Sam Leffler sam at FreeBSD.org
Tue May 27 18:51:00 UTC 2008


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

Change 142399 by sam at sam_ebb on 2008/05/27 18:50:10

	Simplify softled support a bit:
	o eliminate ATH_LED_* enum, just pass the rate index in, the work
	  is the same regardless and eliminates the need for sc_rxrate
	o record the tx rate index instead of the rate code; when 11n
	  support shows up we'll be dealing with indices anyway

Affected files ...

.. //depot/projects/vap/sys/dev/ath/if_ath.c#80 edit
.. //depot/projects/vap/sys/dev/ath/if_athvar.h#26 edit

Differences ...

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

@@ -114,12 +114,6 @@
 	 ((((u_int8_t *)(p))[0]      ) | (((u_int8_t *)(p))[1] <<  8) |	\
 	  (((u_int8_t *)(p))[2] << 16) | (((u_int8_t *)(p))[3] << 24)))
 
-enum {
-	ATH_LED_TX,
-	ATH_LED_RX,
-	ATH_LED_POLL,
-};
-
 static struct ieee80211vap *ath_vap_create(struct ieee80211com *,
 		    const char name[IFNAMSIZ], int unit, int opmode,
 		    int flags, const uint8_t bssid[IEEE80211_ADDR_LEN],
@@ -3864,7 +3858,7 @@
 {
 #define	CHANNEL_HT	(CHANNEL_HT20|CHANNEL_HT40PLUS|CHANNEL_HT40MINUS)
 	struct ath_softc *sc = ifp->if_softc;
-	u_int8_t rix;
+	uint8_t rxrate;
 
 	/*
 	 * Discard anything shorter than an ack or cts.
@@ -3875,9 +3869,9 @@
 		sc->sc_stats.ast_rx_tooshort++;
 		return 0;
 	}
-	rix = rs->rs_rate;
-	sc->sc_rx_th.wr_rate = sc->sc_hwmap[rix].ieeerate;
-	sc->sc_rx_th.wr_flags = sc->sc_hwmap[rix].rxflags;
+	rxrate = rs->rs_rate;
+	sc->sc_rx_th.wr_rate = sc->sc_hwmap[rxrate].ieeerate;
+	sc->sc_rx_th.wr_flags = sc->sc_hwmap[rxrate].rxflags;
 #if HAL_ABI_VERSION >= 0x07050400
 	if (sc->sc_curchan.channelFlags & CHANNEL_HT) {
 		/*
@@ -4199,10 +4193,11 @@
 			 * periodic beacon frames to trigger the poll event.
 			 */
 			if (type == IEEE80211_FC0_TYPE_DATA) {
-				sc->sc_rxrate = rs->rs_rate;
-				ath_led_event(sc, ATH_LED_RX);
+				const HAL_RATE_TABLE *rt = sc->sc_currates;
+				ath_led_event(sc, 
+				    rt->rateCodeToIndex[rs->rs_rate]);
 			} else if (ticks - sc->sc_ledevent >= sc->sc_ledidle)
-				ath_led_event(sc, ATH_LED_POLL);
+				ath_led_event(sc, 0);
 		}
 rx_next:
 		STAILQ_INSERT_TAIL(&sc->sc_rxbuf, bf, bf_list);
@@ -4723,7 +4718,7 @@
 		} else {
 			ath_rate_findrate(sc, an, shortPreamble, pktlen,
 				&rix, &try0, &txrate);
-			sc->sc_txrate = txrate;		/* for LED blinking */
+			sc->sc_txrix = rix;		/* for LED blinking */
 			sc->sc_lastdatarix = rix;	/* for fast frames */
 			if (try0 != ATH_TXMAXTRY)
 				ismrr = 1;
@@ -5103,7 +5098,7 @@
 	ifp->if_timer = 0;
 
 	if (sc->sc_softled)
-		ath_led_event(sc, ATH_LED_TX);
+		ath_led_event(sc, sc->sc_txrix);
 
 	ath_start(ifp);
 }
@@ -5140,7 +5135,7 @@
 	ifp->if_timer = 0;
 
 	if (sc->sc_softled)
-		ath_led_event(sc, ATH_LED_TX);
+		ath_led_event(sc, sc->sc_txrix);
 
 	ath_start(ifp);
 }
@@ -5169,7 +5164,7 @@
 	ifp->if_timer = 0;
 
 	if (sc->sc_softled)
-		ath_led_event(sc, ATH_LED_TX);
+		ath_led_event(sc, sc->sc_txrix);
 
 	ath_start(ifp);
 }
@@ -6047,26 +6042,16 @@
 }
 
 static void
-ath_led_event(struct ath_softc *sc, int event)
+ath_led_event(struct ath_softc *sc, int rix)
 {
+	uint8_t code;
 
 	sc->sc_ledevent = ticks;	/* time of last event */
 	if (sc->sc_blinking)		/* don't interrupt active blink */
 		return;
-	switch (event) {
-	case ATH_LED_POLL:
-		ath_led_blink(sc, sc->sc_hwmap[0].ledon,
-			sc->sc_hwmap[0].ledoff);
-		break;
-	case ATH_LED_TX:
-		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_hwmap[sc->sc_rxrate].ledon,
-			sc->sc_hwmap[sc->sc_rxrate].ledoff);
-		break;
-	}
+	/* temp write-around before we change sc_hwmap */
+	code = sc->sc_currates->info[rix].rateCode;
+	ath_led_blink(sc, sc->sc_hwmap[code].ledon, sc->sc_hwmap[code].ledoff);
 }
 
 static int
@@ -6318,6 +6303,7 @@
 	struct ath_softc *sc = ifp->if_softc;
 	struct ieee80211com *ic = ifp->if_l2com;
 	struct ifreq *ifr = (struct ifreq *)data;
+	const HAL_RATE_TABLE *rt;
 	int error = 0;
 
 	switch (cmd) {
@@ -6364,7 +6350,8 @@
 		ieee80211_getsignal(ic, &sc->sc_stats.ast_rx_rssi,
 			&sc->sc_stats.ast_rx_noise);
 #endif
-		sc->sc_stats.ast_tx_rate = sc->sc_hwmap[sc->sc_txrate].ieeerate;
+		rt = sc->sc_currates;
+		sc->sc_stats.ast_tx_rate = rt->info[sc->sc_txrix].dot11Rate;
 		return copyout(&sc->sc_stats,
 		    ifr->ifr_data, sizeof (sc->sc_stats));
 #ifdef ATH_DIAGAPI
@@ -6843,7 +6830,7 @@
 	txrate = rt->info[rix].rateCode;
 	if (params->ibp_flags & IEEE80211_BPF_SHORTPRE)
 		txrate |= rt->info[rix].shortPreamble;
-	sc->sc_txrate = txrate;
+	sc->sc_txrix = rix;
 	try0 = params->ibp_try0;
 	ismrr = (params->ibp_try1 != 0);
 	txantenna = params->ibp_pri >> 2;

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

@@ -282,8 +282,7 @@
 	u_int			sc_ledon;	/* pin setting for LED on */
 	u_int			sc_ledidle;	/* idle polling interval */
 	int			sc_ledevent;	/* time of last LED event */
-	u_int8_t		sc_rxrate;	/* current rx rate for LED */
-	u_int8_t		sc_txrate;	/* current tx rate for LED */
+	u_int8_t		sc_txrix;	/* current tx rate for LED */
 	u_int16_t		sc_ledoff;	/* off time for current blink */
 	struct callout		sc_ledtimer;	/* led off timer */
 


More information about the p4-projects mailing list