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