]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/Disk/Partition/Dxe/Gpt.c
Perfect the msa of the following modules, DiskIo, Partition, English and Ebc.
[mirror_edk2.git] / EdkModulePkg / Universal / Disk / Partition / Dxe / Gpt.c
index 9077ac63c2e067a99bf83996bb9bfe46d10d92ec..61a4ec5e70e9fc51e9e62d8687e0b90806c82a26 100644 (file)
@@ -21,9 +21,8 @@ Abstract:
 --*/\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
@@ -32,6 +31,7 @@ PartitionValidGptTable (
   OUT EFI_PARTITION_TABLE_HEADER  *PartHeader\r
   );\r
 \r
+STATIC\r
 BOOLEAN\r
 PartitionCheckGptEntryArrayCRC (\r
   IN  EFI_BLOCK_IO_PROTOCOL       *BlockIo,\r
@@ -39,6 +39,7 @@ PartitionCheckGptEntryArrayCRC (
   IN  EFI_PARTITION_TABLE_HEADER  *PartHeader\r
   );\r
 \r
+STATIC\r
 BOOLEAN\r
 PartitionRestoreGptTable (\r
   IN  EFI_BLOCK_IO_PROTOCOL       *BlockIo,\r
@@ -46,6 +47,7 @@ PartitionRestoreGptTable (
   IN  EFI_PARTITION_TABLE_HEADER  *PartHeader\r
   );\r
 \r
+STATIC\r
 VOID\r
 PartitionCheckGptEntry (\r
   IN  EFI_PARTITION_TABLE_HEADER  *PartHeader,\r
@@ -53,6 +55,7 @@ PartitionCheckGptEntry (
   OUT EFI_PARTITION_ENTRY_STATUS  *PEntryStatus\r
   );\r
 \r
+STATIC\r
 BOOLEAN\r
 PartitionCheckCrcAltSize (\r
   IN UINTN                 MaxSize,\r
@@ -60,24 +63,27 @@ PartitionCheckCrcAltSize (
   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
@@ -98,8 +104,9 @@ Arguments:
   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
@@ -112,7 +119,7 @@ Returns:
   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
@@ -127,14 +134,14 @@ Returns:
   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
@@ -148,13 +155,14 @@ Returns:
                       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
@@ -226,6 +234,7 @@ Returns:
                     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
@@ -248,7 +257,7 @@ Returns:
   //\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
@@ -301,24 +310,25 @@ Returns:
 \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
@@ -366,7 +376,7 @@ Returns:
                       PartHdr\r
                       );\r
   if (EFI_ERROR (Status)) {\r
-    gBS->FreePool (PartHdr);\r
+    FreePool (PartHdr);\r
     return FALSE;\r
   }\r
 \r
@@ -375,21 +385,22 @@ Returns:
       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
@@ -438,7 +449,7 @@ Returns:
                     Ptr\r
                     );\r
   if (EFI_ERROR (Status)) {\r
-    gBS->FreePool (Ptr);\r
+    FreePool (Ptr);\r
     return FALSE;\r
   }\r
 \r
@@ -447,15 +458,16 @@ Returns:
   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
@@ -543,8 +555,8 @@ Returns:
                     );\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
@@ -553,6 +565,7 @@ Done:
   return TRUE;\r
 }\r
 \r
+STATIC\r
 VOID\r
 PartitionCheckGptEntry (\r
   IN  EFI_PARTITION_TABLE_HEADER  *PartHeader,\r
@@ -621,6 +634,7 @@ Returns:
   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
@@ -644,6 +658,7 @@ Returns:
   PartitionSetCrcAltSize (Hdr->HeaderSize, Hdr);\r
 }\r
 \r
+STATIC\r
 VOID\r
 PartitionSetCrcAltSize (\r
   IN UINTN                 Size,\r
@@ -673,6 +688,7 @@ Returns:
   Hdr->CRC32 = Crc;\r
 }\r
 \r
+STATIC\r
 BOOLEAN\r
 PartitionCheckCrc (\r
   IN UINTN                 MaxSize,\r
@@ -698,6 +714,7 @@ Returns:
   return PartitionCheckCrcAltSize (MaxSize, Hdr->HeaderSize, Hdr);\r
 }\r
 \r
+STATIC\r
 BOOLEAN\r
 PartitionCheckCrcAltSize (\r
   IN UINTN                 MaxSize,\r