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:
qhuang8
2008-08-27 14:29:23 +00:00
parent fb53e6cc34
commit 9c4ac31cca
31 changed files with 92 additions and 559 deletions

View File

@@ -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.