diff options
Diffstat (limited to 'drivers/net/myri10ge/myri10ge.c')
| -rw-r--r-- | drivers/net/myri10ge/myri10ge.c | 47 |
1 files changed, 9 insertions, 38 deletions
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c index 1ce3c9e5c890..9bc5dab949fd 100644 --- a/drivers/net/myri10ge/myri10ge.c +++ b/drivers/net/myri10ge/myri10ge.c | |||
| @@ -199,8 +199,6 @@ struct myri10ge_priv { | |||
| 199 | unsigned long serial_number; | 199 | unsigned long serial_number; |
| 200 | int vendor_specific_offset; | 200 | int vendor_specific_offset; |
| 201 | int fw_multicast_support; | 201 | int fw_multicast_support; |
| 202 | u32 devctl; | ||
| 203 | u16 msi_flags; | ||
| 204 | u32 read_dma; | 202 | u32 read_dma; |
| 205 | u32 write_dma; | 203 | u32 write_dma; |
| 206 | u32 read_write_dma; | 204 | u32 read_write_dma; |
| @@ -2520,34 +2518,6 @@ static void myri10ge_select_firmware(struct myri10ge_priv *mgp) | |||
| 2520 | } | 2518 | } |
| 2521 | } | 2519 | } |
| 2522 | 2520 | ||
| 2523 | static void myri10ge_save_state(struct myri10ge_priv *mgp) | ||
| 2524 | { | ||
| 2525 | struct pci_dev *pdev = mgp->pdev; | ||
| 2526 | int cap; | ||
| 2527 | |||
| 2528 | pci_save_state(pdev); | ||
| 2529 | /* now save PCIe and MSI state that Linux will not | ||
| 2530 | * save for us */ | ||
| 2531 | cap = pci_find_capability(pdev, PCI_CAP_ID_EXP); | ||
| 2532 | pci_read_config_dword(pdev, cap + PCI_EXP_DEVCTL, &mgp->devctl); | ||
| 2533 | cap = pci_find_capability(pdev, PCI_CAP_ID_MSI); | ||
| 2534 | pci_read_config_word(pdev, cap + PCI_MSI_FLAGS, &mgp->msi_flags); | ||
| 2535 | } | ||
| 2536 | |||
| 2537 | static void myri10ge_restore_state(struct myri10ge_priv *mgp) | ||
| 2538 | { | ||
| 2539 | struct pci_dev *pdev = mgp->pdev; | ||
| 2540 | int cap; | ||
| 2541 | |||
| 2542 | /* restore PCIe and MSI state that linux will not */ | ||
| 2543 | cap = pci_find_capability(pdev, PCI_CAP_ID_EXP); | ||
| 2544 | pci_write_config_dword(pdev, cap + PCI_CAP_ID_EXP, mgp->devctl); | ||
| 2545 | cap = pci_find_capability(pdev, PCI_CAP_ID_MSI); | ||
| 2546 | pci_write_config_word(pdev, cap + PCI_MSI_FLAGS, mgp->msi_flags); | ||
| 2547 | |||
| 2548 | pci_restore_state(pdev); | ||
| 2549 | } | ||
| 2550 | |||
| 2551 | #ifdef CONFIG_PM | 2521 | #ifdef CONFIG_PM |
| 2552 | 2522 | ||
| 2553 | static int myri10ge_suspend(struct pci_dev *pdev, pm_message_t state) | 2523 | static int myri10ge_suspend(struct pci_dev *pdev, pm_message_t state) |
| @@ -2568,7 +2538,7 @@ static int myri10ge_suspend(struct pci_dev *pdev, pm_message_t state) | |||
| 2568 | rtnl_unlock(); | 2538 | rtnl_unlock(); |
| 2569 | } | 2539 | } |
| 2570 | myri10ge_dummy_rdma(mgp, 0); | 2540 | myri10ge_dummy_rdma(mgp, 0); |
| 2571 | myri10ge_save_state(mgp); | 2541 | pci_save_state(pdev); |
| 2572 | pci_disable_device(pdev); | 2542 | pci_disable_device(pdev); |
| 2573 | pci_set_power_state(pdev, pci_choose_state(pdev, state)); | 2543 | pci_set_power_state(pdev, pci_choose_state(pdev, state)); |
| 2574 | return 0; | 2544 | return 0; |
| @@ -2593,7 +2563,8 @@ static int myri10ge_resume(struct pci_dev *pdev) | |||
| 2593 | mgp->dev->name); | 2563 | mgp->dev->name); |
| 2594 | return -EIO; | 2564 | return -EIO; |
| 2595 | } | 2565 | } |
| 2596 | myri10ge_restore_state(mgp); | 2566 | |
| 2567 | pci_restore_state(pdev); | ||
| 2597 | 2568 | ||
| 2598 | status = pci_enable_device(pdev); | 2569 | status = pci_enable_device(pdev); |
| 2599 | if (status < 0) { | 2570 | if (status < 0) { |
| @@ -2608,7 +2579,7 @@ static int myri10ge_resume(struct pci_dev *pdev) | |||
| 2608 | 2579 | ||
| 2609 | /* Save configuration space to be restored if the | 2580 | /* Save configuration space to be restored if the |
| 2610 | * nic resets due to a parity error */ | 2581 | * nic resets due to a parity error */ |
| 2611 | myri10ge_save_state(mgp); | 2582 | pci_save_state(pdev); |
| 2612 | 2583 | ||
| 2613 | if (netif_running(netdev)) { | 2584 | if (netif_running(netdev)) { |
| 2614 | rtnl_lock(); | 2585 | rtnl_lock(); |
| @@ -2674,10 +2645,10 @@ static void myri10ge_watchdog(struct work_struct *work) | |||
| 2674 | * when the driver was loaded, or the last time the | 2645 | * when the driver was loaded, or the last time the |
| 2675 | * nic was resumed from power saving mode. | 2646 | * nic was resumed from power saving mode. |
| 2676 | */ | 2647 | */ |
| 2677 | myri10ge_restore_state(mgp); | 2648 | pci_restore_state(mgp->pdev); |
| 2678 | 2649 | ||
| 2679 | /* save state again for accounting reasons */ | 2650 | /* save state again for accounting reasons */ |
| 2680 | myri10ge_save_state(mgp); | 2651 | pci_save_state(mgp->pdev); |
| 2681 | 2652 | ||
| 2682 | } else { | 2653 | } else { |
| 2683 | /* if we get back -1's from our slot, perhaps somebody | 2654 | /* if we get back -1's from our slot, perhaps somebody |
| @@ -2917,7 +2888,7 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 2917 | 2888 | ||
| 2918 | /* Save configuration space to be restored if the | 2889 | /* Save configuration space to be restored if the |
| 2919 | * nic resets due to a parity error */ | 2890 | * nic resets due to a parity error */ |
| 2920 | myri10ge_save_state(mgp); | 2891 | pci_save_state(pdev); |
| 2921 | 2892 | ||
| 2922 | /* Setup the watchdog timer */ | 2893 | /* Setup the watchdog timer */ |
| 2923 | setup_timer(&mgp->watchdog_timer, myri10ge_watchdog_timer, | 2894 | setup_timer(&mgp->watchdog_timer, myri10ge_watchdog_timer, |
| @@ -2937,7 +2908,7 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
| 2937 | return 0; | 2908 | return 0; |
| 2938 | 2909 | ||
| 2939 | abort_with_state: | 2910 | abort_with_state: |
| 2940 | myri10ge_restore_state(mgp); | 2911 | pci_restore_state(pdev); |
| 2941 | 2912 | ||
| 2942 | abort_with_firmware: | 2913 | abort_with_firmware: |
| 2943 | myri10ge_dummy_rdma(mgp, 0); | 2914 | myri10ge_dummy_rdma(mgp, 0); |
| @@ -2992,7 +2963,7 @@ static void myri10ge_remove(struct pci_dev *pdev) | |||
| 2992 | myri10ge_dummy_rdma(mgp, 0); | 2963 | myri10ge_dummy_rdma(mgp, 0); |
| 2993 | 2964 | ||
| 2994 | /* avoid a memory leak */ | 2965 | /* avoid a memory leak */ |
| 2995 | myri10ge_restore_state(mgp); | 2966 | pci_restore_state(pdev); |
| 2996 | 2967 | ||
| 2997 | bytes = myri10ge_max_intr_slots * sizeof(*mgp->rx_done.entry); | 2968 | bytes = myri10ge_max_intr_slots * sizeof(*mgp->rx_done.entry); |
| 2998 | dma_free_coherent(&pdev->dev, bytes, | 2969 | dma_free_coherent(&pdev->dev, bytes, |
