Lines Matching +full:cmd +full:- +full:cnt +full:- +full:name

1 // SPDX-License-Identifier: GPL-2.0-only
101 u8 cmd; member
103 u8 cmd;
121 char name[MISDN_MAX_IDLEN]; member
140 card->isac.dch.debug = debug; in _set_debug()
141 card->bch[0].debug = debug; in _set_debug()
142 card->bch[1].debug = debug; in _set_debug()
175 outb(idx, fc->addr + CHIP_INDEX); in ReadISAC_V1()
176 return inb(fc->addr + CHIP_WINDOW + (offset & 0xf)); in ReadISAC_V1()
185 outb(idx, fc->addr + CHIP_INDEX); in WriteISAC_V1()
186 outb(value, fc->addr + CHIP_WINDOW + (offset & 0xf)); in WriteISAC_V1()
194 outb(AVM_ISAC_FIFO, fc->addr + CHIP_INDEX); in ReadFiFoISAC_V1()
195 insb(fc->addr + CHIP_WINDOW, data, size); in ReadFiFoISAC_V1()
203 outb(AVM_ISAC_FIFO, fc->addr + CHIP_INDEX); in WriteFiFoISAC_V1()
204 outsb(fc->addr + CHIP_WINDOW, data, size); in WriteFiFoISAC_V1()
212 outl(offset, fc->addr + AVM_ISACX_INDEX); in ReadISAC_V2()
213 return 0xff & inl(fc->addr + AVM_ISACX_DATA); in ReadISAC_V2()
221 outl(offset, fc->addr + AVM_ISACX_INDEX); in WriteISAC_V2()
222 outl(value, fc->addr + AVM_ISACX_DATA); in WriteISAC_V2()
231 outl(off, fc->addr + AVM_ISACX_INDEX); in ReadFiFoISAC_V2()
233 data[i] = 0xff & inl(fc->addr + AVM_ISACX_DATA); in ReadFiFoISAC_V2()
242 outl(off, fc->addr + AVM_ISACX_INDEX); in WriteFiFoISAC_V2()
244 outl(data[i], fc->addr + AVM_ISACX_DATA); in WriteFiFoISAC_V2()
250 if (test_bit(FLG_ACTIVE, &fc->bch[0].Flags) && in Sel_BCS()
251 (fc->bch[0].nr & channel)) in Sel_BCS()
252 return &fc->bch[0]; in Sel_BCS()
253 else if (test_bit(FLG_ACTIVE, &fc->bch[1].Flags) && in Sel_BCS()
254 (fc->bch[1].nr & channel)) in Sel_BCS()
255 return &fc->bch[1]; in Sel_BCS()
264 outl(idx, fc->addr + CHIP_INDEX); in __write_ctrl_pci()
265 outl(hdlc->ctrl.ctrl, fc->addr + CHIP_WINDOW + HDLC_STATUS); in __write_ctrl_pci()
270 outl(hdlc->ctrl.ctrl, fc->addr + (channel == 2 ? AVM_HDLC_STATUS_2 : in __write_ctrl_pciv2()
276 struct fritzcard *fc = bch->hw; in write_ctrl()
279 hdlc = &fc->hdlc[(bch->nr - 1) & 1]; in write_ctrl()
280 pr_debug("%s: hdlc %c wr%x ctrl %x\n", fc->name, '@' + bch->nr, in write_ctrl()
281 which, hdlc->ctrl.ctrl); in write_ctrl()
282 switch (fc->type) { in write_ctrl()
284 __write_ctrl_pciv2(fc, hdlc, bch->nr); in write_ctrl()
287 __write_ctrl_pci(fc, hdlc, bch->nr); in write_ctrl()
311 switch (fc->type) { in read_status()
313 return __read_status_pciv2(fc->addr, channel); in read_status()
315 return __read_status_pci(fc->addr, channel); in read_status()
324 fc->ctrlreg |= AVM_STATUS0_ENA_IRQ; in enable_hwirq()
325 outb(fc->ctrlreg, fc->addr + 2); in enable_hwirq()
331 fc->ctrlreg &= ~AVM_STATUS0_ENA_IRQ; in disable_hwirq()
332 outb(fc->ctrlreg, fc->addr + 2); in disable_hwirq()
338 struct fritzcard *fc = bch->hw; in modehdlc()
342 hdlc = &fc->hdlc[(bch->nr - 1) & 1]; in modehdlc()
343 pr_debug("%s: hdlc %c protocol %x-->%x ch %d\n", fc->name, in modehdlc()
344 '@' + bch->nr, bch->state, protocol, bch->nr); in modehdlc()
345 hdlc->ctrl.ctrl = 0; in modehdlc()
346 mode = (fc->type == AVM_FRITZ_PCIV2) ? HDLC_FIFO_SIZE_128 : 0; in modehdlc()
349 case -1: /* used for init */ in modehdlc()
350 bch->state = -1; in modehdlc()
353 if (bch->state == ISDN_P_NONE) in modehdlc()
355 hdlc->ctrl.sr.cmd = HDLC_CMD_XRS | HDLC_CMD_RRS; in modehdlc()
356 hdlc->ctrl.sr.mode = mode | HDLC_MODE_TRANS; in modehdlc()
358 bch->state = ISDN_P_NONE; in modehdlc()
359 test_and_clear_bit(FLG_HDLC, &bch->Flags); in modehdlc()
360 test_and_clear_bit(FLG_TRANSPARENT, &bch->Flags); in modehdlc()
363 bch->state = protocol; in modehdlc()
364 hdlc->ctrl.sr.cmd = HDLC_CMD_XRS | HDLC_CMD_RRS; in modehdlc()
365 hdlc->ctrl.sr.mode = mode | HDLC_MODE_TRANS; in modehdlc()
367 hdlc->ctrl.sr.cmd = HDLC_CMD_XRS; in modehdlc()
369 hdlc->ctrl.sr.cmd = 0; in modehdlc()
370 test_and_set_bit(FLG_TRANSPARENT, &bch->Flags); in modehdlc()
373 bch->state = protocol; in modehdlc()
374 hdlc->ctrl.sr.cmd = HDLC_CMD_XRS | HDLC_CMD_RRS; in modehdlc()
375 hdlc->ctrl.sr.mode = mode | HDLC_MODE_ITF_FLG; in modehdlc()
377 hdlc->ctrl.sr.cmd = HDLC_CMD_XRS; in modehdlc()
379 hdlc->ctrl.sr.cmd = 0; in modehdlc()
380 test_and_set_bit(FLG_HDLC, &bch->Flags); in modehdlc()
383 pr_info("%s: protocol not known %x\n", fc->name, protocol); in modehdlc()
384 return -ENOPROTOOPT; in modehdlc()
395 int cnt; in hdlc_empty_fifo() local
396 struct fritzcard *fc = bch->hw; in hdlc_empty_fifo()
398 pr_debug("%s: %s %d\n", fc->name, __func__, count); in hdlc_empty_fifo()
399 if (test_bit(FLG_RX_OFF, &bch->Flags)) { in hdlc_empty_fifo()
401 bch->dropcnt += count; in hdlc_empty_fifo()
403 cnt = bchannel_get_rxbuf(bch, count); in hdlc_empty_fifo()
404 if (cnt < 0) { in hdlc_empty_fifo()
406 fc->name, bch->nr, count); in hdlc_empty_fifo()
409 p = skb_put(bch->rx_skb, count); in hdlc_empty_fifo()
412 if (fc->type == AVM_FRITZ_PCIV2) in hdlc_empty_fifo()
413 addr = fc->addr + (bch->nr == 2 ? in hdlc_empty_fifo()
416 addr = fc->addr + CHIP_WINDOW; in hdlc_empty_fifo()
417 outl(bch->nr == 2 ? AVM_HDLC_2 : AVM_HDLC_1, fc->addr); in hdlc_empty_fifo()
419 cnt = 0; in hdlc_empty_fifo()
420 while (cnt < count) { in hdlc_empty_fifo()
426 cnt += 4; in hdlc_empty_fifo()
429 snprintf(fc->log, LOG_SIZE, "B%1d-recv %s %d ", in hdlc_empty_fifo()
430 bch->nr, fc->name, count); in hdlc_empty_fifo()
431 print_hex_dump_bytes(fc->log, DUMP_PREFIX_OFFSET, p, count); in hdlc_empty_fifo()
438 struct fritzcard *fc = bch->hw; in hdlc_fill_fifo()
440 int count, fs, cnt = 0, idx; in hdlc_fill_fifo() local
445 idx = (bch->nr - 1) & 1; in hdlc_fill_fifo()
446 hdlc = &fc->hdlc[idx]; in hdlc_fill_fifo()
447 fs = (fc->type == AVM_FRITZ_PCIV2) ? in hdlc_fill_fifo()
449 if (!bch->tx_skb) { in hdlc_fill_fifo()
450 if (!test_bit(FLG_TX_EMPTY, &bch->Flags)) in hdlc_fill_fifo()
453 p = bch->fill; in hdlc_fill_fifo()
456 count = bch->tx_skb->len - bch->tx_idx; in hdlc_fill_fifo()
459 p = bch->tx_skb->data + bch->tx_idx; in hdlc_fill_fifo()
461 hdlc->ctrl.sr.cmd &= ~HDLC_CMD_XME; in hdlc_fill_fifo()
465 if (test_bit(FLG_HDLC, &bch->Flags)) in hdlc_fill_fifo()
466 hdlc->ctrl.sr.cmd |= HDLC_CMD_XME; in hdlc_fill_fifo()
470 pr_debug("%s.B%d: %d/%d/%d", fc->name, bch->nr, count, in hdlc_fill_fifo()
471 bch->tx_idx, bch->tx_skb->len); in hdlc_fill_fifo()
472 bch->tx_idx += count; in hdlc_fill_fifo()
474 pr_debug("%s.B%d: fillempty %d\n", fc->name, bch->nr, count); in hdlc_fill_fifo()
476 hdlc->ctrl.sr.xml = ((count == fs) ? 0 : count); in hdlc_fill_fifo()
477 if (fc->type == AVM_FRITZ_PCIV2) { in hdlc_fill_fifo()
478 __write_ctrl_pciv2(fc, hdlc, bch->nr); in hdlc_fill_fifo()
479 addr = fc->addr + (bch->nr == 2 ? in hdlc_fill_fifo()
482 __write_ctrl_pci(fc, hdlc, bch->nr); in hdlc_fill_fifo()
483 addr = fc->addr + CHIP_WINDOW; in hdlc_fill_fifo()
486 while (cnt < count) { in hdlc_fill_fifo()
487 /* all bytes the same - no worry about endian */ in hdlc_fill_fifo()
489 cnt += 4; in hdlc_fill_fifo()
492 while (cnt < count) { in hdlc_fill_fifo()
496 cnt += 4; in hdlc_fill_fifo()
500 snprintf(fc->log, LOG_SIZE, "B%1d-send %s %d ", in hdlc_fill_fifo()
501 bch->nr, fc->name, count); in hdlc_fill_fifo()
502 print_hex_dump_bytes(fc->log, DUMP_PREFIX_OFFSET, p, count); in hdlc_fill_fifo()
509 if (bch->tx_skb && bch->tx_idx < bch->tx_skb->len) { in HDLC_irq_xpr()
512 dev_kfree_skb(bch->tx_skb); in HDLC_irq_xpr()
515 test_and_clear_bit(FLG_TX_EMPTY, &bch->Flags); in HDLC_irq_xpr()
516 } else if (test_bit(FLG_TX_EMPTY, &bch->Flags)) { in HDLC_irq_xpr()
525 struct fritzcard *fc = bch->hw; in HDLC_irq()
530 hdlc = &fc->hdlc[(bch->nr - 1) & 1]; in HDLC_irq()
531 pr_debug("%s: ch%d stat %#x\n", fc->name, bch->nr, stat); in HDLC_irq()
532 if (fc->type == AVM_FRITZ_PCIV2) { in HDLC_irq()
542 fc->name, bch->nr, stat); in HDLC_irq()
543 hdlc->ctrl.sr.xml = 0; in HDLC_irq()
544 hdlc->ctrl.sr.cmd |= HDLC_CMD_RRS; in HDLC_irq()
546 hdlc->ctrl.sr.cmd &= ~HDLC_CMD_RRS; in HDLC_irq()
548 if (bch->rx_skb) in HDLC_irq()
549 skb_trim(bch->rx_skb, 0); in HDLC_irq()
555 if (!bch->rx_skb) in HDLC_irq()
557 if (test_bit(FLG_TRANSPARENT, &bch->Flags)) { in HDLC_irq()
565 fc->name); in HDLC_irq()
566 skb_trim(bch->rx_skb, 0); in HDLC_irq()
577 pr_warn("%s: ch%d stat %x XDU %s\n", fc->name, bch->nr, in HDLC_irq()
578 stat, bch->tx_skb ? "tx_skb" : "no tx_skb"); in HDLC_irq()
579 if (bch->tx_skb && bch->tx_skb->len) { in HDLC_irq()
580 if (!test_bit(FLG_TRANSPARENT, &bch->Flags)) in HDLC_irq()
581 bch->tx_idx = 0; in HDLC_irq()
582 } else if (test_bit(FLG_FILLEMPTY, &bch->Flags)) { in HDLC_irq()
583 test_and_set_bit(FLG_TX_EMPTY, &bch->Flags); in HDLC_irq()
585 hdlc->ctrl.sr.xml = 0; in HDLC_irq()
586 hdlc->ctrl.sr.cmd |= HDLC_CMD_XRS; in HDLC_irq()
588 hdlc->ctrl.sr.cmd &= ~HDLC_CMD_XRS; in HDLC_irq()
607 pr_debug("%s: spurious ch1 IRQ\n", fc->name); in HDLC_irq_main()
615 pr_debug("%s: spurious ch2 IRQ\n", fc->name); in HDLC_irq_main()
626 spin_lock(&fc->lock); in avm_fritz_interrupt()
627 sval = inb(fc->addr + 2); in avm_fritz_interrupt()
628 pr_debug("%s: irq stat0 %x\n", fc->name, sval); in avm_fritz_interrupt()
631 spin_unlock(&fc->lock); in avm_fritz_interrupt()
634 fc->irqcnt++; in avm_fritz_interrupt()
638 mISDNisac_irq(&fc->isac, val); in avm_fritz_interrupt()
642 spin_unlock(&fc->lock); in avm_fritz_interrupt()
653 spin_lock(&fc->lock); in avm_fritzv2_interrupt()
654 sval = inb(fc->addr + 2); in avm_fritzv2_interrupt()
655 pr_debug("%s: irq stat0 %x\n", fc->name, sval); in avm_fritzv2_interrupt()
658 spin_unlock(&fc->lock); in avm_fritzv2_interrupt()
661 fc->irqcnt++; in avm_fritzv2_interrupt()
667 mISDNisac_irq(&fc->isac, val); in avm_fritzv2_interrupt()
670 pr_debug("%s: timer irq\n", fc->name); in avm_fritzv2_interrupt()
671 outb(fc->ctrlreg | AVM_STATUS0_RES_TIMER, fc->addr + 2); in avm_fritzv2_interrupt()
673 outb(fc->ctrlreg, fc->addr + 2); in avm_fritzv2_interrupt()
675 spin_unlock(&fc->lock); in avm_fritzv2_interrupt()
683 struct fritzcard *fc = bch->hw; in avm_l2l1B()
684 int ret = -EINVAL; in avm_l2l1B()
688 switch (hh->prim) { in avm_l2l1B()
690 spin_lock_irqsave(&fc->lock, flags); in avm_l2l1B()
696 spin_unlock_irqrestore(&fc->lock, flags); in avm_l2l1B()
699 spin_lock_irqsave(&fc->lock, flags); in avm_l2l1B()
700 if (!test_and_set_bit(FLG_ACTIVE, &bch->Flags)) in avm_l2l1B()
701 ret = modehdlc(bch, ch->protocol); in avm_l2l1B()
704 spin_unlock_irqrestore(&fc->lock, flags); in avm_l2l1B()
710 spin_lock_irqsave(&fc->lock, flags); in avm_l2l1B()
713 spin_unlock_irqrestore(&fc->lock, flags); in avm_l2l1B()
727 modehdlc(&fc->bch[0], -1); in inithdlc()
728 modehdlc(&fc->bch[1], -1); in inithdlc()
737 pr_debug("%s: HDLC 1 STA %x\n", fc->name, val); in clear_pending_hdlc_ints()
739 pr_debug("%s: HDLC 2 STA %x\n", fc->name, val); in clear_pending_hdlc_ints()
745 switch (fc->type) { in reset_avm()
747 fc->ctrlreg = AVM_STATUS0_RESET | AVM_STATUS0_DIS_TIMER; in reset_avm()
750 fc->ctrlreg = AVM_STATUS0_RESET; in reset_avm()
754 pr_notice("%s: reset\n", fc->name); in reset_avm()
757 switch (fc->type) { in reset_avm()
759 fc->ctrlreg = AVM_STATUS0_DIS_TIMER | AVM_STATUS0_RES_TIMER; in reset_avm()
761 outb(AVM_STATUS1_ENA_IOM, fc->addr + 3); in reset_avm()
764 fc->ctrlreg = 0; in reset_avm()
770 pr_notice("%s: S0/S1 %x/%x\n", fc->name, in reset_avm()
771 inb(fc->addr + 2), inb(fc->addr + 3)); in reset_avm()
777 int ret, cnt = 3; in init_card() local
781 if (fc->type == AVM_FRITZ_PCIV2) in init_card()
782 ret = request_irq(fc->irq, avm_fritzv2_interrupt, in init_card()
783 IRQF_SHARED, fc->name, fc); in init_card()
785 ret = request_irq(fc->irq, avm_fritz_interrupt, in init_card()
786 IRQF_SHARED, fc->name, fc); in init_card()
789 fc->name, fc->irq); in init_card()
792 while (cnt--) { in init_card()
793 spin_lock_irqsave(&fc->lock, flags); in init_card()
794 ret = fc->isac.init(&fc->isac); in init_card()
796 spin_unlock_irqrestore(&fc->lock, flags); in init_card()
798 fc->name, ret); in init_card()
805 if (fc->type == AVM_FRITZ_PCIV2) { in init_card()
812 spin_unlock_irqrestore(&fc->lock, flags); in init_card()
816 pr_notice("%s: IRQ %d count %d\n", fc->name, in init_card()
817 fc->irq, fc->irqcnt); in init_card()
818 if (!fc->irqcnt) { in init_card()
820 fc->name, fc->irq, 3 - cnt); in init_card()
825 free_irq(fc->irq, fc); in init_card()
826 return -EIO; in init_card()
836 avm_bctrl(struct mISDNchannel *ch, u32 cmd, void *arg) in avm_bctrl() argument
839 struct fritzcard *fc = bch->hw; in avm_bctrl()
840 int ret = -EINVAL; in avm_bctrl()
843 pr_debug("%s: %s cmd:%x %p\n", fc->name, __func__, cmd, arg); in avm_bctrl()
844 switch (cmd) { in avm_bctrl()
846 test_and_clear_bit(FLG_OPEN, &bch->Flags); in avm_bctrl()
847 cancel_work_sync(&bch->workq); in avm_bctrl()
848 spin_lock_irqsave(&fc->lock, flags); in avm_bctrl()
851 spin_unlock_irqrestore(&fc->lock, flags); in avm_bctrl()
852 ch->protocol = ISDN_P_NONE; in avm_bctrl()
853 ch->peer = NULL; in avm_bctrl()
861 pr_info("%s: %s unknown prim(%x)\n", fc->name, __func__, cmd); in avm_bctrl()
871 switch (cq->op) { in channel_ctrl()
873 cq->op = MISDN_CTRL_LOOP | MISDN_CTRL_L1_TIMER3; in channel_ctrl()
876 /* cq->channel: 0 disable, 1 B1 loop 2 B2 loop, 3 both */ in channel_ctrl()
877 if (cq->channel < 0 || cq->channel > 3) { in channel_ctrl()
878 ret = -EINVAL; in channel_ctrl()
881 ret = fc->isac.ctrl(&fc->isac, HW_TESTLOOP, cq->channel); in channel_ctrl()
884 ret = fc->isac.ctrl(&fc->isac, HW_TIMER3_VALUE, cq->p1); in channel_ctrl()
887 pr_info("%s: %s unknown Op %x\n", fc->name, __func__, cq->op); in channel_ctrl()
888 ret = -EINVAL; in channel_ctrl()
899 if (rq->adr.channel == 0 || rq->adr.channel > 2) in open_bchannel()
900 return -EINVAL; in open_bchannel()
901 if (rq->protocol == ISDN_P_NONE) in open_bchannel()
902 return -EINVAL; in open_bchannel()
903 bch = &fc->bch[rq->adr.channel - 1]; in open_bchannel()
904 if (test_and_set_bit(FLG_OPEN, &bch->Flags)) in open_bchannel()
905 return -EBUSY; /* b-channel can be only open once */ in open_bchannel()
906 bch->ch.protocol = rq->protocol; in open_bchannel()
907 rq->ch = &bch->ch; in open_bchannel()
915 avm_dctrl(struct mISDNchannel *ch, u32 cmd, void *arg) in avm_dctrl() argument
919 struct fritzcard *fc = dch->hw; in avm_dctrl()
923 pr_debug("%s: %s cmd:%x %p\n", fc->name, __func__, cmd, arg); in avm_dctrl()
924 switch (cmd) { in avm_dctrl()
927 if (rq->protocol == ISDN_P_TE_S0) in avm_dctrl()
928 err = fc->isac.open(&fc->isac, rq); in avm_dctrl()
934 pr_info("%s: cannot get module\n", fc->name); in avm_dctrl()
937 pr_debug("%s: dev(%d) close from %p\n", fc->name, dch->dev.id, in avm_dctrl()
946 fc->name, __func__, cmd); in avm_dctrl()
947 return -EINVAL; in avm_dctrl()
957 if (!request_region(fc->addr, 32, fc->name)) { in setup_fritz()
958 pr_info("%s: AVM config port %x-%x already in use\n", in setup_fritz()
959 fc->name, fc->addr, fc->addr + 31); in setup_fritz()
960 return -EIO; in setup_fritz()
962 switch (fc->type) { in setup_fritz()
964 val = inl(fc->addr); in setup_fritz()
965 outl(AVM_HDLC_1, fc->addr + CHIP_INDEX); in setup_fritz()
966 ver = inl(fc->addr + CHIP_WINDOW + HDLC_STATUS) >> 24; in setup_fritz()
968 pr_notice("%s: PCI stat %#x\n", fc->name, val); in setup_fritz()
969 pr_notice("%s: PCI Class %X Rev %d\n", fc->name, in setup_fritz()
971 pr_notice("%s: HDLC version %x\n", fc->name, ver & 0xf); in setup_fritz()
973 ASSIGN_FUNC(V1, ISAC, fc->isac); in setup_fritz()
974 fc->isac.type = IPAC_TYPE_ISAC; in setup_fritz()
977 val = inl(fc->addr); in setup_fritz()
978 ver = inl(fc->addr + AVM_HDLC_STATUS_1) >> 24; in setup_fritz()
980 pr_notice("%s: PCI V2 stat %#x\n", fc->name, val); in setup_fritz()
981 pr_notice("%s: PCI V2 Class %X Rev %d\n", fc->name, in setup_fritz()
983 pr_notice("%s: HDLC version %x\n", fc->name, ver & 0xf); in setup_fritz()
985 ASSIGN_FUNC(V2, ISAC, fc->isac); in setup_fritz()
986 fc->isac.type = IPAC_TYPE_ISACX; in setup_fritz()
989 release_region(fc->addr, 32); in setup_fritz()
990 pr_info("%s: AVM unknown type %d\n", fc->name, fc->type); in setup_fritz()
991 return -ENODEV; in setup_fritz()
993 pr_notice("%s: %s config irq:%d base:0x%X\n", fc->name, in setup_fritz()
994 (fc->type == AVM_FRITZ_PCI) ? "AVM Fritz!CARD PCI" : in setup_fritz()
995 "AVM Fritz!CARD PCIv2", fc->irq, fc->addr); in setup_fritz()
1005 spin_lock_irqsave(&card->lock, flags); in release_card()
1006 modehdlc(&card->bch[0], ISDN_P_NONE); in release_card()
1007 modehdlc(&card->bch[1], ISDN_P_NONE); in release_card()
1008 spin_unlock_irqrestore(&card->lock, flags); in release_card()
1009 card->isac.release(&card->isac); in release_card()
1010 free_irq(card->irq, card); in release_card()
1011 mISDN_freebchannel(&card->bch[1]); in release_card()
1012 mISDN_freebchannel(&card->bch[0]); in release_card()
1013 mISDN_unregister_device(&card->isac.dch.dev); in release_card()
1014 release_region(card->addr, 32); in release_card()
1015 pci_disable_device(card->pdev); in release_card()
1016 pci_set_drvdata(card->pdev, NULL); in release_card()
1018 list_del(&card->list); in release_card()
1021 AVM_cnt--; in release_card()
1031 snprintf(card->name, MISDN_MAX_IDLEN - 1, "AVM.%d", AVM_cnt + 1); in setup_instance()
1033 list_add_tail(&card->list, &Cards); in setup_instance()
1037 card->isac.name = card->name; in setup_instance()
1038 spin_lock_init(&card->lock); in setup_instance()
1039 card->isac.hwlock = &card->lock; in setup_instance()
1040 mISDNisac_init(&card->isac, card); in setup_instance()
1042 card->isac.dch.dev.Bprotocols = (1 << (ISDN_P_B_RAW & ISDN_P_B_MASK)) | in setup_instance()
1044 card->isac.dch.dev.D.ctrl = avm_dctrl; in setup_instance()
1046 card->bch[i].nr = i + 1; in setup_instance()
1047 set_channelmap(i + 1, card->isac.dch.dev.channelmap); in setup_instance()
1048 if (AVM_FRITZ_PCIV2 == card->type) in setup_instance()
1052 mISDN_initbchannel(&card->bch[i], MAX_DATA_MEM, minsize); in setup_instance()
1053 card->bch[i].hw = card; in setup_instance()
1054 card->bch[i].ch.send = avm_l2l1B; in setup_instance()
1055 card->bch[i].ch.ctrl = avm_bctrl; in setup_instance()
1056 card->bch[i].ch.nr = i + 1; in setup_instance()
1057 list_add(&card->bch[i].ch.list, &card->isac.dch.dev.bchannels); in setup_instance()
1062 err = mISDN_register_device(&card->isac.dch.dev, &card->pdev->dev, in setup_instance()
1063 card->name); in setup_instance()
1072 mISDN_unregister_device(&card->isac.dch.dev); in setup_instance()
1074 release_region(card->addr, 32); in setup_instance()
1076 card->isac.release(&card->isac); in setup_instance()
1077 mISDN_freebchannel(&card->bch[1]); in setup_instance()
1078 mISDN_freebchannel(&card->bch[0]); in setup_instance()
1080 list_del(&card->list); in setup_instance()
1089 int err = -ENOMEM; in fritzpci_probe()
1097 if (pdev->device == PCI_DEVICE_ID_AVM_A1_V2) in fritzpci_probe()
1098 card->type = AVM_FRITZ_PCIV2; in fritzpci_probe()
1100 card->type = AVM_FRITZ_PCI; in fritzpci_probe()
1101 card->pdev = pdev; in fritzpci_probe()
1109 (char *) ent->driver_data, pci_name(pdev)); in fritzpci_probe()
1111 card->addr = pci_resource_start(pdev, 1); in fritzpci_probe()
1112 card->irq = pdev->irq; in fritzpci_probe()
1142 .name = "fcpci",