// GPT Partition Entry Status\r
//\r
typedef struct {\r
- BOOLEAN OutOfRange;\r
- BOOLEAN Overlap;\r
- BOOLEAN OsSpecific;\r
+ BOOLEAN OutOfRange;\r
+ BOOLEAN Overlap;\r
+ BOOLEAN OsSpecific;\r
} EFI_PARTITION_ENTRY_STATUS;\r
\r
/**\r
IN EFI_PARTITION_TABLE_HEADER *PartHeader\r
)\r
{\r
- UINT32 GptHdrCrc;\r
- UINT32 Crc;\r
+ UINT32 GptHdrCrc;\r
+ UINT32 Crc;\r
\r
GptHdrCrc = PartHeader->Header.CRC32;\r
\r
return (GptHdrCrc == Crc);\r
}\r
\r
-\r
/**\r
Check if the CRC field in the Partition table header is valid\r
for Partition entry array.\r
**/\r
BOOLEAN\r
PartitionCheckGptEntryArrayCRC (\r
- IN EFI_PARTITION_TABLE_HEADER *PartHeader,\r
- IN EFI_PARTITION_ENTRY *PartEntry\r
+ IN EFI_PARTITION_TABLE_HEADER *PartHeader,\r
+ IN EFI_PARTITION_ENTRY *PartEntry\r
)\r
{\r
- UINT32 Crc;\r
- UINTN Size;\r
+ UINT32 Crc;\r
+ UINTN Size;\r
\r
- Size = (UINTN)MultU64x32(PartHeader->NumberOfPartitionEntries, PartHeader->SizeOfPartitionEntry);\r
+ Size = (UINTN)MultU64x32 (PartHeader->NumberOfPartitionEntries, PartHeader->SizeOfPartitionEntry);\r
Crc = CalculateCrc32 (PartEntry, Size);\r
\r
- return (BOOLEAN) (PartHeader->PartitionEntryArrayCRC32 == Crc);\r
+ return (BOOLEAN)(PartHeader->PartitionEntryArrayCRC32 == Crc);\r
}\r
\r
/**\r
IN EFI_PARTITION_TABLE_HEADER *PartHdr\r
)\r
{\r
- PEI_FAT_BLOCK_DEVICE *ParentBlockDev;\r
- EFI_PEI_LBA Lba;\r
- EFI_PEI_LBA AlternateLba;\r
- EFI_PEI_LBA EntryArrayLastLba;\r
+ PEI_FAT_BLOCK_DEVICE *ParentBlockDev;\r
+ EFI_PEI_LBA Lba;\r
+ EFI_PEI_LBA AlternateLba;\r
+ EFI_PEI_LBA EntryArrayLastLba;\r
\r
- UINT64 PartitionEntryArraySize;\r
- UINT64 PartitionEntryBlockNumb;\r
- UINT32 EntryArraySizeRemainder;\r
+ UINT64 PartitionEntryArraySize;\r
+ UINT64 PartitionEntryBlockNumb;\r
+ UINT32 EntryArraySizeRemainder;\r
\r
ParentBlockDev = &(PrivateData->BlockDevice[ParentBlockDevNo]);\r
\r
AlternateLba = PRIMARY_PART_HEADER_LBA;\r
}\r
\r
- if ( (PartHdr->Header.Signature != EFI_PTAB_HEADER_ID) ||\r
- (PartHdr->Header.Revision != 0x00010000) ||\r
- (PartHdr->Header.HeaderSize < 92) ||\r
- (PartHdr->Header.HeaderSize > ParentBlockDev->BlockSize) ||\r
- (!PartitionCheckGptHeaderCRC (PartHdr)) ||\r
- (PartHdr->Header.Reserved != 0)\r
- ) {\r
+ if ((PartHdr->Header.Signature != EFI_PTAB_HEADER_ID) ||\r
+ (PartHdr->Header.Revision != 0x00010000) ||\r
+ (PartHdr->Header.HeaderSize < 92) ||\r
+ (PartHdr->Header.HeaderSize > ParentBlockDev->BlockSize) ||\r
+ (!PartitionCheckGptHeaderCRC (PartHdr)) ||\r
+ (PartHdr->Header.Reserved != 0)\r
+ )\r
+ {\r
DEBUG ((DEBUG_ERROR, "Invalid efi partition table header\n"));\r
return FALSE;\r
}\r
// 5. Must be remain 128*128 bytes for backup entry array.\r
// 6. SizeOfPartitionEntry must be equals to 128 * 2^n.\r
//\r
- if ( (PartHdr->MyLBA != Lba) ||\r
- (PartHdr->AlternateLBA != AlternateLba) ||\r
- (PartHdr->FirstUsableLBA < 2 + EFI_SIZE_TO_BLOCKS (EFI_GPT_PART_ENTRY_MIN_SIZE, ParentBlockDev->BlockSize)) ||\r
- (PartHdr->LastUsableLBA > ParentBlockDev->LastBlock - 1 - EFI_SIZE_TO_BLOCKS (EFI_GPT_PART_ENTRY_MIN_SIZE, ParentBlockDev->BlockSize)) ||\r
- (PartHdr->FirstUsableLBA > PartHdr->LastUsableLBA) ||\r
- (PartHdr->PartitionEntryLBA < 2) ||\r
- (PartHdr->PartitionEntryLBA > ParentBlockDev->LastBlock - 1) ||\r
- (PartHdr->PartitionEntryLBA >= PartHdr->FirstUsableLBA && PartHdr->PartitionEntryLBA <= PartHdr->LastUsableLBA) ||\r
- (PartHdr->SizeOfPartitionEntry%128 != 0) ||\r
- (PartHdr->SizeOfPartitionEntry != sizeof (EFI_PARTITION_ENTRY))\r
- ) {\r
+ if ((PartHdr->MyLBA != Lba) ||\r
+ (PartHdr->AlternateLBA != AlternateLba) ||\r
+ (PartHdr->FirstUsableLBA < 2 + EFI_SIZE_TO_BLOCKS (EFI_GPT_PART_ENTRY_MIN_SIZE, ParentBlockDev->BlockSize)) ||\r
+ (PartHdr->LastUsableLBA > ParentBlockDev->LastBlock - 1 - EFI_SIZE_TO_BLOCKS (EFI_GPT_PART_ENTRY_MIN_SIZE, ParentBlockDev->BlockSize)) ||\r
+ (PartHdr->FirstUsableLBA > PartHdr->LastUsableLBA) ||\r
+ (PartHdr->PartitionEntryLBA < 2) ||\r
+ (PartHdr->PartitionEntryLBA > ParentBlockDev->LastBlock - 1) ||\r
+ ((PartHdr->PartitionEntryLBA >= PartHdr->FirstUsableLBA) && (PartHdr->PartitionEntryLBA <= PartHdr->LastUsableLBA)) ||\r
+ (PartHdr->SizeOfPartitionEntry%128 != 0) ||\r
+ (PartHdr->SizeOfPartitionEntry != sizeof (EFI_PARTITION_ENTRY))\r
+ )\r
+ {\r
DEBUG ((DEBUG_ERROR, "Invalid efi partition table header\n"));\r
return FALSE;\r
}\r
IN EFI_PARTITION_TABLE_HEADER *PartHdr\r
)\r
{\r
- EFI_STATUS Status;\r
- PEI_FAT_BLOCK_DEVICE *ParentBlockDev;\r
- PEI_FAT_BLOCK_DEVICE *BlockDevPtr;\r
+ EFI_STATUS Status;\r
+ PEI_FAT_BLOCK_DEVICE *ParentBlockDev;\r
+ PEI_FAT_BLOCK_DEVICE *BlockDevPtr;\r
\r
- UINT64 PartitionEntryArraySize;\r
- UINT64 PartitionEntryBlockNumb;\r
- UINT32 EntryArraySizeRemainder;\r
+ UINT64 PartitionEntryArraySize;\r
+ UINT64 PartitionEntryBlockNumb;\r
+ UINT32 EntryArraySizeRemainder;\r
\r
- EFI_PARTITION_ENTRY *PartitionEntryBuffer;\r
- EFI_PARTITION_ENTRY_STATUS *PartitionEntryStatus;\r
+ EFI_PARTITION_ENTRY *PartitionEntryBuffer;\r
+ EFI_PARTITION_ENTRY_STATUS *PartitionEntryStatus;\r
\r
- BOOLEAN Found;\r
- EFI_LBA StartingLBA;\r
- EFI_LBA EndingLBA;\r
- UINTN Index;\r
- UINTN Index1;\r
- UINTN Index2;\r
- EFI_PARTITION_ENTRY *Entry;\r
+ BOOLEAN Found;\r
+ EFI_LBA StartingLBA;\r
+ EFI_LBA EndingLBA;\r
+ UINTN Index;\r
+ UINTN Index1;\r
+ UINTN Index2;\r
+ EFI_PARTITION_ENTRY *Entry;\r
\r
PartitionEntryBuffer = NULL;\r
PartitionEntryStatus = NULL;\r
\r
- ParentBlockDev = &(PrivateData->BlockDevice[ParentBlockDevNo]);\r
- Found = FALSE;\r
+ ParentBlockDev = &(PrivateData->BlockDevice[ParentBlockDevNo]);\r
+ Found = FALSE;\r
\r
PartitionEntryArraySize = MultU64x32 (PartHdr->NumberOfPartitionEntries, PartHdr->SizeOfPartitionEntry);\r
EntryArraySizeRemainder = 0;\r
if (EntryArraySizeRemainder != 0) {\r
PartitionEntryBlockNumb++;\r
}\r
+\r
PartitionEntryArraySize = MultU64x32 (PartitionEntryBlockNumb, ParentBlockDev->BlockSize);\r
\r
- PartitionEntryBuffer = (EFI_PARTITION_ENTRY *) AllocatePages (EFI_SIZE_TO_PAGES ((UINTN)PartitionEntryArraySize));\r
+ PartitionEntryBuffer = (EFI_PARTITION_ENTRY *)AllocatePages (EFI_SIZE_TO_PAGES ((UINTN)PartitionEntryArraySize));\r
if (PartitionEntryBuffer == NULL) {\r
DEBUG ((DEBUG_ERROR, "Allocate memory error!\n"));\r
goto EXIT;\r
}\r
\r
- PartitionEntryStatus = (EFI_PARTITION_ENTRY_STATUS *) AllocatePages (EFI_SIZE_TO_PAGES (PartHdr->NumberOfPartitionEntries * sizeof (EFI_PARTITION_ENTRY_STATUS)));\r
+ PartitionEntryStatus = (EFI_PARTITION_ENTRY_STATUS *)AllocatePages (EFI_SIZE_TO_PAGES (PartHdr->NumberOfPartitionEntries * sizeof (EFI_PARTITION_ENTRY_STATUS)));\r
if (PartitionEntryStatus == NULL) {\r
DEBUG ((DEBUG_ERROR, "Allocate memory error!\n"));\r
goto EXIT;\r
}\r
+\r
ZeroMem (PartitionEntryStatus, PartHdr->NumberOfPartitionEntries * sizeof (EFI_PARTITION_ENTRY_STATUS));\r
\r
Status = FatReadBlock (\r
}\r
\r
for (Index1 = 0; Index1 < PartHdr->NumberOfPartitionEntries; Index1++) {\r
- Entry = (EFI_PARTITION_ENTRY *) ((UINT8 *) PartitionEntryBuffer + Index1 * PartHdr->SizeOfPartitionEntry);\r
+ Entry = (EFI_PARTITION_ENTRY *)((UINT8 *)PartitionEntryBuffer + Index1 * PartHdr->SizeOfPartitionEntry);\r
if (CompareGuid (&Entry->PartitionTypeGUID, &gEfiPartTypeUnusedGuid)) {\r
continue;\r
}\r
\r
StartingLBA = Entry->StartingLBA;\r
EndingLBA = Entry->EndingLBA;\r
- if (StartingLBA > EndingLBA ||\r
- StartingLBA < PartHdr->FirstUsableLBA ||\r
- StartingLBA > PartHdr->LastUsableLBA ||\r
- EndingLBA < PartHdr->FirstUsableLBA ||\r
- EndingLBA > PartHdr->LastUsableLBA\r
- ) {\r
+ if ((StartingLBA > EndingLBA) ||\r
+ (StartingLBA < PartHdr->FirstUsableLBA) ||\r
+ (StartingLBA > PartHdr->LastUsableLBA) ||\r
+ (EndingLBA < PartHdr->FirstUsableLBA) ||\r
+ (EndingLBA > PartHdr->LastUsableLBA)\r
+ )\r
+ {\r
PartitionEntryStatus[Index1].OutOfRange = TRUE;\r
continue;\r
}\r
}\r
\r
for (Index2 = Index1 + 1; Index2 < PartHdr->NumberOfPartitionEntries; Index2++) {\r
- Entry = (EFI_PARTITION_ENTRY *) ((UINT8 *) PartitionEntryBuffer + Index2 * PartHdr->SizeOfPartitionEntry);\r
+ Entry = (EFI_PARTITION_ENTRY *)((UINT8 *)PartitionEntryBuffer + Index2 * PartHdr->SizeOfPartitionEntry);\r
if (CompareGuid (&Entry->PartitionTypeGUID, &gEfiPartTypeUnusedGuid)) {\r
continue;\r
}\r
\r
- if (Entry->EndingLBA >= StartingLBA && Entry->StartingLBA <= EndingLBA) {\r
+ if ((Entry->EndingLBA >= StartingLBA) && (Entry->StartingLBA <= EndingLBA)) {\r
//\r
// This region overlaps with the Index1'th region\r
//\r
- PartitionEntryStatus[Index1].Overlap = TRUE;\r
- PartitionEntryStatus[Index2].Overlap = TRUE;\r
+ PartitionEntryStatus[Index1].Overlap = TRUE;\r
+ PartitionEntryStatus[Index2].Overlap = TRUE;\r
continue;\r
}\r
}\r
}\r
\r
for (Index = 0; Index < PartHdr->NumberOfPartitionEntries; Index++) {\r
- if (CompareGuid (&PartitionEntryBuffer[Index].PartitionTypeGUID, &gEfiPartTypeUnusedGuid)||\r
+ if (CompareGuid (&PartitionEntryBuffer[Index].PartitionTypeGUID, &gEfiPartTypeUnusedGuid) ||\r
PartitionEntryStatus[Index].OutOfRange ||\r
PartitionEntryStatus[Index].Overlap ||\r
- PartitionEntryStatus[Index].OsSpecific) {\r
+ PartitionEntryStatus[Index].OsSpecific)\r
+ {\r
//\r
// Don't use null EFI Partition Entries, Invalid Partition Entries or OS specific\r
// partition Entries\r
break;\r
}\r
\r
- Found = TRUE;\r
- BlockDevPtr = &(PrivateData->BlockDevice[PrivateData->BlockDeviceCount]);\r
+ Found = TRUE;\r
+ BlockDevPtr = &(PrivateData->BlockDevice[PrivateData->BlockDeviceCount]);\r
\r
BlockDevPtr->BlockSize = ParentBlockDev->BlockSize;\r
BlockDevPtr->LastBlock = PartitionEntryBuffer[Index].EndingLBA;\r
PartitionEntryBuffer[Index].StartingLBA,\r
ParentBlockDev->BlockSize\r
);\r
- BlockDevPtr->ParentDevNo = ParentBlockDevNo;\r
+ BlockDevPtr->ParentDevNo = ParentBlockDevNo;\r
\r
PrivateData->BlockDeviceCount++;\r
\r
- DEBUG ((DEBUG_INFO, "Find GPT Partition [0x%lx", PartitionEntryBuffer[Index].StartingLBA, BlockDevPtr->LastBlock));\r
+ DEBUG ((DEBUG_INFO, "Find GPT Partition [0x%lx", PartitionEntryBuffer[Index].StartingLBA, BlockDevPtr->LastBlock));\r
DEBUG ((DEBUG_INFO, ", 0x%lx]\n", BlockDevPtr->LastBlock));\r
- DEBUG ((DEBUG_INFO, " BlockSize %x\n", BlockDevPtr->BlockSize));\r
+ DEBUG ((DEBUG_INFO, " BlockSize %x\n", BlockDevPtr->BlockSize));\r
}\r
\r
EXIT:\r
**/\r
BOOLEAN\r
PartitionCheckGptStructure (\r
- IN PEI_FAT_PRIVATE_DATA *PrivateData,\r
- IN UINTN ParentBlockDevNo,\r
- IN BOOLEAN IsPrimary\r
+ IN PEI_FAT_PRIVATE_DATA *PrivateData,\r
+ IN UINTN ParentBlockDevNo,\r
+ IN BOOLEAN IsPrimary\r
)\r
{\r
- EFI_STATUS Status;\r
- PEI_FAT_BLOCK_DEVICE *ParentBlockDev;\r
- EFI_PARTITION_TABLE_HEADER *PartHdr;\r
- EFI_PEI_LBA GptHeaderLBA;\r
+ EFI_STATUS Status;\r
+ PEI_FAT_BLOCK_DEVICE *ParentBlockDev;\r
+ EFI_PARTITION_TABLE_HEADER *PartHdr;\r
+ EFI_PEI_LBA GptHeaderLBA;\r
\r
- ParentBlockDev = &(PrivateData->BlockDevice[ParentBlockDevNo]);\r
- PartHdr = (EFI_PARTITION_TABLE_HEADER *) PrivateData->BlockData;\r
+ ParentBlockDev = &(PrivateData->BlockDevice[ParentBlockDevNo]);\r
+ PartHdr = (EFI_PARTITION_TABLE_HEADER *)PrivateData->BlockData;\r
\r
if (IsPrimary) {\r
GptHeaderLBA = PRIMARY_PART_HEADER_LBA;\r
**/\r
BOOLEAN\r
PartitionCheckProtectiveMbr (\r
- IN PEI_FAT_PRIVATE_DATA *PrivateData,\r
- IN UINTN ParentBlockDevNo\r
+ IN PEI_FAT_PRIVATE_DATA *PrivateData,\r
+ IN UINTN ParentBlockDevNo\r
)\r
{\r
- EFI_STATUS Status;\r
- MASTER_BOOT_RECORD *ProtectiveMbr;\r
- MBR_PARTITION_RECORD *MbrPartition;\r
- PEI_FAT_BLOCK_DEVICE *ParentBlockDev;\r
- UINTN Index;\r
+ EFI_STATUS Status;\r
+ MASTER_BOOT_RECORD *ProtectiveMbr;\r
+ MBR_PARTITION_RECORD *MbrPartition;\r
+ PEI_FAT_BLOCK_DEVICE *ParentBlockDev;\r
+ UINTN Index;\r
\r
- ProtectiveMbr = (MASTER_BOOT_RECORD *) PrivateData->BlockData;\r
- ParentBlockDev = &(PrivateData->BlockDevice[ParentBlockDevNo]);\r
+ ProtectiveMbr = (MASTER_BOOT_RECORD *)PrivateData->BlockData;\r
+ ParentBlockDev = &(PrivateData->BlockDevice[ParentBlockDevNo]);\r
\r
//\r
// Read Protective MBR\r
//\r
for (Index = 0; Index < MAX_MBR_PARTITIONS; Index++) {\r
MbrPartition = (MBR_PARTITION_RECORD *)&ProtectiveMbr->Partition[Index];\r
- if (MbrPartition->BootIndicator == 0x00 &&\r
- MbrPartition->StartSector == 0x02 &&\r
- MbrPartition->OSIndicator == PMBR_GPT_PARTITION &&\r
- UNPACK_UINT32 (MbrPartition->StartingLBA) == 1\r
- ) {\r
+ if ((MbrPartition->BootIndicator == 0x00) &&\r
+ (MbrPartition->StartSector == 0x02) &&\r
+ (MbrPartition->OSIndicator == PMBR_GPT_PARTITION) &&\r
+ (UNPACK_UINT32 (MbrPartition->StartingLBA) == 1)\r
+ )\r
+ {\r
return TRUE;\r
}\r
}\r
**/\r
BOOLEAN\r
FatFindGptPartitions (\r
- IN PEI_FAT_PRIVATE_DATA *PrivateData,\r
- IN UINTN ParentBlockDevNo\r
+ IN PEI_FAT_PRIVATE_DATA *PrivateData,\r
+ IN UINTN ParentBlockDevNo\r
)\r
{\r
- BOOLEAN Found;\r
- PEI_FAT_BLOCK_DEVICE *ParentBlockDev;\r
+ BOOLEAN Found;\r
+ PEI_FAT_BLOCK_DEVICE *ParentBlockDev;\r
\r
if (ParentBlockDevNo > PEI_FAT_MAX_BLOCK_DEVICE - 1) {\r
return FALSE;\r
}\r
\r
- ParentBlockDev = &(PrivateData->BlockDevice[ParentBlockDevNo]);\r
+ ParentBlockDev = &(PrivateData->BlockDevice[ParentBlockDevNo]);\r
if (ParentBlockDev->BlockSize > PEI_FAT_MAX_BLOCK_SIZE) {\r
DEBUG ((DEBUG_ERROR, "Device BlockSize %x exceed FAT_MAX_BLOCK_SIZE\n", ParentBlockDev->BlockSize));\r
return FALSE;\r