-Enhance support for some IBM systems

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@2973 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
jbjohnso 2009-03-24 20:01:36 +00:00
parent 7850b36aa2
commit 5353d11620

View File

@ -4253,6 +4253,7 @@ sub vitals {
my $reading;
my $unitdesc;
my $value;
my $extext;
my $format = "%-30s%8s %-20s";
my $per = " ";
my $doall;
@ -4304,7 +4305,7 @@ sub vitals {
if(($doall and not $sdr->rec_type == 0x11 and not $sdr->sensor_type==0xed) or ($sdr->rec_type == 0x01 and $sdr->sensor_type == $filter)) {
my $lformat = $format;
($rc,$reading) = readsensor($sdr->sensor_number);
($rc,$reading,$extext) = readsensor($sdr);
$unitdesc = "";
if($rc == 0) {
$unitdesc = $units{$sdr->sensor_units_2};
@ -4316,10 +4317,10 @@ sub vitals {
if($sdr->rec_type != 1 or $sdr->linearization == 0) {
$reading = $value;
if($value == int($value)) {
$lformat = "%-30s%8d%-20s";
$lformat = "%-30s%8d%s";
}
else {
$lformat = "%-30s%8.3f%-20s";
$lformat = "%-30s%8.3f%s";
}
}
elsif($sdr->linearization == 7) {
@ -4329,7 +4330,7 @@ sub vitals {
else {
$reading = 0;
}
$lformat = "%-30s%8d %-20s";
$lformat = "%-30s%8d %s";
}
else {
$reading = "RAW(".$sdr->linearization.") $reading";
@ -4370,6 +4371,9 @@ sub vitals {
}
#$unitdesc.= sprintf(" %x",$sdr->sensor_type);
$text = sprintf($lformat,$sdr->id_string . ":",$reading,$per.$unitdesc);
if ($extext) {
$text="$text ($extext)";
}
push(@output,$text);
}
# else {
@ -4393,7 +4397,8 @@ sub vitals {
}
sub readsensor {
my $sensor = shift;
my $sdr = shift;
my $sensor = $sdr->sensor_number;
my $netfun = 0x10;
my @cmd;
my @returnd = ();
@ -4435,8 +4440,256 @@ sub readsensor {
return($rc,$text);
}
$text = $returnd[37-$authoffset];
my $exdata1 = $returnd[39-$authoffset];
my $exdata2 = $returnd[39-$authoffset];
my $extext;
my @exparts;
if ($sdr->event_type_code == 0x1) {
if ($exdata1 & 1<<5) {
$extext = "At or above upper non-recoverable threshold";
} elsif ($exdata1 & 1<<4) {
$extext = "At or above upper critical threshold";
} elsif ($exdata1 & 1<<3) {
$extext = "At or above upper non-critical threshold";
}
if ($exdata1 & 1<<2) {
$extext = "At or below lower non-critical threshold";
} elsif ($exdata1 & 1<<1) {
$extext = "At or below lower critical threshold";
} elsif ($exdata1 & 1) {
$extext = "At or below lower non-recoverable threshold";
}
} elsif ($sdr->event_type_code == 0x6f) {
if ($sdr->sensor_type == 0x10) {
@exparts=();
if ($exdata1 & 1<<4) {
push @exparts,"SEL full";
} elsif ($exdata1 & 1<<5) {
push @exparts,"SEL almost full";
}
if ($exdata1 & 1) {
push @exparts,"Correctable Memory Error Logging Disabled";
}
if ($exdata1 & 1<<3) {
push @exparts,"All logging disabled";
} elsif ($exdata1 & 1<<1) {
push @exparts,"Some logging disabled";
}
if (@exparts) {
$extext = join(",",@exparts);
}
} elsif ($sdr->sensor_type == 0x7) {
@exparts=();
if ($exdata1 & 1) {
push @exparts,"IERR";
}
if ($exdata1 & 1<<1) {
push @exparts,"Thermal trip";
}
if ($exdata1 & 1<<2) {
push @exparts,"FRB1/BIST failure";
}
if ($exdata1 & 1<<3) {
push @exparts,"FRB2/Hang in POST due to processor";
}
if ($exdata1 & 1<<4) {
push @exparts,"FRB3/Processor Initialization failure";
}
if ($exdata1 & 1<<5) {
push @exparts,"Configuration error";
}
if ($exdata1 & 1<<6) {
push @exparts,"Uncorrectable CPU-complex error";
}
if ($exdata1 & 1<<7) {
push @exparts,"Present";
}
if ($exdata1 & 1<<8) {
push @exparts,"Processor disabled";
}
if ($exdata1 & 1<<9) {
push @exparts,"Terminator present";
}
if ($exdata1 & 1<<10) {
push @exparts,"Hardware throttled";
}
} elsif ($sdr->sensor_type == 0x8) {
@exparts=();
if ($exdata1 & 1) {
push @exparts,"Present";
}
if ($exdata1 & 1<<1) {
push @exparts,"Failed";
}
if ($exdata1 & 1<<2) {
push @exparts,"Failure predicted";
}
if ($exdata1 & 1<<3) {
push @exparts,"AC Lost";
}
if ($exdata1 & 1<<4) {
push @exparts,"AC input lost or out of range";
}
if ($exdata1 & 1<<5) {
push @exparts,"AC input out of range";
}
if ($exdata1 & 1<<6) {
push @exparts,"Configuration error";
}
if (@exparts) {
$extext = join(",",@exparts);
}
} elsif ($sdr->sensor_type == 0x13) {
@exparts=();
if ($exdata1 & 1) {
push @exparts,"Front panel NMI/Diagnostic";
}
if ($exdata1 & 1<<1) {
push @exparts,"Bus timeout";
}
if ($exdata1 & 1<<2) {
push @exparts,"I/O channel check NMI";
}
if ($exdata1 & 1<<3) {
push @exparts,"Software NMI";
}
if ($exdata1 & 1<<4) {
push @exparts,"PCI PERR";
}
if ($exdata1 & 1<<5) {
push @exparts,"PCI SERR";
}
if ($exdata1 & 1<<6) {
push @exparts,"EISA failsafe timeout";
}
if ($exdata1 & 1<<7) {
push @exparts,"Bus correctable .rror";
}
if ($exdata1 & 1<<8) {
push @exparts,"Bus uncorrectable error";
}
if ($exdata1 & 1<<9) {
push @exparts,"Fatal NMI";
}
if ($exdata1 & 1<<10) {
push @exparts,"Bus fatal error";
}
if (@exparts) {
$extext = join(",",@exparts);
}
} elsif ($sdr->sensor_type == 0xc) {
@exparts=();
if ($exdata1 & 1) {
push @exparts,"Correctable error(s)";
}
if ($exdata1 & 1<<1) {
push @exparts,"Uncorrectable error(s)";
}
if ($exdata1 & 1<<2) {
push @exparts,"Parity";
}
if ($exdata1 & 1<<3) {
push @exparts,"Memory scrub failure";
}
if ($exdata1 & 1<<4) {
push @exparts,"DIMM disabled";
}
if ($exdata1 & 1<<5) {
push @exparts,"Correctable error limit reached";
}
if ($exdata1 & 1<<6) {
push @exparts,"Present";
}
if ($exdata1 & 1<<7) {
push @exparts,"Configuration error";
}
if ($exdata1 & 1<<8) {
push @exparts,"Spare";
}
if (@exparts) {
$extext = join(",",@exparts);
}
} elsif ($sdr->sensor_type == 0x21) {
@exparts=();
if ($exdata1 & 1) {
push @exparts,"Fault";
}
if ($exdata1 & 1<<1) {
push @exparts,"Identify";
}
if ($exdata1 & 1<<2) {
push @exparts,"Installed/attached";
}
if ($exdata1 & 1<<3) {
push @exparts,"Ready for install";
}
if ($exdata1 & 1<<4) {
push @exparts,"Ready for removal";
}
if ($exdata1 & 1<<5) {
push @exparts,"Powered off";
}
if ($exdata1 & 1<<6) {
push @exparts,"Removal requested";
}
if ($exdata1 & 1<<7) {
push @exparts,"Interlocked";
}
if ($exdata1 & 1<<8) {
push @exparts,"Disabled";
}
if ($exdata1 & 1<<9) {
push @exparts,"Spare";
}
} elsif ($sdr->sensor_type == 0xf) {
@exparts=();
if ($exdata1 & 1) {
push @exparts,"POST error";
}
if ($exdata1 & 1<<1) {
push @exparts,"Firmware hang";
}
if ($exdata1 & 1<<2) {
push @exparts,"Firmware progress";
}
if (@exparts) {
$extext = join(",",@exparts);
}
} elsif ($sdr->sensor_type == 0x9) {
@exparts=();
if ($exdata1 & 1) {
push @exparts,"Power off";
}
if ($exdata1 & 1<<1) {
push @exparts,"Power off";
}
if ($exdata1 & 1<<2) {
push @exparts,"240VA Power Down";
}
if ($exdata1 & 1<<3) {
push @exparts,"Interlock Power Down";
}
if ($exdata1 & 1<<4) {
push @exparts,"AC lost";
}
if ($exdata1 & 1<<5) {
push @exparts,"Soft power control failure";
}
if ($exdata1 & 1<<6) {
push @exparts,"Power unit failure";
}
if ($exdata1 & 1<<7) {
push @exparts,"Power unit failure predicted";
}
if (@exparts) {
$extext = join(",",@exparts);
}
} else {
$extext = "xCAT needs to add support for ".$sdr->sensor_type;
}
}
return($rc,$text);
return($rc,$text,$extext);
}
sub initsdr {
@ -4677,7 +4930,7 @@ sub initsdr {
$sdr->B_exp(comp2int(4,$sdr_data[30] & 0b00001111));
} elsif ($sdr_type == 0x02) {
$sdr->sensor_units_1($sdr_data[21]);
}
}
$sdr->id_string_type($sdr_data[48-$sdr_offset]);