@@ -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 |
@@ -3958,23 +3928,55 @@ static void rtl8169_tx_clear(struct rtl8169_private *tp)
3958
3928
netdev_reset_queue (tp -> dev );
3959
3929
}
3960
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
+
3961
3967
static void rtl_reset_work (struct rtl8169_private * tp )
3962
3968
{
3963
3969
struct net_device * dev = tp -> dev ;
3964
3970
int i ;
3965
3971
3966
3972
napi_disable (& tp -> napi );
3967
3973
netif_stop_queue (dev );
3968
- synchronize_rcu ();
3969
3974
3970
3975
rtl8169_hw_reset (tp );
3971
3976
3972
3977
for (i = 0 ; i < NUM_RX_DESC ; i ++ )
3973
3978
rtl8169_mark_to_asic (tp -> RxDescArray + i );
3974
3979
3975
- rtl8169_tx_clear (tp );
3976
- rtl8169_init_ring_indexes (tp );
3977
-
3978
3980
napi_enable (& tp -> napi );
3979
3981
rtl_hw_start (tp );
3980
3982
netif_wake_queue (dev );
@@ -4636,11 +4638,6 @@ static void rtl8169_down(struct net_device *dev)
4636
4638
4637
4639
rtl8169_hw_reset (tp );
4638
4640
4639
- /* Give a racing hard_start_xmit a few cycles to complete. */
4640
- synchronize_rcu ();
4641
-
4642
- rtl8169_tx_clear (tp );
4643
-
4644
4641
rtl8169_rx_clear (tp );
4645
4642
4646
4643
rtl_pll_power_down (tp );
0 commit comments