K 10 svn:author V 6 adrian K 8 svn:date V 27 2011-09-20T04:20:55.598997Z K 7 svn:log V 1879 Undo the BAR TX stuff (as it's broken); correct what the new LH edge of the BAW should be. The BAR TX stuff I committed earlier is just plain wrong. What should happen is this (in ADDBA mode): * If a software retransmit completely fails, all TX for that given TID should be paused until all existing TXes for said TID are completed (failed or not); * Once all the hardware-queued transmissions are completed, the left-hand edge of the BAW (from the TX point of view) should be correct. Ie, there may be further packets queued in the software TX queue, but the left-hand edge of the BAW will point to one frame past the last hardware-queued frame (again, successful or not, it doesn't matter.) * At that point, a BAR should be sent reflecting what the new BAW left hand edge is. * Once that's been received, TX on the given TID should resume. * If it fails, net80211 will cancel the addba session for us; we just need to resume TX'ing on the TID anyway (newly downgraded to non-aggregation.) Now, the things to keep in mind when implementing the correct-er solution: * There may be plenty of outstanding frames on the hardware TX queue, so you can't just send one BAR for each of those. * Whilst the BAR is being TXed, the node may be reset; this SHOULD correctly be handled (ie, cancelling the frame will cause net80211 to reschedule another one) * You can't just call pause() and resume() like I was doing, as multiple outstanding frames may be on the hardware queue (and multiples ones may fail.) A new method of marking a TID as "BAR pending" needs to be added first. That way the TID can be paused and unpaused a total of once, no matter how many outstanding frames fail before the TID has no more frames on the hardware queue. * Finally, this all only works if tid->hwq_depth is completely accurate. This needs to be verified! END