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@intel.com>
39 e1000-devel Mailing List <e1000-devel@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
e1000_get_hw_control(struct e1000_adapter * adapter)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
e1000_irq_enable(struct e1000_adapter * adapter)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
e1000_irq_disable(struct e1000_adapter * adapter)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
e1000_sw_init(struct e1000_adapter * adapter)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
e1000_setup_tx_resources(struct e1000_adapter * adapter)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
e1000_free_tx_resources(struct e1000_adapter * adapter)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
e1000_configure_tx(struct e1000_adapter * adapter)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
e1000_free_rx_resources(struct e1000_adapter * adapter)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 **/
e1000_refill_rx_ring(struct e1000_adapter * adapter)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
e1000_setup_rx_resources(struct e1000_adapter * adapter)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
e1000_configure_rx(struct e1000_adapter * adapter)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
e1000_reset(struct e1000_adapter * adapter)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
e1000_close(struct net_device * netdev)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
e1000_transmit(struct net_device * netdev,struct io_buffer * iobuf)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
e1000_poll(struct net_device * netdev)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
e1000_irq(struct net_device * netdev,int enable)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
e1000_probe(struct pci_device * pdev,const struct pci_device_id * id __unused)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
e1000_remove(struct pci_device * pdev)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
e1000_open(struct net_device * netdev)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
e1000_read_pcie_cap_reg(struct e1000_hw * hw,uint32_t reg,uint16_t * value)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
e1000_pci_clear_mwi(struct e1000_hw * hw)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
e1000_pci_set_mwi(struct e1000_hw * hw)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
e1000_read_pci_cfg(struct e1000_hw * hw,uint32_t reg,uint16_t * value)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
e1000_write_pci_cfg(struct e1000_hw * hw,uint32_t reg,uint16_t * value)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
e1000_io_write(struct e1000_hw * hw __unused,unsigned long port,uint32_t value)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