1 /*++
2 
3 Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution.  The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8 
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11 
12 Module Name:
13 
14   DataHubSubClassMisc.h
15 
16 Abstract:
17 
18   Definitions for Misc sub class data records
19 
20 Revision History
21 
22 --*/
23 
24 #ifndef _DATAHUB_SUBCLASS_MISC_H_
25 #define _DATAHUB_SUBCLASS_MISC_H_
26 
27 #include EFI_GUID_DEFINITION(DataHubRecords)
28 
29 #define EFI_MISC_SUBCLASS_GUID \
30 { 0x772484B2, 0x7482, 0x4b91, {0x9F, 0x9A, 0xAD, 0x43, 0xF8, 0x1C, 0x58, 0x81} }
31 
32 #define EFI_MISC_SUBCLASS_VERSION     0x0100
33 
34 #pragma pack(1)
35 //
36 //////////////////////////////////////////////////////////////////////////////
37 //
38 // Last PCI Bus Number
39 //
40 #define EFI_MISC_LAST_PCI_BUS_RECORD_NUMBER   0x00000001
41 
42 typedef struct {
43   UINT8   LastPciBus;
44 } EFI_MISC_LAST_PCI_BUS;
45 
46 typedef struct {
47   UINT8      FunctionNum  :3;
48   UINT8      DeviceNum    :5;
49 } EFI_MISC_DEV_FUNC_NUM;
50 
51 //
52 //////////////////////////////////////////////////////////////////////////////
53 //
54 // Misc. BIOS Vendor - SMBIOS Type 0
55 //
56 #define EFI_MISC_BIOS_VENDOR_RECORD_NUMBER  0x00000002
57 
58 typedef struct {
59   UINT32  Reserved1                         :2;
60   UINT32  Unknown                           :1;
61   UINT32  BiosCharacteristicsNotSupported   :1;
62   UINT32  IsaIsSupported                    :1;
63   UINT32  McaIsSupported                    :1;
64   UINT32  EisaIsSupported                   :1;
65   UINT32  PciIsSupported                    :1;
66   UINT32  PcmciaIsSupported                 :1;
67   UINT32  PlugAndPlayIsSupported            :1;
68   UINT32  ApmIsSupported                    :1;
69   UINT32  BiosIsUpgradable                  :1;
70   UINT32  BiosShadowingAllowed              :1;
71   UINT32  VlVesaIsSupported                 :1;
72   UINT32  EscdSupportIsAvailable            :1;
73   UINT32  BootFromCdIsSupported             :1;
74   UINT32  SelectableBootIsSupported         :1;
75   UINT32  RomBiosIsSocketed                 :1;
76   UINT32  BootFromPcmciaIsSupported         :1;
77   UINT32  EDDSpecificationIsSupported       :1;
78   UINT32  JapaneseNecFloppyIsSupported      :1;
79   UINT32  JapaneseToshibaFloppyIsSupported  :1;
80   UINT32  Floppy525_360IsSupported          :1;
81   UINT32  Floppy525_12IsSupported           :1;
82   UINT32  Floppy35_720IsSupported           :1;
83   UINT32  Floppy35_288IsSupported           :1;
84   UINT32  PrintScreenIsSupported            :1;
85   UINT32  Keyboard8042IsSupported           :1;
86   UINT32  SerialIsSupported                 :1;
87   UINT32  PrinterIsSupported                :1;
88   UINT32  CgaMonoIsSupported                :1;
89   UINT32  NecPc98                           :1;
90   UINT32  AcpiIsSupported                   :1;
91   UINT32  UsbLegacyIsSupported              :1;
92   UINT32  AgpIsSupported                    :1;
93   UINT32  I20BootIsSupported                :1;
94   UINT32  Ls120BootIsSupported              :1;
95   UINT32  AtapiZipDriveBootIsSupported      :1;
96   UINT32  Boot1394IsSupported               :1;
97   UINT32  SmartBatteryIsSupported           :1;
98   UINT32  BiosBootSpecIsSupported           :1;
99   UINT32  FunctionKeyNetworkBootIsSupported :1;
100   UINT32  TargetContentDistributionEnabled  :1;
101   UINT32  Reserved                          :21;
102 } EFI_MISC_BIOS_CHARACTERISTICS;
103 
104 typedef struct {
105   UINT32  BiosReserved                      :16;
106   UINT32  SystemReserved                    :16;
107   UINT32  Reserved                          :32;
108 } EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION;
109 
110 typedef struct {
111   STRING_REF                      BiosVendor;
112   STRING_REF                      BiosVersion;
113   STRING_REF                      BiosReleaseDate;
114   EFI_PHYSICAL_ADDRESS            BiosStartingAddress;
115   EFI_EXP_BASE2_DATA              BiosPhysicalDeviceSize;
116   EFI_MISC_BIOS_CHARACTERISTICS   BiosCharacteristics1;
117   EFI_MISC_BIOS_CHARACTERISTICS_EXTENSION  BiosCharacteristics2;
118   UINT8                           BiosMajorRelease;
119   UINT8                           BiosMinorRelease;
120   UINT8                           BiosEmbeddedFirmwareMajorRelease;
121   UINT8                           BiosEmbeddedFirmwareMinorRelease;
122 } EFI_MISC_BIOS_VENDOR;
123 
124 //
125 //////////////////////////////////////////////////////////////////////////////
126 //
127 // Misc. System Manufacturer - SMBIOS Type 1
128 //
129 #define EFI_MISC_SYSTEM_MANUFACTURER_RECORD_NUMBER 0x00000003
130 
131 typedef enum {
132   EfiSystemWakeupTypeReserved = 0,
133   EfiSystemWakeupTypeOther = 1,
134   EfiSystemWakeupTypeUnknown = 2,
135   EfiSystemWakeupTypeApmTimer = 3,
136   EfiSystemWakeupTypeModemRing = 4,
137   EfiSystemWakeupTypeLanRemote = 5,
138   EfiSystemWakeupTypePowerSwitch = 6,
139   EfiSystemWakeupTypePciPme = 7,
140   EfiSystemWakeupTypeAcPowerRestored = 8
141 } EFI_MISC_SYSTEM_WAKEUP_TYPE;
142 
143 typedef struct {
144   STRING_REF                      SystemManufacturer;
145   STRING_REF                      SystemProductName;
146   STRING_REF                      SystemVersion;
147   STRING_REF                      SystemSerialNumber;
148   EFI_GUID                        SystemUuid;
149   EFI_MISC_SYSTEM_WAKEUP_TYPE     SystemWakeupType;
150   STRING_REF                      SystemSKUNumber;
151   STRING_REF                      SystemFamily;
152 } EFI_MISC_SYSTEM_MANUFACTURER;
153 
154 //
155 //////////////////////////////////////////////////////////////////////////////
156 //
157 // Misc. Base Board Manufacturer - SMBIOS Type 2
158 //
159 #define EFI_MISC_BASE_BOARD_MANUFACTURER_RECORD_NUMBER 0x00000004
160 
161 typedef struct {
162   UINT32  Motherboard           :1;
163   UINT32  RequiresDaughterCard  :1;
164   UINT32  Removable             :1;
165   UINT32  Replaceable           :1;
166   UINT32  HotSwappable          :1;
167   UINT32  Reserved              :27;
168 } EFI_BASE_BOARD_FEATURE_FLAGS;
169 
170 typedef enum {
171   EfiBaseBoardTypeUnknown = 1,
172   EfiBaseBoardTypeOther = 2,
173   EfiBaseBoardTypeServerBlade = 3,
174   EfiBaseBoardTypeConnectivitySwitch = 4,
175   EfiBaseBoardTypeSystemManagementModule = 5,
176   EfiBaseBoardTypeProcessorModule = 6,
177   EfiBaseBoardTypeIOModule = 7,
178   EfiBaseBoardTypeMemoryModule = 8,
179   EfiBaseBoardTypeDaughterBoard = 9,
180   EfiBaseBoardTypeMotherBoard = 0xA,
181   EfiBaseBoardTypeProcessorMemoryModule = 0xB,
182   EfiBaseBoardTypeProcessorIOModule = 0xC,
183   EfiBaseBoardTypeInterconnectBoard = 0xD
184 } EFI_BASE_BOARD_TYPE;
185 
186 typedef struct {
187   STRING_REF                      BaseBoardManufacturer;
188   STRING_REF                      BaseBoardProductName;
189   STRING_REF                      BaseBoardVersion;
190   STRING_REF                      BaseBoardSerialNumber;
191   STRING_REF                      BaseBoardAssetTag;
192   STRING_REF                      BaseBoardChassisLocation;
193   EFI_BASE_BOARD_FEATURE_FLAGS    BaseBoardFeatureFlags;
194   EFI_BASE_BOARD_TYPE             BaseBoardType;
195   EFI_INTER_LINK_DATA             BaseBoardChassisLink;
196   UINT32                          BaseBoardNumberLinks;
197   EFI_INTER_LINK_DATA             LinkN;
198 } EFI_MISC_BASE_BOARD_MANUFACTURER;
199 
200 //
201 //////////////////////////////////////////////////////////////////////////////
202 //
203 // Misc. System/Chassis Enclosure - SMBIOS Type 3
204 //
205 #define EFI_MISC_CHASSIS_MANUFACTURER_RECORD_NUMBER  0x00000005
206 
207 typedef enum {
208   EfiMiscChassisTypeOther = 0x1,
209   EfiMiscChassisTypeUnknown = 0x2,
210   EfiMiscChassisTypeDeskTop = 0x3,
211   EfiMiscChassisTypeLowProfileDesktop = 0x4,
212   EfiMiscChassisTypePizzaBox = 0x5,
213   EfiMiscChassisTypeMiniTower = 0x6,
214   EfiMiscChassisTypeTower = 0x7,
215   EfiMiscChassisTypePortable = 0x8,
216   EfiMiscChassisTypeLapTop = 0x9,
217   EfiMiscChassisTypeNotebook = 0xA,
218   EfiMiscChassisTypeHandHeld = 0xB,
219   EfiMiscChassisTypeDockingStation = 0xC,
220   EfiMiscChassisTypeAllInOne = 0xD,
221   EfiMiscChassisTypeSubNotebook = 0xE,
222   EfiMiscChassisTypeSpaceSaving = 0xF,
223   EfiMiscChassisTypeLunchBox = 0x10,
224   EfiMiscChassisTypeMainServerChassis = 0x11,
225   EfiMiscChassisTypeExpansionChassis = 0x12,
226   EfiMiscChassisTypeSubChassis = 0x13,
227   EfiMiscChassisTypeBusExpansionChassis = 0x14,
228   EfiMiscChassisTypePeripheralChassis = 0x15,
229   EfiMiscChassisTypeRaidChassis = 0x16,
230   EfiMiscChassisTypeRackMountChassis = 0x17,
231   EfiMiscChassisTypeSealedCasePc = 0x18,
232   EfiMiscChassisMultiSystemChassis = 0x19,
233   EfiMiscChassisCompactPCI = 0x1A,
234   EfiMiscChassisAdvancedTCA = 0x1B,
235   EfiMiscChassisBlade = 0x1C,
236   EfiMiscChassisBladeEnclosure = 0x1D
237 } EFI_MISC_CHASSIS_TYPE;
238 
239 typedef struct {
240   UINT32  ChassisType       :16;
241   UINT32  ChassisLockPresent:1;
242   UINT32  Reserved          :15;
243 } EFI_MISC_CHASSIS_STATUS;
244 
245 typedef enum {
246   EfiChassisStateOther = 1,
247   EfiChassisStateUnknown = 2,
248   EfiChassisStateSafe = 3,
249   EfiChassisStateWarning = 4,
250   EfiChassisStateCritical = 5,
251   EfiChassisStateNonRecoverable = 6
252 } EFI_MISC_CHASSIS_STATE;
253 
254 typedef enum {
255   EfiChassisSecurityStatusOther = 1,
256   EfiChassisSecurityStatusUnknown = 2,
257   EfiChassisSecurityStatusNone = 3,
258   EfiChassisSecurityStatusExternalInterfaceLockedOut = 4,
259   EfiChassisSecurityStatusExternalInterfaceLockedEnabled = 5
260 } EFI_MISC_CHASSIS_SECURITY_STATE;
261 
262 typedef struct {
263   UINT32  RecordType  :1;
264   UINT32  Type        :7;
265   UINT32  Reserved    :24;
266 } EFI_MISC_ELEMENT_TYPE;
267 
268 typedef struct {
269   EFI_MISC_ELEMENT_TYPE   ChassisElementType;
270   EFI_INTER_LINK_DATA     ChassisElementStructure;
271   EFI_BASE_BOARD_TYPE     ChassisBaseBoard;
272   UINT32                  ChassisElementMinimum;
273   UINT32                  ChassisElementMaximum;
274 } EFI_MISC_ELEMENTS;
275 
276 typedef struct {
277   STRING_REF                      ChassisManufacturer;
278   STRING_REF                      ChassisVersion;
279   STRING_REF                      ChassisSerialNumber;
280   STRING_REF                      ChassisAssetTag;
281   EFI_MISC_CHASSIS_STATUS         ChassisType;
282   EFI_MISC_CHASSIS_STATE          ChassisBootupState;
283   EFI_MISC_CHASSIS_STATE          ChassisPowerSupplyState;
284   EFI_MISC_CHASSIS_STATE          ChassisThermalState;
285   EFI_MISC_CHASSIS_SECURITY_STATE ChassisSecurityState;
286   UINT32                          ChassisOemDefined;
287   UINT32                          ChassisHeight;
288   UINT32                          ChassisNumberPowerCords;
289   UINT32                          ChassisElementCount;
290   UINT32                          ChassisElementRecordLength;//
291   EFI_MISC_ELEMENTS               ChassisElements;
292 } EFI_MISC_CHASSIS_MANUFACTURER;
293 
294 //
295 //////////////////////////////////////////////////////////////////////////////
296 //
297 // Misc. Port Connector Information - SMBIOS Type 8
298 //
299 #define EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_RECORD_NUMBER 0x00000006
300 
301 typedef enum {
302   EfiPortConnectorTypeNone = 0x0,
303   EfiPortConnectorTypeCentronics = 0x1,
304   EfiPortConnectorTypeMiniCentronics = 0x2,
305   EfiPortConnectorTypeProprietary = 0x3,
306   EfiPortConnectorTypeDB25Male = 0x4,
307   EfiPortConnectorTypeDB25Female = 0x5,
308   EfiPortConnectorTypeDB15Male = 0x6,
309   EfiPortConnectorTypeDB15Female = 0x7,
310   EfiPortConnectorTypeDB9Male = 0x8,
311   EfiPortConnectorTypeDB9Female = 0x9,
312   EfiPortConnectorTypeRJ11 = 0xA,
313   EfiPortConnectorTypeRJ45 = 0xB,
314   EfiPortConnectorType50PinMiniScsi = 0xC,
315   EfiPortConnectorTypeMiniDin = 0xD,
316   EfiPortConnectorTypeMicriDin = 0xE,
317   EfiPortConnectorTypePS2 = 0xF,
318   EfiPortConnectorTypeInfrared = 0x10,
319   EfiPortConnectorTypeHpHil = 0x11,
320   EfiPortConnectorTypeUsb = 0x12,
321   EfiPortConnectorTypeSsaScsi = 0x13,
322   EfiPortConnectorTypeCircularDin8Male = 0x14,
323   EfiPortConnectorTypeCircularDin8Female = 0x15,
324   EfiPortConnectorTypeOnboardIde = 0x16,
325   EfiPortConnectorTypeOnboardFloppy = 0x17,
326   EfiPortConnectorType9PinDualInline = 0x18,
327   EfiPortConnectorType25PinDualInline = 0x19,
328   EfiPortConnectorType50PinDualInline = 0x1A,
329   EfiPortConnectorType68PinDualInline = 0x1B,
330   EfiPortConnectorTypeOnboardSoundInput = 0x1C,
331   EfiPortConnectorTypeMiniCentronicsType14 = 0x1D,
332   EfiPortConnectorTypeMiniCentronicsType26 = 0x1E,
333   EfiPortConnectorTypeHeadPhoneMiniJack = 0x1F,
334   EfiPortConnectorTypeBNC = 0x20,
335   EfiPortConnectorType1394 = 0x21,
336   EfiPortConnectorTypeSasSata = 0x22,
337   EfiPortConnectorTypePC98 = 0xA0,
338   EfiPortConnectorTypePC98Hireso = 0xA1,
339   EfiPortConnectorTypePCH98 = 0xA2,
340   EfiPortConnectorTypePC98Note = 0xA3,
341   EfiPortConnectorTypePC98Full = 0xA4,
342   EfiPortConnectorTypeOther = 0xFF
343 } EFI_MISC_PORT_CONNECTOR_TYPE;
344 
345 typedef enum {
346   EfiPortTypeNone = 0x0,
347   EfiPortTypeParallelXtAtCompatible = 0x1,
348   EfiPortTypeParallelPortPs2 = 0x2,
349   EfiPortTypeParallelPortEcp = 0x3,
350   EfiPortTypeParallelPortEpp = 0x4,
351   EfiPortTypeParallelPortEcpEpp = 0x5,
352   EfiPortTypeSerialXtAtCompatible = 0x6,
353   EfiPortTypeSerial16450Compatible = 0x7,
354   EfiPortTypeSerial16550Compatible = 0x8,
355   EfiPortTypeSerial16550ACompatible = 0x9,
356   EfiPortTypeScsi = 0xA,
357   EfiPortTypeMidi = 0xB,
358   EfiPortTypeJoyStick = 0xC,
359   EfiPortTypeKeyboard = 0xD,
360   EfiPortTypeMouse = 0xE,
361   EfiPortTypeSsaScsi = 0xF,
362   EfiPortTypeUsb = 0x10,
363   EfiPortTypeFireWire = 0x11,
364   EfiPortTypePcmciaTypeI = 0x12,
365   EfiPortTypePcmciaTypeII = 0x13,
366   EfiPortTypePcmciaTypeIII = 0x14,
367   EfiPortTypeCardBus = 0x15,
368   EfiPortTypeAccessBusPort = 0x16,
369   EfiPortTypeScsiII = 0x17,
370   EfiPortTypeScsiWide = 0x18,
371   EfiPortTypePC98 = 0x19,
372   EfiPortTypePC98Hireso = 0x1A,
373   EfiPortTypePCH98 = 0x1B,
374   EfiPortTypeVideoPort = 0x1C,
375   EfiPortTypeAudioPort = 0x1D,
376   EfiPortTypeModemPort = 0x1E,
377   EfiPortTypeNetworkPort = 0x1F,
378   EfiPortTypeSata = 0x20,
379   EfiPortTypeSas = 0x21,
380   EfiPortType8251Compatible = 0xA0,
381   EfiPortType8251FifoCompatible = 0xA1,
382   EfiPortTypeOther = 0xFF
383 } EFI_MISC_PORT_TYPE;
384 
385 
386 typedef struct {
387   EFI_STRING_TOKEN              PortInternalConnectorDesignator;
388   EFI_STRING_TOKEN              PortExternalConnectorDesignator;
389   EFI_MISC_PORT_CONNECTOR_TYPE  PortInternalConnectorType;
390   EFI_MISC_PORT_CONNECTOR_TYPE  PortExternalConnectorType;
391   EFI_MISC_PORT_TYPE            PortType;
392   EFI_MISC_PORT_DEVICE_PATH      PortPath;
393 } EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR;
394 
395 //
396 //////////////////////////////////////////////////////////////////////////////
397 //
398 // Misc. System Slots - SMBIOS Type 9
399 //
400 #define EFI_MISC_SYSTEM_SLOT_DESIGNATION_RECORD_NUMBER 0x00000007
401 
402 typedef enum {
403   EfiSlotTypeOther = 0x1,
404   EfiSlotTypeUnknown = 0x2,
405   EfiSlotTypeIsa = 0x3,
406   EfiSlotTypeMca = 0x4,
407   EfiSlotTypeEisa = 0x5,
408   EfiSlotTypePci = 0x6,
409   EfiSlotTypePcmcia = 0x7,
410   EfiSlotTypeVlVesa = 0x8,
411   EfiSlotTypeProprietary = 0x9,
412   EfiSlotTypeProcessorCardSlot = 0xA,
413   EfiSlotTypeProprietaryMemoryCardSlot = 0xB,
414   EfiSlotTypeIORiserCardSlot = 0xC,
415   EfiSlotTypeNuBus = 0xD,
416   EfiSlotTypePci66MhzCapable = 0xE,
417   EfiSlotTypeAgp = 0xF,
418   EfiSlotTypeApg2X = 0x10,
419   EfiSlotTypeAgp4X = 0x11,
420   EfiSlotTypePciX = 0x12,
421   EfiSlotTypeAgp8X = 0x13,
422   EfiSlotTypePC98C20 = 0xA0,
423   EfiSlotTypePC98C24 = 0xA1,
424   EfiSlotTypePC98E = 0xA2,
425   EfiSlotTypePC98LocalBus = 0xA3,
426   EfiSlotTypePC98Card = 0xA4,
427   EfiSlotTypePciExpress = 0xA5,
428   EfiSlotTypePciExpressX1 = 0xA6,
429   EfiSlotTypePciExpressX2 = 0xA7,
430   EfiSlotTypePciExpressX4 = 0xA8,
431   EfiSlotTypePciExpressX8 = 0xA9,
432   EfiSlotTypePciExpressX16 = 0xAA,
433   EfiSlotTypePciExpressGen2    = 0xAB,
434   EfiSlotTypePciExpressGen2X1  = 0xAC,
435   EfiSlotTypePciExpressGen2X2  = 0xAD,
436   EfiSlotTypePciExpressGen2X4  = 0xAE,
437   EfiSlotTypePciExpressGen2X8  = 0xAF,
438   EfiSlotTypePciExpressGen2X16 = 0xB0
439 } EFI_MISC_SLOT_TYPE;
440 
441 typedef enum {
442   EfiSlotDataBusWidthOther = 1,
443   EfiSlotDataBusWidthUnknown = 2,
444   EfiSlotDataBusWidth8Bit = 3,
445   EfiSlotDataBusWidth16Bit = 4,
446   EfiSlotDataBusWidth32Bit = 5,
447   EfiSlotDataBusWidth64Bit = 6,
448   EfiSlotDataBusWidth128Bit = 7,
449   EfiSlotDataBusWidth1xOrx1 = 8,
450   EfiSlotDataBusWidth2xOrx2 = 9,
451   EfiSlotDataBusWidth4xOrx4 = 0xA,
452   EfiSlotDataBusWidth8xOrx8 = 0xB,
453   EfiSlotDataBusWidth12xOrx12 = 0xC,
454   EfiSlotDataBusWidth16xOrx16 = 0xD,
455   EfiSlotDataBusWidth32xOrx32 = 0xE
456 } EFI_MISC_SLOT_DATA_BUS_WIDTH;
457 
458 typedef enum {
459   EfiSlotUsageOther = 1,
460   EfiSlotUsageUnknown = 2,
461   EfiSlotUsageAvailable = 3,
462   EfiSlotUsageInUse = 4
463 } EFI_MISC_SLOT_USAGE;
464 
465 typedef enum {
466   EfiSlotLengthOther = 1,
467   EfiSlotLengthUnknown = 2,
468   EfiSlotLengthShort = 3,
469   EfiSlotLengthLong = 4
470 } EFI_MISC_SLOT_LENGTH;
471 
472 typedef struct {
473   UINT32  CharacteristicsUnknown  :1;
474   UINT32  Provides50Volts         :1;
475   UINT32  Provides33Volts         :1;
476   UINT32  SharedSlot              :1;
477   UINT32  PcCard16Supported       :1;
478   UINT32  CardBusSupported        :1;
479   UINT32  ZoomVideoSupported      :1;
480   UINT32  ModemRingResumeSupported:1;
481   UINT32  PmeSignalSupported      :1;
482   UINT32  HotPlugDevicesSupported :1;
483   UINT32  SmbusSignalSupported    :1;
484   UINT32  Reserved                :21;
485 } EFI_MISC_SLOT_CHARACTERISTICS;
486 
487 typedef struct {
488   STRING_REF                    SlotDesignation;
489   EFI_MISC_SLOT_TYPE            SlotType;
490   EFI_MISC_SLOT_DATA_BUS_WIDTH  SlotDataBusWidth;
491   EFI_MISC_SLOT_USAGE           SlotUsage;
492   EFI_MISC_SLOT_LENGTH          SlotLength;
493   UINT16                        SlotId;
494   EFI_MISC_SLOT_CHARACTERISTICS SlotCharacteristics;
495   EFI_DEVICE_PATH_PROTOCOL      SlotDevicePath;
496   UINT16                        SegmentGroupNum;
497   UINT8                         BusNum;
498   EFI_MISC_DEV_FUNC_NUM         DevFuncNum;
499 } EFI_MISC_SYSTEM_SLOT_DESIGNATION;
500 
501 //
502 //////////////////////////////////////////////////////////////////////////////
503 //
504 // Misc. Onboard Device - SMBIOS Type 10
505 //
506 #define EFI_MISC_ONBOARD_DEVICE_RECORD_NUMBER 0x00000008
507 
508 typedef enum {
509   EfiOnBoardDeviceTypeOther = 1,
510   EfiOnBoardDeviceTypeUnknown = 2,
511   EfiOnBoardDeviceTypeVideo = 3,
512   EfiOnBoardDeviceTypeScsiController = 4,
513   EfiOnBoardDeviceTypeEthernet = 5,
514   EfiOnBoardDeviceTypeTokenRing = 6,
515   EfiOnBoardDeviceTypeSound = 7,
516   EfiOnBoardDeviceTypePataController = 8,
517   EfiOnBoardDeviceTypeSataController = 9,
518   EfiOnBoardDeviceTypeSasController = 10
519 } EFI_MISC_ONBOARD_DEVICE_TYPE;
520 
521 typedef struct {
522   UINT32  DeviceType    :16;
523   UINT32  DeviceEnabled :1;
524   UINT32  Reserved      :15;
525 } EFI_MISC_ONBOARD_DEVICE_STATUS;
526 
527 typedef struct {
528   STRING_REF                      OnBoardDeviceDescription;
529   EFI_MISC_ONBOARD_DEVICE_STATUS  OnBoardDeviceStatus;
530   EFI_DEVICE_PATH_PROTOCOL        OnBoardDevicePath;
531 } EFI_MISC_ONBOARD_DEVICE;
532 
533 //
534 //////////////////////////////////////////////////////////////////////////////
535 //
536 // Misc. BIOS Language Information - SMBIOS Type 11
537 //
538 #define EFI_MISC_OEM_STRING_RECORD_NUMBER 0x00000009
539 
540 typedef struct {
541   STRING_REF                          OemStringRef[1];
542 } EFI_MISC_OEM_STRING;
543 
544 //
545 //////////////////////////////////////////////////////////////////////////////
546 //
547 // Misc. System Options - SMBIOS Type 12
548 //
549 typedef struct {
550   STRING_REF                          SystemOptionStringRef[1];
551 } EFI_MISC_SYSTEM_OPTION_STRING;
552 
553 #define EFI_MISC_SYSTEM_OPTION_STRING_RECORD_NUMBER 0x0000000A
554 
555 //
556 //////////////////////////////////////////////////////////////////////////////
557 //
558 // Misc. Number of Installable Languages - SMBIOS Type 13
559 //
560 #define EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_RECORD_NUMBER 0x0000000B
561 
562 typedef struct {
563   UINT32                              AbbreviatedLanguageFormat :1;
564   UINT32                              Reserved                  :31;
565 } EFI_MISC_LANGUAGE_FLAGS;
566 
567 typedef struct {
568   UINT16                              NumberOfInstallableLanguages;
569   EFI_MISC_LANGUAGE_FLAGS             LanguageFlags;
570   UINT16                              CurrentLanguageNumber;
571 } EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES;
572 
573 //
574 //////////////////////////////////////////////////////////////////////////////
575 //
576 // Misc. System Language String
577 //
578 #define EFI_MISC_SYSTEM_LANGUAGE_STRING_RECORD_NUMBER 0x0000000C
579 
580 typedef struct {
581   UINT16                              LanguageId;
582   STRING_REF                          SystemLanguageString;
583 } EFI_MISC_SYSTEM_LANGUAGE_STRING;
584 
585 //
586 //////////////////////////////////////////////////////////////////////////////
587 //
588 //  Misc. Group Associations  - SMBIOS Type 14
589 //
590 #define EFI_MISC_GROUP_NAME_RECORD_NUMBER 0x0000000D
591 
592 typedef struct {
593   STRING_REF                          GroupName;
594   UINT16                              NumberGroupItems;
595   UINT16                              GroupId;
596 } EFI_MISC_GROUP_NAME_DATA;
597 
598 #define EFI_MISC_GROUP_ITEM_SET_RECORD_NUMBER 0x0000000E
599 
600 typedef struct {
601   EFI_GUID            SubClass;
602   EFI_INTER_LINK_DATA GroupLink;
603   UINT16              GroupId;
604   UINT16              GroupElementId;
605   UINT8               ItemType;
606 } EFI_MISC_GROUP_ITEM_SET_DATA;
607 
608 //
609 //////////////////////////////////////////////////////////////////////////////
610 //
611 //  Misc. Pointing Device Type - SMBIOS Type 21
612 //
613 #define EFI_MISC_POINTING_DEVICE_TYPE_RECORD_NUMBER 0x0000000F
614 
615 typedef enum {
616   EfiPointingDeviceTypeOther = 1,
617   EfiPointingDeviceTypeUnknown = 2,
618   EfiPointingDeviceTypeMouse = 3,
619   EfiPointingDeviceTypeTrackBall = 4,
620   EfiPointingDeviceTypeTrackPoint = 5,
621   EfiPointingDeviceTypeGlidePoint = 6,
622   EfiPointingDeviceTouchPad = 7,
623   EfiPointingDeviceTouchScreen = 8,
624   EfiPointingDeviceOpticalSensor = 9
625 } EFI_MISC_POINTING_DEVICE_TYPE;
626 
627 typedef enum {
628   EfiPointingDeviceInterfaceOther = 1,
629   EfiPointingDeviceInterfaceUnknown = 2,
630   EfiPointingDeviceInterfaceSerial = 3,
631   EfiPointingDeviceInterfacePs2 = 4,
632   EfiPointingDeviceInterfaceInfrared = 5,
633   EfiPointingDeviceInterfaceHpHil = 6,
634   EfiPointingDeviceInterfaceBusMouse = 7,
635   EfiPointingDeviceInterfaceADB = 8,
636   EfiPointingDeviceInterfaceBusMouseDB9 = 0xA0,
637   EfiPointingDeviceInterfaceBusMouseMicroDin = 0xA1,
638   EfiPointingDeviceInterfaceUsb = 0xA2
639 } EFI_MISC_POINTING_DEVICE_INTERFACE;
640 
641 typedef struct {
642   EFI_MISC_POINTING_DEVICE_TYPE       PointingDeviceType;
643   EFI_MISC_POINTING_DEVICE_INTERFACE  PointingDeviceInterface;
644   UINT16                              NumberPointingDeviceButtons;
645   EFI_DEVICE_PATH_PROTOCOL            PointingDevicePath;
646 } EFI_MISC_ONBOARD_DEVICE_TYPE_DATA;
647 
648 //
649 //////////////////////////////////////////////////////////////////////////////
650 //
651 //  Misc. Portable Battery - SMBIOS Type 22
652 //
653 #define EFI_MISC_PORTABLE_BATTERY_RECORD_NUMBER 0x00000010
654 
655 typedef enum {
656   EfiPortableBatteryDeviceChemistryOther = 1,
657   EfiPortableBatteryDeviceChemistryUnknown = 2,
658   EfiPortableBatteryDeviceChemistryLeadAcid = 3,
659   EfiPortableBatteryDeviceChemistryNickelCadmium = 4,
660   EfiPortableBatteryDeviceChemistryNickelMetalHydride = 5,
661   EfiPortableBatteryDeviceChemistryLithiumIon = 6,
662   EfiPortableBatteryDeviceChemistryZincAir = 7,
663   EfiPortableBatteryDeviceChemistryLithiumPolymer = 8
664 } EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY;
665 
666 typedef struct {
667   STRING_REF                                  Location;
668   STRING_REF                                  Manufacturer;
669   STRING_REF                                  ManufactureDate;
670   STRING_REF                                  SerialNumber;
671   STRING_REF                                  DeviceName;
672   EFI_MISC_PORTABLE_BATTERY_DEVICE_CHEMISTRY  DeviceChemistry;
673   UINT16                                      DesignCapacity;
674   UINT16                                      DesignVoltage;
675   STRING_REF                                  SBDSVersionNumber;
676   UINT8                                       MaximumError;
677   UINT16                                      SBDSSerialNumber;
678   UINT16                                      SBDSManufactureDate;
679   STRING_REF                                  SBDSDeviceChemistry;
680   UINT8                                       DesignCapacityMultiplier;
681   UINT32                                      OEMSpecific;
682   UINT8                                       BatteryNumber; // Temporary
683   BOOLEAN                                     Valid; // Is entry valid - Temporary
684 } EFI_MISC_PORTABLE_BATTERY;
685 
686 //
687 //////////////////////////////////////////////////////////////////////////////
688 //
689 // Misc. Reset Capabilities - SMBIOS Type 23
690 //
691 #define EFI_MISC_RESET_CAPABILITIES_RECORD_NUMBER 0x00000011
692 
693 typedef struct {
694   UINT32  Status              :1;
695   UINT32  BootOption          :2;
696   UINT32  BootOptionOnLimit   :2;
697   UINT32  WatchdogTimerPresent:1;
698   UINT32  Reserved            :26;
699 } EFI_MISC_RESET_CAPABILITIES_TYPE;
700 
701 typedef struct {
702   EFI_MISC_RESET_CAPABILITIES_TYPE  ResetCapabilities;
703   UINT16                            ResetCount;
704   UINT16                            ResetLimit;
705   UINT16                            ResetTimerInterval;
706   UINT16                            ResetTimeout;
707 } EFI_MISC_RESET_CAPABILITIES;
708 
709 typedef struct {
710     EFI_MISC_RESET_CAPABILITIES   ResetCapabilities;
711     UINT16                        ResetCount;
712     UINT16                        ResetLimit;
713     UINT16                        ResetTimerInterval;
714     UINT16                        ResetTimeout;
715 } EFI_MISC_RESET_CAPABILITIES_DATA;
716 
717 //
718 //////////////////////////////////////////////////////////////////////////////
719 //
720 // Misc. Hardware Security - SMBIOS Type 24
721 //
722 #define EFI_MISC_HARDWARE_SECURITY_RECORD_NUMBER 0x00000012
723 
724 //
725 // Backward Compatibility
726 //
727 #define EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA_RECORD_NUMBER  EFI_MISC_HARDWARE_SECURITY_RECORD_NUMBER
728 
729 typedef enum {
730   EfiHardwareSecurityStatusDisabled = 0,
731   EfiHardwareSecurityStatusEnabled = 1,
732   EfiHardwareSecurityStatusNotImplemented = 2,
733   EfiHardwareSecurityStatusUnknown = 3
734 } EFI_MISC_HARDWARE_SECURITY_STATUS;
735 
736 typedef struct {
737   EFI_MISC_HARDWARE_SECURITY_STATUS   FrontPanelResetStatus   :2;
738   EFI_MISC_HARDWARE_SECURITY_STATUS   AdministratorPasswordStatus   :2;
739   EFI_MISC_HARDWARE_SECURITY_STATUS   KeyboardPasswordStatus :2;
740   EFI_MISC_HARDWARE_SECURITY_STATUS   PowerOnPasswordStatus :2;
741   EFI_MISC_HARDWARE_SECURITY_STATUS   Reserved :24;
742 } EFI_MISC_HARDWARE_SECURITY_SETTINGS;
743 
744 typedef struct {
745   EFI_MISC_HARDWARE_SECURITY_SETTINGS HardwareSecuritySettings;
746 } EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA;
747 
748 //
749 //////////////////////////////////////////////////////////////////////////////
750 //
751 // Misc. System Power Controls - SMBIOS Type 25
752 //
753 #define EFI_MISC_SCHEDULED_POWER_ON_MONTH_RECORD_NUMBER 0x00000013
754 
755 typedef struct {
756   UINT8     ScheduledPoweronMonth;
757   UINT8     ScheduledPoweronDayOfMonth;
758   UINT8     ScheduledPoweronHour;
759   UINT8     ScheduledPoweronMinute;
760   UINT8     ScheduledPoweronSecond;
761 } EFI_MISC_SCHEDULED_POWER_ON_MONTH;
762 
763 //
764 //////////////////////////////////////////////////////////////////////////////
765 //
766 // Misc. Voltage Probe - SMBIOS Type 26
767 //
768 #define EFI_MISC_VOLTAGE_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000014
769 
770 typedef struct {
771   UINT32    VoltageProbeSite :5;
772   UINT32    VoltageProbeStatus :3;
773   UINT32    Reserved :24;
774 } EFI_MISC_VOLTAGE_PROBE_LOCATION;
775 
776 typedef struct {
777   STRING_REF                        VoltageProbeDescription;
778   EFI_MISC_VOLTAGE_PROBE_LOCATION   VoltageProbeLocation;
779   UINT16                            VoltageProbeMaximumValue;
780   UINT16                            VoltageProbeMinimumValue;
781   UINT16                            VoltageProbeResolution;
782   UINT16                            VoltageProbeTolerance;
783   UINT16                            VoltageProbeAccuracy;
784   UINT16                            VoltageProbeNominalValue;
785   UINT16                            MDLowerNoncriticalThreshold;
786   UINT16                            MDUpperNoncriticalThreshold;
787   UINT16                            MDLowerCriticalThreshold;
788   UINT16                            MDUpperCriticalThreshold;
789   UINT16                            MDLowerNonrecoverableThreshold;
790   UINT16                            MDUpperNonrecoverableThreshold;
791   UINT32                            VoltageProbeOemDefined;
792 } EFI_MISC_VOLTAGE_PROBE_DESCRIPTION;
793 
794 //
795 //////////////////////////////////////////////////////////////////////////////
796 //
797 // Misc. Cooling Device - SMBIOS Type 27
798 //
799 #define EFI_MISC_COOLING_DEVICE_TEMP_LINK_RECORD_NUMBER 0x00000015
800 
801 typedef struct {
802   UINT32 CoolingDevice :5;
803   UINT32 CoolingDeviceStatus :3;
804   UINT32 Reserved :24;
805 } EFI_MISC_COOLING_DEVICE_TYPE;
806 
807 typedef struct {
808   EFI_MISC_COOLING_DEVICE_TYPE  CoolingDeviceType;
809   EFI_INTER_LINK_DATA           CoolingDeviceTemperatureLink;
810   UINT8                         CoolingDeviceUnitGroup;
811   UINT16                        CoolingDeviceNominalSpeed;
812   UINT32                        CoolingDeviceOemDefined;
813 } EFI_MISC_COOLING_DEVICE_TEMP_LINK;
814 
815 //
816 //////////////////////////////////////////////////////////////////////////////
817 //
818 // Misc. Temperature Probe - SMBIOS Type 28
819 //
820 #define EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000016
821 
822 typedef struct {
823   UINT32 TemperatureProbeSite :5;
824   UINT32 TemperatureProbeStatus :3;
825   UINT32 Reserved :24;
826 } EFI_MISC_TEMPERATURE_PROBE_LOCATION;
827 
828 typedef struct {
829   STRING_REF                            TemperatureProbeDescription;
830   EFI_MISC_TEMPERATURE_PROBE_LOCATION   TemperatureProbeLocation;
831   UINT16                                TemperatureProbeMaximumValue;
832   UINT16                                TemperatureProbeMinimumValue;
833   UINT16                                TemperatureProbeResolution;
834   UINT16                                TemperatureProbeTolerance;
835   UINT16                                TemperatureProbeAccuracy;
836   UINT16                                TemperatureProbeNominalValue;
837   UINT16                                MDLowerNoncriticalThreshold;
838   UINT16                                MDUpperNoncriticalThreshold;
839   UINT16                                MDLowerCriticalThreshold;
840   UINT16                                MDUpperCriticalThreshold;
841   UINT16                                MDLowerNonrecoverableThreshold;
842   UINT16                                MDUpperNonrecoverableThreshold;
843   UINT32                                TemperatureProbeOemDefined;
844 } EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION;
845 
846 //
847 //////////////////////////////////////////////////////////////////////////////
848 //
849 // Misc. Electrical Current Probe - SMBIOS Type 29
850 //
851 #define EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION_RECORD_NUMBER 0x00000017
852 
853 typedef struct {
854   UINT32 ElectricalCurrentProbeSite :5;
855   UINT32 ElectricalCurrentProbeStatus :3;
856   UINT32 Reserved :24;
857 } EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION;
858 
859 typedef struct {
860   STRING_REF                                  ElectricalCurrentProbeDescription;
861   EFI_MISC_ELECTRICAL_CURRENT_PROBE_LOCATION  ElectricalCurrentProbeLocation;
862   UINT16                                      ElectricalCurrentProbeMaximumValue;
863   UINT16                                      ElectricalCurrentProbeMinimumValue;
864   UINT16                                      ElectricalCurrentProbeResolution;
865   UINT16                                      ElectricalCurrentProbeTolerance;
866   UINT16                                      ElectricalCurrentProbeAccuracy;
867   UINT16                                      ElectricalCurrentProbeNominalValue;
868   UINT16                                      MDLowerNoncriticalThreshold;
869   UINT16                                      MDUpperNoncriticalThreshold;
870   UINT16                                      MDLowerCriticalThreshold;
871   UINT16                                      MDUpperCriticalThreshold;
872   UINT16                                      MDLowerNonrecoverableThreshold;
873   UINT16                                      MDUpperNonrecoverableThreshold;
874   UINT32                                      ElectricalCurrentProbeOemDefined;
875 } EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION;
876 
877 //
878 //////////////////////////////////////////////////////////////////////////////
879 //
880 // Misc. Out-of-Band Remote Access - SMBIOS Type 30
881 //
882 #define EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION_RECORD_NUMBER 0x00000018
883 
884 typedef struct {
885   UINT32 InboundConnectionEnabled :1;
886   UINT32 OutboundConnectionEnabled :1;
887   UINT32 Reserved :30;
888 } EFI_MISC_REMOTE_ACCESS_CONNECTIONS;
889 
890 typedef struct {
891   STRING_REF                          RemoteAccessManufacturerNameDescription;
892   EFI_MISC_REMOTE_ACCESS_CONNECTIONS  RemoteAccessConnections;
893 } EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION;
894 //
895 //////////////////////////////////////////////////////////////////////////////
896 //
897 // Misc. BIS Entry Point - SMBIOS Type 31
898 //
899 #define EFI_MISC_BIS_ENTRY_POINT_RECORD_NUMBER          0x00000019
900 
901 typedef struct {
902   EFI_PHYSICAL_ADDRESS       BisEntryPoint;
903 } EFI_MISC_BIS_ENTRY_POINT;
904 
905 //
906 //////////////////////////////////////////////////////////////////////////////
907 //
908 // Misc. Boot Information - SMBIOS Type 32
909 //
910 #define EFI_MISC_BOOT_INFORMATION_STATUS_RECORD_NUMBER  0x0000001A
911 
912 typedef enum {
913   EfiBootInformationStatusNoError = 0,
914   EfiBootInformationStatusNoBootableMedia = 1,
915   EfiBootInformationStatusNormalOSFailedLoading = 2,
916   EfiBootInformationStatusFirmwareDetectedFailure = 3,
917   EfiBootInformationStatusOSDetectedFailure = 4,
918   EfiBootInformationStatusUserRequestedBoot = 5,
919   EfiBootInformationStatusSystemSecurityViolation = 6,
920   EfiBootInformationStatusPreviousRequestedImage = 7,
921   EfiBootInformationStatusWatchdogTimerExpired = 8,
922   EfiBootInformationStatusStartReserved = 9,
923   EfiBootInformationStatusStartOemSpecific = 128,
924   EfiBootInformationStatusStartProductSpecific = 192
925 } EFI_MISC_BOOT_INFORMATION_STATUS_TYPE;
926 
927 typedef struct {
928     EFI_MISC_BOOT_INFORMATION_STATUS_TYPE BootInformationStatus;
929     UINT8                                 BootInformationData[9];
930 } EFI_MISC_BOOT_INFORMATION_STATUS;
931 
932 //
933 //////////////////////////////////////////////////////////////////////////////
934 //
935 // Misc. Management Device - SMBIOS Type 34
936 //
937 #define EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION_RECORD_NUMBER 0x0000001B
938 
939 typedef enum {
940   EfiManagementDeviceTypeOther     = 1,
941   EfiManagementDeviceTypeUnknown   = 2,
942   EfiManagementDeviceTypeLm75      = 3,
943   EfiManagementDeviceTypeLm78      = 4,
944   EfiManagementDeviceTypeLm79      = 5,
945   EfiManagementDeviceTypeLm80      = 6,
946   EfiManagementDeviceTypeLm81      = 7,
947   EfiManagementDeviceTypeAdm9240   = 8,
948   EfiManagementDeviceTypeDs1780    = 9,
949   EfiManagementDeviceTypeMaxim1617 = 0xA,
950   EfiManagementDeviceTypeGl518Sm   = 0xB,
951   EfiManagementDeviceTypeW83781D   = 0xC,
952   EfiManagementDeviceTypeHt82H791  = 0xD
953 } EFI_MISC_MANAGEMENT_DEVICE_TYPE;
954 
955 typedef enum {
956   EfiManagementDeviceAddressTypeOther   = 1,
957   EfiManagementDeviceAddressTypeUnknown = 2,
958   EfiManagementDeviceAddressTypeIOPort  = 3,
959   EfiManagementDeviceAddressTypeMemory  = 4,
960   EfiManagementDeviceAddressTypeSmbus   = 5
961 } EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE;
962 
963 typedef struct {
964   STRING_REF                              ManagementDeviceDescription;
965   EFI_MISC_MANAGEMENT_DEVICE_TYPE         ManagementDeviceType;
966   UINTN                                   ManagementDeviceAddress;
967   EFI_MISC_MANAGEMENT_DEVICE_ADDRESS_TYPE ManagementDeviceAddressType;
968 } EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION;
969 
970 //
971 //////////////////////////////////////////////////////////////////////////////
972 //
973 // Misc. Management Device Component - SMBIOS Type 35
974 //
975 #define EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION_RECORD_NUMBER 0x0000001C
976 
977 typedef struct {
978   STRING_REF            ManagementDeviceComponentDescription;
979   EFI_INTER_LINK_DATA   ManagementDeviceLink;
980   EFI_INTER_LINK_DATA   ManagementDeviceComponentLink;
981   EFI_INTER_LINK_DATA   ManagementDeviceThresholdLink;
982   UINT8                 ComponentType;
983 } EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION;
984 
985 //
986 //////////////////////////////////////////////////////////////////////////////
987 //
988 // IPMI Data Record - SMBIOS Type 38
989 //
990 typedef enum {
991   EfiIpmiOther = 0,
992   EfiIpmiKcs = 1,
993   EfiIpmiSmic = 2,
994   EfiIpmiBt = 3
995 } EFI_MISC_IPMI_INTERFACE_TYPE;
996 
997 typedef struct {
998   UINT16  IpmiSpecLeastSignificantDigit:4;
999   UINT16  IpmiSpecMostSignificantDigit:4;
1000   UINT16  Reserved:8;
1001 } EFI_MISC_IPMI_SPECIFICATION_REVISION;
1002 
1003 typedef struct {
1004   EFI_MISC_IPMI_INTERFACE_TYPE          IpmiInterfaceType;
1005   EFI_MISC_IPMI_SPECIFICATION_REVISION  IpmiSpecificationRevision;
1006   UINT16                                IpmiI2CSlaveAddress;
1007   UINT16                                IpmiNvDeviceAddress;
1008   UINT64                                IpmiBaseAddress;
1009   EFI_DEVICE_PATH_PROTOCOL              IpmiDevicePath;
1010 } EFI_MISC_IPMI_INTERFACE_TYPE_DATA;
1011 
1012 #define EFI_MISC_IPMI_INTERFACE_TYPE_RECORD_NUMBER  0x0000001D
1013 
1014 //
1015 //////////////////////////////////////////////////////////////////////////////
1016 //
1017 //System Power supply Record - SMBIOS Type 39
1018 //
1019 typedef struct {
1020   UINT16  PowerSupplyHotReplaceable  :1;
1021   UINT16  PowerSupplyPresent         :1;
1022   UINT16  PowerSupplyUnplugged       :1;
1023   UINT16  InputVoltageRangeSwitch    :4;
1024   UINT16  PowerSupplyStatus           :3;
1025   UINT16  PowerSupplyType             :4;
1026   UINT16  Reserved                   :2;
1027 } POWER_SUPPLY_CHARACTERISTICS;
1028 
1029 typedef struct {
1030   UINT16                          PowerUnitGroup;
1031   STRING_REF                      PowerSupplyLocation;
1032   STRING_REF                      PowerSupplyDeviceName;
1033   STRING_REF                      PowerSupplyManufacturer;
1034   STRING_REF                      PowerSupplySerialNumber;
1035   STRING_REF                      PowerSupplyAssetTagNumber;
1036   STRING_REF                      PowerSupplyModelPartNumber;
1037   STRING_REF                      PowerSupplyRevisionLevel;
1038   UINT16                          PowerSupplyMaxPowerCapacity;
1039   POWER_SUPPLY_CHARACTERISTICS    PowerSupplyCharacteristics;
1040   EFI_INTER_LINK_DATA             PowerSupplyInputVoltageProbeLink;
1041   EFI_INTER_LINK_DATA             PowerSupplyCoolingDeviceLink;
1042   EFI_INTER_LINK_DATA             PowerSupplyInputCurrentProbeLink;
1043 } EFI_MISC_SYSTEM_POWER_SUPPLY;
1044 
1045 #define EFI_MISC_SYSTEM_POWER_SUPPLY_RECORD_NUMBER 0x0000001E
1046 
1047 //
1048 //////////////////////////////////////////////////////////////////////////////
1049 //
1050 //Additional Information Record - SMBIOS Type 40
1051 //
1052 typedef struct {
1053   UINT8                   EntryLength;
1054   UINT8                   ReferencedSmbiosType;
1055   EFI_INTER_LINK_DATA     ReferencedLink;
1056   UINT8                   ReferencedOffset;
1057   STRING_REF              EntryString;
1058   EFI_PHYSICAL_ADDRESS    ValueAddress;
1059 } EFI_MISC_ADDITIONAL_INFORMATION_ENTRY;
1060 
1061 typedef struct {
1062   UINT8                                  NumberOfAdditionalInformationEntries;
1063   EFI_PHYSICAL_ADDRESS                   AdditionalInfoEntriesAddr;
1064 } EFI_MISC_ADDITIONAL_INFORMATION;
1065 
1066 #define EFI_MISC_ADDITIONAL_INFORMATION_RECORD_NUMBER 0x00000022
1067 
1068 //
1069 //////////////////////////////////////////////////////////////////////////////
1070 //
1071 //Onboard Devices Extended Infomation Record - SMBIOS Type 41
1072 //
1073 typedef struct {
1074   UINT8     TypeOfDevice:7;
1075   UINT8     DeviceStatus:1;
1076 } EFI_MISC_DEVICE_TYPE;
1077 
1078 typedef struct {
1079   STRING_REF              ReferenceDesignation;
1080   EFI_MISC_DEVICE_TYPE    DeviceType;
1081   UINT8                   DeviceTypeInstance;
1082   UINT16                  SegmentGroupNum;
1083   UINT8                   BusNum;
1084   EFI_MISC_DEV_FUNC_NUM   DevFuncNum;
1085 } EFI_MISC_ONBOARD_DEVICES_EXTENDED_INFORMATION;
1086 
1087 #define EFI_MISC_ONBOARD_DEVICES_EXTENDED_INFORMATION_RECORD_NUMBER 0x00000023
1088 
1089 //
1090 //////////////////////////////////////////////////////////////////////////////
1091 //
1092 // Generic Data Record - All SMBIOS Type
1093 // Put smbios raw data into one datahub record directly. Smbios driver would
1094 // copy smbios raw data into smbios table but not take any translation.
1095 //
1096 typedef struct {
1097   UINT8       Type;
1098   UINT8       Length;
1099   UINT16      Handle;
1100 } SMBIOS_STRUCTURE_HDR;
1101 
1102 typedef struct {
1103   SMBIOS_STRUCTURE_HDR          Header;
1104   UINT8                         RawData[1];
1105 } EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION;
1106 
1107 #define EFI_MISC_SMBIOS_STRUCT_ENCAP_RECORD_NUMBER  0x0000001F
1108 
1109 //
1110 //////////////////////////////////////////////////////////////////////////////
1111 //
1112 //  Misc. System Event Log  - SMBIOS Type 15
1113 //
1114 #define EFI_MISC_SYSTEM_EVENT_LOG_RECORD_NUMBER 0x00000020
1115 
1116 typedef enum {
1117   EfiEventLogTypeReserved1                          = 0,
1118   EfiEventLogTypeSingleBitEccMemoryError            = 1,
1119   EfiEventLogTypeMultiBitEccMemoryError             = 2,
1120   EfiEventLogTypeParityMemoryError                  = 3,
1121   EfiEventLogTypeBusTimeOut                         = 4,
1122   EfiEventLogTypeIoChannelCheck                     = 5,
1123   EfiEventLogTypeSoftwareNmi                        = 6,
1124   EfiEventLogTypePostMemoryResize                   = 7,
1125   EfiEventLogTypePostError                          = 8,
1126   EfiEventLogTypePciParityError                     = 9,
1127   EfiEventLogTypePciSystemError                     = 0xA,
1128   EfiEventLogTypeCpuFailure                         = 0xB,
1129   EfiEventLogTypeEisaFailSafeTimerTimeOut           = 0xC,
1130   EfiEventLogTypeCorrectableMemoryLogDisabled       = 0xD,
1131   EfiEventLogTypeLoggingDisabled                    = 0xE,
1132   EfiEventLogTypeReserved2                          = 0xF,
1133   EfiEventLogTypeSystemLimitExceeded                = 0x10,
1134   EfiEventLogTypeAsynchronousHardwareTimerExpired   = 0x11,
1135   EfiEventLogTypeSystemConfigurationInformation     = 0x12,
1136   EfiEventLogTypeHardDiskInformation                = 0x13,
1137   EfiEventLogTypeSystemReconfigured                 = 0x14,
1138   EfiEventLogTypeUncorrectableCpuComplexError       = 0x15,
1139   EfiEventLogTypeLogAreaResetCleared                = 0x16,
1140   EfiEventLogTypeSystemBoot                         = 0x17,
1141   EfiEventLogTypeEndOfLog                           = 0xFF
1142 } EFI_MISC_LOG_TYPE;
1143 
1144 typedef enum {
1145   EfiEventLogDataFormatTypeNone = 0,
1146   EfiEventLogDataFormatTypeHandle = 1,
1147   EfiEventLogDataFormatTypeMultipleEvent = 2,
1148   EfiEventLogDataFormatTypeMultipleEventHandle = 3,
1149   EfiEventLogDataFormatTypePostResultsBitmap = 4,
1150   EfiEventLogDataFormatTypeSystemManagement = 5,
1151   EfiEventLogDataFormatTypeMultipleEventSystemManagement = 6
1152 } EFI_MISC_VARIABLE_DATA_FORMAT_TYPE;
1153 
1154 typedef struct {
1155   UINT8                 LogType;
1156   UINT8                 DataFormatType;
1157 } EFI_MISC_EVENT_LOG_TYPE;
1158 
1159 typedef struct {
1160   UINT16                    LogAreaLength;
1161   UINT16                    LogHeaderStartOffset;
1162   UINT16                    LogDataStartOffset;
1163   UINT8                     AccessMethod;
1164   UINT8                     LogStatus;
1165   UINT32                    LogChangeToken;
1166   UINT32                    AccessMethodAddress;
1167   UINT8                     LogHeaderFormat;
1168   UINT8                     NumberOfSupportedLogType;
1169   UINT8                     LengthOfLogDescriptor;
1170   EFI_PHYSICAL_ADDRESS      EventLogTypeDescriptors; // Pointer to EFI_MISC_EVENT_LOG_TYPE
1171 } EFI_MISC_SYSTEM_EVENT_LOG;
1172 
1173 //
1174 // Access Method.
1175 //  0x00~0x04:  as following definition
1176 //  0x05~0x7f:  Available for future assignment.
1177 //  0x80~0xff:  BIOS Vendor/OEM-specific.
1178 //
1179 #define ACCESS_INDEXIO_1INDEX8BIT_DATA8BIT    0x00
1180 #define ACCESS_INDEXIO_2INDEX8BIT_DATA8BIT    0X01
1181 #define ACCESS_INDEXIO_1INDEX16BIT_DATA8BIT   0X02
1182 #define ACCESS_MEMORY_MAPPED                  0x03
1183 #define ACCESS_GPNV                           0x04
1184 
1185 //
1186 //////////////////////////////////////////////////////////////////////////////
1187 //
1188 //Management Device Threshold Data Record - SMBIOS Type 36
1189 //
1190 #define EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD_RECORD_NUMBER  0x00000021
1191 
1192 typedef struct {
1193   UINT16                          LowerThresNonCritical;
1194   UINT16                          UpperThresNonCritical;
1195   UINT16                          LowerThresCritical;
1196   UINT16                          UpperThresCritical;
1197   UINT16                          LowerThresNonRecover;
1198   UINT16                          UpperThresNonRecover;
1199 } EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD;
1200 
1201 //
1202 //////////////////////////////////////////////////////////////////////////////
1203 //
1204 //
1205 //
1206 typedef union {
1207   EFI_MISC_LAST_PCI_BUS                                 LastPciBus;
1208   EFI_MISC_BIOS_VENDOR                                  MiscBiosVendor;
1209   EFI_MISC_SYSTEM_MANUFACTURER                          MiscSystemManufacturer;
1210   EFI_MISC_BASE_BOARD_MANUFACTURER                      MiscBaseBoardManufacturer;
1211   EFI_MISC_CHASSIS_MANUFACTURER                         MiscChassisManufacturer;
1212   EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR           MiscPortInternalConnectorDesignator;
1213   EFI_MISC_SYSTEM_SLOT_DESIGNATION                      MiscSystemSlotDesignation;
1214   EFI_MISC_ONBOARD_DEVICE                               MiscOnboardDevice;
1215   EFI_MISC_OEM_STRING                                   MiscOemString;
1216   EFI_MISC_SYSTEM_OPTION_STRING                         MiscOptionString;
1217   EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES              NumberOfInstallableLanguages;
1218   EFI_MISC_SYSTEM_LANGUAGE_STRING                       MiscSystemLanguageString;
1219   EFI_MISC_GROUP_NAME_DATA                              MiscGroupNameData;
1220   EFI_MISC_GROUP_ITEM_SET_DATA                          MiscGroupItemSetData;
1221   EFI_MISC_SYSTEM_EVENT_LOG                             MiscSystemEventLog;
1222   EFI_MISC_ONBOARD_DEVICE_TYPE_DATA                     MiscOnboardDeviceTypeData;
1223   EFI_MISC_PORTABLE_BATTERY                             MiscPortableBattery;
1224   EFI_MISC_RESET_CAPABILITIES_DATA                      MiscResetCapablilitiesData;
1225   EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA              MiscHardwareSecuritySettingsData;
1226   EFI_MISC_SCHEDULED_POWER_ON_MONTH                     MiscScheduledPowerOnMonth;
1227   EFI_MISC_VOLTAGE_PROBE_DESCRIPTION                    MiscVoltageProbeDescription;
1228   EFI_MISC_COOLING_DEVICE_TEMP_LINK                     MiscCoolingDeviceTempLink;
1229   EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION                MiscTemperatureProbeDescription;
1230   EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION         MiscElectricalCurrentProbeDescription;
1231   EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION       MiscRemoteAccessManufacturerDescription;
1232   EFI_MISC_BIS_ENTRY_POINT                              MiscBisEntryPoint;
1233   EFI_MISC_BOOT_INFORMATION_STATUS                      MiscBootInformationStatus;
1234   EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION                MiscManagementDeviceDescription;
1235   EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION      MiscManagementDeviceComponentDescription;
1236   EFI_MISC_IPMI_INTERFACE_TYPE_DATA                     MiscIpmiInterfaceTypeData;
1237   EFI_MISC_SYSTEM_POWER_SUPPLY                          MiscPowerSupplyInfo;
1238   EFI_MISC_SMBIOS_STRUCT_ENCAPSULATION                  MiscSmbiosStructEncapsulation;
1239   EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD                  MiscManagementDeviceThreshold;
1240   EFI_MISC_ADDITIONAL_INFORMATION                       MiscAdditionalInformation;
1241   EFI_MISC_ONBOARD_DEVICES_EXTENDED_INFORMATION         MiscOnBoardDevicesExtendedInformation;
1242 } EFI_MISC_SUBCLASS_RECORDS;
1243 
1244 //
1245 //
1246 //
1247 typedef struct {
1248   EFI_SUBCLASS_TYPE1_HEADER       Header;
1249   EFI_MISC_SUBCLASS_RECORDS       Record;
1250 } EFI_MISC_SUBCLASS_DRIVER_DATA;
1251 
1252 #pragma pack()
1253 
1254 #endif /* _DATAHUB_SUBCLASS_MISC_H_ */
1255 /* eof - DataHubSubClassMisc.h */
1256