Home | History | Annotate | Download | only in efi
      1 #ifndef _LIB_SMBIOS_H
      2 #define _LIB_SMBIOS_H
      3 /*++
      4 
      5 Copyright (c) 2000  Intel Corporation
      6 
      7 Module Name:
      8 
      9     LibSmbios.h
     10 
     11 Abstract:
     12 
     13     Lib include  for SMBIOS services. Used to get system serial number and GUID
     14 
     15 Revision History
     16 
     17 --*/
     18 
     19 //
     20 // Define SMBIOS tables.
     21 //
     22 #pragma pack(1)
     23 typedef struct {
     24     UINT8   AnchorString[4];
     25     UINT8   EntryPointStructureChecksum;
     26     UINT8   EntryPointLength;
     27     UINT8   MajorVersion;
     28     UINT8   MinorVersion;
     29     UINT16  MaxStructureSize;
     30     UINT8   EntryPointRevision;
     31     UINT8   FormattedArea[5];
     32     UINT8   IntermediateAnchorString[5];
     33     UINT8   IntermediateChecksum;
     34     UINT16  TableLength;
     35     UINT32  TableAddress;
     36     UINT16  NumberOfSmbiosStructures;
     37     UINT8   SmbiosBcdRevision;
     38 } SMBIOS_STRUCTURE_TABLE;
     39 
     40 //
     41 // Please note that SMBIOS structures can be odd byte aligned since the
     42 //  unformated section of each record is a set of arbitrary size strings.
     43 //
     44 
     45 typedef struct {
     46     UINT8   Type;
     47     UINT8   Length;
     48     UINT8   Handle[2];
     49 } SMBIOS_HEADER;
     50 
     51 typedef UINT8   SMBIOS_STRING;
     52 
     53 typedef struct {
     54     SMBIOS_HEADER   Hdr;
     55     SMBIOS_STRING   Vendor;
     56     SMBIOS_STRING   BiosVersion;
     57     UINT8           BiosSegment[2];
     58     SMBIOS_STRING   BiosReleaseDate;
     59     UINT8           BiosSize;
     60     UINT8           BiosCharacteristics[8];
     61 } SMBIOS_TYPE0;
     62 
     63 typedef struct {
     64     SMBIOS_HEADER   Hdr;
     65     SMBIOS_STRING   Manufacturer;
     66     SMBIOS_STRING   ProductName;
     67     SMBIOS_STRING   Version;
     68     SMBIOS_STRING   SerialNumber;
     69 
     70     //
     71     // always byte copy this data to prevent alignment faults!
     72     //
     73     EFI_GUID        Uuid;
     74 
     75     UINT8           WakeUpType;
     76 } SMBIOS_TYPE1;
     77 
     78 typedef struct {
     79     SMBIOS_HEADER   Hdr;
     80     SMBIOS_STRING   Manufacturer;
     81     SMBIOS_STRING   ProductName;
     82     SMBIOS_STRING   Version;
     83     SMBIOS_STRING   SerialNumber;
     84 } SMBIOS_TYPE2;
     85 
     86 typedef struct {
     87     SMBIOS_HEADER   Hdr;
     88     SMBIOS_STRING   Manufacturer;
     89     UINT8           Type;
     90     SMBIOS_STRING   Version;
     91     SMBIOS_STRING   SerialNumber;
     92     SMBIOS_STRING   AssetTag;
     93     UINT8           BootupState;
     94     UINT8           PowerSupplyState;
     95     UINT8           ThermalState;
     96     UINT8           SecurityStatus;
     97     UINT8           OemDefined[4];
     98 } SMBIOS_TYPE3;
     99 
    100 typedef struct {
    101     SMBIOS_HEADER   Hdr;
    102     UINT8           Socket;
    103     UINT8           ProcessorType;
    104     UINT8           ProcessorFamily;
    105     SMBIOS_STRING   ProcessorManufacture;
    106     UINT8           ProcessorId[8];
    107     SMBIOS_STRING   ProcessorVersion;
    108     UINT8           Voltage;
    109     UINT8           ExternalClock[2];
    110     UINT8           MaxSpeed[2];
    111     UINT8           CurrentSpeed[2];
    112     UINT8           Status;
    113     UINT8           ProcessorUpgrade;
    114     UINT8           L1CacheHandle[2];
    115     UINT8           L2CacheHandle[2];
    116     UINT8           L3CacheHandle[2];
    117 } SMBIOS_TYPE4;
    118 
    119 typedef union {
    120     SMBIOS_HEADER   *Hdr;
    121     SMBIOS_TYPE0    *Type0;
    122     SMBIOS_TYPE1    *Type1;
    123     SMBIOS_TYPE2    *Type2;
    124     SMBIOS_TYPE3    *Type3;
    125     SMBIOS_TYPE4    *Type4;
    126     UINT8           *Raw;
    127 } SMBIOS_STRUCTURE_POINTER;
    128 #pragma pack()
    129 
    130 
    131 #endif
    132 
    133