UINTN Index;\r
EFI_PHYSICAL_ADDRESS FvbBaseAddress;\r
EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *Fvb;\r
- EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader;\r
EFI_FVB_ATTRIBUTES_2 Attributes;\r
- \r
- Fvb = NULL;\r
+ UINTN BlockSize;\r
+ UINTN NumberOfBlocks;\r
+\r
HandleBuffer = NULL;\r
\r
//\r
//\r
Status = Fvb->GetAttributes (Fvb, &Attributes);\r
if (EFI_ERROR (Status) || ((Attributes & EFI_FVB2_WRITE_STATUS) == 0)) {\r
- continue; \r
+ continue;\r
}\r
- \r
+\r
//\r
// Compare the address and select the right one.\r
//\r
continue;\r
}\r
\r
- FwVolHeader = (EFI_FIRMWARE_VOLUME_HEADER *) ((UINTN) FvbBaseAddress);\r
- if ((Address >= FvbBaseAddress) && (Address < (FvbBaseAddress + FwVolHeader->FvLength))) {\r
+ //\r
+ // Assume one FVB has one type of BlockSize.\r
+ //\r
+ Status = Fvb->GetBlockSize (Fvb, 0, &BlockSize, &NumberOfBlocks);\r
+ if (EFI_ERROR (Status)) {\r
+ continue;\r
+ }\r
+\r
+ if ((Address >= FvbBaseAddress) && (Address < (FvbBaseAddress + BlockSize * NumberOfBlocks))) {\r
if (FvbHandle != NULL) {\r
*FvbHandle = HandleBuffer[Index];\r
}\r