mirror of https://github.com/acidanthera/audk.git
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
This commit is contained in:
parent
130f16022c
commit
c0a23f8c37
|
@ -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
|
||||
);
|
||||
|
||||
|
||||
//
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue