K 10 svn:author V 6 adrian K 8 svn:date V 27 2011-09-11T16:42:03.837792Z K 7 svn:log V 1472 Fix up the InterReq flag in the TX descriptor; and always set it when doing aggregate frame TX. It turns out that the AR5416 (and AR5212!) seems to want the InterReq flag to be consistently set in all descriptors in the given frame. This is what the datasheet says. Both linux ath9k and the reference driver (at least when under linux) seem to get away without this HAL change because the TX (sub) frame is only ever one skb in length. Thus the intermediary frames never needed this bit set. FreeBSD's implementation here involves TX'ing mbuf chains, so each descriptor in the subframe now needs this flag set consistently. Secondly, always set the InterReq flag (HAL_TXDESC_INTREQ) on all subframes in an aggregate - the interrupt mitigation hardware (for AR5416 and later, but not AR9130) will handle limiting TX interrupts for us. This is in line with what ath9k does. Although I haven't tested this change separate from the stuff I'm about to commit, this change was the final change needed to fix the odd TX hangs I was seeing, where a TXQ would complete but no TX interrupt occured. This wouldn't matter in the past as a subsequent TX (any TX!) would have been enough to kick the queue along. Without it, I'd get occasional device timeouts even though the TXQ consisted of a frame (aggregate or otherwise) whose status descriptor indicated it was completed. Whilst I'm here, do the same for the AR5212 - the AR5213 datasheet indicates much the same is needed. END