Lines Matching refs:np

332 static void free_rxtx_rings(struct netdev_private *np);
336 static void free_ringdesc(struct netdev_private *np);
364 struct netdev_private *np; in w840_probe1() local
383 dev = alloc_etherdev(sizeof(*np)); in w840_probe1()
402 np = netdev_priv(dev); in w840_probe1()
403 np->pci_dev = pdev; in w840_probe1()
404 np->chip_id = chip_idx; in w840_probe1()
405 np->drv_flags = pci_id_tbl[chip_idx].drv_flags; in w840_probe1()
406 spin_lock_init(&np->lock); in w840_probe1()
407 np->mii_if.dev = dev; in w840_probe1()
408 np->mii_if.mdio_read = mdio_read; in w840_probe1()
409 np->mii_if.mdio_write = mdio_write; in w840_probe1()
410 np->base_addr = ioaddr; in w840_probe1()
420 np->mii_if.full_duplex = 1; in w840_probe1()
427 np->mii_if.full_duplex = 1; in w840_probe1()
429 if (np->mii_if.full_duplex) in w840_probe1()
430 np->mii_if.force_media = 1; in w840_probe1()
444 if (np->drv_flags & CanHaveMII) { in w840_probe1()
449 np->phys[phy_idx++] = phy; in w840_probe1()
450 np->mii_if.advertising = mdio_read(dev, phy, MII_ADVERTISE); in w840_probe1()
451 np->mii = (mdio_read(dev, phy, MII_PHYSID1) << 16)+ in w840_probe1()
455 np->mii, phy, mii_status, in w840_probe1()
456 np->mii_if.advertising); in w840_probe1()
459 np->mii_cnt = phy_idx; in w840_probe1()
460 np->mii_if.phy_id = np->phys[0]; in w840_probe1()
569 struct netdev_private *np = netdev_priv(dev); in mdio_read() local
570 void __iomem *mdio_addr = np->base_addr + MIICtrl; in mdio_read()
599 struct netdev_private *np = netdev_priv(dev); in mdio_write() local
600 void __iomem *mdio_addr = np->base_addr + MIICtrl; in mdio_write()
604 if (location == 4 && phy_id == np->phys[0]) in mdio_write()
605 np->mii_if.advertising = value; in mdio_write()
631 struct netdev_private *np = netdev_priv(dev); in netdev_open() local
632 void __iomem *ioaddr = np->base_addr; in netdev_open()
633 const int irq = np->pci_dev->irq; in netdev_open()
649 spin_lock_irq(&np->lock); in netdev_open()
652 spin_unlock_irq(&np->lock); in netdev_open()
659 init_timer(&np->timer); in netdev_open()
660 np->timer.expires = jiffies + 1*HZ; in netdev_open()
661 np->timer.data = (unsigned long)dev; in netdev_open()
662 np->timer.function = netdev_timer; /* timer handler */ in netdev_open()
663 add_timer(&np->timer); in netdev_open()
674 struct netdev_private *np = netdev_priv(dev); in update_link() local
678 mii_reg = mdio_read(dev, np->phys[0], MII_BMSR); in update_link()
681 return np->csr6; in update_link()
683 mii_reg = mdio_read(dev, np->phys[0], MII_BMSR); in update_link()
689 np->phys[0]); in update_link()
692 return np->csr6; in update_link()
698 np->phys[0]); in update_link()
702 if ((np->mii & ~0xf) == MII_DAVICOM_DM9101) { in update_link()
711 mii_reg = mdio_read(dev, np->phys[0], MII_BMCR); in update_link()
716 mii_reg = mdio_read(dev, np->phys[0], MII_LPA); in update_link()
717 negotiated = mii_reg & np->mii_if.advertising; in update_link()
722 duplex |= np->mii_if.force_media; in update_link()
724 result = np->csr6 & ~0x20000200; in update_link()
729 if (result != np->csr6 && debug) in update_link()
733 np->phys[0]); in update_link()
740 struct netdev_private *np = netdev_priv(dev); in update_csr6() local
741 void __iomem *ioaddr = np->base_addr; in update_csr6()
746 if (new==np->csr6) in update_csr6()
749 iowrite32(np->csr6 & ~0x2002, ioaddr + NetworkConfig); in update_csr6()
771 np->csr6 = new; in update_csr6()
773 iowrite32(np->csr6, ioaddr + NetworkConfig); in update_csr6()
775 np->mii_if.full_duplex = 1; in update_csr6()
781 struct netdev_private *np = netdev_priv(dev); in netdev_timer() local
782 void __iomem *ioaddr = np->base_addr; in netdev_timer()
788 spin_lock_irq(&np->lock); in netdev_timer()
790 spin_unlock_irq(&np->lock); in netdev_timer()
791 np->timer.expires = jiffies + 10*HZ; in netdev_timer()
792 add_timer(&np->timer); in netdev_timer()
797 struct netdev_private *np = netdev_priv(dev); in init_rxtx_rings() local
800 np->rx_head_desc = &np->rx_ring[0]; in init_rxtx_rings()
801 np->tx_ring = (struct w840_tx_desc*)&np->rx_ring[RX_RING_SIZE]; in init_rxtx_rings()
805 np->rx_ring[i].length = np->rx_buf_sz; in init_rxtx_rings()
806 np->rx_ring[i].status = 0; in init_rxtx_rings()
807 np->rx_skbuff[i] = NULL; in init_rxtx_rings()
810 np->rx_ring[i-1].length |= DescEndRing; in init_rxtx_rings()
814 struct sk_buff *skb = netdev_alloc_skb(dev, np->rx_buf_sz); in init_rxtx_rings()
815 np->rx_skbuff[i] = skb; in init_rxtx_rings()
818 np->rx_addr[i] = pci_map_single(np->pci_dev,skb->data, in init_rxtx_rings()
819 np->rx_buf_sz,PCI_DMA_FROMDEVICE); in init_rxtx_rings()
821 np->rx_ring[i].buffer1 = np->rx_addr[i]; in init_rxtx_rings()
822 np->rx_ring[i].status = DescOwned; in init_rxtx_rings()
825 np->cur_rx = 0; in init_rxtx_rings()
826 np->dirty_rx = (unsigned int)(i - RX_RING_SIZE); in init_rxtx_rings()
830 np->tx_skbuff[i] = NULL; in init_rxtx_rings()
831 np->tx_ring[i].status = 0; in init_rxtx_rings()
833 np->tx_full = 0; in init_rxtx_rings()
834 np->tx_q_bytes = np->dirty_tx = np->cur_tx = 0; in init_rxtx_rings()
836 iowrite32(np->ring_dma_addr, np->base_addr + RxRingPtr); in init_rxtx_rings()
837 iowrite32(np->ring_dma_addr+sizeof(struct w840_rx_desc)*RX_RING_SIZE, in init_rxtx_rings()
838 np->base_addr + TxRingPtr); in init_rxtx_rings()
842 static void free_rxtx_rings(struct netdev_private* np) in free_rxtx_rings() argument
847 np->rx_ring[i].status = 0; in free_rxtx_rings()
848 if (np->rx_skbuff[i]) { in free_rxtx_rings()
849 pci_unmap_single(np->pci_dev, in free_rxtx_rings()
850 np->rx_addr[i], in free_rxtx_rings()
851 np->rx_skbuff[i]->len, in free_rxtx_rings()
853 dev_kfree_skb(np->rx_skbuff[i]); in free_rxtx_rings()
855 np->rx_skbuff[i] = NULL; in free_rxtx_rings()
858 if (np->tx_skbuff[i]) { in free_rxtx_rings()
859 pci_unmap_single(np->pci_dev, in free_rxtx_rings()
860 np->tx_addr[i], in free_rxtx_rings()
861 np->tx_skbuff[i]->len, in free_rxtx_rings()
863 dev_kfree_skb(np->tx_skbuff[i]); in free_rxtx_rings()
865 np->tx_skbuff[i] = NULL; in free_rxtx_rings()
871 struct netdev_private *np = netdev_priv(dev); in init_registers() local
872 void __iomem *ioaddr = np->base_addr; in init_registers()
915 np->csr6 = 0; in init_registers()
929 struct netdev_private *np = netdev_priv(dev); in tx_timeout() local
930 void __iomem *ioaddr = np->base_addr; in tx_timeout()
931 const int irq = np->pci_dev->irq; in tx_timeout()
938 printk(KERN_DEBUG " Rx ring %p: ", np->rx_ring); in tx_timeout()
940 printk(KERN_CONT " %08x", (unsigned int)np->rx_ring[i].status); in tx_timeout()
942 printk(KERN_DEBUG " Tx ring %p: ", np->tx_ring); in tx_timeout()
944 printk(KERN_CONT " %08x", np->tx_ring[i].status); in tx_timeout()
948 np->cur_tx, np->dirty_tx, np->tx_full, np->tx_q_bytes); in tx_timeout()
952 spin_lock_irq(&np->lock); in tx_timeout()
959 iowrite32(1, np->base_addr+PCIBusCfg); in tx_timeout()
962 free_rxtx_rings(np); in tx_timeout()
965 spin_unlock_irq(&np->lock); in tx_timeout()
970 np->stats.tx_errors++; in tx_timeout()
976 struct netdev_private *np = netdev_priv(dev); in alloc_ringdesc() local
978 np->rx_buf_sz = (dev->mtu <= 1500 ? PKT_BUF_SZ : dev->mtu + 32); in alloc_ringdesc()
980 np->rx_ring = pci_alloc_consistent(np->pci_dev, in alloc_ringdesc()
983 &np->ring_dma_addr); in alloc_ringdesc()
984 if(!np->rx_ring) in alloc_ringdesc()
990 static void free_ringdesc(struct netdev_private *np) in free_ringdesc() argument
992 pci_free_consistent(np->pci_dev, in free_ringdesc()
995 np->rx_ring, np->ring_dma_addr); in free_ringdesc()
1001 struct netdev_private *np = netdev_priv(dev); in start_tx() local
1008 entry = np->cur_tx % TX_RING_SIZE; in start_tx()
1010 np->tx_addr[entry] = pci_map_single(np->pci_dev, in start_tx()
1012 np->tx_skbuff[entry] = skb; in start_tx()
1014 np->tx_ring[entry].buffer1 = np->tx_addr[entry]; in start_tx()
1016 np->tx_ring[entry].length = DescWholePkt | skb->len; in start_tx()
1020 np->tx_ring[entry].buffer2 = np->tx_addr[entry]+TX_BUFLIMIT; in start_tx()
1021 np->tx_ring[entry].length = DescWholePkt | (len << 11) | TX_BUFLIMIT; in start_tx()
1024 np->tx_ring[entry].length |= DescEndRing; in start_tx()
1036 spin_lock_irq(&np->lock); in start_tx()
1037 np->cur_tx++; in start_tx()
1040 np->tx_ring[entry].status = DescOwned; in start_tx()
1042 iowrite32(0, np->base_addr + TxStartDemand); in start_tx()
1043 np->tx_q_bytes += skb->len; in start_tx()
1046 if (np->cur_tx - np->dirty_tx > TX_QUEUE_LEN || in start_tx()
1047 ((np->drv_flags & HasBrokenTx) && np->tx_q_bytes > TX_BUG_FIFO_LIMIT)) { in start_tx()
1050 np->tx_full = 1; in start_tx()
1052 spin_unlock_irq(&np->lock); in start_tx()
1056 np->cur_tx, entry); in start_tx()
1063 struct netdev_private *np = netdev_priv(dev); in netdev_tx_done() local
1064 for (; np->cur_tx - np->dirty_tx > 0; np->dirty_tx++) { in netdev_tx_done()
1065 int entry = np->dirty_tx % TX_RING_SIZE; in netdev_tx_done()
1066 int tx_status = np->tx_ring[entry].status; in netdev_tx_done()
1076 np->stats.tx_errors++; in netdev_tx_done()
1077 if (tx_status & 0x0104) np->stats.tx_aborted_errors++; in netdev_tx_done()
1078 if (tx_status & 0x0C80) np->stats.tx_carrier_errors++; in netdev_tx_done()
1079 if (tx_status & 0x0200) np->stats.tx_window_errors++; in netdev_tx_done()
1080 if (tx_status & 0x0002) np->stats.tx_fifo_errors++; in netdev_tx_done()
1081 if ((tx_status & 0x0080) && np->mii_if.full_duplex == 0) in netdev_tx_done()
1082 np->stats.tx_heartbeat_errors++; in netdev_tx_done()
1089 np->stats.tx_bytes += np->tx_skbuff[entry]->len; in netdev_tx_done()
1090 np->stats.collisions += (tx_status >> 3) & 15; in netdev_tx_done()
1091 np->stats.tx_packets++; in netdev_tx_done()
1094 pci_unmap_single(np->pci_dev,np->tx_addr[entry], in netdev_tx_done()
1095 np->tx_skbuff[entry]->len, in netdev_tx_done()
1097 np->tx_q_bytes -= np->tx_skbuff[entry]->len; in netdev_tx_done()
1098 dev_kfree_skb_irq(np->tx_skbuff[entry]); in netdev_tx_done()
1099 np->tx_skbuff[entry] = NULL; in netdev_tx_done()
1101 if (np->tx_full && in netdev_tx_done()
1102 np->cur_tx - np->dirty_tx < TX_QUEUE_LEN_RESTART && in netdev_tx_done()
1103 np->tx_q_bytes < TX_BUG_FIFO_LIMIT) { in netdev_tx_done()
1105 np->tx_full = 0; in netdev_tx_done()
1116 struct netdev_private *np = netdev_priv(dev); in intr_handler() local
1117 void __iomem *ioaddr = np->base_addr; in intr_handler()
1143 np->cur_tx != np->dirty_tx) { in intr_handler()
1144 spin_lock(&np->lock); in intr_handler()
1146 spin_unlock(&np->lock); in intr_handler()
1160 spin_lock(&np->lock); in intr_handler()
1165 spin_unlock(&np->lock); in intr_handler()
1180 struct netdev_private *np = netdev_priv(dev); in netdev_rx() local
1181 int entry = np->cur_rx % RX_RING_SIZE; in netdev_rx()
1182 int work_limit = np->dirty_rx + RX_RING_SIZE - np->cur_rx; in netdev_rx()
1186 entry, np->rx_ring[entry].status); in netdev_rx()
1191 struct w840_rx_desc *desc = np->rx_head_desc; in netdev_rx()
1205 np->cur_rx, status); in netdev_rx()
1206 np->stats.rx_length_errors++; in netdev_rx()
1213 np->stats.rx_errors++; /* end of a packet.*/ in netdev_rx()
1214 if (status & 0x0890) np->stats.rx_length_errors++; in netdev_rx()
1215 if (status & 0x004C) np->stats.rx_frame_errors++; in netdev_rx()
1216 if (status & 0x0002) np->stats.rx_crc_errors++; in netdev_rx()
1233 pci_dma_sync_single_for_cpu(np->pci_dev,np->rx_addr[entry], in netdev_rx()
1234 np->rx_skbuff[entry]->len, in netdev_rx()
1236 skb_copy_to_linear_data(skb, np->rx_skbuff[entry]->data, pkt_len); in netdev_rx()
1238 pci_dma_sync_single_for_device(np->pci_dev,np->rx_addr[entry], in netdev_rx()
1239 np->rx_skbuff[entry]->len, in netdev_rx()
1242 pci_unmap_single(np->pci_dev,np->rx_addr[entry], in netdev_rx()
1243 np->rx_skbuff[entry]->len, in netdev_rx()
1245 skb_put(skb = np->rx_skbuff[entry], pkt_len); in netdev_rx()
1246 np->rx_skbuff[entry] = NULL; in netdev_rx()
1258 np->stats.rx_packets++; in netdev_rx()
1259 np->stats.rx_bytes += pkt_len; in netdev_rx()
1261 entry = (++np->cur_rx) % RX_RING_SIZE; in netdev_rx()
1262 np->rx_head_desc = &np->rx_ring[entry]; in netdev_rx()
1266 for (; np->cur_rx - np->dirty_rx > 0; np->dirty_rx++) { in netdev_rx()
1268 entry = np->dirty_rx % RX_RING_SIZE; in netdev_rx()
1269 if (np->rx_skbuff[entry] == NULL) { in netdev_rx()
1270 skb = netdev_alloc_skb(dev, np->rx_buf_sz); in netdev_rx()
1271 np->rx_skbuff[entry] = skb; in netdev_rx()
1274 np->rx_addr[entry] = pci_map_single(np->pci_dev, in netdev_rx()
1276 np->rx_buf_sz, PCI_DMA_FROMDEVICE); in netdev_rx()
1277 np->rx_ring[entry].buffer1 = np->rx_addr[entry]; in netdev_rx()
1280 np->rx_ring[entry].status = DescOwned; in netdev_rx()
1288 struct netdev_private *np = netdev_priv(dev); in netdev_error() local
1289 void __iomem *ioaddr = np->base_addr; in netdev_error()
1295 spin_lock(&np->lock); in netdev_error()
1303 new = np->csr6 + 0x4000; in netdev_error()
1305 new = (np->csr6 >> 14)&0x7f; in netdev_error()
1310 new = (np->csr6 & ~(0x7F << 14)) | (new<<14); in netdev_error()
1316 np->stats.rx_errors++; in netdev_error()
1323 np->stats.rx_missed_errors += ioread32(ioaddr + RxMissed) & 0xffff; in netdev_error()
1325 spin_unlock(&np->lock); in netdev_error()
1330 struct netdev_private *np = netdev_priv(dev); in get_stats() local
1331 void __iomem *ioaddr = np->base_addr; in get_stats()
1334 spin_lock_irq(&np->lock); in get_stats()
1336 np->stats.rx_missed_errors += ioread32(ioaddr + RxMissed) & 0xffff; in get_stats()
1337 spin_unlock_irq(&np->lock); in get_stats()
1339 return &np->stats; in get_stats()
1345 struct netdev_private *np = netdev_priv(dev); in __set_rx_mode() local
1346 void __iomem *ioaddr = np->base_addr; in __set_rx_mode()
1379 struct netdev_private *np = netdev_priv(dev); in set_rx_mode() local
1381 spin_lock_irq(&np->lock); in set_rx_mode()
1382 update_csr6(dev, (np->csr6 & ~0x00F8) | rx_mode); in set_rx_mode()
1383 spin_unlock_irq(&np->lock); in set_rx_mode()
1388 struct netdev_private *np = netdev_priv(dev); in netdev_get_drvinfo() local
1392 strlcpy(info->bus_info, pci_name(np->pci_dev), sizeof(info->bus_info)); in netdev_get_drvinfo()
1397 struct netdev_private *np = netdev_priv(dev); in netdev_get_settings() local
1400 spin_lock_irq(&np->lock); in netdev_get_settings()
1401 rc = mii_ethtool_gset(&np->mii_if, cmd); in netdev_get_settings()
1402 spin_unlock_irq(&np->lock); in netdev_get_settings()
1409 struct netdev_private *np = netdev_priv(dev); in netdev_set_settings() local
1412 spin_lock_irq(&np->lock); in netdev_set_settings()
1413 rc = mii_ethtool_sset(&np->mii_if, cmd); in netdev_set_settings()
1414 spin_unlock_irq(&np->lock); in netdev_set_settings()
1421 struct netdev_private *np = netdev_priv(dev); in netdev_nway_reset() local
1422 return mii_nway_restart(&np->mii_if); in netdev_nway_reset()
1427 struct netdev_private *np = netdev_priv(dev); in netdev_get_link() local
1428 return mii_link_ok(&np->mii_if); in netdev_get_link()
1454 struct netdev_private *np = netdev_priv(dev); in netdev_ioctl() local
1462 spin_lock_irq(&np->lock); in netdev_ioctl()
1464 spin_unlock_irq(&np->lock); in netdev_ioctl()
1468 spin_lock_irq(&np->lock); in netdev_ioctl()
1470 spin_unlock_irq(&np->lock); in netdev_ioctl()
1479 struct netdev_private *np = netdev_priv(dev); in netdev_close() local
1480 void __iomem *ioaddr = np->base_addr; in netdev_close()
1489 np->cur_tx, np->dirty_tx, in netdev_close()
1490 np->cur_rx, np->dirty_rx); in netdev_close()
1494 spin_lock_irq(&np->lock); in netdev_close()
1498 spin_unlock_irq(&np->lock); in netdev_close()
1500 free_irq(np->pci_dev->irq, dev); in netdev_close()
1505 np->stats.rx_missed_errors += ioread32(ioaddr + RxMissed) & 0xffff; in netdev_close()
1511 printk(KERN_DEBUG" Tx ring at %p:\n", np->tx_ring); in netdev_close()
1514 i, np->tx_ring[i].length, in netdev_close()
1515 np->tx_ring[i].status, np->tx_ring[i].buffer1); in netdev_close()
1516 printk(KERN_DEBUG " Rx ring %p:\n", np->rx_ring); in netdev_close()
1519 i, np->rx_ring[i].length, in netdev_close()
1520 np->rx_ring[i].status, np->rx_ring[i].buffer1); in netdev_close()
1525 del_timer_sync(&np->timer); in netdev_close()
1527 free_rxtx_rings(np); in netdev_close()
1528 free_ringdesc(np); in netdev_close()
1538 struct netdev_private *np = netdev_priv(dev); in w840_remove1() local
1541 pci_iounmap(pdev, np->base_addr); in w840_remove1()
1574 struct netdev_private *np = netdev_priv(dev); in w840_suspend() local
1575 void __iomem *ioaddr = np->base_addr; in w840_suspend()
1579 del_timer_sync(&np->timer); in w840_suspend()
1581 spin_lock_irq(&np->lock); in w840_suspend()
1585 spin_unlock_irq(&np->lock); in w840_suspend()
1587 synchronize_irq(np->pci_dev->irq); in w840_suspend()
1590 np->stats.rx_missed_errors += ioread32(ioaddr + RxMissed) & 0xffff; in w840_suspend()
1594 BUG_ON(np->csr6 || ioread32(ioaddr + IntrEnable)); in w840_suspend()
1598 free_rxtx_rings(np); in w840_suspend()
1609 struct netdev_private *np = netdev_priv(dev); in w840_resume() local
1621 spin_lock_irq(&np->lock); in w840_resume()
1622 iowrite32(1, np->base_addr+PCIBusCfg); in w840_resume()
1623 ioread32(np->base_addr+PCIBusCfg); in w840_resume()
1628 spin_unlock_irq(&np->lock); in w840_resume()
1632 mod_timer(&np->timer, jiffies + 1*HZ); in w840_resume()