Lines Matching refs:card

59 	struct card *card;  member
74 struct card { struct
97 return &port->card->status->port_status[port->node]; in get_status() argument
186 pci_unmap_single(port->card->pdev, desc->address, skb->len, in wanxl_tx_intr()
196 static inline void wanxl_rx_intr(struct card *card) in wanxl_rx_intr() argument
199 while (desc = &card->status->rx_descs[card->rx_in], in wanxl_rx_intr()
201 if ((desc->stat & PACKET_PORT_MASK) > card->n_ports) in wanxl_rx_intr()
203 pci_name(card->pdev)); in wanxl_rx_intr()
205 struct sk_buff *skb = card->rx_skbs[card->rx_in]; in wanxl_rx_intr()
206 struct port *port = &card->ports[desc->stat & in wanxl_rx_intr()
213 pci_unmap_single(card->pdev, desc->address, in wanxl_rx_intr()
233 pci_map_single(card->pdev, skb->data, in wanxl_rx_intr()
236 card->rx_skbs[card->rx_in] = skb; in wanxl_rx_intr()
240 card->rx_in = (card->rx_in + 1) % RX_QUEUE_LENGTH; in wanxl_rx_intr()
248 struct card *card = dev_id; in wanxl_intr() local
254 while((stat = readl(card->plx + PLX_DOORBELL_FROM_CARD)) != 0) { in wanxl_intr()
256 writel(stat, card->plx + PLX_DOORBELL_FROM_CARD); in wanxl_intr()
258 for (i = 0; i < card->n_ports; i++) { in wanxl_intr()
260 wanxl_tx_intr(&card->ports[i]); in wanxl_intr()
262 wanxl_cable_intr(&card->ports[i]); in wanxl_intr()
265 wanxl_rx_intr(card); in wanxl_intr()
297 desc->address = pci_map_single(port->card->pdev, skb->data, skb->len, in wanxl_xmit()
302 port->card->plx + PLX_DOORBELL_TO_CARD); in wanxl_xmit()
397 u8 __iomem *dbr = port->card->plx + PLX_DOORBELL_TO_CARD; in wanxl_open()
439 port->card->plx + PLX_DOORBELL_TO_CARD); in wanxl_close()
457 pci_unmap_single(port->card->pdev, desc->address, in wanxl_close()
481 static int wanxl_puts_command(struct card *card, u32 cmd) in wanxl_puts_command() argument
485 writel(cmd, card->plx + PLX_MAILBOX_1); in wanxl_puts_command()
487 if (readl(card->plx + PLX_MAILBOX_1) == 0) in wanxl_puts_command()
498 static void wanxl_reset(struct card *card) in wanxl_reset() argument
500 u32 old_value = readl(card->plx + PLX_CONTROL) & ~PLX_CTL_RESET; in wanxl_reset()
502 writel(0x80, card->plx + PLX_MAILBOX_0); in wanxl_reset()
503 writel(old_value | PLX_CTL_RESET, card->plx + PLX_CONTROL); in wanxl_reset()
504 readl(card->plx + PLX_CONTROL); /* wait for posted write */ in wanxl_reset()
506 writel(old_value, card->plx + PLX_CONTROL); in wanxl_reset()
507 readl(card->plx + PLX_CONTROL); /* wait for posted write */ in wanxl_reset()
514 struct card *card = pci_get_drvdata(pdev); in wanxl_pci_remove_one() local
517 for (i = 0; i < card->n_ports; i++) { in wanxl_pci_remove_one()
518 unregister_hdlc_device(card->ports[i].dev); in wanxl_pci_remove_one()
519 free_netdev(card->ports[i].dev); in wanxl_pci_remove_one()
523 if (card->irq) in wanxl_pci_remove_one()
524 free_irq(card->irq, card); in wanxl_pci_remove_one()
526 wanxl_reset(card); in wanxl_pci_remove_one()
529 if (card->rx_skbs[i]) { in wanxl_pci_remove_one()
530 pci_unmap_single(card->pdev, in wanxl_pci_remove_one()
531 card->status->rx_descs[i].address, in wanxl_pci_remove_one()
533 dev_kfree_skb(card->rx_skbs[i]); in wanxl_pci_remove_one()
536 if (card->plx) in wanxl_pci_remove_one()
537 iounmap(card->plx); in wanxl_pci_remove_one()
539 if (card->status) in wanxl_pci_remove_one()
541 card->status, card->status_address); in wanxl_pci_remove_one()
545 kfree(card); in wanxl_pci_remove_one()
563 struct card *card; in wanxl_pci_init_one() local
604 alloc_size = sizeof(struct card) + ports * sizeof(struct port); in wanxl_pci_init_one()
605 card = kzalloc(alloc_size, GFP_KERNEL); in wanxl_pci_init_one()
606 if (card == NULL) { in wanxl_pci_init_one()
612 pci_set_drvdata(pdev, card); in wanxl_pci_init_one()
613 card->pdev = pdev; in wanxl_pci_init_one()
615 card->status = pci_alloc_consistent(pdev, in wanxl_pci_init_one()
617 &card->status_address); in wanxl_pci_init_one()
618 if (card->status == NULL) { in wanxl_pci_init_one()
626 (unsigned long long)card->status_address); in wanxl_pci_init_one()
642 card->plx = ioremap_nocache(plx_phy, 0x70); in wanxl_pci_init_one()
643 if (!card->plx) { in wanxl_pci_init_one()
650 wanxl_reset(card); in wanxl_pci_init_one()
654 while ((stat = readl(card->plx + PLX_MAILBOX_0)) != 0) { in wanxl_pci_init_one()
678 ramsize = readl(card->plx + PLX_MAILBOX_2) & MBX2_MEMSZ_MASK; in wanxl_pci_init_one()
695 if (wanxl_puts_command(card, MBX1_CMD_BSWAP)) { in wanxl_pci_init_one()
703 card->rx_skbs[i] = skb; in wanxl_pci_init_one()
705 card->status->rx_descs[i].address = in wanxl_pci_init_one()
706 pci_map_single(card->pdev, skb->data, in wanxl_pci_init_one()
722 writel(card->status_address + in wanxl_pci_init_one()
723 (void *)&card->status->port_status[i] - in wanxl_pci_init_one()
724 (void *)card->status, mem + PDM_OFFSET + 4 + i * 4); in wanxl_pci_init_one()
725 writel(card->status_address, mem + PDM_OFFSET + 20); in wanxl_pci_init_one()
729 writel(0, card->plx + PLX_MAILBOX_5); in wanxl_pci_init_one()
731 if (wanxl_puts_command(card, MBX1_CMD_ABORTJ)) { in wanxl_pci_init_one()
740 if ((stat = readl(card->plx + PLX_MAILBOX_5)) != 0) in wanxl_pci_init_one()
760 if (request_irq(pdev->irq, wanxl_intr, IRQF_SHARED, "wanXL", card)) { in wanxl_pci_init_one()
766 card->irq = pdev->irq; in wanxl_pci_init_one()
770 struct port *port = &card->ports[i]; in wanxl_pci_init_one()
786 port->card = card; in wanxl_pci_init_one()
796 card->n_ports++; in wanxl_pci_init_one()
802 i ? "," : "", i, card->ports[i].dev->name); in wanxl_pci_init_one()
806 wanxl_cable_intr(&card->ports[i]); /* get carrier status etc.*/ in wanxl_pci_init_one()