Clean up DxeCore to remove duplicate memory allocation & device path utility services in Library.c.DxeCore should use MemoryAllocationLib & DevicePathLib for these API.
Minor cleanup the coding style: #include <DxeMain.h> should be changed to #include "DxeMain.h" since "DxeMain.h" is not pubic header fie. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5742 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -12,7 +12,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include <DxeMain.h>
|
||||
#include "DxeMain.h"
|
||||
|
||||
UINTN mErrorLevel = DEBUG_ERROR | DEBUG_LOAD;
|
||||
|
||||
@@ -82,128 +82,9 @@ CoreReportProgressCode (
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Allocate pool of type EfiBootServicesData, the size is specified with AllocationSize.
|
||||
|
||||
@param AllocationSize Size to allocate.
|
||||
|
||||
@return Pointer of the allocated pool.
|
||||
|
||||
**/
|
||||
VOID *
|
||||
CoreAllocateBootServicesPool (
|
||||
IN UINTN AllocationSize
|
||||
)
|
||||
{
|
||||
VOID *Memory;
|
||||
|
||||
CoreAllocatePool (EfiBootServicesData, AllocationSize, &Memory);
|
||||
return Memory;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Allocate pool of type EfiBootServicesData and zero it, the size is specified with AllocationSize.
|
||||
|
||||
@param AllocationSize Size to allocate.
|
||||
|
||||
@return Pointer of the allocated pool.
|
||||
|
||||
**/
|
||||
VOID *
|
||||
CoreAllocateZeroBootServicesPool (
|
||||
IN UINTN AllocationSize
|
||||
)
|
||||
{
|
||||
VOID *Memory;
|
||||
|
||||
Memory = CoreAllocateBootServicesPool (AllocationSize);
|
||||
ZeroMem (Memory, (Memory == NULL) ? 0 : AllocationSize);
|
||||
return Memory;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Allocate pool of specified size with EfiBootServicesData type, and copy specified buffer to this pool.
|
||||
|
||||
@param AllocationSize Size to allocate.
|
||||
@param Buffer Specified buffer that will be copy to the allocated
|
||||
pool
|
||||
|
||||
@return Pointer of the allocated pool.
|
||||
|
||||
**/
|
||||
VOID *
|
||||
CoreAllocateCopyPool (
|
||||
IN UINTN AllocationSize,
|
||||
IN VOID *Buffer
|
||||
)
|
||||
{
|
||||
VOID *Memory;
|
||||
|
||||
Memory = CoreAllocateBootServicesPool (AllocationSize);
|
||||
CopyMem (Memory, Buffer, (Memory == NULL) ? 0 : AllocationSize);
|
||||
|
||||
return Memory;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Allocate pool of type EfiRuntimeServicesData, the size is specified with AllocationSize.
|
||||
|
||||
@param AllocationSize Size to allocate.
|
||||
|
||||
@return Pointer of the allocated pool.
|
||||
|
||||
**/
|
||||
VOID *
|
||||
CoreAllocateRuntimePool (
|
||||
IN UINTN AllocationSize
|
||||
)
|
||||
{
|
||||
VOID *Memory;
|
||||
|
||||
CoreAllocatePool (EfiRuntimeServicesData, AllocationSize, &Memory);
|
||||
return Memory;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Allocate pool of specified size with EfiRuntimeServicesData type, and copy specified buffer to this pool.
|
||||
|
||||
@param AllocationSize Size to allocate.
|
||||
@param Buffer Specified buffer that will be copy to the allocated
|
||||
pool
|
||||
|
||||
@return Pointer of the allocated pool.
|
||||
|
||||
**/
|
||||
VOID *
|
||||
CoreAllocateRuntimeCopyPool (
|
||||
IN UINTN AllocationSize,
|
||||
IN VOID *Buffer
|
||||
)
|
||||
{
|
||||
VOID *Memory;
|
||||
|
||||
Memory = CoreAllocateRuntimePool (AllocationSize);
|
||||
CopyMem (Memory, Buffer, (Memory == NULL) ? 0 : AllocationSize);
|
||||
|
||||
return Memory;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
// Lock Stuff
|
||||
//
|
||||
|
||||
|
||||
/**
|
||||
Initialize a basic mutual exclusion lock. Each lock
|
||||
provides mutual exclusion access at it's task priority
|
||||
@@ -290,159 +171,6 @@ CoreReleaseLock (
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Calculate the size of a whole device path.
|
||||
|
||||
@param DevicePath The pointer to the device path data.
|
||||
|
||||
@return Size of device path data structure..
|
||||
|
||||
**/
|
||||
UINTN
|
||||
CoreDevicePathSize (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||
)
|
||||
{
|
||||
EFI_DEVICE_PATH_PROTOCOL *Start;
|
||||
|
||||
if (DevicePath == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
//
|
||||
// Search for the end of the device path structure
|
||||
//
|
||||
Start = DevicePath;
|
||||
while (!EfiIsDevicePathEnd (DevicePath)) {
|
||||
DevicePath = EfiNextDevicePathNode (DevicePath);
|
||||
}
|
||||
|
||||
//
|
||||
// Compute the size and add back in the size of the end device path structure
|
||||
//
|
||||
return ((UINTN) DevicePath - (UINTN) Start) + sizeof(EFI_DEVICE_PATH_PROTOCOL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Return TRUE is this is a multi instance device path.
|
||||
|
||||
@param DevicePath A pointer to a device path data structure.
|
||||
|
||||
@retval TRUE If DevicePath is multi instance. FALSE - If
|
||||
DevicePath is not multi instance.
|
||||
|
||||
**/
|
||||
BOOLEAN
|
||||
CoreIsDevicePathMultiInstance (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||
)
|
||||
{
|
||||
EFI_DEVICE_PATH_PROTOCOL *Node;
|
||||
|
||||
if (DevicePath == NULL) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
Node = DevicePath;
|
||||
while (!EfiIsDevicePathEnd (Node)) {
|
||||
if (EfiIsDevicePathEndInstance (Node)) {
|
||||
return TRUE;
|
||||
}
|
||||
Node = EfiNextDevicePathNode (Node);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Duplicate a new device path data structure from the old one.
|
||||
|
||||
@param DevicePath A pointer to a device path data structure.
|
||||
|
||||
@return A pointer to the new allocated device path data.
|
||||
@return Caller must free the memory used by DevicePath if it is no longer needed.
|
||||
|
||||
**/
|
||||
EFI_DEVICE_PATH_PROTOCOL *
|
||||
CoreDuplicateDevicePath (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||||
)
|
||||
{
|
||||
EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;
|
||||
UINTN Size;
|
||||
|
||||
if (DevicePath == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//
|
||||
// Compute the size
|
||||
//
|
||||
Size = CoreDevicePathSize (DevicePath);
|
||||
|
||||
//
|
||||
// Allocate space for duplicate device path
|
||||
//
|
||||
NewDevicePath = CoreAllocateCopyPool (Size, DevicePath);
|
||||
|
||||
return NewDevicePath;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Function is used to append a Src1 and Src2 together.
|
||||
|
||||
@param Src1 A pointer to a device path data structure.
|
||||
@param Src2 A pointer to a device path data structure.
|
||||
|
||||
@return A pointer to the new device path is returned.
|
||||
@return NULL is returned if space for the new device path could not be allocated from pool.
|
||||
@return It is up to the caller to free the memory used by Src1 and Src2 if they are no longer needed.
|
||||
|
||||
**/
|
||||
EFI_DEVICE_PATH_PROTOCOL *
|
||||
CoreAppendDevicePath (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *Src1,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *Src2
|
||||
)
|
||||
{
|
||||
UINTN Size;
|
||||
UINTN Size1;
|
||||
UINTN Size2;
|
||||
EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;
|
||||
EFI_DEVICE_PATH_PROTOCOL *SecondDevicePath;
|
||||
|
||||
if (Src1 == NULL && Src2 == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//
|
||||
// Allocate space for the combined device path. It only has one end node of
|
||||
// length EFI_DEVICE_PATH_PROTOCOL
|
||||
//
|
||||
Size1 = CoreDevicePathSize (Src1);
|
||||
Size2 = CoreDevicePathSize (Src2);
|
||||
Size = Size1 + Size2 - sizeof(EFI_DEVICE_PATH_PROTOCOL);
|
||||
|
||||
NewDevicePath = CoreAllocateCopyPool (Size, Src1);
|
||||
if (NewDevicePath != NULL) {
|
||||
|
||||
//
|
||||
// Over write Src1 EndNode and do the copy
|
||||
//
|
||||
SecondDevicePath = (EFI_DEVICE_PATH_PROTOCOL *)((CHAR8 *)NewDevicePath + (Size1 - sizeof(EFI_DEVICE_PATH_PROTOCOL)));
|
||||
CopyMem (SecondDevicePath, Src2, Size2);
|
||||
}
|
||||
|
||||
return NewDevicePath;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Create a protocol notification event and return it.
|
||||
|
||||
|
Reference in New Issue
Block a user