Lines Matching refs:cs
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()
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()
187 WriteHDLCPnP(bcs->cs, bcs->channel, HDLC_STATUS + 1, in write_ctrl()
190 WriteHDLCPnP(bcs->cs, bcs->channel, HDLC_STATUS, in write_ctrl()
198 struct IsdnCardState *cs = bcs->cs; in modehdlc() local
201 if (cs->debug & L1_DEB_HSCX) in modehdlc()
202 debugl1(cs, "hdlc %c mode %d --> %d ichan %d --> %d", in modehdlc()
251 struct IsdnCardState *cs = bcs->cs; in hdlc_empty_fifo() local
253 if ((cs->debug & L1_DEB_HSCX) && !(cs->debug & L1_DEB_HSCX_FIFO)) in hdlc_empty_fifo()
254 debugl1(cs, "hdlc_empty_fifo %d", count); in hdlc_empty_fifo()
256 if (cs->debug & L1_DEB_WARN) in hdlc_empty_fifo()
257 debugl1(cs, "hdlc_empty_fifo: incoming packet too large"); in hdlc_empty_fifo()
263 if (cs->subtyp == AVM_FRITZ_PCI) { in hdlc_empty_fifo()
264 outl(idx, cs->hw.avm.cfg_reg + 4); in hdlc_empty_fifo()
267 *ptr++ = in_be32((unsigned *)(cs->hw.avm.isac + _IO_BASE)); in hdlc_empty_fifo()
269 *ptr++ = inl(cs->hw.avm.isac); in hdlc_empty_fifo()
274 outb(idx, cs->hw.avm.cfg_reg + 4); in hdlc_empty_fifo()
276 *p++ = inb(cs->hw.avm.isac); in hdlc_empty_fifo()
280 if (cs->debug & L1_DEB_HSCX_FIFO) { in hdlc_empty_fifo()
283 if (cs->subtyp == AVM_FRITZ_PNP) in hdlc_empty_fifo()
288 debugl1(cs, "%s", bcs->blog); in hdlc_empty_fifo()
295 struct IsdnCardState *cs = bcs->cs; in hdlc_fill_fifo() local
301 if ((cs->debug & L1_DEB_HSCX) && !(cs->debug & L1_DEB_HSCX_FIFO)) in hdlc_fill_fifo()
302 debugl1(cs, "hdlc_fill_fifo"); in hdlc_fill_fifo()
316 if ((cs->debug & L1_DEB_HSCX) && !(cs->debug & L1_DEB_HSCX_FIFO)) in hdlc_fill_fifo()
317 debugl1(cs, "hdlc_fill_fifo %d/%u", count, bcs->tx_skb->len); in hdlc_fill_fifo()
325 if (cs->subtyp == AVM_FRITZ_PCI) { in hdlc_fill_fifo()
328 out_be32((unsigned *)(cs->hw.avm.isac + _IO_BASE), *ptr++); in hdlc_fill_fifo()
330 outl(*ptr++, cs->hw.avm.isac); in hdlc_fill_fifo()
336 outb(*p++, cs->hw.avm.isac); in hdlc_fill_fifo()
340 if (cs->debug & L1_DEB_HSCX_FIFO) { in hdlc_fill_fifo()
343 if (cs->subtyp == AVM_FRITZ_PNP) in hdlc_fill_fifo()
348 debugl1(cs, "%s", bcs->blog); in hdlc_fill_fifo()
357 if (bcs->cs->debug & L1_DEB_HSCX) in HDLC_irq()
358 debugl1(bcs->cs, "ch%d stat %#x", bcs->channel, stat); in HDLC_irq()
361 if (bcs->cs->debug & L1_DEB_HSCX) in HDLC_irq()
362 debugl1(bcs->cs, "RDO"); in HDLC_irq()
364 debugl1(bcs->cs, "ch%d stat %#x", bcs->channel, stat); in HDLC_irq()
388 if (bcs->cs->debug & L1_DEB_HSCX) in HDLC_irq()
389 debugl1(bcs->cs, "invalid frame"); in HDLC_irq()
391 debugl1(bcs->cs, "ch%d invalid frame %#x", bcs->channel, stat); in HDLC_irq()
405 if (bcs->cs->debug & L1_DEB_WARN) in HDLC_irq()
406 debugl1(bcs->cs, "ch%d XDU", bcs->channel); in HDLC_irq()
407 } else if (bcs->cs->debug & L1_DEB_WARN) in HDLC_irq()
408 debugl1(bcs->cs, "ch%d XDU without skb", bcs->channel); in HDLC_irq()
446 HDLC_irq_main(struct IsdnCardState *cs) in HDLC_irq_main() argument
451 if (cs->subtyp == AVM_FRITZ_PCI) { in HDLC_irq_main()
452 stat = ReadHDLCPCI(cs, 0, HDLC_STATUS); in HDLC_irq_main()
454 stat = ReadHDLCPnP(cs, 0, HDLC_STATUS); in HDLC_irq_main()
456 stat |= (ReadHDLCPnP(cs, 0, HDLC_STATUS + 1)) << 8; in HDLC_irq_main()
459 if (!(bcs = Sel_BCS(cs, 0))) { in HDLC_irq_main()
460 if (cs->debug) in HDLC_irq_main()
461 debugl1(cs, "hdlc spurious channel 0 IRQ"); in HDLC_irq_main()
465 if (cs->subtyp == AVM_FRITZ_PCI) { in HDLC_irq_main()
466 stat = ReadHDLCPCI(cs, 1, HDLC_STATUS); in HDLC_irq_main()
468 stat = ReadHDLCPnP(cs, 1, HDLC_STATUS); in HDLC_irq_main()
470 stat |= (ReadHDLCPnP(cs, 1, HDLC_STATUS + 1)) << 8; in HDLC_irq_main()
473 if (!(bcs = Sel_BCS(cs, 1))) { in HDLC_irq_main()
474 if (cs->debug) in HDLC_irq_main()
475 debugl1(cs, "hdlc spurious channel 1 IRQ"); in HDLC_irq_main()
490 spin_lock_irqsave(&bcs->cs->lock, flags); in hdlc_l2l1()
497 bcs->cs->BC_Send_Data(bcs); in hdlc_l2l1()
499 spin_unlock_irqrestore(&bcs->cs->lock, flags); in hdlc_l2l1()
502 spin_lock_irqsave(&bcs->cs->lock, flags); in hdlc_l2l1()
509 bcs->cs->BC_Send_Data(bcs); in hdlc_l2l1()
511 spin_unlock_irqrestore(&bcs->cs->lock, flags); in hdlc_l2l1()
521 spin_lock_irqsave(&bcs->cs->lock, flags); in hdlc_l2l1()
524 spin_unlock_irqrestore(&bcs->cs->lock, flags); in hdlc_l2l1()
531 spin_lock_irqsave(&bcs->cs->lock, flags); in hdlc_l2l1()
535 spin_unlock_irqrestore(&bcs->cs->lock, flags); in hdlc_l2l1()
561 open_hdlcstate(struct IsdnCardState *cs, struct BCState *bcs) in open_hdlcstate() argument
604 clear_pending_hdlc_ints(struct IsdnCardState *cs)
608 if (cs->subtyp == AVM_FRITZ_PCI) {
609 val = ReadHDLCPCI(cs, 0, HDLC_STATUS);
610 debugl1(cs, "HDLC 1 STA %x", val);
611 val = ReadHDLCPCI(cs, 1, HDLC_STATUS);
612 debugl1(cs, "HDLC 2 STA %x", val);
614 val = ReadHDLCPnP(cs, 0, HDLC_STATUS);
615 debugl1(cs, "HDLC 1 STA %x", val);
616 val = ReadHDLCPnP(cs, 0, HDLC_STATUS + 1);
617 debugl1(cs, "HDLC 1 RML %x", val);
618 val = ReadHDLCPnP(cs, 0, HDLC_STATUS + 2);
619 debugl1(cs, "HDLC 1 MODE %x", val);
620 val = ReadHDLCPnP(cs, 0, HDLC_STATUS + 3);
621 debugl1(cs, "HDLC 1 VIN %x", val);
622 val = ReadHDLCPnP(cs, 1, HDLC_STATUS);
623 debugl1(cs, "HDLC 2 STA %x", val);
624 val = ReadHDLCPnP(cs, 1, HDLC_STATUS + 1);
625 debugl1(cs, "HDLC 2 RML %x", val);
626 val = ReadHDLCPnP(cs, 1, HDLC_STATUS + 2);
627 debugl1(cs, "HDLC 2 MODE %x", val);
628 val = ReadHDLCPnP(cs, 1, HDLC_STATUS + 3);
629 debugl1(cs, "HDLC 2 VIN %x", val);
635 inithdlc(struct IsdnCardState *cs) in inithdlc() argument
637 cs->bcs[0].BC_SetStack = setstack_hdlc; in inithdlc()
638 cs->bcs[1].BC_SetStack = setstack_hdlc; in inithdlc()
639 cs->bcs[0].BC_Close = close_hdlcstate; in inithdlc()
640 cs->bcs[1].BC_Close = close_hdlcstate; in inithdlc()
641 modehdlc(cs->bcs, -1, 0); in inithdlc()
642 modehdlc(cs->bcs + 1, -1, 1); in inithdlc()
648 struct IsdnCardState *cs = dev_id; in avm_pcipnp_interrupt() local
653 spin_lock_irqsave(&cs->lock, flags); in avm_pcipnp_interrupt()
654 sval = inb(cs->hw.avm.cfg_reg + 2); in avm_pcipnp_interrupt()
657 spin_unlock_irqrestore(&cs->lock, flags); in avm_pcipnp_interrupt()
661 val = ReadISAC(cs, ISAC_ISTA); in avm_pcipnp_interrupt()
662 isac_interrupt(cs, val); in avm_pcipnp_interrupt()
665 HDLC_irq_main(cs); in avm_pcipnp_interrupt()
667 WriteISAC(cs, ISAC_MASK, 0xFF); in avm_pcipnp_interrupt()
668 WriteISAC(cs, ISAC_MASK, 0x0); in avm_pcipnp_interrupt()
669 spin_unlock_irqrestore(&cs->lock, flags); in avm_pcipnp_interrupt()
674 reset_avmpcipnp(struct IsdnCardState *cs) in reset_avmpcipnp() argument
677 outb(AVM_STATUS0_RESET | AVM_STATUS0_DIS_TIMER, cs->hw.avm.cfg_reg + 2); in reset_avmpcipnp()
679 outb(AVM_STATUS0_DIS_TIMER | AVM_STATUS0_RES_TIMER | AVM_STATUS0_ENA_IRQ, cs->hw.avm.cfg_reg + 2); in reset_avmpcipnp()
680 outb(AVM_STATUS1_ENA_IOM | cs->irq, cs->hw.avm.cfg_reg + 3); in reset_avmpcipnp()
682 printk(KERN_INFO "AVM PCI/PnP: S1 %x\n", inb(cs->hw.avm.cfg_reg + 3)); in reset_avmpcipnp()
686 AVM_card_msg(struct IsdnCardState *cs, int mt, void *arg) in AVM_card_msg() argument
692 spin_lock_irqsave(&cs->lock, flags); in AVM_card_msg()
693 reset_avmpcipnp(cs); in AVM_card_msg()
694 spin_unlock_irqrestore(&cs->lock, flags); in AVM_card_msg()
697 outb(0, cs->hw.avm.cfg_reg + 2); in AVM_card_msg()
698 release_region(cs->hw.avm.cfg_reg, 32); in AVM_card_msg()
701 spin_lock_irqsave(&cs->lock, flags); in AVM_card_msg()
702 reset_avmpcipnp(cs); in AVM_card_msg()
703 clear_pending_isac_ints(cs); in AVM_card_msg()
704 initisac(cs); in AVM_card_msg()
705 inithdlc(cs); in AVM_card_msg()
707 cs->hw.avm.cfg_reg + 2); in AVM_card_msg()
708 WriteISAC(cs, ISAC_MASK, 0); in AVM_card_msg()
710 AVM_STATUS0_ENA_IRQ, cs->hw.avm.cfg_reg + 2); in AVM_card_msg()
712 WriteISAC(cs, ISAC_CMDR, 0x41); in AVM_card_msg()
713 spin_unlock_irqrestore(&cs->lock, flags); in AVM_card_msg()
721 static int avm_setup_rest(struct IsdnCardState *cs) in avm_setup_rest() argument
725 cs->hw.avm.isac = cs->hw.avm.cfg_reg + 0x10; in avm_setup_rest()
726 if (!request_region(cs->hw.avm.cfg_reg, 32, in avm_setup_rest()
727 (cs->subtyp == AVM_FRITZ_PCI) ? "avm PCI" : "avm PnP")) { in avm_setup_rest()
730 cs->hw.avm.cfg_reg, in avm_setup_rest()
731 cs->hw.avm.cfg_reg + 31); in avm_setup_rest()
734 switch (cs->subtyp) { in avm_setup_rest()
736 val = inl(cs->hw.avm.cfg_reg); in avm_setup_rest()
740 cs->BC_Read_Reg = &ReadHDLC_s; in avm_setup_rest()
741 cs->BC_Write_Reg = &WriteHDLC_s; in avm_setup_rest()
744 val = inb(cs->hw.avm.cfg_reg); in avm_setup_rest()
745 ver = inb(cs->hw.avm.cfg_reg + 1); in avm_setup_rest()
747 cs->BC_Read_Reg = &ReadHDLCPnP; in avm_setup_rest()
748 cs->BC_Write_Reg = &WriteHDLCPnP; in avm_setup_rest()
751 printk(KERN_WARNING "AVM unknown subtype %d\n", cs->subtyp); in avm_setup_rest()
755 (cs->subtyp == AVM_FRITZ_PCI) ? "AVM Fritz!PCI" : "AVM Fritz!PnP", in avm_setup_rest()
756 cs->irq, cs->hw.avm.cfg_reg); in avm_setup_rest()
758 setup_isac(cs); in avm_setup_rest()
759 cs->readisac = &ReadISAC; in avm_setup_rest()
760 cs->writeisac = &WriteISAC; in avm_setup_rest()
761 cs->readisacfifo = &ReadISACfifo; in avm_setup_rest()
762 cs->writeisacfifo = &WriteISACfifo; in avm_setup_rest()
763 cs->BC_Send_Data = &hdlc_fill_fifo; in avm_setup_rest()
764 cs->cardmsg = &AVM_card_msg; in avm_setup_rest()
765 cs->irq_func = &avm_pcipnp_interrupt; in avm_setup_rest()
766 cs->writeisac(cs, ISAC_MASK, 0xFF); in avm_setup_rest()
767 ISACVersion(cs, (cs->subtyp == AVM_FRITZ_PCI) ? "AVM PCI:" : "AVM PnP:"); in avm_setup_rest()
773 static int avm_pnp_setup(struct IsdnCardState *cs) in avm_pnp_setup() argument
782 static int avm_pnp_setup(struct IsdnCardState *cs) in avm_pnp_setup() argument
804 cs->hw.avm.cfg_reg = in avm_pnp_setup()
806 cs->irq = pnp_irq(pnp_avm_d, 0); in avm_pnp_setup()
807 if (!cs->irq) { in avm_pnp_setup()
811 if (!cs->hw.avm.cfg_reg) { in avm_pnp_setup()
815 cs->subtyp = AVM_FRITZ_PNP; in avm_pnp_setup()
828 static int avm_pci_setup(struct IsdnCardState *cs) in avm_pci_setup() argument
837 static int avm_pci_setup(struct IsdnCardState *cs) in avm_pci_setup() argument
845 cs->irq = dev_avm->irq; in avm_pci_setup()
846 if (!cs->irq) { in avm_pci_setup()
851 cs->hw.avm.cfg_reg = pci_resource_start(dev_avm, 1); in avm_pci_setup()
852 if (!cs->hw.avm.cfg_reg) { in avm_pci_setup()
857 cs->subtyp = AVM_FRITZ_PCI; in avm_pci_setup()
863 cs->irq_flags |= IRQF_SHARED; in avm_pci_setup()
872 struct IsdnCardState *cs = card->cs; in setup_avm_pcipnp() local
879 if (cs->typ != ISDN_CTYPE_FRITZPCI) in setup_avm_pcipnp()
884 cs->hw.avm.cfg_reg = card->para[1]; in setup_avm_pcipnp()
885 cs->irq = card->para[0]; in setup_avm_pcipnp()
886 cs->subtyp = AVM_FRITZ_PNP; in setup_avm_pcipnp()
890 rc = avm_pnp_setup(cs); in setup_avm_pcipnp()
896 rc = avm_pci_setup(cs); in setup_avm_pcipnp()
901 return avm_setup_rest(cs); in setup_avm_pcipnp()