return (EFI_NOT_FOUND);\r
}\r
\r
+/**\r
+ Get best support language for this driver.\r
+ \r
+ First base on the current platform used language to search,Second base on the \r
+ default language to search. The caller need to free the buffer of the best \r
+ language.\r
+\r
+ @param[in] SupportedLanguages The support languages for this driver.\r
+ @param[in] Iso639Language Whether get language for ISO639.\r
+\r
+ @return The best support language for this driver.\r
+**/\r
+CHAR8 *\r
+GetBestLanguageForDriver (\r
+ IN CONST CHAR8 *SupportedLanguages, \r
+ IN BOOLEAN Iso639Language\r
+ )\r
+{\r
+ CHAR8 *LanguageVariable;\r
+ CHAR8 *BestLanguage;\r
+\r
+ LanguageVariable = GetVariable (Iso639Language ? L"Lang" : L"PlatformLang", &gEfiGlobalVariableGuid);\r
+\r
+ BestLanguage = GetBestLanguage(\r
+ SupportedLanguages,\r
+ Iso639Language,\r
+ (LanguageVariable != NULL) ? LanguageVariable : "",\r
+ Iso639Language ? "en" : "en-US",\r
+ NULL\r
+ );\r
+\r
+ if (LanguageVariable != NULL) {\r
+ FreePool (LanguageVariable);\r
+ }\r
+\r
+ return BestLanguage;\r
+}\r
+\r
/**\r
Function to retrieve the driver name (if possible) from the ComponentName or\r
ComponentName2 protocol\r
EFI_COMPONENT_NAME2_PROTOCOL *CompNameStruct;\r
EFI_STATUS Status;\r
CHAR16 *RetVal;\r
+ CHAR8 *BestLang;\r
+\r
+ BestLang = NULL;\r
\r
Status = gBS->OpenProtocol(\r
TheHandle,\r
NULL,\r
EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
if (!EFI_ERROR(Status)) {\r
+ if (Language == NULL) {\r
+ BestLang = GetBestLanguageForDriver (CompNameStruct->SupportedLanguages, FALSE);\r
+ Language = BestLang;\r
+ }\r
Status = CompNameStruct->GetDriverName(CompNameStruct, (CHAR8*)Language, &RetVal);\r
+\r
+ if (BestLang != NULL) {\r
+ FreePool (BestLang);\r
+ BestLang = NULL;\r
+ }\r
if (!EFI_ERROR(Status)) {\r
return (RetVal);\r
}\r
NULL,\r
EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
if (!EFI_ERROR(Status)) {\r
+ if (Language == NULL) {\r
+ BestLang = GetBestLanguageForDriver (CompNameStruct->SupportedLanguages, FALSE);\r
+ Language = BestLang;\r
+ }\r
Status = CompNameStruct->GetDriverName(CompNameStruct, (CHAR8*)Language, &RetVal);\r
+ \r
+ if (BestLang != NULL) {\r
+ FreePool (BestLang);\r
+ }\r
if (!EFI_ERROR(Status)) {\r
return (RetVal);\r
}\r