@@ -717,7 +717,7 @@ tulip_read(uint32_t addr, void *opaque)
717
717
data = s -> csr [addr >> 3 ];
718
718
break ;
719
719
}
720
- pclog ("[%04X:%08X]: CSR9 read %02x, data = %08x.\n" , CS , cpu_state .pc , addr , data );
720
+ // pclog("[%04X:%08X]: CSR9 read %02x, data = %08x.\n", CS, cpu_state.pc, addr, data);
721
721
return data ;
722
722
}
723
723
@@ -906,7 +906,7 @@ tulip_write(uint32_t addr, uint32_t data, void *opaque)
906
906
TULIPState * s = opaque ;
907
907
addr &= 127 ;
908
908
909
- pclog ("[%04X:%08X]: Tulip Write >> 3: %02x, val=%08x.\n" , CS , cpu_state .pc , addr >> 3 , data );
909
+ // pclog("[%04X:%08X]: Tulip Write >> 3: %02x, val=%08x.\n", CS, cpu_state.pc, addr >> 3, data);
910
910
switch (addr ) {
911
911
case CSR (0 ):
912
912
s -> csr [0 ] = data ;
@@ -1266,7 +1266,7 @@ tulip_pci_write(UNUSED(int func), int addr, uint8_t val, void *priv)
1266
1266
{
1267
1267
TULIPState * s = (TULIPState * ) priv ;
1268
1268
1269
- pclog ("PCI write=%02x, ret=%02x.\n" , addr , val );
1269
+ // pclog("PCI write=%02x, ret=%02x.\n", addr, val);
1270
1270
switch (addr ) {
1271
1271
case 0x04 :
1272
1272
s -> pci_conf [0x04 ] = val & 0x07 ;
@@ -1508,6 +1508,7 @@ nic_init(const device_t *info)
1508
1508
s -> eeprom_data [126 ] = tulip_srom_crc (s -> eeprom_data ) & 0xff ;
1509
1509
s -> eeprom_data [127 ] = tulip_srom_crc (s -> eeprom_data ) >> 8 ;
1510
1510
} else {
1511
+ uint32_t checksum = 0 ;
1511
1512
/* 21040 is supposed to only have MAC address in its serial ROM if Linux is correct. */
1512
1513
memset (s -> eeprom_data , 0 , sizeof (s -> eeprom_data ));
1513
1514
/* See if we have a local MAC address configured. */
@@ -1530,6 +1531,31 @@ nic_init(const device_t *info)
1530
1531
s -> eeprom_data [4 ] = (mac >> 8 ) & 0xff ;
1531
1532
s -> eeprom_data [5 ] = (mac & 0xff );
1532
1533
}
1534
+
1535
+ /* Generate checksum. */
1536
+ checksum = (s -> eeprom_data [0 ] * 256 ) | s -> eeprom_data [1 ];
1537
+ checksum *= 2 ;
1538
+ if (checksum > 65535 )
1539
+ checksum = checksum % 65535 ;
1540
+
1541
+ /* 2nd pair. */
1542
+ checksum += (s -> eeprom_data [2 ] * 256 ) | s -> eeprom_data [3 ];
1543
+ if (checksum > 65535 )
1544
+ checksum = checksum % 65535 ;
1545
+ checksum *= 2 ;
1546
+ if (checksum > 65535 )
1547
+ checksum = checksum % 65535 ;
1548
+
1549
+ /* 3rd pair. */
1550
+ checksum += (s -> eeprom_data [4 ] * 256 ) | s -> eeprom_data [5 ];
1551
+ if (checksum > 65535 )
1552
+ checksum = checksum % 65535 ;
1553
+
1554
+ if (checksum >= 65535 )
1555
+ checksum = 0 ;
1556
+
1557
+ s -> eeprom_data [6 ] = (checksum >> 8 ) & 0xFF ;
1558
+ s -> eeprom_data [7 ] = checksum & 0xFF ;
1533
1559
}
1534
1560
1535
1561
if (info -> local != 3 ) {
0 commit comments