@@ -2530,36 +2530,6 @@ static void rtl_enable_rxdvgate(struct rtl8169_private *tp)
2530
2530
rtl_wait_txrx_fifo_empty (tp );
2531
2531
}
2532
2532
2533
- static void rtl8169_hw_reset (struct rtl8169_private * tp )
2534
- {
2535
- /* Disable interrupts */
2536
- rtl8169_irq_mask_and_ack (tp );
2537
-
2538
- rtl_rx_close (tp );
2539
-
2540
- switch (tp -> mac_version ) {
2541
- case RTL_GIGA_MAC_VER_27 :
2542
- case RTL_GIGA_MAC_VER_28 :
2543
- case RTL_GIGA_MAC_VER_31 :
2544
- rtl_loop_wait_low (tp , & rtl_npq_cond , 20 , 2000 );
2545
- break ;
2546
- case RTL_GIGA_MAC_VER_34 ... RTL_GIGA_MAC_VER_38 :
2547
- RTL_W8 (tp , ChipCmd , RTL_R8 (tp , ChipCmd ) | StopReq );
2548
- rtl_loop_wait_high (tp , & rtl_txcfg_empty_cond , 100 , 666 );
2549
- break ;
2550
- case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_61 :
2551
- rtl_enable_rxdvgate (tp );
2552
- fsleep (2000 );
2553
- break ;
2554
- default :
2555
- RTL_W8 (tp , ChipCmd , RTL_R8 (tp , ChipCmd ) | StopReq );
2556
- udelay (100 );
2557
- break ;
2558
- }
2559
-
2560
- rtl_hw_reset (tp );
2561
- }
2562
-
2563
2533
static void rtl_set_tx_config_registers (struct rtl8169_private * tp )
2564
2534
{
2565
2535
u32 val = TX_DMA_BURST << TxDMAShift |
@@ -3955,27 +3925,58 @@ static void rtl8169_tx_clear_range(struct rtl8169_private *tp, u32 start,
3955
3925
static void rtl8169_tx_clear (struct rtl8169_private * tp )
3956
3926
{
3957
3927
rtl8169_tx_clear_range (tp , tp -> dirty_tx , NUM_TX_DESC );
3958
- tp -> cur_tx = tp -> dirty_tx = 0 ;
3959
3928
netdev_reset_queue (tp -> dev );
3960
3929
}
3961
3930
3931
+ static void rtl8169_hw_reset (struct rtl8169_private * tp )
3932
+ {
3933
+ /* Give a racing hard_start_xmit a few cycles to complete. */
3934
+ synchronize_rcu ();
3935
+
3936
+ /* Disable interrupts */
3937
+ rtl8169_irq_mask_and_ack (tp );
3938
+
3939
+ rtl_rx_close (tp );
3940
+
3941
+ switch (tp -> mac_version ) {
3942
+ case RTL_GIGA_MAC_VER_27 :
3943
+ case RTL_GIGA_MAC_VER_28 :
3944
+ case RTL_GIGA_MAC_VER_31 :
3945
+ rtl_loop_wait_low (tp , & rtl_npq_cond , 20 , 2000 );
3946
+ break ;
3947
+ case RTL_GIGA_MAC_VER_34 ... RTL_GIGA_MAC_VER_38 :
3948
+ RTL_W8 (tp , ChipCmd , RTL_R8 (tp , ChipCmd ) | StopReq );
3949
+ rtl_loop_wait_high (tp , & rtl_txcfg_empty_cond , 100 , 666 );
3950
+ break ;
3951
+ case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_61 :
3952
+ rtl_enable_rxdvgate (tp );
3953
+ fsleep (2000 );
3954
+ break ;
3955
+ default :
3956
+ RTL_W8 (tp , ChipCmd , RTL_R8 (tp , ChipCmd ) | StopReq );
3957
+ fsleep (100 );
3958
+ break ;
3959
+ }
3960
+
3961
+ rtl_hw_reset (tp );
3962
+
3963
+ rtl8169_tx_clear (tp );
3964
+ rtl8169_init_ring_indexes (tp );
3965
+ }
3966
+
3962
3967
static void rtl_reset_work (struct rtl8169_private * tp )
3963
3968
{
3964
3969
struct net_device * dev = tp -> dev ;
3965
3970
int i ;
3966
3971
3967
3972
napi_disable (& tp -> napi );
3968
3973
netif_stop_queue (dev );
3969
- synchronize_rcu ();
3970
3974
3971
3975
rtl8169_hw_reset (tp );
3972
3976
3973
3977
for (i = 0 ; i < NUM_RX_DESC ; i ++ )
3974
3978
rtl8169_mark_to_asic (tp -> RxDescArray + i );
3975
3979
3976
- rtl8169_tx_clear (tp );
3977
- rtl8169_init_ring_indexes (tp );
3978
-
3979
3980
napi_enable (& tp -> napi );
3980
3981
rtl_hw_start (tp );
3981
3982
netif_wake_queue (dev );
@@ -4626,25 +4627,21 @@ static int r8169_phy_connect(struct rtl8169_private *tp)
4626
4627
return 0 ;
4627
4628
}
4628
4629
4629
- static void rtl8169_down (struct net_device * dev )
4630
+ static void rtl8169_down (struct rtl8169_private * tp )
4630
4631
{
4631
- struct rtl8169_private * tp = netdev_priv ( dev );
4632
+ rtl_lock_work ( tp );
4632
4633
4633
- phy_stop (tp -> phydev );
4634
+ /* Clear all task flags */
4635
+ bitmap_zero (tp -> wk .flags , RTL_FLAG_MAX );
4634
4636
4637
+ phy_stop (tp -> phydev );
4635
4638
napi_disable (& tp -> napi );
4636
- netif_stop_queue (dev );
4637
4639
4638
4640
rtl8169_hw_reset (tp );
4639
4641
4640
- /* Give a racing hard_start_xmit a few cycles to complete. */
4641
- synchronize_rcu ();
4642
-
4643
- rtl8169_tx_clear (tp );
4644
-
4645
- rtl8169_rx_clear (tp );
4646
-
4647
4642
rtl_pll_power_down (tp );
4643
+
4644
+ rtl_unlock_work (tp );
4648
4645
}
4649
4646
4650
4647
static int rtl8169_close (struct net_device * dev )
@@ -4657,12 +4654,9 @@ static int rtl8169_close(struct net_device *dev)
4657
4654
/* Update counters before going down */
4658
4655
rtl8169_update_counters (tp );
4659
4656
4660
- rtl_lock_work (tp );
4661
- /* Clear all task flags */
4662
- bitmap_zero (tp -> wk .flags , RTL_FLAG_MAX );
4663
-
4664
- rtl8169_down (dev );
4665
- rtl_unlock_work (tp );
4657
+ netif_stop_queue (dev );
4658
+ rtl8169_down (tp );
4659
+ rtl8169_rx_clear (tp );
4666
4660
4667
4661
cancel_work_sync (& tp -> wk .work );
4668
4662
@@ -4816,44 +4810,30 @@ rtl8169_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
4816
4810
pm_runtime_put_noidle (& pdev -> dev );
4817
4811
}
4818
4812
4819
- static void rtl8169_net_suspend (struct net_device * dev )
4813
+ static void rtl8169_net_suspend (struct rtl8169_private * tp )
4820
4814
{
4821
- struct rtl8169_private * tp = netdev_priv (dev );
4822
-
4823
- if (!netif_running (dev ))
4815
+ if (!netif_running (tp -> dev ))
4824
4816
return ;
4825
4817
4826
- phy_stop (tp -> phydev );
4827
- netif_device_detach (dev );
4828
-
4829
- rtl_lock_work (tp );
4830
- napi_disable (& tp -> napi );
4831
- /* Clear all task flags */
4832
- bitmap_zero (tp -> wk .flags , RTL_FLAG_MAX );
4833
-
4834
- rtl_unlock_work (tp );
4835
-
4836
- rtl_pll_power_down (tp );
4818
+ netif_device_detach (tp -> dev );
4819
+ rtl8169_down (tp );
4837
4820
}
4838
4821
4839
4822
#ifdef CONFIG_PM
4840
4823
4841
- static int rtl8169_suspend (struct device * device )
4824
+ static int __maybe_unused rtl8169_suspend (struct device * device )
4842
4825
{
4843
- struct net_device * dev = dev_get_drvdata (device );
4844
- struct rtl8169_private * tp = netdev_priv (dev );
4826
+ struct rtl8169_private * tp = dev_get_drvdata (device );
4845
4827
4846
- rtl8169_net_suspend (dev );
4828
+ rtl8169_net_suspend (tp );
4847
4829
clk_disable_unprepare (tp -> clk );
4848
4830
4849
4831
return 0 ;
4850
4832
}
4851
4833
4852
- static void __rtl8169_resume (struct net_device * dev )
4834
+ static void __rtl8169_resume (struct rtl8169_private * tp )
4853
4835
{
4854
- struct rtl8169_private * tp = netdev_priv (dev );
4855
-
4856
- netif_device_attach (dev );
4836
+ netif_device_attach (tp -> dev );
4857
4837
4858
4838
rtl_pll_power_up (tp );
4859
4839
rtl8169_init_phy (tp );
@@ -4867,34 +4847,32 @@ static void __rtl8169_resume(struct net_device *dev)
4867
4847
rtl_unlock_work (tp );
4868
4848
}
4869
4849
4870
- static int rtl8169_resume (struct device * device )
4850
+ static int __maybe_unused rtl8169_resume (struct device * device )
4871
4851
{
4872
- struct net_device * dev = dev_get_drvdata (device );
4873
- struct rtl8169_private * tp = netdev_priv (dev );
4852
+ struct rtl8169_private * tp = dev_get_drvdata (device );
4874
4853
4875
- rtl_rar_set (tp , dev -> dev_addr );
4854
+ rtl_rar_set (tp , tp -> dev -> dev_addr );
4876
4855
4877
4856
clk_prepare_enable (tp -> clk );
4878
4857
4879
- if (netif_running (dev ))
4880
- __rtl8169_resume (dev );
4858
+ if (netif_running (tp -> dev ))
4859
+ __rtl8169_resume (tp );
4881
4860
4882
4861
return 0 ;
4883
4862
}
4884
4863
4885
4864
static int rtl8169_runtime_suspend (struct device * device )
4886
4865
{
4887
- struct net_device * dev = dev_get_drvdata (device );
4888
- struct rtl8169_private * tp = netdev_priv (dev );
4866
+ struct rtl8169_private * tp = dev_get_drvdata (device );
4889
4867
4890
4868
if (!tp -> TxDescArray )
4891
4869
return 0 ;
4892
4870
4893
4871
rtl_lock_work (tp );
4894
- __rtl8169_set_wol (tp , WAKE_ANY );
4872
+ __rtl8169_set_wol (tp , WAKE_PHY );
4895
4873
rtl_unlock_work (tp );
4896
4874
4897
- rtl8169_net_suspend (dev );
4875
+ rtl8169_net_suspend (tp );
4898
4876
4899
4877
/* Update counters before going runtime suspend */
4900
4878
rtl8169_update_counters (tp );
@@ -4904,10 +4882,9 @@ static int rtl8169_runtime_suspend(struct device *device)
4904
4882
4905
4883
static int rtl8169_runtime_resume (struct device * device )
4906
4884
{
4907
- struct net_device * dev = dev_get_drvdata (device );
4908
- struct rtl8169_private * tp = netdev_priv (dev );
4885
+ struct rtl8169_private * tp = dev_get_drvdata (device );
4909
4886
4910
- rtl_rar_set (tp , dev -> dev_addr );
4887
+ rtl_rar_set (tp , tp -> dev -> dev_addr );
4911
4888
4912
4889
if (!tp -> TxDescArray )
4913
4890
return 0 ;
@@ -4916,40 +4893,28 @@ static int rtl8169_runtime_resume(struct device *device)
4916
4893
__rtl8169_set_wol (tp , tp -> saved_wolopts );
4917
4894
rtl_unlock_work (tp );
4918
4895
4919
- __rtl8169_resume (dev );
4896
+ __rtl8169_resume (tp );
4920
4897
4921
4898
return 0 ;
4922
4899
}
4923
4900
4924
4901
static int rtl8169_runtime_idle (struct device * device )
4925
4902
{
4926
- struct net_device * dev = dev_get_drvdata (device );
4903
+ struct rtl8169_private * tp = dev_get_drvdata (device );
4927
4904
4928
- if (!netif_running (dev ) || !netif_carrier_ok (dev ))
4905
+ if (!netif_running (tp -> dev ) || !netif_carrier_ok (tp -> dev ))
4929
4906
pm_schedule_suspend (device , 10000 );
4930
4907
4931
4908
return - EBUSY ;
4932
4909
}
4933
4910
4934
4911
static const struct dev_pm_ops rtl8169_pm_ops = {
4935
- .suspend = rtl8169_suspend ,
4936
- .resume = rtl8169_resume ,
4937
- .freeze = rtl8169_suspend ,
4938
- .thaw = rtl8169_resume ,
4939
- .poweroff = rtl8169_suspend ,
4940
- .restore = rtl8169_resume ,
4941
- .runtime_suspend = rtl8169_runtime_suspend ,
4942
- .runtime_resume = rtl8169_runtime_resume ,
4943
- .runtime_idle = rtl8169_runtime_idle ,
4912
+ SET_SYSTEM_SLEEP_PM_OPS (rtl8169_suspend , rtl8169_resume )
4913
+ SET_RUNTIME_PM_OPS (rtl8169_runtime_suspend , rtl8169_runtime_resume ,
4914
+ rtl8169_runtime_idle )
4944
4915
};
4945
4916
4946
- #define RTL8169_PM_OPS (&rtl8169_pm_ops)
4947
-
4948
- #else /* !CONFIG_PM */
4949
-
4950
- #define RTL8169_PM_OPS NULL
4951
-
4952
- #endif /* !CONFIG_PM */
4917
+ #endif /* CONFIG_PM */
4953
4918
4954
4919
static void rtl_wol_shutdown_quirk (struct rtl8169_private * tp )
4955
4920
{
@@ -4970,13 +4935,12 @@ static void rtl_wol_shutdown_quirk(struct rtl8169_private *tp)
4970
4935
4971
4936
static void rtl_shutdown (struct pci_dev * pdev )
4972
4937
{
4973
- struct net_device * dev = pci_get_drvdata (pdev );
4974
- struct rtl8169_private * tp = netdev_priv (dev );
4938
+ struct rtl8169_private * tp = pci_get_drvdata (pdev );
4975
4939
4976
- rtl8169_net_suspend (dev );
4940
+ rtl8169_net_suspend (tp );
4977
4941
4978
4942
/* Restore original MAC address */
4979
- rtl_rar_set (tp , dev -> perm_addr );
4943
+ rtl_rar_set (tp , tp -> dev -> perm_addr );
4980
4944
4981
4945
rtl8169_hw_reset (tp );
4982
4946
@@ -4993,21 +4957,20 @@ static void rtl_shutdown(struct pci_dev *pdev)
4993
4957
4994
4958
static void rtl_remove_one (struct pci_dev * pdev )
4995
4959
{
4996
- struct net_device * dev = pci_get_drvdata (pdev );
4997
- struct rtl8169_private * tp = netdev_priv (dev );
4960
+ struct rtl8169_private * tp = pci_get_drvdata (pdev );
4998
4961
4999
4962
if (pci_dev_run_wake (pdev ))
5000
4963
pm_runtime_get_noresume (& pdev -> dev );
5001
4964
5002
- unregister_netdev (dev );
4965
+ unregister_netdev (tp -> dev );
5003
4966
5004
4967
if (r8168_check_dash (tp ))
5005
4968
rtl8168_driver_stop (tp );
5006
4969
5007
4970
rtl_release_firmware (tp );
5008
4971
5009
4972
/* restore original MAC address */
5010
- rtl_rar_set (tp , dev -> perm_addr );
4973
+ rtl_rar_set (tp , tp -> dev -> perm_addr );
5011
4974
}
5012
4975
5013
4976
static const struct net_device_ops rtl_netdev_ops = {
@@ -5446,7 +5409,7 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
5446
5409
if (!tp -> counters )
5447
5410
return - ENOMEM ;
5448
5411
5449
- pci_set_drvdata (pdev , dev );
5412
+ pci_set_drvdata (pdev , tp );
5450
5413
5451
5414
rc = r8169_mdio_register (tp );
5452
5415
if (rc )
@@ -5483,7 +5446,9 @@ static struct pci_driver rtl8169_pci_driver = {
5483
5446
.probe = rtl_init_one ,
5484
5447
.remove = rtl_remove_one ,
5485
5448
.shutdown = rtl_shutdown ,
5486
- .driver .pm = RTL8169_PM_OPS ,
5449
+ #ifdef CONFIG_PM
5450
+ .driver .pm = & rtl8169_pm_ops ,
5451
+ #endif
5487
5452
};
5488
5453
5489
5454
module_pci_driver (rtl8169_pci_driver );
0 commit comments