/usr/local/CPAN/Ocsinventory-Agent/Ocsinventory/Agent/Backend/OS/AIX/CPU.pm


package Ocsinventory::Agent::Backend::OS::AIX::CPU;
use strict;
use warnings;

sub check { 1 }	 

# try to simulate a modern lsattr output on AIX4
sub lsattrForAIX4 {
  my $device = shift;

  my @lsattr;
  my @lsattrtemp=`lsattr -EOl $device -a 'state:type'`;
  for (@lsattrtemp) {
    chomp;

    my $frequency;

    my (undef,$type)=split /:/;
    #
    # On older models, frequency is based on cpu model and uname
    #
    if ( $type eq "PowerPC"
        or $type eq "PowerPC_601"
        or $type eq "PowerPC_604") {
      my $uname=`uname -m`;
      $frequency=112000000 if ($uname=~/E1D|EAD|C1D|R04|C4D|R4D/);
      $frequency=133000000 if ($uname=~/34M/);
      $frequency=150000000 if ($uname=~/N4D/);
      $frequency=200000000 if ($uname=~/X4M|X4D/);
      $frequency=225000000 if ($uname=~/N4E|K04|K44/);
      $frequency=320000000 if ($uname=~/N4F/);
      $frequency=360000000 if ($uname=~/K45/);
    }
    elsif ( $type eq "PowerPC_RS64_III" ) {
      $frequency=400000000;
    }
    elsif ( $type eq "PowerPC_620" ) {
      $frequency=172000000;
    } else {
      $frequency=225000000;
    }
    push @lsattr,"$device:$frequency\n";
  }

}

sub run {
  my $params = shift;
  my $inventory = $params->{inventory};
  
  # TODO Need to be able to register different CPU speed!
  
  my $processort;
  my $processorn;
  my $processors; 
  my $frequency;
  my @lsdev; 
  my @lsattr;

  #lsdev -Cc processor -F name
  #lsattr -EOl proc16
  my $aixversion=`uname -v`;
  for (`lsdev -Cc processor -F name`){
    chomp(my $device = $_);

    if ( $aixversion < 5 ) {
      @lsattr=lsattrForAIX4($device);
    } else {
      @lsattr=`lsattr -EOl $device -a 'state:type:frequency'`;
    }

    for (@lsattr) {
      if ( ! /^#/ && /(.+):(.+):(.+)/ ) {
        $processorn++;
        $processort=$2;
        if ( ($3 % 1000000) >= 50000){
          $processors=int (($3/1000000) +1); 
        }
        else {
          $processors=int (($3/1000000)); 
        }
      }
    }
  }
  $processort =~ s/_/ /;
  
  $inventory->setHardware({

      PROCESSORT => $processort,
      PROCESSORN => $processorn,
      PROCESSORS => $processors

    });

}

1