~swem/ubuntu/trusty/lshw/lp1471983

« back to all changes in this revision

Viewing changes to src/core/dmi.cc

  • Committer: Package Import Robot
  • Author(s): Ghe Rivero
  • Date: 2012-06-30 10:15:18 UTC
  • mfrom: (1.1.10) (2.1.7 sid)
  • Revision ID: package-import@ubuntu.com-20120630101518-xuzmzikehiuqzyep
Tags: 02.16-1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
90
90
#include <stdlib.h>
91
91
#include <sys/mman.h>
92
92
 
93
 
__ID("@(#) $Id: dmi.cc 2336 2010-10-05 09:34:27Z lyonel $");
 
93
__ID("@(#) $Id: dmi.cc 2433 2012-01-10 22:01:30Z lyonel $");
94
94
 
95
95
static int currentcpu = 0;
96
96
 
118
118
  return status[code & 0x03];
119
119
}
120
120
 
 
121
static int checksum(const u8 *buf, size_t len)
 
122
{
 
123
  u8 sum = 0;
 
124
  size_t a;
 
125
 
 
126
  for (a = 0; a < len; a++)
 
127
    sum += buf[a];
 
128
  return (sum == 0);
 
129
}
121
130
 
122
131
static string dmi_battery_voltage(u16 code)
123
132
{
380
389
  if (data[1] & (1 << 1))                         // function-key initiated network service boot
381
390
    bios.addCapability("netboot",
382
391
      _("Function-key initiated network service boot"));
 
392
  if (data[1] & (1 << 3))
 
393
    bios.addCapability("uefi", _("UEFI specification is supported"));
 
394
  if (data[1] & (1 << 4))
 
395
    bios.addCapability("virtualmachine", _("This machine is a virtual machine"));
383
396
}
384
397
 
385
398
 
621
634
    "raid", N_("RAID Chassis"), "md",
622
635
    "rackmount", N_("Rack Mount Chassis"), "rackmount",
623
636
    "sealed", N_("Sealed-case PC"), NULL,
624
 
    "multi-system", N_("Multi-system"), "cluster"     /* 0x19 */
 
637
    "multi-system", N_("Multi-system"), "cluster",     /* 0x19 */
 
638
    "pci", N_("Compact PCI"), NULL,
 
639
    "tca", N_("Advanced TCA"), NULL,
 
640
    "blade", N_("Blade"), NULL,         /* 0x1C */
 
641
    "enclosure", N_("Blade enclosure"), NULL,           /* 0x1D */
625
642
  };
626
643
 
627
 
  if(code <= 0x19)
 
644
  if(code <= 0x1D)
628
645
  {
629
646
    if(n.getDescription()=="") n.setDescription(_(chassis_type[1+3*code]));
630
647
 
660
677
    "Pentium III",
661
678
    "M1",
662
679
    "M2",
663
 
    "",                                           /* 0x14 */
664
 
    "",
 
680
    "Celeron M",                                           /* 0x14 */
 
681
    "Pentium 4 HT",
665
682
    "",
666
683
    "",
667
684
    "Duron",
680
697
    "Power PC 620",
681
698
    "Power PC x704",
682
699
    "Power PC 750",
683
 
    "",                                           /* 0x28 */
684
 
    "",
685
 
    "",
686
 
    "",
 
700
    "Core Duo",                                           /* 0x28 */
 
701
    "Core Duo mobile",
 
702
    "Core Solo mobile",
 
703
    "Atom",
687
704
    "",
688
705
    "",
689
706
    "",
762
779
    "",                                           /* 0x77 */
763
780
    "Crusoe TM5000",
764
781
    "Crusoe TM3000",
765
 
    "",                                           /* 0x7A */
 
782
    "Efficeon TM8000",                                           /* 0x7A */
766
783
    "",
767
784
    "",
768
785
    "",
773
790
    "Itanium",
774
791
    "Athlon 64",
775
792
    "Opteron",
776
 
    "",                                           /* 0x85 */
777
 
    "",
778
 
    "",
779
 
    "",
780
 
    "",
781
 
    "",
782
 
    "",
783
 
    "",
784
 
    "",
785
 
    "",
786
 
    "",                                           /* 0x8F */
 
793
    "Sempron",                                           /* 0x85 */
 
794
    "Turion 64 Mobile",
 
795
    "Dual-Core Opteron",
 
796
    "Athlon 64 X2 Dual-Core",
 
797
    "Turion 64 X2 Mobile",
 
798
    "Quad-Core Opteron",
 
799
    "3rd-generation Opteron",
 
800
    "Phenom FX Quad-Core",
 
801
    "Phenom X4 Quad-Core",
 
802
    "Phenom X2 Dual-Core",
 
803
    "Athlon X2 Dual-Core",                                           /* 0x8F */
787
804
    "PA-RISC",
788
805
    "PA-RISC 8500",
789
806
    "PA-RISC 8000",
826
843
    "Athlon MP",
827
844
    "Itanium 2",
828
845
    "Pentium M",
829
 
    "",                                           /* 0xBA */
830
 
    "",
831
 
    "",
832
 
    "",
833
 
    "",
834
 
    "",
835
 
    "",
836
 
    "",
837
 
    "",
838
 
    "",
839
 
    "",
840
 
    "",
841
 
    "",
842
 
    "",                                           /* 0xC7 */
 
846
    "Celeron D",                                           /* 0xBA */
 
847
    "Pentium D",
 
848
    "Pentium Extreme Edition",
 
849
    "Core Solo",
 
850
    "",
 
851
    "Core 2 Duo",
 
852
    "Core 2 Solo",
 
853
    "Core 2 Extreme",
 
854
    "Core 2 Quad",
 
855
    "Core 2 Extreme mobile",
 
856
    "Core 2 Duo mobile",
 
857
    "Core 2 Solo mobile",
 
858
    "Core i7",
 
859
    "Dual-Core Celeron",                                           /* 0xC7 */
843
860
    "IBM390",
844
861
    "G4",
845
862
    "G5",
846
 
    "",                                           /* 0xCB */
847
 
    "",
848
 
    "",
849
 
    "",
850
 
    "",
851
 
    "",
852
 
    "",
853
 
    "",
854
 
    "",
855
 
    "",
856
 
    "",
857
 
    "",
858
 
    "",
859
 
    "",
860
 
    "",
861
 
    "",
862
 
    "",
863
 
    "",
864
 
    "",
865
 
    "",
866
 
    "",
867
 
    "",
868
 
    "",
869
 
    "",
870
 
    "",
871
 
    "",
872
 
    "",
873
 
    "",
874
 
    "",
875
 
    "",
876
 
    "",
877
 
    "",
878
 
    "",
879
 
    "",
880
 
    "",
881
 
    "",
882
 
    "",
 
863
    "ESA/390 G6",                                           /* 0xCB */
 
864
    "z/Architectur base",
 
865
    "Core i5",
 
866
    "Core i3",
 
867
    "",
 
868
    "",
 
869
    "",
 
870
    "VIA C7-M",
 
871
    "VIA C7-D",
 
872
    "VIA C7",
 
873
    "VIA Eden",
 
874
    "Multi-Core Xeon",
 
875
    "Dual-Core Xeon 3xxx",
 
876
    "Quad-Core Xeon 3xxx",
 
877
    "VIA Nano",
 
878
    "Dual-Core Xeon 5xxx",
 
879
    "Quad-Core Xeon 5xxx",      /* 0xDB */
 
880
    "",
 
881
    "Dual-Core Xeon 7xxx",
 
882
    "Quad-Core Xeon 7xxx",
 
883
    "Multi-Core Xeon 7xxx",
 
884
    "Multi-Core Xeon 3400",
 
885
    "",
 
886
    "",
 
887
    "",
 
888
    "",
 
889
    "",
 
890
    "Embedded Opteron Quad-Core",
 
891
    "Phenom Triple-Core",
 
892
    "Turion Ultra Dual-Core Mobile",
 
893
    "Turion Dual-Core Mobile",
 
894
    "Athlon Dual-Core",
 
895
    "Sempron SI",
 
896
    "Phenom II",
 
897
    "Athlon II",
 
898
    "Six-Core Opteron",
 
899
    "Sempron M",
883
900
    "",
884
901
    "",
885
902
    "",
899
916
/* master.mif has values beyond that, but they can't be used for DMI */
900
917
  };
901
918
 
902
 
  if (code == 0xFF)
 
919
  if (code >= 0xFF)
903
920
    return "";
904
921
 
905
 
  if (code > 0x24)
906
 
    return "";
907
922
  return processor_family[code];
908
923
}
909
924
 
1753
1768
  }
1754
1769
 
1755
1770
  fp -= 16;
1756
 
  while (efi || (fp < 0xFFFFF))
 
1771
  while (efi || (fp < 0xFFFE0))
1757
1772
  {
1758
1773
    fp += 16;
1759
1774
    mmoffset = fp % getpagesize();
1775
1790
      smmajver = buf[6];
1776
1791
      smminver = buf[7];
1777
1792
    }
1778
 
    else if (memcmp(buf, "_DMI_", 5) == 0)
 
1793
    else if (smmajver && (memcmp(buf, "_DMI_", 5) == 0) && checksum(buf, 0x0F))
1779
1794
    {
1780
1795
      u16 num = buf[13] << 8 | buf[12];
1781
1796
      u16 len = buf[7] << 8 | buf[6];