Changeset 5540 for i2c-tools/trunk
- Timestamp:
- 12/08/08 18:29:23 (3 years ago)
- Files:
-
- 1 modified
-
i2c-tools/trunk/eeprom/decode-dimms (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
i2c-tools/trunk/eeprom/decode-dimms
r5539 r5540 1222 1222 } 1223 1223 1224 sub readspd 64($$) # reads 64bytes from SPD-EEPROM1225 { 1226 my ($ offset, $dimm_i) = @_;1224 sub readspd($$) # reads bytes from SPD-EEPROM 1225 { 1226 my ($size, $dimm_i) = @_; 1227 1227 my @bytes; 1228 1228 if ($use_hexdump) { 1229 1229 @bytes = read_hexdump($dimm_i); 1230 return @bytes[ $offset..($offset+63)];1230 return @bytes[0..($size-1)]; 1231 1231 } elsif ($use_sysfs) { 1232 1232 # Kernel 2.6 with sysfs … … 1234 1234 or die "Cannot open /sys/bus/i2c/drivers/eeprom/$dimm_i/eeprom"; 1235 1235 binmode HANDLE; 1236 sysseek(HANDLE, $offset, SEEK_SET);1237 sysread(HANDLE, my $eeprom, 64);1236 sysseek(HANDLE, 0, SEEK_SET); 1237 sysread(HANDLE, my $eeprom, $size); 1238 1238 close HANDLE; 1239 @bytes = unpack("C 64", $eeprom);1239 @bytes = unpack("C*", $eeprom); 1240 1240 } else { 1241 1241 # Kernel 2.4 with procfs 1242 for my $i (0 .. 3) {1243 my $hexoff = sprintf('%02x', $ offset + $i * 16);1242 for my $i (0 .. ($size-1)/16) { 1243 my $hexoff = sprintf('%02x', $i * 16); 1244 1244 push @bytes, split(" ", `cat /proc/sys/dev/sensors/$dimm_i/$hexoff`); 1245 1245 } … … 1333 1333 || (!$use_sysfs && /^eeprom-/) 1334 1334 || $use_hexdump) { 1335 my @bytes = readspd 64(0, $dimm_list[$i]);1335 my @bytes = readspd(128, $dimm_list[$i]); 1336 1336 my $dimm_checksum = 0; 1337 1337 $dimm_checksum += $bytes[$_] foreach (0 .. 62); … … 1408 1408 1409 1409 # Decode next 35 bytes (64-98, common to all memory types) 1410 @bytes = readspd64(64, $dimm_list[$i]);1410 splice(@bytes, 0, 64); 1411 1411 decode_manufacturing_information(\@bytes); 1412 1412
