]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.c
OvmfPkg/SmbiosPlatformDxe: use PcdFirmware*
[mirror_edk2.git] / OvmfPkg / SmbiosPlatformDxe / SmbiosPlatformDxe.c
index 94249d3ff1b0fb21363af713f0c37dbfc970f72d..dc1e6aed634fd2ed38250d1274c18aea0cb7fa4d 100644 (file)
@@ -9,57 +9,43 @@
 **/\r
 \r
 #include <IndustryStandard/SmBios.h>          // SMBIOS_TABLE_TYPE0\r
+#include <Library/BaseLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
 #include <Library/DebugLib.h>                 // ASSERT_EFI_ERROR()\r
+#include <Library/MemoryAllocationLib.h>\r
+#include <Library/PcdLib.h>\r
 #include <Library/UefiBootServicesTableLib.h> // gBS\r
 #include <Protocol/Smbios.h>                  // EFI_SMBIOS_PROTOCOL\r
 \r
 #include "SmbiosPlatformDxe.h"\r
 \r
-#define TYPE0_STRINGS \\r
-  "EFI Development Kit II / OVMF\0"     /* Vendor */ \\r
-  "0.0.0\0"                             /* BiosVersion */ \\r
-  "02/06/2015\0"                        /* BiosReleaseDate */\r
-//\r
-// Type definition and contents of the default Type 0 SMBIOS table.\r
-//\r
-#pragma pack(1)\r
-typedef struct {\r
-  SMBIOS_TABLE_TYPE0    Base;\r
-  UINT8                 Strings[sizeof (TYPE0_STRINGS)];\r
-} OVMF_TYPE0;\r
-#pragma pack()\r
-\r
-STATIC CONST OVMF_TYPE0  mOvmfDefaultType0 = {\r
+STATIC CONST SMBIOS_TABLE_TYPE0  mOvmfDefaultType0 = {\r
+  // SMBIOS_STRUCTURE Hdr\r
   {\r
-    // SMBIOS_STRUCTURE Hdr\r
-    {\r
-      EFI_SMBIOS_TYPE_BIOS_INFORMATION, // UINT8 Type\r
-      sizeof (SMBIOS_TABLE_TYPE0),      // UINT8 Length\r
-    },\r
-    1,      // SMBIOS_TABLE_STRING       Vendor\r
-    2,      // SMBIOS_TABLE_STRING       BiosVersion\r
-    0xE800, // UINT16                    BiosSegment\r
-    3,      // SMBIOS_TABLE_STRING       BiosReleaseDate\r
-    0,      // UINT8                     BiosSize\r
-    {      // MISC_BIOS_CHARACTERISTICS BiosCharacteristics\r
-      0,   // Reserved                                      :2\r
-      0,   // Unknown                                       :1\r
-      1,   // BiosCharacteristicsNotSupported               :1\r
-           // Remaining BiosCharacteristics bits left unset :60\r
-    },\r
-    {      // BIOSCharacteristicsExtensionBytes[2]\r
-      0,   // BiosReserved\r
-      0x1C // SystemReserved = VirtualMachineSupported |\r
-           //                  UefiSpecificationSupported |\r
-           //                  TargetContentDistributionEnabled\r
-    },\r
-    0,     // UINT8                     SystemBiosMajorRelease\r
-    0,     // UINT8                     SystemBiosMinorRelease\r
-    0xFF,  // UINT8                     EmbeddedControllerFirmwareMajorRelease\r
-    0xFF   // UINT8                     EmbeddedControllerFirmwareMinorRelease\r
+    EFI_SMBIOS_TYPE_BIOS_INFORMATION, // UINT8 Type\r
+    sizeof (SMBIOS_TABLE_TYPE0),      // UINT8 Length\r
   },\r
-  // Text strings (unformatted area)\r
-  TYPE0_STRINGS\r
+  1,      // SMBIOS_TABLE_STRING       Vendor\r
+  2,      // SMBIOS_TABLE_STRING       BiosVersion\r
+  0xE800, // UINT16                    BiosSegment\r
+  3,      // SMBIOS_TABLE_STRING       BiosReleaseDate\r
+  0,      // UINT8                     BiosSize\r
+  {      // MISC_BIOS_CHARACTERISTICS BiosCharacteristics\r
+    0,   // Reserved                                      :2\r
+    0,   // Unknown                                       :1\r
+    1,   // BiosCharacteristicsNotSupported               :1\r
+    // Remaining BiosCharacteristics bits left unset :60\r
+  },\r
+  {      // BIOSCharacteristicsExtensionBytes[2]\r
+    0,   // BiosReserved\r
+    0x1C // SystemReserved = VirtualMachineSupported |\r
+    //                  UefiSpecificationSupported |\r
+    //                  TargetContentDistributionEnabled\r
+  },\r
+  0,     // UINT8                     SystemBiosMajorRelease\r
+  0,     // UINT8                     SystemBiosMinorRelease\r
+  0xFF,  // UINT8                     EmbeddedControllerFirmwareMajorRelease\r
+  0xFF   // UINT8                     EmbeddedControllerFirmwareMinorRelease\r
 };\r
 \r
 /**\r
@@ -153,14 +139,55 @@ InstallAllStructures (
     //\r
     // Add OVMF default Type 0 (BIOS Information) table\r
     //\r
+    CHAR16  *VendStr, *VersStr, *DateStr;\r
+    UINTN   VendLen, VersLen, DateLen;\r
+    CHAR8   *Type0;\r
+\r
+    VendStr = (CHAR16 *)FixedPcdGetPtr (PcdFirmwareVendor);\r
+    VendLen = StrLen (VendStr);\r
+    if (VendLen < 3) {\r
+      VendStr = L"unknown";\r
+      VendLen = StrLen (VendStr);\r
+    }\r
+\r
+    VersStr = (CHAR16 *)FixedPcdGetPtr (PcdFirmwareVersionString);\r
+    VersLen = StrLen (VersStr);\r
+    if (VersLen < 3) {\r
+      VersStr = L"unknown";\r
+      VersLen = StrLen (VersStr);\r
+    }\r
+\r
+    DateStr = (CHAR16 *)FixedPcdGetPtr (PcdFirmwareReleaseDateString);\r
+    DateLen = StrLen (DateStr);\r
+    if (DateLen < 3) {\r
+      DateStr = L"unknown";\r
+      DateLen = StrLen (DateStr);\r
+    }\r
+\r
+    DEBUG ((DEBUG_INFO, "FirmwareVendor:            \"%s\" (%d chars)\n", VendStr, VendLen));\r
+    DEBUG ((DEBUG_INFO, "FirmwareVersionString:     \"%s\" (%d chars)\n", VersStr, VersLen));\r
+    DEBUG ((DEBUG_INFO, "FirmwareReleaseDateString: \"%s\" (%d chars)\n", DateStr, DateLen));\r
+\r
+    Type0 = AllocateZeroPool (sizeof (mOvmfDefaultType0) + VendLen + VersLen + DateLen + 4);\r
+    if (Type0 == NULL) {\r
+      return EFI_OUT_OF_RESOURCES;\r
+    }\r
+\r
+    CopyMem (Type0, &mOvmfDefaultType0, sizeof (mOvmfDefaultType0));\r
+    UnicodeStrToAsciiStrS (VendStr, Type0 + sizeof (mOvmfDefaultType0), VendLen + 1);\r
+    UnicodeStrToAsciiStrS (VersStr, Type0 + sizeof (mOvmfDefaultType0) + VendLen + 1, VersLen + 1);\r
+    UnicodeStrToAsciiStrS (DateStr, Type0 + sizeof (mOvmfDefaultType0) + VendLen + VersLen + 2, DateLen + 1);\r
+\r
     SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;\r
     Status       = Smbios->Add (\r
                              Smbios,\r
                              NULL,\r
                              &SmbiosHandle,\r
-                             (EFI_SMBIOS_TABLE_HEADER *)&mOvmfDefaultType0\r
+                             (EFI_SMBIOS_TABLE_HEADER *)Type0\r
                              );\r
     ASSERT_EFI_ERROR (Status);\r
+\r
+    FreePool (Type0);\r
   }\r
 \r
   return EFI_SUCCESS;\r