K 10 svn:author V 6 adrian K 8 svn:date V 27 2011-08-17T09:02:58.207676Z K 7 svn:log V 1688 This is another "too much going on in one commit for my own good" commits. The stuff in progress, which shouldn't affect anything: * Begin fleshing out the aggregate list creation function, untested * Rename some of the aggregate response functions to indicate they're handling individual, non-aggregate frames when in aggregation mode. * make ath_tx_aggr_comp() now call either the aggr_comp_aggr() for an aggregate frame list, or aggr_comp_unaggr() for a single frame. The important change which could break things, but is needed: * add ath_buf->bf_lastds, which points to the descriptor in the last frame in the list. Now, the reasoning. The TX descriptor status is in the _last_ descriptor in a list. For a single frame w/ a single TX descriptor, it's also the first descriptor. For a single frame w/ multiple TX descriptors, it's the last descriptor in the frame. For an aggregate list w/ multiple TX descriptors, it's the first descriptor in the -last- subframe. Ie, NOT the very last descriptor. The (upcoming) aggregate scheduling function will thus have to set ds->lastds to the first descriptor in the last buffer. The point is, bf->bf_lastds needs to be correct for setting the rate control stuff (which uses bf_lastds to hide a copy of the rate information in the last descriptor in the chain) and for completion status checking. TODO: although linux and the reference code seem to use the above, I really should double-check that this is correct before trying to TX aggregate frames. TODO: see whether that use of lastds in ath_buf_set_rate() is needed for the hardware, or for hiding a copy of the rate settings used, to be used by the rate control code. END