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