From e71cb45263cd3e03887d24de81653f3b4b02d510 Mon Sep 17 00:00:00 2001 From: Tapan Shah Date: Mon, 23 Jun 2014 18:36:44 +0000 Subject: ShellPkg: Move UpdateMapping() out of Map command and added to UefiShellCommandLib library. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Tapan Shah Reviewed-by: Jaben Carsey git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15580 6f19259b-4bc3-4df7-8a09-765794883524 --- .../UefiShellCommandLib/UefiShellCommandLib.c | 115 +++++++++++++++++++-- ShellPkg/Library/UefiShellLevel2CommandsLib/Map.c | 105 +------------------ 2 files changed, 111 insertions(+), 109 deletions(-) (limited to 'ShellPkg/Library') diff --git a/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c b/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c index 48be39f832..18ae9f3384 100644 --- a/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c +++ b/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c @@ -1,6 +1,7 @@ /** @file Provides interface to shell internal functions for shell commands. + (C) Copyright 2013-2014, Hewlett-Packard Development Company, L.P. Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -1198,12 +1199,114 @@ ShellCommandCreateInitialMappingsAndPaths( } return (EFI_SUCCESS); -} - -/** - Converts a SHELL_FILE_HANDLE to an EFI_FILE_PROTOCOL*. - - @param[in] Handle The SHELL_FILE_HANDLE to convert. +} + +/** + Add mappings for any devices without one. Do not change any existing maps. + + @retval EFI_SUCCESS The operation was successful. +**/ +EFI_STATUS +EFIAPI +ShellCommandUpdateMapping ( + VOID + ) +{ + EFI_STATUS Status; + EFI_HANDLE *HandleList; + UINTN Count; + EFI_DEVICE_PATH_PROTOCOL **DevicePathList; + CHAR16 *NewDefaultName; + CHAR16 *NewConsistName; + EFI_DEVICE_PATH_PROTOCOL **ConsistMappingTable; + + HandleList = NULL; + Status = EFI_SUCCESS; + + // + // remove mappings that represent removed devices. + // + + // + // Find each handle with Simple File System + // + HandleList = GetHandleListByProtocol(&gEfiSimpleFileSystemProtocolGuid); + if (HandleList != NULL) { + // + // Do a count of the handles + // + for (Count = 0 ; HandleList[Count] != NULL ; Count++); + + // + // Get all Device Paths + // + DevicePathList = AllocateZeroPool(sizeof(EFI_DEVICE_PATH_PROTOCOL*) * Count); + ASSERT(DevicePathList != NULL); + + for (Count = 0 ; HandleList[Count] != NULL ; Count++) { + DevicePathList[Count] = DevicePathFromHandle(HandleList[Count]); + } + + // + // Sort all DevicePaths + // + PerformQuickSort(DevicePathList, Count, sizeof(EFI_DEVICE_PATH_PROTOCOL*), DevicePathCompare); + + ShellCommandConsistMappingInitialize(&ConsistMappingTable); + + // + // Assign new Mappings to remainders + // + for (Count = 0 ; HandleList[Count] != NULL && !EFI_ERROR(Status); Count++) { + // + // Skip ones that already have + // + if (gEfiShellProtocol->GetMapFromDevicePath(&DevicePathList[Count]) != NULL) { + continue; + } + // + // Get default name + // + NewDefaultName = ShellCommandCreateNewMappingName(MappingTypeFileSystem); + ASSERT(NewDefaultName != NULL); + + // + // Call shell protocol SetMap function now... + // + Status = gEfiShellProtocol->SetMap(DevicePathList[Count], NewDefaultName); + + if (!EFI_ERROR(Status)) { + // + // Now do consistent name + // + NewConsistName = ShellCommandConsistMappingGenMappingName(DevicePathList[Count], ConsistMappingTable); + if (NewConsistName != NULL) { + Status = gEfiShellProtocol->SetMap(DevicePathList[Count], NewConsistName); + FreePool(NewConsistName); + } + } + + FreePool(NewDefaultName); + } + ShellCommandConsistMappingUnInitialize(ConsistMappingTable); + SHELL_FREE_NON_NULL(HandleList); + SHELL_FREE_NON_NULL(DevicePathList); + + HandleList = NULL; + } else { + Count = (UINTN)-1; + } + // + // Do it all over again for gEfiBlockIoProtocolGuid + // + + return (Status); +} + +/** + Converts a SHELL_FILE_HANDLE to an EFI_FILE_PROTOCOL*. + + @param[in] Handle The SHELL_FILE_HANDLE to convert. @return a EFI_FILE_PROTOCOL* representing the same file. **/ diff --git a/ShellPkg/Library/UefiShellLevel2CommandsLib/Map.c b/ShellPkg/Library/UefiShellLevel2CommandsLib/Map.c index 4763cfccca..5329be4192 100644 --- a/ShellPkg/Library/UefiShellLevel2CommandsLib/Map.c +++ b/ShellPkg/Library/UefiShellLevel2CommandsLib/Map.c @@ -1,6 +1,7 @@ /** @file Main file for map shell level 2 command. + (C) Copyright 2013-2014, Hewlett-Packard Development Company, L.P. Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -117,108 +118,6 @@ SearchList( return (FALSE); } -/** - Add mappings for any devices without one. Do not change any existing maps. - - @retval EFI_SUCCESS The operation was successful. -**/ -EFI_STATUS -EFIAPI -UpdateMapping ( - VOID - ) -{ - EFI_STATUS Status; - EFI_HANDLE *HandleList; - UINTN Count; - EFI_DEVICE_PATH_PROTOCOL **DevicePathList; - CHAR16 *NewDefaultName; - CHAR16 *NewConsistName; - EFI_DEVICE_PATH_PROTOCOL **ConsistMappingTable; - - HandleList = NULL; - Status = EFI_SUCCESS; - - // - // remove mappings that represent removed devices. - // - - // - // Find each handle with Simple File System - // - HandleList = GetHandleListByProtocol(&gEfiSimpleFileSystemProtocolGuid); - if (HandleList != NULL) { - // - // Do a count of the handles - // - for (Count = 0 ; HandleList[Count] != NULL ; Count++); - - // - // Get all Device Paths - // - DevicePathList = AllocateZeroPool(sizeof(EFI_DEVICE_PATH_PROTOCOL*) * Count); - ASSERT(DevicePathList != NULL); - - for (Count = 0 ; HandleList[Count] != NULL ; Count++) { - DevicePathList[Count] = DevicePathFromHandle(HandleList[Count]); - } - - // - // Sort all DevicePaths - // - PerformQuickSort(DevicePathList, Count, sizeof(EFI_DEVICE_PATH_PROTOCOL*), DevicePathCompare); - - ShellCommandConsistMappingInitialize(&ConsistMappingTable); - - // - // Assign new Mappings to remainders - // - for (Count = 0 ; HandleList[Count] != NULL && !EFI_ERROR(Status); Count++) { - // - // Skip ones that already have - // - if (gEfiShellProtocol->GetMapFromDevicePath(&DevicePathList[Count]) != NULL) { - continue; - } - // - // Get default name - // - NewDefaultName = ShellCommandCreateNewMappingName(MappingTypeFileSystem); - ASSERT(NewDefaultName != NULL); - - // - // Call shell protocol SetMap function now... - // - Status = gEfiShellProtocol->SetMap(DevicePathList[Count], NewDefaultName); - - if (!EFI_ERROR(Status)) { - // - // Now do consistent name - // - NewConsistName = ShellCommandConsistMappingGenMappingName(DevicePathList[Count], ConsistMappingTable); - if (NewConsistName != NULL) { - Status = gEfiShellProtocol->SetMap(DevicePathList[Count], NewConsistName); - FreePool(NewConsistName); - } - } - - FreePool(NewDefaultName); - } - ShellCommandConsistMappingUnInitialize(ConsistMappingTable); - SHELL_FREE_NON_NULL(HandleList); - SHELL_FREE_NON_NULL(DevicePathList); - - HandleList = NULL; - } else { - Count = (UINTN)-1; - } - // - // Do it all over again for gEfiBlockIoProtocolGuid - // - - return (Status); -} - /** Determine what type of device is represented and return it's string. The string is in allocated memory and must be callee freed. The HII is is listed below. @@ -1199,7 +1098,7 @@ ShellCommandRunMap ( // // Do the Update // - Status = UpdateMapping(); + Status = ShellCommandUpdateMapping (); if (EFI_ERROR(Status)) { ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_UK), gShellLevel2HiiHandle, Status); ShellStatus = SHELL_UNSUPPORTED; -- cgit v1.2.3