+++ /dev/null
-/*++\r
-\r
-Copyright (c) 2006 - 2007, Intel Corporation\r
-All rights reserved. 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
-Module Name:\r
-\r
- language.c\r
-\r
-Abstract:\r
-\r
- Language settings\r
-\r
-Revision History\r
-\r
---*/\r
-#include "Bds.h"\r
-#include "BdsString.h"\r
-#include "Language.h"\r
-\r
-\r
-VOID\r
-InitializeLanguage (\r
- BOOLEAN LangCodesSettingRequired\r
- )\r
-/*++\r
-\r
-Routine Description:\r
- Determine the current language that will be used\r
- based on language related EFI Variables\r
-\r
-Arguments:\r
- LangCodesSettingRequired - If required to set LangCode variable\r
-\r
-Returns:\r
-\r
---*/\r
-{\r
- EFI_STATUS Status;\r
- UINTN Size;\r
- CHAR8 *Lang;\r
- CHAR8 LangCode[ISO_639_2_ENTRY_SIZE];\r
- CHAR8 *LangCodes;\r
- CHAR8 *PlatformLang;\r
- CHAR8 *PlatformLangCodes;\r
- UINTN Index;\r
- BOOLEAN Invalid;\r
-\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
-\r
- PlatformLangCodes = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultPlatformLangCodes);\r
- Status = gRT->SetVariable (\r
- L"PlatformLangCodes",\r
- &gEfiGlobalVariableGuid,\r
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
- AsciiStrSize (PlatformLangCodes),\r
- PlatformLangCodes\r
- );\r
- }\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
- NULL,\r
- &Size,\r
- &LangCode\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
- //\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
- 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