diff options
author | khali <khali@7894878c-1315-0410-8ee3-d5d059ff63e0> | 2015-06-29 11:08:53 +0000 |
---|---|---|
committer | khali <khali@7894878c-1315-0410-8ee3-d5d059ff63e0> | 2015-06-29 11:08:53 +0000 |
commit | 14df920c9fea67ccbefb293e3079be93271a20c5 (patch) | |
tree | 6b8574b416d106dcbf4746afc02fe6e2c4de2ff7 | |
parent | 50034b0d4f17ef4c7f6bb5576c84f930c9002e4b (diff) | |
download | i2c-tools-14df920c9fea67ccbefb293e3079be93271a20c5.tar.gz |
decode-dimms: Refactor manufacturer decoding
Instead of reencoding pre-DDR3 manufacturer codes to DDR3 manufacturer
codes, move the common decoding to a separate function.
git-svn-id: http://lm-sensors.org/svn/i2c-tools/trunk@6297 7894878c-1315-0410-8ee3-d5d059ff63e0
-rwxr-xr-x | eeprom/decode-dimms | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/eeprom/decode-dimms b/eeprom/decode-dimms index 660c5e7..ac30a77 100755 --- a/eeprom/decode-dimms +++ b/eeprom/decode-dimms @@ -336,6 +336,21 @@ sub parity($) return ($parity & 1); } +# The code byte includes parity, the count byte does not. +sub manufacturer_common($$) +{ + my ($count, $code) = @_; + my $manufacturer; + + return "Invalid" if parity($code) != 1 + or ($code &= 0x7F) == 0; + return "Unknown" if $count >= @vendors + or $code - 1 >= @{$vendors[$count]}; + $manufacturer = $vendors[$count][$code - 1]; + $manufacturer =~ s/ \(former .*\)$// if $opt_side_by_side; + return $manufacturer; +} + # New encoding format (as of DDR3) for manufacturer just has a count of # leading 0x7F rather than all the individual bytes. The count bytes includes # parity! @@ -346,12 +361,7 @@ sub manufacturer_ddr3($$) return "Undefined" unless spd_written($count, $code); - return "Invalid" if parity($code) != 1 - or ($code & 0x7F) == 0; - return "Unknown" if ($count & 0x7F) >= @vendors - or ($code & 0x7F) - 1 >= @{$vendors[$count & 0x7F]}; - $manufacturer = $vendors[$count & 0x7F][($code & 0x7F) - 1]; - $manufacturer =~ s/ \(former .*\)$// if $opt_side_by_side; + $manufacturer = manufacturer_common($count & 0x7F, $code); $manufacturer .= "? (Invalid parity)" if parity($count) != 1; return $manufacturer; } @@ -369,11 +379,7 @@ sub manufacturer(@) } return ("Invalid", []) unless defined $first; - return ("Invalid", [$first, @bytes]) if parity($first) != 1; - if (parity($ai) == 0) { - $ai |= 0x80; - } - return (manufacturer_ddr3($ai, $first), \@bytes); + return (manufacturer_common($ai, $first), \@bytes); } sub manufacturer_data(@) |