/** @file\r
Main file for Unload shell Driver1 function.\r
\r
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
- 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
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
+ Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#include "UefiShellDriver1CommandsLib.h"\r
\r
-/**\r
- Function to translate the EFI_MEMORY_TYPE into a string.\r
-\r
- @param[in] Memory The memory type.\r
-\r
- @retval A string representation of the type allocated from BS Pool.\r
-**/\r
-CHAR16*\r
-EFIAPI\r
-ConvertMemoryType (\r
- IN CONST EFI_MEMORY_TYPE Memory\r
- )\r
-{\r
- CHAR16 *RetVal;\r
- RetVal = NULL;\r
-\r
- switch (Memory) {\r
- case EfiReservedMemoryType: StrnCatGrow(&RetVal, NULL, L"EfiReservedMemoryType", 0); break;\r
- case EfiLoaderCode: StrnCatGrow(&RetVal, NULL, L"EfiLoaderCode", 0); break;\r
- case EfiLoaderData: StrnCatGrow(&RetVal, NULL, L"EfiLoaderData", 0); break;\r
- case EfiBootServicesCode: StrnCatGrow(&RetVal, NULL, L"EfiBootServicesCode", 0); break;\r
- case EfiBootServicesData: StrnCatGrow(&RetVal, NULL, L"EfiBootServicesData", 0); break;\r
- case EfiRuntimeServicesCode: StrnCatGrow(&RetVal, NULL, L"EfiRuntimeServicesCode", 0); break;\r
- case EfiRuntimeServicesData: StrnCatGrow(&RetVal, NULL, L"EfiRuntimeServicesData", 0); break;\r
- case EfiConventionalMemory: StrnCatGrow(&RetVal, NULL, L"EfiConventionalMemory", 0); break;\r
- case EfiUnusableMemory: StrnCatGrow(&RetVal, NULL, L"EfiUnusableMemory", 0); break;\r
- case EfiACPIReclaimMemory: StrnCatGrow(&RetVal, NULL, L"EfiACPIReclaimMemory", 0); break;\r
- case EfiACPIMemoryNVS: StrnCatGrow(&RetVal, NULL, L"EfiACPIMemoryNVS", 0); break;\r
- case EfiMemoryMappedIO: StrnCatGrow(&RetVal, NULL, L"EfiMemoryMappedIO", 0); break;\r
- case EfiMemoryMappedIOPortSpace: StrnCatGrow(&RetVal, NULL, L"EfiMemoryMappedIOPortSpace", 0); break;\r
- case EfiPalCode: StrnCatGrow(&RetVal, NULL, L"EfiPalCode", 0); break;\r
- case EfiMaxMemoryType: StrnCatGrow(&RetVal, NULL, L"EfiMaxMemoryType", 0); break;\r
- default: ASSERT(FALSE);\r
- }\r
- return (RetVal);\r
-}\r
-\r
/**\r
Function to dump LoadedImage info from TheHandle.\r
\r
@retval EFI_INVALID_PARAMETER The handle did not have LoadedImage\r
**/\r
EFI_STATUS\r
-EFIAPI\r
DumpLoadedImageProtocolInfo (\r
- IN EFI_HANDLE TheHandle\r
+ IN EFI_HANDLE TheHandle\r
)\r
{\r
- EFI_LOADED_IMAGE_PROTOCOL *Image;\r
- EFI_STATUS Status;\r
- EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *DevicePathToText;\r
- CHAR16 *DevicePathText;\r
- CHAR16 *CodeTypeText;\r
- CHAR16 *DataTypeText;\r
- CHAR8 *PdbPointer;\r
-\r
- Image = NULL;\r
-\r
- Status = gBS->OpenProtocol(TheHandle, &gEfiLoadedImageProtocolGuid, (VOID**)&Image, gImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
- if (EFI_ERROR(Status)) {\r
- return (EFI_INVALID_PARAMETER);\r
- }\r
+ CHAR16 *TheString;\r
\r
- Status = gBS->LocateProtocol(\r
- &gEfiDevicePathToTextProtocolGuid,\r
- NULL,\r
- (VOID**)&DevicePathToText);\r
- //\r
- // we now have the device path to text protocol\r
- //\r
- if (!EFI_ERROR(Status)) {\r
- DevicePathText = DevicePathToText->ConvertDevicePathToText(Image->FilePath, TRUE, TRUE);\r
- } else {\r
- DevicePathText = NULL;\r
- }\r
+ TheString = GetProtocolInformationDump (TheHandle, &gEfiLoadedImageProtocolGuid, TRUE);\r
+\r
+ ShellPrintEx (-1, -1, L"%s", TheString);\r
\r
- CodeTypeText = ConvertMemoryType(Image->ImageCodeType);\r
- DataTypeText = ConvertMemoryType(Image->ImageDataType);\r
- PdbPointer = (CHAR8*)PeCoffLoaderGetPdbPointer(Image->ImageBase);\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_UNLOAD_VERBOSE), gShellDriver1HiiHandle,\r
- ConvertHandleToHandleIndex(TheHandle),\r
- TheHandle,\r
- Image,\r
- Image->ParentHandle,\r
- Image->SystemTable,\r
- Image->DeviceHandle,\r
- DevicePathText,\r
- PdbPointer,\r
- Image->ImageBase,\r
- Image->ImageSize,\r
- CodeTypeText,\r
- DataTypeText\r
- );\r
-\r
- SHELL_FREE_NON_NULL(DevicePathText);\r
- SHELL_FREE_NON_NULL(CodeTypeText);\r
- SHELL_FREE_NON_NULL(DataTypeText);\r
+ SHELL_FREE_NON_NULL (TheString);\r
\r
return (EFI_SUCCESS);\r
}\r
\r
-STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
- {L"-n", TypeFlag},\r
- {L"-v", TypeFlag},\r
- {L"-verbose", TypeFlag},\r
- {NULL, TypeMax}\r
- };\r
+STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
+ { L"-n", TypeFlag },\r
+ { L"-v", TypeFlag },\r
+ { L"-verbose", TypeFlag },\r
+ { NULL, TypeMax }\r
+};\r
\r
/**\r
Function for 'unload' command.\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_STATUS Status;\r
- LIST_ENTRY *Package;\r
- CHAR16 *ProblemParam;\r
- SHELL_STATUS ShellStatus;\r
- EFI_HANDLE TheHandle;\r
- CONST CHAR16 *Param1;\r
- SHELL_PROMPT_RESPONSE *Resp;\r
-\r
- ShellStatus = SHELL_SUCCESS;\r
- Package = NULL;\r
- Resp = NULL;\r
+ EFI_STATUS Status;\r
+ LIST_ENTRY *Package;\r
+ CHAR16 *ProblemParam;\r
+ SHELL_STATUS ShellStatus;\r
+ EFI_HANDLE TheHandle;\r
+ CONST CHAR16 *Param1;\r
+ SHELL_PROMPT_RESPONSE *Resp;\r
+ UINT64 Value;\r
+\r
+ ShellStatus = SHELL_SUCCESS;\r
+ Package = NULL;\r
+ Resp = NULL;\r
+ Value = 0;\r
+ TheHandle = NULL;\r
\r
//\r
// initialize the shell lib (we must be in non-auto-init...)\r
//\r
- Status = ShellInitialize();\r
- ASSERT_EFI_ERROR(Status);\r
+ Status = ShellInitialize ();\r
+ ASSERT_EFI_ERROR (Status);\r
\r
//\r
// parse the command line\r
//\r
Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);\r
- if (EFI_ERROR(Status)) {\r
- if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, ProblemParam);\r
- FreePool(ProblemParam);\r
+ if (EFI_ERROR (Status)) {\r
+ if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, L"unload", ProblemParam);\r
+ FreePool (ProblemParam);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
- ASSERT(FALSE);\r
+ ASSERT (FALSE);\r
}\r
} else {\r
- if (ShellCommandLineGetCount(Package) > 2){\r
+ if (ShellCommandLineGetCount (Package) > 2) {\r
//\r
// error for too many parameters\r
//\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle);\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle, L"unload");\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else if (ShellCommandLineGetCount(Package) < 2) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDriver1HiiHandle);\r
+ } else if (ShellCommandLineGetCount (Package) < 2) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDriver1HiiHandle, L"unload");\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
- Param1 = ShellCommandLineGetRawValue(Package, 1);\r
- if (Param1 == NULL || ConvertHandleIndexToHandle(StrHexToUintn(Param1)) == NULL){\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, Param1);\r
+ Param1 = ShellCommandLineGetRawValue (Package, 1);\r
+ if (Param1 != NULL) {\r
+ Status = ShellConvertStringToUint64 (Param1, &Value, TRUE, FALSE);\r
+ TheHandle = ConvertHandleIndexToHandle ((UINTN)Value);\r
+ }\r
+\r
+ if (EFI_ERROR (Status) || (Param1 == NULL) || (TheHandle == NULL)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"unload", Param1);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
- TheHandle = ConvertHandleIndexToHandle(StrHexToUintn(Param1));\r
- ASSERT(TheHandle != NULL);\r
- if (ShellCommandLineGetFlag(Package, L"-v") || ShellCommandLineGetFlag(Package, L"-verbose")) {\r
- DumpLoadedImageProtocolInfo(TheHandle);\r
+ ASSERT (TheHandle != NULL);\r
+ if (ShellCommandLineGetFlag (Package, L"-v") || ShellCommandLineGetFlag (Package, L"-verbose")) {\r
+ DumpLoadedImageProtocolInfo (TheHandle);\r
}\r
- \r
- if (!ShellCommandLineGetFlag(Package, L"-n")) {\r
- Status = ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_UNLOAD_CONF), gShellDriver1HiiHandle, StrHexToUintn(Param1));\r
- Status = ShellPromptForResponse(ShellPromptResponseTypeYesNo, NULL, (VOID**)&Resp);\r
+\r
+ if (!ShellCommandLineGetFlag (Package, L"-n")) {\r
+ Status = ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_UNLOAD_CONF), gShellDriver1HiiHandle, (UINTN)TheHandle);\r
+ Status = ShellPromptForResponse (ShellPromptResponseTypeYesNo, NULL, (VOID **)&Resp);\r
}\r
- if (ShellCommandLineGetFlag(Package, L"-n") || (Resp != NULL && *Resp == ShellPromptResponseYes)) {\r
- Status = gBS->UnloadImage(TheHandle);\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_HANDLE_RESULT), gShellDriver1HiiHandle, L"Unload", StrHexToUintn(Param1), Status);\r
+\r
+ if (ShellCommandLineGetFlag (Package, L"-n") || ((Resp != NULL) && (*Resp == ShellPromptResponseYes))) {\r
+ Status = gBS->UnloadImage (TheHandle);\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_HANDLE_RESULT), gShellDriver1HiiHandle, L"Unload", (UINTN)TheHandle, Status);\r
}\r
- SHELL_FREE_NON_NULL(Resp);\r
+\r
+ SHELL_FREE_NON_NULL (Resp);\r
}\r
}\r
}\r
+\r
if (ShellStatus == SHELL_SUCCESS) {\r
if (Status == EFI_SECURITY_VIOLATION) {\r
ShellStatus = SHELL_SECURITY_VIOLATION;\r
} else if (Status == EFI_INVALID_PARAMETER) {\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else if (EFI_ERROR(Status)) {\r
+ } else if (EFI_ERROR (Status)) {\r
ShellStatus = SHELL_NOT_FOUND;\r
}\r
}\r
\r
if (Package != NULL) {\r
- ShellCommandLineFreeVarList(Package);\r
+ ShellCommandLineFreeVarList (Package);\r
}\r
\r
return (ShellStatus);\r