155 static void e1000_82547_tx_fifo_stall(unsigned long data); |
156 static void e1000_82547_tx_fifo_stall(unsigned long data); |
156 static int e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev); |
157 static int e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev); |
157 static struct net_device_stats * e1000_get_stats(struct net_device *netdev); |
158 static struct net_device_stats * e1000_get_stats(struct net_device *netdev); |
158 static int e1000_change_mtu(struct net_device *netdev, int new_mtu); |
159 static int e1000_change_mtu(struct net_device *netdev, int new_mtu); |
159 static int e1000_set_mac(struct net_device *netdev, void *p); |
160 static int e1000_set_mac(struct net_device *netdev, void *p); |
|
161 void ec_poll(struct net_device *); |
160 static irqreturn_t e1000_intr(int irq, void *data); |
162 static irqreturn_t e1000_intr(int irq, void *data); |
161 static irqreturn_t e1000_intr_msi(int irq, void *data); |
163 static irqreturn_t e1000_intr_msi(int irq, void *data); |
162 static boolean_t e1000_clean_tx_irq(struct e1000_adapter *adapter, |
164 static boolean_t e1000_clean_tx_irq(struct e1000_adapter *adapter, |
163 struct e1000_tx_ring *tx_ring); |
165 struct e1000_tx_ring *tx_ring); |
164 #ifdef CONFIG_E1000_NAPI |
166 #ifdef CONFIG_E1000_NAPI |
627 |
643 |
628 /* signal that we're down so the interrupt handler does not |
644 /* signal that we're down so the interrupt handler does not |
629 * reschedule our watchdog timer */ |
645 * reschedule our watchdog timer */ |
630 set_bit(__E1000_DOWN, &adapter->flags); |
646 set_bit(__E1000_DOWN, &adapter->flags); |
631 |
647 |
|
648 if (!adapter->ecdev) { |
632 #ifdef CONFIG_E1000_NAPI |
649 #ifdef CONFIG_E1000_NAPI |
633 netif_poll_disable(netdev); |
650 netif_poll_disable(netdev); |
634 #endif |
651 #endif |
635 e1000_irq_disable(adapter); |
652 e1000_irq_disable(adapter); |
636 |
653 |
637 del_timer_sync(&adapter->tx_fifo_stall_timer); |
654 del_timer_sync(&adapter->tx_fifo_stall_timer); |
638 del_timer_sync(&adapter->watchdog_timer); |
655 del_timer_sync(&adapter->watchdog_timer); |
639 del_timer_sync(&adapter->phy_info_timer); |
656 del_timer_sync(&adapter->phy_info_timer); |
|
657 } |
640 |
658 |
641 netdev->tx_queue_len = adapter->tx_queue_len; |
659 netdev->tx_queue_len = adapter->tx_queue_len; |
642 adapter->link_speed = 0; |
660 adapter->link_speed = 0; |
643 adapter->link_duplex = 0; |
661 adapter->link_duplex = 0; |
644 netif_carrier_off(netdev); |
662 if (!adapter->ecdev) { |
645 netif_stop_queue(netdev); |
663 netif_carrier_off(netdev); |
|
664 netif_stop_queue(netdev); |
|
665 } |
646 |
666 |
647 e1000_reset(adapter); |
667 e1000_reset(adapter); |
648 e1000_clean_all_tx_rings(adapter); |
668 e1000_clean_all_tx_rings(adapter); |
649 e1000_clean_all_rx_rings(adapter); |
669 e1000_clean_all_rx_rings(adapter); |
650 } |
670 } |
1140 * of the driver. */ |
1160 * of the driver. */ |
1141 if (adapter->hw.mac_type != e1000_82573 || |
1161 if (adapter->hw.mac_type != e1000_82573 || |
1142 !e1000_check_mng_mode(&adapter->hw)) |
1162 !e1000_check_mng_mode(&adapter->hw)) |
1143 e1000_get_hw_control(adapter); |
1163 e1000_get_hw_control(adapter); |
1144 |
1164 |
1145 /* tell the stack to leave us alone until e1000_open() is called */ |
1165 // offer device to EtherCAT master module |
1146 netif_carrier_off(netdev); |
1166 if (ecdev_offer(netdev, ec_poll, THIS_MODULE, &adapter->ecdev)) { |
1147 netif_stop_queue(netdev); |
1167 DPRINTK(PROBE, ERR, "Failed to offer device.\n"); |
|
1168 goto err_register; |
|
1169 } |
|
1170 |
|
1171 if (adapter->ecdev) { |
|
1172 if (ecdev_open(adapter->ecdev)) { |
|
1173 ecdev_withdraw(adapter->ecdev); |
|
1174 goto err_register; |
|
1175 } |
|
1176 } else { |
|
1177 /* tell the stack to leave us alone until e1000_open() is called */ |
|
1178 netif_carrier_off(netdev); |
|
1179 netif_stop_queue(netdev); |
1148 #ifdef CONFIG_E1000_NAPI |
1180 #ifdef CONFIG_E1000_NAPI |
1149 netif_poll_disable(netdev); |
1181 netif_poll_disable(netdev); |
1150 #endif |
1182 #endif |
1151 |
1183 |
1152 strcpy(netdev->name, "eth%d"); |
1184 strcpy(netdev->name, "eth%d"); |
1153 if ((err = register_netdev(netdev))) |
1185 if ((err = register_netdev(netdev))) |
1154 goto err_register; |
1186 goto err_register; |
|
1187 } |
1155 |
1188 |
1156 DPRINTK(PROBE, INFO, "Intel(R) PRO/1000 Network Connection\n"); |
1189 DPRINTK(PROBE, INFO, "Intel(R) PRO/1000 Network Connection\n"); |
1157 |
1190 |
1158 cards_found++; |
1191 cards_found++; |
1159 return 0; |
1192 return 0; |
2655 * after setting TARC0 */ |
2699 * after setting TARC0 */ |
2656 tctl = E1000_READ_REG(&adapter->hw, TCTL); |
2700 tctl = E1000_READ_REG(&adapter->hw, TCTL); |
2657 tctl |= E1000_TCTL_EN; |
2701 tctl |= E1000_TCTL_EN; |
2658 E1000_WRITE_REG(&adapter->hw, TCTL, tctl); |
2702 E1000_WRITE_REG(&adapter->hw, TCTL, tctl); |
2659 |
2703 |
2660 netif_carrier_on(netdev); |
2704 if (adapter->ecdev) { |
2661 netif_wake_queue(netdev); |
2705 ecdev_set_link(adapter->ecdev, 1); |
2662 mod_timer(&adapter->phy_info_timer, round_jiffies(jiffies + 2 * HZ)); |
2706 } else { |
|
2707 netif_carrier_on(netdev); |
|
2708 netif_wake_queue(netdev); |
|
2709 mod_timer(&adapter->phy_info_timer, round_jiffies(jiffies + 2 * HZ)); |
|
2710 } |
2663 adapter->smartspeed = 0; |
2711 adapter->smartspeed = 0; |
2664 } else { |
2712 } else { |
2665 /* make sure the receive unit is started */ |
2713 /* make sure the receive unit is started */ |
2666 if (adapter->hw.rx_needs_kicking) { |
2714 if (adapter->hw.rx_needs_kicking) { |
2667 struct e1000_hw *hw = &adapter->hw; |
2715 struct e1000_hw *hw = &adapter->hw; |
2668 uint32_t rctl = E1000_READ_REG(hw, RCTL); |
2716 uint32_t rctl = E1000_READ_REG(hw, RCTL); |
2669 E1000_WRITE_REG(hw, RCTL, rctl | E1000_RCTL_EN); |
2717 E1000_WRITE_REG(hw, RCTL, rctl | E1000_RCTL_EN); |
2670 } |
2718 } |
2671 } |
2719 } |
2672 } else { |
2720 } else { |
2673 if (netif_carrier_ok(netdev)) { |
2721 if ((adapter->ecdev && ecdev_get_link(adapter->ecdev)) |
|
2722 || (!adapter->ecdev && netif_carrier_ok(netdev))) { |
2674 adapter->link_speed = 0; |
2723 adapter->link_speed = 0; |
2675 adapter->link_duplex = 0; |
2724 adapter->link_duplex = 0; |
2676 DPRINTK(LINK, INFO, "NIC Link is Down\n"); |
2725 DPRINTK(LINK, INFO, "NIC Link is Down\n"); |
2677 netif_carrier_off(netdev); |
2726 if (adapter->ecdev) { |
2678 netif_stop_queue(netdev); |
2727 ecdev_set_link(adapter->ecdev, 0); |
2679 mod_timer(&adapter->phy_info_timer, round_jiffies(jiffies + 2 * HZ)); |
2728 } else { |
|
2729 netif_carrier_off(netdev); |
|
2730 netif_stop_queue(netdev); |
|
2731 mod_timer(&adapter->phy_info_timer, round_jiffies(jiffies + 2 * HZ)); |
|
2732 } |
2680 |
2733 |
2681 /* 80003ES2LAN workaround-- |
2734 /* 80003ES2LAN workaround-- |
2682 * For packet buffer work-around on link down event; |
2735 * For packet buffer work-around on link down event; |
2683 * disable receives in the ISR and |
2736 * disable receives in the ISR and |
2684 * reset device here in the watchdog |
2737 * reset device here in the watchdog |
2718 |
2771 |
2719 /* Cause software interrupt to ensure rx ring is cleaned */ |
2772 /* Cause software interrupt to ensure rx ring is cleaned */ |
2720 E1000_WRITE_REG(&adapter->hw, ICS, E1000_ICS_RXDMT0); |
2773 E1000_WRITE_REG(&adapter->hw, ICS, E1000_ICS_RXDMT0); |
2721 |
2774 |
2722 /* Force detection of hung controller every watchdog period */ |
2775 /* Force detection of hung controller every watchdog period */ |
2723 adapter->detect_tx_hung = TRUE; |
2776 if (!adapter->ecdev) adapter->detect_tx_hung = TRUE; |
2724 |
2777 |
2725 /* With 82571 controllers, LAA may be overwritten due to controller |
2778 /* With 82571 controllers, LAA may be overwritten due to controller |
2726 * reset from the other port. Set the appropriate LAA in RAR[0] */ |
2779 * reset from the other port. Set the appropriate LAA in RAR[0] */ |
2727 if (adapter->hw.mac_type == e1000_82571 && adapter->hw.laa_is_present) |
2780 if (adapter->hw.mac_type == e1000_82571 && adapter->hw.laa_is_present) |
2728 e1000_rar_set(&adapter->hw, adapter->hw.mac_addr, 0); |
2781 e1000_rar_set(&adapter->hw, adapter->hw.mac_addr, 0); |
2729 |
2782 |
2730 /* Reset the timer */ |
2783 /* Reset the timer */ |
2731 mod_timer(&adapter->watchdog_timer, round_jiffies(jiffies + 2 * HZ)); |
2784 if (!adapter->ecdev) |
|
2785 mod_timer(&adapter->watchdog_timer, round_jiffies(jiffies + 2 * HZ)); |
2732 } |
2786 } |
2733 |
2787 |
2734 enum latency_range { |
2788 enum latency_range { |
2735 lowest_latency = 0, |
2789 lowest_latency = 0, |
2736 low_latency = 1, |
2790 low_latency = 1, |
3366 |
3421 |
3367 if (adapter->hw.tx_pkt_filtering && |
3422 if (adapter->hw.tx_pkt_filtering && |
3368 (adapter->hw.mac_type == e1000_82573)) |
3423 (adapter->hw.mac_type == e1000_82573)) |
3369 e1000_transfer_dhcp_info(adapter, skb); |
3424 e1000_transfer_dhcp_info(adapter, skb); |
3370 |
3425 |
3371 if (!spin_trylock_irqsave(&tx_ring->tx_lock, flags)) |
3426 if (!adapter->ecdev) |
3372 /* Collision - tell upper layer to requeue */ |
3427 if (!spin_trylock_irqsave(&tx_ring->tx_lock, flags)) |
3373 return NETDEV_TX_LOCKED; |
3428 /* Collision - tell upper layer to requeue */ |
|
3429 return NETDEV_TX_LOCKED; |
3374 |
3430 |
3375 /* need: count + 2 desc gap to keep tail from touching |
3431 /* need: count + 2 desc gap to keep tail from touching |
3376 * head, otherwise try next time */ |
3432 * head, otherwise try next time */ |
3377 if (unlikely(e1000_maybe_stop_tx(netdev, tx_ring, count + 2))) { |
3433 if (unlikely(e1000_maybe_stop_tx(netdev, tx_ring, count + 2))) { |
3378 spin_unlock_irqrestore(&tx_ring->tx_lock, flags); |
3434 spin_unlock_irqrestore(&tx_ring->tx_lock, flags); |
3379 return NETDEV_TX_BUSY; |
3435 return NETDEV_TX_BUSY; |
3380 } |
3436 } |
3381 |
3437 |
3382 if (unlikely(adapter->hw.mac_type == e1000_82547)) { |
3438 if (unlikely(adapter->hw.mac_type == e1000_82547)) { |
3383 if (unlikely(e1000_82547_fifo_workaround(adapter, skb))) { |
3439 if (unlikely(e1000_82547_fifo_workaround(adapter, skb))) { |
3384 netif_stop_queue(netdev); |
3440 if (!adapter->ecdev) { |
3385 mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1); |
3441 netif_stop_queue(netdev); |
3386 spin_unlock_irqrestore(&tx_ring->tx_lock, flags); |
3442 mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1); |
|
3443 spin_unlock_irqrestore(&tx_ring->tx_lock, flags); |
|
3444 } |
3387 return NETDEV_TX_BUSY; |
3445 return NETDEV_TX_BUSY; |
3388 } |
3446 } |
3389 } |
3447 } |
3390 |
3448 |
3391 if (unlikely(adapter->vlgrp && vlan_tx_tag_present(skb))) { |
3449 if (unlikely(adapter->vlgrp && vlan_tx_tag_present(skb))) { |
3737 adapter->stats.mgptc += E1000_READ_REG(hw, MGTPTC); |
3803 adapter->stats.mgptc += E1000_READ_REG(hw, MGTPTC); |
3738 adapter->stats.mgprc += E1000_READ_REG(hw, MGTPRC); |
3804 adapter->stats.mgprc += E1000_READ_REG(hw, MGTPRC); |
3739 adapter->stats.mgpdc += E1000_READ_REG(hw, MGTPDC); |
3805 adapter->stats.mgpdc += E1000_READ_REG(hw, MGTPDC); |
3740 } |
3806 } |
3741 |
3807 |
3742 spin_unlock_irqrestore(&adapter->stats_lock, flags); |
3808 if (!adapter->ecdev) |
|
3809 spin_unlock_irqrestore(&adapter->stats_lock, flags); |
|
3810 } |
|
3811 |
|
3812 void ec_poll(struct net_device *netdev) |
|
3813 { |
|
3814 struct e1000_adapter *adapter = netdev_priv(netdev); |
|
3815 |
|
3816 if (jiffies - adapter->ec_watchdog_jiffies >= 2 * HZ) { |
|
3817 e1000_watchdog((unsigned long) adapter); |
|
3818 adapter->ec_watchdog_jiffies = jiffies; |
|
3819 } |
|
3820 |
|
3821 #ifdef CONFIG_PCI_MSI |
|
3822 e1000_intr_msi(0, netdev); |
|
3823 #else |
|
3824 e1000_intr(0, netdev); |
|
3825 #endif |
3743 } |
3826 } |
3744 |
3827 |
3745 /** |
3828 /** |
3746 * e1000_intr_msi - Interrupt Handler |
3829 * e1000_intr_msi - Interrupt Handler |
3747 * @irq: interrupt number |
3830 * @irq: interrupt number |
3752 e1000_intr_msi(int irq, void *data) |
3835 e1000_intr_msi(int irq, void *data) |
3753 { |
3836 { |
3754 struct net_device *netdev = data; |
3837 struct net_device *netdev = data; |
3755 struct e1000_adapter *adapter = netdev_priv(netdev); |
3838 struct e1000_adapter *adapter = netdev_priv(netdev); |
3756 struct e1000_hw *hw = &adapter->hw; |
3839 struct e1000_hw *hw = &adapter->hw; |
3757 #ifndef CONFIG_E1000_NAPI |
|
3758 int i; |
3840 int i; |
|
3841 #ifdef CONFIG_E1000_NAPI |
|
3842 int ec_work_done = 0; |
3759 #endif |
3843 #endif |
3760 uint32_t icr = E1000_READ_REG(hw, ICR); |
3844 uint32_t icr = E1000_READ_REG(hw, ICR); |
3761 |
3845 |
|
3846 if (adapter->ecdev) { |
|
3847 for (i = 0; i < E1000_MAX_INTR; i++) |
3762 #ifdef CONFIG_E1000_NAPI |
3848 #ifdef CONFIG_E1000_NAPI |
3763 /* read ICR disables interrupts using IAM, so keep up with our |
3849 if (unlikely(!adapter->clean_rx(adapter, adapter->rx_ring, |
3764 * enable/disable accounting */ |
3850 &ec_work_done, 100) & |
3765 atomic_inc(&adapter->irq_sem); |
3851 !e1000_clean_tx_irq(adapter, adapter->tx_ring))) |
|
3852 #else |
|
3853 if (unlikely(!adapter->clean_rx(adapter, adapter->rx_ring) & |
|
3854 !e1000_clean_tx_irq(adapter, adapter->tx_ring))) |
3766 #endif |
3855 #endif |
3767 if (icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) { |
3856 break; |
3768 hw->get_link_status = 1; |
3857 } else { |
3769 /* 80003ES2LAN workaround-- For packet buffer work-around on |
|
3770 * link down event; disable receives here in the ISR and reset |
|
3771 * adapter in watchdog */ |
|
3772 if (netif_carrier_ok(netdev) && |
|
3773 (adapter->hw.mac_type == e1000_80003es2lan)) { |
|
3774 /* disable receives */ |
|
3775 uint32_t rctl = E1000_READ_REG(hw, RCTL); |
|
3776 E1000_WRITE_REG(hw, RCTL, rctl & ~E1000_RCTL_EN); |
|
3777 } |
|
3778 /* guard against interrupt when we're going down */ |
|
3779 if (!test_bit(__E1000_DOWN, &adapter->flags)) |
|
3780 mod_timer(&adapter->watchdog_timer, jiffies + 1); |
|
3781 } |
|
3782 |
|
3783 #ifdef CONFIG_E1000_NAPI |
3858 #ifdef CONFIG_E1000_NAPI |
3784 if (likely(netif_rx_schedule_prep(netdev))) { |
3859 /* read ICR disables interrupts using IAM, so keep up with our |
|
3860 * enable/disable accounting */ |
|
3861 atomic_inc(&adapter->irq_sem); |
|
3862 #endif |
|
3863 if (icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) { |
|
3864 hw->get_link_status = 1; |
|
3865 /* 80003ES2LAN workaround-- For packet buffer work-around on |
|
3866 * link down event; disable receives here in the ISR and reset |
|
3867 * adapter in watchdog */ |
|
3868 if (netif_carrier_ok(netdev) && |
|
3869 (adapter->hw.mac_type == e1000_80003es2lan)) { |
|
3870 /* disable receives */ |
|
3871 uint32_t rctl = E1000_READ_REG(hw, RCTL); |
|
3872 E1000_WRITE_REG(hw, RCTL, rctl & ~E1000_RCTL_EN); |
|
3873 } |
|
3874 /* guard against interrupt when we're going down */ |
|
3875 if (!test_bit(__E1000_DOWN, &adapter->flags)) |
|
3876 mod_timer(&adapter->watchdog_timer, jiffies + 1); |
|
3877 } |
|
3878 |
|
3879 #ifdef CONFIG_E1000_NAPI |
|
3880 if (likely(netif_rx_schedule_prep(netdev))) { |
|
3881 adapter->total_tx_bytes = 0; |
|
3882 adapter->total_tx_packets = 0; |
|
3883 adapter->total_rx_bytes = 0; |
|
3884 adapter->total_rx_packets = 0; |
|
3885 __netif_rx_schedule(netdev); |
|
3886 } else |
|
3887 e1000_irq_enable(adapter); |
|
3888 #else |
3785 adapter->total_tx_bytes = 0; |
3889 adapter->total_tx_bytes = 0; |
|
3890 adapter->total_rx_bytes = 0; |
3786 adapter->total_tx_packets = 0; |
3891 adapter->total_tx_packets = 0; |
3787 adapter->total_rx_bytes = 0; |
|
3788 adapter->total_rx_packets = 0; |
3892 adapter->total_rx_packets = 0; |
3789 __netif_rx_schedule(netdev); |
3893 |
3790 } else |
3894 for (i = 0; i < E1000_MAX_INTR; i++) |
3791 e1000_irq_enable(adapter); |
3895 if (unlikely(!adapter->clean_rx(adapter, adapter->rx_ring) & |
3792 #else |
3896 !e1000_clean_tx_irq(adapter, adapter->tx_ring))) |
3793 adapter->total_tx_bytes = 0; |
3897 break; |
3794 adapter->total_rx_bytes = 0; |
3898 |
3795 adapter->total_tx_packets = 0; |
3899 if (likely(adapter->itr_setting & 3)) |
3796 adapter->total_rx_packets = 0; |
3900 e1000_set_itr(adapter); |
3797 |
|
3798 for (i = 0; i < E1000_MAX_INTR; i++) |
|
3799 if (unlikely(!adapter->clean_rx(adapter, adapter->rx_ring) & |
|
3800 !e1000_clean_tx_irq(adapter, adapter->tx_ring))) |
|
3801 break; |
|
3802 |
|
3803 if (likely(adapter->itr_setting & 3)) |
|
3804 e1000_set_itr(adapter); |
|
3805 #endif |
3901 #endif |
|
3902 } |
3806 |
3903 |
3807 return IRQ_HANDLED; |
3904 return IRQ_HANDLED; |
3808 } |
3905 } |
3809 |
3906 |
3810 /** |
3907 /** |
3835 |
3933 |
3836 /* Interrupt Auto-Mask...upon reading ICR, |
3934 /* Interrupt Auto-Mask...upon reading ICR, |
3837 * interrupts are masked. No need for the |
3935 * interrupts are masked. No need for the |
3838 * IMC write, but it does mean we should |
3936 * IMC write, but it does mean we should |
3839 * account for it ASAP. */ |
3937 * account for it ASAP. */ |
3840 if (likely(hw->mac_type >= e1000_82571)) |
3938 if (!adapter->ecdev && likely(hw->mac_type >= e1000_82571)) |
3841 atomic_inc(&adapter->irq_sem); |
3939 atomic_inc(&adapter->irq_sem); |
3842 #endif |
3940 #endif |
3843 |
3941 |
3844 if (unlikely(icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC))) { |
3942 if (!adapter->ecdev && unlikely(icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC))) { |
3845 hw->get_link_status = 1; |
3943 hw->get_link_status = 1; |
3846 /* 80003ES2LAN workaround-- |
3944 /* 80003ES2LAN workaround-- |
3847 * For packet buffer work-around on link down event; |
3945 * For packet buffer work-around on link down event; |
3848 * disable receives here in the ISR and |
3946 * disable receives here in the ISR and |
3849 * reset adapter in watchdog |
3947 * reset adapter in watchdog |
3857 /* guard against interrupt when we're going down */ |
3955 /* guard against interrupt when we're going down */ |
3858 if (!test_bit(__E1000_DOWN, &adapter->flags)) |
3956 if (!test_bit(__E1000_DOWN, &adapter->flags)) |
3859 mod_timer(&adapter->watchdog_timer, jiffies + 1); |
3957 mod_timer(&adapter->watchdog_timer, jiffies + 1); |
3860 } |
3958 } |
3861 |
3959 |
|
3960 if (adapter->ecdev) { |
|
3961 for (i = 0; i < E1000_MAX_INTR; i++) |
3862 #ifdef CONFIG_E1000_NAPI |
3962 #ifdef CONFIG_E1000_NAPI |
3863 if (unlikely(hw->mac_type < e1000_82571)) { |
3963 if (unlikely(!adapter->clean_rx(adapter, adapter->rx_ring, |
3864 /* disable interrupts, without the synchronize_irq bit */ |
3964 &ec_work_done, 100) & |
3865 atomic_inc(&adapter->irq_sem); |
3965 !e1000_clean_tx_irq(adapter, adapter->tx_ring))) |
3866 E1000_WRITE_REG(hw, IMC, ~0); |
3966 #else |
3867 E1000_WRITE_FLUSH(hw); |
3967 if (unlikely(!adapter->clean_rx(adapter, adapter->rx_ring) & |
3868 } |
3968 !e1000_clean_tx_irq(adapter, adapter->tx_ring))) |
3869 if (likely(netif_rx_schedule_prep(netdev))) { |
3969 #endif |
|
3970 break; |
|
3971 } else { |
|
3972 #ifdef CONFIG_E1000_NAPI |
|
3973 if (unlikely(hw->mac_type < e1000_82571)) { |
|
3974 /* disable interrupts, without the synchronize_irq bit */ |
|
3975 atomic_inc(&adapter->irq_sem); |
|
3976 E1000_WRITE_REG(hw, IMC, ~0); |
|
3977 E1000_WRITE_FLUSH(hw); |
|
3978 } |
|
3979 if (likely(netif_rx_schedule_prep(netdev))) { |
|
3980 adapter->total_tx_bytes = 0; |
|
3981 adapter->total_tx_packets = 0; |
|
3982 adapter->total_rx_bytes = 0; |
|
3983 adapter->total_rx_packets = 0; |
|
3984 __netif_rx_schedule(netdev); |
|
3985 } else |
|
3986 /* this really should not happen! if it does it is basically a |
|
3987 * bug, but not a hard error, so enable ints and continue */ |
|
3988 e1000_irq_enable(adapter); |
|
3989 #else |
|
3990 /* Writing IMC and IMS is needed for 82547. |
|
3991 * Due to Hub Link bus being occupied, an interrupt |
|
3992 * de-assertion message is not able to be sent. |
|
3993 * When an interrupt assertion message is generated later, |
|
3994 * two messages are re-ordered and sent out. |
|
3995 * That causes APIC to think 82547 is in de-assertion |
|
3996 * state, while 82547 is in assertion state, resulting |
|
3997 * in dead lock. Writing IMC forces 82547 into |
|
3998 * de-assertion state. |
|
3999 */ |
|
4000 if (hw->mac_type == e1000_82547 || hw->mac_type == e1000_82547_rev_2) { |
|
4001 atomic_inc(&adapter->irq_sem); |
|
4002 E1000_WRITE_REG(hw, IMC, ~0); |
|
4003 } |
|
4004 |
3870 adapter->total_tx_bytes = 0; |
4005 adapter->total_tx_bytes = 0; |
|
4006 adapter->total_rx_bytes = 0; |
3871 adapter->total_tx_packets = 0; |
4007 adapter->total_tx_packets = 0; |
3872 adapter->total_rx_bytes = 0; |
|
3873 adapter->total_rx_packets = 0; |
4008 adapter->total_rx_packets = 0; |
3874 __netif_rx_schedule(netdev); |
4009 |
3875 } else |
4010 for (i = 0; i < E1000_MAX_INTR; i++) |
3876 /* this really should not happen! if it does it is basically a |
4011 if (unlikely(!adapter->clean_rx(adapter, adapter->rx_ring) & |
3877 * bug, but not a hard error, so enable ints and continue */ |
4012 !e1000_clean_tx_irq(adapter, adapter->tx_ring))) |
3878 e1000_irq_enable(adapter); |
4013 break; |
3879 #else |
4014 |
3880 /* Writing IMC and IMS is needed for 82547. |
4015 if (likely(adapter->itr_setting & 3)) |
3881 * Due to Hub Link bus being occupied, an interrupt |
4016 e1000_set_itr(adapter); |
3882 * de-assertion message is not able to be sent. |
4017 |
3883 * When an interrupt assertion message is generated later, |
4018 if (hw->mac_type == e1000_82547 || hw->mac_type == e1000_82547_rev_2) |
3884 * two messages are re-ordered and sent out. |
4019 e1000_irq_enable(adapter); |
3885 * That causes APIC to think 82547 is in de-assertion |
|
3886 * state, while 82547 is in assertion state, resulting |
|
3887 * in dead lock. Writing IMC forces 82547 into |
|
3888 * de-assertion state. |
|
3889 */ |
|
3890 if (hw->mac_type == e1000_82547 || hw->mac_type == e1000_82547_rev_2) { |
|
3891 atomic_inc(&adapter->irq_sem); |
|
3892 E1000_WRITE_REG(hw, IMC, ~0); |
|
3893 } |
|
3894 |
|
3895 adapter->total_tx_bytes = 0; |
|
3896 adapter->total_rx_bytes = 0; |
|
3897 adapter->total_tx_packets = 0; |
|
3898 adapter->total_rx_packets = 0; |
|
3899 |
|
3900 for (i = 0; i < E1000_MAX_INTR; i++) |
|
3901 if (unlikely(!adapter->clean_rx(adapter, adapter->rx_ring) & |
|
3902 !e1000_clean_tx_irq(adapter, adapter->tx_ring))) |
|
3903 break; |
|
3904 |
|
3905 if (likely(adapter->itr_setting & 3)) |
|
3906 e1000_set_itr(adapter); |
|
3907 |
|
3908 if (hw->mac_type == e1000_82547 || hw->mac_type == e1000_82547_rev_2) |
|
3909 e1000_irq_enable(adapter); |
|
3910 |
4020 |
3911 #endif |
4021 #endif |
|
4022 } |
3912 return IRQ_HANDLED; |
4023 return IRQ_HANDLED; |
3913 } |
4024 } |
3914 |
4025 |
3915 #ifdef CONFIG_E1000_NAPI |
4026 #ifdef CONFIG_E1000_NAPI |
3916 /** |
4027 /** |
3917 * e1000_clean - NAPI Rx polling callback |
4028 * e1000_clean - NAPI Rx polling callback |
3918 * @adapter: board private structure |
4029 * @adapter: board private structure |
3919 **/ |
4030 **/ |
3920 |
4031 |
3921 static int |
4032 static int |
3922 e1000_clean(struct net_device *poll_dev, int *budget) |
4033 e1000_clean(struct net_device *poll_dev, int *budget) // EtherCAT: never called |
3923 { |
4034 { |
3924 struct e1000_adapter *adapter; |
4035 struct e1000_adapter *adapter; |
3925 int work_to_do = min(*budget, poll_dev->quota); |
4036 int work_to_do = min(*budget, poll_dev->quota); |
3926 int tx_cleaned = 0, work_done = 0; |
4037 int tx_cleaned = 0, work_done = 0; |
3927 |
4038 |
4246 e1000_rx_checksum(adapter, |
4358 e1000_rx_checksum(adapter, |
4247 (uint32_t)(status) | |
4359 (uint32_t)(status) | |
4248 ((uint32_t)(rx_desc->errors) << 24), |
4360 ((uint32_t)(rx_desc->errors) << 24), |
4249 le16_to_cpu(rx_desc->csum), skb); |
4361 le16_to_cpu(rx_desc->csum), skb); |
4250 |
4362 |
4251 skb->protocol = eth_type_trans(skb, netdev); |
4363 if (adapter->ecdev) { |
|
4364 ecdev_receive(adapter->ecdev, skb->data, length); |
|
4365 } else { |
|
4366 skb->protocol = eth_type_trans(skb, netdev); |
4252 #ifdef CONFIG_E1000_NAPI |
4367 #ifdef CONFIG_E1000_NAPI |
4253 if (unlikely(adapter->vlgrp && |
4368 if (unlikely(adapter->vlgrp && |
4254 (status & E1000_RXD_STAT_VP))) { |
4369 (status & E1000_RXD_STAT_VP))) { |
4255 vlan_hwaccel_receive_skb(skb, adapter->vlgrp, |
4370 vlan_hwaccel_receive_skb(skb, adapter->vlgrp, |
4256 le16_to_cpu(rx_desc->special) & |
4371 le16_to_cpu(rx_desc->special) & |
4257 E1000_RXD_SPC_VLAN_MASK); |
4372 E1000_RXD_SPC_VLAN_MASK); |
4258 } else { |
4373 } else { |
4259 netif_receive_skb(skb); |
4374 netif_receive_skb(skb); |
4260 } |
4375 } |
4261 #else /* CONFIG_E1000_NAPI */ |
4376 #else /* CONFIG_E1000_NAPI */ |
4262 if (unlikely(adapter->vlgrp && |
4377 if (unlikely(adapter->vlgrp && |
4263 (status & E1000_RXD_STAT_VP))) { |
4378 (status & E1000_RXD_STAT_VP))) { |
4264 vlan_hwaccel_rx(skb, adapter->vlgrp, |
4379 vlan_hwaccel_rx(skb, adapter->vlgrp, |
4265 le16_to_cpu(rx_desc->special) & |
4380 le16_to_cpu(rx_desc->special) & |
4266 E1000_RXD_SPC_VLAN_MASK); |
4381 E1000_RXD_SPC_VLAN_MASK); |
4267 } else { |
4382 } else { |
4268 netif_rx(skb); |
4383 netif_rx(skb); |
4269 } |
4384 } |
4270 #endif /* CONFIG_E1000_NAPI */ |
4385 #endif /* CONFIG_E1000_NAPI */ |
|
4386 } |
4271 netdev->last_rx = jiffies; |
4387 netdev->last_rx = jiffies; |
4272 |
4388 |
4273 next_desc: |
4389 next_desc: |
4274 rx_desc->status = 0; |
4390 rx_desc->status = 0; |
4275 |
4391 |
4353 PCI_DMA_FROMDEVICE); |
4469 PCI_DMA_FROMDEVICE); |
4354 |
4470 |
4355 if (unlikely(!(staterr & E1000_RXD_STAT_EOP))) { |
4471 if (unlikely(!(staterr & E1000_RXD_STAT_EOP))) { |
4356 E1000_DBG("%s: Packet Split buffers didn't pick up" |
4472 E1000_DBG("%s: Packet Split buffers didn't pick up" |
4357 " the full packet\n", netdev->name); |
4473 " the full packet\n", netdev->name); |
4358 dev_kfree_skb_irq(skb); |
4474 if (!adapter->ecdev) dev_kfree_skb_irq(skb); |
4359 goto next_desc; |
4475 goto next_desc; |
4360 } |
4476 } |
4361 |
4477 |
4362 if (unlikely(staterr & E1000_RXDEXT_ERR_FRAME_ERR_MASK)) { |
4478 if (unlikely(staterr & E1000_RXDEXT_ERR_FRAME_ERR_MASK)) { |
4363 dev_kfree_skb_irq(skb); |
4479 if (!adapter->ecdev) dev_kfree_skb_irq(skb); |
4364 goto next_desc; |
4480 goto next_desc; |
4365 } |
4481 } |
4366 |
4482 |
4367 length = le16_to_cpu(rx_desc->wb.middle.length0); |
4483 length = le16_to_cpu(rx_desc->wb.middle.length0); |
4368 |
4484 |
4369 if (unlikely(!length)) { |
4485 if (unlikely(!length)) { |
4370 E1000_DBG("%s: Last part of the packet spanning" |
4486 E1000_DBG("%s: Last part of the packet spanning" |
4371 " multiple descriptors\n", netdev->name); |
4487 " multiple descriptors\n", netdev->name); |
4372 dev_kfree_skb_irq(skb); |
4488 if (!adapter->ecdev) dev_kfree_skb_irq(skb); |
4373 goto next_desc; |
4489 goto next_desc; |
4374 } |
4490 } |
4375 |
4491 |
4376 /* Good Receive */ |
4492 /* Good Receive */ |
4377 skb_put(skb, length); |
4493 skb_put(skb, length); |
4428 total_rx_bytes += skb->len; |
4544 total_rx_bytes += skb->len; |
4429 total_rx_packets++; |
4545 total_rx_packets++; |
4430 |
4546 |
4431 e1000_rx_checksum(adapter, staterr, |
4547 e1000_rx_checksum(adapter, staterr, |
4432 le16_to_cpu(rx_desc->wb.lower.hi_dword.csum_ip.csum), skb); |
4548 le16_to_cpu(rx_desc->wb.lower.hi_dword.csum_ip.csum), skb); |
4433 skb->protocol = eth_type_trans(skb, netdev); |
|
4434 |
4549 |
4435 if (likely(rx_desc->wb.upper.header_status & |
4550 if (likely(rx_desc->wb.upper.header_status & |
4436 cpu_to_le16(E1000_RXDPS_HDRSTAT_HDRSP))) |
4551 cpu_to_le16(E1000_RXDPS_HDRSTAT_HDRSP))) |
4437 adapter->rx_hdr_split++; |
4552 adapter->rx_hdr_split++; |
|
4553 if (adapter->ecdev) { |
|
4554 ecdev_receive(adapter->ecdev, skb->data, length); |
|
4555 } else { |
|
4556 skb->protocol = eth_type_trans(skb, netdev); |
4438 #ifdef CONFIG_E1000_NAPI |
4557 #ifdef CONFIG_E1000_NAPI |
4439 if (unlikely(adapter->vlgrp && (staterr & E1000_RXD_STAT_VP))) { |
4558 if (unlikely(adapter->vlgrp && (staterr & E1000_RXD_STAT_VP))) { |
4440 vlan_hwaccel_receive_skb(skb, adapter->vlgrp, |
4559 vlan_hwaccel_receive_skb(skb, adapter->vlgrp, |
4441 le16_to_cpu(rx_desc->wb.middle.vlan) & |
4560 le16_to_cpu(rx_desc->wb.middle.vlan) & |
4442 E1000_RXD_SPC_VLAN_MASK); |
4561 E1000_RXD_SPC_VLAN_MASK); |
4443 } else { |
4562 } else { |
4444 netif_receive_skb(skb); |
4563 netif_receive_skb(skb); |
4445 } |
4564 } |
4446 #else /* CONFIG_E1000_NAPI */ |
4565 #else /* CONFIG_E1000_NAPI */ |
4447 if (unlikely(adapter->vlgrp && (staterr & E1000_RXD_STAT_VP))) { |
4566 if (unlikely(adapter->vlgrp && (staterr & E1000_RXD_STAT_VP))) { |
4448 vlan_hwaccel_rx(skb, adapter->vlgrp, |
4567 vlan_hwaccel_rx(skb, adapter->vlgrp, |
4449 le16_to_cpu(rx_desc->wb.middle.vlan) & |
4568 le16_to_cpu(rx_desc->wb.middle.vlan) & |
4450 E1000_RXD_SPC_VLAN_MASK); |
4569 E1000_RXD_SPC_VLAN_MASK); |
4451 } else { |
4570 } else { |
4452 netif_rx(skb); |
4571 netif_rx(skb); |
4453 } |
4572 } |
4454 #endif /* CONFIG_E1000_NAPI */ |
4573 #endif /* CONFIG_E1000_NAPI */ |
|
4574 } |
4455 netdev->last_rx = jiffies; |
4575 netdev->last_rx = jiffies; |
4456 |
4576 |
4457 next_desc: |
4577 next_desc: |
4458 rx_desc->wb.middle.status_error &= cpu_to_le32(~0xFF); |
4578 rx_desc->wb.middle.status_error &= cpu_to_le32(~0xFF); |
4459 buffer_info->skb = NULL; |
4579 if (!adapter->ecdev) buffer_info->skb = NULL; |
4460 |
4580 |
4461 /* return some buffers to hardware, one at a time is too slow */ |
4581 /* return some buffers to hardware, one at a time is too slow */ |
4462 if (unlikely(cleaned_count >= E1000_RX_BUFFER_WRITE)) { |
4582 if (unlikely(cleaned_count >= E1000_RX_BUFFER_WRITE)) { |
4463 adapter->alloc_rx_buf(adapter, rx_ring, cleaned_count); |
4583 adapter->alloc_rx_buf(adapter, rx_ring, cleaned_count); |
4464 cleaned_count = 0; |
4584 cleaned_count = 0; |
4788 switch (cmd) { |
4910 switch (cmd) { |
4789 case SIOCGMIIPHY: |
4911 case SIOCGMIIPHY: |
4790 data->phy_id = adapter->hw.phy_addr; |
4912 data->phy_id = adapter->hw.phy_addr; |
4791 break; |
4913 break; |
4792 case SIOCGMIIREG: |
4914 case SIOCGMIIREG: |
4793 if (!capable(CAP_NET_ADMIN)) |
4915 if (adapter->ecdev || !capable(CAP_NET_ADMIN)) |
4794 return -EPERM; |
4916 return -EPERM; |
4795 spin_lock_irqsave(&adapter->stats_lock, flags); |
4917 spin_lock_irqsave(&adapter->stats_lock, flags); |
4796 if (e1000_read_phy_reg(&adapter->hw, data->reg_num & 0x1F, |
4918 if (e1000_read_phy_reg(&adapter->hw, data->reg_num & 0x1F, |
4797 &data->val_out)) { |
4919 &data->val_out)) { |
4798 spin_unlock_irqrestore(&adapter->stats_lock, flags); |
4920 spin_unlock_irqrestore(&adapter->stats_lock, flags); |
4799 return -EIO; |
4921 return -EIO; |
4800 } |
4922 } |
4801 spin_unlock_irqrestore(&adapter->stats_lock, flags); |
4923 spin_unlock_irqrestore(&adapter->stats_lock, flags); |
4802 break; |
4924 break; |
4803 case SIOCSMIIREG: |
4925 case SIOCSMIIREG: |
4804 if (!capable(CAP_NET_ADMIN)) |
4926 if (adapter->ecdev || !capable(CAP_NET_ADMIN)) |
4805 return -EPERM; |
4927 return -EPERM; |
4806 if (data->reg_num & ~(0x1F)) |
4928 if (data->reg_num & ~(0x1F)) |
4807 return -EFAULT; |
4929 return -EFAULT; |
4808 mii_reg = data->val_in; |
4930 mii_reg = data->val_in; |
4809 spin_lock_irqsave(&adapter->stats_lock, flags); |
4931 spin_lock_irqsave(&adapter->stats_lock, flags); |