Lines Matching +full:cs +full:- +full:3
6 * support for the Sedlbauer ISDN-Controller PC/104 and
11 * Copyright by Marcus Niemann <niemann@www-bib.fh-bielefeld.de>
24 * ---------------------------------------------------------------------
25 * Speed Card ISAC_HSCX DIP-SWITCH
30 * ISDN PC/104 IPAC DIP-SWITCH
66 #define SEDL_SPEED_FAX 3
77 #define SEDL_CHIP_IPAC 3
81 #define SEDL_BUS_PCMCIA 3
89 #define SEDL_HSCX_ISA_HSCX 3
154 ReadISAC(struct IsdnCardState *cs, u_char offset) in ReadISAC() argument
156 return (readreg(cs->hw.sedl.adr, cs->hw.sedl.isac, offset)); in ReadISAC()
160 WriteISAC(struct IsdnCardState *cs, u_char offset, u_char value) in WriteISAC() argument
162 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, offset, value); in WriteISAC()
166 ReadISACfifo(struct IsdnCardState *cs, u_char * data, int size) in ReadISACfifo() argument
168 readfifo(cs->hw.sedl.adr, cs->hw.sedl.isac, 0, data, size); in ReadISACfifo()
172 WriteISACfifo(struct IsdnCardState *cs, u_char * data, int size) in WriteISACfifo() argument
174 writefifo(cs->hw.sedl.adr, cs->hw.sedl.isac, 0, data, size); in WriteISACfifo()
178 ReadISAC_IPAC(struct IsdnCardState *cs, u_char offset) in ReadISAC_IPAC() argument
180 return (readreg(cs->hw.sedl.adr, cs->hw.sedl.isac, offset|0x80)); in ReadISAC_IPAC()
184 WriteISAC_IPAC(struct IsdnCardState *cs, u_char offset, u_char value) in WriteISAC_IPAC() argument
186 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, offset|0x80, value); in WriteISAC_IPAC()
190 ReadISACfifo_IPAC(struct IsdnCardState *cs, u_char * data, int size) in ReadISACfifo_IPAC() argument
192 readfifo(cs->hw.sedl.adr, cs->hw.sedl.isac, 0x80, data, size); in ReadISACfifo_IPAC()
196 WriteISACfifo_IPAC(struct IsdnCardState *cs, u_char * data, int size) in WriteISACfifo_IPAC() argument
198 writefifo(cs->hw.sedl.adr, cs->hw.sedl.isac, 0x80, data, size); in WriteISACfifo_IPAC()
202 ReadHSCX(struct IsdnCardState *cs, int hscx, u_char offset) in ReadHSCX() argument
204 return (readreg(cs->hw.sedl.adr, in ReadHSCX()
205 cs->hw.sedl.hscx, offset + (hscx ? 0x40 : 0))); in ReadHSCX()
209 WriteHSCX(struct IsdnCardState *cs, int hscx, u_char offset, u_char value) in WriteHSCX() argument
211 writereg(cs->hw.sedl.adr, in WriteHSCX()
212 cs->hw.sedl.hscx, offset + (hscx ? 0x40 : 0), value); in WriteHSCX()
222 ReadISAR(struct IsdnCardState *cs, int mode, u_char offset) in ReadISAR() argument
225 return (readreg(cs->hw.sedl.adr, cs->hw.sedl.hscx, offset)); in ReadISAR()
227 byteout(cs->hw.sedl.adr, offset); in ReadISAR()
228 return(bytein(cs->hw.sedl.hscx)); in ReadISAR()
232 WriteISAR(struct IsdnCardState *cs, int mode, u_char offset, u_char value) in WriteISAR() argument
235 writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx, offset, value); in WriteISAR()
238 byteout(cs->hw.sedl.adr, offset); in WriteISAR()
239 byteout(cs->hw.sedl.hscx, value); in WriteISAR()
247 #define READHSCX(cs, nr, reg) readreg(cs->hw.sedl.adr, \ argument
248 cs->hw.sedl.hscx, reg + (nr ? 0x40 : 0))
249 #define WRITEHSCX(cs, nr, reg, data) writereg(cs->hw.sedl.adr, \ argument
250 cs->hw.sedl.hscx, reg + (nr ? 0x40 : 0), data)
252 #define READHSCXFIFO(cs, nr, ptr, cnt) readfifo(cs->hw.sedl.adr, \ argument
253 cs->hw.sedl.hscx, (nr ? 0x40 : 0), ptr, cnt)
255 #define WRITEHSCXFIFO(cs, nr, ptr, cnt) writefifo(cs->hw.sedl.adr, \ argument
256 cs->hw.sedl.hscx, (nr ? 0x40 : 0), ptr, cnt)
263 struct IsdnCardState *cs = dev_id; in sedlbauer_interrupt() local
267 spin_lock_irqsave(&cs->lock, flags); in sedlbauer_interrupt()
268 if ((cs->hw.sedl.bus == SEDL_BUS_PCMCIA) && (*cs->busy_flag == 1)) { in sedlbauer_interrupt()
271 spin_unlock_irqrestore(&cs->lock, flags); in sedlbauer_interrupt()
276 val = readreg(cs->hw.sedl.adr, cs->hw.sedl.hscx, HSCX_ISTA + 0x40); in sedlbauer_interrupt()
279 hscx_int_main(cs, val); in sedlbauer_interrupt()
280 val = readreg(cs->hw.sedl.adr, cs->hw.sedl.isac, ISAC_ISTA); in sedlbauer_interrupt()
283 isac_interrupt(cs, val); in sedlbauer_interrupt()
284 val = readreg(cs->hw.sedl.adr, cs->hw.sedl.hscx, HSCX_ISTA + 0x40); in sedlbauer_interrupt()
286 if (cs->debug & L1_DEB_HSCX) in sedlbauer_interrupt()
287 debugl1(cs, "HSCX IntStat after IntRoutine"); in sedlbauer_interrupt()
290 val = readreg(cs->hw.sedl.adr, cs->hw.sedl.isac, ISAC_ISTA); in sedlbauer_interrupt()
292 if (cs->debug & L1_DEB_ISAC) in sedlbauer_interrupt()
293 debugl1(cs, "ISAC IntStat after IntRoutine"); in sedlbauer_interrupt()
296 writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx, HSCX_MASK, 0xFF); in sedlbauer_interrupt()
297 writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx, HSCX_MASK + 0x40, 0xFF); in sedlbauer_interrupt()
298 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, ISAC_MASK, 0xFF); in sedlbauer_interrupt()
299 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, ISAC_MASK, 0x0); in sedlbauer_interrupt()
300 writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx, HSCX_MASK, 0x0); in sedlbauer_interrupt()
301 writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx, HSCX_MASK + 0x40, 0x0); in sedlbauer_interrupt()
302 spin_unlock_irqrestore(&cs->lock, flags); in sedlbauer_interrupt()
309 struct IsdnCardState *cs = dev_id; in sedlbauer_interrupt_ipac() local
313 spin_lock_irqsave(&cs->lock, flags); in sedlbauer_interrupt_ipac()
314 ista = readreg(cs->hw.sedl.adr, cs->hw.sedl.isac, IPAC_ISTA); in sedlbauer_interrupt_ipac()
316 if (cs->debug & L1_DEB_IPAC) in sedlbauer_interrupt_ipac()
317 debugl1(cs, "IPAC ISTA %02X", ista); in sedlbauer_interrupt_ipac()
319 val = readreg(cs->hw.sedl.adr, cs->hw.sedl.hscx, HSCX_ISTA + 0x40); in sedlbauer_interrupt_ipac()
327 hscx_int_main(cs, val); in sedlbauer_interrupt_ipac()
330 val = 0xfe & readreg(cs->hw.sedl.adr, cs->hw.sedl.isac, ISAC_ISTA | 0x80); in sedlbauer_interrupt_ipac()
332 isac_interrupt(cs, val); in sedlbauer_interrupt_ipac()
337 isac_interrupt(cs, val); in sedlbauer_interrupt_ipac()
339 ista = readreg(cs->hw.sedl.adr, cs->hw.sedl.isac, IPAC_ISTA); in sedlbauer_interrupt_ipac()
341 icnt--; in sedlbauer_interrupt_ipac()
345 if (cs->debug & L1_DEB_ISAC) in sedlbauer_interrupt_ipac()
346 debugl1(cs, "Sedlbauer IRQ LOOP"); in sedlbauer_interrupt_ipac()
347 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, IPAC_MASK, 0xFF); in sedlbauer_interrupt_ipac()
348 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, IPAC_MASK, 0xC0); in sedlbauer_interrupt_ipac()
349 spin_unlock_irqrestore(&cs->lock, flags); in sedlbauer_interrupt_ipac()
356 struct IsdnCardState *cs = dev_id; in sedlbauer_interrupt_isar() local
361 spin_lock_irqsave(&cs->lock, flags); in sedlbauer_interrupt_isar()
362 val = readreg(cs->hw.sedl.adr, cs->hw.sedl.hscx, ISAR_IRQBIT); in sedlbauer_interrupt_isar()
365 isar_int_main(cs); in sedlbauer_interrupt_isar()
366 val = readreg(cs->hw.sedl.adr, cs->hw.sedl.isac, ISAC_ISTA); in sedlbauer_interrupt_isar()
369 isac_interrupt(cs, val); in sedlbauer_interrupt_isar()
370 val = readreg(cs->hw.sedl.adr, cs->hw.sedl.hscx, ISAR_IRQBIT); in sedlbauer_interrupt_isar()
371 if ((val & ISAR_IRQSTA) && --cnt) { in sedlbauer_interrupt_isar()
372 if (cs->debug & L1_DEB_HSCX) in sedlbauer_interrupt_isar()
373 debugl1(cs, "ISAR IntStat after IntRoutine"); in sedlbauer_interrupt_isar()
376 val = readreg(cs->hw.sedl.adr, cs->hw.sedl.isac, ISAC_ISTA); in sedlbauer_interrupt_isar()
377 if (val && --cnt) { in sedlbauer_interrupt_isar()
378 if (cs->debug & L1_DEB_ISAC) in sedlbauer_interrupt_isar()
379 debugl1(cs, "ISAC IntStat after IntRoutine"); in sedlbauer_interrupt_isar()
383 if (cs->debug & L1_DEB_ISAC) in sedlbauer_interrupt_isar()
384 debugl1(cs, "Sedlbauer IRQ LOOP"); in sedlbauer_interrupt_isar()
386 writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx, ISAR_IRQBIT, 0); in sedlbauer_interrupt_isar()
387 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, ISAC_MASK, 0xFF); in sedlbauer_interrupt_isar()
388 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, ISAC_MASK, 0x0); in sedlbauer_interrupt_isar()
389 writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx, ISAR_IRQBIT, ISAR_IRQMSK); in sedlbauer_interrupt_isar()
390 spin_unlock_irqrestore(&cs->lock, flags); in sedlbauer_interrupt_isar()
395 release_io_sedlbauer(struct IsdnCardState *cs) in release_io_sedlbauer() argument
399 if (cs->subtyp == SEDL_SPEED_FAX) { in release_io_sedlbauer()
401 } else if (cs->hw.sedl.bus == SEDL_BUS_PCI) { in release_io_sedlbauer()
404 if (cs->hw.sedl.cfg_reg) in release_io_sedlbauer()
405 release_region(cs->hw.sedl.cfg_reg, bytecnt); in release_io_sedlbauer()
409 reset_sedlbauer(struct IsdnCardState *cs) in reset_sedlbauer() argument
413 if (!((cs->hw.sedl.bus == SEDL_BUS_PCMCIA) && in reset_sedlbauer()
414 (cs->hw.sedl.chip == SEDL_CHIP_ISAC_HSCX))) { in reset_sedlbauer()
415 if (cs->hw.sedl.chip == SEDL_CHIP_IPAC) { in reset_sedlbauer()
416 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, IPAC_POTA2, 0x20); in reset_sedlbauer()
418 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, IPAC_POTA2, 0x0); in reset_sedlbauer()
420 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, IPAC_CONF, 0x0); in reset_sedlbauer()
421 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, IPAC_ACFG, 0xff); in reset_sedlbauer()
422 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, IPAC_AOE, 0x0); in reset_sedlbauer()
423 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, IPAC_MASK, 0xc0); in reset_sedlbauer()
424 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, IPAC_PCFG, 0x12); in reset_sedlbauer()
425 } else if ((cs->hw.sedl.chip == SEDL_CHIP_ISAC_ISAR) && in reset_sedlbauer()
426 (cs->hw.sedl.bus == SEDL_BUS_PCI)) { in reset_sedlbauer()
427 byteout(cs->hw.sedl.cfg_reg +3, cs->hw.sedl.reset_on); in reset_sedlbauer()
429 byteout(cs->hw.sedl.cfg_reg +3, cs->hw.sedl.reset_off); in reset_sedlbauer()
432 byteout(cs->hw.sedl.reset_on, SEDL_RESET); /* Reset On */ in reset_sedlbauer()
434 byteout(cs->hw.sedl.reset_off, 0); /* Reset Off */ in reset_sedlbauer()
441 Sedl_card_msg(struct IsdnCardState *cs, int mt, void *arg) in Sedl_card_msg() argument
447 spin_lock_irqsave(&cs->lock, flags); in Sedl_card_msg()
448 reset_sedlbauer(cs); in Sedl_card_msg()
449 spin_unlock_irqrestore(&cs->lock, flags); in Sedl_card_msg()
452 if (cs->hw.sedl.bus == SEDL_BUS_PCI) in Sedl_card_msg()
454 byteout(cs->hw.sedl.cfg_reg+ 5, 0); in Sedl_card_msg()
455 if (cs->hw.sedl.chip == SEDL_CHIP_ISAC_ISAR) { in Sedl_card_msg()
456 spin_lock_irqsave(&cs->lock, flags); in Sedl_card_msg()
457 writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx, in Sedl_card_msg()
459 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, in Sedl_card_msg()
461 reset_sedlbauer(cs); in Sedl_card_msg()
462 writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx, in Sedl_card_msg()
464 writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, in Sedl_card_msg()
466 spin_unlock_irqrestore(&cs->lock, flags); in Sedl_card_msg()
468 release_io_sedlbauer(cs); in Sedl_card_msg()
471 spin_lock_irqsave(&cs->lock, flags); in Sedl_card_msg()
472 if (cs->hw.sedl.bus == SEDL_BUS_PCI) in Sedl_card_msg()
474 byteout(cs->hw.sedl.cfg_reg+ 5, 0x02); in Sedl_card_msg()
475 reset_sedlbauer(cs); in Sedl_card_msg()
476 if (cs->hw.sedl.chip == SEDL_CHIP_ISAC_ISAR) { in Sedl_card_msg()
477 clear_pending_isac_ints(cs); in Sedl_card_msg()
478 writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx, in Sedl_card_msg()
480 initisac(cs); in Sedl_card_msg()
481 initisar(cs); in Sedl_card_msg()
483 cs->writeisac(cs, ISAC_MASK, 0); in Sedl_card_msg()
485 cs->writeisac(cs, ISAC_CMDR, 0x41); in Sedl_card_msg()
487 inithscxisac(cs, 3); in Sedl_card_msg()
489 spin_unlock_irqrestore(&cs->lock, flags); in Sedl_card_msg()
494 if (cs->subtyp != SEDL_SPEEDFAX_PYRAMID) in Sedl_card_msg()
496 spin_lock_irqsave(&cs->lock, flags); in Sedl_card_msg()
498 cs->hw.sedl.reset_off &= ~SEDL_ISAR_PCI_LED2; in Sedl_card_msg()
500 cs->hw.sedl.reset_off &= ~SEDL_ISAR_PCI_LED1; in Sedl_card_msg()
501 byteout(cs->hw.sedl.cfg_reg +3, cs->hw.sedl.reset_off); in Sedl_card_msg()
502 spin_unlock_irqrestore(&cs->lock, flags); in Sedl_card_msg()
505 if (cs->subtyp != SEDL_SPEEDFAX_PYRAMID) in Sedl_card_msg()
507 spin_lock_irqsave(&cs->lock, flags); in Sedl_card_msg()
509 cs->hw.sedl.reset_off |= SEDL_ISAR_PCI_LED2; in Sedl_card_msg()
511 cs->hw.sedl.reset_off |= SEDL_ISAR_PCI_LED1; in Sedl_card_msg()
512 byteout(cs->hw.sedl.cfg_reg +3, cs->hw.sedl.reset_off); in Sedl_card_msg()
513 spin_unlock_irqrestore(&cs->lock, flags); in Sedl_card_msg()
536 struct IsdnCardState *cs = card->cs; in setup_sedlbauer_isapnp() local
540 return -1; in setup_sedlbauer_isapnp()
542 while(ipid->card_vendor) { in setup_sedlbauer_isapnp()
543 if ((pnp_c = pnp_find_card(ipid->card_vendor, in setup_sedlbauer_isapnp()
544 ipid->card_device, pnp_c))) { in setup_sedlbauer_isapnp()
547 ipid->vendor, ipid->function, pnp_d))) { in setup_sedlbauer_isapnp()
551 (char *)ipid->driver_data); in setup_sedlbauer_isapnp()
559 card->para[1] = pnp_port_start(pnp_d, 0); in setup_sedlbauer_isapnp()
560 card->para[0] = pnp_irq(pnp_d, 0); in setup_sedlbauer_isapnp()
562 if (!card->para[0] || !card->para[1]) { in setup_sedlbauer_isapnp()
564 card->para[0], card->para[1]); in setup_sedlbauer_isapnp()
568 cs->hw.sedl.cfg_reg = card->para[1]; in setup_sedlbauer_isapnp()
569 cs->irq = card->para[0]; in setup_sedlbauer_isapnp()
570 if (ipid->function == ISAPNP_FUNCTION(0x2)) { in setup_sedlbauer_isapnp()
571 cs->subtyp = SEDL_SPEED_FAX; in setup_sedlbauer_isapnp()
572 cs->hw.sedl.chip = SEDL_CHIP_ISAC_ISAR; in setup_sedlbauer_isapnp()
575 cs->subtyp = SEDL_SPEED_CARD_WIN; in setup_sedlbauer_isapnp()
576 cs->hw.sedl.chip = SEDL_CHIP_TEST; in setup_sedlbauer_isapnp()
590 return -1; in setup_sedlbauer_isapnp()
597 return -1; in setup_sedlbauer_isapnp()
607 struct IsdnCardState *cs = card->cs; in setup_sedlbauer_pci() local
614 cs->irq = dev_sedl->irq; in setup_sedlbauer_pci()
615 if (!cs->irq) { in setup_sedlbauer_pci()
619 cs->hw.sedl.cfg_reg = pci_resource_start(dev_sedl, 0); in setup_sedlbauer_pci()
624 cs->irq_flags |= IRQF_SHARED; in setup_sedlbauer_pci()
625 cs->hw.sedl.bus = SEDL_BUS_PCI; in setup_sedlbauer_pci()
626 sub_vendor_id = dev_sedl->subsystem_vendor; in setup_sedlbauer_pci()
627 sub_id = dev_sedl->subsystem_device; in setup_sedlbauer_pci()
631 cs->hw.sedl.cfg_reg); in setup_sedlbauer_pci()
637 cs->hw.sedl.chip = SEDL_CHIP_ISAC_ISAR; in setup_sedlbauer_pci()
638 cs->subtyp = SEDL_SPEEDFAX_PYRAMID; in setup_sedlbauer_pci()
640 cs->hw.sedl.chip = SEDL_CHIP_ISAC_ISAR; in setup_sedlbauer_pci()
641 cs->subtyp = SEDL_SPEEDFAX_PCI; in setup_sedlbauer_pci()
643 cs->hw.sedl.chip = SEDL_CHIP_IPAC; in setup_sedlbauer_pci()
644 cs->subtyp = HST_SAPHIR3; in setup_sedlbauer_pci()
646 cs->hw.sedl.chip = SEDL_CHIP_IPAC; in setup_sedlbauer_pci()
647 cs->subtyp = SEDL_SPEED_PCI; in setup_sedlbauer_pci()
654 cs->hw.sedl.reset_on = SEDL_ISAR_PCI_ISAR_RESET_ON; in setup_sedlbauer_pci()
655 cs->hw.sedl.reset_off = SEDL_ISAR_PCI_ISAR_RESET_OFF; in setup_sedlbauer_pci()
656 byteout(cs->hw.sedl.cfg_reg, 0xff); in setup_sedlbauer_pci()
657 byteout(cs->hw.sedl.cfg_reg, 0x00); in setup_sedlbauer_pci()
658 byteout(cs->hw.sedl.cfg_reg+ 2, 0xdd); in setup_sedlbauer_pci()
659 byteout(cs->hw.sedl.cfg_reg+ 5, 0); /* disable all IRQ */ in setup_sedlbauer_pci()
660 byteout(cs->hw.sedl.cfg_reg +3, cs->hw.sedl.reset_on); in setup_sedlbauer_pci()
662 byteout(cs->hw.sedl.cfg_reg +3, cs->hw.sedl.reset_off); in setup_sedlbauer_pci()
682 struct IsdnCardState *cs = card->cs; in setup_sedlbauer() local
688 if (cs->typ == ISDN_CTYPE_SEDLBAUER) { in setup_sedlbauer()
689 cs->subtyp = SEDL_SPEED_CARD_WIN; in setup_sedlbauer()
690 cs->hw.sedl.bus = SEDL_BUS_ISA; in setup_sedlbauer()
691 cs->hw.sedl.chip = SEDL_CHIP_TEST; in setup_sedlbauer()
692 } else if (cs->typ == ISDN_CTYPE_SEDLBAUER_PCMCIA) { in setup_sedlbauer()
693 cs->subtyp = SEDL_SPEED_STAR; in setup_sedlbauer()
694 cs->hw.sedl.bus = SEDL_BUS_PCMCIA; in setup_sedlbauer()
695 cs->hw.sedl.chip = SEDL_CHIP_TEST; in setup_sedlbauer()
696 } else if (cs->typ == ISDN_CTYPE_SEDLBAUER_FAX) { in setup_sedlbauer()
697 cs->subtyp = SEDL_SPEED_FAX; in setup_sedlbauer()
698 cs->hw.sedl.bus = SEDL_BUS_ISA; in setup_sedlbauer()
699 cs->hw.sedl.chip = SEDL_CHIP_ISAC_ISAR; in setup_sedlbauer()
704 if (card->para[1]) { in setup_sedlbauer()
705 cs->hw.sedl.cfg_reg = card->para[1]; in setup_sedlbauer()
706 cs->irq = card->para[0]; in setup_sedlbauer()
707 if (cs->hw.sedl.chip == SEDL_CHIP_ISAC_ISAR) { in setup_sedlbauer()
731 if (cs->hw.sedl.bus != SEDL_BUS_PCMCIA && in setup_sedlbauer()
732 !request_region(cs->hw.sedl.cfg_reg, bytecnt, "sedlbauer isdn")) { in setup_sedlbauer()
734 "HiSax: %s config port %x-%x already in use\n", in setup_sedlbauer()
735 CardType[card->typ], in setup_sedlbauer()
736 cs->hw.sedl.cfg_reg, in setup_sedlbauer()
737 cs->hw.sedl.cfg_reg + bytecnt); in setup_sedlbauer()
742 "Sedlbauer: defined at 0x%x-0x%x IRQ %d\n", in setup_sedlbauer()
743 cs->hw.sedl.cfg_reg, in setup_sedlbauer()
744 cs->hw.sedl.cfg_reg + bytecnt, in setup_sedlbauer()
745 cs->irq); in setup_sedlbauer()
747 cs->BC_Read_Reg = &ReadHSCX; in setup_sedlbauer()
748 cs->BC_Write_Reg = &WriteHSCX; in setup_sedlbauer()
749 cs->BC_Send_Data = &hscx_fill_fifo; in setup_sedlbauer()
750 cs->cardmsg = &Sedl_card_msg; in setup_sedlbauer()
757 if (cs->hw.sedl.bus != SEDL_BUS_PCI) { in setup_sedlbauer()
758 val = readreg(cs->hw.sedl.cfg_reg + SEDL_IPAC_ANY_ADR, in setup_sedlbauer()
759 cs->hw.sedl.cfg_reg + SEDL_IPAC_ANY_IPAC, IPAC_ID); in setup_sedlbauer()
763 cs->subtyp = SEDL_SPEED_WIN2_PC104; in setup_sedlbauer()
764 if (cs->hw.sedl.bus == SEDL_BUS_PCMCIA) { in setup_sedlbauer()
765 cs->subtyp = SEDL_SPEED_STAR2; in setup_sedlbauer()
767 cs->hw.sedl.chip = SEDL_CHIP_IPAC; in setup_sedlbauer()
770 if (cs->hw.sedl.chip == SEDL_CHIP_TEST) { in setup_sedlbauer()
771 cs->hw.sedl.chip = SEDL_CHIP_ISAC_HSCX; in setup_sedlbauer()
780 Sedlbauer_Types[cs->subtyp]); in setup_sedlbauer()
782 setup_isac(cs); in setup_sedlbauer()
783 if (cs->hw.sedl.chip == SEDL_CHIP_IPAC) { in setup_sedlbauer()
784 if (cs->hw.sedl.bus == SEDL_BUS_PCI) { in setup_sedlbauer()
785 cs->hw.sedl.adr = cs->hw.sedl.cfg_reg + SEDL_IPAC_PCI_ADR; in setup_sedlbauer()
786 cs->hw.sedl.isac = cs->hw.sedl.cfg_reg + SEDL_IPAC_PCI_IPAC; in setup_sedlbauer()
787 cs->hw.sedl.hscx = cs->hw.sedl.cfg_reg + SEDL_IPAC_PCI_IPAC; in setup_sedlbauer()
789 cs->hw.sedl.adr = cs->hw.sedl.cfg_reg + SEDL_IPAC_ANY_ADR; in setup_sedlbauer()
790 cs->hw.sedl.isac = cs->hw.sedl.cfg_reg + SEDL_IPAC_ANY_IPAC; in setup_sedlbauer()
791 cs->hw.sedl.hscx = cs->hw.sedl.cfg_reg + SEDL_IPAC_ANY_IPAC; in setup_sedlbauer()
793 test_and_set_bit(HW_IPAC, &cs->HW_Flags); in setup_sedlbauer()
794 cs->readisac = &ReadISAC_IPAC; in setup_sedlbauer()
795 cs->writeisac = &WriteISAC_IPAC; in setup_sedlbauer()
796 cs->readisacfifo = &ReadISACfifo_IPAC; in setup_sedlbauer()
797 cs->writeisacfifo = &WriteISACfifo_IPAC; in setup_sedlbauer()
798 cs->irq_func = &sedlbauer_interrupt_ipac; in setup_sedlbauer()
799 val = readreg(cs->hw.sedl.adr, cs->hw.sedl.isac, IPAC_ID); in setup_sedlbauer()
803 cs->readisac = &ReadISAC; in setup_sedlbauer()
804 cs->writeisac = &WriteISAC; in setup_sedlbauer()
805 cs->readisacfifo = &ReadISACfifo; in setup_sedlbauer()
806 cs->writeisacfifo = &WriteISACfifo; in setup_sedlbauer()
807 if (cs->hw.sedl.chip == SEDL_CHIP_ISAC_ISAR) { in setup_sedlbauer()
808 if (cs->hw.sedl.bus == SEDL_BUS_PCI) { in setup_sedlbauer()
809 cs->hw.sedl.adr = cs->hw.sedl.cfg_reg + in setup_sedlbauer()
811 cs->hw.sedl.isac = cs->hw.sedl.cfg_reg + in setup_sedlbauer()
813 cs->hw.sedl.hscx = cs->hw.sedl.cfg_reg + in setup_sedlbauer()
816 cs->hw.sedl.adr = cs->hw.sedl.cfg_reg + in setup_sedlbauer()
818 cs->hw.sedl.isac = cs->hw.sedl.cfg_reg + in setup_sedlbauer()
820 cs->hw.sedl.hscx = cs->hw.sedl.cfg_reg + in setup_sedlbauer()
822 cs->hw.sedl.reset_on = cs->hw.sedl.cfg_reg + in setup_sedlbauer()
824 cs->hw.sedl.reset_off = cs->hw.sedl.cfg_reg + in setup_sedlbauer()
827 cs->bcs[0].hw.isar.reg = &cs->hw.sedl.isar; in setup_sedlbauer()
828 cs->bcs[1].hw.isar.reg = &cs->hw.sedl.isar; in setup_sedlbauer()
829 test_and_set_bit(HW_ISAR, &cs->HW_Flags); in setup_sedlbauer()
830 cs->irq_func = &sedlbauer_interrupt_isar; in setup_sedlbauer()
831 cs->auxcmd = &isar_auxcmd; in setup_sedlbauer()
832 ISACVersion(cs, "Sedlbauer:"); in setup_sedlbauer()
833 cs->BC_Read_Reg = &ReadISAR; in setup_sedlbauer()
834 cs->BC_Write_Reg = &WriteISAR; in setup_sedlbauer()
835 cs->BC_Send_Data = &isar_fill_fifo; in setup_sedlbauer()
836 bytecnt = 3; in setup_sedlbauer()
838 ver = ISARVersion(cs, "Sedlbauer:"); in setup_sedlbauer()
844 reset_sedlbauer(cs); in setup_sedlbauer()
845 bytecnt--; in setup_sedlbauer()
848 release_io_sedlbauer(cs); in setup_sedlbauer()
852 if (cs->hw.sedl.bus == SEDL_BUS_PCMCIA) { in setup_sedlbauer()
853 cs->hw.sedl.adr = cs->hw.sedl.cfg_reg + SEDL_HSCX_PCMCIA_ADR; in setup_sedlbauer()
854 cs->hw.sedl.isac = cs->hw.sedl.cfg_reg + SEDL_HSCX_PCMCIA_ISAC; in setup_sedlbauer()
855 cs->hw.sedl.hscx = cs->hw.sedl.cfg_reg + SEDL_HSCX_PCMCIA_HSCX; in setup_sedlbauer()
856 cs->hw.sedl.reset_on = cs->hw.sedl.cfg_reg + SEDL_HSCX_PCMCIA_RESET; in setup_sedlbauer()
857 cs->hw.sedl.reset_off = cs->hw.sedl.cfg_reg + SEDL_HSCX_PCMCIA_RESET; in setup_sedlbauer()
858 cs->irq_flags |= IRQF_SHARED; in setup_sedlbauer()
860 cs->hw.sedl.adr = cs->hw.sedl.cfg_reg + SEDL_HSCX_ISA_ADR; in setup_sedlbauer()
861 cs->hw.sedl.isac = cs->hw.sedl.cfg_reg + SEDL_HSCX_ISA_ISAC; in setup_sedlbauer()
862 cs->hw.sedl.hscx = cs->hw.sedl.cfg_reg + SEDL_HSCX_ISA_HSCX; in setup_sedlbauer()
863 cs->hw.sedl.reset_on = cs->hw.sedl.cfg_reg + SEDL_HSCX_ISA_RESET_ON; in setup_sedlbauer()
864 cs->hw.sedl.reset_off = cs->hw.sedl.cfg_reg + SEDL_HSCX_ISA_RESET_OFF; in setup_sedlbauer()
866 cs->irq_func = &sedlbauer_interrupt; in setup_sedlbauer()
867 ISACVersion(cs, "Sedlbauer:"); in setup_sedlbauer()
869 if (HscxVersion(cs, "Sedlbauer:")) { in setup_sedlbauer()
872 release_io_sedlbauer(cs); in setup_sedlbauer()