K 10 svn:author V 6 adrian K 8 svn:date V 27 2011-08-03T07:00:55.748823Z K 7 svn:log V 1356 Do a majorish rework of the software TX queue handling. * Eliminate the per-node lock, it was annoying and is mostly unneeded just for now * Eliminate the per-node list of active TX nodes * Add a per-TID list of active TX nodes, linked off of the hardware ath_txq * Sprinkle lots of lock assertions around to make sure I've got things locked in the right places. The major locking change here is inspired by what the older reference code does. Here, the locking for the per-TID stuff is hidden behind that hardware TXQ, rather than having per-node and per-TID locks. It's more coarse grained but it'll be enough to get the code bootstrapped. I'll worry about more fine-grained locking later on once the rest of this first pass has been completed. Note - the freebsd TX processq function only locks the hardware TXQ as long as it needs to add/remove buffers from it. The reference code grabs the lock and holds it for as long as the processing takes. This means that the completion function also hides behind the same lock as the setup/queue functions. I'll likely do that in a subsequent commit. Note - I'm not properly pausing or unpausing the tid when ADDBA is in progress, I'm just not TX'ing on it. I'll worry about the pause/unpause later on. This just means that extra CPU is burnt during ADDBA exchange. Obtained from: Atheros END