]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkPkg/Include/Framework/DataHubRecords.h
according to DataHubSubclass spec, all fields of data record should be naturally...
[mirror_edk2.git] / IntelFrameworkPkg / Include / Framework / DataHubRecords.h
CommitLineData
4a71b21a 1/** @file\r
79964ac8 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
b80fbe85 27#include <PiPei.h>\r
28#include <Protocol/DevicePath.h>\r
8bc7aa6a 29#include <Protocol/FrameworkHii.h>\r
b80fbe85 30\r
b66be4ca 31#define EFI_PROCESSOR_SUBCLASS_VERSION 0x0100\r
79964ac8 32\r
79964ac8 33#pragma pack(1)\r
34\r
35typedef struct _USB_PORT_DEVICE_PATH {\r
9205b2d7 36 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;\r
37 PCI_DEVICE_PATH PciBusDevicePath;\r
38 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;\r
79964ac8 39} USB_PORT_DEVICE_PATH;\r
40\r
41//\r
42// IDE\r
43//\r
44typedef struct _IDE_DEVICE_PATH {\r
9205b2d7 45 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;\r
46 PCI_DEVICE_PATH PciBusDevicePath;\r
47 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;\r
79964ac8 48} IDE_DEVICE_PATH;\r
49\r
50//\r
51// RMC Connector\r
52//\r
53typedef struct _RMC_CONN_DEVICE_PATH {\r
9205b2d7 54 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;\r
55 PCI_DEVICE_PATH PciBridgeDevicePath;\r
56 PCI_DEVICE_PATH PciBusDevicePath;\r
57 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;\r
79964ac8 58} RMC_CONN_DEVICE_PATH;\r
59\r
60//\r
61// RIDE\r
62//\r
63typedef struct _RIDE_DEVICE_PATH {\r
9205b2d7 64 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;\r
65 PCI_DEVICE_PATH PciBridgeDevicePath;\r
66 PCI_DEVICE_PATH PciBusDevicePath;\r
67 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;\r
79964ac8 68} RIDE_DEVICE_PATH;\r
69\r
70//\r
71// Gigabit NIC\r
72//\r
73typedef struct _GB_NIC_DEVICE_PATH {\r
9205b2d7 74 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;\r
75 PCI_DEVICE_PATH PciBridgeDevicePath;\r
76 PCI_DEVICE_PATH PciXBridgeDevicePath;\r
77 PCI_DEVICE_PATH PciXBusDevicePath;\r
78 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;\r
79964ac8 79} GB_NIC_DEVICE_PATH;\r
80\r
81//\r
82// P/S2 Connector\r
83//\r
84typedef struct _PS2_CONN_DEVICE_PATH {\r
9205b2d7 85 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;\r
86 PCI_DEVICE_PATH LpcBridgeDevicePath;\r
87 ACPI_HID_DEVICE_PATH LpcBusDevicePath;\r
88 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;\r
79964ac8 89} PS2_CONN_DEVICE_PATH;\r
90\r
91//\r
92// Serial Port Connector\r
93//\r
94typedef struct _SERIAL_CONN_DEVICE_PATH {\r
9205b2d7 95 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;\r
96 PCI_DEVICE_PATH LpcBridgeDevicePath;\r
97 ACPI_HID_DEVICE_PATH LpcBusDevicePath;\r
98 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;\r
79964ac8 99} SERIAL_CONN_DEVICE_PATH;\r
100\r
101//\r
102// Parallel Port Connector\r
103//\r
104typedef struct _PARALLEL_CONN_DEVICE_PATH {\r
9205b2d7 105 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;\r
106 PCI_DEVICE_PATH LpcBridgeDevicePath;\r
107 ACPI_HID_DEVICE_PATH LpcBusDevicePath;\r
108 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;\r
79964ac8 109} PARALLEL_CONN_DEVICE_PATH;\r
110\r
111//\r
112// Floopy Connector\r
113//\r
114typedef struct _FLOOPY_CONN_DEVICE_PATH {\r
9205b2d7 115 ACPI_HID_DEVICE_PATH PciRootBridgeDevicePath;\r
116 PCI_DEVICE_PATH LpcBridgeDevicePath;\r
117 ACPI_HID_DEVICE_PATH LpcBusDevicePath;\r
118 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;\r
79964ac8 119} FLOOPY_CONN_DEVICE_PATH;\r
120\r
2b47aaa6 121///\r
122/// Inconsistent with specification here: \r
123/// In MiscSubclass spec0.9, this data structure and corrsponding fields are NOT defined.\r
124/// It's implementation-specific to simplify the code logic.\r
125///\r
79964ac8 126typedef union _EFI_MISC_PORT_DEVICE_PATH {\r
9205b2d7 127 USB_PORT_DEVICE_PATH UsbDevicePath;\r
128 IDE_DEVICE_PATH IdeDevicePath;\r
129 RMC_CONN_DEVICE_PATH RmcConnDevicePath;\r
130 RIDE_DEVICE_PATH RideDevicePath;\r
131 GB_NIC_DEVICE_PATH GbNicDevicePath;\r
132 PS2_CONN_DEVICE_PATH Ps2ConnDevicePath;\r
133 SERIAL_CONN_DEVICE_PATH SerialConnDevicePath;\r
134 PARALLEL_CONN_DEVICE_PATH ParallelConnDevicePath;\r
135 FLOOPY_CONN_DEVICE_PATH FloppyConnDevicePath;\r
79964ac8 136} EFI_MISC_PORT_DEVICE_PATH;\r
137\r
138#pragma pack()\r
470d0b27 139///\r
140/// Each data record that is a member of some subclass starts with a standard \r
141/// header of type EFI_SUBCLASS_TYPE1_HEADER.\r
142/// This header is only a guideline and applicable only to a data \r
143/// subclass that is producing SMBIOS data records. A subclass can start with a \r
144/// different header if needed. \r
145///\r
79964ac8 146typedef struct {\r
470d0b27 147 ///\r
148 /// The version of the specification to which a specific subclass data record adheres. \r
149 ///\r
9205b2d7 150 UINT32 Version;\r
470d0b27 151 ///\r
152 /// The size in bytes of this data class header. \r
153 ///\r
9205b2d7 154 UINT32 HeaderSize;\r
470d0b27 155 ///\r
156 /// The instance number of the subclass with the same ProducerName. This number is \r
157 /// applicable in cases where multiple subclass instances that were produced by the same \r
158 /// driver exist in the system. This entry is 1 based; 0 means Reserved and -1 means Not \r
159 /// Applicable. All data consumer drivers should be able to handle all the possible values \r
160 /// of Instance, including Not Applicable and Reserved. \r
161 ///\r
9205b2d7 162 UINT16 Instance;\r
470d0b27 163 ///\r
164 /// The instance number of the RecordType for the same Instance. This number is \r
165 /// applicable in cases where multiple instances of the RecordType exist for a specific \r
166 /// Instance. This entry is 1 based; 0 means Reserved and -1 means Not Applicable. \r
167 /// All data consumer drivers should be able to handle all the possible values of \r
168 /// SubInstance, including Not Applicable and Reserved. \r
169 ///\r
9205b2d7 170 UINT16 SubInstance;\r
470d0b27 171 ///\r
172 /// The record number for the data record being specified. The numbering scheme and \r
173 /// definition is defined in the specific subclass specification. \r
174 ///\r
9205b2d7 175 UINT32 RecordType;\r
79964ac8 176} EFI_SUBCLASS_TYPE1_HEADER;\r
177\r
470d0b27 178///\r
179/// This structure is used to link data records in the same subclasses. A data record is \r
180/// defined as a link to another data record in the same subclass using this structure. \r
181///\r
79964ac8 182typedef struct {\r
470d0b27 183 ///\r
184 /// An EFI_GUID that identifies the component that produced this data record. Type \r
185 /// EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification. \r
186 ///\r
9205b2d7 187 EFI_GUID ProducerName;\r
470d0b27 188 ///\r
189 /// The instance number of the subclass with the same ProducerName. This number is \r
190 /// applicable in cases where multiple subclass instances that were produced by the same \r
191 /// driver exist in the system. This entry is 1 based; 0 means Reserved and -1 means Not \r
192 /// Applicable. All data consumer drivers should be able to handle all the possible values \r
193 /// of Instance, including Not Applicable and Reserved. \r
194 ///\r
9205b2d7 195 UINT16 Instance;\r
470d0b27 196 /// The instance number of the RecordType for the same Instance. This number is \r
197 /// applicable in cases where multiple instances of the RecordType exist for a specific \r
198 /// Instance. This entry is 1 based; 0 means Reserved and -1 means Not Applicable. \r
199 /// All data consumer drivers should be able to handle all the possible values of \r
200 /// SubInstance, including Not Applicable and Reserved. \r
9205b2d7 201 UINT16 SubInstance;\r
79964ac8 202} EFI_INTER_LINK_DATA;\r
203\r
79964ac8 204//\r
205// EXP data\r
206//\r
470d0b27 207///\r
208/// This macro provides a calculation for base-10 representations. Value and Exponent are each \r
209/// INT16. It is signed to cover negative values and is 16 bits wide (15 bits for data and 1 bit\r
210/// for the sign). \r
211///\r
79964ac8 212typedef struct {\r
470d0b27 213 ///\r
214 /// The INT16 number by which to multiply the base-10 representation. \r
215 ///\r
9205b2d7 216 UINT16 Value;\r
470d0b27 217 ///\r
218 /// The INT16 number by which to raise the base-10 calculation. \r
219 ///\r
9205b2d7 220 UINT16 Exponent;\r
79964ac8 221} EFI_EXP_BASE2_DATA;\r
222\r
470d0b27 223///\r
224/// This macro provides a calculation for base-2 representations. Value and Exponent are each \r
225/// INT16. It is 16 bits wide and is unsigned to mean nonnegative values. \r
226///\r
df2b7d51 227typedef struct {\r
470d0b27 228 ///\r
229 /// The INT16 number by which to multiply the base-2 representation.\r
230 ///\r
b66be4ca 231 INT16 Value;\r
470d0b27 232 ///\r
233 /// The INT16 number by which to raise the base-2 calculation. \r
234 ///\r
b66be4ca 235 INT16 Exponent;\r
df2b7d51 236} EFI_EXP_BASE10_DATA;\r
237\r
9205b2d7 238typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA;\r
239typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_MAX_FSB_FREQUENCY_DATA;\r
240typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_CORE_FREQUENCY_DATA;\r
470d0b27 241\r
242///\r
243/// This data record refers to the list of frequencies that the processor core supports. The list of \r
244/// supported frequencies is determined by the firmware based on hardware capabilities--for example, \r
245/// it could be a common subset of all processors and the chipset. The unit of measurement of this data \r
246/// record is in Hertz. For asynchronous processors, the content of this data record is zero. \r
247/// The list is terminated by -1 in the Value field of the last element. A Value field of zero means \r
248/// that the processor/driver supports automatic frequency selection. \r
249///\r
2cbfdae3 250/// Inconsistent with specification here: \r
251/// It's a typo of MiscSubclass 0.9 spec. It should be a pointer since it refers to a list of frequencies.\r
252///\r
9205b2d7 253typedef EFI_EXP_BASE10_DATA *EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA;\r
470d0b27 254\r
255///\r
256/// This data record refers to the list of supported frequencies of the processor external bus. The list of \r
257/// supported frequencies is determined by the firmware based on hardware capabilities--for example, \r
258/// it could be a common subset of all processors and the chipset. The unit of measurement of this data \r
259/// record is in Hertz. For asynchronous processors, the content of this data record is NULL. \r
260/// The list is terminated by -1 in the Value field of the last element. A Value field of zero means \r
261/// that the processor/driver supports automatic frequency selection. \r
262///\r
9205b2d7 263typedef EFI_EXP_BASE10_DATA *EFI_PROCESSOR_FSB_FREQUENCY_LIST_DATA;\r
264typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_FSB_FREQUENCY_DATA;\r
265typedef STRING_REF EFI_PROCESSOR_VERSION_DATA;\r
266typedef STRING_REF EFI_PROCESSOR_MANUFACTURER_DATA;\r
267typedef STRING_REF EFI_PROCESSOR_SERIAL_NUMBER_DATA;\r
268typedef STRING_REF EFI_PROCESSOR_ASSET_TAG_DATA;\r
269\r
270typedef struct {\r
271 UINT32 ProcessorSteppingId:4;\r
272 UINT32 ProcessorModel: 4;\r
273 UINT32 ProcessorFamily: 4;\r
274 UINT32 ProcessorType: 2;\r
275 UINT32 ProcessorReserved1: 2;\r
276 UINT32 ProcessorXModel: 4;\r
277 UINT32 ProcessorXFamily: 8;\r
278 UINT32 ProcessorReserved2: 4;\r
79964ac8 279} EFI_PROCESSOR_SIGNATURE;\r
280\r
281typedef struct {\r
b66be4ca 282 UINT32 ProcessorBrandIndex :8;\r
283 UINT32 ProcessorClflush :8;\r
284 UINT32 LogicalProcessorCount :8;\r
285 UINT32 ProcessorDfltApicId :8;\r
79964ac8 286} EFI_PROCESSOR_MISC_INFO;\r
287\r
288typedef struct {\r
9205b2d7 289 UINT32 ProcessorFpu: 1;\r
290 UINT32 ProcessorVme: 1;\r
291 UINT32 ProcessorDe: 1;\r
292 UINT32 ProcessorPse: 1;\r
293 UINT32 ProcessorTsc: 1;\r
294 UINT32 ProcessorMsr: 1;\r
295 UINT32 ProcessorPae: 1;\r
296 UINT32 ProcessorMce: 1;\r
297 UINT32 ProcessorCx8: 1;\r
298 UINT32 ProcessorApic: 1;\r
299 UINT32 ProcessorReserved1: 1;\r
300 UINT32 ProcessorSep: 1;\r
301 UINT32 ProcessorMtrr: 1;\r
302 UINT32 ProcessorPge: 1;\r
303 UINT32 ProcessorMca: 1;\r
304 UINT32 ProcessorCmov: 1;\r
305 UINT32 ProcessorPat: 1;\r
306 UINT32 ProcessorPse36: 1;\r
307 UINT32 ProcessorPsn: 1;\r
308 UINT32 ProcessorClfsh: 1;\r
309 UINT32 ProcessorReserved2: 1;\r
310 UINT32 ProcessorDs: 1;\r
311 UINT32 ProcessorAcpi: 1;\r
312 UINT32 ProcessorMmx: 1;\r
313 UINT32 ProcessorFxsr: 1;\r
314 UINT32 ProcessorSse: 1;\r
315 UINT32 ProcessorSse2: 1;\r
316 UINT32 ProcessorSs: 1;\r
317 UINT32 ProcessorReserved3: 1;\r
318 UINT32 ProcessorTm: 1;\r
319 UINT32 ProcessorReserved4: 2;\r
79964ac8 320} EFI_PROCESSOR_FEATURE_FLAGS;\r
321\r
470d0b27 322///\r
323/// This data record refers to the unique ID that identifies a set of processors. This data record is 16 \r
324/// bytes in length. The data in this structure is processor specific and reserved values can be defined \r
325/// for future use. The consumer of this data should not make any assumption and should use this data \r
326/// with respect to the processor family defined in the Family record number. \r
327///\r
79964ac8 328typedef struct {\r
470d0b27 329 ///\r
330 /// Identifies the processor.\r
331 ///\r
9205b2d7 332 EFI_PROCESSOR_SIGNATURE Signature;\r
470d0b27 333 ///\r
334 /// Provides additional processor information. \r
335 ///\r
9205b2d7 336 EFI_PROCESSOR_MISC_INFO MiscInfo;\r
470d0b27 337 ///\r
338 /// Reserved for future use. \r
339 ///\r
9205b2d7 340 UINT32 Reserved;\r
470d0b27 341 ///\r
342 /// Provides additional processor information. \r
343 ///\r
9205b2d7 344 EFI_PROCESSOR_FEATURE_FLAGS FeatureFlags;\r
79964ac8 345} EFI_PROCESSOR_ID_DATA;\r
346\r
470d0b27 347///\r
348/// This data record refers to the general classification of the processor. This data record is 4 bytes in \r
349/// length. \r
350///\r
79964ac8 351typedef enum {\r
352 EfiProcessorOther = 1,\r
353 EfiProcessorUnknown = 2,\r
354 EfiCentralProcessor = 3,\r
355 EfiMathProcessor = 4,\r
356 EfiDspProcessor = 5,\r
357 EfiVideoProcessor = 6\r
358} EFI_PROCESSOR_TYPE_DATA;\r
359\r
470d0b27 360///\r
361/// This data record refers to the family of the processor as defined by the DMTF. \r
362/// This data record is 4 bytes in length. \r
363///\r
79964ac8 364typedef enum {\r
a244f400 365 EfiProcessorFamilyOther = 0x01, \r
366 EfiProcessorFamilyUnknown = 0x02,\r
367 EfiProcessorFamily8086 = 0x03, \r
368 EfiProcessorFamily80286 = 0x04,\r
369 EfiProcessorFamilyIntel386 = 0x05, \r
370 EfiProcessorFamilyIntel486 = 0x06,\r
371 EfiProcessorFamily8087 = 0x07,\r
372 EfiProcessorFamily80287 = 0x08,\r
373 EfiProcessorFamily80387 = 0x09, \r
374 EfiProcessorFamily80487 = 0x0A,\r
375 EfiProcessorFamilyPentium = 0x0B, \r
376 EfiProcessorFamilyPentiumPro = 0x0C,\r
377 EfiProcessorFamilyPentiumII = 0x0D,\r
378 EfiProcessorFamilyPentiumMMX = 0x0E,\r
379 EfiProcessorFamilyCeleron = 0x0F,\r
380 EfiProcessorFamilyPentiumIIXeon = 0x10,\r
381 EfiProcessorFamilyPentiumIII = 0x11, \r
382 EfiProcessorFamilyM1 = 0x12,\r
383 EfiProcessorFamilyM2 = 0x13,\r
384 EfiProcessorFamilyM1Reserved2 = 0x14,\r
385 EfiProcessorFamilyM1Reserved3 = 0x15,\r
386 EfiProcessorFamilyM1Reserved4 = 0x16,\r
387 EfiProcessorFamilyM1Reserved5 = 0x17,\r
388 EfiProcessorFamilyAmdDuron = 0x18,\r
389 EfiProcessorFamilyK5 = 0x19, \r
390 EfiProcessorFamilyK6 = 0x1A,\r
391 EfiProcessorFamilyK6_2 = 0x1B,\r
392 EfiProcessorFamilyK6_3 = 0x1C,\r
393 EfiProcessorFamilyAmdAthlon = 0x1D,\r
394 EfiProcessorFamilyAmd29000 = 0x1E,\r
395 EfiProcessorFamilyK6_2Plus = 0x1F,\r
396 EfiProcessorFamilyPowerPC = 0x20,\r
397 EfiProcessorFamilyPowerPC601 = 0x21,\r
398 EfiProcessorFamilyPowerPC603 = 0x22,\r
399 EfiProcessorFamilyPowerPC603Plus = 0x23,\r
400 EfiProcessorFamilyPowerPC604 = 0x24,\r
401 EfiProcessorFamilyPowerPC620 = 0x25,\r
402 EfiProcessorFamilyPowerPCx704 = 0x26,\r
403 EfiProcessorFamilyPowerPC750 = 0x27,\r
404 EfiProcessorFamilyAlpha3 = 0x30,\r
405 EfiProcessorFamilyAlpha21064 = 0x31,\r
406 EfiProcessorFamilyAlpha21066 = 0x32,\r
407 EfiProcessorFamilyAlpha21164 = 0x33,\r
408 EfiProcessorFamilyAlpha21164PC = 0x34,\r
409 EfiProcessorFamilyAlpha21164a = 0x35,\r
410 EfiProcessorFamilyAlpha21264 = 0x36,\r
411 EfiProcessorFamilyAlpha21364 = 0x37,\r
412 EfiProcessorFamilyMips = 0x40,\r
413 EfiProcessorFamilyMIPSR4000 = 0x41,\r
414 EfiProcessorFamilyMIPSR4200 = 0x42,\r
415 EfiProcessorFamilyMIPSR4400 = 0x43,\r
416 EfiProcessorFamilyMIPSR4600 = 0x44,\r
417 EfiProcessorFamilyMIPSR10000 = 0x45,\r
418 EfiProcessorFamilySparc = 0x50,\r
419 EfiProcessorFamilySuperSparc = 0x51,\r
420 EfiProcessorFamilymicroSparcII = 0x52,\r
421 EfiProcessorFamilymicroSparcIIep = 0x53,\r
422 EfiProcessorFamilyUltraSparc = 0x54,\r
423 EfiProcessorFamilyUltraSparcII = 0x55,\r
424 EfiProcessorFamilyUltraSparcIIi = 0x56,\r
425 EfiProcessorFamilyUltraSparcIII = 0x57,\r
b66be4ca 426 ///\r
427 /// Inconsistent with specification here: \r
428 /// This field in ProcSubClass spec0.9 is defined as EfiProcessorFamilyUltraSparcIIi, it's a typo.\r
429 ///\r
a244f400 430 EfiProcessorFamilyUltraSparcIIIi = 0x58,\r
431 EfiProcessorFamily68040 = 0x60,\r
432 EfiProcessorFamily68xxx = 0x61,\r
433 EfiProcessorFamily68000 = 0x62,\r
434 EfiProcessorFamily68010 = 0x63,\r
435 EfiProcessorFamily68020 = 0x64,\r
436 EfiProcessorFamily68030 = 0x65,\r
437 EfiProcessorFamilyHobbit = 0x70,\r
438 EfiProcessorFamilyCrusoeTM5000 = 0x78,\r
439 EfiProcessorFamilyCrusoeTM3000 = 0x79,\r
440 EfiProcessorFamilyEfficeonTM8000 = 0x7A,\r
441 EfiProcessorFamilyWeitek = 0x80,\r
442 EfiProcessorFamilyItanium = 0x82,\r
443 EfiProcessorFamilyAmdAthlon64 = 0x83,\r
444 EfiProcessorFamilyAmdOpteron = 0x84,\r
445 EfiProcessorFamilyAmdSempron = 0x85,\r
446 EfiProcessorFamilyAmdTurion64Mobile = 0x86,\r
447 EfiProcessorFamilyDualCoreAmdOpteron = 0x87,\r
448 EfiProcessorFamilyAmdAthlon64X2DualCore = 0x88,\r
449 EfiProcessorFamilyAmdTurion64X2Mobile = 0x89,\r
450 EfiProcessorFamilyPARISC = 0x90,\r
451 EfiProcessorFamilyPaRisc8500 = 0x91,\r
452 EfiProcessorFamilyPaRisc8000 = 0x92,\r
453 EfiProcessorFamilyPaRisc7300LC = 0x93,\r
454 EfiProcessorFamilyPaRisc7200 = 0x94,\r
455 EfiProcessorFamilyPaRisc7100LC = 0x95,\r
456 EfiProcessorFamilyPaRisc7100 = 0x96,\r
457 EfiProcessorFamilyV30 = 0xA0,\r
458 EfiProcessorFamilyPentiumIIIXeon = 0xB0,\r
459 EfiProcessorFamilyPentiumIIISpeedStep = 0xB1,\r
460 EfiProcessorFamilyPentium4 = 0xB2,\r
461 EfiProcessorFamilyIntelXeon = 0xB3,\r
462 EfiProcessorFamilyAS400 = 0xB4,\r
463 EfiProcessorFamilyIntelXeonMP = 0xB5,\r
464 EfiProcessorFamilyAMDAthlonXP = 0xB6,\r
465 EfiProcessorFamilyAMDAthlonMP = 0xB7,\r
466 EfiProcessorFamilyIntelItanium2 = 0xB8,\r
b66be4ca 467 ///\r
468 /// Inconsistent with specification here: \r
469 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
470 ///\r
a244f400 471 EfiProcessorFamilyIntelPentiumM = 0xB9,\r
b66be4ca 472 ///\r
473 /// Inconsistent with specification here: \r
474 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
475 ///\r
a244f400 476 EfiProcessorFamilyIntelCeleronD = 0xBA,\r
b66be4ca 477 ///\r
478 /// Inconsistent with specification here: \r
479 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
480 ///\r
a244f400 481 EfiProcessorFamilyIntelPentiumD = 0xBB,\r
b66be4ca 482 ///\r
483 /// Inconsistent with specification here: \r
484 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
485 ///\r
a244f400 486 EfiProcessorFamilyIntelPentiumEx = 0xBC,\r
b66be4ca 487 ///\r
488 /// Inconsistent with specification here: \r
489 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
490 ///\r
491 EfiProcessorFamilyIntelCoreSolo = 0xBD, \r
492 ///\r
493 /// Inconsistent with specification here: \r
494 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
495 ///\r
496 EfiProcessorFamilyReserved = 0xBE, \r
497 ///\r
498 /// Inconsistent with specification here: \r
499 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
500 ///\r
a244f400 501 EfiProcessorFamilyIntelCore2 = 0xBF,\r
502 EfiProcessorFamilyIBM390 = 0xC8,\r
503 EfiProcessorFamilyG4 = 0xC9,\r
504 EfiProcessorFamilyG5 = 0xCA,\r
b66be4ca 505 ///\r
506 /// Inconsistent with specification here: \r
507 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
508 ///\r
a244f400 509 EfiProcessorFamilyG6 = 0xCB,\r
b66be4ca 510 ///\r
511 /// Inconsistent with specification here: \r
512 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
513 ///\r
a244f400 514 EfiProcessorFamilyzArchitectur = 0xCC,\r
b66be4ca 515 ///\r
516 /// Inconsistent with specification here: \r
517 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
518 ///\r
a244f400 519 EfiProcessorFamilyViaC7M = 0xD2,\r
b66be4ca 520 ///\r
521 /// Inconsistent with specification here: \r
522 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
523 ///\r
a244f400 524 EfiProcessorFamilyViaC7D = 0xD3,\r
b66be4ca 525 ///\r
526 /// Inconsistent with specification here: \r
527 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
528 ///\r
a244f400 529 EfiProcessorFamilyViaC7 = 0xD4,\r
b66be4ca 530 ///\r
531 /// Inconsistent with specification here: \r
532 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
533 ///\r
a244f400 534 EfiProcessorFamilyViaEden = 0xD5,\r
535 EfiProcessorFamilyi860 = 0xFA,\r
536 EfiProcessorFamilyi960 = 0xFB,\r
b66be4ca 537 ///\r
538 /// Inconsistent with specification here: \r
539 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
540 ///\r
a244f400 541 EfiProcessorFamilyIndicatorFamily2 = 0xFE,\r
b66be4ca 542 ///\r
543 /// Inconsistent with specification here: \r
544 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
545 ///\r
a244f400 546 EfiProcessorFamilyReserved1 = 0xFF\r
79964ac8 547} EFI_PROCESSOR_FAMILY_DATA;\r
548\r
470d0b27 549///\r
550/// This data record refers to the core voltage of the processor being defined. The unit of measurement \r
551/// of this data record is in volts. \r
552///\r
9205b2d7 553typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_VOLTAGE_DATA;\r
470d0b27 554\r
555///\r
556/// This data record refers to the base address of the APIC of the processor being defined. This data \r
557/// record is a physical address location. \r
558///\r
9205b2d7 559typedef EFI_PHYSICAL_ADDRESS EFI_PROCESSOR_APIC_BASE_ADDRESS_DATA;\r
470d0b27 560\r
561///\r
562/// This data record refers to the ID of the APIC of the processor being defined. This data record is a \r
563/// 4-byte entry. \r
564///\r
9205b2d7 565typedef UINT32 EFI_PROCESSOR_APIC_ID_DATA;\r
470d0b27 566\r
567///\r
568/// This data record refers to the version number of the APIC of the processor being defined. This data \r
569/// record is a 4-byte entry. \r
570///\r
9205b2d7 571typedef UINT32 EFI_PROCESSOR_APIC_VERSION_NUMBER_DATA;\r
79964ac8 572\r
573typedef enum {\r
574 EfiProcessorIa32Microcode = 1,\r
575 EfiProcessorIpfPalAMicrocode = 2,\r
576 EfiProcessorIpfPalBMicrocode = 3\r
577} EFI_PROCESSOR_MICROCODE_TYPE;\r
578\r
470d0b27 579///\r
580/// This data record refers to the revision of the processor microcode that is loaded in the processor. \r
581/// This data record is a 4-byte entry. \r
582///\r
79964ac8 583typedef struct {\r
470d0b27 584 ///\r
585 /// Identifies what type of microcode the data is. \r
586 /// \r
9205b2d7 587 EFI_PROCESSOR_MICROCODE_TYPE ProcessorMicrocodeType;\r
470d0b27 588 ///\r
589 /// Indicates the revision number of this microcode. \r
590 ///\r
9205b2d7 591 UINT32 ProcessorMicrocodeRevisionNumber;\r
79964ac8 592} EFI_PROCESSOR_MICROCODE_REVISION_DATA;\r
593\r
470d0b27 594///\r
595/// This data record refers to the status of the processor.\r
596///\r
79964ac8 597typedef struct {\r
470d0b27 598 UINT32 CpuStatus :3; ///> Indicates the status of the processor. \r
599 UINT32 Reserved1 :3; ///> Reserved for future use. Should be set to zero. \r
600 UINT32 SocketPopulated :1; ///> Indicates if the processor is socketed or not. \r
601 UINT32 Reserved2 :1; ///> Reserved for future use. Should be set to zero. \r
602 UINT32 ApicEnable :1; ///> Indicates if the APIC is enabled or not. \r
603 UINT32 BootApplicationProcessor :1; ///> Indicates if this processor is the boot processor. \r
604 UINT32 Reserved3 :22;///> Reserved for future use. Should be set to zero. \r
79964ac8 605} EFI_PROCESSOR_STATUS_DATA;\r
606\r
607typedef enum {\r
608 EfiCpuStatusUnknown = 0,\r
609 EfiCpuStatusEnabled = 1,\r
610 EfiCpuStatusDisabledByUser = 2,\r
611 EfiCpuStatusDisabledbyBios = 3,\r
612 EfiCpuStatusIdle = 4,\r
613 EfiCpuStatusOther = 7\r
614} EFI_CPU_STATUS;\r
615\r
616typedef enum {\r
617 EfiProcessorSocketOther = 1,\r
618 EfiProcessorSocketUnknown = 2,\r
619 EfiProcessorSocketDaughterBoard = 3,\r
620 EfiProcessorSocketZIF = 4,\r
621 EfiProcessorSocketReplacePiggyBack = 5,\r
622 EfiProcessorSocketNone = 6,\r
623 EfiProcessorSocketLIF = 7,\r
624 EfiProcessorSocketSlot1 = 8,\r
625 EfiProcessorSocketSlot2 = 9,\r
626 EfiProcessorSocket370Pin = 0xA,\r
627 EfiProcessorSocketSlotA = 0xB,\r
628 EfiProcessorSocketSlotM = 0xC,\r
629 EfiProcessorSocket423 = 0xD,\r
630 EfiProcessorSocketA462 = 0xE,\r
631 EfiProcessorSocket478 = 0xF,\r
632 EfiProcessorSocket754 = 0x10,\r
633 EfiProcessorSocket940 = 0x11,\r
b66be4ca 634 ///\r
635 /// Inconsistent with specification here: \r
636 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
637 ///\r
79964ac8 638 EfiProcessorSocket939 = 0x12,\r
b66be4ca 639 ///\r
640 /// Inconsistent with specification here: \r
641 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
642 ///\r
79964ac8 643 EfiProcessorSocketmPGA604 = 0x13,\r
b66be4ca 644 ///\r
645 /// Inconsistent with specification here: \r
646 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
647 ///\r
79964ac8 648 EfiProcessorSocketLGA771 = 0x14,\r
b66be4ca 649 ///\r
650 /// Inconsistent with specification here: \r
651 /// This field is NOT defined in ProcSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
652 ///\r
79964ac8 653 EfiProcessorSocketLGA775 = 0x15\r
654\r
655} EFI_PROCESSOR_SOCKET_TYPE_DATA;\r
656\r
9205b2d7 657typedef STRING_REF EFI_PROCESSOR_SOCKET_NAME_DATA;\r
b66be4ca 658typedef EFI_INTER_LINK_DATA EFI_PROCESSOR_CACHE_ASSOCIATION_DATA;\r
79964ac8 659\r
470d0b27 660///\r
661/// This data record refers to the health status of the processor. \r
662///\r
79964ac8 663typedef enum {\r
664 EfiProcessorHealthy = 1,\r
665 EfiProcessorPerfRestricted = 2,\r
470d0b27 666 EfiProcessorFuncRestricted = 3 \r
b66be4ca 667} EFI_PROCESSOR_HEALTH_STATUS_DATA;\r
79964ac8 668\r
470d0b27 669///\r
670/// This data record refers to the package number of this processor. Multiple logical processors can \r
671/// exist in a system and each logical processor can be correlated to the physical processor using this \r
672/// record type. \r
673///\r
9205b2d7 674typedef UINTN EFI_PROCESSOR_PACKAGE_NUMBER_DATA;\r
79964ac8 675\r
631344e6 676#define EFI_PROCESSOR_FREQUENCY_RECORD_NUMBER 0x00000001\r
677#define EFI_PROCESSOR_BUS_FREQUENCY_RECORD_NUMBER 0x00000002\r
678#define EFI_PROCESSOR_VERSION_RECORD_NUMBER 0x00000003\r
679#define EFI_PROCESSOR_MANUFACTURER_RECORD_NUMBER 0x00000004\r
680#define EFI_PROCESSOR_SERIAL_NUMBER_RECORD_NUMBER 0x00000005\r
681#define EFI_PROCESSOR_ID_RECORD_NUMBER 0x00000006\r
682#define EFI_PROCESSOR_TYPE_RECORD_NUMBER 0x00000007\r
683#define EFI_PROCESSOR_FAMILY_RECORD_NUMBER 0x00000008\r
684#define EFI_PROCESSOR_VOLTAGE_RECORD_NUMBER 0x00000009\r
685#define EFI_PROCESSOR_APIC_BASE_ADDRESS_RECORD_NUMBER 0x0000000A\r
686#define EFI_PROCESSOR_APIC_ID_RECORD_NUMBER 0x0000000B\r
687#define EFI_PROCESSOR_APIC_VER_NUMBER_RECORD_NUMBER 0x0000000C\r
688#define EFI_PROCESSOR_MICROCODE_REVISION_RECORD_NUMBER 0x0000000D\r
689#define EFI_PROCESSOR_STATUS_RECORD_NUMBER 0x0000000E\r
690#define EFI_PROCESSOR_SOCKET_TYPE_RECORD_NUMBER 0x0000000F\r
691#define EFI_PROCESSOR_SOCKET_NAME_RECORD_NUMBER 0x00000010\r
692#define EFI_PROCESSOR_CACHE_ASSOCIATION_RECORD_NUMBER 0x00000011\r
693#define EFI_PROCESSOR_MAX_FREQUENCY_RECORD_NUMBER 0x00000012\r
694#define EFI_PROCESSOR_ASSET_TAG_RECORD_NUMBER 0x00000013\r
695#define EFI_PROCESSOR_MAX_FSB_FREQUENCY_RECORD_NUMBER 0x00000014\r
696#define EFI_PROCESSOR_PACKAGE_NUMBER_RECORD_NUMBER 0x00000015\r
697#define EFI_PROCESSOR_FREQUENCY_LIST_RECORD_NUMBER 0x00000016\r
698#define EFI_PROCESSOR_FSB_FREQUENCY_LIST_RECORD_NUMBER 0x00000017\r
699#define EFI_PROCESSOR_HEALTH_STATUS_RECORD_NUMBER 0x00000018\r
79964ac8 700\r
631344e6 701///\r
702/// Inconsistent with specification here: \r
703/// In ProcSubclass spec 0.9, the union type data structure is NOT defined.\r
704/// It's implementation-specific to simplify the code logic.\r
705///\r
79964ac8 706typedef union {\r
707 EFI_PROCESSOR_CORE_FREQUENCY_LIST_DATA ProcessorCoreFrequencyList;\r
708 EFI_PROCESSOR_FSB_FREQUENCY_LIST_DATA ProcessorFsbFrequencyList;\r
709 EFI_PROCESSOR_SERIAL_NUMBER_DATA ProcessorSerialNumber;\r
710 EFI_PROCESSOR_CORE_FREQUENCY_DATA ProcessorCoreFrequency;\r
711 EFI_PROCESSOR_FSB_FREQUENCY_DATA ProcessorFsbFrequency;\r
712 EFI_PROCESSOR_MAX_CORE_FREQUENCY_DATA ProcessorMaxCoreFrequency;\r
713 EFI_PROCESSOR_MAX_FSB_FREQUENCY_DATA ProcessorMaxFsbFrequency;\r
714 EFI_PROCESSOR_VERSION_DATA ProcessorVersion;\r
715 EFI_PROCESSOR_MANUFACTURER_DATA ProcessorManufacturer;\r
716 EFI_PROCESSOR_ID_DATA ProcessorId;\r
717 EFI_PROCESSOR_TYPE_DATA ProcessorType;\r
718 EFI_PROCESSOR_FAMILY_DATA ProcessorFamily;\r
719 EFI_PROCESSOR_VOLTAGE_DATA ProcessorVoltage;\r
720 EFI_PROCESSOR_APIC_BASE_ADDRESS_DATA ProcessorApicBase;\r
721 EFI_PROCESSOR_APIC_ID_DATA ProcessorApicId;\r
722 EFI_PROCESSOR_APIC_VERSION_NUMBER_DATA ProcessorApicVersionNumber;\r
723 EFI_PROCESSOR_MICROCODE_REVISION_DATA CpuUcodeRevisionData;\r
724 EFI_PROCESSOR_STATUS_DATA ProcessorStatus;\r
725 EFI_PROCESSOR_SOCKET_TYPE_DATA ProcessorSocketType;\r
726 EFI_PROCESSOR_SOCKET_NAME_DATA ProcessorSocketName;\r
727 EFI_PROCESSOR_ASSET_TAG_DATA ProcessorAssetTag;\r
b66be4ca 728 EFI_PROCESSOR_HEALTH_STATUS_DATA ProcessorHealthStatus;\r
79964ac8 729 EFI_PROCESSOR_PACKAGE_NUMBER_DATA ProcessorPackageNumber;\r
730} EFI_CPU_VARIABLE_RECORD;\r
731\r
732typedef struct {\r
9205b2d7 733 EFI_SUBCLASS_TYPE1_HEADER DataRecordHeader;\r
734 EFI_CPU_VARIABLE_RECORD VariableRecord;\r
79964ac8 735} EFI_CPU_DATA_RECORD;\r
736\r
737#define EFI_CACHE_SUBCLASS_VERSION 0x00010000\r
738\r
9205b2d7 739typedef EFI_EXP_BASE2_DATA EFI_CACHE_SIZE_DATA;\r
eeff6bb0 740typedef EFI_EXP_BASE2_DATA EFI_CACHE_MAXIMUM_SIZE_DATA;\r
9205b2d7 741typedef EFI_EXP_BASE10_DATA EFI_CACHE_SPEED_DATA;\r
742typedef STRING_REF EFI_CACHE_SOCKET_DATA;\r
79964ac8 743\r
744typedef struct {\r
9205b2d7 745 UINT32 Other :1;\r
746 UINT32 Unknown :1;\r
747 UINT32 NonBurst :1;\r
748 UINT32 Burst :1;\r
749 UINT32 PipelineBurst :1;\r
750 UINT32 Asynchronous :1;\r
751 UINT32 Synchronous :1;\r
752 UINT32 Reserved :25;\r
79964ac8 753} EFI_CACHE_SRAM_TYPE_DATA;\r
754\r
9205b2d7 755typedef EFI_CACHE_SRAM_TYPE_DATA EFI_CACHE_SRAM_INSTALL_DATA;\r
8403ef2e 756\r
79964ac8 757typedef enum {\r
758 EfiCacheErrorOther = 1,\r
759 EfiCacheErrorUnknown = 2,\r
760 EfiCacheErrorNone = 3,\r
761 EfiCacheErrorParity = 4,\r
762 EfiCacheErrorSingleBit = 5,\r
763 EfiCacheErrorMultiBit = 6\r
764} EFI_CACHE_ERROR_TYPE_DATA;\r
765\r
766typedef enum {\r
767 EfiCacheTypeOther = 1,\r
768 EfiCacheTypeUnknown = 2,\r
769 EfiCacheTypeInstruction = 3,\r
770 EfiCacheTypeData = 4,\r
771 EfiCacheTypeUnified = 5\r
772} EFI_CACHE_TYPE_DATA;\r
773\r
774typedef enum {\r
775 EfiCacheAssociativityOther = 1,\r
776 EfiCacheAssociativityUnknown = 2,\r
777 EfiCacheAssociativityDirectMapped = 3,\r
778 EfiCacheAssociativity2Way = 4,\r
779 EfiCacheAssociativity4Way = 5,\r
780 EfiCacheAssociativityFully = 6,\r
781 EfiCacheAssociativity8Way = 7,\r
7bfed576 782 EfiCacheAssociativity16Way = 8\r
79964ac8 783} EFI_CACHE_ASSOCIATIVITY_DATA;\r
784\r
dcd8fb0c 785///\r
786/// Inconsistent with specification here: \r
787/// It's a typo of CacheSubclass 0.9 spec. It should be UINT32 type since it refers to a 32bit width data.\r
788///\r
79964ac8 789typedef struct {\r
9205b2d7 790 UINT32 Level :3;\r
791 UINT32 Socketed :1;\r
792 UINT32 Reserved2 :1;\r
793 UINT32 Location :2;\r
794 UINT32 Enable :1;\r
795 UINT32 OperationalMode :2;\r
796 UINT32 Reserved1 :22;\r
79964ac8 797} EFI_CACHE_CONFIGURATION_DATA;\r
798\r
9205b2d7 799#define EFI_CACHE_L1 1\r
800#define EFI_CACHE_L2 2\r
801#define EFI_CACHE_L3 3\r
802#define EFI_CACHE_L4 4\r
803#define EFI_CACHE_LMAX EFI_CACHE_L4\r
79964ac8 804\r
805#define EFI_CACHE_SOCKETED 1\r
806#define EFI_CACHE_NOT_SOCKETED 0\r
807\r
808typedef enum {\r
809 EfiCacheInternal = 0,\r
810 EfiCacheExternal = 1,\r
811 EfiCacheReserved = 2,\r
812 EfiCacheUnknown = 3\r
813} EFI_CACHE_LOCATION;\r
814\r
9205b2d7 815#define EFI_CACHE_ENABLED 1\r
816#define EFI_CACHE_DISABLED 0\r
79964ac8 817\r
818typedef enum {\r
819 EfiCacheWriteThrough = 0,\r
820 EfiCacheWriteBack = 1,\r
821 EfiCacheDynamicMode = 2,\r
822 EfiCacheUnknownMode = 3\r
823} EFI_CACHE_OPERATIONAL_MODE;\r
824\r
825\r
826\r
827typedef enum {\r
828 CacheSizeRecordType = 1,\r
829 MaximumSizeCacheRecordType = 2,\r
830 CacheSpeedRecordType = 3,\r
831 CacheSocketRecordType = 4,\r
832 CacheSramTypeRecordType = 5,\r
833 CacheInstalledSramTypeRecordType = 6,\r
834 CacheErrorTypeRecordType = 7,\r
835 CacheTypeRecordType = 8,\r
836 CacheAssociativityRecordType = 9,\r
837 CacheConfigRecordType = 10\r
838} EFI_CACHE_VARIABLE_RECORD_TYPE;\r
839\r
631344e6 840///\r
841/// Inconsistent with specification here: \r
842/// In CacheSubclass spec0.9, the union type data structure is NOT defined.\r
843/// It's implementation-specific to simplify the code logic.\r
844///\r
79964ac8 845typedef union {\r
b66be4ca 846 EFI_CACHE_SIZE_DATA CacheSize;\r
eeff6bb0 847 EFI_CACHE_MAXIMUM_SIZE_DATA MaximumCacheSize;\r
b66be4ca 848 EFI_CACHE_SPEED_DATA CacheSpeed;\r
849 EFI_CACHE_SOCKET_DATA CacheSocket;\r
850 EFI_CACHE_SRAM_TYPE_DATA CacheSramType;\r
851 EFI_CACHE_SRAM_TYPE_DATA CacheInstalledSramType;\r
852 EFI_CACHE_ERROR_TYPE_DATA CacheErrorType;\r
853 EFI_CACHE_TYPE_DATA CacheType;\r
854 EFI_CACHE_ASSOCIATIVITY_DATA CacheAssociativity;\r
855 EFI_CACHE_CONFIGURATION_DATA CacheConfig;\r
856 EFI_PROCESSOR_CACHE_ASSOCIATION_DATA CacheAssociation;\r
79964ac8 857} EFI_CACHE_VARIABLE_RECORD;\r
858\r
859typedef struct {\r
9205b2d7 860 EFI_SUBCLASS_TYPE1_HEADER DataRecordHeader;\r
861 EFI_CACHE_VARIABLE_RECORD VariableRecord;\r
79964ac8 862} EFI_CACHE_DATA_RECORD;\r
863\r
864#define EFI_MEMORY_SUBCLASS_VERSION 0x0100\r
9205b2d7 865#define EFI_MEMORY_SIZE_RECORD_NUMBER 0x00000001\r
79964ac8 866\r
867typedef enum _EFI_MEMORY_REGION_TYPE {\r
9205b2d7 868 EfiMemoryRegionMemory = 0x01,\r
869 EfiMemoryRegionReserved = 0x02,\r
870 EfiMemoryRegionAcpi = 0x03,\r
871 EfiMemoryRegionNvs = 0x04\r
79964ac8 872} EFI_MEMORY_REGION_TYPE;\r
873\r
470d0b27 874///\r
875/// This data record refers to the size of a memory region. The regions that are \r
876/// described can refer to physical memory, memory-mapped I/O, or reserved BIOS memory regions. \r
877/// The unit of measurement of this data record is in bytes. \r
878///\r
79964ac8 879typedef struct {\r
470d0b27 880 ///\r
881 /// A zero-based value that indicates which processor(s) can access the memory region. \r
882 /// A value of 0xFFFF indicates the region is accessible by all processors. \r
883 ///\r
9205b2d7 884 UINT32 ProcessorNumber;\r
470d0b27 885 ///\r
886 /// A zero-based value that indicates the starting bus that can access the memory region. \r
887 ///\r
9205b2d7 888 UINT16 StartBusNumber;\r
470d0b27 889 ///\r
890 /// A zero-based value that indicates the ending bus that can access the memory region. \r
891 /// A value of 0xFF for a PCI system indicates the region is accessible by all buses and \r
892 /// is global in scope. An example of the EndBusNumber not being 0xFF is a system \r
893 /// with two or more peer-to-host PCI bridges. \r
894 ///\r
9205b2d7 895 UINT16 EndBusNumber;\r
470d0b27 896 ///\r
b4420c36 897 /// The type of memory region from the operating system's point of view. \r
470d0b27 898 /// MemoryRegionType values are equivalent to the legacy INT 15 AX = E820 BIOS \r
899 /// command values. \r
900 ///\r
9205b2d7 901 EFI_MEMORY_REGION_TYPE MemoryRegionType;\r
470d0b27 902 ///\r
903 /// The size of the memory region in bytes. \r
904 ///\r
9205b2d7 905 EFI_EXP_BASE2_DATA MemorySize;\r
470d0b27 906 ///\r
907 /// The starting physical address of the memory region. \r
908 ///\r
9205b2d7 909 EFI_PHYSICAL_ADDRESS MemoryStartAddress;\r
79964ac8 910} EFI_MEMORY_SIZE_DATA;\r
911\r
912\r
9205b2d7 913#define EFI_MEMORY_ARRAY_LOCATION_RECORD_NUMBER 0x00000002\r
79964ac8 914\r
915typedef enum _EFI_MEMORY_ARRAY_LOCATION {\r
916 EfiMemoryArrayLocationOther = 0x01,\r
917 EfiMemoryArrayLocationUnknown = 0x02,\r
918 EfiMemoryArrayLocationSystemBoard = 0x03,\r
919 EfiMemoryArrayLocationIsaAddonCard = 0x04,\r
920 EfiMemoryArrayLocationEisaAddonCard = 0x05,\r
921 EfiMemoryArrayLocationPciAddonCard = 0x06,\r
922 EfiMemoryArrayLocationMcaAddonCard = 0x07,\r
923 EfiMemoryArrayLocationPcmciaAddonCard = 0x08,\r
924 EfiMemoryArrayLocationProprietaryAddonCard = 0x09,\r
925 EfiMemoryArrayLocationNuBus = 0x0A,\r
926 EfiMemoryArrayLocationPc98C20AddonCard = 0xA0,\r
927 EfiMemoryArrayLocationPc98C24AddonCard = 0xA1,\r
928 EfiMemoryArrayLocationPc98EAddonCard = 0xA2,\r
929 EfiMemoryArrayLocationPc98LocalBusAddonCard = 0xA3\r
930} EFI_MEMORY_ARRAY_LOCATION;\r
931\r
932typedef enum _EFI_MEMORY_ARRAY_USE {\r
933 EfiMemoryArrayUseOther = 0x01,\r
934 EfiMemoryArrayUseUnknown = 0x02,\r
935 EfiMemoryArrayUseSystemMemory = 0x03,\r
936 EfiMemoryArrayUseVideoMemory = 0x04,\r
937 EfiMemoryArrayUseFlashMemory = 0x05,\r
938 EfiMemoryArrayUseNonVolatileRam = 0x06,\r
661e7afd 939 EfiMemoryArrayUseCacheMemory = 0x07\r
79964ac8 940} EFI_MEMORY_ARRAY_USE;\r
941\r
942typedef enum _EFI_MEMORY_ERROR_CORRECTION {\r
943 EfiMemoryErrorCorrectionOther = 0x01,\r
944 EfiMemoryErrorCorrectionUnknown = 0x02,\r
945 EfiMemoryErrorCorrectionNone = 0x03,\r
946 EfiMemoryErrorCorrectionParity = 0x04,\r
947 EfiMemoryErrorCorrectionSingleBitEcc = 0x05,\r
948 EfiMemoryErrorCorrectionMultiBitEcc = 0x06,\r
661e7afd 949 EfiMemoryErrorCorrectionCrc = 0x07\r
79964ac8 950} EFI_MEMORY_ERROR_CORRECTION;\r
951\r
470d0b27 952///\r
953/// This data record refers to the physical memory array. This data record is a structure. \r
954/// The type definition structure for EFI_MEMORY_ARRAY_LOCATION_DATA is in SMBIOS 2.3.4: \r
955/// - Table 3.3.17.1, Type 16, Offset 0x4 \r
956/// - Table 3.3.17.2, Type 16, Offset 0x5 \r
957/// - Table 3.3.17.3, Type 16, with the following offsets: \r
958/// -- Offset 0x6 \r
959/// -- Offset 0x7 \r
960/// -- Offset 0xB \r
961/// -- Offset 0xD \r
962/// \r
79964ac8 963typedef struct {\r
470d0b27 964 ///\r
965 /// The physical location of the memory array. \r
966 ///\r
9205b2d7 967 EFI_MEMORY_ARRAY_LOCATION MemoryArrayLocation;\r
470d0b27 968 ///\r
969 /// The memory array usage.\r
970 ///\r
9205b2d7 971 EFI_MEMORY_ARRAY_USE MemoryArrayUse;\r
470d0b27 972 ///\r
973 /// The primary error correction or detection supported by this memory array.\r
974 ///\r
9205b2d7 975 EFI_MEMORY_ERROR_CORRECTION MemoryErrorCorrection;\r
470d0b27 976 ///\r
977 /// The maximum memory capacity size in kilobytes. If capacity is unknown, then \r
978 /// values of MaximumMemoryCapacity.Value = 0x00 and \r
979 /// MaximumMemoryCapacity.Exponent = 0x8000 are used.\r
980 ///\r
9205b2d7 981 EFI_EXP_BASE2_DATA MaximumMemoryCapacity;\r
470d0b27 982 ///\r
983 /// The number of memory slots or sockets that are available for memory devices \r
984 /// in this array. \r
985 ///\r
9205b2d7 986 UINT16 NumberMemoryDevices;\r
79964ac8 987} EFI_MEMORY_ARRAY_LOCATION_DATA;\r
988\r
989\r
9205b2d7 990#define EFI_MEMORY_ARRAY_LINK_RECORD_NUMBER 0x00000003\r
79964ac8 991\r
992typedef enum _EFI_MEMORY_FORM_FACTOR {\r
993 EfiMemoryFormFactorOther = 0x01,\r
994 EfiMemoryFormFactorUnknown = 0x02,\r
995 EfiMemoryFormFactorSimm = 0x03,\r
996 EfiMemoryFormFactorSip = 0x04,\r
997 EfiMemoryFormFactorChip = 0x05,\r
998 EfiMemoryFormFactorDip = 0x06,\r
999 EfiMemoryFormFactorZip = 0x07,\r
1000 EfiMemoryFormFactorProprietaryCard = 0x08,\r
1001 EfiMemoryFormFactorDimm = 0x09,\r
1002 EfiMemoryFormFactorTsop = 0x0A,\r
1003 EfiMemoryFormFactorRowOfChips = 0x0B,\r
1004 EfiMemoryFormFactorRimm = 0x0C,\r
1005 EfiMemoryFormFactorSodimm = 0x0D,\r
1006 EfiMemoryFormFactorSrimm = 0x0E,\r
4c617fa9 1007 ///\r
1008 /// Inconsistent with specification here: \r
1009 /// This field is NOT defined in MemSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
1010 ///\r
79964ac8 1011 EfiMemoryFormFactorFbDimm = 0x0F\r
1012} EFI_MEMORY_FORM_FACTOR;\r
1013\r
1014typedef enum _EFI_MEMORY_ARRAY_TYPE {\r
1015 EfiMemoryTypeOther = 0x01,\r
1016 EfiMemoryTypeUnknown = 0x02,\r
1017 EfiMemoryTypeDram = 0x03,\r
1018 EfiMemoryTypeEdram = 0x04,\r
1019 EfiMemoryTypeVram = 0x05,\r
1020 EfiMemoryTypeSram = 0x06,\r
1021 EfiMemoryTypeRam = 0x07,\r
1022 EfiMemoryTypeRom = 0x08,\r
1023 EfiMemoryTypeFlash = 0x09,\r
1024 EfiMemoryTypeEeprom = 0x0A,\r
1025 EfiMemoryTypeFeprom = 0x0B,\r
1026 EfiMemoryTypeEprom = 0x0C,\r
1027 EfiMemoryTypeCdram = 0x0D,\r
1028 EfiMemoryType3Dram = 0x0E,\r
1029 EfiMemoryTypeSdram = 0x0F,\r
1030 EfiMemoryTypeSgram = 0x10,\r
1031 EfiMemoryTypeRdram = 0x11,\r
1032 EfiMemoryTypeDdr = 0x12,\r
4c617fa9 1033 ///\r
1034 /// Inconsistent with specification here: \r
1035 /// This field is NOT defined in MemSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
1036 ///\r
79964ac8 1037 EfiMemoryTypeDdr2 = 0x13,\r
4c617fa9 1038 ///\r
1039 /// Inconsistent with specification here: \r
1040 /// This field is NOT defined in MemSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
1041 ///\r
79964ac8 1042 EfiMemoryTypeDdr2FbDimm = 0x14\r
1043} EFI_MEMORY_ARRAY_TYPE;\r
1044\r
1045typedef struct {\r
9205b2d7 1046 UINT32 Reserved :1;\r
1047 UINT32 Other :1;\r
1048 UINT32 Unknown :1;\r
1049 UINT32 FastPaged :1;\r
1050 UINT32 StaticColumn :1;\r
1051 UINT32 PseudoStatic :1;\r
1052 UINT32 Rambus :1;\r
1053 UINT32 Synchronous :1;\r
1054 UINT32 Cmos :1;\r
1055 UINT32 Edo :1;\r
1056 UINT32 WindowDram :1;\r
1057 UINT32 CacheDram :1;\r
1058 UINT32 Nonvolatile :1;\r
1059 UINT32 Reserved1 :19;\r
79964ac8 1060} EFI_MEMORY_TYPE_DETAIL;\r
1061\r
1062typedef enum {\r
1063 EfiMemoryStateEnabled = 0,\r
1064 EfiMemoryStateUnknown = 1,\r
1065 EfiMemoryStateUnsupported = 2,\r
1066 EfiMemoryStateError = 3,\r
1067 EfiMemoryStateAbsent = 4,\r
1068 EfiMemoryStateDisabled = 5,\r
4c617fa9 1069 ///\r
1070 /// Inconsistent with specification here: \r
1071 /// This field is NOT defined in MemSubClass spec0.9. It's introduced for SMBIOS2.6 spec.\r
1072 ///\r
79964ac8 1073 EfiMemoryStatePartial = 6\r
1074} EFI_MEMORY_STATE;\r
1075\r
470d0b27 1076///\r
1077/// This data record describes a memory device. This data record is a structure. \r
1078/// The type definition structure for EFI_MEMORY_ARRAY_LINK_DATA is in SMBIOS 2.3.4.\r
1079///\r
79964ac8 1080typedef struct {\r
470d0b27 1081 ///\r
1082 /// A string that identifies the physically labeled socket or board position where the \r
1083 /// memory device is located.\r
1084 ///\r
9205b2d7 1085 STRING_REF MemoryDeviceLocator;\r
470d0b27 1086 ///\r
1087 /// A string denoting the physically labeled bank where the memory device is located. \r
1088 ///\r
9205b2d7 1089 STRING_REF MemoryBankLocator;\r
470d0b27 1090 ///\r
1091 /// A string denoting the memory manufacturer. \r
1092 /// \r
9205b2d7 1093 STRING_REF MemoryManufacturer;\r
470d0b27 1094 ///\r
1095 /// A string denoting the serial number of the memory device. \r
1096 ///\r
9205b2d7 1097 STRING_REF MemorySerialNumber;\r
470d0b27 1098 ///\r
1099 /// The asset tag of the memory device. \r
1100 ///\r
9205b2d7 1101 STRING_REF MemoryAssetTag;\r
470d0b27 1102 ///\r
1103 /// A string denoting the part number of the memory device. \r
1104 ///\r
9205b2d7 1105 STRING_REF MemoryPartNumber;\r
470d0b27 1106 ///\r
1107 /// A link to a memory array structure set. \r
1108 ///\r
9205b2d7 1109 EFI_INTER_LINK_DATA MemoryArrayLink;\r
470d0b27 1110 ///\r
1111 /// A link to a memory array structure set.\r
1112 ///\r
9205b2d7 1113 EFI_INTER_LINK_DATA MemorySubArrayLink;\r
470d0b27 1114 ///\r
1115 /// The total width in bits of this memory device. If there are no error correcting bits, \r
1116 /// then the total width equals the data width. If the width is unknown, then set the field \r
1117 /// to 0xFFFF. \r
1118 ///\r
9205b2d7 1119 UINT16 MemoryTotalWidth;\r
470d0b27 1120 ///\r
1121 /// The data width in bits of the memory device. A data width of 0x00 and a total width \r
1122 /// of 0x08 indicate that the device is used solely for error correction. \r
1123 ///\r
9205b2d7 1124 UINT16 MemoryDataWidth;\r
470d0b27 1125 ///\r
1126 /// The size in bytes of the memory device. A value of 0x00 denotes that no device is \r
1127 /// installed, while a value of all Fs denotes that the size is not known.\r
1128 ///\r
9205b2d7 1129 EFI_EXP_BASE2_DATA MemoryDeviceSize;\r
470d0b27 1130 ///\r
1131 /// The form factor of the memory device. \r
1132 ///\r
9205b2d7 1133 EFI_MEMORY_FORM_FACTOR MemoryFormFactor;\r
470d0b27 1134 ///\r
1135 /// A memory device set that must be populated with all devices of the same type and \r
1136 /// size. A value of 0x00 indicates that the device is not part of any set. A value of 0xFF \r
1137 /// indicates that the attribute is unknown. Any other value denotes the set number. \r
1138 ///\r
9205b2d7 1139 UINT8 MemoryDeviceSet;\r
470d0b27 1140 ///\r
1141 /// The memory type in the socket. \r
1142 ///\r
9205b2d7 1143 EFI_MEMORY_ARRAY_TYPE MemoryType;\r
470d0b27 1144 ///\r
1145 /// The memory type details. \r
1146 ///\r
9205b2d7 1147 EFI_MEMORY_TYPE_DETAIL MemoryTypeDetail;\r
470d0b27 1148 ///\r
1149 /// The memory speed in megahertz (MHz). A value of 0x00 denotes that \r
1150 /// the speed is unknown.\r
1151 ///\r
4c617fa9 1152 EFI_EXP_BASE10_DATA MemoryTypeSpeed;\r
470d0b27 1153 ///\r
1154 /// The memory state. \r
1155 ///\r
9205b2d7 1156 EFI_MEMORY_STATE MemoryState;\r
79964ac8 1157} EFI_MEMORY_ARRAY_LINK_DATA;\r
1158\r
1159\r
9205b2d7 1160#define EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER 0x00000004\r
79964ac8 1161\r
470d0b27 1162///\r
1163/// This data record refers to a specified physical memory array associated with \r
1164/// a given memory range. \r
1165/// \r
79964ac8 1166typedef struct {\r
470d0b27 1167 ///\r
1168 /// The starting physical address in bytes of memory mapped to a specified physical \r
1169 /// memory array. \r
1170 ///\r
9205b2d7 1171 EFI_PHYSICAL_ADDRESS MemoryArrayStartAddress;\r
470d0b27 1172 ///\r
1173 /// The last physical address in bytes of memory mapped to a specified physical memory \r
1174 /// array. \r
1175 ///\r
9205b2d7 1176 EFI_PHYSICAL_ADDRESS MemoryArrayEndAddress;\r
470d0b27 1177 ///\r
1178 /// See Physical Memory Array (Type 16) for physical memory array structures.\r
1179 ///\r
9205b2d7 1180 EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;\r
470d0b27 1181 ///\r
1182 /// The number of memory devices that form a single row of memory for the address \r
1183 /// partition. \r
1184 ///\r
9205b2d7 1185 UINT16 MemoryArrayPartitionWidth;\r
79964ac8 1186} EFI_MEMORY_ARRAY_START_ADDRESS_DATA;\r
1187\r
1188\r
9205b2d7 1189#define EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER 0x00000005\r
79964ac8 1190\r
470d0b27 1191///\r
1192/// This data record refers to a physical memory device that is associated with \r
1193/// a given memory range.\r
1194/// \r
79964ac8 1195typedef struct {\r
470d0b27 1196 ///\r
1197 /// The starting physical address that is associated with the device. \r
1198 ///\r
9205b2d7 1199 EFI_PHYSICAL_ADDRESS MemoryDeviceStartAddress;\r
470d0b27 1200 ///\r
1201 /// The ending physical address that is associated with the device. \r
1202 ///\r
9205b2d7 1203 EFI_PHYSICAL_ADDRESS MemoryDeviceEndAddress;\r
470d0b27 1204 ///\r
1205 /// A link to the memory device data structure. \r
1206 ///\r
9205b2d7 1207 EFI_INTER_LINK_DATA PhysicalMemoryDeviceLink;\r
470d0b27 1208 /// \r
1209 /// A link to the memory array data structure. \r
1210 ///\r
9205b2d7 1211 EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;\r
470d0b27 1212 ///\r
1213 /// The position of the memory device in a row. A value of 0x00 is reserved and a value \r
1214 /// of 0xFF indicates that the position is unknown. \r
1215 ///\r
9205b2d7 1216 UINT8 MemoryDevicePartitionRowPosition;\r
470d0b27 1217 ///\r
1218 /// The position of the device in an interleave. \r
1219 ///\r
9205b2d7 1220 UINT8 MemoryDeviceInterleavePosition;\r
470d0b27 1221 ///\r
1222 /// The maximum number of consecutive rows from the device that are accessed in a \r
1223 /// single interleave transfer. A value of 0x00 indicates that the device is not interleaved \r
1224 /// and a value of 0xFF indicates that the interleave configuration is unknown. \r
1225 ///\r
9205b2d7 1226 UINT8 MemoryDeviceInterleaveDataDepth;\r
79964ac8 1227} EFI_MEMORY_DEVICE_START_ADDRESS_DATA;\r
1228\r
1229\r
1230//\r
1231// Memory. Channel Device Type - SMBIOS Type 37\r
1232//\r
1233\r
9205b2d7 1234#define EFI_MEMORY_CHANNEL_TYPE_RECORD_NUMBER 0x00000006\r
79964ac8 1235\r
1236typedef enum _EFI_MEMORY_CHANNEL_TYPE {\r
1237 EfiMemoryChannelTypeOther = 1,\r
1238 EfiMemoryChannelTypeUnknown = 2,\r
1239 EfiMemoryChannelTypeRambus = 3,\r
1240 EfiMemoryChannelTypeSyncLink = 4\r
1241} EFI_MEMORY_CHANNEL_TYPE;\r
1242\r
470d0b27 1243///\r
1244/// This data record refers the type of memory that is associated with the channel. This data record is a \r
1245/// structure. \r
1246/// The type definition structure for EFI_MEMORY_CHANNEL_TYPE_DATA is in SMBIOS 2.3.4, \r
1247/// Table 3.3.38, Type 37, with the following offsets: \r
1248/// - Offset 0x4 \r
1249/// - Offset 0x5 \r
1250/// - Offset 0x6\r
1251/// \r
79964ac8 1252typedef struct {\r
470d0b27 1253 ///\r
1254 /// The type of memory that is associated with the channel. \r
1255 /// \r
9205b2d7 1256 EFI_MEMORY_CHANNEL_TYPE MemoryChannelType;\r
470d0b27 1257 ///\r
1258 /// The maximum load that is supported by the channel.\r
1259 ///\r
9205b2d7 1260 UINT8 MemoryChannelMaximumLoad;\r
470d0b27 1261 ///\r
1262 /// The number of memory devices on this channel. \r
1263 ///\r
9205b2d7 1264 UINT8 MemoryChannelDeviceCount;\r
79964ac8 1265} EFI_MEMORY_CHANNEL_TYPE_DATA;\r
1266\r
9205b2d7 1267#define EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER 0x00000007\r
79964ac8 1268\r
470d0b27 1269///\r
1270/// This data record refers to the memory device that is associated with the memory channel. This data \r
1271/// record is a structure. \r
1272/// The type definition structure for EFI_MEMORY_CHANNEL_DEVICE_DATA is in SMBIOS 2.3.4, \r
1273/// Table 3.3.38, Type 37, with the following offsets: \r
1274/// - Offset 0x7 \r
1275/// - Offset 0x8\r
1276///\r
79964ac8 1277typedef struct {\r
470d0b27 1278 ///\r
1279 /// A number between one and MemoryChannelDeviceCount plus an arbitrary base. \r
1280 /// \r
9205b2d7 1281 UINT8 DeviceId;\r
470d0b27 1282 ///\r
1283 /// The Link of the associated memory device. See Memory Device (Type 17) for \r
1284 /// memory devices. \r
1285 ///\r
9205b2d7 1286 EFI_INTER_LINK_DATA DeviceLink;\r
470d0b27 1287 ///\r
1288 /// The number of load units that this device consumes. \r
1289 ///\r
9205b2d7 1290 UINT8 MemoryChannelDeviceLoad;\r
79964ac8 1291} EFI_MEMORY_CHANNEL_DEVICE_DATA;\r
1292\r
91399a51 1293//\r
1294// Memory. Controller Information - SMBIOS Type 5\r
1295//\r
631344e6 1296///\r
1297/// Inconsistent with specification here: \r
1298/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1299/// It's introduced for SmBios 2.6 type 5.\r
1300///\r
9205b2d7 1301#define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER 0x00000008\r
91399a51 1302\r
631344e6 1303///\r
1304/// Inconsistent with specification here: \r
1305/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1306/// It's introduced for SmBios 2.6 type 5.\r
1307///\r
91399a51 1308typedef enum { \r
1309 EfiErrorDetectingMethodOther = 1,\r
1310 EfiErrorDetectingMethodUnknown = 2,\r
1311 EfiErrorDetectingMethodNone = 3,\r
1312 EfiErrorDetectingMethodParity = 4,\r
1313 EfiErrorDetectingMethod32Ecc = 5,\r
1314 EfiErrorDetectingMethod64Ecc = 6,\r
1315 EfiErrorDetectingMethod128Ecc = 7,\r
1316 EfiErrorDetectingMethodCrc = 8\r
1317} EFI_MEMORY_ERROR_DETECT_METHOD_TYPE;\r
1318\r
631344e6 1319///\r
1320/// Inconsistent with specification here: \r
1321/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1322/// It's introduced for SmBios 2.6 type 5.\r
1323///\r
91399a51 1324typedef struct {\r
9205b2d7 1325 UINT8 Other :1;\r
1326 UINT8 Unknown :1;\r
1327 UINT8 None :1;\r
1328 UINT8 SingleBitErrorCorrect :1;\r
1329 UINT8 DoubleBitErrorCorrect :1;\r
1330 UINT8 ErrorScrubbing :1;\r
1331 UINT8 Reserved :2;\r
91399a51 1332} EFI_MEMORY_ERROR_CORRECT_CAPABILITY;\r
1333\r
631344e6 1334///\r
1335/// Inconsistent with specification here: \r
1336/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1337/// It's introduced for SmBios 2.6 type 5.\r
1338///\r
91399a51 1339typedef enum { \r
1340 EfiMemoryInterleaveOther = 1,\r
1341 EfiMemoryInterleaveUnknown = 2,\r
1342 EfiMemoryInterleaveOneWay = 3,\r
1343 EfiMemoryInterleaveTwoWay = 4,\r
1344 EfiMemoryInterleaveFourWay = 5,\r
1345 EfiMemoryInterleaveEightWay = 6,\r
1346 EfiMemoryInterleaveSixteenWay = 7\r
1347} EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE;\r
1348\r
631344e6 1349///\r
1350/// Inconsistent with specification here: \r
1351/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1352/// It's introduced for SmBios 2.6 type 5.\r
1353///\r
91399a51 1354typedef struct {\r
9205b2d7 1355 UINT16 Other :1;\r
1356 UINT16 Unknown :1;\r
1357 UINT16 SeventyNs:1;\r
1358 UINT16 SixtyNs :1;\r
1359 UINT16 FiftyNs :1;\r
1360 UINT16 Reserved :11;\r
91399a51 1361} EFI_MEMORY_SPEED_TYPE;\r
1362\r
631344e6 1363///\r
1364/// Inconsistent with specification here: \r
1365/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1366/// It's introduced for SmBios 2.6 type 5.\r
1367///\r
91399a51 1368typedef struct {\r
9205b2d7 1369 UINT16 Other :1;\r
1370 UINT16 Unknown :1;\r
1371 UINT16 Standard :1;\r
1372 UINT16 FastPageMode:1;\r
1373 UINT16 EDO :1;\r
1374 UINT16 Parity :1;\r
1375 UINT16 ECC :1;\r
1376 UINT16 SIMM :1;\r
1377 UINT16 DIMM :1;\r
1378 UINT16 BurstEdo :1;\r
1379 UINT16 SDRAM :1;\r
1380 UINT16 Reserved :5;\r
91399a51 1381} EFI_MEMORY_SUPPORTED_TYPE;\r
1382\r
631344e6 1383///\r
1384/// Inconsistent with specification here: \r
1385/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1386/// It's introduced for SmBios 2.6 type 5.\r
1387///\r
91399a51 1388typedef struct {\r
9205b2d7 1389 UINT8 Five :1;\r
a244f400 1390 UINT8 Three :1;\r
9205b2d7 1391 UINT8 Two :1;\r
1392 UINT8 Reserved:5;\r
91399a51 1393} EFI_MEMORY_MODULE_VOLTAGE_TYPE;\r
1394\r
631344e6 1395///\r
1396/// EFI_MEMORY_CONTROLLER_INFORMATION is obsolete\r
1397/// Use EFI_MEMORY_CONTROLLER_INFORMATION_DATA instead\r
1398///\r
1399/// Inconsistent with specification here: \r
1400/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1401/// It's introduced for SmBios 2.6 type 5.\r
1402///\r
91399a51 1403typedef struct {\r
9205b2d7 1404 EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod;\r
1405 EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability;\r
1406 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave;\r
1407 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave;\r
1408 UINT8 MaxMemoryModuleSize;\r
1409 EFI_MEMORY_SPEED_TYPE MemorySpeedType;\r
1410 EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType;\r
1411 EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage;\r
1412 UINT8 NumberofMemorySlot;\r
1413 EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability;\r
1414 UINT16 *MemoryModuleConfigHandles;\r
91399a51 1415} EFI_MEMORY_CONTROLLER_INFORMATION;\r
1416\r
631344e6 1417///\r
1418/// Inconsistent with specification here: \r
1419/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1420/// It's introduced for SmBios 2.6 type 5.\r
1421///\r
a244f400 1422typedef struct {\r
1423 EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod;\r
1424 EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability;\r
1425 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave;\r
1426 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave;\r
1427 UINT8 MaxMemoryModuleSize;\r
1428 EFI_MEMORY_SPEED_TYPE MemorySpeedType;\r
1429 EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType;\r
1430 EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage;\r
1431 UINT8 NumberofMemorySlot;\r
1432 EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability;\r
1433 EFI_INTER_LINK_DATA MemoryModuleConfig[1];\r
1434} EFI_MEMORY_CONTROLLER_INFORMATION_DATA;\r
1435\r
631344e6 1436///\r
1437/// Memory. Error Information - SMBIOS Type 18\r
1438///\r
1439/// Inconsistent with specification here: \r
1440/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1441/// It's introduced for SmBios 2.6 type 18.\r
1442///\r
9205b2d7 1443#define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER 0x00000009\r
631344e6 1444///\r
1445/// Inconsistent with specification here: \r
1446/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1447/// It's introduced for SmBios 2.6 type 18.\r
1448///\r
91399a51 1449typedef enum { \r
1450 EfiMemoryErrorOther = 1,\r
1451 EfiMemoryErrorUnknown = 2,\r
1452 EfiMemoryErrorOk = 3,\r
1453 EfiMemoryErrorBadRead = 4,\r
1454 EfiMemoryErrorParity = 5,\r
1455 EfiMemoryErrorSigleBit = 6,\r
1456 EfiMemoryErrorDoubleBit = 7,\r
1457 EfiMemoryErrorMultiBit = 8,\r
1458 EfiMemoryErrorNibble = 9,\r
1459 EfiMemoryErrorChecksum = 10,\r
1460 EfiMemoryErrorCrc = 11,\r
1461 EfiMemoryErrorCorrectSingleBit = 12,\r
1462 EfiMemoryErrorCorrected = 13,\r
1463 EfiMemoryErrorUnCorrectable = 14\r
1464} EFI_MEMORY_ERROR_TYPE;\r
631344e6 1465///\r
1466/// Inconsistent with specification here: \r
1467/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1468/// It's introduced for SmBios 2.6 type 18.\r
1469///\r
91399a51 1470typedef enum { \r
1471 EfiMemoryGranularityOther = 1,\r
1472 EfiMemoryGranularityOtherUnknown = 2,\r
1473 EfiMemoryGranularityDeviceLevel = 3,\r
1474 EfiMemoryGranularityMemPartitionLevel = 4\r
1475} EFI_MEMORY_ERROR_GRANULARITY_TYPE;\r
631344e6 1476///\r
1477/// Inconsistent with specification here: \r
1478/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1479/// It's introduced for SmBios 2.6 type 18.\r
1480///\r
91399a51 1481typedef enum { \r
1482 EfiMemoryErrorOperationOther = 1,\r
1483 EfiMemoryErrorOperationUnknown = 2,\r
1484 EfiMemoryErrorOperationRead = 3,\r
1485 EfiMemoryErrorOperationWrite = 4,\r
1486 EfiMemoryErrorOperationPartialWrite = 5\r
1487} EFI_MEMORY_ERROR_OPERATION_TYPE;\r
631344e6 1488///\r
1489/// Inconsistent with specification here: \r
1490/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1491/// It's introduced for SmBios 2.6 type 18.\r
1492///\r
91399a51 1493typedef struct {\r
1494 EFI_MEMORY_ERROR_TYPE MemoryErrorType;\r
1495 EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;\r
1496 EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation;\r
1497 UINT32 VendorSyndrome;\r
1498 UINT32 MemoryArrayErrorAddress;\r
1499 UINT32 DeviceErrorAddress;\r
1500 UINT32 DeviceErrorResolution;\r
1501} EFI_MEMORY_32BIT_ERROR_INFORMATION;\r
1502\r
631344e6 1503///\r
1504/// Memory. Error Information - SMBIOS Type 33\r
1505///\r
1506/// Inconsistent with specification here: \r
1507/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1508/// It's introduced for SmBios 2.6 type 33.\r
1509///\r
9205b2d7 1510#define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER 0x0000000A\r
91399a51 1511\r
631344e6 1512///\r
1513/// Inconsistent with specification here: \r
1514/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1515/// It's introduced for SmBios 2.6 type 33.\r
1516///\r
91399a51 1517typedef struct {\r
9205b2d7 1518 EFI_MEMORY_ERROR_TYPE MemoryErrorType;\r
1519 EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;\r
1520 EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation;\r
1521 UINT32 VendorSyndrome;\r
1522 UINT64 MemoryArrayErrorAddress;\r
1523 UINT64 DeviceErrorAddress;\r
1524 UINT32 DeviceErrorResolution;\r
91399a51 1525} EFI_MEMORY_64BIT_ERROR_INFORMATION;\r
79964ac8 1526\r
631344e6 1527///\r
1528/// Inconsistent with specification here: \r
1529/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
1530/// It is implementation-specific to simplify the code logic.\r
1531///\r
79964ac8 1532typedef union _EFI_MEMORY_SUBCLASS_RECORDS {\r
9205b2d7 1533 EFI_MEMORY_SIZE_DATA SizeData;\r
1534 EFI_MEMORY_ARRAY_LOCATION_DATA ArrayLocationData;\r
1535 EFI_MEMORY_ARRAY_LINK_DATA ArrayLink;\r
1536 EFI_MEMORY_ARRAY_START_ADDRESS_DATA ArrayStartAddress;\r
1537 EFI_MEMORY_DEVICE_START_ADDRESS_DATA DeviceStartAddress;\r
1538 EFI_MEMORY_CHANNEL_TYPE_DATA ChannelTypeData;\r
1539 EFI_MEMORY_CHANNEL_DEVICE_DATA ChannelDeviceData;\r
1540 EFI_MEMORY_CONTROLLER_INFORMATION MemoryControllerInfo;\r
1541 EFI_MEMORY_32BIT_ERROR_INFORMATION Memory32bitErrorInfo;\r
1542 EFI_MEMORY_64BIT_ERROR_INFORMATION Memory64bitErrorInfo;\r
79964ac8 1543} EFI_MEMORY_SUBCLASS_RECORDS;\r
1544\r
1545typedef struct {\r
9205b2d7 1546 EFI_SUBCLASS_TYPE1_HEADER Header;\r
1547 EFI_MEMORY_SUBCLASS_RECORDS Record;\r
79964ac8 1548} EFI_MEMORY_SUBCLASS_DRIVER_DATA;\r
1549\r
1550#define EFI_MISC_SUBCLASS_VERSION 0x0100\r
1551\r
79964ac8 1552//\r
1553// Last PCI Bus Number\r
1554//\r
9205b2d7 1555#define EFI_MISC_LAST_PCI_BUS_RECORD_NUMBER 0x00000001\r
79964ac8 1556\r
1557typedef struct {\r
9205b2d7 1558 UINT8 LastPciBus;\r
79964ac8 1559} EFI_MISC_LAST_PCI_BUS_DATA;\r
1560\r
79964ac8 1561//\r
1562// Misc. BIOS Vendor - SMBIOS Type 0\r
1563//\r
9205b2d7 1564#define EFI_MISC_BIOS_VENDOR_RECORD_NUMBER 0x00000002\r
1565\r
1566typedef struct {\r
1567 UINT64 Reserved1 :2;\r
1568 UINT64 Unknown :1;\r
1569 UINT64 BiosCharacteristicsNotSupported :1;\r
1570 UINT64 IsaIsSupported :1;\r
1571 UINT64 McaIsSupported :1;\r
1572 UINT64 EisaIsSupported :1;\r
1573 UINT64 PciIsSupported :1;\r
1574 UINT64 PcmciaIsSupported :1;\r
1575 UINT64 PlugAndPlayIsSupported :1;\r
1576 UINT64 ApmIsSupported :1;\r
1577 UINT64 BiosIsUpgradable :1;\r
1578 UINT64 BiosShadowingAllowed :1;\r
1579 UINT64 VlVesaIsSupported :1;\r
1580 UINT64 EscdSupportIsAvailable :1;\r
1581 UINT64 BootFromCdIsSupported :1;\r
1582 UINT64 SelectableBootIsSupported :1;\r
1583 UINT64 RomBiosIsSocketed :1;\r
1584 UINT64 BootFromPcmciaIsSupported :1;\r
1585 UINT64 EDDSpecificationIsSupported :1;\r
1586 UINT64 JapaneseNecFloppyIsSupported :1;\r
1587 UINT64 JapaneseToshibaFloppyIsSupported :1;\r
1588 UINT64 Floppy525_360IsSupported :1;\r
1589 UINT64 Floppy525_12IsSupported :1;\r
1590 UINT64 Floppy35_720IsSupported :1;\r
1591 UINT64 Floppy35_288IsSupported :1;\r
1592 UINT64 PrintScreenIsSupported :1;\r
1593 UINT64 Keyboard8042IsSupported :1;\r
1594 UINT64 SerialIsSupported :1;\r
1595 UINT64 PrinterIsSupported :1;\r
1596 UINT64 CgaMonoIsSupported :1;\r
1597 UINT64 NecPc98 :1;\r
1598 UINT64 AcpiIsSupported :1;\r
1599 UINT64 UsbLegacyIsSupported :1;\r
1600 UINT64 AgpIsSupported :1;\r
1601 UINT64 I20BootIsSupported :1;\r
1602 UINT64 Ls120BootIsSupported :1;\r
1603 UINT64 AtapiZipDriveBootIsSupported :1;\r
1604 UINT64 Boot1394IsSupported :1;\r
1605 UINT64 SmartBatteryIsSupported :1;\r
1606 UINT64 BiosBootSpecIsSupported :1;\r
1607 UINT64 FunctionKeyNetworkBootIsSupported :1;\r
1608 UINT64 Reserved :22;\r
79964ac8 1609} EFI_MISC_BIOS_CHARACTERISTICS;\r
1610\r
1611typedef struct {\r
9205b2d7 1612 UINT64 BiosReserved :16;\r
1613 UINT64 SystemReserved:16;\r
1614 UINT64 Reserved :32;\r
79964ac8 1615} EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION;\r
1616\r
1617typedef struct {\r
9205b2d7 1618 STRING_REF BiosVendor;\r
1619 STRING_REF BiosVersion;\r
1620 STRING_REF BiosReleaseDate;\r
1621 EFI_PHYSICAL_ADDRESS BiosStartingAddress;\r
1622 EFI_EXP_BASE2_DATA BiosPhysicalDeviceSize;\r
1623 EFI_MISC_BIOS_CHARACTERISTICS BiosCharacteristics1;\r
1624 EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION \r
1625 BiosCharacteristics2;\r
631344e6 1626 ///\r
1627 /// Inconsistent with specification here: \r
1628 /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.\r
1629 /// It's introduced for SmBios 2.6 spec type 0.\r
1630 ///\r
9205b2d7 1631 UINT8 BiosMajorRelease;\r
631344e6 1632 ///\r
1633 /// Inconsistent with specification here: \r
1634 /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.\r
1635 /// It's introduced for SmBios 2.6 spec type 0.\r
1636 ///\r
9205b2d7 1637 UINT8 BiosMinorRelease;\r
631344e6 1638 ///\r
1639 /// Inconsistent with specification here: \r
1640 /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.\r
1641 /// It's introduced for SmBios 2.6 spec type 0.\r
1642 ///\r
9205b2d7 1643 UINT8 BiosEmbeddedFirmwareMajorRelease;\r
631344e6 1644 ///\r
1645 /// Inconsistent with specification here: \r
1646 /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.\r
1647 /// It's introduced for SmBios 2.6 spec type 0.\r
1648 ///\r
9205b2d7 1649 UINT8 BiosEmbeddedFirmwareMinorRelease;\r
79964ac8 1650} EFI_MISC_BIOS_VENDOR_DATA;\r
1651\r
79964ac8 1652//\r
1653// Misc. System Manufacturer - SMBIOS Type 1\r
1654//\r
9205b2d7 1655#define EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER 0x00000003\r
79964ac8 1656\r
1657typedef enum {\r
1658 EfiSystemWakeupTypeReserved = 0,\r
1659 EfiSystemWakeupTypeOther = 1,\r
1660 EfiSystemWakeupTypeUnknown = 2,\r
1661 EfiSystemWakeupTypeApmTimer = 3,\r
1662 EfiSystemWakeupTypeModemRing = 4,\r
1663 EfiSystemWakeupTypeLanRemote = 5,\r
1664 EfiSystemWakeupTypePowerSwitch = 6,\r
1665 EfiSystemWakeupTypePciPme = 7,\r
661e7afd 1666 EfiSystemWakeupTypeAcPowerRestored = 8\r
79964ac8 1667} EFI_MISC_SYSTEM_WAKEUP_TYPE;\r
1668\r
1669typedef struct {\r
9205b2d7 1670 STRING_REF SystemManufacturer;\r
1671 STRING_REF SystemProductName;\r
1672 STRING_REF SystemVersion;\r
1673 STRING_REF SystemSerialNumber;\r
1674 EFI_GUID SystemUuid;\r
1675 EFI_MISC_SYSTEM_WAKEUP_TYPE SystemWakeupType;\r
631344e6 1676 ///\r
1677 /// Inconsistent with specification here: \r
1678 /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.\r
1679 /// It's introduced for SmBios 2.6 spec type 1.\r
1680 ///\r
9205b2d7 1681 STRING_REF SystemSKUNumber;\r
631344e6 1682 ///\r
1683 /// Inconsistent with specification here: \r
1684 /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.\r
1685 /// It's introduced for SmBios 2.6 spec type 1.\r
1686 ///\r
9205b2d7 1687 STRING_REF SystemFamily;\r
79964ac8 1688} EFI_MISC_SYSTEM_MANUFACTURER_DATA;\r
1689\r
79964ac8 1690//\r
1691// Misc. Base Board Manufacturer - SMBIOS Type 2\r
1692//\r
9205b2d7 1693#define EFI_MISC_BASE_BOARD_MANUFACTURER_RECORD_NUMBER 0x00000004\r
79964ac8 1694\r
1695typedef struct {\r
9205b2d7 1696 UINT32 Motherboard :1;\r
1697 UINT32 RequiresDaughterCard :1;\r
1698 UINT32 Removable :1;\r
1699 UINT32 Replaceable :1;\r
1700 UINT32 HotSwappable :1;\r
1701 UINT32 Reserved :27;\r
79964ac8 1702} EFI_BASE_BOARD_FEATURE_FLAGS;\r
1703\r
1704typedef enum {\r
1705 EfiBaseBoardTypeUnknown = 1,\r
1706 EfiBaseBoardTypeOther = 2,\r
1707 EfiBaseBoardTypeServerBlade = 3,\r
1708 EfiBaseBoardTypeConnectivitySwitch = 4,\r
1709 EfiBaseBoardTypeSystemManagementModule = 5,\r
1710 EfiBaseBoardTypeProcessorModule = 6,\r
1711 EfiBaseBoardTypeIOModule = 7,\r
1712 EfiBaseBoardTypeMemoryModule = 8,\r
1713 EfiBaseBoardTypeDaughterBoard = 9,\r
1714 EfiBaseBoardTypeMotherBoard = 0xA,\r
1715 EfiBaseBoardTypeProcessorMemoryModule = 0xB,\r
1716 EfiBaseBoardTypeProcessorIOModule = 0xC,\r
661e7afd 1717 EfiBaseBoardTypeInterconnectBoard = 0xD\r
79964ac8 1718} EFI_BASE_BOARD_TYPE;\r
1719\r
1720typedef struct {\r
9205b2d7 1721 STRING_REF BaseBoardManufacturer;\r
1722 STRING_REF BaseBoardProductName;\r
1723 STRING_REF BaseBoardVersion;\r
1724 STRING_REF BaseBoardSerialNumber;\r
1725 STRING_REF BaseBoardAssetTag;\r
1726 STRING_REF BaseBoardChassisLocation;\r
1727 EFI_BASE_BOARD_FEATURE_FLAGS BaseBoardFeatureFlags;\r
1728 EFI_BASE_BOARD_TYPE BaseBoardType;\r
1729 EFI_INTER_LINK_DATA BaseBoardChassisLink;\r
1730 UINT32 BaseBoardNumberLinks;\r
1731 EFI_INTER_LINK_DATA LinkN;\r
79964ac8 1732} EFI_MISC_BASE_BOARD_MANUFACTURER_DATA;\r
1733\r
79964ac8 1734//\r
1735// Misc. System/Chassis Enclosure - SMBIOS Type 3\r
1736//\r
9205b2d7 1737#define EFI_MISC_CHASSIS_MANUFACTURER_RECORD_NUMBER 0x00000005\r
79964ac8 1738\r
1739typedef enum {\r
1740 EfiMiscChassisTypeOther = 0x1,\r
1741 EfiMiscChassisTypeUnknown = 0x2,\r
1742 EfiMiscChassisTypeDeskTop = 0x3,\r
1743 EfiMiscChassisTypeLowProfileDesktop = 0x4,\r
1744 EfiMiscChassisTypePizzaBox = 0x5,\r
1745 EfiMiscChassisTypeMiniTower = 0x6,\r
1746 EfiMiscChassisTypeTower = 0x7,\r
1747 EfiMiscChassisTypePortable = 0x8,\r
1748 EfiMiscChassisTypeLapTop = 0x9,\r
1749 EfiMiscChassisTypeNotebook = 0xA,\r
1750 EfiMiscChassisTypeHandHeld = 0xB,\r
1751 EfiMiscChassisTypeDockingStation = 0xC,\r
1752 EfiMiscChassisTypeAllInOne = 0xD,\r
1753 EfiMiscChassisTypeSubNotebook = 0xE,\r
1754 EfiMiscChassisTypeSpaceSaving = 0xF,\r
1755 EfiMiscChassisTypeLunchBox = 0x10,\r
1756 EfiMiscChassisTypeMainServerChassis = 0x11,\r
1757 EfiMiscChassisTypeExpansionChassis = 0x12,\r
1758 EfiMiscChassisTypeSubChassis = 0x13,\r
1759 EfiMiscChassisTypeBusExpansionChassis = 0x14,\r
1760 EfiMiscChassisTypePeripheralChassis = 0x15,\r
1761 EfiMiscChassisTypeRaidChassis = 0x16,\r
1762 EfiMiscChassisTypeRackMountChassis = 0x17,\r
1763 EfiMiscChassisTypeSealedCasePc = 0x18,\r
661e7afd 1764 EfiMiscChassisMultiSystemChassis = 0x19\r
79964ac8 1765} EFI_MISC_CHASSIS_TYPE;\r
1766\r
1767typedef struct {\r
6b7058c4 1768 ///\r
1769 /// Inconsistent with specification here: \r
1770 /// It's a typo of MiscSubclass 0.9 spec. It should be a variable\r
1771 /// name "ChassisType" rather than a type "EFI_MISC_CHASSIS_TYPE".\r
1772 ///\r
9205b2d7 1773 UINT32 ChassisType :16;\r
1774 UINT32 ChassisLockPresent:1;\r
1775 UINT32 Reserved :15;\r
79964ac8 1776} EFI_MISC_CHASSIS_STATUS;\r
1777\r
1778typedef enum {\r
1779 EfiChassisStateOther = 0x01,\r
1780 EfiChassisStateUnknown = 0x02,\r
1781 EfiChassisStateSafe = 0x03,\r
1782 EfiChassisStateWarning = 0x04,\r
1783 EfiChassisStateCritical = 0x05,\r
661e7afd 1784 EfiChassisStateNonRecoverable = 0x06\r
79964ac8 1785} EFI_MISC_CHASSIS_STATE;\r
1786\r
1787typedef enum {\r
1788 EfiChassisSecurityStatusOther = 0x01,\r
1789 EfiChassisSecurityStatusUnknown = 0x02,\r
1790 EfiChassisSecurityStatusNone = 0x03,\r
1791 EfiChassisSecurityStatusExternalInterfaceLockedOut = 0x04,\r
661e7afd 1792 EfiChassisSecurityStatusExternalInterfaceLockedEnabled = 0x05\r
79964ac8 1793} EFI_MISC_CHASSIS_SECURITY_STATE;\r
1794\r
1795typedef struct {\r
a244f400 1796 UINT32 RecordType :1;\r
1797 UINT32 Type :7;\r
1798 UINT32 Reserved :24;\r
79964ac8 1799} EFI_MISC_ELEMENT_TYPE;\r
1800\r
1801typedef struct {\r
9205b2d7 1802 EFI_MISC_ELEMENT_TYPE ChassisElementType;\r
1803 EFI_INTER_LINK_DATA ChassisElementStructure;\r
1804 EFI_BASE_BOARD_TYPE ChassisBaseBoard;\r
1805 UINT32 ChassisElementMinimum;\r
1806 UINT32 ChassisElementMaximum;\r
79964ac8 1807} EFI_MISC_ELEMENTS;\r
1808\r
1809typedef struct {\r
9205b2d7 1810 STRING_REF ChassisManufacturer;\r
1811 STRING_REF ChassisVersion;\r
1812 STRING_REF ChassisSerialNumber;\r
1813 STRING_REF ChassisAssetTag;\r
1814 EFI_MISC_CHASSIS_STATUS ChassisType;\r
1815 EFI_MISC_CHASSIS_STATE ChassisBootupState;\r
1816 EFI_MISC_CHASSIS_STATE ChassisPowerSupplyState;\r
1817 EFI_MISC_CHASSIS_STATE ChassisThermalState;\r
1818 EFI_MISC_CHASSIS_SECURITY_STATE ChassisSecurityState;\r
1819 UINT32 ChassisOemDefined;\r
1820 UINT32 ChassisHeight;\r
1821 UINT32 ChassisNumberPowerCords;\r
1822 UINT32 ChassisElementCount;\r
1823 UINT32 ChassisElementRecordLength;\r
1824 EFI_MISC_ELEMENTS ChassisElements;\r
79964ac8 1825} EFI_MISC_CHASSIS_MANUFACTURER_DATA;\r
1826\r
79964ac8 1827//\r
1828// Misc. Port Connector Information - SMBIOS Type 8\r
1829//\r
9205b2d7 1830#define EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_RECORD_NUMBER 0x00000006\r
79964ac8 1831\r
1832typedef enum {\r
1833 EfiPortConnectorTypeNone = 0x00,\r
1834 EfiPortConnectorTypeCentronics = 0x01,\r
1835 EfiPortConnectorTypeMiniCentronics = 0x02,\r
1836 EfiPortConnectorTypeProprietary = 0x03,\r
1837 EfiPortConnectorTypeDB25Male = 0x04,\r
1838 EfiPortConnectorTypeDB25Female = 0x05,\r
1839 EfiPortConnectorTypeDB15Male = 0x06,\r
1840 EfiPortConnectorTypeDB15Female = 0x07,\r
1841 EfiPortConnectorTypeDB9Male = 0x08,\r
1842 EfiPortConnectorTypeDB9Female = 0x09,\r
1843 EfiPortConnectorTypeRJ11 = 0x0A,\r
1844 EfiPortConnectorTypeRJ45 = 0x0B,\r
1845 EfiPortConnectorType50PinMiniScsi = 0x0C,\r
1846 EfiPortConnectorTypeMiniDin = 0x0D,\r
1847 EfiPortConnectorTypeMicriDin = 0x0E,\r
1848 EfiPortConnectorTypePS2 = 0x0F,\r
1849 EfiPortConnectorTypeInfrared = 0x10,\r
1850 EfiPortConnectorTypeHpHil = 0x11,\r
1851 EfiPortConnectorTypeUsb = 0x12,\r
1852 EfiPortConnectorTypeSsaScsi = 0x13,\r
1853 EfiPortConnectorTypeCircularDin8Male = 0x14,\r
1854 EfiPortConnectorTypeCircularDin8Female = 0x15,\r
1855 EfiPortConnectorTypeOnboardIde = 0x16,\r
1856 EfiPortConnectorTypeOnboardFloppy = 0x17,\r
1857 EfiPortConnectorType9PinDualInline = 0x18,\r
1858 EfiPortConnectorType25PinDualInline = 0x19,\r
1859 EfiPortConnectorType50PinDualInline = 0x1A,\r
1860 EfiPortConnectorType68PinDualInline = 0x1B,\r
1861 EfiPortConnectorTypeOnboardSoundInput = 0x1C,\r
1862 EfiPortConnectorTypeMiniCentronicsType14 = 0x1D,\r
1863 EfiPortConnectorTypeMiniCentronicsType26 = 0x1E,\r
1864 EfiPortConnectorTypeHeadPhoneMiniJack = 0x1F,\r
1865 EfiPortConnectorTypeBNC = 0x20,\r
1866 EfiPortConnectorType1394 = 0x21,\r
1867 EfiPortConnectorTypePC98 = 0xA0,\r
1868 EfiPortConnectorTypePC98Hireso = 0xA1,\r
1869 EfiPortConnectorTypePCH98 = 0xA2,\r
1870 EfiPortConnectorTypePC98Note = 0xA3,\r
1871 EfiPortConnectorTypePC98Full = 0xA4,\r
661e7afd 1872 EfiPortConnectorTypeOther = 0xFF\r
79964ac8 1873} EFI_MISC_PORT_CONNECTOR_TYPE;\r
1874\r
1875typedef enum {\r
1876 EfiPortTypeNone = 0x00,\r
1877 EfiPortTypeParallelXtAtCompatible = 0x01,\r
1878 EfiPortTypeParallelPortPs2 = 0x02,\r
1879 EfiPortTypeParallelPortEcp = 0x03,\r
1880 EfiPortTypeParallelPortEpp = 0x04,\r
1881 EfiPortTypeParallelPortEcpEpp = 0x05,\r
1882 EfiPortTypeSerialXtAtCompatible = 0x06,\r
1883 EfiPortTypeSerial16450Compatible = 0x07,\r
1884 EfiPortTypeSerial16550Compatible = 0x08,\r
1885 EfiPortTypeSerial16550ACompatible = 0x09,\r
1886 EfiPortTypeScsi = 0x0A,\r
1887 EfiPortTypeMidi = 0x0B,\r
1888 EfiPortTypeJoyStick = 0x0C,\r
1889 EfiPortTypeKeyboard = 0x0D,\r
1890 EfiPortTypeMouse = 0x0E,\r
1891 EfiPortTypeSsaScsi = 0x0F,\r
1892 EfiPortTypeUsb = 0x10,\r
1893 EfiPortTypeFireWire = 0x11,\r
1894 EfiPortTypePcmciaTypeI = 0x12,\r
1895 EfiPortTypePcmciaTypeII = 0x13,\r
1896 EfiPortTypePcmciaTypeIII = 0x14,\r
1897 EfiPortTypeCardBus = 0x15,\r
1898 EfiPortTypeAccessBusPort = 0x16,\r
1899 EfiPortTypeScsiII = 0x17,\r
1900 EfiPortTypeScsiWide = 0x18,\r
1901 EfiPortTypePC98 = 0x19,\r
1902 EfiPortTypePC98Hireso = 0x1A,\r
1903 EfiPortTypePCH98 = 0x1B,\r
1904 EfiPortTypeVideoPort = 0x1C,\r
1905 EfiPortTypeAudioPort = 0x1D,\r
1906 EfiPortTypeModemPort = 0x1E,\r
1907 EfiPortTypeNetworkPort = 0x1F,\r
1908 EfiPortType8251Compatible = 0xA0,\r
1909 EfiPortType8251FifoCompatible = 0xA1,\r
661e7afd 1910 EfiPortTypeOther = 0xFF\r
79964ac8 1911} EFI_MISC_PORT_TYPE;\r
1912\r
1913typedef struct {\r
9205b2d7 1914 STRING_REF PortInternalConnectorDesignator;\r
1915 STRING_REF PortExternalConnectorDesignator;\r
1916 EFI_MISC_PORT_CONNECTOR_TYPE PortInternalConnectorType;\r
1917 EFI_MISC_PORT_CONNECTOR_TYPE PortExternalConnectorType;\r
1918 EFI_MISC_PORT_TYPE PortType;\r
1919 EFI_MISC_PORT_DEVICE_PATH PortPath;\r
79964ac8 1920} EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA;\r
1921\r
79964ac8 1922//\r
1923// Misc. System Slots - SMBIOS Type 9\r
1924//\r
9205b2d7 1925#define EFI_MISC_SYSTEM_SLOT_DESIGNATION_RECORD_NUMBER 0x00000007\r
79964ac8 1926\r
1927typedef enum {\r
1928 EfiSlotTypeOther = 0x01,\r
1929 EfiSlotTypeUnknown = 0x02,\r
1930 EfiSlotTypeIsa = 0x03,\r
1931 EfiSlotTypeMca = 0x04,\r
1932 EfiSlotTypeEisa = 0x05,\r
1933 EfiSlotTypePci = 0x06,\r
1934 EfiSlotTypePcmcia = 0x07,\r
1935 EfiSlotTypeVlVesa = 0x08,\r
1936 EfiSlotTypeProprietary = 0x09,\r
1937 EfiSlotTypeProcessorCardSlot = 0x0A,\r
1938 EfiSlotTypeProprietaryMemoryCardSlot = 0x0B,\r
1939 EfiSlotTypeIORiserCardSlot = 0x0C,\r
1940 EfiSlotTypeNuBus = 0x0D,\r
1941 EfiSlotTypePci66MhzCapable = 0x0E,\r
1942 EfiSlotTypeAgp = 0x0F,\r
631344e6 1943 ///\r
1944 /// Inconsistent with specification here: \r
1945 /// In MiscSubclass spec 0.9, there is a typo on this field.\r
1946 /// Its naming should be EfiSlotTypeAgp2X rather than EfiSlotTypeApg2X.\r
1947 ///\r
1948 EfiSlotTypeAgp2X = 0x10,\r
79964ac8 1949 EfiSlotTypeAgp4X = 0x11,\r
1950 EfiSlotTypePciX = 0x12,\r
631344e6 1951 ///\r
1952 /// Inconsistent with specification here: \r
1953 /// In MiscSubclass spec 0.9, there is a typo on this field.\r
1954 /// Its naming should be EfiSlotTypeAgp8X rather than EfiSlotTypeAgp8x.\r
1955 ///\r
1956 EfiSlotTypeAgp8X = 0x13,\r
79964ac8 1957 EfiSlotTypePC98C20 = 0xA0,\r
1958 EfiSlotTypePC98C24 = 0xA1,\r
1959 EfiSlotTypePC98E = 0xA2,\r
1960 EfiSlotTypePC98LocalBus = 0xA3,\r
1961 EfiSlotTypePC98Card = 0xA4,\r
631344e6 1962 ///\r
1963 /// Inconsistent with specification here: \r
1964 /// In MiscSubclass spec 0.9, this field isn't defined.\r
1965 /// It's introduced for SmBios 2.6 spec type 9.\r
1966 ///\r
79964ac8 1967 EfiSlotTypePciExpress = 0xA5\r
1968} EFI_MISC_SLOT_TYPE;\r
1969\r
1970typedef enum {\r
1971 EfiSlotDataBusWidthOther = 0x01,\r
1972 EfiSlotDataBusWidthUnknown = 0x02,\r
1973 EfiSlotDataBusWidth8Bit = 0x03,\r
1974 EfiSlotDataBusWidth16Bit = 0x04,\r
1975 EfiSlotDataBusWidth32Bit = 0x05,\r
1976 EfiSlotDataBusWidth64Bit = 0x06,\r
661e7afd 1977 EfiSlotDataBusWidth128Bit = 0x07\r
79964ac8 1978} EFI_MISC_SLOT_DATA_BUS_WIDTH;\r
1979\r
1980typedef enum {\r
1981 EfiSlotUsageOther = 1,\r
1982 EfiSlotUsageUnknown = 2,\r
1983 EfiSlotUsageAvailable = 3,\r
661e7afd 1984 EfiSlotUsageInUse = 4\r
79964ac8 1985} EFI_MISC_SLOT_USAGE;\r
1986\r
1987typedef enum {\r
1988 EfiSlotLengthOther = 1,\r
1989 EfiSlotLengthUnknown = 2,\r
1990 EfiSlotLengthShort = 3,\r
1991 EfiSlotLengthLong = 4\r
1992} EFI_MISC_SLOT_LENGTH;\r
1993\r
1994typedef struct {\r
9205b2d7 1995 UINT32 CharacteristicsUnknown :1;\r
1996 UINT32 Provides50Volts :1;\r
1997 UINT32 Provides33Volts :1;\r
1998 UINT32 SharedSlot :1;\r
1999 UINT32 PcCard16Supported :1;\r
2000 UINT32 CardBusSupported :1;\r
2001 UINT32 ZoomVideoSupported :1;\r
2002 UINT32 ModemRingResumeSupported:1;\r
2003 UINT32 PmeSignalSupported :1;\r
2004 UINT32 HotPlugDevicesSupported :1;\r
2005 UINT32 SmbusSignalSupported :1;\r
2006 UINT32 Reserved :21;\r
79964ac8 2007} EFI_MISC_SLOT_CHARACTERISTICS;\r
2008\r
2009typedef struct {\r
9205b2d7 2010 STRING_REF SlotDesignation;\r
2011 EFI_MISC_SLOT_TYPE SlotType;\r
2012 EFI_MISC_SLOT_DATA_BUS_WIDTH SlotDataBusWidth;\r
2013 EFI_MISC_SLOT_USAGE SlotUsage;\r
2014 EFI_MISC_SLOT_LENGTH SlotLength;\r
2015 UINT16 SlotId;\r
2016 EFI_MISC_SLOT_CHARACTERISTICS SlotCharacteristics;\r
2017 EFI_DEVICE_PATH_PROTOCOL SlotDevicePath;\r
79964ac8 2018} EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA;\r
2019\r
79964ac8 2020//\r
2021// Misc. Onboard Device - SMBIOS Type 10\r
2022//\r
9205b2d7 2023#define EFI_MISC_ONBOARD_DEVICE_RECORD_NUMBER 0x00000008\r
79964ac8 2024\r
2025typedef enum {\r
2026 EfiOnBoardDeviceTypeOther = 1,\r
2027 EfiOnBoardDeviceTypeUnknown = 2,\r
2028 EfiOnBoardDeviceTypeVideo = 3,\r
2029 EfiOnBoardDeviceTypeScsiController = 4,\r
2030 EfiOnBoardDeviceTypeEthernet = 5,\r
2031 EfiOnBoardDeviceTypeTokenRing = 6,\r
661e7afd 2032 EfiOnBoardDeviceTypeSound = 7\r
79964ac8 2033} EFI_MISC_ONBOARD_DEVICE_TYPE;\r
2034\r
2035typedef struct {\r
9205b2d7 2036 UINT32 DeviceType :16;\r
2037 UINT32 DeviceEnabled :1;\r
2038 UINT32 Reserved :15;\r
79964ac8 2039} EFI_MISC_ONBOARD_DEVICE_STATUS;\r
2040\r
2041typedef struct {\r
9205b2d7 2042 STRING_REF OnBoardDeviceDescription;\r
631344e6 2043 EFI_MISC_ONBOARD_DEVICE_STATUS OnBoardDeviceType;\r
9205b2d7 2044 EFI_DEVICE_PATH_PROTOCOL OnBoardDevicePath;\r
79964ac8 2045} EFI_MISC_ONBOARD_DEVICE_DATA;\r
2046\r
79964ac8 2047//\r
2048// Misc. BIOS Language Information - SMBIOS Type 11\r
2049//\r
9205b2d7 2050#define EFI_MISC_OEM_STRING_RECORD_NUMBER 0x00000009\r
79964ac8 2051\r
2052typedef struct {\r
9205b2d7 2053 STRING_REF OemStringRef[1];\r
79964ac8 2054} EFI_MISC_OEM_STRING_DATA;\r
2055\r
79964ac8 2056//\r
2057// Misc. System Options - SMBIOS Type 12\r
2058//\r
2059typedef struct {\r
9205b2d7 2060 STRING_REF SystemOptionStringRef[1];\r
79964ac8 2061} EFI_MISC_SYSTEM_OPTION_STRING_DATA;\r
2062\r
9205b2d7 2063#define EFI_MISC_SYSTEM_OPTION_STRING_RECORD_NUMBER 0x0000000A\r
79964ac8 2064\r
79964ac8 2065//\r
2066// Misc. Number of Installable Languages - SMBIOS Type 13\r
2067//\r
9205b2d7 2068#define EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_RECORD_NUMBER 0x0000000B\r
79964ac8 2069\r
2070typedef struct {\r
9205b2d7 2071 UINT32 AbbreviatedLanguageFormat :1;\r
2072 UINT32 Reserved :31;\r
79964ac8 2073} EFI_MISC_LANGUAGE_FLAGS;\r
2074\r
2075typedef struct {\r
9205b2d7 2076 UINT16 NumberOfInstallableLanguages;\r
2077 EFI_MISC_LANGUAGE_FLAGS LanguageFlags;\r
2078 UINT16 CurrentLanguageNumber;\r
79964ac8 2079} EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA;\r
2080\r
79964ac8 2081//\r
2082// Misc. System Language String\r
2083//\r
9205b2d7 2084#define EFI_MISC_SYSTEM_LANGUAGE_STRING_RECORD_NUMBER 0x0000000C\r
79964ac8 2085\r
2086typedef struct {\r
9205b2d7 2087 UINT16 LanguageId;\r
2088 STRING_REF SystemLanguageString;\r
79964ac8 2089} EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA;\r
2090\r
79964ac8 2091//\r
2092// Group Associations - SMBIOS Type 14\r
2093//\r
9205b2d7 2094#define EFI_MISC_GROUP_NAME_RECORD_NUMBER 0x0000000D\r
79964ac8 2095\r
2096typedef struct {\r
9205b2d7 2097 STRING_REF GroupName;\r
2098 UINT16 NumberGroupItems;\r
2099 UINT16 GroupId;\r
79964ac8 2100} EFI_MISC_GROUP_NAME_DATA;\r
2101\r
79964ac8 2102//\r
2103// Group Item Set Element\r
2104//\r
9205b2d7 2105#define EFI_MISC_GROUP_ITEM_SET_RECORD_NUMBER 0x0000000E\r
79964ac8 2106\r
2107typedef struct {\r
9205b2d7 2108 EFI_GUID SubClass;\r
2109 EFI_INTER_LINK_DATA GroupLink;\r
2110 UINT16 GroupId;\r
2111 UINT16 GroupElementId;\r
79964ac8 2112} EFI_MISC_GROUP_ITEM_SET_DATA;\r
2113\r
79964ac8 2114//\r
2115// Misc. Pointing Device Type - SMBIOS Type 21\r
2116//\r
9205b2d7 2117#define EFI_MISC_POINTING_DEVICE_TYPE_RECORD_NUMBER 0x0000000F\r
79964ac8 2118\r
2119typedef enum {\r
2120 EfiPointingDeviceTypeOther = 0x01,\r
2121 EfiPointingDeviceTypeUnknown = 0x02,\r
2122 EfiPointingDeviceTypeMouse = 0x03,\r
2123 EfiPointingDeviceTypeTrackBall = 0x04,\r
2124 EfiPointingDeviceTypeTrackPoint = 0x05,\r
2125 EfiPointingDeviceTypeGlidePoint = 0x06,\r
2126 EfiPointingDeviceTouchPad = 0x07,\r
2127 EfiPointingDeviceTouchScreen = 0x08,\r
661e7afd 2128 EfiPointingDeviceOpticalSensor = 0x09\r
79964ac8 2129} EFI_MISC_POINTING_DEVICE_TYPE;\r
2130\r
2131typedef enum {\r
2132 EfiPointingDeviceInterfaceOther = 0x01,\r
2133 EfiPointingDeviceInterfaceUnknown = 0x02,\r
2134 EfiPointingDeviceInterfaceSerial = 0x03,\r
2135 EfiPointingDeviceInterfacePs2 = 0x04,\r
2136 EfiPointingDeviceInterfaceInfrared = 0x05,\r
2137 EfiPointingDeviceInterfaceHpHil = 0x06,\r
2138 EfiPointingDeviceInterfaceBusMouse = 0x07,\r
2139 EfiPointingDeviceInterfaceADB = 0x08,\r
2140 EfiPointingDeviceInterfaceBusMouseDB9 = 0xA0,\r
2141 EfiPointingDeviceInterfaceBusMouseMicroDin = 0xA1,\r
661e7afd 2142 EfiPointingDeviceInterfaceUsb = 0xA2\r
79964ac8 2143} EFI_MISC_POINTING_DEVICE_INTERFACE;\r
2144\r
2145typedef struct {\r
2146 EFI_MISC_POINTING_DEVICE_TYPE PointingDeviceType;\r
2147 EFI_MISC_POINTING_DEVICE_INTERFACE PointingDeviceInterface;\r
2148 UINT16 NumberPointingDeviceButtons;\r
2149 EFI_DEVICE_PATH_PROTOCOL PointingDevicePath;\r
631344e6 2150} EFI_MISC_POINTING_DEVICE_TYPE_DATA;\r
79964ac8 2151\r
79964ac8 2152//\r
2153// Portable Battery - SMBIOS Type 22\r
2154//\r
631344e6 2155#define EFI_MISC_BATTERY_LOCATION_RECORD_NUMBER 0x00000010\r
79964ac8 2156\r
631344e6 2157typedef enum {\r
2158 EfiBatteryDeviceChemistryTypeOther = 1, \r
2159 EfiBatteryDeviceChemistryTypeUnknown = 2, \r
2160 EfiBatteryDeviceChemistryTypeLeadAcid = 3, \r
2161 EfiBatteryDeviceChemistryTypeNickelCadmium = 4, \r
2162 EfiBatteryDeviceChemistryTypeNickelMetalHydride = 5, \r
2163 EfiBatteryDeviceChemistryTypeLithiumIon = 6, \r
2164 EfiBatteryDeviceChemistryTypeZincAir = 7, \r
2165 EfiBatteryDeviceChemistryTypeLithiumPolymer = 8\r
2166} EFI_MISC_BATTERY_DEVICE_CHEMISTRY;\r
2167\r
2168typedef struct { \r
2169 UINT32 Date :5; \r
2170 UINT32 Month :4; \r
2171 UINT32 Year :7; \r
2172 UINT32 Reserved :16; \r
2173} EFI_MISC_BATTERY_SBDS_MANUFACTURE_DATE;\r
2174\r
2175typedef struct { \r
2176 STRING_REF BatteryLocation; \r
2177 STRING_REF BatteryManufacturer; \r
2178 STRING_REF BatteryManufactureDate; \r
2179 STRING_REF BatterySerialNumber; \r
2180 STRING_REF BatteryDeviceName; \r
2181 STRING_REF BatterySbdsVersionNumber; \r
2182 STRING_REF BatterySbdsDeviceChemistry; \r
2183 EFI_MISC_BATTERY_DEVICE_CHEMISTRY BatteryDeviceChemistry; \r
2184 EFI_EXP_BASE10_DATA BatteryDesignCapacity; \r
2185 EFI_EXP_BASE10_DATA BatteryDesignVoltage; \r
2186 UINT16 BatteryMaximumError; \r
2187 UINT16 BatterySbdsSerialNumber; \r
2188 EFI_MISC_BATTERY_SBDS_MANUFACTURE_DATE \r
2189 BatterySbdsManufacturingDate; \r
2190 UINT32 BatteryOemSpecific; \r
2191} EFI_MISC_BATTERY_LOCATION_DATA;\r
79964ac8 2192\r
79964ac8 2193//\r
2194// Misc. Reset Capabilities - SMBIOS Type 23\r
2195//\r
9205b2d7 2196#define EFI_MISC_RESET_CAPABILITIES_RECORD_NUMBER 0x00000011\r
79964ac8 2197\r
2198typedef struct {\r
9205b2d7 2199 UINT32 Status :1;\r
2200 UINT32 BootOption :2;\r
2201 UINT32 BootOptionOnLimit :2;\r
2202 UINT32 WatchdogTimerPresent:1;\r
2203 UINT32 Reserved :26;\r
79964ac8 2204} EFI_MISC_RESET_CAPABILITIES_TYPE;\r
2205\r
2206typedef struct {\r
2207 EFI_MISC_RESET_CAPABILITIES_TYPE ResetCapabilities;\r
2208 UINT16 ResetCount;\r
2209 UINT16 ResetLimit;\r
2210 UINT16 ResetTimerInterval;\r
2211 UINT16 ResetTimeout;\r
2212} EFI_MISC_RESET_CAPABILITIES;\r
2213\r
2214typedef struct {\r
9205b2d7 2215 EFI_MISC_RESET_CAPABILITIES ResetCapabilities;\r
2216 UINT16 ResetCount;\r
2217 UINT16 ResetLimit;\r
2218 UINT16 ResetTimerInterval;\r
2219 UINT16 ResetTimeout;\r
79964ac8 2220} EFI_MISC_RESET_CAPABILITIES_DATA;\r
2221\r
79964ac8 2222//\r
2223// Misc. Hardware Security - SMBIOS Type 24\r
2224//\r
9205b2d7 2225#define EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA_RECORD_NUMBER 0x00000012\r
79964ac8 2226\r
631344e6 2227///\r
2228/// Inconsistent with specification here: \r
2229/// In MiscSubclass spec0.9, it only mention the possible value of each field in\r
2230/// EFI_MISC_HARDWARE_SECURITY_SETTINGS. \r
2231/// It's implementation-specific to simplify the code logic.\r
2232///\r
79964ac8 2233typedef enum {\r
2234 EfiHardwareSecurityStatusDisabled = 0,\r
2235 EfiHardwareSecurityStatusEnabled = 1,\r
2236 EfiHardwareSecurityStatusNotImplemented = 2,\r
2237 EfiHardwareSecurityStatusUnknown = 3\r
2238} EFI_MISC_HARDWARE_SECURITY_STATUS;\r
2239\r
2240typedef struct {\r
631344e6 2241 UINT32 FrontPanelResetStatus :2;\r
2242 UINT32 AdministratorPasswordStatus :2;\r
2243 UINT32 KeyboardPasswordStatus :2;\r
2244 UINT32 PowerOnPasswordStatus :2;\r
2245 UINT32 Reserved :24;\r
79964ac8 2246} EFI_MISC_HARDWARE_SECURITY_SETTINGS;\r
2247\r
2248typedef struct {\r
2249 EFI_MISC_HARDWARE_SECURITY_SETTINGS HardwareSecuritySettings;\r
2250} EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA;\r
2251\r
79964ac8 2252//\r
2253// System Power Controls - SMBIOS Type 25\r
2254//\r
9205b2d7 2255#define EFI_MISC_SCHEDULED_POWER_ON_MONTH_RECORD_NUMBER 0x00000013\r
79964ac8 2256\r
2257typedef struct {\r
9205b2d7 2258 UINT16 ScheduledPoweronMonth;\r
2259 UINT16 ScheduledPoweronDayOfMonth;\r
2260 UINT16 ScheduledPoweronHour;\r
2261 UINT16 ScheduledPoweronMinute;\r
2262 UINT16 ScheduledPoweronSecond;\r
79964ac8 2263} EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA;\r
2264\r
79964ac8 2265//\r
2266// Voltage Probe - SMBIOS Type 26\r
2267//\r
9205b2d7 2268#define EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000014\r
79964ac8 2269\r
2270typedef struct {\r
9205b2d7 2271 UINT32 VoltageProbeSite :5;\r
2272 UINT32 VoltageProbeStatus :3;\r
2273 UINT32 Reserved :24;\r
79964ac8 2274} EFI_MISC_VOLTAGE_PROBE_LOCATION;\r
2275\r
2276typedef struct {\r
9205b2d7 2277 STRING_REF VoltageProbeDescription;\r
2278 EFI_MISC_VOLTAGE_PROBE_LOCATION VoltageProbeLocation;\r
2279 EFI_EXP_BASE10_DATA VoltageProbeMaximumValue;\r
2280 EFI_EXP_BASE10_DATA VoltageProbeMinimumValue;\r
2281 EFI_EXP_BASE10_DATA VoltageProbeResolution;\r
2282 EFI_EXP_BASE10_DATA VoltageProbeTolerance;\r
2283 EFI_EXP_BASE10_DATA VoltageProbeAccuracy;\r
2284 EFI_EXP_BASE10_DATA VoltageProbeNominalValue;\r
2285 EFI_EXP_BASE10_DATA MDLowerNoncriticalThreshold;\r
2286 EFI_EXP_BASE10_DATA MDUpperNoncriticalThreshold;\r
2287 EFI_EXP_BASE10_DATA MDLowerCriticalThreshold;\r
2288 EFI_EXP_BASE10_DATA MDUpperCriticalThreshold;\r
2289 EFI_EXP_BASE10_DATA MDLowerNonrecoverableThreshold;\r
2290 EFI_EXP_BASE10_DATA MDUpperNonrecoverableThreshold;\r
2291 UINT32 VoltageProbeOemDefined;\r
79964ac8 2292} EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA;\r
2293\r
79964ac8 2294//\r
2295// Cooling Device - SMBIOS Type 27\r
2296//\r
9205b2d7 2297#define EFI_MISC_COOLING_DEVICE_TEMP_LINK_RECORD_NUMBER 0x00000015\r
79964ac8 2298\r
2299typedef struct {\r
9205b2d7 2300 UINT32 CoolingDevice :5;\r
2301 UINT32 CoolingDeviceStatus :3;\r
2302 UINT32 Reserved :24;\r
79964ac8 2303} EFI_MISC_COOLING_DEVICE_TYPE;\r
2304\r
2305typedef struct {\r
9205b2d7 2306 EFI_MISC_COOLING_DEVICE_TYPE CoolingDeviceType;\r
2307 EFI_INTER_LINK_DATA CoolingDeviceTemperatureLink;\r
2308 UINT16 CoolingDeviceUnitGroup;\r
2309 EFI_EXP_BASE10_DATA CoolingDeviceNominalSpeed;\r
2310 UINT32 CoolingDeviceOemDefined;\r
79964ac8 2311} EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA;\r
2312\r
79964ac8 2313//\r
2314// Temperature Probe - SMBIOS Type 28\r
2315//\r
9205b2d7 2316#define EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000016\r
79964ac8 2317\r
2318typedef struct {\r
9205b2d7 2319 UINT32 TemperatureProbeSite :5;\r
2320 UINT32 TemperatureProbeStatus :3;\r
2321 UINT32 Reserved :24;\r
79964ac8 2322} EFI_MISC_TEMPERATURE_PROBE_LOCATION;\r
2323\r
2324typedef struct {\r
9205b2d7 2325 STRING_REF TemperatureProbeDescription;\r
79964ac8 2326 EFI_MISC_TEMPERATURE_PROBE_LOCATION\r
9205b2d7 2327 TemperatureProbeLocation;\r
2328 EFI_EXP_BASE10_DATA TemperatureProbeMaximumValue;\r
2329 EFI_EXP_BASE10_DATA TemperatureProbeMinimumValue;\r
2330 EFI_EXP_BASE10_DATA TemperatureProbeResolution;\r
2331 EFI_EXP_BASE10_DATA TemperatureProbeTolerance;\r
2332 EFI_EXP_BASE10_DATA TemperatureProbeAccuracy;\r
2333 EFI_EXP_BASE10_DATA TemperatureProbeNominalValue;\r
2334 EFI_EXP_BASE10_DATA MDLowerNoncriticalThreshold;\r
2335 EFI_EXP_BASE10_DATA MDUpperNoncriticalThreshold;\r
2336 EFI_EXP_BASE10_DATA MDLowerCriticalThreshold;\r
2337 EFI_EXP_BASE10_DATA MDUpperCriticalThreshold;\r
2338 EFI_EXP_BASE10_DATA MDLowerNonrecoverableThreshold;\r
2339 EFI_EXP_BASE10_DATA MDUpperNonrecoverableThreshold;\r
2340 UINT32 TemperatureProbeOemDefined;\r
79964ac8 2341} EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA;\r
2342\r
79964ac8 2343//\r
2344// Electrical Current Probe - SMBIOS Type 29\r
2345//\r
2346\r
9205b2d7 2347#define EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000017\r
79964ac8 2348\r
2349typedef struct {\r
9205b2d7 2350 UINT32 ElectricalCurrentProbeSite :5;\r
2351 UINT32 ElectricalCurrentProbeStatus :3;\r
2352 UINT32 Reserved :24;\r
79964ac8 2353} EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION;\r
2354\r
2355typedef struct {\r
9205b2d7 2356 STRING_REF ElectricalCurrentProbeDescription;\r
79964ac8 2357 EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION\r
9205b2d7 2358 ElectricalCurrentProbeLocation;\r
2359 EFI_EXP_BASE10_DATA ElectricalCurrentProbeMaximumValue;\r
2360 EFI_EXP_BASE10_DATA ElectricalCurrentProbeMinimumValue;\r
2361 EFI_EXP_BASE10_DATA ElectricalCurrentProbeResolution;\r
2362 EFI_EXP_BASE10_DATA ElectricalCurrentProbeTolerance;\r
2363 EFI_EXP_BASE10_DATA ElectricalCurrentProbeAccuracy;\r
2364 EFI_EXP_BASE10_DATA ElectricalCurrentProbeNominalValue;\r
2365 EFI_EXP_BASE10_DATA MDLowerNoncriticalThreshold;\r
2366 EFI_EXP_BASE10_DATA MDUpperNoncriticalThreshold;\r
2367 EFI_EXP_BASE10_DATA MDLowerCriticalThreshold;\r
2368 EFI_EXP_BASE10_DATA MDUpperCriticalThreshold;\r
2369 EFI_EXP_BASE10_DATA MDLowerNonrecoverableThreshold;\r
2370 EFI_EXP_BASE10_DATA MDUpperNonrecoverableThreshold;\r
2371 UINT32 ElectricalCurrentProbeOemDefined;\r
79964ac8 2372} EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA;\r
2373\r
79964ac8 2374//\r
2375// Out-of-Band Remote Access - SMBIOS Type 30\r
2376//\r
2377\r
9205b2d7 2378#define EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_RECORD_NUMBER 0x00000018\r
79964ac8 2379\r
2380typedef struct {\r
9205b2d7 2381 UINT32 InboundConnectionEnabled :1;\r
2382 UINT32 OutboundConnectionEnabled :1;\r
2383 UINT32 Reserved :30;\r
79964ac8 2384} EFI_MISC_REMOTE_ACCESS_CONNECTIONS;\r
2385\r
2386typedef struct {\r
9205b2d7 2387 STRING_REF RemoteAccessManufacturerNameDescription;\r
2388 EFI_MISC_REMOTE_ACCESS_CONNECTIONS RemoteAccessConnections;\r
79964ac8 2389} EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA;\r
2390\r
79964ac8 2391//\r
2392// Misc. BIS Entry Point - SMBIOS Type 31\r
2393//\r
9205b2d7 2394#define EFI_MISC_BIS_ENTRY_POINT_RECORD_NUMBER 0x00000019\r
79964ac8 2395\r
2396typedef struct {\r
9205b2d7 2397 EFI_PHYSICAL_ADDRESS BisEntryPoint;\r
79964ac8 2398} EFI_MISC_BIS_ENTRY_POINT_DATA;\r
2399\r
79964ac8 2400//\r
2401// Misc. Boot Information - SMBIOS Type 32\r
2402//\r
9205b2d7 2403#define EFI_MISC_BOOT_INFORMATION_STATUS_RECORD_NUMBER 0x0000001A\r
79964ac8 2404\r
2405typedef enum {\r
2406 EfiBootInformationStatusNoError = 0x00,\r
2407 EfiBootInformationStatusNoBootableMedia = 0x01,\r
2408 EfiBootInformationStatusNormalOSFailedLoading = 0x02,\r
2409 EfiBootInformationStatusFirmwareDetectedFailure = 0x03,\r
2410 EfiBootInformationStatusOSDetectedFailure = 0x04,\r
2411 EfiBootInformationStatusUserRequestedBoot = 0x05,\r
2412 EfiBootInformationStatusSystemSecurityViolation = 0x06,\r
2413 EfiBootInformationStatusPreviousRequestedImage = 0x07,\r
2414 EfiBootInformationStatusWatchdogTimerExpired = 0x08,\r
2415 EfiBootInformationStatusStartReserved = 0x09,\r
2416 EfiBootInformationStatusStartOemSpecific = 0x80,\r
661e7afd 2417 EfiBootInformationStatusStartProductSpecific = 0xC0\r
631344e6 2418} EFI_MISC_BOOT_INFORMATION_STATUS_TYPE;\r
79964ac8 2419\r
2420typedef struct {\r
631344e6 2421 EFI_MISC_BOOT_INFORMATION_STATUS_TYPE BootInformationStatus;\r
79964ac8 2422 UINT8 BootInformationData[9];\r
2423} EFI_MISC_BOOT_INFORMATION_STATUS_DATA;\r
2424\r
79964ac8 2425//\r
2426// Management Device - SMBIOS Type 34\r
2427//\r
9205b2d7 2428#define EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_RECORD_NUMBER 0x0000001B\r
79964ac8 2429\r
2430typedef enum {\r
2431 EfiManagementDeviceTypeOther = 0x01,\r
2432 EfiManagementDeviceTypeUnknown = 0x02,\r
2433 EfiManagementDeviceTypeLm75 = 0x03,\r
2434 EfiManagementDeviceTypeLm78 = 0x04,\r
2435 EfiManagementDeviceTypeLm79 = 0x05,\r
2436 EfiManagementDeviceTypeLm80 = 0x06,\r
2437 EfiManagementDeviceTypeLm81 = 0x07,\r
2438 EfiManagementDeviceTypeAdm9240 = 0x08,\r
2439 EfiManagementDeviceTypeDs1780 = 0x09,\r
2440 EfiManagementDeviceTypeMaxim1617 = 0x0A,\r
2441 EfiManagementDeviceTypeGl518Sm = 0x0B,\r
2442 EfiManagementDeviceTypeW83781D = 0x0C,\r
661e7afd 2443 EfiManagementDeviceTypeHt82H791 = 0x0D\r
79964ac8 2444} EFI_MISC_MANAGEMENT_DEVICE_TYPE;\r
2445\r
2446typedef enum {\r
2447 EfiManagementDeviceAddressTypeOther = 1,\r
2448 EfiManagementDeviceAddressTypeUnknown = 2,\r
2449 EfiManagementDeviceAddressTypeIOPort = 3,\r
2450 EfiManagementDeviceAddressTypeMemory = 4,\r
2451 EfiManagementDeviceAddressTypeSmbus = 5\r
2452} EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE;\r
2453\r
2454typedef struct {\r
9205b2d7 2455 STRING_REF ManagementDeviceDescription;\r
2456 EFI_MISC_MANAGEMENT_DEVICE_TYPE ManagementDeviceType;\r
2457 UINTN ManagementDeviceAddress;\r
79964ac8 2458 EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE\r
9205b2d7 2459 ManagementDeviceAddressType;\r
79964ac8 2460} EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA;\r
2461\r
79964ac8 2462//\r
2463// Management Device Component - SMBIOS Type 35\r
2464//\r
2465\r
9205b2d7 2466#define EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_RECORD_NUMBER 0x0000001C\r
79964ac8 2467\r
2468typedef struct {\r
9205b2d7 2469 STRING_REF ManagementDeviceComponentDescription;\r
2470 EFI_INTER_LINK_DATA ManagementDeviceLink;\r
2471 EFI_INTER_LINK_DATA ManagementDeviceComponentLink;\r
631344e6 2472 ///\r
2473 /// Inconsistent with specification here: \r
2474 /// In MiscSubclass spec0.9, this field is NOT defined.\r
2475 /// It's introduced for SmBios 2.6 spec type 35.\r
2476 ///\r
9205b2d7 2477 EFI_INTER_LINK_DATA ManagementDeviceThresholdLink;\r
79964ac8 2478} EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA;\r
2479\r
79964ac8 2480//\r
2481// IPMI Data Record - SMBIOS Type 38\r
2482//\r
2483typedef enum {\r
2484 EfiIpmiOther = 0,\r
2485 EfiIpmiKcs = 1,\r
2486 EfiIpmiSmic = 2,\r
661e7afd 2487 EfiIpmiBt = 3\r
79964ac8 2488} EFI_MISC_IPMI_INTERFACE_TYPE;\r
2489\r
2490typedef struct {\r
9205b2d7 2491 UINT16 IpmiSpecLeastSignificantDigit:4;\r
2492 UINT16 IpmiSpecMostSignificantDigit: 4;\r
2493 UINT16 Reserved: 8;\r
79964ac8 2494} EFI_MISC_IPMI_SPECIFICATION_REVISION;\r
2495\r
2496typedef struct {\r
9205b2d7 2497 EFI_MISC_IPMI_INTERFACE_TYPE IpmiInterfaceType;\r
2498 EFI_MISC_IPMI_SPECIFICATION_REVISION \r
2499 IpmiSpecificationRevision;\r
2500 UINT16 IpmiI2CSlaveAddress;\r
2501 UINT16 IpmiNvDeviceAddress;\r
2502 UINT64 IpmiBaseAddress;\r
2503 EFI_DEVICE_PATH_PROTOCOL IpmiDevicePath;\r
79964ac8 2504} EFI_MISC_IPMI_INTERFACE_TYPE_DATA;\r
2505\r
9205b2d7 2506#define EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER 0x0000001D\r
79964ac8 2507\r
79964ac8 2508//\r
2509//System Power supply Record - SMBIOS Type 39\r
2510//\r
2511typedef struct {\r
631344e6 2512 UINT32 PowerSupplyHotReplaceable:1;\r
2513 UINT32 PowerSupplyPresent :1;\r
2514 UINT32 PowerSupplyUnplugged :1;\r
2515 UINT32 InputVoltageRangeSwitch :4;\r
2516 UINT32 PowerSupplyStatus :3;\r
2517 UINT32 PowerSupplyType :4;\r
2518 UINT32 Reserved :18;\r
2519} EFI_MISC_POWER_SUPPLY_CHARACTERISTICS;\r
2520\r
2521typedef struct {\r
2522 UINT16 PowerUnitGroup;\r
2523 STRING_REF PowerSupplyLocation;\r
2524 STRING_REF PowerSupplyDeviceName;\r
2525 STRING_REF PowerSupplyManufacturer;\r
2526 STRING_REF PowerSupplySerialNumber;\r
2527 STRING_REF PowerSupplyAssetTagNumber;\r
2528 STRING_REF PowerSupplyModelPartNumber;\r
2529 STRING_REF PowerSupplyRevisionLevel;\r
2530 UINT16 PowerSupplyMaxPowerCapacity;\r
2531 EFI_MISC_POWER_SUPPLY_CHARACTERISTICS PowerSupplyCharacteristics;\r
2532 EFI_INTER_LINK_DATA PowerSupplyInputVoltageProbeLink;\r
2533 EFI_INTER_LINK_DATA PowerSupplyCoolingDeviceLink;\r
2534 EFI_INTER_LINK_DATA PowerSupplyInputCurrentProbeLink;\r
2535} EFI_MISC_POWER_SUPPLY_UNIT_GROUP_DATA;\r
79964ac8 2536\r
9205b2d7 2537#define EFI_MISC_SYSTEM_POWER_SUPPLY_RECORD_NUMBER 0x0000001E\r
79964ac8 2538\r
79964ac8 2539//\r
2540// OEM Data Record - SMBIOS Type 0x80-0xFF\r
2541//\r
2542typedef struct {\r
9205b2d7 2543 UINT8 Type;\r
2544 UINT8 Length;\r
2545 UINT16 Handle;\r
631344e6 2546} EFI_SMBIOS_STRUCTURE_HDR;\r
79964ac8 2547\r
2548typedef struct {\r
631344e6 2549 EFI_SMBIOS_STRUCTURE_HDR Header;\r
9205b2d7 2550 UINT8 RawData[1];\r
79964ac8 2551} EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA;\r
2552\r
9205b2d7 2553#define EFI_MISC_SMBIOS_STRUCT_ENCAP_RECORD_NUMBER 0x0000001F\r
79964ac8 2554\r
631344e6 2555///\r
2556/// Misc. System Event Log - SMBIOS Type 15\r
2557///\r
2558/// Inconsistent with specification here: \r
2559/// In MiscSubclass spec0.9, the following data structures are NOT defined.\r
2560/// It's introduced for SmBios 2.6 spec type 15.\r
2561///\r
9205b2d7 2562#define EFI_MISC_SYSTEM_EVENT_LOG_RECORD_NUMBER 0x00000020\r
631344e6 2563\r
2564///\r
2565/// Inconsistent with specification here: \r
2566/// In MiscSubclass spec0.9, the following data structures are NOT defined.\r
2567/// It's introduced for SmBios 2.6 spec type 15.\r
2568///\r
9205b2d7 2569typedef struct {\r
2570 UINT16 LogAreaLength;\r
2571 UINT16 LogHeaderStartOffset;\r
2572 UINT16 LogDataStartOffset;\r
2573 UINT8 AccessMethod;\r
2574 UINT8 LogStatus;\r
2575 UINT32 LogChangeToken;\r
2576 UINT32 AccessMethodAddress;\r
2577 UINT8 LogHeaderFormat;\r
2578 UINT8 NumberOfSupportedLogType;\r
2579 UINT8 LengthOfLogDescriptor;\r
91399a51 2580} EFI_MISC_SYSTEM_EVENT_LOG_DATA;\r
2581\r
2582//\r
2583// Access Method.\r
2584// 0x00~0x04: as following definition\r
2585// 0x05~0x7f: Available for future assignment.\r
2586// 0x80~0xff: BIOS Vendor/OEM-specific.\r
2587// \r
2588#define ACCESS_INDEXIO_1INDEX8BIT_DATA8BIT 0x00\r
2589#define ACCESS_INDEXIO_2INDEX8BIT_DATA8BIT 0X01\r
2590#define ACCESS_INDEXIO_1INDEX16BIT_DATA8BIT 0X02\r
2591#define ACCESS_MEMORY_MAPPED 0x03\r
2592#define ACCESS_GPNV 0x04\r
2593\r
631344e6 2594///\r
2595/// Management Device Threshold Data Record - SMBIOS Type 36\r
2596///\r
2597/// Inconsistent with specification here: \r
2598/// In MiscSubclass spec0.9, the following data structures are NOT defined.\r
2599/// It's introduced for SmBios 2.6 spec type 36.\r
2600///\r
9205b2d7 2601#define EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD_RECORD_NUMBER 0x00000021\r
631344e6 2602///\r
2603/// Inconsistent with specification here: \r
2604/// In MiscSubclass spec0.9, the following data structures are NOT defined.\r
2605/// It's introduced for SmBios 2.6 spec type 36.\r
2606///\r
91399a51 2607typedef struct {\r
9205b2d7 2608 UINT16 LowerThresNonCritical;\r
2609 UINT16 UpperThresNonCritical;\r
2610 UINT16 LowerThresCritical;\r
2611 UINT16 UpperThresCritical;\r
2612 UINT16 LowerThresNonRecover;\r
2613 UINT16 UpperThresNonRecover;\r
91399a51 2614} EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD;\r
2615\r
79964ac8 2616//\r
2617// Declare the following strutures alias to use them more conviniently.\r
2618//\r
2619typedef EFI_MISC_LAST_PCI_BUS_DATA EFI_MISC_LAST_PCI_BUS;\r
2620typedef EFI_MISC_BIOS_VENDOR_DATA EFI_MISC_BIOS_VENDOR;\r
2621typedef EFI_MISC_SYSTEM_MANUFACTURER_DATA EFI_MISC_SYSTEM_MANUFACTURER;\r
2622typedef EFI_MISC_BASE_BOARD_MANUFACTURER_DATA EFI_MISC_BASE_BOARD_MANUFACTURER;\r
2623typedef EFI_MISC_CHASSIS_MANUFACTURER_DATA EFI_MISC_CHASSIS_MANUFACTURER;\r
2624typedef EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR;\r
2625typedef EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA EFI_MISC_SYSTEM_SLOT_DESIGNATION;\r
2626typedef EFI_MISC_ONBOARD_DEVICE_DATA EFI_MISC_ONBOARD_DEVICE;\r
631344e6 2627typedef EFI_MISC_POINTING_DEVICE_TYPE_DATA EFI_MISC_ONBOARD_DEVICE_TYPE_DATA;\r
79964ac8 2628typedef EFI_MISC_OEM_STRING_DATA EFI_MISC_OEM_STRING;\r
2629typedef EFI_MISC_SYSTEM_OPTION_STRING_DATA EFI_MISC_SYSTEM_OPTION_STRING;\r
2630typedef EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES;\r
2631typedef EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA EFI_MISC_SYSTEM_LANGUAGE_STRING;\r
2632typedef EFI_MISC_SYSTEM_EVENT_LOG_DATA EFI_MISC_SYSTEM_EVENT_LOG;\r
2633typedef EFI_MISC_BIS_ENTRY_POINT_DATA EFI_MISC_BIS_ENTRY_POINT;\r
2634typedef EFI_MISC_BOOT_INFORMATION_STATUS_DATA EFI_MISC_BOOT_INFORMATION_STATUS;\r
631344e6 2635typedef EFI_MISC_POWER_SUPPLY_UNIT_GROUP_DATA EFI_MISC_SYSTEM_POWER_SUPPLY;\r
79964ac8 2636typedef EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION;\r
765e516c 2637typedef EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA EFI_MISC_SCHEDULED_POWER_ON_MONTH;\r
2638typedef EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA EFI_MISC_VOLTAGE_PROBE_DESCRIPTION;\r
2639typedef EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA EFI_MISC_COOLING_DEVICE_TEMP_LINK;\r
2640typedef EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION;\r
2641typedef EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA \r
2642 EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION;\r
2643typedef EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION;\r
2644typedef EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION;\r
79964ac8 2645\r
631344e6 2646///\r
2647/// Inconsistent with specification here: \r
2648/// In MemSubclass spec 0.9, the following data structures are NOT defined.\r
2649/// It is implementation-specific to simplify the code logic.\r
2650///\r
79964ac8 2651typedef union {\r
2652 EFI_MISC_LAST_PCI_BUS_DATA LastPciBus;\r
2653 EFI_MISC_BIOS_VENDOR_DATA MiscBiosVendor;\r
2654 EFI_MISC_SYSTEM_MANUFACTURER_DATA MiscSystemManufacturer;\r
2655 EFI_MISC_BASE_BOARD_MANUFACTURER_DATA MiscBaseBoardManufacturer;\r
2656 EFI_MISC_CHASSIS_MANUFACTURER_DATA MiscChassisManufacturer;\r
2657 EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA MiscPortInternalConnectorDesignator;\r
2658 EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA MiscSystemSlotDesignation;\r
2659 EFI_MISC_ONBOARD_DEVICE_DATA MiscOnboardDevice;\r
2660 EFI_MISC_OEM_STRING_DATA MiscOemString;\r
2661 EFI_MISC_SYSTEM_OPTION_STRING_DATA MiscOptionString;\r
2662 EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA NumberOfInstallableLanguages;\r
2663 EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA MiscSystemLanguageString;\r
2664 EFI_MISC_SYSTEM_EVENT_LOG_DATA MiscSystemEventLog;\r
2665 EFI_MISC_GROUP_NAME_DATA MiscGroupNameData;\r
2666 EFI_MISC_GROUP_ITEM_SET_DATA MiscGroupItemSetData;\r
631344e6 2667 EFI_MISC_POINTING_DEVICE_TYPE_DATA MiscPointingDeviceTypeData;\r
79964ac8 2668 EFI_MISC_RESET_CAPABILITIES_DATA MiscResetCapablilitiesData;\r
2669 EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA MiscHardwareSecuritySettingsData;\r
2670 EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA MiscScheduledPowerOnMonthData;\r
2671 EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA MiscVoltagePorbeDescriptionData;\r
2672 EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA MiscCoolingDeviceTempLinkData;\r
2673 EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA MiscTemperatureProbeDescriptionData;\r
2674 EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA MiscElectricalCurrentProbeDescriptionData;\r
2675 EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA\r
2676 MiscRemoteAccessManufacturerDescriptionData;\r
2677 EFI_MISC_BIS_ENTRY_POINT_DATA MiscBisEntryPoint;\r
2678 EFI_MISC_BOOT_INFORMATION_STATUS_DATA MiscBootInformationStatus;\r
2679 EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA MiscMangementDeviceDescriptionData;\r
2680 EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA\r
2681 MiscmangementDeviceComponentDescriptionData;\r
2682 EFI_MISC_IPMI_INTERFACE_TYPE_DATA MiscIpmiInterfaceTypeData;\r
631344e6 2683 EFI_MISC_POWER_SUPPLY_UNIT_GROUP_DATA MiscPowerSupplyInfo;\r
79964ac8 2684 EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA MiscSmbiosStructEncapsulation;\r
91399a51 2685 EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD MiscManagementDeviceThreshold;\r
79964ac8 2686} EFI_MISC_SUBCLASS_RECORDS;\r
2687\r
631344e6 2688///\r
2689/// Sub Class Header type1\r
2690///\r
79964ac8 2691typedef struct {\r
9205b2d7 2692 EFI_SUBCLASS_TYPE1_HEADER Header;\r
2693 EFI_MISC_SUBCLASS_RECORDS Record;\r
79964ac8 2694} EFI_MISC_SUBCLASS_DRIVER_DATA;\r
2695\r
631344e6 2696///\r
2697/// Inconsistent with specification here: \r
2698/// In DataHubSubclass spec 0.9 page 16, the following symbol is NOT defined.\r
2699/// But value is meaningful, 0 means Reserved.\r
2700///\r
79964ac8 2701#define EFI_SUBCLASS_INSTANCE_RESERVED 0\r
631344e6 2702///\r
2703/// Inconsistent with specification here: \r
2704/// In DataHubSubclass spec 0.9 page 16, the following symbol is NOT defined.\r
2705/// But value is meaningful, -1 means Not Applicable.\r
2706///\r
2707#define EFI_SUBCLASS_INSTANCE_NON_APPLICABLE 0xFFFF\r
79964ac8 2708\r
2709#endif\r