]> git.proxmox.com Git - mirror_edk2.git/blame - Nt32Pkg/PlatformBdsDxe/Generic/Language.c
Replaced by Y:\work\MdeModulePkg\Library\GenericBdsLib\GenericBdsLib.inf
[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
40f18da1 23#include "Bds.h"\r
06335580 24#include "BdsString.h"\r
bc11b829 25#include "Language.h"\r
26\r
bc11b829 27\r
28VOID\r
29InitializeLanguage (\r
30 BOOLEAN LangCodesSettingRequired\r
31 )\r
32/*++\r
33\r
34Routine Description:\r
35 Determine the current language that will be used\r
36 based on language related EFI Variables\r
37\r
38Arguments:\r
39 LangCodesSettingRequired - If required to set LangCode variable\r
40\r
41Returns:\r
42\r
43--*/\r
44{\r
45 EFI_STATUS Status;\r
bc11b829 46 UINTN Size;\r
7658d609 47 CHAR8 *Lang;\r
bc11b829 48 CHAR8 LangCode[ISO_639_2_ENTRY_SIZE];\r
49 CHAR8 *LangCodes;\r
7658d609
A
50 CHAR8 *PlatformLang;\r
51 CHAR8 *PlatformLangCodes;\r
52 UINTN Index;\r
53 BOOLEAN Invalid;\r
bc11b829 54\r
bc11b829 55\r
7658d609
A
56 LangCodes = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultLangCodes);\r
57 if (LangCodesSettingRequired) {\r
58 if (!FeaturePcdGet (PcdUefiVariableDefaultLangDepricate)) {\r
59 //\r
60 // UEFI 2.1 depricated this variable so we support turning it off\r
61 //\r
62 Status = gRT->SetVariable (\r
63 L"LangCodes",\r
64 &gEfiGlobalVariableGuid,\r
65 EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
66 AsciiStrLen (LangCodes),\r
67 LangCodes\r
68 );\r
69 }\r
bc11b829 70\r
bc11b829 71\r
7658d609 72 PlatformLangCodes = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultPlatformLangCodes);\r
bc11b829 73 Status = gRT->SetVariable (\r
7658d609 74 L"PlatformLangCodes",\r
bc11b829 75 &gEfiGlobalVariableGuid,\r
76 EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
7658d609
A
77 AsciiStrSize (PlatformLangCodes),\r
78 PlatformLangCodes\r
bc11b829 79 );\r
80 }\r
7658d609
A
81\r
82 if (!FeaturePcdGet (PcdUefiVariableDefaultLangDepricate)) {\r
83 //\r
84 // UEFI 2.1 depricated this variable so we support turning it off\r
85 //\r
86\r
87 //\r
88 // Find current LangCode from Lang NV Variable\r
89 //\r
90 Size = ISO_639_2_ENTRY_SIZE;\r
91 Status = gRT->GetVariable (\r
bc11b829 92 L"Lang",\r
93 &gEfiGlobalVariableGuid,\r
7658d609
A
94 NULL,\r
95 &Size,\r
96 &LangCode\r
bc11b829 97 );\r
7658d609
A
98 if (!EFI_ERROR (Status)) {\r
99 Status = EFI_NOT_FOUND;\r
100 for (Index = 0; LangCodes[Index] != 0; Index += ISO_639_2_ENTRY_SIZE) {\r
101 if (CompareMem (&LangCodes[Index], LangCode, ISO_639_2_ENTRY_SIZE) == 0) {\r
102 Status = EFI_SUCCESS;\r
103 break;\r
104 }\r
105 }\r
106 }\r
bc11b829 107\r
7658d609
A
108 //\r
109 // If we cannot get language code from Lang variable,\r
110 // or LangCode cannot be found from language table,\r
111 // set the mDefaultLangCode to Lang variable.\r
112 //\r
113 if (EFI_ERROR (Status)) {\r
114 Lang = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultLang);\r
115 Status = gRT->SetVariable (\r
116 L"Lang",\r
117 &gEfiGlobalVariableGuid,\r
118 EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
119 ISO_639_2_ENTRY_SIZE,\r
120 Lang\r
121 );\r
122 }\r
bc11b829 123 }\r
124\r
7658d609
A
125 Invalid = FALSE;\r
126 PlatformLang = BdsLibGetVariableAndSize (L"PlatformLang", &gEfiGlobalVariableGuid, &Size);\r
127 if (PlatformLang != NULL) {\r
128 //\r
129 // Check Current PlatformLang value against PlatformLangCode. Need a library that is TBD\r
130 // Set Invalid based on state of PlatformLang.\r
131 //\r
132\r
133 FreePool (PlatformLang);\r
134 } else {\r
135 // No valid variable is set\r
136 Invalid = TRUE;\r
bc11b829 137 }\r
138\r
7658d609
A
139 if (Invalid) {\r
140 PlatformLang = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultPlatformLang);\r
141 Status = gRT->SetVariable (\r
142 L"PlatformLang",\r
143 &gEfiGlobalVariableGuid,\r
144 EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
145 AsciiStrSize (PlatformLang),\r
146 PlatformLang\r
147 );\r
148 }\r
bc11b829 149}\r