| .. | .. |
|---|
| 545 | 545 | } |
|---|
| 546 | 546 | |
|---|
| 547 | 547 | if (pci_estat & GREG_PCIESTAT_OTHER) { |
|---|
| 548 | | - u16 pci_cfg_stat; |
|---|
| 548 | + int pci_errs; |
|---|
| 549 | 549 | |
|---|
| 550 | 550 | /* Interrogate PCI config space for the |
|---|
| 551 | 551 | * true cause. |
|---|
| 552 | 552 | */ |
|---|
| 553 | | - pci_read_config_word(gp->pdev, PCI_STATUS, |
|---|
| 554 | | - &pci_cfg_stat); |
|---|
| 555 | | - netdev_err(dev, "Read PCI cfg space status [%04x]\n", |
|---|
| 556 | | - pci_cfg_stat); |
|---|
| 557 | | - if (pci_cfg_stat & PCI_STATUS_PARITY) |
|---|
| 553 | + pci_errs = pci_status_get_and_clear_errors(gp->pdev); |
|---|
| 554 | + netdev_err(dev, "PCI status errors[%04x]\n", pci_errs); |
|---|
| 555 | + if (pci_errs & PCI_STATUS_PARITY) |
|---|
| 558 | 556 | netdev_err(dev, "PCI parity error detected\n"); |
|---|
| 559 | | - if (pci_cfg_stat & PCI_STATUS_SIG_TARGET_ABORT) |
|---|
| 557 | + if (pci_errs & PCI_STATUS_SIG_TARGET_ABORT) |
|---|
| 560 | 558 | netdev_err(dev, "PCI target abort\n"); |
|---|
| 561 | | - if (pci_cfg_stat & PCI_STATUS_REC_TARGET_ABORT) |
|---|
| 559 | + if (pci_errs & PCI_STATUS_REC_TARGET_ABORT) |
|---|
| 562 | 560 | netdev_err(dev, "PCI master acks target abort\n"); |
|---|
| 563 | | - if (pci_cfg_stat & PCI_STATUS_REC_MASTER_ABORT) |
|---|
| 561 | + if (pci_errs & PCI_STATUS_REC_MASTER_ABORT) |
|---|
| 564 | 562 | netdev_err(dev, "PCI master abort\n"); |
|---|
| 565 | | - if (pci_cfg_stat & PCI_STATUS_SIG_SYSTEM_ERROR) |
|---|
| 563 | + if (pci_errs & PCI_STATUS_SIG_SYSTEM_ERROR) |
|---|
| 566 | 564 | netdev_err(dev, "PCI system error SERR#\n"); |
|---|
| 567 | | - if (pci_cfg_stat & PCI_STATUS_DETECTED_PARITY) |
|---|
| 565 | + if (pci_errs & PCI_STATUS_DETECTED_PARITY) |
|---|
| 568 | 566 | netdev_err(dev, "PCI parity error\n"); |
|---|
| 569 | | - |
|---|
| 570 | | - /* Write the error bits back to clear them. */ |
|---|
| 571 | | - pci_cfg_stat &= (PCI_STATUS_PARITY | |
|---|
| 572 | | - PCI_STATUS_SIG_TARGET_ABORT | |
|---|
| 573 | | - PCI_STATUS_REC_TARGET_ABORT | |
|---|
| 574 | | - PCI_STATUS_REC_MASTER_ABORT | |
|---|
| 575 | | - PCI_STATUS_SIG_SYSTEM_ERROR | |
|---|
| 576 | | - PCI_STATUS_DETECTED_PARITY); |
|---|
| 577 | | - pci_write_config_word(gp->pdev, |
|---|
| 578 | | - PCI_STATUS, pci_cfg_stat); |
|---|
| 579 | 567 | } |
|---|
| 580 | 568 | |
|---|
| 581 | 569 | /* For all PCI errors, we should reset the chip. */ |
|---|
| .. | .. |
|---|
| 682 | 670 | dma_addr = le64_to_cpu(txd->buffer); |
|---|
| 683 | 671 | dma_len = le64_to_cpu(txd->control_word) & TXDCTRL_BUFSZ; |
|---|
| 684 | 672 | |
|---|
| 685 | | - pci_unmap_page(gp->pdev, dma_addr, dma_len, PCI_DMA_TODEVICE); |
|---|
| 673 | + dma_unmap_page(&gp->pdev->dev, dma_addr, dma_len, |
|---|
| 674 | + DMA_TO_DEVICE); |
|---|
| 686 | 675 | entry = NEXT_TX(entry); |
|---|
| 687 | 676 | } |
|---|
| 688 | 677 | |
|---|
| .. | .. |
|---|
| 821 | 810 | drops++; |
|---|
| 822 | 811 | goto drop_it; |
|---|
| 823 | 812 | } |
|---|
| 824 | | - pci_unmap_page(gp->pdev, dma_addr, |
|---|
| 825 | | - RX_BUF_ALLOC_SIZE(gp), |
|---|
| 826 | | - PCI_DMA_FROMDEVICE); |
|---|
| 813 | + dma_unmap_page(&gp->pdev->dev, dma_addr, |
|---|
| 814 | + RX_BUF_ALLOC_SIZE(gp), DMA_FROM_DEVICE); |
|---|
| 827 | 815 | gp->rx_skbs[entry] = new_skb; |
|---|
| 828 | 816 | skb_put(new_skb, (gp->rx_buf_sz + RX_OFFSET)); |
|---|
| 829 | | - rxd->buffer = cpu_to_le64(pci_map_page(gp->pdev, |
|---|
| 817 | + rxd->buffer = cpu_to_le64(dma_map_page(&gp->pdev->dev, |
|---|
| 830 | 818 | virt_to_page(new_skb->data), |
|---|
| 831 | 819 | offset_in_page(new_skb->data), |
|---|
| 832 | 820 | RX_BUF_ALLOC_SIZE(gp), |
|---|
| 833 | | - PCI_DMA_FROMDEVICE)); |
|---|
| 821 | + DMA_FROM_DEVICE)); |
|---|
| 834 | 822 | skb_reserve(new_skb, RX_OFFSET); |
|---|
| 835 | 823 | |
|---|
| 836 | 824 | /* Trim the original skb for the netif. */ |
|---|
| .. | .. |
|---|
| 845 | 833 | |
|---|
| 846 | 834 | skb_reserve(copy_skb, 2); |
|---|
| 847 | 835 | skb_put(copy_skb, len); |
|---|
| 848 | | - pci_dma_sync_single_for_cpu(gp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE); |
|---|
| 836 | + dma_sync_single_for_cpu(&gp->pdev->dev, dma_addr, len, |
|---|
| 837 | + DMA_FROM_DEVICE); |
|---|
| 849 | 838 | skb_copy_from_linear_data(skb, copy_skb->data, len); |
|---|
| 850 | | - pci_dma_sync_single_for_device(gp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE); |
|---|
| 839 | + dma_sync_single_for_device(&gp->pdev->dev, dma_addr, |
|---|
| 840 | + len, DMA_FROM_DEVICE); |
|---|
| 851 | 841 | |
|---|
| 852 | 842 | /* We'll reuse the original ring buffer. */ |
|---|
| 853 | 843 | skb = copy_skb; |
|---|
| .. | .. |
|---|
| 970 | 960 | } |
|---|
| 971 | 961 | #endif |
|---|
| 972 | 962 | |
|---|
| 973 | | -static void gem_tx_timeout(struct net_device *dev) |
|---|
| 963 | +static void gem_tx_timeout(struct net_device *dev, unsigned int txqueue) |
|---|
| 974 | 964 | { |
|---|
| 975 | 965 | struct gem *gp = netdev_priv(dev); |
|---|
| 976 | 966 | |
|---|
| .. | .. |
|---|
| 1032 | 1022 | u32 len; |
|---|
| 1033 | 1023 | |
|---|
| 1034 | 1024 | len = skb->len; |
|---|
| 1035 | | - mapping = pci_map_page(gp->pdev, |
|---|
| 1025 | + mapping = dma_map_page(&gp->pdev->dev, |
|---|
| 1036 | 1026 | virt_to_page(skb->data), |
|---|
| 1037 | 1027 | offset_in_page(skb->data), |
|---|
| 1038 | | - len, PCI_DMA_TODEVICE); |
|---|
| 1028 | + len, DMA_TO_DEVICE); |
|---|
| 1039 | 1029 | ctrl |= TXDCTRL_SOF | TXDCTRL_EOF | len; |
|---|
| 1040 | 1030 | if (gem_intme(entry)) |
|---|
| 1041 | 1031 | ctrl |= TXDCTRL_INTME; |
|---|
| .. | .. |
|---|
| 1058 | 1048 | * Otherwise we could race with the device. |
|---|
| 1059 | 1049 | */ |
|---|
| 1060 | 1050 | first_len = skb_headlen(skb); |
|---|
| 1061 | | - first_mapping = pci_map_page(gp->pdev, virt_to_page(skb->data), |
|---|
| 1051 | + first_mapping = dma_map_page(&gp->pdev->dev, |
|---|
| 1052 | + virt_to_page(skb->data), |
|---|
| 1062 | 1053 | offset_in_page(skb->data), |
|---|
| 1063 | | - first_len, PCI_DMA_TODEVICE); |
|---|
| 1054 | + first_len, DMA_TO_DEVICE); |
|---|
| 1064 | 1055 | entry = NEXT_TX(entry); |
|---|
| 1065 | 1056 | |
|---|
| 1066 | 1057 | for (frag = 0; frag < skb_shinfo(skb)->nr_frags; frag++) { |
|---|
| .. | .. |
|---|
| 1586 | 1577 | if (gp->rx_skbs[i] != NULL) { |
|---|
| 1587 | 1578 | skb = gp->rx_skbs[i]; |
|---|
| 1588 | 1579 | dma_addr = le64_to_cpu(rxd->buffer); |
|---|
| 1589 | | - pci_unmap_page(gp->pdev, dma_addr, |
|---|
| 1580 | + dma_unmap_page(&gp->pdev->dev, dma_addr, |
|---|
| 1590 | 1581 | RX_BUF_ALLOC_SIZE(gp), |
|---|
| 1591 | | - PCI_DMA_FROMDEVICE); |
|---|
| 1582 | + DMA_FROM_DEVICE); |
|---|
| 1592 | 1583 | dev_kfree_skb_any(skb); |
|---|
| 1593 | 1584 | gp->rx_skbs[i] = NULL; |
|---|
| 1594 | 1585 | } |
|---|
| .. | .. |
|---|
| 1610 | 1601 | |
|---|
| 1611 | 1602 | txd = &gb->txd[ent]; |
|---|
| 1612 | 1603 | dma_addr = le64_to_cpu(txd->buffer); |
|---|
| 1613 | | - pci_unmap_page(gp->pdev, dma_addr, |
|---|
| 1604 | + dma_unmap_page(&gp->pdev->dev, dma_addr, |
|---|
| 1614 | 1605 | le64_to_cpu(txd->control_word) & |
|---|
| 1615 | | - TXDCTRL_BUFSZ, PCI_DMA_TODEVICE); |
|---|
| 1606 | + TXDCTRL_BUFSZ, DMA_TO_DEVICE); |
|---|
| 1616 | 1607 | |
|---|
| 1617 | 1608 | if (frag != skb_shinfo(skb)->nr_frags) |
|---|
| 1618 | 1609 | i++; |
|---|
| .. | .. |
|---|
| 1649 | 1640 | |
|---|
| 1650 | 1641 | gp->rx_skbs[i] = skb; |
|---|
| 1651 | 1642 | skb_put(skb, (gp->rx_buf_sz + RX_OFFSET)); |
|---|
| 1652 | | - dma_addr = pci_map_page(gp->pdev, |
|---|
| 1643 | + dma_addr = dma_map_page(&gp->pdev->dev, |
|---|
| 1653 | 1644 | virt_to_page(skb->data), |
|---|
| 1654 | 1645 | offset_in_page(skb->data), |
|---|
| 1655 | 1646 | RX_BUF_ALLOC_SIZE(gp), |
|---|
| 1656 | | - PCI_DMA_FROMDEVICE); |
|---|
| 1647 | + DMA_FROM_DEVICE); |
|---|
| 1657 | 1648 | rxd->buffer = cpu_to_le64(dma_addr); |
|---|
| 1658 | 1649 | dma_wmb(); |
|---|
| 1659 | 1650 | rxd->status_word = cpu_to_le64(RXDCTRL_FRESH(gp)); |
|---|
| .. | .. |
|---|
| 2151 | 2142 | struct gem *gp = netdev_priv(dev); |
|---|
| 2152 | 2143 | int rc; |
|---|
| 2153 | 2144 | |
|---|
| 2154 | | - /* Enable the cell */ |
|---|
| 2155 | | - gem_get_cell(gp); |
|---|
| 2156 | | - |
|---|
| 2157 | | - /* Make sure PCI access and bus master are enabled */ |
|---|
| 2158 | | - rc = pci_enable_device(gp->pdev); |
|---|
| 2159 | | - if (rc) { |
|---|
| 2160 | | - netdev_err(dev, "Failed to enable chip on PCI bus !\n"); |
|---|
| 2161 | | - |
|---|
| 2162 | | - /* Put cell and forget it for now, it will be considered as |
|---|
| 2163 | | - * still asleep, a new sleep cycle may bring it back |
|---|
| 2164 | | - */ |
|---|
| 2165 | | - gem_put_cell(gp); |
|---|
| 2166 | | - return -ENXIO; |
|---|
| 2167 | | - } |
|---|
| 2168 | 2145 | pci_set_master(gp->pdev); |
|---|
| 2169 | 2146 | |
|---|
| 2170 | 2147 | /* Init & setup chip hardware */ |
|---|
| .. | .. |
|---|
| 2242 | 2219 | |
|---|
| 2243 | 2220 | /* Shut the PHY down eventually and setup WOL */ |
|---|
| 2244 | 2221 | gem_stop_phy(gp, wol); |
|---|
| 2245 | | - |
|---|
| 2246 | | - /* Make sure bus master is disabled */ |
|---|
| 2247 | | - pci_disable_device(gp->pdev); |
|---|
| 2248 | | - |
|---|
| 2249 | | - /* Cell not needed neither if no WOL */ |
|---|
| 2250 | | - if (!wol) |
|---|
| 2251 | | - gem_put_cell(gp); |
|---|
| 2252 | 2222 | } |
|---|
| 2253 | 2223 | |
|---|
| 2254 | 2224 | static void gem_reset_task(struct work_struct *work) |
|---|
| .. | .. |
|---|
| 2300 | 2270 | |
|---|
| 2301 | 2271 | static int gem_open(struct net_device *dev) |
|---|
| 2302 | 2272 | { |
|---|
| 2273 | + struct gem *gp = netdev_priv(dev); |
|---|
| 2274 | + int rc; |
|---|
| 2275 | + |
|---|
| 2303 | 2276 | /* We allow open while suspended, we just do nothing, |
|---|
| 2304 | 2277 | * the chip will be initialized in resume() |
|---|
| 2305 | 2278 | */ |
|---|
| 2306 | | - if (netif_device_present(dev)) |
|---|
| 2279 | + if (netif_device_present(dev)) { |
|---|
| 2280 | + /* Enable the cell */ |
|---|
| 2281 | + gem_get_cell(gp); |
|---|
| 2282 | + |
|---|
| 2283 | + /* Make sure PCI access and bus master are enabled */ |
|---|
| 2284 | + rc = pci_enable_device(gp->pdev); |
|---|
| 2285 | + if (rc) { |
|---|
| 2286 | + netdev_err(dev, "Failed to enable chip on PCI bus !\n"); |
|---|
| 2287 | + |
|---|
| 2288 | + /* Put cell and forget it for now, it will be considered |
|---|
| 2289 | + *as still asleep, a new sleep cycle may bring it back |
|---|
| 2290 | + */ |
|---|
| 2291 | + gem_put_cell(gp); |
|---|
| 2292 | + return -ENXIO; |
|---|
| 2293 | + } |
|---|
| 2307 | 2294 | return gem_do_start(dev); |
|---|
| 2295 | + } |
|---|
| 2296 | + |
|---|
| 2308 | 2297 | return 0; |
|---|
| 2309 | 2298 | } |
|---|
| 2310 | 2299 | |
|---|
| 2311 | 2300 | static int gem_close(struct net_device *dev) |
|---|
| 2312 | 2301 | { |
|---|
| 2313 | | - if (netif_device_present(dev)) |
|---|
| 2302 | + struct gem *gp = netdev_priv(dev); |
|---|
| 2303 | + |
|---|
| 2304 | + if (netif_device_present(dev)) { |
|---|
| 2314 | 2305 | gem_do_stop(dev, 0); |
|---|
| 2315 | 2306 | |
|---|
| 2307 | + /* Make sure bus master is disabled */ |
|---|
| 2308 | + pci_disable_device(gp->pdev); |
|---|
| 2309 | + |
|---|
| 2310 | + /* Cell not needed neither if no WOL */ |
|---|
| 2311 | + if (!gp->asleep_wol) |
|---|
| 2312 | + gem_put_cell(gp); |
|---|
| 2313 | + } |
|---|
| 2316 | 2314 | return 0; |
|---|
| 2317 | 2315 | } |
|---|
| 2318 | 2316 | |
|---|
| 2319 | | -#ifdef CONFIG_PM |
|---|
| 2320 | | -static int gem_suspend(struct pci_dev *pdev, pm_message_t state) |
|---|
| 2317 | +static int __maybe_unused gem_suspend(struct device *dev_d) |
|---|
| 2321 | 2318 | { |
|---|
| 2322 | | - struct net_device *dev = pci_get_drvdata(pdev); |
|---|
| 2319 | + struct net_device *dev = dev_get_drvdata(dev_d); |
|---|
| 2323 | 2320 | struct gem *gp = netdev_priv(dev); |
|---|
| 2324 | 2321 | |
|---|
| 2325 | 2322 | /* Lock the network stack first to avoid racing with open/close, |
|---|
| .. | .. |
|---|
| 2348 | 2345 | gp->asleep_wol = !!gp->wake_on_lan; |
|---|
| 2349 | 2346 | gem_do_stop(dev, gp->asleep_wol); |
|---|
| 2350 | 2347 | |
|---|
| 2348 | + /* Cell not needed neither if no WOL */ |
|---|
| 2349 | + if (!gp->asleep_wol) |
|---|
| 2350 | + gem_put_cell(gp); |
|---|
| 2351 | + |
|---|
| 2351 | 2352 | /* Unlock the network stack */ |
|---|
| 2352 | 2353 | rtnl_unlock(); |
|---|
| 2353 | 2354 | |
|---|
| 2354 | 2355 | return 0; |
|---|
| 2355 | 2356 | } |
|---|
| 2356 | 2357 | |
|---|
| 2357 | | -static int gem_resume(struct pci_dev *pdev) |
|---|
| 2358 | +static int __maybe_unused gem_resume(struct device *dev_d) |
|---|
| 2358 | 2359 | { |
|---|
| 2359 | | - struct net_device *dev = pci_get_drvdata(pdev); |
|---|
| 2360 | + struct net_device *dev = dev_get_drvdata(dev_d); |
|---|
| 2360 | 2361 | struct gem *gp = netdev_priv(dev); |
|---|
| 2361 | 2362 | |
|---|
| 2362 | 2363 | /* See locking comment in gem_suspend */ |
|---|
| .. | .. |
|---|
| 2370 | 2371 | rtnl_unlock(); |
|---|
| 2371 | 2372 | return 0; |
|---|
| 2372 | 2373 | } |
|---|
| 2374 | + |
|---|
| 2375 | + /* Enable the cell */ |
|---|
| 2376 | + gem_get_cell(gp); |
|---|
| 2373 | 2377 | |
|---|
| 2374 | 2378 | /* Restart chip. If that fails there isn't much we can do, we |
|---|
| 2375 | 2379 | * leave things stopped. |
|---|
| .. | .. |
|---|
| 2387 | 2391 | |
|---|
| 2388 | 2392 | return 0; |
|---|
| 2389 | 2393 | } |
|---|
| 2390 | | -#endif /* CONFIG_PM */ |
|---|
| 2391 | 2394 | |
|---|
| 2392 | 2395 | static struct net_device_stats *gem_get_stats(struct net_device *dev) |
|---|
| 2393 | 2396 | { |
|---|
| .. | .. |
|---|
| 2709 | 2712 | switch (cmd) { |
|---|
| 2710 | 2713 | case SIOCGMIIPHY: /* Get address of MII PHY in use. */ |
|---|
| 2711 | 2714 | data->phy_id = gp->mii_phy_addr; |
|---|
| 2712 | | - /* Fallthrough... */ |
|---|
| 2715 | + fallthrough; |
|---|
| 2713 | 2716 | |
|---|
| 2714 | 2717 | case SIOCGMIIREG: /* Read MII PHY register. */ |
|---|
| 2715 | 2718 | data->val_out = __sungem_phy_read(gp, data->phy_id & 0x1f, |
|---|
| .. | .. |
|---|
| 2760 | 2763 | void __iomem *p = pci_map_rom(pdev, &size); |
|---|
| 2761 | 2764 | |
|---|
| 2762 | 2765 | if (p) { |
|---|
| 2763 | | - int found; |
|---|
| 2766 | + int found; |
|---|
| 2764 | 2767 | |
|---|
| 2765 | 2768 | found = readb(p) == 0x55 && |
|---|
| 2766 | 2769 | readb(p + 1) == 0xaa && |
|---|
| .. | .. |
|---|
| 2814 | 2817 | cancel_work_sync(&gp->reset_task); |
|---|
| 2815 | 2818 | |
|---|
| 2816 | 2819 | /* Free resources */ |
|---|
| 2817 | | - pci_free_consistent(pdev, |
|---|
| 2818 | | - sizeof(struct gem_init_block), |
|---|
| 2819 | | - gp->init_block, |
|---|
| 2820 | | - gp->gblock_dvma); |
|---|
| 2820 | + dma_free_coherent(&pdev->dev, sizeof(struct gem_init_block), |
|---|
| 2821 | + gp->init_block, gp->gblock_dvma); |
|---|
| 2821 | 2822 | iounmap(gp->regs); |
|---|
| 2822 | 2823 | pci_release_regions(pdev); |
|---|
| 2823 | 2824 | free_netdev(dev); |
|---|
| .. | .. |
|---|
| 2873 | 2874 | */ |
|---|
| 2874 | 2875 | if (pdev->vendor == PCI_VENDOR_ID_SUN && |
|---|
| 2875 | 2876 | pdev->device == PCI_DEVICE_ID_SUN_GEM && |
|---|
| 2876 | | - !pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) { |
|---|
| 2877 | + !dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) { |
|---|
| 2877 | 2878 | pci_using_dac = 1; |
|---|
| 2878 | 2879 | } else { |
|---|
| 2879 | | - err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); |
|---|
| 2880 | + err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); |
|---|
| 2880 | 2881 | if (err) { |
|---|
| 2881 | 2882 | pr_err("No usable DMA configuration, aborting\n"); |
|---|
| 2882 | 2883 | goto err_disable_device; |
|---|
| .. | .. |
|---|
| 2964 | 2965 | /* It is guaranteed that the returned buffer will be at least |
|---|
| 2965 | 2966 | * PAGE_SIZE aligned. |
|---|
| 2966 | 2967 | */ |
|---|
| 2967 | | - gp->init_block = (struct gem_init_block *) |
|---|
| 2968 | | - pci_alloc_consistent(pdev, sizeof(struct gem_init_block), |
|---|
| 2969 | | - &gp->gblock_dvma); |
|---|
| 2968 | + gp->init_block = dma_alloc_coherent(&pdev->dev, sizeof(struct gem_init_block), |
|---|
| 2969 | + &gp->gblock_dvma, GFP_KERNEL); |
|---|
| 2970 | 2970 | if (!gp->init_block) { |
|---|
| 2971 | 2971 | pr_err("Cannot allocate init block, aborting\n"); |
|---|
| 2972 | 2972 | err = -ENOMEM; |
|---|
| .. | .. |
|---|
| 3031 | 3031 | |
|---|
| 3032 | 3032 | } |
|---|
| 3033 | 3033 | |
|---|
| 3034 | +static SIMPLE_DEV_PM_OPS(gem_pm_ops, gem_suspend, gem_resume); |
|---|
| 3034 | 3035 | |
|---|
| 3035 | 3036 | static struct pci_driver gem_driver = { |
|---|
| 3036 | 3037 | .name = GEM_MODULE_NAME, |
|---|
| 3037 | 3038 | .id_table = gem_pci_tbl, |
|---|
| 3038 | 3039 | .probe = gem_init_one, |
|---|
| 3039 | 3040 | .remove = gem_remove_one, |
|---|
| 3040 | | -#ifdef CONFIG_PM |
|---|
| 3041 | | - .suspend = gem_suspend, |
|---|
| 3042 | | - .resume = gem_resume, |
|---|
| 3043 | | -#endif /* CONFIG_PM */ |
|---|
| 3041 | + .driver.pm = &gem_pm_ops, |
|---|
| 3044 | 3042 | }; |
|---|
| 3045 | 3043 | |
|---|
| 3046 | 3044 | module_pci_driver(gem_driver); |
|---|