Lines Matching +full:cs +full:- +full:x
78 ReadISAC(struct IsdnCardState *cs, u_char offset) in ReadISAC() argument
83 outb(idx, cs->hw.avm.cfg_reg + 4); in ReadISAC()
84 val = inb(cs->hw.avm.isac + (offset & 0xf)); in ReadISAC()
89 WriteISAC(struct IsdnCardState *cs, u_char offset, u_char value) in WriteISAC() argument
93 outb(idx, cs->hw.avm.cfg_reg + 4); in WriteISAC()
94 outb(value, cs->hw.avm.isac + (offset & 0xf)); in WriteISAC()
98 ReadISACfifo(struct IsdnCardState *cs, u_char *data, int size) in ReadISACfifo() argument
100 outb(AVM_ISAC_FIFO, cs->hw.avm.cfg_reg + 4); in ReadISACfifo()
101 insb(cs->hw.avm.isac, data, size); in ReadISACfifo()
105 WriteISACfifo(struct IsdnCardState *cs, u_char *data, int size) in WriteISACfifo() argument
107 outb(AVM_ISAC_FIFO, cs->hw.avm.cfg_reg + 4); in WriteISACfifo()
108 outsb(cs->hw.avm.isac, data, size); in WriteISACfifo()
112 ReadHDLCPCI(struct IsdnCardState *cs, int chan, u_char offset) in ReadHDLCPCI() argument
117 outl(idx, cs->hw.avm.cfg_reg + 4); in ReadHDLCPCI()
118 val = inl(cs->hw.avm.isac + offset); in ReadHDLCPCI()
123 WriteHDLCPCI(struct IsdnCardState *cs, int chan, u_char offset, u_int value) in WriteHDLCPCI() argument
127 outl(idx, cs->hw.avm.cfg_reg + 4); in WriteHDLCPCI()
128 outl(value, cs->hw.avm.isac + offset); in WriteHDLCPCI()
132 ReadHDLCPnP(struct IsdnCardState *cs, int chan, u_char offset) in ReadHDLCPnP() argument
137 outb(idx, cs->hw.avm.cfg_reg + 4); in ReadHDLCPnP()
138 val = inb(cs->hw.avm.isac + offset); in ReadHDLCPnP()
143 WriteHDLCPnP(struct IsdnCardState *cs, int chan, u_char offset, u_char value) in WriteHDLCPnP() argument
147 outb(idx, cs->hw.avm.cfg_reg + 4); in WriteHDLCPnP()
148 outb(value, cs->hw.avm.isac + offset); in WriteHDLCPnP()
152 ReadHDLC_s(struct IsdnCardState *cs, int chan, u_char offset) in ReadHDLC_s() argument
154 return (0xff & ReadHDLCPCI(cs, chan, offset)); in ReadHDLC_s()
158 WriteHDLC_s(struct IsdnCardState *cs, int chan, u_char offset, u_char value) in WriteHDLC_s() argument
160 WriteHDLCPCI(cs, chan, offset, value); in WriteHDLC_s()
164 struct BCState *Sel_BCS(struct IsdnCardState *cs, int channel) in Sel_BCS() argument
166 if (cs->bcs[0].mode && (cs->bcs[0].channel == channel)) in Sel_BCS()
167 return (&cs->bcs[0]); in Sel_BCS()
168 else if (cs->bcs[1].mode && (cs->bcs[1].channel == channel)) in Sel_BCS()
169 return (&cs->bcs[1]); in Sel_BCS()
177 if (bcs->cs->debug & L1_DEB_HSCX) in write_ctrl()
178 debugl1(bcs->cs, "hdlc %c wr%x ctrl %x", in write_ctrl()
179 'A' + bcs->channel, which, bcs->hw.hdlc.ctrl.ctrl); in write_ctrl()
180 if (bcs->cs->subtyp == AVM_FRITZ_PCI) { in write_ctrl()
181 WriteHDLCPCI(bcs->cs, bcs->channel, HDLC_STATUS, bcs->hw.hdlc.ctrl.ctrl); in write_ctrl()
184 WriteHDLCPnP(bcs->cs, bcs->channel, HDLC_STATUS + 2, in write_ctrl()
185 bcs->hw.hdlc.ctrl.sr.mode); in write_ctrl()
187 WriteHDLCPnP(bcs->cs, bcs->channel, HDLC_STATUS + 1, in write_ctrl()
188 bcs->hw.hdlc.ctrl.sr.xml); in write_ctrl()
190 WriteHDLCPnP(bcs->cs, bcs->channel, HDLC_STATUS, in write_ctrl()
191 bcs->hw.hdlc.ctrl.sr.cmd); in write_ctrl()
198 struct IsdnCardState *cs = bcs->cs; in modehdlc() local
199 int hdlc = bcs->channel; in modehdlc()
201 if (cs->debug & L1_DEB_HSCX) in modehdlc()
202 debugl1(cs, "hdlc %c mode %d --> %d ichan %d --> %d", in modehdlc()
203 'A' + hdlc, bcs->mode, mode, hdlc, bc); in modehdlc()
204 bcs->hw.hdlc.ctrl.ctrl = 0; in modehdlc()
206 case (-1): /* used for init */ in modehdlc()
207 bcs->mode = 1; in modehdlc()
208 bcs->channel = bc; in modehdlc()
212 if (bcs->mode == L1_MODE_NULL) in modehdlc()
214 bcs->hw.hdlc.ctrl.sr.cmd = HDLC_CMD_XRS | HDLC_CMD_RRS; in modehdlc()
215 bcs->hw.hdlc.ctrl.sr.mode = HDLC_MODE_TRANS; in modehdlc()
217 bcs->mode = L1_MODE_NULL; in modehdlc()
218 bcs->channel = bc; in modehdlc()
221 bcs->mode = mode; in modehdlc()
222 bcs->channel = bc; in modehdlc()
223 bcs->hw.hdlc.ctrl.sr.cmd = HDLC_CMD_XRS | HDLC_CMD_RRS; in modehdlc()
224 bcs->hw.hdlc.ctrl.sr.mode = HDLC_MODE_TRANS; in modehdlc()
226 bcs->hw.hdlc.ctrl.sr.cmd = HDLC_CMD_XRS; in modehdlc()
228 bcs->hw.hdlc.ctrl.sr.cmd = 0; in modehdlc()
232 bcs->mode = mode; in modehdlc()
233 bcs->channel = bc; in modehdlc()
234 bcs->hw.hdlc.ctrl.sr.cmd = HDLC_CMD_XRS | HDLC_CMD_RRS; in modehdlc()
235 bcs->hw.hdlc.ctrl.sr.mode = HDLC_MODE_ITF_FLG; in modehdlc()
237 bcs->hw.hdlc.ctrl.sr.cmd = HDLC_CMD_XRS; in modehdlc()
239 bcs->hw.hdlc.ctrl.sr.cmd = 0; in modehdlc()
250 u_char idx = bcs->channel ? AVM_HDLC_2 : AVM_HDLC_1; in hdlc_empty_fifo()
252 struct IsdnCardState *cs = bcs->cs; in hdlc_empty_fifo() local
254 if ((cs->debug & L1_DEB_HSCX) && !(cs->debug & L1_DEB_HSCX_FIFO)) in hdlc_empty_fifo()
255 debugl1(cs, "hdlc_empty_fifo %d", count); in hdlc_empty_fifo()
256 if (bcs->hw.hdlc.rcvidx + count > HSCX_BUFMAX) { in hdlc_empty_fifo()
257 if (cs->debug & L1_DEB_WARN) in hdlc_empty_fifo()
258 debugl1(cs, "hdlc_empty_fifo: incoming packet too large"); in hdlc_empty_fifo()
261 p = bcs->hw.hdlc.rcvbuf + bcs->hw.hdlc.rcvidx; in hdlc_empty_fifo()
263 bcs->hw.hdlc.rcvidx += count; in hdlc_empty_fifo()
264 if (cs->subtyp == AVM_FRITZ_PCI) { in hdlc_empty_fifo()
265 outl(idx, cs->hw.avm.cfg_reg + 4); in hdlc_empty_fifo()
268 *ptr++ = in_be32((unsigned *)(cs->hw.avm.isac + _IO_BASE)); in hdlc_empty_fifo()
270 *ptr++ = inl(cs->hw.avm.isac); in hdlc_empty_fifo()
275 outb(idx, cs->hw.avm.cfg_reg + 4); in hdlc_empty_fifo()
277 *p++ = inb(cs->hw.avm.isac); in hdlc_empty_fifo()
281 if (cs->debug & L1_DEB_HSCX_FIFO) { in hdlc_empty_fifo()
282 char *t = bcs->blog; in hdlc_empty_fifo()
284 if (cs->subtyp == AVM_FRITZ_PNP) in hdlc_empty_fifo()
287 bcs->channel ? 'B' : 'A', count); in hdlc_empty_fifo()
289 debugl1(cs, "%s", bcs->blog); in hdlc_empty_fifo()
296 struct IsdnCardState *cs = bcs->cs; in hdlc_fill_fifo() local
302 if ((cs->debug & L1_DEB_HSCX) && !(cs->debug & L1_DEB_HSCX_FIFO)) in hdlc_fill_fifo()
303 debugl1(cs, "hdlc_fill_fifo"); in hdlc_fill_fifo()
304 if (!bcs->tx_skb) in hdlc_fill_fifo()
306 if (bcs->tx_skb->len <= 0) in hdlc_fill_fifo()
309 bcs->hw.hdlc.ctrl.sr.cmd &= ~HDLC_CMD_XME; in hdlc_fill_fifo()
310 if (bcs->tx_skb->len > fifo_size) { in hdlc_fill_fifo()
313 count = bcs->tx_skb->len; in hdlc_fill_fifo()
314 if (bcs->mode != L1_MODE_TRANS) in hdlc_fill_fifo()
315 bcs->hw.hdlc.ctrl.sr.cmd |= HDLC_CMD_XME; in hdlc_fill_fifo()
317 if ((cs->debug & L1_DEB_HSCX) && !(cs->debug & L1_DEB_HSCX_FIFO)) in hdlc_fill_fifo()
318 debugl1(cs, "hdlc_fill_fifo %d/%u", count, bcs->tx_skb->len); in hdlc_fill_fifo()
319 p = bcs->tx_skb->data; in hdlc_fill_fifo()
321 skb_pull(bcs->tx_skb, count); in hdlc_fill_fifo()
322 bcs->tx_cnt -= count; in hdlc_fill_fifo()
323 bcs->hw.hdlc.count += count; in hdlc_fill_fifo()
324 bcs->hw.hdlc.ctrl.sr.xml = ((count == fifo_size) ? 0 : count); in hdlc_fill_fifo()
326 if (cs->subtyp == AVM_FRITZ_PCI) { in hdlc_fill_fifo()
329 out_be32((unsigned *)(cs->hw.avm.isac + _IO_BASE), *ptr++); in hdlc_fill_fifo()
331 outl(*ptr++, cs->hw.avm.isac); in hdlc_fill_fifo()
337 outb(*p++, cs->hw.avm.isac); in hdlc_fill_fifo()
341 if (cs->debug & L1_DEB_HSCX_FIFO) { in hdlc_fill_fifo()
342 char *t = bcs->blog; in hdlc_fill_fifo()
344 if (cs->subtyp == AVM_FRITZ_PNP) in hdlc_fill_fifo()
347 bcs->channel ? 'B' : 'A', count); in hdlc_fill_fifo()
349 debugl1(cs, "%s", bcs->blog); in hdlc_fill_fifo()
358 if (bcs->cs->debug & L1_DEB_HSCX) in HDLC_irq()
359 debugl1(bcs->cs, "ch%d stat %#x", bcs->channel, stat); in HDLC_irq()
362 if (bcs->cs->debug & L1_DEB_HSCX) in HDLC_irq()
363 debugl1(bcs->cs, "RDO"); in HDLC_irq()
365 debugl1(bcs->cs, "ch%d stat %#x", bcs->channel, stat); in HDLC_irq()
366 bcs->hw.hdlc.ctrl.sr.xml = 0; in HDLC_irq()
367 bcs->hw.hdlc.ctrl.sr.cmd |= HDLC_CMD_RRS; in HDLC_irq()
369 bcs->hw.hdlc.ctrl.sr.cmd &= ~HDLC_CMD_RRS; in HDLC_irq()
371 bcs->hw.hdlc.rcvidx = 0; in HDLC_irq()
376 if ((stat & HDLC_STAT_RME) || (bcs->mode == L1_MODE_TRANS)) { in HDLC_irq()
378 (bcs->mode == L1_MODE_TRANS)) { in HDLC_irq()
379 if (!(skb = dev_alloc_skb(bcs->hw.hdlc.rcvidx))) in HDLC_irq()
383 bcs->hw.hdlc.rcvbuf, in HDLC_irq()
384 bcs->hw.hdlc.rcvidx); in HDLC_irq()
385 skb_queue_tail(&bcs->rqueue, skb); in HDLC_irq()
387 bcs->hw.hdlc.rcvidx = 0; in HDLC_irq()
390 if (bcs->cs->debug & L1_DEB_HSCX) in HDLC_irq()
391 debugl1(bcs->cs, "invalid frame"); in HDLC_irq()
393 debugl1(bcs->cs, "ch%d invalid frame %#x", bcs->channel, stat); in HDLC_irq()
394 bcs->hw.hdlc.rcvidx = 0; in HDLC_irq()
403 if (bcs->tx_skb) { in HDLC_irq()
404 skb_push(bcs->tx_skb, bcs->hw.hdlc.count); in HDLC_irq()
405 bcs->tx_cnt += bcs->hw.hdlc.count; in HDLC_irq()
406 bcs->hw.hdlc.count = 0; in HDLC_irq()
407 if (bcs->cs->debug & L1_DEB_WARN) in HDLC_irq()
408 debugl1(bcs->cs, "ch%d XDU", bcs->channel); in HDLC_irq()
409 } else if (bcs->cs->debug & L1_DEB_WARN) in HDLC_irq()
410 debugl1(bcs->cs, "ch%d XDU without skb", bcs->channel); in HDLC_irq()
411 bcs->hw.hdlc.ctrl.sr.xml = 0; in HDLC_irq()
412 bcs->hw.hdlc.ctrl.sr.cmd |= HDLC_CMD_XRS; in HDLC_irq()
414 bcs->hw.hdlc.ctrl.sr.cmd &= ~HDLC_CMD_XRS; in HDLC_irq()
418 if (bcs->tx_skb) { in HDLC_irq()
419 if (bcs->tx_skb->len) { in HDLC_irq()
423 if (test_bit(FLG_LLI_L1WAKEUP, &bcs->st->lli.flag) && in HDLC_irq()
424 (PACKET_NOACK != bcs->tx_skb->pkt_type)) { in HDLC_irq()
426 spin_lock_irqsave(&bcs->aclock, flags); in HDLC_irq()
427 bcs->ackcnt += bcs->hw.hdlc.count; in HDLC_irq()
428 spin_unlock_irqrestore(&bcs->aclock, flags); in HDLC_irq()
431 dev_kfree_skb_irq(bcs->tx_skb); in HDLC_irq()
432 bcs->hw.hdlc.count = 0; in HDLC_irq()
433 bcs->tx_skb = NULL; in HDLC_irq()
436 if ((bcs->tx_skb = skb_dequeue(&bcs->squeue))) { in HDLC_irq()
437 bcs->hw.hdlc.count = 0; in HDLC_irq()
438 test_and_set_bit(BC_FLG_BUSY, &bcs->Flag); in HDLC_irq()
441 test_and_clear_bit(BC_FLG_BUSY, &bcs->Flag); in HDLC_irq()
448 HDLC_irq_main(struct IsdnCardState *cs) in HDLC_irq_main() argument
453 if (cs->subtyp == AVM_FRITZ_PCI) { in HDLC_irq_main()
454 stat = ReadHDLCPCI(cs, 0, HDLC_STATUS); in HDLC_irq_main()
456 stat = ReadHDLCPnP(cs, 0, HDLC_STATUS); in HDLC_irq_main()
458 stat |= (ReadHDLCPnP(cs, 0, HDLC_STATUS + 1)) << 8; in HDLC_irq_main()
461 if (!(bcs = Sel_BCS(cs, 0))) { in HDLC_irq_main()
462 if (cs->debug) in HDLC_irq_main()
463 debugl1(cs, "hdlc spurious channel 0 IRQ"); in HDLC_irq_main()
467 if (cs->subtyp == AVM_FRITZ_PCI) { in HDLC_irq_main()
468 stat = ReadHDLCPCI(cs, 1, HDLC_STATUS); in HDLC_irq_main()
470 stat = ReadHDLCPnP(cs, 1, HDLC_STATUS); in HDLC_irq_main()
472 stat |= (ReadHDLCPnP(cs, 1, HDLC_STATUS + 1)) << 8; in HDLC_irq_main()
475 if (!(bcs = Sel_BCS(cs, 1))) { in HDLC_irq_main()
476 if (cs->debug) in HDLC_irq_main()
477 debugl1(cs, "hdlc spurious channel 1 IRQ"); in HDLC_irq_main()
486 struct BCState *bcs = st->l1.bcs; in hdlc_l2l1()
492 spin_lock_irqsave(&bcs->cs->lock, flags); in hdlc_l2l1()
493 if (bcs->tx_skb) { in hdlc_l2l1()
494 skb_queue_tail(&bcs->squeue, skb); in hdlc_l2l1()
496 bcs->tx_skb = skb; in hdlc_l2l1()
497 test_and_set_bit(BC_FLG_BUSY, &bcs->Flag); in hdlc_l2l1()
498 bcs->hw.hdlc.count = 0; in hdlc_l2l1()
499 bcs->cs->BC_Send_Data(bcs); in hdlc_l2l1()
501 spin_unlock_irqrestore(&bcs->cs->lock, flags); in hdlc_l2l1()
504 spin_lock_irqsave(&bcs->cs->lock, flags); in hdlc_l2l1()
505 if (bcs->tx_skb) { in hdlc_l2l1()
508 test_and_set_bit(BC_FLG_BUSY, &bcs->Flag); in hdlc_l2l1()
509 bcs->tx_skb = skb; in hdlc_l2l1()
510 bcs->hw.hdlc.count = 0; in hdlc_l2l1()
511 bcs->cs->BC_Send_Data(bcs); in hdlc_l2l1()
513 spin_unlock_irqrestore(&bcs->cs->lock, flags); in hdlc_l2l1()
516 if (!bcs->tx_skb) { in hdlc_l2l1()
517 test_and_clear_bit(FLG_L1_PULL_REQ, &st->l1.Flags); in hdlc_l2l1()
518 st->l1.l1l2(st, PH_PULL | CONFIRM, NULL); in hdlc_l2l1()
520 test_and_set_bit(FLG_L1_PULL_REQ, &st->l1.Flags); in hdlc_l2l1()
523 spin_lock_irqsave(&bcs->cs->lock, flags); in hdlc_l2l1()
524 test_and_set_bit(BC_FLG_ACTIV, &bcs->Flag); in hdlc_l2l1()
525 modehdlc(bcs, st->l1.mode, st->l1.bc); in hdlc_l2l1()
526 spin_unlock_irqrestore(&bcs->cs->lock, flags); in hdlc_l2l1()
533 spin_lock_irqsave(&bcs->cs->lock, flags); in hdlc_l2l1()
534 test_and_clear_bit(BC_FLG_ACTIV, &bcs->Flag); in hdlc_l2l1()
535 test_and_clear_bit(BC_FLG_BUSY, &bcs->Flag); in hdlc_l2l1()
536 modehdlc(bcs, 0, st->l1.bc); in hdlc_l2l1()
537 spin_unlock_irqrestore(&bcs->cs->lock, flags); in hdlc_l2l1()
538 st->l1.l1l2(st, PH_DEACTIVATE | CONFIRM, NULL); in hdlc_l2l1()
547 if (test_and_clear_bit(BC_FLG_INIT, &bcs->Flag)) { in close_hdlcstate()
548 kfree(bcs->hw.hdlc.rcvbuf); in close_hdlcstate()
549 bcs->hw.hdlc.rcvbuf = NULL; in close_hdlcstate()
550 kfree(bcs->blog); in close_hdlcstate()
551 bcs->blog = NULL; in close_hdlcstate()
552 skb_queue_purge(&bcs->rqueue); in close_hdlcstate()
553 skb_queue_purge(&bcs->squeue); in close_hdlcstate()
554 if (bcs->tx_skb) { in close_hdlcstate()
555 dev_kfree_skb_any(bcs->tx_skb); in close_hdlcstate()
556 bcs->tx_skb = NULL; in close_hdlcstate()
557 test_and_clear_bit(BC_FLG_BUSY, &bcs->Flag); in close_hdlcstate()
563 open_hdlcstate(struct IsdnCardState *cs, struct BCState *bcs) in open_hdlcstate() argument
565 if (!test_and_set_bit(BC_FLG_INIT, &bcs->Flag)) { in open_hdlcstate()
566 if (!(bcs->hw.hdlc.rcvbuf = kmalloc(HSCX_BUFMAX, GFP_ATOMIC))) { in open_hdlcstate()
571 if (!(bcs->blog = kmalloc(MAX_BLOG_SPACE, GFP_ATOMIC))) { in open_hdlcstate()
573 "HiSax: No memory for bcs->blog\n"); in open_hdlcstate()
574 test_and_clear_bit(BC_FLG_INIT, &bcs->Flag); in open_hdlcstate()
575 kfree(bcs->hw.hdlc.rcvbuf); in open_hdlcstate()
576 bcs->hw.hdlc.rcvbuf = NULL; in open_hdlcstate()
579 skb_queue_head_init(&bcs->rqueue); in open_hdlcstate()
580 skb_queue_head_init(&bcs->squeue); in open_hdlcstate()
582 bcs->tx_skb = NULL; in open_hdlcstate()
583 test_and_clear_bit(BC_FLG_BUSY, &bcs->Flag); in open_hdlcstate()
584 bcs->event = 0; in open_hdlcstate()
585 bcs->hw.hdlc.rcvidx = 0; in open_hdlcstate()
586 bcs->tx_cnt = 0; in open_hdlcstate()
593 bcs->channel = st->l1.bc; in setstack_hdlc()
594 if (open_hdlcstate(st->l1.hardware, bcs)) in setstack_hdlc()
595 return (-1); in setstack_hdlc()
596 st->l1.bcs = bcs; in setstack_hdlc()
597 st->l2.l2l1 = hdlc_l2l1; in setstack_hdlc()
599 bcs->st = st; in setstack_hdlc()
606 clear_pending_hdlc_ints(struct IsdnCardState *cs)
610 if (cs->subtyp == AVM_FRITZ_PCI) {
611 val = ReadHDLCPCI(cs, 0, HDLC_STATUS);
612 debugl1(cs, "HDLC 1 STA %x", val);
613 val = ReadHDLCPCI(cs, 1, HDLC_STATUS);
614 debugl1(cs, "HDLC 2 STA %x", val);
616 val = ReadHDLCPnP(cs, 0, HDLC_STATUS);
617 debugl1(cs, "HDLC 1 STA %x", val);
618 val = ReadHDLCPnP(cs, 0, HDLC_STATUS + 1);
619 debugl1(cs, "HDLC 1 RML %x", val);
620 val = ReadHDLCPnP(cs, 0, HDLC_STATUS + 2);
621 debugl1(cs, "HDLC 1 MODE %x", val);
622 val = ReadHDLCPnP(cs, 0, HDLC_STATUS + 3);
623 debugl1(cs, "HDLC 1 VIN %x", val);
624 val = ReadHDLCPnP(cs, 1, HDLC_STATUS);
625 debugl1(cs, "HDLC 2 STA %x", val);
626 val = ReadHDLCPnP(cs, 1, HDLC_STATUS + 1);
627 debugl1(cs, "HDLC 2 RML %x", val);
628 val = ReadHDLCPnP(cs, 1, HDLC_STATUS + 2);
629 debugl1(cs, "HDLC 2 MODE %x", val);
630 val = ReadHDLCPnP(cs, 1, HDLC_STATUS + 3);
631 debugl1(cs, "HDLC 2 VIN %x", val);
637 inithdlc(struct IsdnCardState *cs) in inithdlc() argument
639 cs->bcs[0].BC_SetStack = setstack_hdlc; in inithdlc()
640 cs->bcs[1].BC_SetStack = setstack_hdlc; in inithdlc()
641 cs->bcs[0].BC_Close = close_hdlcstate; in inithdlc()
642 cs->bcs[1].BC_Close = close_hdlcstate; in inithdlc()
643 modehdlc(cs->bcs, -1, 0); in inithdlc()
644 modehdlc(cs->bcs + 1, -1, 1); in inithdlc()
650 struct IsdnCardState *cs = dev_id; in avm_pcipnp_interrupt() local
655 spin_lock_irqsave(&cs->lock, flags); in avm_pcipnp_interrupt()
656 sval = inb(cs->hw.avm.cfg_reg + 2); in avm_pcipnp_interrupt()
659 spin_unlock_irqrestore(&cs->lock, flags); in avm_pcipnp_interrupt()
663 val = ReadISAC(cs, ISAC_ISTA); in avm_pcipnp_interrupt()
664 isac_interrupt(cs, val); in avm_pcipnp_interrupt()
667 HDLC_irq_main(cs); in avm_pcipnp_interrupt()
669 WriteISAC(cs, ISAC_MASK, 0xFF); in avm_pcipnp_interrupt()
670 WriteISAC(cs, ISAC_MASK, 0x0); in avm_pcipnp_interrupt()
671 spin_unlock_irqrestore(&cs->lock, flags); in avm_pcipnp_interrupt()
676 reset_avmpcipnp(struct IsdnCardState *cs) in reset_avmpcipnp() argument
679 outb(AVM_STATUS0_RESET | AVM_STATUS0_DIS_TIMER, cs->hw.avm.cfg_reg + 2); in reset_avmpcipnp()
681 outb(AVM_STATUS0_DIS_TIMER | AVM_STATUS0_RES_TIMER | AVM_STATUS0_ENA_IRQ, cs->hw.avm.cfg_reg + 2); in reset_avmpcipnp()
682 outb(AVM_STATUS1_ENA_IOM | cs->irq, cs->hw.avm.cfg_reg + 3); in reset_avmpcipnp()
684 printk(KERN_INFO "AVM PCI/PnP: S1 %x\n", inb(cs->hw.avm.cfg_reg + 3)); in reset_avmpcipnp()
688 AVM_card_msg(struct IsdnCardState *cs, int mt, void *arg) in AVM_card_msg() argument
694 spin_lock_irqsave(&cs->lock, flags); in AVM_card_msg()
695 reset_avmpcipnp(cs); in AVM_card_msg()
696 spin_unlock_irqrestore(&cs->lock, flags); in AVM_card_msg()
699 outb(0, cs->hw.avm.cfg_reg + 2); in AVM_card_msg()
700 release_region(cs->hw.avm.cfg_reg, 32); in AVM_card_msg()
703 spin_lock_irqsave(&cs->lock, flags); in AVM_card_msg()
704 reset_avmpcipnp(cs); in AVM_card_msg()
705 clear_pending_isac_ints(cs); in AVM_card_msg()
706 initisac(cs); in AVM_card_msg()
707 inithdlc(cs); in AVM_card_msg()
709 cs->hw.avm.cfg_reg + 2); in AVM_card_msg()
710 WriteISAC(cs, ISAC_MASK, 0); in AVM_card_msg()
712 AVM_STATUS0_ENA_IRQ, cs->hw.avm.cfg_reg + 2); in AVM_card_msg()
714 WriteISAC(cs, ISAC_CMDR, 0x41); in AVM_card_msg()
715 spin_unlock_irqrestore(&cs->lock, flags); in AVM_card_msg()
723 static int avm_setup_rest(struct IsdnCardState *cs) in avm_setup_rest() argument
727 cs->hw.avm.isac = cs->hw.avm.cfg_reg + 0x10; in avm_setup_rest()
728 if (!request_region(cs->hw.avm.cfg_reg, 32, in avm_setup_rest()
729 (cs->subtyp == AVM_FRITZ_PCI) ? "avm PCI" : "avm PnP")) { in avm_setup_rest()
731 "HiSax: Fritz!PCI/PNP config port %x-%x already in use\n", in avm_setup_rest()
732 cs->hw.avm.cfg_reg, in avm_setup_rest()
733 cs->hw.avm.cfg_reg + 31); in avm_setup_rest()
736 switch (cs->subtyp) { in avm_setup_rest()
738 val = inl(cs->hw.avm.cfg_reg); in avm_setup_rest()
739 printk(KERN_INFO "AVM PCI: stat %#x\n", val); in avm_setup_rest()
740 printk(KERN_INFO "AVM PCI: Class %X Rev %d\n", in avm_setup_rest()
742 cs->BC_Read_Reg = &ReadHDLC_s; in avm_setup_rest()
743 cs->BC_Write_Reg = &WriteHDLC_s; in avm_setup_rest()
746 val = inb(cs->hw.avm.cfg_reg); in avm_setup_rest()
747 ver = inb(cs->hw.avm.cfg_reg + 1); in avm_setup_rest()
748 printk(KERN_INFO "AVM PnP: Class %X Rev %d\n", val, ver); in avm_setup_rest()
749 cs->BC_Read_Reg = &ReadHDLCPnP; in avm_setup_rest()
750 cs->BC_Write_Reg = &WriteHDLCPnP; in avm_setup_rest()
753 printk(KERN_WARNING "AVM unknown subtype %d\n", cs->subtyp); in avm_setup_rest()
756 printk(KERN_INFO "HiSax: %s config irq:%d base:0x%X\n", in avm_setup_rest()
757 (cs->subtyp == AVM_FRITZ_PCI) ? "AVM Fritz!PCI" : "AVM Fritz!PnP", in avm_setup_rest()
758 cs->irq, cs->hw.avm.cfg_reg); in avm_setup_rest()
760 setup_isac(cs); in avm_setup_rest()
761 cs->readisac = &ReadISAC; in avm_setup_rest()
762 cs->writeisac = &WriteISAC; in avm_setup_rest()
763 cs->readisacfifo = &ReadISACfifo; in avm_setup_rest()
764 cs->writeisacfifo = &WriteISACfifo; in avm_setup_rest()
765 cs->BC_Send_Data = &hdlc_fill_fifo; in avm_setup_rest()
766 cs->cardmsg = &AVM_card_msg; in avm_setup_rest()
767 cs->irq_func = &avm_pcipnp_interrupt; in avm_setup_rest()
768 cs->writeisac(cs, ISAC_MASK, 0xFF); in avm_setup_rest()
769 ISACVersion(cs, (cs->subtyp == AVM_FRITZ_PCI) ? "AVM PCI:" : "AVM PnP:"); in avm_setup_rest()
775 static int avm_pnp_setup(struct IsdnCardState *cs) in avm_pnp_setup() argument
777 return (1); /* no-op: success */ in avm_pnp_setup()
784 static int avm_pnp_setup(struct IsdnCardState *cs) in avm_pnp_setup() argument
789 return (1); /* no-op: success */ in avm_pnp_setup()
806 cs->hw.avm.cfg_reg = in avm_pnp_setup()
808 cs->irq = pnp_irq(pnp_avm_d, 0); in avm_pnp_setup()
809 if (cs->irq == -1) { in avm_pnp_setup()
813 if (!cs->hw.avm.cfg_reg) { in avm_pnp_setup()
817 cs->subtyp = AVM_FRITZ_PNP; in avm_pnp_setup()
830 static int avm_pci_setup(struct IsdnCardState *cs) in avm_pci_setup() argument
832 return (1); /* no-op: success */ in avm_pci_setup()
839 static int avm_pci_setup(struct IsdnCardState *cs) in avm_pci_setup() argument
847 cs->irq = dev_avm->irq; in avm_pci_setup()
848 if (!cs->irq) { in avm_pci_setup()
853 cs->hw.avm.cfg_reg = pci_resource_start(dev_avm, 1); in avm_pci_setup()
854 if (!cs->hw.avm.cfg_reg) { in avm_pci_setup()
855 printk(KERN_ERR "FritzPCI: No IO-Adr for PCI card found\n"); in avm_pci_setup()
859 cs->subtyp = AVM_FRITZ_PCI; in avm_pci_setup()
865 cs->irq_flags |= IRQF_SHARED; in avm_pci_setup()
874 struct IsdnCardState *cs = card->cs; in setup_avm_pcipnp() local
881 if (cs->typ != ISDN_CTYPE_FRITZPCI) in setup_avm_pcipnp()
884 if (card->para[1]) { in setup_avm_pcipnp()
886 cs->hw.avm.cfg_reg = card->para[1]; in setup_avm_pcipnp()
887 cs->irq = card->para[0]; in setup_avm_pcipnp()
888 cs->subtyp = AVM_FRITZ_PNP; in setup_avm_pcipnp()
892 rc = avm_pnp_setup(cs); in setup_avm_pcipnp()
898 rc = avm_pci_setup(cs); in setup_avm_pcipnp()
903 return avm_setup_rest(cs); in setup_avm_pcipnp()