1 /*******************************************************************************
3 Intel PRO/10GbE Linux driver
4 Copyright(c) 1999 - 2006 Intel Corporation.
6 This program is free software; you can redistribute it and/or modify it
7 under the terms and conditions of the GNU General Public License,
8 version 2, as published by the Free Software Foundation.
10 This program is distributed in the hope it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 You should have received a copy of the GNU General Public License along with
16 this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
19 The full GNU General Public License is included in this distribution in
20 the file called "COPYING".
25 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
27 *******************************************************************************/
31 char ixgb_driver_name[] = "ixgb";
32 static char ixgb_driver_string[] = "Intel(R) PRO/10GbE Network Driver";
34 #ifndef CONFIG_IXGB_NAPI
37 #define DRIVERNAPI "-NAPI"
39 #define DRV_VERSION "1.0.126-k2"DRIVERNAPI
40 char ixgb_driver_version[] = DRV_VERSION;
41 static char ixgb_copyright[] = "Copyright (c) 1999-2006 Intel Corporation.";
43 /* ixgb_pci_tbl - PCI Device ID Table
45 * Wildcard entries (PCI_ANY_ID) should come last
46 * Last entry must be all 0s
48 * { Vendor ID, Device ID, SubVendor ID, SubDevice ID,
49 * Class, Class Mask, private data (not used) }
51 static struct pci_device_id ixgb_pci_tbl[] = {
52 {INTEL_VENDOR_ID, IXGB_DEVICE_ID_82597EX,
53 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
54 {INTEL_VENDOR_ID, IXGB_DEVICE_ID_82597EX_CX4,
55 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
56 {INTEL_VENDOR_ID, IXGB_DEVICE_ID_82597EX_SR,
57 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
58 {INTEL_VENDOR_ID, IXGB_DEVICE_ID_82597EX_LR,
59 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
61 /* required last entry */
65 MODULE_DEVICE_TABLE(pci, ixgb_pci_tbl);
67 /* Local Function Prototypes */
69 int ixgb_up(struct ixgb_adapter *adapter);
70 void ixgb_down(struct ixgb_adapter *adapter, boolean_t kill_watchdog);
71 void ixgb_reset(struct ixgb_adapter *adapter);
72 int ixgb_setup_tx_resources(struct ixgb_adapter *adapter);
73 int ixgb_setup_rx_resources(struct ixgb_adapter *adapter);
74 void ixgb_free_tx_resources(struct ixgb_adapter *adapter);
75 void ixgb_free_rx_resources(struct ixgb_adapter *adapter);
76 void ixgb_update_stats(struct ixgb_adapter *adapter);
78 static int ixgb_init_module(void);
79 static void ixgb_exit_module(void);
80 static int ixgb_probe(struct pci_dev *pdev, const struct pci_device_id *ent);
81 static void __devexit ixgb_remove(struct pci_dev *pdev);
82 static int ixgb_sw_init(struct ixgb_adapter *adapter);
83 static int ixgb_open(struct net_device *netdev);
84 static int ixgb_close(struct net_device *netdev);
85 static void ixgb_configure_tx(struct ixgb_adapter *adapter);
86 static void ixgb_configure_rx(struct ixgb_adapter *adapter);
87 static void ixgb_setup_rctl(struct ixgb_adapter *adapter);
88 static void ixgb_clean_tx_ring(struct ixgb_adapter *adapter);
89 static void ixgb_clean_rx_ring(struct ixgb_adapter *adapter);
90 static void ixgb_set_multi(struct net_device *netdev);
91 static void ixgb_watchdog(unsigned long data);
92 static int ixgb_xmit_frame(struct sk_buff *skb, struct net_device *netdev);
93 static struct net_device_stats *ixgb_get_stats(struct net_device *netdev);
94 static int ixgb_change_mtu(struct net_device *netdev, int new_mtu);
95 static int ixgb_set_mac(struct net_device *netdev, void *p);
96 static irqreturn_t ixgb_intr(int irq, void *data);
97 static boolean_t ixgb_clean_tx_irq(struct ixgb_adapter *adapter);
99 #ifdef CONFIG_IXGB_NAPI
100 static int ixgb_clean(struct net_device *netdev, int *budget);
101 static boolean_t ixgb_clean_rx_irq(struct ixgb_adapter *adapter,
102 int *work_done, int work_to_do);
104 static boolean_t ixgb_clean_rx_irq(struct ixgb_adapter *adapter);
106 static void ixgb_alloc_rx_buffers(struct ixgb_adapter *adapter);
107 void ixgb_set_ethtool_ops(struct net_device *netdev);
108 static void ixgb_tx_timeout(struct net_device *dev);
109 static void ixgb_tx_timeout_task(struct work_struct *work);
110 static void ixgb_vlan_rx_register(struct net_device *netdev,
111 struct vlan_group *grp);
112 static void ixgb_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid);
113 static void ixgb_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid);
114 static void ixgb_restore_vlan(struct ixgb_adapter *adapter);
116 #ifdef CONFIG_NET_POLL_CONTROLLER
117 /* for netdump / net console */
118 static void ixgb_netpoll(struct net_device *dev);
121 static pci_ers_result_t ixgb_io_error_detected (struct pci_dev *pdev,
122 enum pci_channel_state state);
123 static pci_ers_result_t ixgb_io_slot_reset (struct pci_dev *pdev);
124 static void ixgb_io_resume (struct pci_dev *pdev);
126 /* Exported from other modules */
127 extern void ixgb_check_options(struct ixgb_adapter *adapter);
129 static struct pci_error_handlers ixgb_err_handler = {
130 .error_detected = ixgb_io_error_detected,
131 .slot_reset = ixgb_io_slot_reset,
132 .resume = ixgb_io_resume,
135 static struct pci_driver ixgb_driver = {
136 .name = ixgb_driver_name,
137 .id_table = ixgb_pci_tbl,
139 .remove = __devexit_p(ixgb_remove),
140 .err_handler = &ixgb_err_handler
144 MODULE_DESCRIPTION("Intel(R) PRO/10GbE Network Driver");
145 MODULE_LICENSE("GPL");
146 MODULE_VERSION(DRV_VERSION);
148 #define DEFAULT_DEBUG_LEVEL_SHIFT 3
149 static int debug = DEFAULT_DEBUG_LEVEL_SHIFT;
150 module_param(debug, int, 0);
151 MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
153 /* some defines for controlling descriptor fetches in h/w */
154 #define RXDCTL_WTHRESH_DEFAULT 15 /* chip writes back at this many or RXT0 */
155 #define RXDCTL_PTHRESH_DEFAULT 0 /* chip considers prefech below
157 #define RXDCTL_HTHRESH_DEFAULT 0 /* chip will only prefetch if tail
158 * is pushed this many descriptors
162 * ixgb_init_module - Driver Registration Routine
164 * ixgb_init_module is the first routine called when the driver is
165 * loaded. All it does is register with the PCI subsystem.
169 ixgb_init_module(void)
171 printk(KERN_INFO "%s - version %s\n",
172 ixgb_driver_string, ixgb_driver_version);
174 printk(KERN_INFO "%s\n", ixgb_copyright);
176 return pci_register_driver(&ixgb_driver);
179 module_init(ixgb_init_module);
182 * ixgb_exit_module - Driver Exit Cleanup Routine
184 * ixgb_exit_module is called just before the driver is removed
189 ixgb_exit_module(void)
191 pci_unregister_driver(&ixgb_driver);
194 module_exit(ixgb_exit_module);
197 * ixgb_irq_disable - Mask off interrupt generation on the NIC
198 * @adapter: board private structure
202 ixgb_irq_disable(struct ixgb_adapter *adapter)
204 atomic_inc(&adapter->irq_sem);
205 IXGB_WRITE_REG(&adapter->hw, IMC, ~0);
206 IXGB_WRITE_FLUSH(&adapter->hw);
207 synchronize_irq(adapter->pdev->irq);
211 * ixgb_irq_enable - Enable default interrupt generation settings
212 * @adapter: board private structure
216 ixgb_irq_enable(struct ixgb_adapter *adapter)
218 if(atomic_dec_and_test(&adapter->irq_sem)) {
219 IXGB_WRITE_REG(&adapter->hw, IMS,
220 IXGB_INT_RXT0 | IXGB_INT_RXDMT0 | IXGB_INT_TXDW |
222 IXGB_WRITE_FLUSH(&adapter->hw);
227 ixgb_up(struct ixgb_adapter *adapter)
229 struct net_device *netdev = adapter->netdev;
231 int max_frame = netdev->mtu + ENET_HEADER_SIZE + ENET_FCS_LENGTH;
232 struct ixgb_hw *hw = &adapter->hw;
234 /* hardware has been reset, we need to reload some things */
236 ixgb_rar_set(hw, netdev->dev_addr, 0);
237 ixgb_set_multi(netdev);
239 ixgb_restore_vlan(adapter);
241 ixgb_configure_tx(adapter);
242 ixgb_setup_rctl(adapter);
243 ixgb_configure_rx(adapter);
244 ixgb_alloc_rx_buffers(adapter);
246 /* disable interrupts and get the hardware into a known state */
247 IXGB_WRITE_REG(&adapter->hw, IMC, 0xffffffff);
249 #ifdef CONFIG_PCI_MSI
251 boolean_t pcix = (IXGB_READ_REG(&adapter->hw, STATUS) &
252 IXGB_STATUS_PCIX_MODE) ? TRUE : FALSE;
253 adapter->have_msi = TRUE;
256 adapter->have_msi = FALSE;
257 else if((err = pci_enable_msi(adapter->pdev))) {
259 "Unable to allocate MSI interrupt Error: %d\n", err);
260 adapter->have_msi = FALSE;
261 /* proceed to try to request regular interrupt */
266 if((err = request_irq(adapter->pdev->irq, &ixgb_intr,
267 IRQF_SHARED | IRQF_SAMPLE_RANDOM,
268 netdev->name, netdev))) {
270 "Unable to allocate interrupt Error: %d\n", err);
274 if((hw->max_frame_size != max_frame) ||
275 (hw->max_frame_size !=
276 (IXGB_READ_REG(hw, MFS) >> IXGB_MFS_SHIFT))) {
278 hw->max_frame_size = max_frame;
280 IXGB_WRITE_REG(hw, MFS, hw->max_frame_size << IXGB_MFS_SHIFT);
282 if(hw->max_frame_size >
283 IXGB_MAX_ENET_FRAME_SIZE_WITHOUT_FCS + ENET_FCS_LENGTH) {
284 uint32_t ctrl0 = IXGB_READ_REG(hw, CTRL0);
286 if(!(ctrl0 & IXGB_CTRL0_JFE)) {
287 ctrl0 |= IXGB_CTRL0_JFE;
288 IXGB_WRITE_REG(hw, CTRL0, ctrl0);
293 mod_timer(&adapter->watchdog_timer, jiffies);
295 #ifdef CONFIG_IXGB_NAPI
296 netif_poll_enable(netdev);
298 ixgb_irq_enable(adapter);
304 ixgb_down(struct ixgb_adapter *adapter, boolean_t kill_watchdog)
306 struct net_device *netdev = adapter->netdev;
308 ixgb_irq_disable(adapter);
309 free_irq(adapter->pdev->irq, netdev);
310 #ifdef CONFIG_PCI_MSI
311 if(adapter->have_msi == TRUE)
312 pci_disable_msi(adapter->pdev);
316 del_timer_sync(&adapter->watchdog_timer);
317 #ifdef CONFIG_IXGB_NAPI
318 netif_poll_disable(netdev);
320 adapter->link_speed = 0;
321 adapter->link_duplex = 0;
322 netif_carrier_off(netdev);
323 netif_stop_queue(netdev);
326 ixgb_clean_tx_ring(adapter);
327 ixgb_clean_rx_ring(adapter);
331 ixgb_reset(struct ixgb_adapter *adapter)
334 ixgb_adapter_stop(&adapter->hw);
335 if(!ixgb_init_hw(&adapter->hw))
336 DPRINTK(PROBE, ERR, "ixgb_init_hw failed.\n");
340 * ixgb_probe - Device Initialization Routine
341 * @pdev: PCI device information struct
342 * @ent: entry in ixgb_pci_tbl
344 * Returns 0 on success, negative on failure
346 * ixgb_probe initializes an adapter identified by a pci_dev structure.
347 * The OS initialization, configuring of the adapter private structure,
348 * and a hardware reset occur.
352 ixgb_probe(struct pci_dev *pdev,
353 const struct pci_device_id *ent)
355 struct net_device *netdev = NULL;
356 struct ixgb_adapter *adapter;
357 static int cards_found = 0;
358 unsigned long mmio_start;
364 if((err = pci_enable_device(pdev)))
367 if(!(err = pci_set_dma_mask(pdev, DMA_64BIT_MASK)) &&
368 !(err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK))) {
371 if((err = pci_set_dma_mask(pdev, DMA_32BIT_MASK)) ||
372 (err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK))) {
374 "ixgb: No usable DMA configuration, aborting\n");
380 if((err = pci_request_regions(pdev, ixgb_driver_name)))
381 goto err_request_regions;
383 pci_set_master(pdev);
385 netdev = alloc_etherdev(sizeof(struct ixgb_adapter));
388 goto err_alloc_etherdev;
391 SET_MODULE_OWNER(netdev);
392 SET_NETDEV_DEV(netdev, &pdev->dev);
394 pci_set_drvdata(pdev, netdev);
395 adapter = netdev_priv(netdev);
396 adapter->netdev = netdev;
397 adapter->pdev = pdev;
398 adapter->hw.back = adapter;
399 adapter->msg_enable = netif_msg_init(debug, DEFAULT_DEBUG_LEVEL_SHIFT);
401 mmio_start = pci_resource_start(pdev, BAR_0);
402 mmio_len = pci_resource_len(pdev, BAR_0);
404 adapter->hw.hw_addr = ioremap(mmio_start, mmio_len);
405 if(!adapter->hw.hw_addr) {
410 for(i = BAR_1; i <= BAR_5; i++) {
411 if(pci_resource_len(pdev, i) == 0)
413 if(pci_resource_flags(pdev, i) & IORESOURCE_IO) {
414 adapter->hw.io_base = pci_resource_start(pdev, i);
419 netdev->open = &ixgb_open;
420 netdev->stop = &ixgb_close;
421 netdev->hard_start_xmit = &ixgb_xmit_frame;
422 netdev->get_stats = &ixgb_get_stats;
423 netdev->set_multicast_list = &ixgb_set_multi;
424 netdev->set_mac_address = &ixgb_set_mac;
425 netdev->change_mtu = &ixgb_change_mtu;
426 ixgb_set_ethtool_ops(netdev);
427 netdev->tx_timeout = &ixgb_tx_timeout;
428 netdev->watchdog_timeo = 5 * HZ;
429 #ifdef CONFIG_IXGB_NAPI
430 netdev->poll = &ixgb_clean;
433 netdev->vlan_rx_register = ixgb_vlan_rx_register;
434 netdev->vlan_rx_add_vid = ixgb_vlan_rx_add_vid;
435 netdev->vlan_rx_kill_vid = ixgb_vlan_rx_kill_vid;
436 #ifdef CONFIG_NET_POLL_CONTROLLER
437 netdev->poll_controller = ixgb_netpoll;
440 strncpy(netdev->name, pci_name(pdev), sizeof(netdev->name) - 1);
441 netdev->mem_start = mmio_start;
442 netdev->mem_end = mmio_start + mmio_len;
443 netdev->base_addr = adapter->hw.io_base;
445 adapter->bd_number = cards_found;
446 adapter->link_speed = 0;
447 adapter->link_duplex = 0;
449 /* setup the private structure */
451 if((err = ixgb_sw_init(adapter)))
454 netdev->features = NETIF_F_SG |
458 NETIF_F_HW_VLAN_FILTER;
459 netdev->features |= NETIF_F_TSO;
461 netdev->features |= NETIF_F_LLTX;
465 netdev->features |= NETIF_F_HIGHDMA;
467 /* make sure the EEPROM is good */
469 if(!ixgb_validate_eeprom_checksum(&adapter->hw)) {
470 DPRINTK(PROBE, ERR, "The EEPROM Checksum Is Not Valid\n");
475 ixgb_get_ee_mac_addr(&adapter->hw, netdev->dev_addr);
476 memcpy(netdev->perm_addr, netdev->dev_addr, netdev->addr_len);
478 if(!is_valid_ether_addr(netdev->perm_addr)) {
479 DPRINTK(PROBE, ERR, "Invalid MAC Address\n");
484 adapter->part_num = ixgb_get_ee_pba_number(&adapter->hw);
486 init_timer(&adapter->watchdog_timer);
487 adapter->watchdog_timer.function = &ixgb_watchdog;
488 adapter->watchdog_timer.data = (unsigned long)adapter;
490 INIT_WORK(&adapter->tx_timeout_task, ixgb_tx_timeout_task);
492 strcpy(netdev->name, "eth%d");
493 if((err = register_netdev(netdev)))
496 /* we're going to reset, so assume we have no link for now */
498 netif_carrier_off(netdev);
499 netif_stop_queue(netdev);
501 DPRINTK(PROBE, INFO, "Intel(R) PRO/10GbE Network Connection\n");
502 ixgb_check_options(adapter);
503 /* reset the hardware with the new settings */
513 iounmap(adapter->hw.hw_addr);
517 pci_release_regions(pdev);
520 pci_disable_device(pdev);
525 * ixgb_remove - Device Removal Routine
526 * @pdev: PCI device information struct
528 * ixgb_remove is called by the PCI subsystem to alert the driver
529 * that it should release a PCI device. The could be caused by a
530 * Hot-Plug event, or because the driver is going to be removed from
534 static void __devexit
535 ixgb_remove(struct pci_dev *pdev)
537 struct net_device *netdev = pci_get_drvdata(pdev);
538 struct ixgb_adapter *adapter = netdev_priv(netdev);
540 unregister_netdev(netdev);
542 iounmap(adapter->hw.hw_addr);
543 pci_release_regions(pdev);
549 * ixgb_sw_init - Initialize general software structures (struct ixgb_adapter)
550 * @adapter: board private structure to initialize
552 * ixgb_sw_init initializes the Adapter private data structure.
553 * Fields are initialized based on PCI device information and
554 * OS network device settings (MTU size).
558 ixgb_sw_init(struct ixgb_adapter *adapter)
560 struct ixgb_hw *hw = &adapter->hw;
561 struct net_device *netdev = adapter->netdev;
562 struct pci_dev *pdev = adapter->pdev;
564 /* PCI config space info */
566 hw->vendor_id = pdev->vendor;
567 hw->device_id = pdev->device;
568 hw->subsystem_vendor_id = pdev->subsystem_vendor;
569 hw->subsystem_id = pdev->subsystem_device;
571 hw->max_frame_size = netdev->mtu + ENET_HEADER_SIZE + ENET_FCS_LENGTH;
572 adapter->rx_buffer_len = hw->max_frame_size;
574 if((hw->device_id == IXGB_DEVICE_ID_82597EX)
575 || (hw->device_id == IXGB_DEVICE_ID_82597EX_CX4)
576 || (hw->device_id == IXGB_DEVICE_ID_82597EX_LR)
577 || (hw->device_id == IXGB_DEVICE_ID_82597EX_SR))
578 hw->mac_type = ixgb_82597;
580 /* should never have loaded on this device */
581 DPRINTK(PROBE, ERR, "unsupported device id\n");
584 /* enable flow control to be programmed */
587 atomic_set(&adapter->irq_sem, 1);
588 spin_lock_init(&adapter->tx_lock);
594 * ixgb_open - Called when a network interface is made active
595 * @netdev: network interface device structure
597 * Returns 0 on success, negative value on failure
599 * The open entry point is called when a network interface is made
600 * active by the system (IFF_UP). At this point all resources needed
601 * for transmit and receive operations are allocated, the interrupt
602 * handler is registered with the OS, the watchdog timer is started,
603 * and the stack is notified that the interface is ready.
607 ixgb_open(struct net_device *netdev)
609 struct ixgb_adapter *adapter = netdev_priv(netdev);
612 /* allocate transmit descriptors */
614 if((err = ixgb_setup_tx_resources(adapter)))
617 /* allocate receive descriptors */
619 if((err = ixgb_setup_rx_resources(adapter)))
622 if((err = ixgb_up(adapter)))
628 ixgb_free_rx_resources(adapter);
630 ixgb_free_tx_resources(adapter);
638 * ixgb_close - Disables a network interface
639 * @netdev: network interface device structure
641 * Returns 0, this is not allowed to fail
643 * The close entry point is called when an interface is de-activated
644 * by the OS. The hardware is still under the drivers control, but
645 * needs to be disabled. A global MAC reset is issued to stop the
646 * hardware, and all transmit and receive resources are freed.
650 ixgb_close(struct net_device *netdev)
652 struct ixgb_adapter *adapter = netdev_priv(netdev);
654 ixgb_down(adapter, TRUE);
656 ixgb_free_tx_resources(adapter);
657 ixgb_free_rx_resources(adapter);
663 * ixgb_setup_tx_resources - allocate Tx resources (Descriptors)
664 * @adapter: board private structure
666 * Return 0 on success, negative on failure
670 ixgb_setup_tx_resources(struct ixgb_adapter *adapter)
672 struct ixgb_desc_ring *txdr = &adapter->tx_ring;
673 struct pci_dev *pdev = adapter->pdev;
676 size = sizeof(struct ixgb_buffer) * txdr->count;
677 txdr->buffer_info = vmalloc(size);
678 if(!txdr->buffer_info) {
680 "Unable to allocate transmit descriptor ring memory\n");
683 memset(txdr->buffer_info, 0, size);
685 /* round up to nearest 4K */
687 txdr->size = txdr->count * sizeof(struct ixgb_tx_desc);
688 IXGB_ROUNDUP(txdr->size, 4096);
690 txdr->desc = pci_alloc_consistent(pdev, txdr->size, &txdr->dma);
692 vfree(txdr->buffer_info);
694 "Unable to allocate transmit descriptor memory\n");
697 memset(txdr->desc, 0, txdr->size);
699 txdr->next_to_use = 0;
700 txdr->next_to_clean = 0;
706 * ixgb_configure_tx - Configure 82597 Transmit Unit after Reset.
707 * @adapter: board private structure
709 * Configure the Tx unit of the MAC after a reset.
713 ixgb_configure_tx(struct ixgb_adapter *adapter)
715 uint64_t tdba = adapter->tx_ring.dma;
716 uint32_t tdlen = adapter->tx_ring.count * sizeof(struct ixgb_tx_desc);
718 struct ixgb_hw *hw = &adapter->hw;
720 /* Setup the Base and Length of the Tx Descriptor Ring
721 * tx_ring.dma can be either a 32 or 64 bit value
724 IXGB_WRITE_REG(hw, TDBAL, (tdba & 0x00000000ffffffffULL));
725 IXGB_WRITE_REG(hw, TDBAH, (tdba >> 32));
727 IXGB_WRITE_REG(hw, TDLEN, tdlen);
729 /* Setup the HW Tx Head and Tail descriptor pointers */
731 IXGB_WRITE_REG(hw, TDH, 0);
732 IXGB_WRITE_REG(hw, TDT, 0);
734 /* don't set up txdctl, it induces performance problems if configured
736 /* Set the Tx Interrupt Delay register */
738 IXGB_WRITE_REG(hw, TIDV, adapter->tx_int_delay);
740 /* Program the Transmit Control Register */
742 tctl = IXGB_TCTL_TCE | IXGB_TCTL_TXEN | IXGB_TCTL_TPDE;
743 IXGB_WRITE_REG(hw, TCTL, tctl);
745 /* Setup Transmit Descriptor Settings for this adapter */
746 adapter->tx_cmd_type =
748 | (adapter->tx_int_delay_enable ? IXGB_TX_DESC_CMD_IDE : 0);
752 * ixgb_setup_rx_resources - allocate Rx resources (Descriptors)
753 * @adapter: board private structure
755 * Returns 0 on success, negative on failure
759 ixgb_setup_rx_resources(struct ixgb_adapter *adapter)
761 struct ixgb_desc_ring *rxdr = &adapter->rx_ring;
762 struct pci_dev *pdev = adapter->pdev;
765 size = sizeof(struct ixgb_buffer) * rxdr->count;
766 rxdr->buffer_info = vmalloc(size);
767 if(!rxdr->buffer_info) {
769 "Unable to allocate receive descriptor ring\n");
772 memset(rxdr->buffer_info, 0, size);
774 /* Round up to nearest 4K */
776 rxdr->size = rxdr->count * sizeof(struct ixgb_rx_desc);
777 IXGB_ROUNDUP(rxdr->size, 4096);
779 rxdr->desc = pci_alloc_consistent(pdev, rxdr->size, &rxdr->dma);
782 vfree(rxdr->buffer_info);
784 "Unable to allocate receive descriptors\n");
787 memset(rxdr->desc, 0, rxdr->size);
789 rxdr->next_to_clean = 0;
790 rxdr->next_to_use = 0;
796 * ixgb_setup_rctl - configure the receive control register
797 * @adapter: Board private structure
801 ixgb_setup_rctl(struct ixgb_adapter *adapter)
805 rctl = IXGB_READ_REG(&adapter->hw, RCTL);
807 rctl &= ~(3 << IXGB_RCTL_MO_SHIFT);
810 IXGB_RCTL_BAM | IXGB_RCTL_RDMTS_1_2 |
811 IXGB_RCTL_RXEN | IXGB_RCTL_CFF |
812 (adapter->hw.mc_filter_type << IXGB_RCTL_MO_SHIFT);
814 rctl |= IXGB_RCTL_SECRC;
816 if (adapter->rx_buffer_len <= IXGB_RXBUFFER_2048)
817 rctl |= IXGB_RCTL_BSIZE_2048;
818 else if (adapter->rx_buffer_len <= IXGB_RXBUFFER_4096)
819 rctl |= IXGB_RCTL_BSIZE_4096;
820 else if (adapter->rx_buffer_len <= IXGB_RXBUFFER_8192)
821 rctl |= IXGB_RCTL_BSIZE_8192;
822 else if (adapter->rx_buffer_len <= IXGB_RXBUFFER_16384)
823 rctl |= IXGB_RCTL_BSIZE_16384;
825 IXGB_WRITE_REG(&adapter->hw, RCTL, rctl);
829 * ixgb_configure_rx - Configure 82597 Receive Unit after Reset.
830 * @adapter: board private structure
832 * Configure the Rx unit of the MAC after a reset.
836 ixgb_configure_rx(struct ixgb_adapter *adapter)
838 uint64_t rdba = adapter->rx_ring.dma;
839 uint32_t rdlen = adapter->rx_ring.count * sizeof(struct ixgb_rx_desc);
840 struct ixgb_hw *hw = &adapter->hw;
845 /* make sure receives are disabled while setting up the descriptors */
847 rctl = IXGB_READ_REG(hw, RCTL);
848 IXGB_WRITE_REG(hw, RCTL, rctl & ~IXGB_RCTL_RXEN);
850 /* set the Receive Delay Timer Register */
852 IXGB_WRITE_REG(hw, RDTR, adapter->rx_int_delay);
854 /* Setup the Base and Length of the Rx Descriptor Ring */
856 IXGB_WRITE_REG(hw, RDBAL, (rdba & 0x00000000ffffffffULL));
857 IXGB_WRITE_REG(hw, RDBAH, (rdba >> 32));
859 IXGB_WRITE_REG(hw, RDLEN, rdlen);
861 /* Setup the HW Rx Head and Tail Descriptor Pointers */
862 IXGB_WRITE_REG(hw, RDH, 0);
863 IXGB_WRITE_REG(hw, RDT, 0);
865 /* set up pre-fetching of receive buffers so we get some before we
866 * run out (default hardware behavior is to run out before fetching
867 * more). This sets up to fetch if HTHRESH rx descriptors are avail
868 * and the descriptors in hw cache are below PTHRESH. This avoids
869 * the hardware behavior of fetching <=512 descriptors in a single
870 * burst that pre-empts all other activity, usually causing fifo
872 /* use WTHRESH to burst write 16 descriptors or burst when RXT0 */
873 rxdctl = RXDCTL_WTHRESH_DEFAULT << IXGB_RXDCTL_WTHRESH_SHIFT |
874 RXDCTL_HTHRESH_DEFAULT << IXGB_RXDCTL_HTHRESH_SHIFT |
875 RXDCTL_PTHRESH_DEFAULT << IXGB_RXDCTL_PTHRESH_SHIFT;
876 IXGB_WRITE_REG(hw, RXDCTL, rxdctl);
878 /* Enable Receive Checksum Offload for TCP and UDP */
879 if(adapter->rx_csum == TRUE) {
880 rxcsum = IXGB_READ_REG(hw, RXCSUM);
881 rxcsum |= IXGB_RXCSUM_TUOFL;
882 IXGB_WRITE_REG(hw, RXCSUM, rxcsum);
885 /* Enable Receives */
887 IXGB_WRITE_REG(hw, RCTL, rctl);
891 * ixgb_free_tx_resources - Free Tx Resources
892 * @adapter: board private structure
894 * Free all transmit software resources
898 ixgb_free_tx_resources(struct ixgb_adapter *adapter)
900 struct pci_dev *pdev = adapter->pdev;
902 ixgb_clean_tx_ring(adapter);
904 vfree(adapter->tx_ring.buffer_info);
905 adapter->tx_ring.buffer_info = NULL;
907 pci_free_consistent(pdev, adapter->tx_ring.size,
908 adapter->tx_ring.desc, adapter->tx_ring.dma);
910 adapter->tx_ring.desc = NULL;
914 ixgb_unmap_and_free_tx_resource(struct ixgb_adapter *adapter,
915 struct ixgb_buffer *buffer_info)
917 struct pci_dev *pdev = adapter->pdev;
919 if (buffer_info->dma)
920 pci_unmap_page(pdev, buffer_info->dma, buffer_info->length,
923 if (buffer_info->skb)
924 dev_kfree_skb_any(buffer_info->skb);
926 buffer_info->skb = NULL;
927 buffer_info->dma = 0;
928 buffer_info->time_stamp = 0;
929 /* these fields must always be initialized in tx
930 * buffer_info->length = 0;
931 * buffer_info->next_to_watch = 0; */
935 * ixgb_clean_tx_ring - Free Tx Buffers
936 * @adapter: board private structure
940 ixgb_clean_tx_ring(struct ixgb_adapter *adapter)
942 struct ixgb_desc_ring *tx_ring = &adapter->tx_ring;
943 struct ixgb_buffer *buffer_info;
947 /* Free all the Tx ring sk_buffs */
949 for(i = 0; i < tx_ring->count; i++) {
950 buffer_info = &tx_ring->buffer_info[i];
951 ixgb_unmap_and_free_tx_resource(adapter, buffer_info);
954 size = sizeof(struct ixgb_buffer) * tx_ring->count;
955 memset(tx_ring->buffer_info, 0, size);
957 /* Zero out the descriptor ring */
959 memset(tx_ring->desc, 0, tx_ring->size);
961 tx_ring->next_to_use = 0;
962 tx_ring->next_to_clean = 0;
964 IXGB_WRITE_REG(&adapter->hw, TDH, 0);
965 IXGB_WRITE_REG(&adapter->hw, TDT, 0);
969 * ixgb_free_rx_resources - Free Rx Resources
970 * @adapter: board private structure
972 * Free all receive software resources
976 ixgb_free_rx_resources(struct ixgb_adapter *adapter)
978 struct ixgb_desc_ring *rx_ring = &adapter->rx_ring;
979 struct pci_dev *pdev = adapter->pdev;
981 ixgb_clean_rx_ring(adapter);
983 vfree(rx_ring->buffer_info);
984 rx_ring->buffer_info = NULL;
986 pci_free_consistent(pdev, rx_ring->size, rx_ring->desc, rx_ring->dma);
988 rx_ring->desc = NULL;
992 * ixgb_clean_rx_ring - Free Rx Buffers
993 * @adapter: board private structure
997 ixgb_clean_rx_ring(struct ixgb_adapter *adapter)
999 struct ixgb_desc_ring *rx_ring = &adapter->rx_ring;
1000 struct ixgb_buffer *buffer_info;
1001 struct pci_dev *pdev = adapter->pdev;
1005 /* Free all the Rx ring sk_buffs */
1007 for(i = 0; i < rx_ring->count; i++) {
1008 buffer_info = &rx_ring->buffer_info[i];
1009 if(buffer_info->skb) {
1011 pci_unmap_single(pdev,
1013 buffer_info->length,
1014 PCI_DMA_FROMDEVICE);
1016 dev_kfree_skb(buffer_info->skb);
1018 buffer_info->skb = NULL;
1022 size = sizeof(struct ixgb_buffer) * rx_ring->count;
1023 memset(rx_ring->buffer_info, 0, size);
1025 /* Zero out the descriptor ring */
1027 memset(rx_ring->desc, 0, rx_ring->size);
1029 rx_ring->next_to_clean = 0;
1030 rx_ring->next_to_use = 0;
1032 IXGB_WRITE_REG(&adapter->hw, RDH, 0);
1033 IXGB_WRITE_REG(&adapter->hw, RDT, 0);
1037 * ixgb_set_mac - Change the Ethernet Address of the NIC
1038 * @netdev: network interface device structure
1039 * @p: pointer to an address structure
1041 * Returns 0 on success, negative on failure
1045 ixgb_set_mac(struct net_device *netdev, void *p)
1047 struct ixgb_adapter *adapter = netdev_priv(netdev);
1048 struct sockaddr *addr = p;
1050 if(!is_valid_ether_addr(addr->sa_data))
1051 return -EADDRNOTAVAIL;
1053 memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
1055 ixgb_rar_set(&adapter->hw, addr->sa_data, 0);
1061 * ixgb_set_multi - Multicast and Promiscuous mode set
1062 * @netdev: network interface device structure
1064 * The set_multi entry point is called whenever the multicast address
1065 * list or the network interface flags are updated. This routine is
1066 * responsible for configuring the hardware for proper multicast,
1067 * promiscuous mode, and all-multi behavior.
1071 ixgb_set_multi(struct net_device *netdev)
1073 struct ixgb_adapter *adapter = netdev_priv(netdev);
1074 struct ixgb_hw *hw = &adapter->hw;
1075 struct dev_mc_list *mc_ptr;
1079 /* Check for Promiscuous and All Multicast modes */
1081 rctl = IXGB_READ_REG(hw, RCTL);
1083 if(netdev->flags & IFF_PROMISC) {
1084 rctl |= (IXGB_RCTL_UPE | IXGB_RCTL_MPE);
1085 } else if(netdev->flags & IFF_ALLMULTI) {
1086 rctl |= IXGB_RCTL_MPE;
1087 rctl &= ~IXGB_RCTL_UPE;
1089 rctl &= ~(IXGB_RCTL_UPE | IXGB_RCTL_MPE);
1092 if(netdev->mc_count > IXGB_MAX_NUM_MULTICAST_ADDRESSES) {
1093 rctl |= IXGB_RCTL_MPE;
1094 IXGB_WRITE_REG(hw, RCTL, rctl);
1096 uint8_t mta[netdev->mc_count * IXGB_ETH_LENGTH_OF_ADDRESS];
1098 IXGB_WRITE_REG(hw, RCTL, rctl);
1100 for(i = 0, mc_ptr = netdev->mc_list; mc_ptr;
1101 i++, mc_ptr = mc_ptr->next)
1102 memcpy(&mta[i * IXGB_ETH_LENGTH_OF_ADDRESS],
1103 mc_ptr->dmi_addr, IXGB_ETH_LENGTH_OF_ADDRESS);
1105 ixgb_mc_addr_list_update(hw, mta, netdev->mc_count, 0);
1110 * ixgb_watchdog - Timer Call-back
1111 * @data: pointer to netdev cast into an unsigned long
1115 ixgb_watchdog(unsigned long data)
1117 struct ixgb_adapter *adapter = (struct ixgb_adapter *)data;
1118 struct net_device *netdev = adapter->netdev;
1119 struct ixgb_desc_ring *txdr = &adapter->tx_ring;
1121 ixgb_check_for_link(&adapter->hw);
1123 if (ixgb_check_for_bad_link(&adapter->hw)) {
1124 /* force the reset path */
1125 netif_stop_queue(netdev);
1128 if(adapter->hw.link_up) {
1129 if(!netif_carrier_ok(netdev)) {
1131 "NIC Link is Up 10000 Mbps Full Duplex\n");
1132 adapter->link_speed = 10000;
1133 adapter->link_duplex = FULL_DUPLEX;
1134 netif_carrier_on(netdev);
1135 netif_wake_queue(netdev);
1138 if(netif_carrier_ok(netdev)) {
1139 adapter->link_speed = 0;
1140 adapter->link_duplex = 0;
1141 DPRINTK(LINK, INFO, "NIC Link is Down\n");
1142 netif_carrier_off(netdev);
1143 netif_stop_queue(netdev);
1148 ixgb_update_stats(adapter);
1150 if(!netif_carrier_ok(netdev)) {
1151 if(IXGB_DESC_UNUSED(txdr) + 1 < txdr->count) {
1152 /* We've lost link, so the controller stops DMA,
1153 * but we've got queued Tx work that's never going
1154 * to get done, so reset controller to flush Tx.
1155 * (Do the reset outside of interrupt context). */
1156 schedule_work(&adapter->tx_timeout_task);
1160 /* Force detection of hung controller every watchdog period */
1161 adapter->detect_tx_hung = TRUE;
1163 /* generate an interrupt to force clean up of any stragglers */
1164 IXGB_WRITE_REG(&adapter->hw, ICS, IXGB_INT_TXDW);
1166 /* Reset the timer */
1167 mod_timer(&adapter->watchdog_timer, jiffies + 2 * HZ);
1170 #define IXGB_TX_FLAGS_CSUM 0x00000001
1171 #define IXGB_TX_FLAGS_VLAN 0x00000002
1172 #define IXGB_TX_FLAGS_TSO 0x00000004
1175 ixgb_tso(struct ixgb_adapter *adapter, struct sk_buff *skb)
1177 struct ixgb_context_desc *context_desc;
1179 uint8_t ipcss, ipcso, tucss, tucso, hdr_len;
1180 uint16_t ipcse, tucse, mss;
1183 if (likely(skb_is_gso(skb))) {
1184 struct ixgb_buffer *buffer_info;
1185 if (skb_header_cloned(skb)) {
1186 err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
1191 hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2));
1192 mss = skb_shinfo(skb)->gso_size;
1193 skb->nh.iph->tot_len = 0;
1194 skb->nh.iph->check = 0;
1195 skb->h.th->check = ~csum_tcpudp_magic(skb->nh.iph->saddr,
1198 ipcss = skb->nh.raw - skb->data;
1199 ipcso = (void *)&(skb->nh.iph->check) - (void *)skb->data;
1200 ipcse = skb->h.raw - skb->data - 1;
1201 tucss = skb->h.raw - skb->data;
1202 tucso = (void *)&(skb->h.th->check) - (void *)skb->data;
1205 i = adapter->tx_ring.next_to_use;
1206 context_desc = IXGB_CONTEXT_DESC(adapter->tx_ring, i);
1207 buffer_info = &adapter->tx_ring.buffer_info[i];
1208 WARN_ON(buffer_info->dma != 0);
1210 context_desc->ipcss = ipcss;
1211 context_desc->ipcso = ipcso;
1212 context_desc->ipcse = cpu_to_le16(ipcse);
1213 context_desc->tucss = tucss;
1214 context_desc->tucso = tucso;
1215 context_desc->tucse = cpu_to_le16(tucse);
1216 context_desc->mss = cpu_to_le16(mss);
1217 context_desc->hdr_len = hdr_len;
1218 context_desc->status = 0;
1219 context_desc->cmd_type_len = cpu_to_le32(
1220 IXGB_CONTEXT_DESC_TYPE
1221 | IXGB_CONTEXT_DESC_CMD_TSE
1222 | IXGB_CONTEXT_DESC_CMD_IP
1223 | IXGB_CONTEXT_DESC_CMD_TCP
1224 | IXGB_CONTEXT_DESC_CMD_IDE
1225 | (skb->len - (hdr_len)));
1228 if(++i == adapter->tx_ring.count) i = 0;
1229 adapter->tx_ring.next_to_use = i;
1238 ixgb_tx_csum(struct ixgb_adapter *adapter, struct sk_buff *skb)
1240 struct ixgb_context_desc *context_desc;
1244 if(likely(skb->ip_summed == CHECKSUM_PARTIAL)) {
1245 struct ixgb_buffer *buffer_info;
1246 css = skb->h.raw - skb->data;
1247 cso = css + skb->csum_offset;
1249 i = adapter->tx_ring.next_to_use;
1250 context_desc = IXGB_CONTEXT_DESC(adapter->tx_ring, i);
1251 buffer_info = &adapter->tx_ring.buffer_info[i];
1252 WARN_ON(buffer_info->dma != 0);
1254 context_desc->tucss = css;
1255 context_desc->tucso = cso;
1256 context_desc->tucse = 0;
1257 /* zero out any previously existing data in one instruction */
1258 *(uint32_t *)&(context_desc->ipcss) = 0;
1259 context_desc->status = 0;
1260 context_desc->hdr_len = 0;
1261 context_desc->mss = 0;
1262 context_desc->cmd_type_len =
1263 cpu_to_le32(IXGB_CONTEXT_DESC_TYPE
1264 | IXGB_TX_DESC_CMD_IDE);
1266 if(++i == adapter->tx_ring.count) i = 0;
1267 adapter->tx_ring.next_to_use = i;
1275 #define IXGB_MAX_TXD_PWR 14
1276 #define IXGB_MAX_DATA_PER_TXD (1<<IXGB_MAX_TXD_PWR)
1279 ixgb_tx_map(struct ixgb_adapter *adapter, struct sk_buff *skb,
1282 struct ixgb_desc_ring *tx_ring = &adapter->tx_ring;
1283 struct ixgb_buffer *buffer_info;
1285 unsigned int offset = 0, size, count = 0, i;
1286 unsigned int mss = skb_shinfo(skb)->gso_size;
1288 unsigned int nr_frags = skb_shinfo(skb)->nr_frags;
1291 len -= skb->data_len;
1293 i = tx_ring->next_to_use;
1296 buffer_info = &tx_ring->buffer_info[i];
1297 size = min(len, IXGB_MAX_DATA_PER_TXD);
1298 /* Workaround for premature desc write-backs
1299 * in TSO mode. Append 4-byte sentinel desc */
1300 if (unlikely(mss && !nr_frags && size == len && size > 8))
1303 buffer_info->length = size;
1304 WARN_ON(buffer_info->dma != 0);
1306 pci_map_single(adapter->pdev,
1310 buffer_info->time_stamp = jiffies;
1311 buffer_info->next_to_watch = 0;
1316 if(++i == tx_ring->count) i = 0;
1319 for(f = 0; f < nr_frags; f++) {
1320 struct skb_frag_struct *frag;
1322 frag = &skb_shinfo(skb)->frags[f];
1327 buffer_info = &tx_ring->buffer_info[i];
1328 size = min(len, IXGB_MAX_DATA_PER_TXD);
1330 /* Workaround for premature desc write-backs
1331 * in TSO mode. Append 4-byte sentinel desc */
1332 if (unlikely(mss && !nr_frags && size == len
1336 buffer_info->length = size;
1338 pci_map_page(adapter->pdev,
1340 frag->page_offset + offset,
1343 buffer_info->time_stamp = jiffies;
1344 buffer_info->next_to_watch = 0;
1349 if(++i == tx_ring->count) i = 0;
1352 i = (i == 0) ? tx_ring->count - 1 : i - 1;
1353 tx_ring->buffer_info[i].skb = skb;
1354 tx_ring->buffer_info[first].next_to_watch = i;
1360 ixgb_tx_queue(struct ixgb_adapter *adapter, int count, int vlan_id,int tx_flags)
1362 struct ixgb_desc_ring *tx_ring = &adapter->tx_ring;
1363 struct ixgb_tx_desc *tx_desc = NULL;
1364 struct ixgb_buffer *buffer_info;
1365 uint32_t cmd_type_len = adapter->tx_cmd_type;
1370 if(tx_flags & IXGB_TX_FLAGS_TSO) {
1371 cmd_type_len |= IXGB_TX_DESC_CMD_TSE;
1372 popts |= (IXGB_TX_DESC_POPTS_IXSM | IXGB_TX_DESC_POPTS_TXSM);
1375 if(tx_flags & IXGB_TX_FLAGS_CSUM)
1376 popts |= IXGB_TX_DESC_POPTS_TXSM;
1378 if(tx_flags & IXGB_TX_FLAGS_VLAN) {
1379 cmd_type_len |= IXGB_TX_DESC_CMD_VLE;
1382 i = tx_ring->next_to_use;
1385 buffer_info = &tx_ring->buffer_info[i];
1386 tx_desc = IXGB_TX_DESC(*tx_ring, i);
1387 tx_desc->buff_addr = cpu_to_le64(buffer_info->dma);
1388 tx_desc->cmd_type_len =
1389 cpu_to_le32(cmd_type_len | buffer_info->length);
1390 tx_desc->status = status;
1391 tx_desc->popts = popts;
1392 tx_desc->vlan = cpu_to_le16(vlan_id);
1394 if(++i == tx_ring->count) i = 0;
1397 tx_desc->cmd_type_len |= cpu_to_le32(IXGB_TX_DESC_CMD_EOP
1398 | IXGB_TX_DESC_CMD_RS );
1400 /* Force memory writes to complete before letting h/w
1401 * know there are new descriptors to fetch. (Only
1402 * applicable for weak-ordered memory model archs,
1403 * such as IA-64). */
1406 tx_ring->next_to_use = i;
1407 IXGB_WRITE_REG(&adapter->hw, TDT, i);
1410 static int __ixgb_maybe_stop_tx(struct net_device *netdev, int size)
1412 struct ixgb_adapter *adapter = netdev_priv(netdev);
1413 struct ixgb_desc_ring *tx_ring = &adapter->tx_ring;
1415 netif_stop_queue(netdev);
1416 /* Herbert's original patch had:
1417 * smp_mb__after_netif_stop_queue();
1418 * but since that doesn't exist yet, just open code it. */
1421 /* We need to check again in a case another CPU has just
1422 * made room available. */
1423 if (likely(IXGB_DESC_UNUSED(tx_ring) < size))
1427 netif_start_queue(netdev);
1428 ++adapter->restart_queue;
1432 static int ixgb_maybe_stop_tx(struct net_device *netdev,
1433 struct ixgb_desc_ring *tx_ring, int size)
1435 if (likely(IXGB_DESC_UNUSED(tx_ring) >= size))
1437 return __ixgb_maybe_stop_tx(netdev, size);
1441 /* Tx Descriptors needed, worst case */
1442 #define TXD_USE_COUNT(S) (((S) >> IXGB_MAX_TXD_PWR) + \
1443 (((S) & (IXGB_MAX_DATA_PER_TXD - 1)) ? 1 : 0))
1444 #define DESC_NEEDED TXD_USE_COUNT(IXGB_MAX_DATA_PER_TXD) /* skb->date */ + \
1445 MAX_SKB_FRAGS * TXD_USE_COUNT(PAGE_SIZE) + 1 /* for context */ \
1446 + 1 /* one more needed for sentinel TSO workaround */
1449 ixgb_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
1451 struct ixgb_adapter *adapter = netdev_priv(netdev);
1453 unsigned int tx_flags = 0;
1454 unsigned long flags;
1459 dev_kfree_skb_any(skb);
1464 local_irq_save(flags);
1465 if (!spin_trylock(&adapter->tx_lock)) {
1466 /* Collision - tell upper layer to requeue */
1467 local_irq_restore(flags);
1468 return NETDEV_TX_LOCKED;
1471 spin_lock_irqsave(&adapter->tx_lock, flags);
1474 if (unlikely(ixgb_maybe_stop_tx(netdev, &adapter->tx_ring,
1476 netif_stop_queue(netdev);
1477 spin_unlock_irqrestore(&adapter->tx_lock, flags);
1478 return NETDEV_TX_BUSY;
1481 #ifndef NETIF_F_LLTX
1482 spin_unlock_irqrestore(&adapter->tx_lock, flags);
1485 if(adapter->vlgrp && vlan_tx_tag_present(skb)) {
1486 tx_flags |= IXGB_TX_FLAGS_VLAN;
1487 vlan_id = vlan_tx_tag_get(skb);
1490 first = adapter->tx_ring.next_to_use;
1492 tso = ixgb_tso(adapter, skb);
1494 dev_kfree_skb_any(skb);
1496 spin_unlock_irqrestore(&adapter->tx_lock, flags);
1498 return NETDEV_TX_OK;
1502 tx_flags |= IXGB_TX_FLAGS_TSO;
1503 else if(ixgb_tx_csum(adapter, skb))
1504 tx_flags |= IXGB_TX_FLAGS_CSUM;
1506 ixgb_tx_queue(adapter, ixgb_tx_map(adapter, skb, first), vlan_id,
1509 netdev->trans_start = jiffies;
1512 /* Make sure there is space in the ring for the next send. */
1513 ixgb_maybe_stop_tx(netdev, &adapter->tx_ring, DESC_NEEDED);
1515 spin_unlock_irqrestore(&adapter->tx_lock, flags);
1518 return NETDEV_TX_OK;
1522 * ixgb_tx_timeout - Respond to a Tx Hang
1523 * @netdev: network interface device structure
1527 ixgb_tx_timeout(struct net_device *netdev)
1529 struct ixgb_adapter *adapter = netdev_priv(netdev);
1531 /* Do the reset outside of interrupt context */
1532 schedule_work(&adapter->tx_timeout_task);
1536 ixgb_tx_timeout_task(struct work_struct *work)
1538 struct ixgb_adapter *adapter =
1539 container_of(work, struct ixgb_adapter, tx_timeout_task);
1541 adapter->tx_timeout_count++;
1542 ixgb_down(adapter, TRUE);
1547 * ixgb_get_stats - Get System Network Statistics
1548 * @netdev: network interface device structure
1550 * Returns the address of the device statistics structure.
1551 * The statistics are actually updated from the timer callback.
1554 static struct net_device_stats *
1555 ixgb_get_stats(struct net_device *netdev)
1557 struct ixgb_adapter *adapter = netdev_priv(netdev);
1559 return &adapter->net_stats;
1563 * ixgb_change_mtu - Change the Maximum Transfer Unit
1564 * @netdev: network interface device structure
1565 * @new_mtu: new value for maximum frame size
1567 * Returns 0 on success, negative on failure
1571 ixgb_change_mtu(struct net_device *netdev, int new_mtu)
1573 struct ixgb_adapter *adapter = netdev_priv(netdev);
1574 int max_frame = new_mtu + ENET_HEADER_SIZE + ENET_FCS_LENGTH;
1575 int old_max_frame = netdev->mtu + ENET_HEADER_SIZE + ENET_FCS_LENGTH;
1578 if((max_frame < IXGB_MIN_ENET_FRAME_SIZE_WITHOUT_FCS + ENET_FCS_LENGTH)
1579 || (max_frame > IXGB_MAX_JUMBO_FRAME_SIZE + ENET_FCS_LENGTH)) {
1580 DPRINTK(PROBE, ERR, "Invalid MTU setting %d\n", new_mtu);
1584 adapter->rx_buffer_len = max_frame;
1586 netdev->mtu = new_mtu;
1588 if ((old_max_frame != max_frame) && netif_running(netdev)) {
1589 ixgb_down(adapter, TRUE);
1597 * ixgb_update_stats - Update the board statistics counters.
1598 * @adapter: board private structure
1602 ixgb_update_stats(struct ixgb_adapter *adapter)
1604 struct net_device *netdev = adapter->netdev;
1605 struct pci_dev *pdev = adapter->pdev;
1607 /* Prevent stats update while adapter is being reset */
1608 if (pci_channel_offline(pdev))
1611 if((netdev->flags & IFF_PROMISC) || (netdev->flags & IFF_ALLMULTI) ||
1612 (netdev->mc_count > IXGB_MAX_NUM_MULTICAST_ADDRESSES)) {
1613 u64 multi = IXGB_READ_REG(&adapter->hw, MPRCL);
1614 u32 bcast_l = IXGB_READ_REG(&adapter->hw, BPRCL);
1615 u32 bcast_h = IXGB_READ_REG(&adapter->hw, BPRCH);
1616 u64 bcast = ((u64)bcast_h << 32) | bcast_l;
1618 multi |= ((u64)IXGB_READ_REG(&adapter->hw, MPRCH) << 32);
1619 /* fix up multicast stats by removing broadcasts */
1623 adapter->stats.mprcl += (multi & 0xFFFFFFFF);
1624 adapter->stats.mprch += (multi >> 32);
1625 adapter->stats.bprcl += bcast_l;
1626 adapter->stats.bprch += bcast_h;
1628 adapter->stats.mprcl += IXGB_READ_REG(&adapter->hw, MPRCL);
1629 adapter->stats.mprch += IXGB_READ_REG(&adapter->hw, MPRCH);
1630 adapter->stats.bprcl += IXGB_READ_REG(&adapter->hw, BPRCL);
1631 adapter->stats.bprch += IXGB_READ_REG(&adapter->hw, BPRCH);
1633 adapter->stats.tprl += IXGB_READ_REG(&adapter->hw, TPRL);
1634 adapter->stats.tprh += IXGB_READ_REG(&adapter->hw, TPRH);
1635 adapter->stats.gprcl += IXGB_READ_REG(&adapter->hw, GPRCL);
1636 adapter->stats.gprch += IXGB_READ_REG(&adapter->hw, GPRCH);
1637 adapter->stats.uprcl += IXGB_READ_REG(&adapter->hw, UPRCL);
1638 adapter->stats.uprch += IXGB_READ_REG(&adapter->hw, UPRCH);
1639 adapter->stats.vprcl += IXGB_READ_REG(&adapter->hw, VPRCL);
1640 adapter->stats.vprch += IXGB_READ_REG(&adapter->hw, VPRCH);
1641 adapter->stats.jprcl += IXGB_READ_REG(&adapter->hw, JPRCL);
1642 adapter->stats.jprch += IXGB_READ_REG(&adapter->hw, JPRCH);
1643 adapter->stats.gorcl += IXGB_READ_REG(&adapter->hw, GORCL);
1644 adapter->stats.gorch += IXGB_READ_REG(&adapter->hw, GORCH);
1645 adapter->stats.torl += IXGB_READ_REG(&adapter->hw, TORL);
1646 adapter->stats.torh += IXGB_READ_REG(&adapter->hw, TORH);
1647 adapter->stats.rnbc += IXGB_READ_REG(&adapter->hw, RNBC);
1648 adapter->stats.ruc += IXGB_READ_REG(&adapter->hw, RUC);
1649 adapter->stats.roc += IXGB_READ_REG(&adapter->hw, ROC);
1650 adapter->stats.rlec += IXGB_READ_REG(&adapter->hw, RLEC);
1651 adapter->stats.crcerrs += IXGB_READ_REG(&adapter->hw, CRCERRS);
1652 adapter->stats.icbc += IXGB_READ_REG(&adapter->hw, ICBC);
1653 adapter->stats.ecbc += IXGB_READ_REG(&adapter->hw, ECBC);
1654 adapter->stats.mpc += IXGB_READ_REG(&adapter->hw, MPC);
1655 adapter->stats.tptl += IXGB_READ_REG(&adapter->hw, TPTL);
1656 adapter->stats.tpth += IXGB_READ_REG(&adapter->hw, TPTH);
1657 adapter->stats.gptcl += IXGB_READ_REG(&adapter->hw, GPTCL);
1658 adapter->stats.gptch += IXGB_READ_REG(&adapter->hw, GPTCH);
1659 adapter->stats.bptcl += IXGB_READ_REG(&adapter->hw, BPTCL);
1660 adapter->stats.bptch += IXGB_READ_REG(&adapter->hw, BPTCH);
1661 adapter->stats.mptcl += IXGB_READ_REG(&adapter->hw, MPTCL);
1662 adapter->stats.mptch += IXGB_READ_REG(&adapter->hw, MPTCH);
1663 adapter->stats.uptcl += IXGB_READ_REG(&adapter->hw, UPTCL);
1664 adapter->stats.uptch += IXGB_READ_REG(&adapter->hw, UPTCH);
1665 adapter->stats.vptcl += IXGB_READ_REG(&adapter->hw, VPTCL);
1666 adapter->stats.vptch += IXGB_READ_REG(&adapter->hw, VPTCH);
1667 adapter->stats.jptcl += IXGB_READ_REG(&adapter->hw, JPTCL);
1668 adapter->stats.jptch += IXGB_READ_REG(&adapter->hw, JPTCH);
1669 adapter->stats.gotcl += IXGB_READ_REG(&adapter->hw, GOTCL);
1670 adapter->stats.gotch += IXGB_READ_REG(&adapter->hw, GOTCH);
1671 adapter->stats.totl += IXGB_READ_REG(&adapter->hw, TOTL);
1672 adapter->stats.toth += IXGB_READ_REG(&adapter->hw, TOTH);
1673 adapter->stats.dc += IXGB_READ_REG(&adapter->hw, DC);
1674 adapter->stats.plt64c += IXGB_READ_REG(&adapter->hw, PLT64C);
1675 adapter->stats.tsctc += IXGB_READ_REG(&adapter->hw, TSCTC);
1676 adapter->stats.tsctfc += IXGB_READ_REG(&adapter->hw, TSCTFC);
1677 adapter->stats.ibic += IXGB_READ_REG(&adapter->hw, IBIC);
1678 adapter->stats.rfc += IXGB_READ_REG(&adapter->hw, RFC);
1679 adapter->stats.lfc += IXGB_READ_REG(&adapter->hw, LFC);
1680 adapter->stats.pfrc += IXGB_READ_REG(&adapter->hw, PFRC);
1681 adapter->stats.pftc += IXGB_READ_REG(&adapter->hw, PFTC);
1682 adapter->stats.mcfrc += IXGB_READ_REG(&adapter->hw, MCFRC);
1683 adapter->stats.mcftc += IXGB_READ_REG(&adapter->hw, MCFTC);
1684 adapter->stats.xonrxc += IXGB_READ_REG(&adapter->hw, XONRXC);
1685 adapter->stats.xontxc += IXGB_READ_REG(&adapter->hw, XONTXC);
1686 adapter->stats.xoffrxc += IXGB_READ_REG(&adapter->hw, XOFFRXC);
1687 adapter->stats.xofftxc += IXGB_READ_REG(&adapter->hw, XOFFTXC);
1688 adapter->stats.rjc += IXGB_READ_REG(&adapter->hw, RJC);
1690 /* Fill out the OS statistics structure */
1692 adapter->net_stats.rx_packets = adapter->stats.gprcl;
1693 adapter->net_stats.tx_packets = adapter->stats.gptcl;
1694 adapter->net_stats.rx_bytes = adapter->stats.gorcl;
1695 adapter->net_stats.tx_bytes = adapter->stats.gotcl;
1696 adapter->net_stats.multicast = adapter->stats.mprcl;
1697 adapter->net_stats.collisions = 0;
1699 /* ignore RLEC as it reports errors for padded (<64bytes) frames
1700 * with a length in the type/len field */
1701 adapter->net_stats.rx_errors =
1702 /* adapter->stats.rnbc + */ adapter->stats.crcerrs +
1703 adapter->stats.ruc +
1704 adapter->stats.roc /*+ adapter->stats.rlec */ +
1705 adapter->stats.icbc +
1706 adapter->stats.ecbc + adapter->stats.mpc;
1709 * adapter->net_stats.rx_length_errors = adapter->stats.rlec;
1712 adapter->net_stats.rx_crc_errors = adapter->stats.crcerrs;
1713 adapter->net_stats.rx_fifo_errors = adapter->stats.mpc;
1714 adapter->net_stats.rx_missed_errors = adapter->stats.mpc;
1715 adapter->net_stats.rx_over_errors = adapter->stats.mpc;
1717 adapter->net_stats.tx_errors = 0;
1718 adapter->net_stats.rx_frame_errors = 0;
1719 adapter->net_stats.tx_aborted_errors = 0;
1720 adapter->net_stats.tx_carrier_errors = 0;
1721 adapter->net_stats.tx_fifo_errors = 0;
1722 adapter->net_stats.tx_heartbeat_errors = 0;
1723 adapter->net_stats.tx_window_errors = 0;
1726 #define IXGB_MAX_INTR 10
1728 * ixgb_intr - Interrupt Handler
1729 * @irq: interrupt number
1730 * @data: pointer to a network interface device structure
1734 ixgb_intr(int irq, void *data)
1736 struct net_device *netdev = data;
1737 struct ixgb_adapter *adapter = netdev_priv(netdev);
1738 struct ixgb_hw *hw = &adapter->hw;
1739 uint32_t icr = IXGB_READ_REG(hw, ICR);
1740 #ifndef CONFIG_IXGB_NAPI
1745 return IRQ_NONE; /* Not our interrupt */
1747 if(unlikely(icr & (IXGB_INT_RXSEQ | IXGB_INT_LSC))) {
1748 mod_timer(&adapter->watchdog_timer, jiffies);
1751 #ifdef CONFIG_IXGB_NAPI
1752 if(netif_rx_schedule_prep(netdev)) {
1754 /* Disable interrupts and register for poll. The flush
1755 of the posted write is intentionally left out.
1758 atomic_inc(&adapter->irq_sem);
1759 IXGB_WRITE_REG(&adapter->hw, IMC, ~0);
1760 __netif_rx_schedule(netdev);
1763 /* yes, that is actually a & and it is meant to make sure that
1764 * every pass through this for loop checks both receive and
1765 * transmit queues for completed descriptors, intended to
1766 * avoid starvation issues and assist tx/rx fairness. */
1767 for(i = 0; i < IXGB_MAX_INTR; i++)
1768 if(!ixgb_clean_rx_irq(adapter) &
1769 !ixgb_clean_tx_irq(adapter))
1775 #ifdef CONFIG_IXGB_NAPI
1777 * ixgb_clean - NAPI Rx polling callback
1778 * @adapter: board private structure
1782 ixgb_clean(struct net_device *netdev, int *budget)
1784 struct ixgb_adapter *adapter = netdev_priv(netdev);
1785 int work_to_do = min(*budget, netdev->quota);
1789 tx_cleaned = ixgb_clean_tx_irq(adapter);
1790 ixgb_clean_rx_irq(adapter, &work_done, work_to_do);
1792 *budget -= work_done;
1793 netdev->quota -= work_done;
1795 /* if no Tx and not enough Rx work done, exit the polling mode */
1796 if((!tx_cleaned && (work_done == 0)) || !netif_running(netdev)) {
1797 netif_rx_complete(netdev);
1798 ixgb_irq_enable(adapter);
1807 * ixgb_clean_tx_irq - Reclaim resources after transmit completes
1808 * @adapter: board private structure
1812 ixgb_clean_tx_irq(struct ixgb_adapter *adapter)
1814 struct ixgb_desc_ring *tx_ring = &adapter->tx_ring;
1815 struct net_device *netdev = adapter->netdev;
1816 struct ixgb_tx_desc *tx_desc, *eop_desc;
1817 struct ixgb_buffer *buffer_info;
1818 unsigned int i, eop;
1819 boolean_t cleaned = FALSE;
1821 i = tx_ring->next_to_clean;
1822 eop = tx_ring->buffer_info[i].next_to_watch;
1823 eop_desc = IXGB_TX_DESC(*tx_ring, eop);
1825 while(eop_desc->status & IXGB_TX_DESC_STATUS_DD) {
1827 for(cleaned = FALSE; !cleaned; ) {
1828 tx_desc = IXGB_TX_DESC(*tx_ring, i);
1829 buffer_info = &tx_ring->buffer_info[i];
1832 & (IXGB_TX_DESC_POPTS_TXSM |
1833 IXGB_TX_DESC_POPTS_IXSM))
1834 adapter->hw_csum_tx_good++;
1836 ixgb_unmap_and_free_tx_resource(adapter, buffer_info);
1838 *(uint32_t *)&(tx_desc->status) = 0;
1840 cleaned = (i == eop);
1841 if(++i == tx_ring->count) i = 0;
1844 eop = tx_ring->buffer_info[i].next_to_watch;
1845 eop_desc = IXGB_TX_DESC(*tx_ring, eop);
1848 tx_ring->next_to_clean = i;
1850 if (unlikely(netif_queue_stopped(netdev))) {
1851 spin_lock(&adapter->tx_lock);
1852 if (netif_queue_stopped(netdev) && netif_carrier_ok(netdev) &&
1853 (IXGB_DESC_UNUSED(tx_ring) >= DESC_NEEDED))
1854 netif_wake_queue(netdev);
1855 spin_unlock(&adapter->tx_lock);
1858 if(adapter->detect_tx_hung) {
1859 /* detect a transmit hang in hardware, this serializes the
1860 * check with the clearing of time_stamp and movement of i */
1861 adapter->detect_tx_hung = FALSE;
1862 if (tx_ring->buffer_info[eop].dma &&
1863 time_after(jiffies, tx_ring->buffer_info[eop].time_stamp + HZ)
1864 && !(IXGB_READ_REG(&adapter->hw, STATUS) &
1865 IXGB_STATUS_TXOFF)) {
1866 /* detected Tx unit hang */
1867 DPRINTK(DRV, ERR, "Detected Tx Unit Hang\n"
1870 " next_to_use <%x>\n"
1871 " next_to_clean <%x>\n"
1872 "buffer_info[next_to_clean]\n"
1873 " time_stamp <%lx>\n"
1874 " next_to_watch <%x>\n"
1876 " next_to_watch.status <%x>\n",
1877 IXGB_READ_REG(&adapter->hw, TDH),
1878 IXGB_READ_REG(&adapter->hw, TDT),
1879 tx_ring->next_to_use,
1880 tx_ring->next_to_clean,
1881 tx_ring->buffer_info[eop].time_stamp,
1885 netif_stop_queue(netdev);
1893 * ixgb_rx_checksum - Receive Checksum Offload for 82597.
1894 * @adapter: board private structure
1895 * @rx_desc: receive descriptor
1896 * @sk_buff: socket buffer with received data
1900 ixgb_rx_checksum(struct ixgb_adapter *adapter,
1901 struct ixgb_rx_desc *rx_desc,
1902 struct sk_buff *skb)
1904 /* Ignore Checksum bit is set OR
1905 * TCP Checksum has not been calculated
1907 if((rx_desc->status & IXGB_RX_DESC_STATUS_IXSM) ||
1908 (!(rx_desc->status & IXGB_RX_DESC_STATUS_TCPCS))) {
1909 skb->ip_summed = CHECKSUM_NONE;
1913 /* At this point we know the hardware did the TCP checksum */
1914 /* now look at the TCP checksum error bit */
1915 if(rx_desc->errors & IXGB_RX_DESC_ERRORS_TCPE) {
1916 /* let the stack verify checksum errors */
1917 skb->ip_summed = CHECKSUM_NONE;
1918 adapter->hw_csum_rx_error++;
1920 /* TCP checksum is good */
1921 skb->ip_summed = CHECKSUM_UNNECESSARY;
1922 adapter->hw_csum_rx_good++;
1927 * ixgb_clean_rx_irq - Send received data up the network stack,
1928 * @adapter: board private structure
1932 #ifdef CONFIG_IXGB_NAPI
1933 ixgb_clean_rx_irq(struct ixgb_adapter *adapter, int *work_done, int work_to_do)
1935 ixgb_clean_rx_irq(struct ixgb_adapter *adapter)
1938 struct ixgb_desc_ring *rx_ring = &adapter->rx_ring;
1939 struct net_device *netdev = adapter->netdev;
1940 struct pci_dev *pdev = adapter->pdev;
1941 struct ixgb_rx_desc *rx_desc, *next_rxd;
1942 struct ixgb_buffer *buffer_info, *next_buffer, *next2_buffer;
1945 boolean_t cleaned = FALSE;
1947 i = rx_ring->next_to_clean;
1948 rx_desc = IXGB_RX_DESC(*rx_ring, i);
1949 buffer_info = &rx_ring->buffer_info[i];
1951 while(rx_desc->status & IXGB_RX_DESC_STATUS_DD) {
1952 struct sk_buff *skb, *next_skb;
1955 #ifdef CONFIG_IXGB_NAPI
1956 if(*work_done >= work_to_do)
1961 status = rx_desc->status;
1962 skb = buffer_info->skb;
1963 buffer_info->skb = NULL;
1965 prefetch(skb->data);
1967 if(++i == rx_ring->count) i = 0;
1968 next_rxd = IXGB_RX_DESC(*rx_ring, i);
1971 if((j = i + 1) == rx_ring->count) j = 0;
1972 next2_buffer = &rx_ring->buffer_info[j];
1973 prefetch(next2_buffer);
1975 next_buffer = &rx_ring->buffer_info[i];
1976 next_skb = next_buffer->skb;
1981 pci_unmap_single(pdev,
1983 buffer_info->length,
1984 PCI_DMA_FROMDEVICE);
1986 length = le16_to_cpu(rx_desc->length);
1988 if(unlikely(!(status & IXGB_RX_DESC_STATUS_EOP))) {
1990 /* All receives must fit into a single buffer */
1992 IXGB_DBG("Receive packet consumed multiple buffers "
1993 "length<%x>\n", length);
1995 dev_kfree_skb_irq(skb);
1999 if (unlikely(rx_desc->errors
2000 & (IXGB_RX_DESC_ERRORS_CE | IXGB_RX_DESC_ERRORS_SE
2001 | IXGB_RX_DESC_ERRORS_P |
2002 IXGB_RX_DESC_ERRORS_RXE))) {
2004 dev_kfree_skb_irq(skb);
2008 /* code added for copybreak, this should improve
2009 * performance for small packets with large amounts
2010 * of reassembly being done in the stack */
2011 #define IXGB_CB_LENGTH 256
2012 if (length < IXGB_CB_LENGTH) {
2013 struct sk_buff *new_skb =
2014 netdev_alloc_skb(netdev, length + NET_IP_ALIGN);
2016 skb_reserve(new_skb, NET_IP_ALIGN);
2017 memcpy(new_skb->data - NET_IP_ALIGN,
2018 skb->data - NET_IP_ALIGN,
2019 length + NET_IP_ALIGN);
2020 /* save the skb in buffer_info as good */
2021 buffer_info->skb = skb;
2025 /* end copybreak code */
2028 skb_put(skb, length);
2030 /* Receive Checksum Offload */
2031 ixgb_rx_checksum(adapter, rx_desc, skb);
2033 skb->protocol = eth_type_trans(skb, netdev);
2034 #ifdef CONFIG_IXGB_NAPI
2035 if(adapter->vlgrp && (status & IXGB_RX_DESC_STATUS_VP)) {
2036 vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
2037 le16_to_cpu(rx_desc->special) &
2038 IXGB_RX_DESC_SPECIAL_VLAN_MASK);
2040 netif_receive_skb(skb);
2042 #else /* CONFIG_IXGB_NAPI */
2043 if(adapter->vlgrp && (status & IXGB_RX_DESC_STATUS_VP)) {
2044 vlan_hwaccel_rx(skb, adapter->vlgrp,
2045 le16_to_cpu(rx_desc->special) &
2046 IXGB_RX_DESC_SPECIAL_VLAN_MASK);
2050 #endif /* CONFIG_IXGB_NAPI */
2051 netdev->last_rx = jiffies;
2054 /* clean up descriptor, might be written over by hw */
2055 rx_desc->status = 0;
2057 /* use prefetched values */
2059 buffer_info = next_buffer;
2062 rx_ring->next_to_clean = i;
2064 ixgb_alloc_rx_buffers(adapter);
2070 * ixgb_alloc_rx_buffers - Replace used receive buffers
2071 * @adapter: address of board private structure
2075 ixgb_alloc_rx_buffers(struct ixgb_adapter *adapter)
2077 struct ixgb_desc_ring *rx_ring = &adapter->rx_ring;
2078 struct net_device *netdev = adapter->netdev;
2079 struct pci_dev *pdev = adapter->pdev;
2080 struct ixgb_rx_desc *rx_desc;
2081 struct ixgb_buffer *buffer_info;
2082 struct sk_buff *skb;
2084 int num_group_tail_writes;
2087 i = rx_ring->next_to_use;
2088 buffer_info = &rx_ring->buffer_info[i];
2089 cleancount = IXGB_DESC_UNUSED(rx_ring);
2091 num_group_tail_writes = IXGB_RX_BUFFER_WRITE;
2093 /* leave three descriptors unused */
2094 while(--cleancount > 2) {
2095 /* recycle! its good for you */
2096 skb = buffer_info->skb;
2102 skb = netdev_alloc_skb(netdev, adapter->rx_buffer_len
2104 if (unlikely(!skb)) {
2105 /* Better luck next round */
2106 adapter->alloc_rx_buff_failed++;
2110 /* Make buffer alignment 2 beyond a 16 byte boundary
2111 * this will result in a 16 byte aligned IP header after
2112 * the 14 byte MAC header is removed
2114 skb_reserve(skb, NET_IP_ALIGN);
2116 buffer_info->skb = skb;
2117 buffer_info->length = adapter->rx_buffer_len;
2119 buffer_info->dma = pci_map_single(pdev,
2121 adapter->rx_buffer_len,
2122 PCI_DMA_FROMDEVICE);
2124 rx_desc = IXGB_RX_DESC(*rx_ring, i);
2125 rx_desc->buff_addr = cpu_to_le64(buffer_info->dma);
2126 /* guarantee DD bit not set now before h/w gets descriptor
2127 * this is the rest of the workaround for h/w double
2129 rx_desc->status = 0;
2132 if(++i == rx_ring->count) i = 0;
2133 buffer_info = &rx_ring->buffer_info[i];
2136 if (likely(rx_ring->next_to_use != i)) {
2137 rx_ring->next_to_use = i;
2138 if (unlikely(i-- == 0))
2139 i = (rx_ring->count - 1);
2141 /* Force memory writes to complete before letting h/w
2142 * know there are new descriptors to fetch. (Only
2143 * applicable for weak-ordered memory model archs, such
2146 IXGB_WRITE_REG(&adapter->hw, RDT, i);
2151 * ixgb_vlan_rx_register - enables or disables vlan tagging/stripping.
2153 * @param netdev network interface device structure
2154 * @param grp indicates to enable or disable tagging/stripping
2157 ixgb_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
2159 struct ixgb_adapter *adapter = netdev_priv(netdev);
2160 uint32_t ctrl, rctl;
2162 ixgb_irq_disable(adapter);
2163 adapter->vlgrp = grp;
2166 /* enable VLAN tag insert/strip */
2167 ctrl = IXGB_READ_REG(&adapter->hw, CTRL0);
2168 ctrl |= IXGB_CTRL0_VME;
2169 IXGB_WRITE_REG(&adapter->hw, CTRL0, ctrl);
2171 /* enable VLAN receive filtering */
2173 rctl = IXGB_READ_REG(&adapter->hw, RCTL);
2174 rctl |= IXGB_RCTL_VFE;
2175 rctl &= ~IXGB_RCTL_CFIEN;
2176 IXGB_WRITE_REG(&adapter->hw, RCTL, rctl);
2178 /* disable VLAN tag insert/strip */
2180 ctrl = IXGB_READ_REG(&adapter->hw, CTRL0);
2181 ctrl &= ~IXGB_CTRL0_VME;
2182 IXGB_WRITE_REG(&adapter->hw, CTRL0, ctrl);
2184 /* disable VLAN filtering */
2186 rctl = IXGB_READ_REG(&adapter->hw, RCTL);
2187 rctl &= ~IXGB_RCTL_VFE;
2188 IXGB_WRITE_REG(&adapter->hw, RCTL, rctl);
2191 ixgb_irq_enable(adapter);
2195 ixgb_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid)
2197 struct ixgb_adapter *adapter = netdev_priv(netdev);
2198 uint32_t vfta, index;
2200 /* add VID to filter table */
2202 index = (vid >> 5) & 0x7F;
2203 vfta = IXGB_READ_REG_ARRAY(&adapter->hw, VFTA, index);
2204 vfta |= (1 << (vid & 0x1F));
2205 ixgb_write_vfta(&adapter->hw, index, vfta);
2209 ixgb_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid)
2211 struct ixgb_adapter *adapter = netdev_priv(netdev);
2212 uint32_t vfta, index;
2214 ixgb_irq_disable(adapter);
2216 vlan_group_set_device(adapter->vlgrp, vid, NULL);
2218 ixgb_irq_enable(adapter);
2220 /* remove VID from filter table*/
2222 index = (vid >> 5) & 0x7F;
2223 vfta = IXGB_READ_REG_ARRAY(&adapter->hw, VFTA, index);
2224 vfta &= ~(1 << (vid & 0x1F));
2225 ixgb_write_vfta(&adapter->hw, index, vfta);
2229 ixgb_restore_vlan(struct ixgb_adapter *adapter)
2231 ixgb_vlan_rx_register(adapter->netdev, adapter->vlgrp);
2233 if(adapter->vlgrp) {
2235 for(vid = 0; vid < VLAN_GROUP_ARRAY_LEN; vid++) {
2236 if(!vlan_group_get_device(adapter->vlgrp, vid))
2238 ixgb_vlan_rx_add_vid(adapter->netdev, vid);
2243 #ifdef CONFIG_NET_POLL_CONTROLLER
2245 * Polling 'interrupt' - used by things like netconsole to send skbs
2246 * without having to re-enable interrupts. It's not called while
2247 * the interrupt routine is executing.
2250 static void ixgb_netpoll(struct net_device *dev)
2252 struct ixgb_adapter *adapter = netdev_priv(dev);
2254 disable_irq(adapter->pdev->irq);
2255 ixgb_intr(adapter->pdev->irq, dev);
2256 enable_irq(adapter->pdev->irq);
2261 * ixgb_io_error_detected() - called when PCI error is detected
2262 * @pdev pointer to pci device with error
2263 * @state pci channel state after error
2265 * This callback is called by the PCI subsystem whenever
2266 * a PCI bus error is detected.
2268 static pci_ers_result_t ixgb_io_error_detected (struct pci_dev *pdev,
2269 enum pci_channel_state state)
2271 struct net_device *netdev = pci_get_drvdata(pdev);
2272 struct ixgb_adapter *adapter = netdev_priv(netdev);
2274 if(netif_running(netdev))
2275 ixgb_down(adapter, TRUE);
2277 pci_disable_device(pdev);
2279 /* Request a slot reset. */
2280 return PCI_ERS_RESULT_NEED_RESET;
2284 * ixgb_io_slot_reset - called after the pci bus has been reset.
2285 * @pdev pointer to pci device with error
2287 * This callback is called after the PCI buss has been reset.
2288 * Basically, this tries to restart the card from scratch.
2289 * This is a shortened version of the device probe/discovery code,
2290 * it resembles the first-half of the ixgb_probe() routine.
2292 static pci_ers_result_t ixgb_io_slot_reset (struct pci_dev *pdev)
2294 struct net_device *netdev = pci_get_drvdata(pdev);
2295 struct ixgb_adapter *adapter = netdev_priv(netdev);
2297 if(pci_enable_device(pdev)) {
2298 DPRINTK(PROBE, ERR, "Cannot re-enable PCI device after reset.\n");
2299 return PCI_ERS_RESULT_DISCONNECT;
2302 /* Perform card reset only on one instance of the card */
2303 if (0 != PCI_FUNC (pdev->devfn))
2304 return PCI_ERS_RESULT_RECOVERED;
2306 pci_set_master(pdev);
2308 netif_carrier_off(netdev);
2309 netif_stop_queue(netdev);
2310 ixgb_reset(adapter);
2312 /* Make sure the EEPROM is good */
2313 if(!ixgb_validate_eeprom_checksum(&adapter->hw)) {
2314 DPRINTK(PROBE, ERR, "After reset, the EEPROM checksum is not valid.\n");
2315 return PCI_ERS_RESULT_DISCONNECT;
2317 ixgb_get_ee_mac_addr(&adapter->hw, netdev->dev_addr);
2318 memcpy(netdev->perm_addr, netdev->dev_addr, netdev->addr_len);
2320 if(!is_valid_ether_addr(netdev->perm_addr)) {
2321 DPRINTK(PROBE, ERR, "After reset, invalid MAC address.\n");
2322 return PCI_ERS_RESULT_DISCONNECT;
2325 return PCI_ERS_RESULT_RECOVERED;
2329 * ixgb_io_resume - called when its OK to resume normal operations
2330 * @pdev pointer to pci device with error
2332 * The error recovery driver tells us that its OK to resume
2333 * normal operation. Implementation resembles the second-half
2334 * of the ixgb_probe() routine.
2336 static void ixgb_io_resume (struct pci_dev *pdev)
2338 struct net_device *netdev = pci_get_drvdata(pdev);
2339 struct ixgb_adapter *adapter = netdev_priv(netdev);
2341 pci_set_master(pdev);
2343 if(netif_running(netdev)) {
2344 if(ixgb_up(adapter)) {
2345 printk ("ixgb: can't bring device back up after reset\n");
2350 netif_device_attach(netdev);
2351 mod_timer(&adapter->watchdog_timer, jiffies);