4 Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #include "FrontPage.h"
18 EFI_GUID mFontPackageGuid
= {
19 0x78941450, 0x90ab, 0x4fb1, {0xb7, 0x5f, 0x58, 0x92, 0x14, 0xe2, 0x4a, 0xc}
22 #define NARROW_GLYPH_NUMBER 8
23 #define WIDE_GLYPH_NUMBER 75
27 /// This 4-bytes total array length is required by HiiAddPackages()
32 // This is the Font package definition
34 EFI_HII_PACKAGE_HEADER Header
;
35 UINT16 NumberOfNarrowGlyphs
;
36 UINT16 NumberOfWideGlyphs
;
37 EFI_NARROW_GLYPH NarrowArray
[NARROW_GLYPH_NUMBER
];
38 EFI_WIDE_GLYPH WideArray
[WIDE_GLYPH_NUMBER
];
41 FONT_PACK_BIN mFontBin
= {
42 sizeof (FONT_PACK_BIN
),
44 sizeof (FONT_PACK_BIN
) - sizeof (UINT32
),
45 EFI_HII_PACKAGE_SIMPLE_FONTS
,
254 Routine to export glyphs to the HII database. This is in addition to whatever is defined in the Graphics Console driver.
262 EFI_HII_HANDLE HiiHandle
;
264 HiiHandle
= HiiAddPackages (
270 ASSERT (HiiHandle
!= NULL
);
274 Get next language from language code list (with separator ';').
276 If LangCode is NULL, then ASSERT.
277 If Lang is NULL, then ASSERT.
279 @param LangCode On input: point to first language in the list. On
280 output: point to next language in the list, or
281 NULL if no more language in the list.
282 @param Lang The first language in the list.
288 IN OUT CHAR8
**LangCode
,
295 ASSERT (LangCode
!= NULL
);
296 ASSERT (*LangCode
!= NULL
);
297 ASSERT (Lang
!= NULL
);
300 StringPtr
= *LangCode
;
301 while (StringPtr
[Index
] != 0 && StringPtr
[Index
] != ';') {
305 CopyMem (Lang
, StringPtr
, Index
);
308 if (StringPtr
[Index
] == ';') {
311 *LangCode
= StringPtr
+ Index
;
315 Determine the current language that will be used
316 based on language related EFI Variables.
318 @param LangCodesSettingRequired - If required to set LangCode variable
323 BOOLEAN LangCodesSettingRequired
329 CHAR8 LangCode
[ISO_639_2_ENTRY_SIZE
+ 1];
332 CHAR8
*PlatformLangCodes
;
338 LangCodes
= (CHAR8
*)PcdGetPtr (PcdUefiVariableDefaultLangCodes
);
339 if (LangCodesSettingRequired
) {
340 if (!FeaturePcdGet (PcdUefiVariableDefaultLangDeprecate
)) {
342 // UEFI 2.1 depricated this variable so we support turning it off
344 Status
= gRT
->SetVariable (
346 &gEfiGlobalVariableGuid
,
347 EFI_VARIABLE_BOOTSERVICE_ACCESS
| EFI_VARIABLE_RUNTIME_ACCESS
,
348 AsciiStrSize (LangCodes
),
354 PlatformLangCodes
= (CHAR8
*)PcdGetPtr (PcdUefiVariableDefaultPlatformLangCodes
);
355 Status
= gRT
->SetVariable (
356 L
"PlatformLangCodes",
357 &gEfiGlobalVariableGuid
,
358 EFI_VARIABLE_BOOTSERVICE_ACCESS
| EFI_VARIABLE_RUNTIME_ACCESS
,
359 AsciiStrSize (PlatformLangCodes
),
364 if (!FeaturePcdGet (PcdUefiVariableDefaultLangDeprecate
)) {
366 // UEFI 2.1 depricated this variable so we support turning it off
370 // Find current LangCode from Lang NV Variable
372 Size
= ISO_639_2_ENTRY_SIZE
+ 1;
373 Status
= gRT
->GetVariable (
375 &gEfiGlobalVariableGuid
,
380 if (!EFI_ERROR (Status
)) {
381 Status
= EFI_NOT_FOUND
;
382 for (Index
= 0; LangCodes
[Index
] != 0; Index
+= ISO_639_2_ENTRY_SIZE
) {
383 if (CompareMem (&LangCodes
[Index
], LangCode
, ISO_639_2_ENTRY_SIZE
) == 0) {
384 Status
= EFI_SUCCESS
;
391 // If we cannot get language code from Lang variable,
392 // or LangCode cannot be found from language table,
393 // set the mDefaultLangCode to Lang variable.
395 if (EFI_ERROR (Status
)) {
396 Lang
= (CHAR8
*)PcdGetPtr (PcdUefiVariableDefaultLang
);
397 Status
= gRT
->SetVariable (
399 &gEfiGlobalVariableGuid
,
400 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
| EFI_VARIABLE_RUNTIME_ACCESS
,
401 ISO_639_2_ENTRY_SIZE
+ 1,
408 PlatformLang
= BdsLibGetVariableAndSize (L
"PlatformLang", &gEfiGlobalVariableGuid
, &Size
);
409 if (PlatformLang
!= NULL
) {
411 // Check Current PlatformLang value against PlatformLangCode. Need a library that is TBD
412 // Set Invalid based on state of PlatformLang.
415 FreePool (PlatformLang
);
417 // No valid variable is set
422 PlatformLang
= (CHAR8
*)PcdGetPtr (PcdUefiVariableDefaultPlatformLang
);
423 Status
= gRT
->SetVariable (
425 &gEfiGlobalVariableGuid
,
426 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
| EFI_VARIABLE_RUNTIME_ACCESS
,
427 AsciiStrSize (PlatformLang
),