@@ -50,7 +50,6 @@ bool e1000_detect_eeprom() {
5050 return eerprom_exists ;
5151}
5252
53-
5453uint32_t e1000_read_eeprom (uint8_t addr ) {
5554 uint16_t data = 0 ;
5655 uint32_t tmp = 0 ;
@@ -304,23 +303,18 @@ bool e1000_start(pci_dev_t *pci_device) {
304303 // Cache actual detected device ID
305304 e1000_device_id = pci_read (* pci_device , PCI_DEVICE_ID );
306305
307- // Reject unsupported devices
308- if (e1000_device_id != E1000_82540EM && e1000_device_id != E1000_82541PI ) {
309- dprintf ("e1000: Attempt to start unsupported device ID\n" );
310- return false;
311- }
312-
313- if (e1000_detect_eeprom ()) {
306+ if ((e1000_device_id == E1000_82540EM || e1000_device_id == E1000_82541PI ) && e1000_detect_eeprom ()) {
314307 if (!e1000_read_mac_address ()) {
315308 dprintf ("e1000: Failed to read device MAC\n" );
316309 return false;
317310 }
318311 } else {
319- uint8_t * mem_base_mac = (uint8_t * ) (mem_base + 0x5400 );
312+ uint8_t * mem_base_mac = (uint8_t * ) (mem_base + REG_RAL0 );
320313 for (int i = 0 ; i < 6 ; ++ i ) {
321314 mac [i ] = mem_base_mac [i ];
322315 }
323316 }
317+ dprintf ("e1000: MAC %02x:%02x:%02x:%02x:%02x:%02x\n" , mac [0 ], mac [1 ], mac [2 ], mac [3 ], mac [4 ], mac [5 ]);
324318
325319 interrupts_off ();
326320 e1000_up ();
@@ -411,7 +405,20 @@ void init_e1000() {
411405 bool found = false;
412406
413407 // Try supported devices only
414- const uint16_t supported [] = {E1000_82540EM , E1000_82541PI };
408+ const uint16_t supported [] = {
409+ E1000_82540EM ,
410+ E1000_82541PI ,
411+ E1000_82577LM ,
412+ E1000_I217 ,
413+ E1000_82567LM ,
414+ E1000_82567LM_2 ,
415+ E1000_82567LM_3 ,
416+ E1000_82574L ,
417+ E1000_82579LM ,
418+ E1000_82583V ,
419+ E1000_I218LM ,
420+ E1000_I219LM ,
421+ };
415422 for (size_t i = 0 ; i < sizeof (supported ) / sizeof (supported [0 ]); i ++ ) {
416423 pci_device = pci_get_device (INTEL_VEND , supported [i ], -1 );
417424 if (!pci_not_found (pci_device )) {
0 commit comments