• Home
  • Raw
  • Download

Lines Matching refs:card

48 static void b1dma_dispatch_tx(avmcard *card);
86 static inline void b1dma_writel(avmcard *card, u32 value, int off) in b1dma_writel() argument
88 writel(value, card->mbase + off); in b1dma_writel()
91 static inline u32 b1dma_readl(avmcard *card, int off) in b1dma_readl() argument
93 return readl(card->mbase + off); in b1dma_readl()
108 static int b1dma_tolink(avmcard *card, void *buf, unsigned int len) in b1dma_tolink() argument
113 while (!b1dma_tx_empty(card->port) in b1dma_tolink()
115 if (!b1dma_tx_empty(card->port)) in b1dma_tolink()
117 t1outp(card->port, 0x01, *s++); in b1dma_tolink()
122 static int b1dma_fromlink(avmcard *card, void *buf, unsigned int len) in b1dma_fromlink() argument
127 while (!b1dma_rx_full(card->port) in b1dma_fromlink()
129 if (!b1dma_rx_full(card->port)) in b1dma_fromlink()
131 *s++ = t1inp(card->port, 0x00); in b1dma_fromlink()
136 static int WriteReg(avmcard *card, u32 reg, u8 val) in WriteReg() argument
139 if (b1dma_tolink(card, &cmd, 1) == 0 in WriteReg()
140 && b1dma_tolink(card, &reg, 4) == 0) { in WriteReg()
142 return b1dma_tolink(card, &tmp, 4); in WriteReg()
147 static u8 ReadReg(avmcard *card, u32 reg) in ReadReg() argument
150 if (b1dma_tolink(card, &cmd, 1) == 0 in ReadReg()
151 && b1dma_tolink(card, &reg, 4) == 0) { in ReadReg()
153 if (b1dma_fromlink(card, &tmp, 4) == 0) in ReadReg()
218 void b1dma_reset(avmcard *card) in b1dma_reset() argument
220 card->csr = 0x0; in b1dma_reset()
221 b1dma_writel(card, card->csr, AMCC_INTCSR); in b1dma_reset()
222 b1dma_writel(card, 0, AMCC_MCSR); in b1dma_reset()
223 b1dma_writel(card, 0, AMCC_RXLEN); in b1dma_reset()
224 b1dma_writel(card, 0, AMCC_TXLEN); in b1dma_reset()
226 t1outp(card->port, 0x10, 0x00); in b1dma_reset()
227 t1outp(card->port, 0x07, 0x00); in b1dma_reset()
229 b1dma_writel(card, 0, AMCC_MCSR); in b1dma_reset()
231 b1dma_writel(card, 0x0f000000, AMCC_MCSR); /* reset all */ in b1dma_reset()
233 b1dma_writel(card, 0, AMCC_MCSR); in b1dma_reset()
234 if (card->cardtype == avm_t1pci) in b1dma_reset()
242 static int b1dma_detect(avmcard *card) in b1dma_detect() argument
244 b1dma_writel(card, 0, AMCC_MCSR); in b1dma_detect()
246 b1dma_writel(card, 0x0f000000, AMCC_MCSR); /* reset all */ in b1dma_detect()
248 b1dma_writel(card, 0, AMCC_MCSR); in b1dma_detect()
251 b1dma_writel(card, 0, AMCC_RXLEN); in b1dma_detect()
252 b1dma_writel(card, 0, AMCC_TXLEN); in b1dma_detect()
253 card->csr = 0x0; in b1dma_detect()
254 b1dma_writel(card, card->csr, AMCC_INTCSR); in b1dma_detect()
256 if (b1dma_readl(card, AMCC_MCSR) != 0x000000E6) in b1dma_detect()
259 b1dma_writel(card, 0xffffffff, AMCC_RXPTR); in b1dma_detect()
260 b1dma_writel(card, 0xffffffff, AMCC_TXPTR); in b1dma_detect()
261 if (b1dma_readl(card, AMCC_RXPTR) != 0xfffffffc in b1dma_detect()
262 || b1dma_readl(card, AMCC_TXPTR) != 0xfffffffc) in b1dma_detect()
265 b1dma_writel(card, 0x0, AMCC_RXPTR); in b1dma_detect()
266 b1dma_writel(card, 0x0, AMCC_TXPTR); in b1dma_detect()
267 if (b1dma_readl(card, AMCC_RXPTR) != 0x0 in b1dma_detect()
268 || b1dma_readl(card, AMCC_TXPTR) != 0x0) in b1dma_detect()
271 t1outp(card->port, 0x10, 0x00); in b1dma_detect()
272 t1outp(card->port, 0x07, 0x00); in b1dma_detect()
274 t1outp(card->port, 0x02, 0x02); in b1dma_detect()
275 t1outp(card->port, 0x03, 0x02); in b1dma_detect()
277 if ((t1inp(card->port, 0x02) & 0xFE) != 0x02 in b1dma_detect()
278 || t1inp(card->port, 0x3) != 0x03) in b1dma_detect()
281 t1outp(card->port, 0x02, 0x00); in b1dma_detect()
282 t1outp(card->port, 0x03, 0x00); in b1dma_detect()
284 if ((t1inp(card->port, 0x02) & 0xFE) != 0x00 in b1dma_detect()
285 || t1inp(card->port, 0x3) != 0x01) in b1dma_detect()
291 int t1pci_detect(avmcard *card) in t1pci_detect() argument
295 if ((ret = b1dma_detect(card)) != 0) in t1pci_detect()
300 if (WriteReg(card, 0x80001000, 0x11) != 0 in t1pci_detect()
301 || WriteReg(card, 0x80101000, 0x22) != 0 in t1pci_detect()
302 || WriteReg(card, 0x80201000, 0x33) != 0 in t1pci_detect()
303 || WriteReg(card, 0x80301000, 0x44) != 0) in t1pci_detect()
306 if (ReadReg(card, 0x80001000) != 0x11 in t1pci_detect()
307 || ReadReg(card, 0x80101000) != 0x22 in t1pci_detect()
308 || ReadReg(card, 0x80201000) != 0x33 in t1pci_detect()
309 || ReadReg(card, 0x80301000) != 0x44) in t1pci_detect()
312 if (WriteReg(card, 0x80001000, 0x55) != 0 in t1pci_detect()
313 || WriteReg(card, 0x80101000, 0x66) != 0 in t1pci_detect()
314 || WriteReg(card, 0x80201000, 0x77) != 0 in t1pci_detect()
315 || WriteReg(card, 0x80301000, 0x88) != 0) in t1pci_detect()
318 if (ReadReg(card, 0x80001000) != 0x55 in t1pci_detect()
319 || ReadReg(card, 0x80101000) != 0x66 in t1pci_detect()
320 || ReadReg(card, 0x80201000) != 0x77 in t1pci_detect()
321 || ReadReg(card, 0x80301000) != 0x88) in t1pci_detect()
327 int b1pciv4_detect(avmcard *card) in b1pciv4_detect() argument
331 if ((ret = b1dma_detect(card)) != 0) in b1pciv4_detect()
335 if (WriteReg(card, 0x80A00000, 0x21) != 0) in b1pciv4_detect()
337 if ((ReadReg(card, 0x80A00000) & 0x01) != 0x01) in b1pciv4_detect()
341 if (WriteReg(card, 0x80A00000, 0x20) != 0) in b1pciv4_detect()
343 if ((ReadReg(card, 0x80A00000) & 0x01) != 0x00) in b1pciv4_detect()
350 static void b1dma_queue_tx(avmcard *card, struct sk_buff *skb) in b1dma_queue_tx() argument
354 spin_lock_irqsave(&card->lock, flags); in b1dma_queue_tx()
356 skb_queue_tail(&card->dma->send_queue, skb); in b1dma_queue_tx()
358 if (!(card->csr & EN_TX_TC_INT)) { in b1dma_queue_tx()
359 b1dma_dispatch_tx(card); in b1dma_queue_tx()
360 b1dma_writel(card, card->csr, AMCC_INTCSR); in b1dma_queue_tx()
363 spin_unlock_irqrestore(&card->lock, flags); in b1dma_queue_tx()
368 static void b1dma_dispatch_tx(avmcard *card) in b1dma_dispatch_tx() argument
370 avmcard_dmainfo *dma = card->dma; in b1dma_dispatch_tx()
404 printk(KERN_INFO "%s: send ack\n", card->name); in b1dma_dispatch_tx()
415 b1dma_writel(card, dma->sendbuf.dmaaddr, AMCC_TXPTR); in b1dma_dispatch_tx()
416 b1dma_writel(card, txlen, AMCC_TXLEN); in b1dma_dispatch_tx()
418 card->csr |= EN_TX_TC_INT; in b1dma_dispatch_tx()
425 static void queue_pollack(avmcard *card) in queue_pollack() argument
433 card->name); in queue_pollack()
442 b1dma_queue_tx(card, skb); in queue_pollack()
447 static void b1dma_handle_rx(avmcard *card) in b1dma_handle_rx() argument
449 avmctrl_info *cinfo = &card->ctrlinfo[0]; in b1dma_handle_rx()
450 avmcard_dmainfo *dma = card->dma; in b1dma_handle_rx()
465 MsgLen = _get_slice(&p, card->msgbuf); in b1dma_handle_rx()
466 DataB3Len = _get_slice(&p, card->databuf); in b1dma_handle_rx()
469 memset(card->msgbuf + MsgLen, 0, 30 - MsgLen); in b1dma_handle_rx()
471 CAPIMSG_SETLEN(card->msgbuf, 30); in b1dma_handle_rx()
475 card->name); in b1dma_handle_rx()
477 memcpy(skb_put(skb, MsgLen), card->msgbuf, MsgLen); in b1dma_handle_rx()
478 memcpy(skb_put(skb, DataB3Len), card->databuf, DataB3Len); in b1dma_handle_rx()
486 MsgLen = _get_slice(&p, card->msgbuf); in b1dma_handle_rx()
489 card->name); in b1dma_handle_rx()
491 memcpy(skb_put(skb, MsgLen), card->msgbuf, MsgLen); in b1dma_handle_rx()
493 spin_lock(&card->lock); in b1dma_handle_rx()
497 spin_unlock(&card->lock); in b1dma_handle_rx()
508 spin_lock(&card->lock); in b1dma_handle_rx()
510 spin_unlock(&card->lock); in b1dma_handle_rx()
519 spin_lock(&card->lock); in b1dma_handle_rx()
521 spin_unlock(&card->lock); in b1dma_handle_rx()
527 printk(KERN_INFO "%s: receive poll\n", card->name); in b1dma_handle_rx()
530 queue_pollack(card); in b1dma_handle_rx()
543 card->name, in b1dma_handle_rx()
551 MsgLen = _get_slice(&p, card->msgbuf); in b1dma_handle_rx()
552 card->msgbuf[MsgLen] = 0; in b1dma_handle_rx()
554 && (card->msgbuf[MsgLen - 1] == '\n' in b1dma_handle_rx()
555 || card->msgbuf[MsgLen - 1] == '\r')) { in b1dma_handle_rx()
556 card->msgbuf[MsgLen - 1] = 0; in b1dma_handle_rx()
560 card->name, ApplId, card->msgbuf); in b1dma_handle_rx()
564 MsgLen = _get_slice(&p, card->msgbuf); in b1dma_handle_rx()
565 card->msgbuf[MsgLen] = 0; in b1dma_handle_rx()
567 && (card->msgbuf[MsgLen - 1] == '\n' in b1dma_handle_rx()
568 || card->msgbuf[MsgLen - 1] == '\r')) { in b1dma_handle_rx()
569 card->msgbuf[MsgLen - 1] = 0; in b1dma_handle_rx()
572 printk(KERN_INFO "%s: DEBUG: %s\n", card->name, card->msgbuf); in b1dma_handle_rx()
577 card->name, b1cmd); in b1dma_handle_rx()
584 static void b1dma_handle_interrupt(avmcard *card) in b1dma_handle_interrupt() argument
589 spin_lock(&card->lock); in b1dma_handle_interrupt()
591 status = b1dma_readl(card, AMCC_INTCSR); in b1dma_handle_interrupt()
593 spin_unlock(&card->lock); in b1dma_handle_interrupt()
597 newcsr = card->csr | (status & ALL_INT); in b1dma_handle_interrupt()
600 b1dma_writel(card, newcsr, AMCC_INTCSR); in b1dma_handle_interrupt()
603 struct avmcard_dmainfo *dma = card->dma; in b1dma_handle_interrupt()
605 if (card->dma->recvlen == 0) { in b1dma_handle_interrupt()
606 rxlen = b1dma_readl(card, AMCC_RXLEN); in b1dma_handle_interrupt()
610 b1dma_writel(card, dma->recvbuf.dmaaddr + 4, AMCC_RXPTR); in b1dma_handle_interrupt()
611 b1dma_writel(card, rxlen, AMCC_RXLEN); in b1dma_handle_interrupt()
615 card->name, rxlen); in b1dma_handle_interrupt()
619 spin_unlock(&card->lock); in b1dma_handle_interrupt()
620 b1dma_handle_rx(card); in b1dma_handle_interrupt()
622 spin_lock(&card->lock); in b1dma_handle_interrupt()
623 b1dma_writel(card, dma->recvbuf.dmaaddr, AMCC_RXPTR); in b1dma_handle_interrupt()
624 b1dma_writel(card, 4, AMCC_RXLEN); in b1dma_handle_interrupt()
629 if (skb_queue_empty(&card->dma->send_queue)) in b1dma_handle_interrupt()
630 card->csr &= ~EN_TX_TC_INT; in b1dma_handle_interrupt()
632 b1dma_dispatch_tx(card); in b1dma_handle_interrupt()
634 b1dma_writel(card, card->csr, AMCC_INTCSR); in b1dma_handle_interrupt()
636 spin_unlock(&card->lock); in b1dma_handle_interrupt()
641 avmcard *card = devptr; in b1dma_interrupt() local
643 b1dma_handle_interrupt(card); in b1dma_interrupt()
649 static int b1dma_loaded(avmcard *card) in b1dma_loaded() argument
654 unsigned int base = card->port; in b1dma_loaded()
662 card->name); in b1dma_loaded()
671 …printk(KERN_ERR "%s: b1dma_loaded: got 0x%x, firmware not running in dword mode\n", card->name, an… in b1dma_loaded()
675 printk(KERN_ERR "%s: b1dma_loaded: firmware not running\n", card->name); in b1dma_loaded()
681 static void b1dma_send_init(avmcard *card) in b1dma_send_init() argument
689 card->name); in b1dma_send_init()
698 _put_word(&p, card->cardnr - 1); in b1dma_send_init()
701 b1dma_queue_tx(card, skb); in b1dma_send_init()
707 avmcard *card = cinfo->card; in b1dma_load_firmware() local
710 b1dma_reset(card); in b1dma_load_firmware()
712 if ((retval = b1_load_t4file(card, &data->firmware))) { in b1dma_load_firmware()
713 b1dma_reset(card); in b1dma_load_firmware()
715 card->name); in b1dma_load_firmware()
720 if ((retval = b1_load_config(card, &data->configuration))) { in b1dma_load_firmware()
721 b1dma_reset(card); in b1dma_load_firmware()
723 card->name); in b1dma_load_firmware()
728 if (!b1dma_loaded(card)) { in b1dma_load_firmware()
729 b1dma_reset(card); in b1dma_load_firmware()
730 printk(KERN_ERR "%s: failed to load t4file.\n", card->name); in b1dma_load_firmware()
734 card->csr = AVM_FLAG; in b1dma_load_firmware()
735 b1dma_writel(card, card->csr, AMCC_INTCSR); in b1dma_load_firmware()
736 b1dma_writel(card, EN_A2P_TRANSFERS | EN_P2A_TRANSFERS | A2P_HI_PRIORITY | in b1dma_load_firmware()
739 t1outp(card->port, 0x07, 0x30); in b1dma_load_firmware()
740 t1outp(card->port, 0x10, 0xF0); in b1dma_load_firmware()
742 card->dma->recvlen = 0; in b1dma_load_firmware()
743 b1dma_writel(card, card->dma->recvbuf.dmaaddr, AMCC_RXPTR); in b1dma_load_firmware()
744 b1dma_writel(card, 4, AMCC_RXLEN); in b1dma_load_firmware()
745 card->csr |= EN_RX_TC_INT; in b1dma_load_firmware()
746 b1dma_writel(card, card->csr, AMCC_INTCSR); in b1dma_load_firmware()
748 b1dma_send_init(card); in b1dma_load_firmware()
756 avmcard *card = cinfo->card; in b1dma_reset_ctr() local
759 spin_lock_irqsave(&card->lock, flags); in b1dma_reset_ctr()
760 b1dma_reset(card); in b1dma_reset_ctr()
764 spin_unlock_irqrestore(&card->lock, flags); in b1dma_reset_ctr()
775 avmcard *card = cinfo->card; in b1dma_register_appl() local
788 card->name); in b1dma_register_appl()
802 b1dma_queue_tx(card, skb); in b1dma_register_appl()
810 avmcard *card = cinfo->card; in b1dma_release_appl() local
815 spin_lock_irqsave(&card->lock, flags); in b1dma_release_appl()
817 spin_unlock_irqrestore(&card->lock, flags); in b1dma_release_appl()
822 card->name); in b1dma_release_appl()
833 b1dma_queue_tx(card, skb); in b1dma_release_appl()
841 avmcard *card = cinfo->card; in b1dma_send_message() local
846 spin_lock_irqsave(&card->lock, flags); in b1dma_send_message()
851 spin_unlock_irqrestore(&card->lock, flags); in b1dma_send_message()
854 b1dma_queue_tx(card, skb); in b1dma_send_message()
865 avmcard *card = cinfo->card; in b1dmactl_proc_show() local
871 seq_printf(m, "%-16s %s\n", "name", card->name); in b1dmactl_proc_show()
872 seq_printf(m, "%-16s 0x%x\n", "io", card->port); in b1dmactl_proc_show()
873 seq_printf(m, "%-16s %d\n", "irq", card->irq); in b1dmactl_proc_show()
874 seq_printf(m, "%-16s 0x%lx\n", "membase", card->membase); in b1dmactl_proc_show()
875 switch (card->cardtype) { in b1dmactl_proc_show()
895 if (card->cardtype != avm_m1) { in b1dmactl_proc_show()
909 if (card->cardtype != avm_m1) { in b1dmactl_proc_show()
923 spin_lock_irqsave(&card->lock, flags); in b1dmactl_proc_show()
925 txoff = (dma_addr_t)b1dma_readl(card, AMCC_TXPTR)-card->dma->sendbuf.dmaaddr; in b1dmactl_proc_show()
926 txlen = b1dma_readl(card, AMCC_TXLEN); in b1dmactl_proc_show()
928 rxoff = (dma_addr_t)b1dma_readl(card, AMCC_RXPTR)-card->dma->recvbuf.dmaaddr; in b1dmactl_proc_show()
929 rxlen = b1dma_readl(card, AMCC_RXLEN); in b1dmactl_proc_show()
931 csr = b1dma_readl(card, AMCC_INTCSR); in b1dmactl_proc_show()
933 spin_unlock_irqrestore(&card->lock, flags); in b1dmactl_proc_show()
935 seq_printf(m, "%-16s 0x%lx\n", "csr (cached)", (unsigned long)card->csr); in b1dmactl_proc_show()