static int hfcs_card_msg(struct IsdnCardState *cs, int mt, void *arg) { long flags; if (cs->debug & L1_DEB_ISAC) debugl1(cs, "HFCS: card_msg %x", mt); switch (mt) { case CARD_RESET: reset_hfcs(cs); return(0); case CARD_RELEASE: release_io_hfcs(cs); return(0); case CARD_INIT: cs->hw.hfcD.timer.expires = jiffies + 75; add_timer(&cs->hw.hfcD.timer); init2bds0(cs); save_flags(flags); sti(); set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout((80*HZ)/1000); cs->hw.hfcD.ctmt |= HFCD_TIM800; cs->BC_Write_Reg(cs, HFCD_DATA, HFCD_CTMT, cs->hw.hfcD.ctmt); cs->BC_Write_Reg(cs, HFCD_DATA, HFCD_MST_MODE, cs->hw.hfcD.mst_m); restore_flags(flags); return(0); case CARD_TEST: return(0); } return(0); }
static int hfcs_card_msg(struct IsdnCardState *cs, int mt, void *arg) { u_long flags; int delay; if (cs->debug & L1_DEB_ISAC) debugl1(cs, "HFCS: card_msg %x", mt); switch (mt) { case CARD_RESET: spin_lock_irqsave(&cs->lock, flags); reset_hfcs(cs); spin_unlock_irqrestore(&cs->lock, flags); return(0); case CARD_RELEASE: release_io_hfcs(cs); return(0); case CARD_INIT: delay = (75*HZ)/100 +1; cs->hw.hfcD.timer.expires = jiffies + delay; add_timer(&cs->hw.hfcD.timer); spin_lock_irqsave(&cs->lock, flags); reset_hfcs(cs); init2bds0(cs); spin_unlock_irqrestore(&cs->lock, flags); delay = (80*HZ)/1000 +1; msleep(80); spin_lock_irqsave(&cs->lock, flags); cs->hw.hfcD.ctmt |= HFCD_TIM800; cs->BC_Write_Reg(cs, HFCD_DATA, HFCD_CTMT, cs->hw.hfcD.ctmt); cs->BC_Write_Reg(cs, HFCD_DATA, HFCD_MST_MODE, cs->hw.hfcD.mst_m); spin_unlock_irqrestore(&cs->lock, flags); return(0); case CARD_TEST: return(0); } return(0); }