.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
---|
1 | 2 | /* D-Link DL2000-based Gigabit Ethernet Adapter Linux driver */ |
---|
2 | 3 | /* |
---|
3 | 4 | Copyright (c) 2001, 2002 by D-Link Corporation |
---|
4 | 5 | Written by Edward Peng.<edward_peng@dlink.com.tw> |
---|
5 | 6 | Created 03-May-2001, base on Linux' sundance.c. |
---|
6 | 7 | |
---|
7 | | - This program is free software; you can redistribute it and/or modify |
---|
8 | | - it under the terms of the GNU General Public License as published by |
---|
9 | | - the Free Software Foundation; either version 2 of the License, or |
---|
10 | | - (at your option) any later version. |
---|
11 | 8 | */ |
---|
12 | 9 | |
---|
13 | | -#define DRV_NAME "DL2000/TC902x-based linux driver" |
---|
14 | | -#define DRV_VERSION "v1.19" |
---|
15 | | -#define DRV_RELDATE "2007/08/12" |
---|
16 | 10 | #include "dl2k.h" |
---|
17 | 11 | #include <linux/dma-mapping.h> |
---|
18 | 12 | |
---|
.. | .. |
---|
23 | 17 | #define dr16(reg) ioread16(ioaddr + (reg)) |
---|
24 | 18 | #define dr8(reg) ioread8(ioaddr + (reg)) |
---|
25 | 19 | |
---|
26 | | -static char version[] = |
---|
27 | | - KERN_INFO DRV_NAME " " DRV_VERSION " " DRV_RELDATE "\n"; |
---|
28 | 20 | #define MAX_UNITS 8 |
---|
29 | 21 | static int mtu[MAX_UNITS]; |
---|
30 | 22 | static int vlan[MAX_UNITS]; |
---|
.. | .. |
---|
69 | 61 | |
---|
70 | 62 | static int rio_open (struct net_device *dev); |
---|
71 | 63 | static void rio_timer (struct timer_list *t); |
---|
72 | | -static void rio_tx_timeout (struct net_device *dev); |
---|
| 64 | +static void rio_tx_timeout (struct net_device *dev, unsigned int txqueue); |
---|
73 | 65 | static netdev_tx_t start_xmit (struct sk_buff *skb, struct net_device *dev); |
---|
74 | 66 | static irqreturn_t rio_interrupt (int irq, void *dev_instance); |
---|
75 | 67 | static void rio_free_tx (struct net_device *dev, int irq); |
---|
.. | .. |
---|
116 | 108 | int chip_idx = ent->driver_data; |
---|
117 | 109 | int err, irq; |
---|
118 | 110 | void __iomem *ioaddr; |
---|
119 | | - static int version_printed; |
---|
120 | 111 | void *ring_space; |
---|
121 | 112 | dma_addr_t ring_dma; |
---|
122 | | - |
---|
123 | | - if (!version_printed++) |
---|
124 | | - printk ("%s", version); |
---|
125 | 113 | |
---|
126 | 114 | err = pci_enable_device (pdev); |
---|
127 | 115 | if (err) |
---|
.. | .. |
---|
234 | 222 | |
---|
235 | 223 | pci_set_drvdata (pdev, dev); |
---|
236 | 224 | |
---|
237 | | - ring_space = pci_alloc_consistent (pdev, TX_TOTAL_SIZE, &ring_dma); |
---|
| 225 | + ring_space = dma_alloc_coherent(&pdev->dev, TX_TOTAL_SIZE, &ring_dma, |
---|
| 226 | + GFP_KERNEL); |
---|
238 | 227 | if (!ring_space) |
---|
239 | 228 | goto err_out_iounmap; |
---|
240 | 229 | np->tx_ring = ring_space; |
---|
241 | 230 | np->tx_ring_dma = ring_dma; |
---|
242 | 231 | |
---|
243 | | - ring_space = pci_alloc_consistent (pdev, RX_TOTAL_SIZE, &ring_dma); |
---|
| 232 | + ring_space = dma_alloc_coherent(&pdev->dev, RX_TOTAL_SIZE, &ring_dma, |
---|
| 233 | + GFP_KERNEL); |
---|
244 | 234 | if (!ring_space) |
---|
245 | 235 | goto err_out_unmap_tx; |
---|
246 | 236 | np->rx_ring = ring_space; |
---|
.. | .. |
---|
291 | 281 | return 0; |
---|
292 | 282 | |
---|
293 | 283 | err_out_unmap_rx: |
---|
294 | | - pci_free_consistent (pdev, RX_TOTAL_SIZE, np->rx_ring, np->rx_ring_dma); |
---|
| 284 | + dma_free_coherent(&pdev->dev, RX_TOTAL_SIZE, np->rx_ring, |
---|
| 285 | + np->rx_ring_dma); |
---|
295 | 286 | err_out_unmap_tx: |
---|
296 | | - pci_free_consistent (pdev, TX_TOTAL_SIZE, np->tx_ring, np->tx_ring_dma); |
---|
| 287 | + dma_free_coherent(&pdev->dev, TX_TOTAL_SIZE, np->tx_ring, |
---|
| 288 | + np->tx_ring_dma); |
---|
297 | 289 | err_out_iounmap: |
---|
298 | 290 | #ifdef MEM_MAPPING |
---|
299 | 291 | pci_iounmap(pdev, np->ioaddr); |
---|
.. | .. |
---|
447 | 439 | for (i = 0; i < RX_RING_SIZE; i++) { |
---|
448 | 440 | skb = np->rx_skbuff[i]; |
---|
449 | 441 | if (skb) { |
---|
450 | | - pci_unmap_single(np->pdev, desc_to_dma(&np->rx_ring[i]), |
---|
451 | | - skb->len, PCI_DMA_FROMDEVICE); |
---|
| 442 | + dma_unmap_single(&np->pdev->dev, |
---|
| 443 | + desc_to_dma(&np->rx_ring[i]), |
---|
| 444 | + skb->len, DMA_FROM_DEVICE); |
---|
452 | 445 | dev_kfree_skb(skb); |
---|
453 | 446 | np->rx_skbuff[i] = NULL; |
---|
454 | 447 | } |
---|
.. | .. |
---|
458 | 451 | for (i = 0; i < TX_RING_SIZE; i++) { |
---|
459 | 452 | skb = np->tx_skbuff[i]; |
---|
460 | 453 | if (skb) { |
---|
461 | | - pci_unmap_single(np->pdev, desc_to_dma(&np->tx_ring[i]), |
---|
462 | | - skb->len, PCI_DMA_TODEVICE); |
---|
| 454 | + dma_unmap_single(&np->pdev->dev, |
---|
| 455 | + desc_to_dma(&np->tx_ring[i]), |
---|
| 456 | + skb->len, DMA_TO_DEVICE); |
---|
463 | 457 | dev_kfree_skb(skb); |
---|
464 | 458 | np->tx_skbuff[i] = NULL; |
---|
465 | 459 | } |
---|
.. | .. |
---|
516 | 510 | sizeof(struct netdev_desc)); |
---|
517 | 511 | /* Rubicon now supports 40 bits of addressing space. */ |
---|
518 | 512 | np->rx_ring[i].fraginfo = |
---|
519 | | - cpu_to_le64(pci_map_single( |
---|
520 | | - np->pdev, skb->data, np->rx_buf_sz, |
---|
521 | | - PCI_DMA_FROMDEVICE)); |
---|
| 513 | + cpu_to_le64(dma_map_single(&np->pdev->dev, skb->data, |
---|
| 514 | + np->rx_buf_sz, DMA_FROM_DEVICE)); |
---|
522 | 515 | np->rx_ring[i].fraginfo |= cpu_to_le64((u64)np->rx_buf_sz << 48); |
---|
523 | 516 | } |
---|
524 | 517 | |
---|
.. | .. |
---|
684 | 677 | } |
---|
685 | 678 | np->rx_skbuff[entry] = skb; |
---|
686 | 679 | np->rx_ring[entry].fraginfo = |
---|
687 | | - cpu_to_le64 (pci_map_single |
---|
688 | | - (np->pdev, skb->data, np->rx_buf_sz, |
---|
689 | | - PCI_DMA_FROMDEVICE)); |
---|
| 680 | + cpu_to_le64 (dma_map_single(&np->pdev->dev, skb->data, |
---|
| 681 | + np->rx_buf_sz, DMA_FROM_DEVICE)); |
---|
690 | 682 | } |
---|
691 | 683 | np->rx_ring[entry].fraginfo |= |
---|
692 | 684 | cpu_to_le64((u64)np->rx_buf_sz << 48); |
---|
.. | .. |
---|
699 | 691 | } |
---|
700 | 692 | |
---|
701 | 693 | static void |
---|
702 | | -rio_tx_timeout (struct net_device *dev) |
---|
| 694 | +rio_tx_timeout (struct net_device *dev, unsigned int txqueue) |
---|
703 | 695 | { |
---|
704 | 696 | struct netdev_private *np = netdev_priv(dev); |
---|
705 | 697 | void __iomem *ioaddr = np->ioaddr; |
---|
.. | .. |
---|
740 | 732 | ((u64)np->vlan << 32) | |
---|
741 | 733 | ((u64)skb->priority << 45); |
---|
742 | 734 | } |
---|
743 | | - txdesc->fraginfo = cpu_to_le64 (pci_map_single (np->pdev, skb->data, |
---|
744 | | - skb->len, |
---|
745 | | - PCI_DMA_TODEVICE)); |
---|
| 735 | + txdesc->fraginfo = cpu_to_le64 (dma_map_single(&np->pdev->dev, skb->data, |
---|
| 736 | + skb->len, DMA_TO_DEVICE)); |
---|
746 | 737 | txdesc->fraginfo |= cpu_to_le64((u64)skb->len << 48); |
---|
747 | 738 | |
---|
748 | 739 | /* DL2K bug: DMA fails to get next descriptor ptr in 10Mbps mode |
---|
.. | .. |
---|
839 | 830 | if (!(np->tx_ring[entry].status & cpu_to_le64(TFDDone))) |
---|
840 | 831 | break; |
---|
841 | 832 | skb = np->tx_skbuff[entry]; |
---|
842 | | - pci_unmap_single (np->pdev, |
---|
843 | | - desc_to_dma(&np->tx_ring[entry]), |
---|
844 | | - skb->len, PCI_DMA_TODEVICE); |
---|
| 833 | + dma_unmap_single(&np->pdev->dev, |
---|
| 834 | + desc_to_dma(&np->tx_ring[entry]), skb->len, |
---|
| 835 | + DMA_TO_DEVICE); |
---|
845 | 836 | if (irq) |
---|
846 | | - dev_kfree_skb_irq (skb); |
---|
| 837 | + dev_consume_skb_irq(skb); |
---|
847 | 838 | else |
---|
848 | | - dev_kfree_skb (skb); |
---|
| 839 | + dev_kfree_skb(skb); |
---|
849 | 840 | |
---|
850 | 841 | np->tx_skbuff[entry] = NULL; |
---|
851 | 842 | entry = (entry + 1) % TX_RING_SIZE; |
---|
.. | .. |
---|
961 | 952 | |
---|
962 | 953 | /* Small skbuffs for short packets */ |
---|
963 | 954 | if (pkt_len > copy_thresh) { |
---|
964 | | - pci_unmap_single (np->pdev, |
---|
965 | | - desc_to_dma(desc), |
---|
966 | | - np->rx_buf_sz, |
---|
967 | | - PCI_DMA_FROMDEVICE); |
---|
| 955 | + dma_unmap_single(&np->pdev->dev, |
---|
| 956 | + desc_to_dma(desc), |
---|
| 957 | + np->rx_buf_sz, |
---|
| 958 | + DMA_FROM_DEVICE); |
---|
968 | 959 | skb_put (skb = np->rx_skbuff[entry], pkt_len); |
---|
969 | 960 | np->rx_skbuff[entry] = NULL; |
---|
970 | 961 | } else if ((skb = netdev_alloc_skb_ip_align(dev, pkt_len))) { |
---|
971 | | - pci_dma_sync_single_for_cpu(np->pdev, |
---|
972 | | - desc_to_dma(desc), |
---|
973 | | - np->rx_buf_sz, |
---|
974 | | - PCI_DMA_FROMDEVICE); |
---|
| 962 | + dma_sync_single_for_cpu(&np->pdev->dev, |
---|
| 963 | + desc_to_dma(desc), |
---|
| 964 | + np->rx_buf_sz, |
---|
| 965 | + DMA_FROM_DEVICE); |
---|
975 | 966 | skb_copy_to_linear_data (skb, |
---|
976 | 967 | np->rx_skbuff[entry]->data, |
---|
977 | 968 | pkt_len); |
---|
978 | 969 | skb_put (skb, pkt_len); |
---|
979 | | - pci_dma_sync_single_for_device(np->pdev, |
---|
980 | | - desc_to_dma(desc), |
---|
981 | | - np->rx_buf_sz, |
---|
982 | | - PCI_DMA_FROMDEVICE); |
---|
| 970 | + dma_sync_single_for_device(&np->pdev->dev, |
---|
| 971 | + desc_to_dma(desc), |
---|
| 972 | + np->rx_buf_sz, |
---|
| 973 | + DMA_FROM_DEVICE); |
---|
983 | 974 | } |
---|
984 | 975 | skb->protocol = eth_type_trans (skb, dev); |
---|
985 | 976 | #if 0 |
---|
.. | .. |
---|
1012 | 1003 | } |
---|
1013 | 1004 | np->rx_skbuff[entry] = skb; |
---|
1014 | 1005 | np->rx_ring[entry].fraginfo = |
---|
1015 | | - cpu_to_le64 (pci_map_single |
---|
1016 | | - (np->pdev, skb->data, np->rx_buf_sz, |
---|
1017 | | - PCI_DMA_FROMDEVICE)); |
---|
| 1006 | + cpu_to_le64(dma_map_single(&np->pdev->dev, skb->data, |
---|
| 1007 | + np->rx_buf_sz, DMA_FROM_DEVICE)); |
---|
1018 | 1008 | } |
---|
1019 | 1009 | np->rx_ring[entry].fraginfo |= |
---|
1020 | 1010 | cpu_to_le64((u64)np->rx_buf_sz << 48); |
---|
.. | .. |
---|
1247 | 1237 | struct netdev_private *np = netdev_priv(dev); |
---|
1248 | 1238 | |
---|
1249 | 1239 | strlcpy(info->driver, "dl2k", sizeof(info->driver)); |
---|
1250 | | - strlcpy(info->version, DRV_VERSION, sizeof(info->version)); |
---|
1251 | 1240 | strlcpy(info->bus_info, pci_name(np->pdev), sizeof(info->bus_info)); |
---|
1252 | 1241 | } |
---|
1253 | 1242 | |
---|
.. | .. |
---|
1809 | 1798 | struct netdev_private *np = netdev_priv(dev); |
---|
1810 | 1799 | |
---|
1811 | 1800 | unregister_netdev (dev); |
---|
1812 | | - pci_free_consistent (pdev, RX_TOTAL_SIZE, np->rx_ring, |
---|
1813 | | - np->rx_ring_dma); |
---|
1814 | | - pci_free_consistent (pdev, TX_TOTAL_SIZE, np->tx_ring, |
---|
1815 | | - np->tx_ring_dma); |
---|
| 1801 | + dma_free_coherent(&pdev->dev, RX_TOTAL_SIZE, np->rx_ring, |
---|
| 1802 | + np->rx_ring_dma); |
---|
| 1803 | + dma_free_coherent(&pdev->dev, TX_TOTAL_SIZE, np->tx_ring, |
---|
| 1804 | + np->tx_ring_dma); |
---|
1816 | 1805 | #ifdef MEM_MAPPING |
---|
1817 | 1806 | pci_iounmap(pdev, np->ioaddr); |
---|
1818 | 1807 | #endif |
---|
.. | .. |
---|
1875 | 1864 | }; |
---|
1876 | 1865 | |
---|
1877 | 1866 | module_pci_driver(rio_driver); |
---|
1878 | | -/* |
---|
1879 | 1867 | |
---|
1880 | | -Compile command: |
---|
1881 | | - |
---|
1882 | | -gcc -D__KERNEL__ -DMODULE -I/usr/src/linux/include -Wall -Wstrict-prototypes -O2 -c dl2k.c |
---|
1883 | | - |
---|
1884 | | -Read Documentation/networking/dl2k.txt for details. |
---|
1885 | | - |
---|
1886 | | -*/ |
---|
1887 | | - |
---|
| 1868 | +/* Read Documentation/networking/device_drivers/ethernet/dlink/dl2k.rst. */ |
---|