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