Add definition for EfiCacheAssociativity24Way.
[people/mcb30/edk2.git] / edk2 / IntelFrameworkPkg / Include / Framework / DataHubRecords.h
1 /** @file\r
2   This file defines GUIDs and associated data structures for records posted to the Data Hub.\r
3   The producers of these records use these definitions to construct records.\r
4   The consumers of these records use these definitions to retrieve, filter and parse records.\r
5 \r
6   Copyright (c) 2007, Intel Corporation\r
7   All rights reserved. This program and the accompanying materials\r
8   are licensed and made available under the terms and conditions of the BSD License\r
9   which accompanies this distribution.  The full text of the license may be found at\r
10   http://opensource.org/licenses/bsd-license.php\r
11 \r
12   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
13   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
14 \r
15   Module Name:  DataHubRecords.h\r
16 \r
17   @par Revision Reference:\r
18   DataHubRecord.h include all data hub sub class defitions from Cache subclass\r
19   spec 0.9, DataHub SubClass spec 0.9, Memory SubClass Spec 0.9, Processor\r
20   Subclass spec 0.9,Misc SubClass spec 0.9.\r
21 \r
22 **/\r
23 \r
24 #ifndef _DATAHUB_RECORDS_H_\r
25 #define _DATAHUB_RECORDS_H_\r
26 \r
27 #include <PiPei.h>\r
28 #include <Protocol/DevicePath.h>\r
29 \r
30 #define EFI_PROCESSOR_SUBCLASS_VERSION    0x00010000\r
31 \r
32 #pragma pack(1)\r
33 \r
34 typedef struct _USB_PORT_DEVICE_PATH {\r
35   ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
36   PCI_DEVICE_PATH           PciBusDevicePath;\r
37   EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
38 } USB_PORT_DEVICE_PATH;\r
39 \r
40 //\r
41 // IDE\r
42 //\r
43 typedef struct _IDE_DEVICE_PATH {\r
44   ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
45   PCI_DEVICE_PATH           PciBusDevicePath;\r
46   EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
47 } IDE_DEVICE_PATH;\r
48 \r
49 //\r
50 // RMC Connector\r
51 //\r
52 typedef struct _RMC_CONN_DEVICE_PATH {\r
53   ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
54   PCI_DEVICE_PATH           PciBridgeDevicePath;\r
55   PCI_DEVICE_PATH           PciBusDevicePath;\r
56   EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
57 } RMC_CONN_DEVICE_PATH;\r
58 \r
59 //\r
60 // RIDE\r
61 //\r
62 typedef struct _RIDE_DEVICE_PATH {\r
63   ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
64   PCI_DEVICE_PATH           PciBridgeDevicePath;\r
65   PCI_DEVICE_PATH           PciBusDevicePath;\r
66   EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
67 } RIDE_DEVICE_PATH;\r
68 \r
69 //\r
70 // Gigabit NIC\r
71 //\r
72 typedef struct _GB_NIC_DEVICE_PATH {\r
73   ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
74   PCI_DEVICE_PATH           PciBridgeDevicePath;\r
75   PCI_DEVICE_PATH           PciXBridgeDevicePath;\r
76   PCI_DEVICE_PATH           PciXBusDevicePath;\r
77   EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
78 } GB_NIC_DEVICE_PATH;\r
79 \r
80 //\r
81 // P/S2 Connector\r
82 //\r
83 typedef struct _PS2_CONN_DEVICE_PATH {\r
84   ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
85   PCI_DEVICE_PATH           LpcBridgeDevicePath;\r
86   ACPI_HID_DEVICE_PATH      LpcBusDevicePath;\r
87   EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
88 } PS2_CONN_DEVICE_PATH;\r
89 \r
90 //\r
91 // Serial Port Connector\r
92 //\r
93 typedef struct _SERIAL_CONN_DEVICE_PATH {\r
94   ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
95   PCI_DEVICE_PATH           LpcBridgeDevicePath;\r
96   ACPI_HID_DEVICE_PATH      LpcBusDevicePath;\r
97   EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
98 } SERIAL_CONN_DEVICE_PATH;\r
99 \r
100 //\r
101 // Parallel Port Connector\r
102 //\r
103 typedef struct _PARALLEL_CONN_DEVICE_PATH {\r
104   ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
105   PCI_DEVICE_PATH           LpcBridgeDevicePath;\r
106   ACPI_HID_DEVICE_PATH      LpcBusDevicePath;\r
107   EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
108 } PARALLEL_CONN_DEVICE_PATH;\r
109 \r
110 //\r
111 // Floopy Connector\r
112 //\r
113 typedef struct _FLOOPY_CONN_DEVICE_PATH {\r
114   ACPI_HID_DEVICE_PATH      PciRootBridgeDevicePath;\r
115   PCI_DEVICE_PATH           LpcBridgeDevicePath;\r
116   ACPI_HID_DEVICE_PATH      LpcBusDevicePath;\r
117   EFI_DEVICE_PATH_PROTOCOL  EndDevicePath;\r
118 } FLOOPY_CONN_DEVICE_PATH;\r
119 \r
120 typedef union _EFI_MISC_PORT_DEVICE_PATH {\r
121   USB_PORT_DEVICE_PATH      UsbDevicePath;\r
122   IDE_DEVICE_PATH           IdeDevicePath;\r
123   RMC_CONN_DEVICE_PATH      RmcConnDevicePath;\r
124   RIDE_DEVICE_PATH          RideDevicePath;\r
125   GB_NIC_DEVICE_PATH        GbNicDevicePath;\r
126   PS2_CONN_DEVICE_PATH      Ps2ConnDevicePath;\r
127   SERIAL_CONN_DEVICE_PATH   SerialConnDevicePath;\r
128   PARALLEL_CONN_DEVICE_PATH ParallelConnDevicePath;\r
129   FLOOPY_CONN_DEVICE_PATH   FloppyConnDevicePath;\r
130 } EFI_MISC_PORT_DEVICE_PATH;\r
131 \r
132 #pragma pack()\r
133 \r
134 //\r
135 // String Token Definition\r
136 //\r
137 #define EFI_STRING_TOKEN    UINT16\r
138 \r
139 typedef struct {\r
140   UINT32    Version;\r
141   UINT32    HeaderSize;\r
142   UINT16    Instance;\r
143   UINT16    SubInstance;\r
144   UINT32    RecordType;\r
145 } EFI_SUBCLASS_TYPE1_HEADER;\r
146 \r
147 typedef struct {\r
148   EFI_GUID    ProducerName;\r
149   UINT16      Instance;\r
150   UINT16      SubInstance;\r
151 } EFI_INTER_LINK_DATA;\r
152 \r
153 \r
154 //\r
155 // EXP data\r
156 //\r
157 \r
158 typedef struct {\r
159   UINT16    Value;\r
160   UINT16    Exponent;\r
161 } EFI_EXP_BASE2_DATA;\r
162 \r
163 \r
164 typedef struct {\r
165   UINT16    Value;\r
166   UINT16    Exponent;\r
167 } EFI_EXP_BASE10_DATA;\r
168 \r
169 typedef EFI_EXP_BASE10_DATA   EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA;\r
170 \r
171 typedef EFI_EXP_BASE10_DATA   EFI_PROCESSOR_MAX_FSB_FREQUENCY_DATA;\r
172 \r
173 typedef EFI_EXP_BASE10_DATA   EFI_PROCESSOR_CORE_FREQUENCY_DATA;\r
174 \r
175 typedef EFI_EXP_BASE10_DATA  *EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA;\r
176 \r
177 typedef EFI_EXP_BASE10_DATA  *EFI_PROCESSOR_FSB_FREQUENCY_LIST_DATA;\r
178 \r
179 typedef EFI_EXP_BASE10_DATA   EFI_PROCESSOR_FSB_FREQUENCY_DATA;\r
180 \r
181 typedef STRING_REF            EFI_PROCESSOR_VERSION_DATA;\r
182 \r
183 typedef STRING_REF            EFI_PROCESSOR_MANUFACTURER_DATA;\r
184 \r
185 typedef STRING_REF            EFI_PROCESSOR_SERIAL_NUMBER_DATA;\r
186 \r
187 typedef STRING_REF            EFI_PROCESSOR_ASSET_TAG_DATA;\r
188 \r
189 typedef struct {\r
190   UINT32  ProcessorSteppingId:4;\r
191   UINT32  ProcessorModel:     4;\r
192   UINT32  ProcessorFamily:    4;\r
193   UINT32  ProcessorType:      2;\r
194   UINT32  ProcessorReserved1: 2;\r
195   UINT32  ProcessorXModel:    4;\r
196   UINT32  ProcessorXFamily:   8;\r
197   UINT32  ProcessorReserved2: 4;\r
198 } EFI_PROCESSOR_SIGNATURE;\r
199 \r
200 typedef struct {\r
201   UINT32  ProcessorBrandIndex :8;\r
202   UINT32  ProcessorClflush    :8;\r
203   UINT32  ProcessorReserved   :8;\r
204   UINT32  ProcessorDfltApicId :8;\r
205 } EFI_PROCESSOR_MISC_INFO;\r
206 \r
207 typedef struct {\r
208   UINT32  ProcessorFpu:       1;\r
209   UINT32  ProcessorVme:       1;\r
210   UINT32  ProcessorDe:        1;\r
211   UINT32  ProcessorPse:       1;\r
212   UINT32  ProcessorTsc:       1;\r
213   UINT32  ProcessorMsr:       1;\r
214   UINT32  ProcessorPae:       1;\r
215   UINT32  ProcessorMce:       1;\r
216   UINT32  ProcessorCx8:       1;\r
217   UINT32  ProcessorApic:      1;\r
218   UINT32  ProcessorReserved1: 1;\r
219   UINT32  ProcessorSep:       1;\r
220   UINT32  ProcessorMtrr:      1;\r
221   UINT32  ProcessorPge:       1;\r
222   UINT32  ProcessorMca:       1;\r
223   UINT32  ProcessorCmov:      1;\r
224   UINT32  ProcessorPat:       1;\r
225   UINT32  ProcessorPse36:     1;\r
226   UINT32  ProcessorPsn:       1;\r
227   UINT32  ProcessorClfsh:     1;\r
228   UINT32  ProcessorReserved2: 1;\r
229   UINT32  ProcessorDs:        1;\r
230   UINT32  ProcessorAcpi:      1;\r
231   UINT32  ProcessorMmx:       1;\r
232   UINT32  ProcessorFxsr:      1;\r
233   UINT32  ProcessorSse:       1;\r
234   UINT32  ProcessorSse2:      1;\r
235   UINT32  ProcessorSs:        1;\r
236   UINT32  ProcessorReserved3: 1;\r
237   UINT32  ProcessorTm:        1;\r
238   UINT32  ProcessorReserved4: 2;\r
239 } EFI_PROCESSOR_FEATURE_FLAGS;\r
240 \r
241 typedef struct {\r
242   EFI_PROCESSOR_SIGNATURE     Signature;\r
243   EFI_PROCESSOR_MISC_INFO     MiscInfo;\r
244   UINT32                      Reserved;\r
245   EFI_PROCESSOR_FEATURE_FLAGS FeatureFlags;\r
246 } EFI_PROCESSOR_ID_DATA;\r
247 \r
248 typedef enum {\r
249   EfiProcessorOther    = 1,\r
250   EfiProcessorUnknown  = 2,\r
251   EfiCentralProcessor  = 3,\r
252   EfiMathProcessor     = 4,\r
253   EfiDspProcessor      = 5,\r
254   EfiVideoProcessor    = 6\r
255 } EFI_PROCESSOR_TYPE_DATA;\r
256 \r
257 typedef enum {\r
258   EfiProcessorFamilyOther               = 1,\r
259   EfiProcessorFamilyUnknown             = 2,\r
260   EfiProcessorFamily8086                = 3,\r
261   EfiProcessorFamily80286               = 4,\r
262   EfiProcessorFamilyIntel386            = 5,\r
263   EfiProcessorFamilyIntel486            = 6,\r
264   EfiProcessorFamily8087                = 7,\r
265   EfiProcessorFamily80287               = 8,\r
266   EfiProcessorFamily80387               = 9,\r
267   EfiProcessorFamily80487               = 0x0A,\r
268   EfiProcessorFamilyPentium             = 0x0B,\r
269   EfiProcessorFamilyPentiumPro          = 0x0C,\r
270   EfiProcessorFamilyPentiumII           = 0x0D,\r
271   EfiProcessorFamilyPentiumMMX          = 0x0E,\r
272   EfiProcessorFamilyCeleron             = 0x0F,\r
273   EfiProcessorFamilyPentiumIIXeon       = 0x10,\r
274   EfiProcessorFamilyPentiumIII          = 0x11,\r
275   EfiProcessorFamilyM1                  = 0x12,\r
276   EfiProcessorFamilyM1Reserved1         = 0x13,\r
277   EfiProcessorFamilyM1Reserved2         = 0x14,\r
278   EfiProcessorFamilyM1Reserved3         = 0x15,\r
279   EfiProcessorFamilyM1Reserved4         = 0x16,\r
280   EfiProcessorFamilyM1Reserved5         = 0x17,\r
281   EfiProcessorFamilyM1Reserved6         = 0x18,\r
282   EfiProcessorFamilyK5                  = 0x19,\r
283   EfiProcessorFamilyK5Reserved1         = 0x1A,\r
284   EfiProcessorFamilyK5Reserved2         = 0x1B,\r
285   EfiProcessorFamilyK5Reserved3         = 0x1C,\r
286   EfiProcessorFamilyK5Reserved4         = 0x1D,\r
287   EfiProcessorFamilyK5Reserved5         = 0x1E,\r
288   EfiProcessorFamilyK5Reserved6         = 0x1F,\r
289   EfiProcessorFamilyPowerPC             = 0x20,\r
290   EfiProcessorFamilyPowerPC601          = 0x21,\r
291   EfiProcessorFamilyPowerPC603          = 0x22,\r
292   EfiProcessorFamilyPowerPC603Plus      = 0x23,\r
293   EfiProcessorFamilyPowerPC604          = 0x24,\r
294   EfiProcessorFamilyAlpha2              = 0x30,\r
295   EfiProcessorFamilyMips                = 0x40,\r
296   EfiProcessorFamilySparc               = 0x50,\r
297   EfiProcessorFamily68040               = 0x60,\r
298   EfiProcessorFamily68xxx               = 0x61,\r
299   EfiProcessorFamily68000               = 0x62,\r
300   EfiProcessorFamily68010               = 0x63,\r
301   EfiProcessorFamily68020               = 0x64,\r
302   EfiProcessorFamily68030               = 0x65,\r
303   EfiProcessorFamilyHobbit              = 0x70,\r
304   EfiProcessorFamilyWeitek              = 0x80,\r
305   EfiProcessorFamilyPARISC              = 0x90,\r
306   EfiProcessorFamilyV30                 = 0xA0,\r
307   EfiProcessorFamilyPentiumIIIXeon      = 0xB0,\r
308   EfiProcessorFamilyPentiumIIISpeedStep = 0xB1,\r
309   EfiProcessorFamilyPentium4            = 0xB2,\r
310   EfiProcessorFamilyIntelXeon           = 0xB3,\r
311   EfiProcessorFamilyAS400               = 0xB4,\r
312   EfiProcessorFamilyIntelXeonMP         = 0xB5,\r
313   EfiProcessorFamilyAMDAthlonXP         = 0xB6,\r
314   EfiProcessorFamilyAMDAthlonMP         = 0xB7,\r
315   EfiProcessorFamilyIntelPentiumM       = 0xB9,\r
316   EfiProcessorFamilyIntelCeleronD       = 0xBA,\r
317   EfiProcessorFamilyIntelPentiumD       = 0xBB,\r
318   EfiProcessorFamilyIntelPentiumEx      = 0xBC,\r
319   EfiProcessorFamilyIBM390              = 0xC8,\r
320   EfiProcessorFamilyG4                  = 0xC9,\r
321   EfiProcessorFamilyG5                  = 0xCA,\r
322   EfiProcessorFamilyi860                = 0xFA,\r
323   EfiProcessorFamilyi960                = 0xFB\r
324 } EFI_PROCESSOR_FAMILY_DATA;\r
325 \r
326 typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_VOLTAGE_DATA;\r
327 \r
328 typedef EFI_PHYSICAL_ADDRESS EFI_PROCESSOR_APIC_BASE_ADDRESS_DATA;\r
329 \r
330 typedef UINT32 EFI_PROCESSOR_APIC_ID_DATA;\r
331 \r
332 typedef UINT32 EFI_PROCESSOR_APIC_VERSION_NUMBER_DATA;\r
333 \r
334 typedef enum {\r
335   EfiProcessorIa32Microcode    = 1,\r
336   EfiProcessorIpfPalAMicrocode = 2,\r
337   EfiProcessorIpfPalBMicrocode = 3\r
338 } EFI_PROCESSOR_MICROCODE_TYPE;\r
339 \r
340 typedef struct {\r
341   EFI_PROCESSOR_MICROCODE_TYPE  ProcessorMicrocodeType;\r
342   UINT32                        ProcessorMicrocodeRevisionNumber;\r
343 } EFI_PROCESSOR_MICROCODE_REVISION_DATA;\r
344 \r
345 typedef struct {\r
346   UINT32      CpuStatus                 :3;\r
347   UINT32      Reserved1                 :3;\r
348   UINT32      SocketPopulated           :1;\r
349   UINT32      Reserved2                 :1;\r
350   UINT32      ApicEnable                :1;\r
351   UINT32      BootApplicationProcessor  :1;\r
352   UINT32      Reserved3                 :22;\r
353 } EFI_PROCESSOR_STATUS_DATA;\r
354 \r
355 typedef enum {\r
356   EfiCpuStatusUnknown        = 0,\r
357   EfiCpuStatusEnabled        = 1,\r
358   EfiCpuStatusDisabledByUser = 2,\r
359   EfiCpuStatusDisabledbyBios = 3,\r
360   EfiCpuStatusIdle           = 4,\r
361   EfiCpuStatusOther          = 7\r
362 } EFI_CPU_STATUS;\r
363 \r
364 typedef enum {\r
365   EfiProcessorSocketOther            = 1,\r
366   EfiProcessorSocketUnknown          = 2,\r
367   EfiProcessorSocketDaughterBoard    = 3,\r
368   EfiProcessorSocketZIF              = 4,\r
369   EfiProcessorSocketReplacePiggyBack = 5,\r
370   EfiProcessorSocketNone             = 6,\r
371   EfiProcessorSocketLIF              = 7,\r
372   EfiProcessorSocketSlot1            = 8,\r
373   EfiProcessorSocketSlot2            = 9,\r
374   EfiProcessorSocket370Pin           = 0xA,\r
375   EfiProcessorSocketSlotA            = 0xB,\r
376   EfiProcessorSocketSlotM            = 0xC,\r
377   EfiProcessorSocket423              = 0xD,\r
378   EfiProcessorSocketA462             = 0xE,\r
379   EfiProcessorSocket478              = 0xF,\r
380   EfiProcessorSocket754              = 0x10,\r
381   EfiProcessorSocket940              = 0x11,\r
382   EfiProcessorSocket939              = 0x12,\r
383   EfiProcessorSocketmPGA604          = 0x13,\r
384   EfiProcessorSocketLGA771           = 0x14,\r
385   EfiProcessorSocketLGA775           = 0x15\r
386 \r
387 } EFI_PROCESSOR_SOCKET_TYPE_DATA;\r
388 \r
389 typedef STRING_REF EFI_PROCESSOR_SOCKET_NAME_DATA;\r
390 \r
391 typedef EFI_INTER_LINK_DATA EFI_CACHE_ASSOCIATION_DATA;\r
392 \r
393 typedef enum {\r
394   EfiProcessorHealthy        = 1,\r
395   EfiProcessorPerfRestricted = 2,\r
396   EfiProcessorFuncRestricted = 3\r
397 } EFI_PROCESSOR_HEALTH_STATUS;\r
398 \r
399 typedef UINTN   EFI_PROCESSOR_PACKAGE_NUMBER_DATA;\r
400 \r
401 \r
402 typedef enum {\r
403   ProcessorCoreFrequencyRecordType     = 1,\r
404   ProcessorFsbFrequencyRecordType      = 2,\r
405   ProcessorVersionRecordType           = 3,\r
406   ProcessorManufacturerRecordType      = 4,\r
407   ProcessorSerialNumberRecordType      = 5,\r
408   ProcessorIdRecordType                = 6,\r
409   ProcessorTypeRecordType              = 7,\r
410   ProcessorFamilyRecordType            = 8,\r
411   ProcessorVoltageRecordType           = 9,\r
412   ProcessorApicBaseAddressRecordType   = 10,\r
413   ProcessorApicIdRecordType            = 11,\r
414   ProcessorApicVersionNumberRecordType = 12,\r
415   CpuUcodeRevisionDataRecordType       = 13,\r
416   ProcessorStatusRecordType            = 14,\r
417   ProcessorSocketTypeRecordType        = 15,\r
418   ProcessorSocketNameRecordType        = 16,\r
419   CacheAssociationRecordType           = 17,\r
420   ProcessorMaxCoreFrequencyRecordType  = 18,\r
421   ProcessorAssetTagRecordType          = 19,\r
422   ProcessorMaxFsbFrequencyRecordType   = 20,\r
423   ProcessorPackageNumberRecordType     = 21,\r
424   ProcessorCoreFrequencyListRecordType = 22,\r
425   ProcessorFsbFrequencyListRecordType  = 23,\r
426   ProcessorHealthStatusRecordType      = 24\r
427 } EFI_CPU_VARIABLE_RECORD_TYPE;\r
428 \r
429 typedef union {\r
430   EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA  ProcessorCoreFrequencyList;\r
431   EFI_PROCESSOR_FSB_FREQUENCY_LIST_DATA   ProcessorFsbFrequencyList;\r
432   EFI_PROCESSOR_SERIAL_NUMBER_DATA        ProcessorSerialNumber;\r
433   EFI_PROCESSOR_CORE_FREQUENCY_DATA       ProcessorCoreFrequency;\r
434   EFI_PROCESSOR_FSB_FREQUENCY_DATA        ProcessorFsbFrequency;\r
435   EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA   ProcessorMaxCoreFrequency;\r
436   EFI_PROCESSOR_MAX_FSB_FREQUENCY_DATA    ProcessorMaxFsbFrequency;\r
437   EFI_PROCESSOR_VERSION_DATA              ProcessorVersion;\r
438   EFI_PROCESSOR_MANUFACTURER_DATA         ProcessorManufacturer;\r
439   EFI_PROCESSOR_ID_DATA                   ProcessorId;\r
440   EFI_PROCESSOR_TYPE_DATA                 ProcessorType;\r
441   EFI_PROCESSOR_FAMILY_DATA               ProcessorFamily;\r
442   EFI_PROCESSOR_VOLTAGE_DATA              ProcessorVoltage;\r
443   EFI_PROCESSOR_APIC_BASE_ADDRESS_DATA    ProcessorApicBase;\r
444   EFI_PROCESSOR_APIC_ID_DATA              ProcessorApicId;\r
445   EFI_PROCESSOR_APIC_VERSION_NUMBER_DATA  ProcessorApicVersionNumber;\r
446   EFI_PROCESSOR_MICROCODE_REVISION_DATA   CpuUcodeRevisionData;\r
447   EFI_PROCESSOR_STATUS_DATA               ProcessorStatus;\r
448   EFI_PROCESSOR_SOCKET_TYPE_DATA          ProcessorSocketType;\r
449   EFI_PROCESSOR_SOCKET_NAME_DATA          ProcessorSocketName;\r
450   EFI_PROCESSOR_ASSET_TAG_DATA            ProcessorAssetTag;\r
451   EFI_PROCESSOR_HEALTH_STATUS             ProcessorHealthStatus;\r
452   EFI_PROCESSOR_PACKAGE_NUMBER_DATA       ProcessorPackageNumber;\r
453 } EFI_CPU_VARIABLE_RECORD;\r
454 \r
455 typedef struct {\r
456   EFI_SUBCLASS_TYPE1_HEADER      DataRecordHeader;\r
457   EFI_CPU_VARIABLE_RECORD        VariableRecord;\r
458 } EFI_CPU_DATA_RECORD;\r
459 \r
460 #define EFI_CACHE_SUBCLASS_VERSION    0x00010000\r
461 \r
462 typedef EFI_EXP_BASE2_DATA  EFI_CACHE_SIZE_DATA;\r
463 \r
464 typedef EFI_EXP_BASE2_DATA  EFI_MAXIMUM_CACHE_SIZE_DATA;\r
465 \r
466 typedef EFI_EXP_BASE10_DATA EFI_CACHE_SPEED_DATA;\r
467 \r
468 typedef STRING_REF          EFI_CACHE_SOCKET_DATA;\r
469 \r
470 typedef struct {\r
471   UINT32  Other         :1;\r
472   UINT32  Unknown       :1;\r
473   UINT32  NonBurst      :1;\r
474   UINT32  Burst         :1;\r
475   UINT32  PipelineBurst :1;\r
476   UINT32  Asynchronous  :1;\r
477   UINT32  Synchronous   :1;\r
478   UINT32  Reserved      :25;\r
479 } EFI_CACHE_SRAM_TYPE_DATA;\r
480 \r
481 typedef EFI_CACHE_SRAM_TYPE_DATA EFI_CACHE_SRAM_INSTALL_DATA;\r
482 \r
483 typedef enum {\r
484   EfiCacheErrorOther     = 1,\r
485   EfiCacheErrorUnknown   = 2,\r
486   EfiCacheErrorNone      = 3,\r
487   EfiCacheErrorParity    = 4,\r
488   EfiCacheErrorSingleBit = 5,\r
489   EfiCacheErrorMultiBit  = 6\r
490 } EFI_CACHE_ERROR_TYPE_DATA;\r
491 \r
492 typedef enum {\r
493   EfiCacheTypeOther       = 1,\r
494   EfiCacheTypeUnknown     = 2,\r
495   EfiCacheTypeInstruction = 3,\r
496   EfiCacheTypeData        = 4,\r
497   EfiCacheTypeUnified     = 5\r
498 } EFI_CACHE_TYPE_DATA;\r
499 \r
500 typedef enum {\r
501   EfiCacheAssociativityOther        = 1,\r
502   EfiCacheAssociativityUnknown      = 2,\r
503   EfiCacheAssociativityDirectMapped = 3,\r
504   EfiCacheAssociativity2Way         = 4,\r
505   EfiCacheAssociativity4Way         = 5,\r
506   EfiCacheAssociativityFully        = 6,\r
507   EfiCacheAssociativity8Way         = 7,\r
508   EfiCacheAssociativity16Way        = 8,\r
509   EfiCacheAssociativity24Way        = 9\r
510 } EFI_CACHE_ASSOCIATIVITY_DATA;\r
511 \r
512 typedef struct {\r
513   UINT32    Level           :3;\r
514   UINT32    Socketed        :1;\r
515   UINT32    Reserved2       :1;\r
516   UINT32    Location        :2;\r
517   UINT32    Enable          :1;\r
518   UINT32    OperationalMode :2;\r
519   UINT32    Reserved1       :22;\r
520 } EFI_CACHE_CONFIGURATION_DATA;\r
521 \r
522 #define EFI_CACHE_L1      1\r
523 #define EFI_CACHE_L2      2\r
524 #define EFI_CACHE_L3      3\r
525 #define EFI_CACHE_L4      4\r
526 #define EFI_CACHE_LMAX    EFI_CACHE_L4\r
527 \r
528 #define EFI_CACHE_SOCKETED      1\r
529 #define EFI_CACHE_NOT_SOCKETED  0\r
530 \r
531 typedef enum {\r
532   EfiCacheInternal = 0,\r
533   EfiCacheExternal = 1,\r
534   EfiCacheReserved = 2,\r
535   EfiCacheUnknown  = 3\r
536 } EFI_CACHE_LOCATION;\r
537 \r
538 #define EFI_CACHE_ENABLED    1\r
539 #define EFI_CACHE_DISABLED   0\r
540 \r
541 typedef enum {\r
542   EfiCacheWriteThrough = 0,\r
543   EfiCacheWriteBack    = 1,\r
544   EfiCacheDynamicMode  = 2,\r
545   EfiCacheUnknownMode  = 3\r
546 } EFI_CACHE_OPERATIONAL_MODE;\r
547 \r
548 \r
549 \r
550 typedef enum {\r
551   CacheSizeRecordType              = 1,\r
552   MaximumSizeCacheRecordType       = 2,\r
553   CacheSpeedRecordType             = 3,\r
554   CacheSocketRecordType            = 4,\r
555   CacheSramTypeRecordType          = 5,\r
556   CacheInstalledSramTypeRecordType = 6,\r
557   CacheErrorTypeRecordType         = 7,\r
558   CacheTypeRecordType              = 8,\r
559   CacheAssociativityRecordType     = 9,\r
560   CacheConfigRecordType            = 10\r
561 } EFI_CACHE_VARIABLE_RECORD_TYPE;\r
562 \r
563 \r
564 typedef union {\r
565   EFI_CACHE_SIZE_DATA             CacheSize;\r
566   EFI_MAXIMUM_CACHE_SIZE_DATA     MaximumCacheSize;\r
567   EFI_CACHE_SPEED_DATA            CacheSpeed;\r
568   EFI_CACHE_SOCKET_DATA           CacheSocket;\r
569   EFI_CACHE_SRAM_TYPE_DATA        CacheSramType;\r
570   EFI_CACHE_SRAM_TYPE_DATA        CacheInstalledSramType;\r
571   EFI_CACHE_ERROR_TYPE_DATA       CacheErrorType;\r
572   EFI_CACHE_TYPE_DATA             CacheType;\r
573   EFI_CACHE_ASSOCIATIVITY_DATA    CacheAssociativity;\r
574   EFI_CACHE_CONFIGURATION_DATA    CacheConfig;\r
575   EFI_CACHE_ASSOCIATION_DATA      CacheAssociation;\r
576 } EFI_CACHE_VARIABLE_RECORD;\r
577 \r
578 typedef struct {\r
579    EFI_SUBCLASS_TYPE1_HEADER      DataRecordHeader;\r
580    EFI_CACHE_VARIABLE_RECORD      VariableRecord;\r
581 } EFI_CACHE_DATA_RECORD;\r
582 \r
583 #define EFI_MEMORY_SUBCLASS_VERSION     0x0100\r
584 \r
585 \r
586 #define EFI_MEMORY_SIZE_RECORD_NUMBER                 0x00000001\r
587 \r
588 typedef enum _EFI_MEMORY_REGION_TYPE {\r
589   EfiMemoryRegionMemory                       = 0x01,\r
590   EfiMemoryRegionReserved                     = 0x02,\r
591   EfiMemoryRegionAcpi                         = 0x03,\r
592   EfiMemoryRegionNvs                          = 0x04\r
593 } EFI_MEMORY_REGION_TYPE;\r
594 \r
595 typedef struct {\r
596   UINT32                      ProcessorNumber;\r
597   UINT16                      StartBusNumber;\r
598   UINT16                      EndBusNumber;\r
599   EFI_MEMORY_REGION_TYPE      MemoryRegionType;\r
600   EFI_EXP_BASE2_DATA          MemorySize;\r
601   EFI_PHYSICAL_ADDRESS        MemoryStartAddress;\r
602 } EFI_MEMORY_SIZE_DATA;\r
603 \r
604 \r
605 #define EFI_MEMORY_ARRAY_LOCATION_RECORD_NUMBER       0x00000002\r
606 \r
607 typedef enum _EFI_MEMORY_ARRAY_LOCATION {\r
608   EfiMemoryArrayLocationOther                 = 0x01,\r
609   EfiMemoryArrayLocationUnknown               = 0x02,\r
610   EfiMemoryArrayLocationSystemBoard           = 0x03,\r
611   EfiMemoryArrayLocationIsaAddonCard          = 0x04,\r
612   EfiMemoryArrayLocationEisaAddonCard         = 0x05,\r
613   EfiMemoryArrayLocationPciAddonCard          = 0x06,\r
614   EfiMemoryArrayLocationMcaAddonCard          = 0x07,\r
615   EfiMemoryArrayLocationPcmciaAddonCard       = 0x08,\r
616   EfiMemoryArrayLocationProprietaryAddonCard  = 0x09,\r
617   EfiMemoryArrayLocationNuBus                 = 0x0A,\r
618   EfiMemoryArrayLocationPc98C20AddonCard      = 0xA0,\r
619   EfiMemoryArrayLocationPc98C24AddonCard      = 0xA1,\r
620   EfiMemoryArrayLocationPc98EAddonCard        = 0xA2,\r
621   EfiMemoryArrayLocationPc98LocalBusAddonCard = 0xA3\r
622 } EFI_MEMORY_ARRAY_LOCATION;\r
623 \r
624 typedef enum _EFI_MEMORY_ARRAY_USE {\r
625   EfiMemoryArrayUseOther                      = 0x01,\r
626   EfiMemoryArrayUseUnknown                    = 0x02,\r
627   EfiMemoryArrayUseSystemMemory               = 0x03,\r
628   EfiMemoryArrayUseVideoMemory                = 0x04,\r
629   EfiMemoryArrayUseFlashMemory                = 0x05,\r
630   EfiMemoryArrayUseNonVolatileRam             = 0x06,\r
631   EfiMemoryArrayUseCacheMemory                = 0x07,\r
632 } EFI_MEMORY_ARRAY_USE;\r
633 \r
634 typedef enum _EFI_MEMORY_ERROR_CORRECTION {\r
635   EfiMemoryErrorCorrectionOther               = 0x01,\r
636   EfiMemoryErrorCorrectionUnknown             = 0x02,\r
637   EfiMemoryErrorCorrectionNone                = 0x03,\r
638   EfiMemoryErrorCorrectionParity              = 0x04,\r
639   EfiMemoryErrorCorrectionSingleBitEcc        = 0x05,\r
640   EfiMemoryErrorCorrectionMultiBitEcc         = 0x06,\r
641   EfiMemoryErrorCorrectionCrc                 = 0x07,\r
642 } EFI_MEMORY_ERROR_CORRECTION;\r
643 \r
644 typedef struct {\r
645   EFI_MEMORY_ARRAY_LOCATION   MemoryArrayLocation;\r
646   EFI_MEMORY_ARRAY_USE        MemoryArrayUse;\r
647   EFI_MEMORY_ERROR_CORRECTION MemoryErrorCorrection;\r
648   EFI_EXP_BASE2_DATA          MaximumMemoryCapacity;\r
649   UINT16                      NumberMemoryDevices;\r
650 } EFI_MEMORY_ARRAY_LOCATION_DATA;\r
651 \r
652 \r
653 #define EFI_MEMORY_ARRAY_LINK_RECORD_NUMBER           0x00000003\r
654 \r
655 typedef enum _EFI_MEMORY_FORM_FACTOR {\r
656   EfiMemoryFormFactorOther                    = 0x01,\r
657   EfiMemoryFormFactorUnknown                  = 0x02,\r
658   EfiMemoryFormFactorSimm                     = 0x03,\r
659   EfiMemoryFormFactorSip                      = 0x04,\r
660   EfiMemoryFormFactorChip                     = 0x05,\r
661   EfiMemoryFormFactorDip                      = 0x06,\r
662   EfiMemoryFormFactorZip                      = 0x07,\r
663   EfiMemoryFormFactorProprietaryCard          = 0x08,\r
664   EfiMemoryFormFactorDimm                     = 0x09,\r
665   EfiMemoryFormFactorTsop                     = 0x0A,\r
666   EfiMemoryFormFactorRowOfChips               = 0x0B,\r
667   EfiMemoryFormFactorRimm                     = 0x0C,\r
668   EfiMemoryFormFactorSodimm                   = 0x0D,\r
669   EfiMemoryFormFactorSrimm                    = 0x0E,\r
670   EfiMemoryFormFactorFbDimm                   = 0x0F\r
671 } EFI_MEMORY_FORM_FACTOR;\r
672 \r
673 typedef enum _EFI_MEMORY_ARRAY_TYPE {\r
674   EfiMemoryTypeOther                          = 0x01,\r
675   EfiMemoryTypeUnknown                        = 0x02,\r
676   EfiMemoryTypeDram                           = 0x03,\r
677   EfiMemoryTypeEdram                          = 0x04,\r
678   EfiMemoryTypeVram                           = 0x05,\r
679   EfiMemoryTypeSram                           = 0x06,\r
680   EfiMemoryTypeRam                            = 0x07,\r
681   EfiMemoryTypeRom                            = 0x08,\r
682   EfiMemoryTypeFlash                          = 0x09,\r
683   EfiMemoryTypeEeprom                         = 0x0A,\r
684   EfiMemoryTypeFeprom                         = 0x0B,\r
685   EfiMemoryTypeEprom                          = 0x0C,\r
686   EfiMemoryTypeCdram                          = 0x0D,\r
687   EfiMemoryType3Dram                          = 0x0E,\r
688   EfiMemoryTypeSdram                          = 0x0F,\r
689   EfiMemoryTypeSgram                          = 0x10,\r
690   EfiMemoryTypeRdram                          = 0x11,\r
691   EfiMemoryTypeDdr                            = 0x12,\r
692   EfiMemoryTypeDdr2                           = 0x13,\r
693   EfiMemoryTypeDdr2FbDimm                     = 0x14\r
694 } EFI_MEMORY_ARRAY_TYPE;\r
695 \r
696 typedef struct {\r
697   UINT32                      Reserved        :1;\r
698   UINT32                      Other           :1;\r
699   UINT32                      Unknown         :1;\r
700   UINT32                      FastPaged       :1;\r
701   UINT32                      StaticColumn    :1;\r
702   UINT32                      PseudoStatic    :1;\r
703   UINT32                      Rambus          :1;\r
704   UINT32                      Synchronous     :1;\r
705   UINT32                      Cmos            :1;\r
706   UINT32                      Edo             :1;\r
707   UINT32                      WindowDram      :1;\r
708   UINT32                      CacheDram       :1;\r
709   UINT32                      Nonvolatile     :1;\r
710   UINT32                      Reserved1       :19;\r
711 } EFI_MEMORY_TYPE_DETAIL;\r
712 \r
713 typedef enum {\r
714   EfiMemoryStateEnabled      = 0,\r
715   EfiMemoryStateUnknown      = 1,\r
716   EfiMemoryStateUnsupported  = 2,\r
717   EfiMemoryStateError        = 3,\r
718   EfiMemoryStateAbsent       = 4,\r
719   EfiMemoryStateDisabled     = 5,\r
720   EfiMemoryStatePartial      = 6\r
721 } EFI_MEMORY_STATE;\r
722 \r
723 typedef struct {\r
724   STRING_REF                  MemoryDeviceLocator;\r
725   STRING_REF                  MemoryBankLocator;\r
726   STRING_REF                  MemoryManufacturer;\r
727   STRING_REF                  MemorySerialNumber;\r
728   STRING_REF                  MemoryAssetTag;\r
729   STRING_REF                  MemoryPartNumber;\r
730   EFI_INTER_LINK_DATA         MemoryArrayLink;\r
731   EFI_INTER_LINK_DATA         MemorySubArrayLink;\r
732   UINT16                      MemoryTotalWidth;\r
733   UINT16                      MemoryDataWidth;\r
734   EFI_EXP_BASE2_DATA          MemoryDeviceSize;\r
735   EFI_MEMORY_FORM_FACTOR      MemoryFormFactor;\r
736   UINT8                       MemoryDeviceSet;\r
737   EFI_MEMORY_ARRAY_TYPE       MemoryType;\r
738   EFI_MEMORY_TYPE_DETAIL      MemoryTypeDetail;\r
739   EFI_EXP_BASE10_DATA         MemorySpeed;\r
740   EFI_MEMORY_STATE            MemoryState;\r
741 } EFI_MEMORY_ARRAY_LINK_DATA;\r
742 \r
743 \r
744 #define EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER  0x00000004\r
745 \r
746 typedef struct {\r
747   EFI_PHYSICAL_ADDRESS        MemoryArrayStartAddress;\r
748   EFI_PHYSICAL_ADDRESS        MemoryArrayEndAddress;\r
749   EFI_INTER_LINK_DATA         PhysicalMemoryArrayLink;\r
750   UINT16                      MemoryArrayPartitionWidth;\r
751 } EFI_MEMORY_ARRAY_START_ADDRESS_DATA;\r
752 \r
753 \r
754 #define EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER 0x00000005\r
755 \r
756 typedef struct {\r
757   EFI_PHYSICAL_ADDRESS        MemoryDeviceStartAddress;\r
758   EFI_PHYSICAL_ADDRESS        MemoryDeviceEndAddress;\r
759   EFI_INTER_LINK_DATA         PhysicalMemoryDeviceLink;\r
760   EFI_INTER_LINK_DATA         PhysicalMemoryArrayLink;\r
761   UINT8                       MemoryDevicePartitionRowPosition;\r
762   UINT8                       MemoryDeviceInterleavePosition;\r
763   UINT8                       MemoryDeviceInterleaveDataDepth;\r
764 } EFI_MEMORY_DEVICE_START_ADDRESS_DATA;\r
765 \r
766 \r
767 //\r
768 //  Memory. Channel Device Type -  SMBIOS Type 37\r
769 //\r
770 \r
771 #define EFI_MEMORY_CHANNEL_TYPE_RECORD_NUMBER         0x00000006\r
772 \r
773 typedef enum _EFI_MEMORY_CHANNEL_TYPE {\r
774   EfiMemoryChannelTypeOther                   = 1,\r
775   EfiMemoryChannelTypeUnknown                 = 2,\r
776   EfiMemoryChannelTypeRambus                  = 3,\r
777   EfiMemoryChannelTypeSyncLink                = 4\r
778 } EFI_MEMORY_CHANNEL_TYPE;\r
779 \r
780 typedef struct {\r
781   EFI_MEMORY_CHANNEL_TYPE     MemoryChannelType;\r
782   UINT8                       MemoryChannelMaximumLoad;\r
783   UINT8                       MemoryChannelDeviceCount;\r
784 } EFI_MEMORY_CHANNEL_TYPE_DATA;\r
785 \r
786 #define EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER       0x00000007\r
787 \r
788 typedef struct {\r
789   UINT8                       DeviceId;\r
790   EFI_INTER_LINK_DATA         DeviceLink;\r
791   UINT8                       MemoryChannelDeviceLoad;\r
792 } EFI_MEMORY_CHANNEL_DEVICE_DATA;\r
793 \r
794 //\r
795 //  Memory. Controller Information - SMBIOS Type 5\r
796 //\r
797 #define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER 0x00000008\r
798 \r
799 typedef enum {  \r
800   EfiErrorDetectingMethodOther   = 1,\r
801   EfiErrorDetectingMethodUnknown = 2,\r
802   EfiErrorDetectingMethodNone    = 3,\r
803   EfiErrorDetectingMethodParity  = 4,\r
804   EfiErrorDetectingMethod32Ecc   = 5,\r
805   EfiErrorDetectingMethod64Ecc   = 6,\r
806   EfiErrorDetectingMethod128Ecc  = 7,\r
807   EfiErrorDetectingMethodCrc     = 8\r
808 } EFI_MEMORY_ERROR_DETECT_METHOD_TYPE;\r
809 \r
810 typedef struct {\r
811   UINT8  Other                 :1;\r
812   UINT8  Unknown               :1;\r
813   UINT8  None                  :1;\r
814   UINT8  SingleBitErrorCorrect :1;\r
815   UINT8  DoubleBitErrorCorrect :1;\r
816   UINT8  ErrorScrubbing        :1;\r
817   UINT8  Reserved              :2;\r
818 } EFI_MEMORY_ERROR_CORRECT_CAPABILITY;\r
819 \r
820 typedef enum {  \r
821   EfiMemoryInterleaveOther      = 1,\r
822   EfiMemoryInterleaveUnknown    = 2,\r
823   EfiMemoryInterleaveOneWay     = 3,\r
824   EfiMemoryInterleaveTwoWay     = 4,\r
825   EfiMemoryInterleaveFourWay    = 5,\r
826   EfiMemoryInterleaveEightWay   = 6,\r
827   EfiMemoryInterleaveSixteenWay = 7\r
828 } EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE;\r
829 \r
830 typedef struct {\r
831   UINT16  Other                 :1;\r
832   UINT16  Unknown               :1;\r
833   UINT16  SeventyNs             :1;\r
834   UINT16  SixtyNs               :1;\r
835   UINT16  FiftyNs               :1;\r
836   UINT16  Reserved              :11;\r
837 } EFI_MEMORY_SPEED_TYPE;\r
838 \r
839 typedef struct {\r
840   UINT16  Other                 :1;\r
841   UINT16  Unknown               :1;\r
842   UINT16  Standard              :1;\r
843   UINT16  FastPageMode          :1;\r
844   UINT16  EDO                   :1;\r
845   UINT16  Parity                :1;\r
846   UINT16  ECC                   :1;\r
847   UINT16  SIMM                  :1;\r
848   UINT16  DIMM                  :1;\r
849   UINT16  BurstEdo              :1;\r
850   UINT16  SDRAM                 :1;\r
851   UINT16  Reserved              :5;\r
852 } EFI_MEMORY_SUPPORTED_TYPE;\r
853 \r
854 typedef struct {\r
855   UINT8  Five                  :1;\r
856   UINT8  There                 :1;\r
857   UINT8  Two                   :1;\r
858   UINT8  Reserved              :5;\r
859 } EFI_MEMORY_MODULE_VOLTAGE_TYPE;\r
860 \r
861 typedef struct {\r
862   EFI_MEMORY_ERROR_DETECT_METHOD_TYPE   ErrorDetectingMethod;\r
863   EFI_MEMORY_ERROR_CORRECT_CAPABILITY   ErrorCorrectingCapability;\r
864   EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE    MemorySupportedInterleave;\r
865   EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE    MemoryCurrentInterleave;\r
866   UINT8                                 MaxMemoryModuleSize;\r
867   EFI_MEMORY_SPEED_TYPE                 MemorySpeedType;\r
868   EFI_MEMORY_SUPPORTED_TYPE             MemorySupportedType;\r
869   EFI_MEMORY_MODULE_VOLTAGE_TYPE        MemoryModuleVoltage;\r
870   UINT8                                 NumberofMemorySlot;\r
871   EFI_MEMORY_ERROR_CORRECT_CAPABILITY   EnabledCorrectingCapability;\r
872   UINT16                                *MemoryModuleConfigHandles;\r
873 } EFI_MEMORY_CONTROLLER_INFORMATION;\r
874 \r
875 //\r
876 //  Memory. Error Information - SMBIOS Type 18\r
877 //\r
878 #define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER 0x00000009\r
879 \r
880 typedef enum {  \r
881   EfiMemoryErrorOther             = 1,\r
882   EfiMemoryErrorUnknown           = 2,\r
883   EfiMemoryErrorOk                = 3,\r
884   EfiMemoryErrorBadRead           = 4,\r
885   EfiMemoryErrorParity            = 5,\r
886   EfiMemoryErrorSigleBit          = 6,\r
887   EfiMemoryErrorDoubleBit         = 7,\r
888   EfiMemoryErrorMultiBit          = 8,\r
889   EfiMemoryErrorNibble            = 9,\r
890   EfiMemoryErrorChecksum          = 10,\r
891   EfiMemoryErrorCrc               = 11,\r
892   EfiMemoryErrorCorrectSingleBit  = 12,\r
893   EfiMemoryErrorCorrected         = 13,\r
894   EfiMemoryErrorUnCorrectable     = 14\r
895 } EFI_MEMORY_ERROR_TYPE;\r
896 \r
897 typedef enum {  \r
898   EfiMemoryGranularityOther               = 1,\r
899   EfiMemoryGranularityOtherUnknown        = 2,\r
900   EfiMemoryGranularityDeviceLevel         = 3,\r
901   EfiMemoryGranularityMemPartitionLevel   = 4\r
902 } EFI_MEMORY_ERROR_GRANULARITY_TYPE;\r
903 \r
904 typedef enum {  \r
905   EfiMemoryErrorOperationOther            = 1,\r
906   EfiMemoryErrorOperationUnknown          = 2,\r
907   EfiMemoryErrorOperationRead             = 3,\r
908   EfiMemoryErrorOperationWrite            = 4,\r
909   EfiMemoryErrorOperationPartialWrite     = 5\r
910 } EFI_MEMORY_ERROR_OPERATION_TYPE;\r
911 \r
912 typedef struct {\r
913   EFI_MEMORY_ERROR_TYPE               MemoryErrorType;\r
914   EFI_MEMORY_ERROR_GRANULARITY_TYPE   MemoryErrorGranularity;\r
915   EFI_MEMORY_ERROR_OPERATION_TYPE     MemoryErrorOperation;\r
916   UINT32                              VendorSyndrome;\r
917   UINT32                              MemoryArrayErrorAddress;\r
918   UINT32                              DeviceErrorAddress;\r
919   UINT32                              DeviceErrorResolution;\r
920 } EFI_MEMORY_32BIT_ERROR_INFORMATION;\r
921 \r
922 //\r
923 //  Memory. Error Information - SMBIOS Type 33\r
924 //\r
925 #define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER 0x0000000A\r
926 \r
927 typedef struct {\r
928   EFI_MEMORY_ERROR_TYPE               MemoryErrorType;\r
929   EFI_MEMORY_ERROR_GRANULARITY_TYPE   MemoryErrorGranularity;\r
930   EFI_MEMORY_ERROR_OPERATION_TYPE     MemoryErrorOperation;\r
931   UINT32                              VendorSyndrome;\r
932   UINT64                              MemoryArrayErrorAddress;\r
933   UINT64                              DeviceErrorAddress;\r
934   UINT32                              DeviceErrorResolution;\r
935 } EFI_MEMORY_64BIT_ERROR_INFORMATION;\r
936 \r
937 typedef union _EFI_MEMORY_SUBCLASS_RECORDS {\r
938   EFI_MEMORY_SIZE_DATA                  SizeData;\r
939   EFI_MEMORY_ARRAY_LOCATION_DATA        ArrayLocationData;\r
940   EFI_MEMORY_ARRAY_LINK_DATA            ArrayLink;\r
941   EFI_MEMORY_ARRAY_START_ADDRESS_DATA   ArrayStartAddress;\r
942   EFI_MEMORY_DEVICE_START_ADDRESS_DATA  DeviceStartAddress;\r
943   EFI_MEMORY_CHANNEL_TYPE_DATA          ChannelTypeData;\r
944   EFI_MEMORY_CHANNEL_DEVICE_DATA        ChannelDeviceData;\r
945   EFI_MEMORY_CONTROLLER_INFORMATION     MemoryControllerInfo;\r
946   EFI_MEMORY_32BIT_ERROR_INFORMATION    Memory32bitErrorInfo;\r
947   EFI_MEMORY_64BIT_ERROR_INFORMATION    Memory64bitErrorInfo;\r
948 } EFI_MEMORY_SUBCLASS_RECORDS;\r
949 \r
950 typedef struct {\r
951   EFI_SUBCLASS_TYPE1_HEADER             Header;\r
952   EFI_MEMORY_SUBCLASS_RECORDS           Record;\r
953 } EFI_MEMORY_SUBCLASS_DRIVER_DATA;\r
954 \r
955 #define EFI_MISC_SUBCLASS_VERSION     0x0100\r
956 \r
957 #pragma pack(1)\r
958 //\r
959 //////////////////////////////////////////////////////////////////////////////\r
960 //\r
961 // Last PCI Bus Number\r
962 //\r
963 #define EFI_MISC_LAST_PCI_BUS_RECORD_NUMBER  0x00000001\r
964 \r
965 typedef struct {\r
966   UINT8   LastPciBus;\r
967 } EFI_MISC_LAST_PCI_BUS_DATA;\r
968 \r
969 //\r
970 //////////////////////////////////////////////////////////////////////////////\r
971 //\r
972 // Misc. BIOS Vendor - SMBIOS Type 0\r
973 //\r
974 #define EFI_MISC_BIOS_VENDOR_RECORD_NUMBER  0x00000002\r
975 \r
976 typedef struct {\r
977   UINT64  Reserved1                         :2;\r
978   UINT64  Unknown                           :1;\r
979   UINT64  BiosCharacteristicsNotSupported   :1;\r
980   UINT64  IsaIsSupported                    :1;\r
981   UINT64  McaIsSupported                    :1;\r
982   UINT64  EisaIsSupported                   :1;\r
983   UINT64  PciIsSupported                    :1;\r
984   UINT64  PcmciaIsSupported                 :1;\r
985   UINT64  PlugAndPlayIsSupported            :1;\r
986   UINT64  ApmIsSupported                    :1;\r
987   UINT64  BiosIsUpgradable                  :1;\r
988   UINT64  BiosShadowingAllowed              :1;\r
989   UINT64  VlVesaIsSupported                 :1;\r
990   UINT64  EscdSupportIsAvailable            :1;\r
991   UINT64  BootFromCdIsSupported             :1;\r
992   UINT64  SelectableBootIsSupported         :1;\r
993   UINT64  RomBiosIsSocketed                 :1;\r
994   UINT64  BootFromPcmciaIsSupported         :1;\r
995   UINT64  EDDSpecificationIsSupported       :1;\r
996   UINT64  JapaneseNecFloppyIsSupported      :1;\r
997   UINT64  JapaneseToshibaFloppyIsSupported  :1;\r
998   UINT64  Floppy525_360IsSupported          :1;\r
999   UINT64  Floppy525_12IsSupported           :1;\r
1000   UINT64  Floppy35_720IsSupported           :1;\r
1001   UINT64  Floppy35_288IsSupported           :1;\r
1002   UINT64  PrintScreenIsSupported            :1;\r
1003   UINT64  Keyboard8042IsSupported           :1;\r
1004   UINT64  SerialIsSupported                 :1;\r
1005   UINT64  PrinterIsSupported                :1;\r
1006   UINT64  CgaMonoIsSupported                :1;\r
1007   UINT64  NecPc98                           :1;\r
1008   UINT64  AcpiIsSupported                   :1;\r
1009   UINT64  UsbLegacyIsSupported              :1;\r
1010   UINT64  AgpIsSupported                    :1;\r
1011   UINT64  I20BootIsSupported                :1;\r
1012   UINT64  Ls120BootIsSupported              :1;\r
1013   UINT64  AtapiZipDriveBootIsSupported      :1;\r
1014   UINT64  Boot1394IsSupported               :1;\r
1015   UINT64  SmartBatteryIsSupported           :1;\r
1016   UINT64  BiosBootSpecIsSupported           :1;\r
1017   UINT64  FunctionKeyNetworkBootIsSupported :1;\r
1018   UINT64  Reserved                          :22;\r
1019 } EFI_MISC_BIOS_CHARACTERISTICS;\r
1020 \r
1021 typedef struct {\r
1022   UINT64  BiosReserved                      :16;\r
1023   UINT64  SystemReserved                    :16;\r
1024   UINT64  Reserved                          :32;\r
1025 } EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION;\r
1026 \r
1027 typedef struct {\r
1028   STRING_REF                      BiosVendor;\r
1029   STRING_REF                      BiosVersion;\r
1030   STRING_REF                      BiosReleaseDate;\r
1031   EFI_PHYSICAL_ADDRESS            BiosStartingAddress;\r
1032   EFI_EXP_BASE2_DATA              BiosPhysicalDeviceSize;\r
1033   EFI_MISC_BIOS_CHARACTERISTICS   BiosCharacteristics1;\r
1034   EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION  BiosCharacteristics2;\r
1035   UINT8                           BiosMajorRelease;\r
1036   UINT8                           BiosMinorRelease;\r
1037   UINT8                           BiosEmbeddedFirmwareMajorRelease;\r
1038   UINT8                           BiosEmbeddedFirmwareMinorRelease;\r
1039 } EFI_MISC_BIOS_VENDOR_DATA;\r
1040 \r
1041 //\r
1042 //////////////////////////////////////////////////////////////////////////////\r
1043 //\r
1044 // Misc. System Manufacturer - SMBIOS Type 1\r
1045 //\r
1046 #define EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER 0x00000003\r
1047 \r
1048 typedef enum {\r
1049   EfiSystemWakeupTypeReserved        = 0,\r
1050   EfiSystemWakeupTypeOther           = 1,\r
1051   EfiSystemWakeupTypeUnknown         = 2,\r
1052   EfiSystemWakeupTypeApmTimer        = 3,\r
1053   EfiSystemWakeupTypeModemRing       = 4,\r
1054   EfiSystemWakeupTypeLanRemote       = 5,\r
1055   EfiSystemWakeupTypePowerSwitch     = 6,\r
1056   EfiSystemWakeupTypePciPme          = 7,\r
1057   EfiSystemWakeupTypeAcPowerRestored = 8,\r
1058 } EFI_MISC_SYSTEM_WAKEUP_TYPE;\r
1059 \r
1060 typedef struct {\r
1061   STRING_REF                      SystemManufacturer;\r
1062   STRING_REF                      SystemProductName;\r
1063   STRING_REF                      SystemVersion;\r
1064   STRING_REF                      SystemSerialNumber;\r
1065   EFI_GUID                        SystemUuid;\r
1066   EFI_MISC_SYSTEM_WAKEUP_TYPE     SystemWakeupType;\r
1067   STRING_REF                      SystemSKUNumber;\r
1068   STRING_REF                      SystemFamily;\r
1069 } EFI_MISC_SYSTEM_MANUFACTURER_DATA;\r
1070 \r
1071 //\r
1072 //////////////////////////////////////////////////////////////////////////////\r
1073 //\r
1074 // Misc. Base Board Manufacturer - SMBIOS Type 2\r
1075 //\r
1076 #define EFI_MISC_BASE_BOARD_MANUFACTURER_RECORD_NUMBER 0x00000004\r
1077 \r
1078 typedef struct {\r
1079   UINT32  Motherboard           :1;\r
1080   UINT32  RequiresDaughterCard  :1;\r
1081   UINT32  Removable             :1;\r
1082   UINT32  Replaceable           :1;\r
1083   UINT32  HotSwappable          :1;\r
1084   UINT32  Reserved              :27;\r
1085 } EFI_BASE_BOARD_FEATURE_FLAGS;\r
1086 \r
1087 typedef enum {\r
1088   EfiBaseBoardTypeUnknown                = 1,\r
1089   EfiBaseBoardTypeOther                  = 2,\r
1090   EfiBaseBoardTypeServerBlade            = 3,\r
1091   EfiBaseBoardTypeConnectivitySwitch     = 4,\r
1092   EfiBaseBoardTypeSystemManagementModule = 5,\r
1093   EfiBaseBoardTypeProcessorModule        = 6,\r
1094   EfiBaseBoardTypeIOModule               = 7,\r
1095   EfiBaseBoardTypeMemoryModule           = 8,\r
1096   EfiBaseBoardTypeDaughterBoard          = 9,\r
1097   EfiBaseBoardTypeMotherBoard            = 0xA,\r
1098   EfiBaseBoardTypeProcessorMemoryModule  = 0xB,\r
1099   EfiBaseBoardTypeProcessorIOModule      = 0xC,\r
1100   EfiBaseBoardTypeInterconnectBoard      = 0xD,\r
1101 } EFI_BASE_BOARD_TYPE;\r
1102 \r
1103 typedef struct {\r
1104   STRING_REF                      BaseBoardManufacturer;\r
1105   STRING_REF                      BaseBoardProductName;\r
1106   STRING_REF                      BaseBoardVersion;\r
1107   STRING_REF                      BaseBoardSerialNumber;\r
1108   STRING_REF                      BaseBoardAssetTag;\r
1109   STRING_REF                      BaseBoardChassisLocation;\r
1110   EFI_BASE_BOARD_FEATURE_FLAGS    BaseBoardFeatureFlags;\r
1111   EFI_BASE_BOARD_TYPE             BaseBoardType;\r
1112   EFI_INTER_LINK_DATA             BaseBoardChassisLink;\r
1113   UINT32                          BaseBoardNumberLinks;\r
1114   EFI_INTER_LINK_DATA             LinkN;\r
1115 } EFI_MISC_BASE_BOARD_MANUFACTURER_DATA;\r
1116 \r
1117 //\r
1118 //////////////////////////////////////////////////////////////////////////////\r
1119 //\r
1120 // Misc. System/Chassis Enclosure - SMBIOS Type 3\r
1121 //\r
1122 #define EFI_MISC_CHASSIS_MANUFACTURER_RECORD_NUMBER  0x00000005\r
1123 \r
1124 typedef enum {\r
1125   EfiMiscChassisTypeOther               = 0x1,\r
1126   EfiMiscChassisTypeUnknown             = 0x2,\r
1127   EfiMiscChassisTypeDeskTop             = 0x3,\r
1128   EfiMiscChassisTypeLowProfileDesktop   = 0x4,\r
1129   EfiMiscChassisTypePizzaBox            = 0x5,\r
1130   EfiMiscChassisTypeMiniTower           = 0x6,\r
1131   EfiMiscChassisTypeTower               = 0x7,\r
1132   EfiMiscChassisTypePortable            = 0x8,\r
1133   EfiMiscChassisTypeLapTop              = 0x9,\r
1134   EfiMiscChassisTypeNotebook            = 0xA,\r
1135   EfiMiscChassisTypeHandHeld            = 0xB,\r
1136   EfiMiscChassisTypeDockingStation      = 0xC,\r
1137   EfiMiscChassisTypeAllInOne            = 0xD,\r
1138   EfiMiscChassisTypeSubNotebook         = 0xE,\r
1139   EfiMiscChassisTypeSpaceSaving         = 0xF,\r
1140   EfiMiscChassisTypeLunchBox            = 0x10,\r
1141   EfiMiscChassisTypeMainServerChassis   = 0x11,\r
1142   EfiMiscChassisTypeExpansionChassis    = 0x12,\r
1143   EfiMiscChassisTypeSubChassis          = 0x13,\r
1144   EfiMiscChassisTypeBusExpansionChassis = 0x14,\r
1145   EfiMiscChassisTypePeripheralChassis   = 0x15,\r
1146   EfiMiscChassisTypeRaidChassis         = 0x16,\r
1147   EfiMiscChassisTypeRackMountChassis    = 0x17,\r
1148   EfiMiscChassisTypeSealedCasePc        = 0x18,\r
1149   EfiMiscChassisMultiSystemChassis      = 0x19,\r
1150 } EFI_MISC_CHASSIS_TYPE;\r
1151 \r
1152 typedef struct {\r
1153   UINT32  ChassisType       :16;\r
1154   UINT32  ChassisLockPresent:1;\r
1155   UINT32  Reserved          :15;\r
1156 } EFI_MISC_CHASSIS_STATUS;\r
1157 \r
1158 typedef enum {\r
1159   EfiChassisStateOther           = 0x01,\r
1160   EfiChassisStateUnknown         = 0x02,\r
1161   EfiChassisStateSafe            = 0x03,\r
1162   EfiChassisStateWarning         = 0x04,\r
1163   EfiChassisStateCritical        = 0x05,\r
1164   EfiChassisStateNonRecoverable  = 0x06,\r
1165 } EFI_MISC_CHASSIS_STATE;\r
1166 \r
1167 typedef enum {\r
1168   EfiChassisSecurityStatusOther                          = 0x01,\r
1169   EfiChassisSecurityStatusUnknown                        = 0x02,\r
1170   EfiChassisSecurityStatusNone                           = 0x03,\r
1171   EfiChassisSecurityStatusExternalInterfaceLockedOut     = 0x04,\r
1172   EfiChassisSecurityStatusExternalInterfaceLockedEnabled = 0x05,\r
1173 } EFI_MISC_CHASSIS_SECURITY_STATE;\r
1174 \r
1175 typedef struct {\r
1176   UINT32  RecordType  :1;\r
1177   UINT32  Reserved    :24;\r
1178 } EFI_MISC_ELEMENT_TYPE;\r
1179 \r
1180 typedef struct {\r
1181   EFI_MISC_ELEMENT_TYPE   ChassisElementType;\r
1182   EFI_INTER_LINK_DATA     ChassisElementStructure;\r
1183   EFI_BASE_BOARD_TYPE     ChassisBaseBoard;\r
1184   UINT32                  ChassisElementMinimum;\r
1185   UINT32                  ChassisElementMaximum;\r
1186 } EFI_MISC_ELEMENTS;\r
1187 \r
1188 typedef struct {\r
1189   STRING_REF                      ChassisManufacturer;\r
1190   STRING_REF                      ChassisVersion;\r
1191   STRING_REF                      ChassisSerialNumber;\r
1192   STRING_REF                      ChassisAssetTag;\r
1193   EFI_MISC_CHASSIS_STATUS         ChassisType;\r
1194   EFI_MISC_CHASSIS_STATE          ChassisBootupState;\r
1195   EFI_MISC_CHASSIS_STATE          ChassisPowerSupplyState;\r
1196   EFI_MISC_CHASSIS_STATE          ChassisThermalState;\r
1197   EFI_MISC_CHASSIS_SECURITY_STATE ChassisSecurityState;\r
1198   UINT32                          ChassisOemDefined;\r
1199   UINT32                          ChassisHeight;\r
1200   UINT32                          ChassisNumberPowerCords;\r
1201   UINT32                          ChassisElementCount;\r
1202   UINT32                          ChassisElementRecordLength;//\r
1203   EFI_MISC_ELEMENTS               ChassisElements;\r
1204 } EFI_MISC_CHASSIS_MANUFACTURER_DATA;\r
1205 \r
1206 //\r
1207 //////////////////////////////////////////////////////////////////////////////\r
1208 //\r
1209 // Misc. Port Connector Information - SMBIOS Type 8\r
1210 //\r
1211 #define EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_RECORD_NUMBER 0x00000006\r
1212 \r
1213 typedef enum {\r
1214   EfiPortConnectorTypeNone                   = 0x00,\r
1215   EfiPortConnectorTypeCentronics             = 0x01,\r
1216   EfiPortConnectorTypeMiniCentronics         = 0x02,\r
1217   EfiPortConnectorTypeProprietary            = 0x03,\r
1218   EfiPortConnectorTypeDB25Male               = 0x04,\r
1219   EfiPortConnectorTypeDB25Female             = 0x05,\r
1220   EfiPortConnectorTypeDB15Male               = 0x06,\r
1221   EfiPortConnectorTypeDB15Female             = 0x07,\r
1222   EfiPortConnectorTypeDB9Male                = 0x08,\r
1223   EfiPortConnectorTypeDB9Female              = 0x09,\r
1224   EfiPortConnectorTypeRJ11                   = 0x0A,\r
1225   EfiPortConnectorTypeRJ45                   = 0x0B,\r
1226   EfiPortConnectorType50PinMiniScsi          = 0x0C,\r
1227   EfiPortConnectorTypeMiniDin                = 0x0D,\r
1228   EfiPortConnectorTypeMicriDin               = 0x0E,\r
1229   EfiPortConnectorTypePS2                    = 0x0F,\r
1230   EfiPortConnectorTypeInfrared               = 0x10,\r
1231   EfiPortConnectorTypeHpHil                  = 0x11,\r
1232   EfiPortConnectorTypeUsb                    = 0x12,\r
1233   EfiPortConnectorTypeSsaScsi                = 0x13,\r
1234   EfiPortConnectorTypeCircularDin8Male       = 0x14,\r
1235   EfiPortConnectorTypeCircularDin8Female     = 0x15,\r
1236   EfiPortConnectorTypeOnboardIde             = 0x16,\r
1237   EfiPortConnectorTypeOnboardFloppy          = 0x17,\r
1238   EfiPortConnectorType9PinDualInline         = 0x18,\r
1239   EfiPortConnectorType25PinDualInline        = 0x19,\r
1240   EfiPortConnectorType50PinDualInline        = 0x1A,\r
1241   EfiPortConnectorType68PinDualInline        = 0x1B,\r
1242   EfiPortConnectorTypeOnboardSoundInput      = 0x1C,\r
1243   EfiPortConnectorTypeMiniCentronicsType14   = 0x1D,\r
1244   EfiPortConnectorTypeMiniCentronicsType26   = 0x1E,\r
1245   EfiPortConnectorTypeHeadPhoneMiniJack      = 0x1F,\r
1246   EfiPortConnectorTypeBNC                    = 0x20,\r
1247   EfiPortConnectorType1394                   = 0x21,\r
1248   EfiPortConnectorTypePC98                   = 0xA0,\r
1249   EfiPortConnectorTypePC98Hireso             = 0xA1,\r
1250   EfiPortConnectorTypePCH98                  = 0xA2,\r
1251   EfiPortConnectorTypePC98Note               = 0xA3,\r
1252   EfiPortConnectorTypePC98Full               = 0xA4,\r
1253   EfiPortConnectorTypeOther                  = 0xFF,\r
1254 } EFI_MISC_PORT_CONNECTOR_TYPE;\r
1255 \r
1256 typedef enum {\r
1257   EfiPortTypeNone                      = 0x00,\r
1258   EfiPortTypeParallelXtAtCompatible    = 0x01,\r
1259   EfiPortTypeParallelPortPs2           = 0x02,\r
1260   EfiPortTypeParallelPortEcp           = 0x03,\r
1261   EfiPortTypeParallelPortEpp           = 0x04,\r
1262   EfiPortTypeParallelPortEcpEpp        = 0x05,\r
1263   EfiPortTypeSerialXtAtCompatible      = 0x06,\r
1264   EfiPortTypeSerial16450Compatible     = 0x07,\r
1265   EfiPortTypeSerial16550Compatible     = 0x08,\r
1266   EfiPortTypeSerial16550ACompatible    = 0x09,\r
1267   EfiPortTypeScsi                      = 0x0A,\r
1268   EfiPortTypeMidi                      = 0x0B,\r
1269   EfiPortTypeJoyStick                  = 0x0C,\r
1270   EfiPortTypeKeyboard                  = 0x0D,\r
1271   EfiPortTypeMouse                     = 0x0E,\r
1272   EfiPortTypeSsaScsi                   = 0x0F,\r
1273   EfiPortTypeUsb                       = 0x10,\r
1274   EfiPortTypeFireWire                  = 0x11,\r
1275   EfiPortTypePcmciaTypeI               = 0x12,\r
1276   EfiPortTypePcmciaTypeII              = 0x13,\r
1277   EfiPortTypePcmciaTypeIII             = 0x14,\r
1278   EfiPortTypeCardBus                   = 0x15,\r
1279   EfiPortTypeAccessBusPort             = 0x16,\r
1280   EfiPortTypeScsiII                    = 0x17,\r
1281   EfiPortTypeScsiWide                  = 0x18,\r
1282   EfiPortTypePC98                      = 0x19,\r
1283   EfiPortTypePC98Hireso                = 0x1A,\r
1284   EfiPortTypePCH98                     = 0x1B,\r
1285   EfiPortTypeVideoPort                 = 0x1C,\r
1286   EfiPortTypeAudioPort                 = 0x1D,\r
1287   EfiPortTypeModemPort                 = 0x1E,\r
1288   EfiPortTypeNetworkPort               = 0x1F,\r
1289   EfiPortType8251Compatible            = 0xA0,\r
1290   EfiPortType8251FifoCompatible        = 0xA1,\r
1291   EfiPortTypeOther                     = 0xFF,\r
1292 } EFI_MISC_PORT_TYPE;\r
1293 \r
1294 typedef struct {\r
1295   STRING_REF                    PortInternalConnectorDesignator;\r
1296   STRING_REF                    PortExternalConnectorDesignator;\r
1297   EFI_MISC_PORT_CONNECTOR_TYPE  PortInternalConnectorType;\r
1298   EFI_MISC_PORT_CONNECTOR_TYPE  PortExternalConnectorType;\r
1299   EFI_MISC_PORT_TYPE            PortType;\r
1300   EFI_MISC_PORT_DEVICE_PATH     PortPath;\r
1301 } EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA;\r
1302 \r
1303 //\r
1304 //////////////////////////////////////////////////////////////////////////////\r
1305 //\r
1306 // Misc. System Slots - SMBIOS Type 9\r
1307 //\r
1308 #define EFI_MISC_SYSTEM_SLOT_DESIGNATION_RECORD_NUMBER 0x00000007\r
1309 \r
1310 typedef enum {\r
1311   EfiSlotTypeOther                        = 0x01,\r
1312   EfiSlotTypeUnknown                      = 0x02,\r
1313   EfiSlotTypeIsa                          = 0x03,\r
1314   EfiSlotTypeMca                          = 0x04,\r
1315   EfiSlotTypeEisa                         = 0x05,\r
1316   EfiSlotTypePci                          = 0x06,\r
1317   EfiSlotTypePcmcia                       = 0x07,\r
1318   EfiSlotTypeVlVesa                       = 0x08,\r
1319   EfiSlotTypeProprietary                  = 0x09,\r
1320   EfiSlotTypeProcessorCardSlot            = 0x0A,\r
1321   EfiSlotTypeProprietaryMemoryCardSlot    = 0x0B,\r
1322   EfiSlotTypeIORiserCardSlot              = 0x0C,\r
1323   EfiSlotTypeNuBus                        = 0x0D,\r
1324   EfiSlotTypePci66MhzCapable              = 0x0E,\r
1325   EfiSlotTypeAgp                          = 0x0F,\r
1326   EfiSlotTypeApg2X                        = 0x10,\r
1327   EfiSlotTypeAgp4X                        = 0x11,\r
1328   EfiSlotTypePciX                         = 0x12,\r
1329   EfiSlotTypeAgp4x                        = 0x13,\r
1330   EfiSlotTypePC98C20                      = 0xA0,\r
1331   EfiSlotTypePC98C24                      = 0xA1,\r
1332   EfiSlotTypePC98E                        = 0xA2,\r
1333   EfiSlotTypePC98LocalBus                 = 0xA3,\r
1334   EfiSlotTypePC98Card                     = 0xA4,\r
1335   EfiSlotTypePciExpress                   = 0xA5\r
1336 } EFI_MISC_SLOT_TYPE;\r
1337 \r
1338 typedef enum {\r
1339   EfiSlotDataBusWidthOther      = 0x01,\r
1340   EfiSlotDataBusWidthUnknown    = 0x02,\r
1341   EfiSlotDataBusWidth8Bit       = 0x03,\r
1342   EfiSlotDataBusWidth16Bit      = 0x04,\r
1343   EfiSlotDataBusWidth32Bit      = 0x05,\r
1344   EfiSlotDataBusWidth64Bit      = 0x06,\r
1345   EfiSlotDataBusWidth128Bit     = 0x07,\r
1346 } EFI_MISC_SLOT_DATA_BUS_WIDTH;\r
1347 \r
1348 typedef enum {\r
1349   EfiSlotUsageOther     = 1,\r
1350   EfiSlotUsageUnknown   = 2,\r
1351   EfiSlotUsageAvailable = 3,\r
1352   EfiSlotUsageInUse     = 4,\r
1353 } EFI_MISC_SLOT_USAGE;\r
1354 \r
1355 typedef enum {\r
1356   EfiSlotLengthOther   = 1,\r
1357   EfiSlotLengthUnknown = 2,\r
1358   EfiSlotLengthShort   = 3,\r
1359   EfiSlotLengthLong    = 4\r
1360 } EFI_MISC_SLOT_LENGTH;\r
1361 \r
1362 typedef struct {\r
1363   UINT32  CharacteristicsUnknown  :1;\r
1364   UINT32  Provides50Volts         :1;\r
1365   UINT32  Provides33Volts         :1;\r
1366   UINT32  SharedSlot              :1;\r
1367   UINT32  PcCard16Supported       :1;\r
1368   UINT32  CardBusSupported        :1;\r
1369   UINT32  ZoomVideoSupported      :1;\r
1370   UINT32  ModemRingResumeSupported:1;\r
1371   UINT32  PmeSignalSupported      :1;\r
1372   UINT32  HotPlugDevicesSupported :1;\r
1373   UINT32  SmbusSignalSupported    :1;\r
1374   UINT32  Reserved                :21;\r
1375 } EFI_MISC_SLOT_CHARACTERISTICS;\r
1376 \r
1377 typedef struct {\r
1378   STRING_REF                    SlotDesignation;\r
1379   EFI_MISC_SLOT_TYPE            SlotType;\r
1380   EFI_MISC_SLOT_DATA_BUS_WIDTH  SlotDataBusWidth;\r
1381   EFI_MISC_SLOT_USAGE           SlotUsage;\r
1382   EFI_MISC_SLOT_LENGTH          SlotLength;\r
1383   UINT16                        SlotId;\r
1384   EFI_MISC_SLOT_CHARACTERISTICS SlotCharacteristics;\r
1385   EFI_DEVICE_PATH_PROTOCOL      SlotDevicePath;\r
1386 } EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA;\r
1387 \r
1388 //\r
1389 //////////////////////////////////////////////////////////////////////////////\r
1390 //\r
1391 // Misc. Onboard Device - SMBIOS Type 10\r
1392 //\r
1393 #define EFI_MISC_ONBOARD_DEVICE_RECORD_NUMBER 0x00000008\r
1394 \r
1395 typedef enum {\r
1396   EfiOnBoardDeviceTypeOther          = 1,\r
1397   EfiOnBoardDeviceTypeUnknown        = 2,\r
1398   EfiOnBoardDeviceTypeVideo          = 3,\r
1399   EfiOnBoardDeviceTypeScsiController = 4,\r
1400   EfiOnBoardDeviceTypeEthernet       = 5,\r
1401   EfiOnBoardDeviceTypeTokenRing      = 6,\r
1402   EfiOnBoardDeviceTypeSound          = 7,\r
1403 } EFI_MISC_ONBOARD_DEVICE_TYPE;\r
1404 \r
1405 typedef struct {\r
1406   UINT32  DeviceType    :16;\r
1407   UINT32  DeviceEnabled :1;\r
1408   UINT32  Reserved      :15;\r
1409 } EFI_MISC_ONBOARD_DEVICE_STATUS;\r
1410 \r
1411 typedef struct {\r
1412   STRING_REF                           OnBoardDeviceDescription;\r
1413   EFI_MISC_ONBOARD_DEVICE_STATUS       OnBoardDeviceStatus;\r
1414   EFI_DEVICE_PATH_PROTOCOL             OnBoardDevicePath;\r
1415 } EFI_MISC_ONBOARD_DEVICE_DATA;\r
1416 \r
1417 //\r
1418 //////////////////////////////////////////////////////////////////////////////\r
1419 //\r
1420 // Misc. BIOS Language Information - SMBIOS Type 11\r
1421 //\r
1422 #define EFI_MISC_OEM_STRING_RECORD_NUMBER 0x00000009\r
1423 \r
1424 typedef struct {\r
1425   STRING_REF                          OemStringRef[1];\r
1426 } EFI_MISC_OEM_STRING_DATA;\r
1427 \r
1428 //\r
1429 //////////////////////////////////////////////////////////////////////////////\r
1430 //\r
1431 // Misc. System Options - SMBIOS Type 12\r
1432 //\r
1433 typedef struct {\r
1434   STRING_REF                          SystemOptionStringRef[1];\r
1435 } EFI_MISC_SYSTEM_OPTION_STRING_DATA;\r
1436 \r
1437 #define EFI_MISC_SYSTEM_OPTION_STRING_RECORD_NUMBER 0x0000000A\r
1438 \r
1439 //\r
1440 //////////////////////////////////////////////////////////////////////////////\r
1441 //\r
1442 // Misc. Number of Installable Languages - SMBIOS Type 13\r
1443 //\r
1444 #define EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_RECORD_NUMBER 0x0000000B\r
1445 \r
1446 typedef struct {\r
1447   UINT32                              AbbreviatedLanguageFormat :1;\r
1448   UINT32                              Reserved                  :31;\r
1449 } EFI_MISC_LANGUAGE_FLAGS;\r
1450 \r
1451 typedef struct {\r
1452   UINT16                              NumberOfInstallableLanguages;\r
1453   EFI_MISC_LANGUAGE_FLAGS             LanguageFlags;\r
1454   UINT16                              CurrentLanguageNumber;\r
1455 } EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA;\r
1456 \r
1457 //\r
1458 //////////////////////////////////////////////////////////////////////////////\r
1459 //\r
1460 // Misc. System Language String\r
1461 //\r
1462 #define EFI_MISC_SYSTEM_LANGUAGE_STRING_RECORD_NUMBER 0x0000000C\r
1463 \r
1464 typedef struct {\r
1465   UINT16                              LanguageId;\r
1466   STRING_REF                          SystemLanguageString;\r
1467 } EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA;\r
1468 \r
1469 //\r
1470 //////////////////////////////////////////////////////////////////////////////\r
1471 //\r
1472 // Group Associations - SMBIOS Type 14\r
1473 //\r
1474 #define EFI_MISC_GROUP_NAME_RECORD_NUMBER          0x0000000D\r
1475 \r
1476 typedef struct {\r
1477   STRING_REF               GroupName;\r
1478   UINT16                   NumberGroupItems;\r
1479   UINT16                   GroupId;\r
1480 } EFI_MISC_GROUP_NAME_DATA;\r
1481 \r
1482 //\r
1483 //////////////////////////////////////////////////////////////////////////////\r
1484 //\r
1485 // Group Item Set Element\r
1486 //\r
1487 #define EFI_MISC_GROUP_ITEM_SET_RECORD_NUMBER      0x0000000E\r
1488 \r
1489 typedef struct {\r
1490   EFI_GUID                 SubClass;\r
1491   EFI_INTER_LINK_DATA      GroupLink;\r
1492   UINT16                   GroupId;\r
1493   UINT16                   GroupElementId;\r
1494 } EFI_MISC_GROUP_ITEM_SET_DATA;\r
1495 \r
1496 //\r
1497 //////////////////////////////////////////////////////////////////////////////\r
1498 //\r
1499 //  Misc. Pointing Device Type - SMBIOS Type 21\r
1500 //\r
1501 #define EFI_MISC_POINTING_DEVICE_TYPE_RECORD_NUMBER 0x0000000F\r
1502 \r
1503 typedef enum {\r
1504   EfiPointingDeviceTypeOther         = 0x01,\r
1505   EfiPointingDeviceTypeUnknown       = 0x02,\r
1506   EfiPointingDeviceTypeMouse         = 0x03,\r
1507   EfiPointingDeviceTypeTrackBall     = 0x04,\r
1508   EfiPointingDeviceTypeTrackPoint    = 0x05,\r
1509   EfiPointingDeviceTypeGlidePoint    = 0x06,\r
1510   EfiPointingDeviceTouchPad          = 0x07,\r
1511   EfiPointingDeviceTouchScreen       = 0x08,\r
1512   EfiPointingDeviceOpticalSensor     = 0x09,\r
1513 } EFI_MISC_POINTING_DEVICE_TYPE;\r
1514 \r
1515 typedef enum {\r
1516   EfiPointingDeviceInterfaceOther              = 0x01,\r
1517   EfiPointingDeviceInterfaceUnknown            = 0x02,\r
1518   EfiPointingDeviceInterfaceSerial             = 0x03,\r
1519   EfiPointingDeviceInterfacePs2                = 0x04,\r
1520   EfiPointingDeviceInterfaceInfrared           = 0x05,\r
1521   EfiPointingDeviceInterfaceHpHil              = 0x06,\r
1522   EfiPointingDeviceInterfaceBusMouse           = 0x07,\r
1523   EfiPointingDeviceInterfaceADB                = 0x08,\r
1524   EfiPointingDeviceInterfaceBusMouseDB9        = 0xA0,\r
1525   EfiPointingDeviceInterfaceBusMouseMicroDin   = 0xA1,\r
1526   EfiPointingDeviceInterfaceUsb                = 0xA2,\r
1527 } EFI_MISC_POINTING_DEVICE_INTERFACE;\r
1528 \r
1529 typedef struct {\r
1530   EFI_MISC_POINTING_DEVICE_TYPE       PointingDeviceType;\r
1531   EFI_MISC_POINTING_DEVICE_INTERFACE  PointingDeviceInterface;\r
1532   UINT16                              NumberPointingDeviceButtons;\r
1533   EFI_DEVICE_PATH_PROTOCOL            PointingDevicePath;\r
1534 } EFI_MISC_PORTING_DEVICE_TYPE_DATA;\r
1535 \r
1536 //\r
1537 //////////////////////////////////////////////////////////////////////////////\r
1538 //\r
1539 // Portable Battery - SMBIOS Type 22\r
1540 //\r
1541 #define EFI_MISC_BATTERY_LOCATION_RECORD_NUMBER  0x00000010\r
1542 \r
1543 typedef enum {\r
1544   EfiBatteryDeviceChemistryTypeOther               = 0x01,\r
1545   EfiBatteryDeviceChemistryTypeUnknown             = 0x02,\r
1546   EfiBatteryDeviceChemistryTypeLeadAcid            = 0x03,\r
1547   EfiBatteryDeviceChemistryTypeNickelCadmium       = 0x04,\r
1548   EfiBatteryDeviceChemistryTypeNickelMetalHydride  = 0x05,\r
1549   EfiBatteryDeviceChemistryTypeLithiumIon          = 0x06,\r
1550   EfiBatteryDeviceChemistryTypeZincAir             = 0x07,\r
1551   EfiBatteryDeviceChemistryTypeLithiumPolymer      = 0x08,\r
1552 } EFI_MISC_BATTERY_DEVICE_CHEMISTRY;\r
1553 \r
1554 typedef struct  {\r
1555   UINT32 Date              :5;\r
1556   UINT32 Month             :4;\r
1557   UINT32 Year              :7;\r
1558   UINT32 Reserved          :16;\r
1559 } EFI_MISC_BATTERY_SBDS_MANUFACTURE_DATE;\r
1560 \r
1561 typedef struct {\r
1562   STRING_REF                         BatteryLocation;\r
1563   STRING_REF                         BatteryManufacturer;\r
1564   STRING_REF                         BatteryManufactureDate;\r
1565   STRING_REF                         BatterySerialNumber;\r
1566   STRING_REF                         BatteryDeviceName;\r
1567   STRING_REF                         BatterySbdsVersionNumber;\r
1568   STRING_REF                         BatterySbdsDeviceChemistry;\r
1569   EFI_MISC_BATTERY_DEVICE_CHEMISTRY  BatteryDeviceChemistry;\r
1570   EFI_EXP_BASE10_DATA                BatteryDesignCapacity;\r
1571   EFI_EXP_BASE10_DATA                BatteryDesignVoltage;\r
1572   UINT16                             BatteryMaximumError;\r
1573   UINT16                             BatterySbdsSerialNumber;\r
1574   EFI_MISC_BATTERY_SBDS_MANUFACTURE_DATE\r
1575                                      BatterySbdsManufacturingDate;\r
1576   UINT32                             BatteryOemSpecific;\r
1577 } EFI_MISC_BATTERY_LOCATION_DATA;\r
1578 \r
1579 //\r
1580 //////////////////////////////////////////////////////////////////////////////\r
1581 //\r
1582 // Misc. Reset Capabilities - SMBIOS Type 23\r
1583 //\r
1584 #define EFI_MISC_RESET_CAPABILITIES_RECORD_NUMBER 0x00000011\r
1585 \r
1586 typedef struct {\r
1587   UINT32  Status              :1;\r
1588   UINT32  BootOption          :2;\r
1589   UINT32  BootOptionOnLimit   :2;\r
1590   UINT32  WatchdogTimerPresent:1;\r
1591   UINT32  Reserved            :26;\r
1592 } EFI_MISC_RESET_CAPABILITIES_TYPE;\r
1593 \r
1594 typedef struct {\r
1595   EFI_MISC_RESET_CAPABILITIES_TYPE  ResetCapabilities;\r
1596   UINT16                            ResetCount;\r
1597   UINT16                            ResetLimit;\r
1598   UINT16                            ResetTimerInterval;\r
1599   UINT16                            ResetTimeout;\r
1600 } EFI_MISC_RESET_CAPABILITIES;\r
1601 \r
1602 typedef struct {\r
1603     EFI_MISC_RESET_CAPABILITIES   ResetCapabilities;\r
1604     UINT16                        ResetCount;\r
1605     UINT16                        ResetLimit;\r
1606     UINT16                        ResetTimerInterval;\r
1607     UINT16                        ResetTimeout;\r
1608 } EFI_MISC_RESET_CAPABILITIES_DATA;\r
1609 \r
1610 //\r
1611 //////////////////////////////////////////////////////////////////////////////\r
1612 //\r
1613 // Misc. Hardware Security - SMBIOS Type 24\r
1614 //\r
1615 #define EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA_RECORD_NUMBER 0x00000012\r
1616 \r
1617 typedef enum {\r
1618   EfiHardwareSecurityStatusDisabled       = 0,\r
1619   EfiHardwareSecurityStatusEnabled        = 1,\r
1620   EfiHardwareSecurityStatusNotImplemented = 2,\r
1621   EfiHardwareSecurityStatusUnknown        = 3\r
1622 } EFI_MISC_HARDWARE_SECURITY_STATUS;\r
1623 \r
1624 typedef struct {\r
1625   EFI_MISC_HARDWARE_SECURITY_STATUS   FrontPanelResetStatus       :2;\r
1626   EFI_MISC_HARDWARE_SECURITY_STATUS   AdministratorPasswordStatus :2;\r
1627   EFI_MISC_HARDWARE_SECURITY_STATUS   KeyboardPasswordStatus      :2;\r
1628   EFI_MISC_HARDWARE_SECURITY_STATUS   PowerOnPasswordStatus       :2;\r
1629   EFI_MISC_HARDWARE_SECURITY_STATUS   Reserved                    :24;\r
1630 } EFI_MISC_HARDWARE_SECURITY_SETTINGS;\r
1631 \r
1632 typedef struct {\r
1633   EFI_MISC_HARDWARE_SECURITY_SETTINGS HardwareSecuritySettings;\r
1634 } EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA;\r
1635 \r
1636 //\r
1637 //////////////////////////////////////////////////////////////////////////////\r
1638 //\r
1639 // System Power Controls - SMBIOS Type 25\r
1640 //\r
1641 #define EFI_MISC_SCHEDULED_POWER_ON_MONTH_RECORD_NUMBER  0x00000013\r
1642 \r
1643 typedef struct {\r
1644   UINT16             ScheduledPoweronMonth;\r
1645   UINT16             ScheduledPoweronDayOfMonth;\r
1646   UINT16             ScheduledPoweronHour;\r
1647   UINT16             ScheduledPoweronMinute;\r
1648   UINT16             ScheduledPoweronSecond;\r
1649 } EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA;\r
1650 \r
1651 //\r
1652 //////////////////////////////////////////////////////////////////////////////\r
1653 //\r
1654 // Voltage Probe - SMBIOS Type 26\r
1655 //\r
1656 #define EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_RECORD_NUMBER  0x00000014\r
1657 \r
1658 typedef struct {\r
1659   UINT32 VoltageProbeSite        :5;\r
1660   UINT32 VoltageProbeStatus      :3;\r
1661   UINT32 Reserved                :24;\r
1662 } EFI_MISC_VOLTAGE_PROBE_LOCATION;\r
1663 \r
1664 typedef struct {\r
1665   STRING_REF                      VoltageProbeDescription;\r
1666   EFI_MISC_VOLTAGE_PROBE_LOCATION VoltageProbeLocation;\r
1667   EFI_EXP_BASE10_DATA             VoltageProbeMaximumValue;\r
1668   EFI_EXP_BASE10_DATA             VoltageProbeMinimumValue;\r
1669   EFI_EXP_BASE10_DATA             VoltageProbeResolution;\r
1670   EFI_EXP_BASE10_DATA             VoltageProbeTolerance;\r
1671   EFI_EXP_BASE10_DATA             VoltageProbeAccuracy;\r
1672   EFI_EXP_BASE10_DATA             VoltageProbeNominalValue;\r
1673   EFI_EXP_BASE10_DATA             MDLowerNoncriticalThreshold;\r
1674   EFI_EXP_BASE10_DATA             MDUpperNoncriticalThreshold;\r
1675   EFI_EXP_BASE10_DATA             MDLowerCriticalThreshold;\r
1676   EFI_EXP_BASE10_DATA             MDUpperCriticalThreshold;\r
1677   EFI_EXP_BASE10_DATA             MDLowerNonrecoverableThreshold;\r
1678   EFI_EXP_BASE10_DATA             MDUpperNonrecoverableThreshold;\r
1679   UINT32                          VoltageProbeOemDefined;\r
1680 } EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA;\r
1681 \r
1682 //\r
1683 //////////////////////////////////////////////////////////////////////////////\r
1684 //\r
1685 // Cooling Device - SMBIOS Type 27\r
1686 //\r
1687 #define EFI_MISC_COOLING_DEVICE_TEMP_LINK_RECORD_NUMBER   0x00000015\r
1688 \r
1689 typedef struct {\r
1690   UINT32 CoolingDevice                 :5;\r
1691   UINT32 CoolingDeviceStatus           :3;\r
1692   UINT32 Reserved                      :24;\r
1693 } EFI_MISC_COOLING_DEVICE_TYPE;\r
1694 \r
1695 typedef struct {\r
1696   EFI_MISC_COOLING_DEVICE_TYPE   CoolingDeviceType;\r
1697   EFI_INTER_LINK_DATA            CoolingDeviceTemperatureLink;\r
1698   UINT16                         CoolingDeviceUnitGroup;\r
1699   EFI_EXP_BASE10_DATA            CoolingDeviceNominalSpeed;\r
1700   UINT32                         CoolingDeviceOemDefined;\r
1701 } EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA;\r
1702 \r
1703 //\r
1704 //////////////////////////////////////////////////////////////////////////////\r
1705 //\r
1706 // Temperature Probe - SMBIOS Type 28\r
1707 //\r
1708 #define EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_RECORD_NUMBER   0x00000016\r
1709 \r
1710 typedef struct {\r
1711   UINT32 TemperatureProbeSite          :5;\r
1712   UINT32 TemperatureProbeStatus        :3;\r
1713   UINT32 Reserved                      :24;\r
1714 } EFI_MISC_TEMPERATURE_PROBE_LOCATION;\r
1715 \r
1716 typedef struct {\r
1717   STRING_REF               TemperatureProbeDescription;\r
1718   EFI_MISC_TEMPERATURE_PROBE_LOCATION\r
1719                            TemperatureProbeLocation;\r
1720   EFI_EXP_BASE10_DATA      TemperatureProbeMaximumValue;\r
1721   EFI_EXP_BASE10_DATA      TemperatureProbeMinimumValue;\r
1722   EFI_EXP_BASE10_DATA      TemperatureProbeResolution;\r
1723   EFI_EXP_BASE10_DATA      TemperatureProbeTolerance;\r
1724   EFI_EXP_BASE10_DATA      TemperatureProbeAccuracy;\r
1725   EFI_EXP_BASE10_DATA      TemperatureProbeNominalValue;\r
1726   EFI_EXP_BASE10_DATA      MDLowerNoncriticalThreshold;\r
1727   EFI_EXP_BASE10_DATA      MDUpperNoncriticalThreshold;\r
1728   EFI_EXP_BASE10_DATA      MDLowerCriticalThreshold;\r
1729   EFI_EXP_BASE10_DATA      MDUpperCriticalThreshold;\r
1730   EFI_EXP_BASE10_DATA      MDLowerNonrecoverableThreshold;\r
1731   EFI_EXP_BASE10_DATA      MDUpperNonrecoverableThreshold;\r
1732   UINT32                   TemperatureProbeOemDefined;\r
1733 } EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA;\r
1734 \r
1735 //\r
1736 //////////////////////////////////////////////////////////////////////////////\r
1737 //\r
1738 // Electrical Current Probe - SMBIOS Type 29\r
1739 //\r
1740 \r
1741 #define EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_RECORD_NUMBER  0x00000017\r
1742 \r
1743 typedef struct {\r
1744   UINT32 ElectricalCurrentProbeSite    :5;\r
1745   UINT32 ElectricalCurrentProbeStatus  :3;\r
1746   UINT32 Reserved                      :24;\r
1747 } EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION;\r
1748 \r
1749 typedef struct {\r
1750   STRING_REF               ElectricalCurrentProbeDescription;\r
1751   EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION\r
1752                            ElectricalCurrentProbeLocation;\r
1753   EFI_EXP_BASE10_DATA      ElectricalCurrentProbeMaximumValue;\r
1754   EFI_EXP_BASE10_DATA      ElectricalCurrentProbeMinimumValue;\r
1755   EFI_EXP_BASE10_DATA      ElectricalCurrentProbeResolution;\r
1756   EFI_EXP_BASE10_DATA      ElectricalCurrentProbeTolerance;\r
1757   EFI_EXP_BASE10_DATA      ElectricalCurrentProbeAccuracy;\r
1758   EFI_EXP_BASE10_DATA      ElectricalCurrentProbeNominalValue;\r
1759   EFI_EXP_BASE10_DATA      MDLowerNoncriticalThreshold;\r
1760   EFI_EXP_BASE10_DATA      MDUpperNoncriticalThreshold;\r
1761   EFI_EXP_BASE10_DATA      MDLowerCriticalThreshold;\r
1762   EFI_EXP_BASE10_DATA      MDUpperCriticalThreshold;\r
1763   EFI_EXP_BASE10_DATA      MDLowerNonrecoverableThreshold;\r
1764   EFI_EXP_BASE10_DATA      MDUpperNonrecoverableThreshold;\r
1765   UINT32                   ElectricalCurrentProbeOemDefined;\r
1766 } EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA;\r
1767 \r
1768 //\r
1769 //////////////////////////////////////////////////////////////////////////////\r
1770 //\r
1771 // Out-of-Band Remote Access - SMBIOS Type 30\r
1772 //\r
1773 \r
1774 #define EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_RECORD_NUMBER  0x00000018\r
1775 \r
1776 typedef struct  {\r
1777   UINT32 InboundConnectionEnabled            :1;\r
1778   UINT32 OutboundConnectionEnabled           :1;\r
1779   UINT32 Reserved                            :30;\r
1780 } EFI_MISC_REMOTE_ACCESS_CONNECTIONS;\r
1781 \r
1782 typedef struct {\r
1783   STRING_REF                             RemoteAccessManufacturerNameDescription;\r
1784   EFI_MISC_REMOTE_ACCESS_CONNECTIONS     RemoteAccessConnections;\r
1785 } EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA;\r
1786 \r
1787 //\r
1788 //////////////////////////////////////////////////////////////////////////////\r
1789 //\r
1790 // Misc. BIS Entry Point - SMBIOS Type 31\r
1791 //\r
1792 #define EFI_MISC_BIS_ENTRY_POINT_RECORD_NUMBER          0x00000019\r
1793 \r
1794 typedef struct {\r
1795   EFI_PHYSICAL_ADDRESS       BisEntryPoint;\r
1796 } EFI_MISC_BIS_ENTRY_POINT_DATA;\r
1797 \r
1798 //\r
1799 //////////////////////////////////////////////////////////////////////////////\r
1800 //\r
1801 // Misc. Boot Information - SMBIOS Type 32\r
1802 //\r
1803 #define EFI_MISC_BOOT_INFORMATION_STATUS_RECORD_NUMBER  0x0000001A\r
1804 \r
1805 typedef enum {\r
1806   EfiBootInformationStatusNoError                  = 0x00,\r
1807   EfiBootInformationStatusNoBootableMedia          = 0x01,\r
1808   EfiBootInformationStatusNormalOSFailedLoading    = 0x02,\r
1809   EfiBootInformationStatusFirmwareDetectedFailure  = 0x03,\r
1810   EfiBootInformationStatusOSDetectedFailure        = 0x04,\r
1811   EfiBootInformationStatusUserRequestedBoot        = 0x05,\r
1812   EfiBootInformationStatusSystemSecurityViolation  = 0x06,\r
1813   EfiBootInformationStatusPreviousRequestedImage   = 0x07,\r
1814   EfiBootInformationStatusWatchdogTimerExpired     = 0x08,\r
1815   EfiBootInformationStatusStartReserved            = 0x09,\r
1816   EfiBootInformationStatusStartOemSpecific         = 0x80,\r
1817   EfiBootInformationStatusStartProductSpecific     = 0xC0,\r
1818 } EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE;\r
1819 \r
1820 typedef struct {\r
1821   EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE BootInformationStatus;\r
1822   UINT8                                      BootInformationData[9];\r
1823 } EFI_MISC_BOOT_INFORMATION_STATUS_DATA;\r
1824 \r
1825 //\r
1826 //////////////////////////////////////////////////////////////////////////////\r
1827 //\r
1828 // Management Device - SMBIOS Type 34\r
1829 //\r
1830 #define EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_RECORD_NUMBER   0x0000001B\r
1831 \r
1832 typedef enum {\r
1833   EfiManagementDeviceTypeOther      = 0x01,\r
1834   EfiManagementDeviceTypeUnknown    = 0x02,\r
1835   EfiManagementDeviceTypeLm75       = 0x03,\r
1836   EfiManagementDeviceTypeLm78       = 0x04,\r
1837   EfiManagementDeviceTypeLm79       = 0x05,\r
1838   EfiManagementDeviceTypeLm80       = 0x06,\r
1839   EfiManagementDeviceTypeLm81       = 0x07,\r
1840   EfiManagementDeviceTypeAdm9240    = 0x08,\r
1841   EfiManagementDeviceTypeDs1780     = 0x09,\r
1842   EfiManagementDeviceTypeMaxim1617  = 0x0A,\r
1843   EfiManagementDeviceTypeGl518Sm    = 0x0B,\r
1844   EfiManagementDeviceTypeW83781D    = 0x0C,\r
1845   EfiManagementDeviceTypeHt82H791   = 0x0D,\r
1846 } EFI_MISC_MANAGEMENT_DEVICE_TYPE;\r
1847 \r
1848 typedef enum {\r
1849   EfiManagementDeviceAddressTypeOther   = 1,\r
1850   EfiManagementDeviceAddressTypeUnknown = 2,\r
1851   EfiManagementDeviceAddressTypeIOPort  = 3,\r
1852   EfiManagementDeviceAddressTypeMemory  = 4,\r
1853   EfiManagementDeviceAddressTypeSmbus   = 5\r
1854 } EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE;\r
1855 \r
1856 typedef struct {\r
1857   STRING_REF                       ManagementDeviceDescription;\r
1858   EFI_MISC_MANAGEMENT_DEVICE_TYPE  ManagementDeviceType;\r
1859   UINTN                            ManagementDeviceAddress;\r
1860   EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE\r
1861                                    ManagementDeviceAddressType;\r
1862 } EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA;\r
1863 \r
1864 //\r
1865 //////////////////////////////////////////////////////////////////////////////\r
1866 //\r
1867 // Management Device Component - SMBIOS Type 35\r
1868 //\r
1869 \r
1870 #define EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_RECORD_NUMBER  0x0000001C\r
1871 \r
1872 typedef struct {\r
1873   STRING_REF               ManagementDeviceComponentDescription;\r
1874   EFI_INTER_LINK_DATA      ManagementDeviceLink;\r
1875   EFI_INTER_LINK_DATA      ManagementDeviceComponentLink;\r
1876   EFI_INTER_LINK_DATA      ManagementDeviceThresholdLink;\r
1877 } EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA;\r
1878 \r
1879 //\r
1880 //////////////////////////////////////////////////////////////////////////////\r
1881 //\r
1882 // IPMI Data Record - SMBIOS Type 38\r
1883 //\r
1884 typedef enum {\r
1885   EfiIpmiOther = 0,\r
1886   EfiIpmiKcs   = 1,\r
1887   EfiIpmiSmic  = 2,\r
1888   EfiIpmiBt    = 3,\r
1889 } EFI_MISC_IPMI_INTERFACE_TYPE;\r
1890 \r
1891 typedef struct {\r
1892   UINT16  IpmiSpecLeastSignificantDigit:4;\r
1893   UINT16  IpmiSpecMostSignificantDigit: 4;\r
1894   UINT16  Reserved:                     8;\r
1895 } EFI_MISC_IPMI_SPECIFICATION_REVISION;\r
1896 \r
1897 typedef struct {\r
1898   EFI_MISC_IPMI_INTERFACE_TYPE          IpmiInterfaceType;\r
1899   EFI_MISC_IPMI_SPECIFICATION_REVISION  IpmiSpecificationRevision;\r
1900   UINT16                                IpmiI2CSlaveAddress;\r
1901   UINT16                                IpmiNvDeviceAddress;\r
1902   UINT64                                IpmiBaseAddress;\r
1903   EFI_DEVICE_PATH_PROTOCOL              IpmiDevicePath;\r
1904 } EFI_MISC_IPMI_INTERFACE_TYPE_DATA;\r
1905 \r
1906 #define EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER  0x0000001D\r
1907 \r
1908 //\r
1909 //////////////////////////////////////////////////////////////////////////////\r
1910 //\r
1911 //System Power supply Record - SMBIOS Type 39\r
1912 //\r
1913 typedef struct {\r
1914   UINT16  PowerSupplyHotReplaceable  :1;\r
1915   UINT16  PowerSupplyPresent         :1;\r
1916   UINT16  PowerSupplyUnplugged       :1;\r
1917   UINT16  InputVoltageRangeSwitch    :4;\r
1918   UINT16  PowerSupplyStatus          :3;\r
1919   UINT16  PowerSupplyType            :4;\r
1920   UINT16  Reserved                   :2;\r
1921 } POWER_SUPPLY_CHARACTERISTICS;\r
1922 \r
1923 typedef struct {\r
1924   UINT8                           PowerUnitGroup;\r
1925   STRING_REF                      PowerSupplyLocation;\r
1926   STRING_REF                      PowerSupplyDeviceName;\r
1927   STRING_REF                      PowerSupplyManufacturer;\r
1928   STRING_REF                      PowerSupplySerialNumber;\r
1929   STRING_REF                      PowerSupplyAssetTagNumber;\r
1930   STRING_REF                      PowerSupplyModelPartNumber;\r
1931   STRING_REF                      PowerSupplyRevisionLevel;\r
1932   UINT16                          PowerSupplyMaxPowerCapacity;\r
1933   POWER_SUPPLY_CHARACTERISTICS    PowerSupplyCharacteristics;\r
1934   EFI_INTER_LINK_DATA             PowerSupplyInputVoltageProbeLink;\r
1935   EFI_INTER_LINK_DATA             PowerSupplyCoolingDeviceLink;\r
1936   EFI_INTER_LINK_DATA             PowerSupplyInputCurrentProbeLink;\r
1937 } EFI_MISC_SYSTEM_POWER_SUPPLY_DATA;\r
1938 \r
1939 #define EFI_MISC_SYSTEM_POWER_SUPPLY_RECORD_NUMBER 0x0000001E\r
1940 \r
1941 //\r
1942 //////////////////////////////////////////////////////////////////////////////\r
1943 //\r
1944 // OEM Data Record - SMBIOS Type 0x80-0xFF\r
1945 //\r
1946 typedef struct {\r
1947   UINT8       Type;\r
1948   UINT8       Length;\r
1949   UINT16      Handle;\r
1950 } SMBIOS_STRUCTURE_HDR;\r
1951 \r
1952 typedef struct {\r
1953   SMBIOS_STRUCTURE_HDR          Header;\r
1954   UINT8                         RawData[1];\r
1955 } EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA;\r
1956 \r
1957 #define EFI_MISC_SMBIOS_STRUCT_ENCAP_RECORD_NUMBER  0x0000001F\r
1958 \r
1959 //\r
1960 //////////////////////////////////////////////////////////////////////////////\r
1961 //\r
1962 //  Misc. System Event Log  - SMBIOS Type 15\r
1963 //\r
1964 #define EFI_MISC_SYSTEM_EVENT_LOG_RECORD_NUMBER 0x00000020\r
1965 typedef struct {\r
1966   //SMBIOS_STRUCTURE_HDR  Header;\r
1967   UINT16                LogAreaLength;\r
1968   UINT16                LogHeaderStartOffset;\r
1969   UINT16                LogDataStartOffset;\r
1970   UINT8                 AccessMethod;\r
1971   UINT8                 LogStatus;\r
1972   UINT32                LogChangeToken;\r
1973   UINT32                AccessMethodAddress;\r
1974   UINT8                 LogHeaderFormat;\r
1975   UINT8                 NumberOfSupportedLogType;\r
1976   UINT8                 LengthOfLogDescriptor;\r
1977 } EFI_MISC_SYSTEM_EVENT_LOG_DATA;\r
1978 \r
1979 //\r
1980 // Access Method.\r
1981 //  0x00~0x04:  as following definition\r
1982 //  0x05~0x7f:  Available for future assignment.\r
1983 //  0x80~0xff:  BIOS Vendor/OEM-specific.\r
1984 // \r
1985 #define ACCESS_INDEXIO_1INDEX8BIT_DATA8BIT    0x00\r
1986 #define ACCESS_INDEXIO_2INDEX8BIT_DATA8BIT    0X01\r
1987 #define ACCESS_INDEXIO_1INDEX16BIT_DATA8BIT   0X02\r
1988 #define ACCESS_MEMORY_MAPPED                  0x03\r
1989 #define ACCESS_GPNV                           0x04\r
1990 \r
1991 //\r
1992 //////////////////////////////////////////////////////////////////////////////\r
1993 //\r
1994 //Management Device Threshold Data Record - SMBIOS Type 36\r
1995 //\r
1996 #define EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD_RECORD_NUMBER  0x00000021\r
1997 \r
1998 typedef struct {\r
1999   UINT16                          LowerThresNonCritical;\r
2000   UINT16                          UpperThresNonCritical;\r
2001   UINT16                          LowerThresCritical;\r
2002   UINT16                          UpperThresCritical;\r
2003   UINT16                          LowerThresNonRecover;\r
2004   UINT16                          UpperThresNonRecover;\r
2005 } EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD;\r
2006 \r
2007 //\r
2008 // Declare the following strutures alias to use them more conviniently.\r
2009 //\r
2010 typedef EFI_MISC_LAST_PCI_BUS_DATA                        EFI_MISC_LAST_PCI_BUS;\r
2011 typedef EFI_MISC_BIOS_VENDOR_DATA                         EFI_MISC_BIOS_VENDOR;\r
2012 typedef EFI_MISC_SYSTEM_MANUFACTURER_DATA                 EFI_MISC_SYSTEM_MANUFACTURER;\r
2013 typedef EFI_MISC_BASE_BOARD_MANUFACTURER_DATA             EFI_MISC_BASE_BOARD_MANUFACTURER;\r
2014 typedef EFI_MISC_CHASSIS_MANUFACTURER_DATA                EFI_MISC_CHASSIS_MANUFACTURER;\r
2015 typedef EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA  EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR;\r
2016 typedef EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA             EFI_MISC_SYSTEM_SLOT_DESIGNATION;\r
2017 typedef EFI_MISC_ONBOARD_DEVICE_DATA                      EFI_MISC_ONBOARD_DEVICE;\r
2018 typedef EFI_MISC_PORTING_DEVICE_TYPE_DATA                 EFI_MISC_ONBOARD_DEVICE_TYPE_DATA;\r
2019 typedef EFI_MISC_OEM_STRING_DATA                          EFI_MISC_OEM_STRING;\r
2020 typedef EFI_MISC_SYSTEM_OPTION_STRING_DATA                EFI_MISC_SYSTEM_OPTION_STRING;\r
2021 typedef EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA     EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES;\r
2022 typedef EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA              EFI_MISC_SYSTEM_LANGUAGE_STRING;\r
2023 typedef EFI_MISC_SYSTEM_EVENT_LOG_DATA                    EFI_MISC_SYSTEM_EVENT_LOG;\r
2024 typedef EFI_MISC_BIS_ENTRY_POINT_DATA                     EFI_MISC_BIS_ENTRY_POINT;\r
2025 typedef EFI_MISC_BOOT_INFORMATION_STATUS_DATA             EFI_MISC_BOOT_INFORMATION_STATUS;\r
2026 typedef EFI_MISC_SYSTEM_POWER_SUPPLY_DATA                 EFI_MISC_SYSTEM_POWER_SUPPLY;\r
2027 typedef EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA         EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION;\r
2028 \r
2029 typedef union {\r
2030   EFI_MISC_LAST_PCI_BUS_DATA                         LastPciBus;\r
2031   EFI_MISC_BIOS_VENDOR_DATA                          MiscBiosVendor;\r
2032   EFI_MISC_SYSTEM_MANUFACTURER_DATA                  MiscSystemManufacturer;\r
2033   EFI_MISC_BASE_BOARD_MANUFACTURER_DATA              MiscBaseBoardManufacturer;\r
2034   EFI_MISC_CHASSIS_MANUFACTURER_DATA                 MiscChassisManufacturer;\r
2035   EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA   MiscPortInternalConnectorDesignator;\r
2036   EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA              MiscSystemSlotDesignation;\r
2037   EFI_MISC_ONBOARD_DEVICE_DATA                       MiscOnboardDevice;\r
2038   EFI_MISC_OEM_STRING_DATA                           MiscOemString;\r
2039   EFI_MISC_SYSTEM_OPTION_STRING_DATA                 MiscOptionString;\r
2040   EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA      NumberOfInstallableLanguages;\r
2041   EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA               MiscSystemLanguageString;\r
2042   EFI_MISC_SYSTEM_EVENT_LOG_DATA                     MiscSystemEventLog;\r
2043   EFI_MISC_GROUP_NAME_DATA                           MiscGroupNameData;\r
2044   EFI_MISC_GROUP_ITEM_SET_DATA                       MiscGroupItemSetData;\r
2045   EFI_MISC_PORTING_DEVICE_TYPE_DATA                  MiscPortingDeviceTypeData;\r
2046   EFI_MISC_RESET_CAPABILITIES_DATA                   MiscResetCapablilitiesData;\r
2047   EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA           MiscHardwareSecuritySettingsData;\r
2048   EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA             MiscScheduledPowerOnMonthData;\r
2049   EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA            MiscVoltagePorbeDescriptionData;\r
2050   EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA             MiscCoolingDeviceTempLinkData;\r
2051   EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA        MiscTemperatureProbeDescriptionData;\r
2052   EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA MiscElectricalCurrentProbeDescriptionData;\r
2053   EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA\r
2054                                                      MiscRemoteAccessManufacturerDescriptionData;\r
2055   EFI_MISC_BIS_ENTRY_POINT_DATA                      MiscBisEntryPoint;\r
2056   EFI_MISC_BOOT_INFORMATION_STATUS_DATA              MiscBootInformationStatus;\r
2057   EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA        MiscMangementDeviceDescriptionData;\r
2058   EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA\r
2059                                                      MiscmangementDeviceComponentDescriptionData;\r
2060   EFI_MISC_IPMI_INTERFACE_TYPE_DATA                  MiscIpmiInterfaceTypeData;\r
2061   EFI_MISC_SYSTEM_POWER_SUPPLY_DATA                  MiscPowerSupplyInfo;\r
2062   EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA          MiscSmbiosStructEncapsulation;\r
2063   EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD               MiscManagementDeviceThreshold;\r
2064 } EFI_MISC_SUBCLASS_RECORDS;\r
2065 \r
2066 //\r
2067 //\r
2068 //\r
2069 typedef struct {\r
2070   EFI_SUBCLASS_TYPE1_HEADER       Header;\r
2071   EFI_MISC_SUBCLASS_RECORDS       Record;\r
2072 } EFI_MISC_SUBCLASS_DRIVER_DATA;\r
2073 \r
2074 #pragma pack()\r
2075 \r
2076 //\r
2077 // Sub Class Header type1\r
2078 //\r
2079 \r
2080 #define EFI_SUBCLASS_INSTANCE_RESERVED       0\r
2081 #define EFI_SUBCLASS_INSTANCE_NON_APPLICABLE 0xFFFF  //16 bit\r
2082 \r
2083 #endif\r