diff options
author | lgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524> | 2007-12-07 10:25:56 +0000 |
---|---|---|
committer | lgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524> | 2007-12-07 10:25:56 +0000 |
commit | c4869732ece19962c1262f1157a96d8a6240be6c (patch) | |
tree | 9b28569ccec08791c308770da73156fc51e64e1c /MdeModulePkg/Core/Dxe/SectionExtraction/CoreSectionExtraction.c | |
parent | 069cb38f00f8232ff8b72c70b0561fc392d21391 (diff) | |
download | edk2-platforms-c4869732ece19962c1262f1157a96d8a6240be6c.tar.xz |
Cache FvImage at buffer with its required alignment.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4372 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Core/Dxe/SectionExtraction/CoreSectionExtraction.c')
-rw-r--r-- | MdeModulePkg/Core/Dxe/SectionExtraction/CoreSectionExtraction.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/MdeModulePkg/Core/Dxe/SectionExtraction/CoreSectionExtraction.c b/MdeModulePkg/Core/Dxe/SectionExtraction/CoreSectionExtraction.c index 1a98e97e9a..67dd803861 100644 --- a/MdeModulePkg/Core/Dxe/SectionExtraction/CoreSectionExtraction.c +++ b/MdeModulePkg/Core/Dxe/SectionExtraction/CoreSectionExtraction.c @@ -412,11 +412,14 @@ Returns: UINTN Instance;
UINT8 *CopyBuffer;
UINTN SectionSize;
+ EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
+ UINT32 FvAlignment;
+
-
OldTpl = CoreRaiseTpl (TPL_NOTIFY);
Instance = SectionInstance + 1;
-
+ FvHeader = NULL;
+ FvAlignment = 0;
//
// Locate target stream
//
@@ -469,8 +472,19 @@ Returns: } else {
//
// Callee allocated buffer. Allocate buffer and return size.
+ // For FvImage, the buffer is allocated at its required alignment.
//
- *Buffer = CoreAllocateBootServicesPool (CopySize);
+ if (*SectionType == EFI_SECTION_FIRMWARE_VOLUME_IMAGE) {
+ FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *) CopyBuffer;
+ FvAlignment = 1 << ((FvHeader->Attributes & EFI_FVB2_ALIGNMENT) >> 16);
+ //
+ // FvAlignment must be more than 8 bytes required by FvHeader structure.
+ //
+ if (FvAlignment < 8) {
+ FvAlignment = 8;
+ }
+ }
+ *Buffer = AllocateAlignedPool ((UINTN) CopySize, (UINTN) FvAlignment);
if (*Buffer == NULL) {
Status = EFI_OUT_OF_RESOURCES;
goto GetSection_Done;
|