Преглед на файлове

This version now transmits and receives.

There may still be an issue with memory handling, since it seems to
die ungracefully when ARP packets come in after loading a kernel.
Something to debug.
tags/v0.9.3
Marty Connor преди 16 години
родител
ревизия
645a752bc2
променени са 2 файла, в които са добавени 138 реда и са изтрити 220 реда
  1. 135
    220
      src/drivers/net/e1000/e1000.c
  2. 3
    0
      src/drivers/net/e1000/e1000.h

+ 135
- 220
src/drivers/net/e1000/e1000.c Целия файл

28
 
28
 
29
 #include "e1000.h"
29
 #include "e1000.h"
30
 
30
 
31
-static struct pci_device_id e1000_nics[] = {
32
-	PCI_ROM(0x8086, 0x1000, "e1000-0x1000", "E1000-0x1000"),
33
-	PCI_ROM(0x8086, 0x1001, "e1000-0x1001", "E1000-0x1001"),
34
-	PCI_ROM(0x8086, 0x1004, "e1000-0x1004", "E1000-0x1004"),
35
-	PCI_ROM(0x8086, 0x1008, "e1000-0x1008", "E1000-0x1008"),
36
-	PCI_ROM(0x8086, 0x1009, "e1000-0x1009", "E1000-0x1009"),
37
-	PCI_ROM(0x8086, 0x100C, "e1000-0x100C", "E1000-0x100C"),
38
-	PCI_ROM(0x8086, 0x100D, "e1000-0x100D", "E1000-0x100D"),
39
-	PCI_ROM(0x8086, 0x100E, "e1000-0x100E", "E1000-0x100E"),
40
-	PCI_ROM(0x8086, 0x100F, "e1000-0x100F", "E1000-0x100F"),
41
-	PCI_ROM(0x8086, 0x1010, "e1000-0x1010", "E1000-0x1010"),
42
-	PCI_ROM(0x8086, 0x1011, "e1000-0x1011", "E1000-0x1011"),
43
-	PCI_ROM(0x8086, 0x1012, "e1000-0x1012", "E1000-0x1012"),
44
-	PCI_ROM(0x8086, 0x1013, "e1000-0x1013", "E1000-0x1013"),
45
-	PCI_ROM(0x8086, 0x1014, "e1000-0x1014", "E1000-0x1014"),
46
-	PCI_ROM(0x8086, 0x1015, "e1000-0x1015", "E1000-0x1015"),
47
-	PCI_ROM(0x8086, 0x1016, "e1000-0x1016", "E1000-0x1016"),
48
-	PCI_ROM(0x8086, 0x1017, "e1000-0x1017", "E1000-0x1017"),
49
-	PCI_ROM(0x8086, 0x1018, "e1000-0x1018", "E1000-0x1018"),
50
-	PCI_ROM(0x8086, 0x1019, "e1000-0x1019", "E1000-0x1019"),
51
-	PCI_ROM(0x8086, 0x101A, "e1000-0x101A", "E1000-0x101A"),
52
-	PCI_ROM(0x8086, 0x101D, "e1000-0x101D", "E1000-0x101D"),
53
-	PCI_ROM(0x8086, 0x101E, "e1000-0x101E", "E1000-0x101E"),
54
-	PCI_ROM(0x8086, 0x1026, "e1000-0x1026", "E1000-0x1026"),
55
-	PCI_ROM(0x8086, 0x1027, "e1000-0x1027", "E1000-0x1027"),
56
-	PCI_ROM(0x8086, 0x1028, "e1000-0x1028", "E1000-0x1028"),
57
-	PCI_ROM(0x8086, 0x1049, "e1000-0x1049", "E1000-0x1049"),
58
-	PCI_ROM(0x8086, 0x104A, "e1000-0x104A", "E1000-0x104A"),
59
-	PCI_ROM(0x8086, 0x104B, "e1000-0x104B", "E1000-0x104B"),
60
-	PCI_ROM(0x8086, 0x104C, "e1000-0x104C", "E1000-0x104C"),
61
-	PCI_ROM(0x8086, 0x104D, "e1000-0x104D", "E1000-0x104D"),
62
-	PCI_ROM(0x8086, 0x105E, "e1000-0x105E", "E1000-0x105E"),
63
-	PCI_ROM(0x8086, 0x105F, "e1000-0x105F", "E1000-0x105F"),
64
-	PCI_ROM(0x8086, 0x1060, "e1000-0x1060", "E1000-0x1060"),
65
-	PCI_ROM(0x8086, 0x1075, "e1000-0x1075", "E1000-0x1075"),
66
-	PCI_ROM(0x8086, 0x1076, "e1000-0x1076", "E1000-0x1076"),
67
-	PCI_ROM(0x8086, 0x1077, "e1000-0x1077", "E1000-0x1077"),
68
-	PCI_ROM(0x8086, 0x1078, "e1000-0x1078", "E1000-0x1078"),
69
-	PCI_ROM(0x8086, 0x1079, "e1000-0x1079", "E1000-0x1079"),
70
-	PCI_ROM(0x8086, 0x107A, "e1000-0x107A", "E1000-0x107A"),
71
-	PCI_ROM(0x8086, 0x107B, "e1000-0x107B", "E1000-0x107B"),
72
-	PCI_ROM(0x8086, 0x107C, "e1000-0x107C", "E1000-0x107C"),
73
-	PCI_ROM(0x8086, 0x107D, "e1000-0x107D", "E1000-0x107D"),
74
-	PCI_ROM(0x8086, 0x107E, "e1000-0x107E", "E1000-0x107E"),
75
-	PCI_ROM(0x8086, 0x107F, "e1000-0x107F", "E1000-0x107F"),
76
-	PCI_ROM(0x8086, 0x108A, "e1000-0x108A", "E1000-0x108A"),
77
-	PCI_ROM(0x8086, 0x108B, "e1000-0x108B", "E1000-0x108B"),
78
-	PCI_ROM(0x8086, 0x108C, "e1000-0x108C", "E1000-0x108C"),
79
-	PCI_ROM(0x8086, 0x1096, "e1000-0x1096", "E1000-0x1096"),
80
-	PCI_ROM(0x8086, 0x1098, "e1000-0x1098", "E1000-0x1098"),
81
-	PCI_ROM(0x8086, 0x1099, "e1000-0x1099", "E1000-0x1099"),
82
-	PCI_ROM(0x8086, 0x109A, "e1000-0x109A", "E1000-0x109A"),
83
-	PCI_ROM(0x8086, 0x10A4, "e1000-0x10A4", "E1000-0x10A4"),
84
-	PCI_ROM(0x8086, 0x10A5, "e1000-0x10A5", "E1000-0x10A5"),
85
-	PCI_ROM(0x8086, 0x10B5, "e1000-0x10B5", "E1000-0x10B5"),
86
-	PCI_ROM(0x8086, 0x10B9, "e1000-0x10B9", "E1000-0x10B9"),
87
-	PCI_ROM(0x8086, 0x10BA, "e1000-0x10BA", "E1000-0x10BA"),
88
-	PCI_ROM(0x8086, 0x10BB, "e1000-0x10BB", "E1000-0x10BB"),
89
-	PCI_ROM(0x8086, 0x10BC, "e1000-0x10BC", "E1000-0x10BC"),
90
-	PCI_ROM(0x8086, 0x10C4, "e1000-0x10C4", "E1000-0x10C4"),
91
-	PCI_ROM(0x8086, 0x10C5, "e1000-0x10C5", "E1000-0x10C5"),
92
-	PCI_ROM(0x8086, 0x10D9, "e1000-0x10D9", "E1000-0x10D9"),
93
-	PCI_ROM(0x8086, 0x10DA, "e1000-0x10DA", "E1000-0x10DA"),
94
-};
95
-
96
 /**
31
 /**
97
  * e1000_get_hw_control - get control of the h/w from f/w
32
  * e1000_get_hw_control - get control of the h/w from f/w
98
  * @adapter: address of board private structure
33
  * @adapter: address of board private structure
131
 	}
66
 	}
132
 }
67
 }
133
 
68
 
134
-#if 0
135
-/**
136
- * e1000_power_up_phy - restore link in case the phy was powered down
137
- * @adapter: address of board private structure
138
- *
139
- * The phy may be powered down to save power and turn off link when the
140
- * driver is unloaded and wake on lan is not enabled (among others)
141
- * *** this routine MUST be followed by a call to e1000_reset ***
142
- *
143
- **/
144
-static void
145
-e1000_power_up_phy ( struct e1000_adapter *adapter )
146
-{
147
-	DBG ( "e1000_power_up_phy\n" );
148
-
149
-	uint16_t mii_reg = 0;
150
-
151
-	/* Just clear the power down bit to wake the phy back up */
152
-	if (adapter->hw.media_type == e1000_media_type_copper) {
153
-		/* according to the manual, the phy will retain its
154
-		 * settings across a power-down/up cycle */
155
-		e1000_read_phy_reg(&adapter->hw, PHY_CTRL, &mii_reg);
156
-		mii_reg &= ~MII_CR_POWER_DOWN;
157
-		e1000_write_phy_reg(&adapter->hw, PHY_CTRL, mii_reg);
158
-	}
159
-}
160
-
161
-static void
162
-e1000_power_down_phy ( struct e1000_adapter *adapter )
163
-{
164
-	DBG ( "e1000_power_down_phy\n" );
165
-	
166
-	/* Power down the PHY so no link is implied when interface is down *
167
-	 * The PHY cannot be powered down if any of the following is TRUE *
168
-	 * (a) WoL is enabled
169
-	 * (b) AMT is active
170
-	 * (c) SoL/IDER session is active */
171
-	if (!adapter->wol && adapter->hw.mac_type >= e1000_82540 &&
172
-	   adapter->hw.media_type == e1000_media_type_copper) {
173
-		uint16_t mii_reg = 0;
174
-
175
-		switch (adapter->hw.mac_type) {
176
-		case e1000_82540:
177
-		case e1000_82545:
178
-		case e1000_82545_rev_3:
179
-		case e1000_82546:
180
-		case e1000_82546_rev_3:
181
-		case e1000_82541:
182
-		case e1000_82541_rev_2:
183
-		case e1000_82547:
184
-		case e1000_82547_rev_2:
185
-			if (E1000_READ_REG(&adapter->hw, MANC) &
186
-			    E1000_MANC_SMBUS_EN)
187
-				goto out;
188
-			break;
189
-		case e1000_82571:
190
-		case e1000_82572:
191
-		case e1000_82573:
192
-		case e1000_80003es2lan:
193
-		case e1000_ich8lan:
194
-			if (e1000_check_mng_mode(&adapter->hw) ||
195
-			    e1000_check_phy_reset_block(&adapter->hw))
196
-				goto out;
197
-			break;
198
-		default:
199
-			goto out;
200
-		}
201
-		e1000_read_phy_reg(&adapter->hw, PHY_CTRL, &mii_reg);
202
-		mii_reg |= MII_CR_POWER_DOWN;
203
-		e1000_write_phy_reg(&adapter->hw, PHY_CTRL, mii_reg);
204
-		mdelay(1);
205
-	}
206
-out:
207
-	return;
208
-}
209
-
210
-#endif
211
-
212
 /**
69
 /**
213
  * e1000_irq_enable - Enable default interrupt generation settings
70
  * e1000_irq_enable - Enable default interrupt generation settings
214
  * @adapter: board private structure
71
  * @adapter: board private structure
216
 static void
73
 static void
217
 e1000_irq_enable ( struct e1000_adapter *adapter )
74
 e1000_irq_enable ( struct e1000_adapter *adapter )
218
 {
75
 {
219
-	E1000_WRITE_REG ( &adapter->hw, IMS, E1000_IMS_RXT0 |
220
-			  E1000_IMS_RXSEQ );
76
+	E1000_WRITE_REG ( &adapter->hw, IMS, E1000_IMS_RXDMT0 |
77
+			                     E1000_IMS_RXSEQ );
221
 	E1000_WRITE_FLUSH ( &adapter->hw );
78
 	E1000_WRITE_FLUSH ( &adapter->hw );
222
 }
79
 }
223
 
80
 
239
 static void
96
 static void
240
 e1000_irq_force ( struct e1000_adapter *adapter )
97
 e1000_irq_force ( struct e1000_adapter *adapter )
241
 {
98
 {
242
-	E1000_WRITE_REG ( &adapter->hw, ICS, E1000_ICS_RXT0 );
99
+	E1000_WRITE_REG ( &adapter->hw, ICS, E1000_ICS_RXDMT0 );
243
 	E1000_WRITE_FLUSH ( &adapter->hw );
100
 	E1000_WRITE_FLUSH ( &adapter->hw );
244
 }
101
 }
245
 
102
 
292
 	case e1000_82547:
149
 	case e1000_82547:
293
 	case e1000_82541_rev_2:
150
 	case e1000_82541_rev_2:
294
 	case e1000_82547_rev_2:
151
 	case e1000_82547_rev_2:
295
-#if 0
296
 		hw->phy_init_script = 1;
152
 		hw->phy_init_script = 1;
297
-#endif
298
 		break;
153
 		break;
299
 	}
154
 	}
300
 
155
 
344
 	 */
199
 	 */
345
 
200
 
346
         adapter->tx_base = 
201
         adapter->tx_base = 
347
-        	malloc_dma ( sizeof ( *adapter->tx_base ) * NUM_TX_DESC,
348
-        		     sizeof ( *adapter->tx_base ) * NUM_TX_DESC );
202
+        	malloc_dma ( adapter->tx_ring_size, adapter->tx_ring_size );
349
         		             		     
203
         		             		     
350
        	if ( ! adapter->tx_base ) {
204
        	if ( ! adapter->tx_base ) {
351
        		return -ENOMEM;
205
        		return -ENOMEM;
352
 	}
206
 	}
353
 	
207
 	
354
-	memset ( adapter->tx_base, 0, sizeof ( *adapter->tx_base ) * NUM_TX_DESC );
208
+	memset ( adapter->tx_base, 0, adapter->tx_ring_size );
355
 	
209
 	
356
 	DBG ( "adapter->tx_base = %#08lx\n", virt_to_bus ( adapter->tx_base ) );
210
 	DBG ( "adapter->tx_base = %#08lx\n", virt_to_bus ( adapter->tx_base ) );
357
 
211
 
358
-  	DBG ( "sizeof ( *adapter->tx_base ) == %d bytes\n", 
359
-  	       sizeof ( *adapter->tx_base ) );
360
-
361
 	return 0;
212
 	return 0;
362
 }
213
 }
363
 
214
 
366
 {
217
 {
367
 	DBG ( "e1000_free_tx_resources\n" );
218
 	DBG ( "e1000_free_tx_resources\n" );
368
 
219
 
369
-        free_dma ( adapter->tx_base, 
370
-                   sizeof ( *adapter->tx_base ) * NUM_TX_DESC );
220
+        free_dma ( adapter->tx_base, adapter->tx_ring_size );
371
 }
221
 }
372
 
222
 
373
 /**
223
 /**
391
 
241
 
392
 	E1000_WRITE_REG ( hw, TDBAH, 0 );
242
 	E1000_WRITE_REG ( hw, TDBAH, 0 );
393
 	E1000_WRITE_REG ( hw, TDBAL, virt_to_bus ( adapter->tx_base ) );
243
 	E1000_WRITE_REG ( hw, TDBAL, virt_to_bus ( adapter->tx_base ) );
394
-	E1000_WRITE_REG ( hw, TDLEN, sizeof ( *adapter->tx_base ) * NUM_TX_DESC );
244
+	E1000_WRITE_REG ( hw, TDLEN, adapter->tx_ring_size );
395
 			  
245
 			  
396
-        DBG ( "TDBAL: %#08lx\n", virt_to_bus ( adapter->tx_base ) );
397
-        DBG ( "TDLEN: %d\n", sizeof ( *adapter->tx_base ) * NUM_TX_DESC );
246
+        DBG ( "TDBAL: %#08lx\n",  E1000_READ_REG ( hw, TDBAL ) );
247
+        DBG ( "TDLEN: %ld\n",     E1000_READ_REG ( hw, TDLEN ) );
398
 
248
 
399
 	/* Setup the HW Tx Head and Tail descriptor pointers */
249
 	/* Setup the HW Tx Head and Tail descriptor pointers */
400
 	E1000_WRITE_REG ( hw, TDH, 0 );
250
 	E1000_WRITE_REG ( hw, TDH, 0 );
441
 
291
 
442
 	/* Program the Transmit Control Register */
292
 	/* Program the Transmit Control Register */
443
 
293
 
444
-	tctl = E1000_READ_REG(hw, TCTL);
294
+	tctl = E1000_READ_REG ( hw, TCTL );
445
 	tctl &= ~E1000_TCTL_CT;
295
 	tctl &= ~E1000_TCTL_CT;
446
 	tctl |= E1000_TCTL_PSP | E1000_TCTL_RTLC |
296
 	tctl |= E1000_TCTL_PSP | E1000_TCTL_RTLC |
447
 		(E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT);
297
 		(E1000_COLLISION_THRESHOLD << E1000_CT_SHIFT);
511
 	 */
361
 	 */
512
 
362
 
513
         adapter->rx_base = 
363
         adapter->rx_base = 
514
-        	malloc_dma ( sizeof ( *adapter->rx_base ) * NUM_RX_DESC,
515
-        		     sizeof ( *adapter->rx_base ) * NUM_RX_DESC );
364
+        	malloc_dma ( adapter->rx_ring_size, adapter->rx_ring_size );
516
         		     
365
         		     
517
        	if ( ! adapter->rx_base ) {
366
        	if ( ! adapter->rx_base ) {
518
        		return -ENOMEM;
367
        		return -ENOMEM;
519
 	}
368
 	}
520
-	memset ( adapter->rx_base, 0, sizeof ( *adapter->rx_base ) * NUM_RX_DESC );
369
+	memset ( adapter->rx_base, 0, adapter->rx_ring_size );
521
 
370
 
522
 	for ( i = 0; i < NUM_RX_DESC; i++ ) {
371
 	for ( i = 0; i < NUM_RX_DESC; i++ ) {
523
 	
372
 	
551
 	
400
 	
552
 	DBG ( "e1000_free_rx_resources\n" );
401
 	DBG ( "e1000_free_rx_resources\n" );
553
 
402
 
554
-        free_dma ( adapter->rx_base, 
555
-                   sizeof ( *adapter->rx_base ) * NUM_RX_DESC );
403
+        free_dma ( adapter->rx_base, adapter->rx_ring_size );
556
 
404
 
557
 	for ( i = 0; i < NUM_RX_DESC; i++ ) {
405
 	for ( i = 0; i < NUM_RX_DESC; i++ ) {
558
 		free_iob ( adapter->rx_iobuf[i] );
406
 		free_iob ( adapter->rx_iobuf[i] );
571
 	struct e1000_hw *hw = &adapter->hw;
419
 	struct e1000_hw *hw = &adapter->hw;
572
 	uint32_t rctl;
420
 	uint32_t rctl;
573
 
421
 
574
-#if 0
575
-	uint32_t ctrl_ext;
576
-#endif
577
-
578
 	DBG ( "e1000_configure_rx\n" );
422
 	DBG ( "e1000_configure_rx\n" );
579
 
423
 
580
 	/* disable receives while setting up the descriptors */
424
 	/* disable receives while setting up the descriptors */
581
 	rctl = E1000_READ_REG ( hw, RCTL );
425
 	rctl = E1000_READ_REG ( hw, RCTL );
582
 	E1000_WRITE_REG ( hw, RCTL, rctl & ~E1000_RCTL_EN );
426
 	E1000_WRITE_REG ( hw, RCTL, rctl & ~E1000_RCTL_EN );
583
 
427
 
584
-	/* set the Receive Delay Timer Register */
585
-	E1000_WRITE_REG ( hw, RDTR, adapter->rx_int_delay );
586
-	E1000_WRITE_REG ( hw, RADV, adapter->rx_abs_int_delay );
587
-
588
-#if 0
589
-	if (hw->mac_type >= e1000_82540) {
590
-		E1000_WRITE_REG(hw, RADV, adapter->rx_abs_int_delay);
591
-		if (adapter->itr_setting != 0)
592
-			E1000_WRITE_REG(hw, ITR,
593
-				1000000000 / (adapter->itr * 256));
594
-	}
595
-
596
-	if (hw->mac_type >= e1000_82571) {
597
-		ctrl_ext = E1000_READ_REG(hw, CTRL_EXT);
598
-		/* Reset delay timers after every interrupt */
599
-		ctrl_ext |= E1000_CTRL_EXT_INT_TIMER_CLR;
600
-		E1000_WRITE_REG(hw, CTRL_EXT, ctrl_ext);
601
-		E1000_WRITE_FLUSH(hw);
602
-	}
603
-#endif
428
+	adapter->rx_tail = 0;
604
 
429
 
605
 	/* Setup the HW Rx Head and Tail Descriptor Pointers and
430
 	/* Setup the HW Rx Head and Tail Descriptor Pointers and
606
 	 * the Base and Length of the Rx Descriptor Ring */	 
431
 	 * the Base and Length of the Rx Descriptor Ring */	 
607
 
432
 
608
-	adapter->rx_tail = 0;
609
-
610
-	E1000_WRITE_REG ( hw, RDBAH, 0 );
611
 	E1000_WRITE_REG ( hw, RDBAL, virt_to_bus ( adapter->rx_base ) );
433
 	E1000_WRITE_REG ( hw, RDBAL, virt_to_bus ( adapter->rx_base ) );
612
-	E1000_WRITE_REG ( hw, RDLEN, sizeof ( *adapter->rx_base ) *
613
-			  NUM_RX_DESC );
434
+	E1000_WRITE_REG ( hw, RDBAH, 0 );
435
+	E1000_WRITE_REG ( hw, RDLEN, adapter->rx_ring_size );
614
 
436
 
615
-	E1000_WRITE_REG ( hw, RDH, 0);
616
-	E1000_WRITE_REG ( hw, RDT, 0);
437
+	E1000_WRITE_REG ( hw, RDH, 0 );
438
+	E1000_WRITE_REG ( hw, RDT, NUM_TX_DESC );
617
 	
439
 	
618
-	E1000_WRITE_REG ( hw, RCTL,  E1000_RCTL_EN | E1000_RCTL_BAM | 
619
-		  	  E1000_RCTL_SZ_2048 | E1000_RCTL_MPE);
620
-	E1000_WRITE_FLUSH ( hw );
621
-
622
 	/* Enable Receives */
440
 	/* Enable Receives */
441
+	rctl = ( E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_SZ_2048 |
442
+		 E1000_RCTL_MPE 
443
+		);
444
+
623
 	E1000_WRITE_REG ( hw, RCTL, rctl );
445
 	E1000_WRITE_REG ( hw, RCTL, rctl );
446
+	E1000_WRITE_FLUSH ( hw );
447
+
448
+        DBG ( "RDBAL: %#08lx\n",  E1000_READ_REG ( hw, RDBAL ) );
449
+        DBG ( "RDLEN: %ld\n",     E1000_READ_REG ( hw, RDLEN ) );
450
+        DBG ( "RCTL:  %#08lx\n",  E1000_READ_REG ( hw, RCTL ) );
624
 }
451
 }
625
 
452
 
626
 /**
453
 /**
744
 e1000_close ( struct net_device *netdev )
571
 e1000_close ( struct net_device *netdev )
745
 {
572
 {
746
 	struct e1000_adapter *adapter = netdev_priv ( netdev );
573
 	struct e1000_adapter *adapter = netdev_priv ( netdev );
574
+	uint32_t rctl;
575
+	uint32_t icr;
747
 
576
 
748
 	DBG ( "e1000_close\n" );
577
 	DBG ( "e1000_close\n" );
749
 	
578
 	
579
+	/* disable receives */
580
+	rctl = E1000_READ_REG ( &adapter->hw, RCTL );
581
+	E1000_WRITE_REG ( &adapter->hw, RCTL, rctl & ~E1000_RCTL_EN );
582
+	E1000_WRITE_FLUSH ( &adapter->hw );
583
+
584
+	/* Acknowledge interrupts */
585
+	icr = E1000_READ_REG ( &adapter->hw, ICR );
586
+
750
 	e1000_irq_disable ( adapter );
587
 	e1000_irq_disable ( adapter );
751
 
588
 
752
 	e1000_reset_hw ( &adapter->hw );
589
 	e1000_reset_hw ( &adapter->hw );
846
 	DBG ( "e1000_poll\n" );
683
 	DBG ( "e1000_poll\n" );
847
 #endif
684
 #endif
848
 
685
 
849
-	/* Acknowledge interrupt. */
686
+	/* Acknowledge interrupts */
850
 	icr = E1000_READ_REG ( hw, ICR );
687
 	icr = E1000_READ_REG ( hw, ICR );
851
 	if ( ! icr )
688
 	if ( ! icr )
852
 		return;
689
 		return;
867
 		      virt_to_bus ( tx_curr_desc ), tx_status );
704
 		      virt_to_bus ( tx_curr_desc ), tx_status );
868
 #endif
705
 #endif
869
 
706
 
870
-		/* if the packet at tx_head is not owned by hardware */
707
+		/* if the packet at tx_head is not owned by hardware it is for us */
871
 		if ( ! ( tx_status & E1000_TXD_STAT_DD ) )
708
 		if ( ! ( tx_status & E1000_TXD_STAT_DD ) )
872
 			break;
709
 			break;
873
 		
710
 		
895
 	
732
 	
896
 	/* Process received packets 
733
 	/* Process received packets 
897
 	 */
734
 	 */
898
-	while ( TRUE ) {
735
+	while ( 1 ) {
899
 	
736
 	
900
-		i = adapter->rx_tail;
737
+		i = adapter->rx_tail;;
901
 		
738
 		
902
 		rx_curr_desc = ( void * )  ( adapter->rx_base ) + 
739
 		rx_curr_desc = ( void * )  ( adapter->rx_base ) + 
903
 			          ( i * sizeof ( *adapter->rx_base ) ); 
740
 			          ( i * sizeof ( *adapter->rx_base ) ); 
943
 
780
 
944
 		rx_curr_desc->buffer_addr = virt_to_bus ( adapter->rx_iobuf[adapter->rx_tail]->data );
781
 		rx_curr_desc->buffer_addr = virt_to_bus ( adapter->rx_iobuf[adapter->rx_tail]->data );
945
 
782
 
946
-		adapter->rx_tail = ( adapter->rx_tail + 1 ) % NUM_RX_DESC;
947
-
948
 		E1000_WRITE_REG ( hw, RDT, adapter->rx_tail );
783
 		E1000_WRITE_REG ( hw, RDT, adapter->rx_tail );
784
+
785
+		adapter->rx_tail = ( adapter->rx_tail + 1 ) % NUM_RX_DESC;
949
 	}
786
 	}
950
 }				
787
 }				
951
 
788
 
1024
 	adapter->pdev       = pdev;
861
 	adapter->pdev       = pdev;
1025
 	adapter->hw.back    = adapter;
862
 	adapter->hw.back    = adapter;
1026
 
863
 
864
+	adapter->tx_ring_size = sizeof ( *adapter->tx_base ) * NUM_TX_DESC;
865
+	adapter->rx_ring_size = sizeof ( *adapter->rx_base ) * NUM_RX_DESC;
866
+
1027
 	mmio_start = pci_bar_start ( pdev, PCI_BASE_ADDRESS_0 );
867
 	mmio_start = pci_bar_start ( pdev, PCI_BASE_ADDRESS_0 );
1028
 	mmio_len   = pci_bar_size  ( pdev, PCI_BASE_ADDRESS_0 );
868
 	mmio_len   = pci_bar_size  ( pdev, PCI_BASE_ADDRESS_0 );
1029
 
869
 
1149
 	
989
 	
1150
 	DBG ( "e1000_remove\n" );
990
 	DBG ( "e1000_remove\n" );
1151
 
991
 
1152
-	e1000_reset_hw ( &adapter->hw );
1153
 	unregister_netdev ( netdev );
992
 	unregister_netdev ( netdev );
993
+	e1000_reset_hw ( &adapter->hw );
994
+	netdev_nullify ( netdev );
1154
 	netdev_put ( netdev );
995
 	netdev_put ( netdev );
1155
 }
996
 }
1156
 
997
 
1187
 
1028
 
1188
 	e1000_configure_rx ( adapter );
1029
 	e1000_configure_rx ( adapter );
1189
 	
1030
 	
1031
+        DBG ( "RXDCTL: %#08lx\n",  E1000_READ_REG ( &adapter->hw, RXDCTL ) );
1032
+
1190
 	e1000_irq_enable ( adapter );
1033
 	e1000_irq_enable ( adapter );
1191
 
1034
 
1192
 	return 0;
1035
 	return 0;
1199
 	return err;
1042
 	return err;
1200
 }
1043
 }
1201
 
1044
 
1202
-struct pci_driver e1000_driver __pci_driver = {
1203
-	.ids = e1000_nics,
1204
-	.id_count = (sizeof (e1000_nics) / sizeof (e1000_nics[0])),
1205
-	.probe = e1000_probe,
1206
-	.remove = e1000_remove,
1207
-};
1208
-
1209
 /** e1000 net device operations */
1045
 /** e1000 net device operations */
1210
 static struct net_device_operations e1000_operations = {
1046
 static struct net_device_operations e1000_operations = {
1211
         .open           = e1000_open,
1047
         .open           = e1000_open,
1232
 }
1068
 }
1233
 
1069
 
1234
 void
1070
 void
1235
-e1000_pci_clear_mwi ( struct e1000_hw *hw __unused )
1071
+e1000_pci_clear_mwi ( struct e1000_hw *hw )
1236
 {
1072
 {
1073
+	struct e1000_adapter *adapter = hw->back;
1074
+
1075
+	pci_write_config_word ( adapter->pdev, PCI_COMMAND,
1076
+			        hw->pci_cmd_word & ~PCI_COMMAND_INVALIDATE );
1237
 }
1077
 }
1238
 
1078
 
1239
 void
1079
 void
1240
-e1000_pci_set_mwi ( struct e1000_hw *hw __unused )
1080
+e1000_pci_set_mwi ( struct e1000_hw *hw )
1241
 {
1081
 {
1082
+	struct e1000_adapter *adapter = hw->back;
1083
+
1084
+	pci_write_config_word ( adapter->pdev, PCI_COMMAND, hw->pci_cmd_word );
1242
 }
1085
 }
1243
 
1086
 
1244
 void
1087
 void
1245
-e1000_read_pci_cfg(struct e1000_hw *hw, uint32_t reg, uint16_t *value)
1088
+e1000_read_pci_cfg ( struct e1000_hw *hw, uint32_t reg, uint16_t *value )
1246
 {
1089
 {
1247
 	struct e1000_adapter *adapter = hw->back;
1090
 	struct e1000_adapter *adapter = hw->back;
1248
 
1091
 
1249
-	pci_read_config_word(adapter->pdev, reg, value);
1092
+	pci_read_config_word ( adapter->pdev, reg, value );
1250
 }
1093
 }
1251
 
1094
 
1252
 void
1095
 void
1253
-e1000_write_pci_cfg(struct e1000_hw *hw, uint32_t reg, uint16_t *value)
1096
+e1000_write_pci_cfg ( struct e1000_hw *hw, uint32_t reg, uint16_t *value )
1254
 {
1097
 {
1255
 	struct e1000_adapter *adapter = hw->back;
1098
 	struct e1000_adapter *adapter = hw->back;
1256
 
1099
 
1257
-	pci_write_config_word(adapter->pdev, reg, *value);
1100
+	pci_write_config_word ( adapter->pdev, reg, *value );
1258
 }
1101
 }
1259
 
1102
 
1260
 void
1103
 void
1263
 	outl ( value, port );
1106
 	outl ( value, port );
1264
 }
1107
 }
1265
 
1108
 
1109
+static struct pci_device_id e1000_nics[] = {
1110
+	PCI_ROM(0x8086, 0x1000, "e1000-0x1000", "E1000-0x1000"),
1111
+	PCI_ROM(0x8086, 0x1001, "e1000-0x1001", "E1000-0x1001"),
1112
+	PCI_ROM(0x8086, 0x1004, "e1000-0x1004", "E1000-0x1004"),
1113
+	PCI_ROM(0x8086, 0x1008, "e1000-0x1008", "E1000-0x1008"),
1114
+	PCI_ROM(0x8086, 0x1009, "e1000-0x1009", "E1000-0x1009"),
1115
+	PCI_ROM(0x8086, 0x100C, "e1000-0x100C", "E1000-0x100C"),
1116
+	PCI_ROM(0x8086, 0x100D, "e1000-0x100D", "E1000-0x100D"),
1117
+	PCI_ROM(0x8086, 0x100E, "e1000-0x100E", "E1000-0x100E"),
1118
+	PCI_ROM(0x8086, 0x100F, "e1000-0x100F", "E1000-0x100F"),
1119
+	PCI_ROM(0x8086, 0x1010, "e1000-0x1010", "E1000-0x1010"),
1120
+	PCI_ROM(0x8086, 0x1011, "e1000-0x1011", "E1000-0x1011"),
1121
+	PCI_ROM(0x8086, 0x1012, "e1000-0x1012", "E1000-0x1012"),
1122
+	PCI_ROM(0x8086, 0x1013, "e1000-0x1013", "E1000-0x1013"),
1123
+	PCI_ROM(0x8086, 0x1014, "e1000-0x1014", "E1000-0x1014"),
1124
+	PCI_ROM(0x8086, 0x1015, "e1000-0x1015", "E1000-0x1015"),
1125
+	PCI_ROM(0x8086, 0x1016, "e1000-0x1016", "E1000-0x1016"),
1126
+	PCI_ROM(0x8086, 0x1017, "e1000-0x1017", "E1000-0x1017"),
1127
+	PCI_ROM(0x8086, 0x1018, "e1000-0x1018", "E1000-0x1018"),
1128
+	PCI_ROM(0x8086, 0x1019, "e1000-0x1019", "E1000-0x1019"),
1129
+	PCI_ROM(0x8086, 0x101A, "e1000-0x101A", "E1000-0x101A"),
1130
+	PCI_ROM(0x8086, 0x101D, "e1000-0x101D", "E1000-0x101D"),
1131
+	PCI_ROM(0x8086, 0x101E, "e1000-0x101E", "E1000-0x101E"),
1132
+	PCI_ROM(0x8086, 0x1026, "e1000-0x1026", "E1000-0x1026"),
1133
+	PCI_ROM(0x8086, 0x1027, "e1000-0x1027", "E1000-0x1027"),
1134
+	PCI_ROM(0x8086, 0x1028, "e1000-0x1028", "E1000-0x1028"),
1135
+	PCI_ROM(0x8086, 0x1049, "e1000-0x1049", "E1000-0x1049"),
1136
+	PCI_ROM(0x8086, 0x104A, "e1000-0x104A", "E1000-0x104A"),
1137
+	PCI_ROM(0x8086, 0x104B, "e1000-0x104B", "E1000-0x104B"),
1138
+	PCI_ROM(0x8086, 0x104C, "e1000-0x104C", "E1000-0x104C"),
1139
+	PCI_ROM(0x8086, 0x104D, "e1000-0x104D", "E1000-0x104D"),
1140
+	PCI_ROM(0x8086, 0x105E, "e1000-0x105E", "E1000-0x105E"),
1141
+	PCI_ROM(0x8086, 0x105F, "e1000-0x105F", "E1000-0x105F"),
1142
+	PCI_ROM(0x8086, 0x1060, "e1000-0x1060", "E1000-0x1060"),
1143
+	PCI_ROM(0x8086, 0x1075, "e1000-0x1075", "E1000-0x1075"),
1144
+	PCI_ROM(0x8086, 0x1076, "e1000-0x1076", "E1000-0x1076"),
1145
+	PCI_ROM(0x8086, 0x1077, "e1000-0x1077", "E1000-0x1077"),
1146
+	PCI_ROM(0x8086, 0x1078, "e1000-0x1078", "E1000-0x1078"),
1147
+	PCI_ROM(0x8086, 0x1079, "e1000-0x1079", "E1000-0x1079"),
1148
+	PCI_ROM(0x8086, 0x107A, "e1000-0x107A", "E1000-0x107A"),
1149
+	PCI_ROM(0x8086, 0x107B, "e1000-0x107B", "E1000-0x107B"),
1150
+	PCI_ROM(0x8086, 0x107C, "e1000-0x107C", "E1000-0x107C"),
1151
+	PCI_ROM(0x8086, 0x107D, "e1000-0x107D", "E1000-0x107D"),
1152
+	PCI_ROM(0x8086, 0x107E, "e1000-0x107E", "E1000-0x107E"),
1153
+	PCI_ROM(0x8086, 0x107F, "e1000-0x107F", "E1000-0x107F"),
1154
+	PCI_ROM(0x8086, 0x108A, "e1000-0x108A", "E1000-0x108A"),
1155
+	PCI_ROM(0x8086, 0x108B, "e1000-0x108B", "E1000-0x108B"),
1156
+	PCI_ROM(0x8086, 0x108C, "e1000-0x108C", "E1000-0x108C"),
1157
+	PCI_ROM(0x8086, 0x1096, "e1000-0x1096", "E1000-0x1096"),
1158
+	PCI_ROM(0x8086, 0x1098, "e1000-0x1098", "E1000-0x1098"),
1159
+	PCI_ROM(0x8086, 0x1099, "e1000-0x1099", "E1000-0x1099"),
1160
+	PCI_ROM(0x8086, 0x109A, "e1000-0x109A", "E1000-0x109A"),
1161
+	PCI_ROM(0x8086, 0x10A4, "e1000-0x10A4", "E1000-0x10A4"),
1162
+	PCI_ROM(0x8086, 0x10A5, "e1000-0x10A5", "E1000-0x10A5"),
1163
+	PCI_ROM(0x8086, 0x10B5, "e1000-0x10B5", "E1000-0x10B5"),
1164
+	PCI_ROM(0x8086, 0x10B9, "e1000-0x10B9", "E1000-0x10B9"),
1165
+	PCI_ROM(0x8086, 0x10BA, "e1000-0x10BA", "E1000-0x10BA"),
1166
+	PCI_ROM(0x8086, 0x10BB, "e1000-0x10BB", "E1000-0x10BB"),
1167
+	PCI_ROM(0x8086, 0x10BC, "e1000-0x10BC", "E1000-0x10BC"),
1168
+	PCI_ROM(0x8086, 0x10C4, "e1000-0x10C4", "E1000-0x10C4"),
1169
+	PCI_ROM(0x8086, 0x10C5, "e1000-0x10C5", "E1000-0x10C5"),
1170
+	PCI_ROM(0x8086, 0x10D9, "e1000-0x10D9", "E1000-0x10D9"),
1171
+	PCI_ROM(0x8086, 0x10DA, "e1000-0x10DA", "E1000-0x10DA"),
1172
+};
1173
+
1174
+struct pci_driver e1000_driver __pci_driver = {
1175
+	.ids = e1000_nics,
1176
+	.id_count = (sizeof (e1000_nics) / sizeof (e1000_nics[0])),
1177
+	.probe = e1000_probe,
1178
+	.remove = e1000_remove,
1179
+};
1180
+
1266
 /*
1181
 /*
1267
  * Local variables:
1182
  * Local variables:
1268
  *  c-basic-offset: 8
1183
  *  c-basic-offset: 8

+ 3
- 0
src/drivers/net/e1000/e1000.h Целия файл

261
 	struct e1000_tx_desc *tx_base;
261
 	struct e1000_tx_desc *tx_base;
262
 	struct e1000_rx_desc *rx_base;
262
 	struct e1000_rx_desc *rx_base;
263
 	
263
 	
264
+	uint32_t tx_ring_size;
265
+	uint32_t rx_ring_size;
266
+
264
 	uint32_t tx_head;
267
 	uint32_t tx_head;
265
 	uint32_t tx_tail;
268
 	uint32_t tx_tail;
266
 	uint32_t tx_fill_ctr;
269
 	uint32_t tx_fill_ctr;

Loading…
Отказ
Запис