mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-21 20:54:29 +02:00
Apply ReallocatePool API in DxeExtractGuidedSectionLib when the allocated resource is used out. And remove PCD.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6994 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
8ef155106f
commit
de2314f85c
@ -526,7 +526,7 @@ struct _EFI_MTFTP4_TOKEN {
|
|||||||
///
|
///
|
||||||
UINT8 *Filename;
|
UINT8 *Filename;
|
||||||
///
|
///
|
||||||
/// Pointer to the ASCIIZ mode string. If NULL, “octet” is used.
|
/// Pointer to the ASCIIZ mode string. If NULL, "octet" is used.
|
||||||
///
|
///
|
||||||
UINT8 *ModeStr;
|
UINT8 *ModeStr;
|
||||||
///
|
///
|
||||||
|
@ -704,7 +704,7 @@ typedef struct {
|
|||||||
///
|
///
|
||||||
UINT32 Accuracy;
|
UINT32 Accuracy;
|
||||||
///
|
///
|
||||||
/// A TRUE indicates that a time set operation clears the device¡¯s
|
/// A TRUE indicates that a time set operation clears the device's
|
||||||
/// time below the Resolution reporting level. A FALSE
|
/// time below the Resolution reporting level. A FALSE
|
||||||
/// indicates that the state below the Resolution level of the
|
/// indicates that the state below the Resolution level of the
|
||||||
/// device is not cleared when the time is set. Normal PC-AT CMOS
|
/// device is not cleared when the time is set. Normal PC-AT CMOS
|
||||||
|
@ -15,17 +15,88 @@
|
|||||||
#include <PiDxe.h>
|
#include <PiDxe.h>
|
||||||
|
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
#include <Library/PcdLib.h>
|
|
||||||
#include <Library/BaseMemoryLib.h>
|
#include <Library/BaseMemoryLib.h>
|
||||||
#include <Library/MemoryAllocationLib.h>
|
#include <Library/MemoryAllocationLib.h>
|
||||||
#include <Library/ExtractGuidedSectionLib.h>
|
#include <Library/ExtractGuidedSectionLib.h>
|
||||||
|
|
||||||
GUID *mExtractHandlerGuidTable;
|
#define EXTRACT_HANDLER_TABLE_SIZE 0x10
|
||||||
|
|
||||||
UINT32 mNumberOfExtractHandler = 0;
|
UINT32 mNumberOfExtractHandler = 0;
|
||||||
|
UINT32 mMaxNumberOfExtractHandler = 0;
|
||||||
|
|
||||||
EXTRACT_GUIDED_SECTION_DECODE_HANDLER *mExtractDecodeHandlerTable;
|
GUID *mExtractHandlerGuidTable = NULL;
|
||||||
EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER *mExtractGetInfoHandlerTable;
|
EXTRACT_GUIDED_SECTION_DECODE_HANDLER *mExtractDecodeHandlerTable = NULL;
|
||||||
|
EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER *mExtractGetInfoHandlerTable = NULL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Reallocates more global memory to store the registered guid and Handler list.
|
||||||
|
|
||||||
|
@retval RETURN_SUCCESS Reallocate more global memory space to store guid and function tables.
|
||||||
|
@retval RETURN_OUT_OF_RESOURCES No enough memory to allocated.
|
||||||
|
**/
|
||||||
|
RETURN_STATUS
|
||||||
|
EFIAPI
|
||||||
|
ReallocateExtractHandlerTable (
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Reallocate memory for GuidTable
|
||||||
|
//
|
||||||
|
mExtractHandlerGuidTable = ReallocatePool (
|
||||||
|
mMaxNumberOfExtractHandler * sizeof (GUID),
|
||||||
|
(mMaxNumberOfExtractHandler + EXTRACT_HANDLER_TABLE_SIZE) * sizeof (GUID),
|
||||||
|
mExtractHandlerGuidTable
|
||||||
|
);
|
||||||
|
|
||||||
|
if (mExtractHandlerGuidTable == NULL) {
|
||||||
|
goto Done;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Reallocate memory for Decode handler Table
|
||||||
|
//
|
||||||
|
mExtractDecodeHandlerTable = ReallocatePool (
|
||||||
|
mMaxNumberOfExtractHandler * sizeof (EXTRACT_GUIDED_SECTION_DECODE_HANDLER),
|
||||||
|
(mMaxNumberOfExtractHandler + EXTRACT_HANDLER_TABLE_SIZE) * sizeof (EXTRACT_GUIDED_SECTION_DECODE_HANDLER),
|
||||||
|
mExtractDecodeHandlerTable
|
||||||
|
);
|
||||||
|
|
||||||
|
if (mExtractDecodeHandlerTable == NULL) {
|
||||||
|
goto Done;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Reallocate memory for GetInfo handler Table
|
||||||
|
//
|
||||||
|
mExtractGetInfoHandlerTable = ReallocatePool (
|
||||||
|
mMaxNumberOfExtractHandler * sizeof (EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER),
|
||||||
|
(mMaxNumberOfExtractHandler + EXTRACT_HANDLER_TABLE_SIZE) * sizeof (EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER),
|
||||||
|
mExtractGetInfoHandlerTable
|
||||||
|
);
|
||||||
|
|
||||||
|
if (mExtractGetInfoHandlerTable == NULL) {
|
||||||
|
goto Done;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Increase max handler number
|
||||||
|
//
|
||||||
|
mMaxNumberOfExtractHandler = mMaxNumberOfExtractHandler + EXTRACT_HANDLER_TABLE_SIZE;
|
||||||
|
return RETURN_SUCCESS;
|
||||||
|
|
||||||
|
Done:
|
||||||
|
if (mExtractHandlerGuidTable != NULL) {
|
||||||
|
FreePool (mExtractHandlerGuidTable);
|
||||||
|
}
|
||||||
|
if (mExtractDecodeHandlerTable != NULL) {
|
||||||
|
FreePool (mExtractDecodeHandlerTable);
|
||||||
|
}
|
||||||
|
if (mExtractGetInfoHandlerTable != NULL) {
|
||||||
|
FreePool (mExtractGetInfoHandlerTable);
|
||||||
|
}
|
||||||
|
|
||||||
|
return RETURN_OUT_OF_RESOURCES;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
Constructor allocates the global memory to store the registered guid and Handler list.
|
Constructor allocates the global memory to store the registered guid and Handler list.
|
||||||
|
|
||||||
@ -42,28 +113,7 @@ DxeExtractGuidedSectionLibConstructor (
|
|||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
return ReallocateExtractHandlerTable ();
|
||||||
// Allocate global pool space to store the registered handler and its guid value.
|
|
||||||
//
|
|
||||||
mExtractHandlerGuidTable = (GUID *) AllocatePool (PcdGet32 (PcdMaximumGuidedExtractHandler) * sizeof (GUID));
|
|
||||||
if (mExtractHandlerGuidTable == NULL) {
|
|
||||||
return RETURN_OUT_OF_RESOURCES;
|
|
||||||
}
|
|
||||||
|
|
||||||
mExtractDecodeHandlerTable = (EXTRACT_GUIDED_SECTION_DECODE_HANDLER *) AllocatePool (PcdGet32 (PcdMaximumGuidedExtractHandler) * sizeof (EXTRACT_GUIDED_SECTION_DECODE_HANDLER));
|
|
||||||
if (mExtractDecodeHandlerTable == NULL) {
|
|
||||||
FreePool (mExtractHandlerGuidTable);
|
|
||||||
return RETURN_OUT_OF_RESOURCES;
|
|
||||||
}
|
|
||||||
|
|
||||||
mExtractGetInfoHandlerTable = (EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER *) AllocatePool (PcdGet32 (PcdMaximumGuidedExtractHandler) * sizeof (EXTRACT_GUIDED_SECTION_GET_INFO_HANDLER));
|
|
||||||
if (mExtractGetInfoHandlerTable == NULL) {
|
|
||||||
FreePool (mExtractHandlerGuidTable);
|
|
||||||
FreePool (mExtractDecodeHandlerTable);
|
|
||||||
return RETURN_OUT_OF_RESOURCES;
|
|
||||||
}
|
|
||||||
|
|
||||||
return RETURN_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -149,9 +199,11 @@ ExtractGuidedSectionRegisterHandlers (
|
|||||||
//
|
//
|
||||||
// Check the global table is enough to contain new Handler.
|
// Check the global table is enough to contain new Handler.
|
||||||
//
|
//
|
||||||
if (mNumberOfExtractHandler >= PcdGet32 (PcdMaximumGuidedExtractHandler)) {
|
if (mNumberOfExtractHandler >= mMaxNumberOfExtractHandler) {
|
||||||
|
if (ReallocateExtractHandlerTable () != RETURN_SUCCESS) {
|
||||||
return RETURN_OUT_OF_RESOURCES;
|
return RETURN_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Register new Handler and guid value.
|
// Register new Handler and guid value.
|
||||||
|
@ -44,7 +44,3 @@
|
|||||||
DebugLib
|
DebugLib
|
||||||
PcdLib
|
PcdLib
|
||||||
|
|
||||||
[Pcd.common]
|
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdMaximumGuidedExtractHandler
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user