]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkPkg/Include/Guid/DataHubRecords.h
Update for NetworkPkg.
[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
87d63447 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
87d63447 7 \r
4eb56285 8Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>\r
f22f941e 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
11The full text of the license may be found at\r
12http://opensource.org/licenses/bsd-license.php. \r
13 \r
14THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
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
38/// The memory subclass belongs to the data class and is identified as the memory \r
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
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
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
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
176/// Each data record that is a member of some subclass starts with a standard \r
177/// header of type EFI_SUBCLASS_TYPE1_HEADER.\r
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
181///\r
182typedef struct {\r
183 ///\r
184 /// The version of the specification to which a specific subclass data record adheres. \r
185 ///\r
186 UINT32 Version;\r
187 ///\r
188 /// The size in bytes of this data class header. \r
189 ///\r
190 UINT32 HeaderSize;\r
191 ///\r
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
197 ///\r
198 UINT16 Instance;\r
199 ///\r
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
205 ///\r
206 UINT16 SubInstance;\r
207 ///\r
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
210 ///\r
211 UINT32 RecordType;\r
212} EFI_SUBCLASS_TYPE1_HEADER;\r
213\r
214///\r
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
217///\r
218typedef struct {\r
219 ///\r
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
222 ///\r
223 EFI_GUID ProducerName;\r
224 ///\r
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
230 ///\r
231 UINT16 Instance;\r
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
237 UINT16 SubInstance;\r
238} EFI_INTER_LINK_DATA;\r
239\r
240//\r
241// EXP data\r
242//\r
243///\r
244/// This macro provides a calculation for base-10 representations. Value and Exponent are each \r
245/// INT16. It is signed to cover negative values and is 16 bits wide (15 bits for data and 1 bit\r
246/// for the sign). \r
247///\r
248typedef struct {\r
249 ///\r
250 /// The INT16 number by which to multiply the base-10 representation. \r
251 ///\r
252 UINT16 Value;\r
253 ///\r
254 /// The INT16 number by which to raise the base-10 calculation. \r
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
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
270///\r
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
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
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
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
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
355///\r
356typedef struct {\r
357 ///\r
358 /// Identifies the processor.\r
359 ///\r
360 EFI_PROCESSOR_SIGNATURE Signature;\r
361 ///\r
362 /// Provides additional processor information. \r
363 ///\r
364 EFI_PROCESSOR_MISC_INFO MiscInfo;\r
365 ///\r
366 /// Reserved for future use. \r
367 ///\r
368 UINT32 Reserved;\r
369 ///\r
370 /// Provides additional processor information. \r
371 ///\r
372 EFI_PROCESSOR_FEATURE_FLAGS FeatureFlags;\r
373} EFI_PROCESSOR_ID_DATA;\r
374\r
375///\r
376/// This data record refers to the general classification of the processor. This data record is 4 bytes in \r
377/// length. \r
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
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
391///\r
392typedef enum {\r
393 EfiProcessorFamilyOther = 0x01, \r
394 EfiProcessorFamilyUnknown = 0x02,\r
395 EfiProcessorFamily8086 = 0x03, \r
396 EfiProcessorFamily80286 = 0x04,\r
397 EfiProcessorFamilyIntel386 = 0x05, \r
398 EfiProcessorFamilyIntel486 = 0x06,\r
399 EfiProcessorFamily8087 = 0x07,\r
400 EfiProcessorFamily80287 = 0x08,\r
401 EfiProcessorFamily80387 = 0x09, \r
402 EfiProcessorFamily80487 = 0x0A,\r
403 EfiProcessorFamilyPentium = 0x0B, \r
404 EfiProcessorFamilyPentiumPro = 0x0C,\r
405 EfiProcessorFamilyPentiumII = 0x0D,\r
406 EfiProcessorFamilyPentiumMMX = 0x0E,\r
407 EfiProcessorFamilyCeleron = 0x0F,\r
408 EfiProcessorFamilyPentiumIIXeon = 0x10,\r
409 EfiProcessorFamilyPentiumIII = 0x11, \r
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
417 EfiProcessorFamilyK5 = 0x19, \r
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
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
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
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
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
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
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
520 EfiProcessorFamilyIntelCoreSolo = 0xBD, \r
521 ///\r
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
525 EfiProcessorFamilyReserved = 0xBE, \r
526 ///\r
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
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
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
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
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
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
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
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
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
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
594///\r
595typedef EFI_EXP_BASE10_DATA EFI_PROCESSOR_VOLTAGE_DATA;\r
596\r
597///\r
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
600///\r
601typedef EFI_PHYSICAL_ADDRESS EFI_PROCESSOR_APIC_BASE_ADDRESS_DATA;\r
602\r
603///\r
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
606///\r
607typedef UINT32 EFI_PROCESSOR_APIC_ID_DATA;\r
608\r
609///\r
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
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
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
624///\r
625typedef struct {\r
626 ///\r
627 /// Identifies what type of microcode the data is. \r
628 /// \r
629 EFI_PROCESSOR_MICROCODE_TYPE ProcessorMicrocodeType;\r
630 ///\r
631 /// Indicates the revision number of this microcode. \r
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
ccd1862c 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
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
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
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
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
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
709/// This data record refers to the health status of the processor. \r
710///\r
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
718 EfiProcessorFuncRestricted = 3 \r
719} EFI_PROCESSOR_HEALTH_STATUS;\r
720\r
721///\r
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
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
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
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
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
862 UINT32 Asynchronous :1;\r
863 UINT32 Synchronous :1;\r
864 UINT32 Reserved :25;\r
865} EFI_CACHE_SRAM_TYPE_DATA;\r
866\r
867typedef EFI_CACHE_SRAM_TYPE_DATA EFI_CACHE_SRAM_INSTALL_DATA;\r
868\r
869typedef enum {\r
870 EfiCacheErrorOther = 1,\r
871 EfiCacheErrorUnknown = 2,\r
872 EfiCacheErrorNone = 3,\r
873 EfiCacheErrorParity = 4,\r
874 EfiCacheErrorSingleBit = 5,\r
875 EfiCacheErrorMultiBit = 6\r
876} EFI_CACHE_ERROR_TYPE_DATA;\r
877\r
878typedef enum {\r
879 EfiCacheTypeOther = 1,\r
880 EfiCacheTypeUnknown = 2,\r
881 EfiCacheTypeInstruction = 3,\r
882 EfiCacheTypeData = 4,\r
883 EfiCacheTypeUnified = 5\r
884} EFI_CACHE_TYPE_DATA;\r
885\r
886typedef enum {\r
887 EfiCacheAssociativityOther = 1,\r
888 EfiCacheAssociativityUnknown = 2,\r
889 EfiCacheAssociativityDirectMapped = 3,\r
890 EfiCacheAssociativity2Way = 4,\r
891 EfiCacheAssociativity4Way = 5,\r
892 EfiCacheAssociativityFully = 6,\r
893 EfiCacheAssociativity8Way = 7,\r
894 EfiCacheAssociativity16Way = 8\r
895} EFI_CACHE_ASSOCIATIVITY_DATA;\r
896\r
897///\r
898/// Inconsistent with specification here: \r
f22f941e 899/// In CacheSubclass 0.9 specification. It defines the field type as UINT16.\r
900/// In fact, it should be UINT32 type because it refers to a 32bit width data.\r
87d63447 901///\r
902typedef struct {\r
903 UINT32 Level :3;\r
904 UINT32 Socketed :1;\r
905 UINT32 Reserved2 :1;\r
906 UINT32 Location :2;\r
907 UINT32 Enable :1;\r
908 UINT32 OperationalMode :2;\r
909 UINT32 Reserved1 :22;\r
910} EFI_CACHE_CONFIGURATION_DATA;\r
911\r
912#define EFI_CACHE_L1 1\r
913#define EFI_CACHE_L2 2\r
914#define EFI_CACHE_L3 3\r
915#define EFI_CACHE_L4 4\r
916#define EFI_CACHE_LMAX EFI_CACHE_L4\r
917\r
918#define EFI_CACHE_SOCKETED 1\r
919#define EFI_CACHE_NOT_SOCKETED 0\r
920\r
921typedef enum {\r
922 EfiCacheInternal = 0,\r
923 EfiCacheExternal = 1,\r
924 EfiCacheReserved = 2,\r
925 EfiCacheUnknown = 3\r
926} EFI_CACHE_LOCATION;\r
927\r
928#define EFI_CACHE_ENABLED 1\r
929#define EFI_CACHE_DISABLED 0\r
930\r
931typedef enum {\r
932 EfiCacheWriteThrough = 0,\r
933 EfiCacheWriteBack = 1,\r
934 EfiCacheDynamicMode = 2,\r
935 EfiCacheUnknownMode = 3\r
936} EFI_CACHE_OPERATIONAL_MODE;\r
937\r
938\r
409669d5 939///\r
940/// Inconsistent with specification here:\r
f22f941e 941/// In CacheSubclass specification 0.9, the enumeration type data structure is NOT defined.\r
942/// The equivalent in specification is \r
409669d5 943/// #define EFI_CACHE_SIZE_RECORD_NUMBER 0x00000001\r
944/// #define EFI_CACHE_MAXIMUM_SIZE_RECORD_NUMBER 0x00000002\r
945/// #define EFI_CACHE_SPEED_RECORD_NUMBER 0x00000003\r
946/// #define EFI_CACHE_SOCKET_RECORD_NUMBER 0x00000004\r
947/// #define EFI_CACHE_SRAM_SUPPORT_RECORD_NUMBER 0x00000005 \r
948/// #define EFI_CACHE_SRAM_INSTALL_RECORD_NUMBER 0x00000006 \r
949/// #define EFI_CACHE_ERROR_SUPPORT_RECORD_NUMBER 0x00000007\r
950/// #define EFI_CACHE_TYPE_RECORD_NUMBER 0x00000008\r
951/// #define EFI_CACHE_ASSOCIATIVITY_RECORD_NUMBER 0x00000009\r
952/// #define EFI_CACHE_CONFIGURATION_RECORD_NUMBER 0x0000000A\r
953/// Keep the definition unchanged for backward compatibility.\r
954///\r
87d63447 955typedef enum {\r
956 CacheSizeRecordType = 1,\r
957 MaximumSizeCacheRecordType = 2,\r
958 CacheSpeedRecordType = 3,\r
959 CacheSocketRecordType = 4,\r
960 CacheSramTypeRecordType = 5,\r
961 CacheInstalledSramTypeRecordType = 6,\r
962 CacheErrorTypeRecordType = 7,\r
963 CacheTypeRecordType = 8,\r
964 CacheAssociativityRecordType = 9,\r
965 CacheConfigRecordType = 10\r
966} EFI_CACHE_VARIABLE_RECORD_TYPE;\r
967\r
968///\r
969/// Inconsistent with specification here: \r
f22f941e 970/// In CacheSubclass specification 0.9, the union type data structure is NOT defined.\r
87d63447 971/// It's implementation-specific to simplify the code logic.\r
972///\r
973typedef union {\r
974 EFI_CACHE_SIZE_DATA CacheSize;\r
975 EFI_MAXIMUM_CACHE_SIZE_DATA MaximumCacheSize;\r
976 EFI_CACHE_SPEED_DATA CacheSpeed;\r
977 EFI_CACHE_SOCKET_DATA CacheSocket;\r
978 EFI_CACHE_SRAM_TYPE_DATA CacheSramType;\r
979 EFI_CACHE_SRAM_TYPE_DATA CacheInstalledSramType;\r
980 EFI_CACHE_ERROR_TYPE_DATA CacheErrorType;\r
981 EFI_CACHE_TYPE_DATA CacheType;\r
982 EFI_CACHE_ASSOCIATIVITY_DATA CacheAssociativity;\r
983 EFI_CACHE_CONFIGURATION_DATA CacheConfig;\r
984 EFI_CACHE_ASSOCIATION_DATA CacheAssociation;\r
985} EFI_CACHE_VARIABLE_RECORD;\r
986\r
987typedef struct {\r
988 EFI_SUBCLASS_TYPE1_HEADER DataRecordHeader;\r
989 EFI_CACHE_VARIABLE_RECORD VariableRecord;\r
990} EFI_CACHE_DATA_RECORD;\r
991\r
992#define EFI_MEMORY_SUBCLASS_VERSION 0x0100\r
993#define EFI_MEMORY_SIZE_RECORD_NUMBER 0x00000001\r
994\r
995typedef enum _EFI_MEMORY_REGION_TYPE {\r
996 EfiMemoryRegionMemory = 0x01,\r
997 EfiMemoryRegionReserved = 0x02,\r
998 EfiMemoryRegionAcpi = 0x03,\r
999 EfiMemoryRegionNvs = 0x04\r
1000} EFI_MEMORY_REGION_TYPE;\r
1001\r
1002///\r
1003/// This data record refers to the size of a memory region. The regions that are \r
1004/// described can refer to physical memory, memory-mapped I/O, or reserved BIOS memory regions. \r
1005/// The unit of measurement of this data record is in bytes. \r
1006///\r
1007typedef struct {\r
1008 ///\r
1009 /// A zero-based value that indicates which processor(s) can access the memory region. \r
1010 /// A value of 0xFFFF indicates the region is accessible by all processors. \r
1011 ///\r
1012 UINT32 ProcessorNumber;\r
1013 ///\r
1014 /// A zero-based value that indicates the starting bus that can access the memory region. \r
1015 ///\r
1016 UINT16 StartBusNumber;\r
1017 ///\r
1018 /// A zero-based value that indicates the ending bus that can access the memory region. \r
1019 /// A value of 0xFF for a PCI system indicates the region is accessible by all buses and \r
1020 /// is global in scope. An example of the EndBusNumber not being 0xFF is a system \r
1021 /// with two or more peer-to-host PCI bridges. \r
1022 ///\r
1023 UINT16 EndBusNumber;\r
1024 ///\r
1025 /// The type of memory region from the operating system's point of view. \r
1026 /// MemoryRegionType values are equivalent to the legacy INT 15 AX = E820 BIOS \r
1027 /// command values. \r
1028 ///\r
1029 EFI_MEMORY_REGION_TYPE MemoryRegionType;\r
1030 ///\r
1031 /// The size of the memory region in bytes. \r
1032 ///\r
1033 EFI_EXP_BASE2_DATA MemorySize;\r
1034 ///\r
1035 /// The starting physical address of the memory region. \r
1036 ///\r
1037 EFI_PHYSICAL_ADDRESS MemoryStartAddress;\r
1038} EFI_MEMORY_SIZE_DATA;\r
1039\r
1040\r
1041#define EFI_MEMORY_ARRAY_LOCATION_RECORD_NUMBER 0x00000002\r
1042\r
1043typedef enum _EFI_MEMORY_ARRAY_LOCATION {\r
1044 EfiMemoryArrayLocationOther = 0x01,\r
1045 EfiMemoryArrayLocationUnknown = 0x02,\r
1046 EfiMemoryArrayLocationSystemBoard = 0x03,\r
1047 EfiMemoryArrayLocationIsaAddonCard = 0x04,\r
1048 EfiMemoryArrayLocationEisaAddonCard = 0x05,\r
1049 EfiMemoryArrayLocationPciAddonCard = 0x06,\r
1050 EfiMemoryArrayLocationMcaAddonCard = 0x07,\r
1051 EfiMemoryArrayLocationPcmciaAddonCard = 0x08,\r
1052 EfiMemoryArrayLocationProprietaryAddonCard = 0x09,\r
1053 EfiMemoryArrayLocationNuBus = 0x0A,\r
1054 EfiMemoryArrayLocationPc98C20AddonCard = 0xA0,\r
1055 EfiMemoryArrayLocationPc98C24AddonCard = 0xA1,\r
1056 EfiMemoryArrayLocationPc98EAddonCard = 0xA2,\r
1057 EfiMemoryArrayLocationPc98LocalBusAddonCard = 0xA3\r
1058} EFI_MEMORY_ARRAY_LOCATION;\r
1059\r
1060typedef enum _EFI_MEMORY_ARRAY_USE {\r
1061 EfiMemoryArrayUseOther = 0x01,\r
1062 EfiMemoryArrayUseUnknown = 0x02,\r
1063 EfiMemoryArrayUseSystemMemory = 0x03,\r
1064 EfiMemoryArrayUseVideoMemory = 0x04,\r
1065 EfiMemoryArrayUseFlashMemory = 0x05,\r
1066 EfiMemoryArrayUseNonVolatileRam = 0x06,\r
1067 EfiMemoryArrayUseCacheMemory = 0x07\r
1068} EFI_MEMORY_ARRAY_USE;\r
1069\r
1070typedef enum _EFI_MEMORY_ERROR_CORRECTION {\r
1071 EfiMemoryErrorCorrectionOther = 0x01,\r
1072 EfiMemoryErrorCorrectionUnknown = 0x02,\r
1073 EfiMemoryErrorCorrectionNone = 0x03,\r
1074 EfiMemoryErrorCorrectionParity = 0x04,\r
1075 EfiMemoryErrorCorrectionSingleBitEcc = 0x05,\r
1076 EfiMemoryErrorCorrectionMultiBitEcc = 0x06,\r
1077 EfiMemoryErrorCorrectionCrc = 0x07\r
1078} EFI_MEMORY_ERROR_CORRECTION;\r
1079\r
1080///\r
1081/// This data record refers to the physical memory array. This data record is a structure. \r
1082/// The type definition structure for EFI_MEMORY_ARRAY_LOCATION_DATA is in SMBIOS 2.3.4: \r
1083/// - Table 3.3.17.1, Type 16, Offset 0x4 \r
1084/// - Table 3.3.17.2, Type 16, Offset 0x5 \r
1085/// - Table 3.3.17.3, Type 16, with the following offsets: \r
1086/// -- Offset 0x6 \r
1087/// -- Offset 0x7 \r
1088/// -- Offset 0xB \r
1089/// -- Offset 0xD \r
1090/// \r
1091typedef struct {\r
1092 ///\r
1093 /// The physical location of the memory array. \r
1094 ///\r
1095 EFI_MEMORY_ARRAY_LOCATION MemoryArrayLocation;\r
1096 ///\r
1097 /// The memory array usage.\r
1098 ///\r
1099 EFI_MEMORY_ARRAY_USE MemoryArrayUse;\r
1100 ///\r
1101 /// The primary error correction or detection supported by this memory array.\r
1102 ///\r
1103 EFI_MEMORY_ERROR_CORRECTION MemoryErrorCorrection;\r
1104 ///\r
1105 /// The maximum memory capacity size in kilobytes. If capacity is unknown, then \r
1106 /// values of MaximumMemoryCapacity.Value = 0x00 and \r
1107 /// MaximumMemoryCapacity.Exponent = 0x8000 are used.\r
1108 ///\r
1109 EFI_EXP_BASE2_DATA MaximumMemoryCapacity;\r
1110 ///\r
1111 /// The number of memory slots or sockets that are available for memory devices \r
1112 /// in this array. \r
1113 ///\r
1114 UINT16 NumberMemoryDevices;\r
1115} EFI_MEMORY_ARRAY_LOCATION_DATA;\r
1116\r
1117\r
1118#define EFI_MEMORY_ARRAY_LINK_RECORD_NUMBER 0x00000003\r
1119\r
1120typedef enum _EFI_MEMORY_FORM_FACTOR {\r
1121 EfiMemoryFormFactorOther = 0x01,\r
1122 EfiMemoryFormFactorUnknown = 0x02,\r
1123 EfiMemoryFormFactorSimm = 0x03,\r
1124 EfiMemoryFormFactorSip = 0x04,\r
1125 EfiMemoryFormFactorChip = 0x05,\r
1126 EfiMemoryFormFactorDip = 0x06,\r
1127 EfiMemoryFormFactorZip = 0x07,\r
1128 EfiMemoryFormFactorProprietaryCard = 0x08,\r
1129 EfiMemoryFormFactorDimm = 0x09,\r
1130 EfiMemoryFormFactorTsop = 0x0A,\r
1131 EfiMemoryFormFactorRowOfChips = 0x0B,\r
1132 EfiMemoryFormFactorRimm = 0x0C,\r
1133 EfiMemoryFormFactorSodimm = 0x0D,\r
1134 EfiMemoryFormFactorSrimm = 0x0E,\r
1135 ///\r
1136 /// Inconsistent with specification here: \r
f22f941e 1137 /// This field is NOT defined in MemSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.\r
87d63447 1138 ///\r
1139 EfiMemoryFormFactorFbDimm = 0x0F\r
1140} EFI_MEMORY_FORM_FACTOR;\r
1141\r
1142typedef enum _EFI_MEMORY_ARRAY_TYPE {\r
1143 EfiMemoryTypeOther = 0x01,\r
1144 EfiMemoryTypeUnknown = 0x02,\r
1145 EfiMemoryTypeDram = 0x03,\r
1146 EfiMemoryTypeEdram = 0x04,\r
1147 EfiMemoryTypeVram = 0x05,\r
1148 EfiMemoryTypeSram = 0x06,\r
1149 EfiMemoryTypeRam = 0x07,\r
1150 EfiMemoryTypeRom = 0x08,\r
1151 EfiMemoryTypeFlash = 0x09,\r
1152 EfiMemoryTypeEeprom = 0x0A,\r
1153 EfiMemoryTypeFeprom = 0x0B,\r
1154 EfiMemoryTypeEprom = 0x0C,\r
1155 EfiMemoryTypeCdram = 0x0D,\r
1156 EfiMemoryType3Dram = 0x0E,\r
1157 EfiMemoryTypeSdram = 0x0F,\r
1158 EfiMemoryTypeSgram = 0x10,\r
1159 EfiMemoryTypeRdram = 0x11,\r
1160 EfiMemoryTypeDdr = 0x12,\r
1161 ///\r
1162 /// Inconsistent with specification here: \r
f22f941e 1163 /// This field is NOT defined in MemSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.\r
87d63447 1164 ///\r
1165 EfiMemoryTypeDdr2 = 0x13,\r
1166 ///\r
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 EfiMemoryTypeDdr2FbDimm = 0x14\r
1171} EFI_MEMORY_ARRAY_TYPE;\r
1172\r
1173typedef struct {\r
1174 UINT32 Reserved :1;\r
1175 UINT32 Other :1;\r
1176 UINT32 Unknown :1;\r
1177 UINT32 FastPaged :1;\r
1178 UINT32 StaticColumn :1;\r
1179 UINT32 PseudoStatic :1;\r
1180 UINT32 Rambus :1;\r
1181 UINT32 Synchronous :1;\r
1182 UINT32 Cmos :1;\r
1183 UINT32 Edo :1;\r
1184 UINT32 WindowDram :1;\r
1185 UINT32 CacheDram :1;\r
1186 UINT32 Nonvolatile :1;\r
1187 UINT32 Reserved1 :19;\r
1188} EFI_MEMORY_TYPE_DETAIL;\r
1189\r
1190typedef enum {\r
1191 EfiMemoryStateEnabled = 0,\r
1192 EfiMemoryStateUnknown = 1,\r
1193 EfiMemoryStateUnsupported = 2,\r
1194 EfiMemoryStateError = 3,\r
1195 EfiMemoryStateAbsent = 4,\r
1196 EfiMemoryStateDisabled = 5,\r
1197 ///\r
1198 /// Inconsistent with specification here: \r
f22f941e 1199 /// This field is NOT defined in MemSubClass specification 0.9. It's introduced for SMBIOS2.6 specification.\r
87d63447 1200 ///\r
1201 EfiMemoryStatePartial = 6\r
1202} EFI_MEMORY_STATE;\r
1203\r
1204///\r
1205/// This data record describes a memory device. This data record is a structure. \r
1206/// The type definition structure for EFI_MEMORY_ARRAY_LINK_DATA is in SMBIOS 2.3.4.\r
1207///\r
1208typedef struct {\r
1209 ///\r
1210 /// A string that identifies the physically labeled socket or board position where the \r
1211 /// memory device is located.\r
1212 ///\r
1213 STRING_REF MemoryDeviceLocator;\r
1214 ///\r
1215 /// A string denoting the physically labeled bank where the memory device is located. \r
1216 ///\r
1217 STRING_REF MemoryBankLocator;\r
1218 ///\r
1219 /// A string denoting the memory manufacturer. \r
1220 /// \r
1221 STRING_REF MemoryManufacturer;\r
1222 ///\r
1223 /// A string denoting the serial number of the memory device. \r
1224 ///\r
1225 STRING_REF MemorySerialNumber;\r
1226 ///\r
1227 /// The asset tag of the memory device. \r
1228 ///\r
1229 STRING_REF MemoryAssetTag;\r
1230 ///\r
1231 /// A string denoting the part number of the memory device. \r
1232 ///\r
1233 STRING_REF MemoryPartNumber;\r
1234 ///\r
1235 /// A link to a memory array structure set. \r
1236 ///\r
1237 EFI_INTER_LINK_DATA MemoryArrayLink;\r
1238 ///\r
1239 /// A link to a memory array structure set.\r
1240 ///\r
1241 EFI_INTER_LINK_DATA MemorySubArrayLink;\r
1242 ///\r
1243 /// The total width in bits of this memory device. If there are no error correcting bits, \r
1244 /// then the total width equals the data width. If the width is unknown, then set the field \r
1245 /// to 0xFFFF. \r
1246 ///\r
1247 UINT16 MemoryTotalWidth;\r
1248 ///\r
1249 /// The data width in bits of the memory device. A data width of 0x00 and a total width \r
1250 /// of 0x08 indicate that the device is used solely for error correction. \r
1251 ///\r
1252 UINT16 MemoryDataWidth;\r
1253 ///\r
1254 /// The size in bytes of the memory device. A value of 0x00 denotes that no device is \r
1255 /// installed, while a value of all Fs denotes that the size is not known.\r
1256 ///\r
1257 EFI_EXP_BASE2_DATA MemoryDeviceSize;\r
1258 ///\r
1259 /// The form factor of the memory device. \r
1260 ///\r
1261 EFI_MEMORY_FORM_FACTOR MemoryFormFactor;\r
1262 ///\r
1263 /// A memory device set that must be populated with all devices of the same type and \r
1264 /// size. A value of 0x00 indicates that the device is not part of any set. A value of 0xFF \r
1265 /// indicates that the attribute is unknown. Any other value denotes the set number. \r
1266 ///\r
1267 UINT8 MemoryDeviceSet;\r
1268 ///\r
1269 /// The memory type in the socket. \r
1270 ///\r
1271 EFI_MEMORY_ARRAY_TYPE MemoryType;\r
1272 ///\r
1273 /// The memory type details. \r
1274 ///\r
1275 EFI_MEMORY_TYPE_DETAIL MemoryTypeDetail;\r
1276 ///\r
1277 /// The memory speed in megahertz (MHz). A value of 0x00 denotes that \r
1278 /// the speed is unknown.\r
1279 /// Inconsistent with specification here: \r
f22f941e 1280 /// In MemSubclass specification 0.9, the naming is MemoryTypeSpeed.\r
87d63447 1281 /// Keep it unchanged for backward compatibilty.\r
1282 ///\r
1283 EFI_EXP_BASE10_DATA MemorySpeed;\r
1284 ///\r
1285 /// The memory state. \r
1286 ///\r
1287 EFI_MEMORY_STATE MemoryState;\r
1288} EFI_MEMORY_ARRAY_LINK_DATA;\r
1289\r
1290\r
1291#define EFI_MEMORY_ARRAY_START_ADDRESS_RECORD_NUMBER 0x00000004\r
1292\r
1293///\r
1294/// This data record refers to a specified physical memory array associated with \r
1295/// a given memory range. \r
1296/// \r
1297typedef struct {\r
1298 ///\r
1299 /// The starting physical address in bytes of memory mapped to a specified physical \r
1300 /// memory array. \r
1301 ///\r
1302 EFI_PHYSICAL_ADDRESS MemoryArrayStartAddress;\r
1303 ///\r
1304 /// The last physical address in bytes of memory mapped to a specified physical memory \r
1305 /// array. \r
1306 ///\r
1307 EFI_PHYSICAL_ADDRESS MemoryArrayEndAddress;\r
1308 ///\r
1309 /// See Physical Memory Array (Type 16) for physical memory array structures.\r
1310 ///\r
1311 EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;\r
1312 ///\r
1313 /// The number of memory devices that form a single row of memory for the address \r
1314 /// partition. \r
1315 ///\r
1316 UINT16 MemoryArrayPartitionWidth;\r
1317} EFI_MEMORY_ARRAY_START_ADDRESS_DATA;\r
1318\r
1319\r
1320#define EFI_MEMORY_DEVICE_START_ADDRESS_RECORD_NUMBER 0x00000005\r
1321\r
1322///\r
1323/// This data record refers to a physical memory device that is associated with \r
1324/// a given memory range.\r
1325/// \r
1326typedef struct {\r
1327 ///\r
1328 /// The starting physical address that is associated with the device. \r
1329 ///\r
1330 EFI_PHYSICAL_ADDRESS MemoryDeviceStartAddress;\r
1331 ///\r
1332 /// The ending physical address that is associated with the device. \r
1333 ///\r
1334 EFI_PHYSICAL_ADDRESS MemoryDeviceEndAddress;\r
1335 ///\r
1336 /// A link to the memory device data structure. \r
1337 ///\r
1338 EFI_INTER_LINK_DATA PhysicalMemoryDeviceLink;\r
1339 /// \r
1340 /// A link to the memory array data structure. \r
1341 ///\r
1342 EFI_INTER_LINK_DATA PhysicalMemoryArrayLink;\r
1343 ///\r
1344 /// The position of the memory device in a row. A value of 0x00 is reserved and a value \r
1345 /// of 0xFF indicates that the position is unknown. \r
1346 ///\r
1347 UINT8 MemoryDevicePartitionRowPosition;\r
1348 ///\r
1349 /// The position of the device in an interleave. \r
1350 ///\r
1351 UINT8 MemoryDeviceInterleavePosition;\r
1352 ///\r
1353 /// The maximum number of consecutive rows from the device that are accessed in a \r
1354 /// single interleave transfer. A value of 0x00 indicates that the device is not interleaved \r
1355 /// and a value of 0xFF indicates that the interleave configuration is unknown. \r
1356 ///\r
1357 UINT8 MemoryDeviceInterleaveDataDepth;\r
1358} EFI_MEMORY_DEVICE_START_ADDRESS_DATA;\r
1359\r
1360\r
1361//\r
1362// Memory. Channel Device Type - SMBIOS Type 37\r
1363//\r
1364\r
1365#define EFI_MEMORY_CHANNEL_TYPE_RECORD_NUMBER 0x00000006\r
1366\r
1367typedef enum _EFI_MEMORY_CHANNEL_TYPE {\r
1368 EfiMemoryChannelTypeOther = 1,\r
1369 EfiMemoryChannelTypeUnknown = 2,\r
1370 EfiMemoryChannelTypeRambus = 3,\r
1371 EfiMemoryChannelTypeSyncLink = 4\r
1372} EFI_MEMORY_CHANNEL_TYPE;\r
1373\r
1374///\r
1375/// This data record refers the type of memory that is associated with the channel. This data record is a \r
1376/// structure. \r
1377/// The type definition structure for EFI_MEMORY_CHANNEL_TYPE_DATA is in SMBIOS 2.3.4, \r
1378/// Table 3.3.38, Type 37, with the following offsets: \r
1379/// - Offset 0x4 \r
1380/// - Offset 0x5 \r
1381/// - Offset 0x6\r
1382/// \r
1383typedef struct {\r
1384 ///\r
1385 /// The type of memory that is associated with the channel. \r
1386 /// \r
1387 EFI_MEMORY_CHANNEL_TYPE MemoryChannelType;\r
1388 ///\r
1389 /// The maximum load that is supported by the channel.\r
1390 ///\r
1391 UINT8 MemoryChannelMaximumLoad;\r
1392 ///\r
1393 /// The number of memory devices on this channel. \r
1394 ///\r
1395 UINT8 MemoryChannelDeviceCount;\r
1396} EFI_MEMORY_CHANNEL_TYPE_DATA;\r
1397\r
1398#define EFI_MEMORY_CHANNEL_DEVICE_RECORD_NUMBER 0x00000007\r
1399\r
1400///\r
1401/// This data record refers to the memory device that is associated with the memory channel. This data \r
1402/// record is a structure. \r
1403/// The type definition structure for EFI_MEMORY_CHANNEL_DEVICE_DATA is in SMBIOS 2.3.4, \r
1404/// Table 3.3.38, Type 37, with the following offsets: \r
1405/// - Offset 0x7 \r
1406/// - Offset 0x8\r
1407///\r
1408typedef struct {\r
1409 ///\r
1410 /// A number between one and MemoryChannelDeviceCount plus an arbitrary base. \r
1411 /// \r
1412 UINT8 DeviceId;\r
1413 ///\r
1414 /// The Link of the associated memory device. See Memory Device (Type 17) for \r
1415 /// memory devices. \r
1416 ///\r
1417 EFI_INTER_LINK_DATA DeviceLink;\r
1418 ///\r
1419 /// The number of load units that this device consumes. \r
1420 ///\r
1421 UINT8 MemoryChannelDeviceLoad;\r
1422} EFI_MEMORY_CHANNEL_DEVICE_DATA;\r
1423\r
1424//\r
1425// Memory. Controller Information - SMBIOS Type 5\r
1426//\r
1427///\r
1428/// Inconsistent with specification here: \r
f22f941e 1429/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1430/// It's introduced for SmBios 2.6 type 5.\r
1431///\r
1432#define EFI_MEMORY_CONTROLLER_INFORMATION_RECORD_NUMBER 0x00000008\r
1433\r
1434///\r
1435/// Inconsistent with specification here: \r
f22f941e 1436/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1437/// It's introduced for SmBios 2.6 type 5.\r
1438///\r
1439typedef enum { \r
1440 EfiErrorDetectingMethodOther = 1,\r
1441 EfiErrorDetectingMethodUnknown = 2,\r
1442 EfiErrorDetectingMethodNone = 3,\r
1443 EfiErrorDetectingMethodParity = 4,\r
1444 EfiErrorDetectingMethod32Ecc = 5,\r
1445 EfiErrorDetectingMethod64Ecc = 6,\r
1446 EfiErrorDetectingMethod128Ecc = 7,\r
1447 EfiErrorDetectingMethodCrc = 8\r
1448} EFI_MEMORY_ERROR_DETECT_METHOD_TYPE;\r
1449\r
1450///\r
1451/// Inconsistent with specification here: \r
f22f941e 1452/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1453/// It's introduced for SmBios 2.6 type 5.\r
1454///\r
1455typedef struct {\r
1456 UINT8 Other :1;\r
1457 UINT8 Unknown :1;\r
1458 UINT8 None :1;\r
1459 UINT8 SingleBitErrorCorrect :1;\r
1460 UINT8 DoubleBitErrorCorrect :1;\r
1461 UINT8 ErrorScrubbing :1;\r
1462 UINT8 Reserved :2;\r
1463} EFI_MEMORY_ERROR_CORRECT_CAPABILITY;\r
1464\r
1465///\r
1466/// Inconsistent with specification here: \r
f22f941e 1467/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1468/// It's introduced for SmBios 2.6 type 5.\r
1469///\r
1470typedef enum { \r
1471 EfiMemoryInterleaveOther = 1,\r
1472 EfiMemoryInterleaveUnknown = 2,\r
1473 EfiMemoryInterleaveOneWay = 3,\r
1474 EfiMemoryInterleaveTwoWay = 4,\r
1475 EfiMemoryInterleaveFourWay = 5,\r
1476 EfiMemoryInterleaveEightWay = 6,\r
1477 EfiMemoryInterleaveSixteenWay = 7\r
1478} EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE;\r
1479\r
1480///\r
1481/// Inconsistent with specification here: \r
f22f941e 1482/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1483/// It's introduced for SmBios 2.6 type 5.\r
1484///\r
1485typedef struct {\r
1486 UINT16 Other :1;\r
1487 UINT16 Unknown :1;\r
1488 UINT16 SeventyNs:1;\r
1489 UINT16 SixtyNs :1;\r
1490 UINT16 FiftyNs :1;\r
1491 UINT16 Reserved :11;\r
1492} EFI_MEMORY_SPEED_TYPE;\r
1493\r
1494///\r
1495/// Inconsistent with specification here: \r
f22f941e 1496/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1497/// It's introduced for SmBios 2.6 type 5.\r
1498///\r
1499typedef struct {\r
1500 UINT16 Other :1;\r
1501 UINT16 Unknown :1;\r
1502 UINT16 Standard :1;\r
1503 UINT16 FastPageMode:1;\r
1504 UINT16 EDO :1;\r
1505 UINT16 Parity :1;\r
1506 UINT16 ECC :1;\r
1507 UINT16 SIMM :1;\r
1508 UINT16 DIMM :1;\r
1509 UINT16 BurstEdo :1;\r
1510 UINT16 SDRAM :1;\r
1511 UINT16 Reserved :5;\r
1512} EFI_MEMORY_SUPPORTED_TYPE;\r
1513\r
1514///\r
1515/// Inconsistent with specification here: \r
f22f941e 1516/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1517/// It's introduced for SmBios 2.6 type 5.\r
1518///\r
1519typedef struct {\r
1520 UINT8 Five :1;\r
1521 UINT8 Three :1;\r
1522 UINT8 Two :1;\r
1523 UINT8 Reserved:5;\r
1524} EFI_MEMORY_MODULE_VOLTAGE_TYPE;\r
1525\r
1526///\r
1527/// EFI_MEMORY_CONTROLLER_INFORMATION is obsolete\r
1528/// Use EFI_MEMORY_CONTROLLER_INFORMATION_DATA instead\r
1529///\r
1530/// Inconsistent with specification here: \r
f22f941e 1531/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1532/// It's introduced for SmBios 2.6 type 5.\r
1533///\r
1534typedef struct {\r
1535 EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod;\r
1536 EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability;\r
1537 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave;\r
1538 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave;\r
1539 UINT8 MaxMemoryModuleSize;\r
1540 EFI_MEMORY_SPEED_TYPE MemorySpeedType;\r
1541 EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType;\r
1542 EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage;\r
1543 UINT8 NumberofMemorySlot;\r
1544 EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability;\r
1545 UINT16 *MemoryModuleConfigHandles;\r
1546} EFI_MEMORY_CONTROLLER_INFORMATION;\r
1547\r
1548///\r
1549/// Inconsistent with specification here: \r
f22f941e 1550/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1551/// It's introduced for SmBios 2.6 type 5.\r
1552///\r
1553typedef struct {\r
1554 EFI_MEMORY_ERROR_DETECT_METHOD_TYPE ErrorDetectingMethod;\r
1555 EFI_MEMORY_ERROR_CORRECT_CAPABILITY ErrorCorrectingCapability;\r
1556 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemorySupportedInterleave;\r
1557 EFI_MEMORY_SUPPORT_INTERLEAVE_TYPE MemoryCurrentInterleave;\r
1558 UINT8 MaxMemoryModuleSize;\r
1559 EFI_MEMORY_SPEED_TYPE MemorySpeedType;\r
1560 EFI_MEMORY_SUPPORTED_TYPE MemorySupportedType;\r
1561 EFI_MEMORY_MODULE_VOLTAGE_TYPE MemoryModuleVoltage;\r
1562 UINT8 NumberofMemorySlot;\r
1563 EFI_MEMORY_ERROR_CORRECT_CAPABILITY EnabledCorrectingCapability;\r
1564 EFI_INTER_LINK_DATA MemoryModuleConfig[1];\r
1565} EFI_MEMORY_CONTROLLER_INFORMATION_DATA;\r
1566\r
1567///\r
1568/// Memory. Error Information - SMBIOS Type 18\r
1569///\r
1570/// Inconsistent with specification here: \r
f22f941e 1571/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1572/// It's introduced for SmBios 2.6 type 18.\r
1573///\r
1574#define EFI_MEMORY_32BIT_ERROR_INFORMATION_RECORD_NUMBER 0x00000009\r
1575///\r
1576/// Inconsistent with specification here: \r
f22f941e 1577/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1578/// It's introduced for SmBios 2.6 type 18.\r
1579///\r
1580typedef enum { \r
1581 EfiMemoryErrorOther = 1,\r
1582 EfiMemoryErrorUnknown = 2,\r
1583 EfiMemoryErrorOk = 3,\r
1584 EfiMemoryErrorBadRead = 4,\r
1585 EfiMemoryErrorParity = 5,\r
1586 EfiMemoryErrorSigleBit = 6,\r
1587 EfiMemoryErrorDoubleBit = 7,\r
1588 EfiMemoryErrorMultiBit = 8,\r
1589 EfiMemoryErrorNibble = 9,\r
1590 EfiMemoryErrorChecksum = 10,\r
1591 EfiMemoryErrorCrc = 11,\r
1592 EfiMemoryErrorCorrectSingleBit = 12,\r
1593 EfiMemoryErrorCorrected = 13,\r
1594 EfiMemoryErrorUnCorrectable = 14\r
1595} EFI_MEMORY_ERROR_TYPE;\r
1596///\r
1597/// Inconsistent with specification here: \r
f22f941e 1598/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1599/// It's introduced for SmBios 2.6 type 18.\r
1600///\r
1601typedef enum { \r
1602 EfiMemoryGranularityOther = 1,\r
1603 EfiMemoryGranularityOtherUnknown = 2,\r
1604 EfiMemoryGranularityDeviceLevel = 3,\r
1605 EfiMemoryGranularityMemPartitionLevel = 4\r
1606} EFI_MEMORY_ERROR_GRANULARITY_TYPE;\r
1607///\r
1608/// Inconsistent with specification here: \r
f22f941e 1609/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1610/// It's introduced for SmBios 2.6 type 18.\r
1611///\r
1612typedef enum { \r
1613 EfiMemoryErrorOperationOther = 1,\r
1614 EfiMemoryErrorOperationUnknown = 2,\r
1615 EfiMemoryErrorOperationRead = 3,\r
1616 EfiMemoryErrorOperationWrite = 4,\r
1617 EfiMemoryErrorOperationPartialWrite = 5\r
1618} EFI_MEMORY_ERROR_OPERATION_TYPE;\r
1619///\r
1620/// Inconsistent with specification here: \r
f22f941e 1621/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1622/// It's introduced for SmBios 2.6 type 18.\r
1623///\r
1624typedef struct {\r
1625 EFI_MEMORY_ERROR_TYPE MemoryErrorType;\r
1626 EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;\r
1627 EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation;\r
1628 UINT32 VendorSyndrome;\r
1629 UINT32 MemoryArrayErrorAddress;\r
1630 UINT32 DeviceErrorAddress;\r
1631 UINT32 DeviceErrorResolution;\r
1632} EFI_MEMORY_32BIT_ERROR_INFORMATION;\r
1633\r
1634///\r
f22f941e 1635/// Memory. Error Information - SMBIOS Type 33.\r
87d63447 1636///\r
1637/// Inconsistent with specification here: \r
f22f941e 1638/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1639/// It's introduced for SmBios 2.6 type 33.\r
1640///\r
1641#define EFI_MEMORY_64BIT_ERROR_INFORMATION_RECORD_NUMBER 0x0000000A\r
1642\r
1643///\r
1644/// Inconsistent with specification here: \r
f22f941e 1645/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1646/// It's introduced for SmBios 2.6 type 33.\r
1647///\r
1648typedef struct {\r
1649 EFI_MEMORY_ERROR_TYPE MemoryErrorType;\r
1650 EFI_MEMORY_ERROR_GRANULARITY_TYPE MemoryErrorGranularity;\r
1651 EFI_MEMORY_ERROR_OPERATION_TYPE MemoryErrorOperation;\r
1652 UINT32 VendorSyndrome;\r
1653 UINT64 MemoryArrayErrorAddress;\r
1654 UINT64 DeviceErrorAddress;\r
1655 UINT32 DeviceErrorResolution;\r
1656} EFI_MEMORY_64BIT_ERROR_INFORMATION;\r
1657\r
1658///\r
1659/// Inconsistent with specification here: \r
f22f941e 1660/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 1661/// It is implementation-specific to simplify the code logic.\r
1662///\r
1663typedef union _EFI_MEMORY_SUBCLASS_RECORDS {\r
1664 EFI_MEMORY_SIZE_DATA SizeData;\r
1665 EFI_MEMORY_ARRAY_LOCATION_DATA ArrayLocationData;\r
1666 EFI_MEMORY_ARRAY_LINK_DATA ArrayLink;\r
1667 EFI_MEMORY_ARRAY_START_ADDRESS_DATA ArrayStartAddress;\r
1668 EFI_MEMORY_DEVICE_START_ADDRESS_DATA DeviceStartAddress;\r
1669 EFI_MEMORY_CHANNEL_TYPE_DATA ChannelTypeData;\r
1670 EFI_MEMORY_CHANNEL_DEVICE_DATA ChannelDeviceData;\r
1671 EFI_MEMORY_CONTROLLER_INFORMATION MemoryControllerInfo;\r
1672 EFI_MEMORY_32BIT_ERROR_INFORMATION Memory32bitErrorInfo;\r
1673 EFI_MEMORY_64BIT_ERROR_INFORMATION Memory64bitErrorInfo;\r
1674} EFI_MEMORY_SUBCLASS_RECORDS;\r
1675\r
1676typedef struct {\r
1677 EFI_SUBCLASS_TYPE1_HEADER Header;\r
1678 EFI_MEMORY_SUBCLASS_RECORDS Record;\r
1679} EFI_MEMORY_SUBCLASS_DRIVER_DATA;\r
1680\r
1681#define EFI_MISC_SUBCLASS_VERSION 0x0100\r
1682\r
1683#pragma pack(1)\r
1684\r
1685//\r
1686// Last PCI Bus Number\r
1687//\r
1688#define EFI_MISC_LAST_PCI_BUS_RECORD_NUMBER 0x00000001\r
1689\r
1690typedef struct {\r
1691 UINT8 LastPciBus;\r
1692} EFI_MISC_LAST_PCI_BUS_DATA;\r
1693\r
1694//\r
1695// Misc. BIOS Vendor - SMBIOS Type 0\r
1696//\r
1697#define EFI_MISC_BIOS_VENDOR_RECORD_NUMBER 0x00000002\r
1698\r
1699typedef struct {\r
1700 UINT64 Reserved1 :2;\r
1701 UINT64 Unknown :1;\r
1702 UINT64 BiosCharacteristicsNotSupported :1;\r
1703 UINT64 IsaIsSupported :1;\r
1704 UINT64 McaIsSupported :1;\r
1705 UINT64 EisaIsSupported :1;\r
1706 UINT64 PciIsSupported :1;\r
1707 UINT64 PcmciaIsSupported :1;\r
1708 UINT64 PlugAndPlayIsSupported :1;\r
1709 UINT64 ApmIsSupported :1;\r
1710 UINT64 BiosIsUpgradable :1;\r
1711 UINT64 BiosShadowingAllowed :1;\r
1712 UINT64 VlVesaIsSupported :1;\r
1713 UINT64 EscdSupportIsAvailable :1;\r
1714 UINT64 BootFromCdIsSupported :1;\r
1715 UINT64 SelectableBootIsSupported :1;\r
1716 UINT64 RomBiosIsSocketed :1;\r
1717 UINT64 BootFromPcmciaIsSupported :1;\r
1718 UINT64 EDDSpecificationIsSupported :1;\r
1719 UINT64 JapaneseNecFloppyIsSupported :1;\r
1720 UINT64 JapaneseToshibaFloppyIsSupported :1;\r
1721 UINT64 Floppy525_360IsSupported :1;\r
1722 UINT64 Floppy525_12IsSupported :1;\r
1723 UINT64 Floppy35_720IsSupported :1;\r
1724 UINT64 Floppy35_288IsSupported :1;\r
1725 UINT64 PrintScreenIsSupported :1;\r
1726 UINT64 Keyboard8042IsSupported :1;\r
1727 UINT64 SerialIsSupported :1;\r
1728 UINT64 PrinterIsSupported :1;\r
1729 UINT64 CgaMonoIsSupported :1;\r
1730 UINT64 NecPc98 :1;\r
1731 UINT64 AcpiIsSupported :1;\r
1732 UINT64 UsbLegacyIsSupported :1;\r
1733 UINT64 AgpIsSupported :1;\r
1734 UINT64 I20BootIsSupported :1;\r
1735 UINT64 Ls120BootIsSupported :1;\r
1736 UINT64 AtapiZipDriveBootIsSupported :1;\r
1737 UINT64 Boot1394IsSupported :1;\r
1738 UINT64 SmartBatteryIsSupported :1;\r
1739 UINT64 BiosBootSpecIsSupported :1;\r
1740 UINT64 FunctionKeyNetworkBootIsSupported :1;\r
1741 UINT64 Reserved :22;\r
1742} EFI_MISC_BIOS_CHARACTERISTICS;\r
1743\r
1744typedef struct {\r
1745 UINT64 BiosReserved :16;\r
1746 UINT64 SystemReserved:16;\r
1747 UINT64 Reserved :32;\r
1748} EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION;\r
1749\r
1750typedef struct {\r
1751 STRING_REF BiosVendor;\r
1752 STRING_REF BiosVersion;\r
1753 STRING_REF BiosReleaseDate;\r
1754 EFI_PHYSICAL_ADDRESS BiosStartingAddress;\r
1755 EFI_EXP_BASE2_DATA BiosPhysicalDeviceSize;\r
1756 EFI_MISC_BIOS_CHARACTERISTICS BiosCharacteristics1;\r
1757 EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION \r
1758 BiosCharacteristics2;\r
1759 ///\r
1760 /// Inconsistent with specification here: \r
f22f941e 1761 /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.\r
1762 /// It's introduced for SmBios 2.6 specification type 0.\r
87d63447 1763 ///\r
1764 UINT8 BiosMajorRelease;\r
1765 ///\r
1766 /// Inconsistent with specification here: \r
f22f941e 1767 /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.\r
1768 /// It's introduced for SmBios 2.6 specification type 0.\r
87d63447 1769 ///\r
1770 UINT8 BiosMinorRelease;\r
1771 ///\r
1772 /// Inconsistent with specification here: \r
f22f941e 1773 /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.\r
1774 /// It's introduced for SmBios 2.6 specification type 0.\r
87d63447 1775 ///\r
1776 UINT8 BiosEmbeddedFirmwareMajorRelease;\r
1777 ///\r
1778 /// Inconsistent with specification here: \r
f22f941e 1779 /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.\r
1780 /// It's introduced for SmBios 2.6 specification type 0.\r
87d63447 1781 ///\r
1782 UINT8 BiosEmbeddedFirmwareMinorRelease;\r
1783} EFI_MISC_BIOS_VENDOR_DATA;\r
1784\r
1785//\r
1786// Misc. System Manufacturer - SMBIOS Type 1\r
1787//\r
1788#define EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER 0x00000003\r
1789\r
1790typedef enum {\r
1791 EfiSystemWakeupTypeReserved = 0,\r
1792 EfiSystemWakeupTypeOther = 1,\r
1793 EfiSystemWakeupTypeUnknown = 2,\r
1794 EfiSystemWakeupTypeApmTimer = 3,\r
1795 EfiSystemWakeupTypeModemRing = 4,\r
1796 EfiSystemWakeupTypeLanRemote = 5,\r
1797 EfiSystemWakeupTypePowerSwitch = 6,\r
1798 EfiSystemWakeupTypePciPme = 7,\r
1799 EfiSystemWakeupTypeAcPowerRestored = 8\r
1800} EFI_MISC_SYSTEM_WAKEUP_TYPE;\r
1801\r
1802typedef struct {\r
1803 STRING_REF SystemManufacturer;\r
1804 STRING_REF SystemProductName;\r
1805 STRING_REF SystemVersion;\r
1806 STRING_REF SystemSerialNumber;\r
1807 EFI_GUID SystemUuid;\r
1808 EFI_MISC_SYSTEM_WAKEUP_TYPE SystemWakeupType;\r
1809 ///\r
1810 /// Inconsistent with specification here: \r
f22f941e 1811 /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.\r
1812 /// It's introduced for SmBios 2.6 specification type 1.\r
87d63447 1813 ///\r
1814 STRING_REF SystemSKUNumber;\r
1815 ///\r
1816 /// Inconsistent with specification here: \r
f22f941e 1817 /// In MiscSubclass specification 0.9, this data structure and corrsponding fields are NOT defined.\r
1818 /// It's introduced for SmBios 2.6 specification type 1.\r
87d63447 1819 ///\r
1820 STRING_REF SystemFamily;\r
1821} EFI_MISC_SYSTEM_MANUFACTURER_DATA;\r
1822\r
1823//\r
1824// Misc. Base Board Manufacturer - SMBIOS Type 2\r
1825//\r
1826#define EFI_MISC_BASE_BOARD_MANUFACTURER_RECORD_NUMBER 0x00000004\r
1827\r
1828typedef struct {\r
1829 UINT32 Motherboard :1;\r
1830 UINT32 RequiresDaughterCard :1;\r
1831 UINT32 Removable :1;\r
1832 UINT32 Replaceable :1;\r
1833 UINT32 HotSwappable :1;\r
1834 UINT32 Reserved :27;\r
1835} EFI_BASE_BOARD_FEATURE_FLAGS;\r
1836\r
1837typedef enum {\r
1838 EfiBaseBoardTypeUnknown = 1,\r
1839 EfiBaseBoardTypeOther = 2,\r
1840 EfiBaseBoardTypeServerBlade = 3,\r
1841 EfiBaseBoardTypeConnectivitySwitch = 4,\r
1842 EfiBaseBoardTypeSystemManagementModule = 5,\r
1843 EfiBaseBoardTypeProcessorModule = 6,\r
1844 EfiBaseBoardTypeIOModule = 7,\r
1845 EfiBaseBoardTypeMemoryModule = 8,\r
1846 EfiBaseBoardTypeDaughterBoard = 9,\r
1847 EfiBaseBoardTypeMotherBoard = 0xA,\r
1848 EfiBaseBoardTypeProcessorMemoryModule = 0xB,\r
1849 EfiBaseBoardTypeProcessorIOModule = 0xC,\r
1850 EfiBaseBoardTypeInterconnectBoard = 0xD\r
1851} EFI_BASE_BOARD_TYPE;\r
1852\r
1853typedef struct {\r
1854 STRING_REF BaseBoardManufacturer;\r
1855 STRING_REF BaseBoardProductName;\r
1856 STRING_REF BaseBoardVersion;\r
1857 STRING_REF BaseBoardSerialNumber;\r
1858 STRING_REF BaseBoardAssetTag;\r
1859 STRING_REF BaseBoardChassisLocation;\r
1860 EFI_BASE_BOARD_FEATURE_FLAGS BaseBoardFeatureFlags;\r
1861 EFI_BASE_BOARD_TYPE BaseBoardType;\r
1862 EFI_INTER_LINK_DATA BaseBoardChassisLink;\r
1863 UINT32 BaseBoardNumberLinks;\r
1864 EFI_INTER_LINK_DATA LinkN;\r
1865} EFI_MISC_BASE_BOARD_MANUFACTURER_DATA;\r
1866\r
1867//\r
1868// Misc. System/Chassis Enclosure - SMBIOS Type 3\r
1869//\r
1870#define EFI_MISC_CHASSIS_MANUFACTURER_RECORD_NUMBER 0x00000005\r
1871\r
1872typedef enum {\r
1873 EfiMiscChassisTypeOther = 0x1,\r
1874 EfiMiscChassisTypeUnknown = 0x2,\r
1875 EfiMiscChassisTypeDeskTop = 0x3,\r
1876 EfiMiscChassisTypeLowProfileDesktop = 0x4,\r
1877 EfiMiscChassisTypePizzaBox = 0x5,\r
1878 EfiMiscChassisTypeMiniTower = 0x6,\r
1879 EfiMiscChassisTypeTower = 0x7,\r
1880 EfiMiscChassisTypePortable = 0x8,\r
1881 EfiMiscChassisTypeLapTop = 0x9,\r
1882 EfiMiscChassisTypeNotebook = 0xA,\r
1883 EfiMiscChassisTypeHandHeld = 0xB,\r
1884 EfiMiscChassisTypeDockingStation = 0xC,\r
1885 EfiMiscChassisTypeAllInOne = 0xD,\r
1886 EfiMiscChassisTypeSubNotebook = 0xE,\r
1887 EfiMiscChassisTypeSpaceSaving = 0xF,\r
1888 EfiMiscChassisTypeLunchBox = 0x10,\r
1889 EfiMiscChassisTypeMainServerChassis = 0x11,\r
1890 EfiMiscChassisTypeExpansionChassis = 0x12,\r
1891 EfiMiscChassisTypeSubChassis = 0x13,\r
1892 EfiMiscChassisTypeBusExpansionChassis = 0x14,\r
1893 EfiMiscChassisTypePeripheralChassis = 0x15,\r
1894 EfiMiscChassisTypeRaidChassis = 0x16,\r
1895 EfiMiscChassisTypeRackMountChassis = 0x17,\r
1896 EfiMiscChassisTypeSealedCasePc = 0x18,\r
1897 EfiMiscChassisMultiSystemChassis = 0x19\r
1898} EFI_MISC_CHASSIS_TYPE;\r
1899\r
1900typedef struct {\r
1901 ///\r
1902 /// Inconsistent with specification here: \r
f22f941e 1903 /// In MiscSubclass 0.9 specification, it has the incorrect field name "EFI_MISC_CHASSIS_TYPE".\r
87d63447 1904 /// Change it to "ChassisType" to pass build.\r
1905 ///\r
1906 UINT32 ChassisType :16;\r
1907 UINT32 ChassisLockPresent:1;\r
1908 UINT32 Reserved :15;\r
1909} EFI_MISC_CHASSIS_STATUS;\r
1910\r
1911typedef enum {\r
1912 EfiChassisStateOther = 0x01,\r
1913 EfiChassisStateUnknown = 0x02,\r
1914 EfiChassisStateSafe = 0x03,\r
1915 EfiChassisStateWarning = 0x04,\r
1916 EfiChassisStateCritical = 0x05,\r
1917 EfiChassisStateNonRecoverable = 0x06\r
1918} EFI_MISC_CHASSIS_STATE;\r
1919\r
1920typedef enum {\r
1921 EfiChassisSecurityStatusOther = 0x01,\r
1922 EfiChassisSecurityStatusUnknown = 0x02,\r
1923 EfiChassisSecurityStatusNone = 0x03,\r
1924 EfiChassisSecurityStatusExternalInterfaceLockedOut = 0x04,\r
1925 EfiChassisSecurityStatusExternalInterfaceLockedEnabled = 0x05\r
1926} EFI_MISC_CHASSIS_SECURITY_STATE;\r
1927\r
1928typedef struct {\r
1929 UINT32 RecordType :1;\r
1930 UINT32 Type :7;\r
1931 UINT32 Reserved :24;\r
1932} EFI_MISC_ELEMENT_TYPE;\r
1933\r
1934typedef struct {\r
1935 EFI_MISC_ELEMENT_TYPE ChassisElementType;\r
1936 EFI_INTER_LINK_DATA ChassisElementStructure;\r
1937 EFI_BASE_BOARD_TYPE ChassisBaseBoard;\r
1938 UINT32 ChassisElementMinimum;\r
1939 UINT32 ChassisElementMaximum;\r
1940} EFI_MISC_ELEMENTS;\r
1941\r
1942typedef struct {\r
1943 STRING_REF ChassisManufacturer;\r
1944 STRING_REF ChassisVersion;\r
1945 STRING_REF ChassisSerialNumber;\r
1946 STRING_REF ChassisAssetTag;\r
1947 EFI_MISC_CHASSIS_STATUS ChassisType;\r
1948 EFI_MISC_CHASSIS_STATE ChassisBootupState;\r
1949 EFI_MISC_CHASSIS_STATE ChassisPowerSupplyState;\r
1950 EFI_MISC_CHASSIS_STATE ChassisThermalState;\r
1951 EFI_MISC_CHASSIS_SECURITY_STATE ChassisSecurityState;\r
1952 UINT32 ChassisOemDefined;\r
1953 UINT32 ChassisHeight;\r
1954 UINT32 ChassisNumberPowerCords;\r
1955 UINT32 ChassisElementCount;\r
1956 UINT32 ChassisElementRecordLength;\r
1957 EFI_MISC_ELEMENTS ChassisElements;\r
1958} EFI_MISC_CHASSIS_MANUFACTURER_DATA;\r
1959\r
1960//\r
1961// Misc. Port Connector Information - SMBIOS Type 8\r
1962//\r
1963#define EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_RECORD_NUMBER 0x00000006\r
1964\r
1965typedef enum {\r
1966 EfiPortConnectorTypeNone = 0x00,\r
1967 EfiPortConnectorTypeCentronics = 0x01,\r
1968 EfiPortConnectorTypeMiniCentronics = 0x02,\r
1969 EfiPortConnectorTypeProprietary = 0x03,\r
1970 EfiPortConnectorTypeDB25Male = 0x04,\r
1971 EfiPortConnectorTypeDB25Female = 0x05,\r
1972 EfiPortConnectorTypeDB15Male = 0x06,\r
1973 EfiPortConnectorTypeDB15Female = 0x07,\r
1974 EfiPortConnectorTypeDB9Male = 0x08,\r
1975 EfiPortConnectorTypeDB9Female = 0x09,\r
1976 EfiPortConnectorTypeRJ11 = 0x0A,\r
1977 EfiPortConnectorTypeRJ45 = 0x0B,\r
1978 EfiPortConnectorType50PinMiniScsi = 0x0C,\r
1979 EfiPortConnectorTypeMiniDin = 0x0D,\r
1980 EfiPortConnectorTypeMicriDin = 0x0E,\r
1981 EfiPortConnectorTypePS2 = 0x0F,\r
1982 EfiPortConnectorTypeInfrared = 0x10,\r
1983 EfiPortConnectorTypeHpHil = 0x11,\r
1984 EfiPortConnectorTypeUsb = 0x12,\r
1985 EfiPortConnectorTypeSsaScsi = 0x13,\r
1986 EfiPortConnectorTypeCircularDin8Male = 0x14,\r
1987 EfiPortConnectorTypeCircularDin8Female = 0x15,\r
1988 EfiPortConnectorTypeOnboardIde = 0x16,\r
1989 EfiPortConnectorTypeOnboardFloppy = 0x17,\r
1990 EfiPortConnectorType9PinDualInline = 0x18,\r
1991 EfiPortConnectorType25PinDualInline = 0x19,\r
1992 EfiPortConnectorType50PinDualInline = 0x1A,\r
1993 EfiPortConnectorType68PinDualInline = 0x1B,\r
1994 EfiPortConnectorTypeOnboardSoundInput = 0x1C,\r
1995 EfiPortConnectorTypeMiniCentronicsType14 = 0x1D,\r
1996 EfiPortConnectorTypeMiniCentronicsType26 = 0x1E,\r
1997 EfiPortConnectorTypeHeadPhoneMiniJack = 0x1F,\r
1998 EfiPortConnectorTypeBNC = 0x20,\r
1999 EfiPortConnectorType1394 = 0x21,\r
2000 EfiPortConnectorTypePC98 = 0xA0,\r
2001 EfiPortConnectorTypePC98Hireso = 0xA1,\r
2002 EfiPortConnectorTypePCH98 = 0xA2,\r
2003 EfiPortConnectorTypePC98Note = 0xA3,\r
2004 EfiPortConnectorTypePC98Full = 0xA4,\r
2005 EfiPortConnectorTypeOther = 0xFF\r
2006} EFI_MISC_PORT_CONNECTOR_TYPE;\r
2007\r
2008typedef enum {\r
2009 EfiPortTypeNone = 0x00,\r
2010 EfiPortTypeParallelXtAtCompatible = 0x01,\r
2011 EfiPortTypeParallelPortPs2 = 0x02,\r
2012 EfiPortTypeParallelPortEcp = 0x03,\r
2013 EfiPortTypeParallelPortEpp = 0x04,\r
2014 EfiPortTypeParallelPortEcpEpp = 0x05,\r
2015 EfiPortTypeSerialXtAtCompatible = 0x06,\r
2016 EfiPortTypeSerial16450Compatible = 0x07,\r
2017 EfiPortTypeSerial16550Compatible = 0x08,\r
2018 EfiPortTypeSerial16550ACompatible = 0x09,\r
2019 EfiPortTypeScsi = 0x0A,\r
2020 EfiPortTypeMidi = 0x0B,\r
2021 EfiPortTypeJoyStick = 0x0C,\r
2022 EfiPortTypeKeyboard = 0x0D,\r
2023 EfiPortTypeMouse = 0x0E,\r
2024 EfiPortTypeSsaScsi = 0x0F,\r
2025 EfiPortTypeUsb = 0x10,\r
2026 EfiPortTypeFireWire = 0x11,\r
2027 EfiPortTypePcmciaTypeI = 0x12,\r
2028 EfiPortTypePcmciaTypeII = 0x13,\r
2029 EfiPortTypePcmciaTypeIII = 0x14,\r
2030 EfiPortTypeCardBus = 0x15,\r
2031 EfiPortTypeAccessBusPort = 0x16,\r
2032 EfiPortTypeScsiII = 0x17,\r
2033 EfiPortTypeScsiWide = 0x18,\r
2034 EfiPortTypePC98 = 0x19,\r
2035 EfiPortTypePC98Hireso = 0x1A,\r
2036 EfiPortTypePCH98 = 0x1B,\r
2037 EfiPortTypeVideoPort = 0x1C,\r
2038 EfiPortTypeAudioPort = 0x1D,\r
2039 EfiPortTypeModemPort = 0x1E,\r
2040 EfiPortTypeNetworkPort = 0x1F,\r
2041 EfiPortType8251Compatible = 0xA0,\r
2042 EfiPortType8251FifoCompatible = 0xA1,\r
2043 EfiPortTypeOther = 0xFF\r
2044} EFI_MISC_PORT_TYPE;\r
2045\r
2046typedef struct {\r
2047 STRING_REF PortInternalConnectorDesignator;\r
2048 STRING_REF PortExternalConnectorDesignator;\r
2049 EFI_MISC_PORT_CONNECTOR_TYPE PortInternalConnectorType;\r
2050 EFI_MISC_PORT_CONNECTOR_TYPE PortExternalConnectorType;\r
2051 EFI_MISC_PORT_TYPE PortType;\r
ef73b4a8 2052 ///\r
2053 /// Inconsistent with specification here: \r
f22f941e 2054 /// In MiscSubclass specification 0.9, this type of field is defined as EFI_DEVICE_PATH_PROTOCOL,\r
2055 /// which causes the implementation some complexity. Keep it unchanged for backward \r
ef73b4a8 2056 /// compatibility.\r
2057 ///\r
87d63447 2058 EFI_MISC_PORT_DEVICE_PATH PortPath;\r
2059} EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA;\r
2060\r
2061//\r
2062// Misc. System Slots - SMBIOS Type 9\r
2063//\r
2064#define EFI_MISC_SYSTEM_SLOT_DESIGNATION_RECORD_NUMBER 0x00000007\r
2065\r
2066typedef enum {\r
2067 EfiSlotTypeOther = 0x01,\r
2068 EfiSlotTypeUnknown = 0x02,\r
2069 EfiSlotTypeIsa = 0x03,\r
2070 EfiSlotTypeMca = 0x04,\r
2071 EfiSlotTypeEisa = 0x05,\r
2072 EfiSlotTypePci = 0x06,\r
2073 EfiSlotTypePcmcia = 0x07,\r
2074 EfiSlotTypeVlVesa = 0x08,\r
2075 EfiSlotTypeProprietary = 0x09,\r
2076 EfiSlotTypeProcessorCardSlot = 0x0A,\r
2077 EfiSlotTypeProprietaryMemoryCardSlot = 0x0B,\r
2078 EfiSlotTypeIORiserCardSlot = 0x0C,\r
2079 EfiSlotTypeNuBus = 0x0D,\r
2080 EfiSlotTypePci66MhzCapable = 0x0E,\r
2081 EfiSlotTypeAgp = 0x0F,\r
2082 ///\r
2083 /// Inconsistent with specification here: \r
f22f941e 2084 /// In MiscSubclass specification 0.9, its naming should be EfiSlotTypeAgp2X\r
87d63447 2085 /// rather than EfiSlotTypeApg2X.\r
2086 ///\r
2087 EfiSlotTypeAgp2X = 0x10,\r
2088 EfiSlotTypeAgp4X = 0x11,\r
2089 EfiSlotTypePciX = 0x12,\r
2090 EfiSlotTypeAgp8x = 0x13,\r
2091 EfiSlotTypePC98C20 = 0xA0,\r
2092 EfiSlotTypePC98C24 = 0xA1,\r
2093 EfiSlotTypePC98E = 0xA2,\r
2094 EfiSlotTypePC98LocalBus = 0xA3,\r
2095 EfiSlotTypePC98Card = 0xA4,\r
2096 ///\r
2097 /// Inconsistent with specification here: \r
33d9d834
SZ
2098 /// In MiscSubclass specification 0.9, these fields aren't defined.\r
2099 /// They're introduced for SmBios 2.6 specification type 9.\r
2100 ///\r
2101 EfiSlotTypePciExpress = 0xA5,\r
2102 EfiSlotTypePciExpressX1 = 0xA6,\r
2103 EfiSlotTypePciExpressX2 = 0xA7,\r
2104 EfiSlotTypePciExpressX4 = 0xA8,\r
2105 EfiSlotTypePciExpressX8 = 0xA9,\r
2106 EfiSlotTypePciExpressX16 = 0xAA\r
87d63447 2107} EFI_MISC_SLOT_TYPE;\r
2108\r
2109typedef enum {\r
2110 EfiSlotDataBusWidthOther = 0x01,\r
2111 EfiSlotDataBusWidthUnknown = 0x02,\r
2112 EfiSlotDataBusWidth8Bit = 0x03,\r
2113 EfiSlotDataBusWidth16Bit = 0x04,\r
2114 EfiSlotDataBusWidth32Bit = 0x05,\r
2115 EfiSlotDataBusWidth64Bit = 0x06,\r
33d9d834
SZ
2116 EfiSlotDataBusWidth128Bit = 0x07,\r
2117 ///\r
2118 /// Inconsistent with specification here: \r
2119 /// In MiscSubclass specification 0.9, these fields aren't defined.\r
2120 /// They're introduced for SmBios 2.6 specification type 9.\r
2121 ///\r
2122 EfiSlotDataBusWidth1xOrx1 = 0x8,\r
2123 EfiSlotDataBusWidth2xOrx2 = 0x9,\r
2124 EfiSlotDataBusWidth4xOrx4 = 0xA,\r
2125 EfiSlotDataBusWidth8xOrx8 = 0xB,\r
2126 EfiSlotDataBusWidth12xOrx12 = 0xC,\r
2127 EfiSlotDataBusWidth16xOrx16 = 0xD,\r
2128 EfiSlotDataBusWidth32xOrx32 = 0xE\r
87d63447 2129} EFI_MISC_SLOT_DATA_BUS_WIDTH;\r
2130\r
2131typedef enum {\r
2132 EfiSlotUsageOther = 1,\r
2133 EfiSlotUsageUnknown = 2,\r
2134 EfiSlotUsageAvailable = 3,\r
2135 EfiSlotUsageInUse = 4\r
2136} EFI_MISC_SLOT_USAGE;\r
2137\r
2138typedef enum {\r
2139 EfiSlotLengthOther = 1,\r
2140 EfiSlotLengthUnknown = 2,\r
2141 EfiSlotLengthShort = 3,\r
2142 EfiSlotLengthLong = 4\r
2143} EFI_MISC_SLOT_LENGTH;\r
2144\r
2145typedef struct {\r
2146 UINT32 CharacteristicsUnknown :1;\r
2147 UINT32 Provides50Volts :1;\r
2148 UINT32 Provides33Volts :1;\r
2149 UINT32 SharedSlot :1;\r
2150 UINT32 PcCard16Supported :1;\r
2151 UINT32 CardBusSupported :1;\r
2152 UINT32 ZoomVideoSupported :1;\r
2153 UINT32 ModemRingResumeSupported:1;\r
2154 UINT32 PmeSignalSupported :1;\r
2155 UINT32 HotPlugDevicesSupported :1;\r
2156 UINT32 SmbusSignalSupported :1;\r
2157 UINT32 Reserved :21;\r
2158} EFI_MISC_SLOT_CHARACTERISTICS;\r
2159\r
2160typedef struct {\r
2161 STRING_REF SlotDesignation;\r
2162 EFI_MISC_SLOT_TYPE SlotType;\r
2163 EFI_MISC_SLOT_DATA_BUS_WIDTH SlotDataBusWidth;\r
2164 EFI_MISC_SLOT_USAGE SlotUsage;\r
2165 EFI_MISC_SLOT_LENGTH SlotLength;\r
2166 UINT16 SlotId;\r
2167 EFI_MISC_SLOT_CHARACTERISTICS SlotCharacteristics;\r
2168 EFI_DEVICE_PATH_PROTOCOL SlotDevicePath;\r
2169} EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA;\r
2170\r
2171//\r
2172// Misc. Onboard Device - SMBIOS Type 10\r
2173//\r
2174#define EFI_MISC_ONBOARD_DEVICE_RECORD_NUMBER 0x00000008\r
2175\r
2176typedef enum {\r
2177 EfiOnBoardDeviceTypeOther = 1,\r
2178 EfiOnBoardDeviceTypeUnknown = 2,\r
2179 EfiOnBoardDeviceTypeVideo = 3,\r
2180 EfiOnBoardDeviceTypeScsiController = 4,\r
2181 EfiOnBoardDeviceTypeEthernet = 5,\r
2182 EfiOnBoardDeviceTypeTokenRing = 6,\r
2183 EfiOnBoardDeviceTypeSound = 7\r
2184} EFI_MISC_ONBOARD_DEVICE_TYPE;\r
2185\r
2186typedef struct {\r
2187 UINT32 DeviceType :16;\r
2188 UINT32 DeviceEnabled :1;\r
2189 UINT32 Reserved :15;\r
2190} EFI_MISC_ONBOARD_DEVICE_STATUS;\r
2191\r
2192typedef struct {\r
2193 STRING_REF OnBoardDeviceDescription;\r
2194 ///\r
2195 /// Inconsistent with specification here: \r
f22f941e 2196 /// In MiscSubclass specification 0.9, the name is OnBoardDeviceType.\r
87d63447 2197 /// Keep it unchanged for backward compatibilty.\r
2198 ///\r
2199 EFI_MISC_ONBOARD_DEVICE_STATUS OnBoardDeviceStatus;\r
2200 EFI_DEVICE_PATH_PROTOCOL OnBoardDevicePath;\r
2201} EFI_MISC_ONBOARD_DEVICE_DATA;\r
2202\r
2203//\r
2204// Misc. BIOS Language Information - SMBIOS Type 11\r
2205//\r
2206#define EFI_MISC_OEM_STRING_RECORD_NUMBER 0x00000009\r
2207\r
2208typedef struct {\r
2209 STRING_REF OemStringRef[1];\r
2210} EFI_MISC_OEM_STRING_DATA;\r
2211\r
2212//\r
2213// Misc. System Options - SMBIOS Type 12\r
2214//\r
2215typedef struct {\r
2216 STRING_REF SystemOptionStringRef[1];\r
2217} EFI_MISC_SYSTEM_OPTION_STRING_DATA;\r
2218\r
2219#define EFI_MISC_SYSTEM_OPTION_STRING_RECORD_NUMBER 0x0000000A\r
2220\r
2221//\r
2222// Misc. Number of Installable Languages - SMBIOS Type 13\r
2223//\r
2224#define EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_RECORD_NUMBER 0x0000000B\r
2225\r
2226typedef struct {\r
2227 UINT32 AbbreviatedLanguageFormat :1;\r
2228 UINT32 Reserved :31;\r
2229} EFI_MISC_LANGUAGE_FLAGS;\r
2230\r
2231typedef struct {\r
2232 UINT16 NumberOfInstallableLanguages;\r
2233 EFI_MISC_LANGUAGE_FLAGS LanguageFlags;\r
2234 UINT16 CurrentLanguageNumber;\r
2235} EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA;\r
2236\r
2237//\r
2238// Misc. System Language String\r
2239//\r
2240#define EFI_MISC_SYSTEM_LANGUAGE_STRING_RECORD_NUMBER 0x0000000C\r
2241\r
2242typedef struct {\r
2243 UINT16 LanguageId;\r
2244 STRING_REF SystemLanguageString;\r
2245} EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA;\r
2246\r
2247//\r
2248// Group Associations - SMBIOS Type 14\r
2249//\r
2250#define EFI_MISC_GROUP_NAME_RECORD_NUMBER 0x0000000D\r
2251\r
2252typedef struct {\r
2253 STRING_REF GroupName;\r
2254 UINT16 NumberGroupItems;\r
2255 UINT16 GroupId;\r
2256} EFI_MISC_GROUP_NAME_DATA;\r
2257\r
2258//\r
2259// Group Item Set Element\r
2260//\r
2261#define EFI_MISC_GROUP_ITEM_SET_RECORD_NUMBER 0x0000000E\r
2262\r
2263typedef struct {\r
2264 EFI_GUID SubClass;\r
2265 EFI_INTER_LINK_DATA GroupLink;\r
2266 UINT16 GroupId;\r
2267 UINT16 GroupElementId;\r
2268} EFI_MISC_GROUP_ITEM_SET_DATA;\r
2269\r
2270//\r
2271// Misc. Pointing Device Type - SMBIOS Type 21\r
2272//\r
2273#define EFI_MISC_POINTING_DEVICE_TYPE_RECORD_NUMBER 0x0000000F\r
2274\r
2275typedef enum {\r
2276 EfiPointingDeviceTypeOther = 0x01,\r
2277 EfiPointingDeviceTypeUnknown = 0x02,\r
2278 EfiPointingDeviceTypeMouse = 0x03,\r
2279 EfiPointingDeviceTypeTrackBall = 0x04,\r
2280 EfiPointingDeviceTypeTrackPoint = 0x05,\r
2281 EfiPointingDeviceTypeGlidePoint = 0x06,\r
2282 EfiPointingDeviceTouchPad = 0x07,\r
2283 EfiPointingDeviceTouchScreen = 0x08,\r
2284 EfiPointingDeviceOpticalSensor = 0x09\r
2285} EFI_MISC_POINTING_DEVICE_TYPE;\r
2286\r
2287typedef enum {\r
2288 EfiPointingDeviceInterfaceOther = 0x01,\r
2289 EfiPointingDeviceInterfaceUnknown = 0x02,\r
2290 EfiPointingDeviceInterfaceSerial = 0x03,\r
2291 EfiPointingDeviceInterfacePs2 = 0x04,\r
2292 EfiPointingDeviceInterfaceInfrared = 0x05,\r
2293 EfiPointingDeviceInterfaceHpHil = 0x06,\r
2294 EfiPointingDeviceInterfaceBusMouse = 0x07,\r
2295 EfiPointingDeviceInterfaceADB = 0x08,\r
2296 EfiPointingDeviceInterfaceBusMouseDB9 = 0xA0,\r
2297 EfiPointingDeviceInterfaceBusMouseMicroDin = 0xA1,\r
2298 EfiPointingDeviceInterfaceUsb = 0xA2\r
2299} EFI_MISC_POINTING_DEVICE_INTERFACE;\r
2300\r
2301typedef struct {\r
2302 EFI_MISC_POINTING_DEVICE_TYPE PointingDeviceType;\r
2303 EFI_MISC_POINTING_DEVICE_INTERFACE PointingDeviceInterface;\r
2304 UINT16 NumberPointingDeviceButtons;\r
2305 EFI_DEVICE_PATH_PROTOCOL PointingDevicePath;\r
2306} EFI_MISC_POINTING_DEVICE_TYPE_DATA;\r
2307\r
2308//\r
2309// Portable Battery - SMBIOS Type 22\r
2310//\r
2311///\r
2312/// Inconsistent with specification here: \r
f22f941e 2313/// In MiscSubclass specification 0.9, the name is EFI_MISC_BATTERY_LOCATION_RECORD_NUMBER.\r
87d63447 2314/// Keep it unchanged for backward compatibilty.\r
2315///\r
2316#define EFI_MISC_PORTABLE_BATTERY_RECORD_NUMBER 0x00000010\r
2317\r
2318///\r
2319/// Inconsistent with specification here: \r
f22f941e 2320/// In MiscSubclass specification 0.9, the structure name is EFI_MISC_BATTERY_DEVICE_CHEMISTRY.\r
2321/// And all field namings are also different with specification.\r
87d63447 2322/// Keep it unchanged for backward compatibilty.\r
2323///\r
2324typedef enum { \r
2325 EfiPortableBatteryDeviceChemistryOther = 1,\r
2326 EfiPortableBatteryDeviceChemistryUnknown = 2,\r
2327 EfiPortableBatteryDeviceChemistryLeadAcid = 3,\r
2328 EfiPortableBatteryDeviceChemistryNickelCadmium = 4,\r
2329 EfiPortableBatteryDeviceChemistryNickelMetalHydride = 5,\r
2330 EfiPortableBatteryDeviceChemistryLithiumIon = 6,\r
2331 EfiPortableBatteryDeviceChemistryZincAir = 7,\r
2332 EfiPortableBatteryDeviceChemistryLithiumPolymer = 8\r
2333} EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY;\r
2334\r
2335///\r
2336/// Inconsistent with specification here: \r
f22f941e 2337/// In MiscSubclass specification 0.9, the structure name is EFI_MISC_BATTERY_LOCATION_DATA.\r
2338/// Also, the name and the order of the fields vary with specifications.\r
87d63447 2339/// Keep it unchanged for backward compatibilty.\r
2340///\r
2341typedef struct {\r
2342 STRING_REF Location;\r
2343 STRING_REF Manufacturer;\r
2344 STRING_REF ManufactureDate;\r
2345 STRING_REF SerialNumber;\r
2346 STRING_REF DeviceName;\r
2347 EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY \r
2348 DeviceChemistry;\r
2349 UINT16 DesignCapacity;\r
2350 UINT16 DesignVoltage;\r
2351 STRING_REF SBDSVersionNumber;\r
2352 UINT8 MaximumError;\r
2353 UINT16 SBDSSerialNumber;\r
2354 UINT16 SBDSManufactureDate;\r
2355 STRING_REF SBDSDeviceChemistry;\r
2356 UINT8 DesignCapacityMultiplier;\r
2357 UINT32 OEMSpecific; \r
2358 UINT8 BatteryNumber; // Temporary \r
2359 BOOLEAN Valid; // Is entry valid - Temporary\r
2360} EFI_MISC_PORTABLE_BATTERY;\r
2361\r
2362\r
2363//\r
2364// Misc. Reset Capabilities - SMBIOS Type 23\r
2365//\r
2366#define EFI_MISC_RESET_CAPABILITIES_RECORD_NUMBER 0x00000011\r
2367\r
2368typedef struct {\r
2369 UINT32 Status :1;\r
2370 UINT32 BootOption :2;\r
2371 UINT32 BootOptionOnLimit :2;\r
2372 UINT32 WatchdogTimerPresent:1;\r
2373 UINT32 Reserved :26;\r
2374} EFI_MISC_RESET_CAPABILITIES_TYPE;\r
2375\r
2376typedef struct {\r
2377 EFI_MISC_RESET_CAPABILITIES_TYPE ResetCapabilities;\r
2378 UINT16 ResetCount;\r
2379 UINT16 ResetLimit;\r
2380 UINT16 ResetTimerInterval;\r
2381 UINT16 ResetTimeout;\r
2382} EFI_MISC_RESET_CAPABILITIES;\r
2383\r
2384typedef struct {\r
2385 EFI_MISC_RESET_CAPABILITIES ResetCapabilities;\r
2386 UINT16 ResetCount;\r
2387 UINT16 ResetLimit;\r
2388 UINT16 ResetTimerInterval;\r
2389 UINT16 ResetTimeout;\r
2390} EFI_MISC_RESET_CAPABILITIES_DATA;\r
2391\r
2392//\r
2393// Misc. Hardware Security - SMBIOS Type 24\r
2394//\r
2395#define EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA_RECORD_NUMBER 0x00000012\r
2396\r
2397///\r
2398/// Inconsistent with specification here: \r
f22f941e 2399/// The MiscSubclass specification 0.9 only mentions the possible value of each field in\r
87d63447 2400/// EFI_MISC_HARDWARE_SECURITY_SETTINGS. \r
f22f941e 2401/// It's implementation-specific in order to to simplify the code logic.\r
87d63447 2402///\r
2403typedef enum {\r
2404 EfiHardwareSecurityStatusDisabled = 0,\r
2405 EfiHardwareSecurityStatusEnabled = 1,\r
2406 EfiHardwareSecurityStatusNotImplemented = 2,\r
2407 EfiHardwareSecurityStatusUnknown = 3\r
2408} EFI_MISC_HARDWARE_SECURITY_STATUS;\r
2409\r
2410typedef struct {\r
2411 UINT32 FrontPanelResetStatus :2;\r
2412 UINT32 AdministratorPasswordStatus :2;\r
2413 UINT32 KeyboardPasswordStatus :2;\r
2414 UINT32 PowerOnPasswordStatus :2;\r
2415 UINT32 Reserved :24;\r
2416} EFI_MISC_HARDWARE_SECURITY_SETTINGS;\r
2417\r
2418typedef struct {\r
2419 EFI_MISC_HARDWARE_SECURITY_SETTINGS HardwareSecuritySettings;\r
2420} EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA;\r
2421\r
2422//\r
2423// System Power Controls - SMBIOS Type 25\r
2424//\r
2425#define EFI_MISC_SCHEDULED_POWER_ON_MONTH_RECORD_NUMBER 0x00000013\r
2426\r
2427typedef struct {\r
2428 UINT16 ScheduledPoweronMonth;\r
2429 UINT16 ScheduledPoweronDayOfMonth;\r
2430 UINT16 ScheduledPoweronHour;\r
2431 UINT16 ScheduledPoweronMinute;\r
2432 UINT16 ScheduledPoweronSecond;\r
2433} EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA;\r
2434\r
2435//\r
2436// Voltage Probe - SMBIOS Type 26\r
2437//\r
2438#define EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000014\r
2439\r
2440typedef struct {\r
2441 UINT32 VoltageProbeSite :5;\r
2442 UINT32 VoltageProbeStatus :3;\r
2443 UINT32 Reserved :24;\r
2444} EFI_MISC_VOLTAGE_PROBE_LOCATION;\r
2445\r
2446typedef struct {\r
2447 STRING_REF VoltageProbeDescription;\r
2448 EFI_MISC_VOLTAGE_PROBE_LOCATION VoltageProbeLocation;\r
2449 EFI_EXP_BASE10_DATA VoltageProbeMaximumValue;\r
2450 EFI_EXP_BASE10_DATA VoltageProbeMinimumValue;\r
2451 EFI_EXP_BASE10_DATA VoltageProbeResolution;\r
2452 EFI_EXP_BASE10_DATA VoltageProbeTolerance;\r
2453 EFI_EXP_BASE10_DATA VoltageProbeAccuracy;\r
2454 EFI_EXP_BASE10_DATA VoltageProbeNominalValue;\r
2455 EFI_EXP_BASE10_DATA MDLowerNoncriticalThreshold;\r
2456 EFI_EXP_BASE10_DATA MDUpperNoncriticalThreshold;\r
2457 EFI_EXP_BASE10_DATA MDLowerCriticalThreshold;\r
2458 EFI_EXP_BASE10_DATA MDUpperCriticalThreshold;\r
2459 EFI_EXP_BASE10_DATA MDLowerNonrecoverableThreshold;\r
2460 EFI_EXP_BASE10_DATA MDUpperNonrecoverableThreshold;\r
2461 UINT32 VoltageProbeOemDefined;\r
2462} EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA;\r
2463\r
2464//\r
2465// Cooling Device - SMBIOS Type 27\r
2466//\r
2467#define EFI_MISC_COOLING_DEVICE_TEMP_LINK_RECORD_NUMBER 0x00000015\r
2468\r
2469typedef struct {\r
2470 UINT32 CoolingDevice :5;\r
2471 UINT32 CoolingDeviceStatus :3;\r
2472 UINT32 Reserved :24;\r
2473} EFI_MISC_COOLING_DEVICE_TYPE;\r
2474\r
2475typedef struct {\r
2476 EFI_MISC_COOLING_DEVICE_TYPE CoolingDeviceType;\r
2477 EFI_INTER_LINK_DATA CoolingDeviceTemperatureLink;\r
4eb56285 2478 UINT8 CoolingDeviceUnitGroup;\r
2479 UINT16 CoolingDeviceNominalSpeed;\r
87d63447 2480 UINT32 CoolingDeviceOemDefined;\r
2481} EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA;\r
2482\r
2483//\r
2484// Temperature Probe - SMBIOS Type 28\r
2485//\r
2486#define EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000016\r
2487\r
2488typedef struct {\r
2489 UINT32 TemperatureProbeSite :5;\r
2490 UINT32 TemperatureProbeStatus :3;\r
2491 UINT32 Reserved :24;\r
2492} EFI_MISC_TEMPERATURE_PROBE_LOCATION;\r
2493\r
2494typedef struct {\r
2495 STRING_REF TemperatureProbeDescription;\r
2496 EFI_MISC_TEMPERATURE_PROBE_LOCATION\r
2497 TemperatureProbeLocation;\r
33d9d834
SZ
2498 ///\r
2499 /// Inconsistent with specification here: \r
2500 /// MiscSubclass 0.9 specification defines the fields type as EFI_EXP_BASE10_DATA.\r
2501 /// In fact, they should be UINT16 type because they refer to 16bit width data.\r
2502 /// Keeping this inconsistency for backward compatibility.\r
2503 ///\r
2504 UINT16 TemperatureProbeMaximumValue;\r
2505 UINT16 TemperatureProbeMinimumValue;\r
2506 UINT16 TemperatureProbeResolution;\r
2507 UINT16 TemperatureProbeTolerance;\r
2508 UINT16 TemperatureProbeAccuracy;\r
2509 UINT16 TemperatureProbeNominalValue;\r
2510 UINT16 MDLowerNoncriticalThreshold;\r
2511 UINT16 MDUpperNoncriticalThreshold;\r
2512 UINT16 MDLowerCriticalThreshold;\r
2513 UINT16 MDUpperCriticalThreshold;\r
2514 UINT16 MDLowerNonrecoverableThreshold;\r
2515 UINT16 MDUpperNonrecoverableThreshold;\r
87d63447 2516 UINT32 TemperatureProbeOemDefined;\r
2517} EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA;\r
2518\r
2519//\r
2520// Electrical Current Probe - SMBIOS Type 29\r
2521//\r
2522\r
2523#define EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000017\r
2524\r
2525typedef struct {\r
2526 UINT32 ElectricalCurrentProbeSite :5;\r
2527 UINT32 ElectricalCurrentProbeStatus :3;\r
2528 UINT32 Reserved :24;\r
2529} EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION;\r
2530\r
2531typedef struct {\r
2532 STRING_REF ElectricalCurrentProbeDescription;\r
2533 EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION\r
2534 ElectricalCurrentProbeLocation;\r
2535 EFI_EXP_BASE10_DATA ElectricalCurrentProbeMaximumValue;\r
2536 EFI_EXP_BASE10_DATA ElectricalCurrentProbeMinimumValue;\r
2537 EFI_EXP_BASE10_DATA ElectricalCurrentProbeResolution;\r
2538 EFI_EXP_BASE10_DATA ElectricalCurrentProbeTolerance;\r
2539 EFI_EXP_BASE10_DATA ElectricalCurrentProbeAccuracy;\r
2540 EFI_EXP_BASE10_DATA ElectricalCurrentProbeNominalValue;\r
2541 EFI_EXP_BASE10_DATA MDLowerNoncriticalThreshold;\r
2542 EFI_EXP_BASE10_DATA MDUpperNoncriticalThreshold;\r
2543 EFI_EXP_BASE10_DATA MDLowerCriticalThreshold;\r
2544 EFI_EXP_BASE10_DATA MDUpperCriticalThreshold;\r
2545 EFI_EXP_BASE10_DATA MDLowerNonrecoverableThreshold;\r
2546 EFI_EXP_BASE10_DATA MDUpperNonrecoverableThreshold;\r
2547 UINT32 ElectricalCurrentProbeOemDefined;\r
2548} EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA;\r
2549\r
2550//\r
2551// Out-of-Band Remote Access - SMBIOS Type 30\r
2552//\r
2553\r
2554#define EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_RECORD_NUMBER 0x00000018\r
2555\r
2556typedef struct {\r
2557 UINT32 InboundConnectionEnabled :1;\r
2558 UINT32 OutboundConnectionEnabled :1;\r
2559 UINT32 Reserved :30;\r
2560} EFI_MISC_REMOTE_ACCESS_CONNECTIONS;\r
2561\r
2562typedef struct {\r
2563 STRING_REF RemoteAccessManufacturerNameDescription;\r
2564 EFI_MISC_REMOTE_ACCESS_CONNECTIONS RemoteAccessConnections;\r
2565} EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA;\r
2566\r
2567//\r
2568// Misc. BIS Entry Point - SMBIOS Type 31\r
2569//\r
2570#define EFI_MISC_BIS_ENTRY_POINT_RECORD_NUMBER 0x00000019\r
2571\r
2572typedef struct {\r
2573 EFI_PHYSICAL_ADDRESS BisEntryPoint;\r
2574} EFI_MISC_BIS_ENTRY_POINT_DATA;\r
2575\r
2576//\r
2577// Misc. Boot Information - SMBIOS Type 32\r
2578//\r
2579#define EFI_MISC_BOOT_INFORMATION_STATUS_RECORD_NUMBER 0x0000001A\r
2580\r
2581///\r
2582/// Inconsistent with specification here: \r
f22f941e 2583/// In MiscSubclass specification 0.9, the structure name is EFI_MISC_BOOT_INFORMATION_STATUS_TYPE.\r
87d63447 2584/// Keep it unchanged for backward compatibilty.\r
2585///\r
2586typedef enum {\r
2587 EfiBootInformationStatusNoError = 0x00,\r
2588 EfiBootInformationStatusNoBootableMedia = 0x01,\r
2589 EfiBootInformationStatusNormalOSFailedLoading = 0x02,\r
2590 EfiBootInformationStatusFirmwareDetectedFailure = 0x03,\r
2591 EfiBootInformationStatusOSDetectedFailure = 0x04,\r
2592 EfiBootInformationStatusUserRequestedBoot = 0x05,\r
2593 EfiBootInformationStatusSystemSecurityViolation = 0x06,\r
2594 EfiBootInformationStatusPreviousRequestedImage = 0x07,\r
2595 EfiBootInformationStatusWatchdogTimerExpired = 0x08,\r
2596 EfiBootInformationStatusStartReserved = 0x09,\r
2597 EfiBootInformationStatusStartOemSpecific = 0x80,\r
2598 EfiBootInformationStatusStartProductSpecific = 0xC0\r
2599} EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE;\r
2600\r
2601typedef struct {\r
2602 ///\r
2603 /// Inconsistent with specification here: \r
f22f941e 2604 /// In MiscSubclass specification 0.9, the field name is EFI_MISC_BOOT_INFORMATION_STATUS_TYPE.\r
87d63447 2605 /// Keep it unchanged for backward compatibilty.\r
2606 ///\r
2607 EFI_MISC_BOOT_INFORMATION_STATUS_DATA_TYPE BootInformationStatus;\r
2608 UINT8 BootInformationData[9];\r
2609} EFI_MISC_BOOT_INFORMATION_STATUS_DATA;\r
2610\r
2611//\r
2612// Management Device - SMBIOS Type 34\r
2613//\r
2614#define EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_RECORD_NUMBER 0x0000001B\r
2615\r
2616typedef enum {\r
2617 EfiManagementDeviceTypeOther = 0x01,\r
2618 EfiManagementDeviceTypeUnknown = 0x02,\r
2619 EfiManagementDeviceTypeLm75 = 0x03,\r
2620 EfiManagementDeviceTypeLm78 = 0x04,\r
2621 EfiManagementDeviceTypeLm79 = 0x05,\r
2622 EfiManagementDeviceTypeLm80 = 0x06,\r
2623 EfiManagementDeviceTypeLm81 = 0x07,\r
2624 EfiManagementDeviceTypeAdm9240 = 0x08,\r
2625 EfiManagementDeviceTypeDs1780 = 0x09,\r
2626 EfiManagementDeviceTypeMaxim1617 = 0x0A,\r
2627 EfiManagementDeviceTypeGl518Sm = 0x0B,\r
2628 EfiManagementDeviceTypeW83781D = 0x0C,\r
2629 EfiManagementDeviceTypeHt82H791 = 0x0D\r
2630} EFI_MISC_MANAGEMENT_DEVICE_TYPE;\r
2631\r
2632typedef enum {\r
2633 EfiManagementDeviceAddressTypeOther = 1,\r
2634 EfiManagementDeviceAddressTypeUnknown = 2,\r
2635 EfiManagementDeviceAddressTypeIOPort = 3,\r
2636 EfiManagementDeviceAddressTypeMemory = 4,\r
2637 EfiManagementDeviceAddressTypeSmbus = 5\r
2638} EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE;\r
2639\r
2640typedef struct {\r
2641 STRING_REF ManagementDeviceDescription;\r
2642 EFI_MISC_MANAGEMENT_DEVICE_TYPE ManagementDeviceType;\r
2643 UINTN ManagementDeviceAddress;\r
2644 EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE\r
2645 ManagementDeviceAddressType;\r
2646} EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA;\r
2647\r
2648//\r
2649// Management Device Component - SMBIOS Type 35\r
2650//\r
2651\r
2652#define EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_RECORD_NUMBER 0x0000001C\r
2653\r
2654typedef struct {\r
2655 STRING_REF ManagementDeviceComponentDescription;\r
2656 EFI_INTER_LINK_DATA ManagementDeviceLink;\r
2657 EFI_INTER_LINK_DATA ManagementDeviceComponentLink;\r
2658 ///\r
2659 /// Inconsistent with specification here: \r
f22f941e 2660 /// In MiscSubclass specification 0.9, this field is NOT defined.\r
2661 /// It's introduced for SmBios 2.6 specification type 35.\r
87d63447 2662 ///\r
2663 EFI_INTER_LINK_DATA ManagementDeviceThresholdLink;\r
33d9d834
SZ
2664 ///\r
2665 /// Inconsistent with specification here: \r
2666 /// In MiscSubclass specification 0.9, this field is NOT defined.\r
2667 /// It's implementation-specific to simplify the code logic.\r
2668 ///\r
2669 UINT8 ComponentType;\r
87d63447 2670} EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA;\r
2671\r
2672//\r
2673// IPMI Data Record - SMBIOS Type 38\r
2674//\r
2675typedef enum {\r
2676 EfiIpmiOther = 0,\r
2677 EfiIpmiKcs = 1,\r
2678 EfiIpmiSmic = 2,\r
2679 EfiIpmiBt = 3\r
2680} EFI_MISC_IPMI_INTERFACE_TYPE;\r
2681\r
2682typedef struct {\r
2683 UINT16 IpmiSpecLeastSignificantDigit:4;\r
2684 UINT16 IpmiSpecMostSignificantDigit: 4;\r
2685 UINT16 Reserved: 8;\r
2686} EFI_MISC_IPMI_SPECIFICATION_REVISION;\r
2687\r
2688typedef struct {\r
2689 EFI_MISC_IPMI_INTERFACE_TYPE IpmiInterfaceType;\r
2690 EFI_MISC_IPMI_SPECIFICATION_REVISION \r
2691 IpmiSpecificationRevision;\r
2692 UINT16 IpmiI2CSlaveAddress;\r
2693 UINT16 IpmiNvDeviceAddress;\r
2694 UINT64 IpmiBaseAddress;\r
2695 EFI_DEVICE_PATH_PROTOCOL IpmiDevicePath;\r
2696} EFI_MISC_IPMI_INTERFACE_TYPE_DATA;\r
2697\r
2698#define EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER 0x0000001D\r
33d9d834
SZ
2699///\r
2700/// The definition above is *NOT* defined in MiscSubclass specifications 0.9.\r
2701/// It's defined for backward compatibility.\r
2702///\r
2703#define EFI_MISC_IPMI_INTERFACE_TYPE_DATA_RECORD_NUMBER EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER\r
87d63447 2704\r
2705///\r
2706/// System Power supply Record - SMBIOS Type 39\r
2707///\r
2708/// Inconsistent with specification here: \r
f22f941e 2709/// In MiscSubclass specification 0.9, the type of all fields are UINT32.\r
87d63447 2710/// Keep it unchanged for backward compatibilty.\r
2711///\r
2712typedef struct {\r
2713 UINT16 PowerSupplyHotReplaceable:1;\r
2714 UINT16 PowerSupplyPresent :1;\r
2715 UINT16 PowerSupplyUnplugged :1;\r
2716 UINT16 InputVoltageRangeSwitch :4;\r
2717 UINT16 PowerSupplyStatus :3;\r
2718 UINT16 PowerSupplyType :4;\r
2719 UINT16 Reserved :2;\r
2720} EFI_MISC_POWER_SUPPLY_CHARACTERISTICS;\r
2721\r
2722///\r
2723/// Inconsistent with specification here: \r
f22f941e 2724/// In MiscSubclass specification 0.9, the structure name is EFI_MISC_POWER_SUPPLY_UNIT_GROUP_DATA.\r
87d63447 2725/// Keep it unchanged for backward compatibilty.\r
2726///\r
2727typedef struct {\r
2728 UINT16 PowerUnitGroup;\r
2729 STRING_REF PowerSupplyLocation;\r
2730 STRING_REF PowerSupplyDeviceName;\r
2731 STRING_REF PowerSupplyManufacturer;\r
2732 STRING_REF PowerSupplySerialNumber;\r
2733 STRING_REF PowerSupplyAssetTagNumber;\r
2734 STRING_REF PowerSupplyModelPartNumber;\r
2735 STRING_REF PowerSupplyRevisionLevel;\r
2736 UINT16 PowerSupplyMaxPowerCapacity;\r
2737 EFI_MISC_POWER_SUPPLY_CHARACTERISTICS PowerSupplyCharacteristics;\r
2738 EFI_INTER_LINK_DATA PowerSupplyInputVoltageProbeLink;\r
2739 EFI_INTER_LINK_DATA PowerSupplyCoolingDeviceLink;\r
2740 EFI_INTER_LINK_DATA PowerSupplyInputCurrentProbeLink;\r
2741} EFI_MISC_SYSTEM_POWER_SUPPLY_DATA;\r
2742\r
2743#define EFI_MISC_SYSTEM_POWER_SUPPLY_RECORD_NUMBER 0x0000001E\r
2744\r
2745///\r
2746/// OEM Data Record - SMBIOS Type 0x80-0xFF\r
2747///\r
2748/// Inconsistent with specification here: \r
f22f941e 2749/// In MiscSubclass specification 0.9, the structure name is EFI_SMBIOS_STRUCTURE_HDR.\r
2750/// Due to this, the structure is commonly used by vendors to construct SmBios type 0x80~0xFF table,\r
87d63447 2751/// Keep it unchanged for backward compatibilty.\r
2752///\r
2753typedef struct {\r
2754 UINT8 Type;\r
2755 UINT8 Length;\r
2756 UINT16 Handle;\r
2757} SMBIOS_STRUCTURE_HDR;\r
2758\r
2759typedef struct {\r
2760 ///\r
2761 /// Inconsistent with specification here: \r
f22f941e 2762 /// In MiscSubclass specification 0.9, the field name is EFI_SMBIOS_STRUCTURE_HDR.\r
87d63447 2763 /// Keep it unchanged for backward compatibilty.\r
2764 ///\r
2765 SMBIOS_STRUCTURE_HDR Header;\r
2766 UINT8 RawData[1];\r
2767} EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA;\r
2768\r
2769#define EFI_MISC_SMBIOS_STRUCT_ENCAP_RECORD_NUMBER 0x0000001F\r
2770\r
2771///\r
2772/// Misc. System Event Log - SMBIOS Type 15\r
2773///\r
2774/// Inconsistent with specification here: \r
f22f941e 2775/// In MiscSubclass specification 0.9, the following data structures are NOT defined.\r
2776/// It's introduced for SmBios 2.6 specification type 15.\r
87d63447 2777///\r
2778#define EFI_MISC_SYSTEM_EVENT_LOG_RECORD_NUMBER 0x00000020\r
2779\r
2780///\r
2781/// Inconsistent with specification here: \r
f22f941e 2782/// In MiscSubclass specification 0.9, the following data structures are NOT defined.\r
2783/// It's introduced for SmBios 2.6 specification type 15.\r
87d63447 2784///\r
2785typedef struct {\r
2786 UINT16 LogAreaLength;\r
2787 UINT16 LogHeaderStartOffset;\r
2788 UINT16 LogDataStartOffset;\r
2789 UINT8 AccessMethod;\r
2790 UINT8 LogStatus;\r
2791 UINT32 LogChangeToken;\r
2792 UINT32 AccessMethodAddress;\r
2793 UINT8 LogHeaderFormat;\r
2794 UINT8 NumberOfSupportedLogType;\r
2795 UINT8 LengthOfLogDescriptor;\r
2796} EFI_MISC_SYSTEM_EVENT_LOG_DATA;\r
2797\r
2798//\r
2799// Access Method.\r
2800// 0x00~0x04: as following definition\r
2801// 0x05~0x7f: Available for future assignment.\r
2802// 0x80~0xff: BIOS Vendor/OEM-specific.\r
2803// \r
2804#define ACCESS_INDEXIO_1INDEX8BIT_DATA8BIT 0x00\r
2805#define ACCESS_INDEXIO_2INDEX8BIT_DATA8BIT 0X01\r
2806#define ACCESS_INDEXIO_1INDEX16BIT_DATA8BIT 0X02\r
2807#define ACCESS_MEMORY_MAPPED 0x03\r
2808#define ACCESS_GPNV 0x04\r
2809\r
2810///\r
2811/// Management Device Threshold Data Record - SMBIOS Type 36\r
2812///\r
2813/// Inconsistent with specification here: \r
f22f941e 2814/// In MiscSubclass specification 0.9, the following data structures are NOT defined.\r
2815/// It's introduced for SmBios 2.6 specification type 36.\r
87d63447 2816///\r
2817#define EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD_RECORD_NUMBER 0x00000021\r
2818///\r
2819/// Inconsistent with specification here: \r
f22f941e 2820/// In MiscSubclass specification 0.9, the following data structures are NOT defined.\r
2821/// It's introduced for SmBios 2.6 specification type 36.\r
87d63447 2822///\r
2823typedef struct {\r
2824 UINT16 LowerThresNonCritical;\r
2825 UINT16 UpperThresNonCritical;\r
2826 UINT16 LowerThresCritical;\r
2827 UINT16 UpperThresCritical;\r
2828 UINT16 LowerThresNonRecover;\r
2829 UINT16 UpperThresNonRecover;\r
2830} EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD;\r
2831\r
2832//\r
2833// Declare the following strutures alias to use them more conviniently.\r
2834//\r
2835typedef EFI_MISC_LAST_PCI_BUS_DATA EFI_MISC_LAST_PCI_BUS;\r
2836typedef EFI_MISC_BIOS_VENDOR_DATA EFI_MISC_BIOS_VENDOR;\r
2837typedef EFI_MISC_SYSTEM_MANUFACTURER_DATA EFI_MISC_SYSTEM_MANUFACTURER;\r
2838typedef EFI_MISC_BASE_BOARD_MANUFACTURER_DATA EFI_MISC_BASE_BOARD_MANUFACTURER;\r
2839typedef EFI_MISC_CHASSIS_MANUFACTURER_DATA EFI_MISC_CHASSIS_MANUFACTURER;\r
2840typedef EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR;\r
2841typedef EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA EFI_MISC_SYSTEM_SLOT_DESIGNATION;\r
2842typedef EFI_MISC_ONBOARD_DEVICE_DATA EFI_MISC_ONBOARD_DEVICE;\r
2843typedef EFI_MISC_POINTING_DEVICE_TYPE_DATA EFI_MISC_ONBOARD_DEVICE_TYPE_DATA;\r
2844typedef EFI_MISC_OEM_STRING_DATA EFI_MISC_OEM_STRING;\r
2845typedef EFI_MISC_SYSTEM_OPTION_STRING_DATA EFI_MISC_SYSTEM_OPTION_STRING;\r
2846typedef EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES;\r
2847typedef EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA EFI_MISC_SYSTEM_LANGUAGE_STRING;\r
2848typedef EFI_MISC_SYSTEM_EVENT_LOG_DATA EFI_MISC_SYSTEM_EVENT_LOG;\r
2849typedef EFI_MISC_BIS_ENTRY_POINT_DATA EFI_MISC_BIS_ENTRY_POINT;\r
2850typedef EFI_MISC_BOOT_INFORMATION_STATUS_DATA EFI_MISC_BOOT_INFORMATION_STATUS;\r
2851typedef EFI_MISC_SYSTEM_POWER_SUPPLY_DATA EFI_MISC_SYSTEM_POWER_SUPPLY;\r
2852typedef EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION;\r
2853typedef EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA EFI_MISC_SCHEDULED_POWER_ON_MONTH;\r
2854typedef EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA EFI_MISC_VOLTAGE_PROBE_DESCRIPTION;\r
2855typedef EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA EFI_MISC_COOLING_DEVICE_TEMP_LINK;\r
2856typedef EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION;\r
2857typedef EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA \r
2858 EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION;\r
2859typedef EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION;\r
2860typedef EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION;\r
33d9d834
SZ
2861typedef EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA\r
2862 EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION;\r
87d63447 2863\r
2864///\r
2865/// Inconsistent with specification here: \r
f22f941e 2866/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 2867/// It is implementation-specific to simplify the code logic.\r
2868///\r
2869typedef union {\r
2870 EFI_MISC_LAST_PCI_BUS_DATA LastPciBus;\r
2871 EFI_MISC_BIOS_VENDOR_DATA MiscBiosVendor;\r
2872 EFI_MISC_SYSTEM_MANUFACTURER_DATA MiscSystemManufacturer;\r
2873 EFI_MISC_BASE_BOARD_MANUFACTURER_DATA MiscBaseBoardManufacturer;\r
2874 EFI_MISC_CHASSIS_MANUFACTURER_DATA MiscChassisManufacturer;\r
2875 EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA MiscPortInternalConnectorDesignator;\r
2876 EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA MiscSystemSlotDesignation;\r
2877 EFI_MISC_ONBOARD_DEVICE_DATA MiscOnboardDevice;\r
2878 EFI_MISC_OEM_STRING_DATA MiscOemString;\r
2879 EFI_MISC_SYSTEM_OPTION_STRING_DATA MiscOptionString;\r
2880 EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA NumberOfInstallableLanguages;\r
2881 EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA MiscSystemLanguageString;\r
2882 EFI_MISC_SYSTEM_EVENT_LOG_DATA MiscSystemEventLog;\r
2883 EFI_MISC_GROUP_NAME_DATA MiscGroupNameData;\r
2884 EFI_MISC_GROUP_ITEM_SET_DATA MiscGroupItemSetData;\r
2885 EFI_MISC_POINTING_DEVICE_TYPE_DATA MiscPointingDeviceTypeData;\r
2886 EFI_MISC_RESET_CAPABILITIES_DATA MiscResetCapablilitiesData;\r
2887 EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA MiscHardwareSecuritySettingsData;\r
2888 EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA MiscScheduledPowerOnMonthData;\r
2889 EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA MiscVoltagePorbeDescriptionData;\r
2890 EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA MiscCoolingDeviceTempLinkData;\r
2891 EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA MiscTemperatureProbeDescriptionData;\r
2892 EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA MiscElectricalCurrentProbeDescriptionData;\r
2893 EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA\r
2894 MiscRemoteAccessManufacturerDescriptionData;\r
2895 EFI_MISC_BIS_ENTRY_POINT_DATA MiscBisEntryPoint;\r
2896 EFI_MISC_BOOT_INFORMATION_STATUS_DATA MiscBootInformationStatus;\r
2897 EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA MiscMangementDeviceDescriptionData;\r
2898 EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA\r
2899 MiscmangementDeviceComponentDescriptionData;\r
2900 EFI_MISC_IPMI_INTERFACE_TYPE_DATA MiscIpmiInterfaceTypeData;\r
2901 EFI_MISC_SYSTEM_POWER_SUPPLY_DATA MiscPowerSupplyInfo;\r
2902 EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA MiscSmbiosStructEncapsulation;\r
2903 EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD MiscManagementDeviceThreshold;\r
2904} EFI_MISC_SUBCLASS_RECORDS;\r
2905\r
2906///\r
2907/// Inconsistent with specification here: \r
f22f941e 2908/// In MemSubclass specification 0.9, the following data structures are NOT defined.\r
87d63447 2909/// It is implementation-specific to simplify the code logic.\r
2910///\r
2911typedef struct {\r
2912 EFI_SUBCLASS_TYPE1_HEADER Header;\r
2913 EFI_MISC_SUBCLASS_RECORDS Record;\r
2914} EFI_MISC_SUBCLASS_DRIVER_DATA;\r
2915#pragma pack()\r
2916\r
2917///\r
2918/// Inconsistent with specification here: \r
f22f941e 2919/// In DataHubSubclass specification 0.9 page 16, the following symbol is NOT defined.\r
87d63447 2920/// But value is meaningful, 0 means Reserved.\r
2921///\r
2922#define EFI_SUBCLASS_INSTANCE_RESERVED 0\r
2923///\r
2924/// Inconsistent with specification here: \r
f22f941e 2925/// In DataHubSubclass specification 0.9 page 16, the following symbol is NOT defined.\r
87d63447 2926/// But value is meaningful, -1 means Not Applicable.\r
2927///\r
2928#define EFI_SUBCLASS_INSTANCE_NON_APPLICABLE 0xFFFF\r
2929\r
79964ac8 2930#endif\r