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:
lgao4 2008-12-11 07:36:58 +00:00
parent 8ef155106f
commit de2314f85c
4 changed files with 82 additions and 34 deletions

View File

@ -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;
/// ///

View File

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

View File

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

View File

@ -44,7 +44,3 @@
DebugLib DebugLib
PcdLib PcdLib
[Pcd.common]
gEfiMdePkgTokenSpaceGuid.PcdMaximumGuidedExtractHandler