Lines Matching refs:cs

51 W6692Version(struct IsdnCardState *cs, char *s)  in W6692Version()  argument
55 val = cs->readW6692(cs, W_D_RBCH); in W6692Version()
60 ph_command(struct IsdnCardState *cs, unsigned int command) in ph_command() argument
62 if (cs->debug & L1_DEB_ISAC) in ph_command()
63 debugl1(cs, "ph_command %x", command); in ph_command()
64 cs->writeisac(cs, W_CIX, command); in ph_command()
69 W6692_new_ph(struct IsdnCardState *cs) in W6692_new_ph() argument
71 switch (cs->dc.w6692.ph_state) { in W6692_new_ph()
73 ph_command(cs, W_L1CMD_DRC); in W6692_new_ph()
74 l1_msg(cs, HW_RESET | INDICATION, NULL); in W6692_new_ph()
77 l1_msg(cs, HW_DEACTIVATE | CONFIRM, NULL); in W6692_new_ph()
80 l1_msg(cs, HW_DEACTIVATE | INDICATION, NULL); in W6692_new_ph()
83 l1_msg(cs, HW_POWERUP | CONFIRM, NULL); in W6692_new_ph()
86 l1_msg(cs, HW_RSYNC | INDICATION, NULL); in W6692_new_ph()
89 l1_msg(cs, HW_INFO2 | INDICATION, NULL); in W6692_new_ph()
92 l1_msg(cs, HW_INFO4_P8 | INDICATION, NULL); in W6692_new_ph()
95 l1_msg(cs, HW_INFO4_P10 | INDICATION, NULL); in W6692_new_ph()
105 struct IsdnCardState *cs = in W6692_bh() local
109 if (test_and_clear_bit(D_CLEARBUSY, &cs->event)) { in W6692_bh()
110 if (cs->debug) in W6692_bh()
111 debugl1(cs, "D-Channel Busy cleared"); in W6692_bh()
112 stptr = cs->stlist; in W6692_bh()
118 if (test_and_clear_bit(D_L1STATECHANGE, &cs->event)) in W6692_bh()
119 W6692_new_ph(cs); in W6692_bh()
120 if (test_and_clear_bit(D_RCVBUFREADY, &cs->event)) in W6692_bh()
121 DChannel_proc_rcv(cs); in W6692_bh()
122 if (test_and_clear_bit(D_XMTBUFREADY, &cs->event)) in W6692_bh()
123 DChannel_proc_xmt(cs); in W6692_bh()
133 W6692_empty_fifo(struct IsdnCardState *cs, int count) in W6692_empty_fifo() argument
137 if ((cs->debug & L1_DEB_ISAC) && !(cs->debug & L1_DEB_ISAC_FIFO)) in W6692_empty_fifo()
138 debugl1(cs, "W6692_empty_fifo"); in W6692_empty_fifo()
140 if ((cs->rcvidx + count) >= MAX_DFRAME_LEN_L1) { in W6692_empty_fifo()
141 if (cs->debug & L1_DEB_WARN) in W6692_empty_fifo()
142 debugl1(cs, "W6692_empty_fifo overrun %d", in W6692_empty_fifo()
143 cs->rcvidx + count); in W6692_empty_fifo()
144 cs->writeW6692(cs, W_D_CMDR, W_D_CMDR_RACK); in W6692_empty_fifo()
145 cs->rcvidx = 0; in W6692_empty_fifo()
148 ptr = cs->rcvbuf + cs->rcvidx; in W6692_empty_fifo()
149 cs->rcvidx += count; in W6692_empty_fifo()
150 cs->readW6692fifo(cs, ptr, count); in W6692_empty_fifo()
151 cs->writeW6692(cs, W_D_CMDR, W_D_CMDR_RACK); in W6692_empty_fifo()
152 if (cs->debug & L1_DEB_ISAC_FIFO) { in W6692_empty_fifo()
153 char *t = cs->dlog; in W6692_empty_fifo()
157 debugl1(cs, "%s", cs->dlog); in W6692_empty_fifo()
162 W6692_fill_fifo(struct IsdnCardState *cs) in W6692_fill_fifo() argument
167 if ((cs->debug & L1_DEB_ISAC) && !(cs->debug & L1_DEB_ISAC_FIFO)) in W6692_fill_fifo()
168 debugl1(cs, "W6692_fill_fifo"); in W6692_fill_fifo()
170 if (!cs->tx_skb) in W6692_fill_fifo()
173 count = cs->tx_skb->len; in W6692_fill_fifo()
182 ptr = cs->tx_skb->data; in W6692_fill_fifo()
183 skb_pull(cs->tx_skb, count); in W6692_fill_fifo()
184 cs->tx_cnt += count; in W6692_fill_fifo()
185 cs->writeW6692fifo(cs, ptr, count); in W6692_fill_fifo()
186 cs->writeW6692(cs, W_D_CMDR, more ? W_D_CMDR_XMS : (W_D_CMDR_XMS | W_D_CMDR_XME)); in W6692_fill_fifo()
187 if (test_and_set_bit(FLG_DBUSY_TIMER, &cs->HW_Flags)) { in W6692_fill_fifo()
188 debugl1(cs, "W6692_fill_fifo dbusytimer running"); in W6692_fill_fifo()
189 del_timer(&cs->dbusytimer); in W6692_fill_fifo()
191 init_timer(&cs->dbusytimer); in W6692_fill_fifo()
192 cs->dbusytimer.expires = jiffies + ((DBUSY_TIMER_VALUE * HZ) / 1000); in W6692_fill_fifo()
193 add_timer(&cs->dbusytimer); in W6692_fill_fifo()
194 if (cs->debug & L1_DEB_ISAC_FIFO) { in W6692_fill_fifo()
195 char *t = cs->dlog; in W6692_fill_fifo()
199 debugl1(cs, "%s", cs->dlog); in W6692_fill_fifo()
207 struct IsdnCardState *cs = bcs->cs; in W6692B_empty_fifo() local
209 if ((cs->debug & L1_DEB_HSCX) && !(cs->debug & L1_DEB_HSCX_FIFO)) in W6692B_empty_fifo()
210 debugl1(cs, "W6692B_empty_fifo"); in W6692B_empty_fifo()
213 if (cs->debug & L1_DEB_WARN) in W6692B_empty_fifo()
214 debugl1(cs, "W6692B_empty_fifo: incoming packet too large"); in W6692B_empty_fifo()
215 cs->BC_Write_Reg(cs, bcs->channel, W_B_CMDR, W_B_CMDR_RACK | W_B_CMDR_RACT); in W6692B_empty_fifo()
221 READW6692BFIFO(cs, bcs->channel, ptr, count); in W6692B_empty_fifo()
222 cs->BC_Write_Reg(cs, bcs->channel, W_B_CMDR, W_B_CMDR_RACK | W_B_CMDR_RACT); in W6692B_empty_fifo()
223 if (cs->debug & L1_DEB_HSCX_FIFO) { in W6692B_empty_fifo()
229 debugl1(cs, "%s", bcs->blog); in W6692B_empty_fifo()
236 struct IsdnCardState *cs = bcs->cs; in W6692B_fill_fifo() local
252 if ((cs->debug & L1_DEB_HSCX) && !(cs->debug & L1_DEB_HSCX_FIFO)) in W6692B_fill_fifo()
253 debugl1(cs, "W6692B_fill_fifo%s%d", (more ? " " : " last "), count); in W6692B_fill_fifo()
259 WRITEW6692BFIFO(cs, bcs->channel, ptr, count); in W6692B_fill_fifo()
260cs->BC_Write_Reg(cs, bcs->channel, W_B_CMDR, W_B_CMDR_RACT | W_B_CMDR_XMS | (more ? 0 : W_B_CMDR_X… in W6692B_fill_fifo()
261 if (cs->debug & L1_DEB_HSCX_FIFO) { in W6692B_fill_fifo()
267 debugl1(cs, "%s", bcs->blog); in W6692B_fill_fifo()
272 W6692B_interrupt(struct IsdnCardState *cs, u_char bchan) in W6692B_interrupt() argument
280 bcs = (cs->bcs->channel == bchan) ? cs->bcs : (cs->bcs + 1); in W6692B_interrupt()
281 val = cs->BC_Read_Reg(cs, bchan, W_B_EXIR); in W6692B_interrupt()
282 debugl1(cs, "W6692B chan %d B_EXIR 0x%02X", bchan, val); in W6692B_interrupt()
285 debugl1(cs, "W6692B not INIT yet"); in W6692B_interrupt()
289 r = cs->BC_Read_Reg(cs, bchan, W_B_STAR); in W6692B_interrupt()
291 if (cs->debug & L1_DEB_WARN) in W6692B_interrupt()
292 debugl1(cs, "W6692 B STAR %x", r); in W6692B_interrupt()
294 if (cs->debug & L1_DEB_WARN) in W6692B_interrupt()
295 debugl1(cs, "W6692 B RDOV mode=%d", in W6692B_interrupt()
298 if (cs->debug & L1_DEB_WARN) in W6692B_interrupt()
299 debugl1(cs, "W6692 B CRC error"); in W6692B_interrupt()
300 cs->BC_Write_Reg(cs, bchan, W_B_CMDR, W_B_CMDR_RACK | W_B_CMDR_RRST | W_B_CMDR_RACT); in W6692B_interrupt()
302 count = cs->BC_Read_Reg(cs, bchan, W_B_RBCL) & (W_B_FIFO_THRESH - 1); in W6692B_interrupt()
307 if (cs->debug & L1_DEB_HSCX_FIFO) in W6692B_interrupt()
308 debugl1(cs, "W6692 Bchan Frame %d", count); in W6692B_interrupt()
322 r = cs->BC_Read_Reg(cs, bchan, W_B_STAR); in W6692B_interrupt()
324 if (cs->debug & L1_DEB_WARN) in W6692B_interrupt()
325 debugl1(cs, "W6692 B RDOV(RMR) mode=%d", bcs->mode); in W6692B_interrupt()
326 cs->BC_Write_Reg(cs, bchan, W_B_CMDR, W_B_CMDR_RACK | W_B_CMDR_RRST | W_B_CMDR_RACT); in W6692B_interrupt()
343 cs->BC_Write_Reg(cs, bchan, W_B_CMDR, W_B_CMDR_XRST | W_B_CMDR_RACT); in W6692B_interrupt()
344 if (cs->debug & L1_DEB_WARN) in W6692B_interrupt()
345 debugl1(cs, "W6692 B EXIR %x Lost TX", val); in W6692B_interrupt()
361 r = cs->BC_Read_Reg(cs, bchan, W_B_STAR); in W6692B_interrupt()
363 if (cs->debug & L1_DEB_WARN) in W6692B_interrupt()
364 debugl1(cs, "W6692 B STAR %x XDOW", r); in W6692B_interrupt()
365 cs->BC_Write_Reg(cs, bchan, W_B_CMDR, W_B_CMDR_XRST | W_B_CMDR_RACT); in W6692B_interrupt()
404 struct IsdnCardState *cs = dev_id; in W6692_interrupt() local
411 spin_lock_irqsave(&cs->lock, flags); in W6692_interrupt()
412 val = cs->readW6692(cs, W_ISTA); in W6692_interrupt()
414 spin_unlock_irqrestore(&cs->lock, flags); in W6692_interrupt()
418 if (cs->debug & L1_DEB_ISAC) in W6692_interrupt()
419 debugl1(cs, "W6692 ISTA %x", val); in W6692_interrupt()
422 exval = cs->readW6692(cs, W_D_RSTA); in W6692_interrupt()
425 if (cs->debug & L1_DEB_WARN) in W6692_interrupt()
426 debugl1(cs, "W6692 RDOV"); in W6692_interrupt()
428 if (cs->debug & L1_DEB_WARN) in W6692_interrupt()
429 debugl1(cs, "W6692 D-channel CRC error"); in W6692_interrupt()
431 if (cs->debug & L1_DEB_WARN) in W6692_interrupt()
432 debugl1(cs, "W6692 D-channel ABORT"); in W6692_interrupt()
433 cs->writeW6692(cs, W_D_CMDR, W_D_CMDR_RACK | W_D_CMDR_RRST); in W6692_interrupt()
435 count = cs->readW6692(cs, W_D_RBCL) & (W_D_FIFO_THRESH - 1); in W6692_interrupt()
438 W6692_empty_fifo(cs, count); in W6692_interrupt()
439 if ((count = cs->rcvidx) > 0) { in W6692_interrupt()
440 cs->rcvidx = 0; in W6692_interrupt()
444 memcpy(skb_put(skb, count), cs->rcvbuf, count); in W6692_interrupt()
445 skb_queue_tail(&cs->rq, skb); in W6692_interrupt()
449 cs->rcvidx = 0; in W6692_interrupt()
450 schedule_event(cs, D_RCVBUFREADY); in W6692_interrupt()
453 W6692_empty_fifo(cs, W_D_FIFO_THRESH); in W6692_interrupt()
456 if (test_and_clear_bit(FLG_DBUSY_TIMER, &cs->HW_Flags)) in W6692_interrupt()
457 del_timer(&cs->dbusytimer); in W6692_interrupt()
458 if (test_and_clear_bit(FLG_L1_DBUSY, &cs->HW_Flags)) in W6692_interrupt()
459 schedule_event(cs, D_CLEARBUSY); in W6692_interrupt()
460 if (cs->tx_skb) { in W6692_interrupt()
461 if (cs->tx_skb->len) { in W6692_interrupt()
462 W6692_fill_fifo(cs); in W6692_interrupt()
465 dev_kfree_skb_irq(cs->tx_skb); in W6692_interrupt()
466 cs->tx_cnt = 0; in W6692_interrupt()
467 cs->tx_skb = NULL; in W6692_interrupt()
470 if ((cs->tx_skb = skb_dequeue(&cs->sq))) { in W6692_interrupt()
471 cs->tx_cnt = 0; in W6692_interrupt()
472 W6692_fill_fifo(cs); in W6692_interrupt()
474 schedule_event(cs, D_XMTBUFREADY); in W6692_interrupt()
478 if (cs->debug & L1_DEB_ISAC) in W6692_interrupt()
479 debugl1(cs, "W6692 spurious XINT!"); in W6692_interrupt()
482 exval = cs->readW6692(cs, W_D_EXIR); in W6692_interrupt()
483 if (cs->debug & L1_DEB_WARN) in W6692_interrupt()
484 debugl1(cs, "W6692 D_EXIR %02x", exval); in W6692_interrupt()
486 debugl1(cs, "W6692 D-chan underrun/collision"); in W6692_interrupt()
488 if (test_and_clear_bit(FLG_DBUSY_TIMER, &cs->HW_Flags)) in W6692_interrupt()
489 del_timer(&cs->dbusytimer); in W6692_interrupt()
490 if (test_and_clear_bit(FLG_L1_DBUSY, &cs->HW_Flags)) in W6692_interrupt()
491 schedule_event(cs, D_CLEARBUSY); in W6692_interrupt()
492 if (cs->tx_skb) { /* Restart frame */ in W6692_interrupt()
493 skb_push(cs->tx_skb, cs->tx_cnt); in W6692_interrupt()
494 cs->tx_cnt = 0; in W6692_interrupt()
495 W6692_fill_fifo(cs); in W6692_interrupt()
498 debugl1(cs, "W6692 XDUN/XCOL no skb"); in W6692_interrupt()
499 cs->writeW6692(cs, W_D_CMDR, W_D_CMDR_XRST); in W6692_interrupt()
503 debugl1(cs, "W6692 D-channel RDOV"); in W6692_interrupt()
505 cs->writeW6692(cs, W_D_CMDR, W_D_CMDR_RRST); in W6692_interrupt()
508 debugl1(cs, "W6692 spurious TIN2 interrupt"); in W6692_interrupt()
511 debugl1(cs, "W6692 spurious MOC interrupt"); in W6692_interrupt()
512 v1 = cs->readW6692(cs, W_MOSR); in W6692_interrupt()
513 debugl1(cs, "W6692 MOSR %02x", v1); in W6692_interrupt()
516 v1 = cs->readW6692(cs, W_CIR); in W6692_interrupt()
517 if (cs->debug & L1_DEB_ISAC) in W6692_interrupt()
518 debugl1(cs, "W6692 ISC CIR=0x%02X", v1); in W6692_interrupt()
520 cs->dc.w6692.ph_state = v1 & W_CIR_COD_MASK; in W6692_interrupt()
521 if (cs->debug & L1_DEB_ISAC) in W6692_interrupt()
522 debugl1(cs, "ph_state_change %x", cs->dc.w6692.ph_state); in W6692_interrupt()
523 schedule_event(cs, D_L1STATECHANGE); in W6692_interrupt()
526 v1 = cs->readW6692(cs, W_SQR); in W6692_interrupt()
527 debugl1(cs, "W6692 SCC SQR=0x%02X", v1); in W6692_interrupt()
531 debugl1(cs, "W6692 spurious WEXP interrupt!"); in W6692_interrupt()
534 debugl1(cs, "W6692 spurious TEXP interrupt!"); in W6692_interrupt()
538 debugl1(cs, "W6692 B channel 1 interrupt"); in W6692_interrupt()
539 W6692B_interrupt(cs, 0); in W6692_interrupt()
542 debugl1(cs, "W6692 B channel 2 interrupt"); in W6692_interrupt()
543 W6692B_interrupt(cs, 1); in W6692_interrupt()
545 val = cs->readW6692(cs, W_ISTA); in W6692_interrupt()
552 cs->writeW6692(cs, W_IMASK, 0xff); in W6692_interrupt()
554 spin_unlock_irqrestore(&cs->lock, flags); in W6692_interrupt()
561 struct IsdnCardState *cs = (struct IsdnCardState *) st->l1.hardware; in W6692_l1hw() local
568 if (cs->debug & DEB_DLOG_HEX) in W6692_l1hw()
569 LogFrame(cs, skb->data, skb->len); in W6692_l1hw()
570 if (cs->debug & DEB_DLOG_VERBOSE) in W6692_l1hw()
571 dlogframe(cs, skb, 0); in W6692_l1hw()
572 spin_lock_irqsave(&cs->lock, flags); in W6692_l1hw()
573 if (cs->tx_skb) { in W6692_l1hw()
574 skb_queue_tail(&cs->sq, skb); in W6692_l1hw()
576 if (cs->debug & L1_DEB_LAPD) in W6692_l1hw()
577 Logl2Frame(cs, skb, "PH_DATA Queued", 0); in W6692_l1hw()
580 cs->tx_skb = skb; in W6692_l1hw()
581 cs->tx_cnt = 0; in W6692_l1hw()
583 if (cs->debug & L1_DEB_LAPD) in W6692_l1hw()
584 Logl2Frame(cs, skb, "PH_DATA", 0); in W6692_l1hw()
586 W6692_fill_fifo(cs); in W6692_l1hw()
588 spin_unlock_irqrestore(&cs->lock, flags); in W6692_l1hw()
591 spin_lock_irqsave(&cs->lock, flags); in W6692_l1hw()
592 if (cs->tx_skb) { in W6692_l1hw()
593 if (cs->debug & L1_DEB_WARN) in W6692_l1hw()
594 debugl1(cs, " l2l1 tx_skb exist this shouldn't happen"); in W6692_l1hw()
595 skb_queue_tail(&cs->sq, skb); in W6692_l1hw()
596 spin_unlock_irqrestore(&cs->lock, flags); in W6692_l1hw()
599 if (cs->debug & DEB_DLOG_HEX) in W6692_l1hw()
600 LogFrame(cs, skb->data, skb->len); in W6692_l1hw()
601 if (cs->debug & DEB_DLOG_VERBOSE) in W6692_l1hw()
602 dlogframe(cs, skb, 0); in W6692_l1hw()
603 cs->tx_skb = skb; in W6692_l1hw()
604 cs->tx_cnt = 0; in W6692_l1hw()
606 if (cs->debug & L1_DEB_LAPD) in W6692_l1hw()
607 Logl2Frame(cs, skb, "PH_DATA_PULLED", 0); in W6692_l1hw()
609 W6692_fill_fifo(cs); in W6692_l1hw()
610 spin_unlock_irqrestore(&cs->lock, flags); in W6692_l1hw()
614 if (cs->debug & L1_DEB_LAPD) in W6692_l1hw()
615 debugl1(cs, "-> PH_REQUEST_PULL"); in W6692_l1hw()
617 if (!cs->tx_skb) { in W6692_l1hw()
624 spin_lock_irqsave(&cs->lock, flags); in W6692_l1hw()
625 if ((cs->dc.w6692.ph_state == W_L1IND_DRD)) { in W6692_l1hw()
626 ph_command(cs, W_L1CMD_ECK); in W6692_l1hw()
627 spin_unlock_irqrestore(&cs->lock, flags); in W6692_l1hw()
629 ph_command(cs, W_L1CMD_RST); in W6692_l1hw()
630 cs->dc.w6692.ph_state = W_L1CMD_RST; in W6692_l1hw()
631 spin_unlock_irqrestore(&cs->lock, flags); in W6692_l1hw()
632 W6692_new_ph(cs); in W6692_l1hw()
636 spin_lock_irqsave(&cs->lock, flags); in W6692_l1hw()
637 ph_command(cs, W_L1CMD_ECK); in W6692_l1hw()
638 spin_unlock_irqrestore(&cs->lock, flags); in W6692_l1hw()
641 spin_lock_irqsave(&cs->lock, flags); in W6692_l1hw()
642 ph_command(cs, W_L1CMD_AR8); in W6692_l1hw()
643 spin_unlock_irqrestore(&cs->lock, flags); in W6692_l1hw()
654 skb_queue_purge(&cs->rq); in W6692_l1hw()
655 skb_queue_purge(&cs->sq); in W6692_l1hw()
656 if (cs->tx_skb) { in W6692_l1hw()
657 dev_kfree_skb_any(cs->tx_skb); in W6692_l1hw()
658 cs->tx_skb = NULL; in W6692_l1hw()
660 if (test_and_clear_bit(FLG_DBUSY_TIMER, &cs->HW_Flags)) in W6692_l1hw()
661 del_timer(&cs->dbusytimer); in W6692_l1hw()
662 if (test_and_clear_bit(FLG_L1_DBUSY, &cs->HW_Flags)) in W6692_l1hw()
663 schedule_event(cs, D_CLEARBUSY); in W6692_l1hw()
666 if (cs->debug & L1_DEB_WARN) in W6692_l1hw()
667 debugl1(cs, "W6692_l1hw unknown %04x", pr); in W6692_l1hw()
673 setstack_W6692(struct PStack *st, struct IsdnCardState *cs) in setstack_W6692() argument
679 DC_Close_W6692(struct IsdnCardState *cs) in DC_Close_W6692() argument
684 dbusy_timer_handler(struct IsdnCardState *cs) in dbusy_timer_handler() argument
690 spin_lock_irqsave(&cs->lock, flags); in dbusy_timer_handler()
691 if (test_bit(FLG_DBUSY_TIMER, &cs->HW_Flags)) { in dbusy_timer_handler()
692 rbch = cs->readW6692(cs, W_D_RBCH); in dbusy_timer_handler()
693 star = cs->readW6692(cs, W_D_STAR); in dbusy_timer_handler()
694 if (cs->debug) in dbusy_timer_handler()
695 debugl1(cs, "D-Channel Busy D_RBCH %02x D_STAR %02x", in dbusy_timer_handler()
698 test_and_set_bit(FLG_L1_DBUSY, &cs->HW_Flags); in dbusy_timer_handler()
699 stptr = cs->stlist; in dbusy_timer_handler()
706 test_and_clear_bit(FLG_DBUSY_TIMER, &cs->HW_Flags); in dbusy_timer_handler()
707 if (cs->tx_skb) { in dbusy_timer_handler()
708 dev_kfree_skb_any(cs->tx_skb); in dbusy_timer_handler()
709 cs->tx_cnt = 0; in dbusy_timer_handler()
710 cs->tx_skb = NULL; in dbusy_timer_handler()
713 debugl1(cs, "D-Channel Busy no skb"); in dbusy_timer_handler()
715 cs->writeW6692(cs, W_D_CMDR, W_D_CMDR_XRST); /* Transmitter reset */ in dbusy_timer_handler()
716 spin_unlock_irqrestore(&cs->lock, flags); in dbusy_timer_handler()
717 cs->irq_func(cs->irq, cs); in dbusy_timer_handler()
721 spin_unlock_irqrestore(&cs->lock, flags); in dbusy_timer_handler()
727 struct IsdnCardState *cs = bcs->cs; in W6692Bmode() local
729 if (cs->debug & L1_DEB_HSCX) in W6692Bmode()
730 debugl1(cs, "w6692 %c mode %d ichan %d", in W6692Bmode()
738 cs->BC_Write_Reg(cs, bchan, W_B_MODE, 0); in W6692Bmode()
741 cs->BC_Write_Reg(cs, bchan, W_B_MODE, W_B_MODE_MMS); in W6692Bmode()
744 cs->BC_Write_Reg(cs, bchan, W_B_MODE, W_B_MODE_ITF); in W6692Bmode()
745 cs->BC_Write_Reg(cs, bchan, W_B_ADM1, 0xff); in W6692Bmode()
746 cs->BC_Write_Reg(cs, bchan, W_B_ADM2, 0xff); in W6692Bmode()
750 cs->BC_Write_Reg(cs, bchan, W_B_CMDR, W_B_CMDR_RRST | in W6692Bmode()
752 cs->BC_Write_Reg(cs, bchan, W_B_EXIM, 0x00); in W6692Bmode()
764 spin_lock_irqsave(&bcs->cs->lock, flags); in W6692_l2l1()
771 bcs->cs->BC_Send_Data(bcs); in W6692_l2l1()
773 spin_unlock_irqrestore(&bcs->cs->lock, flags); in W6692_l2l1()
780 spin_lock_irqsave(&bcs->cs->lock, flags); in W6692_l2l1()
784 bcs->cs->BC_Send_Data(bcs); in W6692_l2l1()
785 spin_unlock_irqrestore(&bcs->cs->lock, flags); in W6692_l2l1()
795 spin_lock_irqsave(&bcs->cs->lock, flags); in W6692_l2l1()
798 spin_unlock_irqrestore(&bcs->cs->lock, flags); in W6692_l2l1()
805 spin_lock_irqsave(&bcs->cs->lock, flags); in W6692_l2l1()
809 spin_unlock_irqrestore(&bcs->cs->lock, flags); in W6692_l2l1()
835 open_w6692state(struct IsdnCardState *cs, struct BCState *bcs) in open_w6692state() argument
877 static void resetW6692(struct IsdnCardState *cs) in resetW6692() argument
879 cs->writeW6692(cs, W_D_CTL, W_D_CTL_SRST); in resetW6692()
881 cs->writeW6692(cs, W_D_CTL, 0x00); in resetW6692()
883 cs->writeW6692(cs, W_IMASK, 0xff); in resetW6692()
884 cs->writeW6692(cs, W_D_SAM, 0xff); in resetW6692()
885 cs->writeW6692(cs, W_D_TAM, 0xff); in resetW6692()
886 cs->writeW6692(cs, W_D_EXIM, 0x00); in resetW6692()
887 cs->writeW6692(cs, W_D_MODE, W_D_MODE_RACT); in resetW6692()
888 cs->writeW6692(cs, W_IMASK, 0x18); in resetW6692()
889 if (cs->subtyp == W6692_USR) { in resetW6692()
894 cs->writeW6692(cs, W_PCTL, 0x80); in resetW6692()
895 cs->writeW6692(cs, W_XDATA, 0x00); in resetW6692()
899 static void initW6692(struct IsdnCardState *cs, int part) in initW6692() argument
902 cs->setstack_d = setstack_W6692; in initW6692()
903 cs->DC_Close = DC_Close_W6692; in initW6692()
904 cs->dbusytimer.function = (void *) dbusy_timer_handler; in initW6692()
905 cs->dbusytimer.data = (long) cs; in initW6692()
906 init_timer(&cs->dbusytimer); in initW6692()
907 resetW6692(cs); in initW6692()
908 ph_command(cs, W_L1CMD_RST); in initW6692()
909 cs->dc.w6692.ph_state = W_L1CMD_RST; in initW6692()
910 W6692_new_ph(cs); in initW6692()
911 ph_command(cs, W_L1CMD_ECK); in initW6692()
913 cs->bcs[0].BC_SetStack = setstack_w6692; in initW6692()
914 cs->bcs[1].BC_SetStack = setstack_w6692; in initW6692()
915 cs->bcs[0].BC_Close = close_w6692state; in initW6692()
916 cs->bcs[1].BC_Close = close_w6692state; in initW6692()
917 W6692Bmode(cs->bcs, 0, 0); in initW6692()
918 W6692Bmode(cs->bcs + 1, 0, 0); in initW6692()
922 cs->writeW6692(cs, W_IMASK, 0x18); in initW6692()
923 cs->writeW6692(cs, W_D_EXIM, 0x00); in initW6692()
924 cs->BC_Write_Reg(cs, 0, W_B_EXIM, 0x00); in initW6692()
925 cs->BC_Write_Reg(cs, 1, W_B_EXIM, 0x00); in initW6692()
927 cs->writeW6692(cs, W_D_CMDR, W_D_CMDR_RRST | W_D_CMDR_XRST); in initW6692()
934 ReadW6692(struct IsdnCardState *cs, u_char offset) in ReadW6692() argument
936 return (inb(cs->hw.w6692.iobase + offset)); in ReadW6692()
940 WriteW6692(struct IsdnCardState *cs, u_char offset, u_char value) in WriteW6692() argument
942 outb(value, cs->hw.w6692.iobase + offset); in WriteW6692()
946 ReadISACfifo(struct IsdnCardState *cs, u_char *data, int size) in ReadISACfifo() argument
948 insb(cs->hw.w6692.iobase + W_D_RFIFO, data, size); in ReadISACfifo()
952 WriteISACfifo(struct IsdnCardState *cs, u_char *data, int size) in WriteISACfifo() argument
954 outsb(cs->hw.w6692.iobase + W_D_XFIFO, data, size); in WriteISACfifo()
958 ReadW6692B(struct IsdnCardState *cs, int bchan, u_char offset) in ReadW6692B() argument
960 return (inb(cs->hw.w6692.iobase + (bchan ? 0x40 : 0) + offset)); in ReadW6692B()
964 WriteW6692B(struct IsdnCardState *cs, int bchan, u_char offset, u_char value) in WriteW6692B() argument
966 outb(value, cs->hw.w6692.iobase + (bchan ? 0x40 : 0) + offset); in WriteW6692B()
970 w6692_card_msg(struct IsdnCardState *cs, int mt, void *arg) in w6692_card_msg() argument
974 resetW6692(cs); in w6692_card_msg()
977 cs->writeW6692(cs, W_IMASK, 0xff); in w6692_card_msg()
978 release_region(cs->hw.w6692.iobase, 256); in w6692_card_msg()
979 if (cs->subtyp == W6692_USR) { in w6692_card_msg()
980 cs->writeW6692(cs, W_XDATA, 0x04); in w6692_card_msg()
984 initW6692(cs, 3); in w6692_card_msg()
998 struct IsdnCardState *cs = card->cs; in setup_w6692() local
1006 if (cs->typ != ISDN_CTYPE_W6692) in setup_w6692()
1016 cs->subtyp = id_idx; in setup_w6692()
1028 if (cs->subtyp == W6692_WINBOND) { in setup_w6692()
1031 cs->subtyp = W6692_USR; in setup_w6692()
1039 cs->irq = pci_irq; in setup_w6692()
1040 if (!cs->irq) { in setup_w6692()
1048 cs->hw.w6692.iobase = pci_ioaddr; in setup_w6692()
1050 id_list[cs->subtyp].vendor_name, id_list[cs->subtyp].card_name, in setup_w6692()
1052 if (!request_region(cs->hw.w6692.iobase, 256, id_list[cs->subtyp].card_name)) { in setup_w6692()
1055 id_list[cs->subtyp].card_name, in setup_w6692()
1056 cs->hw.w6692.iobase, in setup_w6692()
1057 cs->hw.w6692.iobase + 255); in setup_w6692()
1063 id_list[cs->subtyp].card_name, cs->irq, in setup_w6692()
1064 cs->hw.w6692.iobase); in setup_w6692()
1066 INIT_WORK(&cs->tqueue, W6692_bh); in setup_w6692()
1067 cs->readW6692 = &ReadW6692; in setup_w6692()
1068 cs->writeW6692 = &WriteW6692; in setup_w6692()
1069 cs->readisacfifo = &ReadISACfifo; in setup_w6692()
1070 cs->writeisacfifo = &WriteISACfifo; in setup_w6692()
1071 cs->BC_Read_Reg = &ReadW6692B; in setup_w6692()
1072 cs->BC_Write_Reg = &WriteW6692B; in setup_w6692()
1073 cs->BC_Send_Data = &W6692B_fill_fifo; in setup_w6692()
1074 cs->cardmsg = &w6692_card_msg; in setup_w6692()
1075 cs->irq_func = &W6692_interrupt; in setup_w6692()
1076 cs->irq_flags |= IRQF_SHARED; in setup_w6692()
1077 W6692Version(cs, "W6692:"); in setup_w6692()
1078 printk(KERN_INFO "W6692 ISTA=0x%X\n", ReadW6692(cs, W_ISTA)); in setup_w6692()
1079 printk(KERN_INFO "W6692 IMASK=0x%X\n", ReadW6692(cs, W_IMASK)); in setup_w6692()
1080 printk(KERN_INFO "W6692 D_EXIR=0x%X\n", ReadW6692(cs, W_D_EXIR)); in setup_w6692()
1081 printk(KERN_INFO "W6692 D_EXIM=0x%X\n", ReadW6692(cs, W_D_EXIM)); in setup_w6692()
1082 printk(KERN_INFO "W6692 D_RSTA=0x%X\n", ReadW6692(cs, W_D_RSTA)); in setup_w6692()