]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Disk/PartitionDxe/Partition.h
BaseTools: GlobalData Add a regular expression for a hex number
[mirror_edk2.git] / MdeModulePkg / Universal / Disk / PartitionDxe / Partition.h
index d0d0d52a25965d12bebeefa8ae9dfaf0dbab47cf..c763c676a9ed30ffed0d80557920f4957e30cd0d 100644 (file)
@@ -1,11 +1,11 @@
 /** @file\r
   Partition driver that produces logical BlockIo devices from a physical \r
   BlockIo device. The logical BlockIo devices are based on the format\r
-  of the raw block devices media. Currently "El Torito CD-ROM", Legacy \r
+  of the raw block devices media. Currently "El Torito CD-ROM", UDF, Legacy\r
   MBR, and GPT partition schemes are supported.\r
 \r
-Copyright (c) 2006 - 2008, Intel Corporation. <BR>\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
 http://opensource.org/licenses/bsd-license.php\r
@@ -20,11 +20,14 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #include <Uefi.h>\r
 #include <Protocol/BlockIo.h>\r
+#include <Protocol/BlockIo2.h>\r
 #include <Guid/Gpt.h>\r
 #include <Protocol/ComponentName.h>\r
 #include <Protocol/DevicePath.h>\r
 #include <Protocol/DriverBinding.h>\r
 #include <Protocol/DiskIo.h>\r
+#include <Protocol/DiskIo2.h>\r
+#include <Protocol/PartitionInfo.h>\r
 #include <Library/DebugLib.h>\r
 #include <Library/UefiDriverEntryPoint.h>\r
 #include <Library/BaseLib.h>\r
@@ -36,31 +39,43 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #include <IndustryStandard/Mbr.h>\r
 #include <IndustryStandard/ElTorito.h>\r
-\r
+#include <IndustryStandard/Udf.h>\r
 \r
 //\r
 // Partition private data\r
 //\r
 #define PARTITION_PRIVATE_DATA_SIGNATURE  SIGNATURE_32 ('P', 'a', 'r', 't')\r
 typedef struct {\r
-  UINT64                    Signature;\r
-\r
-  EFI_HANDLE                Handle;\r
-  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;\r
-  EFI_BLOCK_IO_PROTOCOL     BlockIo;\r
-  EFI_BLOCK_IO_MEDIA        Media;\r
-\r
-  EFI_DISK_IO_PROTOCOL      *DiskIo;\r
-  EFI_BLOCK_IO_PROTOCOL     *ParentBlockIo;\r
-  UINT64                    Start;\r
-  UINT64                    End;\r
-  UINT32                    BlockSize;\r
-\r
-  EFI_GUID                  *EspGuid;\r
+  UINT64                       Signature;\r
+\r
+  EFI_HANDLE                   Handle;\r
+  EFI_DEVICE_PATH_PROTOCOL     *DevicePath;\r
+  EFI_BLOCK_IO_PROTOCOL        BlockIo;\r
+  EFI_BLOCK_IO2_PROTOCOL       BlockIo2;\r
+  EFI_BLOCK_IO_MEDIA           Media;\r
+  EFI_BLOCK_IO_MEDIA           Media2;//For BlockIO2\r
+  EFI_PARTITION_INFO_PROTOCOL  PartitionInfo;\r
+\r
+  EFI_DISK_IO_PROTOCOL         *DiskIo;\r
+  EFI_DISK_IO2_PROTOCOL        *DiskIo2;\r
+  EFI_BLOCK_IO_PROTOCOL        *ParentBlockIo;\r
+  EFI_BLOCK_IO2_PROTOCOL       *ParentBlockIo2;\r
+  UINT64                       Start;\r
+  UINT64                       End;\r
+  UINT32                       BlockSize;\r
+  BOOLEAN                      InStop;\r
+\r
+  EFI_GUID                     *EspGuid;\r
 \r
 } PARTITION_PRIVATE_DATA;\r
 \r
+typedef struct {\r
+  EFI_DISK_IO2_TOKEN           DiskIo2Token;\r
+  EFI_BLOCK_IO2_TOKEN          *BlockIo2Token;\r
+} PARTITION_ACCESS_TASK;\r
+\r
 #define PARTITION_DEVICE_FROM_BLOCK_IO_THIS(a)  CR (a, PARTITION_PRIVATE_DATA, BlockIo, PARTITION_PRIVATE_DATA_SIGNATURE)\r
+#define PARTITION_DEVICE_FROM_BLOCK_IO2_THIS(a) CR (a, PARTITION_PRIVATE_DATA, BlockIo2, PARTITION_PRIVATE_DATA_SIGNATURE)\r
 \r
 //\r
 // Global Variables\r
@@ -92,6 +107,7 @@ extern EFI_COMPONENT_NAME2_PROTOCOL  gPartitionComponentName2;
 typedef struct {\r
   BOOLEAN OutOfRange;\r
   BOOLEAN Overlap;\r
+  BOOLEAN OsSpecific;\r
 } EFI_PARTITION_ENTRY_STATUS;\r
 \r
 //\r
@@ -188,7 +204,7 @@ PartitionDriverBindingStop (
                                 languages specified in SupportedLanguages. The\r
                                 number of languages supported by a driver is up\r
                                 to the driver writer. Language is specified\r
-                                in RFC 3066 or ISO 639-2 language code format.\r
+                                in RFC 4646 or ISO 639-2 language code format.\r
 \r
   @param  DriverName[out]       A pointer to the Unicode string to return.\r
                                 This Unicode string is the name of the\r
@@ -253,7 +269,7 @@ PartitionComponentNameGetDriverName (
                                 languages specified in SupportedLanguages. The\r
                                 number of languages supported by a driver is up\r
                                 to the driver writer. Language is specified in\r
-                                RFC 3066 or ISO 639-2 language code format.\r
+                                RFC 4646 or ISO 639-2 language code format.\r
 \r
   @param  ControllerName[out]   A pointer to the Unicode string to return.\r
                                 This Unicode string is the name of the\r
@@ -299,19 +315,21 @@ PartitionComponentNameGetControllerName (
   Create a child handle for a logical block device that represents the\r
   bytes Start to End of the Parent Block IO device.\r
 \r
-  @param[in]  This              Protocol instance pointer\r
-  @param[in]  ParentHandle      Parent Handle for new child\r
-  @param[in]  ParentDiskIo      Parent DiskIo interface\r
-  @param[in]  ParentBlockIo     Parent BlockIo interface\r
-  @param[in]  ParentDevicePath  Parent Device Path\r
-  @param[in]  DevicePathNode    Child Device Path node\r
-  @param[in]  Start             Start Block\r
-  @param[in]  End               End Block\r
-  @param[in]  BlockSize         Child block size\r
-  @param[in]  InstallEspGuid    Flag to install EFI System Partition GUID on handle\r
+  @param[in]  This              Protocol instance pointer.\r
+  @param[in]  ParentHandle      Parent Handle for new child.\r
+  @param[in]  ParentDiskIo      Parent DiskIo interface.\r
+  @param[in]  ParentDiskIo2     Parent DiskIo2 interface.\r
+  @param[in]  ParentBlockIo     Parent BlockIo interface.\r
+  @param[in]  ParentBlockIo2    Parent BlockIo2 interface.\r
+  @param[in]  ParentDevicePath  Parent Device Path.\r
+  @param[in]  DevicePathNode    Child Device Path node.\r
+  @param[in]  PartitionInfo     Child Partition Information interface.\r
+  @param[in]  Start             Start Block.\r
+  @param[in]  End               End Block.\r
+  @param[in]  BlockSize         Child block size.\r
 \r
-  @retval EFI_SUCCESS       A child handle was added\r
-  @retval other             A child handle was not added\r
+  @retval EFI_SUCCESS       A child handle was added.\r
+  @retval other             A child handle was not added.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -319,27 +337,46 @@ PartitionInstallChildHandle (
   IN  EFI_DRIVER_BINDING_PROTOCOL  *This,\r
   IN  EFI_HANDLE                   ParentHandle,\r
   IN  EFI_DISK_IO_PROTOCOL         *ParentDiskIo,\r
+  IN  EFI_DISK_IO2_PROTOCOL        *ParentDiskIo2,\r
   IN  EFI_BLOCK_IO_PROTOCOL        *ParentBlockIo,\r
+  IN  EFI_BLOCK_IO2_PROTOCOL       *ParentBlockIo2,\r
   IN  EFI_DEVICE_PATH_PROTOCOL     *ParentDevicePath,\r
   IN  EFI_DEVICE_PATH_PROTOCOL     *DevicePathNode,\r
+  IN  EFI_PARTITION_INFO_PROTOCOL  *PartitionInfo,\r
   IN  EFI_LBA                      Start,\r
   IN  EFI_LBA                      End,\r
-  IN  UINT32                       BlockSize,\r
-  IN  BOOLEAN                      InstallEspGuid\r
+  IN  UINT32                       BlockSize\r
+  );\r
+\r
+/**\r
+  Test to see if there is any child on ControllerHandle.\r
+\r
+  @param[in]  ControllerHandle    Handle of device to test.\r
+\r
+  @retval TRUE                    There are children on the ControllerHandle.\r
+  @retval FALSE                   No child is on the ControllerHandle.\r
+\r
+**/\r
+BOOLEAN\r
+HasChildren (\r
+  IN EFI_HANDLE           ControllerHandle\r
   );\r
 \r
 /**\r
   Install child handles if the Handle supports GPT partition structure.\r
 \r
-  @param[in]  This       - Calling context.\r
-  @param[in]  Handle     - Parent Handle\r
-  @param[in]  DiskIo     - Parent DiskIo interface\r
-  @param[in]  BlockIo    - Parent BlockIo interface\r
-  @param[in]  DevicePath - Parent Device Path\r
+  @param[in]  This       Calling context.\r
+  @param[in]  Handle     Parent Handle.\r
+  @param[in]  DiskIo     Parent DiskIo interface.\r
+  @param[in]  DiskIo2    Parent DiskIo2 interface.\r
+  @param[in]  BlockIo    Parent BlockIo interface.\r
+  @param[in]  BlockIo2   Parent BlockIo2 interface.\r
+  @param[in]  DevicePath Parent Device Path.\r
 \r
-  @retval EFI_SUCCESS         Valid GPT disk\r
-  @retval EFI_MEDIA_CHANGED   Media changed Detected\r
-  @retval other               Not a valid GPT disk\r
+  @retval EFI_SUCCESS           Valid GPT disk.\r
+  @retval EFI_MEDIA_CHANGED     Media changed Detected.\r
+  @retval EFI_INVALID_PARAMETER If both BlockIo and BlockIo2 are NULL;\r
+  @retval other                 Not a valid GPT disk.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -347,7 +384,9 @@ PartitionInstallGptChildHandles (
   IN  EFI_DRIVER_BINDING_PROTOCOL  *This,\r
   IN  EFI_HANDLE                   Handle,\r
   IN  EFI_DISK_IO_PROTOCOL         *DiskIo,\r
+  IN  EFI_DISK_IO2_PROTOCOL        *DiskIo2,\r
   IN  EFI_BLOCK_IO_PROTOCOL        *BlockIo,\r
+  IN  EFI_BLOCK_IO2_PROTOCOL       *BlockIo2,\r
   IN  EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   );\r
 \r
@@ -355,15 +394,17 @@ PartitionInstallGptChildHandles (
   Install child handles if the Handle supports El Torito format.\r
 \r
   @param[in]  This        Calling context.\r
-  @param[in]  Handle      Parent Handle\r
-  @param[in]  DiskIo      Parent DiskIo interface\r
-  @param[in]  BlockIo     Parent BlockIo interface\r
+  @param[in]  Handle      Parent Handle.\r
+  @param[in]  DiskIo      Parent DiskIo interface.\r
+  @param[in]  DiskIo2     Parent DiskIo2 interface.\r
+  @param[in]  BlockIo     Parent BlockIo interface.\r
+  @param[in]  BlockIo2    Parent BlockIo2 interface.\r
   @param[in]  DevicePath  Parent Device Path\r
 \r
 \r
-  @retval EFI_SUCCESS         Child handle(s) was added\r
-  @retval EFI_MEDIA_CHANGED   Media changed Detected\r
-  @retval other               no child handle was added\r
+  @retval EFI_SUCCESS         Child handle(s) was added.\r
+  @retval EFI_MEDIA_CHANGED   Media changed Detected.\r
+  @retval other               no child handle was added.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -371,18 +412,22 @@ PartitionInstallElToritoChildHandles (
   IN  EFI_DRIVER_BINDING_PROTOCOL  *This,\r
   IN  EFI_HANDLE                   Handle,\r
   IN  EFI_DISK_IO_PROTOCOL         *DiskIo,\r
+  IN  EFI_DISK_IO2_PROTOCOL        *DiskIo2,\r
   IN  EFI_BLOCK_IO_PROTOCOL        *BlockIo,\r
+  IN  EFI_BLOCK_IO2_PROTOCOL       *BlockIo2,\r
   IN  EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   );\r
 \r
 /**\r
   Install child handles if the Handle supports MBR format.\r
 \r
-  @param  This              Calling context.\r
-  @param  Handle            Parent Handle.\r
-  @param  DiskIo            Parent DiskIo interface.\r
-  @param  BlockIo           Parent BlockIo interface.\r
-  @param  DevicePath        Parent Device Path.\r
+  @param[in]  This              Calling context.\r
+  @param[in]  Handle            Parent Handle.\r
+  @param[in]  DiskIo            Parent DiskIo interface.\r
+  @param[in]  DiskIo2           Parent DiskIo2 interface.\r
+  @param[in]  BlockIo           Parent BlockIo interface.\r
+  @param[in]  BlockIo2          Parent BlockIo2 interface.\r
+  @param[in]  DevicePath        Parent Device Path.\r
    \r
   @retval EFI_SUCCESS       A child handle was added.\r
   @retval EFI_MEDIA_CHANGED Media change was detected.\r
@@ -394,7 +439,37 @@ PartitionInstallMbrChildHandles (
   IN  EFI_DRIVER_BINDING_PROTOCOL  *This,\r
   IN  EFI_HANDLE                   Handle,\r
   IN  EFI_DISK_IO_PROTOCOL         *DiskIo,\r
+  IN  EFI_DISK_IO2_PROTOCOL        *DiskIo2,\r
+  IN  EFI_BLOCK_IO_PROTOCOL        *BlockIo,\r
+  IN  EFI_BLOCK_IO2_PROTOCOL       *BlockIo2,\r
+  IN  EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
+  );\r
+\r
+/**\r
+  Install child handles if the Handle supports UDF/ECMA-167 volume format.\r
+\r
+  @param[in]  This        Calling context.\r
+  @param[in]  Handle      Parent Handle.\r
+  @param[in]  DiskIo      Parent DiskIo interface.\r
+  @param[in]  DiskIo2     Parent DiskIo2 interface.\r
+  @param[in]  BlockIo     Parent BlockIo interface.\r
+  @param[in]  BlockIo2    Parent BlockIo2 interface.\r
+  @param[in]  DevicePath  Parent Device Path\r
+\r
+\r
+  @retval EFI_SUCCESS         Child handle(s) was added.\r
+  @retval EFI_MEDIA_CHANGED   Media changed Detected.\r
+  @retval other               no child handle was added.\r
+\r
+**/\r
+EFI_STATUS\r
+PartitionInstallUdfChildHandles (\r
+  IN  EFI_DRIVER_BINDING_PROTOCOL  *This,\r
+  IN  EFI_HANDLE                   Handle,\r
+  IN  EFI_DISK_IO_PROTOCOL         *DiskIo,\r
+  IN  EFI_DISK_IO2_PROTOCOL        *DiskIo2,\r
   IN  EFI_BLOCK_IO_PROTOCOL        *BlockIo,\r
+  IN  EFI_BLOCK_IO2_PROTOCOL       *BlockIo2,\r
   IN  EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   );\r
 \r
@@ -404,7 +479,9 @@ EFI_STATUS
   IN  EFI_DRIVER_BINDING_PROTOCOL  *This,\r
   IN  EFI_HANDLE                   Handle,\r
   IN  EFI_DISK_IO_PROTOCOL         *DiskIo,\r
+  IN  EFI_DISK_IO2_PROTOCOL        *DiskIo2,\r
   IN  EFI_BLOCK_IO_PROTOCOL        *BlockIo,\r
+  IN  EFI_BLOCK_IO2_PROTOCOL       *BlockIo2,\r
   IN  EFI_DEVICE_PATH_PROTOCOL     *DevicePath\r
   );\r
 \r