.. | .. |
---|
18 | 18 | http://www.scyld.com/network/sundance.html |
---|
19 | 19 | [link no longer provides useful info -jgarzik] |
---|
20 | 20 | Archives of the mailing list are still available at |
---|
21 | | - http://www.beowulf.org/pipermail/netdrivers/ |
---|
| 21 | + https://www.beowulf.org/pipermail/netdrivers/ |
---|
22 | 22 | |
---|
23 | 23 | */ |
---|
24 | 24 | |
---|
25 | 25 | #define DRV_NAME "sundance" |
---|
26 | | -#define DRV_VERSION "1.2" |
---|
27 | | -#define DRV_RELDATE "11-Sep-2006" |
---|
28 | | - |
---|
29 | 26 | |
---|
30 | 27 | /* The user-configurable values. |
---|
31 | 28 | These may be modified when a driver module is loaded.*/ |
---|
.. | .. |
---|
100 | 97 | #include <linux/crc32.h> |
---|
101 | 98 | #include <linux/ethtool.h> |
---|
102 | 99 | #include <linux/mii.h> |
---|
103 | | - |
---|
104 | | -/* These identify the driver base version and may not be removed. */ |
---|
105 | | -static const char version[] = |
---|
106 | | - KERN_INFO DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE |
---|
107 | | - " Written by Donald Becker\n"; |
---|
108 | 100 | |
---|
109 | 101 | MODULE_AUTHOR("Donald Becker <becker@scyld.com>"); |
---|
110 | 102 | MODULE_DESCRIPTION("Sundance Alta Ethernet driver"); |
---|
.. | .. |
---|
375 | 367 | dma_addr_t tx_ring_dma; |
---|
376 | 368 | dma_addr_t rx_ring_dma; |
---|
377 | 369 | struct timer_list timer; /* Media monitoring timer. */ |
---|
| 370 | + struct net_device *ndev; /* backpointer */ |
---|
378 | 371 | /* ethtool extra stats */ |
---|
379 | 372 | struct { |
---|
380 | 373 | u64 tx_multiple_collisions; |
---|
.. | .. |
---|
432 | 425 | static int netdev_open(struct net_device *dev); |
---|
433 | 426 | static void check_duplex(struct net_device *dev); |
---|
434 | 427 | static void netdev_timer(struct timer_list *t); |
---|
435 | | -static void tx_timeout(struct net_device *dev); |
---|
| 428 | +static void tx_timeout(struct net_device *dev, unsigned int txqueue); |
---|
436 | 429 | static void init_ring(struct net_device *dev); |
---|
437 | 430 | static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev); |
---|
438 | 431 | static int reset_tx (struct net_device *dev); |
---|
439 | 432 | static irqreturn_t intr_handler(int irq, void *dev_instance); |
---|
440 | | -static void rx_poll(unsigned long data); |
---|
441 | | -static void tx_poll(unsigned long data); |
---|
| 433 | +static void rx_poll(struct tasklet_struct *t); |
---|
| 434 | +static void tx_poll(struct tasklet_struct *t); |
---|
442 | 435 | static void refill_rx (struct net_device *dev); |
---|
443 | 436 | static void netdev_error(struct net_device *dev, int intr_status); |
---|
444 | 437 | static void netdev_error(struct net_device *dev, int intr_status); |
---|
.. | .. |
---|
516 | 509 | #endif |
---|
517 | 510 | int phy, phy_end, phy_idx = 0; |
---|
518 | 511 | |
---|
519 | | -/* when built into the kernel, we only print version if device is found */ |
---|
520 | | -#ifndef MODULE |
---|
521 | | - static int printed_version; |
---|
522 | | - if (!printed_version++) |
---|
523 | | - printk(version); |
---|
524 | | -#endif |
---|
525 | | - |
---|
526 | 512 | if (pci_enable_device(pdev)) |
---|
527 | 513 | return -EIO; |
---|
528 | 514 | pci_set_master(pdev); |
---|
.. | .. |
---|
546 | 532 | cpu_to_le16(eeprom_read(ioaddr, i + EEPROM_SA_OFFSET)); |
---|
547 | 533 | |
---|
548 | 534 | np = netdev_priv(dev); |
---|
| 535 | + np->ndev = dev; |
---|
549 | 536 | np->base = ioaddr; |
---|
550 | 537 | np->pci_dev = pdev; |
---|
551 | 538 | np->chip_id = chip_idx; |
---|
552 | 539 | np->msg_enable = (1 << debug) - 1; |
---|
553 | 540 | spin_lock_init(&np->lock); |
---|
554 | 541 | spin_lock_init(&np->statlock); |
---|
555 | | - tasklet_init(&np->rx_tasklet, rx_poll, (unsigned long)dev); |
---|
556 | | - tasklet_init(&np->tx_tasklet, tx_poll, (unsigned long)dev); |
---|
| 542 | + tasklet_setup(&np->rx_tasklet, rx_poll); |
---|
| 543 | + tasklet_setup(&np->tx_tasklet, tx_poll); |
---|
557 | 544 | |
---|
558 | 545 | ring_space = dma_alloc_coherent(&pdev->dev, TX_TOTAL_SIZE, |
---|
559 | 546 | &ring_dma, GFP_KERNEL); |
---|
.. | .. |
---|
969 | 956 | add_timer(&np->timer); |
---|
970 | 957 | } |
---|
971 | 958 | |
---|
972 | | -static void tx_timeout(struct net_device *dev) |
---|
| 959 | +static void tx_timeout(struct net_device *dev, unsigned int txqueue) |
---|
973 | 960 | { |
---|
974 | 961 | struct netdev_private *np = netdev_priv(dev); |
---|
975 | 962 | void __iomem *ioaddr = np->base; |
---|
.. | .. |
---|
1069 | 1056 | } |
---|
1070 | 1057 | } |
---|
1071 | 1058 | |
---|
1072 | | -static void tx_poll (unsigned long data) |
---|
| 1059 | +static void tx_poll(struct tasklet_struct *t) |
---|
1073 | 1060 | { |
---|
1074 | | - struct net_device *dev = (struct net_device *)data; |
---|
1075 | | - struct netdev_private *np = netdev_priv(dev); |
---|
| 1061 | + struct netdev_private *np = from_tasklet(np, t, tx_tasklet); |
---|
1076 | 1062 | unsigned head = np->cur_task % TX_RING_SIZE; |
---|
1077 | 1063 | struct netdev_desc *txdesc = |
---|
1078 | 1064 | &np->tx_ring[(np->cur_tx - 1) % TX_RING_SIZE]; |
---|
.. | .. |
---|
1193 | 1179 | int handled = 0; |
---|
1194 | 1180 | int i; |
---|
1195 | 1181 | |
---|
1196 | | - |
---|
1197 | 1182 | do { |
---|
1198 | 1183 | int intr_status = ioread16(ioaddr + IntrStatus); |
---|
1199 | 1184 | iowrite16(intr_status, ioaddr + IntrStatus); |
---|
.. | .. |
---|
1286 | 1271 | dma_unmap_single(&np->pci_dev->dev, |
---|
1287 | 1272 | le32_to_cpu(np->tx_ring[entry].frag[0].addr), |
---|
1288 | 1273 | skb->len, DMA_TO_DEVICE); |
---|
1289 | | - dev_kfree_skb_irq (np->tx_skbuff[entry]); |
---|
| 1274 | + dev_consume_skb_irq(np->tx_skbuff[entry]); |
---|
1290 | 1275 | np->tx_skbuff[entry] = NULL; |
---|
1291 | 1276 | np->tx_ring[entry].frag[0].addr = 0; |
---|
1292 | 1277 | np->tx_ring[entry].frag[0].length = 0; |
---|
.. | .. |
---|
1305 | 1290 | dma_unmap_single(&np->pci_dev->dev, |
---|
1306 | 1291 | le32_to_cpu(np->tx_ring[entry].frag[0].addr), |
---|
1307 | 1292 | skb->len, DMA_TO_DEVICE); |
---|
1308 | | - dev_kfree_skb_irq (np->tx_skbuff[entry]); |
---|
| 1293 | + dev_consume_skb_irq(np->tx_skbuff[entry]); |
---|
1309 | 1294 | np->tx_skbuff[entry] = NULL; |
---|
1310 | 1295 | np->tx_ring[entry].frag[0].addr = 0; |
---|
1311 | 1296 | np->tx_ring[entry].frag[0].length = 0; |
---|
.. | .. |
---|
1328 | 1313 | return IRQ_RETVAL(handled); |
---|
1329 | 1314 | } |
---|
1330 | 1315 | |
---|
1331 | | -static void rx_poll(unsigned long data) |
---|
| 1316 | +static void rx_poll(struct tasklet_struct *t) |
---|
1332 | 1317 | { |
---|
1333 | | - struct net_device *dev = (struct net_device *)data; |
---|
1334 | | - struct netdev_private *np = netdev_priv(dev); |
---|
| 1318 | + struct netdev_private *np = from_tasklet(np, t, rx_tasklet); |
---|
| 1319 | + struct net_device *dev = np->ndev; |
---|
1335 | 1320 | int entry = np->cur_rx % RX_RING_SIZE; |
---|
1336 | 1321 | int boguscnt = np->budget; |
---|
1337 | 1322 | void __iomem *ioaddr = np->base; |
---|
.. | .. |
---|
1658 | 1643 | { |
---|
1659 | 1644 | struct netdev_private *np = netdev_priv(dev); |
---|
1660 | 1645 | strlcpy(info->driver, DRV_NAME, sizeof(info->driver)); |
---|
1661 | | - strlcpy(info->version, DRV_VERSION, sizeof(info->version)); |
---|
1662 | 1646 | strlcpy(info->bus_info, pci_name(np->pci_dev), sizeof(info->bus_info)); |
---|
1663 | 1647 | } |
---|
1664 | 1648 | |
---|
.. | .. |
---|
1945 | 1929 | } |
---|
1946 | 1930 | } |
---|
1947 | 1931 | |
---|
1948 | | -#ifdef CONFIG_PM |
---|
1949 | | - |
---|
1950 | | -static int sundance_suspend(struct pci_dev *pci_dev, pm_message_t state) |
---|
| 1932 | +static int __maybe_unused sundance_suspend(struct device *dev_d) |
---|
1951 | 1933 | { |
---|
1952 | | - struct net_device *dev = pci_get_drvdata(pci_dev); |
---|
| 1934 | + struct net_device *dev = dev_get_drvdata(dev_d); |
---|
1953 | 1935 | struct netdev_private *np = netdev_priv(dev); |
---|
1954 | 1936 | void __iomem *ioaddr = np->base; |
---|
1955 | 1937 | |
---|
.. | .. |
---|
1959 | 1941 | netdev_close(dev); |
---|
1960 | 1942 | netif_device_detach(dev); |
---|
1961 | 1943 | |
---|
1962 | | - pci_save_state(pci_dev); |
---|
1963 | 1944 | if (np->wol_enabled) { |
---|
1964 | 1945 | iowrite8(AcceptBroadcast | AcceptMyPhys, ioaddr + RxMode); |
---|
1965 | 1946 | iowrite16(RxEnable, ioaddr + MACCtrl1); |
---|
1966 | 1947 | } |
---|
1967 | | - pci_enable_wake(pci_dev, pci_choose_state(pci_dev, state), |
---|
1968 | | - np->wol_enabled); |
---|
1969 | | - pci_set_power_state(pci_dev, pci_choose_state(pci_dev, state)); |
---|
| 1948 | + |
---|
| 1949 | + device_set_wakeup_enable(dev_d, np->wol_enabled); |
---|
1970 | 1950 | |
---|
1971 | 1951 | return 0; |
---|
1972 | 1952 | } |
---|
1973 | 1953 | |
---|
1974 | | -static int sundance_resume(struct pci_dev *pci_dev) |
---|
| 1954 | +static int __maybe_unused sundance_resume(struct device *dev_d) |
---|
1975 | 1955 | { |
---|
1976 | | - struct net_device *dev = pci_get_drvdata(pci_dev); |
---|
| 1956 | + struct net_device *dev = dev_get_drvdata(dev_d); |
---|
1977 | 1957 | int err = 0; |
---|
1978 | 1958 | |
---|
1979 | 1959 | if (!netif_running(dev)) |
---|
1980 | 1960 | return 0; |
---|
1981 | | - |
---|
1982 | | - pci_set_power_state(pci_dev, PCI_D0); |
---|
1983 | | - pci_restore_state(pci_dev); |
---|
1984 | | - pci_enable_wake(pci_dev, PCI_D0, 0); |
---|
1985 | 1961 | |
---|
1986 | 1962 | err = netdev_open(dev); |
---|
1987 | 1963 | if (err) { |
---|
.. | .. |
---|
1996 | 1972 | return err; |
---|
1997 | 1973 | } |
---|
1998 | 1974 | |
---|
1999 | | -#endif /* CONFIG_PM */ |
---|
| 1975 | +static SIMPLE_DEV_PM_OPS(sundance_pm_ops, sundance_suspend, sundance_resume); |
---|
2000 | 1976 | |
---|
2001 | 1977 | static struct pci_driver sundance_driver = { |
---|
2002 | 1978 | .name = DRV_NAME, |
---|
2003 | 1979 | .id_table = sundance_pci_tbl, |
---|
2004 | 1980 | .probe = sundance_probe1, |
---|
2005 | 1981 | .remove = sundance_remove1, |
---|
2006 | | -#ifdef CONFIG_PM |
---|
2007 | | - .suspend = sundance_suspend, |
---|
2008 | | - .resume = sundance_resume, |
---|
2009 | | -#endif /* CONFIG_PM */ |
---|
| 1982 | + .driver.pm = &sundance_pm_ops, |
---|
2010 | 1983 | }; |
---|
2011 | 1984 | |
---|
2012 | 1985 | static int __init sundance_init(void) |
---|
2013 | 1986 | { |
---|
2014 | | -/* when a module, this is printed whether or not devices are found in probe */ |
---|
2015 | | -#ifdef MODULE |
---|
2016 | | - printk(version); |
---|
2017 | | -#endif |
---|
2018 | 1987 | return pci_register_driver(&sundance_driver); |
---|
2019 | 1988 | } |
---|
2020 | 1989 | |
---|