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