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