Remove ShellHotFix.patch since the newest EDK shell snapshot has integrated the complete fix for RFC 4646 language match issue in drivers, dh, DevTree, etc.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8420 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
qhuang8 2009-06-01 08:16:33 +00:00
parent ae6a37f06b
commit 70ffafd4f2
2 changed files with 5 additions and 724 deletions

View File

@ -1,23 +1,15 @@
This is EDK style package and the following steps can help to build the package:
1. Download the newly EDK Shell project release EdkShell1.05.zip from the following URL and unzip it to
1. Download the newly EDK Shell project Efi-Shell-Dev-Snapshot-20090527.zip from the following URL and unzip it to
a local directory in workspace, for example, $(WORKSPACE)\Shell:
https://efi-shell.tianocore.org/servlets/ProjectDocumentList?folderID=52&expandFolder=52&folderID=0
https://efi-shell.tianocore.org/servlets/ProjectDocumentList?folderID=46&expandFolder=46&folderID=53
Alternatively, the EDK Shell source directory can be retrieved from the following SVN address:
https://efi-shell.tianocore.org/svn/efi-shell/trunk/Shell
SVN Revision r30 corresponds to EDK Shell 1.05 official release.
SVN Revision r33 corresponds to Efi-Shell-Dev-Snapshot-20090527.zip development snapshot.
2. Update EDK_SHELL_DIR macro in the [Defines] section in EdkShellPkg.dsc to point to
the directory containing the EDK Shell source directory, e.g. Shell.
the directory containing the EDK Shell source directory, e.g. $(WORKSPACE)\Shell.
3. The ShellHotFix.patch file solves the follow two issues in EDK Shell 1.05 release:
a. RFC3066 language compatibility issue in drivers command.
b. "CHAR8" compatibility issue in DmpStore, Edit command and shell script execution.
c. Three GUIDs had been retired, PrimaryConsoleInDeviceGuid, PrimaryConsoleOutDeviceGuid and PrimaryStandardErrorDeviceGuid.
Reconnect, Edit, HexEdit command are updated.
This patch will be integrated into the later official release.
4. The EDK II style DSC file is used to validate build EDK Shell source & EDK compatibility package and can generate the binaries in EdkShellBinPkg.
3. The EDK II style DSC file is used to validate build EDK Shell source & EDK compatibility package and can generate the binaries in EdkShellBinPkg.
To use this file, execute the following command under workspace to build EDK Shell source:
build -a IA32 -a X64 -a IPF -p EdkShellPkg\EdkShellPkg.dsc

View File

@ -1,711 +0,0 @@
Index: drivers/drivers.c
===================================================================
--- drivers/drivers.c (revision 30)
+++ drivers/drivers.c (working copy)
@@ -130,6 +130,7 @@
UINTN StringIndex;
UINTN Index;
CHAR8 *Language;
+ CHAR8 *PlatformLanguage;
UINTN DriverImageHandleCount;
EFI_HANDLE *DriverImageHandleBuffer;
UINTN HandleIndex;
@@ -152,6 +153,7 @@
SHELL_VAR_CHECK_PACKAGE ChkPck;
Language = NULL;
+ PlatformLanguage = NULL;
DriverImageHandleCount = 0;
DriverImageHandleBuffer = NULL;
IsHelp = FALSE;
@@ -241,7 +243,7 @@
goto Done;
}
- Language = LibGetVariableLang ();
+ Language = LibGetVariable (L"Lang", &gEfiGlobalVariableGuid);
if (Language == NULL) {
Language = (CHAR8 *)AllocateZeroPool(strlena(LanguageCodeEnglish) + 1);
if (Language == NULL) {
@@ -250,6 +252,15 @@
strcpya(Language, LanguageCodeEnglish);
}
+ PlatformLanguage = LibGetVariable (L"PlatformLang", &gEfiGlobalVariableGuid);
+ if (PlatformLanguage == NULL) {
+ PlatformLanguage = (CHAR8 *)AllocateZeroPool(strlena(PlatformLanguageCodeEnglish) + 1);
+ if (PlatformLanguage == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+ strcpya(PlatformLanguage, PlatformLanguageCodeEnglish);
+ }
+
Item = LibCheckVarGetFlag (&ChkPck, L"-l");
if (Item) {
if (Language != NULL) {
@@ -314,14 +325,6 @@
EFI_OPEN_PROTOCOL_GET_PROTOCOL
);
- ComponentName = NULL;
- ComponentName2 = NULL;
- Status = LibGetComponentNameProtocol (
- DriverImageHandleBuffer[Index],
- &ComponentName,
- &ComponentName2
- );
-
DiagnosticsStatus = BS->OpenProtocol (
DriverImageHandleBuffer[Index],
&gEfiDriverDiagnostics2ProtocolGuid,
@@ -418,37 +421,73 @@
} else {
PrintToken (STRING_TOKEN (STR_SHELLENV_PROTID_ONE_VAR_D), HiiHandle, NumberOfChildren);
}
-
- Status = EFI_SUCCESS;
+
DriverName = L"<UNKNOWN>";
- SupportedLanguage = NULL;
- if (ComponentName != NULL) {
- if (ComponentName->GetDriverName != NULL) {
- SupportedLanguage = LibConvertSupportedLanguage (ComponentName->SupportedLanguages, Language);
+ Status = BS->OpenProtocol (
+ DriverImageHandleBuffer[Index],
+ &gEfiComponentName2ProtocolGuid,
+ (VOID **) &ComponentName2,
+ NULL,
+ NULL,
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL
+ );
+ if (!EFI_ERROR (Status)) {
+ //
+ // Driver has Component Name 2 Protocol is available, we get the
+ // driver name var RFC 3066 language code
+ //
+ Status = ComponentName2->GetDriverName (
+ ComponentName2,
+ PlatformLanguage,
+ &DriverName
+ );
+ if (EFI_ERROR (Status)) {
+ //
+ // Current RFC3066 language code fails, we then extract the supported
+ // language from Component Name 2 protocol interface.
+ //
+ SupportedLanguage = ExtractSupportedLanguage(ComponentName2->SupportedLanguages, Language);
+ if (SupportedLanguage != NULL) {
+ Status = ComponentName2->GetDriverName (
+ ComponentName2,
+ SupportedLanguage,
+ &DriverName
+ );
+ FreePool(SupportedLanguage);
+ }
+ }
+ }
+ if (EFI_ERROR (Status)) {
+ //
+ // In case Component Name 2 protocol is not available or some error occurs
+ // when getting driver name from Component Name 2 protocol, we get driver
+ // name from Component Name protocol.
+ //
+ Status = BS->OpenProtocol (
+ DriverImageHandleBuffer[Index],
+ &gEfiComponentNameProtocolGuid,
+ (VOID **) &ComponentName,
+ NULL,
+ NULL,
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL
+ );
+ if (!EFI_ERROR (Status)) {
Status = ComponentName->GetDriverName (
ComponentName,
- SupportedLanguage,
+ Language,
&DriverName
);
}
- } else if (ComponentName2 != NULL) {
- if (ComponentName2->GetDriverName != NULL) {
- SupportedLanguage = LibConvertSupportedLanguage (ComponentName2->SupportedLanguages, Language);
- Status = ComponentName2->GetDriverName (
- ComponentName2,
- SupportedLanguage,
- &DriverName
- );
- }
}
- if (SupportedLanguage != NULL) {
- FreePool (SupportedLanguage);
- }
-
if (EFI_ERROR (Status)) {
+ //
+ // Fails to get driver name from either Component Name 2 & Component Name
+ // Protocol, we show "<UNKNOWN>" string as driver name.
+ //
DriverName = L"<UNKNOWN>";
}
+
for (StringIndex = 0; StringIndex < StrLen (DriverName) && StringIndex < 35; StringIndex++) {
FormattedDriverName[StringIndex] = DriverName[StringIndex];
}
@@ -491,6 +530,10 @@
FreePool (Language);
}
+ if (PlatformLanguage != NULL) {
+ FreePool (PlatformLanguage);
+ }
+
ShellCloseHandleEnumerator ();
LibCheckVarFreeVarList (&ChkPck);
LibUnInitializeStrings ();
Index: edit/libEditor.c
===================================================================
--- edit/libEditor.c (revision 30)
+++ edit/libEditor.c (working copy)
@@ -88,8 +88,6 @@
)
{
EFI_STATUS Status;
- EFI_HANDLE *HandleBuffer;
- UINTN HandleCount;
//
// basic initialization
@@ -117,38 +115,22 @@
);
//
- // Find mouse
+ // Find mouse in System Table ConsoleInHandle
//
- HandleBuffer = NULL;
- Status = LibLocateHandle (
- ByProtocol,
- &gEfiPrimaryConsoleInDeviceGuid,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
+ Status = BS->HandleProtocol (
+ In,
+ &gEfiSimplePointerProtocolGuid,
+ &MainEditor.MouseInterface
+ );
- if (!EFI_ERROR (Status)) {
- if (HandleCount > 0) {
- Status = BS->HandleProtocol (
- HandleBuffer[0],
- &gEfiSimplePointerProtocolGuid,
- &MainEditor.MouseInterface
- );
-
- if (EFI_ERROR (Status)) {
- MainEditor.MouseInterface = NULL;
- } else {
- MainEditor.MouseAccumulatorX = 0;
- MainEditor.MouseAccumulatorY = 0;
- MainEditor.MouseSupported = TRUE;
- }
- }
+ if (EFI_ERROR (Status)) {
+ MainEditor.MouseInterface = NULL;
+ } else {
+ MainEditor.MouseAccumulatorX = 0;
+ MainEditor.MouseAccumulatorY = 0;
+ MainEditor.MouseSupported = TRUE;
}
- if (HandleBuffer) {
- FreePool (HandleBuffer);
- }
//
// below will call the five components' init function
//
Index: edit/libFileBuffer.c
===================================================================
--- edit/libFileBuffer.c (revision 30)
+++ edit/libFileBuffer.c (working copy)
@@ -735,7 +735,7 @@
UINTN LineSize;
VOID *Buffer;
CHAR16 *UnicodeBuffer;
- CHAR8 *AsciiBuffer;
+ UINT8 *AsciiBuffer;
UINTN FileSize;
EFI_FILE_HANDLE Handle;
BOOLEAN CreateFile;
@@ -1047,7 +1047,7 @@
//
// Unicode file
//
- if (AsciiBuffer[0] == 0xff && AsciiBuffer[1] == 0xfe) {
+ if ((FileSize >= 2) && (*((UINT16 *) Buffer) == EFI_UNICODE_BYTE_ORDER_MARK)) {
//
// Unicode file's size should be even
//
Index: hexedit/libEditor.c
===================================================================
--- hexedit/libEditor.c (revision 30)
+++ hexedit/libEditor.c (working copy)
@@ -100,8 +100,6 @@
--*/
{
EFI_STATUS Status;
- EFI_HANDLE *HandleBuffer;
- UINTN HandleCount;
//
// basic initialization
@@ -129,36 +127,19 @@
&(HMainEditor.ScreenSize.Row)
);
- HandleBuffer = NULL;
- Status = LibLocateHandle (
- ByProtocol,
- &gEfiPrimaryConsoleInDeviceGuid,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
-
- if (!EFI_ERROR (Status)) {
-
- if (HandleCount > 0) {
- Status = BS->HandleProtocol (
- HandleBuffer[0],
- &gEfiSimplePointerProtocolGuid,
- &HMainEditor.MouseInterface
- );
- if (EFI_ERROR (Status)) {
- HMainEditor.MouseInterface = NULL;
- } else {
- HMainEditor.MouseAccumulatorX = 0;
- HMainEditor.MouseAccumulatorY = 0;
- HMainEditor.MouseSupported = TRUE;
- }
- }
+ Status = BS->HandleProtocol (
+ In,
+ &gEfiSimplePointerProtocolGuid,
+ &HMainEditor.MouseInterface
+ );
+ if (EFI_ERROR (Status)) {
+ HMainEditor.MouseInterface = NULL;
+ } else {
+ HMainEditor.MouseAccumulatorX = 0;
+ HMainEditor.MouseAccumulatorY = 0;
+ HMainEditor.MouseSupported = TRUE;
}
- if (HandleBuffer != NULL) {
- FreePool (HandleBuffer);
- }
//
// below will call the five components' init function
//
Index: Library/EfiShellLib.h
===================================================================
--- Library/EfiShellLib.h (revision 30)
+++ Library/EfiShellLib.h (working copy)
@@ -174,22 +174,23 @@
//
// Environment variable name constants
//
-#define VarLanguageCodes L"LangCodes"
-#define VarLanguage L"Lang"
-#define VarTimeout L"Timeout"
-#define VarConsoleIn L"ConIn"
-#define VarConsoleOut L"ConOut"
-#define VarErrorOut L"ErrOut"
-#define VarBootOption L"Boot%04x"
-#define VarBootOrder L"BootOrder"
-#define VarBootNext L"BootNext"
-#define VarBootCurrent L"BootCurrent"
-#define VarDriverOption L"Driver%04x"
-#define VarDriverOrder L"DriverOrder"
-#define VarConsoleInpDev L"ConInDev"
-#define VarConsoleOutDev L"ConOutDev"
-#define VarErrorOutDev L"ErrOutDev"
-#define LanguageCodeEnglish "eng"
+#define VarLanguageCodes L"LangCodes"
+#define VarLanguage L"Lang"
+#define VarTimeout L"Timeout"
+#define VarConsoleIn L"ConIn"
+#define VarConsoleOut L"ConOut"
+#define VarErrorOut L"ErrOut"
+#define VarBootOption L"Boot%04x"
+#define VarBootOrder L"BootOrder"
+#define VarBootNext L"BootNext"
+#define VarBootCurrent L"BootCurrent"
+#define VarDriverOption L"Driver%04x"
+#define VarDriverOrder L"DriverOrder"
+#define VarConsoleInpDev L"ConInDev"
+#define VarConsoleOutDev L"ConOutDev"
+#define VarErrorOutDev L"ErrOutDev"
+#define LanguageCodeEnglish "eng"
+#define PlatformLanguageCodeEnglish "en-US"
#define ISO_639_2_ENTRY_SIZE 3
#define RFC_3066_ENTRY_SIZE 12
@@ -333,4 +334,10 @@
IN CHAR8 *LangCode
);
+CHAR8 *
+ExtractSupportedLanguage (
+ IN CONST CHAR8 *SupportedLanguages,
+ IN CONST CHAR8 *Language
+ );
+
#endif
Index: Library/Misc.c
===================================================================
--- Library/Misc.c (revision 30)
+++ Library/Misc.c (working copy)
@@ -1905,13 +1905,13 @@
IN VOID *UserData
)
{
- CHAR8 *Data;
+ UINT8 *Data;
CHAR8 Val[50];
CHAR8 Str[20];
- CHAR8 c;
+ UINT8 c;
UINTN Size;
UINTN Index;
@@ -2271,3 +2271,76 @@
}
return Lang;
}
+
+CHAR8 *
+ExtractSupportedLanguage (
+ IN CONST CHAR8 *SupportedLanguages,
+ IN CONST CHAR8 *Language
+ )
+/*++
+
+ Routine Description:
+
+ This function matches the major language code (first two characters) in the
+ SupportedLanguages. The first language code in the SupportedLanguages that
+ matches first two characters of the input Language is returned. If there is no
+ such match, then NULL is returned.
+
+ Arguments:
+
+ SupportedLanguages - A Null-terminated ASCII string that contains one
+ or more supported language codes.
+
+ LangCode - A pointer to a Null-terminated ASCII string
+ array indicating the RFC 3066 language.
+
+ Returns:
+
+ The RFC3066 language code that matches the major language.
+
+--*/
+{
+ CONST CHAR8 *CurrentLanguage;
+ CHAR8 *SupportedLanguage;
+ UINTN LanguageLen;
+
+ CurrentLanguage = SupportedLanguages;
+
+ while (CurrentLanguage != '\0') {
+ //
+ // Search till the end of current language.
+ //
+ LanguageLen = 0;
+ while (CurrentLanguage[LanguageLen] != ';' && CurrentLanguage[LanguageLen] != '\0') {
+ LanguageLen++;
+ }
+
+ //
+ // should use AsciiStrnCmp(CurrentLanguage, Language, 2) == 0
+ //
+ if ((CurrentLanguage[0] == Language[0]) && (CurrentLanguage[1] == Language[1])) {
+ //
+ // Match the major language code, then return a new copy of
+ // NULL-terminated SupportedLanguage.
+ //
+ SupportedLanguage = AllocatePool (LanguageLen + 1);
+ CopyMem (SupportedLanguage, (VOID *) CurrentLanguage, LanguageLen);
+
+ SupportedLanguage[LanguageLen] = '\0';
+
+ return SupportedLanguage;
+ }
+ //
+ // Make CurrentLangue point to the next candiate language code.
+ //
+ CurrentLanguage += LanguageLen;
+ if (*CurrentLanguage == ';') {
+ CurrentLanguage++;
+ }
+ }
+
+ return NULL;
+}
+
+
+
Index: shellenv/batch.c
===================================================================
--- shellenv/batch.c (revision 30)
+++ shellenv/batch.c (working copy)
@@ -2074,17 +2074,17 @@
--*/
{
//
- // UNICODE byte-order-mark is two bytes
+ // UNICODE byte-order-mark is 16 bits
//
- CHAR8 Buffer8[2];
+ UINT16 Uint16;
UINTN BufSize;
EFI_STATUS Status;
//
// Read the first two bytes to check for byte order mark
//
- BufSize = sizeof (Buffer8);
- Status = File->Read (File, &BufSize, Buffer8);
+ BufSize = sizeof (Uint16);
+ Status = File->Read (File, &BufSize, &Uint16);
if (EFI_ERROR (Status)) {
return Status;
}
@@ -2098,9 +2098,8 @@
// otherwise assume it is ASCII. UNICODE byte order mark on
// IA little endian is first byte 0xff and second byte 0xfe
//
- if ((Buffer8[0] | (Buffer8[1] << 8)) == EFI_UNICODE_BYTE_ORDER_MARK) {
+ if ((BufSize == 2) && (Uint16 == EFI_UNICODE_BYTE_ORDER_MARK)) {
*IsAscii = FALSE;
-
} else {
*IsAscii = TRUE;
}
Index: shellenv/Connect.c
===================================================================
--- shellenv/Connect.c (revision 30)
+++ shellenv/Connect.c (working copy)
@@ -831,6 +831,16 @@
return Status;
}
+ //
+ // Close proxy console before disconnect all devices.
+ //
+ SEnvCloseConsoleProxy (
+ ST->ConsoleInHandle,
+ &ST->ConIn,
+ ST->ConsoleOutHandle,
+ &ST->ConOut
+ );
+
for (Index = 0; Index < AllHandleCount; Index++) {
//
// Check whether the handle is still in handle database
@@ -1004,7 +1014,6 @@
VOID
SEnvConnectConsole (
CHAR16 *VariableName,
- EFI_GUID *PrimaryGuid,
EFI_GUID *ConsoleGuid,
EFI_HANDLE *ConsoleHandle,
VOID **ConsoleInterface
@@ -1018,27 +1027,36 @@
EFI_HANDLE *AllHandleBuffer;
VOID *Interface;
- *ConsoleHandle = NULL;
- *ConsoleInterface = NULL;
ConsoleIndex = 0;
+ AllHandleBuffer = NULL;
DevicePath = LibGetVariable (VariableName, &gEfiGlobalVariableGuid);
- if (DevicePath != NULL) {
- SEnvConnectDevicePath (DevicePath);
- FreePool (DevicePath);
+ if (DevicePath == NULL) {
+ //
+ // If no any device defined in EFI variable, do nothing
+ //
+ return;
}
- AllHandleBuffer = NULL;
- Status = BS->LocateHandleBuffer (
- ByProtocol,
- PrimaryGuid,
- NULL,
- &AllHandleCount,
- &AllHandleBuffer
- );
- if (!EFI_ERROR (Status) && AllHandleCount > 0) {
- *ConsoleHandle = AllHandleBuffer[0];
- } else if (*ConsoleHandle == NULL) {
+ //
+ // Connect all console devices
+ //
+ SEnvConnectDevicePath (DevicePath);
+ FreePool (DevicePath);
+
+ Status = EFI_NOT_FOUND;
+ //
+ // Check ConsoleHandle validation whatever it was updated or not.
+ //
+ if (*ConsoleHandle != NULL) {
+ Status = BS->HandleProtocol (
+ *ConsoleHandle,
+ ConsoleGuid,
+ &Interface
+ );
+ }
+
+ if (EFI_ERROR (Status)) {
AllHandleBuffer = NULL;
Status = BS->LocateHandleBuffer (
ByProtocol,
@@ -1063,16 +1081,16 @@
&gEfiDevicePathProtocolGuid,
&Interface
);
- if (EFI_ERROR (Status)) {
+ if (!EFI_ERROR (Status)) {
ConsoleIndex = Index;
break;
}
}
+
+ *ConsoleHandle = AllHandleBuffer[ConsoleIndex];
}
}
- *ConsoleHandle = AllHandleBuffer[ConsoleIndex];
-
if (*ConsoleHandle != NULL) {
BS->HandleProtocol (
*ConsoleHandle,
@@ -1081,7 +1099,7 @@
);
}
- if (AllHandleBuffer) {
+ if (AllHandleBuffer != NULL) {
FreePool (AllHandleBuffer);
}
}
@@ -1189,8 +1207,7 @@
EFI_STATUS Status;
//
- // Check current ConIn and ConOut to ensure it is the ConsoleProxy
- // Otherwise, the Console should not be close
+ // Check current ConIn and ConOut to judge it is the ConsoleProxy
//
Status = SEnvCheckConsoleProxy (
ST->ConsoleInHandle,
@@ -1203,23 +1220,21 @@
// Indicate the Console is replaced by redirection operation
// It is not safe to connect Console here
//
- if (EFI_ERROR (Status)) {
- return ;
+ if (!EFI_ERROR (Status)) {
+ //
+ // It is proxy console, to prevent the proxy console form being restored to original console,
+ // close it temporary before connect all console
+ //
+ SEnvCloseConsoleProxy (
+ ST->ConsoleInHandle,
+ &ST->ConIn,
+ ST->ConsoleOutHandle,
+ &ST->ConOut
+ );
}
- //
- // To prevent the proxy console form being restored to original console,
- // close it temporary before connect all console
- //
- SEnvCloseConsoleProxy (
- ST->ConsoleInHandle,
- &ST->ConIn,
- ST->ConsoleOutHandle,
- &ST->ConOut
- );
SEnvConnectConsole (
VarErrorOut,
- &gEfiPrimaryStandardErrorDeviceGuid,
&gEfiSimpleTextOutProtocolGuid,
&ST->StandardErrorHandle,
(VOID **) &ST->StdErr
@@ -1227,7 +1242,6 @@
SEnvConnectConsole (
VarConsoleOut,
- &gEfiPrimaryConsoleOutDeviceGuid,
&gEfiSimpleTextOutProtocolGuid,
&ST->ConsoleOutHandle,
(VOID **) &ST->ConOut
@@ -1235,7 +1249,6 @@
SEnvConnectConsole (
VarConsoleIn,
- &gEfiPrimaryConsoleInDeviceGuid,
&gEfiSimpleTextInProtocolGuid,
&ST->ConsoleInHandle,
(VOID **) &ST->ConIn
@@ -1254,6 +1267,8 @@
SetCrc (&ST->Hdr);
}
+
+
EFI_STATUS
EFIAPI
SEnvCmdReconnect (
Index: SmbiosView/PrintInfo.c
===================================================================
--- SmbiosView/PrintInfo.c (revision 30)
+++ SmbiosView/PrintInfo.c (working copy)
@@ -1779,7 +1779,7 @@
//
// MaxSize is determined by follow formula
//
- MaxSize = 1 << Size;
+ MaxSize = (UINTN) 1 << Size;
PrintToken (STRING_TOKEN (STR_SMBIOSVIEW_PRINTINFO_ONE_VAR_MB), HiiHandle, MaxSize);
if (Option >= SHOW_DETAIL) {
Index: SmbiosView/Smbios.h
===================================================================
--- SmbiosView/Smbios.h (revision 30)
+++ SmbiosView/Smbios.h (working copy)
@@ -34,11 +34,6 @@
extern EFI_HII_HANDLE HiiHandle;
-#define EFI_SMBIOS_TABLE_GUID \
- { \
- 0xeb9d2d31, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d \
- }
-extern EFI_GUID gEfiSmbiosTableGuid;
#endif