.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
---|
1 | 2 | /* |
---|
2 | 3 | * Copyright(c) 2005 - 2006 Attansic Corporation. All rights reserved. |
---|
3 | 4 | * Copyright(c) 2006 - 2007 Chris Snook <csnook@redhat.com> |
---|
.. | .. |
---|
5 | 6 | * |
---|
6 | 7 | * Derived from Intel e1000 driver |
---|
7 | 8 | * Copyright(c) 1999 - 2005 Intel Corporation. All rights reserved. |
---|
8 | | - * |
---|
9 | | - * This program is free software; you can redistribute it and/or modify it |
---|
10 | | - * under the terms of the GNU General Public License as published by the Free |
---|
11 | | - * Software Foundation; either version 2 of the License, or (at your option) |
---|
12 | | - * any later version. |
---|
13 | | - * |
---|
14 | | - * This program is distributed in the hope that it will be useful, but WITHOUT |
---|
15 | | - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
---|
16 | | - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
---|
17 | | - * more details. |
---|
18 | | - * |
---|
19 | | - * You should have received a copy of the GNU General Public License along with |
---|
20 | | - * this program; if not, write to the Free Software Foundation, Inc., 59 |
---|
21 | | - * Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
---|
22 | | - * |
---|
23 | | - * The full GNU General Public License is included in this distribution in the |
---|
24 | | - * file called COPYING. |
---|
25 | 9 | * |
---|
26 | 10 | * Contact Information: |
---|
27 | 11 | * Xiong Huang <xiong.huang@atheros.com> |
---|
.. | .. |
---|
63 | 47 | #include <linux/jiffies.h> |
---|
64 | 48 | #include <linux/mii.h> |
---|
65 | 49 | #include <linux/module.h> |
---|
66 | | -#include <linux/moduleparam.h> |
---|
67 | 50 | #include <linux/net.h> |
---|
68 | 51 | #include <linux/netdevice.h> |
---|
69 | 52 | #include <linux/pci.h> |
---|
.. | .. |
---|
82 | 65 | |
---|
83 | 66 | #include "atl1.h" |
---|
84 | 67 | |
---|
85 | | -#define ATLX_DRIVER_VERSION "2.1.3" |
---|
86 | 68 | MODULE_AUTHOR("Xiong Huang <xiong.huang@atheros.com>, " |
---|
87 | 69 | "Chris Snook <csnook@redhat.com>, " |
---|
88 | 70 | "Jay Cliburn <jcliburn@gmail.com>"); |
---|
89 | 71 | MODULE_LICENSE("GPL"); |
---|
90 | | -MODULE_VERSION(ATLX_DRIVER_VERSION); |
---|
91 | 72 | |
---|
92 | 73 | /* Temporary hack for merging atl1 and atl2 */ |
---|
93 | 74 | #include "atlx.c" |
---|
.. | .. |
---|
1061 | 1042 | * each ring/block may need up to 8 bytes for alignment, hence the |
---|
1062 | 1043 | * additional 40 bytes tacked onto the end. |
---|
1063 | 1044 | */ |
---|
1064 | | - ring_header->size = size = |
---|
| 1045 | + ring_header->size = |
---|
1065 | 1046 | sizeof(struct tx_packet_desc) * tpd_ring->count |
---|
1066 | 1047 | + sizeof(struct rx_free_desc) * rfd_ring->count |
---|
1067 | 1048 | + sizeof(struct rx_return_desc) * rrd_ring->count |
---|
.. | .. |
---|
1069 | 1050 | + sizeof(struct stats_msg_block) |
---|
1070 | 1051 | + 40; |
---|
1071 | 1052 | |
---|
1072 | | - ring_header->desc = pci_alloc_consistent(pdev, ring_header->size, |
---|
1073 | | - &ring_header->dma); |
---|
| 1053 | + ring_header->desc = dma_alloc_coherent(&pdev->dev, ring_header->size, |
---|
| 1054 | + &ring_header->dma, GFP_KERNEL); |
---|
1074 | 1055 | if (unlikely(!ring_header->desc)) { |
---|
1075 | 1056 | if (netif_msg_drv(adapter)) |
---|
1076 | | - dev_err(&pdev->dev, "pci_alloc_consistent failed\n"); |
---|
| 1057 | + dev_err(&pdev->dev, "dma_alloc_coherent failed\n"); |
---|
1077 | 1058 | goto err_nomem; |
---|
1078 | 1059 | } |
---|
1079 | | - |
---|
1080 | | - memset(ring_header->desc, 0, ring_header->size); |
---|
1081 | 1060 | |
---|
1082 | 1061 | /* init TPD ring */ |
---|
1083 | 1062 | tpd_ring->dma = ring_header->dma; |
---|
.. | .. |
---|
1157 | 1136 | for (i = 0; i < rfd_ring->count; i++) { |
---|
1158 | 1137 | buffer_info = &rfd_ring->buffer_info[i]; |
---|
1159 | 1138 | if (buffer_info->dma) { |
---|
1160 | | - pci_unmap_page(pdev, buffer_info->dma, |
---|
1161 | | - buffer_info->length, PCI_DMA_FROMDEVICE); |
---|
| 1139 | + dma_unmap_page(&pdev->dev, buffer_info->dma, |
---|
| 1140 | + buffer_info->length, DMA_FROM_DEVICE); |
---|
1162 | 1141 | buffer_info->dma = 0; |
---|
1163 | 1142 | } |
---|
1164 | 1143 | if (buffer_info->skb) { |
---|
.. | .. |
---|
1196 | 1175 | for (i = 0; i < tpd_ring->count; i++) { |
---|
1197 | 1176 | buffer_info = &tpd_ring->buffer_info[i]; |
---|
1198 | 1177 | if (buffer_info->dma) { |
---|
1199 | | - pci_unmap_page(pdev, buffer_info->dma, |
---|
1200 | | - buffer_info->length, PCI_DMA_TODEVICE); |
---|
| 1178 | + dma_unmap_page(&pdev->dev, buffer_info->dma, |
---|
| 1179 | + buffer_info->length, DMA_TO_DEVICE); |
---|
1201 | 1180 | buffer_info->dma = 0; |
---|
1202 | 1181 | } |
---|
1203 | 1182 | } |
---|
.. | .. |
---|
1238 | 1217 | atl1_clean_rx_ring(adapter); |
---|
1239 | 1218 | |
---|
1240 | 1219 | kfree(tpd_ring->buffer_info); |
---|
1241 | | - pci_free_consistent(pdev, ring_header->size, ring_header->desc, |
---|
1242 | | - ring_header->dma); |
---|
| 1220 | + dma_free_coherent(&pdev->dev, ring_header->size, ring_header->desc, |
---|
| 1221 | + ring_header->dma); |
---|
1243 | 1222 | |
---|
1244 | 1223 | tpd_ring->buffer_info = NULL; |
---|
1245 | 1224 | tpd_ring->desc = NULL; |
---|
.. | .. |
---|
1722 | 1701 | adapter->soft_stats.scc += smb->tx_1_col; |
---|
1723 | 1702 | adapter->soft_stats.mcc += smb->tx_2_col; |
---|
1724 | 1703 | adapter->soft_stats.latecol += smb->tx_late_col; |
---|
1725 | | - adapter->soft_stats.tx_underun += smb->tx_underrun; |
---|
| 1704 | + adapter->soft_stats.tx_underrun += smb->tx_underrun; |
---|
1726 | 1705 | adapter->soft_stats.tx_trunc += smb->tx_trunc; |
---|
1727 | 1706 | adapter->soft_stats.tx_pause += smb->tx_pause; |
---|
1728 | 1707 | |
---|
.. | .. |
---|
1887 | 1866 | buffer_info->length = (u16) adapter->rx_buffer_len; |
---|
1888 | 1867 | page = virt_to_page(skb->data); |
---|
1889 | 1868 | offset = offset_in_page(skb->data); |
---|
1890 | | - buffer_info->dma = pci_map_page(pdev, page, offset, |
---|
| 1869 | + buffer_info->dma = dma_map_page(&pdev->dev, page, offset, |
---|
1891 | 1870 | adapter->rx_buffer_len, |
---|
1892 | | - PCI_DMA_FROMDEVICE); |
---|
| 1871 | + DMA_FROM_DEVICE); |
---|
1893 | 1872 | rfd_desc->buffer_addr = cpu_to_le64(buffer_info->dma); |
---|
1894 | 1873 | rfd_desc->buf_len = cpu_to_le16(adapter->rx_buffer_len); |
---|
1895 | 1874 | rfd_desc->coalese = 0; |
---|
.. | .. |
---|
2013 | 1992 | } |
---|
2014 | 1993 | |
---|
2015 | 1994 | /* Good Receive */ |
---|
2016 | | - pci_unmap_page(adapter->pdev, buffer_info->dma, |
---|
2017 | | - buffer_info->length, PCI_DMA_FROMDEVICE); |
---|
| 1995 | + dma_unmap_page(&adapter->pdev->dev, buffer_info->dma, |
---|
| 1996 | + buffer_info->length, DMA_FROM_DEVICE); |
---|
2018 | 1997 | buffer_info->dma = 0; |
---|
2019 | 1998 | skb = buffer_info->skb; |
---|
2020 | 1999 | length = le16_to_cpu(rrd->xsz.xsum_sz.pkt_size); |
---|
.. | .. |
---|
2083 | 2062 | while (cmb_tpd_next_to_clean != sw_tpd_next_to_clean) { |
---|
2084 | 2063 | buffer_info = &tpd_ring->buffer_info[sw_tpd_next_to_clean]; |
---|
2085 | 2064 | if (buffer_info->dma) { |
---|
2086 | | - pci_unmap_page(adapter->pdev, buffer_info->dma, |
---|
2087 | | - buffer_info->length, PCI_DMA_TODEVICE); |
---|
| 2065 | + dma_unmap_page(&adapter->pdev->dev, buffer_info->dma, |
---|
| 2066 | + buffer_info->length, DMA_TO_DEVICE); |
---|
2088 | 2067 | buffer_info->dma = 0; |
---|
2089 | 2068 | } |
---|
2090 | 2069 | |
---|
2091 | 2070 | if (buffer_info->skb) { |
---|
2092 | | - dev_kfree_skb_irq(buffer_info->skb); |
---|
| 2071 | + dev_consume_skb_irq(buffer_info->skb); |
---|
2093 | 2072 | buffer_info->skb = NULL; |
---|
2094 | 2073 | } |
---|
2095 | 2074 | |
---|
.. | .. |
---|
2231 | 2210 | buffer_info->length = hdr_len; |
---|
2232 | 2211 | page = virt_to_page(skb->data); |
---|
2233 | 2212 | offset = offset_in_page(skb->data); |
---|
2234 | | - buffer_info->dma = pci_map_page(adapter->pdev, page, |
---|
| 2213 | + buffer_info->dma = dma_map_page(&adapter->pdev->dev, page, |
---|
2235 | 2214 | offset, hdr_len, |
---|
2236 | | - PCI_DMA_TODEVICE); |
---|
| 2215 | + DMA_TO_DEVICE); |
---|
2237 | 2216 | |
---|
2238 | 2217 | if (++next_to_use == tpd_ring->count) |
---|
2239 | 2218 | next_to_use = 0; |
---|
.. | .. |
---|
2256 | 2235 | (hdr_len + i * ATL1_MAX_TX_BUF_LEN)); |
---|
2257 | 2236 | offset = offset_in_page(skb->data + |
---|
2258 | 2237 | (hdr_len + i * ATL1_MAX_TX_BUF_LEN)); |
---|
2259 | | - buffer_info->dma = pci_map_page(adapter->pdev, |
---|
2260 | | - page, offset, buffer_info->length, |
---|
2261 | | - PCI_DMA_TODEVICE); |
---|
| 2238 | + buffer_info->dma = dma_map_page(&adapter->pdev->dev, |
---|
| 2239 | + page, offset, |
---|
| 2240 | + buffer_info->length, |
---|
| 2241 | + DMA_TO_DEVICE); |
---|
2262 | 2242 | if (++next_to_use == tpd_ring->count) |
---|
2263 | 2243 | next_to_use = 0; |
---|
2264 | 2244 | } |
---|
.. | .. |
---|
2268 | 2248 | buffer_info->length = buf_len; |
---|
2269 | 2249 | page = virt_to_page(skb->data); |
---|
2270 | 2250 | offset = offset_in_page(skb->data); |
---|
2271 | | - buffer_info->dma = pci_map_page(adapter->pdev, page, |
---|
2272 | | - offset, buf_len, PCI_DMA_TODEVICE); |
---|
| 2251 | + buffer_info->dma = dma_map_page(&adapter->pdev->dev, page, |
---|
| 2252 | + offset, buf_len, |
---|
| 2253 | + DMA_TO_DEVICE); |
---|
2273 | 2254 | if (++next_to_use == tpd_ring->count) |
---|
2274 | 2255 | next_to_use = 0; |
---|
2275 | 2256 | } |
---|
2276 | 2257 | |
---|
2277 | 2258 | for (f = 0; f < nr_frags; f++) { |
---|
2278 | | - const struct skb_frag_struct *frag; |
---|
| 2259 | + const skb_frag_t *frag = &skb_shinfo(skb)->frags[f]; |
---|
2279 | 2260 | u16 i, nseg; |
---|
2280 | 2261 | |
---|
2281 | | - frag = &skb_shinfo(skb)->frags[f]; |
---|
2282 | 2262 | buf_len = skb_frag_size(frag); |
---|
2283 | 2263 | |
---|
2284 | 2264 | nseg = (buf_len + ATL1_MAX_TX_BUF_LEN - 1) / |
---|
.. | .. |
---|
2440 | 2420 | atl1_tx_map(adapter, skb, ptpd); |
---|
2441 | 2421 | atl1_tx_queue(adapter, count, ptpd); |
---|
2442 | 2422 | atl1_update_mailbox(adapter); |
---|
2443 | | - mmiowb(); |
---|
2444 | 2423 | return NETDEV_TX_OK; |
---|
2445 | 2424 | } |
---|
2446 | 2425 | |
---|
.. | .. |
---|
2573 | 2552 | |
---|
2574 | 2553 | /** |
---|
2575 | 2554 | * atl1_phy_config - Timer Call-back |
---|
2576 | | - * @data: pointer to netdev cast into an unsigned long |
---|
| 2555 | + * @t: timer_list containing pointer to netdev cast into an unsigned long |
---|
2577 | 2556 | */ |
---|
2578 | 2557 | static void atl1_phy_config(struct timer_list *t) |
---|
2579 | 2558 | { |
---|
.. | .. |
---|
2774 | 2753 | #ifdef CONFIG_PM_SLEEP |
---|
2775 | 2754 | static int atl1_suspend(struct device *dev) |
---|
2776 | 2755 | { |
---|
2777 | | - struct pci_dev *pdev = to_pci_dev(dev); |
---|
2778 | | - struct net_device *netdev = pci_get_drvdata(pdev); |
---|
| 2756 | + struct net_device *netdev = dev_get_drvdata(dev); |
---|
2779 | 2757 | struct atl1_adapter *adapter = netdev_priv(netdev); |
---|
2780 | 2758 | struct atl1_hw *hw = &adapter->hw; |
---|
2781 | 2759 | u32 ctrl = 0; |
---|
.. | .. |
---|
2800 | 2778 | val = atl1_get_speed_and_duplex(hw, &speed, &duplex); |
---|
2801 | 2779 | if (val) { |
---|
2802 | 2780 | if (netif_msg_ifdown(adapter)) |
---|
2803 | | - dev_printk(KERN_DEBUG, &pdev->dev, |
---|
| 2781 | + dev_printk(KERN_DEBUG, dev, |
---|
2804 | 2782 | "error getting speed/duplex\n"); |
---|
2805 | 2783 | goto disable_wol; |
---|
2806 | 2784 | } |
---|
.. | .. |
---|
2857 | 2835 | |
---|
2858 | 2836 | static int atl1_resume(struct device *dev) |
---|
2859 | 2837 | { |
---|
2860 | | - struct pci_dev *pdev = to_pci_dev(dev); |
---|
2861 | | - struct net_device *netdev = pci_get_drvdata(pdev); |
---|
| 2838 | + struct net_device *netdev = dev_get_drvdata(dev); |
---|
2862 | 2839 | struct atl1_adapter *adapter = netdev_priv(netdev); |
---|
2863 | 2840 | |
---|
2864 | 2841 | iowrite32(0, adapter->hw.hw_addr + REG_WOL_CTRL); |
---|
.. | .. |
---|
2947 | 2924 | * various kernel subsystems to support the mechanics required by a |
---|
2948 | 2925 | * fixed-high-32-bit system. |
---|
2949 | 2926 | */ |
---|
2950 | | - err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); |
---|
| 2927 | + err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); |
---|
2951 | 2928 | if (err) { |
---|
2952 | 2929 | dev_err(&pdev->dev, "no usable DMA configuration\n"); |
---|
2953 | 2930 | goto err_dma; |
---|
.. | .. |
---|
2988 | 2965 | /* get device revision number */ |
---|
2989 | 2966 | adapter->hw.dev_rev = ioread16(adapter->hw.hw_addr + |
---|
2990 | 2967 | (REG_MASTER_CTRL + 2)); |
---|
2991 | | - if (netif_msg_probe(adapter)) |
---|
2992 | | - dev_info(&pdev->dev, "version %s\n", ATLX_DRIVER_VERSION); |
---|
2993 | 2968 | |
---|
2994 | 2969 | /* set default ring resource counts */ |
---|
2995 | 2970 | adapter->rfd_ring.count = adapter->rrd_ring.count = ATL1_DEFAULT_RFD; |
---|
.. | .. |
---|
3180 | 3155 | {"tx_deferred_ok", ATL1_STAT(soft_stats.deffer)}, |
---|
3181 | 3156 | {"tx_single_coll_ok", ATL1_STAT(soft_stats.scc)}, |
---|
3182 | 3157 | {"tx_multi_coll_ok", ATL1_STAT(soft_stats.mcc)}, |
---|
3183 | | - {"tx_underun", ATL1_STAT(soft_stats.tx_underun)}, |
---|
| 3158 | + {"tx_underrun", ATL1_STAT(soft_stats.tx_underrun)}, |
---|
3184 | 3159 | {"tx_trunc", ATL1_STAT(soft_stats.tx_trunc)}, |
---|
3185 | 3160 | {"tx_pause", ATL1_STAT(soft_stats.tx_pause)}, |
---|
3186 | 3161 | {"rx_pause", ATL1_STAT(soft_stats.rx_pause)}, |
---|
.. | .. |
---|
3278 | 3253 | u16 phy_data; |
---|
3279 | 3254 | int ret_val = 0; |
---|
3280 | 3255 | u16 old_media_type = hw->media_type; |
---|
3281 | | - u32 advertising; |
---|
3282 | 3256 | |
---|
3283 | 3257 | if (netif_running(adapter->netdev)) { |
---|
3284 | 3258 | if (netif_msg_link(adapter)) |
---|
.. | .. |
---|
3312 | 3286 | hw->media_type = MEDIA_TYPE_10M_HALF; |
---|
3313 | 3287 | } |
---|
3314 | 3288 | } |
---|
3315 | | - switch (hw->media_type) { |
---|
3316 | | - case MEDIA_TYPE_AUTO_SENSOR: |
---|
3317 | | - advertising = |
---|
3318 | | - ADVERTISED_10baseT_Half | |
---|
3319 | | - ADVERTISED_10baseT_Full | |
---|
3320 | | - ADVERTISED_100baseT_Half | |
---|
3321 | | - ADVERTISED_100baseT_Full | |
---|
3322 | | - ADVERTISED_1000baseT_Full | |
---|
3323 | | - ADVERTISED_Autoneg | ADVERTISED_TP; |
---|
3324 | | - break; |
---|
3325 | | - case MEDIA_TYPE_1000M_FULL: |
---|
3326 | | - advertising = |
---|
3327 | | - ADVERTISED_1000baseT_Full | |
---|
3328 | | - ADVERTISED_Autoneg | ADVERTISED_TP; |
---|
3329 | | - break; |
---|
3330 | | - default: |
---|
3331 | | - advertising = 0; |
---|
3332 | | - break; |
---|
3333 | | - } |
---|
| 3289 | + |
---|
3334 | 3290 | if (atl1_phy_setup_autoneg_adv(hw)) { |
---|
3335 | 3291 | ret_val = -EINVAL; |
---|
3336 | 3292 | if (netif_msg_link(adapter)) |
---|
.. | .. |
---|
3386 | 3342 | struct atl1_adapter *adapter = netdev_priv(netdev); |
---|
3387 | 3343 | |
---|
3388 | 3344 | strlcpy(drvinfo->driver, ATLX_DRIVER_NAME, sizeof(drvinfo->driver)); |
---|
3389 | | - strlcpy(drvinfo->version, ATLX_DRIVER_VERSION, |
---|
3390 | | - sizeof(drvinfo->version)); |
---|
3391 | 3345 | strlcpy(drvinfo->bus_info, pci_name(adapter->pdev), |
---|
3392 | 3346 | sizeof(drvinfo->bus_info)); |
---|
3393 | 3347 | } |
---|