Lines Matching refs:cs
132 ReadISAC(struct IsdnCardState *cs, u_char offset) in ReadISAC() argument
134 return (readreg(cs->hw.diva.isac_adr, cs->hw.diva.isac, offset)); in ReadISAC()
138 WriteISAC(struct IsdnCardState *cs, u_char offset, u_char value) in WriteISAC() argument
140 writereg(cs->hw.diva.isac_adr, cs->hw.diva.isac, offset, value); in WriteISAC()
144 ReadISACfifo(struct IsdnCardState *cs, u_char *data, int size) in ReadISACfifo() argument
146 readfifo(cs->hw.diva.isac_adr, cs->hw.diva.isac, 0, data, size); in ReadISACfifo()
150 WriteISACfifo(struct IsdnCardState *cs, u_char *data, int size) in WriteISACfifo() argument
152 writefifo(cs->hw.diva.isac_adr, cs->hw.diva.isac, 0, data, size); in WriteISACfifo()
156 ReadISAC_IPAC(struct IsdnCardState *cs, u_char offset) in ReadISAC_IPAC() argument
158 return (readreg(cs->hw.diva.isac_adr, cs->hw.diva.isac, offset + 0x80)); in ReadISAC_IPAC()
162 WriteISAC_IPAC(struct IsdnCardState *cs, u_char offset, u_char value) in WriteISAC_IPAC() argument
164 writereg(cs->hw.diva.isac_adr, cs->hw.diva.isac, offset | 0x80, value); in WriteISAC_IPAC()
168 ReadISACfifo_IPAC(struct IsdnCardState *cs, u_char *data, int size) in ReadISACfifo_IPAC() argument
170 readfifo(cs->hw.diva.isac_adr, cs->hw.diva.isac, 0x80, data, size); in ReadISACfifo_IPAC()
174 WriteISACfifo_IPAC(struct IsdnCardState *cs, u_char *data, int size) in WriteISACfifo_IPAC() argument
176 writefifo(cs->hw.diva.isac_adr, cs->hw.diva.isac, 0x80, data, size); in WriteISACfifo_IPAC()
180 ReadHSCX(struct IsdnCardState *cs, int hscx, u_char offset) in ReadHSCX() argument
182 return (readreg(cs->hw.diva.hscx_adr, in ReadHSCX()
183 cs->hw.diva.hscx, offset + (hscx ? 0x40 : 0))); in ReadHSCX()
187 WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value) in WriteHSCX() argument
189 writereg(cs->hw.diva.hscx_adr, in WriteHSCX()
190 cs->hw.diva.hscx, offset + (hscx ? 0x40 : 0), value); in WriteHSCX()
194 MemReadISAC_IPAC(struct IsdnCardState *cs, u_char offset) in MemReadISAC_IPAC() argument
196 return (memreadreg(cs->hw.diva.cfg_reg, offset + 0x80)); in MemReadISAC_IPAC()
200 MemWriteISAC_IPAC(struct IsdnCardState *cs, u_char offset, u_char value) in MemWriteISAC_IPAC() argument
202 memwritereg(cs->hw.diva.cfg_reg, offset | 0x80, value); in MemWriteISAC_IPAC()
206 MemReadISACfifo_IPAC(struct IsdnCardState *cs, u_char *data, int size) in MemReadISACfifo_IPAC() argument
209 *data++ = memreadreg(cs->hw.diva.cfg_reg, 0x80); in MemReadISACfifo_IPAC()
213 MemWriteISACfifo_IPAC(struct IsdnCardState *cs, u_char *data, int size) in MemWriteISACfifo_IPAC() argument
216 memwritereg(cs->hw.diva.cfg_reg, 0x80, *data++); in MemWriteISACfifo_IPAC()
220 MemReadHSCX(struct IsdnCardState *cs, int hscx, u_char offset) in MemReadHSCX() argument
222 return (memreadreg(cs->hw.diva.cfg_reg, offset + (hscx ? 0x40 : 0))); in MemReadHSCX()
226 MemWriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value) in MemWriteHSCX() argument
228 memwritereg(cs->hw.diva.cfg_reg, offset + (hscx ? 0x40 : 0), value); in MemWriteHSCX()
233 MemReadISAC_IPACX(struct IsdnCardState *cs, u_char offset) in MemReadISAC_IPACX() argument
235 return (memreadreg(cs->hw.diva.cfg_reg, offset)); in MemReadISAC_IPACX()
239 MemWriteISAC_IPACX(struct IsdnCardState *cs, u_char offset, u_char value) in MemWriteISAC_IPACX() argument
241 memwritereg(cs->hw.diva.cfg_reg, offset, value); in MemWriteISAC_IPACX()
245 MemReadISACfifo_IPACX(struct IsdnCardState *cs, u_char *data, int size) in MemReadISACfifo_IPACX() argument
248 *data++ = memreadreg(cs->hw.diva.cfg_reg, 0); in MemReadISACfifo_IPACX()
252 MemWriteISACfifo_IPACX(struct IsdnCardState *cs, u_char *data, int size) in MemWriteISACfifo_IPACX() argument
255 memwritereg(cs->hw.diva.cfg_reg, 0, *data++); in MemWriteISACfifo_IPACX()
259 MemReadHSCX_IPACX(struct IsdnCardState *cs, int hscx, u_char offset) in MemReadHSCX_IPACX() argument
261 return (memreadreg(cs->hw.diva.cfg_reg, offset + in MemReadHSCX_IPACX()
266 MemWriteHSCX_IPACX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value) in MemWriteHSCX_IPACX() argument
268 memwritereg(cs->hw.diva.cfg_reg, offset + in MemWriteHSCX_IPACX()
276 #define READHSCX(cs, nr, reg) readreg(cs->hw.diva.hscx_adr, \ argument
277 cs->hw.diva.hscx, reg + (nr ? 0x40 : 0))
278 #define WRITEHSCX(cs, nr, reg, data) writereg(cs->hw.diva.hscx_adr, \ argument
279 cs->hw.diva.hscx, reg + (nr ? 0x40 : 0), data)
281 #define READHSCXFIFO(cs, nr, ptr, cnt) readfifo(cs->hw.diva.hscx_adr, \ argument
282 cs->hw.diva.hscx, (nr ? 0x40 : 0), ptr, cnt)
284 #define WRITEHSCXFIFO(cs, nr, ptr, cnt) writefifo(cs->hw.diva.hscx_adr, \ argument
285 cs->hw.diva.hscx, (nr ? 0x40 : 0), ptr, cnt)
292 struct IsdnCardState *cs = dev_id; in diva_interrupt() local
297 spin_lock_irqsave(&cs->lock, flags); in diva_interrupt()
298 while (((sval = bytein(cs->hw.diva.ctrl)) & DIVA_IRQ_REQ) && cnt) { in diva_interrupt()
299 val = readreg(cs->hw.diva.hscx_adr, cs->hw.diva.hscx, HSCX_ISTA + 0x40); in diva_interrupt()
301 hscx_int_main(cs, val); in diva_interrupt()
302 val = readreg(cs->hw.diva.isac_adr, cs->hw.diva.isac, ISAC_ISTA); in diva_interrupt()
304 isac_interrupt(cs, val); in diva_interrupt()
309 writereg(cs->hw.diva.hscx_adr, cs->hw.diva.hscx, HSCX_MASK, 0xFF); in diva_interrupt()
310 writereg(cs->hw.diva.hscx_adr, cs->hw.diva.hscx, HSCX_MASK + 0x40, 0xFF); in diva_interrupt()
311 writereg(cs->hw.diva.isac_adr, cs->hw.diva.isac, ISAC_MASK, 0xFF); in diva_interrupt()
312 writereg(cs->hw.diva.isac_adr, cs->hw.diva.isac, ISAC_MASK, 0x0); in diva_interrupt()
313 writereg(cs->hw.diva.hscx_adr, cs->hw.diva.hscx, HSCX_MASK, 0x0); in diva_interrupt()
314 writereg(cs->hw.diva.hscx_adr, cs->hw.diva.hscx, HSCX_MASK + 0x40, 0x0); in diva_interrupt()
315 spin_unlock_irqrestore(&cs->lock, flags); in diva_interrupt()
322 struct IsdnCardState *cs = dev_id; in diva_irq_ipac_isa() local
327 spin_lock_irqsave(&cs->lock, flags); in diva_irq_ipac_isa()
328 ista = readreg(cs->hw.diva.isac_adr, cs->hw.diva.isac, IPAC_ISTA); in diva_irq_ipac_isa()
330 if (cs->debug & L1_DEB_IPAC) in diva_irq_ipac_isa()
331 debugl1(cs, "IPAC ISTA %02X", ista); in diva_irq_ipac_isa()
333 val = readreg(cs->hw.diva.isac_adr, cs->hw.diva.isac, HSCX_ISTA + 0x40); in diva_irq_ipac_isa()
341 hscx_int_main(cs, val); in diva_irq_ipac_isa()
344 val = 0xfe & readreg(cs->hw.diva.isac_adr, cs->hw.diva.isac, ISAC_ISTA + 0x80); in diva_irq_ipac_isa()
346 isac_interrupt(cs, val); in diva_irq_ipac_isa()
351 isac_interrupt(cs, val); in diva_irq_ipac_isa()
353 ista = readreg(cs->hw.diva.isac_adr, cs->hw.diva.isac, IPAC_ISTA); in diva_irq_ipac_isa()
360 writereg(cs->hw.diva.isac_adr, cs->hw.diva.isac, IPAC_MASK, 0xFF); in diva_irq_ipac_isa()
361 writereg(cs->hw.diva.isac_adr, cs->hw.diva.isac, IPAC_MASK, 0xC0); in diva_irq_ipac_isa()
362 spin_unlock_irqrestore(&cs->lock, flags); in diva_irq_ipac_isa()
367 MemwaitforCEC(struct IsdnCardState *cs, int hscx) in MemwaitforCEC() argument
371 while ((MemReadHSCX(cs, hscx, HSCX_STAR) & 0x04) && to) { in MemwaitforCEC()
381 MemwaitforXFW(struct IsdnCardState *cs, int hscx) in MemwaitforXFW() argument
385 while (((MemReadHSCX(cs, hscx, HSCX_STAR) & 0x44) != 0x40) && to) { in MemwaitforXFW()
394 MemWriteHSCXCMDR(struct IsdnCardState *cs, int hscx, u_char data) in MemWriteHSCXCMDR() argument
396 MemwaitforCEC(cs, hscx); in MemWriteHSCXCMDR()
397 MemWriteHSCX(cs, hscx, HSCX_CMDR, data); in MemWriteHSCXCMDR()
404 struct IsdnCardState *cs = bcs->cs; in Memhscx_empty_fifo() local
407 if ((cs->debug & L1_DEB_HSCX) && !(cs->debug & L1_DEB_HSCX_FIFO)) in Memhscx_empty_fifo()
408 debugl1(cs, "hscx_empty_fifo"); in Memhscx_empty_fifo()
411 if (cs->debug & L1_DEB_WARN) in Memhscx_empty_fifo()
412 debugl1(cs, "hscx_empty_fifo: incoming packet too large"); in Memhscx_empty_fifo()
413 MemWriteHSCXCMDR(cs, bcs->hw.hscx.hscx, 0x80); in Memhscx_empty_fifo()
420 *ptr++ = memreadreg(cs->hw.diva.cfg_reg, bcs->hw.hscx.hscx ? 0x40 : 0); in Memhscx_empty_fifo()
421 MemWriteHSCXCMDR(cs, bcs->hw.hscx.hscx, 0x80); in Memhscx_empty_fifo()
424 if (cs->debug & L1_DEB_HSCX_FIFO) { in Memhscx_empty_fifo()
430 debugl1(cs, "%s", bcs->blog); in Memhscx_empty_fifo()
437 struct IsdnCardState *cs = bcs->cs; in Memhscx_fill_fifo() local
439 int fifo_size = test_bit(HW_IPAC, &cs->HW_Flags) ? 64 : 32; in Memhscx_fill_fifo()
442 if ((cs->debug & L1_DEB_HSCX) && !(cs->debug & L1_DEB_HSCX_FIFO)) in Memhscx_fill_fifo()
443 debugl1(cs, "hscx_fill_fifo"); in Memhscx_fill_fifo()
457 MemwaitforXFW(cs, bcs->hw.hscx.hscx); in Memhscx_fill_fifo()
463 memwritereg(cs->hw.diva.cfg_reg, bcs->hw.hscx.hscx ? 0x40 : 0, in Memhscx_fill_fifo()
465 MemWriteHSCXCMDR(cs, bcs->hw.hscx.hscx, more ? 0x8 : 0xa); in Memhscx_fill_fifo()
466 if (cs->debug & L1_DEB_HSCX_FIFO) { in Memhscx_fill_fifo()
472 debugl1(cs, "%s", bcs->blog); in Memhscx_fill_fifo()
477 Memhscx_interrupt(struct IsdnCardState *cs, u_char val, u_char hscx) in Memhscx_interrupt() argument
480 struct BCState *bcs = cs->bcs + hscx; in Memhscx_interrupt()
482 int fifo_size = test_bit(HW_IPAC, &cs->HW_Flags) ? 64 : 32; in Memhscx_interrupt()
489 r = MemReadHSCX(cs, hscx, HSCX_RSTA); in Memhscx_interrupt()
492 if (cs->debug & L1_DEB_WARN) in Memhscx_interrupt()
493 debugl1(cs, "HSCX invalid frame"); in Memhscx_interrupt()
495 if (cs->debug & L1_DEB_WARN) in Memhscx_interrupt()
496 debugl1(cs, "HSCX RDO mode=%d", in Memhscx_interrupt()
499 if (cs->debug & L1_DEB_WARN) in Memhscx_interrupt()
500 debugl1(cs, "HSCX CRC error"); in Memhscx_interrupt()
501 MemWriteHSCXCMDR(cs, hscx, 0x80); in Memhscx_interrupt()
503 count = MemReadHSCX(cs, hscx, HSCX_RBCL) & ( in Memhscx_interrupt()
504 test_bit(HW_IPAC, &cs->HW_Flags) ? 0x3f : 0x1f); in Memhscx_interrupt()
509 if (cs->debug & L1_DEB_HSCX_FIFO) in Memhscx_interrupt()
510 debugl1(cs, "HX Frame %d", count); in Memhscx_interrupt()
567 Memhscx_int_main(struct IsdnCardState *cs, u_char val) in Memhscx_int_main() argument
574 bcs = cs->bcs + 1; in Memhscx_int_main()
575 exval = MemReadHSCX(cs, 1, HSCX_EXIR); in Memhscx_int_main()
588 MemWriteHSCXCMDR(cs, bcs->hw.hscx.hscx, 0x01); in Memhscx_int_main()
589 if (cs->debug & L1_DEB_WARN) in Memhscx_int_main()
590 debugl1(cs, "HSCX B EXIR %x Lost TX", exval); in Memhscx_int_main()
592 } else if (cs->debug & L1_DEB_HSCX) in Memhscx_int_main()
593 debugl1(cs, "HSCX B EXIR %x", exval); in Memhscx_int_main()
596 if (cs->debug & L1_DEB_HSCX) in Memhscx_int_main()
597 debugl1(cs, "HSCX B interrupt %x", val); in Memhscx_int_main()
598 Memhscx_interrupt(cs, val, 1); in Memhscx_int_main()
601 bcs = cs->bcs; in Memhscx_int_main()
602 exval = MemReadHSCX(cs, 0, HSCX_EXIR); in Memhscx_int_main()
615 MemWriteHSCXCMDR(cs, bcs->hw.hscx.hscx, 0x01); in Memhscx_int_main()
616 if (cs->debug & L1_DEB_WARN) in Memhscx_int_main()
617 debugl1(cs, "HSCX A EXIR %x Lost TX", exval); in Memhscx_int_main()
619 } else if (cs->debug & L1_DEB_HSCX) in Memhscx_int_main()
620 debugl1(cs, "HSCX A EXIR %x", exval); in Memhscx_int_main()
623 exval = MemReadHSCX(cs, 0, HSCX_ISTA); in Memhscx_int_main()
624 if (cs->debug & L1_DEB_HSCX) in Memhscx_int_main()
625 debugl1(cs, "HSCX A interrupt %x", exval); in Memhscx_int_main()
626 Memhscx_interrupt(cs, exval, 0); in Memhscx_int_main()
633 struct IsdnCardState *cs = dev_id; in diva_irq_ipac_pci() local
639 spin_lock_irqsave(&cs->lock, flags); in diva_irq_ipac_pci()
640 cfg = (u_char *) cs->hw.diva.pci_cfg; in diva_irq_ipac_pci()
643 spin_unlock_irqrestore(&cs->lock, flags); in diva_irq_ipac_pci()
647 ista = memreadreg(cs->hw.diva.cfg_reg, IPAC_ISTA); in diva_irq_ipac_pci()
649 if (cs->debug & L1_DEB_IPAC) in diva_irq_ipac_pci()
650 debugl1(cs, "IPAC ISTA %02X", ista); in diva_irq_ipac_pci()
652 val = memreadreg(cs->hw.diva.cfg_reg, HSCX_ISTA + 0x40); in diva_irq_ipac_pci()
660 Memhscx_int_main(cs, val); in diva_irq_ipac_pci()
663 val = 0xfe & memreadreg(cs->hw.diva.cfg_reg, ISAC_ISTA + 0x80); in diva_irq_ipac_pci()
665 isac_interrupt(cs, val); in diva_irq_ipac_pci()
670 isac_interrupt(cs, val); in diva_irq_ipac_pci()
672 ista = memreadreg(cs->hw.diva.cfg_reg, IPAC_ISTA); in diva_irq_ipac_pci()
679 memwritereg(cs->hw.diva.cfg_reg, IPAC_MASK, 0xFF); in diva_irq_ipac_pci()
680 memwritereg(cs->hw.diva.cfg_reg, IPAC_MASK, 0xC0); in diva_irq_ipac_pci()
681 spin_unlock_irqrestore(&cs->lock, flags); in diva_irq_ipac_pci()
688 struct IsdnCardState *cs = dev_id; in diva_irq_ipacx_pci() local
693 spin_lock_irqsave(&cs->lock, flags); in diva_irq_ipacx_pci()
694 cfg = (u_char *) cs->hw.diva.pci_cfg; in diva_irq_ipacx_pci()
697 spin_unlock_irqrestore(&cs->lock, flags); in diva_irq_ipacx_pci()
700 interrupt_ipacx(cs); // handler for chip in diva_irq_ipacx_pci()
702 spin_unlock_irqrestore(&cs->lock, flags); in diva_irq_ipacx_pci()
707 release_io_diva(struct IsdnCardState *cs) in release_io_diva() argument
711 if ((cs->subtyp == DIVA_IPAC_PCI) || in release_io_diva()
712 (cs->subtyp == DIVA_IPACX_PCI)) { in release_io_diva()
713 u_int *cfg = (unsigned int *)cs->hw.diva.pci_cfg; in release_io_diva()
717 if (cs->hw.diva.cfg_reg) in release_io_diva()
718 iounmap((void *)cs->hw.diva.cfg_reg); in release_io_diva()
719 if (cs->hw.diva.pci_cfg) in release_io_diva()
720 iounmap((void *)cs->hw.diva.pci_cfg); in release_io_diva()
722 } else if (cs->subtyp != DIVA_IPAC_ISA) { in release_io_diva()
723 del_timer(&cs->hw.diva.tl); in release_io_diva()
724 if (cs->hw.diva.cfg_reg) in release_io_diva()
725 byteout(cs->hw.diva.ctrl, 0); /* LED off, Reset */ in release_io_diva()
727 if ((cs->subtyp == DIVA_ISA) || (cs->subtyp == DIVA_IPAC_ISA)) in release_io_diva()
731 if (cs->hw.diva.cfg_reg) { in release_io_diva()
732 release_region(cs->hw.diva.cfg_reg, bytecnt); in release_io_diva()
737 iounmap_diva(struct IsdnCardState *cs) in iounmap_diva() argument
739 if ((cs->subtyp == DIVA_IPAC_PCI) || (cs->subtyp == DIVA_IPACX_PCI)) { in iounmap_diva()
740 if (cs->hw.diva.cfg_reg) { in iounmap_diva()
741 iounmap((void *)cs->hw.diva.cfg_reg); in iounmap_diva()
742 cs->hw.diva.cfg_reg = 0; in iounmap_diva()
744 if (cs->hw.diva.pci_cfg) { in iounmap_diva()
745 iounmap((void *)cs->hw.diva.pci_cfg); in iounmap_diva()
746 cs->hw.diva.pci_cfg = 0; in iounmap_diva()
754 reset_diva(struct IsdnCardState *cs) in reset_diva() argument
756 if (cs->subtyp == DIVA_IPAC_ISA) { in reset_diva()
757 writereg(cs->hw.diva.isac_adr, cs->hw.diva.isac, IPAC_POTA2, 0x20); in reset_diva()
759 writereg(cs->hw.diva.isac_adr, cs->hw.diva.isac, IPAC_POTA2, 0x00); in reset_diva()
761 writereg(cs->hw.diva.isac_adr, cs->hw.diva.isac, IPAC_MASK, 0xc0); in reset_diva()
762 } else if (cs->subtyp == DIVA_IPAC_PCI) { in reset_diva()
763 unsigned int *ireg = (unsigned int *)(cs->hw.diva.pci_cfg + in reset_diva()
769 memwritereg(cs->hw.diva.cfg_reg, IPAC_MASK, 0xc0); in reset_diva()
770 } else if (cs->subtyp == DIVA_IPACX_PCI) { in reset_diva()
771 unsigned int *ireg = (unsigned int *)(cs->hw.diva.pci_cfg + in reset_diva()
777 MemWriteISAC_IPACX(cs, IPACX_MASK, 0xff); // Interrupts off in reset_diva()
779 cs->hw.diva.ctrl_reg = 0; /* Reset On */ in reset_diva()
780 byteout(cs->hw.diva.ctrl, cs->hw.diva.ctrl_reg); in reset_diva()
782 cs->hw.diva.ctrl_reg |= DIVA_RESET; /* Reset Off */ in reset_diva()
783 byteout(cs->hw.diva.ctrl, cs->hw.diva.ctrl_reg); in reset_diva()
785 if (cs->subtyp == DIVA_ISA) in reset_diva()
786 cs->hw.diva.ctrl_reg |= DIVA_ISA_LED_A; in reset_diva()
789 byteout(cs->hw.diva.pci_cfg + 0x69, 9); in reset_diva()
790 cs->hw.diva.ctrl_reg |= DIVA_PCI_LED_A; in reset_diva()
792 byteout(cs->hw.diva.ctrl, cs->hw.diva.ctrl_reg); in reset_diva()
799 diva_led_handler(struct IsdnCardState *cs) in diva_led_handler() argument
803 if ((cs->subtyp == DIVA_IPAC_ISA) || in diva_led_handler()
804 (cs->subtyp == DIVA_IPAC_PCI) || in diva_led_handler()
805 (cs->subtyp == DIVA_IPACX_PCI)) in diva_led_handler()
807 del_timer(&cs->hw.diva.tl); in diva_led_handler()
808 if (cs->hw.diva.status & DIVA_ASSIGN) in diva_led_handler()
809 cs->hw.diva.ctrl_reg |= (DIVA_ISA == cs->subtyp) ? in diva_led_handler()
812 cs->hw.diva.ctrl_reg ^= (DIVA_ISA == cs->subtyp) ? in diva_led_handler()
816 if (cs->hw.diva.status & 0xf000) in diva_led_handler()
817 cs->hw.diva.ctrl_reg |= (DIVA_ISA == cs->subtyp) ? in diva_led_handler()
819 else if (cs->hw.diva.status & 0x0f00) { in diva_led_handler()
820 cs->hw.diva.ctrl_reg ^= (DIVA_ISA == cs->subtyp) ? in diva_led_handler()
824 cs->hw.diva.ctrl_reg &= ~((DIVA_ISA == cs->subtyp) ? in diva_led_handler()
827 byteout(cs->hw.diva.ctrl, cs->hw.diva.ctrl_reg); in diva_led_handler()
829 init_timer(&cs->hw.diva.tl); in diva_led_handler()
830 cs->hw.diva.tl.expires = jiffies + ((blink * HZ) / 1000); in diva_led_handler()
831 add_timer(&cs->hw.diva.tl); in diva_led_handler()
836 Diva_card_msg(struct IsdnCardState *cs, int mt, void *arg) in Diva_card_msg() argument
843 spin_lock_irqsave(&cs->lock, flags); in Diva_card_msg()
844 reset_diva(cs); in Diva_card_msg()
845 spin_unlock_irqrestore(&cs->lock, flags); in Diva_card_msg()
848 release_io_diva(cs); in Diva_card_msg()
851 spin_lock_irqsave(&cs->lock, flags); in Diva_card_msg()
852 reset_diva(cs); in Diva_card_msg()
853 if (cs->subtyp == DIVA_IPACX_PCI) { in Diva_card_msg()
854 ireg = (unsigned int *)cs->hw.diva.pci_cfg; in Diva_card_msg()
856 init_ipacx(cs, 3); // init chip and enable interrupts in Diva_card_msg()
857 spin_unlock_irqrestore(&cs->lock, flags); in Diva_card_msg()
860 if (cs->subtyp == DIVA_IPAC_PCI) { in Diva_card_msg()
861 ireg = (unsigned int *)cs->hw.diva.pci_cfg; in Diva_card_msg()
864 inithscxisac(cs, 3); in Diva_card_msg()
865 spin_unlock_irqrestore(&cs->lock, flags); in Diva_card_msg()
870 cs->hw.diva.status = 0; in Diva_card_msg()
873 cs->hw.diva.status |= DIVA_ASSIGN; in Diva_card_msg()
877 cs->hw.diva.status |= 0x0200; in Diva_card_msg()
879 cs->hw.diva.status |= 0x0100; in Diva_card_msg()
883 cs->hw.diva.status |= 0x2000; in Diva_card_msg()
885 cs->hw.diva.status |= 0x1000; in Diva_card_msg()
889 cs->hw.diva.status &= ~0x2000; in Diva_card_msg()
890 cs->hw.diva.status &= ~0x0200; in Diva_card_msg()
892 cs->hw.diva.status &= ~0x1000; in Diva_card_msg()
893 cs->hw.diva.status &= ~0x0100; in Diva_card_msg()
897 if ((cs->subtyp != DIVA_IPAC_ISA) && in Diva_card_msg()
898 (cs->subtyp != DIVA_IPAC_PCI) && in Diva_card_msg()
899 (cs->subtyp != DIVA_IPACX_PCI)) { in Diva_card_msg()
900 spin_lock_irqsave(&cs->lock, flags); in Diva_card_msg()
901 diva_led_handler(cs); in Diva_card_msg()
902 spin_unlock_irqrestore(&cs->lock, flags); in Diva_card_msg()
907 static int setup_diva_common(struct IsdnCardState *cs) in setup_diva_common() argument
912 if ((cs->subtyp == DIVA_ISA) || (cs->subtyp == DIVA_IPAC_ISA)) in setup_diva_common()
919 (cs->subtyp == DIVA_PCI) ? "PCI" : in setup_diva_common()
920 (cs->subtyp == DIVA_ISA) ? "ISA" : in setup_diva_common()
921 (cs->subtyp == DIVA_IPAC_ISA) ? "IPAC ISA" : in setup_diva_common()
922 (cs->subtyp == DIVA_IPAC_PCI) ? "IPAC PCI" : "IPACX PCI", in setup_diva_common()
923 cs->hw.diva.cfg_reg, cs->irq); in setup_diva_common()
924 if ((cs->subtyp == DIVA_IPAC_PCI) || in setup_diva_common()
925 (cs->subtyp == DIVA_IPACX_PCI) || in setup_diva_common()
926 (cs->subtyp == DIVA_PCI)) in setup_diva_common()
928 (cs->subtyp == DIVA_PCI) ? "PCI" : in setup_diva_common()
929 (cs->subtyp == DIVA_IPAC_PCI) ? "IPAC PCI" : "IPACX PCI", in setup_diva_common()
930 cs->hw.diva.pci_cfg); in setup_diva_common()
931 if ((cs->subtyp != DIVA_IPAC_PCI) && in setup_diva_common()
932 (cs->subtyp != DIVA_IPACX_PCI)) { in setup_diva_common()
933 if (!request_region(cs->hw.diva.cfg_reg, bytecnt, "diva isdn")) { in setup_diva_common()
937 cs->hw.diva.cfg_reg, in setup_diva_common()
938 cs->hw.diva.cfg_reg + bytecnt); in setup_diva_common()
939 iounmap_diva(cs); in setup_diva_common()
943 cs->BC_Read_Reg = &ReadHSCX; in setup_diva_common()
944 cs->BC_Write_Reg = &WriteHSCX; in setup_diva_common()
945 cs->BC_Send_Data = &hscx_fill_fifo; in setup_diva_common()
946 cs->cardmsg = &Diva_card_msg; in setup_diva_common()
947 setup_isac(cs); in setup_diva_common()
948 if (cs->subtyp == DIVA_IPAC_ISA) { in setup_diva_common()
949 cs->readisac = &ReadISAC_IPAC; in setup_diva_common()
950 cs->writeisac = &WriteISAC_IPAC; in setup_diva_common()
951 cs->readisacfifo = &ReadISACfifo_IPAC; in setup_diva_common()
952 cs->writeisacfifo = &WriteISACfifo_IPAC; in setup_diva_common()
953 cs->irq_func = &diva_irq_ipac_isa; in setup_diva_common()
954 val = readreg(cs->hw.diva.isac_adr, cs->hw.diva.isac, IPAC_ID); in setup_diva_common()
956 } else if (cs->subtyp == DIVA_IPAC_PCI) { in setup_diva_common()
957 cs->readisac = &MemReadISAC_IPAC; in setup_diva_common()
958 cs->writeisac = &MemWriteISAC_IPAC; in setup_diva_common()
959 cs->readisacfifo = &MemReadISACfifo_IPAC; in setup_diva_common()
960 cs->writeisacfifo = &MemWriteISACfifo_IPAC; in setup_diva_common()
961 cs->BC_Read_Reg = &MemReadHSCX; in setup_diva_common()
962 cs->BC_Write_Reg = &MemWriteHSCX; in setup_diva_common()
963 cs->BC_Send_Data = &Memhscx_fill_fifo; in setup_diva_common()
964 cs->irq_func = &diva_irq_ipac_pci; in setup_diva_common()
965 val = memreadreg(cs->hw.diva.cfg_reg, IPAC_ID); in setup_diva_common()
967 } else if (cs->subtyp == DIVA_IPACX_PCI) { in setup_diva_common()
968 cs->readisac = &MemReadISAC_IPACX; in setup_diva_common()
969 cs->writeisac = &MemWriteISAC_IPACX; in setup_diva_common()
970 cs->readisacfifo = &MemReadISACfifo_IPACX; in setup_diva_common()
971 cs->writeisacfifo = &MemWriteISACfifo_IPACX; in setup_diva_common()
972 cs->BC_Read_Reg = &MemReadHSCX_IPACX; in setup_diva_common()
973 cs->BC_Write_Reg = &MemWriteHSCX_IPACX; in setup_diva_common()
974 cs->BC_Send_Data = NULL; // function located in ipacx module in setup_diva_common()
975 cs->irq_func = &diva_irq_ipacx_pci; in setup_diva_common()
977 MemReadISAC_IPACX(cs, IPACX_ID) & 0x3F); in setup_diva_common()
979 cs->hw.diva.tl.function = (void *) diva_led_handler; in setup_diva_common()
980 cs->hw.diva.tl.data = (long) cs; in setup_diva_common()
981 init_timer(&cs->hw.diva.tl); in setup_diva_common()
982 cs->readisac = &ReadISAC; in setup_diva_common()
983 cs->writeisac = &WriteISAC; in setup_diva_common()
984 cs->readisacfifo = &ReadISACfifo; in setup_diva_common()
985 cs->writeisacfifo = &WriteISACfifo; in setup_diva_common()
986 cs->irq_func = &diva_interrupt; in setup_diva_common()
987 ISACVersion(cs, "Diva:"); in setup_diva_common()
988 if (HscxVersion(cs, "Diva:")) { in setup_diva_common()
991 release_io_diva(cs); in setup_diva_common()
1002 struct IsdnCardState *cs = card->cs; in setup_diva_isa() local
1008 cs->hw.diva.ctrl_reg = 0; in setup_diva_isa()
1009 cs->hw.diva.cfg_reg = card->para[1]; in setup_diva_isa()
1010 val = readreg(cs->hw.diva.cfg_reg + DIVA_IPAC_ADR, in setup_diva_isa()
1011 cs->hw.diva.cfg_reg + DIVA_IPAC_DATA, IPAC_ID); in setup_diva_isa()
1014 cs->subtyp = DIVA_IPAC_ISA; in setup_diva_isa()
1015 cs->hw.diva.ctrl = 0; in setup_diva_isa()
1016 cs->hw.diva.isac = card->para[1] + DIVA_IPAC_DATA; in setup_diva_isa()
1017 cs->hw.diva.hscx = card->para[1] + DIVA_IPAC_DATA; in setup_diva_isa()
1018 cs->hw.diva.isac_adr = card->para[1] + DIVA_IPAC_ADR; in setup_diva_isa()
1019 cs->hw.diva.hscx_adr = card->para[1] + DIVA_IPAC_ADR; in setup_diva_isa()
1020 test_and_set_bit(HW_IPAC, &cs->HW_Flags); in setup_diva_isa()
1022 cs->subtyp = DIVA_ISA; in setup_diva_isa()
1023 cs->hw.diva.ctrl = card->para[1] + DIVA_ISA_CTRL; in setup_diva_isa()
1024 cs->hw.diva.isac = card->para[1] + DIVA_ISA_ISAC_DATA; in setup_diva_isa()
1025 cs->hw.diva.hscx = card->para[1] + DIVA_HSCX_DATA; in setup_diva_isa()
1026 cs->hw.diva.isac_adr = card->para[1] + DIVA_ISA_ISAC_ADR; in setup_diva_isa()
1027 cs->hw.diva.hscx_adr = card->para[1] + DIVA_HSCX_ADR; in setup_diva_isa()
1029 cs->irq = card->para[0]; in setup_diva_isa()
1071 struct IsdnCardState *cs = card->cs; in setup_diva_isapnp() local
1102 cs->hw.diva.cfg_reg = card->para[1]; in setup_diva_isapnp()
1103 cs->irq = card->para[0]; in setup_diva_isapnp()
1105 cs->subtyp = DIVA_IPAC_ISA; in setup_diva_isapnp()
1106 cs->hw.diva.ctrl = 0; in setup_diva_isapnp()
1107 cs->hw.diva.isac = in setup_diva_isapnp()
1109 cs->hw.diva.hscx = in setup_diva_isapnp()
1111 cs->hw.diva.isac_adr = in setup_diva_isapnp()
1113 cs->hw.diva.hscx_adr = in setup_diva_isapnp()
1115 test_and_set_bit(HW_IPAC, &cs->HW_Flags); in setup_diva_isapnp()
1117 cs->subtyp = DIVA_ISA; in setup_diva_isapnp()
1118 cs->hw.diva.ctrl = in setup_diva_isapnp()
1120 cs->hw.diva.isac = in setup_diva_isapnp()
1122 cs->hw.diva.hscx = in setup_diva_isapnp()
1124 cs->hw.diva.isac_adr = in setup_diva_isapnp()
1126 cs->hw.diva.hscx_adr = in setup_diva_isapnp()
1159 struct IsdnCardState *cs = card->cs; in setup_diva_pci() local
1161 cs->subtyp = 0; in setup_diva_pci()
1166 cs->subtyp = DIVA_PCI; in setup_diva_pci()
1167 cs->irq = dev_diva->irq; in setup_diva_pci()
1168 cs->hw.diva.cfg_reg = pci_resource_start(dev_diva, 2); in setup_diva_pci()
1173 cs->subtyp = DIVA_PCI; in setup_diva_pci()
1174 cs->irq = dev_diva_u->irq; in setup_diva_pci()
1175 cs->hw.diva.cfg_reg = pci_resource_start(dev_diva_u, 2); in setup_diva_pci()
1180 cs->subtyp = DIVA_IPAC_PCI; in setup_diva_pci()
1181 cs->irq = dev_diva201->irq; in setup_diva_pci()
1182 cs->hw.diva.pci_cfg = in setup_diva_pci()
1184 cs->hw.diva.cfg_reg = in setup_diva_pci()
1190 cs->subtyp = DIVA_IPACX_PCI; in setup_diva_pci()
1191 cs->irq = dev_diva202->irq; in setup_diva_pci()
1192 cs->hw.diva.pci_cfg = in setup_diva_pci()
1194 cs->hw.diva.cfg_reg = in setup_diva_pci()
1200 if (!cs->irq) { in setup_diva_pci()
1202 iounmap_diva(cs); in setup_diva_pci()
1206 if (!cs->hw.diva.cfg_reg) { in setup_diva_pci()
1208 iounmap_diva(cs); in setup_diva_pci()
1211 cs->irq_flags |= IRQF_SHARED; in setup_diva_pci()
1213 if ((cs->subtyp == DIVA_IPAC_PCI) || in setup_diva_pci()
1214 (cs->subtyp == DIVA_IPACX_PCI)) { in setup_diva_pci()
1215 cs->hw.diva.ctrl = 0; in setup_diva_pci()
1216 cs->hw.diva.isac = 0; in setup_diva_pci()
1217 cs->hw.diva.hscx = 0; in setup_diva_pci()
1218 cs->hw.diva.isac_adr = 0; in setup_diva_pci()
1219 cs->hw.diva.hscx_adr = 0; in setup_diva_pci()
1220 test_and_set_bit(HW_IPAC, &cs->HW_Flags); in setup_diva_pci()
1222 cs->hw.diva.ctrl = cs->hw.diva.cfg_reg + DIVA_PCI_CTRL; in setup_diva_pci()
1223 cs->hw.diva.isac = cs->hw.diva.cfg_reg + DIVA_PCI_ISAC_DATA; in setup_diva_pci()
1224 cs->hw.diva.hscx = cs->hw.diva.cfg_reg + DIVA_HSCX_DATA; in setup_diva_pci()
1225 cs->hw.diva.isac_adr = cs->hw.diva.cfg_reg + DIVA_PCI_ISAC_ADR; in setup_diva_pci()
1226 cs->hw.diva.hscx_adr = cs->hw.diva.cfg_reg + DIVA_HSCX_ADR; in setup_diva_pci()
1244 struct IsdnCardState *cs = card->cs; in setup_diva() local
1249 if (cs->typ != ISDN_CTYPE_DIEHLDIVA) in setup_diva()
1251 cs->hw.diva.status = 0; in setup_diva()
1281 return setup_diva_common(card->cs); in setup_diva()