]> 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 60b92f0c7eaf3445bf920f9a0e797cba65ef221b..c8e73a21bc626e35e869802a406ec4993ccfa78f 100644 (file)
@@ -29,11 +29,6 @@ Revision History
 #include "BdsString.h"\r
 #include "Language.h"\r
 \r
-//\r
-// Default language code, currently is English\r
-//\r
-CHAR8 *mDefaultLangCode = "eng";\r
-\r
 \r
 VOID\r
 InitializeLanguage (\r
@@ -53,83 +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
-  //\r
-  // Collect the languages from what our current Language support is based on our VFR\r
-  //\r
-  gHii->GetPrimaryLanguages (gHii, 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
+\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