2911 /* hardware has been reset, we need to reload some things */ |
2911 /* hardware has been reset, we need to reload some things */ |
2912 e1000_configure(adapter); |
2912 e1000_configure(adapter); |
2913 |
2913 |
2914 clear_bit(__E1000_DOWN, &adapter->state); |
2914 clear_bit(__E1000_DOWN, &adapter->state); |
2915 |
2915 |
2916 if (!adapter->ecdev) |
2916 if (!adapter->ecdev) |
2917 napi_enable(&adapter->napi); |
2917 napi_enable(&adapter->napi); |
2918 |
2918 |
2919 if (adapter->msix_entries) |
2919 if (adapter->msix_entries) |
2920 e1000_configure_msix(adapter); |
2920 e1000_configure_msix(adapter); |
2921 |
2921 |
2945 /* disable receives in the hardware */ |
2945 /* disable receives in the hardware */ |
2946 rctl = er32(RCTL); |
2946 rctl = er32(RCTL); |
2947 ew32(RCTL, rctl & ~E1000_RCTL_EN); |
2947 ew32(RCTL, rctl & ~E1000_RCTL_EN); |
2948 /* flush and sleep below */ |
2948 /* flush and sleep below */ |
2949 |
2949 |
2950 if (!adapter->ecdev) |
2950 if (!adapter->ecdev) |
2951 netif_stop_queue(netdev); |
2951 netif_stop_queue(netdev); |
2952 |
2952 |
2953 /* disable transmits in the hardware */ |
2953 /* disable transmits in the hardware */ |
2954 tctl = er32(TCTL); |
2954 tctl = er32(TCTL); |
2955 tctl &= ~E1000_TCTL_EN; |
2955 tctl &= ~E1000_TCTL_EN; |
3235 } |
3235 } |
3236 |
3236 |
3237 /* From here on the code is the same as e1000e_up() */ |
3237 /* From here on the code is the same as e1000e_up() */ |
3238 clear_bit(__E1000_DOWN, &adapter->state); |
3238 clear_bit(__E1000_DOWN, &adapter->state); |
3239 |
3239 |
3240 napi_enable(&adapter->napi); |
3240 if (!adapter->ecdev) { |
3241 |
3241 napi_enable(&adapter->napi); |
3242 e1000_irq_enable(adapter); |
3242 |
3243 |
3243 e1000_irq_enable(adapter); |
3244 netif_start_queue(netdev); |
3244 |
|
3245 netif_start_queue(netdev); |
|
3246 } |
3245 |
3247 |
3246 /* fire a link status change interrupt to start the watchdog */ |
3248 /* fire a link status change interrupt to start the watchdog */ |
3247 ew32(ICS, E1000_ICS_LSC); |
3249 ew32(ICS, E1000_ICS_LSC); |
3248 |
3250 |
3249 return 0; |
3251 return 0; |
3652 if ((e1000e_enable_tx_pkt_filtering(hw)) && |
3654 if ((e1000e_enable_tx_pkt_filtering(hw)) && |
3653 (adapter->mng_vlan_id != adapter->hw.mng_cookie.vlan_id)) |
3655 (adapter->mng_vlan_id != adapter->hw.mng_cookie.vlan_id)) |
3654 e1000_update_mng_vlan(adapter); |
3656 e1000_update_mng_vlan(adapter); |
3655 |
3657 |
3656 if (link) { |
3658 if (link) { |
3657 if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev)) |
3659 if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev)) |
3658 || (!adapter->ecdev && !netif_carrier_ok(netdev))) { |
3660 || (!adapter->ecdev && !netif_carrier_ok(netdev))) { |
3659 bool txb2b = 1; |
3661 bool txb2b = 1; |
3660 /* update snapshot of PHY registers on LSC */ |
3662 /* update snapshot of PHY registers on LSC */ |
3661 e1000_phy_read_status(adapter); |
3663 e1000_phy_read_status(adapter); |
3662 mac->ops.get_link_up_info(&adapter->hw, |
3664 mac->ops.get_link_up_info(&adapter->hw, |
3752 if (phy->ops.cfg_on_link_up) |
3754 if (phy->ops.cfg_on_link_up) |
3753 phy->ops.cfg_on_link_up(hw); |
3755 phy->ops.cfg_on_link_up(hw); |
3754 |
3756 |
3755 if (adapter->ecdev) |
3757 if (adapter->ecdev) |
3756 ecdev_set_link(adapter->ecdev, 1); |
3758 ecdev_set_link(adapter->ecdev, 1); |
3757 else |
3759 else |
3758 netif_carrier_on(netdev); |
3760 netif_carrier_on(netdev); |
3759 |
3761 |
3760 if (!adapter->ecdev && !test_bit(__E1000_DOWN, &adapter->state)) |
3762 if (!adapter->ecdev && !test_bit(__E1000_DOWN, &adapter->state)) |
3761 mod_timer(&adapter->phy_info_timer, |
3763 mod_timer(&adapter->phy_info_timer, |
3762 round_jiffies(jiffies + 2 * HZ)); |
3764 round_jiffies(jiffies + 2 * HZ)); |
3763 } |
3765 } |
3764 } else { |
3766 } else { |
3765 if ((adapter->ecdev && ecdev_get_link(adapter->ecdev)) |
3767 if ((adapter->ecdev && ecdev_get_link(adapter->ecdev)) |
3766 || (!adapter->ecdev && netif_carrier_ok(netdev))) { |
3768 || (!adapter->ecdev && netif_carrier_ok(netdev))) { |
3767 adapter->link_speed = 0; |
3769 adapter->link_speed = 0; |
3768 adapter->link_duplex = 0; |
3770 adapter->link_duplex = 0; |
3769 /* Link status message must follow this format */ |
3771 /* Link status message must follow this format */ |
3770 printk(KERN_INFO "e1000e: %s NIC Link is Down\n", |
3772 printk(KERN_INFO "e1000e: %s NIC Link is Down\n", |
3795 adapter->gotc = adapter->stats.gotc - adapter->gotc_old; |
3797 adapter->gotc = adapter->stats.gotc - adapter->gotc_old; |
3796 adapter->gotc_old = adapter->stats.gotc; |
3798 adapter->gotc_old = adapter->stats.gotc; |
3797 |
3799 |
3798 e1000e_update_adaptive(&adapter->hw); |
3800 e1000e_update_adaptive(&adapter->hw); |
3799 |
3801 |
3800 if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev)) |
3802 if (!adapter->ecdev && !netif_carrier_ok(netdev)) { |
3801 || (!adapter->ecdev && !netif_carrier_ok(netdev))) { |
|
3802 tx_pending = (e1000_desc_unused(tx_ring) + 1 < |
3803 tx_pending = (e1000_desc_unused(tx_ring) + 1 < |
3803 tx_ring->count); |
3804 tx_ring->count); |
3804 if (tx_pending) { |
3805 if (tx_pending) { |
3805 /* |
3806 /* |
3806 * We've lost link, so the controller stops DMA, |
3807 * We've lost link, so the controller stops DMA, |
4172 } |
4173 } |
4173 |
4174 |
4174 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size) |
4175 static int __e1000_maybe_stop_tx(struct net_device *netdev, int size) |
4175 { |
4176 { |
4176 struct e1000_adapter *adapter = netdev_priv(netdev); |
4177 struct e1000_adapter *adapter = netdev_priv(netdev); |
|
4178 |
|
4179 if (adapter->ecdev) { |
|
4180 return -EBUSY; |
|
4181 } |
4177 |
4182 |
4178 netif_stop_queue(netdev); |
4183 netif_stop_queue(netdev); |
4179 /* |
4184 /* |
4180 * Herbert's original patch had: |
4185 * Herbert's original patch had: |
4181 * smp_mb__after_netif_stop_queue(); |
4186 * smp_mb__after_netif_stop_queue(); |
5357 if (!(adapter->flags & FLAG_HAS_AMT)) |
5362 if (!(adapter->flags & FLAG_HAS_AMT)) |
5358 e1000_get_hw_control(adapter); |
5363 e1000_get_hw_control(adapter); |
5359 |
5364 |
5360 adapter->ecdev = ecdev_offer(netdev,ec_poll,THIS_MODULE); |
5365 adapter->ecdev = ecdev_offer(netdev,ec_poll,THIS_MODULE); |
5361 if (adapter->ecdev) { |
5366 if (adapter->ecdev) { |
5362 if (ecdev_open(adapter->ecdev)) { |
5367 err = ecdev_open(adapter->ecdev); |
|
5368 if (err) { |
5363 ecdev_withdraw(adapter->ecdev); |
5369 ecdev_withdraw(adapter->ecdev); |
5364 goto err_register; |
5370 goto err_register; |
5365 } |
5371 } |
5366 } else { |
5372 } else { |
5367 strcpy(netdev->name, "eth%d"); |
5373 strcpy(netdev->name, "eth%d"); |