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