Make gpxe build.
[gpxe/hramrach.git] / src / drivers / net / e1000 / e1000_main.c
blob0511d88f164a2d170f42d06f53d6ed731040c9ff
1 /*******************************************************************************
3 Intel PRO/1000 Linux driver
4 Copyright(c) 1999 - 2008 Intel Corporation.
6 Portions Copyright(c) 2010 Marty Connor <mdc@etherboot.org>
7 Portions Copyright(c) 2010 Entity Cyber, Inc.
9 This program is free software; you can redistribute it and/or modify it
10 under the terms and conditions of the GNU General Public License,
11 version 2, as published by the Free Software Foundation.
13 This program is distributed in the hope it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
16 more details.
18 You should have received a copy of the GNU General Public License along with
19 this program; if not, write to the Free Software Foundation, Inc.,
20 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
22 The full GNU General Public License is included in this distribution in
23 the file called "COPYING".
25 Contact Information:
26 Linux NICS <linux.nics@intel.com>
27 e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
28 Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
30 *******************************************************************************/
32 FILE_LICENCE ( GPL2_ONLY );
34 #include "e1000.h"
36 /**
37 * e1000_irq_disable - Disable interrupt generation
39 * @adapter: board private structure
40 **/
41 static void e1000_irq_disable ( struct e1000_adapter *adapter )
43 E1000_WRITE_REG ( &adapter->hw, E1000_IMC, ~0 );
44 E1000_WRITE_FLUSH ( &adapter->hw );
47 /**
48 * e1000_irq_enable - Enable interrupt generation
50 * @adapter: board private structure
51 **/
52 static void e1000_irq_enable ( struct e1000_adapter *adapter )
54 E1000_WRITE_REG(&adapter->hw, E1000_IMS, IMS_ENABLE_MASK);
55 E1000_WRITE_FLUSH(&adapter->hw);
58 /**
59 * e1000_sw_init - Initialize general software structures (struct e1000_adapter)
60 * @adapter: board private structure to initialize
62 * e1000_sw_init initializes the Adapter private data structure.
63 * Fields are initialized based on PCI device information and
64 * OS network device settings (MTU size).
65 **/
66 static int e1000_sw_init(struct e1000_adapter *adapter)
68 struct e1000_hw *hw = &adapter->hw;
69 struct pci_device *pdev = adapter->pdev;
71 /* PCI config space info */
73 hw->vendor_id = pdev->vendor;
74 hw->device_id = pdev->device;
76 pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID, &hw->subsystem_vendor_id);
77 pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &hw->subsystem_device_id);
79 pci_read_config_byte(pdev, PCI_REVISION_ID, &hw->revision_id);
81 pci_read_config_word(pdev, PCI_COMMAND, &hw->bus.pci_cmd_word);
83 adapter->rx_buffer_len = MAXIMUM_ETHERNET_VLAN_SIZE;
84 adapter->max_frame_size = MAXIMUM_ETHERNET_VLAN_SIZE +
85 ETH_HLEN + ETH_FCS_LEN;
86 adapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN;
88 hw->fc.requested_mode = e1000_fc_none;
90 /* Initialize the hardware-specific values */
91 if (e1000_setup_init_funcs(hw, false)) {
92 DBG ("Hardware Initialization Failure\n");
93 return -EIO;
96 /* Explicitly disable IRQ since the NIC can be in any state. */
97 e1000_irq_disable ( adapter );
99 return 0;
102 int32_t e1000_read_pcie_cap_reg(struct e1000_hw *hw, uint32_t reg, uint16_t *value)
104 struct e1000_adapter *adapter = hw->back;
105 uint16_t cap_offset;
107 #define PCI_CAP_ID_EXP 0x10 /* PCI Express */
108 cap_offset = pci_find_capability(adapter->pdev, PCI_CAP_ID_EXP);
109 if (!cap_offset)
110 return -E1000_ERR_CONFIG;
112 pci_read_config_word(adapter->pdev, cap_offset + reg, value);
114 return 0;
117 void e1000_pci_clear_mwi ( struct e1000_hw *hw )
119 struct e1000_adapter *adapter = hw->back;
121 pci_write_config_word ( adapter->pdev, PCI_COMMAND,
122 hw->bus.pci_cmd_word & ~PCI_COMMAND_INVALIDATE );
125 void e1000_pci_set_mwi ( struct e1000_hw *hw )
127 struct e1000_adapter *adapter = hw->back;
129 pci_write_config_word ( adapter->pdev, PCI_COMMAND,
130 hw->bus.pci_cmd_word );
133 void e1000_read_pci_cfg ( struct e1000_hw *hw, uint32_t reg, uint16_t *value )
135 struct e1000_adapter *adapter = hw->back;
137 pci_read_config_word ( adapter->pdev, reg, value );
140 void e1000_write_pci_cfg ( struct e1000_hw *hw, uint32_t reg, uint16_t *value )
142 struct e1000_adapter *adapter = hw->back;
144 pci_write_config_word ( adapter->pdev, reg, *value );
148 * e1000_init_manageability - disable interception of ARP packets
150 * @v adapter e1000 private structure
152 static void e1000_init_manageability ( struct e1000_adapter *adapter )
154 if (adapter->en_mng_pt) {
155 u32 manc = E1000_READ_REG(&adapter->hw, E1000_MANC);
157 /* disable hardware interception of ARP */
158 manc &= ~(E1000_MANC_ARP_EN);
160 E1000_WRITE_REG(&adapter->hw, E1000_MANC, manc);
165 * e1000_setup_tx_resources - allocate Tx resources (Descriptors)
167 * @v adapter e1000 private structure
169 * @ret rc Returns 0 on success, negative on failure
171 static int e1000_setup_tx_resources ( struct e1000_adapter *adapter )
173 DBG ( "e1000_setup_tx_resources\n" );
175 /* Allocate transmit descriptor ring memory.
176 It must not cross a 64K boundary because of hardware errata #23
177 so we use malloc_dma() requesting a 128 byte block that is
178 128 byte aligned. This should guarantee that the memory
179 allocated will not cross a 64K boundary, because 128 is an
180 even multiple of 65536 ( 65536 / 128 == 512 ), so all possible
181 allocations of 128 bytes on a 128 byte boundary will not
182 cross 64K bytes.
185 adapter->tx_base =
186 malloc_dma ( adapter->tx_ring_size, adapter->tx_ring_size );
188 if ( ! adapter->tx_base ) {
189 return -ENOMEM;
192 memset ( adapter->tx_base, 0, adapter->tx_ring_size );
194 DBG ( "adapter->tx_base = %#08lx\n", virt_to_bus ( adapter->tx_base ) );
196 return 0;
200 * e1000_process_tx_packets - process transmitted packets
202 * @v netdev network interface device structure
204 static void e1000_process_tx_packets ( struct net_device *netdev )
206 struct e1000_adapter *adapter = netdev_priv ( netdev );
207 uint32_t i;
208 uint32_t tx_status;
209 struct e1000_tx_desc *tx_curr_desc;
211 /* Check status of transmitted packets
213 while ( ( i = adapter->tx_head ) != adapter->tx_tail ) {
215 tx_curr_desc = ( void * ) ( adapter->tx_base ) +
216 ( i * sizeof ( *adapter->tx_base ) );
218 tx_status = tx_curr_desc->upper.data;
220 /* if the packet at tx_head is not owned by hardware it is for us */
221 if ( ! ( tx_status & E1000_TXD_STAT_DD ) )
222 break;
224 DBG ( "Sent packet. tx_head: %d tx_tail: %d tx_status: %#08x\n",
225 adapter->tx_head, adapter->tx_tail, tx_status );
227 if ( tx_status & ( E1000_TXD_STAT_EC | E1000_TXD_STAT_LC |
228 E1000_TXD_STAT_TU ) ) {
229 netdev_tx_complete_err ( netdev, adapter->tx_iobuf[i], -EINVAL );
230 DBG ( "Error transmitting packet, tx_status: %#08x\n",
231 tx_status );
232 } else {
233 netdev_tx_complete ( netdev, adapter->tx_iobuf[i] );
234 DBG ( "Success transmitting packet, tx_status: %#08x\n",
235 tx_status );
238 /* Decrement count of used descriptors, clear this descriptor
240 adapter->tx_fill_ctr--;
241 memset ( tx_curr_desc, 0, sizeof ( *tx_curr_desc ) );
243 adapter->tx_head = ( adapter->tx_head + 1 ) % NUM_TX_DESC;
247 static void e1000_free_tx_resources ( struct e1000_adapter *adapter )
249 DBG ( "e1000_free_tx_resources\n" );
251 free_dma ( adapter->tx_base, adapter->tx_ring_size );
255 * e1000_configure_tx - Configure 8254x Transmit Unit after Reset
256 * @adapter: board private structure
258 * Configure the Tx unit of the MAC after a reset.
260 static void e1000_configure_tx ( struct e1000_adapter *adapter )
262 struct e1000_hw *hw = &adapter->hw;
263 uint32_t tctl;
265 DBG ( "e1000_configure_tx\n" );
267 E1000_WRITE_REG ( hw, E1000_TDBAH(0), 0 );
268 E1000_WRITE_REG ( hw, E1000_TDBAL(0), virt_to_bus ( adapter->tx_base ) );
269 E1000_WRITE_REG ( hw, E1000_TDLEN(0), adapter->tx_ring_size );
271 DBG ( "E1000_TDBAL(0): %#08x\n", E1000_READ_REG ( hw, E1000_TDBAL(0) ) );
272 DBG ( "E1000_TDLEN(0): %d\n", E1000_READ_REG ( hw, E1000_TDLEN(0) ) );
274 /* Setup the HW Tx Head and Tail descriptor pointers */
275 E1000_WRITE_REG ( hw, E1000_TDH(0), 0 );
276 E1000_WRITE_REG ( hw, E1000_TDT(0), 0 );
278 adapter->tx_head = 0;
279 adapter->tx_tail = 0;
280 adapter->tx_fill_ctr = 0;
282 /* Setup Transmit Descriptor Settings for eop descriptor */
283 tctl = E1000_TCTL_PSP | E1000_TCTL_EN |
284 (E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT) |
285 (E1000_COLLISION_DISTANCE << E1000_COLD_SHIFT);
287 e1000_config_collision_dist ( hw );
289 E1000_WRITE_REG ( hw, E1000_TCTL, tctl );
290 E1000_WRITE_FLUSH ( hw );
293 static void e1000_free_rx_resources ( struct e1000_adapter *adapter )
295 int i;
297 DBG ( "e1000_free_rx_resources\n" );
299 free_dma ( adapter->rx_base, adapter->rx_ring_size );
301 for ( i = 0; i < NUM_RX_DESC; i++ ) {
302 free_iob ( adapter->rx_iobuf[i] );
307 * e1000_refill_rx_ring - allocate Rx io_buffers
309 * @v adapter e1000 private structure
311 * @ret rc Returns 0 on success, negative on failure
313 static int e1000_refill_rx_ring ( struct e1000_adapter *adapter )
315 int i, rx_curr;
316 int rc = 0;
317 struct e1000_rx_desc *rx_curr_desc;
318 struct e1000_hw *hw = &adapter->hw;
319 struct io_buffer *iob;
321 DBG ("e1000_refill_rx_ring\n");
323 for ( i = 0; i < NUM_RX_DESC; i++ ) {
324 rx_curr = ( ( adapter->rx_curr + i ) % NUM_RX_DESC );
325 rx_curr_desc = adapter->rx_base + rx_curr;
327 if ( rx_curr_desc->status & E1000_RXD_STAT_DD )
328 continue;
330 if ( adapter->rx_iobuf[rx_curr] != NULL )
331 continue;
333 DBG2 ( "Refilling rx desc %d\n", rx_curr );
335 iob = alloc_iob ( MAXIMUM_ETHERNET_VLAN_SIZE );
336 adapter->rx_iobuf[rx_curr] = iob;
338 if ( ! iob ) {
339 DBG ( "alloc_iob failed\n" );
340 rc = -ENOMEM;
341 break;
342 } else {
343 rx_curr_desc->buffer_addr = virt_to_bus ( iob->data );
345 E1000_WRITE_REG ( hw, E1000_RDT(0), rx_curr );
348 return rc;
352 * e1000_setup_rx_resources - allocate Rx resources (Descriptors)
354 * @v adapter e1000 private structure
356 * @ret rc Returns 0 on success, negative on failure
358 static int e1000_setup_rx_resources ( struct e1000_adapter *adapter )
360 int i, rc = 0;
362 DBG ( "e1000_setup_rx_resources\n" );
364 /* Allocate receive descriptor ring memory.
365 It must not cross a 64K boundary because of hardware errata
368 adapter->rx_base =
369 malloc_dma ( adapter->rx_ring_size, adapter->rx_ring_size );
371 if ( ! adapter->rx_base ) {
372 return -ENOMEM;
374 memset ( adapter->rx_base, 0, adapter->rx_ring_size );
376 for ( i = 0; i < NUM_RX_DESC; i++ ) {
377 /* let e1000_refill_rx_ring() io_buffer allocations */
378 adapter->rx_iobuf[i] = NULL;
381 /* allocate io_buffers */
382 rc = e1000_refill_rx_ring ( adapter );
383 if ( rc < 0 )
384 e1000_free_rx_resources ( adapter );
386 return rc;
390 * e1000_configure_rx - Configure 8254x Receive Unit after Reset
391 * @adapter: board private structure
393 * Configure the Rx unit of the MAC after a reset.
395 static void e1000_configure_rx ( struct e1000_adapter *adapter )
397 struct e1000_hw *hw = &adapter->hw;
398 uint32_t rctl;
400 DBG ( "e1000_configure_rx\n" );
402 /* disable receives while setting up the descriptors */
403 rctl = E1000_READ_REG ( hw, E1000_RCTL );
404 E1000_WRITE_REG ( hw, E1000_RCTL, rctl & ~E1000_RCTL_EN );
405 E1000_WRITE_FLUSH ( hw );
406 mdelay(10);
408 adapter->rx_curr = 0;
410 /* Setup the HW Rx Head and Tail Descriptor Pointers and
411 * the Base and Length of the Rx Descriptor Ring */
413 E1000_WRITE_REG ( hw, E1000_RDBAL(0), virt_to_bus ( adapter->rx_base ) );
414 E1000_WRITE_REG ( hw, E1000_RDBAH(0), 0 );
415 E1000_WRITE_REG ( hw, E1000_RDLEN(0), adapter->rx_ring_size );
417 E1000_WRITE_REG ( hw, E1000_RDH(0), 0 );
418 E1000_WRITE_REG ( hw, E1000_RDT(0), NUM_RX_DESC - 1 );
420 /* Enable Receives */
421 rctl |= E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_SZ_2048 |
422 E1000_RCTL_MPE;
423 E1000_WRITE_REG ( hw, E1000_RCTL, rctl );
424 E1000_WRITE_FLUSH ( hw );
426 DBG ( "E1000_RDBAL(0): %#08x\n", E1000_READ_REG ( hw, E1000_RDBAL(0) ) );
427 DBG ( "E1000_RDLEN(0): %d\n", E1000_READ_REG ( hw, E1000_RDLEN(0) ) );
428 DBG ( "E1000_RCTL: %#08x\n", E1000_READ_REG ( hw, E1000_RCTL ) );
432 * e1000_process_rx_packets - process received packets
434 * @v netdev network interface device structure
436 static void e1000_process_rx_packets ( struct net_device *netdev )
438 struct e1000_adapter *adapter = netdev_priv ( netdev );
439 uint32_t i;
440 uint32_t rx_status;
441 uint32_t rx_len;
442 uint32_t rx_err;
443 struct e1000_rx_desc *rx_curr_desc;
445 /* Process received packets
447 while ( 1 ) {
449 i = adapter->rx_curr;
451 rx_curr_desc = ( void * ) ( adapter->rx_base ) +
452 ( i * sizeof ( *adapter->rx_base ) );
453 rx_status = rx_curr_desc->status;
455 DBG2 ( "Before DD Check RX_status: %#08x\n", rx_status );
457 if ( ! ( rx_status & E1000_RXD_STAT_DD ) )
458 break;
460 if ( adapter->rx_iobuf[i] == NULL )
461 break;
463 DBG ( "E1000_RCTL = %#08x\n", E1000_READ_REG ( &adapter->hw, E1000_RCTL ) );
465 rx_len = rx_curr_desc->length;
467 DBG ( "Received packet, rx_curr: %d rx_status: %#08x rx_len: %d\n",
468 i, rx_status, rx_len );
470 rx_err = rx_curr_desc->errors;
472 iob_put ( adapter->rx_iobuf[i], rx_len );
474 if ( rx_err & E1000_RXD_ERR_FRAME_ERR_MASK ) {
476 netdev_rx_err ( netdev, adapter->rx_iobuf[i], -EINVAL );
477 DBG ( "e1000_poll: Corrupted packet received!"
478 " rx_err: %#08x\n", rx_err );
479 } else {
480 /* Add this packet to the receive queue. */
481 netdev_rx ( netdev, adapter->rx_iobuf[i] );
483 adapter->rx_iobuf[i] = NULL;
485 memset ( rx_curr_desc, 0, sizeof ( *rx_curr_desc ) );
487 adapter->rx_curr = ( adapter->rx_curr + 1 ) % NUM_RX_DESC;
492 * e1000_reset - Put e1000 NIC in known initial state
494 * @v adapter e1000 private structure
496 void e1000_reset ( struct e1000_adapter *adapter )
498 struct e1000_mac_info *mac = &adapter->hw.mac;
499 u32 pba = 0;
501 DBG ( "e1000_reset\n" );
503 switch (mac->type) {
504 case e1000_82542:
505 case e1000_82543:
506 case e1000_82544:
507 case e1000_82540:
508 case e1000_82541:
509 case e1000_82541_rev_2:
510 pba = E1000_PBA_48K;
511 break;
512 case e1000_82545:
513 case e1000_82545_rev_3:
514 case e1000_82546:
515 case e1000_82546_rev_3:
516 pba = E1000_PBA_48K;
517 break;
518 case e1000_82547:
519 case e1000_82547_rev_2:
520 pba = E1000_PBA_30K;
521 break;
522 case e1000_undefined:
523 case e1000_num_macs:
524 break;
527 E1000_WRITE_REG ( &adapter->hw, E1000_PBA, pba );
529 /* Allow time for pending master requests to run */
530 e1000_reset_hw ( &adapter->hw );
532 if ( mac->type >= e1000_82544 )
533 E1000_WRITE_REG ( &adapter->hw, E1000_WUC, 0 );
535 if ( e1000_init_hw ( &adapter->hw ) )
536 DBG ( "Hardware Error\n" );
538 e1000_reset_adaptive ( &adapter->hw );
539 e1000_get_phy_info ( &adapter->hw );
541 e1000_init_manageability ( adapter );
544 /** Functions that implement the gPXE driver API **/
547 * e1000_close - Disables a network interface
549 * @v netdev network interface device structure
552 static void e1000_close ( struct net_device *netdev )
554 struct e1000_adapter *adapter = netdev_priv ( netdev );
555 struct e1000_hw *hw = &adapter->hw;
556 uint32_t rctl;
558 DBG ( "e1000_close\n" );
560 /* Acknowledge interrupts */
561 E1000_READ_REG ( hw, E1000_ICR );
563 e1000_irq_disable ( adapter );
565 /* disable receives */
566 rctl = E1000_READ_REG ( hw, E1000_RCTL );
567 E1000_WRITE_REG ( hw, E1000_RCTL, rctl & ~E1000_RCTL_EN );
568 E1000_WRITE_FLUSH ( hw );
570 e1000_reset_hw ( hw );
572 e1000_free_tx_resources ( adapter );
573 e1000_free_rx_resources ( adapter );
577 * e1000_transmit - Transmit a packet
579 * @v netdev Network device
580 * @v iobuf I/O buffer
582 * @ret rc Returns 0 on success, negative on failure
584 static int e1000_transmit ( struct net_device *netdev, struct io_buffer *iobuf )
586 struct e1000_adapter *adapter = netdev_priv( netdev );
587 struct e1000_hw *hw = &adapter->hw;
588 uint32_t tx_curr = adapter->tx_tail;
589 struct e1000_tx_desc *tx_curr_desc;
591 DBG ("e1000_transmit\n");
593 if ( adapter->tx_fill_ctr == NUM_TX_DESC ) {
594 DBG ("TX overflow\n");
595 return -ENOBUFS;
598 /* Save pointer to iobuf we have been given to transmit,
599 netdev_tx_complete() will need it later
601 adapter->tx_iobuf[tx_curr] = iobuf;
603 tx_curr_desc = ( void * ) ( adapter->tx_base ) +
604 ( tx_curr * sizeof ( *adapter->tx_base ) );
606 DBG ( "tx_curr_desc = %#08lx\n", virt_to_bus ( tx_curr_desc ) );
607 DBG ( "tx_curr_desc + 16 = %#08lx\n", virt_to_bus ( tx_curr_desc ) + 16 );
608 DBG ( "iobuf->data = %#08lx\n", virt_to_bus ( iobuf->data ) );
610 /* Add the packet to TX ring
612 tx_curr_desc->buffer_addr =
613 virt_to_bus ( iobuf->data );
614 tx_curr_desc->lower.data =
615 E1000_TXD_CMD_RPS | E1000_TXD_CMD_EOP |
616 E1000_TXD_CMD_IFCS | iob_len ( iobuf );
617 tx_curr_desc->upper.data = 0;
619 DBG ( "TX fill: %d tx_curr: %d addr: %#08lx len: %zd\n", adapter->tx_fill_ctr,
620 tx_curr, virt_to_bus ( iobuf->data ), iob_len ( iobuf ) );
622 /* Point to next free descriptor */
623 adapter->tx_tail = ( adapter->tx_tail + 1 ) % NUM_TX_DESC;
624 adapter->tx_fill_ctr++;
626 /* Write new tail to NIC, making packet available for transmit
628 wmb();
629 E1000_WRITE_REG ( hw, E1000_TDT(0), adapter->tx_tail );
631 return 0;
635 * e1000_poll - Poll for received packets
637 * @v netdev Network device
639 static void e1000_poll ( struct net_device *netdev )
641 struct e1000_adapter *adapter = netdev_priv( netdev );
642 struct e1000_hw *hw = &adapter->hw;
644 uint32_t icr;
646 DBGP ( "e1000_poll\n" );
648 /* Acknowledge interrupts */
649 icr = E1000_READ_REG ( hw, E1000_ICR );
650 if ( ! icr )
651 return;
653 DBG ( "e1000_poll: intr_status = %#08x\n", icr );
655 e1000_process_tx_packets ( netdev );
657 e1000_process_rx_packets ( netdev );
659 e1000_refill_rx_ring(adapter);
663 * e1000_irq - enable or Disable interrupts
665 * @v adapter e1000 adapter
666 * @v action requested interrupt action
668 static void e1000_irq ( struct net_device *netdev, int enable )
670 struct e1000_adapter *adapter = netdev_priv ( netdev );
672 DBG ( "e1000_irq\n" );
674 if ( enable ) {
675 e1000_irq_enable ( adapter );
676 } else {
677 e1000_irq_disable ( adapter );
681 static struct net_device_operations e1000_operations;
684 * e1000_probe - Initial configuration of e1000 NIC
686 * @v pci PCI device
687 * @v id PCI IDs
689 * @ret rc Return status code
691 int e1000_probe ( struct pci_device *pdev,
692 const struct pci_device_id *id __unused )
694 int i, err;
695 struct net_device *netdev;
696 struct e1000_adapter *adapter;
697 unsigned long mmio_start, mmio_len;
699 DBG ( "e1000_probe\n" );
701 err = -ENOMEM;
703 /* Allocate net device ( also allocates memory for netdev->priv
704 and makes netdev-priv point to it ) */
705 netdev = alloc_etherdev ( sizeof ( struct e1000_adapter ) );
706 if ( ! netdev )
707 goto err_alloc_etherdev;
709 /* Associate e1000-specific network operations operations with
710 * generic network device layer */
711 netdev_init ( netdev, &e1000_operations );
713 /* Associate this network device with given PCI device */
714 pci_set_drvdata ( pdev, netdev );
715 netdev->dev = &pdev->dev;
717 /* Initialize driver private storage */
718 adapter = netdev_priv ( netdev );
719 memset ( adapter, 0, ( sizeof ( *adapter ) ) );
721 adapter->pdev = pdev;
723 adapter->ioaddr = pdev->ioaddr;
724 adapter->hw.io_base = pdev->ioaddr;
726 adapter->irqno = pdev->irq;
727 adapter->netdev = netdev;
728 adapter->hw.back = adapter;
730 adapter->tx_ring_size = sizeof ( *adapter->tx_base ) * NUM_TX_DESC;
731 adapter->rx_ring_size = sizeof ( *adapter->rx_base ) * NUM_RX_DESC;
733 mmio_start = pci_bar_start ( pdev, PCI_BASE_ADDRESS_0 );
734 mmio_len = pci_bar_size ( pdev, PCI_BASE_ADDRESS_0 );
736 DBG ( "mmio_start: %#08lx\n", mmio_start );
737 DBG ( "mmio_len: %#08lx\n", mmio_len );
739 /* Fix up PCI device */
740 adjust_pci_device ( pdev );
742 err = -EIO;
744 adapter->hw.hw_addr = ioremap ( mmio_start, mmio_len );
745 DBG ( "adapter->hw.hw_addr: %p\n", adapter->hw.hw_addr );
747 if ( ! adapter->hw.hw_addr )
748 goto err_ioremap;
750 /* Hardware features, flags and workarounds */
751 if (adapter->hw.mac.type >= e1000_82540) {
752 adapter->flags |= E1000_FLAG_HAS_SMBUS;
753 adapter->flags |= E1000_FLAG_HAS_INTR_MODERATION;
756 if (adapter->hw.mac.type == e1000_82543)
757 adapter->flags |= E1000_FLAG_BAD_TX_CARRIER_STATS_FD;
759 adapter->hw.phy.autoneg_wait_to_complete = true;
760 adapter->hw.mac.adaptive_ifs = true;
762 /* setup the private structure */
763 if ( ( err = e1000_sw_init ( adapter ) ) )
764 goto err_sw_init;
766 if ((err = e1000_init_mac_params(&adapter->hw)))
767 goto err_hw_init;
769 if ((err = e1000_init_nvm_params(&adapter->hw)))
770 goto err_hw_init;
772 /* Force auto-negotiated speed and duplex */
773 adapter->hw.mac.autoneg = 1;
775 if ((err = e1000_init_phy_params(&adapter->hw)))
776 goto err_hw_init;
778 DBG ( "adapter->hw.mac.type: %#08x\n", adapter->hw.mac.type );
780 /* before reading the EEPROM, reset the controller to
781 * put the device in a known good starting state
783 err = e1000_reset_hw ( &adapter->hw );
784 if ( err < 0 ) {
785 DBG ( "Hardware Initialization Failed\n" );
786 goto err_reset;
788 /* make sure the NVM is good */
790 if ( e1000_validate_nvm_checksum(&adapter->hw) < 0 ) {
791 DBG ( "The NVM Checksum Is Not Valid\n" );
792 err = -EIO;
793 goto err_eeprom;
796 /* copy the MAC address out of the EEPROM */
797 if ( e1000_read_mac_addr ( &adapter->hw ) )
798 DBG ( "EEPROM Read Error\n" );
800 memcpy ( netdev->hw_addr, adapter->hw.mac.perm_addr, ETH_ALEN );
802 /* reset the hardware with the new settings */
803 e1000_reset ( adapter );
805 /* Mark as link up; we don't yet handle link state */
806 netdev_link_up ( netdev );
808 if ( ( err = register_netdev ( netdev ) ) != 0)
809 goto err_register;
811 for (i = 0; i < 6; i++)
812 DBG ("%02x%s", netdev->ll_addr[i], i == 5 ? "\n" : ":");
814 DBG ( "e1000_probe succeeded!\n" );
816 /* No errors, return success */
817 return 0;
819 /* Error return paths */
820 err_reset:
821 err_register:
822 err_hw_init:
823 err_eeprom:
824 if (!e1000_check_reset_block(&adapter->hw))
825 e1000_phy_hw_reset(&adapter->hw);
826 if (adapter->hw.flash_address)
827 iounmap(adapter->hw.flash_address);
828 err_sw_init:
829 iounmap ( adapter->hw.hw_addr );
830 err_ioremap:
831 netdev_put ( netdev );
832 err_alloc_etherdev:
833 return err;
837 * e1000_remove - Device Removal Routine
839 * @v pdev PCI device information struct
842 void e1000_remove ( struct pci_device *pdev )
844 struct net_device *netdev = pci_get_drvdata ( pdev );
845 struct e1000_adapter *adapter = netdev_priv ( netdev );
847 DBG ( "e1000_remove\n" );
849 if ( adapter->hw.flash_address )
850 iounmap ( adapter->hw.flash_address );
851 if ( adapter->hw.hw_addr )
852 iounmap ( adapter->hw.hw_addr );
854 unregister_netdev ( netdev );
855 e1000_reset_hw ( &adapter->hw );
856 netdev_nullify ( netdev );
857 netdev_put ( netdev );
861 * e1000_open - Called when a network interface is made active
863 * @v netdev network interface device structure
864 * @ret rc Return status code, 0 on success, negative value on failure
867 static int e1000_open ( struct net_device *netdev )
869 struct e1000_adapter *adapter = netdev_priv(netdev);
870 int err;
872 DBG ( "e1000_open\n" );
874 /* allocate transmit descriptors */
875 err = e1000_setup_tx_resources ( adapter );
876 if ( err ) {
877 DBG ( "Error setting up TX resources!\n" );
878 goto err_setup_tx;
881 /* allocate receive descriptors */
882 err = e1000_setup_rx_resources ( adapter );
883 if ( err ) {
884 DBG ( "Error setting up RX resources!\n" );
885 goto err_setup_rx;
888 e1000_configure_tx ( adapter );
890 e1000_configure_rx ( adapter );
892 DBG ( "E1000_RXDCTL(0): %#08x\n", E1000_READ_REG ( &adapter->hw, E1000_RXDCTL(0) ) );
894 return 0;
896 err_setup_rx:
897 e1000_free_tx_resources ( adapter );
898 err_setup_tx:
899 e1000_reset ( adapter );
901 return err;
904 /** e1000 net device operations */
905 static struct net_device_operations e1000_operations = {
906 .open = e1000_open,
907 .close = e1000_close,
908 .transmit = e1000_transmit,
909 .poll = e1000_poll,
910 .irq = e1000_irq,