PERFORCE change 114930 for review

Sam Leffler sam at FreeBSD.org
Fri Feb 23 23:35:33 UTC 2007


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

Change 114930 by sam at sam_ebb on 2007/02/23 23:34:40

	Cleanups:
	o nuke sc_half_rates and sc_quarter_rates; don't need 'em
	o fix type punning that gcc 4.x barfs on
	o kill trailing whitespace
	o remove redundant merge cruft
	
	and one fix:
	o properly reclaim tx frags on error
	Obtained from:	netbsd (tx frag reclaim fix)

Affected files ...

.. //depot/projects/wifi/sys/dev/ath/if_ath.c#134 edit
.. //depot/projects/wifi/sys/dev/ath/if_athvar.h#53 edit

Differences ...

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

@@ -430,7 +430,7 @@
 	if (!ath_tx_setup(sc, WME_AC_BE, HAL_WME_AC_BE) ||
 	    !ath_tx_setup(sc, WME_AC_VI, HAL_WME_AC_VI) ||
 	    !ath_tx_setup(sc, WME_AC_VO, HAL_WME_AC_VO)) {
-		/* 
+		/*
 		 * Not enough hardware tx queues to properly do WME;
 		 * just punt and assign them all to the same h/w queue.
 		 * We could do a better job of this if, for example,
@@ -446,7 +446,7 @@
 		sc->sc_ac2q[WME_AC_VO] = sc->sc_ac2q[WME_AC_BK];
 	}
 
-	/* 
+	/*
 	 * Special case certain configurations.  Note the
 	 * CAB queue is handled by these specially so don't
 	 * include them when checking the txq setup mask.
@@ -883,6 +883,7 @@
 	struct ifnet *ifp = sc->sc_ifp;
 	u_int32_t *state;
 	u_int32_t len;
+	void *sp;
 
 	if_printf(ifp, "hardware error; resetting\n");
 	/*
@@ -890,8 +891,9 @@
 	 * are caused by DMA errors.  Collect h/w state from
 	 * the hal so we can diagnose what's going on.
 	 */
-	if (ath_hal_getfatalstate(sc->sc_ah, &state, &len)) {
+	if (ath_hal_getfatalstate(sc->sc_ah, &sp, &len)) {
 		KASSERT(len >= 6*sizeof(u_int32_t), ("len %u bytes", len));
+		state = sp;
 		if_printf(ifp, "0x%08x 0x%08x 0x%08x, 0x%08x 0x%08x 0x%08x\n",
 		    state[0], state[1] , state[2], state[3],
 		    state[4], state[5]);
@@ -1182,14 +1184,14 @@
 	sc->sc_diversity = ath_hal_getdiversity(ah);
 	sc->sc_calinterval = 1;
 	sc->sc_caltries = 0;
+	if (ath_startrecv(sc) != 0)	/* restart recv */
+		if_printf(ifp, "%s: unable to start recv logic\n", __func__);
 	/*
 	 * We may be doing a reset in response to an ioctl
 	 * that changes the channel so update any state that
 	 * might change as a result.
 	 */
 	ath_chan_change(sc, ic->ic_curchan);
-	if (ath_startrecv(sc) != 0)	/* restart recv */
-		if_printf(ifp, "%s: unable to start recv logic\n", __func__);
 	if (ic->ic_state == IEEE80211_S_RUN)
 		ath_beacon_config(sc);	/* restart beacons */
 	ath_intrset(sc, sc->sc_imask);
@@ -1622,7 +1624,7 @@
 				break;
 			}
 			STAILQ_INIT(&frags);
-			/* 
+			/*
 			 * Find the node for the destination so we can do
 			 * things like power save and fast frames aggregation.
 			 */
@@ -1702,7 +1704,7 @@
 				goto bad;
 			}
 			/*
-			 * Check for fragmentation.  If this has frame
+			 * Check for fragmentation.  If this frame
 			 * has been broken up verify we have enough
 			 * buffers to send all the fragments so all
 			 * go out or none...
@@ -2924,7 +2926,7 @@
 		if (bs.bs_sleepduration > bs.bs_dtimperiod)
 			bs.bs_sleepduration = roundup(bs.bs_sleepduration, bs.bs_dtimperiod);
 
-		DPRINTF(sc, ATH_DEBUG_BEACON, 
+		DPRINTF(sc, ATH_DEBUG_BEACON,
 			"%s: tsf %ju tsf:tu %u intval %u nexttbtt %u dtim %u nextdtim %u bmiss %u sleep %u cfp:period %u maxdur %u next %u timoffset %u\n"
 			, __func__
 			, tsf, tsftu
@@ -3510,7 +3512,7 @@
 				bf->bf_daddr, PA2DESC(sc, ds->ds_link), rs);
 #ifdef ATH_DEBUG
 		if (sc->sc_debug & ATH_DEBUG_RECV_DESC)
-			ath_printrxbuf(bf, 0, status == HAL_OK); 
+			ath_printrxbuf(bf, 0, status == HAL_OK);
 #endif
 		if (status == HAL_EINPROGRESS)
 			break;
@@ -3843,7 +3845,7 @@
 	ath_hal_gettxqueueprops(ah, txq->axq_qnum, &qi);
 	qi.tqi_aifs = wmep->wmep_aifsn;
 	qi.tqi_cwmin = ATH_EXPONENT_TO_VALUE(wmep->wmep_logcwmin);
-	qi.tqi_cwmax = ATH_EXPONENT_TO_VALUE(wmep->wmep_logcwmax);	
+	qi.tqi_cwmax = ATH_EXPONENT_TO_VALUE(wmep->wmep_logcwmax);
 	qi.tqi_burstTime = ATH_TXOP_TO_US(wmep->wmep_txopLimit);
 
 	if (!ath_hal_settxqueueprops(ah, txq->axq_qnum, &qi)) {
@@ -4032,7 +4034,7 @@
 		bf->bf_nseg = ATH_TXDESC+1;
 	} else if (error != 0) {
 		sc->sc_stats.ast_tx_busdma++;
-		m_freem(m0);
+		ath_freetx(m0);
 		return error;
 	}
 	/*
@@ -4044,7 +4046,7 @@
 		sc->sc_stats.ast_tx_linear++;
 		m = ath_defrag(m0, M_DONTWAIT, ATH_TXDESC);
 		if (m == NULL) {
-			m_freem(m0);
+			ath_freetx(m0);
 			sc->sc_stats.ast_tx_nombuf++;
 			return ENOMEM;
 		}
@@ -4054,14 +4056,14 @@
 					     BUS_DMA_NOWAIT);
 		if (error != 0) {
 			sc->sc_stats.ast_tx_busdma++;
-			m_freem(m0);
+			ath_freetx(m0);
 			return error;
 		}
 		KASSERT(bf->bf_nseg <= ATH_TXDESC,
 		    ("too many segments after defrag; nseg %u", bf->bf_nseg));
 	} else if (bf->bf_nseg == 0) {		/* null packet, discard */
 		sc->sc_stats.ast_tx_nodata++;
-		m_freem(m0);
+		ath_freetx(m0);
 		return EIO;
 	}
 	DPRINTF(sc, ATH_DEBUG_XMIT, "%s: m %p len %u\n",
@@ -4498,7 +4500,7 @@
 			&sc->sc_tx_th, sc->sc_tx_th_len, m0);
 	}
 
-	/* 
+	/*
 	 * Determine if a tx interrupt should be generated for
 	 * this descriptor.  We take a tx interrupt to reap
 	 * descriptors when the h/w hits an EOL condition or
@@ -5145,8 +5147,6 @@
 		DPRINTF(sc, ATH_DEBUG_CALIBRATE,
 			"%s: rfgain change\n", __func__);
 		sc->sc_stats.ast_per_rfgain++;
-		DPRINTF(sc, ATH_DEBUG_CALIBRATE,
-			"%s: rfgain change\n", __func__);
 		ath_reset(sc->sc_ifp);
 	}
 	if (!ath_hal_calibrate(ah, &sc->sc_curchan, &iqCalDone)) {
@@ -5155,10 +5155,13 @@
 			__func__, sc->sc_curchan.channel);
 		sc->sc_stats.ast_per_calfail++;
 	}
+	/*
+	 * Calibrate noise floor data again in case of change.
+	 */
 	ath_hal_process_noisefloor(ah);
 	/*
 	 * Poll more frequently when the IQ calibration is in
-	 * progress to speedup loading the final settings. 
+	 * progress to speedup loading the final settings.
 	 * We temper this aggressive polling with an exponential
 	 * back off after 4 tries up to ath_calinterval.
 	 */
@@ -5590,7 +5593,7 @@
 		ath_hal_gettxpowlimit(ah, &txpow);
 		ic->ic_txpowlimit = sc->sc_curtxpow = txpow;
 	}
-	/* 
+	/*
 	 * Fetch max tx power level for status requests.
 	 */
 	ath_hal_getmaxtxpow(sc->sc_ah, &txpow);
@@ -5885,8 +5888,6 @@
 		sc->sc_stats.ast_rx_packets = ifp->if_ipackets;
 		ieee80211_getsignal(ic, &sc->sc_stats.ast_rx_rssi,
 			&sc->sc_stats.ast_rx_noise);
-		sc->sc_stats.ast_rx_noise =
-			ath_hal_getchannoise(sc->sc_ah, &sc->sc_curchan);
 		sc->sc_stats.ast_tx_rate = sc->sc_hwmap[sc->sc_txrate].ieeerate;
 		ATH_UNLOCK(sc);
 		/*

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

@@ -230,8 +230,6 @@
 #define	IEEE80211_MODE_HALF	(IEEE80211_MODE_MAX+0)
 #define	IEEE80211_MODE_QUARTER	(IEEE80211_MODE_MAX+1)
 	const HAL_RATE_TABLE	*sc_rates[IEEE80211_MODE_MAX+2];
-	const HAL_RATE_TABLE	*sc_half_rates;	/* half rate table */
-	const HAL_RATE_TABLE	*sc_quarter_rates;/* quarter rate table */
 	const HAL_RATE_TABLE	*sc_currates;	/* current rate table */
 	enum ieee80211_phymode	sc_curmode;	/* current phy mode */
 	HAL_OPMODE		sc_opmode;	/* current operating mode */
@@ -450,7 +448,7 @@
 	((*(_ah)->ah_getDiagState)((_ah), (_id), \
 		(_indata), (_insize), (_outdata), (_outsize)))
 #define	ath_hal_getfatalstate(_ah, _outdata, _outsize) \
-	ath_hal_getdiagstate(_ah, 29, NULL, 0, (void **)(_outdata), _outsize)
+	ath_hal_getdiagstate(_ah, 29, NULL, 0, (_outdata), _outsize)
 #define	ath_hal_setuptxqueue(_ah, _type, _irq) \
 	((*(_ah)->ah_setupTxQueue)((_ah), (_type), (_irq)))
 #define	ath_hal_resettxqueue(_ah, _q) \


More information about the p4-projects mailing list