494 struct e1000_rx_ring *ring = &adapter->rx_ring[i]; |
494 struct e1000_rx_ring *ring = &adapter->rx_ring[i]; |
495 if (adapter->ecdev) { |
495 if (adapter->ecdev) { |
496 /* fill rx ring completely! */ |
496 /* fill rx ring completely! */ |
497 adapter->alloc_rx_buf(adapter, ring, ring->count); |
497 adapter->alloc_rx_buf(adapter, ring, ring->count); |
498 } else { |
498 } else { |
499 /* this one leaves the last ring element unallocated! */ |
499 /* this one leaves the last ring element unallocated! */ |
500 adapter->alloc_rx_buf(adapter, ring, |
500 adapter->alloc_rx_buf(adapter, ring, |
501 E1000_DESC_UNUSED(ring)); |
501 E1000_DESC_UNUSED(ring)); |
502 } |
502 } |
503 } |
503 } |
504 |
504 |
616 } |
616 } |
617 |
617 |
618 netdev->tx_queue_len = adapter->tx_queue_len; |
618 netdev->tx_queue_len = adapter->tx_queue_len; |
619 adapter->link_speed = 0; |
619 adapter->link_speed = 0; |
620 adapter->link_duplex = 0; |
620 adapter->link_duplex = 0; |
621 if (!adapter->ecdev) { |
621 if (!adapter->ecdev) { |
622 netif_carrier_off(netdev); |
622 netif_carrier_off(netdev); |
623 netif_stop_queue(netdev); |
623 netif_stop_queue(netdev); |
624 } |
624 } |
625 |
625 |
626 e1000_reset(adapter); |
626 e1000_reset(adapter); |
1243 * of the driver. */ |
1243 * of the driver. */ |
1244 if (hw->mac_type != e1000_82573 || |
1244 if (hw->mac_type != e1000_82573 || |
1245 !e1000_check_mng_mode(hw)) |
1245 !e1000_check_mng_mode(hw)) |
1246 e1000_get_hw_control(adapter); |
1246 e1000_get_hw_control(adapter); |
1247 |
1247 |
1248 // offer device to EtherCAT master module |
1248 // offer device to EtherCAT master module |
1249 adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE); |
1249 adapter->ecdev = ecdev_offer(netdev, ec_poll, THIS_MODULE); |
1250 if (adapter->ecdev) { |
1250 if (adapter->ecdev) { |
1251 if (ecdev_open(adapter->ecdev)) { |
1251 if (ecdev_open(adapter->ecdev)) { |
1252 ecdev_withdraw(adapter->ecdev); |
1252 ecdev_withdraw(adapter->ecdev); |
1253 goto err_register; |
1253 goto err_register; |
1254 } |
1254 } |
1255 } else { |
1255 } else { |
1256 /* tell the stack to leave us alone until e1000_open() is called */ |
1256 /* tell the stack to leave us alone until e1000_open() is called */ |
1257 netif_carrier_off(netdev); |
1257 netif_carrier_off(netdev); |
1258 netif_stop_queue(netdev); |
1258 netif_stop_queue(netdev); |
1259 |
1259 |
1260 strcpy(netdev->name, "eth%d"); |
1260 strcpy(netdev->name, "eth%d"); |
1261 err = register_netdev(netdev); |
1261 err = register_netdev(netdev); |
1262 if (err) |
1262 if (err) |
1263 goto err_register; |
1263 goto err_register; |
1264 } |
1264 } |
1265 |
1265 |
1266 DPRINTK(PROBE, INFO, "Intel(R) PRO/1000 Network Connection\n"); |
1266 DPRINTK(PROBE, INFO, "Intel(R) PRO/1000 Network Connection\n"); |
1267 |
1267 |
1268 cards_found++; |
1268 cards_found++; |
1269 return 0; |
1269 return 0; |
1503 goto err_req_irq; |
1503 goto err_req_irq; |
1504 |
1504 |
1505 /* From here on the code is the same as e1000_up() */ |
1505 /* From here on the code is the same as e1000_up() */ |
1506 clear_bit(__E1000_DOWN, &adapter->flags); |
1506 clear_bit(__E1000_DOWN, &adapter->flags); |
1507 |
1507 |
1508 napi_enable(&adapter->napi); |
1508 if (!adapter->ecdev) { |
1509 |
1509 napi_enable(&adapter->napi); |
1510 e1000_irq_enable(adapter); |
1510 |
1511 |
1511 e1000_irq_enable(adapter); |
1512 netif_start_queue(netdev); |
1512 |
|
1513 netif_start_queue(netdev); |
|
1514 } |
1513 |
1515 |
1514 /* fire a link status change interrupt to start the watchdog */ |
1516 /* fire a link status change interrupt to start the watchdog */ |
1515 ew32(ICS, E1000_ICS_LSC); |
1517 ew32(ICS, E1000_ICS_LSC); |
1516 |
1518 |
1517 return E1000_SUCCESS; |
1519 return E1000_SUCCESS; |
2298 e1000_configure_rx(adapter); |
2300 e1000_configure_rx(adapter); |
2299 if (adapter->ecdev) { |
2301 if (adapter->ecdev) { |
2300 /* fill rx ring completely! */ |
2302 /* fill rx ring completely! */ |
2301 adapter->alloc_rx_buf(adapter, ring, ring->count); |
2303 adapter->alloc_rx_buf(adapter, ring, ring->count); |
2302 } else { |
2304 } else { |
2303 /* this one leaves the last ring element unallocated! */ |
2305 /* this one leaves the last ring element unallocated! */ |
2304 adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring)); |
2306 adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring)); |
2305 } |
2307 } |
2306 |
2308 |
2307 } |
2309 } |
2308 } |
2310 } |
2636 || (!adapter->ecdev && netif_carrier_ok(netdev))) { |
2638 || (!adapter->ecdev && netif_carrier_ok(netdev))) { |
2637 adapter->link_speed = 0; |
2639 adapter->link_speed = 0; |
2638 adapter->link_duplex = 0; |
2640 adapter->link_duplex = 0; |
2639 printk(KERN_INFO "e1000: %s NIC Link is Down\n", |
2641 printk(KERN_INFO "e1000: %s NIC Link is Down\n", |
2640 netdev->name); |
2642 netdev->name); |
2641 if (adapter->ecdev) { |
2643 if (adapter->ecdev) { |
2642 ecdev_set_link(adapter->ecdev, 0); |
2644 ecdev_set_link(adapter->ecdev, 0); |
2643 } else { |
2645 } else { |
2644 netif_carrier_off(netdev); |
2646 netif_carrier_off(netdev); |
2645 netif_stop_queue(netdev); |
2647 netif_stop_queue(netdev); |
2646 mod_timer(&adapter->phy_info_timer, round_jiffies(jiffies + 2 * HZ)); |
2648 mod_timer(&adapter->phy_info_timer, round_jiffies(jiffies + 2 * HZ)); |
3351 |
3353 |
3352 if (hw->tx_pkt_filtering && |
3354 if (hw->tx_pkt_filtering && |
3353 (hw->mac_type == e1000_82573)) |
3355 (hw->mac_type == e1000_82573)) |
3354 e1000_transfer_dhcp_info(adapter, skb); |
3356 e1000_transfer_dhcp_info(adapter, skb); |
3355 |
3357 |
3356 if (!adapter->ecdev && |
3358 if (!adapter->ecdev && |
3357 !spin_trylock_irqsave(&tx_ring->tx_lock, flags)) |
3359 !spin_trylock_irqsave(&tx_ring->tx_lock, flags)) |
3358 /* Collision - tell upper layer to requeue */ |
3360 /* Collision - tell upper layer to requeue */ |
3359 return NETDEV_TX_LOCKED; |
3361 return NETDEV_TX_LOCKED; |
3360 |
3362 |
3361 /* need: count + 2 desc gap to keep tail from touching |
3363 /* need: count + 2 desc gap to keep tail from touching |
3362 * head, otherwise try next time */ |
3364 * head, otherwise try next time */ |
3733 spin_unlock_irqrestore(&adapter->stats_lock, flags); |
3735 spin_unlock_irqrestore(&adapter->stats_lock, flags); |
3734 } |
3736 } |
3735 |
3737 |
3736 void ec_poll(struct net_device *netdev) |
3738 void ec_poll(struct net_device *netdev) |
3737 { |
3739 { |
3738 struct e1000_adapter *adapter = netdev_priv(netdev); |
3740 struct e1000_adapter *adapter = netdev_priv(netdev); |
3739 |
3741 |
3740 if (jiffies - adapter->ec_watchdog_jiffies >= 2 * HZ) { |
3742 if (jiffies - adapter->ec_watchdog_jiffies >= 2 * HZ) { |
3741 e1000_watchdog((unsigned long) adapter); |
3743 e1000_watchdog((unsigned long) adapter); |
3742 adapter->ec_watchdog_jiffies = jiffies; |
3744 adapter->ec_watchdog_jiffies = jiffies; |
3743 } |
3745 } |
3744 |
3746 |
3745 #ifdef CONFIG_PCI_MSI |
3747 #ifdef CONFIG_PCI_MSI |
3746 e1000_intr_msi(0, netdev); |
3748 e1000_intr_msi(0, netdev); |
3747 #else |
3749 #else |
3748 e1000_intr(0, netdev); |
3750 e1000_intr(0, netdev); |
3749 #endif |
3751 #endif |
3750 } |
3752 } |
3751 |
3753 |
3752 /** |
3754 /** |
3753 * e1000_intr_msi - Interrupt Handler |
3755 * e1000_intr_msi - Interrupt Handler |
3760 struct net_device *netdev = data; |
3762 struct net_device *netdev = data; |
3761 struct e1000_adapter *adapter = netdev_priv(netdev); |
3763 struct e1000_adapter *adapter = netdev_priv(netdev); |
3762 struct e1000_hw *hw = &adapter->hw; |
3764 struct e1000_hw *hw = &adapter->hw; |
3763 u32 icr = er32(ICR); |
3765 u32 icr = er32(ICR); |
3764 |
3766 |
3765 if (adapter->ecdev) { |
3767 if (adapter->ecdev) { |
3766 int i, ec_work_done = 0; |
3768 int i, ec_work_done = 0; |
3767 for (i = 0; i < E1000_MAX_INTR; i++) { |
3769 for (i = 0; i < E1000_MAX_INTR; i++) { |
3768 if (unlikely(!adapter->clean_rx(adapter, adapter->rx_ring, |
3770 if (unlikely(!adapter->clean_rx(adapter, adapter->rx_ring, |
3769 &ec_work_done, 100) && |
3771 &ec_work_done, 100) && |
3770 !e1000_clean_tx_irq(adapter, adapter->tx_ring))) { |
3772 !e1000_clean_tx_irq(adapter, adapter->tx_ring))) { |
3771 break; |
3773 break; |
3772 } |
3774 } |
3773 } |
3775 } |
3774 } else { |
3776 } else { |
3775 /* in NAPI mode read ICR disables interrupts using IAM */ |
3777 /* in NAPI mode read ICR disables interrupts using IAM */ |
3776 |
3778 |
3777 if (icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) { |
3779 if (icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) { |
3778 hw->get_link_status = 1; |
3780 hw->get_link_status = 1; |
3779 /* 80003ES2LAN workaround-- For packet buffer work-around on |
3781 /* 80003ES2LAN workaround-- For packet buffer work-around on |
4133 buffer_info->skb = skb; |
4135 buffer_info->skb = skb; |
4134 goto next_desc; |
4136 goto next_desc; |
4135 } |
4137 } |
4136 |
4138 |
4137 if (!adapter->ecdev && |
4139 if (!adapter->ecdev && |
4138 unlikely(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK)) { |
4140 unlikely(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK)) { |
4139 last_byte = *(skb->data + length - 1); |
4141 last_byte = *(skb->data + length - 1); |
4140 if (TBI_ACCEPT(hw, status, rx_desc->errors, length, |
4142 if (TBI_ACCEPT(hw, status, rx_desc->errors, length, |
4141 last_byte)) { |
4143 last_byte)) { |
4142 spin_lock_irqsave(&adapter->stats_lock, flags); |
4144 spin_lock_irqsave(&adapter->stats_lock, flags); |
4143 e1000_tbi_adjust_stats(hw, &adapter->stats, |
4145 e1000_tbi_adjust_stats(hw, &adapter->stats, |