]> git.proxmox.com Git - mirror_edk2.git/blame - 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
CommitLineData
bc11b829 1/*++\r
2\r
3Copyright (c) 2006 - 2007, Intel Corporation\r
4All rights reserved. This program and the accompanying materials\r
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12Module Name:\r
13\r
14 language.c\r
15\r
16Abstract:\r
17\r
18 Language settings\r
19\r
20Revision History\r
21\r
22--*/\r
23\r
24//\r
25// Include common header file for this module.\r
26//\r
27#include "CommonHeader.h"\r
28\r
06335580 29#include "BdsString.h"\r
bc11b829 30#include "Language.h"\r
31\r
bc11b829 32\r
33VOID\r
34InitializeLanguage (\r
35 BOOLEAN LangCodesSettingRequired\r
36 )\r
37/*++\r
38\r
39Routine Description:\r
40 Determine the current language that will be used\r
41 based on language related EFI Variables\r
42\r
43Arguments:\r
44 LangCodesSettingRequired - If required to set LangCode variable\r
45\r
46Returns:\r
47\r
48--*/\r
49{\r
50 EFI_STATUS Status;\r
bc11b829 51 UINTN Size;\r
7658d609 52 CHAR8 *Lang;\r
bc11b829 53 CHAR8 LangCode[ISO_639_2_ENTRY_SIZE];\r
54 CHAR8 *LangCodes;\r
7658d609
A
55 CHAR8 *PlatformLang;\r
56 CHAR8 *PlatformLangCodes;\r
57 UINTN Index;\r
58 BOOLEAN Invalid;\r
bc11b829 59\r
bc11b829 60\r
7658d609
A
61 LangCodes = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultLangCodes);\r
62 if (LangCodesSettingRequired) {\r
63 if (!FeaturePcdGet (PcdUefiVariableDefaultLangDepricate)) {\r
64 //\r
65 // UEFI 2.1 depricated this variable so we support turning it off\r
66 //\r
67 Status = gRT->SetVariable (\r
68 L"LangCodes",\r
69 &gEfiGlobalVariableGuid,\r
70 EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
71 AsciiStrLen (LangCodes),\r
72 LangCodes\r
73 );\r
74 }\r
bc11b829 75\r
bc11b829 76\r
7658d609 77 PlatformLangCodes = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultPlatformLangCodes);\r
bc11b829 78 Status = gRT->SetVariable (\r
7658d609 79 L"PlatformLangCodes",\r
bc11b829 80 &gEfiGlobalVariableGuid,\r
81 EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
7658d609
A
82 AsciiStrSize (PlatformLangCodes),\r
83 PlatformLangCodes\r
bc11b829 84 );\r
85 }\r
7658d609
A
86\r
87 if (!FeaturePcdGet (PcdUefiVariableDefaultLangDepricate)) {\r
88 //\r
89 // UEFI 2.1 depricated this variable so we support turning it off\r
90 //\r
91\r
92 //\r
93 // Find current LangCode from Lang NV Variable\r
94 //\r
95 Size = ISO_639_2_ENTRY_SIZE;\r
96 Status = gRT->GetVariable (\r
bc11b829 97 L"Lang",\r
98 &gEfiGlobalVariableGuid,\r
7658d609
A
99 NULL,\r
100 &Size,\r
101 &LangCode\r
bc11b829 102 );\r
7658d609
A
103 if (!EFI_ERROR (Status)) {\r
104 Status = EFI_NOT_FOUND;\r
105 for (Index = 0; LangCodes[Index] != 0; Index += ISO_639_2_ENTRY_SIZE) {\r
106 if (CompareMem (&LangCodes[Index], LangCode, ISO_639_2_ENTRY_SIZE) == 0) {\r
107 Status = EFI_SUCCESS;\r
108 break;\r
109 }\r
110 }\r
111 }\r
bc11b829 112\r
7658d609
A
113 //\r
114 // If we cannot get language code from Lang variable,\r
115 // or LangCode cannot be found from language table,\r
116 // set the mDefaultLangCode to Lang variable.\r
117 //\r
118 if (EFI_ERROR (Status)) {\r
119 Lang = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultLang);\r
120 Status = gRT->SetVariable (\r
121 L"Lang",\r
122 &gEfiGlobalVariableGuid,\r
123 EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
124 ISO_639_2_ENTRY_SIZE,\r
125 Lang\r
126 );\r
127 }\r
bc11b829 128 }\r
129\r
7658d609
A
130 Invalid = FALSE;\r
131 PlatformLang = BdsLibGetVariableAndSize (L"PlatformLang", &gEfiGlobalVariableGuid, &Size);\r
132 if (PlatformLang != NULL) {\r
133 //\r
134 // Check Current PlatformLang value against PlatformLangCode. Need a library that is TBD\r
135 // Set Invalid based on state of PlatformLang.\r
136 //\r
137\r
138 FreePool (PlatformLang);\r
139 } else {\r
140 // No valid variable is set\r
141 Invalid = TRUE;\r
bc11b829 142 }\r
143\r
7658d609
A
144 if (Invalid) {\r
145 PlatformLang = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultPlatformLang);\r
146 Status = gRT->SetVariable (\r
147 L"PlatformLang",\r
148 &gEfiGlobalVariableGuid,\r
149 EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
150 AsciiStrSize (PlatformLang),\r
151 PlatformLang\r
152 );\r
153 }\r
bc11b829 154}\r