-diff -urN --binary -a -x CVS Oldv1.5/Application/Shell/Library/EfiShellLib.h Newv1.5/Application/Shell/Library/EfiShellLib.h
---- Oldv1.5/Application/Shell/Library/EfiShellLib.h 2008-06-10 13:46:56.000000000 +0800
-+++ Newv1.5/Application/Shell/Library/EfiShellLib.h 2008-07-09 11:45:28.026417300 +0800
-@@ -174,22 +174,23 @@
- //\r
- // Environment variable name constants\r
- //\r
--#define VarLanguageCodes L"LangCodes"\r
--#define VarLanguage L"Lang"\r
--#define VarTimeout L"Timeout"\r
--#define VarConsoleIn L"ConIn"\r
--#define VarConsoleOut L"ConOut"\r
--#define VarErrorOut L"ErrOut"\r
--#define VarBootOption L"Boot%04x"\r
--#define VarBootOrder L"BootOrder"\r
--#define VarBootNext L"BootNext"\r
--#define VarBootCurrent L"BootCurrent"\r
--#define VarDriverOption L"Driver%04x"\r
--#define VarDriverOrder L"DriverOrder"\r
--#define VarConsoleInpDev L"ConInDev"\r
--#define VarConsoleOutDev L"ConOutDev"\r
--#define VarErrorOutDev L"ErrOutDev"\r
--#define LanguageCodeEnglish "eng"\r
-+#define VarLanguageCodes L"LangCodes"\r
-+#define VarLanguage L"Lang"\r
-+#define VarTimeout L"Timeout"\r
-+#define VarConsoleIn L"ConIn"\r
-+#define VarConsoleOut L"ConOut"\r
-+#define VarErrorOut L"ErrOut"\r
-+#define VarBootOption L"Boot%04x"\r
-+#define VarBootOrder L"BootOrder"\r
-+#define VarBootNext L"BootNext"\r
-+#define VarBootCurrent L"BootCurrent"\r
-+#define VarDriverOption L"Driver%04x"\r
-+#define VarDriverOrder L"DriverOrder"\r
-+#define VarConsoleInpDev L"ConInDev"\r
-+#define VarConsoleOutDev L"ConOutDev"\r
-+#define VarErrorOutDev L"ErrOutDev"\r
-+#define LanguageCodeEnglish "eng"\r
-+#define PlatformLanguageCodeEnglish "en-US"\r
- \r
- #define ISO_639_2_ENTRY_SIZE 3\r
- #define RFC_3066_ENTRY_SIZE 12\r
-@@ -333,4 +334,10 @@
- IN CHAR8 *LangCode\r
- );\r
- \r
-+CHAR8 *\r
-+ExtractSupportedLanguage (\r
-+ IN CONST CHAR8 *SupportedLanguages,\r
-+ IN CONST CHAR8 *Language\r
-+ );\r
-+\r
- #endif\r
-diff -urN --binary -a -x CVS Oldv1.5/Application/Shell/Library/Misc.c Newv1.5/Application/Shell/Library/Misc.c
---- Oldv1.5/Application/Shell/Library/Misc.c 2008-06-10 13:46:56.000000000 +0800
-+++ Newv1.5/Application/Shell/Library/Misc.c 2008-07-09 11:45:28.088917700 +0800
-@@ -2271,3 +2271,76 @@
- }\r
- return Lang;\r
- }\r
-+\r
-+CHAR8 *\r
-+ExtractSupportedLanguage (\r
-+ IN CONST CHAR8 *SupportedLanguages,\r
-+ IN CONST CHAR8 *Language\r
-+ )\r
-+/*++\r
-+\r
-+ Routine Description:\r
-+\r
-+ This function matches the major language code (first two characters) in the\r
-+ SupportedLanguages. The first language code in the SupportedLanguages that\r
-+ matches first two characters of the input Language is returned. If there is no\r
-+ such match, then NULL is returned.\r
-+\r
-+ Arguments:\r
-+\r
-+ SupportedLanguages - A Null-terminated ASCII string that contains one\r
-+ or more supported language codes. \r
-+\r
-+ LangCode - A pointer to a Null-terminated ASCII string\r
-+ array indicating the RFC 3066 language.\r
-+\r
-+ Returns:\r
-+\r
-+ The RFC3066 language code that matches the major language. \r
-+\r
-+--*/\r
-+{\r
-+ CONST CHAR8 *CurrentLanguage;\r
-+ CHAR8 *SupportedLanguage;\r
-+ UINTN LanguageLen;\r
-+\r
-+ CurrentLanguage = SupportedLanguages;\r
-+\r
-+ while (CurrentLanguage != '\0') {\r
-+ //\r
-+ // Search till the end of current language.\r
-+ // \r
-+ LanguageLen = 0;\r
-+ while (CurrentLanguage[LanguageLen] != ';' && CurrentLanguage[LanguageLen] != '\0') {\r
-+ LanguageLen++;\r
-+ }\r
-+\r
-+ //\r
-+ // should use AsciiStrnCmp(CurrentLanguage, Language, 2) == 0\r
-+ // \r
-+ if ((CurrentLanguage[0] == Language[0]) && (CurrentLanguage[1] == Language[1])) {\r
-+ //\r
-+ // Match the major language code, then return a new copy of\r
-+ // NULL-terminated SupportedLanguage.\r
-+ //\r
-+ SupportedLanguage = AllocatePool (LanguageLen + 1);\r
-+ CopyMem (SupportedLanguage, (VOID *) CurrentLanguage, LanguageLen);\r
-+\r
-+ SupportedLanguage[LanguageLen] = '\0';\r
-+\r
-+ return SupportedLanguage;\r
-+ }\r
-+ //\r
-+ // Make CurrentLangue point to the next candiate language code.\r
-+ // \r
-+ CurrentLanguage += LanguageLen;\r
-+ if (*CurrentLanguage == ';') {\r
-+ CurrentLanguage++;\r
-+ }\r
-+ }\r
-+\r
-+ return NULL;\r
-+}\r
-+\r
-+\r
-+\r
-diff -urN --binary -a -x CVS Oldv1.5/Application/Shell/SmbiosView/PrintInfo.c Newv1.5/Application/Shell/SmbiosView/PrintInfo.c
---- Oldv1.5/Application/Shell/SmbiosView/PrintInfo.c 2007-11-26 14:01:00.000000000 +0800
-+++ Newv1.5/Application/Shell/SmbiosView/PrintInfo.c 2008-07-09 12:36:07.646190700 +0800
-@@ -1779,7 +1779,7 @@
- //\r
- // MaxSize is determined by follow formula\r
- //\r
-- MaxSize = 1 << Size;\r
-+ MaxSize = (UINTN) 1 << Size;\r
- PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_VAR_MB), HiiHandle, MaxSize);\r
- \r
- if (Option >= SHOW_DETAIL) {\r
-diff -urN --binary -a -x CVS Oldv1.5/Application/Shell/SmbiosView/Smbios.h Newv1.5/Application/Shell/SmbiosView/Smbios.h
---- Oldv1.5/Application/Shell/SmbiosView/Smbios.h 2006-03-07 16:20:46.000000000 +0800
-+++ Newv1.5/Application/Shell/SmbiosView/Smbios.h 2008-07-09 10:29:41.548254500 +0800
-@@ -34,11 +34,6 @@
- \r
- extern EFI_HII_HANDLE HiiHandle;\r
- \r
--#define EFI_SMBIOS_TABLE_GUID \\r
-- { \\r
-- 0xeb9d2d31, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d \\r
-- }\r
- \r
--extern EFI_GUID gEfiSmbiosTableGuid;\r
- \r
- #endif\r
-diff -urN --binary -a -x CVS Oldv1.5/Application/Shell/drivers/drivers.c Newv1.5/Application/Shell/drivers/drivers.c
---- Oldv1.5/Application/Shell/drivers/drivers.c 2008-05-26 13:22:52.000000000 +0800
-+++ Newv1.5/Application/Shell/drivers/drivers.c 2008-07-09 12:36:16.552668700 +0800
-@@ -130,6 +130,7 @@
- UINTN StringIndex;\r
- UINTN Index;\r
- CHAR8 *Language;\r
-+ CHAR8 *PlatformLanguage;\r
- UINTN DriverImageHandleCount;\r
- EFI_HANDLE *DriverImageHandleBuffer;\r
- UINTN HandleIndex;\r
-@@ -152,6 +153,7 @@
- SHELL_VAR_CHECK_PACKAGE ChkPck;\r
- \r
- Language = NULL;\r
-+ PlatformLanguage = NULL;\r
- DriverImageHandleCount = 0;\r
- DriverImageHandleBuffer = NULL;\r
- IsHelp = FALSE;\r
-@@ -241,7 +243,7 @@
- goto Done;\r
- }\r
- \r
-- Language = LibGetVariableLang ();\r
-+ Language = LibGetVariable (L"Lang", &gEfiGlobalVariableGuid);\r
- if (Language == NULL) {\r
- Language = (CHAR8 *)AllocateZeroPool(strlena(LanguageCodeEnglish) + 1);\r
- if (Language == NULL) {\r
-@@ -250,6 +252,15 @@
- strcpya(Language, LanguageCodeEnglish);\r
- }\r
- \r
-+ PlatformLanguage = LibGetVariable (L"PlatformLang", &gEfiGlobalVariableGuid);\r
-+ if (PlatformLanguage == NULL) {\r
-+ PlatformLanguage = (CHAR8 *)AllocateZeroPool(strlena(PlatformLanguageCodeEnglish) + 1);\r
-+ if (PlatformLanguage == NULL) {\r
-+ return EFI_OUT_OF_RESOURCES;\r
-+ }\r
-+ strcpya(PlatformLanguage, PlatformLanguageCodeEnglish);\r
-+ }\r
-+\r
- Item = LibCheckVarGetFlag (&ChkPck, L"-l");\r
- if (Item) {\r
- if (Language != NULL) {\r
-@@ -314,14 +325,6 @@
- EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
- );\r
- \r
-- ComponentName = NULL;\r
-- ComponentName2 = NULL;\r
-- Status = LibGetComponentNameProtocol (\r
-- DriverImageHandleBuffer[Index],\r
-- &ComponentName,\r
-- &ComponentName2\r
-- );\r
--\r
- DiagnosticsStatus = BS->OpenProtocol (\r
- DriverImageHandleBuffer[Index],\r
- &gEfiDriverDiagnostics2ProtocolGuid,\r
-@@ -418,37 +421,73 @@
- } else {\r
- PrintToken (STRING_TOKEN (STR_SHELLENV_PROTID_ONE_VAR_D), HiiHandle, NumberOfChildren);\r
- }\r
--\r
-- Status = EFI_SUCCESS;\r
-+ \r
- DriverName = L"<UNKNOWN>";\r
-- SupportedLanguage = NULL;\r
-- if (ComponentName != NULL) {\r
-- if (ComponentName->GetDriverName != NULL) {\r
-- SupportedLanguage = LibConvertSupportedLanguage (ComponentName->SupportedLanguages, Language);\r
-+ Status = BS->OpenProtocol (\r
-+ DriverImageHandleBuffer[Index],\r
-+ &gEfiComponentName2ProtocolGuid,\r
-+ (VOID **) &ComponentName2,\r
-+ NULL,\r
-+ NULL,\r
-+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-+ );\r
-+ if (!EFI_ERROR (Status)) {\r
-+ //\r
-+ // Driver has Component Name 2 Protocol is available, we get the\r
-+ // driver name var RFC 3066 language code\r
-+ // \r
-+ Status = ComponentName2->GetDriverName (\r
-+ ComponentName2,\r
-+ PlatformLanguage,\r
-+ &DriverName\r
-+ );\r
-+ if (EFI_ERROR (Status)) {\r
-+ //\r
-+ // Current RFC3066 language code fails, we then extract the supported\r
-+ // language from Component Name 2 protocol interface.\r
-+ // \r
-+ SupportedLanguage = ExtractSupportedLanguage(ComponentName2->SupportedLanguages, Language);\r
-+ if (SupportedLanguage != NULL) {\r
-+ Status = ComponentName2->GetDriverName (\r
-+ ComponentName2,\r
-+ SupportedLanguage,\r
-+ &DriverName\r
-+ );\r
-+ FreePool(SupportedLanguage);\r
-+ }\r
-+ }\r
-+ }\r
-+ if (EFI_ERROR (Status)) {\r
-+ //\r
-+ // In case Component Name 2 protocol is not available or some error occurs\r
-+ // when getting driver name from Component Name 2 protocol, we get driver\r
-+ // name from Component Name protocol.\r
-+ // \r
-+ Status = BS->OpenProtocol (\r
-+ DriverImageHandleBuffer[Index],\r
-+ &gEfiComponentNameProtocolGuid,\r
-+ (VOID **) &ComponentName,\r
-+ NULL,\r
-+ NULL,\r
-+ EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
-+ );\r
-+ if (!EFI_ERROR (Status)) {\r
- Status = ComponentName->GetDriverName (\r
- ComponentName,\r
-- SupportedLanguage,\r
-+ Language,\r
- &DriverName\r
- );\r
- }\r
-- } else if (ComponentName2 != NULL) {\r
-- if (ComponentName2->GetDriverName != NULL) {\r
-- SupportedLanguage = LibConvertSupportedLanguage (ComponentName2->SupportedLanguages, Language);\r
-- Status = ComponentName2->GetDriverName (\r
-- ComponentName2,\r
-- SupportedLanguage,\r
-- &DriverName\r
-- );\r
-- }\r
- }\r
-- if (SupportedLanguage != NULL) {\r
-- FreePool (SupportedLanguage);\r
-- }\r
--\r
- if (EFI_ERROR (Status)) {\r
-+ //\r
-+ // Fails to get driver name from either Component Name 2 & Component Name\r
-+ // Protocol, we show "<UNKNOWN>" string as driver name.\r
-+ // \r
- DriverName = L"<UNKNOWN>";\r
- }\r
- \r
-+ \r
- for (StringIndex = 0; StringIndex < StrLen (DriverName) && StringIndex < 35; StringIndex++) {\r
- FormattedDriverName[StringIndex] = DriverName[StringIndex];\r
- }\r
-@@ -491,6 +530,10 @@
- FreePool (Language);\r
- }\r
- \r
-+ if (PlatformLanguage != NULL) {\r
-+ FreePool (PlatformLanguage);\r
-+ }\r
-+\r
- ShellCloseHandleEnumerator ();\r
- LibCheckVarFreeVarList (&ChkPck);\r
- LibUnInitializeStrings ();\r