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