Lines Matching refs:lp

448 	struct pcnet32_private *lp = netdev_priv(dev);  in pcnet32_netif_stop()  local
451 napi_disable(&lp->napi); in pcnet32_netif_stop()
457 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_netif_start() local
462 val = lp->a->read_csr(ioaddr, CSR3); in pcnet32_netif_start()
464 lp->a->write_csr(ioaddr, CSR3, val); in pcnet32_netif_start()
465 napi_enable(&lp->napi); in pcnet32_netif_start()
476 struct pcnet32_private *lp, in pcnet32_realloc_tx_ring() argument
488 dma_alloc_coherent(&lp->pci_dev->dev, in pcnet32_realloc_tx_ring()
502 kfree(lp->tx_skbuff); in pcnet32_realloc_tx_ring()
503 kfree(lp->tx_dma_addr); in pcnet32_realloc_tx_ring()
504 dma_free_coherent(&lp->pci_dev->dev, in pcnet32_realloc_tx_ring()
505 sizeof(struct pcnet32_tx_head) * lp->tx_ring_size, in pcnet32_realloc_tx_ring()
506 lp->tx_ring, lp->tx_ring_dma_addr); in pcnet32_realloc_tx_ring()
508 lp->tx_ring_size = entries; in pcnet32_realloc_tx_ring()
509 lp->tx_mod_mask = lp->tx_ring_size - 1; in pcnet32_realloc_tx_ring()
510 lp->tx_len_bits = (size << 12); in pcnet32_realloc_tx_ring()
511 lp->tx_ring = new_tx_ring; in pcnet32_realloc_tx_ring()
512 lp->tx_ring_dma_addr = new_ring_dma_addr; in pcnet32_realloc_tx_ring()
513 lp->tx_dma_addr = new_dma_addr_list; in pcnet32_realloc_tx_ring()
514 lp->tx_skbuff = new_skb_list; in pcnet32_realloc_tx_ring()
520 dma_free_coherent(&lp->pci_dev->dev, in pcnet32_realloc_tx_ring()
536 struct pcnet32_private *lp, in pcnet32_realloc_rx_ring() argument
547 dma_alloc_coherent(&lp->pci_dev->dev, in pcnet32_realloc_rx_ring()
562 overlap = min(entries, lp->rx_ring_size); in pcnet32_realloc_rx_ring()
564 new_rx_ring[new] = lp->rx_ring[new]; in pcnet32_realloc_rx_ring()
565 new_dma_addr_list[new] = lp->rx_dma_addr[new]; in pcnet32_realloc_rx_ring()
566 new_skb_list[new] = lp->rx_skbuff[new]; in pcnet32_realloc_rx_ring()
575 netif_err(lp, drv, dev, "%s netdev_alloc_skb failed\n", in pcnet32_realloc_rx_ring()
582 dma_map_single(&lp->pci_dev->dev, rx_skbuff->data, in pcnet32_realloc_rx_ring()
584 if (dma_mapping_error(&lp->pci_dev->dev, new_dma_addr_list[new])) { in pcnet32_realloc_rx_ring()
585 netif_err(lp, drv, dev, "%s dma mapping failed\n", in pcnet32_realloc_rx_ring()
595 for (; new < lp->rx_ring_size; new++) { in pcnet32_realloc_rx_ring()
596 if (lp->rx_skbuff[new]) { in pcnet32_realloc_rx_ring()
597 if (!dma_mapping_error(&lp->pci_dev->dev, lp->rx_dma_addr[new])) in pcnet32_realloc_rx_ring()
598 dma_unmap_single(&lp->pci_dev->dev, in pcnet32_realloc_rx_ring()
599 lp->rx_dma_addr[new], in pcnet32_realloc_rx_ring()
602 dev_kfree_skb(lp->rx_skbuff[new]); in pcnet32_realloc_rx_ring()
606 kfree(lp->rx_skbuff); in pcnet32_realloc_rx_ring()
607 kfree(lp->rx_dma_addr); in pcnet32_realloc_rx_ring()
608 dma_free_coherent(&lp->pci_dev->dev, in pcnet32_realloc_rx_ring()
609 sizeof(struct pcnet32_rx_head) * lp->rx_ring_size, in pcnet32_realloc_rx_ring()
610 lp->rx_ring, lp->rx_ring_dma_addr); in pcnet32_realloc_rx_ring()
612 lp->rx_ring_size = entries; in pcnet32_realloc_rx_ring()
613 lp->rx_mod_mask = lp->rx_ring_size - 1; in pcnet32_realloc_rx_ring()
614 lp->rx_len_bits = (size << 4); in pcnet32_realloc_rx_ring()
615 lp->rx_ring = new_rx_ring; in pcnet32_realloc_rx_ring()
616 lp->rx_ring_dma_addr = new_ring_dma_addr; in pcnet32_realloc_rx_ring()
617 lp->rx_dma_addr = new_dma_addr_list; in pcnet32_realloc_rx_ring()
618 lp->rx_skbuff = new_skb_list; in pcnet32_realloc_rx_ring()
622 while (--new >= lp->rx_ring_size) { in pcnet32_realloc_rx_ring()
624 if (!dma_mapping_error(&lp->pci_dev->dev, new_dma_addr_list[new])) in pcnet32_realloc_rx_ring()
625 dma_unmap_single(&lp->pci_dev->dev, in pcnet32_realloc_rx_ring()
636 dma_free_coherent(&lp->pci_dev->dev, in pcnet32_realloc_rx_ring()
643 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_purge_rx_ring() local
647 for (i = 0; i < lp->rx_ring_size; i++) { in pcnet32_purge_rx_ring()
648 lp->rx_ring[i].status = 0; /* CPU owns buffer */ in pcnet32_purge_rx_ring()
650 if (lp->rx_skbuff[i]) { in pcnet32_purge_rx_ring()
651 if (!dma_mapping_error(&lp->pci_dev->dev, lp->rx_dma_addr[i])) in pcnet32_purge_rx_ring()
652 dma_unmap_single(&lp->pci_dev->dev, in pcnet32_purge_rx_ring()
653 lp->rx_dma_addr[i], in pcnet32_purge_rx_ring()
656 dev_kfree_skb_any(lp->rx_skbuff[i]); in pcnet32_purge_rx_ring()
658 lp->rx_skbuff[i] = NULL; in pcnet32_purge_rx_ring()
659 lp->rx_dma_addr[i] = 0; in pcnet32_purge_rx_ring()
679 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_suspend() local
680 const struct pcnet32_access *a = lp->a; in pcnet32_suspend()
685 if (lp->chip_version < PCNET32_79C970A) in pcnet32_suspend()
695 spin_unlock_irqrestore(&lp->lock, *flags); in pcnet32_suspend()
700 spin_lock_irqsave(&lp->lock, *flags); in pcnet32_suspend()
703 netif_printk(lp, hw, KERN_DEBUG, dev, in pcnet32_suspend()
711 static void pcnet32_clr_suspend(struct pcnet32_private *lp, ulong ioaddr) in pcnet32_clr_suspend() argument
713 int csr5 = lp->a->read_csr(ioaddr, CSR5); in pcnet32_clr_suspend()
715 lp->a->write_csr(ioaddr, CSR5, csr5 & ~CSR5_SUSPEND); in pcnet32_clr_suspend()
721 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_get_link_ksettings() local
724 spin_lock_irqsave(&lp->lock, flags); in pcnet32_get_link_ksettings()
725 if (lp->mii) { in pcnet32_get_link_ksettings()
726 mii_ethtool_get_link_ksettings(&lp->mii_if, cmd); in pcnet32_get_link_ksettings()
727 } else if (lp->chip_version == PCNET32_79C970A) { in pcnet32_get_link_ksettings()
728 if (lp->autoneg) { in pcnet32_get_link_ksettings()
730 if (lp->a->read_bcr(dev->base_addr, 4) == 0xc0) in pcnet32_get_link_ksettings()
736 cmd->base.port = lp->port_tp ? PORT_TP : PORT_AUI; in pcnet32_get_link_ksettings()
738 cmd->base.duplex = lp->fdx ? DUPLEX_FULL : DUPLEX_HALF; in pcnet32_get_link_ksettings()
744 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_get_link_ksettings()
751 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_set_link_ksettings() local
757 spin_lock_irqsave(&lp->lock, flags); in pcnet32_set_link_ksettings()
758 if (lp->mii) { in pcnet32_set_link_ksettings()
759 r = mii_ethtool_set_link_ksettings(&lp->mii_if, cmd); in pcnet32_set_link_ksettings()
760 } else if (lp->chip_version == PCNET32_79C970A) { in pcnet32_set_link_ksettings()
763 lp->a->write_csr(ioaddr, CSR0, CSR0_STOP); in pcnet32_set_link_ksettings()
765 lp->autoneg = cmd->base.autoneg == AUTONEG_ENABLE; in pcnet32_set_link_ksettings()
766 bcr2 = lp->a->read_bcr(ioaddr, 2); in pcnet32_set_link_ksettings()
768 lp->a->write_bcr(ioaddr, 2, bcr2 | 0x0002); in pcnet32_set_link_ksettings()
770 lp->a->write_bcr(ioaddr, 2, bcr2 & ~0x0002); in pcnet32_set_link_ksettings()
772 lp->port_tp = cmd->base.port == PORT_TP; in pcnet32_set_link_ksettings()
773 csr15 = lp->a->read_csr(ioaddr, CSR15) & ~0x0180; in pcnet32_set_link_ksettings()
776 lp->a->write_csr(ioaddr, CSR15, csr15); in pcnet32_set_link_ksettings()
777 lp->init_block->mode = cpu_to_le16(csr15); in pcnet32_set_link_ksettings()
779 lp->fdx = cmd->base.duplex == DUPLEX_FULL; in pcnet32_set_link_ksettings()
780 bcr9 = lp->a->read_bcr(ioaddr, 9) & ~0x0003; in pcnet32_set_link_ksettings()
783 lp->a->write_bcr(ioaddr, 9, bcr9); in pcnet32_set_link_ksettings()
786 pcnet32_clr_suspend(lp, ioaddr); in pcnet32_set_link_ksettings()
791 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_set_link_ksettings()
798 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_get_drvinfo() local
801 if (lp->pci_dev) in pcnet32_get_drvinfo()
802 strscpy(info->bus_info, pci_name(lp->pci_dev), in pcnet32_get_drvinfo()
811 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_get_link() local
815 spin_lock_irqsave(&lp->lock, flags); in pcnet32_get_link()
816 if (lp->mii) { in pcnet32_get_link()
817 r = mii_link_ok(&lp->mii_if); in pcnet32_get_link()
818 } else if (lp->chip_version == PCNET32_79C970A) { in pcnet32_get_link()
821 if (!lp->autoneg && lp->port_tp) in pcnet32_get_link()
822 r = (lp->a->read_bcr(ioaddr, 4) != 0xc0); in pcnet32_get_link()
825 } else if (lp->chip_version > PCNET32_79C970A) { in pcnet32_get_link()
827 r = (lp->a->read_bcr(ioaddr, 4) != 0xc0); in pcnet32_get_link()
831 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_get_link()
838 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_get_msglevel() local
839 return lp->msg_enable; in pcnet32_get_msglevel()
844 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_set_msglevel() local
845 lp->msg_enable = value; in pcnet32_set_msglevel()
850 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_nway_reset() local
854 if (lp->mii) { in pcnet32_nway_reset()
855 spin_lock_irqsave(&lp->lock, flags); in pcnet32_nway_reset()
856 r = mii_nway_restart(&lp->mii_if); in pcnet32_nway_reset()
857 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_nway_reset()
867 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_get_ringparam() local
870 ering->tx_pending = lp->tx_ring_size; in pcnet32_get_ringparam()
872 ering->rx_pending = lp->rx_ring_size; in pcnet32_get_ringparam()
880 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_set_ringparam() local
892 spin_lock_irqsave(&lp->lock, flags); in pcnet32_set_ringparam()
893 lp->a->write_csr(ioaddr, CSR0, CSR0_STOP); /* stop the chip */ in pcnet32_set_ringparam()
904 if ((1 << i) != lp->tx_ring_size) in pcnet32_set_ringparam()
905 pcnet32_realloc_tx_ring(dev, lp, i); in pcnet32_set_ringparam()
912 if ((1 << i) != lp->rx_ring_size) in pcnet32_set_ringparam()
913 pcnet32_realloc_rx_ring(dev, lp, i); in pcnet32_set_ringparam()
915 lp->napi.weight = lp->rx_ring_size / 2; in pcnet32_set_ringparam()
922 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_set_ringparam()
924 netif_info(lp, drv, dev, "Ring Param Settings: RX: %d, TX: %d\n", in pcnet32_set_ringparam()
925 lp->rx_ring_size, lp->tx_ring_size); in pcnet32_set_ringparam()
949 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_ethtool_test() local
955 netif_printk(lp, hw, KERN_DEBUG, dev, in pcnet32_ethtool_test()
959 netif_printk(lp, hw, KERN_DEBUG, dev, in pcnet32_ethtool_test()
962 netif_printk(lp, hw, KERN_DEBUG, dev, in pcnet32_ethtool_test()
968 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_loopback_test() local
969 const struct pcnet32_access *a = lp->a; /* access to registers */ in pcnet32_loopback_test()
988 spin_lock_irqsave(&lp->lock, flags); in pcnet32_loopback_test()
989 lp->a->write_csr(ioaddr, CSR0, CSR0_STOP); /* stop the chip */ in pcnet32_loopback_test()
991 numbuffs = min(numbuffs, (int)min(lp->rx_ring_size, lp->tx_ring_size)); in pcnet32_loopback_test()
994 lp->a->reset(ioaddr); in pcnet32_loopback_test()
995 lp->a->write_csr(ioaddr, CSR4, 0x0915); /* auto tx pad */ in pcnet32_loopback_test()
998 lp->a->write_bcr(ioaddr, 20, 2); in pcnet32_loopback_test()
1003 lp->a->write_csr(ioaddr, CSR0, CSR0_STOP); /* Set STOP bit */ in pcnet32_loopback_test()
1010 netif_printk(lp, hw, KERN_DEBUG, dev, in pcnet32_loopback_test()
1017 lp->tx_skbuff[x] = skb; in pcnet32_loopback_test()
1018 lp->tx_ring[x].length = cpu_to_le16(-skb->len); in pcnet32_loopback_test()
1019 lp->tx_ring[x].misc = 0; in pcnet32_loopback_test()
1035 lp->tx_dma_addr[x] = in pcnet32_loopback_test()
1036 dma_map_single(&lp->pci_dev->dev, skb->data, skb->len, in pcnet32_loopback_test()
1038 if (dma_mapping_error(&lp->pci_dev->dev, lp->tx_dma_addr[x])) { in pcnet32_loopback_test()
1039 netif_printk(lp, hw, KERN_DEBUG, dev, in pcnet32_loopback_test()
1044 lp->tx_ring[x].base = cpu_to_le32(lp->tx_dma_addr[x]); in pcnet32_loopback_test()
1046 lp->tx_ring[x].status = cpu_to_le16(status); in pcnet32_loopback_test()
1054 lp->a->write_csr(ioaddr, CSR15, x | 0x0044); in pcnet32_loopback_test()
1057 lp->a->write_csr(ioaddr, CSR0, CSR0_START); /* Set STRT bit */ in pcnet32_loopback_test()
1063 while ((lp->rx_ring[x].status & teststatus) && (ticks < 200)) { in pcnet32_loopback_test()
1064 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_loopback_test()
1066 spin_lock_irqsave(&lp->lock, flags); in pcnet32_loopback_test()
1071 netif_err(lp, hw, dev, "Desc %d failed to reset!\n", x); in pcnet32_loopback_test()
1076 lp->a->write_csr(ioaddr, CSR0, CSR0_STOP); /* Set STOP bit */ in pcnet32_loopback_test()
1078 if (netif_msg_hw(lp) && netif_msg_pktdata(lp)) { in pcnet32_loopback_test()
1083 skb = lp->rx_skbuff[x]; in pcnet32_loopback_test()
1093 skb = lp->rx_skbuff[x]; in pcnet32_loopback_test()
1094 packet = lp->tx_skbuff[x]->data; in pcnet32_loopback_test()
1097 netif_printk(lp, hw, KERN_DEBUG, dev, in pcnet32_loopback_test()
1122 lp->a->write_bcr(ioaddr, 20, 4); /* return to 16bit mode */ in pcnet32_loopback_test()
1124 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_loopback_test()
1132 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_set_phys_id() local
1133 const struct pcnet32_access *a = lp->a; in pcnet32_set_phys_id()
1141 spin_lock_irqsave(&lp->lock, flags); in pcnet32_set_phys_id()
1143 lp->save_regs[i - 4] = a->read_bcr(ioaddr, i); in pcnet32_set_phys_id()
1144 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_set_phys_id()
1150 spin_lock_irqsave(&lp->lock, flags); in pcnet32_set_phys_id()
1153 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_set_phys_id()
1158 spin_lock_irqsave(&lp->lock, flags); in pcnet32_set_phys_id()
1160 a->write_bcr(ioaddr, i, lp->save_regs[i - 4]); in pcnet32_set_phys_id()
1161 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_set_phys_id()
1171 struct pcnet32_private *lp, in pcnet32_rx_entry() argument
1204 netif_err(lp, drv, dev, "Impossible packet size %d!\n", in pcnet32_rx_entry()
1210 netif_err(lp, rx_err, dev, "Runt packet!\n"); in pcnet32_rx_entry()
1226 new_dma_addr = dma_map_single(&lp->pci_dev->dev, in pcnet32_rx_entry()
1230 if (dma_mapping_error(&lp->pci_dev->dev, new_dma_addr)) { in pcnet32_rx_entry()
1231 netif_err(lp, rx_err, dev, in pcnet32_rx_entry()
1236 skb = lp->rx_skbuff[entry]; in pcnet32_rx_entry()
1237 dma_unmap_single(&lp->pci_dev->dev, in pcnet32_rx_entry()
1238 lp->rx_dma_addr[entry], in pcnet32_rx_entry()
1242 lp->rx_skbuff[entry] = newskb; in pcnet32_rx_entry()
1243 lp->rx_dma_addr[entry] = new_dma_addr; in pcnet32_rx_entry()
1259 dma_sync_single_for_cpu(&lp->pci_dev->dev, in pcnet32_rx_entry()
1260 lp->rx_dma_addr[entry], pkt_len, in pcnet32_rx_entry()
1263 (unsigned char *)(lp->rx_skbuff[entry]->data), in pcnet32_rx_entry()
1265 dma_sync_single_for_device(&lp->pci_dev->dev, in pcnet32_rx_entry()
1266 lp->rx_dma_addr[entry], pkt_len, in pcnet32_rx_entry()
1277 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_rx() local
1278 int entry = lp->cur_rx & lp->rx_mod_mask; in pcnet32_rx()
1279 struct pcnet32_rx_head *rxp = &lp->rx_ring[entry]; in pcnet32_rx()
1284 pcnet32_rx_entry(dev, lp, rxp, entry); in pcnet32_rx()
1293 entry = (++lp->cur_rx) & lp->rx_mod_mask; in pcnet32_rx()
1294 rxp = &lp->rx_ring[entry]; in pcnet32_rx()
1302 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_tx() local
1303 unsigned int dirty_tx = lp->dirty_tx; in pcnet32_tx()
1307 while (dirty_tx != lp->cur_tx) { in pcnet32_tx()
1308 int entry = dirty_tx & lp->tx_mod_mask; in pcnet32_tx()
1309 int status = (short)le16_to_cpu(lp->tx_ring[entry].status); in pcnet32_tx()
1314 lp->tx_ring[entry].base = 0; in pcnet32_tx()
1318 int err_status = le32_to_cpu(lp->tx_ring[entry].misc); in pcnet32_tx()
1320 netif_err(lp, tx_err, dev, in pcnet32_tx()
1334 netif_err(lp, tx_err, dev, "Tx FIFO error!\n"); in pcnet32_tx()
1340 if (!lp->dxsuflo) { /* If controller doesn't recover ... */ in pcnet32_tx()
1343 netif_err(lp, tx_err, dev, "Tx FIFO error!\n"); in pcnet32_tx()
1355 if (lp->tx_skbuff[entry]) { in pcnet32_tx()
1356 dma_unmap_single(&lp->pci_dev->dev, in pcnet32_tx()
1357 lp->tx_dma_addr[entry], in pcnet32_tx()
1358 lp->tx_skbuff[entry]->len, in pcnet32_tx()
1360 dev_kfree_skb_any(lp->tx_skbuff[entry]); in pcnet32_tx()
1361 lp->tx_skbuff[entry] = NULL; in pcnet32_tx()
1362 lp->tx_dma_addr[entry] = 0; in pcnet32_tx()
1367 delta = (lp->cur_tx - dirty_tx) & (lp->tx_mod_mask + lp->tx_ring_size); in pcnet32_tx()
1368 if (delta > lp->tx_ring_size) { in pcnet32_tx()
1369 netif_err(lp, drv, dev, "out-of-sync dirty pointer, %d vs. %d, full=%d\n", in pcnet32_tx()
1370 dirty_tx, lp->cur_tx, lp->tx_full); in pcnet32_tx()
1371 dirty_tx += lp->tx_ring_size; in pcnet32_tx()
1372 delta -= lp->tx_ring_size; in pcnet32_tx()
1375 if (lp->tx_full && in pcnet32_tx()
1377 delta < lp->tx_ring_size - 2) { in pcnet32_tx()
1379 lp->tx_full = 0; in pcnet32_tx()
1382 lp->dirty_tx = dirty_tx; in pcnet32_tx()
1389 struct pcnet32_private *lp = container_of(napi, struct pcnet32_private, napi); in pcnet32_poll() local
1390 struct net_device *dev = lp->dev; in pcnet32_poll()
1398 spin_lock_irqsave(&lp->lock, flags); in pcnet32_poll()
1401 lp->a->reset(ioaddr); in pcnet32_poll()
1402 lp->a->write_csr(ioaddr, CSR4, 0x0915); /* auto tx pad */ in pcnet32_poll()
1409 val = lp->a->read_csr(ioaddr, CSR3); in pcnet32_poll()
1411 lp->a->write_csr(ioaddr, CSR3, val); in pcnet32_poll()
1414 lp->a->write_csr(ioaddr, CSR0, CSR0_INTEN); in pcnet32_poll()
1417 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_poll()
1425 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_get_regs_len() local
1426 int j = lp->phycount * PCNET32_REGS_PER_PHY; in pcnet32_get_regs_len()
1436 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_get_regs() local
1437 const struct pcnet32_access *a = lp->a; in pcnet32_get_regs()
1441 spin_lock_irqsave(&lp->lock, flags); in pcnet32_get_regs()
1468 if (lp->mii) { in pcnet32_get_regs()
1471 if (lp->phymask & (1 << j)) { in pcnet32_get_regs()
1473 lp->a->write_bcr(ioaddr, 33, in pcnet32_get_regs()
1475 *buff++ = lp->a->read_bcr(ioaddr, 34); in pcnet32_get_regs()
1482 pcnet32_clr_suspend(lp, ioaddr); in pcnet32_get_regs()
1484 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_get_regs()
1594 struct pcnet32_private *lp; in pcnet32_probe1() local
1745 dev = alloc_etherdev(sizeof(*lp)); in pcnet32_probe1()
1837 lp = netdev_priv(dev); in pcnet32_probe1()
1839 lp->init_block = dma_alloc_coherent(&pdev->dev, in pcnet32_probe1()
1840 sizeof(*lp->init_block), in pcnet32_probe1()
1841 &lp->init_dma_addr, GFP_KERNEL); in pcnet32_probe1()
1842 if (!lp->init_block) { in pcnet32_probe1()
1848 lp->pci_dev = pdev; in pcnet32_probe1()
1850 lp->dev = dev; in pcnet32_probe1()
1852 spin_lock_init(&lp->lock); in pcnet32_probe1()
1854 lp->name = chipname; in pcnet32_probe1()
1855 lp->shared_irq = shared; in pcnet32_probe1()
1856 lp->tx_ring_size = TX_RING_SIZE; /* default tx ring size */ in pcnet32_probe1()
1857 lp->rx_ring_size = RX_RING_SIZE; /* default rx ring size */ in pcnet32_probe1()
1858 lp->tx_mod_mask = lp->tx_ring_size - 1; in pcnet32_probe1()
1859 lp->rx_mod_mask = lp->rx_ring_size - 1; in pcnet32_probe1()
1860 lp->tx_len_bits = (PCNET32_LOG_TX_BUFFERS << 12); in pcnet32_probe1()
1861 lp->rx_len_bits = (PCNET32_LOG_RX_BUFFERS << 4); in pcnet32_probe1()
1862 lp->mii_if.full_duplex = fdx; in pcnet32_probe1()
1863 lp->mii_if.phy_id_mask = 0x1f; in pcnet32_probe1()
1864 lp->mii_if.reg_num_mask = 0x1f; in pcnet32_probe1()
1865 lp->dxsuflo = dxsuflo; in pcnet32_probe1()
1866 lp->mii = mii; in pcnet32_probe1()
1867 lp->chip_version = chip_version; in pcnet32_probe1()
1868 lp->msg_enable = pcnet32_debug; in pcnet32_probe1()
1871 lp->options = PCNET32_PORT_ASEL; in pcnet32_probe1()
1873 lp->options = options_mapping[options[cards_found]]; in pcnet32_probe1()
1875 if (lp->chip_version == PCNET32_79C970A) in pcnet32_probe1()
1876 lp->options = PCNET32_PORT_10BT; in pcnet32_probe1()
1877 lp->mii_if.dev = dev; in pcnet32_probe1()
1878 lp->mii_if.mdio_read = mdio_read; in pcnet32_probe1()
1879 lp->mii_if.mdio_write = mdio_write; in pcnet32_probe1()
1882 lp->napi.weight = lp->rx_ring_size / 2; in pcnet32_probe1()
1884 netif_napi_add_weight(dev, &lp->napi, pcnet32_poll, in pcnet32_probe1()
1885 lp->rx_ring_size / 2); in pcnet32_probe1()
1887 if (fdx && !(lp->options & PCNET32_PORT_ASEL) && in pcnet32_probe1()
1889 lp->options |= PCNET32_PORT_FD; in pcnet32_probe1()
1891 lp->a = a; in pcnet32_probe1()
1894 if (pcnet32_alloc_ring(dev, pci_name(lp->pci_dev))) { in pcnet32_probe1()
1901 lp->options = PCNET32_PORT_FD | PCNET32_PORT_GPSI; in pcnet32_probe1()
1903 lp->init_block->mode = cpu_to_le16(0x0003); /* Disable Rx and Tx. */ in pcnet32_probe1()
1904 lp->init_block->tlen_rlen = in pcnet32_probe1()
1905 cpu_to_le16(lp->tx_len_bits | lp->rx_len_bits); in pcnet32_probe1()
1907 lp->init_block->phys_addr[i] = dev->dev_addr[i]; in pcnet32_probe1()
1908 lp->init_block->filter[0] = 0x00000000; in pcnet32_probe1()
1909 lp->init_block->filter[1] = 0x00000000; in pcnet32_probe1()
1910 lp->init_block->rx_ring = cpu_to_le32(lp->rx_ring_dma_addr); in pcnet32_probe1()
1911 lp->init_block->tx_ring = cpu_to_le32(lp->tx_ring_dma_addr); in pcnet32_probe1()
1916 a->write_csr(ioaddr, 1, (lp->init_dma_addr & 0xffff)); in pcnet32_probe1()
1917 a->write_csr(ioaddr, 2, (lp->init_dma_addr >> 16)); in pcnet32_probe1()
1947 if (lp->mii) { in pcnet32_probe1()
1950 lp->mii_if.phy_id = ((lp->a->read_bcr(ioaddr, 33)) >> 5) & 0x1f; in pcnet32_probe1()
1963 lp->phycount++; in pcnet32_probe1()
1964 lp->phymask |= (1 << i); in pcnet32_probe1()
1965 lp->mii_if.phy_id = i; in pcnet32_probe1()
1970 lp->a->write_bcr(ioaddr, 33, (lp->mii_if.phy_id) << 5); in pcnet32_probe1()
1971 if (lp->phycount > 1) in pcnet32_probe1()
1972 lp->options |= PCNET32_PORT_MII; in pcnet32_probe1()
1975 timer_setup(&lp->watchdog_timer, pcnet32_watchdog, 0); in pcnet32_probe1()
1989 lp->next = pcnet32_dev; in pcnet32_probe1()
1994 pr_info("%s: registered as %s\n", dev->name, lp->name); in pcnet32_probe1()
2004 dma_free_coherent(&lp->pci_dev->dev, sizeof(*lp->init_block), in pcnet32_probe1()
2005 lp->init_block, lp->init_dma_addr); in pcnet32_probe1()
2016 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_alloc_ring() local
2018 lp->tx_ring = dma_alloc_coherent(&lp->pci_dev->dev, in pcnet32_alloc_ring()
2019 sizeof(struct pcnet32_tx_head) * lp->tx_ring_size, in pcnet32_alloc_ring()
2020 &lp->tx_ring_dma_addr, GFP_KERNEL); in pcnet32_alloc_ring()
2021 if (!lp->tx_ring) { in pcnet32_alloc_ring()
2022 netif_err(lp, drv, dev, "Coherent memory allocation failed\n"); in pcnet32_alloc_ring()
2026 lp->rx_ring = dma_alloc_coherent(&lp->pci_dev->dev, in pcnet32_alloc_ring()
2027 sizeof(struct pcnet32_rx_head) * lp->rx_ring_size, in pcnet32_alloc_ring()
2028 &lp->rx_ring_dma_addr, GFP_KERNEL); in pcnet32_alloc_ring()
2029 if (!lp->rx_ring) { in pcnet32_alloc_ring()
2030 netif_err(lp, drv, dev, "Coherent memory allocation failed\n"); in pcnet32_alloc_ring()
2034 lp->tx_dma_addr = kcalloc(lp->tx_ring_size, sizeof(dma_addr_t), in pcnet32_alloc_ring()
2036 if (!lp->tx_dma_addr) in pcnet32_alloc_ring()
2039 lp->rx_dma_addr = kcalloc(lp->rx_ring_size, sizeof(dma_addr_t), in pcnet32_alloc_ring()
2041 if (!lp->rx_dma_addr) in pcnet32_alloc_ring()
2044 lp->tx_skbuff = kcalloc(lp->tx_ring_size, sizeof(struct sk_buff *), in pcnet32_alloc_ring()
2046 if (!lp->tx_skbuff) in pcnet32_alloc_ring()
2049 lp->rx_skbuff = kcalloc(lp->rx_ring_size, sizeof(struct sk_buff *), in pcnet32_alloc_ring()
2051 if (!lp->rx_skbuff) in pcnet32_alloc_ring()
2059 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_free_ring() local
2061 kfree(lp->tx_skbuff); in pcnet32_free_ring()
2062 lp->tx_skbuff = NULL; in pcnet32_free_ring()
2064 kfree(lp->rx_skbuff); in pcnet32_free_ring()
2065 lp->rx_skbuff = NULL; in pcnet32_free_ring()
2067 kfree(lp->tx_dma_addr); in pcnet32_free_ring()
2068 lp->tx_dma_addr = NULL; in pcnet32_free_ring()
2070 kfree(lp->rx_dma_addr); in pcnet32_free_ring()
2071 lp->rx_dma_addr = NULL; in pcnet32_free_ring()
2073 if (lp->tx_ring) { in pcnet32_free_ring()
2074 dma_free_coherent(&lp->pci_dev->dev, in pcnet32_free_ring()
2075 sizeof(struct pcnet32_tx_head) * lp->tx_ring_size, in pcnet32_free_ring()
2076 lp->tx_ring, lp->tx_ring_dma_addr); in pcnet32_free_ring()
2077 lp->tx_ring = NULL; in pcnet32_free_ring()
2080 if (lp->rx_ring) { in pcnet32_free_ring()
2081 dma_free_coherent(&lp->pci_dev->dev, in pcnet32_free_ring()
2082 sizeof(struct pcnet32_rx_head) * lp->rx_ring_size, in pcnet32_free_ring()
2083 lp->rx_ring, lp->rx_ring_dma_addr); in pcnet32_free_ring()
2084 lp->rx_ring = NULL; in pcnet32_free_ring()
2090 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_open() local
2091 struct pci_dev *pdev = lp->pci_dev; in pcnet32_open()
2099 lp->shared_irq ? IRQF_SHARED : 0, dev->name, in pcnet32_open()
2104 spin_lock_irqsave(&lp->lock, flags); in pcnet32_open()
2112 lp->a->reset(ioaddr); in pcnet32_open()
2115 lp->a->write_bcr(ioaddr, 20, 2); in pcnet32_open()
2117 netif_printk(lp, ifup, KERN_DEBUG, dev, in pcnet32_open()
2119 __func__, dev->irq, (u32) (lp->tx_ring_dma_addr), in pcnet32_open()
2120 (u32) (lp->rx_ring_dma_addr), in pcnet32_open()
2121 (u32) (lp->init_dma_addr)); in pcnet32_open()
2123 lp->autoneg = !!(lp->options & PCNET32_PORT_ASEL); in pcnet32_open()
2124 lp->port_tp = !!(lp->options & PCNET32_PORT_10BT); in pcnet32_open()
2125 lp->fdx = !!(lp->options & PCNET32_PORT_FD); in pcnet32_open()
2128 val = lp->a->read_bcr(ioaddr, 2) & ~2; in pcnet32_open()
2129 if (lp->options & PCNET32_PORT_ASEL) in pcnet32_open()
2131 lp->a->write_bcr(ioaddr, 2, val); in pcnet32_open()
2134 if (lp->mii_if.full_duplex) { in pcnet32_open()
2135 val = lp->a->read_bcr(ioaddr, 9) & ~3; in pcnet32_open()
2136 if (lp->options & PCNET32_PORT_FD) { in pcnet32_open()
2138 if (lp->options == (PCNET32_PORT_FD | PCNET32_PORT_AUI)) in pcnet32_open()
2140 } else if (lp->options & PCNET32_PORT_ASEL) { in pcnet32_open()
2142 if (lp->chip_version == 0x2627) in pcnet32_open()
2145 lp->a->write_bcr(ioaddr, 9, val); in pcnet32_open()
2149 val = lp->a->read_csr(ioaddr, 124) & ~0x10; in pcnet32_open()
2150 if ((lp->options & PCNET32_PORT_PORTSEL) == PCNET32_PORT_GPSI) in pcnet32_open()
2152 lp->a->write_csr(ioaddr, 124, val); in pcnet32_open()
2158 if (lp->options & PCNET32_PORT_ASEL) { in pcnet32_open()
2159 lp->options = PCNET32_PORT_FD | PCNET32_PORT_100; in pcnet32_open()
2160 netif_printk(lp, link, KERN_DEBUG, dev, in pcnet32_open()
2164 if (lp->phycount < 2) { in pcnet32_open()
2170 if (lp->mii && !(lp->options & PCNET32_PORT_ASEL)) { in pcnet32_open()
2171 lp->a->write_bcr(ioaddr, 32, in pcnet32_open()
2172 lp->a->read_bcr(ioaddr, 32) | 0x0080); in pcnet32_open()
2174 val = lp->a->read_bcr(ioaddr, 32) & ~0xb8; in pcnet32_open()
2175 if (lp->options & PCNET32_PORT_FD) in pcnet32_open()
2177 if (lp->options & PCNET32_PORT_100) in pcnet32_open()
2179 lp->a->write_bcr(ioaddr, 32, val); in pcnet32_open()
2181 if (lp->options & PCNET32_PORT_ASEL) { in pcnet32_open()
2182 lp->a->write_bcr(ioaddr, 32, in pcnet32_open()
2183 lp->a->read_bcr(ioaddr, in pcnet32_open()
2186 val = lp->a->read_bcr(ioaddr, 32) & ~0x98; in pcnet32_open()
2188 lp->a->write_bcr(ioaddr, 32, val); in pcnet32_open()
2201 val = lp->a->read_bcr(ioaddr, 2); in pcnet32_open()
2202 lp->a->write_bcr(ioaddr, 2, val & ~2); in pcnet32_open()
2203 val = lp->a->read_bcr(ioaddr, 32); in pcnet32_open()
2204 lp->a->write_bcr(ioaddr, 32, val & ~(1 << 7)); /* stop MII manager */ in pcnet32_open()
2206 if (!(lp->options & PCNET32_PORT_ASEL)) { in pcnet32_open()
2212 (lp->options & PCNET32_PORT_100) ? in pcnet32_open()
2214 bcr9 = lp->a->read_bcr(ioaddr, 9); in pcnet32_open()
2216 if (lp->options & PCNET32_PORT_FD) { in pcnet32_open()
2223 lp->a->write_bcr(ioaddr, 9, bcr9); in pcnet32_open()
2227 if (lp->phymask & (1 << i)) { in pcnet32_open()
2239 lp->mii_if.phy_id = i; in pcnet32_open()
2241 if (lp->options & PCNET32_PORT_ASEL) { in pcnet32_open()
2242 mii_ethtool_gset(&lp->mii_if, &ecmd); in pcnet32_open()
2245 mii_ethtool_sset(&lp->mii_if, &ecmd); in pcnet32_open()
2248 lp->mii_if.phy_id = first_phy; in pcnet32_open()
2249 netif_info(lp, link, dev, "Using PHY number %d\n", first_phy); in pcnet32_open()
2253 if (lp->dxsuflo) { /* Disable transmit stop on underflow */ in pcnet32_open()
2254 val = lp->a->read_csr(ioaddr, CSR3); in pcnet32_open()
2256 lp->a->write_csr(ioaddr, CSR3, val); in pcnet32_open()
2260 lp->init_block->mode = in pcnet32_open()
2261 cpu_to_le16((lp->options & PCNET32_PORT_PORTSEL) << 7); in pcnet32_open()
2269 napi_enable(&lp->napi); in pcnet32_open()
2272 lp->a->write_csr(ioaddr, 1, (lp->init_dma_addr & 0xffff)); in pcnet32_open()
2273 lp->a->write_csr(ioaddr, 2, (lp->init_dma_addr >> 16)); in pcnet32_open()
2275 lp->a->write_csr(ioaddr, CSR4, 0x0915); /* auto tx pad */ in pcnet32_open()
2276 lp->a->write_csr(ioaddr, CSR0, CSR0_INIT); in pcnet32_open()
2280 if (lp->chip_version >= PCNET32_79C970A) { in pcnet32_open()
2283 mod_timer(&lp->watchdog_timer, PCNET32_WATCHDOG_TIMEOUT); in pcnet32_open()
2288 if (lp->a->read_csr(ioaddr, CSR0) & CSR0_IDON) in pcnet32_open()
2294 lp->a->write_csr(ioaddr, CSR0, CSR0_NORMAL); in pcnet32_open()
2296 netif_printk(lp, ifup, KERN_DEBUG, dev, in pcnet32_open()
2299 (u32) (lp->init_dma_addr), in pcnet32_open()
2300 lp->a->read_csr(ioaddr, CSR0)); in pcnet32_open()
2302 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_open()
2314 lp->a->write_bcr(ioaddr, 20, 4); in pcnet32_open()
2317 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_open()
2337 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_purge_tx_ring() local
2340 for (i = 0; i < lp->tx_ring_size; i++) { in pcnet32_purge_tx_ring()
2341 lp->tx_ring[i].status = 0; /* CPU owns buffer */ in pcnet32_purge_tx_ring()
2343 if (lp->tx_skbuff[i]) { in pcnet32_purge_tx_ring()
2344 if (!dma_mapping_error(&lp->pci_dev->dev, lp->tx_dma_addr[i])) in pcnet32_purge_tx_ring()
2345 dma_unmap_single(&lp->pci_dev->dev, in pcnet32_purge_tx_ring()
2346 lp->tx_dma_addr[i], in pcnet32_purge_tx_ring()
2347 lp->tx_skbuff[i]->len, in pcnet32_purge_tx_ring()
2349 dev_kfree_skb_any(lp->tx_skbuff[i]); in pcnet32_purge_tx_ring()
2351 lp->tx_skbuff[i] = NULL; in pcnet32_purge_tx_ring()
2352 lp->tx_dma_addr[i] = 0; in pcnet32_purge_tx_ring()
2359 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_init_ring() local
2362 lp->tx_full = 0; in pcnet32_init_ring()
2363 lp->cur_rx = lp->cur_tx = 0; in pcnet32_init_ring()
2364 lp->dirty_rx = lp->dirty_tx = 0; in pcnet32_init_ring()
2366 for (i = 0; i < lp->rx_ring_size; i++) { in pcnet32_init_ring()
2367 struct sk_buff *rx_skbuff = lp->rx_skbuff[i]; in pcnet32_init_ring()
2369 lp->rx_skbuff[i] = netdev_alloc_skb(dev, PKT_BUF_SKB); in pcnet32_init_ring()
2370 rx_skbuff = lp->rx_skbuff[i]; in pcnet32_init_ring()
2373 netif_err(lp, drv, dev, "%s netdev_alloc_skb failed\n", in pcnet32_init_ring()
2381 if (lp->rx_dma_addr[i] == 0) { in pcnet32_init_ring()
2382 lp->rx_dma_addr[i] = in pcnet32_init_ring()
2383 dma_map_single(&lp->pci_dev->dev, rx_skbuff->data, in pcnet32_init_ring()
2385 if (dma_mapping_error(&lp->pci_dev->dev, lp->rx_dma_addr[i])) { in pcnet32_init_ring()
2387 netif_err(lp, drv, dev, in pcnet32_init_ring()
2393 lp->rx_ring[i].base = cpu_to_le32(lp->rx_dma_addr[i]); in pcnet32_init_ring()
2394 lp->rx_ring[i].buf_length = cpu_to_le16(NEG_BUF_SIZE); in pcnet32_init_ring()
2396 lp->rx_ring[i].status = cpu_to_le16(0x8000); in pcnet32_init_ring()
2400 for (i = 0; i < lp->tx_ring_size; i++) { in pcnet32_init_ring()
2401 lp->tx_ring[i].status = 0; /* CPU owns buffer */ in pcnet32_init_ring()
2403 lp->tx_ring[i].base = 0; in pcnet32_init_ring()
2404 lp->tx_dma_addr[i] = 0; in pcnet32_init_ring()
2407 lp->init_block->tlen_rlen = in pcnet32_init_ring()
2408 cpu_to_le16(lp->tx_len_bits | lp->rx_len_bits); in pcnet32_init_ring()
2410 lp->init_block->phys_addr[i] = dev->dev_addr[i]; in pcnet32_init_ring()
2411 lp->init_block->rx_ring = cpu_to_le32(lp->rx_ring_dma_addr); in pcnet32_init_ring()
2412 lp->init_block->tx_ring = cpu_to_le32(lp->tx_ring_dma_addr); in pcnet32_init_ring()
2423 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_restart() local
2429 if (lp->a->read_csr(ioaddr, CSR0) & CSR0_STOP) in pcnet32_restart()
2433 netif_err(lp, drv, dev, "%s timed out waiting for stop\n", in pcnet32_restart()
2441 lp->a->write_csr(ioaddr, CSR0, CSR0_INIT); in pcnet32_restart()
2444 if (lp->a->read_csr(ioaddr, CSR0) & CSR0_IDON) in pcnet32_restart()
2447 lp->a->write_csr(ioaddr, CSR0, csr0_bits); in pcnet32_restart()
2452 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_tx_timeout() local
2455 spin_lock_irqsave(&lp->lock, flags); in pcnet32_tx_timeout()
2459 dev->name, lp->a->read_csr(ioaddr, CSR0)); in pcnet32_tx_timeout()
2460 lp->a->write_csr(ioaddr, CSR0, CSR0_STOP); in pcnet32_tx_timeout()
2462 if (netif_msg_tx_err(lp)) { in pcnet32_tx_timeout()
2466 lp->dirty_tx, lp->cur_tx, lp->tx_full ? " (full)" : "", in pcnet32_tx_timeout()
2467 lp->cur_rx); in pcnet32_tx_timeout()
2468 for (i = 0; i < lp->rx_ring_size; i++) in pcnet32_tx_timeout()
2470 le32_to_cpu(lp->rx_ring[i].base), in pcnet32_tx_timeout()
2471 (-le16_to_cpu(lp->rx_ring[i].buf_length)) & in pcnet32_tx_timeout()
2472 0xffff, le32_to_cpu(lp->rx_ring[i].msg_length), in pcnet32_tx_timeout()
2473 le16_to_cpu(lp->rx_ring[i].status)); in pcnet32_tx_timeout()
2474 for (i = 0; i < lp->tx_ring_size; i++) in pcnet32_tx_timeout()
2476 le32_to_cpu(lp->tx_ring[i].base), in pcnet32_tx_timeout()
2477 (-le16_to_cpu(lp->tx_ring[i].length)) & 0xffff, in pcnet32_tx_timeout()
2478 le32_to_cpu(lp->tx_ring[i].misc), in pcnet32_tx_timeout()
2479 le16_to_cpu(lp->tx_ring[i].status)); in pcnet32_tx_timeout()
2487 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_tx_timeout()
2493 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_start_xmit() local
2499 spin_lock_irqsave(&lp->lock, flags); in pcnet32_start_xmit()
2501 netif_printk(lp, tx_queued, KERN_DEBUG, dev, in pcnet32_start_xmit()
2503 __func__, lp->a->read_csr(ioaddr, CSR0)); in pcnet32_start_xmit()
2513 entry = lp->cur_tx & lp->tx_mod_mask; in pcnet32_start_xmit()
2518 lp->tx_ring[entry].length = cpu_to_le16(-skb->len); in pcnet32_start_xmit()
2520 lp->tx_ring[entry].misc = 0x00000000; in pcnet32_start_xmit()
2522 lp->tx_dma_addr[entry] = in pcnet32_start_xmit()
2523 dma_map_single(&lp->pci_dev->dev, skb->data, skb->len, in pcnet32_start_xmit()
2525 if (dma_mapping_error(&lp->pci_dev->dev, lp->tx_dma_addr[entry])) { in pcnet32_start_xmit()
2530 lp->tx_skbuff[entry] = skb; in pcnet32_start_xmit()
2531 lp->tx_ring[entry].base = cpu_to_le32(lp->tx_dma_addr[entry]); in pcnet32_start_xmit()
2533 lp->tx_ring[entry].status = cpu_to_le16(status); in pcnet32_start_xmit()
2535 lp->cur_tx++; in pcnet32_start_xmit()
2539 lp->a->write_csr(ioaddr, CSR0, CSR0_INTEN | CSR0_TXPOLL); in pcnet32_start_xmit()
2541 if (lp->tx_ring[(entry + 1) & lp->tx_mod_mask].base != 0) { in pcnet32_start_xmit()
2542 lp->tx_full = 1; in pcnet32_start_xmit()
2546 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_start_xmit()
2555 struct pcnet32_private *lp; in pcnet32_interrupt() local
2561 lp = netdev_priv(dev); in pcnet32_interrupt()
2563 spin_lock(&lp->lock); in pcnet32_interrupt()
2565 csr0 = lp->a->read_csr(ioaddr, CSR0); in pcnet32_interrupt()
2570 lp->a->write_csr(ioaddr, CSR0, csr0 & ~0x004f); in pcnet32_interrupt()
2572 netif_printk(lp, intr, KERN_DEBUG, dev, in pcnet32_interrupt()
2574 csr0, lp->a->read_csr(ioaddr, CSR0)); in pcnet32_interrupt()
2594 netif_err(lp, drv, dev, "Bus master arbitration failure, status %4.4x\n", in pcnet32_interrupt()
2598 if (napi_schedule_prep(&lp->napi)) { in pcnet32_interrupt()
2601 val = lp->a->read_csr(ioaddr, CSR3); in pcnet32_interrupt()
2603 lp->a->write_csr(ioaddr, CSR3, val); in pcnet32_interrupt()
2605 __napi_schedule(&lp->napi); in pcnet32_interrupt()
2608 csr0 = lp->a->read_csr(ioaddr, CSR0); in pcnet32_interrupt()
2611 netif_printk(lp, intr, KERN_DEBUG, dev, in pcnet32_interrupt()
2613 lp->a->read_csr(ioaddr, CSR0)); in pcnet32_interrupt()
2615 spin_unlock(&lp->lock); in pcnet32_interrupt()
2623 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_close() local
2626 del_timer_sync(&lp->watchdog_timer); in pcnet32_close()
2629 napi_disable(&lp->napi); in pcnet32_close()
2631 spin_lock_irqsave(&lp->lock, flags); in pcnet32_close()
2633 dev->stats.rx_missed_errors = lp->a->read_csr(ioaddr, 112); in pcnet32_close()
2635 netif_printk(lp, ifdown, KERN_DEBUG, dev, in pcnet32_close()
2637 lp->a->read_csr(ioaddr, CSR0)); in pcnet32_close()
2640 lp->a->write_csr(ioaddr, CSR0, CSR0_STOP); in pcnet32_close()
2646 lp->a->write_bcr(ioaddr, 20, 4); in pcnet32_close()
2648 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_close()
2652 spin_lock_irqsave(&lp->lock, flags); in pcnet32_close()
2657 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_close()
2664 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_get_stats() local
2668 spin_lock_irqsave(&lp->lock, flags); in pcnet32_get_stats()
2669 dev->stats.rx_missed_errors = lp->a->read_csr(ioaddr, 112); in pcnet32_get_stats()
2670 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_get_stats()
2678 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_load_multicast() local
2679 volatile struct pcnet32_init_block *ib = lp->init_block; in pcnet32_load_multicast()
2690 lp->a->write_csr(ioaddr, PCNET32_MC_FILTER, 0xffff); in pcnet32_load_multicast()
2691 lp->a->write_csr(ioaddr, PCNET32_MC_FILTER+1, 0xffff); in pcnet32_load_multicast()
2692 lp->a->write_csr(ioaddr, PCNET32_MC_FILTER+2, 0xffff); in pcnet32_load_multicast()
2693 lp->a->write_csr(ioaddr, PCNET32_MC_FILTER+3, 0xffff); in pcnet32_load_multicast()
2707 lp->a->write_csr(ioaddr, PCNET32_MC_FILTER + i, in pcnet32_load_multicast()
2717 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_set_multicast_list() local
2720 spin_lock_irqsave(&lp->lock, flags); in pcnet32_set_multicast_list()
2722 csr15 = lp->a->read_csr(ioaddr, CSR15); in pcnet32_set_multicast_list()
2725 netif_info(lp, hw, dev, "Promiscuous mode enabled\n"); in pcnet32_set_multicast_list()
2726 lp->init_block->mode = in pcnet32_set_multicast_list()
2727 cpu_to_le16(0x8000 | (lp->options & PCNET32_PORT_PORTSEL) << in pcnet32_set_multicast_list()
2729 lp->a->write_csr(ioaddr, CSR15, csr15 | 0x8000); in pcnet32_set_multicast_list()
2731 lp->init_block->mode = in pcnet32_set_multicast_list()
2732 cpu_to_le16((lp->options & PCNET32_PORT_PORTSEL) << 7); in pcnet32_set_multicast_list()
2733 lp->a->write_csr(ioaddr, CSR15, csr15 & 0x7fff); in pcnet32_set_multicast_list()
2738 pcnet32_clr_suspend(lp, ioaddr); in pcnet32_set_multicast_list()
2740 lp->a->write_csr(ioaddr, CSR0, CSR0_STOP); in pcnet32_set_multicast_list()
2745 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_set_multicast_list()
2751 struct pcnet32_private *lp = netdev_priv(dev); in mdio_read() local
2755 if (!lp->mii) in mdio_read()
2758 lp->a->write_bcr(ioaddr, 33, ((phy_id & 0x1f) << 5) | (reg_num & 0x1f)); in mdio_read()
2759 val_out = lp->a->read_bcr(ioaddr, 34); in mdio_read()
2767 struct pcnet32_private *lp = netdev_priv(dev); in mdio_write() local
2770 if (!lp->mii) in mdio_write()
2773 lp->a->write_bcr(ioaddr, 33, ((phy_id & 0x1f) << 5) | (reg_num & 0x1f)); in mdio_write()
2774 lp->a->write_bcr(ioaddr, 34, val); in mdio_write()
2779 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_ioctl() local
2784 if (lp->mii) { in pcnet32_ioctl()
2785 spin_lock_irqsave(&lp->lock, flags); in pcnet32_ioctl()
2786 rc = generic_mii_ioctl(&lp->mii_if, if_mii(rq), cmd, NULL); in pcnet32_ioctl()
2787 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_ioctl()
2797 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_check_otherphy() local
2798 struct mii_if_info mii = lp->mii_if; in pcnet32_check_otherphy()
2803 if (i == lp->mii_if.phy_id) in pcnet32_check_otherphy()
2805 if (lp->phymask & (1 << i)) { in pcnet32_check_otherphy()
2809 netif_info(lp, link, dev, "Using PHY number %d\n", in pcnet32_check_otherphy()
2814 mdio_read(dev, lp->mii_if.phy_id, MII_BMCR); in pcnet32_check_otherphy()
2815 mdio_write(dev, lp->mii_if.phy_id, MII_BMCR, in pcnet32_check_otherphy()
2824 lp->mii_if.phy_id = i; in pcnet32_check_otherphy()
2842 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_check_media() local
2847 if (lp->mii) { in pcnet32_check_media()
2848 curr_link = mii_link_ok(&lp->mii_if); in pcnet32_check_media()
2849 } else if (lp->chip_version == PCNET32_79C970A) { in pcnet32_check_media()
2852 if (!lp->autoneg && lp->port_tp) in pcnet32_check_media()
2853 curr_link = (lp->a->read_bcr(ioaddr, 4) != 0xc0); in pcnet32_check_media()
2858 curr_link = (lp->a->read_bcr(ioaddr, 4) != 0xc0); in pcnet32_check_media()
2863 netif_info(lp, link, dev, "link down\n"); in pcnet32_check_media()
2865 if (lp->phycount > 1) { in pcnet32_check_media()
2870 if (lp->mii) { in pcnet32_check_media()
2871 if (netif_msg_link(lp)) { in pcnet32_check_media()
2874 mii_ethtool_gset(&lp->mii_if, &ecmd); in pcnet32_check_media()
2880 bcr9 = lp->a->read_bcr(dev->base_addr, 9); in pcnet32_check_media()
2881 if ((bcr9 & (1 << 0)) != lp->mii_if.full_duplex) { in pcnet32_check_media()
2882 if (lp->mii_if.full_duplex) in pcnet32_check_media()
2886 lp->a->write_bcr(dev->base_addr, 9, bcr9); in pcnet32_check_media()
2889 netif_info(lp, link, dev, "link up\n"); in pcnet32_check_media()
2901 struct pcnet32_private *lp = from_timer(lp, t, watchdog_timer); in pcnet32_watchdog() local
2902 struct net_device *dev = lp->dev; in pcnet32_watchdog()
2906 spin_lock_irqsave(&lp->lock, flags); in pcnet32_watchdog()
2908 spin_unlock_irqrestore(&lp->lock, flags); in pcnet32_watchdog()
2910 mod_timer(&lp->watchdog_timer, round_jiffies(PCNET32_WATCHDOG_TIMEOUT)); in pcnet32_watchdog()
2942 struct pcnet32_private *lp = netdev_priv(dev); in pcnet32_remove_one() local
2947 dma_free_coherent(&lp->pci_dev->dev, sizeof(*lp->init_block), in pcnet32_remove_one()
2948 lp->init_block, lp->init_dma_addr); in pcnet32_remove_one()
3025 struct pcnet32_private *lp = netdev_priv(pcnet32_dev); in pcnet32_cleanup_module() local
3026 next_dev = lp->next; in pcnet32_cleanup_module()
3030 dma_free_coherent(&lp->pci_dev->dev, sizeof(*lp->init_block), in pcnet32_cleanup_module()
3031 lp->init_block, lp->init_dma_addr); in pcnet32_cleanup_module()