#ifndef __HII_LIB_H__\r
#define __HII_LIB_H__\r
\r
-///\r
-/// Limited buffer size recommended by RFC3066\r
-/// (42 characters plus a NULL terminator)\r
-///\r
-#define RFC_3066_ENTRY_SIZE (42 + 1)\r
\r
#define ISO_639_2_ENTRY_SIZE 3\r
\r
);\r
\r
\r
-/**\r
- Determine what is the current language setting. The space reserved for Lang\r
- must be at least RFC_3066_ENTRY_SIZE bytes;\r
-\r
- If Lang is NULL, then ASSERT.\r
-\r
- @param Lang Pointer of system language. Lang will always be filled with \r
- a valid RFC 3066 language string. If "PlatformLang" is not\r
- set in the system, the default language specifed by PcdUefiVariableDefaultPlatformLang\r
- is returned.\r
-\r
- @return EFI_SUCCESS If the EFI Variable with "PlatformLang" is set and return in Lang.\r
- @return EFI_NOT_FOUND If the EFI Variable with "PlatformLang" is not set, but a valid default language is return in Lang.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibGetCurrentLanguage (\r
- OUT CHAR8 *Lang\r
- );\r
-\r
/**\r
Get next language from language code list (with separator ';').\r
\r
#include <Protocol/DriverDiagnostics.h>\r
#include <Protocol/DriverDiagnostics2.h>\r
\r
+///\r
+/// Limited buffer size recommended by RFC3066\r
+/// (42 characters plus a NULL terminator)\r
+///\r
+#define RFC_3066_ENTRY_SIZE (42 + 1)\r
+\r
///\r
/// Unicode String Table\r
///\r
IN CONST EFI_DRIVER_DIAGNOSTICS2_PROTOCOL *DriverDiagnostics2 OPTIONAL\r
);\r
\r
+/**\r
+ Determine what is the current language setting. The space reserved for Lang\r
+ must be at least RFC_3066_ENTRY_SIZE bytes;\r
+\r
+ If Lang is NULL, then ASSERT.\r
+\r
+ @param Lang Pointer of system language. Lang will always be filled with \r
+ a valid RFC 3066 language string. If "PlatformLang" is not\r
+ set in the system, the default language specifed by PcdUefiVariableDefaultPlatformLang\r
+ is returned.\r
+\r
+ @return EFI_SUCCESS If the EFI Variable with "PlatformLang" is set and return in Lang.\r
+ @return EFI_NOT_FOUND If the EFI Variable with "PlatformLang" is not set, but a valid default language is return in Lang.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+GetCurrentLanguage (\r
+ OUT CHAR8 *Lang\r
+ );\r
+\r
+\r
#endif\r
\r
#include "InternalHiiLib.h"\r
\r
-/**\r
- Determine what is the current language setting. The space reserved for Lang\r
- must be at least RFC_3066_ENTRY_SIZE bytes;\r
-\r
- If Lang is NULL, then ASSERT.\r
-\r
- @param Lang Pointer of system language. Lang will always be filled with \r
- a valid RFC 3066 language string. If "PlatformLang" is not\r
- set in the system, the default language specifed by PcdUefiVariableDefaultPlatformLang\r
- is returned.\r
-\r
- @return EFI_SUCCESS If the EFI Variable with "PlatformLang" is set and return in Lang.\r
- @return EFI_NOT_FOUND If the EFI Variable with "PlatformLang" is not set, but a valid default language is return in Lang.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibGetCurrentLanguage (\r
- OUT CHAR8 *Lang\r
- )\r
-{\r
- EFI_STATUS Status;\r
- UINTN Size;\r
-\r
- ASSERT (Lang != NULL);\r
-\r
- //\r
- // Get current language setting\r
- //\r
- Size = RFC_3066_ENTRY_SIZE;\r
- Status = gRT->GetVariable (\r
- L"PlatformLang",\r
- &gEfiGlobalVariableGuid,\r
- NULL,\r
- &Size,\r
- Lang\r
- );\r
-\r
- if (EFI_ERROR (Status)) {\r
- AsciiStrCpy (Lang, (CHAR8 *) PcdGetPtr (PcdUefiVariableDefaultPlatformLang));\r
- }\r
-\r
- return Status;\r
-}\r
-\r
-\r
/**\r
Get next language from language code list (with separator ';').\r
\r
return NULL;\r
}\r
\r
- LocateHiiProtocols ();\r
- \r
Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);\r
\r
if (Status == EFI_BUFFER_TOO_SMALL) {\r
return NULL;\r
}\r
\r
- LocateHiiProtocols ();\r
- \r
Status = mHiiStringProt->GetSecondaryLanguages (mHiiStringProt, HiiHandle, FirstLanguage, LanguageString, &BufferSize);\r
\r
if (Status == EFI_BUFFER_TOO_SMALL) {\r
CONST EFI_HII_STRING_PROTOCOL *mHiiStringProt = NULL;\r
\r
/**\r
-\r
This function locate Hii relative protocols for later usage.\r
+ \r
+ The constructor function caches the protocol pointer of HII Database Protocol\r
+ and Hii String Protocol.\r
+ \r
+ It will ASSERT() if either of the protocol can't be located.\r
+\r
+ @param ImageHandle The firmware allocated handle for the EFI image.\r
+ @param SystemTable A pointer to the EFI System Table.\r
+\r
+ @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.\r
\r
**/\r
-VOID\r
-LocateHiiProtocols (\r
- VOID\r
+EFI_STATUS\r
+EFIAPI\r
+HiiLibConstructor (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
EFI_STATUS Status;\r
\r
- if (mHiiStringProt != NULL && mHiiDatabaseProt != NULL) {\r
- //\r
- // Only need to initialize the protocol instance once.\r
- //\r
- return;\r
- }\r
-\r
Status = gBS->LocateProtocol (&gEfiHiiDatabaseProtocolGuid, NULL, (VOID **) &mHiiDatabaseProt);\r
ASSERT_EFI_ERROR (Status);\r
\r
Status = gBS->LocateProtocol (&gEfiHiiStringProtocolGuid, NULL, (VOID **) &mHiiStringProt);\r
ASSERT_EFI_ERROR (Status);\r
+\r
+ return EFI_SUCCESS;\r
}\r
\r
\r
\r
ASSERT (HiiHandle != NULL);\r
\r
- LocateHiiProtocols ();\r
-\r
VA_START (Args, HiiHandle);\r
PackageListHeader = InternalHiiLibPreparePackages (NumberOfPackages, GuidId, Args);\r
\r
EFI_STATUS Status;\r
ASSERT (IsHiiHandleRegistered (HiiHandle));\r
\r
- LocateHiiProtocols ();\r
-\r
Status = mHiiDatabaseProt->RemovePackageList (mHiiDatabaseProt, HiiHandle);\r
ASSERT_EFI_ERROR (Status);\r
}\r
\r
BufferLength = 0;\r
\r
- LocateHiiProtocols ();\r
-\r
//\r
// Try to find the actual buffer size for HiiHandle Buffer.\r
//\r
BufferSize = 0;\r
HiiPackageList = NULL;\r
\r
- LocateHiiProtocols ();\r
-\r
Status = mHiiDatabaseProt->ExportPackageLists (mHiiDatabaseProt, Handle, &BufferSize, HiiPackageList);\r
ASSERT (Status != EFI_NOT_FOUND);\r
\r
return NULL;\r
}\r
\r
- LocateHiiProtocols ();\r
-\r
//\r
// Retrieve all Hii Handles from HII database\r
//\r
ASSERT (PackageListSize != NULL);\r
ASSERT (PackageListHeader != NULL);\r
\r
- LocateHiiProtocols ();\r
-\r
if (Handle != NULL) {\r
ASSERT (IsHiiHandleRegistered (Handle));\r
}\r
*HandleBufferLength = 0;\r
*HandleBuffer = NULL;\r
\r
- LocateHiiProtocols ();\r
-\r
Status = mHiiDatabaseProt->ListPackageLists (\r
mHiiDatabaseProt,\r
PackageType,\r
HiiPackageList = NULL;\r
BufferSize = 0;\r
\r
- LocateHiiProtocols ();\r
-\r
Status = mHiiDatabaseProt->ExportPackageLists (\r
mHiiDatabaseProt,\r
HiiHandle,\r
EDK_RELEASE_VERSION = 0x00020000\r
EFI_SPECIFICATION_VERSION = 0x00020000\r
\r
+ CONSTRUCTOR = HiiLibConstructor\r
+\r
#\r
# VALID_ARCHITECTURES = IA32 X64 IPF EBC\r
#\r
UefiRuntimeServicesTableLib\r
UefiBootServicesTableLib\r
DevicePathLib\r
+ UefiLib\r
\r
[Protocols]\r
gEfiHiiDatabaseProtocolGuid # ALWAYS_CONSUMED\r
gEfiHiiStringProtocolGuid # ALWAYS_CONSUMED\r
gEfiDevicePathProtocolGuid \r
- \r
-[Guids] \r
- gEfiGlobalVariableGuid \r
\r
-[Pcd]\r
- gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultPlatformLang\r
+[Depex]\r
+ gEfiHiiDatabaseProtocolGuid AND\r
+ gEfiHiiStringProtocolGuid\r
+ \r
ASSERT (!(*StringSize != 0 && String == NULL));\r
ASSERT (IsHiiHandleRegistered (PackageList));\r
\r
- HiiLibGetCurrentLanguage (CurrentLang);\r
+ GetCurrentLanguage (CurrentLang);\r
\r
Status = mHiiStringProt->GetString (\r
mHiiStringProt,\r
#include <Protocol/HiiString.h>\r
#include <Protocol/DevicePath.h>\r
\r
-#include <Guid/GlobalVariable.h>\r
-\r
#include <Library/BaseLib.h>\r
#include <Library/BaseMemoryLib.h>\r
#include <Library/HiiLib.h>\r
#include <Library/UefiRuntimeServicesTableLib.h>\r
#include <Library/PcdLib.h>\r
#include <Library/DevicePathLib.h>\r
+#include <Library/UefiLib.h>\r
\r
#define HII_LIB_DEFAULT_STRING_SIZE 0x200\r
\r
EFI_HII_HANDLE HiiHandle\r
);\r
\r
-/**\r
-\r
- This function locate Hii relative protocols for later usage.\r
-\r
-**/\r
-VOID\r
-LocateHiiProtocols (\r
- VOID\r
- );\r
-\r
#endif\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ Determine what is the current language setting. The space reserved for Lang\r
+ must be at least RFC_3066_ENTRY_SIZE bytes;\r
+\r
+ If Lang is NULL, then ASSERT.\r
+\r
+ @param Lang Pointer of system language. Lang will always be filled with \r
+ a valid RFC 3066 language string. If "PlatformLang" is not\r
+ set in the system, the default language specifed by PcdUefiVariableDefaultPlatformLang\r
+ is returned.\r
+\r
+ @return EFI_SUCCESS If the EFI Variable with "PlatformLang" is set and return in Lang.\r
+ @return EFI_NOT_FOUND If the EFI Variable with "PlatformLang" is not set, but a valid default language is return in Lang.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+GetCurrentLanguage (\r
+ OUT CHAR8 *Lang\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ UINTN Size;\r
+\r
+ ASSERT (Lang != NULL);\r
+\r
+ //\r
+ // Get current language setting\r
+ //\r
+ Size = RFC_3066_ENTRY_SIZE;\r
+ Status = gRT->GetVariable (\r
+ L"PlatformLang",\r
+ &gEfiGlobalVariableGuid,\r
+ NULL,\r
+ &Size,\r
+ Lang\r
+ );\r
+\r
+ if (EFI_ERROR (Status)) {\r
+ AsciiStrCpy (Lang, (CHAR8 *) PcdGetPtr (PcdUefiVariableDefaultPlatformLang));\r
+ }\r
+\r
+ return Status;\r
+}\r
+\r
+\r
\r
BaseMemoryLib\r
BaseLib\r
UefiBootServicesTableLib\r
-\r
+ UefiRuntimeServicesTableLib\r
\r
[Guids]\r
gEfiEventReadyToBootGuid # ALWAYS_CONSUMED\r
\r
[Pcd.common]\r
gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize\r
+ gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultPlatformLang\r
\r
[FeaturePcd.common]\r
gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnosticsDisable\r
gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnostics2Disable\r
gEfiMdePkgTokenSpaceGuid.PcdComponentName2Disable\r
\r
+[Guids] \r
+ gEfiGlobalVariableGuid \r
+\r
+\r
\r
#include <Guid/EventGroup.h>\r
#include <Guid/EventLegacyBios.h>\r
+#include <Guid/GlobalVariable.h>\r
#include <Library/UefiLib.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/UefiRuntimeServicesTableLib.h>\r
#include <Library/BaseLib.h>\r
#include <Library/BaseMemoryLib.h>\r
#include <Library/DebugLib.h>\r