-diff -urN Shell1.04\Shell/Library/DPath.c EdkCompatibilityPkg\Shell/Library/DPath.c\r
---- Shell1.04\Shell/Library/DPath.c 2007-11-15 14:38:52.000000000 +0800\r
-+++ EdkCompatibilityPkg\Shell/Library/DPath.c 2008-02-25 13:38:07.000000000 +0800\r
-@@ -1,6 +1,6 @@\r
- /*++\r
+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
--Copyright (c) 2005 - 2007, Intel Corporation \r
-+Copyright (c) 2005 - 2008, Intel Corporation \r
- All rights reserved. This program and the accompanying materials \r
- are licensed and made available under the terms and conditions of the BSD License \r
- which accompanies this distribution. The full text of the license may be found at \r
-@@ -1294,17 +1294,8 @@\r
- ASSERT (Str != NULL);\r
- ASSERT (DevPath != NULL);\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
-- if (ST->Hdr.Revision > 0x00020000) {\r
-- FvPath = DevPath;\r
-- CatPrint (Str, L"Fv(%g)", &FvPath->NameGuid);\r
-- } else if (ST->Hdr.Revision < 0x00020000) {\r
-- //\r
-- // MEDIA_FV_FILEPATH_DP_EFI_1_10 == MEDIA_FV_DP == 0x06\r
-- //\r
-- _DevPathFvFilePath (Str, DevPath); \r
-- } else {\r
-- _DevPathNodeUnknown (Str, DevPath);\r
-- }\r
-+ FvPath = DevPath;\r
-+ CatPrint (Str, L"Fv(%g)", &FvPath->NameGuid);\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
-@@ -2006,16 +1997,11 @@\r
- #if (EFI_SPECIFICATION_VERSION > 0x00020000)\r
- MEDIA_FW_VOL_FILEPATH_DEVICE_PATH_EFI_2_00 *FvDevicePathNodeUefi_2_00;\r
- \r
-- if (ST->Hdr.Revision > 0x00020000) {\r
-+ if (ST->Hdr.Revision != 0x00020000) {\r
- if (DevicePathType (&FvDevicePathNode->Header) == MEDIA_DEVICE_PATH &&\r
- DevicePathSubType (&FvDevicePathNode->Header) == MEDIA_FV_FILEPATH_DP) {\r
- return &FvDevicePathNode->NameGuid;\r
- } \r
-- } else if (ST->Hdr.Revision < 0x00020000) {\r
-- if (DevicePathType (&FvDevicePathNode->Header) == MEDIA_DEVICE_PATH &&\r
-- DevicePathSubType (&FvDevicePathNode->Header) == MEDIA_FV_FILEPATH_DP_EFI_1_10) {\r
-- return &FvDevicePathNode->NameGuid;\r
-- } \r
- } else {\r
- FvDevicePathNodeUefi_2_00 = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH_EFI_2_00 *)FvDevicePathNode;\r
- if (DevicePathType (&FvDevicePathNodeUefi_2_00->Piwg.Header) == MEDIA_DEVICE_PATH &&\r
-diff -urN Shell1.04\Shell/Library/DPath.h EdkCompatibilityPkg\Shell/Library/DPath.h\r
---- Shell1.04\Shell/Library/DPath.h 2007-11-14 22:48:14.000000000 +0800\r
-+++ EdkCompatibilityPkg\Shell/Library/DPath.h 2008-02-25 13:38:07.000000000 +0800\r
-@@ -1,6 +1,6 @@\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
--Copyright (c) 2005 - 2007, Intel Corporation \r
-+Copyright (c) 2005 - 2008, Intel Corporation \r
- All rights reserved. This program and the accompanying materials \r
- are licensed and made available under the terms and conditions of the BSD License \r
- which accompanies this distribution. The full text of the license may be found at \r
-@@ -161,11 +161,6 @@\r
+ extern EFI_HII_HANDLE HiiHandle;\r
\r
- #if (EFI_SPECIFICATION_VERSION > 0x00020000)\r
- //\r
--// For EFI1.10 FV file device path\r
--//\r
--#define MEDIA_FV_FILEPATH_DP_EFI_1_10 0x06\r
--\r
--//\r
- // For UEFI2.0 FV file device path\r
- //\r
- typedef struct {\r
-diff -urN Shell1.04\Shell/Library/FileIO.c EdkCompatibilityPkg\Shell/Library/FileIO.c\r
---- Shell1.04\Shell/Library/FileIO.c 2006-03-15 11:54:44.000000000 +0800\r
-+++ EdkCompatibilityPkg\Shell/Library/FileIO.c 2008-03-24 13:44:52.000000000 +0800\r
-@@ -1,6 +1,6 @@\r
- /*++\r
+-#define EFI_SMBIOS_TABLE_GUID \\r
+- { \\r
+- 0xeb9d2d31, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d \\r
+- }\r
\r
--Copyright (c) 2005, Intel Corporation \r
-+Copyright (c) 2005 - 2008, Intel Corporation \r
- All rights reserved. This program and the accompanying materials \r
- are licensed and made available under the terms and conditions of the BSD License \r
- which accompanies this distribution. The full text of the license may be found at \r
-@@ -253,14 +253,16 @@\r
+-extern EFI_GUID gEfiSmbiosTableGuid;\r
\r
- --*/\r
- {\r
-- EFI_STATUS Status;\r
-- EFI_FILE_HANDLE LastHandle;\r
-- FILEPATH_DEVICE_PATH *FilePathNode;\r
-+ EFI_STATUS Status;\r
-+ EFI_FILE_HANDLE LastHandle;\r
-+ FILEPATH_DEVICE_PATH *FilePathNode;\r
-+ EFI_DEVICE_PATH_PROTOCOL *AlignedFilePath;\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
- ASSERT (FilePath != NULL);\r
- ASSERT (DeviceHandle != NULL);\r
- ASSERT (FileHandle != NULL);\r
-- \r
-+\r
-+ AlignedFilePath = NULL;\r
- //\r
- // File the file system for this file path\r
- //\r
-@@ -274,12 +276,26 @@\r
- *FileHandle = LibOpenRoot (*DeviceHandle);\r
- Status = *FileHandle ? EFI_SUCCESS : EFI_UNSUPPORTED;\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
-+ if (EFI_ERROR (Status)) {\r
-+ return Status;\r
-+ }\r
-+\r
-+ //\r
-+ // Duplicate FilePath to make sure it is aligned so that\r
-+ // FilePathNode->PathName below is 16-bit aligned.\r
-+ //\r
-+ AlignedFilePath = DuplicateDevicePath(*FilePath);\r
-+ if (AlignedFilePath == NULL) {\r
-+ (*FileHandle)->Close (*FileHandle);\r
-+ *FileHandle = NULL;\r
-+ return EFI_OUT_OF_RESOURCES;\r
-+ }\r
-+ FilePathNode = (FILEPATH_DEVICE_PATH *)AlignedFilePath;\r
- //\r
- // To access as a file system, the file path should only\r
- // contain file path components. Follow the file path nodes\r
- // and find the target file\r
- //\r
-- FilePathNode = (FILEPATH_DEVICE_PATH *) *FilePath;\r
- while (!IsDevicePathEnd (&FilePathNode->Header)) {\r
- //\r
- // For file system access each node should be a file path component\r
-@@ -332,6 +348,7 @@\r
- if (EFI_ERROR (Status)) {\r
- *FileHandle = NULL;\r
- }\r
-+ FreePool(AlignedFilePath);\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
- return Status;\r
- }\r
-diff -urN Shell1.04\Shell/shellenv/var.c EdkCompatibilityPkg\Shell/shellenv/var.c\r
---- Shell1.04\Shell/shellenv/var.c 2006-03-07 16:20:44.000000000 +0800\r
-+++ EdkCompatibilityPkg\Shell/shellenv/var.c 2008-02-25 13:38:08.000000000 +0800\r
-@@ -389,8 +389,15 @@\r
- {\r
- UINTN Size;\r
- VARIABLE_ID *Var;\r
-+ UINTN RoundUpValueSize;\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
-- Size = sizeof (VARIABLE_ID) + StrSize (Name) + ValueSize;\r
-+ //\r
-+ // Variable buffer layout: VARIABLE_ID + Value + Name\r
-+ // We need to round up the variable size to make sure Name is aligned (for IPF).\r
-+ //\r
-+ RoundUpValueSize = (ValueSize % 2) ? (ValueSize + 1) : ValueSize; \r
-+\r
-+ Size = sizeof (VARIABLE_ID) + StrSize (Name) + RoundUpValueSize;\r
- Var = AllocateZeroPool (Size);\r
- if (Var == NULL) {\r
- return NULL;\r
-@@ -398,7 +405,7 @@\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
- Var->Signature = VARIABLE_SIGNATURE;\r
- Var->u.Value = ((UINT8 *) Var) + sizeof (VARIABLE_ID);\r
-- Var->Name = (CHAR16 *) (Var->u.Value + ValueSize);\r
-+ Var->Name = (CHAR16 *) (Var->u.Value + RoundUpValueSize);\r
- Var->ValueSize = ValueSize;\r
- CopyMem (Var->u.Value, Value, ValueSize);\r
- StrCpy (Var->Name, Name);\r
-diff -urN Shell1.04\Shell/ver/Ver.inf EdkCompatibilityPkg\Shell/ver/Ver.inf\r
---- Shell1.04\Shell/ver/Ver.inf 2007-03-04 23:30:48.000000000 +0800\r
-+++ EdkCompatibilityPkg\Shell/ver/Ver.inf 2008-03-03 13:36:05.000000000 +0800\r
-@@ -1,6 +1,6 @@\r
- #/*++\r
- #\r
--# Copyright (c) 2005 - 2007, Intel Corporation \r
-+# Copyright (c) 2005 - 2008, Intel Corporation \r
- # All rights reserved. This program and the accompanying materials \r
- # are licensed and made available under the terms and conditions of the BSD License \r
- # which accompanies this distribution. The full text of the license may be found at \r
-@@ -45,7 +45,7 @@\r
- Ver.c\r
- Ver.h \r
- \r
--[sources.ia32|x64]\r
-+[sources.ia32,sources.x64]\r
- ia32\ver32.c\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
- [sources.ipf]\r
++ if (PlatformLanguage != NULL) {\r
++ FreePool (PlatformLanguage);\r
++ }\r
++\r
+ ShellCloseHandleEnumerator ();\r
+ LibCheckVarFreeVarList (&ChkPck);\r
+ LibUnInitializeStrings ();\r