From c0a23f8c370ad671fa8c67cf5047e9f8df5306c6 Mon Sep 17 00:00:00 2001 From: qhuang8 Date: Tue, 9 Sep 2008 05:36:40 +0000 Subject: Remove the prototype of internal functions to avoid the sync efforts. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5861 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Core/Dxe/Image.h | 84 ---------- MdeModulePkg/Core/Dxe/Image/Image.c | 286 ++++++++++++++++---------------- MdeModulePkg/Core/Dxe/Image/ImageFile.c | 62 ++++--- 3 files changed, 171 insertions(+), 261 deletions(-) (limited to 'MdeModulePkg/Core/Dxe') diff --git a/MdeModulePkg/Core/Dxe/Image.h b/MdeModulePkg/Core/Dxe/Image.h index b2f8b88b79..040941db14 100644 --- a/MdeModulePkg/Core/Dxe/Image.h +++ b/MdeModulePkg/Core/Dxe/Image.h @@ -161,90 +161,6 @@ CoreCloseImageFile ( IN IMAGE_FILE_HANDLE *ImageFileHandle ); -// -// Image processing worker functions -// - -/** - Search a handle to a device on a specified device path that supports a specified protocol, - interface of that protocol on that handle is another output. - - @param Protocol The protocol to search for - @param FilePath The specified device path - @param Interface Interface of the protocol on the handle - @param Handle The handle to the device on the specified device - path that supports the protocol. - - @return Status code. - -**/ -EFI_STATUS -CoreDevicePathToInterface ( - IN EFI_GUID *Protocol, - IN EFI_DEVICE_PATH_PROTOCOL **FilePath, - OUT VOID **Interface, - OUT EFI_HANDLE *Handle - ); - - -/** - Loads, relocates, and invokes a PE/COFF image - - @param BootPolicy If TRUE, indicates that the request originates - from the boot manager, and that the boot - manager is attempting to load FilePath as a - boot selection. - @param Pe32Handle The handle of PE32 image - @param Image PE image to be loaded - @param DstBuffer The buffer to store the image - @param EntryPoint A pointer to the entry point - @param Attribute The bit mask of attributes to set for the load - PE image - - @retval EFI_SUCCESS The file was loaded, relocated, and invoked - @retval EFI_OUT_OF_RESOURCES There was not enough memory to load and - relocate the PE/COFF file - @retval EFI_INVALID_PARAMETER Invalid parameter - @retval EFI_BUFFER_TOO_SMALL Buffer for image is too small - -**/ -EFI_STATUS -CoreLoadPeImage ( - IN BOOLEAN BootPolicy, - IN VOID *Pe32Handle, - IN LOADED_IMAGE_PRIVATE_DATA *Image, - IN EFI_PHYSICAL_ADDRESS DstBuffer OPTIONAL, - OUT EFI_PHYSICAL_ADDRESS *EntryPoint OPTIONAL, - IN UINT32 Attribute - ); - - -/** - Get the image's private data from its handle. - - @param ImageHandle The image handle - - @return Return the image private data associated with ImageHandle. - -**/ -LOADED_IMAGE_PRIVATE_DATA * -CoreLoadedImageInfo ( - IN EFI_HANDLE ImageHandle - ); - - -/** - Unloads EFI image from memory. - - @param Image EFI image - @param FreePage Free allocated pages - -**/ -VOID -CoreUnloadAndCloseImage ( - IN LOADED_IMAGE_PRIVATE_DATA *Image, - IN BOOLEAN FreePage - ); // diff --git a/MdeModulePkg/Core/Dxe/Image/Image.c b/MdeModulePkg/Core/Dxe/Image/Image.c index 6e34ffd3db..4826a959f8 100644 --- a/MdeModulePkg/Core/Dxe/Image/Image.c +++ b/MdeModulePkg/Core/Dxe/Image/Image.c @@ -566,6 +566,147 @@ CoreLoadedImageInfo ( } +/** + Unloads EFI image from memory. + + @param Image EFI image + @param FreePage Free allocated pages + +**/ +VOID +CoreUnloadAndCloseImage ( + IN LOADED_IMAGE_PRIVATE_DATA *Image, + IN BOOLEAN FreePage + ) +{ + EFI_STATUS Status; + UINTN HandleCount; + EFI_HANDLE *HandleBuffer; + UINTN HandleIndex; + EFI_GUID **ProtocolGuidArray; + UINTN ArrayCount; + UINTN ProtocolIndex; + EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *OpenInfo; + UINTN OpenInfoCount; + UINTN OpenInfoIndex; + + if (Image->Ebc != NULL) { + // + // If EBC protocol exists we must perform cleanups for this image. + // + Image->Ebc->UnloadImage (Image->Ebc, Image->Handle); + } + + // + // Unload image, free Image->ImageContext->ModHandle + // + PeCoffLoaderUnloadImage (&Image->ImageContext); + + // + // Free our references to the image handle + // + if (Image->Handle != NULL) { + + Status = CoreLocateHandleBuffer ( + AllHandles, + NULL, + NULL, + &HandleCount, + &HandleBuffer + ); + if (!EFI_ERROR (Status)) { + for (HandleIndex = 0; HandleIndex < HandleCount; HandleIndex++) { + Status = CoreProtocolsPerHandle ( + HandleBuffer[HandleIndex], + &ProtocolGuidArray, + &ArrayCount + ); + if (!EFI_ERROR (Status)) { + for (ProtocolIndex = 0; ProtocolIndex < ArrayCount; ProtocolIndex++) { + Status = CoreOpenProtocolInformation ( + HandleBuffer[HandleIndex], + ProtocolGuidArray[ProtocolIndex], + &OpenInfo, + &OpenInfoCount + ); + if (!EFI_ERROR (Status)) { + for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; OpenInfoIndex++) { + if (OpenInfo[OpenInfoIndex].AgentHandle == Image->Handle) { + Status = CoreCloseProtocol ( + HandleBuffer[HandleIndex], + ProtocolGuidArray[ProtocolIndex], + Image->Handle, + OpenInfo[OpenInfoIndex].ControllerHandle + ); + } + } + if (OpenInfo != NULL) { + CoreFreePool(OpenInfo); + } + } + } + if (ProtocolGuidArray != NULL) { + CoreFreePool(ProtocolGuidArray); + } + } + } + if (HandleBuffer != NULL) { + CoreFreePool (HandleBuffer); + } + } + + CoreRemoveDebugImageInfoEntry (Image->Handle); + + Status = CoreUninstallProtocolInterface ( + Image->Handle, + &gEfiLoadedImageDevicePathProtocolGuid, + Image->LoadedImageDevicePath + ); + + Status = CoreUninstallProtocolInterface ( + Image->Handle, + &gEfiLoadedImageProtocolGuid, + &Image->Info + ); + + } + + if (Image->RuntimeData != NULL) { + if (Image->RuntimeData->Link.ForwardLink != NULL) { + // + // Remove the Image from the Runtime Image list as we are about to Free it! + // + RemoveEntryList (&Image->RuntimeData->Link); + } + CoreFreePool (Image->RuntimeData); + } + + // + // Free the Image from memory + // + if ((Image->ImageBasePage != 0) && FreePage) { + CoreFreePages (Image->ImageBasePage, Image->NumberOfPages); + } + + // + // Done with the Image structure + // + if (Image->Info.FilePath != NULL) { + CoreFreePool (Image->Info.FilePath); + } + + if (Image->LoadedImageDevicePath != NULL) { + CoreFreePool (Image->LoadedImageDevicePath); + } + + if (Image->FixupData != NULL) { + CoreFreePool (Image->FixupData); + } + + CoreFreePool (Image); +} + + /** Loads an EFI image into memory and returns a handle to the image. @@ -1102,151 +1243,6 @@ CoreStartImage ( return Status; } - - -/** - Unloads EFI image from memory. - - @param Image EFI image - @param FreePage Free allocated pages - -**/ -VOID -CoreUnloadAndCloseImage ( - IN LOADED_IMAGE_PRIVATE_DATA *Image, - IN BOOLEAN FreePage - ) -{ - EFI_STATUS Status; - UINTN HandleCount; - EFI_HANDLE *HandleBuffer; - UINTN HandleIndex; - EFI_GUID **ProtocolGuidArray; - UINTN ArrayCount; - UINTN ProtocolIndex; - EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *OpenInfo; - UINTN OpenInfoCount; - UINTN OpenInfoIndex; - - if (Image->Ebc != NULL) { - // - // If EBC protocol exists we must perform cleanups for this image. - // - Image->Ebc->UnloadImage (Image->Ebc, Image->Handle); - } - - // - // Unload image, free Image->ImageContext->ModHandle - // - PeCoffLoaderUnloadImage (&Image->ImageContext); - - // - // Free our references to the image handle - // - if (Image->Handle != NULL) { - - Status = CoreLocateHandleBuffer ( - AllHandles, - NULL, - NULL, - &HandleCount, - &HandleBuffer - ); - if (!EFI_ERROR (Status)) { - for (HandleIndex = 0; HandleIndex < HandleCount; HandleIndex++) { - Status = CoreProtocolsPerHandle ( - HandleBuffer[HandleIndex], - &ProtocolGuidArray, - &ArrayCount - ); - if (!EFI_ERROR (Status)) { - for (ProtocolIndex = 0; ProtocolIndex < ArrayCount; ProtocolIndex++) { - Status = CoreOpenProtocolInformation ( - HandleBuffer[HandleIndex], - ProtocolGuidArray[ProtocolIndex], - &OpenInfo, - &OpenInfoCount - ); - if (!EFI_ERROR (Status)) { - for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; OpenInfoIndex++) { - if (OpenInfo[OpenInfoIndex].AgentHandle == Image->Handle) { - Status = CoreCloseProtocol ( - HandleBuffer[HandleIndex], - ProtocolGuidArray[ProtocolIndex], - Image->Handle, - OpenInfo[OpenInfoIndex].ControllerHandle - ); - } - } - if (OpenInfo != NULL) { - CoreFreePool(OpenInfo); - } - } - } - if (ProtocolGuidArray != NULL) { - CoreFreePool(ProtocolGuidArray); - } - } - } - if (HandleBuffer != NULL) { - CoreFreePool (HandleBuffer); - } - } - - CoreRemoveDebugImageInfoEntry (Image->Handle); - - Status = CoreUninstallProtocolInterface ( - Image->Handle, - &gEfiLoadedImageDevicePathProtocolGuid, - Image->LoadedImageDevicePath - ); - - Status = CoreUninstallProtocolInterface ( - Image->Handle, - &gEfiLoadedImageProtocolGuid, - &Image->Info - ); - - } - - if (Image->RuntimeData != NULL) { - if (Image->RuntimeData->Link.ForwardLink != NULL) { - // - // Remove the Image from the Runtime Image list as we are about to Free it! - // - RemoveEntryList (&Image->RuntimeData->Link); - } - CoreFreePool (Image->RuntimeData); - } - - // - // Free the Image from memory - // - if ((Image->ImageBasePage != 0) && FreePage) { - CoreFreePages (Image->ImageBasePage, Image->NumberOfPages); - } - - // - // Done with the Image structure - // - if (Image->Info.FilePath != NULL) { - CoreFreePool (Image->Info.FilePath); - } - - if (Image->LoadedImageDevicePath != NULL) { - CoreFreePool (Image->LoadedImageDevicePath); - } - - if (Image->FixupData != NULL) { - CoreFreePool (Image->FixupData); - } - - CoreFreePool (Image); -} - - - - /** Terminates the currently loaded EFI image and returns control to boot services. diff --git a/MdeModulePkg/Core/Dxe/Image/ImageFile.c b/MdeModulePkg/Core/Dxe/Image/ImageFile.c index a95496f9c5..4a8d1034a5 100644 --- a/MdeModulePkg/Core/Dxe/Image/ImageFile.c +++ b/MdeModulePkg/Core/Dxe/Image/ImageFile.c @@ -14,6 +14,36 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include "DxeMain.h" +/** + Search a handle to a device on a specified device path that supports a specified protocol, + interface of that protocol on that handle is another output. + + @param Protocol The protocol to search for + @param FilePath The specified device path + @param Interface Interface of the protocol on the handle + @param Handle The handle to the device on the specified device + path that supports the protocol. + + @return Status code. + +**/ +EFI_STATUS +CoreDevicePathToInterface ( + IN EFI_GUID *Protocol, + IN EFI_DEVICE_PATH_PROTOCOL **FilePath, + OUT VOID **Interface, + OUT EFI_HANDLE *Handle + ) +{ + EFI_STATUS Status; + + Status = CoreLocateDevicePath (Protocol, FilePath, Handle); + if (!EFI_ERROR (Status)) { + Status = CoreHandleProtocol (*Handle, Protocol, Interface); + } + return Status; +} + /** Opens a file for (simple) reading. The simple read abstraction @@ -377,38 +407,6 @@ CoreReadImageFile ( return EFI_SUCCESS; } - -/** - Search a handle to a device on a specified device path that supports a specified protocol, - interface of that protocol on that handle is another output. - - @param Protocol The protocol to search for - @param FilePath The specified device path - @param Interface Interface of the protocol on the handle - @param Handle The handle to the device on the specified device - path that supports the protocol. - - @return Status code. - -**/ -EFI_STATUS -CoreDevicePathToInterface ( - IN EFI_GUID *Protocol, - IN EFI_DEVICE_PATH_PROTOCOL **FilePath, - OUT VOID **Interface, - OUT EFI_HANDLE *Handle - ) -{ - EFI_STATUS Status; - - Status = CoreLocateDevicePath (Protocol, FilePath, Handle); - if (!EFI_ERROR (Status)) { - Status = CoreHandleProtocol (*Handle, Protocol, Interface); - } - return Status; -} - - /** Helper function called as part of the code needed to allocate the proper sized buffer for various -- cgit v1.2.3