Imported Upstream version 3.0
[platform/upstream/gnu-efi.git] / inc / libsmbios.h
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