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