| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * New driver for Marvell Yukon 2 chipset. |
|---|
| 3 | 4 | * Based on earlier sk98lin, and skge driver. |
|---|
| .. | .. |
|---|
| 7 | 8 | * those should be done at higher levels. |
|---|
| 8 | 9 | * |
|---|
| 9 | 10 | * Copyright (C) 2005 Stephen Hemminger <shemminger@osdl.org> |
|---|
| 10 | | - * |
|---|
| 11 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 12 | | - * it under the terms of the GNU General Public License as published by |
|---|
| 13 | | - * the Free Software Foundation; either version 2 of the License. |
|---|
| 14 | | - * |
|---|
| 15 | | - * This program is distributed in the hope that it will be useful, |
|---|
| 16 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 17 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|---|
| 18 | | - * GNU General Public License for more details. |
|---|
| 19 | | - * |
|---|
| 20 | | - * You should have received a copy of the GNU General Public License |
|---|
| 21 | | - * along with this program; if not, write to the Free Software |
|---|
| 22 | | - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
|---|
| 23 | 11 | */ |
|---|
| 24 | 12 | |
|---|
| 25 | 13 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
|---|
| .. | .. |
|---|
| 1139 | 1127 | /* Make sure write' to descriptors are complete before we tell hardware */ |
|---|
| 1140 | 1128 | wmb(); |
|---|
| 1141 | 1129 | sky2_write16(hw, Y2_QADDR(q, PREF_UNIT_PUT_IDX), idx); |
|---|
| 1142 | | - |
|---|
| 1143 | | - /* Synchronize I/O on since next processor may write to tail */ |
|---|
| 1144 | | - mmiowb(); |
|---|
| 1145 | 1130 | } |
|---|
| 1146 | 1131 | |
|---|
| 1147 | 1132 | |
|---|
| .. | .. |
|---|
| 1224 | 1209 | struct sk_buff *skb = re->skb; |
|---|
| 1225 | 1210 | int i; |
|---|
| 1226 | 1211 | |
|---|
| 1227 | | - re->data_addr = pci_map_single(pdev, skb->data, size, PCI_DMA_FROMDEVICE); |
|---|
| 1228 | | - if (pci_dma_mapping_error(pdev, re->data_addr)) |
|---|
| 1212 | + re->data_addr = dma_map_single(&pdev->dev, skb->data, size, |
|---|
| 1213 | + DMA_FROM_DEVICE); |
|---|
| 1214 | + if (dma_mapping_error(&pdev->dev, re->data_addr)) |
|---|
| 1229 | 1215 | goto mapping_error; |
|---|
| 1230 | 1216 | |
|---|
| 1231 | 1217 | dma_unmap_len_set(re, data_size, size); |
|---|
| .. | .. |
|---|
| 1244 | 1230 | |
|---|
| 1245 | 1231 | map_page_error: |
|---|
| 1246 | 1232 | while (--i >= 0) { |
|---|
| 1247 | | - pci_unmap_page(pdev, re->frag_addr[i], |
|---|
| 1233 | + dma_unmap_page(&pdev->dev, re->frag_addr[i], |
|---|
| 1248 | 1234 | skb_frag_size(&skb_shinfo(skb)->frags[i]), |
|---|
| 1249 | | - PCI_DMA_FROMDEVICE); |
|---|
| 1235 | + DMA_FROM_DEVICE); |
|---|
| 1250 | 1236 | } |
|---|
| 1251 | 1237 | |
|---|
| 1252 | | - pci_unmap_single(pdev, re->data_addr, dma_unmap_len(re, data_size), |
|---|
| 1253 | | - PCI_DMA_FROMDEVICE); |
|---|
| 1238 | + dma_unmap_single(&pdev->dev, re->data_addr, |
|---|
| 1239 | + dma_unmap_len(re, data_size), DMA_FROM_DEVICE); |
|---|
| 1254 | 1240 | |
|---|
| 1255 | 1241 | mapping_error: |
|---|
| 1256 | 1242 | if (net_ratelimit()) |
|---|
| .. | .. |
|---|
| 1264 | 1250 | struct sk_buff *skb = re->skb; |
|---|
| 1265 | 1251 | int i; |
|---|
| 1266 | 1252 | |
|---|
| 1267 | | - pci_unmap_single(pdev, re->data_addr, dma_unmap_len(re, data_size), |
|---|
| 1268 | | - PCI_DMA_FROMDEVICE); |
|---|
| 1253 | + dma_unmap_single(&pdev->dev, re->data_addr, |
|---|
| 1254 | + dma_unmap_len(re, data_size), DMA_FROM_DEVICE); |
|---|
| 1269 | 1255 | |
|---|
| 1270 | 1256 | for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) |
|---|
| 1271 | | - pci_unmap_page(pdev, re->frag_addr[i], |
|---|
| 1257 | + dma_unmap_page(&pdev->dev, re->frag_addr[i], |
|---|
| 1272 | 1258 | skb_frag_size(&skb_shinfo(skb)->frags[i]), |
|---|
| 1273 | | - PCI_DMA_FROMDEVICE); |
|---|
| 1259 | + DMA_FROM_DEVICE); |
|---|
| 1274 | 1260 | } |
|---|
| 1275 | 1261 | |
|---|
| 1276 | 1262 | /* Tell chip where to start receive checksum. |
|---|
| .. | .. |
|---|
| 1354 | 1340 | |
|---|
| 1355 | 1341 | /* reset the Rx prefetch unit */ |
|---|
| 1356 | 1342 | sky2_write32(hw, Y2_QADDR(rxq, PREF_UNIT_CTRL), PREF_UNIT_RST_SET); |
|---|
| 1357 | | - mmiowb(); |
|---|
| 1358 | 1343 | } |
|---|
| 1359 | 1344 | |
|---|
| 1360 | 1345 | /* Clean out receive buffer area, assumes receiver hardware stopped */ |
|---|
| .. | .. |
|---|
| 1391 | 1376 | case SIOCGMIIPHY: |
|---|
| 1392 | 1377 | data->phy_id = PHY_ADDR_MARV; |
|---|
| 1393 | 1378 | |
|---|
| 1394 | | - /* fallthru */ |
|---|
| 1379 | + fallthrough; |
|---|
| 1395 | 1380 | case SIOCGMIIREG: { |
|---|
| 1396 | 1381 | u16 val = 0; |
|---|
| 1397 | 1382 | |
|---|
| .. | .. |
|---|
| 1608 | 1593 | struct sky2_hw *hw = sky2->hw; |
|---|
| 1609 | 1594 | |
|---|
| 1610 | 1595 | /* must be power of 2 */ |
|---|
| 1611 | | - sky2->tx_le = pci_alloc_consistent(hw->pdev, |
|---|
| 1612 | | - sky2->tx_ring_size * |
|---|
| 1613 | | - sizeof(struct sky2_tx_le), |
|---|
| 1614 | | - &sky2->tx_le_map); |
|---|
| 1596 | + sky2->tx_le = dma_alloc_coherent(&hw->pdev->dev, |
|---|
| 1597 | + sky2->tx_ring_size * sizeof(struct sky2_tx_le), |
|---|
| 1598 | + &sky2->tx_le_map, GFP_KERNEL); |
|---|
| 1615 | 1599 | if (!sky2->tx_le) |
|---|
| 1616 | 1600 | goto nomem; |
|---|
| 1617 | 1601 | |
|---|
| .. | .. |
|---|
| 1620 | 1604 | if (!sky2->tx_ring) |
|---|
| 1621 | 1605 | goto nomem; |
|---|
| 1622 | 1606 | |
|---|
| 1623 | | - sky2->rx_le = pci_zalloc_consistent(hw->pdev, RX_LE_BYTES, |
|---|
| 1624 | | - &sky2->rx_le_map); |
|---|
| 1607 | + sky2->rx_le = dma_alloc_coherent(&hw->pdev->dev, RX_LE_BYTES, |
|---|
| 1608 | + &sky2->rx_le_map, GFP_KERNEL); |
|---|
| 1625 | 1609 | if (!sky2->rx_le) |
|---|
| 1626 | 1610 | goto nomem; |
|---|
| 1627 | 1611 | |
|---|
| .. | .. |
|---|
| 1642 | 1626 | sky2_rx_clean(sky2); |
|---|
| 1643 | 1627 | |
|---|
| 1644 | 1628 | if (sky2->rx_le) { |
|---|
| 1645 | | - pci_free_consistent(hw->pdev, RX_LE_BYTES, |
|---|
| 1646 | | - sky2->rx_le, sky2->rx_le_map); |
|---|
| 1629 | + dma_free_coherent(&hw->pdev->dev, RX_LE_BYTES, sky2->rx_le, |
|---|
| 1630 | + sky2->rx_le_map); |
|---|
| 1647 | 1631 | sky2->rx_le = NULL; |
|---|
| 1648 | 1632 | } |
|---|
| 1649 | 1633 | if (sky2->tx_le) { |
|---|
| 1650 | | - pci_free_consistent(hw->pdev, |
|---|
| 1651 | | - sky2->tx_ring_size * sizeof(struct sky2_tx_le), |
|---|
| 1652 | | - sky2->tx_le, sky2->tx_le_map); |
|---|
| 1634 | + dma_free_coherent(&hw->pdev->dev, |
|---|
| 1635 | + sky2->tx_ring_size * sizeof(struct sky2_tx_le), |
|---|
| 1636 | + sky2->tx_le, sky2->tx_le_map); |
|---|
| 1653 | 1637 | sky2->tx_le = NULL; |
|---|
| 1654 | 1638 | } |
|---|
| 1655 | 1639 | kfree(sky2->tx_ring); |
|---|
| .. | .. |
|---|
| 1822 | 1806 | static void sky2_tx_unmap(struct pci_dev *pdev, struct tx_ring_info *re) |
|---|
| 1823 | 1807 | { |
|---|
| 1824 | 1808 | if (re->flags & TX_MAP_SINGLE) |
|---|
| 1825 | | - pci_unmap_single(pdev, dma_unmap_addr(re, mapaddr), |
|---|
| 1826 | | - dma_unmap_len(re, maplen), |
|---|
| 1827 | | - PCI_DMA_TODEVICE); |
|---|
| 1809 | + dma_unmap_single(&pdev->dev, dma_unmap_addr(re, mapaddr), |
|---|
| 1810 | + dma_unmap_len(re, maplen), DMA_TO_DEVICE); |
|---|
| 1828 | 1811 | else if (re->flags & TX_MAP_PAGE) |
|---|
| 1829 | | - pci_unmap_page(pdev, dma_unmap_addr(re, mapaddr), |
|---|
| 1830 | | - dma_unmap_len(re, maplen), |
|---|
| 1831 | | - PCI_DMA_TODEVICE); |
|---|
| 1812 | + dma_unmap_page(&pdev->dev, dma_unmap_addr(re, mapaddr), |
|---|
| 1813 | + dma_unmap_len(re, maplen), DMA_TO_DEVICE); |
|---|
| 1832 | 1814 | re->flags = 0; |
|---|
| 1833 | 1815 | } |
|---|
| 1834 | 1816 | |
|---|
| .. | .. |
|---|
| 1856 | 1838 | return NETDEV_TX_BUSY; |
|---|
| 1857 | 1839 | |
|---|
| 1858 | 1840 | len = skb_headlen(skb); |
|---|
| 1859 | | - mapping = pci_map_single(hw->pdev, skb->data, len, PCI_DMA_TODEVICE); |
|---|
| 1841 | + mapping = dma_map_single(&hw->pdev->dev, skb->data, len, |
|---|
| 1842 | + DMA_TO_DEVICE); |
|---|
| 1860 | 1843 | |
|---|
| 1861 | | - if (pci_dma_mapping_error(hw->pdev, mapping)) |
|---|
| 1844 | + if (dma_mapping_error(&hw->pdev->dev, mapping)) |
|---|
| 1862 | 1845 | goto mapping_error; |
|---|
| 1863 | 1846 | |
|---|
| 1864 | 1847 | slot = sky2->tx_prod; |
|---|
| .. | .. |
|---|
| 2374 | 2357 | /* Transmit timeout is only called if we are running, carrier is up |
|---|
| 2375 | 2358 | * and tx queue is full (stopped). |
|---|
| 2376 | 2359 | */ |
|---|
| 2377 | | -static void sky2_tx_timeout(struct net_device *dev) |
|---|
| 2360 | +static void sky2_tx_timeout(struct net_device *dev, unsigned int txqueue) |
|---|
| 2378 | 2361 | { |
|---|
| 2379 | 2362 | struct sky2_port *sky2 = netdev_priv(dev); |
|---|
| 2380 | 2363 | struct sky2_hw *hw = sky2->hw; |
|---|
| .. | .. |
|---|
| 2480 | 2463 | |
|---|
| 2481 | 2464 | skb = netdev_alloc_skb_ip_align(sky2->netdev, length); |
|---|
| 2482 | 2465 | if (likely(skb)) { |
|---|
| 2483 | | - pci_dma_sync_single_for_cpu(sky2->hw->pdev, re->data_addr, |
|---|
| 2484 | | - length, PCI_DMA_FROMDEVICE); |
|---|
| 2466 | + dma_sync_single_for_cpu(&sky2->hw->pdev->dev, re->data_addr, |
|---|
| 2467 | + length, DMA_FROM_DEVICE); |
|---|
| 2485 | 2468 | skb_copy_from_linear_data(re->skb, skb->data, length); |
|---|
| 2486 | 2469 | skb->ip_summed = re->skb->ip_summed; |
|---|
| 2487 | 2470 | skb->csum = re->skb->csum; |
|---|
| 2488 | 2471 | skb_copy_hash(skb, re->skb); |
|---|
| 2489 | | - skb->vlan_proto = re->skb->vlan_proto; |
|---|
| 2490 | | - skb->vlan_tci = re->skb->vlan_tci; |
|---|
| 2472 | + __vlan_hwaccel_copy_tag(skb, re->skb); |
|---|
| 2491 | 2473 | |
|---|
| 2492 | | - pci_dma_sync_single_for_device(sky2->hw->pdev, re->data_addr, |
|---|
| 2493 | | - length, PCI_DMA_FROMDEVICE); |
|---|
| 2494 | | - re->skb->vlan_proto = 0; |
|---|
| 2495 | | - re->skb->vlan_tci = 0; |
|---|
| 2474 | + dma_sync_single_for_device(&sky2->hw->pdev->dev, |
|---|
| 2475 | + re->data_addr, length, |
|---|
| 2476 | + DMA_FROM_DEVICE); |
|---|
| 2477 | + __vlan_hwaccel_clear_tag(re->skb); |
|---|
| 2496 | 2478 | skb_clear_hash(re->skb); |
|---|
| 2497 | 2479 | re->skb->ip_summed = CHECKSUM_NONE; |
|---|
| 2498 | 2480 | skb_put(skb, length); |
|---|
| .. | .. |
|---|
| 2782 | 2764 | |
|---|
| 2783 | 2765 | case OP_RXCHKSVLAN: |
|---|
| 2784 | 2766 | sky2_rx_tag(sky2, length); |
|---|
| 2785 | | - /* fall through */ |
|---|
| 2767 | + fallthrough; |
|---|
| 2786 | 2768 | case OP_RXCHKS: |
|---|
| 2787 | 2769 | if (likely(dev->features & NETIF_F_RXCSUM)) |
|---|
| 2788 | 2770 | sky2_rx_checksum(sky2, status); |
|---|
| .. | .. |
|---|
| 4418 | 4400 | } |
|---|
| 4419 | 4401 | |
|---|
| 4420 | 4402 | static const struct ethtool_ops sky2_ethtool_ops = { |
|---|
| 4403 | + .supported_coalesce_params = ETHTOOL_COALESCE_USECS | |
|---|
| 4404 | + ETHTOOL_COALESCE_MAX_FRAMES | |
|---|
| 4405 | + ETHTOOL_COALESCE_RX_USECS_IRQ | |
|---|
| 4406 | + ETHTOOL_COALESCE_RX_MAX_FRAMES_IRQ, |
|---|
| 4421 | 4407 | .get_drvinfo = sky2_get_drvinfo, |
|---|
| 4422 | 4408 | .get_wol = sky2_get_wol, |
|---|
| 4423 | 4409 | .set_wol = sky2_set_wol, |
|---|
| .. | .. |
|---|
| 4624 | 4610 | napi_enable(&hw->napi); |
|---|
| 4625 | 4611 | return 0; |
|---|
| 4626 | 4612 | } |
|---|
| 4627 | | - |
|---|
| 4628 | | -static int sky2_debug_open(struct inode *inode, struct file *file) |
|---|
| 4629 | | -{ |
|---|
| 4630 | | - return single_open(file, sky2_debug_show, inode->i_private); |
|---|
| 4631 | | -} |
|---|
| 4632 | | - |
|---|
| 4633 | | -static const struct file_operations sky2_debug_fops = { |
|---|
| 4634 | | - .owner = THIS_MODULE, |
|---|
| 4635 | | - .open = sky2_debug_open, |
|---|
| 4636 | | - .read = seq_read, |
|---|
| 4637 | | - .llseek = seq_lseek, |
|---|
| 4638 | | - .release = single_release, |
|---|
| 4639 | | -}; |
|---|
| 4613 | +DEFINE_SHOW_ATTRIBUTE(sky2_debug); |
|---|
| 4640 | 4614 | |
|---|
| 4641 | 4615 | /* |
|---|
| 4642 | 4616 | * Use network device events to create/remove/rename |
|---|
| .. | .. |
|---|
| 4822 | 4796 | * 2) from internal registers set by bootloader |
|---|
| 4823 | 4797 | */ |
|---|
| 4824 | 4798 | iap = of_get_mac_address(hw->pdev->dev.of_node); |
|---|
| 4825 | | - if (iap) |
|---|
| 4826 | | - memcpy(dev->dev_addr, iap, ETH_ALEN); |
|---|
| 4799 | + if (!IS_ERR(iap)) |
|---|
| 4800 | + ether_addr_copy(dev->dev_addr, iap); |
|---|
| 4827 | 4801 | else |
|---|
| 4828 | 4802 | memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port * 8, |
|---|
| 4829 | 4803 | ETH_ALEN); |
|---|
| .. | .. |
|---|
| 4948 | 4922 | }, |
|---|
| 4949 | 4923 | }, |
|---|
| 4950 | 4924 | { |
|---|
| 4925 | + .ident = "ASUS P5W DH Deluxe", |
|---|
| 4926 | + .matches = { |
|---|
| 4927 | + DMI_MATCH(DMI_SYS_VENDOR, "ASUSTEK COMPUTER INC"), |
|---|
| 4928 | + DMI_MATCH(DMI_PRODUCT_NAME, "P5W DH Deluxe"), |
|---|
| 4929 | + }, |
|---|
| 4930 | + }, |
|---|
| 4931 | + { |
|---|
| 4951 | 4932 | .ident = "ASUS P6T", |
|---|
| 4952 | 4933 | .matches = { |
|---|
| 4953 | 4934 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), |
|---|
| .. | .. |
|---|
| 5004 | 4985 | pci_set_master(pdev); |
|---|
| 5005 | 4986 | |
|---|
| 5006 | 4987 | if (sizeof(dma_addr_t) > sizeof(u32) && |
|---|
| 5007 | | - !(err = pci_set_dma_mask(pdev, DMA_BIT_MASK(64)))) { |
|---|
| 4988 | + !(err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)))) { |
|---|
| 5008 | 4989 | using_dac = 1; |
|---|
| 5009 | | - err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)); |
|---|
| 4990 | + err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64)); |
|---|
| 5010 | 4991 | if (err < 0) { |
|---|
| 5011 | 4992 | dev_err(&pdev->dev, "unable to obtain 64 bit DMA " |
|---|
| 5012 | 4993 | "for consistent allocations\n"); |
|---|
| 5013 | 4994 | goto err_out_free_regions; |
|---|
| 5014 | 4995 | } |
|---|
| 5015 | 4996 | } else { |
|---|
| 5016 | | - err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); |
|---|
| 4997 | + err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); |
|---|
| 5017 | 4998 | if (err) { |
|---|
| 5018 | 4999 | dev_err(&pdev->dev, "no usable DMA configuration\n"); |
|---|
| 5019 | 5000 | goto err_out_free_regions; |
|---|
| .. | .. |
|---|
| 5045 | 5026 | hw->pdev = pdev; |
|---|
| 5046 | 5027 | sprintf(hw->irq_name, DRV_NAME "@pci:%s", pci_name(pdev)); |
|---|
| 5047 | 5028 | |
|---|
| 5048 | | - hw->regs = ioremap_nocache(pci_resource_start(pdev, 0), 0x4000); |
|---|
| 5029 | + hw->regs = ioremap(pci_resource_start(pdev, 0), 0x4000); |
|---|
| 5049 | 5030 | if (!hw->regs) { |
|---|
| 5050 | 5031 | dev_err(&pdev->dev, "cannot map device registers\n"); |
|---|
| 5051 | 5032 | goto err_out_free_hw; |
|---|
| .. | .. |
|---|
| 5057 | 5038 | |
|---|
| 5058 | 5039 | /* ring for status responses */ |
|---|
| 5059 | 5040 | hw->st_size = hw->ports * roundup_pow_of_two(3*RX_MAX_PENDING + TX_MAX_PENDING); |
|---|
| 5060 | | - hw->st_le = pci_alloc_consistent(pdev, hw->st_size * sizeof(struct sky2_status_le), |
|---|
| 5061 | | - &hw->st_dma); |
|---|
| 5041 | + hw->st_le = dma_alloc_coherent(&pdev->dev, |
|---|
| 5042 | + hw->st_size * sizeof(struct sky2_status_le), |
|---|
| 5043 | + &hw->st_dma, GFP_KERNEL); |
|---|
| 5062 | 5044 | if (!hw->st_le) { |
|---|
| 5063 | 5045 | err = -ENOMEM; |
|---|
| 5064 | 5046 | goto err_out_reset; |
|---|
| .. | .. |
|---|
| 5123 | 5105 | INIT_WORK(&hw->restart_work, sky2_restart); |
|---|
| 5124 | 5106 | |
|---|
| 5125 | 5107 | pci_set_drvdata(pdev, hw); |
|---|
| 5126 | | - pdev->d3_delay = 300; |
|---|
| 5108 | + pdev->d3hot_delay = 300; |
|---|
| 5127 | 5109 | |
|---|
| 5128 | 5110 | return 0; |
|---|
| 5129 | 5111 | |
|---|
| .. | .. |
|---|
| 5138 | 5120 | pci_disable_msi(pdev); |
|---|
| 5139 | 5121 | free_netdev(dev); |
|---|
| 5140 | 5122 | err_out_free_pci: |
|---|
| 5141 | | - pci_free_consistent(pdev, hw->st_size * sizeof(struct sky2_status_le), |
|---|
| 5142 | | - hw->st_le, hw->st_dma); |
|---|
| 5123 | + dma_free_coherent(&pdev->dev, |
|---|
| 5124 | + hw->st_size * sizeof(struct sky2_status_le), |
|---|
| 5125 | + hw->st_le, hw->st_dma); |
|---|
| 5143 | 5126 | err_out_reset: |
|---|
| 5144 | 5127 | sky2_write8(hw, B0_CTST, CS_RST_SET); |
|---|
| 5145 | 5128 | err_out_iounmap: |
|---|
| .. | .. |
|---|
| 5183 | 5166 | |
|---|
| 5184 | 5167 | if (hw->flags & SKY2_HW_USE_MSI) |
|---|
| 5185 | 5168 | pci_disable_msi(pdev); |
|---|
| 5186 | | - pci_free_consistent(pdev, hw->st_size * sizeof(struct sky2_status_le), |
|---|
| 5187 | | - hw->st_le, hw->st_dma); |
|---|
| 5169 | + dma_free_coherent(&pdev->dev, |
|---|
| 5170 | + hw->st_size * sizeof(struct sky2_status_le), |
|---|
| 5171 | + hw->st_le, hw->st_dma); |
|---|
| 5188 | 5172 | pci_release_regions(pdev); |
|---|
| 5189 | 5173 | pci_disable_device(pdev); |
|---|
| 5190 | 5174 | |
|---|
| .. | .. |
|---|
| 5197 | 5181 | |
|---|
| 5198 | 5182 | static int sky2_suspend(struct device *dev) |
|---|
| 5199 | 5183 | { |
|---|
| 5200 | | - struct pci_dev *pdev = to_pci_dev(dev); |
|---|
| 5201 | | - struct sky2_hw *hw = pci_get_drvdata(pdev); |
|---|
| 5184 | + struct sky2_hw *hw = dev_get_drvdata(dev); |
|---|
| 5202 | 5185 | int i; |
|---|
| 5203 | 5186 | |
|---|
| 5204 | 5187 | if (!hw) |
|---|