• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/isdn/hardware/avm/

Lines Matching refs:card

45 static void b1dma_dispatch_tx(avmcard *card);
83 static inline void b1dma_writel(avmcard *card, u32 value, int off)
85 writel(value, card->mbase + off);
88 static inline u32 b1dma_readl(avmcard *card, int off)
90 return readl(card->mbase + off);
105 static int b1dma_tolink(avmcard *card, void *buf, unsigned int len)
110 while ( !b1dma_tx_empty(card->port)
112 if (!b1dma_tx_empty(card->port))
114 t1outp(card->port, 0x01, *s++);
119 static int b1dma_fromlink(avmcard *card, void *buf, unsigned int len)
124 while ( !b1dma_rx_full(card->port)
126 if (!b1dma_rx_full(card->port))
128 *s++ = t1inp(card->port, 0x00);
133 static int WriteReg(avmcard *card, u32 reg, u8 val)
136 if ( b1dma_tolink(card, &cmd, 1) == 0
137 && b1dma_tolink(card, &reg, 4) == 0) {
139 return b1dma_tolink(card, &tmp, 4);
144 static u8 ReadReg(avmcard *card, u32 reg)
147 if ( b1dma_tolink(card, &cmd, 1) == 0
148 && b1dma_tolink(card, &reg, 4) == 0) {
150 if (b1dma_fromlink(card, &tmp, 4) == 0)
215 void b1dma_reset(avmcard *card)
217 card->csr = 0x0;
218 b1dma_writel(card, card->csr, AMCC_INTCSR);
219 b1dma_writel(card, 0, AMCC_MCSR);
220 b1dma_writel(card, 0, AMCC_RXLEN);
221 b1dma_writel(card, 0, AMCC_TXLEN);
223 t1outp(card->port, 0x10, 0x00);
224 t1outp(card->port, 0x07, 0x00);
226 b1dma_writel(card, 0, AMCC_MCSR);
228 b1dma_writel(card, 0x0f000000, AMCC_MCSR); /* reset all */
230 b1dma_writel(card, 0, AMCC_MCSR);
231 if (card->cardtype == avm_t1pci)
239 static int b1dma_detect(avmcard *card)
241 b1dma_writel(card, 0, AMCC_MCSR);
243 b1dma_writel(card, 0x0f000000, AMCC_MCSR); /* reset all */
245 b1dma_writel(card, 0, AMCC_MCSR);
248 b1dma_writel(card, 0, AMCC_RXLEN);
249 b1dma_writel(card, 0, AMCC_TXLEN);
250 card->csr = 0x0;
251 b1dma_writel(card, card->csr, AMCC_INTCSR);
253 if (b1dma_readl(card, AMCC_MCSR) != 0x000000E6)
256 b1dma_writel(card, 0xffffffff, AMCC_RXPTR);
257 b1dma_writel(card, 0xffffffff, AMCC_TXPTR);
258 if ( b1dma_readl(card, AMCC_RXPTR) != 0xfffffffc
259 || b1dma_readl(card, AMCC_TXPTR) != 0xfffffffc)
262 b1dma_writel(card, 0x0, AMCC_RXPTR);
263 b1dma_writel(card, 0x0, AMCC_TXPTR);
264 if ( b1dma_readl(card, AMCC_RXPTR) != 0x0
265 || b1dma_readl(card, AMCC_TXPTR) != 0x0)
268 t1outp(card->port, 0x10, 0x00);
269 t1outp(card->port, 0x07, 0x00);
271 t1outp(card->port, 0x02, 0x02);
272 t1outp(card->port, 0x03, 0x02);
274 if ( (t1inp(card->port, 0x02) & 0xFE) != 0x02
275 || t1inp(card->port, 0x3) != 0x03)
278 t1outp(card->port, 0x02, 0x00);
279 t1outp(card->port, 0x03, 0x00);
281 if ( (t1inp(card->port, 0x02) & 0xFE) != 0x00
282 || t1inp(card->port, 0x3) != 0x01)
288 int t1pci_detect(avmcard *card)
292 if ((ret = b1dma_detect(card)) != 0)
297 if ( WriteReg(card, 0x80001000, 0x11) != 0
298 || WriteReg(card, 0x80101000, 0x22) != 0
299 || WriteReg(card, 0x80201000, 0x33) != 0
300 || WriteReg(card, 0x80301000, 0x44) != 0)
303 if ( ReadReg(card, 0x80001000) != 0x11
304 || ReadReg(card, 0x80101000) != 0x22
305 || ReadReg(card, 0x80201000) != 0x33
306 || ReadReg(card, 0x80301000) != 0x44)
309 if ( WriteReg(card, 0x80001000, 0x55) != 0
310 || WriteReg(card, 0x80101000, 0x66) != 0
311 || WriteReg(card, 0x80201000, 0x77) != 0
312 || WriteReg(card, 0x80301000, 0x88) != 0)
315 if ( ReadReg(card, 0x80001000) != 0x55
316 || ReadReg(card, 0x80101000) != 0x66
317 || ReadReg(card, 0x80201000) != 0x77
318 || ReadReg(card, 0x80301000) != 0x88)
324 int b1pciv4_detect(avmcard *card)
328 if ((ret = b1dma_detect(card)) != 0)
332 if (WriteReg(card, 0x80A00000, 0x21) != 0)
334 if ((ReadReg(card, 0x80A00000) & 0x01) != 0x01)
338 if (WriteReg(card, 0x80A00000, 0x20) != 0)
340 if ((ReadReg(card, 0x80A00000) & 0x01) != 0x00)
347 static void b1dma_queue_tx(avmcard *card, struct sk_buff *skb)
351 spin_lock_irqsave(&card->lock, flags);
353 skb_queue_tail(&card->dma->send_queue, skb);
355 if (!(card->csr & EN_TX_TC_INT)) {
356 b1dma_dispatch_tx(card);
357 b1dma_writel(card, card->csr, AMCC_INTCSR);
360 spin_unlock_irqrestore(&card->lock, flags);
365 static void b1dma_dispatch_tx(avmcard *card)
367 avmcard_dmainfo *dma = card->dma;
401 printk(KERN_INFO "%s: send ack\n", card->name);
412 b1dma_writel(card, dma->sendbuf.dmaaddr, AMCC_TXPTR);
413 b1dma_writel(card, txlen, AMCC_TXLEN);
415 card->csr |= EN_TX_TC_INT;
422 static void queue_pollack(avmcard *card)
430 card->name);
439 b1dma_queue_tx(card, skb);
444 static void b1dma_handle_rx(avmcard *card)
446 avmctrl_info *cinfo = &card->ctrlinfo[0];
447 avmcard_dmainfo *dma = card->dma;
462 MsgLen = _get_slice(&p, card->msgbuf);
463 DataB3Len = _get_slice(&p, card->databuf);
466 memset(card->msgbuf+MsgLen, 0, 30-MsgLen);
468 CAPIMSG_SETLEN(card->msgbuf, 30);
472 card->name);
474 memcpy(skb_put(skb, MsgLen), card->msgbuf, MsgLen);
475 memcpy(skb_put(skb, DataB3Len), card->databuf, DataB3Len);
483 MsgLen = _get_slice(&p, card->msgbuf);
486 card->name);
488 memcpy(skb_put(skb, MsgLen), card->msgbuf, MsgLen);
520 printk(KERN_INFO "%s: receive poll\n", card->name);
523 queue_pollack(card);
535 printk(KERN_INFO "%s: %s-card (%s) now active\n",
536 card->name,
544 MsgLen = _get_slice(&p, card->msgbuf);
545 card->msgbuf[MsgLen] = 0;
547 && ( card->msgbuf[MsgLen-1] == '\n'
548 || card->msgbuf[MsgLen-1] == '\r')) {
549 card->msgbuf[MsgLen-1] = 0;
553 card->name, ApplId, card->msgbuf);
557 MsgLen = _get_slice(&p, card->msgbuf);
558 card->msgbuf[MsgLen] = 0;
560 && ( card->msgbuf[MsgLen-1] == '\n'
561 || card->msgbuf[MsgLen-1] == '\r')) {
562 card->msgbuf[MsgLen-1] = 0;
565 printk(KERN_INFO "%s: DEBUG: %s\n", card->name, card->msgbuf);
570 card->name, b1cmd);
577 static void b1dma_handle_interrupt(avmcard *card)
582 spin_lock(&card->lock);
584 status = b1dma_readl(card, AMCC_INTCSR);
586 spin_unlock(&card->lock);
590 newcsr = card->csr | (status & ALL_INT);
593 b1dma_writel(card, newcsr, AMCC_INTCSR);
596 struct avmcard_dmainfo *dma = card->dma;
598 if (card->dma->recvlen == 0) {
599 rxlen = b1dma_readl(card, AMCC_RXLEN);
603 b1dma_writel(card, dma->recvbuf.dmaaddr+4, AMCC_RXPTR);
604 b1dma_writel(card, rxlen, AMCC_RXLEN);
608 card->name, rxlen);
612 spin_unlock(&card->lock);
613 b1dma_handle_rx(card);
615 spin_lock(&card->lock);
616 b1dma_writel(card, dma->recvbuf.dmaaddr, AMCC_RXPTR);
617 b1dma_writel(card, 4, AMCC_RXLEN);
622 if (skb_queue_empty(&card->dma->send_queue))
623 card->csr &= ~EN_TX_TC_INT;
625 b1dma_dispatch_tx(card);
627 b1dma_writel(card, card->csr, AMCC_INTCSR);
629 spin_unlock(&card->lock);
634 avmcard *card = devptr;
636 b1dma_handle_interrupt(card);
642 static int b1dma_loaded(avmcard *card)
647 unsigned int base = card->port;
655 card->name);
664 printk(KERN_ERR "%s: b1dma_loaded: got 0x%x, firmware not running in dword mode\n", card->name, ans);
668 printk(KERN_ERR "%s: b1dma_loaded: firmware not running\n", card->name);
674 static void b1dma_send_init(avmcard *card)
682 card->name);
691 _put_word(&p, card->cardnr - 1);
694 b1dma_queue_tx(card, skb);
700 avmcard *card = cinfo->card;
703 b1dma_reset(card);
705 if ((retval = b1_load_t4file(card, &data->firmware))) {
706 b1dma_reset(card);
708 card->name);
713 if ((retval = b1_load_config(card, &data->configuration))) {
714 b1dma_reset(card);
716 card->name);
721 if (!b1dma_loaded(card)) {
722 b1dma_reset(card);
723 printk(KERN_ERR "%s: failed to load t4file.\n", card->name);
727 card->csr = AVM_FLAG;
728 b1dma_writel(card, card->csr, AMCC_INTCSR);
729 b1dma_writel(card, EN_A2P_TRANSFERS|EN_P2A_TRANSFERS|A2P_HI_PRIORITY|
732 t1outp(card->port, 0x07, 0x30);
733 t1outp(card->port, 0x10, 0xF0);
735 card->dma->recvlen = 0;
736 b1dma_writel(card, card->dma->recvbuf.dmaaddr, AMCC_RXPTR);
737 b1dma_writel(card, 4, AMCC_RXLEN);
738 card->csr |= EN_RX_TC_INT;
739 b1dma_writel(card, card->csr, AMCC_INTCSR);
741 b1dma_send_init(card);
749 avmcard *card = cinfo->card;
752 spin_lock_irqsave(&card->lock, flags);
753 b1dma_reset(card);
754 spin_unlock_irqrestore(&card->lock, flags);
768 avmcard *card = cinfo->card;
781 card->name);
795 b1dma_queue_tx(card, skb);
803 avmcard *card = cinfo->card;
812 card->name);
823 b1dma_queue_tx(card, skb);
831 avmcard *card = cinfo->card;
841 b1dma_queue_tx(card, skb);
852 avmcard *card = cinfo->card;
859 len += sprintf(page+len, "%-16s %s\n", "name", card->name);
860 len += sprintf(page+len, "%-16s 0x%x\n", "io", card->port);
861 len += sprintf(page+len, "%-16s %d\n", "irq", card->irq);
862 len += sprintf(page+len, "%-16s 0x%lx\n", "membase", card->membase);
863 switch (card->cardtype) {
883 if (card->cardtype != avm_m1) {
897 if (card->cardtype != avm_m1) {
911 spin_lock_irqsave(&card->lock, flags);
913 txoff = (dma_addr_t)b1dma_readl(card, AMCC_TXPTR)-card->dma->sendbuf.dmaaddr;
914 txlen = b1dma_readl(card, AMCC_TXLEN);
916 rxoff = (dma_addr_t)b1dma_readl(card, AMCC_RXPTR)-card->dma->recvbuf.dmaaddr;
917 rxlen = b1dma_readl(card, AMCC_RXLEN);
919 csr = b1dma_readl(card, AMCC_INTCSR);
921 spin_unlock_irqrestore(&card->lock, flags);
924 "csr (cached)", (unsigned long)card->csr);