Show
Ignore:
Timestamp:
03/20/09 15:10:53 (5 years ago)
Author:
khali
Message:

Change the dimm list to a more complex data structure where we will
be able to store extra attributes for each DIMM.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • i2c-tools/trunk/eeprom/decode-dimms

    r5694 r5695  
    4242use Fcntl qw(:DEFAULT :seek); 
    4343use vars qw($opt_html $opt_bodyonly $opt_igncheck $use_sysfs $use_hexdump 
    44             @vendors %decode_callback $revision @dimm_list %hexdump_cache); 
     44            @vendors %decode_callback $revision @dimm %hexdump_cache); 
    4545 
    4646use constant LITTLEENDIAN       => "little-endian"; 
     
    15951595        } 
    15961596 
    1597         push @dimm_list, $_ if $use_hexdump; 
     1597        push @dimm, { file => $_ } if $use_hexdump; 
    15981598} 
    15991599 
     
    16281628                        next if $use_sysfs && $file !~ /^\d+-[\da-f]+$/i; 
    16291629                        next if !$use_sysfs && $file !~ /^eeprom-/; 
    1630                         push @files, "$dir/$file"; 
     1630                        push @files, { file => "$dir/$file" }; 
    16311631                } 
    16321632                close(DIR); 
    1633                 return sort @files; 
     1633                return sort { $a->{file} cmp $b->{file} } @files; 
    16341634        } elsif (! -d '/sys/module/eeprom') { 
    16351635                print "No EEPROM found, are you sure the eeprom module is loaded?\n"; 
     
    16381638} 
    16391639 
    1640 @dimm_list = get_dimm_list() unless $use_hexdump; 
    1641  
    1642 for my $i (0 .. $#dimm_list) { 
    1643         my @bytes = readspd(0, 128, $dimm_list[$i]); 
     1640# @dimm is a list of hashes. There's one hash for each EEPROM we found. 
     1641# Each hash has the following keys: 
     1642#  * file: Full path to the eeprom data file 
     1643# Keys are added over time. 
     1644@dimm = get_dimm_list() unless $use_hexdump; 
     1645 
     1646for my $i (0 .. $#dimm) { 
     1647        my @bytes = readspd(0, 128, $dimm[$i]->{file}); 
    16441648        my $is_rambus = $bytes[0] < 4;          # Simple heuristic 
    16451649        my ($label, $chk_valid, $chk_spd, $chk_calc); 
     
    16561660 
    16571661        print "<b><u>" if $opt_html; 
    1658         printl2("\n\nDecoding EEPROM", $dimm_list[$i]); 
     1662        printl2("\n\nDecoding EEPROM", $dimm[$i]->{file}); 
    16591663        print "</u></b>" if $opt_html; 
    16601664        print "<table border=1>\n" if $opt_html; 
    16611665        if (!$use_hexdump) { 
    1662                 if ($dimm_list[$i] =~ /-([\da-f]+)$/i) { 
     1666                if ($dimm[$i]->{file} =~ /-([\da-f]+)$/i) { 
    16631667                        my $dimm_num = hex($1) - 0x50 + 1; 
    16641668                        if ($dimm_num >= 1 && $dimm_num <= 8) { 
     
    16931697                        push (@bytes, 
    16941698                              readspd(@bytes, $spd_used - @bytes, 
    1695                                       $dimm_list[$i])); 
     1699                                      $dimm[$i]->{file})); 
    16961700                } 
    16971701        }