]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Compatibility/PiSmbiosRecordOnDataHubSmbiosRecordThunk/MiscConv.c
EdkCompatibilityPkg: Remove EdkCompatibilityPkg
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / PiSmbiosRecordOnDataHubSmbiosRecordThunk / MiscConv.c
diff --git a/EdkCompatibilityPkg/Compatibility/PiSmbiosRecordOnDataHubSmbiosRecordThunk/MiscConv.c b/EdkCompatibilityPkg/Compatibility/PiSmbiosRecordOnDataHubSmbiosRecordThunk/MiscConv.c
deleted file mode 100644 (file)
index 428dbf0..0000000
+++ /dev/null
@@ -1,2527 +0,0 @@
-/** @file\r
-  Routines that support Misc SubClass data records translation.\r
-  \r
-Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "Thunk.h"\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 0 -- Bios Information.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType0 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_STATUS                 Status;\r
-  EFI_MISC_BIOS_VENDOR_DATA  *BiosInfo;\r
-\r
-  Status    = EFI_SUCCESS;\r
-  BiosInfo  = NULL;\r
-\r
-  BiosInfo  = (EFI_MISC_BIOS_VENDOR_DATA *) RecordData;\r
-\r
-  //\r
-  // Bios Vendor\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE0, Vendor),\r
-    &(BiosInfo->BiosVendor),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // Bios Version\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosVersion),\r
-    &(BiosInfo->BiosVersion),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // Bios Release Date\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosReleaseDate),\r
-    &(BiosInfo->BiosReleaseDate),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // Bios Starting Address Segment\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosSegment),\r
-    &BiosInfo->BiosStartingAddress,\r
-    2\r
-    );\r
-\r
-  //\r
-  // Bios Physical device size\r
-  //\r
-  SmbiosFldBase2ToByteWith64K (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosSize),\r
-    &BiosInfo->BiosPhysicalDeviceSize,\r
-    sizeof (EFI_EXP_BASE2_DATA)\r
-    );\r
-  (*(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosSize)))--;\r
-\r
-  //\r
-  // Bios Characteristics\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosCharacteristics),\r
-    &BiosInfo->BiosCharacteristics1,\r
-    4\r
-    );\r
-  \r
-  //\r
-  // Bios Characteristics higher four bytes\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosCharacteristics) + 4,\r
-    &BiosInfo->BiosCharacteristics2,\r
-    4\r
-    ); \r
-\r
-  //\r
-  // Bios Characteristics Extension1/2\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, BIOSCharacteristicsExtensionBytes),\r
-    (UINT8 *) &BiosInfo->BiosCharacteristics1 + 4,\r
-    2\r
-    );\r
-\r
-  //\r
-  // System BIOS Major Release\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, SystemBiosMajorRelease),\r
-    (UINT8 *) &BiosInfo->BiosMajorRelease,\r
-    1\r
-    );\r
-\r
-  //\r
-  // System BIOS Minor Release\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, SystemBiosMinorRelease),\r
-    (UINT8 *) &BiosInfo->BiosMinorRelease,\r
-    1\r
-    );\r
-\r
-  //\r
-  // Embedded Controller Firmware Major Release\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, EmbeddedControllerFirmwareMajorRelease),\r
-    (UINT8 *) &BiosInfo->BiosEmbeddedFirmwareMajorRelease,\r
-    1\r
-    );\r
-\r
-  //\r
-  // Embedded Controller Firmware Minor Release\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, EmbeddedControllerFirmwareMinorRelease),\r
-    (UINT8 *) &BiosInfo->BiosEmbeddedFirmwareMinorRelease,\r
-    1\r
-    );\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 1 -- System Information.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType1 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_STATUS                         Status;\r
-  EFI_MISC_SYSTEM_MANUFACTURER_DATA  *SystemInfo;\r
-\r
-  Status      = EFI_SUCCESS;\r
-  SystemInfo  = NULL;\r
-\r
-  SystemInfo  = (EFI_MISC_SYSTEM_MANUFACTURER_DATA *) RecordData;\r
-\r
-  //\r
-  // System Manufacturer\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE1, Manufacturer),\r
-    &(SystemInfo->SystemManufacturer),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // System Product Name\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE1, ProductName),\r
-    &(SystemInfo->SystemProductName),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // System Version\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE1, Version),\r
-    &(SystemInfo->SystemVersion),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // System Serial Number\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE1, SerialNumber),\r
-    &(SystemInfo->SystemSerialNumber),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // Uuid\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE1, Uuid),\r
-    &SystemInfo->SystemUuid,\r
-    16\r
-    );\r
-\r
-  //\r
-  // Wakeup Type\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE1, WakeUpType),\r
-    &SystemInfo->SystemWakeupType,\r
-    1\r
-    );\r
-\r
-  //\r
-  // System SKU Number\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE1, SKUNumber),\r
-    &(SystemInfo->SystemSKUNumber),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // System Family\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE1, Family),\r
-    &(SystemInfo->SystemFamily),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Field Filling Function for record type 2 -- Base Board Manufacture.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType2 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_STATUS                             Status;\r
-  EFI_MISC_BASE_BOARD_MANUFACTURER_DATA  *Bbm;\r
-  Status  = EFI_SUCCESS;\r
-  Bbm     = (EFI_MISC_BASE_BOARD_MANUFACTURER_DATA *) RecordData;\r
-\r
-  //\r
-  // Manufacturer\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE2, Manufacturer),\r
-    &(Bbm->BaseBoardManufacturer),\r
-    2\r
-    );\r
-\r
-  //\r
-  // Product\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE2, ProductName),\r
-    &(Bbm->BaseBoardProductName),\r
-    2\r
-    );\r
-\r
-  //\r
-  // Version\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE2, Version),\r
-    &(Bbm->BaseBoardVersion),\r
-    2\r
-    );\r
-\r
-  //\r
-  // Serial Number\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE2, SerialNumber),\r
-    &(Bbm->BaseBoardSerialNumber),\r
-    2\r
-    );\r
-\r
-  //\r
-  // Asset Tag\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE2, AssetTag),\r
-    &(Bbm->BaseBoardAssetTag),\r
-    2\r
-    );\r
-\r
-  //\r
-  // Location in Chassis\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE2, LocationInChassis),\r
-    &(Bbm->BaseBoardChassisLocation),\r
-    2\r
-    );\r
-\r
-  //\r
-  // Feature Flags\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE2, FeatureFlag),\r
-    &Bbm->BaseBoardFeatureFlags,\r
-    1\r
-    );\r
-\r
-  //\r
-  // Board Type\r
-  //\r
-  *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE2, BoardType)) = (UINT8) Bbm->BaseBoardType;\r
-\r
-  //\r
-  // Chassis Handle\r
-  //\r
-  SmbiosFldInterLink (\r
-    StructureNode,\r
-    (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE2, ChassisHandle),\r
-    3,  // SMBIOS type 3 - System Enclosure or Chassis\r
-    &Bbm->BaseBoardChassisLink,\r
-    &gEfiMiscSubClassGuid\r
-    );\r
-\r
-  //\r
-  // Number of Contained Object Handles\r
-  //\r
-  *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE2, NumberOfContainedObjectHandles)) = (UINT8) Bbm->BaseBoardNumberLinks;\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 3 -\r
-  - System Enclosure or Chassis.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType3 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_STATUS                         Status;\r
-  EFI_MISC_CHASSIS_MANUFACTURER_DATA *Ec;\r
-  EFI_MISC_ELEMENTS                  *Element;\r
-  UINT16                             Index;\r
-  UINT8                              ContainedElementType;\r
-  Status  = EFI_SUCCESS;\r
-  Ec      = (EFI_MISC_CHASSIS_MANUFACTURER_DATA *) RecordData;\r
-\r
-  //\r
-  // Chassis Type\r
-  //\r
-  *(UINT8*)((UINT8 *) (StructureNode->Structure) + \r
-            OFFSET_OF (SMBIOS_TABLE_TYPE3, Type)) \r
-            = (UINT8) (Ec->ChassisType.ChassisType | Ec->ChassisType.ChassisLockPresent << 7);\r
-\r
-\r
-  //\r
-  // Chassis Bootup State\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE3, BootupState),\r
-    &Ec->ChassisBootupState,\r
-    1\r
-    );\r
-\r
-  //\r
-  // Chassis Power Supply State\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE3, PowerSupplyState),\r
-    &Ec->ChassisPowerSupplyState,\r
-    1\r
-    );\r
-\r
-  //\r
-  // Chassis Thermal State\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE3, ThermalState),\r
-    &Ec->ChassisThermalState,\r
-    1\r
-    );\r
-\r
-  //\r
-  // Chassis Security State\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE3, SecurityStatus),\r
-    &Ec->ChassisSecurityState,\r
-    1\r
-    );\r
-\r
-  //\r
-  // Chassis Oem Defined\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE3, OemDefined),\r
-    &Ec->ChassisOemDefined,\r
-    4\r
-    );\r
-\r
-  //\r
-  // Chassis Height\r
-  //\r
-  *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
-            OFFSET_OF (SMBIOS_TABLE_TYPE3, Height)) \r
-            = (UINT8)Ec->ChassisHeight;\r
-\r
-  //\r
-  // Chassis Number Power Cords\r
-  //\r
-  *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
-            OFFSET_OF (SMBIOS_TABLE_TYPE3, NumberofPowerCords)) \r
-            = (UINT8)Ec->ChassisNumberPowerCords;\r
-  \r
-  //\r
-  // Chassis Element Count\r
-  //\r
-  *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
-            OFFSET_OF (SMBIOS_TABLE_TYPE3, ContainedElementCount)) \r
-            = (UINT8)Ec->ChassisElementCount;\r
-\r
-  if(Ec->ChassisElementCount > 0) {\r
-    //\r
-    // Element Record Length\r
-    // Current solution covers first 3 bytes; user can extend to meet its requirements.\r
-    //\r
-    *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
-              OFFSET_OF (SMBIOS_TABLE_TYPE3, ContainedElementRecordLength)) \r
-              = (UINT8)sizeof(CONTAINED_ELEMENT);\r
-\r
-    //\r
-    // Update the structure's length and StructureSize\r
-    //\r
-    StructureNode->Structure->Length = (UINT8)(StructureNode->Structure->Length + \r
-                                               Ec->ChassisElementCount * sizeof(CONTAINED_ELEMENT));\r
-    Status = SmbiosEnlargeStructureBuffer (\r
-               StructureNode,\r
-               StructureNode->Structure->Length,\r
-               StructureNode->StructureSize,\r
-               StructureNode->StructureSize + Ec->ChassisElementCount * sizeof(CONTAINED_ELEMENT)\r
-               );\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
-    }\r
-    \r
-    //\r
-    // Contained Elements\r
-    //\r
-    for (Index=0, Element = &Ec->ChassisElements; \r
-         Index < Ec->ChassisElementCount; \r
-         Index += 1, Element ++) {\r
-\r
-      //\r
-      // ContainedElementType\r
-      //\r
-      ContainedElementType = (UINT8)((Element->ChassisElementType.RecordType == 1)\r
-                                      ? (UINT8)(Element->ChassisElementType.RecordType << 7 | Element->ChassisElementType.Type)\r
-                                      : (UINT8)(Element->ChassisBaseBoard));\r
-      *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
-                OFFSET_OF (SMBIOS_TABLE_TYPE3, ContainedElements) + \r
-                Index * sizeof(CONTAINED_ELEMENT) + \r
-                OFFSET_OF(CONTAINED_ELEMENT,ContainedElementType)) \r
-                = ContainedElementType;\r
-\r
-      //\r
-      // ContainedElementMinimum\r
-      //\r
-      *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
-                OFFSET_OF (SMBIOS_TABLE_TYPE3, ContainedElements) + \r
-                Index * sizeof(CONTAINED_ELEMENT) + \r
-                OFFSET_OF(CONTAINED_ELEMENT,ContainedElementMinimum))\r
-                = (UINT8)Element->ChassisElementMinimum;\r
-\r
-      //\r
-      // ContainedElementMaximum\r
-      //\r
-      *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
-                OFFSET_OF (SMBIOS_TABLE_TYPE3, ContainedElements) + \r
-                Index * sizeof(CONTAINED_ELEMENT) + \r
-                OFFSET_OF(CONTAINED_ELEMENT,ContainedElementMaximum)) \r
-                = (UINT8)Element->ChassisElementMaximum;\r
-    }\r
-  }\r
-\r
-  //\r
-  // Move the filling of following four String fields after Contained Elements \r
-  // because they would break SMBIOS table.\r
-  // Chassis Manufacturer\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE3, Manufacturer),\r
-    &(Ec->ChassisManufacturer),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // Chassis Version\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE3, Version),\r
-    &(Ec->ChassisVersion),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // Chassis Serial Number\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE3, SerialNumber),\r
-    &(Ec->ChassisSerialNumber),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // Chassis Asset Tag\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE3, AssetTag),\r
-    &(Ec->ChassisAssetTag),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-  \r
-  return Status;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 8 -- Port Connector.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType8 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_STATUS                                       Status;\r
-  EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *Picd;\r
-\r
-  Status  = EFI_SUCCESS;\r
-  Picd    = (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData;\r
-\r
-  //\r
-  // Internal Connector Designator\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE8, InternalReferenceDesignator),\r
-    &(Picd->PortInternalConnectorDesignator),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // Internal Connector Type\r
-  //\r
-  *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE8, InternalConnectorType)) = (UINT8) Picd->PortInternalConnectorType;\r
-\r
-  //\r
-  // External Connector Designator\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE8, ExternalReferenceDesignator),\r
-    &(Picd->PortExternalConnectorDesignator),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // Internal Connector Type\r
-  //\r
-  *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE8, ExternalConnectorType)) = (UINT8) Picd->PortExternalConnectorType;\r
-\r
-  //\r
-  // Internal Connector Type\r
-  //\r
-  *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE8, PortType)) = (UINT8) Picd->PortType;\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 9 -- System slot.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType9 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_STATUS                             Status;\r
-  EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA  *Slot;\r
-\r
-  Status  = EFI_SUCCESS;\r
-  Slot    = (EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA *) RecordData;\r
-\r
-  //\r
-  // Slot Designation\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotDesignation),\r
-    &(Slot->SlotDesignation),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // Slot Type\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotType),\r
-    &Slot->SlotType,\r
-    1\r
-    );\r
-\r
-  //\r
-  // Slot Data Bus Width\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotDataBusWidth),\r
-    &Slot->SlotDataBusWidth,\r
-    1\r
-    );\r
-\r
-  //\r
-  // Slot Usage\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, CurrentUsage),\r
-    &Slot->SlotUsage,\r
-    1\r
-    );\r
-\r
-  //\r
-  // Slot Length\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotLength),\r
-    &Slot->SlotLength,\r
-    1\r
-    );\r
-\r
-  //\r
-  // Slot Id\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotID),\r
-    &Slot->SlotId,\r
-    2\r
-    );\r
-\r
-  //\r
-  // Slot Characteristics\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotCharacteristics1),\r
-    &Slot->SlotCharacteristics,\r
-    2\r
-    );\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 10 - Onboard Device.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType10 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_STATUS                   Status;\r
-  EFI_MISC_ONBOARD_DEVICE_DATA *OnboardDevice;\r
-  UINTN                        NumberOfDevices;\r
-  UINTN                        Index;\r
-  UINT8                        StatusAndType;\r
-\r
-  Status          = EFI_SUCCESS;\r
-  OnboardDevice   = (EFI_MISC_ONBOARD_DEVICE_DATA *) RecordData;\r
-\r
-  NumberOfDevices = (StructureNode->Structure->Length - 4) / 2;\r
-  for (Index = 0; Index < NumberOfDevices; Index += 1) {\r
-    //\r
-    // OnBoard Device Description\r
-    //\r
-    SmbiosFldString (\r
-      StructureNode,\r
-      (UINT32) (OFFSET_OF (SMBIOS_TABLE_TYPE10, Device) + 1 + (2 * Index)),\r
-      &(OnboardDevice->OnBoardDeviceDescription),\r
-      2 // 64 * sizeof(CHAR16)\r
-      );\r
-\r
-    //\r
-    // Status & Type: Bit 7    Devicen Status, Bits 6:0 Type of Device\r
-    //\r
-    StatusAndType = (UINT8) OnboardDevice->OnBoardDeviceStatus.DeviceType;\r
-    if (OnboardDevice->OnBoardDeviceStatus.DeviceEnabled != 0) {\r
-      StatusAndType |= 0x80;\r
-    } else {\r
-      StatusAndType &= 0x7F;\r
-    }\r
-\r
-    * (UINT8 *) ((UINT8 *) (StructureNode->Structure) + (OFFSET_OF (SMBIOS_TABLE_TYPE10, Device) + (2 * Index))) = StatusAndType;\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 11 - OEM Strings.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType11 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_OEM_STRING_DATA *OemString;\r
-\r
-  OemString = (EFI_MISC_OEM_STRING_DATA *)RecordData;\r
-  //\r
-  // OEM String data\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE11, StringCount),\r
-    &(OemString->OemStringRef[0]),\r
-    2\r
-    );\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 12 - System Options.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType12 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_STATUS                         Status;\r
-  EFI_MISC_SYSTEM_OPTION_STRING_DATA *Sos;\r
-  UINTN                              NumberOfInstallableLanguages;\r
-  UINTN                              Index;\r
-\r
-  Status  = EFI_SUCCESS;\r
-  Sos     = (EFI_MISC_SYSTEM_OPTION_STRING_DATA *) RecordData;\r
-\r
-  //\r
-  // As MiscDataHub spec defines,\r
-  // NumberOfInstallableLanguages should retrieve from Type 13.\r
-  //\r
-  NumberOfInstallableLanguages = (StructureNode->Structure->Length - 4);\r
-  for (Index = 0; Index < NumberOfInstallableLanguages; Index += 1) {\r
-    //\r
-    // OnBoard Device Description\r
-    //\r
-    SmbiosFldString (\r
-      StructureNode,\r
-      (UINT32) (OFFSET_OF (SMBIOS_TABLE_TYPE12, StringCount) + (Index)),\r
-      &(Sos->SystemOptionStringRef[Index]),\r
-      2\r
-      );\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 13 - BIOS Language.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType13 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA  *InstallableLanguage;\r
-\r
-  InstallableLanguage = (EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA *) RecordData;\r
-\r
-  //\r
-  // Number Of Installable Languages\r
-  //\r
-  *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, InstallableLanguages)) = (UINT8) (InstallableLanguage->NumberOfInstallableLanguages);\r
-\r
-  //\r
-  // Language Flags\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, Flags),\r
-    &InstallableLanguage->LanguageFlags,\r
-    1\r
-    );\r
-\r
-  //\r
-  // Current Language Number\r
-  // It's the index of multiple languages. Languages are filled by SmbiosFldMiscType14.\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, CurrentLanguages),\r
-    &InstallableLanguage->CurrentLanguageNumber,\r
-    1\r
-    );\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 14 - System Language String\r
-  Current solution assumes that EFI_MISC_SYSTEM_LANGUAGE_STRINGs are logged with\r
-  their LanguageId having ascending orders.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType14 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  UINT16                           CurrentLanguageNumber;\r
-  EFI_MISC_SYSTEM_LANGUAGE_STRING  *LanguageString;\r
-  \r
-  LanguageString = (EFI_MISC_SYSTEM_LANGUAGE_STRING *) RecordData;\r
-\r
-  //\r
-  // Backup CurrentLanguage\r
-  //\r
-  CopyMem (\r
-    &CurrentLanguageNumber,\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, CurrentLanguages),\r
-    1\r
-    );\r
-\r
-  //\r
-  // Clear the field so that SmbiosFldString can be reused\r
-  //\r
-  *(UINT8 *)((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, CurrentLanguages)) = 0;\r
-  \r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE13, CurrentLanguages),\r
-    &(LanguageString->SystemLanguageString),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // Restore CurrentLanguage\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, CurrentLanguages),\r
-    &CurrentLanguageNumber,\r
-    1\r
-    );\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 15 -- System Event Log.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType15 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_STATUS                      Status;\r
-  EFI_MISC_SYSTEM_EVENT_LOG_DATA  *SystemEventLog;\r
-\r
-  Status          = EFI_SUCCESS;\r
-  SystemEventLog  = NULL;\r
-\r
-  SystemEventLog  = (EFI_MISC_SYSTEM_EVENT_LOG_DATA *) RecordData;\r
-\r
-  //\r
-  // Log Area Length\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogAreaLength),\r
-    &(SystemEventLog->LogAreaLength),\r
-    2\r
-    );\r
-\r
-  //\r
-  // Log Header Start Offset\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogHeaderStartOffset),\r
-    &(SystemEventLog->LogHeaderStartOffset),\r
-    2\r
-    );\r
-\r
-  //\r
-  // Log Data Start Offset\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogDataStartOffset),\r
-    &(SystemEventLog->LogDataStartOffset),\r
-    2\r
-    );\r
-\r
-  //\r
-  // Access Method\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, AccessMethod),\r
-    &(SystemEventLog->AccessMethod),\r
-    1\r
-    );\r
-\r
-  //\r
-  // Log Status\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogStatus),\r
-    &(SystemEventLog->LogStatus),\r
-    1\r
-    );\r
-\r
-  //\r
-  // Log Change Token\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogChangeToken),\r
-    &(SystemEventLog->LogChangeToken),\r
-    4\r
-    );\r
-\r
-  //\r
-  // Access Method Address\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, AccessMethodAddress),\r
-    &(SystemEventLog->AccessMethodAddress),\r
-    4\r
-    );\r
-\r
-  //\r
-  // Log Header Format\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogHeaderFormat),\r
-    &(SystemEventLog->LogHeaderFormat),\r
-    1\r
-    );\r
-\r
-  //\r
-  // Number of Supported Log Type Descriptors\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, NumberOfSupportedLogTypeDescriptors),\r
-    &(SystemEventLog->NumberOfSupportedLogType),\r
-    1\r
-    );\r
-\r
-  //\r
-  // Length of each Log Type Descriptor\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LengthOfLogTypeDescriptor),\r
-    &(SystemEventLog->LengthOfLogDescriptor),\r
-    1\r
-    );\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 21 - Pointing Device.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType21 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_POINTING_DEVICE_TYPE_DATA *PointingDeviceData;\r
-\r
-  PointingDeviceData = (EFI_MISC_POINTING_DEVICE_TYPE_DATA *) RecordData;\r
-\r
-  //\r
-  // Pointing Device Type\r
-  //\r
-  *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE21, Type)) = (UINT8) (PointingDeviceData->PointingDeviceType);\r
-\r
-  //\r
-  // Pointing Device Interface\r
-  //\r
-  *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE21, Interface)) = (UINT8) (PointingDeviceData->PointingDeviceInterface);\r
-\r
-  //\r
-  // Number Pointing Device Buttons\r
-  //\r
-  *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE21, NumberOfButtons)) = (UINT8) (PointingDeviceData->NumberPointingDeviceButtons);\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 22 - Portable Battery.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType22 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_PORTABLE_BATTERY *PortableBattery;\r
-  STRING_REF                Chemistry;\r
-  PortableBattery = (EFI_MISC_PORTABLE_BATTERY *)RecordData;\r
-  \r
-  //\r
-  // Location\r
-  // \r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE22, Location),\r
-    &(PortableBattery->Location),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-  \r
-  //\r
-  // Manufacturer\r
-  // \r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE22, Manufacturer),\r
-    &(PortableBattery->Manufacturer),\r
-    2 \r
-    );  \r
-\r
-  //\r
-  // ManufactureDate\r
-  // \r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE22, ManufactureDate),\r
-    &(PortableBattery->ManufactureDate),\r
-    2 \r
-    );    \r
-\r
-  //\r
-  // SerialNumber\r
-  // \r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE22, SerialNumber),\r
-    &(PortableBattery->SerialNumber),\r
-    2 \r
-    );\r
-\r
-  //\r
-  // DeviceName\r
-  // \r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE22, DeviceName),\r
-    &(PortableBattery->DeviceName),\r
-    2 \r
-  );   \r
-  \r
-  //\r
-  // DeviceChemistry\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, DeviceChemistry),\r
-    &PortableBattery->DeviceChemistry,\r
-    1\r
-    );\r
-\r
-  //\r
-  // DesignCapacity\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, DeviceCapacity),\r
-    &PortableBattery->DesignCapacity,\r
-    2\r
-    );\r
-    \r
-  //\r
-  // DesignVoltage\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, DesignVoltage),\r
-    &PortableBattery->DesignVoltage,\r
-    2\r
-    );    \r
\r
-  //\r
-  // SBDSVersionNumber\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE22, SBDSVersionNumber),\r
-    &(PortableBattery->SBDSVersionNumber),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // MaximumError\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, MaximumErrorInBatteryData),\r
-    &PortableBattery->MaximumError,\r
-    1\r
-    ); \r
-    \r
-  //\r
-  // SBDSSerialNumber\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, SBDSSerialNumber),\r
-    &PortableBattery->SBDSSerialNumber,\r
-    2\r
-    );      \r
-\r
-  //\r
-  // SBDSManufactureDate\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, SBDSManufactureDate),\r
-    &PortableBattery->SBDSManufactureDate,\r
-    2\r
-    );\r
-\r
-  //\r
-  // Avoid alignment issue on IPF\r
-  //\r
-  CopyMem (\r
-    &Chemistry, \r
-    &PortableBattery->SBDSDeviceChemistry,\r
-    2\r
-    );\r
-\r
-  //\r
-  // SBDSDeviceChemistry\r
-  //    \r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE22, SBDSDeviceChemistry),\r
-    &Chemistry,\r
-    2 // 64 * sizeof(CHAR16)\r
-    ); \r
-    \r
-  //\r
-  // DesignCapacityMultiplier\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, DesignCapacityMultiplier),\r
-    &PortableBattery->DesignCapacityMultiplier,\r
-    1\r
-    );             \r
\r
-  //\r
-  // OEMSpecific\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, OEMSpecific),\r
-    &PortableBattery->OEMSpecific,\r
-    4\r
-    );\r
-    \r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 23 - System Reset.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType23 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_RESET_CAPABILITIES_DATA  *SystemResetData;\r
-\r
-  SystemResetData = (EFI_MISC_RESET_CAPABILITIES_DATA *) RecordData;\r
-\r
-  //\r
-  // Reset Capabilities\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE23, Capabilities),\r
-    &(SystemResetData->ResetCapabilities),\r
-    1\r
-    );\r
-\r
-  //\r
-  // Reset Count\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE23, ResetCount),\r
-    &(SystemResetData->ResetCount),\r
-    2\r
-    );\r
-\r
-  //\r
-  // Reset Limit\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE23, ResetLimit),\r
-    &(SystemResetData->ResetLimit),\r
-    2\r
-    );\r
-\r
-  //\r
-  // Reset Timer Interval\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE23, TimerInterval),\r
-    &(SystemResetData->ResetTimerInterval),\r
-    2\r
-    );\r
-\r
-  //\r
-  // Reset Timeout\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE23, Timeout),\r
-    &(SystemResetData->ResetTimeout),\r
-    2\r
-    );\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 24 - Hardware Security.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType24 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA *HardwareSecurity;\r
-  \r
-  HardwareSecurity = (EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA *)RecordData;\r
-  \r
-  //\r
-  // Hardware Security Settings\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE24, HardwareSecuritySettings),\r
-    &HardwareSecurity->HardwareSecuritySettings,\r
-    1\r
-    );\r
-  \r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 25 - System Power Controls.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType25 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_SCHEDULED_POWER_ON_MONTH *PowerOnMonth;\r
-  \r
-  PowerOnMonth = (EFI_MISC_SCHEDULED_POWER_ON_MONTH *)RecordData;\r
-  \r
-  //\r
-  // ScheduledPoweronMonth\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE25, NextScheduledPowerOnMonth),\r
-    &PowerOnMonth->ScheduledPoweronMonth,\r
-    1\r
-    );\r
-    \r
-  //\r
-  // ScheduledPoweronDayOfMonth\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE25, NextScheduledPowerOnDayOfMonth),\r
-    &PowerOnMonth->ScheduledPoweronDayOfMonth,\r
-    1\r
-    );    \r
-\r
-  //\r
-  // ScheduledPoweronHour\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE25, NextScheduledPowerOnHour),\r
-    &PowerOnMonth->ScheduledPoweronHour,\r
-    1\r
-    );   \r
-\r
-  //\r
-  // ScheduledPoweronMinute\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE25, NextScheduledPowerOnMinute),\r
-    &PowerOnMonth->ScheduledPoweronMinute,\r
-    1\r
-    );   \r
-\r
-  //\r
-  // ScheduledPoweronSecond\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE25, NextScheduledPowerOnSecond),\r
-    &PowerOnMonth->ScheduledPoweronSecond,\r
-    1\r
-    );\r
-  \r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 26 - Voltage Probe.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType26 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_VOLTAGE_PROBE_DESCRIPTION *VoltageProbe;\r
-  \r
-  VoltageProbe = (EFI_MISC_VOLTAGE_PROBE_DESCRIPTION *)RecordData;\r
-  \r
-  //\r
-  // VoltageProbe Description\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE26, Description),\r
-    &(VoltageProbe->VoltageProbeDescription),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );  \r
-    \r
-  //\r
-  // VoltageProbeLocation\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, LocationAndStatus),\r
-    &VoltageProbe->VoltageProbeLocation,\r
-    1\r
-    );    \r
-    \r
-  //\r
-  // VoltageProbeMaximumValue\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, MaximumValue),\r
-    &VoltageProbe->VoltageProbeMaximumValue,\r
-    2\r
-    );    \r
-    \r
-  //\r
-  // VoltageProbeMinimumValue\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, MinimumValue),\r
-    &VoltageProbe->VoltageProbeMinimumValue,\r
-    2\r
-    );   \r
-\r
-  //\r
-  // VoltageProbeResolution\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, Resolution),\r
-    &VoltageProbe->VoltageProbeResolution,\r
-    2\r
-    );    \r
-\r
-  //\r
-  // VoltageProbeTolerance\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, Tolerance),\r
-    &VoltageProbe->VoltageProbeTolerance,\r
-    2\r
-    );   \r
-\r
-  //\r
-  // VoltageProbeAccuracy\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, Accuracy),\r
-    &VoltageProbe->VoltageProbeAccuracy,\r
-    2\r
-    );  \r
-    \r
-  //\r
-  // VoltageProbeNominalValue\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, NominalValue),\r
-    &VoltageProbe->VoltageProbeNominalValue,\r
-    2\r
-    );   \r
-\r
-  //\r
-  // VoltageProbeOemDefined\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, OEMDefined),\r
-    &VoltageProbe->VoltageProbeOemDefined,\r
-    4\r
-    );\r
-  \r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 27 - Cooling Device.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType27 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_COOLING_DEVICE_TEMP_LINK *CoolingDevice;\r
-  \r
-  CoolingDevice = (EFI_MISC_COOLING_DEVICE_TEMP_LINK *)RecordData;\r
-  \r
-  //\r
-  // Device Type\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE27, DeviceTypeAndStatus),\r
-    &CoolingDevice->CoolingDeviceType,\r
-    1\r
-    );\r
-  \r
-  //\r
-  // Temperature Probe\r
-  //\r
-  SmbiosFldInterLink (\r
-    StructureNode,\r
-    (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE27, TemperatureProbeHandle),\r
-    28,  // SMBIOS type 28 - Temperature Probe\r
-    &CoolingDevice->CoolingDeviceTemperatureLink,\r
-    &gEfiMiscSubClassGuid\r
-    );\r
-  \r
-  //\r
-  // CoolingDeviceUnitGroup\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE27, CoolingUnitGroup),\r
-    &CoolingDevice->CoolingDeviceUnitGroup,\r
-    1\r
-    );\r
-\r
-  //\r
-  // CoolingDeviceUnitGroup\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE27, OEMDefined),\r
-    &CoolingDevice->CoolingDeviceOemDefined,\r
-    4\r
-    );\r
-\r
-  //\r
-  // CoolingDeviceNominalSpeed\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE27, NominalSpeed),\r
-    &CoolingDevice->CoolingDeviceNominalSpeed,\r
-    2\r
-    );\r
-  \r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 28 -- Temperature Probe.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType28 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION *TemperatureProbe;\r
-  \r
-  TemperatureProbe = (EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION *)RecordData;\r
-  \r
-  //\r
-  // TemperatureProbeDescription\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE28, Description),\r
-    &(TemperatureProbe->TemperatureProbeDescription),\r
-    2\r
-    );\r
-    \r
-  //\r
-  // TemperatureProbeLocation\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, LocationAndStatus),\r
-    &TemperatureProbe->TemperatureProbeLocation,\r
-    1\r
-    ); \r
-    \r
-  //\r
-  // TemperatureProbeMaximumValue\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, MaximumValue),\r
-    &TemperatureProbe->TemperatureProbeMaximumValue,\r
-    2\r
-    );        \r
-\r
-  //\r
-  // TemperatureProbeMinimumValue\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, MinimumValue),\r
-    &TemperatureProbe->TemperatureProbeMinimumValue,\r
-    2\r
-    );  \r
-\r
-  //\r
-  // TemperatureProbeResolution\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, Resolution),\r
-    &TemperatureProbe->TemperatureProbeResolution,\r
-    2\r
-    );  \r
-  \r
-\r
-  //\r
-  // TemperatureProbeTolerance\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, Tolerance),\r
-    &TemperatureProbe->TemperatureProbeTolerance,\r
-    2\r
-    );  \r
-\r
-  //\r
-  // TemperatureProbeAccuracy\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, Accuracy),\r
-    &TemperatureProbe->TemperatureProbeAccuracy,\r
-    2\r
-    );\r
-\r
-  //\r
-  // TemperatureProbeNominalValue\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, NominalValue),\r
-    &TemperatureProbe->TemperatureProbeNominalValue,\r
-    2\r
-    );\r
-\r
-  //\r
-  // TemperatureProbeOemDefined\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, OEMDefined),\r
-    &TemperatureProbe->TemperatureProbeOemDefined,\r
-    4\r
-    );\r
-  \r
-  return EFI_SUCCESS;\r
-}  \r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 29 -- Electrical Current Probe.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType29 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION *ElectricalProbe;\r
-  \r
-  ElectricalProbe = (EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION *)RecordData;\r
-  \r
-  //\r
-  // ElectricalCurrentProbeDescription\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE29, Description),\r
-    &(ElectricalProbe->ElectricalCurrentProbeDescription),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );\r
-    \r
-  //\r
-  // ElectricalCurrentProbeLocation\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, LocationAndStatus),\r
-    &ElectricalProbe->ElectricalCurrentProbeLocation,\r
-    1\r
-    );\r
-    \r
-  //\r
-  // ElectricalCurrentProbeMaximumValue\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, MaximumValue),\r
-    &ElectricalProbe->ElectricalCurrentProbeMaximumValue,\r
-    2\r
-    );   \r
-\r
-  //\r
-  // ElectricalCurrentProbeMinimumValue\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, MinimumValue),\r
-    &ElectricalProbe->ElectricalCurrentProbeMinimumValue,\r
-    2\r
-    );   \r
-\r
-  //\r
-  // ElectricalCurrentProbeResolution\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, Resolution),\r
-    &ElectricalProbe->ElectricalCurrentProbeResolution,\r
-    2\r
-    );     \r
-\r
-  //\r
-  // ElectricalCurrentProbeTolerance\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, Tolerance),\r
-    &ElectricalProbe->ElectricalCurrentProbeTolerance,\r
-    2\r
-    );     \r
-\r
-  //\r
-  // ElectricalCurrentProbeAccuracy\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, Accuracy),\r
-    &ElectricalProbe->ElectricalCurrentProbeAccuracy,\r
-    2\r
-    );   \r
-  //\r
-  // ElectricalCurrentProbeNominalValue\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, NominalValue),\r
-    &ElectricalProbe->ElectricalCurrentProbeNominalValue,\r
-    2\r
-    );   \r
-\r
-  //\r
-  // ElectricalCurrentProbeOemDefined\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, OEMDefined),\r
-    &ElectricalProbe->ElectricalCurrentProbeOemDefined,\r
-    4\r
-    );\r
-  \r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 30 -- Out-of-Band Remote Access.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType30 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION *RemoteData;\r
-  \r
-  RemoteData = (EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION *)RecordData;\r
-  \r
-  //\r
-  // ManufacturerNameDescription\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE30, ManufacturerName),\r
-    &(RemoteData->RemoteAccessManufacturerNameDescription),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );  \r
-    \r
-  //\r
-  // RemoteAccessConnections\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE30, Connections),\r
-    &RemoteData->RemoteAccessConnections,\r
-    1\r
-    );\r
-  \r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 32 -- System Boot Information.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType32 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_STATUS                             Status;\r
-  EFI_MISC_BOOT_INFORMATION_STATUS_DATA  *BootInfo;\r
-\r
-  Status    = EFI_SUCCESS;\r
-  BootInfo  = (EFI_MISC_BOOT_INFORMATION_STATUS_DATA *) RecordData;\r
-\r
-  //\r
-  // Set reserved bytes\r
-  //\r
-  ZeroMem ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE32, Reserved), 6);\r
-\r
-  //\r
-  // Set BootInformation Status\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE32, BootStatus),\r
-    &BootInfo->BootInformationStatus,\r
-    1\r
-    );\r
-\r
-  //\r
-  // Set Additional Data\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE32, BootStatus) + 1,\r
-    &BootInfo->BootInformationData,\r
-    9\r
-    );\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 34 -- Management Device.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType34 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION *ManagementDevice;\r
-  \r
-  ManagementDevice = (EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION *)RecordData;\r
-  \r
-  //\r
-  // ManagementDeviceDescription\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE34, Description),\r
-    &(ManagementDevice->ManagementDeviceDescription),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );  \r
-    \r
-  //\r
-  // ManagementDeviceType\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE34, Type),\r
-    &ManagementDevice->ManagementDeviceType,\r
-    1\r
-    );    \r
-\r
-  //\r
-  // ManagementDeviceAddress\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE34, Address),\r
-    &ManagementDevice->ManagementDeviceAddress,\r
-    4\r
-    );    \r
-\r
-  //\r
-  // ManagementDeviceAddressType\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE34, AddressType),\r
-    &ManagementDevice->ManagementDeviceAddressType,\r
-    1\r
-    );  \r
-  \r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 35 -- Management Device Component.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType35 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION  *ManagementDeviceComponent;\r
-  EFI_INTER_LINK_DATA                               ManagementDeviceLink;\r
-  EFI_INTER_LINK_DATA                               ManagementDeviceComponentLink;\r
-  EFI_INTER_LINK_DATA                               ManagementDeviceThresholdLink;\r
-  \r
-  ManagementDeviceComponent = (EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION *)RecordData;\r
-  CopyMem (\r
-    &ManagementDeviceLink,\r
-    &ManagementDeviceComponent->ManagementDeviceLink,\r
-    sizeof (EFI_INTER_LINK_DATA)\r
-    );\r
-  CopyMem (\r
-    &ManagementDeviceComponentLink,\r
-    &ManagementDeviceComponent->ManagementDeviceComponentLink,\r
-    sizeof (EFI_INTER_LINK_DATA)\r
-    );\r
-  CopyMem (&ManagementDeviceThresholdLink,\r
-    &ManagementDeviceComponent->ManagementDeviceThresholdLink,\r
-    sizeof (EFI_INTER_LINK_DATA)\r
-    );\r
-\r
-  //\r
-  // ManagementDeviceComponentDescription\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE35, Description),\r
-    &ManagementDeviceComponent->ManagementDeviceComponentDescription,\r
-    2       // 64 * sizeof(CHAR16)\r
-    );\r
-\r
-  //\r
-  // ManagementDeviceLink\r
-  //\r
-  SmbiosFldInterLink (\r
-    StructureNode,\r
-    (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE35, ManagementDeviceHandle),\r
-    34,     // SMBIOS type 34 - Management Device\r
-    &ManagementDeviceLink,\r
-    &gEfiMiscSubClassGuid\r
-    );\r
-\r
-  //\r
-  // ManagementDeviceComponentLink\r
-  //\r
-  SmbiosFldInterLink (\r
-    StructureNode,\r
-    (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE35, ComponentHandle),\r
-    ManagementDeviceComponent->ComponentType,   // SMBIOS type, according to SMBIOS spec, it can be Type 26, 27, 28, 29\r
-    &ManagementDeviceComponentLink,\r
-    &gEfiMiscSubClassGuid\r
-    );\r
-\r
-  //\r
-  // ManagementDeviceThresholdLink\r
-  //\r
-  SmbiosFldInterLink (\r
-    StructureNode,\r
-    (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE35, ThresholdHandle),\r
-    36,     // SMBIOS type 36 - Management Device Threshold Data\r
-    &ManagementDeviceThresholdLink,\r
-    &gEfiMiscSubClassGuid\r
-    );\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 36 -- Management Device Threshold.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType36 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD *DeviceThreshold;\r
-  \r
-  DeviceThreshold = (EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD *)RecordData;\r
-\r
-  //\r
-  // LowerThresNonCritical\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, LowerThresholdNonCritical),\r
-    &DeviceThreshold->LowerThresNonCritical,\r
-    2\r
-    );    \r
-\r
-  //\r
-  // UpperThresNonCritical\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, UpperThresholdNonCritical),\r
-    &DeviceThreshold->UpperThresNonCritical,\r
-    2\r
-    );\r
-    \r
-  //\r
-  // LowerThresCritical\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, LowerThresholdCritical),\r
-    &DeviceThreshold->LowerThresCritical,\r
-    2\r
-    );          \r
-\r
-  //\r
-  // UpperThresCritical\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, UpperThresholdCritical),\r
-    &DeviceThreshold->UpperThresCritical,\r
-    2\r
-    );   \r
-\r
-  //\r
-  // LowerThresNonRecover\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, LowerThresholdNonRecoverable),\r
-    &DeviceThreshold->LowerThresNonRecover,\r
-    2\r
-    );\r
-\r
-  //\r
-  // UpperThresNonRecover\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, UpperThresholdNonRecoverable),\r
-    &DeviceThreshold->UpperThresNonRecover,\r
-    2\r
-    );          \r
-  \r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 38 -- IPMI device info.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType38 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_IPMI_INTERFACE_TYPE_DATA  *IpmiInfo;\r
-\r
-  IpmiInfo  = (EFI_MISC_IPMI_INTERFACE_TYPE_DATA *) RecordData;\r
-\r
-  //\r
-  // Interface Type\r
-  //\r
-  *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, InterfaceType)) = (UINT8) (IpmiInfo->IpmiInterfaceType);\r
-\r
-  //\r
-  // IPMI specification revision\r
-  //\r
-  *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, IPMISpecificationRevision)) = \r
-  (UINT8) ((IpmiInfo->IpmiSpecificationRevision.IpmiSpecLeastSignificantDigit) + \\r
-           (IpmiInfo->IpmiSpecificationRevision.IpmiSpecMostSignificantDigit << 4));\r
-\r
-  //\r
-  // I2C slave address\r
-  //\r
-  *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, I2CSlaveAddress)) = (UINT8) (IpmiInfo->IpmiI2CSlaveAddress);\r
-\r
-  //\r
-  // NV storage device address\r
-  //\r
-  *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, NVStorageDeviceAddress)) = (UINT8) (IpmiInfo->IpmiNvDeviceAddress);\r
-\r
-  //\r
-  // Base address\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, BaseAddress),\r
-    &IpmiInfo->IpmiBaseAddress,\r
-    8\r
-    );\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 39 -- Power supply.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType39 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_MISC_SYSTEM_POWER_SUPPLY *PowerSupply;\r
-  \r
-  PowerSupply = (EFI_MISC_SYSTEM_POWER_SUPPLY *)RecordData;\r
-  \r
-  //\r
-  // PowerUnitGroup\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE39, PowerUnitGroup),\r
-    &PowerSupply->PowerUnitGroup,\r
-    1\r
-    );  \r
-    \r
-  //\r
-  // PowerSupplyLocation\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE39, Location),\r
-    &(PowerSupply->PowerSupplyLocation),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );    \r
-\r
-  //\r
-  // PowerSupplyDeviceName\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE39, DeviceName),\r
-    &(PowerSupply->PowerSupplyDeviceName),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );   \r
-\r
-  //\r
-  // PowerSupplyManufacturer\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE39, Manufacturer),\r
-    &(PowerSupply->PowerSupplyManufacturer),\r
-    2 // 64 * sizeof(CHAR16)\r
-    ); \r
-\r
-  //\r
-  // PowerSupplySerialNumber\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE39, SerialNumber),\r
-    &(PowerSupply->PowerSupplySerialNumber),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );  \r
-    \r
-  //\r
-  // PowerSupplyAssetTagNumber\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE39, AssetTagNumber),\r
-    &(PowerSupply->PowerSupplyAssetTagNumber),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );      \r
-\r
-  //\r
-  // PowerSupplyModelPartNumber\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE39, ModelPartNumber),\r
-    &(PowerSupply->PowerSupplyModelPartNumber),\r
-    2 // 64 * sizeof(CHAR16)\r
-    ); \r
-    \r
-  //\r
-  // PowerSupplyRevisionLevel\r
-  //\r
-  SmbiosFldString (\r
-    StructureNode,\r
-    OFFSET_OF (SMBIOS_TABLE_TYPE39, RevisionLevel),\r
-    &(PowerSupply->PowerSupplyRevisionLevel),\r
-    2 // 64 * sizeof(CHAR16)\r
-    );      \r
-\r
-  //\r
-  // PowerSupplyMaxPowerCapacity\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE39, MaxPowerCapacity),\r
-    &PowerSupply->PowerSupplyMaxPowerCapacity,\r
-    2\r
-    );\r
-\r
-  //\r
-  // PowerSupplyCharacteristics\r
-  //\r
-  CopyMem (\r
-    (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE39, PowerSupplyCharacteristics),\r
-    &PowerSupply->PowerSupplyCharacteristics,\r
-    2\r
-    );\r
-    \r
-  //\r
-  // PowerSupplyInputVoltageProbeLink\r
-  //\r
-  SmbiosFldInterLink (\r
-    StructureNode,\r
-    (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE39, InputVoltageProbeHandle),\r
-    26,  // SMBIOS type 26 - Voltage Probe\r
-    &PowerSupply->PowerSupplyInputVoltageProbeLink,\r
-    &gEfiMiscSubClassGuid\r
-    );    \r
-\r
-  //\r
-  // PowerSupplyCoolingDeviceLink\r
-  //\r
-  SmbiosFldInterLink (\r
-    StructureNode,\r
-    (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE39, CoolingDeviceHandle),\r
-    27,  // SMBIOS type 27 - Cooling Device\r
-    &PowerSupply->PowerSupplyCoolingDeviceLink,\r
-    &gEfiMiscSubClassGuid\r
-    );   \r
-\r
-  //\r
-  // PowerSupplyInputCurrentProbeLink\r
-  //\r
-  SmbiosFldInterLink (\r
-    StructureNode,\r
-    (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE39, InputCurrentProbeHandle),\r
-    29,  // SMBIOS type 29 - Electrical Current Probe\r
-    &PowerSupply->PowerSupplyInputCurrentProbeLink,\r
-    &gEfiMiscSubClassGuid\r
-    );  \r
-  \r
-  return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 0x80-0xFF -- OEM.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscTypeOEM (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  EFI_STATUS                            Status;\r
-  UINT8                                 *NewRecordData;\r
-  UINT32                                IncrementDataSize;\r
-  UINT16                                Handle;\r
-  INT8                                  Result;\r
-  UINT32                                StructureSize;\r
-  UINT8                                 CountOfString;\r
-  \r
-  Status             = EFI_SUCCESS;\r
-  NewRecordData      = NULL;\r
-\r
-  //\r
-  // Check if OEM structure has included 2 trailing 0s in data record, if not, \r
-  // we append them at the end to ensure OEM structure is always correct with 2 trailing 0s.\r
-  //\r
-  Result = SmbiosCheckTrailingZero (RecordData, RecordDataSize);\r
-  \r
-  if (Result != 0) {\r
-    DEBUG ((EFI_D_ERROR, "OEM SMBIOS type %x is not valid!!\n", ((SMBIOS_STRUCTURE *) RecordData) -> Type));\r
-    if (Result == -1) {\r
-      //\r
-      // No 2 trailing 0s exist\r
-      //\r
-      DEBUG ((EFI_D_ERROR, "OEM SMBIOS type has NO 2 trailing 0s!!\n"));\r
-      IncrementDataSize = 2;\r
-    } else {\r
-      //\r
-      // Only 1 trailing 0 exist at the end\r
-      //\r
-      DEBUG ((EFI_D_ERROR, "OEM SMBIOS type has only 1 trailing 0!!\n"));\r
-      IncrementDataSize = 1;\r
-    }\r
-    NewRecordData = AllocateZeroPool (RecordDataSize + IncrementDataSize);\r
-    ASSERT (NewRecordData != NULL);\r
-    CopyMem (NewRecordData, RecordData, RecordDataSize);\r
-    RecordData = NewRecordData;\r
-    RecordDataSize += IncrementDataSize;\r
-  }\r
-  \r
-  Status = GetSmbiosStructureSize (StructureNode->Structure, &StructureSize, &CountOfString);\r
-  ASSERT_EFI_ERROR (Status);\r
-  \r
-  if (StructureSize < RecordDataSize) {\r
-    //\r
-    // Create new SMBIOS table entry\r
-    //\r
-    SmbiosUpdateStructureBuffer (\r
-      StructureNode,\r
-      RecordData\r
-      );\r
-  } else {\r
-    //\r
-    // Copy the entire data (including the Smbios structure header),\r
-    // but preserve the handle that is already allocated.\r
-    //\r
-    Handle = StructureNode->Structure->Handle;\r
-    CopyMem (\r
-      StructureNode->Structure,\r
-      RecordData,\r
-      RecordDataSize\r
-      );\r
-    StructureNode->Structure->Handle = Handle;\r
-    StructureNode->StructureSize = RecordDataSize;\r
-  }\r
-  \r
-  if (NewRecordData != NULL) {\r
-    FreePool (NewRecordData);\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  Field Filling Function for Misc SubClass record type 127 - End-of-Table.\r
-  \r
-  @param StructureNode    Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
-  @param Offset           Offset of SMBIOS record which RecordData will be filled.\r
-  @param RecordData       RecordData buffer will be filled.\r
-  @param RecordDataSize   The size of RecordData buffer.\r
-  \r
-  @retval EFI_SUCCESS   Success fill RecordData into SMBIOS's record buffer.\r
-**/\r
-EFI_STATUS\r
-SmbiosFldMiscType127 (\r
-  IN OUT  SMBIOS_STRUCTURE_NODE     *StructureNode,\r
-  IN      UINT32                    Offset,\r
-  IN      VOID                      *RecordData,\r
-  IN      UINT32                    RecordDataSize\r
-  )\r
-{\r
-  return EFI_SUCCESS;\r
-}\r