]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/BdsDxe/Language.c
Remove the non-standard definition: GLYPH_WIDTH and GLYPH_HEIGHT. All reference to...
[mirror_edk2.git] / MdeModulePkg / Universal / BdsDxe / Language.c
CommitLineData
fd6a62f3 1/** @file\r
2 Language settings\r
93e3992d 3\r
fd6a62f3 4Copyright (c) 2004 - 2008, Intel Corporation. <BR>\r
93e3992d 5All rights reserved. This program and the accompanying materials\r
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
fd6a62f3 13**/\r
93e3992d 14\r
15#include "Language.h"\r
16#include "FrontPage.h"\r
17\r
18#define NARROW_GLYPH_NUMBER 8\r
19#define WIDE_GLYPH_NUMBER 75\r
20\r
21EFI_GUID mFontPackageGuid = {\r
22 0x78941450, 0x90ab, 0x4fb1, {0xb7, 0x5f, 0x58, 0x92, 0x14, 0xe2, 0x4a, 0xc}\r
23};\r
24\r
25typedef struct {\r
26 //\r
9226efe5 27 // This 4-bytes total array length is required by HiiLibPreparePackageList()\r
93e3992d 28 //\r
29 UINT32 Length;\r
30\r
31 //\r
32 // This is the Font package definition\r
33 //\r
34 EFI_HII_PACKAGE_HEADER Header;\r
35 UINT16 NumberOfNarrowGlyphs;\r
36 UINT16 NumberOfWideGlyphs;\r
37 EFI_NARROW_GLYPH NarrowArray[NARROW_GLYPH_NUMBER];\r
38 EFI_WIDE_GLYPH WideArray[WIDE_GLYPH_NUMBER];\r
39} FONT_PACK_BIN;\r
40\r
41FONT_PACK_BIN mFontBin = {\r
42 sizeof (FONT_PACK_BIN),\r
43 {\r
44 sizeof (FONT_PACK_BIN) - sizeof (UINT32),\r
45 EFI_HII_PACKAGE_SIMPLE_FONTS,\r
46 },\r
47 NARROW_GLYPH_NUMBER,\r
48 0,\r
49 { // Narrow Glyphs\r
50 {\r
51 0x05d0,\r
52 0x00,\r
53 {\r
54 0x00,\r
55 0x00,\r
56 0x00,\r
57 0x4E,\r
58 0x6E,\r
59 0x62,\r
60 0x32,\r
61 0x32,\r
62 0x3C,\r
63 0x68,\r
64 0x4C,\r
65 0x4C,\r
66 0x46,\r
67 0x76,\r
68 0x72,\r
69 0x00,\r
70 0x00,\r
71 0x00,\r
72 0x00\r
73 }\r
74 },\r
75 {\r
76 0x05d1,\r
77 0x00,\r
78 {\r
79 0x00,\r
80 0x00,\r
81 0x00,\r
82 0x78,\r
83 0x7C,\r
84 0x0C,\r
85 0x0C,\r
86 0x0C,\r
87 0x0C,\r
88 0x0C,\r
89 0x0C,\r
90 0x0C,\r
91 0x0C,\r
92 0x7E,\r
93 0x7E,\r
94 0x00,\r
95 0x00,\r
96 0x00,\r
97 0x00\r
98 }\r
99 },\r
100 {\r
101 0x05d2,\r
102 0x00,\r
103 {\r
104 0x00,\r
105 0x00,\r
106 0x00,\r
107 0x78,\r
108 0x7C,\r
109 0x0C,\r
110 0x0C,\r
111 0x0C,\r
112 0x0C,\r
113 0x0C,\r
114 0x0C,\r
115 0x1C,\r
116 0x3E,\r
117 0x66,\r
118 0x66,\r
119 0x00,\r
120 0x00,\r
121 0x00,\r
122 0x00\r
123 }\r
124 },\r
125 {\r
126 0x05d3,\r
127 0x00,\r
128 {\r
129 0x00,\r
130 0x00,\r
131 0x00,\r
132 0x7E,\r
133 0x7E,\r
134 0x0C,\r
135 0x0C,\r
136 0x0C,\r
137 0x0C,\r
138 0x0C,\r
139 0x0C,\r
140 0x0C,\r
141 0x0C,\r
142 0x0C,\r
143 0x0C,\r
144 0x00,\r
145 0x00,\r
146 0x00,\r
147 0x00\r
148 }\r
149 },\r
150 {\r
151 0x05d4,\r
152 0x00,\r
153 {\r
154 0x00,\r
155 0x00,\r
156 0x00,\r
157 0x7C,\r
158 0x7E,\r
159 0x06,\r
160 0x06,\r
161 0x06,\r
162 0x06,\r
163 0x66,\r
164 0x66,\r
165 0x66,\r
166 0x66,\r
167 0x66,\r
168 0x66,\r
169 0x00,\r
170 0x00,\r
171 0x00,\r
172 0x00\r
173 }\r
174 },\r
175 {\r
176 0x05d5,\r
177 0x00,\r
178 {\r
179 0x00,\r
180 0x00,\r
181 0x00,\r
182 0x3C,\r
183 0x3C,\r
184 0x0C,\r
185 0x0C,\r
186 0x0C,\r
187 0x0C,\r
188 0x0C,\r
189 0x0C,\r
190 0x0C,\r
191 0x0C,\r
192 0x0C,\r
193 0x0C,\r
194 0x00,\r
195 0x00,\r
196 0x00,\r
197 0x00\r
198 }\r
199 },\r
200 {\r
201 0x05d6,\r
202 0x00,\r
203 {\r
204 0x00,\r
205 0x00,\r
206 0x00,\r
207 0x38,\r
208 0x38,\r
209 0x1E,\r
210 0x1E,\r
211 0x18,\r
212 0x18,\r
213 0x18,\r
214 0x18,\r
215 0x18,\r
216 0x18,\r
217 0x18,\r
218 0x18,\r
219 0x00,\r
220 0x00,\r
221 0x00,\r
222 0x00\r
223 }\r
224 },\r
225 {\r
226 0x0000,\r
227 0x00,\r
228 {\r
229 0x00,\r
230 0x00,\r
231 0x00,\r
232 0x00,\r
233 0x00,\r
234 0x00,\r
235 0x00,\r
236 0x00,\r
237 0x00,\r
238 0x00,\r
239 0x00,\r
240 0x00,\r
241 0x00,\r
242 0x00,\r
243 0x00,\r
244 0x00,\r
245 0x00,\r
246 0x00,\r
247 0x00\r
248 }\r
249 }\r
250 }\r
251};\r
252\r
253VOID\r
254ExportFonts (\r
255 VOID\r
256 )\r
257/*++\r
258\r
259Routine Description:\r
260 Routine to export glyphs to the HII database. This is in addition to whatever is defined in the Graphics Console driver.\r
261\r
262Arguments:\r
263 None\r
264\r
265Returns:\r
266\r
267--*/\r
268{\r
269 EFI_STATUS Status;\r
270 EFI_HANDLE DriverHandle;\r
271 EFI_HII_HANDLE HiiHandle;\r
272 EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
273\r
274 //\r
275 // Create driver handle used by HII database\r
276 //\r
277 Status = HiiLibCreateHiiDriverHandle (&DriverHandle);\r
278 if (EFI_ERROR (Status)) {\r
279 return ;\r
280 }\r
281\r
9226efe5 282 PackageList = HiiLibPreparePackageList (1, &mFontPackageGuid, &mFontBin);\r
93e3992d 283 ASSERT (PackageList != NULL);\r
284\r
285 gHiiDatabase->NewPackageList (gHiiDatabase, PackageList, DriverHandle, &HiiHandle);\r
286 FreePool (PackageList);\r
287}\r
288\r
289VOID\r
290InitializeLanguage (\r
291 BOOLEAN LangCodesSettingRequired\r
292 )\r
293/*++\r
294\r
295Routine Description:\r
296 Determine the current language that will be used\r
297 based on language related EFI Variables\r
298\r
299Arguments:\r
300 LangCodesSettingRequired - If required to set LangCode variable\r
301\r
302Returns:\r
303\r
304--*/\r
305{\r
306 EFI_STATUS Status;\r
307 UINTN Size;\r
308 CHAR8 *Lang;\r
309 CHAR8 LangCode[ISO_639_2_ENTRY_SIZE];\r
310 CHAR8 *LangCodes;\r
311 CHAR8 *PlatformLang;\r
312 CHAR8 *PlatformLangCodes;\r
313 UINTN Index;\r
314 BOOLEAN Invalid;\r
315\r
316 ExportFonts ();\r
317\r
318 LangCodes = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultLangCodes);\r
319 if (LangCodesSettingRequired) {\r
320 if (!FeaturePcdGet (PcdUefiVariableDefaultLangDepricate)) {\r
321 //\r
322 // UEFI 2.1 depricated this variable so we support turning it off\r
323 //\r
324 Status = gRT->SetVariable (\r
325 L"LangCodes",\r
326 &gEfiGlobalVariableGuid,\r
327 EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
328 AsciiStrLen (LangCodes),\r
329 LangCodes\r
330 );\r
331 }\r
332\r
333\r
334 PlatformLangCodes = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultPlatformLangCodes);\r
335 Status = gRT->SetVariable (\r
336 L"PlatformLangCodes",\r
337 &gEfiGlobalVariableGuid,\r
338 EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
339 AsciiStrSize (PlatformLangCodes),\r
340 PlatformLangCodes\r
341 );\r
342 }\r
343\r
344 if (!FeaturePcdGet (PcdUefiVariableDefaultLangDepricate)) {\r
345 //\r
346 // UEFI 2.1 depricated this variable so we support turning it off\r
347 //\r
348\r
349 //\r
350 // Find current LangCode from Lang NV Variable\r
351 //\r
352 Size = ISO_639_2_ENTRY_SIZE;\r
353 Status = gRT->GetVariable (\r
354 L"Lang",\r
355 &gEfiGlobalVariableGuid,\r
356 NULL,\r
357 &Size,\r
358 &LangCode\r
359 );\r
360 if (!EFI_ERROR (Status)) {\r
361 Status = EFI_NOT_FOUND;\r
362 for (Index = 0; LangCodes[Index] != 0; Index += ISO_639_2_ENTRY_SIZE) {\r
363 if (CompareMem (&LangCodes[Index], LangCode, ISO_639_2_ENTRY_SIZE) == 0) {\r
364 Status = EFI_SUCCESS;\r
365 break;\r
366 }\r
367 }\r
368 }\r
369\r
370 //\r
371 // If we cannot get language code from Lang variable,\r
372 // or LangCode cannot be found from language table,\r
373 // set the mDefaultLangCode to Lang variable.\r
374 //\r
375 if (EFI_ERROR (Status)) {\r
376 Lang = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultLang);\r
377 Status = gRT->SetVariable (\r
378 L"Lang",\r
379 &gEfiGlobalVariableGuid,\r
380 EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
381 ISO_639_2_ENTRY_SIZE,\r
382 Lang\r
383 );\r
384 }\r
385 }\r
386\r
387 Invalid = FALSE;\r
388 PlatformLang = BdsLibGetVariableAndSize (L"PlatformLang", &gEfiGlobalVariableGuid, &Size);\r
389 if (PlatformLang != NULL) {\r
390 //\r
391 // Check Current PlatformLang value against PlatformLangCode. Need a library that is TBD\r
392 // Set Invalid based on state of PlatformLang.\r
393 //\r
394\r
395 FreePool (PlatformLang);\r
396 } else {\r
397 // No valid variable is set\r
398 Invalid = TRUE;\r
399 }\r
400\r
401 if (Invalid) {\r
402 PlatformLang = (CHAR8 *)PcdGetPtr (PcdUefiVariableDefaultPlatformLang);\r
403 Status = gRT->SetVariable (\r
404 L"PlatformLang",\r
405 &gEfiGlobalVariableGuid,\r
406 EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
407 AsciiStrSize (PlatformLang),\r
408 PlatformLang\r
409 );\r
410 }\r
411}\r