3 Copyright (c) 2004 - 2008, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
25 #include "FrontPage.h"
27 #define NARROW_GLYPH_NUMBER 8
28 #define WIDE_GLYPH_NUMBER 75
30 EFI_GUID mFontPackageGuid
= {
31 0x78941450, 0x90ab, 0x4fb1, {0xb7, 0x5f, 0x58, 0x92, 0x14, 0xe2, 0x4a, 0xc}
36 // This 4-bytes total array length is required by PreparePackageList()
41 // This is the Font package definition
43 EFI_HII_PACKAGE_HEADER Header
;
44 UINT16 NumberOfNarrowGlyphs
;
45 UINT16 NumberOfWideGlyphs
;
46 EFI_NARROW_GLYPH NarrowArray
[NARROW_GLYPH_NUMBER
];
47 EFI_WIDE_GLYPH WideArray
[WIDE_GLYPH_NUMBER
];
50 FONT_PACK_BIN mFontBin
= {
51 sizeof (FONT_PACK_BIN
),
53 sizeof (FONT_PACK_BIN
) - sizeof (UINT32
),
54 EFI_HII_PACKAGE_SIMPLE_FONTS
,
269 Routine to export glyphs to the HII database. This is in addition to whatever is defined in the Graphics Console driver.
279 EFI_HANDLE DriverHandle
;
280 EFI_HII_HANDLE HiiHandle
;
281 EFI_HII_PACKAGE_LIST_HEADER
*PackageList
;
284 // Create driver handle used by HII database
286 Status
= HiiLibCreateHiiDriverHandle (&DriverHandle
);
287 if (EFI_ERROR (Status
)) {
291 PackageList
= PreparePackageList (1, &mFontPackageGuid
, &mFontBin
);
292 ASSERT (PackageList
!= NULL
);
294 gHiiDatabase
->NewPackageList (gHiiDatabase
, PackageList
, DriverHandle
, &HiiHandle
);
295 FreePool (PackageList
);
300 BOOLEAN LangCodesSettingRequired
305 Determine the current language that will be used
306 based on language related EFI Variables
309 LangCodesSettingRequired - If required to set LangCode variable
318 CHAR8 LangCode
[ISO_639_2_ENTRY_SIZE
];
321 CHAR8
*PlatformLangCodes
;
327 LangCodes
= (CHAR8
*)PcdGetPtr (PcdUefiVariableDefaultLangCodes
);
328 if (LangCodesSettingRequired
) {
329 if (!FeaturePcdGet (PcdUefiVariableDefaultLangDepricate
)) {
331 // UEFI 2.1 depricated this variable so we support turning it off
333 Status
= gRT
->SetVariable (
335 &gEfiGlobalVariableGuid
,
336 EFI_VARIABLE_BOOTSERVICE_ACCESS
| EFI_VARIABLE_RUNTIME_ACCESS
,
337 AsciiStrLen (LangCodes
),
343 PlatformLangCodes
= (CHAR8
*)PcdGetPtr (PcdUefiVariableDefaultPlatformLangCodes
);
344 Status
= gRT
->SetVariable (
345 L
"PlatformLangCodes",
346 &gEfiGlobalVariableGuid
,
347 EFI_VARIABLE_BOOTSERVICE_ACCESS
| EFI_VARIABLE_RUNTIME_ACCESS
,
348 AsciiStrSize (PlatformLangCodes
),
353 if (!FeaturePcdGet (PcdUefiVariableDefaultLangDepricate
)) {
355 // UEFI 2.1 depricated this variable so we support turning it off
359 // Find current LangCode from Lang NV Variable
361 Size
= ISO_639_2_ENTRY_SIZE
;
362 Status
= gRT
->GetVariable (
364 &gEfiGlobalVariableGuid
,
369 if (!EFI_ERROR (Status
)) {
370 Status
= EFI_NOT_FOUND
;
371 for (Index
= 0; LangCodes
[Index
] != 0; Index
+= ISO_639_2_ENTRY_SIZE
) {
372 if (CompareMem (&LangCodes
[Index
], LangCode
, ISO_639_2_ENTRY_SIZE
) == 0) {
373 Status
= EFI_SUCCESS
;
380 // If we cannot get language code from Lang variable,
381 // or LangCode cannot be found from language table,
382 // set the mDefaultLangCode to Lang variable.
384 if (EFI_ERROR (Status
)) {
385 Lang
= (CHAR8
*)PcdGetPtr (PcdUefiVariableDefaultLang
);
386 Status
= gRT
->SetVariable (
388 &gEfiGlobalVariableGuid
,
389 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
| EFI_VARIABLE_RUNTIME_ACCESS
,
390 ISO_639_2_ENTRY_SIZE
,
397 PlatformLang
= BdsLibGetVariableAndSize (L
"PlatformLang", &gEfiGlobalVariableGuid
, &Size
);
398 if (PlatformLang
!= NULL
) {
400 // Check Current PlatformLang value against PlatformLangCode. Need a library that is TBD
401 // Set Invalid based on state of PlatformLang.
404 FreePool (PlatformLang
);
406 // No valid variable is set
411 PlatformLang
= (CHAR8
*)PcdGetPtr (PcdUefiVariableDefaultPlatformLang
);
412 Status
= gRT
->SetVariable (
414 &gEfiGlobalVariableGuid
,
415 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
| EFI_VARIABLE_RUNTIME_ACCESS
,
416 AsciiStrSize (PlatformLang
),