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