devices/e1000/e1000_main-2.6.22-ethercat.c
changeset 789 beca96e44f9f
parent 788 9999ca1a1953
child 1011 a0759d0dded4
equal deleted inserted replaced
788:9999ca1a1953 789:beca96e44f9f
    27 *******************************************************************************/
    27 *******************************************************************************/
    28 
    28 
    29 #include "e1000-2.6.22-ethercat.h"
    29 #include "e1000-2.6.22-ethercat.h"
    30 #include <net/ip6_checksum.h>
    30 #include <net/ip6_checksum.h>
    31 
    31 
    32 char e1000_driver_name[] = "e1000";
    32 char e1000_driver_name[] = "ec_e1000";
    33 static char e1000_driver_string[] = "Intel(R) PRO/1000 Network Driver";
    33 static char e1000_driver_string[] = "EtherCAT Intel(R) PRO/1000 Network Driver";
    34 #ifndef CONFIG_E1000_NAPI
    34 #ifndef CONFIG_E1000_NAPI
    35 #define DRIVERNAPI
    35 #define DRIVERNAPI
    36 #else
    36 #else
    37 #define DRIVERNAPI "-NAPI"
    37 #define DRIVERNAPI "-NAPI"
    38 #endif
    38 #endif
   109 	INTEL_E1000_ETHERNET_DEVICE(0x10C5),
   109 	INTEL_E1000_ETHERNET_DEVICE(0x10C5),
   110 	/* required last entry */
   110 	/* required last entry */
   111 	{0,}
   111 	{0,}
   112 };
   112 };
   113 
   113 
   114 MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);
   114 // do not auto-load driver
       
   115 // MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);
   115 
   116 
   116 int e1000_up(struct e1000_adapter *adapter);
   117 int e1000_up(struct e1000_adapter *adapter);
   117 void e1000_down(struct e1000_adapter *adapter);
   118 void e1000_down(struct e1000_adapter *adapter);
   118 void e1000_reinit_locked(struct e1000_adapter *adapter);
   119 void e1000_reinit_locked(struct e1000_adapter *adapter);
   119 void e1000_reset(struct e1000_adapter *adapter);
   120 void e1000_reset(struct e1000_adapter *adapter);
   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
   240 #endif
   242 #endif
   241 	.shutdown = e1000_shutdown,
   243 	.shutdown = e1000_shutdown,
   242 	.err_handler = &e1000_err_handler
   244 	.err_handler = &e1000_err_handler
   243 };
   245 };
   244 
   246 
   245 MODULE_AUTHOR("Intel Corporation, <linux.nics@intel.com>");
   247 MODULE_AUTHOR("Florian Pose <fp@igh-essen.com>");
   246 MODULE_DESCRIPTION("Intel(R) PRO/1000 Network Driver");
   248 MODULE_DESCRIPTION("EtherCAT-capable Intel(R) PRO/1000 Network Driver");
   247 MODULE_LICENSE("GPL");
   249 MODULE_LICENSE("GPL");
   248 MODULE_VERSION(DRV_VERSION);
   250 MODULE_VERSION(DRV_VERSION);
   249 
   251 
   250 static int debug = NETIF_MSG_DRV | NETIF_MSG_PROBE;
   252 static int debug = NETIF_MSG_DRV | NETIF_MSG_PROBE;
   251 module_param(debug, int, 0);
   253 module_param(debug, int, 0);
   300 	struct net_device *netdev = adapter->netdev;
   302 	struct net_device *netdev = adapter->netdev;
   301 	void (*handler) = &e1000_intr;
   303 	void (*handler) = &e1000_intr;
   302 	int irq_flags = IRQF_SHARED;
   304 	int irq_flags = IRQF_SHARED;
   303 	int err;
   305 	int err;
   304 
   306 
       
   307 	if (adapter->ecdev)
       
   308 		return 0;
       
   309 
   305 	if (adapter->hw.mac_type >= e1000_82571) {
   310 	if (adapter->hw.mac_type >= e1000_82571) {
   306 		adapter->have_msi = !pci_enable_msi(adapter->pdev);
   311 		adapter->have_msi = !pci_enable_msi(adapter->pdev);
   307 		if (adapter->have_msi) {
   312 		if (adapter->have_msi) {
   308 			handler = &e1000_intr_msi;
   313 			handler = &e1000_intr_msi;
   309 			irq_flags = 0;
   314 			irq_flags = 0;
   324 
   329 
   325 static void e1000_free_irq(struct e1000_adapter *adapter)
   330 static void e1000_free_irq(struct e1000_adapter *adapter)
   326 {
   331 {
   327 	struct net_device *netdev = adapter->netdev;
   332 	struct net_device *netdev = adapter->netdev;
   328 
   333 
       
   334 	if (adapter->ecdev)
       
   335 		return;
       
   336 
   329 	free_irq(adapter->pdev->irq, netdev);
   337 	free_irq(adapter->pdev->irq, netdev);
   330 
   338 
   331 	if (adapter->have_msi)
   339 	if (adapter->have_msi)
   332 		pci_disable_msi(adapter->pdev);
   340 		pci_disable_msi(adapter->pdev);
   333 }
   341 }
   338  **/
   346  **/
   339 
   347 
   340 static void
   348 static void
   341 e1000_irq_disable(struct e1000_adapter *adapter)
   349 e1000_irq_disable(struct e1000_adapter *adapter)
   342 {
   350 {
       
   351     if (adapter->ecdev)
       
   352         return;
       
   353 
   343 	atomic_inc(&adapter->irq_sem);
   354 	atomic_inc(&adapter->irq_sem);
   344 	E1000_WRITE_REG(&adapter->hw, IMC, ~0);
   355 	E1000_WRITE_REG(&adapter->hw, IMC, ~0);
   345 	E1000_WRITE_FLUSH(&adapter->hw);
   356 	E1000_WRITE_FLUSH(&adapter->hw);
   346 	synchronize_irq(adapter->pdev->irq);
   357 	synchronize_irq(adapter->pdev->irq);
   347 }
   358 }
   352  **/
   363  **/
   353 
   364 
   354 static void
   365 static void
   355 e1000_irq_enable(struct e1000_adapter *adapter)
   366 e1000_irq_enable(struct e1000_adapter *adapter)
   356 {
   367 {
       
   368     if (adapter->ecdev)
       
   369         return;
       
   370 
   357 	if (likely(atomic_dec_and_test(&adapter->irq_sem))) {
   371 	if (likely(atomic_dec_and_test(&adapter->irq_sem))) {
   358 		E1000_WRITE_REG(&adapter->hw, IMS, IMS_ENABLE_MASK);
   372 		E1000_WRITE_REG(&adapter->hw, IMS, IMS_ENABLE_MASK);
   359 		E1000_WRITE_FLUSH(&adapter->hw);
   373 		E1000_WRITE_FLUSH(&adapter->hw);
   360 	}
   374 	}
   361 }
   375 }
   538 	/* hardware has been reset, we need to reload some things */
   552 	/* hardware has been reset, we need to reload some things */
   539 	e1000_configure(adapter);
   553 	e1000_configure(adapter);
   540 
   554 
   541 	clear_bit(__E1000_DOWN, &adapter->flags);
   555 	clear_bit(__E1000_DOWN, &adapter->flags);
   542 
   556 
       
   557 	if (!adapter->ecdev) {
   543 #ifdef CONFIG_E1000_NAPI
   558 #ifdef CONFIG_E1000_NAPI
   544 	netif_poll_enable(adapter->netdev);
   559 		netif_poll_enable(adapter->netdev);
   545 #endif
   560 #endif
   546 	e1000_irq_enable(adapter);
   561         e1000_irq_enable(adapter);
   547 
   562 
   548 	/* fire a link change interrupt to start the watchdog */
   563 		/* fire a link change interrupt to start the watchdog */
   549 	E1000_WRITE_REG(&adapter->hw, ICS, E1000_ICS_LSC);
   564 		E1000_WRITE_REG(&adapter->hw, ICS, E1000_ICS_LSC);
       
   565     }
   550 	return 0;
   566 	return 0;
   551 }
   567 }
   552 
   568 
   553 /**
   569 /**
   554  * e1000_power_up_phy - restore link in case the phy was powered down
   570  * e1000_power_up_phy - restore link in case the phy was powered down
   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;
  1214 
  1247 
  1215 	/* Release control of h/w to f/w.  If f/w is AMT enabled, this
  1248 	/* Release control of h/w to f/w.  If f/w is AMT enabled, this
  1216 	 * would have already happened in close and is redundant. */
  1249 	 * would have already happened in close and is redundant. */
  1217 	e1000_release_hw_control(adapter);
  1250 	e1000_release_hw_control(adapter);
  1218 
  1251 
  1219 	unregister_netdev(netdev);
  1252 	if (adapter->ecdev) {
       
  1253 		ecdev_close(adapter->ecdev);
       
  1254 		ecdev_withdraw(adapter->ecdev);
       
  1255 	} else {
       
  1256 		unregister_netdev(netdev);
       
  1257 	}
  1220 #ifdef CONFIG_E1000_NAPI
  1258 #ifdef CONFIG_E1000_NAPI
  1221 	for (i = 0; i < adapter->num_rx_queues; i++)
  1259 	for (i = 0; i < adapter->num_rx_queues; i++)
  1222 		dev_put(&adapter->polling_netdev[i]);
  1260 		dev_put(&adapter->polling_netdev[i]);
  1223 #endif
  1261 #endif
  1224 
  1262 
  1436 
  1474 
  1437 	/* From here on the code is the same as e1000_up() */
  1475 	/* From here on the code is the same as e1000_up() */
  1438 	clear_bit(__E1000_DOWN, &adapter->flags);
  1476 	clear_bit(__E1000_DOWN, &adapter->flags);
  1439 
  1477 
  1440 #ifdef CONFIG_E1000_NAPI
  1478 #ifdef CONFIG_E1000_NAPI
  1441 	netif_poll_enable(netdev);
  1479     if (!adapter->ecdev)
       
  1480 		netif_poll_enable(netdev);
  1442 #endif
  1481 #endif
  1443 
  1482 
  1444 	e1000_irq_enable(adapter);
  1483 	e1000_irq_enable(adapter);
  1445 
  1484 
  1446 	/* fire a link status change interrupt to start the watchdog */
  1485 	/* fire a link status change interrupt to start the watchdog */
  2134 
  2173 
  2135 static void
  2174 static void
  2136 e1000_unmap_and_free_tx_resource(struct e1000_adapter *adapter,
  2175 e1000_unmap_and_free_tx_resource(struct e1000_adapter *adapter,
  2137 			struct e1000_buffer *buffer_info)
  2176 			struct e1000_buffer *buffer_info)
  2138 {
  2177 {
       
  2178 	if (adapter->ecdev)
       
  2179 		return;
       
  2180 
  2139 	if (buffer_info->dma) {
  2181 	if (buffer_info->dma) {
  2140 		pci_unmap_page(adapter->pdev,
  2182 		pci_unmap_page(adapter->pdev,
  2141 				buffer_info->dma,
  2183 				buffer_info->dma,
  2142 				buffer_info->length,
  2184 				buffer_info->length,
  2143 				PCI_DMA_TODEVICE);
  2185 				PCI_DMA_TODEVICE);
  2333 	rctl |= E1000_RCTL_RST;
  2375 	rctl |= E1000_RCTL_RST;
  2334 	E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
  2376 	E1000_WRITE_REG(&adapter->hw, RCTL, rctl);
  2335 	E1000_WRITE_FLUSH(&adapter->hw);
  2377 	E1000_WRITE_FLUSH(&adapter->hw);
  2336 	mdelay(5);
  2378 	mdelay(5);
  2337 
  2379 
  2338 	if (netif_running(netdev))
  2380 	if (!adapter->ecdev && netif_running(netdev))
  2339 		e1000_clean_all_rx_rings(adapter);
  2381 		e1000_clean_all_rx_rings(adapter);
  2340 }
  2382 }
  2341 
  2383 
  2342 static void
  2384 static void
  2343 e1000_leave_82542_rst(struct e1000_adapter *adapter)
  2385 e1000_leave_82542_rst(struct e1000_adapter *adapter)
  2352 	mdelay(5);
  2394 	mdelay(5);
  2353 
  2395 
  2354 	if (adapter->hw.pci_cmd_word & PCI_COMMAND_INVALIDATE)
  2396 	if (adapter->hw.pci_cmd_word & PCI_COMMAND_INVALIDATE)
  2355 		e1000_pci_set_mwi(&adapter->hw);
  2397 		e1000_pci_set_mwi(&adapter->hw);
  2356 
  2398 
  2357 	if (netif_running(netdev)) {
  2399 	if (!adapter->netdev && netif_running(netdev)) {
  2358 		/* No need to loop, because 82542 supports only 1 queue */
  2400 		/* No need to loop, because 82542 supports only 1 queue */
  2359 		struct e1000_rx_ring *ring = &adapter->rx_ring[0];
  2401 		struct e1000_rx_ring *ring = &adapter->rx_ring[0];
  2360 		e1000_configure_rx(adapter);
  2402 		e1000_configure_rx(adapter);
  2361 		adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring));
  2403 		adapter->alloc_rx_buf(adapter, ring, E1000_DESC_UNUSED(ring));
  2362 	}
  2404 	}
  2541 			E1000_WRITE_REG(&adapter->hw, TCTL, tctl);
  2583 			E1000_WRITE_REG(&adapter->hw, TCTL, tctl);
  2542 			E1000_WRITE_FLUSH(&adapter->hw);
  2584 			E1000_WRITE_FLUSH(&adapter->hw);
  2543 
  2585 
  2544 			adapter->tx_fifo_head = 0;
  2586 			adapter->tx_fifo_head = 0;
  2545 			atomic_set(&adapter->tx_fifo_stall, 0);
  2587 			atomic_set(&adapter->tx_fifo_stall, 0);
  2546 			netif_wake_queue(netdev);
  2588 			if (!adapter->ecdev) netif_wake_queue(netdev);
  2547 		} else {
  2589 		} else {
  2548 			mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1);
  2590 			if (!adapter->ecdev)
       
  2591 				mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1);
  2549 		}
  2592 		}
  2550 	}
  2593 	}
  2551 }
  2594 }
  2552 
  2595 
  2553 /**
  2596 /**
  2583 		link = !adapter->hw.serdes_link_down;
  2626 		link = !adapter->hw.serdes_link_down;
  2584 	else
  2627 	else
  2585 		link = E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU;
  2628 		link = E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_LU;
  2586 
  2629 
  2587 	if (link) {
  2630 	if (link) {
  2588 		if (!netif_carrier_ok(netdev)) {
  2631 		if ((adapter->ecdev && !ecdev_get_link(adapter->ecdev))
       
  2632 				|| (!adapter->ecdev && !netif_carrier_ok(netdev))) {
  2589 			uint32_t ctrl;
  2633 			uint32_t ctrl;
  2590 			boolean_t txb2b = 1;
  2634 			boolean_t txb2b = 1;
  2591 			e1000_get_speed_and_duplex(&adapter->hw,
  2635 			e1000_get_speed_and_duplex(&adapter->hw,
  2592 			                           &adapter->link_speed,
  2636 			                           &adapter->link_speed,
  2593 			                           &adapter->link_duplex);
  2637 			                           &adapter->link_duplex);
  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
  2703 	adapter->gotcl = adapter->stats.gotcl - adapter->gotcl_old;
  2756 	adapter->gotcl = adapter->stats.gotcl - adapter->gotcl_old;
  2704 	adapter->gotcl_old = adapter->stats.gotcl;
  2757 	adapter->gotcl_old = adapter->stats.gotcl;
  2705 
  2758 
  2706 	e1000_update_adaptive(&adapter->hw);
  2759 	e1000_update_adaptive(&adapter->hw);
  2707 
  2760 
  2708 	if (!netif_carrier_ok(netdev)) {
  2761 	if (!adapter->ecdev && !netif_carrier_ok(netdev)) {
  2709 		if (E1000_DESC_UNUSED(txdr) + 1 < txdr->count) {
  2762 		if (E1000_DESC_UNUSED(txdr) + 1 < txdr->count) {
  2710 			/* We've lost link, so the controller stops DMA,
  2763 			/* We've lost link, so the controller stops DMA,
  2711 			 * but we've got queued Tx work that's never going
  2764 			 * but we've got queued Tx work that's never going
  2712 			 * to get done, so reset controller to flush Tx.
  2765 			 * to get done, so reset controller to flush Tx.
  2713 			 * (Do the reset outside of interrupt context). */
  2766 			 * (Do the reset outside of interrupt context). */
  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,
  3260 	struct e1000_tx_ring *tx_ring;
  3314 	struct e1000_tx_ring *tx_ring;
  3261 	unsigned int first, max_per_txd = E1000_MAX_DATA_PER_TXD;
  3315 	unsigned int first, max_per_txd = E1000_MAX_DATA_PER_TXD;
  3262 	unsigned int max_txd_pwr = E1000_MAX_TXD_PWR;
  3316 	unsigned int max_txd_pwr = E1000_MAX_TXD_PWR;
  3263 	unsigned int tx_flags = 0;
  3317 	unsigned int tx_flags = 0;
  3264 	unsigned int len = skb->len;
  3318 	unsigned int len = skb->len;
  3265 	unsigned long flags;
  3319 	unsigned long flags = 0;
  3266 	unsigned int nr_frags = 0;
  3320 	unsigned int nr_frags = 0;
  3267 	unsigned int mss = 0;
  3321 	unsigned int mss = 0;
  3268 	int count = 0;
  3322 	int count = 0;
  3269 	int tso;
  3323 	int tso;
  3270 	unsigned int f;
  3324 	unsigned int f;
  3275 	 * if using multiple tx queues.  If the stack breaks away from a
  3329 	 * if using multiple tx queues.  If the stack breaks away from a
  3276 	 * single qdisc implementation, we can look at this again. */
  3330 	 * single qdisc implementation, we can look at this again. */
  3277 	tx_ring = adapter->tx_ring;
  3331 	tx_ring = adapter->tx_ring;
  3278 
  3332 
  3279 	if (unlikely(skb->len <= 0)) {
  3333 	if (unlikely(skb->len <= 0)) {
  3280 		dev_kfree_skb_any(skb);
  3334 		if (!adapter->ecdev)
       
  3335 			dev_kfree_skb_any(skb);
  3281 		return NETDEV_TX_OK;
  3336 		return NETDEV_TX_OK;
  3282 	}
  3337 	}
  3283 
  3338 
  3284 	/* 82571 and newer doesn't need the workaround that limited descriptor
  3339 	/* 82571 and newer doesn't need the workaround that limited descriptor
  3285 	 * length to 4kB */
  3340 	 * length to 4kB */
  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))) {
  3395 
  3453 
  3396 	first = tx_ring->next_to_use;
  3454 	first = tx_ring->next_to_use;
  3397 
  3455 
  3398 	tso = e1000_tso(adapter, tx_ring, skb);
  3456 	tso = e1000_tso(adapter, tx_ring, skb);
  3399 	if (tso < 0) {
  3457 	if (tso < 0) {
  3400 		dev_kfree_skb_any(skb);
  3458 		if (!adapter->ecdev) {
  3401 		spin_unlock_irqrestore(&tx_ring->tx_lock, flags);
  3459 			dev_kfree_skb_any(skb);
       
  3460 			spin_unlock_irqrestore(&tx_ring->tx_lock, flags);
       
  3461 		}
  3402 		return NETDEV_TX_OK;
  3462 		return NETDEV_TX_OK;
  3403 	}
  3463 	}
  3404 
  3464 
  3405 	if (likely(tso)) {
  3465 	if (likely(tso)) {
  3406 		tx_ring->last_tx_tso = 1;
  3466 		tx_ring->last_tx_tso = 1;
  3418 	               e1000_tx_map(adapter, tx_ring, skb, first,
  3478 	               e1000_tx_map(adapter, tx_ring, skb, first,
  3419 	                            max_per_txd, nr_frags, mss));
  3479 	                            max_per_txd, nr_frags, mss));
  3420 
  3480 
  3421 	netdev->trans_start = jiffies;
  3481 	netdev->trans_start = jiffies;
  3422 
  3482 
  3423 	/* Make sure there is space in the ring for the next send. */
  3483 	if (!adapter->ecdev) {
  3424 	e1000_maybe_stop_tx(netdev, tx_ring, MAX_SKB_FRAGS + 2);
  3484 		/* Make sure there is space in the ring for the next send. */
  3425 
  3485 		e1000_maybe_stop_tx(netdev, tx_ring, MAX_SKB_FRAGS + 2);
  3426 	spin_unlock_irqrestore(&tx_ring->tx_lock, flags);
  3486 
       
  3487 		spin_unlock_irqrestore(&tx_ring->tx_lock, flags);
       
  3488 	}
  3427 	return NETDEV_TX_OK;
  3489 	return NETDEV_TX_OK;
  3428 }
  3490 }
  3429 
  3491 
  3430 /**
  3492 /**
  3431  * e1000_tx_timeout - Respond to a Tx Hang
  3493  * e1000_tx_timeout - Respond to a Tx Hang
  3480 e1000_change_mtu(struct net_device *netdev, int new_mtu)
  3542 e1000_change_mtu(struct net_device *netdev, int new_mtu)
  3481 {
  3543 {
  3482 	struct e1000_adapter *adapter = netdev_priv(netdev);
  3544 	struct e1000_adapter *adapter = netdev_priv(netdev);
  3483 	int max_frame = new_mtu + ENET_HEADER_SIZE + ETHERNET_FCS_SIZE;
  3545 	int max_frame = new_mtu + ENET_HEADER_SIZE + ETHERNET_FCS_SIZE;
  3484 	uint16_t eeprom_data = 0;
  3546 	uint16_t eeprom_data = 0;
       
  3547 
       
  3548 	if (adapter->ecdev)
       
  3549 		return -EBUSY;
  3485 
  3550 
  3486 	if ((max_frame < MINIMUM_ETHERNET_FRAME_SIZE) ||
  3551 	if ((max_frame < MINIMUM_ETHERNET_FRAME_SIZE) ||
  3487 	    (max_frame > MAX_JUMBO_FRAME_SIZE)) {
  3552 	    (max_frame > MAX_JUMBO_FRAME_SIZE)) {
  3488 		DPRINTK(PROBE, ERR, "Invalid MTU setting\n");
  3553 		DPRINTK(PROBE, ERR, "Invalid MTU setting\n");
  3489 		return -EINVAL;
  3554 		return -EINVAL;
  3573 void
  3638 void
  3574 e1000_update_stats(struct e1000_adapter *adapter)
  3639 e1000_update_stats(struct e1000_adapter *adapter)
  3575 {
  3640 {
  3576 	struct e1000_hw *hw = &adapter->hw;
  3641 	struct e1000_hw *hw = &adapter->hw;
  3577 	struct pci_dev *pdev = adapter->pdev;
  3642 	struct pci_dev *pdev = adapter->pdev;
  3578 	unsigned long flags;
  3643 	unsigned long flags = 0;
  3579 	uint16_t phy_tmp;
  3644 	uint16_t phy_tmp;
  3580 
  3645 
  3581 #define PHY_IDLE_ERROR_COUNT_MASK 0x00FF
  3646 #define PHY_IDLE_ERROR_COUNT_MASK 0x00FF
  3582 
  3647 
  3583 	/*
  3648 	/*
  3587 	if (adapter->link_speed == 0)
  3652 	if (adapter->link_speed == 0)
  3588 		return;
  3653 		return;
  3589 	if (pci_channel_offline(pdev))
  3654 	if (pci_channel_offline(pdev))
  3590 		return;
  3655 		return;
  3591 
  3656 
  3592 	spin_lock_irqsave(&adapter->stats_lock, flags);
  3657 	if (!adapter->ecdev)
       
  3658 		spin_lock_irqsave(&adapter->stats_lock, flags);
  3593 
  3659 
  3594 	/* these counters are modified from e1000_adjust_tbi_stats,
  3660 	/* these counters are modified from e1000_adjust_tbi_stats,
  3595 	 * called from the interrupt context, so they must only
  3661 	 * called from the interrupt context, so they must only
  3596 	 * be written while holding adapter->stats_lock
  3662 	 * be written while holding adapter->stats_lock
  3597 	 */
  3663 	 */
  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 /**
  3818 {
  3915 {
  3819 	struct net_device *netdev = data;
  3916 	struct net_device *netdev = data;
  3820 	struct e1000_adapter *adapter = netdev_priv(netdev);
  3917 	struct e1000_adapter *adapter = netdev_priv(netdev);
  3821 	struct e1000_hw *hw = &adapter->hw;
  3918 	struct e1000_hw *hw = &adapter->hw;
  3822 	uint32_t rctl, icr = E1000_READ_REG(hw, ICR);
  3919 	uint32_t rctl, icr = E1000_READ_REG(hw, ICR);
  3823 #ifndef CONFIG_E1000_NAPI
       
  3824 	int i;
  3920 	int i;
       
  3921 #ifdef CONFIG_E1000_NAPI
       
  3922 	int ec_work_done = 0;
  3825 #endif
  3923 #endif
  3826 	if (unlikely(!icr))
  3924 	if (unlikely(!icr))
  3827 		return IRQ_NONE;  /* Not our interrupt */
  3925 		return IRQ_NONE;  /* Not our interrupt */
  3828 
  3926 
  3829 #ifdef CONFIG_E1000_NAPI
  3927 #ifdef CONFIG_E1000_NAPI
  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 
  4018 	}
  4129 	}
  4019 
  4130 
  4020 	tx_ring->next_to_clean = i;
  4131 	tx_ring->next_to_clean = i;
  4021 
  4132 
  4022 #define TX_WAKE_THRESHOLD 32
  4133 #define TX_WAKE_THRESHOLD 32
  4023 	if (unlikely(cleaned && netif_carrier_ok(netdev) &&
  4134 	if (!adapter->ecdev && unlikely(cleaned && netif_carrier_ok(netdev) &&
  4024 		     E1000_DESC_UNUSED(tx_ring) >= TX_WAKE_THRESHOLD)) {
  4135 		     E1000_DESC_UNUSED(tx_ring) >= TX_WAKE_THRESHOLD)) {
  4025 		/* Make sure that anybody stopping the queue after this
  4136 		/* Make sure that anybody stopping the queue after this
  4026 		 * sees the new next_to_clean.
  4137 		 * sees the new next_to_clean.
  4027 		 */
  4138 		 */
  4028 		smp_mb();
  4139 		smp_mb();
  4030 			netif_wake_queue(netdev);
  4141 			netif_wake_queue(netdev);
  4031 			++adapter->restart_queue;
  4142 			++adapter->restart_queue;
  4032 		}
  4143 		}
  4033 	}
  4144 	}
  4034 
  4145 
  4035 	if (adapter->detect_tx_hung) {
  4146 	if (!adapter->ecdev && adapter->detect_tx_hung) {
  4036 		/* Detect a transmit hang in hardware, this serializes the
  4147 		/* Detect a transmit hang in hardware, this serializes the
  4037 		 * check with the clearing of time_stamp and movement of i */
  4148 		 * check with the clearing of time_stamp and movement of i */
  4038 		adapter->detect_tx_hung = FALSE;
  4149 		adapter->detect_tx_hung = FALSE;
  4039 		if (tx_ring->buffer_info[eop].dma &&
  4150 		if (tx_ring->buffer_info[eop].dma &&
  4040 		    time_after(jiffies, tx_ring->buffer_info[eop].time_stamp +
  4151 		    time_after(jiffies, tx_ring->buffer_info[eop].time_stamp +
  4163 			break;
  4274 			break;
  4164 		(*work_done)++;
  4275 		(*work_done)++;
  4165 #endif
  4276 #endif
  4166 		status = rx_desc->status;
  4277 		status = rx_desc->status;
  4167 		skb = buffer_info->skb;
  4278 		skb = buffer_info->skb;
  4168 		buffer_info->skb = NULL;
  4279 		if (!adapter->ecdev) buffer_info->skb = NULL;
  4169 
  4280 
  4170 		prefetch(skb->data - NET_IP_ALIGN);
  4281 		prefetch(skb->data - NET_IP_ALIGN);
  4171 
  4282 
  4172 		if (++i == rx_ring->count) i = 0;
  4283 		if (++i == rx_ring->count) i = 0;
  4173 		next_rxd = E1000_RX_DESC(*rx_ring, i);
  4284 		next_rxd = E1000_RX_DESC(*rx_ring, i);
  4191 			/* recycle */
  4302 			/* recycle */
  4192 			buffer_info->skb = skb;
  4303 			buffer_info->skb = skb;
  4193 			goto next_desc;
  4304 			goto next_desc;
  4194 		}
  4305 		}
  4195 
  4306 
  4196 		if (unlikely(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK)) {
  4307 		if (!adapter->ecdev &&
       
  4308                 unlikely(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK)) {
  4197 			last_byte = *(skb->data + length - 1);
  4309 			last_byte = *(skb->data + length - 1);
  4198 			if (TBI_ACCEPT(&adapter->hw, status,
  4310 			if (TBI_ACCEPT(&adapter->hw, status,
  4199 			              rx_desc->errors, length, last_byte)) {
  4311 			              rx_desc->errors, length, last_byte)) {
  4200 				spin_lock_irqsave(&adapter->stats_lock, flags);
  4312 				spin_lock_irqsave(&adapter->stats_lock, flags);
  4201 				e1000_tbi_adjust_stats(&adapter->hw,
  4313 				e1000_tbi_adjust_stats(&adapter->hw,
  4220 		total_rx_packets++;
  4332 		total_rx_packets++;
  4221 
  4333 
  4222 		/* code added for copybreak, this should improve
  4334 		/* code added for copybreak, this should improve
  4223 		 * performance for small packets with large amounts
  4335 		 * performance for small packets with large amounts
  4224 		 * of reassembly being done in the stack */
  4336 		 * of reassembly being done in the stack */
  4225 		if (length < copybreak) {
  4337 		if (!adapter->ecdev && length < copybreak) {
  4226 			struct sk_buff *new_skb =
  4338 			struct sk_buff *new_skb =
  4227 			    netdev_alloc_skb(netdev, length + NET_IP_ALIGN);
  4339 			    netdev_alloc_skb(netdev, length + NET_IP_ALIGN);
  4228 			if (new_skb) {
  4340 			if (new_skb) {
  4229 				skb_reserve(new_skb, NET_IP_ALIGN);
  4341 				skb_reserve(new_skb, NET_IP_ALIGN);
  4230 				skb_copy_to_linear_data_offset(new_skb,
  4342 				skb_copy_to_linear_data_offset(new_skb,
  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;
  4559 					adapter->rx_buffer_len)) {
  4679 					adapter->rx_buffer_len)) {
  4560 			DPRINTK(RX_ERR, ERR,
  4680 			DPRINTK(RX_ERR, ERR,
  4561 				"dma align check failed: %u bytes at %p\n",
  4681 				"dma align check failed: %u bytes at %p\n",
  4562 				adapter->rx_buffer_len,
  4682 				adapter->rx_buffer_len,
  4563 				(void *)(unsigned long)buffer_info->dma);
  4683 				(void *)(unsigned long)buffer_info->dma);
  4564 			dev_kfree_skb(skb);
  4684 			if (!adapter->ecdev) {
  4565 			buffer_info->skb = NULL;
  4685                 dev_kfree_skb(skb);
       
  4686 				buffer_info->skb = NULL;
       
  4687 			}
  4566 
  4688 
  4567 			pci_unmap_single(pdev, buffer_info->dma,
  4689 			pci_unmap_single(pdev, buffer_info->dma,
  4568 					 adapter->rx_buffer_len,
  4690 					 adapter->rx_buffer_len,
  4569 					 PCI_DMA_FROMDEVICE);
  4691 					 PCI_DMA_FROMDEVICE);
  4570 
  4692 
  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);
  5077 	uint32_t wufc = adapter->wol;
  5199 	uint32_t wufc = adapter->wol;
  5078 #ifdef CONFIG_PM
  5200 #ifdef CONFIG_PM
  5079 	int retval = 0;
  5201 	int retval = 0;
  5080 #endif
  5202 #endif
  5081 
  5203 
       
  5204 	if (adapter->ecdev)
       
  5205 		return -EBUSY;
       
  5206 
  5082 	netif_device_detach(netdev);
  5207 	netif_device_detach(netdev);
  5083 
  5208 
  5084 	if (netif_running(netdev)) {
  5209 	if (netif_running(netdev)) {
  5085 		WARN_ON(test_bit(__E1000_RESETTING, &adapter->flags));
  5210 		WARN_ON(test_bit(__E1000_RESETTING, &adapter->flags));
  5086 		e1000_down(adapter);
  5211 		e1000_down(adapter);
  5171 {
  5296 {
  5172 	struct net_device *netdev = pci_get_drvdata(pdev);
  5297 	struct net_device *netdev = pci_get_drvdata(pdev);
  5173 	struct e1000_adapter *adapter = netdev_priv(netdev);
  5298 	struct e1000_adapter *adapter = netdev_priv(netdev);
  5174 	uint32_t err;
  5299 	uint32_t err;
  5175 
  5300 
       
  5301 	if (adapter->ecdev)
       
  5302 		return -EBUSY;
       
  5303 
  5176 	pci_set_power_state(pdev, PCI_D0);
  5304 	pci_set_power_state(pdev, PCI_D0);
  5177 	pci_restore_state(pdev);
  5305 	pci_restore_state(pdev);
  5178 	if ((err = pci_enable_device(pdev))) {
  5306 	if ((err = pci_enable_device(pdev))) {
  5179 		printk(KERN_ERR "e1000: Cannot enable PCI device from suspend\n");
  5307 		printk(KERN_ERR "e1000: Cannot enable PCI device from suspend\n");
  5180 		return err;
  5308 		return err;
  5194 	e1000_init_manageability(adapter);
  5322 	e1000_init_manageability(adapter);
  5195 
  5323 
  5196 	if (netif_running(netdev))
  5324 	if (netif_running(netdev))
  5197 		e1000_up(adapter);
  5325 		e1000_up(adapter);
  5198 
  5326 
  5199 	netif_device_attach(netdev);
  5327 	if (!adapter->ecdev) netif_device_attach(netdev);
  5200 
  5328 
  5201 	/* If the controller is 82573 and f/w is AMT, do not set
  5329 	/* If the controller is 82573 and f/w is AMT, do not set
  5202 	 * DRV_LOAD until the interface is up.  For all other cases,
  5330 	 * DRV_LOAD until the interface is up.  For all other cases,
  5203 	 * let the f/w know that the h/w is now under the control
  5331 	 * let the f/w know that the h/w is now under the control
  5204 	 * of the driver. */
  5332 	 * of the driver. */