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