]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Nt32Pkg/PlatformBdsDxe/Generic/Language.c
Convert NT32 to use PCD settings for UEFI Timeout and language variables as a POC...
[mirror_edk2.git] / Nt32Pkg / PlatformBdsDxe / Generic / Language.c
index 01277d7cf49b87572deb15edb13c03d2b5e7b704..c8e73a21bc626e35e869802a406ec4993ccfa78f 100644 (file)
@@ -29,310 +29,6 @@ Revision History
 #include "BdsString.h"\r
 #include "Language.h"\r
 \r
-#define NARROW_GLYPH_NUMBER 8\r
-#define WIDE_GLYPH_NUMBER   75\r
-\r
-//\r
-// Default language code, currently is English\r
-//\r
-CHAR8 *mDefaultLangCode = "eng";\r
-\r
-typedef struct {\r
-  EFI_HII_FONT_PACK FixedLength;\r
-  EFI_NARROW_GLYPH  NarrowArray[NARROW_GLYPH_NUMBER];\r
-  EFI_WIDE_GLYPH    WideArray[WIDE_GLYPH_NUMBER];\r
-} FONT_PACK;\r
-\r
-FONT_PACK mFontPack = {\r
-  sizeof (EFI_HII_FONT_PACK) + (NARROW_GLYPH_NUMBER * sizeof (EFI_NARROW_GLYPH)) + (WIDE_GLYPH_NUMBER * sizeof (EFI_WIDE_GLYPH)),\r
-  EFI_HII_FONT,\r
-  NARROW_GLYPH_NUMBER,\r
-  WIDE_GLYPH_NUMBER,\r
-  {     // Narrow Glyphs\r
-    {\r
-      0x05d0,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x4E,\r
-        0x6E,\r
-        0x62,\r
-        0x32,\r
-        0x32,\r
-        0x3C,\r
-        0x68,\r
-        0x4C,\r
-        0x4C,\r
-        0x46,\r
-        0x76,\r
-        0x72,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    },\r
-    {\r
-      0x05d1,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x78,\r
-        0x7C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x7E,\r
-        0x7E,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    },\r
-    {\r
-      0x05d2,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x78,\r
-        0x7C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x1C,\r
-        0x3E,\r
-        0x66,\r
-        0x66,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    },\r
-    {\r
-      0x05d3,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x7E,\r
-        0x7E,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    },\r
-    {\r
-      0x05d4,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x7C,\r
-        0x7E,\r
-        0x06,\r
-        0x06,\r
-        0x06,\r
-        0x06,\r
-        0x66,\r
-        0x66,\r
-        0x66,\r
-        0x66,\r
-        0x66,\r
-        0x66,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    },\r
-    {\r
-      0x05d5,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x3C,\r
-        0x3C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x0C,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    },\r
-    {\r
-      0x05d6,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x38,\r
-        0x38,\r
-        0x1E,\r
-        0x1E,\r
-        0x18,\r
-        0x18,\r
-        0x18,\r
-        0x18,\r
-        0x18,\r
-        0x18,\r
-        0x18,\r
-        0x18,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    },\r
-    {\r
-      0x0000,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    }\r
-  },\r
-  {     // Wide Glyphs\r
-    {\r
-      0x0020,\r
-      0x00,\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      },\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      },\r
-      {\r
-        0x00,\r
-        0x00,\r
-        0x00\r
-      }\r
-    },  //\r
-  }\r
-};\r
-\r
-VOID\r
-ExportFonts (\r
-  VOID\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-  Routine to export glyphs to the HII database.  This is in addition to whatever is defined in the Graphics Console driver.\r
-\r
-Arguments:\r
-  None\r
-\r
-Returns:\r
-\r
---*/\r
-{\r
-  EFI_HII_HANDLE    HiiHandle;\r
-  EFI_HII_PACKAGES  *PackageList;\r
-\r
-  PackageList = PreparePackages (1, NULL, &mFontPack);\r
-  //\r
-  // Register our Fonts into the global database\r
-  //\r
-  HiiHandle = 0;\r
-  Hii->NewPack (Hii, PackageList, &HiiHandle);\r
-\r
-  FreePool (PackageList);\r
-}\r
 \r
 VOID\r
 InitializeLanguage (\r
@@ -352,85 +48,107 @@ Returns:
 --*/\r
 {\r
   EFI_STATUS  Status;\r
-  UINTN       Index;\r
   UINTN       Size;\r
+  CHAR8       *Lang;\r
   CHAR8       LangCode[ISO_639_2_ENTRY_SIZE];\r
   CHAR8       *LangCodes;\r
-  CHAR16      *LanguageString;\r
-\r
-  LanguageString  = NULL;\r
-  LangCodes       = NULL;\r
-\r
-  ExportFonts ();\r
-\r
-  //\r
-  // Collect the languages from what our current Language support is based on our VFR\r
-  //\r
-  Hii->GetPrimaryLanguages (Hii, gStringPackHandle, &LanguageString);\r
+  CHAR8       *PlatformLang;\r
+  CHAR8       *PlatformLangCodes;\r
+  UINTN       Index;\r
+  BOOLEAN     Invalid;\r
 \r
-  LangCodes = AllocatePool (StrLen (LanguageString));\r
-  ASSERT (LangCodes);\r
 \r
-  //\r
-  // Convert LanguageString from Unicode to EFI defined ASCII LangCodes\r
-  //\r
-  for (Index = 0; LanguageString[Index] != 0x0000; Index++) {\r
-    LangCodes[Index] = (CHAR8) LanguageString[Index];\r
-  }\r
+  LangCodes = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultLangCodes);\r
+  if (LangCodesSettingRequired) {\r
+    if (!FeaturePcdGet (PcdUefiVariableDefaultLangDepricate)) {\r
+      //\r
+      // UEFI 2.1 depricated this variable so we support turning it off\r
+      //\r
+      Status = gRT->SetVariable (\r
+                      L"LangCodes",\r
+                      &gEfiGlobalVariableGuid,\r
+                      EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
+                      AsciiStrLen (LangCodes),\r
+                      LangCodes\r
+                      );\r
+    }\r
 \r
-  LangCodes[Index] = 0;\r
 \r
-  if (LangCodesSettingRequired) {\r
+    PlatformLangCodes = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultPlatformLangCodes);\r
     Status = gRT->SetVariable (\r
-                    L"LangCodes",\r
+                    L"PlatformLangCodes",\r
                     &gEfiGlobalVariableGuid,\r
                     EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
-                    AsciiStrLen (LangCodes),\r
-                    LangCodes\r
+                    AsciiStrSize (PlatformLangCodes),\r
+                    PlatformLangCodes\r
                     );\r
   }\r
-  //\r
-  // Find current LangCode from Lang NV Variable\r
-  //\r
-  Size = ISO_639_2_ENTRY_SIZE;\r
-  Status = gRT->GetVariable (\r
-                  L"Lang",\r
-                  &gEfiGlobalVariableGuid,\r
-                  NULL,\r
-                  &Size,\r
-                  &LangCode\r
-                  );\r
 \r
-  if (!EFI_ERROR (Status)) {\r
-    Status = EFI_NOT_FOUND;\r
-    for (Index = 0; LangCodes[Index] != 0; Index += ISO_639_2_ENTRY_SIZE) {\r
-      if (CompareMem (&LangCodes[Index], LangCode, ISO_639_2_ENTRY_SIZE) == 0) {\r
-        Status = EFI_SUCCESS;\r
-        break;\r
-      }\r
-    }\r
-  }\r
-  //\r
-  // If we cannot get language code from Lang variable,\r
-  // or LangCode cannot be found from language table,\r
-  // set the mDefaultLangCode to Lang variable.\r
-  //\r
-  if (EFI_ERROR (Status)) {\r
-    Status = gRT->SetVariable (\r
+  if (!FeaturePcdGet (PcdUefiVariableDefaultLangDepricate)) {\r
+    //\r
+    // UEFI 2.1 depricated this variable so we support turning it off\r
+    //\r
+\r
+    //\r
+    // Find current LangCode from Lang NV Variable\r
+    //\r
+    Size = ISO_639_2_ENTRY_SIZE;\r
+    Status = gRT->GetVariable (\r
                     L"Lang",\r
                     &gEfiGlobalVariableGuid,\r
-                    EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
-                    ISO_639_2_ENTRY_SIZE,\r
-                    mDefaultLangCode\r
+                    NULL,\r
+                    &Size,\r
+                    &LangCode\r
                     );\r
-  }\r
+    if (!EFI_ERROR (Status)) {\r
+      Status = EFI_NOT_FOUND;\r
+      for (Index = 0; LangCodes[Index] != 0; Index += ISO_639_2_ENTRY_SIZE) {\r
+        if (CompareMem (&LangCodes[Index], LangCode, ISO_639_2_ENTRY_SIZE) == 0) {\r
+          Status = EFI_SUCCESS;\r
+          break;\r
+        }\r
+      }\r
+    }\r
 \r
-  if (LangCodes) {\r
-    FreePool (LangCodes);\r
+    //\r
+    // If we cannot get language code from Lang variable,\r
+    // or LangCode cannot be found from language table,\r
+    // set the mDefaultLangCode to Lang variable.\r
+    //\r
+    if (EFI_ERROR (Status)) {\r
+      Lang = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultLang);\r
+      Status = gRT->SetVariable (\r
+                      L"Lang",\r
+                      &gEfiGlobalVariableGuid,\r
+                      EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
+                      ISO_639_2_ENTRY_SIZE,\r
+                      Lang\r
+                      );\r
+    }\r
   }\r
 \r
-  if (LanguageString != NULL) {\r
-    FreePool (LanguageString);\r
+  Invalid = FALSE;\r
+  PlatformLang = BdsLibGetVariableAndSize (L"PlatformLang", &gEfiGlobalVariableGuid, &Size);\r
+  if (PlatformLang != NULL) {\r
+    //\r
+    // Check Current PlatformLang value against PlatformLangCode. Need a library that is TBD\r
+    // Set Invalid based on state of PlatformLang.\r
+    //\r
+\r
+    FreePool (PlatformLang);\r
+  } else {\r
+    // No valid variable is set\r
+    Invalid = TRUE;\r
   }\r
 \r
+  if (Invalid) {\r
+    PlatformLang = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultPlatformLang);\r
+    Status = gRT->SetVariable (\r
+                    L"PlatformLang",\r
+                    &gEfiGlobalVariableGuid,\r
+                    EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
+                    AsciiStrSize (PlatformLang),\r
+                    PlatformLang\r
+                    );\r
+  }\r
 }\r