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)) {
 | 
			
		||||
              continue;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            //
 | 
			
		||||
            // Found a firmware volume image. Produce a firmware volume block
 | 
			
		||||
            // protocol for it so it gets dispatched from. This is usually a 
 | 
			
		||||
 
 | 
			
		||||
@@ -82,6 +82,7 @@ Revision History
 | 
			
		||||
#include <Library/CacheMaintenanceLib.h>
 | 
			
		||||
#include <Library/BaseMemoryLib.h>
 | 
			
		||||
#include <Library/PeCoffLib.h>
 | 
			
		||||
#include <Library/MemoryAllocationLib.h>
 | 
			
		||||
 | 
			
		||||
#include "DebugImageInfo.h"
 | 
			
		||||
#include "Library.h"
 | 
			
		||||
 
 | 
			
		||||
@@ -87,6 +87,7 @@
 | 
			
		||||
  DxeCoreEntryPoint
 | 
			
		||||
  PeCoffLib
 | 
			
		||||
  ExtractGuidedSectionLib
 | 
			
		||||
  MemoryAllocationLib
 | 
			
		||||
 | 
			
		||||
[Guids]
 | 
			
		||||
  gEfiEventLegacyBootGuid                       # ALWAYS_CONSUMED
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user