Home | History | Annotate | Download | only in e1000
      1 /*
      2  * gPXE driver for Intel eepro1000 ethernet cards
      3  *
      4  * Written by Marty Connor
      5  *
      6  * Copyright Entity Cyber, Inc. 2007
      7  *
      8  * This software may be used and distributed according to the terms of
      9  * the GNU General Public License (GPL), incorporated herein by
     10  * reference.  Drivers based on or derived from this code fall under
     11  * the GPL and must retain the authorship, copyright and license
     12  * notice.
     13  *
     14  */
     15 
     16 /*******************************************************************************
     17 
     18   Intel PRO/1000 Linux driver
     19   Copyright(c) 1999 - 2006 Intel Corporation.
     20 
     21   This program is free software; you can redistribute it and/or modify it
     22   under the terms and conditions of the GNU General Public License,
     23   version 2, as published by the Free Software Foundation.
     24 
     25   This program is distributed in the hope it will be useful, but WITHOUT
     26   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     27   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
     28   more details.
     29 
     30   You should have received a copy of the GNU General Public License along with
     31   this program; if not, write to the Free Software Foundation, Inc.,
     32   51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
     33 
     34   The full GNU General Public License is included in this distribution in
     35   the file called "COPYING".
     36 
     37   Contact Information:
     38   Linux NICS <linux.nics (at) intel.com>
     39   e1000-devel Mailing List <e1000-devel (at) lists.sourceforge.net>
     40   Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
     41 
     42 *******************************************************************************/
     43 
     44 FILE_LICENCE ( GPL2_ONLY );
     45 
     46 #include "e1000.h"
     47 
     48 /**
     49  * e1000_get_hw_control - get control of the h/w from f/w
     50  *
     51  * @v adapter	e1000 private structure
     52  *
     53  * e1000_get_hw_control sets {CTRL_EXT|FWSM}:DRV_LOAD bit.
     54  * For ASF and Pass Through versions of f/w this means that
     55  * the driver is loaded. For AMT version (only with 82573)
     56  * of the f/w this means that the network i/f is open.
     57  *
     58  **/
     59 static void
     60 e1000_get_hw_control ( struct e1000_adapter *adapter )
     61 {
     62 	uint32_t ctrl_ext;
     63 	uint32_t swsm;
     64 
     65 	DBG ( "e1000_get_hw_control\n" );
     66 
     67 	/* Let firmware know the driver has taken over */
     68 	switch (adapter->hw.mac_type) {
     69 	case e1000_82573:
     70 		swsm = E1000_READ_REG(&adapter->hw, SWSM);
     71 		E1000_WRITE_REG(&adapter->hw, SWSM,
     72 				swsm | E1000_SWSM_DRV_LOAD);
     73 		break;
     74 	case e1000_82571:
     75 	case e1000_82572:
     76 	case e1000_82576:
     77 	case e1000_80003es2lan:
     78 	case e1000_ich8lan:
     79 		ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT);
     80 		E1000_WRITE_REG(&adapter->hw, CTRL_EXT,
     81 				ctrl_ext | E1000_CTRL_EXT_DRV_LOAD);
     82 		break;
     83 	default:
     84 		break;
     85 	}
     86 }
     87 
     88 /**
     89  * e1000_irq_enable - Enable default interrupt generation settings
     90  *
     91  * @v adapter	e1000 private structure
     92  **/
     93 static void
     94 e1000_irq_enable ( struct e1000_adapter *adapter )
     95 {
     96 	E1000_WRITE_REG ( &adapter->hw, IMS, IMS_ENABLE_MASK );
     97 	E1000_WRITE_FLUSH ( &adapter->hw );
     98 }
     99 
    100 /**
    101  * e1000_irq_disable - Mask off interrupt generation on the NIC
    102  *
    103  * @v adapter	e1000 private structure
    104  **/
    105 static void
    106 e1000_irq_disable ( struct e1000_adapter *adapter )
    107 {
    108 	E1000_WRITE_REG ( &adapter->hw, IMC, ~0 );
    109 	E1000_WRITE_FLUSH ( &adapter->hw );
    110 }
    111 
    112 /**
    113  * e1000_sw_init - Initialize general software structures (struct e1000_adapter)
    114  *
    115  * @v adapter	e1000 private structure
    116  *
    117  * e1000_sw_init initializes the Adapter private data structure.
    118  * Fields are initialized based on PCI device information and
    119  * OS network device settings (MTU size).
    120  **/
    121 static int
    122 e1000_sw_init ( struct e1000_adapter *adapter )
    123 {
    124 	struct e1000_hw *hw = &adapter->hw;
    125 	struct pci_device *pdev = adapter->pdev;
    126 
    127 	/* PCI config space info */
    128 
    129 	hw->vendor_id = pdev->vendor;
    130 	hw->device_id = pdev->device;
    131 
    132 	pci_read_config_word ( pdev, PCI_COMMAND, &hw->pci_cmd_word );
    133 
    134 	/* Disable Flow Control */
    135 	hw->fc = E1000_FC_NONE;
    136 
    137 	adapter->eeprom_wol = 0;
    138 	adapter->wol = adapter->eeprom_wol;
    139 	adapter->en_mng_pt  = 0;
    140 	adapter->rx_int_delay = 0;
    141 	adapter->rx_abs_int_delay = 0;
    142 
    143         adapter->rx_buffer_len = MAXIMUM_ETHERNET_VLAN_SIZE;
    144         adapter->rx_ps_bsize0 = E1000_RXBUFFER_128;
    145         hw->max_frame_size = MAXIMUM_ETHERNET_VLAN_SIZE +
    146 		ENET_HEADER_SIZE + ETHERNET_FCS_SIZE;
    147         hw->min_frame_size = MINIMUM_ETHERNET_FRAME_SIZE;
    148 
    149 	/* identify the MAC */
    150 
    151 	if ( e1000_set_mac_type ( hw ) ) {
    152 		DBG ( "Unknown MAC Type\n" );
    153 		return -EIO;
    154 	}
    155 
    156 	switch ( hw->mac_type ) {
    157 	default:
    158 		break;
    159 	case e1000_82541:
    160 	case e1000_82547:
    161 	case e1000_82541_rev_2:
    162 	case e1000_82547_rev_2:
    163 		hw->phy_init_script = 1;
    164 		break;
    165 	}
    166 
    167 	e1000_set_media_type ( hw );
    168 
    169 	hw->autoneg = TRUE;
    170 	hw->autoneg_advertised = AUTONEG_ADVERTISE_SPEED_DEFAULT;
    171 	hw->wait_autoneg_complete = TRUE;
    172 
    173 	hw->tbi_compatibility_en = TRUE;
    174 	hw->adaptive_ifs = TRUE;
    175 
    176 	/* Copper options */
    177 
    178 	if ( hw->media_type == e1000_media_type_copper ) {
    179 		hw->mdix = AUTO_ALL_MODES;
    180 		hw->disable_polarity_correction = FALSE;
    181 		hw->master_slave = E1000_MASTER_SLAVE;
    182 	}
    183 
    184 	e1000_irq_disable ( adapter );
    185 
    186 	return 0;
    187 }
    188 
    189 /**
    190  * e1000_setup_tx_resources - allocate Tx resources (Descriptors)
    191  *
    192  * @v adapter	e1000 private structure
    193  *
    194  * @ret rc       Returns 0 on success, negative on failure
    195  **/
    196 static int
    197 e1000_setup_tx_resources ( struct e1000_adapter *adapter )
    198 {
    199 	DBG ( "e1000_setup_tx_resources\n" );
    200 
    201 	/* Allocate transmit descriptor ring memory.
    202 	   It must not cross a 64K boundary because of hardware errata #23
    203 	   so we use malloc_dma() requesting a 128 byte block that is
    204 	   128 byte aligned. This should guarantee that the memory
    205 	   allocated will not cross a 64K boundary, because 128 is an
    206 	   even multiple of 65536 ( 65536 / 128 == 512 ), so all possible
    207 	   allocations of 128 bytes on a 128 byte boundary will not
    208 	   cross 64K bytes.
    209 	 */
    210 
    211         adapter->tx_base =
    212         	malloc_dma ( adapter->tx_ring_size, adapter->tx_ring_size );
    213 
    214        	if ( ! adapter->tx_base ) {
    215        		return -ENOMEM;
    216 	}
    217 
    218 	memset ( adapter->tx_base, 0, adapter->tx_ring_size );
    219 
    220 	DBG ( "adapter->tx_base = %#08lx\n", virt_to_bus ( adapter->tx_base ) );
    221 
    222 	return 0;
    223 }
    224 
    225 static void
    226 e1000_free_tx_resources ( struct e1000_adapter *adapter )
    227 {
    228 	DBG ( "e1000_free_tx_resources\n" );
    229 
    230         free_dma ( adapter->tx_base, adapter->tx_ring_size );
    231 }
    232 
    233 /**
    234  * e1000_configure_tx - Configure 8254x Transmit Unit after Reset
    235  * @adapter: board private structure
    236  *
    237  * Configure the Tx unit of the MAC after a reset.
    238  **/
    239 static void
    240 e1000_configure_tx ( struct e1000_adapter *adapter )
    241 {
    242 	struct e1000_hw *hw = &adapter->hw;
    243 	uint32_t tctl;
    244 	uint32_t txdctl;
    245 
    246 	DBG ( "e1000_configure_tx\n" );
    247 
    248 	E1000_WRITE_REG ( hw, TDBAH, 0 );
    249 	E1000_WRITE_REG ( hw, TDBAL, virt_to_bus ( adapter->tx_base ) );
    250 	E1000_WRITE_REG ( hw, TDLEN, adapter->tx_ring_size );
    251 
    252         DBG ( "TDBAL: %#08x\n",  E1000_READ_REG ( hw, TDBAL ) );
    253         DBG ( "TDLEN: %d\n",     E1000_READ_REG ( hw, TDLEN ) );
    254 
    255 	/* Setup the HW Tx Head and Tail descriptor pointers */
    256 	E1000_WRITE_REG ( hw, TDH, 0 );
    257 	E1000_WRITE_REG ( hw, TDT, 0 );
    258 
    259 	adapter->tx_head = 0;
    260 	adapter->tx_tail = 0;
    261 	adapter->tx_fill_ctr = 0;
    262 
    263 	if (hw->mac_type == e1000_82576) {
    264 		txdctl = E1000_READ_REG ( hw, TXDCTL );
    265 		txdctl |= E1000_TXDCTL_QUEUE_ENABLE;
    266 		E1000_WRITE_REG ( hw, TXDCTL, txdctl );
    267 	}
    268 
    269 	/* Setup Transmit Descriptor Settings for eop descriptor */
    270 	tctl = E1000_TCTL_PSP | E1000_TCTL_EN |
    271 		(E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT) |
    272 		(E1000_HDX_COLLISION_DISTANCE << E1000_COLD_SHIFT);
    273 
    274 	e1000_config_collision_dist ( hw );
    275 
    276 	E1000_WRITE_REG ( hw, TCTL, tctl );
    277         E1000_WRITE_FLUSH ( hw );
    278 }
    279 
    280 static void
    281 e1000_free_rx_resources ( struct e1000_adapter *adapter )
    282 {
    283 	int i;
    284 
    285 	DBG ( "e1000_free_rx_resources\n" );
    286 
    287 	free_dma ( adapter->rx_base, adapter->rx_ring_size );
    288 
    289 	for ( i = 0; i < NUM_RX_DESC; i++ ) {
    290 		free_iob ( adapter->rx_iobuf[i] );
    291 	}
    292 }
    293 
    294 /**
    295  * e1000_refill_rx_ring - allocate Rx io_buffers
    296  *
    297  * @v adapter	e1000 private structure
    298  *
    299  * @ret rc       Returns 0 on success, negative on failure
    300  **/
    301 int e1000_refill_rx_ring ( struct e1000_adapter *adapter )
    302 {
    303 	int i, rx_curr;
    304 	int rc = 0;
    305 	struct e1000_rx_desc *rx_curr_desc;
    306 	struct e1000_hw *hw = &adapter->hw;
    307 	struct io_buffer *iob;
    308 
    309 	DBG ("e1000_refill_rx_ring\n");
    310 
    311 	for ( i = 0; i < NUM_RX_DESC; i++ ) {
    312 		rx_curr = ( ( adapter->rx_curr + i ) % NUM_RX_DESC );
    313 		rx_curr_desc = adapter->rx_base + rx_curr;
    314 
    315 		if ( rx_curr_desc->status & E1000_RXD_STAT_DD )
    316 			continue;
    317 
    318 		if ( adapter->rx_iobuf[rx_curr] != NULL )
    319 			continue;
    320 
    321 		DBG2 ( "Refilling rx desc %d\n", rx_curr );
    322 
    323 		iob = alloc_iob ( MAXIMUM_ETHERNET_VLAN_SIZE );
    324 		adapter->rx_iobuf[rx_curr] = iob;
    325 
    326 		if ( ! iob ) {
    327 			DBG ( "alloc_iob failed\n" );
    328 			rc = -ENOMEM;
    329 			break;
    330 		} else {
    331 			rx_curr_desc->buffer_addr = virt_to_bus ( iob->data );
    332 
    333 			E1000_WRITE_REG ( hw, RDT, rx_curr );
    334 		}
    335 	}
    336 	return rc;
    337 }
    338 
    339 /**
    340  * e1000_setup_rx_resources - allocate Rx resources (Descriptors)
    341  *
    342  * @v adapter	e1000 private structure
    343  *
    344  * @ret rc       Returns 0 on success, negative on failure
    345  **/
    346 static int
    347 e1000_setup_rx_resources ( struct e1000_adapter *adapter )
    348 {
    349 	int i, rc = 0;
    350 
    351 	DBG ( "e1000_setup_rx_resources\n" );
    352 
    353 	/* Allocate receive descriptor ring memory.
    354 	   It must not cross a 64K boundary because of hardware errata
    355 	 */
    356 
    357         adapter->rx_base =
    358         	malloc_dma ( adapter->rx_ring_size, adapter->rx_ring_size );
    359 
    360        	if ( ! adapter->rx_base ) {
    361        		return -ENOMEM;
    362 	}
    363 	memset ( adapter->rx_base, 0, adapter->rx_ring_size );
    364 
    365 	for ( i = 0; i < NUM_RX_DESC; i++ ) {
    366 		/* let e1000_refill_rx_ring() io_buffer allocations */
    367 		adapter->rx_iobuf[i] = NULL;
    368 	}
    369 
    370 	/* allocate io_buffers */
    371 	rc = e1000_refill_rx_ring ( adapter );
    372 	if ( rc < 0 )
    373 		e1000_free_rx_resources ( adapter );
    374 
    375 	return rc;
    376 }
    377 
    378 /**
    379  * e1000_configure_rx - Configure 8254x Receive Unit after Reset
    380  * @adapter: board private structure
    381  *
    382  * Configure the Rx unit of the MAC after a reset.
    383  **/
    384 static void
    385 e1000_configure_rx ( struct e1000_adapter *adapter )
    386 {
    387 	struct e1000_hw *hw = &adapter->hw;
    388 	uint32_t rctl, rxdctl, mrqc, rxcsum;
    389 
    390 	DBG ( "e1000_configure_rx\n" );
    391 
    392 	/* disable receives while setting up the descriptors */
    393 	rctl = E1000_READ_REG ( hw, RCTL );
    394 	E1000_WRITE_REG ( hw, RCTL, rctl & ~E1000_RCTL_EN );
    395 	E1000_WRITE_FLUSH ( hw );
    396 	mdelay(10);
    397 
    398 	adapter->rx_curr = 0;
    399 
    400 	/* Setup the HW Rx Head and Tail Descriptor Pointers and
    401 	 * the Base and Length of the Rx Descriptor Ring */
    402 
    403 	E1000_WRITE_REG ( hw, RDBAL, virt_to_bus ( adapter->rx_base ) );
    404 	E1000_WRITE_REG ( hw, RDBAH, 0 );
    405 	E1000_WRITE_REG ( hw, RDLEN, adapter->rx_ring_size );
    406 
    407 	E1000_WRITE_REG ( hw, RDH, 0 );
    408 	if (hw->mac_type == e1000_82576)
    409 		E1000_WRITE_REG ( hw, RDT, 0 );
    410 	else
    411 		E1000_WRITE_REG ( hw, RDT, NUM_RX_DESC - 1 );
    412 
    413 	/* This doesn't seem to  be necessary for correct operation,
    414 	 * but it seems as well to be implicit
    415 	 */
    416 	if (hw->mac_type == e1000_82576) {
    417 		rxdctl = E1000_READ_REG ( hw, RXDCTL );
    418 		rxdctl |= E1000_RXDCTL_QUEUE_ENABLE;
    419 		rxdctl &= 0xFFF00000;
    420 		rxdctl |= IGB_RX_PTHRESH;
    421 		rxdctl |= IGB_RX_HTHRESH << 8;
    422 		rxdctl |= IGB_RX_WTHRESH << 16;
    423 		E1000_WRITE_REG ( hw, RXDCTL, rxdctl );
    424 		E1000_WRITE_FLUSH ( hw );
    425 
    426 		rxcsum = E1000_READ_REG(hw, RXCSUM);
    427 		rxcsum &= ~( E1000_RXCSUM_TUOFL | E1000_RXCSUM_IPPCSE );
    428 		E1000_WRITE_REG ( hw, RXCSUM, 0 );
    429 
    430 		/* The initial value for MRQC disables multiple receive
    431 		 * queues, however this setting is not recommended.
    432 		 * - Intel 82576 Gigabit Ethernet Controller Datasheet r2.41
    433 	         *   Section 8.10.9 Multiple Queues Command Register - MRQC
    434 		 */
    435 		mrqc = E1000_MRQC_ENABLE_VMDQ;
    436 		E1000_WRITE_REG ( hw, MRQC, mrqc );
    437 	}
    438 
    439 	/* Enable Receives */
    440 	rctl |=  E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_SZ_2048 |
    441 		 E1000_RCTL_MPE;
    442 	E1000_WRITE_REG ( hw, RCTL, rctl );
    443 	E1000_WRITE_FLUSH ( hw );
    444 
    445 	/* On the 82576, RDT([0]) must not be "bumped" before
    446 	 * the enable bit of RXDCTL([0]) is set.
    447 	 * - Intel 82576 Gigabit Ethernet Controller Datasheet r2.41
    448 	 *   Section 4.5.9 receive Initialization
    449 	 *
    450 	 * By observation I have found to occur when the enable bit of
    451 	 * RCTL is set. The datasheet recommends polling for this bit,
    452 	 * however as I see no evidence of this in the Linux igb driver
    453 	 * I have omitted that step.
    454 	 * - Simon Horman, May 2009
    455 	 */
    456 	if (hw->mac_type == e1000_82576)
    457 		E1000_WRITE_REG ( hw, RDT, NUM_RX_DESC - 1 );
    458 
    459         DBG ( "RDBAL: %#08x\n",  E1000_READ_REG ( hw, RDBAL ) );
    460         DBG ( "RDLEN: %d\n",     E1000_READ_REG ( hw, RDLEN ) );
    461         DBG ( "RCTL:  %#08x\n",  E1000_READ_REG ( hw, RCTL ) );
    462 }
    463 
    464 /**
    465  * e1000_reset - Put e1000 NIC in known initial state
    466  *
    467  * @v adapter	e1000 private structure
    468  **/
    469 static void
    470 e1000_reset ( struct e1000_adapter *adapter )
    471 {
    472 	uint32_t pba = 0;
    473 	uint16_t fc_high_water_mark = E1000_FC_HIGH_DIFF;
    474 
    475 	DBG ( "e1000_reset\n" );
    476 
    477 	switch (adapter->hw.mac_type) {
    478 	case e1000_82542_rev2_0:
    479 	case e1000_82542_rev2_1:
    480 	case e1000_82543:
    481 	case e1000_82544:
    482 	case e1000_82540:
    483 	case e1000_82541:
    484 	case e1000_82541_rev_2:
    485 		pba = E1000_PBA_48K;
    486 		break;
    487 	case e1000_82545:
    488 	case e1000_82545_rev_3:
    489 	case e1000_82546:
    490 	case e1000_82546_rev_3:
    491 		pba = E1000_PBA_48K;
    492 		break;
    493 	case e1000_82547:
    494 	case e1000_82547_rev_2:
    495 		pba = E1000_PBA_30K;
    496 		break;
    497 	case e1000_82571:
    498 	case e1000_82572:
    499 	case e1000_80003es2lan:
    500 		pba = E1000_PBA_38K;
    501 		break;
    502 	case e1000_82573:
    503 		pba = E1000_PBA_20K;
    504 		break;
    505 	case e1000_82576:
    506 		pba = E1000_PBA_64K;
    507 		break;
    508 	case e1000_ich8lan:
    509 		pba = E1000_PBA_8K;
    510 	case e1000_undefined:
    511 	case e1000_num_macs:
    512 		break;
    513 	}
    514 
    515 	E1000_WRITE_REG ( &adapter->hw, PBA, pba );
    516 
    517 	/* flow control settings */
    518 	/* Set the FC high water mark to 90% of the FIFO size.
    519 	 * Required to clear last 3 LSB */
    520 	fc_high_water_mark = ((pba * 9216)/10) & 0xFFF8;
    521 
    522 	/* We can't use 90% on small FIFOs because the remainder
    523 	 * would be less than 1 full frame.  In this case, we size
    524 	 * it to allow at least a full frame above the high water
    525 	 *  mark. */
    526 	if (pba < E1000_PBA_16K)
    527 		fc_high_water_mark = (pba * 1024) - 1600;
    528 
    529 	/* This actually applies to < e1000_82575, one revision less than
    530 	 * e1000_82576, but e1000_82575 isn't currently defined in the code */
    531 	if (adapter->hw.mac_type < e1000_82576) {
    532 		/* 8-byte granularity */
    533 		adapter->hw.fc_high_water = fc_high_water_mark & 0xFFF8;
    534 		adapter->hw.fc_low_water = adapter->hw.fc_high_water - 8;
    535 	} else {
    536 		/* 16-byte granularity */
    537 		adapter->hw.fc_high_water = fc_high_water_mark & 0xFFF0;
    538 		adapter->hw.fc_low_water = adapter->hw.fc_high_water - 16;
    539 	}
    540 
    541 	if (adapter->hw.mac_type == e1000_80003es2lan ||
    542 	    adapter->hw.mac_type == e1000_82576)
    543 		adapter->hw.fc_pause_time = 0xFFFF;
    544 	else
    545 		adapter->hw.fc_pause_time = E1000_FC_PAUSE_TIME;
    546 	adapter->hw.fc_send_xon = 1;
    547 	adapter->hw.fc = adapter->hw.original_fc;
    548 	/* Allow time for pending master requests to run */
    549 
    550 	e1000_reset_hw ( &adapter->hw );
    551 
    552 	if ( adapter->hw.mac_type >= e1000_82544 )
    553 		E1000_WRITE_REG ( &adapter->hw, WUC, 0 );
    554 
    555 	if ( e1000_init_hw ( &adapter->hw ) )
    556 		DBG ( "Hardware Error\n" );
    557 
    558 	/* if (adapter->hwflags & HWFLAGS_PHY_PWR_BIT) { */
    559 	if (adapter->hw.mac_type >= e1000_82544 &&
    560 	    adapter->hw.mac_type <= e1000_82547_rev_2 &&
    561 	    adapter->hw.autoneg == 1 &&
    562 	    adapter->hw.autoneg_advertised == ADVERTISE_1000_FULL) {
    563 		uint32_t ctrl = E1000_READ_REG(&adapter->hw, CTRL);
    564 		/* clear phy power management bit if we are in gig only mode,
    565 		 * which if enabled will attempt negotiation to 100Mb, which
    566 		 * can cause a loss of link at power off or driver unload */
    567 		ctrl &= ~E1000_CTRL_SWDPIN3;
    568 		E1000_WRITE_REG(&adapter->hw, CTRL, ctrl);
    569 	}
    570 
    571 	e1000_phy_get_info ( &adapter->hw, &adapter->phy_info );
    572 
    573 	if (!adapter->smart_power_down &&
    574 	    (adapter->hw.mac_type == e1000_82571 ||
    575 	     adapter->hw.mac_type == e1000_82572)) {
    576 		uint16_t phy_data = 0;
    577 		/* speed up time to link by disabling smart power down, ignore
    578 		 * the return value of this function because there is nothing
    579 		 * different we would do if it failed */
    580 		e1000_read_phy_reg(&adapter->hw, IGP02E1000_PHY_POWER_MGMT,
    581 		                   &phy_data);
    582 		phy_data &= ~IGP02E1000_PM_SPD;
    583 		e1000_write_phy_reg(&adapter->hw, IGP02E1000_PHY_POWER_MGMT,
    584 		                    phy_data);
    585 	}
    586 }
    587 
    588 /** Functions that implement the gPXE driver API **/
    589 
    590 /**
    591  * e1000_close - Disables a network interface
    592  *
    593  * @v netdev	network interface device structure
    594  *
    595  **/
    596 static void
    597 e1000_close ( struct net_device *netdev )
    598 {
    599 	struct e1000_adapter *adapter = netdev_priv ( netdev );
    600 	struct e1000_hw *hw = &adapter->hw;
    601 	uint32_t rctl;
    602 	uint32_t icr;
    603 
    604 	DBG ( "e1000_close\n" );
    605 
    606 	/* Acknowledge interrupts */
    607 	icr = E1000_READ_REG ( hw, ICR );
    608 
    609 	e1000_irq_disable ( adapter );
    610 
    611 	/* disable receives */
    612 	rctl = E1000_READ_REG ( hw, RCTL );
    613 	E1000_WRITE_REG ( hw, RCTL, rctl & ~E1000_RCTL_EN );
    614 	E1000_WRITE_FLUSH ( hw );
    615 
    616 	e1000_reset_hw ( hw );
    617 
    618 	e1000_free_tx_resources ( adapter );
    619 	e1000_free_rx_resources ( adapter );
    620 }
    621 
    622 /**
    623  * e1000_transmit - Transmit a packet
    624  *
    625  * @v netdev	Network device
    626  * @v iobuf	I/O buffer
    627  *
    628  * @ret rc       Returns 0 on success, negative on failure
    629  */
    630 static int
    631 e1000_transmit ( struct net_device *netdev, struct io_buffer *iobuf )
    632 {
    633 	struct e1000_adapter *adapter = netdev_priv( netdev );
    634 	struct e1000_hw *hw = &adapter->hw;
    635 	uint32_t tx_curr = adapter->tx_tail;
    636 	struct e1000_tx_desc *tx_curr_desc;
    637 
    638 	DBG ("e1000_transmit\n");
    639 
    640 	if ( adapter->tx_fill_ctr == NUM_TX_DESC ) {
    641 		DBG ("TX overflow\n");
    642 		return -ENOBUFS;
    643 	}
    644 
    645 	/* Save pointer to iobuf we have been given to transmit,
    646 	   netdev_tx_complete() will need it later
    647 	 */
    648 	adapter->tx_iobuf[tx_curr] = iobuf;
    649 
    650 	tx_curr_desc = ( void * ) ( adapter->tx_base ) +
    651 		       ( tx_curr * sizeof ( *adapter->tx_base ) );
    652 
    653 	DBG ( "tx_curr_desc = %#08lx\n", virt_to_bus ( tx_curr_desc ) );
    654 	DBG ( "tx_curr_desc + 16 = %#08lx\n", virt_to_bus ( tx_curr_desc ) + 16 );
    655 	DBG ( "iobuf->data = %#08lx\n", virt_to_bus ( iobuf->data ) );
    656 
    657 	/* Add the packet to TX ring
    658 	 */
    659  	tx_curr_desc->buffer_addr =
    660 		virt_to_bus ( iobuf->data );
    661 	tx_curr_desc->lower.data =
    662 		E1000_TXD_CMD_RPS  | E1000_TXD_CMD_EOP |
    663 		E1000_TXD_CMD_IFCS | iob_len ( iobuf );
    664 	tx_curr_desc->upper.data = 0;
    665 
    666 	DBG ( "TX fill: %d tx_curr: %d addr: %#08lx len: %zd\n", adapter->tx_fill_ctr,
    667 	      tx_curr, virt_to_bus ( iobuf->data ), iob_len ( iobuf ) );
    668 
    669 	/* Point to next free descriptor */
    670 	adapter->tx_tail = ( adapter->tx_tail + 1 ) % NUM_TX_DESC;
    671 	adapter->tx_fill_ctr++;
    672 
    673 	/* Write new tail to NIC, making packet available for transmit
    674 	 */
    675 	wmb();
    676 	E1000_WRITE_REG ( hw, TDT, adapter->tx_tail );
    677 
    678 	return 0;
    679 }
    680 
    681 /**
    682  * e1000_poll - Poll for received packets
    683  *
    684  * @v netdev	Network device
    685  */
    686 static void
    687 e1000_poll ( struct net_device *netdev )
    688 {
    689 	struct e1000_adapter *adapter = netdev_priv( netdev );
    690 	struct e1000_hw *hw = &adapter->hw;
    691 
    692 	uint32_t icr;
    693 	uint32_t tx_status;
    694 	uint32_t rx_status;
    695 	uint32_t rx_len;
    696 	uint32_t rx_err;
    697 	struct e1000_tx_desc *tx_curr_desc;
    698 	struct e1000_rx_desc *rx_curr_desc;
    699 	uint32_t i;
    700 
    701 	DBGP ( "e1000_poll\n" );
    702 
    703 	/* Acknowledge interrupts */
    704 	icr = E1000_READ_REG ( hw, ICR );
    705 	if ( ! icr )
    706 		return;
    707 
    708         DBG ( "e1000_poll: intr_status = %#08x\n", icr );
    709 
    710 	/* Check status of transmitted packets
    711 	 */
    712 	while ( ( i = adapter->tx_head ) != adapter->tx_tail ) {
    713 
    714 		tx_curr_desc = ( void * )  ( adapter->tx_base ) +
    715 					   ( i * sizeof ( *adapter->tx_base ) );
    716 
    717 		tx_status = tx_curr_desc->upper.data;
    718 
    719 		/* if the packet at tx_head is not owned by hardware it is for us */
    720 		if ( ! ( tx_status & E1000_TXD_STAT_DD ) )
    721 			break;
    722 
    723 		DBG ( "Sent packet. tx_head: %d tx_tail: %d tx_status: %#08x\n",
    724 	    	      adapter->tx_head, adapter->tx_tail, tx_status );
    725 
    726 		if ( tx_status & ( E1000_TXD_STAT_EC | E1000_TXD_STAT_LC |
    727 				   E1000_TXD_STAT_TU ) ) {
    728 			netdev_tx_complete_err ( netdev, adapter->tx_iobuf[i], -EINVAL );
    729 			DBG ( "Error transmitting packet, tx_status: %#08x\n",
    730 			      tx_status );
    731 		} else {
    732 			netdev_tx_complete ( netdev, adapter->tx_iobuf[i] );
    733 			DBG ( "Success transmitting packet, tx_status: %#08x\n",
    734 			      tx_status );
    735 		}
    736 
    737 		/* Decrement count of used descriptors, clear this descriptor
    738 		 */
    739 		adapter->tx_fill_ctr--;
    740 		memset ( tx_curr_desc, 0, sizeof ( *tx_curr_desc ) );
    741 
    742 		adapter->tx_head = ( adapter->tx_head + 1 ) % NUM_TX_DESC;
    743 	}
    744 
    745 	/* Process received packets
    746 	 */
    747 	while ( 1 ) {
    748 
    749 		i = adapter->rx_curr;
    750 
    751 		rx_curr_desc = ( void * )  ( adapter->rx_base ) +
    752 			          ( i * sizeof ( *adapter->rx_base ) );
    753 		rx_status = rx_curr_desc->status;
    754 
    755 		DBG2 ( "Before DD Check RX_status: %#08x\n", rx_status );
    756 
    757 		if ( ! ( rx_status & E1000_RXD_STAT_DD ) )
    758 			break;
    759 
    760 		if ( adapter->rx_iobuf[i] == NULL )
    761 			break;
    762 
    763 		DBG ( "RCTL = %#08x\n", E1000_READ_REG ( &adapter->hw, RCTL ) );
    764 
    765 		rx_len = rx_curr_desc->length;
    766 
    767                 DBG ( "Received packet, rx_curr: %d  rx_status: %#08x  rx_len: %d\n",
    768                       i, rx_status, rx_len );
    769 
    770                 rx_err = rx_curr_desc->errors;
    771 
    772 		iob_put ( adapter->rx_iobuf[i], rx_len );
    773 
    774 		if ( rx_err & E1000_RXD_ERR_FRAME_ERR_MASK ) {
    775 
    776 			netdev_rx_err ( netdev, adapter->rx_iobuf[i], -EINVAL );
    777 			DBG ( "e1000_poll: Corrupted packet received!"
    778 			      " rx_err: %#08x\n", rx_err );
    779 		} else 	{
    780 			/* Add this packet to the receive queue. */
    781 			netdev_rx ( netdev, adapter->rx_iobuf[i] );
    782 		}
    783 		adapter->rx_iobuf[i] = NULL;
    784 
    785 		memset ( rx_curr_desc, 0, sizeof ( *rx_curr_desc ) );
    786 
    787 		adapter->rx_curr = ( adapter->rx_curr + 1 ) % NUM_RX_DESC;
    788 	}
    789 	e1000_refill_rx_ring(adapter);
    790 }
    791 
    792 /**
    793  * e1000_irq - enable or Disable interrupts
    794  *
    795  * @v adapter   e1000 adapter
    796  * @v action    requested interrupt action
    797  **/
    798 static void
    799 e1000_irq ( struct net_device *netdev, int enable )
    800 {
    801 	struct e1000_adapter *adapter = netdev_priv(netdev);
    802 
    803 	DBG ( "e1000_irq\n" );
    804 
    805 	if ( enable )
    806 		e1000_irq_enable ( adapter );
    807 	else
    808 		e1000_irq_disable ( adapter );
    809 }
    810 
    811 static struct net_device_operations e1000_operations;
    812 
    813 /**
    814  * e1000_probe - Initial configuration of e1000 NIC
    815  *
    816  * @v pci	PCI device
    817  * @v id	PCI IDs
    818  *
    819  * @ret rc	Return status code
    820  **/
    821 static int
    822 e1000_probe ( struct pci_device *pdev,
    823 	      const struct pci_device_id *id __unused )
    824 {
    825 	int i, err;
    826 	struct net_device *netdev;
    827 	struct e1000_adapter *adapter;
    828 	unsigned long mmio_start, mmio_len;
    829 	unsigned long flash_start, flash_len;
    830 
    831 	DBG ( "e1000_probe\n" );
    832 
    833 	err = -ENOMEM;
    834 
    835 	/* Allocate net device ( also allocates memory for netdev->priv
    836 	   and makes netdev-priv point to it ) */
    837 	netdev = alloc_etherdev ( sizeof ( struct e1000_adapter ) );
    838 	if ( ! netdev )
    839 		goto err_alloc_etherdev;
    840 
    841 	/* Associate e1000-specific network operations operations with
    842 	 * generic network device layer */
    843 	netdev_init ( netdev, &e1000_operations );
    844 
    845 	/* Associate this network device with given PCI device */
    846 	pci_set_drvdata ( pdev, netdev );
    847 	netdev->dev = &pdev->dev;
    848 
    849 	/* Initialize driver private storage */
    850 	adapter = netdev_priv ( netdev );
    851         memset ( adapter, 0, ( sizeof ( *adapter ) ) );
    852 
    853         adapter->hw.io_base = pdev->ioaddr;
    854 	adapter->ioaddr     = pdev->ioaddr;
    855         adapter->irqno      = pdev->irq;
    856 	adapter->netdev     = netdev;
    857 	adapter->pdev       = pdev;
    858 	adapter->hw.back    = adapter;
    859 
    860 	adapter->tx_ring_size = sizeof ( *adapter->tx_base ) * NUM_TX_DESC;
    861 	adapter->rx_ring_size = sizeof ( *adapter->rx_base ) * NUM_RX_DESC;
    862 
    863 	mmio_start = pci_bar_start ( pdev, PCI_BASE_ADDRESS_0 );
    864 	mmio_len   = pci_bar_size  ( pdev, PCI_BASE_ADDRESS_0 );
    865 
    866 	DBG ( "mmio_start: %#08lx\n", mmio_start );
    867 	DBG ( "mmio_len: %#08lx\n", mmio_len );
    868 
    869 	/* Fix up PCI device */
    870 	adjust_pci_device ( pdev );
    871 
    872 	err = -EIO;
    873 
    874 	adapter->hw.hw_addr = ioremap ( mmio_start, mmio_len );
    875 	DBG ( "adapter->hw.hw_addr: %p\n", adapter->hw.hw_addr );
    876 
    877 	if ( ! adapter->hw.hw_addr )
    878 		goto err_ioremap;
    879 
    880 	/* setup the private structure */
    881 	if ( ( err = e1000_sw_init ( adapter ) ) )
    882 		goto err_sw_init;
    883 
    884 	DBG ( "adapter->hw.mac_type: %#08x\n", adapter->hw.mac_type );
    885 
    886 	/* Flash BAR mapping must happen after e1000_sw_init
    887 	 * because it depends on mac_type
    888 	 */
    889 	if ( ( adapter->hw.mac_type == e1000_ich8lan ) && ( pdev->ioaddr ) ) {
    890 		flash_start = pci_bar_start ( pdev, PCI_BASE_ADDRESS_1 );
    891 		flash_len = pci_bar_size ( pdev, PCI_BASE_ADDRESS_1 );
    892 		adapter->hw.flash_address = ioremap ( flash_start, flash_len );
    893 		if ( ! adapter->hw.flash_address )
    894 			goto err_flashmap;
    895 	}
    896 
    897 	/* initialize eeprom parameters */
    898 	if ( e1000_init_eeprom_params ( &adapter->hw ) ) {
    899 		DBG ( "EEPROM initialization failed\n" );
    900 		goto err_eeprom;
    901 	}
    902 
    903 	/* before reading the EEPROM, reset the controller to
    904 	 * put the device in a known good starting state
    905 	 */
    906 	err = e1000_reset_hw ( &adapter->hw );
    907 	if ( err < 0 ) {
    908 		DBG ( "Hardware Initialization Failed\n" );
    909 		goto err_reset;
    910 	}
    911 
    912 	/* make sure the EEPROM is good */
    913 	if ( e1000_validate_eeprom_checksum( &adapter->hw ) < 0 ) {
    914 		DBG ( "The EEPROM Checksum Is Not Valid\n" );
    915 		goto err_eeprom;
    916 	}
    917 
    918 	/* copy the MAC address out of the EEPROM */
    919 	if ( e1000_read_mac_addr ( &adapter->hw ) )
    920 		DBG ( "EEPROM Read Error\n" );
    921 
    922         memcpy ( netdev->hw_addr, adapter->hw.mac_addr, ETH_ALEN );
    923 
    924 	/* print bus type/speed/width info */
    925 	{
    926 	struct e1000_hw *hw = &adapter->hw;
    927 	DBG ( "(PCI%s:%s:%s) ",
    928 	      ((hw->bus_type == e1000_bus_type_pcix) ? "-X" :
    929 	       (hw->bus_type == e1000_bus_type_pci_express ? " Express":"")),
    930 	      ((hw->bus_speed == e1000_bus_speed_2500) ? "2.5Gb/s" :
    931 	       (hw->bus_speed == e1000_bus_speed_133) ? "133MHz" :
    932 	       (hw->bus_speed == e1000_bus_speed_120) ? "120MHz" :
    933 	       (hw->bus_speed == e1000_bus_speed_100) ? "100MHz" :
    934 	       (hw->bus_speed == e1000_bus_speed_66) ? "66MHz" : "33MHz"),
    935   	      ((hw->bus_width == e1000_bus_width_64) ? "64-bit" :
    936   	       (hw->bus_width == e1000_bus_width_pciex_4) ? "Width x4" :
    937 	       (hw->bus_width == e1000_bus_width_pciex_1) ? "Width x1" :
    938 	       "32-bit"));
    939 	}
    940 	for (i = 0; i < 6; i++)
    941 		DBG ("%02x%s", netdev->ll_addr[i], i == 5 ? "\n" : ":");
    942 
    943 	/* reset the hardware with the new settings */
    944 	e1000_reset ( adapter );
    945 
    946 	e1000_get_hw_control ( adapter );
    947 
    948 	/* Mark as link up; we don't yet handle link state */
    949 	netdev_link_up ( netdev );
    950 
    951 	if ( ( err = register_netdev ( netdev ) ) != 0)
    952 		goto err_register;
    953 
    954 	DBG ( "e1000_probe succeeded!\n" );
    955 
    956 	/* No errors, return success */
    957 	return 0;
    958 
    959 /* Error return paths */
    960 err_reset:
    961 err_register:
    962 err_eeprom:
    963 	if ( ! e1000_check_phy_reset_block ( &adapter->hw ) )
    964 		e1000_phy_hw_reset ( &adapter->hw );
    965 	if ( adapter->hw.flash_address )
    966 		iounmap ( adapter->hw.flash_address );
    967 err_flashmap:
    968 err_sw_init:
    969 	iounmap ( adapter->hw.hw_addr );
    970 err_ioremap:
    971 	netdev_put ( netdev );
    972 err_alloc_etherdev:
    973 	return err;
    974 }
    975 
    976 /**
    977  * e1000_remove - Device Removal Routine
    978  *
    979  * @v pdev PCI device information struct
    980  *
    981  **/
    982 static void
    983 e1000_remove ( struct pci_device *pdev )
    984 {
    985 	struct net_device *netdev = pci_get_drvdata ( pdev );
    986 	struct e1000_adapter *adapter = netdev_priv ( netdev );
    987 
    988 	DBG ( "e1000_remove\n" );
    989 
    990 	if ( adapter->hw.flash_address )
    991 		iounmap ( adapter->hw.flash_address );
    992 	if  ( adapter->hw.hw_addr )
    993 		iounmap ( adapter->hw.hw_addr );
    994 
    995 	unregister_netdev ( netdev );
    996 	e1000_reset_hw ( &adapter->hw );
    997 	netdev_nullify ( netdev );
    998 	netdev_put ( netdev );
    999 }
   1000 
   1001 /**
   1002  * e1000_open - Called when a network interface is made active
   1003  *
   1004  * @v netdev	network interface device structure
   1005  * @ret rc	Return status code, 0 on success, negative value on failure
   1006  *
   1007  **/
   1008 static int
   1009 e1000_open ( struct net_device *netdev )
   1010 {
   1011 	struct e1000_adapter *adapter = netdev_priv(netdev);
   1012 	int err;
   1013 
   1014 	DBG ( "e1000_open\n" );
   1015 
   1016 	/* allocate transmit descriptors */
   1017 	err = e1000_setup_tx_resources ( adapter );
   1018 	if ( err ) {
   1019 		DBG ( "Error setting up TX resources!\n" );
   1020 		goto err_setup_tx;
   1021 	}
   1022 
   1023 	/* allocate receive descriptors */
   1024 	err = e1000_setup_rx_resources ( adapter );
   1025 	if ( err ) {
   1026 		DBG ( "Error setting up RX resources!\n" );
   1027 		goto err_setup_rx;
   1028 	}
   1029 
   1030 	e1000_configure_tx ( adapter );
   1031 
   1032 	e1000_configure_rx ( adapter );
   1033 
   1034         DBG ( "RXDCTL: %#08x\n",  E1000_READ_REG ( &adapter->hw, RXDCTL ) );
   1035 
   1036 	return 0;
   1037 
   1038 err_setup_rx:
   1039 	e1000_free_tx_resources ( adapter );
   1040 err_setup_tx:
   1041 	e1000_reset ( adapter );
   1042 
   1043 	return err;
   1044 }
   1045 
   1046 /** e1000 net device operations */
   1047 static struct net_device_operations e1000_operations = {
   1048         .open           = e1000_open,
   1049         .close          = e1000_close,
   1050         .transmit       = e1000_transmit,
   1051         .poll           = e1000_poll,
   1052         .irq            = e1000_irq,
   1053 };
   1054 
   1055 int32_t
   1056 e1000_read_pcie_cap_reg(struct e1000_hw *hw, uint32_t reg, uint16_t *value)
   1057 {
   1058     struct e1000_adapter *adapter = hw->back;
   1059     uint16_t cap_offset;
   1060 
   1061 #define  PCI_CAP_ID_EXP        0x10    /* PCI Express */
   1062     cap_offset = pci_find_capability(adapter->pdev, PCI_CAP_ID_EXP);
   1063     if (!cap_offset)
   1064         return -E1000_ERR_CONFIG;
   1065 
   1066     pci_read_config_word(adapter->pdev, cap_offset + reg, value);
   1067 
   1068     return 0;
   1069 }
   1070 
   1071 void
   1072 e1000_pci_clear_mwi ( struct e1000_hw *hw )
   1073 {
   1074 	struct e1000_adapter *adapter = hw->back;
   1075 
   1076 	pci_write_config_word ( adapter->pdev, PCI_COMMAND,
   1077 			        hw->pci_cmd_word & ~PCI_COMMAND_INVALIDATE );
   1078 }
   1079 
   1080 void
   1081 e1000_pci_set_mwi ( struct e1000_hw *hw )
   1082 {
   1083 	struct e1000_adapter *adapter = hw->back;
   1084 
   1085 	pci_write_config_word ( adapter->pdev, PCI_COMMAND, hw->pci_cmd_word );
   1086 }
   1087 
   1088 void
   1089 e1000_read_pci_cfg ( struct e1000_hw *hw, uint32_t reg, uint16_t *value )
   1090 {
   1091 	struct e1000_adapter *adapter = hw->back;
   1092 
   1093 	pci_read_config_word ( adapter->pdev, reg, value );
   1094 }
   1095 
   1096 void
   1097 e1000_write_pci_cfg ( struct e1000_hw *hw, uint32_t reg, uint16_t *value )
   1098 {
   1099 	struct e1000_adapter *adapter = hw->back;
   1100 
   1101 	pci_write_config_word ( adapter->pdev, reg, *value );
   1102 }
   1103 
   1104 void
   1105 e1000_io_write ( struct e1000_hw *hw  __unused, unsigned long port, uint32_t value )
   1106 {
   1107 	outl ( value, port );
   1108 }
   1109 
   1110 static struct pci_device_id e1000_nics[] = {
   1111 	PCI_ROM(0x8086, 0x1000, "e1000-0x1000", "e1000-0x1000", 0),
   1112 	PCI_ROM(0x8086, 0x1001, "e1000-0x1001", "e1000-0x1001", 0),
   1113 	PCI_ROM(0x8086, 0x1004, "e1000-0x1004", "e1000-0x1004", 0),
   1114 	PCI_ROM(0x8086, 0x1008, "e1000-0x1008", "e1000-0x1008", 0),
   1115 	PCI_ROM(0x8086, 0x1009, "e1000-0x1009", "e1000-0x1009", 0),
   1116 	PCI_ROM(0x8086, 0x100c, "e1000-0x100c", "e1000-0x100c", 0),
   1117 	PCI_ROM(0x8086, 0x100d, "e1000-0x100d", "e1000-0x100d", 0),
   1118 	PCI_ROM(0x8086, 0x100e, "e1000-0x100e", "e1000-0x100e", 0),
   1119 	PCI_ROM(0x8086, 0x100f, "e1000-0x100f", "e1000-0x100f", 0),
   1120 	PCI_ROM(0x8086, 0x1010, "e1000-0x1010", "e1000-0x1010", 0),
   1121 	PCI_ROM(0x8086, 0x1011, "e1000-0x1011", "e1000-0x1011", 0),
   1122 	PCI_ROM(0x8086, 0x1012, "e1000-0x1012", "e1000-0x1012", 0),
   1123 	PCI_ROM(0x8086, 0x1013, "e1000-0x1013", "e1000-0x1013", 0),
   1124 	PCI_ROM(0x8086, 0x1014, "e1000-0x1014", "e1000-0x1014", 0),
   1125 	PCI_ROM(0x8086, 0x1015, "e1000-0x1015", "e1000-0x1015", 0),
   1126 	PCI_ROM(0x8086, 0x1016, "e1000-0x1016", "e1000-0x1016", 0),
   1127 	PCI_ROM(0x8086, 0x1017, "e1000-0x1017", "e1000-0x1017", 0),
   1128 	PCI_ROM(0x8086, 0x1018, "e1000-0x1018", "e1000-0x1018", 0),
   1129 	PCI_ROM(0x8086, 0x1019, "e1000-0x1019", "e1000-0x1019", 0),
   1130 	PCI_ROM(0x8086, 0x101a, "e1000-0x101a", "e1000-0x101a", 0),
   1131 	PCI_ROM(0x8086, 0x101d, "e1000-0x101d", "e1000-0x101d", 0),
   1132 	PCI_ROM(0x8086, 0x101e, "e1000-0x101e", "e1000-0x101e", 0),
   1133 	PCI_ROM(0x8086, 0x1026, "e1000-0x1026", "e1000-0x1026", 0),
   1134 	PCI_ROM(0x8086, 0x1027, "e1000-0x1027", "e1000-0x1027", 0),
   1135 	PCI_ROM(0x8086, 0x1028, "e1000-0x1028", "e1000-0x1028", 0),
   1136 	PCI_ROM(0x8086, 0x1049, "e1000-0x1049", "e1000-0x1049", 0),
   1137 	PCI_ROM(0x8086, 0x104a, "e1000-0x104a", "e1000-0x104a", 0),
   1138 	PCI_ROM(0x8086, 0x104b, "e1000-0x104b", "e1000-0x104b", 0),
   1139 	PCI_ROM(0x8086, 0x104c, "e1000-0x104c", "e1000-0x104c", 0),
   1140 	PCI_ROM(0x8086, 0x104d, "e1000-0x104d", "e1000-0x104d", 0),
   1141 	PCI_ROM(0x8086, 0x105e, "e1000-0x105e", "e1000-0x105e", 0),
   1142 	PCI_ROM(0x8086, 0x105f, "e1000-0x105f", "e1000-0x105f", 0),
   1143 	PCI_ROM(0x8086, 0x1060, "e1000-0x1060", "e1000-0x1060", 0),
   1144 	PCI_ROM(0x8086, 0x1075, "e1000-0x1075", "e1000-0x1075", 0),
   1145 	PCI_ROM(0x8086, 0x1076, "e1000-0x1076", "e1000-0x1076", 0),
   1146 	PCI_ROM(0x8086, 0x1077, "e1000-0x1077", "e1000-0x1077", 0),
   1147 	PCI_ROM(0x8086, 0x1078, "e1000-0x1078", "e1000-0x1078", 0),
   1148 	PCI_ROM(0x8086, 0x1079, "e1000-0x1079", "e1000-0x1079", 0),
   1149 	PCI_ROM(0x8086, 0x107a, "e1000-0x107a", "e1000-0x107a", 0),
   1150 	PCI_ROM(0x8086, 0x107b, "e1000-0x107b", "e1000-0x107b", 0),
   1151 	PCI_ROM(0x8086, 0x107c, "e1000-0x107c", "e1000-0x107c", 0),
   1152 	PCI_ROM(0x8086, 0x107d, "e1000-0x107d", "e1000-0x107d", 0),
   1153 	PCI_ROM(0x8086, 0x107e, "e1000-0x107e", "e1000-0x107e", 0),
   1154 	PCI_ROM(0x8086, 0x107f, "e1000-0x107f", "e1000-0x107f", 0),
   1155 	PCI_ROM(0x8086, 0x108a, "e1000-0x108a", "e1000-0x108a", 0),
   1156 	PCI_ROM(0x8086, 0x108b, "e1000-0x108b", "e1000-0x108b", 0),
   1157 	PCI_ROM(0x8086, 0x108c, "e1000-0x108c", "e1000-0x108c", 0),
   1158 	PCI_ROM(0x8086, 0x1096, "e1000-0x1096", "e1000-0x1096", 0),
   1159 	PCI_ROM(0x8086, 0x1098, "e1000-0x1098", "e1000-0x1098", 0),
   1160 	PCI_ROM(0x8086, 0x1099, "e1000-0x1099", "e1000-0x1099", 0),
   1161 	PCI_ROM(0x8086, 0x109a, "e1000-0x109a", "e1000-0x109a", 0),
   1162 	PCI_ROM(0x8086, 0x10a4, "e1000-0x10a4", "e1000-0x10a4", 0),
   1163 	PCI_ROM(0x8086, 0x10a5, "e1000-0x10a5", "e1000-0x10a5", 0),
   1164 	PCI_ROM(0x8086, 0x10b5, "e1000-0x10b5", "e1000-0x10b5", 0),
   1165 	PCI_ROM(0x8086, 0x10b9, "e1000-0x10b9", "e1000-0x10b9", 0),
   1166 	PCI_ROM(0x8086, 0x10ba, "e1000-0x10ba", "e1000-0x10ba", 0),
   1167 	PCI_ROM(0x8086, 0x10bb, "e1000-0x10bb", "e1000-0x10bb", 0),
   1168 	PCI_ROM(0x8086, 0x10bc, "e1000-0x10bc", "e1000-0x10bc", 0),
   1169 	PCI_ROM(0x8086, 0x10c4, "e1000-0x10c4", "e1000-0x10c4", 0),
   1170 	PCI_ROM(0x8086, 0x10c5, "e1000-0x10c5", "e1000-0x10c5", 0),
   1171 	PCI_ROM(0x8086, 0x10c9, "e1000-0x10c9", "e1000-0x10c9", 0),
   1172 	PCI_ROM(0x8086, 0x10d9, "e1000-0x10d9", "e1000-0x10d9", 0),
   1173 	PCI_ROM(0x8086, 0x10da, "e1000-0x10da", "e1000-0x10da", 0),
   1174 };
   1175 
   1176 struct pci_driver e1000_driver __pci_driver = {
   1177 	.ids = e1000_nics,
   1178 	.id_count = (sizeof (e1000_nics) / sizeof (e1000_nics[0])),
   1179 	.probe = e1000_probe,
   1180 	.remove = e1000_remove,
   1181 };
   1182 
   1183 /*
   1184  * Local variables:
   1185  *  c-basic-offset: 8
   1186  *  c-indent-level: 8
   1187  *  tab-width: 8
   1188  * End:
   1189  */
   1190