K 10 svn:author V 6 adrian K 8 svn:date V 27 2011-08-20T06:08:31.167725Z K 7 svn:log V 2068 Another combined diff - partly debugging, partly implementing more aggregation related stuff. Debugging/enforcing (which I'll likely remove at some point, or at least make optional): * Remove ath_buf's from the aggregate list - ie, blank bf->bf_next - when they've been handled and they're being requeued or completed. * Print out a message ath_tx_default_comp() if the ath_buf in question is still on an aggregation list. * Check whether the number of buffers handled in the aggregate frame completion or aggregate frame error functions match the number of frames -in- the aggregate buffer list. Print out an error if this isn't the case. Aggregation changes: * Fill out the rest of the ath_rc_series fields in the ath_buf - max4msframelen and the flags fields. This is done after the rate control decisions have been made in the (raw, normal) TX path. Later on, this will be pushed into the rate control module and then, much later on, it'll be pushed into net80211. * Implement the rest of the ampdu delimiter calculation code. The ampdu density figure, negotiated in STA mode and configured in hostap mode, is enforced when calculating delimiter counts. It uses the "fastest" rate (ie, the first one) to calculate how long a frame will be (in bytes) at the given rate/config, and then enforces that the configured delimiter count matches at least -that- length. If a sub-frame length is smaller than the configured mpdudensity, the delimiter count is the minimum density, rather than soley based on the frame count. * Implement a very simple function to return the maximum frame length for 4ms, based on the slowest rate. If the rate control returns a set of rate series rather than a single one, the aggregate may end up being transmitted at the slowest rather than the fastest. A lot of stuff that has been shoehorned into if_ath_tx_ht.c should likely live elsewhere, including the HAL and net80211. I'll worry about where to place all of this once the code is (more) stable. Obtained from: Atheros, Linux ath9k END