]> git.proxmox.com Git - mirror_edk2.git/blob - IntelFrameworkPkg/Include/Framework/DataHubRecords.h
b1157bafd375f416b5e6979572ca46a6b5aecadb
[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 //
1553 // Last PCI Bus Number
1554 //
1555 #define EFI_MISC_LAST_PCI_BUS_RECORD_NUMBER 0x00000001
1556
1557 typedef struct {
1558 UINT8 LastPciBus;
1559 } EFI_MISC_LAST_PCI_BUS_DATA;
1560
1561 //
1562 // Misc. BIOS Vendor - SMBIOS Type 0
1563 //
1564 #define EFI_MISC_BIOS_VENDOR_RECORD_NUMBER 0x00000002
1565
1566 typedef struct {
1567 UINT64 Reserved1 :2;
1568 UINT64 Unknown :1;
1569 UINT64 BiosCharacteristicsNotSupported :1;
1570 UINT64 IsaIsSupported :1;
1571 UINT64 McaIsSupported :1;
1572 UINT64 EisaIsSupported :1;
1573 UINT64 PciIsSupported :1;
1574 UINT64 PcmciaIsSupported :1;
1575 UINT64 PlugAndPlayIsSupported :1;
1576 UINT64 ApmIsSupported :1;
1577 UINT64 BiosIsUpgradable :1;
1578 UINT64 BiosShadowingAllowed :1;
1579 UINT64 VlVesaIsSupported :1;
1580 UINT64 EscdSupportIsAvailable :1;
1581 UINT64 BootFromCdIsSupported :1;
1582 UINT64 SelectableBootIsSupported :1;
1583 UINT64 RomBiosIsSocketed :1;
1584 UINT64 BootFromPcmciaIsSupported :1;
1585 UINT64 EDDSpecificationIsSupported :1;
1586 UINT64 JapaneseNecFloppyIsSupported :1;
1587 UINT64 JapaneseToshibaFloppyIsSupported :1;
1588 UINT64 Floppy525_360IsSupported :1;
1589 UINT64 Floppy525_12IsSupported :1;
1590 UINT64 Floppy35_720IsSupported :1;
1591 UINT64 Floppy35_288IsSupported :1;
1592 UINT64 PrintScreenIsSupported :1;
1593 UINT64 Keyboard8042IsSupported :1;
1594 UINT64 SerialIsSupported :1;
1595 UINT64 PrinterIsSupported :1;
1596 UINT64 CgaMonoIsSupported :1;
1597 UINT64 NecPc98 :1;
1598 UINT64 AcpiIsSupported :1;
1599 UINT64 UsbLegacyIsSupported :1;
1600 UINT64 AgpIsSupported :1;
1601 UINT64 I20BootIsSupported :1;
1602 UINT64 Ls120BootIsSupported :1;
1603 UINT64 AtapiZipDriveBootIsSupported :1;
1604 UINT64 Boot1394IsSupported :1;
1605 UINT64 SmartBatteryIsSupported :1;
1606 UINT64 BiosBootSpecIsSupported :1;
1607 UINT64 FunctionKeyNetworkBootIsSupported :1;
1608 UINT64 Reserved :22;
1609 } EFI_MISC_BIOS_CHARACTERISTICS;
1610
1611 typedef struct {
1612 UINT64 BiosReserved :16;
1613 UINT64 SystemReserved:16;
1614 UINT64 Reserved :32;
1615 } EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION;
1616
1617 typedef struct {
1618 STRING_REF BiosVendor;
1619 STRING_REF BiosVersion;
1620 STRING_REF BiosReleaseDate;
1621 EFI_PHYSICAL_ADDRESS BiosStartingAddress;
1622 EFI_EXP_BASE2_DATA BiosPhysicalDeviceSize;
1623 EFI_MISC_BIOS_CHARACTERISTICS BiosCharacteristics1;
1624 EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION
1625 BiosCharacteristics2;
1626 ///
1627 /// Inconsistent with specification here:
1628 /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.
1629 /// It's introduced for SmBios 2.6 spec type 0.
1630 ///
1631 UINT8 BiosMajorRelease;
1632 ///
1633 /// Inconsistent with specification here:
1634 /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.
1635 /// It's introduced for SmBios 2.6 spec type 0.
1636 ///
1637 UINT8 BiosMinorRelease;
1638 ///
1639 /// Inconsistent with specification here:
1640 /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.
1641 /// It's introduced for SmBios 2.6 spec type 0.
1642 ///
1643 UINT8 BiosEmbeddedFirmwareMajorRelease;
1644 ///
1645 /// Inconsistent with specification here:
1646 /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.
1647 /// It's introduced for SmBios 2.6 spec type 0.
1648 ///
1649 UINT8 BiosEmbeddedFirmwareMinorRelease;
1650 } EFI_MISC_BIOS_VENDOR_DATA;
1651
1652 //
1653 // Misc. System Manufacturer - SMBIOS Type 1
1654 //
1655 #define EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER 0x00000003
1656
1657 typedef enum {
1658 EfiSystemWakeupTypeReserved = 0,
1659 EfiSystemWakeupTypeOther = 1,
1660 EfiSystemWakeupTypeUnknown = 2,
1661 EfiSystemWakeupTypeApmTimer = 3,
1662 EfiSystemWakeupTypeModemRing = 4,
1663 EfiSystemWakeupTypeLanRemote = 5,
1664 EfiSystemWakeupTypePowerSwitch = 6,
1665 EfiSystemWakeupTypePciPme = 7,
1666 EfiSystemWakeupTypeAcPowerRestored = 8
1667 } EFI_MISC_SYSTEM_WAKEUP_TYPE;
1668
1669 typedef struct {
1670 STRING_REF SystemManufacturer;
1671 STRING_REF SystemProductName;
1672 STRING_REF SystemVersion;
1673 STRING_REF SystemSerialNumber;
1674 EFI_GUID SystemUuid;
1675 EFI_MISC_SYSTEM_WAKEUP_TYPE SystemWakeupType;
1676 ///
1677 /// Inconsistent with specification here:
1678 /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.
1679 /// It's introduced for SmBios 2.6 spec type 1.
1680 ///
1681 STRING_REF SystemSKUNumber;
1682 ///
1683 /// Inconsistent with specification here:
1684 /// In MiscSubclass spec 0.9, this data structure and corrsponding fields are NOT defined.
1685 /// It's introduced for SmBios 2.6 spec type 1.
1686 ///
1687 STRING_REF SystemFamily;
1688 } EFI_MISC_SYSTEM_MANUFACTURER_DATA;
1689
1690 //
1691 // Misc. Base Board Manufacturer - SMBIOS Type 2
1692 //
1693 #define EFI_MISC_BASE_BOARD_MANUFACTURER_RECORD_NUMBER 0x00000004
1694
1695 typedef struct {
1696 UINT32 Motherboard :1;
1697 UINT32 RequiresDaughterCard :1;
1698 UINT32 Removable :1;
1699 UINT32 Replaceable :1;
1700 UINT32 HotSwappable :1;
1701 UINT32 Reserved :27;
1702 } EFI_BASE_BOARD_FEATURE_FLAGS;
1703
1704 typedef enum {
1705 EfiBaseBoardTypeUnknown = 1,
1706 EfiBaseBoardTypeOther = 2,
1707 EfiBaseBoardTypeServerBlade = 3,
1708 EfiBaseBoardTypeConnectivitySwitch = 4,
1709 EfiBaseBoardTypeSystemManagementModule = 5,
1710 EfiBaseBoardTypeProcessorModule = 6,
1711 EfiBaseBoardTypeIOModule = 7,
1712 EfiBaseBoardTypeMemoryModule = 8,
1713 EfiBaseBoardTypeDaughterBoard = 9,
1714 EfiBaseBoardTypeMotherBoard = 0xA,
1715 EfiBaseBoardTypeProcessorMemoryModule = 0xB,
1716 EfiBaseBoardTypeProcessorIOModule = 0xC,
1717 EfiBaseBoardTypeInterconnectBoard = 0xD
1718 } EFI_BASE_BOARD_TYPE;
1719
1720 typedef struct {
1721 STRING_REF BaseBoardManufacturer;
1722 STRING_REF BaseBoardProductName;
1723 STRING_REF BaseBoardVersion;
1724 STRING_REF BaseBoardSerialNumber;
1725 STRING_REF BaseBoardAssetTag;
1726 STRING_REF BaseBoardChassisLocation;
1727 EFI_BASE_BOARD_FEATURE_FLAGS BaseBoardFeatureFlags;
1728 EFI_BASE_BOARD_TYPE BaseBoardType;
1729 EFI_INTER_LINK_DATA BaseBoardChassisLink;
1730 UINT32 BaseBoardNumberLinks;
1731 EFI_INTER_LINK_DATA LinkN;
1732 } EFI_MISC_BASE_BOARD_MANUFACTURER_DATA;
1733
1734 //
1735 // Misc. System/Chassis Enclosure - SMBIOS Type 3
1736 //
1737 #define EFI_MISC_CHASSIS_MANUFACTURER_RECORD_NUMBER 0x00000005
1738
1739 typedef enum {
1740 EfiMiscChassisTypeOther = 0x1,
1741 EfiMiscChassisTypeUnknown = 0x2,
1742 EfiMiscChassisTypeDeskTop = 0x3,
1743 EfiMiscChassisTypeLowProfileDesktop = 0x4,
1744 EfiMiscChassisTypePizzaBox = 0x5,
1745 EfiMiscChassisTypeMiniTower = 0x6,
1746 EfiMiscChassisTypeTower = 0x7,
1747 EfiMiscChassisTypePortable = 0x8,
1748 EfiMiscChassisTypeLapTop = 0x9,
1749 EfiMiscChassisTypeNotebook = 0xA,
1750 EfiMiscChassisTypeHandHeld = 0xB,
1751 EfiMiscChassisTypeDockingStation = 0xC,
1752 EfiMiscChassisTypeAllInOne = 0xD,
1753 EfiMiscChassisTypeSubNotebook = 0xE,
1754 EfiMiscChassisTypeSpaceSaving = 0xF,
1755 EfiMiscChassisTypeLunchBox = 0x10,
1756 EfiMiscChassisTypeMainServerChassis = 0x11,
1757 EfiMiscChassisTypeExpansionChassis = 0x12,
1758 EfiMiscChassisTypeSubChassis = 0x13,
1759 EfiMiscChassisTypeBusExpansionChassis = 0x14,
1760 EfiMiscChassisTypePeripheralChassis = 0x15,
1761 EfiMiscChassisTypeRaidChassis = 0x16,
1762 EfiMiscChassisTypeRackMountChassis = 0x17,
1763 EfiMiscChassisTypeSealedCasePc = 0x18,
1764 EfiMiscChassisMultiSystemChassis = 0x19
1765 } EFI_MISC_CHASSIS_TYPE;
1766
1767 typedef struct {
1768 ///
1769 /// Inconsistent with specification here:
1770 /// It's a typo of MiscSubclass 0.9 spec. It should be a variable
1771 /// name "ChassisType" rather than a type "EFI_MISC_CHASSIS_TYPE".
1772 ///
1773 UINT32 ChassisType :16;
1774 UINT32 ChassisLockPresent:1;
1775 UINT32 Reserved :15;
1776 } EFI_MISC_CHASSIS_STATUS;
1777
1778 typedef enum {
1779 EfiChassisStateOther = 0x01,
1780 EfiChassisStateUnknown = 0x02,
1781 EfiChassisStateSafe = 0x03,
1782 EfiChassisStateWarning = 0x04,
1783 EfiChassisStateCritical = 0x05,
1784 EfiChassisStateNonRecoverable = 0x06
1785 } EFI_MISC_CHASSIS_STATE;
1786
1787 typedef enum {
1788 EfiChassisSecurityStatusOther = 0x01,
1789 EfiChassisSecurityStatusUnknown = 0x02,
1790 EfiChassisSecurityStatusNone = 0x03,
1791 EfiChassisSecurityStatusExternalInterfaceLockedOut = 0x04,
1792 EfiChassisSecurityStatusExternalInterfaceLockedEnabled = 0x05
1793 } EFI_MISC_CHASSIS_SECURITY_STATE;
1794
1795 typedef struct {
1796 UINT32 RecordType :1;
1797 UINT32 Type :7;
1798 UINT32 Reserved :24;
1799 } EFI_MISC_ELEMENT_TYPE;
1800
1801 typedef struct {
1802 EFI_MISC_ELEMENT_TYPE ChassisElementType;
1803 EFI_INTER_LINK_DATA ChassisElementStructure;
1804 EFI_BASE_BOARD_TYPE ChassisBaseBoard;
1805 UINT32 ChassisElementMinimum;
1806 UINT32 ChassisElementMaximum;
1807 } EFI_MISC_ELEMENTS;
1808
1809 typedef struct {
1810 STRING_REF ChassisManufacturer;
1811 STRING_REF ChassisVersion;
1812 STRING_REF ChassisSerialNumber;
1813 STRING_REF ChassisAssetTag;
1814 EFI_MISC_CHASSIS_STATUS ChassisType;
1815 EFI_MISC_CHASSIS_STATE ChassisBootupState;
1816 EFI_MISC_CHASSIS_STATE ChassisPowerSupplyState;
1817 EFI_MISC_CHASSIS_STATE ChassisThermalState;
1818 EFI_MISC_CHASSIS_SECURITY_STATE ChassisSecurityState;
1819 UINT32 ChassisOemDefined;
1820 UINT32 ChassisHeight;
1821 UINT32 ChassisNumberPowerCords;
1822 UINT32 ChassisElementCount;
1823 UINT32 ChassisElementRecordLength;
1824 EFI_MISC_ELEMENTS ChassisElements;
1825 } EFI_MISC_CHASSIS_MANUFACTURER_DATA;
1826
1827 //
1828 // Misc. Port Connector Information - SMBIOS Type 8
1829 //
1830 #define EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_RECORD_NUMBER 0x00000006
1831
1832 typedef enum {
1833 EfiPortConnectorTypeNone = 0x00,
1834 EfiPortConnectorTypeCentronics = 0x01,
1835 EfiPortConnectorTypeMiniCentronics = 0x02,
1836 EfiPortConnectorTypeProprietary = 0x03,
1837 EfiPortConnectorTypeDB25Male = 0x04,
1838 EfiPortConnectorTypeDB25Female = 0x05,
1839 EfiPortConnectorTypeDB15Male = 0x06,
1840 EfiPortConnectorTypeDB15Female = 0x07,
1841 EfiPortConnectorTypeDB9Male = 0x08,
1842 EfiPortConnectorTypeDB9Female = 0x09,
1843 EfiPortConnectorTypeRJ11 = 0x0A,
1844 EfiPortConnectorTypeRJ45 = 0x0B,
1845 EfiPortConnectorType50PinMiniScsi = 0x0C,
1846 EfiPortConnectorTypeMiniDin = 0x0D,
1847 EfiPortConnectorTypeMicriDin = 0x0E,
1848 EfiPortConnectorTypePS2 = 0x0F,
1849 EfiPortConnectorTypeInfrared = 0x10,
1850 EfiPortConnectorTypeHpHil = 0x11,
1851 EfiPortConnectorTypeUsb = 0x12,
1852 EfiPortConnectorTypeSsaScsi = 0x13,
1853 EfiPortConnectorTypeCircularDin8Male = 0x14,
1854 EfiPortConnectorTypeCircularDin8Female = 0x15,
1855 EfiPortConnectorTypeOnboardIde = 0x16,
1856 EfiPortConnectorTypeOnboardFloppy = 0x17,
1857 EfiPortConnectorType9PinDualInline = 0x18,
1858 EfiPortConnectorType25PinDualInline = 0x19,
1859 EfiPortConnectorType50PinDualInline = 0x1A,
1860 EfiPortConnectorType68PinDualInline = 0x1B,
1861 EfiPortConnectorTypeOnboardSoundInput = 0x1C,
1862 EfiPortConnectorTypeMiniCentronicsType14 = 0x1D,
1863 EfiPortConnectorTypeMiniCentronicsType26 = 0x1E,
1864 EfiPortConnectorTypeHeadPhoneMiniJack = 0x1F,
1865 EfiPortConnectorTypeBNC = 0x20,
1866 EfiPortConnectorType1394 = 0x21,
1867 EfiPortConnectorTypePC98 = 0xA0,
1868 EfiPortConnectorTypePC98Hireso = 0xA1,
1869 EfiPortConnectorTypePCH98 = 0xA2,
1870 EfiPortConnectorTypePC98Note = 0xA3,
1871 EfiPortConnectorTypePC98Full = 0xA4,
1872 EfiPortConnectorTypeOther = 0xFF
1873 } EFI_MISC_PORT_CONNECTOR_TYPE;
1874
1875 typedef enum {
1876 EfiPortTypeNone = 0x00,
1877 EfiPortTypeParallelXtAtCompatible = 0x01,
1878 EfiPortTypeParallelPortPs2 = 0x02,
1879 EfiPortTypeParallelPortEcp = 0x03,
1880 EfiPortTypeParallelPortEpp = 0x04,
1881 EfiPortTypeParallelPortEcpEpp = 0x05,
1882 EfiPortTypeSerialXtAtCompatible = 0x06,
1883 EfiPortTypeSerial16450Compatible = 0x07,
1884 EfiPortTypeSerial16550Compatible = 0x08,
1885 EfiPortTypeSerial16550ACompatible = 0x09,
1886 EfiPortTypeScsi = 0x0A,
1887 EfiPortTypeMidi = 0x0B,
1888 EfiPortTypeJoyStick = 0x0C,
1889 EfiPortTypeKeyboard = 0x0D,
1890 EfiPortTypeMouse = 0x0E,
1891 EfiPortTypeSsaScsi = 0x0F,
1892 EfiPortTypeUsb = 0x10,
1893 EfiPortTypeFireWire = 0x11,
1894 EfiPortTypePcmciaTypeI = 0x12,
1895 EfiPortTypePcmciaTypeII = 0x13,
1896 EfiPortTypePcmciaTypeIII = 0x14,
1897 EfiPortTypeCardBus = 0x15,
1898 EfiPortTypeAccessBusPort = 0x16,
1899 EfiPortTypeScsiII = 0x17,
1900 EfiPortTypeScsiWide = 0x18,
1901 EfiPortTypePC98 = 0x19,
1902 EfiPortTypePC98Hireso = 0x1A,
1903 EfiPortTypePCH98 = 0x1B,
1904 EfiPortTypeVideoPort = 0x1C,
1905 EfiPortTypeAudioPort = 0x1D,
1906 EfiPortTypeModemPort = 0x1E,
1907 EfiPortTypeNetworkPort = 0x1F,
1908 EfiPortType8251Compatible = 0xA0,
1909 EfiPortType8251FifoCompatible = 0xA1,
1910 EfiPortTypeOther = 0xFF
1911 } EFI_MISC_PORT_TYPE;
1912
1913 typedef struct {
1914 STRING_REF PortInternalConnectorDesignator;
1915 STRING_REF PortExternalConnectorDesignator;
1916 EFI_MISC_PORT_CONNECTOR_TYPE PortInternalConnectorType;
1917 EFI_MISC_PORT_CONNECTOR_TYPE PortExternalConnectorType;
1918 EFI_MISC_PORT_TYPE PortType;
1919 EFI_MISC_PORT_DEVICE_PATH PortPath;
1920 } EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA;
1921
1922 //
1923 // Misc. System Slots - SMBIOS Type 9
1924 //
1925 #define EFI_MISC_SYSTEM_SLOT_DESIGNATION_RECORD_NUMBER 0x00000007
1926
1927 typedef enum {
1928 EfiSlotTypeOther = 0x01,
1929 EfiSlotTypeUnknown = 0x02,
1930 EfiSlotTypeIsa = 0x03,
1931 EfiSlotTypeMca = 0x04,
1932 EfiSlotTypeEisa = 0x05,
1933 EfiSlotTypePci = 0x06,
1934 EfiSlotTypePcmcia = 0x07,
1935 EfiSlotTypeVlVesa = 0x08,
1936 EfiSlotTypeProprietary = 0x09,
1937 EfiSlotTypeProcessorCardSlot = 0x0A,
1938 EfiSlotTypeProprietaryMemoryCardSlot = 0x0B,
1939 EfiSlotTypeIORiserCardSlot = 0x0C,
1940 EfiSlotTypeNuBus = 0x0D,
1941 EfiSlotTypePci66MhzCapable = 0x0E,
1942 EfiSlotTypeAgp = 0x0F,
1943 ///
1944 /// Inconsistent with specification here:
1945 /// In MiscSubclass spec 0.9, there is a typo on this field.
1946 /// Its naming should be EfiSlotTypeAgp2X rather than EfiSlotTypeApg2X.
1947 ///
1948 EfiSlotTypeAgp2X = 0x10,
1949 EfiSlotTypeAgp4X = 0x11,
1950 EfiSlotTypePciX = 0x12,
1951 ///
1952 /// Inconsistent with specification here:
1953 /// In MiscSubclass spec 0.9, there is a typo on this field.
1954 /// Its naming should be EfiSlotTypeAgp8X rather than EfiSlotTypeAgp8x.
1955 ///
1956 EfiSlotTypeAgp8X = 0x13,
1957 EfiSlotTypePC98C20 = 0xA0,
1958 EfiSlotTypePC98C24 = 0xA1,
1959 EfiSlotTypePC98E = 0xA2,
1960 EfiSlotTypePC98LocalBus = 0xA3,
1961 EfiSlotTypePC98Card = 0xA4,
1962 ///
1963 /// Inconsistent with specification here:
1964 /// In MiscSubclass spec 0.9, this field isn't defined.
1965 /// It's introduced for SmBios 2.6 spec type 9.
1966 ///
1967 EfiSlotTypePciExpress = 0xA5
1968 } EFI_MISC_SLOT_TYPE;
1969
1970 typedef enum {
1971 EfiSlotDataBusWidthOther = 0x01,
1972 EfiSlotDataBusWidthUnknown = 0x02,
1973 EfiSlotDataBusWidth8Bit = 0x03,
1974 EfiSlotDataBusWidth16Bit = 0x04,
1975 EfiSlotDataBusWidth32Bit = 0x05,
1976 EfiSlotDataBusWidth64Bit = 0x06,
1977 EfiSlotDataBusWidth128Bit = 0x07
1978 } EFI_MISC_SLOT_DATA_BUS_WIDTH;
1979
1980 typedef enum {
1981 EfiSlotUsageOther = 1,
1982 EfiSlotUsageUnknown = 2,
1983 EfiSlotUsageAvailable = 3,
1984 EfiSlotUsageInUse = 4
1985 } EFI_MISC_SLOT_USAGE;
1986
1987 typedef enum {
1988 EfiSlotLengthOther = 1,
1989 EfiSlotLengthUnknown = 2,
1990 EfiSlotLengthShort = 3,
1991 EfiSlotLengthLong = 4
1992 } EFI_MISC_SLOT_LENGTH;
1993
1994 typedef struct {
1995 UINT32 CharacteristicsUnknown :1;
1996 UINT32 Provides50Volts :1;
1997 UINT32 Provides33Volts :1;
1998 UINT32 SharedSlot :1;
1999 UINT32 PcCard16Supported :1;
2000 UINT32 CardBusSupported :1;
2001 UINT32 ZoomVideoSupported :1;
2002 UINT32 ModemRingResumeSupported:1;
2003 UINT32 PmeSignalSupported :1;
2004 UINT32 HotPlugDevicesSupported :1;
2005 UINT32 SmbusSignalSupported :1;
2006 UINT32 Reserved :21;
2007 } EFI_MISC_SLOT_CHARACTERISTICS;
2008
2009 typedef struct {
2010 STRING_REF SlotDesignation;
2011 EFI_MISC_SLOT_TYPE SlotType;
2012 EFI_MISC_SLOT_DATA_BUS_WIDTH SlotDataBusWidth;
2013 EFI_MISC_SLOT_USAGE SlotUsage;
2014 EFI_MISC_SLOT_LENGTH SlotLength;
2015 UINT16 SlotId;
2016 EFI_MISC_SLOT_CHARACTERISTICS SlotCharacteristics;
2017 EFI_DEVICE_PATH_PROTOCOL SlotDevicePath;
2018 } EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA;
2019
2020 //
2021 // Misc. Onboard Device - SMBIOS Type 10
2022 //
2023 #define EFI_MISC_ONBOARD_DEVICE_RECORD_NUMBER 0x00000008
2024
2025 typedef enum {
2026 EfiOnBoardDeviceTypeOther = 1,
2027 EfiOnBoardDeviceTypeUnknown = 2,
2028 EfiOnBoardDeviceTypeVideo = 3,
2029 EfiOnBoardDeviceTypeScsiController = 4,
2030 EfiOnBoardDeviceTypeEthernet = 5,
2031 EfiOnBoardDeviceTypeTokenRing = 6,
2032 EfiOnBoardDeviceTypeSound = 7
2033 } EFI_MISC_ONBOARD_DEVICE_TYPE;
2034
2035 typedef struct {
2036 UINT32 DeviceType :16;
2037 UINT32 DeviceEnabled :1;
2038 UINT32 Reserved :15;
2039 } EFI_MISC_ONBOARD_DEVICE_STATUS;
2040
2041 typedef struct {
2042 STRING_REF OnBoardDeviceDescription;
2043 EFI_MISC_ONBOARD_DEVICE_STATUS OnBoardDeviceType;
2044 EFI_DEVICE_PATH_PROTOCOL OnBoardDevicePath;
2045 } EFI_MISC_ONBOARD_DEVICE_DATA;
2046
2047 //
2048 // Misc. BIOS Language Information - SMBIOS Type 11
2049 //
2050 #define EFI_MISC_OEM_STRING_RECORD_NUMBER 0x00000009
2051
2052 typedef struct {
2053 STRING_REF OemStringRef[1];
2054 } EFI_MISC_OEM_STRING_DATA;
2055
2056 //
2057 // Misc. System Options - SMBIOS Type 12
2058 //
2059 typedef struct {
2060 STRING_REF SystemOptionStringRef[1];
2061 } EFI_MISC_SYSTEM_OPTION_STRING_DATA;
2062
2063 #define EFI_MISC_SYSTEM_OPTION_STRING_RECORD_NUMBER 0x0000000A
2064
2065 //
2066 // Misc. Number of Installable Languages - SMBIOS Type 13
2067 //
2068 #define EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_RECORD_NUMBER 0x0000000B
2069
2070 typedef struct {
2071 UINT32 AbbreviatedLanguageFormat :1;
2072 UINT32 Reserved :31;
2073 } EFI_MISC_LANGUAGE_FLAGS;
2074
2075 typedef struct {
2076 UINT16 NumberOfInstallableLanguages;
2077 EFI_MISC_LANGUAGE_FLAGS LanguageFlags;
2078 UINT16 CurrentLanguageNumber;
2079 } EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA;
2080
2081 //
2082 // Misc. System Language String
2083 //
2084 #define EFI_MISC_SYSTEM_LANGUAGE_STRING_RECORD_NUMBER 0x0000000C
2085
2086 typedef struct {
2087 UINT16 LanguageId;
2088 STRING_REF SystemLanguageString;
2089 } EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA;
2090
2091 //
2092 // Group Associations - SMBIOS Type 14
2093 //
2094 #define EFI_MISC_GROUP_NAME_RECORD_NUMBER 0x0000000D
2095
2096 typedef struct {
2097 STRING_REF GroupName;
2098 UINT16 NumberGroupItems;
2099 UINT16 GroupId;
2100 } EFI_MISC_GROUP_NAME_DATA;
2101
2102 //
2103 // Group Item Set Element
2104 //
2105 #define EFI_MISC_GROUP_ITEM_SET_RECORD_NUMBER 0x0000000E
2106
2107 typedef struct {
2108 EFI_GUID SubClass;
2109 EFI_INTER_LINK_DATA GroupLink;
2110 UINT16 GroupId;
2111 UINT16 GroupElementId;
2112 } EFI_MISC_GROUP_ITEM_SET_DATA;
2113
2114 //
2115 // Misc. Pointing Device Type - SMBIOS Type 21
2116 //
2117 #define EFI_MISC_POINTING_DEVICE_TYPE_RECORD_NUMBER 0x0000000F
2118
2119 typedef enum {
2120 EfiPointingDeviceTypeOther = 0x01,
2121 EfiPointingDeviceTypeUnknown = 0x02,
2122 EfiPointingDeviceTypeMouse = 0x03,
2123 EfiPointingDeviceTypeTrackBall = 0x04,
2124 EfiPointingDeviceTypeTrackPoint = 0x05,
2125 EfiPointingDeviceTypeGlidePoint = 0x06,
2126 EfiPointingDeviceTouchPad = 0x07,
2127 EfiPointingDeviceTouchScreen = 0x08,
2128 EfiPointingDeviceOpticalSensor = 0x09
2129 } EFI_MISC_POINTING_DEVICE_TYPE;
2130
2131 typedef enum {
2132 EfiPointingDeviceInterfaceOther = 0x01,
2133 EfiPointingDeviceInterfaceUnknown = 0x02,
2134 EfiPointingDeviceInterfaceSerial = 0x03,
2135 EfiPointingDeviceInterfacePs2 = 0x04,
2136 EfiPointingDeviceInterfaceInfrared = 0x05,
2137 EfiPointingDeviceInterfaceHpHil = 0x06,
2138 EfiPointingDeviceInterfaceBusMouse = 0x07,
2139 EfiPointingDeviceInterfaceADB = 0x08,
2140 EfiPointingDeviceInterfaceBusMouseDB9 = 0xA0,
2141 EfiPointingDeviceInterfaceBusMouseMicroDin = 0xA1,
2142 EfiPointingDeviceInterfaceUsb = 0xA2
2143 } EFI_MISC_POINTING_DEVICE_INTERFACE;
2144
2145 typedef struct {
2146 EFI_MISC_POINTING_DEVICE_TYPE PointingDeviceType;
2147 EFI_MISC_POINTING_DEVICE_INTERFACE PointingDeviceInterface;
2148 UINT16 NumberPointingDeviceButtons;
2149 EFI_DEVICE_PATH_PROTOCOL PointingDevicePath;
2150 } EFI_MISC_POINTING_DEVICE_TYPE_DATA;
2151
2152 //
2153 // Portable Battery - SMBIOS Type 22
2154 //
2155 #define EFI_MISC_BATTERY_LOCATION_RECORD_NUMBER 0x00000010
2156
2157 typedef enum {
2158 EfiBatteryDeviceChemistryTypeOther = 1,
2159 EfiBatteryDeviceChemistryTypeUnknown = 2,
2160 EfiBatteryDeviceChemistryTypeLeadAcid = 3,
2161 EfiBatteryDeviceChemistryTypeNickelCadmium = 4,
2162 EfiBatteryDeviceChemistryTypeNickelMetalHydride = 5,
2163 EfiBatteryDeviceChemistryTypeLithiumIon = 6,
2164 EfiBatteryDeviceChemistryTypeZincAir = 7,
2165 EfiBatteryDeviceChemistryTypeLithiumPolymer = 8
2166 } EFI_MISC_BATTERY_DEVICE_CHEMISTRY;
2167
2168 typedef struct {
2169 UINT32 Date :5;
2170 UINT32 Month :4;
2171 UINT32 Year :7;
2172 UINT32 Reserved :16;
2173 } EFI_MISC_BATTERY_SBDS_MANUFACTURE_DATE;
2174
2175 typedef struct {
2176 STRING_REF BatteryLocation;
2177 STRING_REF BatteryManufacturer;
2178 STRING_REF BatteryManufactureDate;
2179 STRING_REF BatterySerialNumber;
2180 STRING_REF BatteryDeviceName;
2181 STRING_REF BatterySbdsVersionNumber;
2182 STRING_REF BatterySbdsDeviceChemistry;
2183 EFI_MISC_BATTERY_DEVICE_CHEMISTRY BatteryDeviceChemistry;
2184 EFI_EXP_BASE10_DATA BatteryDesignCapacity;
2185 EFI_EXP_BASE10_DATA BatteryDesignVoltage;
2186 UINT16 BatteryMaximumError;
2187 UINT16 BatterySbdsSerialNumber;
2188 EFI_MISC_BATTERY_SBDS_MANUFACTURE_DATE
2189 BatterySbdsManufacturingDate;
2190 UINT32 BatteryOemSpecific;
2191 } EFI_MISC_BATTERY_LOCATION_DATA;
2192
2193 //
2194 // Misc. Reset Capabilities - SMBIOS Type 23
2195 //
2196 #define EFI_MISC_RESET_CAPABILITIES_RECORD_NUMBER 0x00000011
2197
2198 typedef struct {
2199 UINT32 Status :1;
2200 UINT32 BootOption :2;
2201 UINT32 BootOptionOnLimit :2;
2202 UINT32 WatchdogTimerPresent:1;
2203 UINT32 Reserved :26;
2204 } EFI_MISC_RESET_CAPABILITIES_TYPE;
2205
2206 typedef struct {
2207 EFI_MISC_RESET_CAPABILITIES_TYPE ResetCapabilities;
2208 UINT16 ResetCount;
2209 UINT16 ResetLimit;
2210 UINT16 ResetTimerInterval;
2211 UINT16 ResetTimeout;
2212 } EFI_MISC_RESET_CAPABILITIES;
2213
2214 typedef struct {
2215 EFI_MISC_RESET_CAPABILITIES ResetCapabilities;
2216 UINT16 ResetCount;
2217 UINT16 ResetLimit;
2218 UINT16 ResetTimerInterval;
2219 UINT16 ResetTimeout;
2220 } EFI_MISC_RESET_CAPABILITIES_DATA;
2221
2222 //
2223 // Misc. Hardware Security - SMBIOS Type 24
2224 //
2225 #define EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA_RECORD_NUMBER 0x00000012
2226
2227 ///
2228 /// Inconsistent with specification here:
2229 /// In MiscSubclass spec0.9, it only mention the possible value of each field in
2230 /// EFI_MISC_HARDWARE_SECURITY_SETTINGS.
2231 /// It's implementation-specific to simplify the code logic.
2232 ///
2233 typedef enum {
2234 EfiHardwareSecurityStatusDisabled = 0,
2235 EfiHardwareSecurityStatusEnabled = 1,
2236 EfiHardwareSecurityStatusNotImplemented = 2,
2237 EfiHardwareSecurityStatusUnknown = 3
2238 } EFI_MISC_HARDWARE_SECURITY_STATUS;
2239
2240 typedef struct {
2241 UINT32 FrontPanelResetStatus :2;
2242 UINT32 AdministratorPasswordStatus :2;
2243 UINT32 KeyboardPasswordStatus :2;
2244 UINT32 PowerOnPasswordStatus :2;
2245 UINT32 Reserved :24;
2246 } EFI_MISC_HARDWARE_SECURITY_SETTINGS;
2247
2248 typedef struct {
2249 EFI_MISC_HARDWARE_SECURITY_SETTINGS HardwareSecuritySettings;
2250 } EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA;
2251
2252 //
2253 // System Power Controls - SMBIOS Type 25
2254 //
2255 #define EFI_MISC_SCHEDULED_POWER_ON_MONTH_RECORD_NUMBER 0x00000013
2256
2257 typedef struct {
2258 UINT16 ScheduledPoweronMonth;
2259 UINT16 ScheduledPoweronDayOfMonth;
2260 UINT16 ScheduledPoweronHour;
2261 UINT16 ScheduledPoweronMinute;
2262 UINT16 ScheduledPoweronSecond;
2263 } EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA;
2264
2265 //
2266 // Voltage Probe - SMBIOS Type 26
2267 //
2268 #define EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000014
2269
2270 typedef struct {
2271 UINT32 VoltageProbeSite :5;
2272 UINT32 VoltageProbeStatus :3;
2273 UINT32 Reserved :24;
2274 } EFI_MISC_VOLTAGE_PROBE_LOCATION;
2275
2276 typedef struct {
2277 STRING_REF VoltageProbeDescription;
2278 EFI_MISC_VOLTAGE_PROBE_LOCATION VoltageProbeLocation;
2279 EFI_EXP_BASE10_DATA VoltageProbeMaximumValue;
2280 EFI_EXP_BASE10_DATA VoltageProbeMinimumValue;
2281 EFI_EXP_BASE10_DATA VoltageProbeResolution;
2282 EFI_EXP_BASE10_DATA VoltageProbeTolerance;
2283 EFI_EXP_BASE10_DATA VoltageProbeAccuracy;
2284 EFI_EXP_BASE10_DATA VoltageProbeNominalValue;
2285 EFI_EXP_BASE10_DATA MDLowerNoncriticalThreshold;
2286 EFI_EXP_BASE10_DATA MDUpperNoncriticalThreshold;
2287 EFI_EXP_BASE10_DATA MDLowerCriticalThreshold;
2288 EFI_EXP_BASE10_DATA MDUpperCriticalThreshold;
2289 EFI_EXP_BASE10_DATA MDLowerNonrecoverableThreshold;
2290 EFI_EXP_BASE10_DATA MDUpperNonrecoverableThreshold;
2291 UINT32 VoltageProbeOemDefined;
2292 } EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA;
2293
2294 //
2295 // Cooling Device - SMBIOS Type 27
2296 //
2297 #define EFI_MISC_COOLING_DEVICE_TEMP_LINK_RECORD_NUMBER 0x00000015
2298
2299 typedef struct {
2300 UINT32 CoolingDevice :5;
2301 UINT32 CoolingDeviceStatus :3;
2302 UINT32 Reserved :24;
2303 } EFI_MISC_COOLING_DEVICE_TYPE;
2304
2305 typedef struct {
2306 EFI_MISC_COOLING_DEVICE_TYPE CoolingDeviceType;
2307 EFI_INTER_LINK_DATA CoolingDeviceTemperatureLink;
2308 UINT16 CoolingDeviceUnitGroup;
2309 EFI_EXP_BASE10_DATA CoolingDeviceNominalSpeed;
2310 UINT32 CoolingDeviceOemDefined;
2311 } EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA;
2312
2313 //
2314 // Temperature Probe - SMBIOS Type 28
2315 //
2316 #define EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000016
2317
2318 typedef struct {
2319 UINT32 TemperatureProbeSite :5;
2320 UINT32 TemperatureProbeStatus :3;
2321 UINT32 Reserved :24;
2322 } EFI_MISC_TEMPERATURE_PROBE_LOCATION;
2323
2324 typedef struct {
2325 STRING_REF TemperatureProbeDescription;
2326 EFI_MISC_TEMPERATURE_PROBE_LOCATION
2327 TemperatureProbeLocation;
2328 EFI_EXP_BASE10_DATA TemperatureProbeMaximumValue;
2329 EFI_EXP_BASE10_DATA TemperatureProbeMinimumValue;
2330 EFI_EXP_BASE10_DATA TemperatureProbeResolution;
2331 EFI_EXP_BASE10_DATA TemperatureProbeTolerance;
2332 EFI_EXP_BASE10_DATA TemperatureProbeAccuracy;
2333 EFI_EXP_BASE10_DATA TemperatureProbeNominalValue;
2334 EFI_EXP_BASE10_DATA MDLowerNoncriticalThreshold;
2335 EFI_EXP_BASE10_DATA MDUpperNoncriticalThreshold;
2336 EFI_EXP_BASE10_DATA MDLowerCriticalThreshold;
2337 EFI_EXP_BASE10_DATA MDUpperCriticalThreshold;
2338 EFI_EXP_BASE10_DATA MDLowerNonrecoverableThreshold;
2339 EFI_EXP_BASE10_DATA MDUpperNonrecoverableThreshold;
2340 UINT32 TemperatureProbeOemDefined;
2341 } EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA;
2342
2343 //
2344 // Electrical Current Probe - SMBIOS Type 29
2345 //
2346
2347 #define EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000017
2348
2349 typedef struct {
2350 UINT32 ElectricalCurrentProbeSite :5;
2351 UINT32 ElectricalCurrentProbeStatus :3;
2352 UINT32 Reserved :24;
2353 } EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION;
2354
2355 typedef struct {
2356 STRING_REF ElectricalCurrentProbeDescription;
2357 EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION
2358 ElectricalCurrentProbeLocation;
2359 EFI_EXP_BASE10_DATA ElectricalCurrentProbeMaximumValue;
2360 EFI_EXP_BASE10_DATA ElectricalCurrentProbeMinimumValue;
2361 EFI_EXP_BASE10_DATA ElectricalCurrentProbeResolution;
2362 EFI_EXP_BASE10_DATA ElectricalCurrentProbeTolerance;
2363 EFI_EXP_BASE10_DATA ElectricalCurrentProbeAccuracy;
2364 EFI_EXP_BASE10_DATA ElectricalCurrentProbeNominalValue;
2365 EFI_EXP_BASE10_DATA MDLowerNoncriticalThreshold;
2366 EFI_EXP_BASE10_DATA MDUpperNoncriticalThreshold;
2367 EFI_EXP_BASE10_DATA MDLowerCriticalThreshold;
2368 EFI_EXP_BASE10_DATA MDUpperCriticalThreshold;
2369 EFI_EXP_BASE10_DATA MDLowerNonrecoverableThreshold;
2370 EFI_EXP_BASE10_DATA MDUpperNonrecoverableThreshold;
2371 UINT32 ElectricalCurrentProbeOemDefined;
2372 } EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA;
2373
2374 //
2375 // Out-of-Band Remote Access - SMBIOS Type 30
2376 //
2377
2378 #define EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_RECORD_NUMBER 0x00000018
2379
2380 typedef struct {
2381 UINT32 InboundConnectionEnabled :1;
2382 UINT32 OutboundConnectionEnabled :1;
2383 UINT32 Reserved :30;
2384 } EFI_MISC_REMOTE_ACCESS_CONNECTIONS;
2385
2386 typedef struct {
2387 STRING_REF RemoteAccessManufacturerNameDescription;
2388 EFI_MISC_REMOTE_ACCESS_CONNECTIONS RemoteAccessConnections;
2389 } EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA;
2390
2391 //
2392 // Misc. BIS Entry Point - SMBIOS Type 31
2393 //
2394 #define EFI_MISC_BIS_ENTRY_POINT_RECORD_NUMBER 0x00000019
2395
2396 typedef struct {
2397 EFI_PHYSICAL_ADDRESS BisEntryPoint;
2398 } EFI_MISC_BIS_ENTRY_POINT_DATA;
2399
2400 //
2401 // Misc. Boot Information - SMBIOS Type 32
2402 //
2403 #define EFI_MISC_BOOT_INFORMATION_STATUS_RECORD_NUMBER 0x0000001A
2404
2405 typedef enum {
2406 EfiBootInformationStatusNoError = 0x00,
2407 EfiBootInformationStatusNoBootableMedia = 0x01,
2408 EfiBootInformationStatusNormalOSFailedLoading = 0x02,
2409 EfiBootInformationStatusFirmwareDetectedFailure = 0x03,
2410 EfiBootInformationStatusOSDetectedFailure = 0x04,
2411 EfiBootInformationStatusUserRequestedBoot = 0x05,
2412 EfiBootInformationStatusSystemSecurityViolation = 0x06,
2413 EfiBootInformationStatusPreviousRequestedImage = 0x07,
2414 EfiBootInformationStatusWatchdogTimerExpired = 0x08,
2415 EfiBootInformationStatusStartReserved = 0x09,
2416 EfiBootInformationStatusStartOemSpecific = 0x80,
2417 EfiBootInformationStatusStartProductSpecific = 0xC0
2418 } EFI_MISC_BOOT_INFORMATION_STATUS_TYPE;
2419
2420 typedef struct {
2421 EFI_MISC_BOOT_INFORMATION_STATUS_TYPE BootInformationStatus;
2422 UINT8 BootInformationData[9];
2423 } EFI_MISC_BOOT_INFORMATION_STATUS_DATA;
2424
2425 //
2426 // Management Device - SMBIOS Type 34
2427 //
2428 #define EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_RECORD_NUMBER 0x0000001B
2429
2430 typedef enum {
2431 EfiManagementDeviceTypeOther = 0x01,
2432 EfiManagementDeviceTypeUnknown = 0x02,
2433 EfiManagementDeviceTypeLm75 = 0x03,
2434 EfiManagementDeviceTypeLm78 = 0x04,
2435 EfiManagementDeviceTypeLm79 = 0x05,
2436 EfiManagementDeviceTypeLm80 = 0x06,
2437 EfiManagementDeviceTypeLm81 = 0x07,
2438 EfiManagementDeviceTypeAdm9240 = 0x08,
2439 EfiManagementDeviceTypeDs1780 = 0x09,
2440 EfiManagementDeviceTypeMaxim1617 = 0x0A,
2441 EfiManagementDeviceTypeGl518Sm = 0x0B,
2442 EfiManagementDeviceTypeW83781D = 0x0C,
2443 EfiManagementDeviceTypeHt82H791 = 0x0D
2444 } EFI_MISC_MANAGEMENT_DEVICE_TYPE;
2445
2446 typedef enum {
2447 EfiManagementDeviceAddressTypeOther = 1,
2448 EfiManagementDeviceAddressTypeUnknown = 2,
2449 EfiManagementDeviceAddressTypeIOPort = 3,
2450 EfiManagementDeviceAddressTypeMemory = 4,
2451 EfiManagementDeviceAddressTypeSmbus = 5
2452 } EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE;
2453
2454 typedef struct {
2455 STRING_REF ManagementDeviceDescription;
2456 EFI_MISC_MANAGEMENT_DEVICE_TYPE ManagementDeviceType;
2457 UINTN ManagementDeviceAddress;
2458 EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE
2459 ManagementDeviceAddressType;
2460 } EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA;
2461
2462 //
2463 // Management Device Component - SMBIOS Type 35
2464 //
2465
2466 #define EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_RECORD_NUMBER 0x0000001C
2467
2468 typedef struct {
2469 STRING_REF ManagementDeviceComponentDescription;
2470 EFI_INTER_LINK_DATA ManagementDeviceLink;
2471 EFI_INTER_LINK_DATA ManagementDeviceComponentLink;
2472 ///
2473 /// Inconsistent with specification here:
2474 /// In MiscSubclass spec0.9, this field is NOT defined.
2475 /// It's introduced for SmBios 2.6 spec type 35.
2476 ///
2477 EFI_INTER_LINK_DATA ManagementDeviceThresholdLink;
2478 } EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA;
2479
2480 //
2481 // IPMI Data Record - SMBIOS Type 38
2482 //
2483 typedef enum {
2484 EfiIpmiOther = 0,
2485 EfiIpmiKcs = 1,
2486 EfiIpmiSmic = 2,
2487 EfiIpmiBt = 3
2488 } EFI_MISC_IPMI_INTERFACE_TYPE;
2489
2490 typedef struct {
2491 UINT16 IpmiSpecLeastSignificantDigit:4;
2492 UINT16 IpmiSpecMostSignificantDigit: 4;
2493 UINT16 Reserved: 8;
2494 } EFI_MISC_IPMI_SPECIFICATION_REVISION;
2495
2496 typedef struct {
2497 EFI_MISC_IPMI_INTERFACE_TYPE IpmiInterfaceType;
2498 EFI_MISC_IPMI_SPECIFICATION_REVISION
2499 IpmiSpecificationRevision;
2500 UINT16 IpmiI2CSlaveAddress;
2501 UINT16 IpmiNvDeviceAddress;
2502 UINT64 IpmiBaseAddress;
2503 EFI_DEVICE_PATH_PROTOCOL IpmiDevicePath;
2504 } EFI_MISC_IPMI_INTERFACE_TYPE_DATA;
2505
2506 #define EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER 0x0000001D
2507
2508 //
2509 //System Power supply Record - SMBIOS Type 39
2510 //
2511 typedef struct {
2512 UINT32 PowerSupplyHotReplaceable:1;
2513 UINT32 PowerSupplyPresent :1;
2514 UINT32 PowerSupplyUnplugged :1;
2515 UINT32 InputVoltageRangeSwitch :4;
2516 UINT32 PowerSupplyStatus :3;
2517 UINT32 PowerSupplyType :4;
2518 UINT32 Reserved :18;
2519 } EFI_MISC_POWER_SUPPLY_CHARACTERISTICS;
2520
2521 typedef struct {
2522 UINT16 PowerUnitGroup;
2523 STRING_REF PowerSupplyLocation;
2524 STRING_REF PowerSupplyDeviceName;
2525 STRING_REF PowerSupplyManufacturer;
2526 STRING_REF PowerSupplySerialNumber;
2527 STRING_REF PowerSupplyAssetTagNumber;
2528 STRING_REF PowerSupplyModelPartNumber;
2529 STRING_REF PowerSupplyRevisionLevel;
2530 UINT16 PowerSupplyMaxPowerCapacity;
2531 EFI_MISC_POWER_SUPPLY_CHARACTERISTICS PowerSupplyCharacteristics;
2532 EFI_INTER_LINK_DATA PowerSupplyInputVoltageProbeLink;
2533 EFI_INTER_LINK_DATA PowerSupplyCoolingDeviceLink;
2534 EFI_INTER_LINK_DATA PowerSupplyInputCurrentProbeLink;
2535 } EFI_MISC_POWER_SUPPLY_UNIT_GROUP_DATA;
2536
2537 #define EFI_MISC_SYSTEM_POWER_SUPPLY_RECORD_NUMBER 0x0000001E
2538
2539 //
2540 // OEM Data Record - SMBIOS Type 0x80-0xFF
2541 //
2542 typedef struct {
2543 UINT8 Type;
2544 UINT8 Length;
2545 UINT16 Handle;
2546 } EFI_SMBIOS_STRUCTURE_HDR;
2547
2548 typedef struct {
2549 EFI_SMBIOS_STRUCTURE_HDR Header;
2550 UINT8 RawData[1];
2551 } EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA;
2552
2553 #define EFI_MISC_SMBIOS_STRUCT_ENCAP_RECORD_NUMBER 0x0000001F
2554
2555 ///
2556 /// Misc. System Event Log - SMBIOS Type 15
2557 ///
2558 /// Inconsistent with specification here:
2559 /// In MiscSubclass spec0.9, the following data structures are NOT defined.
2560 /// It's introduced for SmBios 2.6 spec type 15.
2561 ///
2562 #define EFI_MISC_SYSTEM_EVENT_LOG_RECORD_NUMBER 0x00000020
2563
2564 ///
2565 /// Inconsistent with specification here:
2566 /// In MiscSubclass spec0.9, the following data structures are NOT defined.
2567 /// It's introduced for SmBios 2.6 spec type 15.
2568 ///
2569 typedef struct {
2570 UINT16 LogAreaLength;
2571 UINT16 LogHeaderStartOffset;
2572 UINT16 LogDataStartOffset;
2573 UINT8 AccessMethod;
2574 UINT8 LogStatus;
2575 UINT32 LogChangeToken;
2576 UINT32 AccessMethodAddress;
2577 UINT8 LogHeaderFormat;
2578 UINT8 NumberOfSupportedLogType;
2579 UINT8 LengthOfLogDescriptor;
2580 } EFI_MISC_SYSTEM_EVENT_LOG_DATA;
2581
2582 //
2583 // Access Method.
2584 // 0x00~0x04: as following definition
2585 // 0x05~0x7f: Available for future assignment.
2586 // 0x80~0xff: BIOS Vendor/OEM-specific.
2587 //
2588 #define ACCESS_INDEXIO_1INDEX8BIT_DATA8BIT 0x00
2589 #define ACCESS_INDEXIO_2INDEX8BIT_DATA8BIT 0X01
2590 #define ACCESS_INDEXIO_1INDEX16BIT_DATA8BIT 0X02
2591 #define ACCESS_MEMORY_MAPPED 0x03
2592 #define ACCESS_GPNV 0x04
2593
2594 ///
2595 /// Management Device Threshold Data Record - SMBIOS Type 36
2596 ///
2597 /// Inconsistent with specification here:
2598 /// In MiscSubclass spec0.9, the following data structures are NOT defined.
2599 /// It's introduced for SmBios 2.6 spec type 36.
2600 ///
2601 #define EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD_RECORD_NUMBER 0x00000021
2602 ///
2603 /// Inconsistent with specification here:
2604 /// In MiscSubclass spec0.9, the following data structures are NOT defined.
2605 /// It's introduced for SmBios 2.6 spec type 36.
2606 ///
2607 typedef struct {
2608 UINT16 LowerThresNonCritical;
2609 UINT16 UpperThresNonCritical;
2610 UINT16 LowerThresCritical;
2611 UINT16 UpperThresCritical;
2612 UINT16 LowerThresNonRecover;
2613 UINT16 UpperThresNonRecover;
2614 } EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD;
2615
2616 //
2617 // Declare the following strutures alias to use them more conviniently.
2618 //
2619 typedef EFI_MISC_LAST_PCI_BUS_DATA EFI_MISC_LAST_PCI_BUS;
2620 typedef EFI_MISC_BIOS_VENDOR_DATA EFI_MISC_BIOS_VENDOR;
2621 typedef EFI_MISC_SYSTEM_MANUFACTURER_DATA EFI_MISC_SYSTEM_MANUFACTURER;
2622 typedef EFI_MISC_BASE_BOARD_MANUFACTURER_DATA EFI_MISC_BASE_BOARD_MANUFACTURER;
2623 typedef EFI_MISC_CHASSIS_MANUFACTURER_DATA EFI_MISC_CHASSIS_MANUFACTURER;
2624 typedef EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR;
2625 typedef EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA EFI_MISC_SYSTEM_SLOT_DESIGNATION;
2626 typedef EFI_MISC_ONBOARD_DEVICE_DATA EFI_MISC_ONBOARD_DEVICE;
2627 typedef EFI_MISC_POINTING_DEVICE_TYPE_DATA EFI_MISC_ONBOARD_DEVICE_TYPE_DATA;
2628 typedef EFI_MISC_OEM_STRING_DATA EFI_MISC_OEM_STRING;
2629 typedef EFI_MISC_SYSTEM_OPTION_STRING_DATA EFI_MISC_SYSTEM_OPTION_STRING;
2630 typedef EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES;
2631 typedef EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA EFI_MISC_SYSTEM_LANGUAGE_STRING;
2632 typedef EFI_MISC_SYSTEM_EVENT_LOG_DATA EFI_MISC_SYSTEM_EVENT_LOG;
2633 typedef EFI_MISC_BIS_ENTRY_POINT_DATA EFI_MISC_BIS_ENTRY_POINT;
2634 typedef EFI_MISC_BOOT_INFORMATION_STATUS_DATA EFI_MISC_BOOT_INFORMATION_STATUS;
2635 typedef EFI_MISC_POWER_SUPPLY_UNIT_GROUP_DATA EFI_MISC_SYSTEM_POWER_SUPPLY;
2636 typedef EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION;
2637 typedef EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA EFI_MISC_SCHEDULED_POWER_ON_MONTH;
2638 typedef EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA EFI_MISC_VOLTAGE_PROBE_DESCRIPTION;
2639 typedef EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA EFI_MISC_COOLING_DEVICE_TEMP_LINK;
2640 typedef EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION;
2641 typedef EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA
2642 EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION;
2643 typedef EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION;
2644 typedef EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION;
2645
2646 ///
2647 /// Inconsistent with specification here:
2648 /// In MemSubclass spec 0.9, the following data structures are NOT defined.
2649 /// It is implementation-specific to simplify the code logic.
2650 ///
2651 typedef union {
2652 EFI_MISC_LAST_PCI_BUS_DATA LastPciBus;
2653 EFI_MISC_BIOS_VENDOR_DATA MiscBiosVendor;
2654 EFI_MISC_SYSTEM_MANUFACTURER_DATA MiscSystemManufacturer;
2655 EFI_MISC_BASE_BOARD_MANUFACTURER_DATA MiscBaseBoardManufacturer;
2656 EFI_MISC_CHASSIS_MANUFACTURER_DATA MiscChassisManufacturer;
2657 EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA MiscPortInternalConnectorDesignator;
2658 EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA MiscSystemSlotDesignation;
2659 EFI_MISC_ONBOARD_DEVICE_DATA MiscOnboardDevice;
2660 EFI_MISC_OEM_STRING_DATA MiscOemString;
2661 EFI_MISC_SYSTEM_OPTION_STRING_DATA MiscOptionString;
2662 EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA NumberOfInstallableLanguages;
2663 EFI_MISC_SYSTEM_LANGUAGE_STRING_DATA MiscSystemLanguageString;
2664 EFI_MISC_SYSTEM_EVENT_LOG_DATA MiscSystemEventLog;
2665 EFI_MISC_GROUP_NAME_DATA MiscGroupNameData;
2666 EFI_MISC_GROUP_ITEM_SET_DATA MiscGroupItemSetData;
2667 EFI_MISC_POINTING_DEVICE_TYPE_DATA MiscPointingDeviceTypeData;
2668 EFI_MISC_RESET_CAPABILITIES_DATA MiscResetCapablilitiesData;
2669 EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA MiscHardwareSecuritySettingsData;
2670 EFI_MISC_SCHEDULED_POWER_ON_MONTH_DATA MiscScheduledPowerOnMonthData;
2671 EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_DATA MiscVoltagePorbeDescriptionData;
2672 EFI_MISC_COOLING_DEVICE_TEMP_LINK_DATA MiscCoolingDeviceTempLinkData;
2673 EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_DATA MiscTemperatureProbeDescriptionData;
2674 EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_DATA MiscElectricalCurrentProbeDescriptionData;
2675 EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_DATA
2676 MiscRemoteAccessManufacturerDescriptionData;
2677 EFI_MISC_BIS_ENTRY_POINT_DATA MiscBisEntryPoint;
2678 EFI_MISC_BOOT_INFORMATION_STATUS_DATA MiscBootInformationStatus;
2679 EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_DATA MiscMangementDeviceDescriptionData;
2680 EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_DATA
2681 MiscmangementDeviceComponentDescriptionData;
2682 EFI_MISC_IPMI_INTERFACE_TYPE_DATA MiscIpmiInterfaceTypeData;
2683 EFI_MISC_POWER_SUPPLY_UNIT_GROUP_DATA MiscPowerSupplyInfo;
2684 EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION_DATA MiscSmbiosStructEncapsulation;
2685 EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD MiscManagementDeviceThreshold;
2686 } EFI_MISC_SUBCLASS_RECORDS;
2687
2688 ///
2689 /// Sub Class Header type1
2690 ///
2691 typedef struct {
2692 EFI_SUBCLASS_TYPE1_HEADER Header;
2693 EFI_MISC_SUBCLASS_RECORDS Record;
2694 } EFI_MISC_SUBCLASS_DRIVER_DATA;
2695
2696 ///
2697 /// Inconsistent with specification here:
2698 /// In DataHubSubclass spec 0.9 page 16, the following symbol is NOT defined.
2699 /// But value is meaningful, 0 means Reserved.
2700 ///
2701 #define EFI_SUBCLASS_INSTANCE_RESERVED 0
2702 ///
2703 /// Inconsistent with specification here:
2704 /// In DataHubSubclass spec 0.9 page 16, the following symbol is NOT defined.
2705 /// But value is meaningful, -1 means Not Applicable.
2706 ///
2707 #define EFI_SUBCLASS_INSTANCE_NON_APPLICABLE 0xFFFF
2708
2709 #endif