}
-static bool
-brcms_b_dotxstatus(struct brcms_hardware *wlc_hw, struct tx_status *txs)
-{
- /* discard intermediate indications for ucode with one legitimate case:
- * e.g. if "useRTS" is set. ucode did a successful rts/cts exchange,
- * but the subsequent tx of DATA failed. so it will start rts/cts from
- * the beginning (resetting the rts transmission count)
- */
- if (!(txs->status & TX_STATUS_AMPDU)
- && (txs->status & TX_STATUS_INTERMEDIATE))
- return false;
-
- return brcms_c_dotxstatus(wlc_hw->wlc, txs);
-}
-
/* process tx completion events in BMAC
* Return true if more tx status need to be processed. false otherwise.
*/
txs = &txstatus;
regs = wlc_hw->regs;
+ *fatal = false;
while (!(*fatal)
&& (s1 = R_REG(®s->frmtxstatus)) & TXS_V) {
return morepending;
}
- s2 = R_REG(®s->frmtxstatus2);
+ s2 = R_REG(®s->frmtxstatus2);
txs->status = s1 & TXS_STATUS_MASK;
txs->frameid = (s1 & TXS_FID_MASK) >> TXS_FID_SHIFT;
txs->phyerr = (s2 & TXS_PTX_MASK) >> TXS_PTX_SHIFT;
txs->lasttxtime = 0;
- *fatal = brcms_b_dotxstatus(wlc_hw, txs);
+ *fatal = brcms_c_dotxstatus(wlc_hw->wlc, txs);
/* !give others some time to run! */
if (++n >= max_tx_num)
u32 macintstatus;
struct brcms_hardware *wlc_hw = wlc->hw;
struct d11regs __iomem *regs = wlc_hw->regs;
- bool fatal = false;
struct wiphy *wiphy = wlc->wiphy;
if (brcms_deviceremoved(wlc)) {
/* tx status */
if (macintstatus & MI_TFS) {
+ bool fatal;
if (brcms_b_txstatus(wlc->hw, bounded, &fatal))
wlc->macintstatus |= MI_TFS;
if (fatal) {