static int TeleInt_card_msg(struct IsdnCardState *cs, int mt, void *arg) { switch (mt) { case CARD_RESET: reset_TeleInt(cs); return(0); case CARD_RELEASE: release_io_TeleInt(cs); return(0); case CARD_INIT: inithfc(cs); clear_pending_isac_ints(cs); initisac(cs); /* Reenable all IRQ */ cs->writeisac(cs, ISAC_MASK, 0); cs->writeisac(cs, ISAC_CMDR, 0x41); cs->hw.hfc.timer.expires = jiffies + 1; add_timer(&cs->hw.hfc.timer); return(0); case CARD_TEST: return(0); } return(0); }
static int TeleInt_card_msg(struct IsdnCardState *cs, int mt, void *arg) { u_long flags; int delay; switch (mt) { case CARD_RESET: spin_lock_irqsave(&cs->lock, flags); reset_TeleInt(cs); spin_unlock_irqrestore(&cs->lock, flags); return(0); case CARD_RELEASE: release_io_TeleInt(cs); return(0); case CARD_INIT: spin_lock_irqsave(&cs->lock, flags); reset_TeleInt(cs); inithfc(cs); clear_pending_isac_ints(cs); initisac(cs); /* Reenable all IRQ */ cs->writeisac(cs, ISAC_MASK, 0); cs->writeisac(cs, ISAC_CMDR, 0x41); spin_unlock_irqrestore(&cs->lock, flags); delay = HZ/100; if (!delay) delay = 1; cs->hw.hfc.timer.expires = jiffies + delay; add_timer(&cs->hw.hfc.timer); return(0); case CARD_TEST: return(0); } return(0); }