static void d_retransmit(struct w6692_hw *card) { struct dchannel *dch = &card->dch; if (test_and_clear_bit(FLG_BUSY_TIMER, &dch->Flags)) del_timer(&dch->timer); #ifdef FIXME if (test_and_clear_bit(FLG_L1_BUSY, &dch->Flags)) dchannel_sched_event(dch, D_CLEARBUSY); #endif if (test_bit(FLG_TX_BUSY, &dch->Flags)) { dch->tx_idx = 0; W6692_fill_Dfifo(card); } else if (dch->tx_skb) { pr_info("%s: %s without TX_BUSY\n", card->name, __func__); test_and_set_bit(FLG_TX_BUSY, &dch->Flags); dch->tx_idx = 0; W6692_fill_Dfifo(card); } else { pr_info("%s: XDU no TX_BUSY\n", card->name); if (get_next_dframe(dch)) W6692_fill_Dfifo(card); } }
static void handle_txD(struct w6692_hw *card) { if (test_and_clear_bit(FLG_BUSY_TIMER, &card->dch.Flags)) del_timer(&card->dch.timer); if (card->dch.tx_skb && card->dch.tx_idx < card->dch.tx_skb->len) { W6692_fill_Dfifo(card); } else { if (card->dch.tx_skb) dev_kfree_skb(card->dch.tx_skb); if (get_next_dframe(&card->dch)) W6692_fill_Dfifo(card); } }
static void isac_xpr_irq(struct isac_hw *isac) { if (test_and_clear_bit(FLG_BUSY_TIMER, &isac->dch.Flags)) del_timer(&isac->dch.timer); if (isac->dch.tx_skb && isac->dch.tx_idx < isac->dch.tx_skb->len) { isac_fill_fifo(isac); } else { if (isac->dch.tx_skb) dev_kfree_skb(isac->dch.tx_skb); if (get_next_dframe(&isac->dch)) isac_fill_fifo(isac); } }
static void isac_retransmit(struct isac_hw *isac) { if (test_and_clear_bit(FLG_BUSY_TIMER, &isac->dch.Flags)) del_timer(&isac->dch.timer); if (test_bit(FLG_TX_BUSY, &isac->dch.Flags)) { /* Restart frame */ isac->dch.tx_idx = 0; isac_fill_fifo(isac); } else if (isac->dch.tx_skb) { /* should not happen */ pr_info("%s: tx_skb exist but not busy\n", isac->name); test_and_set_bit(FLG_TX_BUSY, &isac->dch.Flags); isac->dch.tx_idx = 0; isac_fill_fifo(isac); } else { pr_info("%s: ISAC XDU no TX_BUSY\n", isac->name); if (get_next_dframe(&isac->dch)) isac_fill_fifo(isac); } }