]> git.proxmox.com Git - mirror_edk2.git/commitdiff
HiiLibGetCurrentLanguage returns the current UEFI variable "PlatformLang" (if this...
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Sun, 21 Sep 2008 08:50:52 +0000 (08:50 +0000)
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Sun, 21 Sep 2008 08:50:52 +0000 (08:50 +0000)
By moving HiiLibGetCurrentLanguage to UefiLib, library constructor (depex) can be added back to HiiLib to make sure the execution order is correct.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5938 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Include/Library/HiiLib.h
MdePkg/Include/Library/UefiLib.h
MdePkg/Library/HiiLib/HiiLanguage.c
MdePkg/Library/HiiLib/HiiLib.c
MdePkg/Library/HiiLib/HiiLib.inf
MdePkg/Library/HiiLib/HiiString.c
MdePkg/Library/HiiLib/InternalHiiLib.h
MdePkg/Library/UefiLib/UefiLib.c
MdePkg/Library/UefiLib/UefiLib.inf
MdePkg/Library/UefiLib/UefiLibInternal.h

index 59e1780a997f310a8a2d52e0b14306d4381b8cf3..36fd8f602c090daf2344a3c654ac35a8cfed4e04 100644 (file)
 #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
@@ -288,27 +283,6 @@ HiiLibDevicePathToHiiHandle (
   );\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
index 13ab258ebe509bead04232923354bd3569effd9f..fa04704c33ff0a3ef976c52ebbf481b85c055e75 100644 (file)
 #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
@@ -986,4 +992,26 @@ EfiLibInstallAllDriverProtocols2 (
   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
index 8c03bb993af4244352de0c0bf7d2da8139a93d32..147e5a39423b9e90246d1927b7bc2ebe060c917b 100644 (file)
 \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
@@ -136,8 +90,6 @@ HiiLibGetSupportedLanguages (
     return NULL;\r
   }\r
 \r
-  LocateHiiProtocols ();\r
-  \r
   Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);\r
   \r
   if (Status == EFI_BUFFER_TOO_SMALL) {\r
@@ -232,8 +184,6 @@ HiiLibGetSupportedSecondaryLanguages (
     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
index d5d66704054c7af62e846a4cb64f6e461011b4ba..cee31b20ae9cba6286454b786622b2a0a3108fcd 100644 (file)
@@ -18,29 +18,35 @@ CONST EFI_HII_DATABASE_PROTOCOL   *mHiiDatabaseProt = NULL;
 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
@@ -213,8 +219,6 @@ HiiLibAddPackages (
 \r
   ASSERT (HiiHandle != NULL);\r
 \r
-  LocateHiiProtocols ();\r
-\r
   VA_START (Args, HiiHandle);\r
   PackageListHeader = InternalHiiLibPreparePackages (NumberOfPackages, GuidId, Args);\r
 \r
@@ -250,8 +254,6 @@ HiiLibRemovePackages (
   EFI_STATUS Status;\r
   ASSERT (IsHiiHandleRegistered (HiiHandle));\r
 \r
-  LocateHiiProtocols ();\r
-\r
   Status = mHiiDatabaseProt->RemovePackageList (mHiiDatabaseProt, HiiHandle);\r
   ASSERT_EFI_ERROR (Status);\r
 }\r
@@ -287,8 +289,6 @@ HiiLibGetHiiHandles (
 \r
   BufferLength = 0;\r
 \r
-  LocateHiiProtocols ();\r
-\r
   //\r
   // Try to find the actual buffer size for HiiHandle Buffer.\r
   //\r
@@ -353,8 +353,6 @@ HiiLibExtractGuidFromHiiHandle (
   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
@@ -450,8 +448,6 @@ HiiLibDevicePathToHiiHandle (
     return NULL;\r
   }\r
 \r
-  LocateHiiProtocols ();\r
-\r
   //\r
   // Retrieve all Hii Handles from HII database\r
   //\r
@@ -538,8 +534,6 @@ HiiLibExportPackageLists (
   ASSERT (PackageListSize != NULL);\r
   ASSERT (PackageListHeader != NULL);\r
 \r
-  LocateHiiProtocols ();\r
-\r
   if (Handle != NULL) {\r
     ASSERT (IsHiiHandleRegistered (Handle));\r
   }\r
@@ -597,8 +591,6 @@ HiiLibListPackageLists (
   *HandleBufferLength = 0;\r
   *HandleBuffer       = NULL;\r
 \r
-  LocateHiiProtocols ();\r
-\r
   Status = mHiiDatabaseProt->ListPackageLists (\r
                             mHiiDatabaseProt,\r
                             PackageType,\r
@@ -652,8 +644,6 @@ IsHiiHandleRegistered (
   HiiPackageList = NULL;\r
   BufferSize = 0;\r
 \r
-  LocateHiiProtocols ();\r
-\r
   Status = mHiiDatabaseProt->ExportPackageLists (\r
              mHiiDatabaseProt,\r
              HiiHandle,\r
index 9713f32c7d847ad26ecd07ca49e0077048a76d5f..db3769a0303c67ce2375bb92d0c88dce2a377189 100644 (file)
@@ -24,6 +24,8 @@
   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
index ed816c1b3b9144386c4fa4f8cebf4ea49c2b0770..fbeb2dbdb699e6c617f1aa3fbeead659a4f9b2c3 100644 (file)
@@ -251,7 +251,7 @@ HiiLibGetString (
   ASSERT (!(*StringSize != 0 && String == NULL));\r
   ASSERT (IsHiiHandleRegistered (PackageList));\r
 \r
-  HiiLibGetCurrentLanguage (CurrentLang);\r
+  GetCurrentLanguage (CurrentLang);\r
 \r
   Status = mHiiStringProt->GetString (\r
                                mHiiStringProt,\r
index f9294eb876f67df685bd0375dc305fb1c1b76952..255939152abfe188fe3cad84b22c43d0395c637d 100644 (file)
@@ -21,8 +21,6 @@
 #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
@@ -32,6 +30,7 @@
 #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
@@ -53,14 +52,4 @@ IsHiiHandleRegistered (
   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
index a58878e5d348c0c83233f5ebdcd9bf3f6fb6967f..1acccb052261acc766ed630df300ff9fa701ffca 100644 (file)
@@ -1221,4 +1221,50 @@ FreeUnicodeStringTable (
   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
index b3006ab11e9f1d5aa4cf9cd63003dc9d03174e07..04c61c83f1491a591e80f9b8ead8a4ef11046c54 100644 (file)
@@ -53,7 +53,7 @@
   BaseMemoryLib\r
   BaseLib\r
   UefiBootServicesTableLib\r
-\r
+  UefiRuntimeServicesTableLib\r
 \r
 [Guids]\r
   gEfiEventReadyToBootGuid                      # ALWAYS_CONSUMED\r
@@ -72,6 +72,7 @@
 \r
 [Pcd.common]\r
   gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize\r
+  gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultPlatformLang\r
 \r
 [FeaturePcd.common]\r
   gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnosticsDisable\r
@@ -79,3 +80,7 @@
   gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnostics2Disable\r
   gEfiMdePkgTokenSpaceGuid.PcdComponentName2Disable\r
 \r
+[Guids]  \r
+  gEfiGlobalVariableGuid \r
+\r
+\r
index 886287f25d234e0f8d49666e7a3fbd7909c2dbf7..ff575f69fca57473425dea1f876a0374bce483ca 100644 (file)
 \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