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
This commit is contained in:
		@@ -1084,7 +1084,6 @@ Returns:
 | 
				
			|||||||
            if (FvFoundInHobFv2 (FvHandle, &NameGuid)) {
 | 
					            if (FvFoundInHobFv2 (FvHandle, &NameGuid)) {
 | 
				
			||||||
              continue;
 | 
					              continue;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            //
 | 
					            //
 | 
				
			||||||
            // Found a firmware volume image. Produce a firmware volume block
 | 
					            // Found a firmware volume image. Produce a firmware volume block
 | 
				
			||||||
            // protocol for it so it gets dispatched from. This is usually a 
 | 
					            // protocol for it so it gets dispatched from. This is usually a 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -82,6 +82,7 @@ Revision History
 | 
				
			|||||||
#include <Library/CacheMaintenanceLib.h>
 | 
					#include <Library/CacheMaintenanceLib.h>
 | 
				
			||||||
#include <Library/BaseMemoryLib.h>
 | 
					#include <Library/BaseMemoryLib.h>
 | 
				
			||||||
#include <Library/PeCoffLib.h>
 | 
					#include <Library/PeCoffLib.h>
 | 
				
			||||||
 | 
					#include <Library/MemoryAllocationLib.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "DebugImageInfo.h"
 | 
					#include "DebugImageInfo.h"
 | 
				
			||||||
#include "Library.h"
 | 
					#include "Library.h"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -87,6 +87,7 @@
 | 
				
			|||||||
  DxeCoreEntryPoint
 | 
					  DxeCoreEntryPoint
 | 
				
			||||||
  PeCoffLib
 | 
					  PeCoffLib
 | 
				
			||||||
  ExtractGuidedSectionLib
 | 
					  ExtractGuidedSectionLib
 | 
				
			||||||
 | 
					  MemoryAllocationLib
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[Guids]
 | 
					[Guids]
 | 
				
			||||||
  gEfiEventLegacyBootGuid                       # ALWAYS_CONSUMED
 | 
					  gEfiEventLegacyBootGuid                       # ALWAYS_CONSUMED
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -412,11 +412,14 @@ Returns:
 | 
				
			|||||||
  UINTN                                                 Instance;
 | 
					  UINTN                                                 Instance;
 | 
				
			||||||
  UINT8                                                 *CopyBuffer;
 | 
					  UINT8                                                 *CopyBuffer;
 | 
				
			||||||
  UINTN                                                 SectionSize;
 | 
					  UINTN                                                 SectionSize;
 | 
				
			||||||
 | 
					  EFI_FIRMWARE_VOLUME_HEADER                            *FvHeader;
 | 
				
			||||||
 | 
					  UINT32                                                FvAlignment;  
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  OldTpl = CoreRaiseTpl (TPL_NOTIFY);
 | 
					  OldTpl = CoreRaiseTpl (TPL_NOTIFY);
 | 
				
			||||||
  Instance = SectionInstance + 1;
 | 
					  Instance = SectionInstance + 1;
 | 
				
			||||||
  
 | 
					  FvHeader = NULL;
 | 
				
			||||||
 | 
					  FvAlignment = 0;
 | 
				
			||||||
  //
 | 
					  //
 | 
				
			||||||
  // Locate target stream
 | 
					  // Locate target stream
 | 
				
			||||||
  //
 | 
					  //
 | 
				
			||||||
@@ -469,8 +472,19 @@ Returns:
 | 
				
			|||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    //
 | 
					    //
 | 
				
			||||||
    // Callee allocated buffer.  Allocate buffer and return size.
 | 
					    // 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) {
 | 
					    if (*Buffer == NULL) {
 | 
				
			||||||
      Status = EFI_OUT_OF_RESOURCES;
 | 
					      Status = EFI_OUT_OF_RESOURCES;
 | 
				
			||||||
      goto GetSection_Done;
 | 
					      goto GetSection_Done;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user