static inline void jade_int_main(struct IsdnCardState *cs, u_char val, int jade) { struct BCState *bcs; bcs = cs->bcs + jade; if (val & jadeISR_RFO) { /* handled with RDO */ val &= ~jadeISR_RFO; } if (val & jadeISR_XDU) { /* relevant in HDLC mode only */ /* don't reset XPR here */ if (bcs->mode == 1) jade_fill_fifo(bcs); else { /* Here we lost an TX interrupt, so * restart transmitting the whole frame. */ if (bcs->tx_skb) { skb_push(bcs->tx_skb, bcs->hw.hscx.count); bcs->tx_cnt += bcs->hw.hscx.count; bcs->hw.hscx.count = 0; } WriteJADECMDR(cs, bcs->hw.hscx.hscx, jade_HDLC_XCMD, jadeXCMD_XRES); if (cs->debug & L1_DEB_WARN) debugl1(cs, "JADE %c EXIR %x Lost TX", 'A' + jade, val); } } if (val & (jadeISR_RME | jadeISR_RPF | jadeISR_XPR)) { if (cs->debug & L1_DEB_HSCX) debugl1(cs, "JADE %c interrupt %x", 'A' + jade, val); jade_interrupt(cs, val, jade); } }
static inline void jade_int_main(struct IsdnCardState *cs, u_char val, int jade) { struct BCState *bcs; bcs = cs->bcs + jade; if (val & jadeISR_RFO) { val &= ~jadeISR_RFO; } if (val & jadeISR_XDU) { if (bcs->mode == 1) jade_fill_fifo(bcs); else { if (bcs->tx_skb) { skb_push(bcs->tx_skb, bcs->hw.hscx.count); bcs->tx_cnt += bcs->hw.hscx.count; bcs->hw.hscx.count = 0; } WriteJADECMDR(cs, bcs->hw.hscx.hscx, jade_HDLC_XCMD, jadeXCMD_XRES); if (cs->debug & L1_DEB_WARN) debugl1(cs, "JADE %c EXIR %x Lost TX", 'A'+jade, val); } } if (val & (jadeISR_RME|jadeISR_RPF|jadeISR_XPR)) { if (cs->debug & L1_DEB_HSCX) debugl1(cs, "JADE %c interrupt %x", 'A'+jade, val); jade_interrupt(cs, val, jade); } }