--*/\r
\r
#include "Partition.h"\r
-#include "Gpt.h"\r
-#include "Mbr.h"\r
\r
+STATIC\r
BOOLEAN\r
PartitionValidGptTable (\r
IN EFI_BLOCK_IO_PROTOCOL *BlockIo,\r
OUT EFI_PARTITION_TABLE_HEADER *PartHeader\r
);\r
\r
+STATIC\r
BOOLEAN\r
PartitionCheckGptEntryArrayCRC (\r
IN EFI_BLOCK_IO_PROTOCOL *BlockIo,\r
IN EFI_PARTITION_TABLE_HEADER *PartHeader\r
);\r
\r
+STATIC\r
BOOLEAN\r
PartitionRestoreGptTable (\r
IN EFI_BLOCK_IO_PROTOCOL *BlockIo,\r
IN EFI_PARTITION_TABLE_HEADER *PartHeader\r
);\r
\r
+STATIC\r
VOID\r
PartitionCheckGptEntry (\r
IN EFI_PARTITION_TABLE_HEADER *PartHeader,\r
OUT EFI_PARTITION_ENTRY_STATUS *PEntryStatus\r
);\r
\r
+STATIC\r
BOOLEAN\r
PartitionCheckCrcAltSize (\r
IN UINTN MaxSize,\r
IN OUT EFI_TABLE_HEADER *Hdr\r
);\r
\r
+STATIC\r
BOOLEAN\r
PartitionCheckCrc (\r
IN UINTN MaxSize,\r
IN OUT EFI_TABLE_HEADER *Hdr\r
);\r
\r
+STATIC\r
VOID\r
PartitionSetCrcAltSize (\r
IN UINTN Size,\r
IN OUT EFI_TABLE_HEADER *Hdr\r
);\r
\r
+STATIC\r
VOID\r
PartitionSetCrc (\r
IN OUT EFI_TABLE_HEADER *Hdr\r
);\r
\r
-BOOLEAN\r
+EFI_STATUS\r
PartitionInstallGptChildHandles (\r
IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
IN EFI_HANDLE Handle,\r
DevicePath - Parent Device Path\r
\r
Returns:\r
- TRUE - Valid GPT disk\r
- FALSE - Not a valid GPT disk\r
+ EFI_SUCCESS - Valid GPT disk\r
+ EFI_MEDIA_CHANGED - Media changed Detected\r
+ !EFI_SUCCESS - Not a valid GPT disk\r
\r
--*/\r
{\r
EFI_PARTITION_ENTRY *PartEntry;\r
EFI_PARTITION_ENTRY_STATUS *PEntryStatus;\r
UINTN Index;\r
- BOOLEAN GptValid;\r
+ EFI_STATUS GptValid;\r
HARDDRIVE_DEVICE_PATH HdDev;\r
\r
ProtectiveMbr = NULL;\r
DEBUG ((EFI_D_INFO, " BlockSize : %d \n", BlockSize));\r
DEBUG ((EFI_D_INFO, " LastBlock : %x \n", LastBlock));\r
\r
- GptValid = FALSE;\r
+ GptValid = EFI_NOT_FOUND;\r
\r
//\r
// Allocate a buffer for the Protective MBR\r
//\r
ProtectiveMbr = AllocatePool (BlockSize);\r
if (ProtectiveMbr == NULL) {\r
- return FALSE;\r
+ return EFI_NOT_FOUND;\r
}\r
\r
//\r
ProtectiveMbr\r
);\r
if (EFI_ERROR (Status)) {\r
+ GptValid = Status;\r
goto Done;\r
}\r
//\r
// Verify that the Protective MBR is valid\r
//\r
if (ProtectiveMbr->Partition[0].BootIndicator != 0x00 ||\r
- ProtectiveMbr->Partition[0].OSIndicator != 0xEE ||\r
+ ProtectiveMbr->Partition[0].OSIndicator != PMBR_GPT_PARTITION ||\r
UNPACK_UINT32 (ProtectiveMbr->Partition[0].StartingLBA) != 1\r
) {\r
goto Done;\r
PartEntry\r
);\r
if (EFI_ERROR (Status)) {\r
+ GptValid = Status;\r
DEBUG ((EFI_D_INFO, " Partition Entry ReadBlocks error\n"));\r
goto Done;\r
}\r
//\r
// If we got this far the GPT layout of the disk is valid and we should return true\r
//\r
- GptValid = TRUE;\r
+ GptValid = EFI_SUCCESS;\r
\r
//\r
// Create child device handles\r
\r
Done:\r
if (ProtectiveMbr != NULL) {\r
- gBS->FreePool (ProtectiveMbr);\r
+ FreePool (ProtectiveMbr);\r
}\r
if (PrimaryHeader != NULL) {\r
- gBS->FreePool (PrimaryHeader);\r
+ FreePool (PrimaryHeader);\r
}\r
if (BackupHeader != NULL) {\r
- gBS->FreePool (BackupHeader);\r
+ FreePool (BackupHeader);\r
}\r
if (PartEntry != NULL) {\r
- gBS->FreePool (PartEntry);\r
+ FreePool (PartEntry);\r
}\r
if (PEntryStatus != NULL) {\r
- gBS->FreePool (PEntryStatus);\r
+ FreePool (PEntryStatus);\r
}\r
\r
return GptValid;\r
}\r
\r
+STATIC\r
BOOLEAN\r
PartitionValidGptTable (\r
IN EFI_BLOCK_IO_PROTOCOL *BlockIo,\r
PartHdr\r
);\r
if (EFI_ERROR (Status)) {\r
- gBS->FreePool (PartHdr);\r
+ FreePool (PartHdr);\r
return FALSE;\r
}\r
\r
PartHdr->MyLBA != Lba\r
) {\r
DEBUG ((EFI_D_INFO, " !Valid efi partition table header\n"));\r
- gBS->FreePool (PartHdr);\r
+ FreePool (PartHdr);\r
return FALSE;\r
}\r
\r
CopyMem (PartHeader, PartHdr, sizeof (EFI_PARTITION_TABLE_HEADER));\r
if (!PartitionCheckGptEntryArrayCRC (BlockIo, DiskIo, PartHeader)) {\r
- gBS->FreePool (PartHdr);\r
+ FreePool (PartHdr);\r
return FALSE;\r
}\r
\r
DEBUG ((EFI_D_INFO, " Valid efi partition table header\n"));\r
- gBS->FreePool (PartHdr);\r
+ FreePool (PartHdr);\r
return TRUE;\r
}\r
\r
+STATIC\r
BOOLEAN\r
PartitionCheckGptEntryArrayCRC (\r
IN EFI_BLOCK_IO_PROTOCOL *BlockIo,\r
Ptr\r
);\r
if (EFI_ERROR (Status)) {\r
- gBS->FreePool (Ptr);\r
+ FreePool (Ptr);\r
return FALSE;\r
}\r
\r
Status = gBS->CalculateCrc32 (Ptr, Size, &Crc);\r
if (EFI_ERROR (Status)) {\r
DEBUG ((EFI_D_ERROR, "CheckPEntryArrayCRC: Crc calculation failed\n"));\r
- gBS->FreePool (Ptr);\r
+ FreePool (Ptr);\r
return FALSE;\r
}\r
\r
- gBS->FreePool (Ptr);\r
+ FreePool (Ptr);\r
\r
return (BOOLEAN) (PartHeader->PartitionEntryArrayCRC32 == Crc);\r
}\r
\r
+STATIC\r
BOOLEAN\r
PartitionRestoreGptTable (\r
IN EFI_BLOCK_IO_PROTOCOL *BlockIo,\r
);\r
\r
Done:\r
- gBS->FreePool (PartHdr);\r
- gBS->FreePool (Ptr);\r
+ FreePool (PartHdr);\r
+ FreePool (Ptr);\r
\r
if (EFI_ERROR (Status)) {\r
return FALSE;\r
return TRUE;\r
}\r
\r
+STATIC\r
VOID\r
PartitionCheckGptEntry (\r
IN EFI_PARTITION_TABLE_HEADER *PartHeader,\r
DEBUG ((EFI_D_INFO, " End check partition entries\n"));\r
}\r
\r
+STATIC\r
VOID\r
PartitionSetCrc (\r
IN OUT EFI_TABLE_HEADER *Hdr\r
PartitionSetCrcAltSize (Hdr->HeaderSize, Hdr);\r
}\r
\r
+STATIC\r
VOID\r
PartitionSetCrcAltSize (\r
IN UINTN Size,\r
Hdr->CRC32 = Crc;\r
}\r
\r
+STATIC\r
BOOLEAN\r
PartitionCheckCrc (\r
IN UINTN MaxSize,\r
return PartitionCheckCrcAltSize (MaxSize, Hdr->HeaderSize, Hdr);\r
}\r
\r
+STATIC\r
BOOLEAN\r
PartitionCheckCrcAltSize (\r
IN UINTN MaxSize,\r