MdeModulePkg/UDF: Fix creation of UDF logical partition
[mirror_edk2.git] / MdeModulePkg / Universal / Disk / UdfDxe / Udf.h
index 240d420ff543a041aaabe6dee692ec77539542eb..d441539d162de92e5a56b21d0519b870e639ca1b 100644 (file)
     { 0x89, 0x56, 0x73, 0xCD, 0xA3, 0x26, 0xCD, 0x0A }  \\r
   }\r
 \r
-#define UDF_DEFAULT_LV_NUM 0\r
-\r
-#define IS_PVD(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 1))\r
-#define IS_PD(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 5))\r
-#define IS_LVD(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 6))\r
-#define IS_TD(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 8))\r
-#define IS_FSD(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 256))\r
-#define IS_FE(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 261))\r
-#define IS_EFE(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 266))\r
-#define IS_FID(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 257))\r
-#define IS_AED(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 258))\r
-#define IS_LVID(_Pointer) \\r
-  ((BOOLEAN)(_GET_TAG_ID (_Pointer) == 9))\r
-\r
-#define _GET_FILETYPE(_Pointer) \\r
-  (IS_FE (_Pointer) ? \\r
-   (((UDF_FILE_ENTRY *)(_Pointer))->IcbTag.FileType) \\r
-   : \\r
-   (((UDF_EXTENDED_FILE_ENTRY *)(_Pointer))->IcbTag.FileType))\r
-\r
-#define IS_FE_DIRECTORY(_Pointer) \\r
-  ((BOOLEAN)(_GET_FILETYPE (_Pointer) == 4))\r
-#define IS_FE_STANDARD_FILE(_Pointer) \\r
-  ((BOOLEAN)(_GET_FILETYPE (_Pointer) == 5))\r
-#define IS_FE_SYMLINK(_Pointer) \\r
-  ((BOOLEAN)(_GET_FILETYPE (_Pointer) == 12))\r
+#define FE_ICB_FILE_TYPE(_Ptr)                                      \\r
+  (UDF_FILE_ENTRY_TYPE)(                                            \\r
+    ((UDF_DESCRIPTOR_TAG *)(_Ptr))->TagIdentifier == UdfFileEntry ? \\r
+    ((UDF_FILE_ENTRY *)(_Ptr))->IcbTag.FileType :                   \\r
+    ((UDF_EXTENDED_FILE_ENTRY *)(_Ptr))->IcbTag.FileType)\r
+\r
+typedef enum {\r
+  UdfFileEntryDirectory = 4,\r
+  UdfFileEntryStandardFile = 5,\r
+  UdfFileEntrySymlink = 12,\r
+} UDF_FILE_ENTRY_TYPE;\r
 \r
 #define HIDDEN_FILE     (1 << 0)\r
 #define DIRECTORY_FILE  (1 << 1)\r
 #define DELETED_FILE    (1 << 2)\r
 #define PARENT_FILE     (1 << 3)\r
 \r
-#define _GET_FILE_CHARS(_Pointer) \\r
-  (((UDF_FILE_IDENTIFIER_DESCRIPTOR *)(_Pointer))->FileCharacteristics)\r
-\r
-#define IS_FID_HIDDEN_FILE(_Pointer) \\r
-  ((BOOLEAN)(_GET_FILE_CHARS (_Pointer) & HIDDEN_FILE))\r
-#define IS_FID_DIRECTORY_FILE(_Pointer) \\r
-  ((BOOLEAN)(_GET_FILE_CHARS (_Pointer) & DIRECTORY_FILE))\r
-#define IS_FID_DELETED_FILE(_Pointer) \\r
-  ((BOOLEAN)(_GET_FILE_CHARS (_Pointer) & DELETED_FILE))\r
-#define IS_FID_PARENT_FILE(_Pointer) \\r
-  ((BOOLEAN)(_GET_FILE_CHARS (_Pointer) & PARENT_FILE))\r
-#define IS_FID_NORMAL_FILE(_Pointer) \\r
-  ((BOOLEAN)(!IS_FID_DIRECTORY_FILE (_Pointer) && \\r
-         !IS_FID_PARENT_FILE (_Pointer)))\r
+#define IS_FID_HIDDEN_FILE(_Fid) \\r
+  (BOOLEAN)((_Fid)->FileCharacteristics & HIDDEN_FILE)\r
+#define IS_FID_DIRECTORY_FILE(_Fid) \\r
+  (BOOLEAN)((_Fid)->FileCharacteristics & DIRECTORY_FILE)\r
+#define IS_FID_DELETED_FILE(_Fid) \\r
+  (BOOLEAN)((_Fid)->FileCharacteristics & DELETED_FILE)\r
+#define IS_FID_PARENT_FILE(_Fid) \\r
+  (BOOLEAN)((_Fid)->FileCharacteristics & PARENT_FILE)\r
+#define IS_FID_NORMAL_FILE(_Fid) \\r
+  (BOOLEAN)(!IS_FID_DIRECTORY_FILE (_Fid) && \\r
+            !IS_FID_PARENT_FILE (_Fid))\r
 \r
 typedef enum {\r
-  SHORT_ADS_SEQUENCE,\r
-  LONG_ADS_SEQUENCE,\r
-  EXTENDED_ADS_SEQUENCE,\r
-  INLINE_DATA\r
+  ShortAdsSequence,\r
+  LongAdsSequence,\r
+  ExtendedAdsSequence,\r
+  InlineData\r
 } UDF_FE_RECORDING_FLAGS;\r
 \r
 #define GET_FE_RECORDING_FLAGS(_Fe) \\r
@@ -118,26 +91,26 @@ typedef enum {
                   sizeof (UDF_DESCRIPTOR_TAG)))->Flags & 0x07)\r
 \r
 typedef enum {\r
-  EXTENT_RECORDED_AND_ALLOCATED,\r
-  EXTENT_NOT_RECORDED_BUT_ALLOCATED,\r
-  EXTENT_NOT_RECORDED_NOT_ALLOCATED,\r
-  EXTENT_IS_NEXT_EXTENT,\r
+  ExtentRecordedAndAllocated,\r
+  ExtentNotRecordedButAllocated,\r
+  ExtentNotRecordedNotAllocated,\r
+  ExtentIsNextExtent,\r
 } UDF_EXTENT_FLAGS;\r
 \r
 #define AD_LENGTH(_RecFlags) \\r
-  ((_RecFlags) == SHORT_ADS_SEQUENCE ? \\r
+  ((_RecFlags) == ShortAdsSequence ? \\r
    ((UINT64)(sizeof (UDF_SHORT_ALLOCATION_DESCRIPTOR))) : \\r
    ((UINT64)(sizeof (UDF_LONG_ALLOCATION_DESCRIPTOR))))\r
 \r
 #define GET_EXTENT_FLAGS(_RecFlags, _Ad) \\r
-  ((_RecFlags) == SHORT_ADS_SEQUENCE ? \\r
+  ((_RecFlags) == ShortAdsSequence ? \\r
    ((UDF_EXTENT_FLAGS)((((UDF_SHORT_ALLOCATION_DESCRIPTOR *)(_Ad))->ExtentLength >> \\r
             30) & 0x3)) : \\r
    ((UDF_EXTENT_FLAGS)((((UDF_LONG_ALLOCATION_DESCRIPTOR *)(_Ad))->ExtentLength >> \\r
             30) & 0x3)))\r
 \r
 #define GET_EXTENT_LENGTH(_RecFlags, _Ad) \\r
-  ((_RecFlags) == SHORT_ADS_SEQUENCE ? \\r
+  ((_RecFlags) == ShortAdsSequence ? \\r
    ((UINT32)((((UDF_SHORT_ALLOCATION_DESCRIPTOR *)(_Ad))->ExtentLength & \\r
           ~0xC0000000UL))) : \\r
    ((UINT32)((((UDF_LONG_ALLOCATION_DESCRIPTOR *)(_Ad))->ExtentLength & \\r
@@ -152,14 +125,8 @@ typedef enum {
 #define IS_VALID_COMPRESSION_ID(_CompId) \\r
   ((BOOLEAN)((_CompId) == 8 || (_CompId) == 16))\r
 \r
-#define LV_BLOCK_SIZE(_Vol, _LvNum) \\r
-  (_Vol)->LogicalVolDescs[(_LvNum)]->LogicalBlockSize\r
-\r
 #define UDF_STANDARD_IDENTIFIER_LENGTH   5\r
 \r
-#define LV_UDF_REVISION(_Lv) \\r
-  *(UINT16 *)(UINTN)(_Lv)->DomainIdentifier.IdentifierSuffix\r
-\r
 #pragma pack(1)\r
 \r
 typedef struct {\r
@@ -169,9 +136,9 @@ typedef struct {
 #pragma pack()\r
 \r
 typedef enum {\r
-  READ_FILE_GET_FILESIZE,\r
-  READ_FILE_ALLOCATE_AND_READ,\r
-  READ_FILE_SEEK_AND_READ,\r
+  ReadFileGetFileSize,\r
+  ReadFileAllocateAndRead,\r
+  ReadFileSeekAndRead,\r
 } UDF_READ_FILE_FLAGS;\r
 \r
 typedef struct {\r
@@ -185,17 +152,6 @@ typedef struct {
 \r
 #pragma pack(1)\r
 \r
-typedef struct {\r
-  UINT8           CharacterSetType;\r
-  UINT8           CharacterSetInfo[63];\r
-} UDF_CHAR_SPEC;\r
-\r
-typedef struct {\r
-  UINT8           Flags;\r
-  UINT8           Identifier[23];\r
-  UINT8           IdentifierSuffix[8];\r
-} UDF_ENTITY_ID;\r
-\r
 typedef struct {\r
   UINT16          TypeAndTimezone;\r
   INT16           Year;\r
@@ -209,17 +165,6 @@ typedef struct {
   UINT8           Microseconds;\r
 } UDF_TIMESTAMP;\r
 \r
-typedef struct {\r
-  UINT32        LogicalBlockNumber;\r
-  UINT16        PartitionReferenceNumber;\r
-} UDF_LB_ADDR;\r
-\r
-typedef struct {\r
-  UINT32                           ExtentLength;\r
-  UDF_LB_ADDR                      ExtentLocation;\r
-  UINT8                            ImplementationUse[6];\r
-} UDF_LONG_ALLOCATION_DESCRIPTOR;\r
-\r
 typedef struct {\r
   UDF_DESCRIPTOR_TAG                 DescriptorTag;\r
   UINT32                             PrevAllocationExtentDescriptor;\r
@@ -234,6 +179,17 @@ typedef struct {
   UINT8                   StructureData[2040];\r
 } UDF_VOLUME_DESCRIPTOR;\r
 \r
+typedef struct {\r
+  UDF_DESCRIPTOR_TAG             DescriptorTag;\r
+  UDF_TIMESTAMP                  RecordingDateTime;\r
+  UINT32                         IntegrityType;\r
+  UDF_EXTENT_AD                  NextIntegrityExtent;\r
+  UINT8                          LogicalVolumeContentsUse[32];\r
+  UINT32                         NumberOfPartitions;\r
+  UINT32                         LengthOfImplementationUse;\r
+  UINT8                          Data[0];\r
+} UDF_LOGICAL_VOLUME_INTEGRITY;\r
+\r
 typedef struct {\r
   UDF_DESCRIPTOR_TAG         DescriptorTag;\r
   UINT32                     VolumeDescriptorSequenceNumber;\r
@@ -249,33 +205,6 @@ typedef struct {
   UINT8                      Reserved[156];\r
 } UDF_PARTITION_DESCRIPTOR;\r
 \r
-typedef struct {\r
-  UDF_DESCRIPTOR_TAG              DescriptorTag;\r
-  UINT32                          VolumeDescriptorSequenceNumber;\r
-  UDF_CHAR_SPEC                   DescriptorCharacterSet;\r
-  UINT8                           LogicalVolumeIdentifier[128];\r
-  UINT32                          LogicalBlockSize;\r
-  UDF_ENTITY_ID                   DomainIdentifier;\r
-  UDF_LONG_ALLOCATION_DESCRIPTOR  LogicalVolumeContentsUse;\r
-  UINT32                          MapTableLength;\r
-  UINT32                          NumberOfPartitionMaps;\r
-  UDF_ENTITY_ID                   ImplementationIdentifier;\r
-  UINT8                           ImplementationUse[128];\r
-  UDF_EXTENT_AD                   IntegritySequenceExtent;\r
-  UINT8                           PartitionMaps[6];\r
-} UDF_LOGICAL_VOLUME_DESCRIPTOR;\r
-\r
-typedef struct {\r
-  UDF_DESCRIPTOR_TAG             DescriptorTag;\r
-  UDF_TIMESTAMP                  RecordingDateTime;\r
-  UINT32                         IntegrityType;\r
-  UDF_EXTENT_AD                  NextIntegrityExtent;\r
-  UINT8                          LogicalVolumeContentsUse[32];\r
-  UINT32                         NumberOfPartitions;\r
-  UINT32                         LengthOfImplementationUse;\r
-  UINT8                          Data[0];\r
-} UDF_LOGICAL_VOLUME_INTEGRITY;\r
-\r
 typedef struct {\r
   UDF_DESCRIPTOR_TAG              DescriptorTag;\r
   UDF_TIMESTAMP                   RecordingDateAndTime;\r
@@ -389,12 +318,10 @@ typedef struct {
 // UDF filesystem driver's private data\r
 //\r
 typedef struct {\r
-  UDF_LOGICAL_VOLUME_DESCRIPTOR  **LogicalVolDescs;\r
-  UINTN                          LogicalVolDescsNo;\r
-  UDF_PARTITION_DESCRIPTOR       **PartitionDescs;\r
-  UINTN                          PartitionDescsNo;\r
-  UDF_FILE_SET_DESCRIPTOR        **FileSetDescs;\r
-  UINTN                          FileSetDescsNo;\r
+  UINT64                         MainVdsStartLocation;\r
+  UDF_LOGICAL_VOLUME_DESCRIPTOR  LogicalVolDesc;\r
+  UDF_PARTITION_DESCRIPTOR       PartitionDesc;\r
+  UDF_FILE_SET_DESCRIPTOR        FileSetDesc;\r
   UINTN                          FileEntrySize;\r
 } UDF_VOLUME_INFO;\r
 \r
@@ -659,7 +586,7 @@ UdfGetInfo (
 /**\r
   Set information about a file.\r
 \r
-  @param  File            Protocol instance pointer.\r
+  @param  This            Protocol instance pointer.\r
   @param  InformationType Type of information in Buffer.\r
   @param  BufferSize      Size of buffer.\r
   @param  Buffer          The data to write.\r
@@ -783,13 +710,14 @@ FindFileEntry (
   @param[in]   FilePath  File's absolute path.\r
   @param[in]   Root      Root directory file.\r
   @param[in]   Parent    Parent directory file.\r
+  @param[in]   Icb       ICB of Parent.\r
   @param[out]  File      Found file.\r
 \r
-  @retval EFI_SUCCESS          @p FilePath was found.\r
+  @retval EFI_SUCCESS          FilePath was found.\r
   @retval EFI_NO_MEDIA         The device has no media.\r
   @retval EFI_DEVICE_ERROR     The device reported an error.\r
   @retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.\r
-  @retval EFI_OUT_OF_RESOURCES The @p FilePath file was not found due to lack of\r
+  @retval EFI_OUT_OF_RESOURCES The FilePath file was not found due to lack of\r
                                resources.\r
 \r
 **/\r
@@ -813,7 +741,7 @@ FindFile (
   @param[in]      Volume         UDF volume information structure.\r
   @param[in]      ParentIcb      ICB of the parent file.\r
   @param[in]      FileEntryData  FE/EFE of the parent file.\r
-  @param[in out]  ReadDirInfo    Next read directory listing structure\r
+  @param[in, out] ReadDirInfo    Next read directory listing structure\r
                                  information.\r
   @param[out]     FoundFid       File Identifier Descriptor pointer.\r
 \r
@@ -882,17 +810,6 @@ ResolveSymlink (
   OUT  UDF_FILE_INFO          *File\r
   );\r
 \r
-/**\r
-  Clean up in-memory UDF volume information.\r
-\r
-  @param[in] Volume Volume information pointer.\r
-\r
-**/\r
-VOID\r
-CleanupVolumeInformation (\r
-  IN UDF_VOLUME_INFO *Volume\r
-  );\r
-\r
 /**\r
   Clean up in-memory UDF file information.\r
 \r
@@ -913,7 +830,7 @@ CleanupFileInformation (
   @param[in]   File     File information structure.\r
   @param[out]  Size     Size of the file.\r
 \r
-  @retval EFI_SUCCESS          File size calculated and set in @p Size.\r
+  @retval EFI_SUCCESS          File size calculated and set in Size.\r
   @retval EFI_UNSUPPORTED      Extended Allocation Descriptors not supported.\r
   @retval EFI_NO_MEDIA         The device has no media.\r
   @retval EFI_DEVICE_ERROR     The device reported an error.\r
@@ -937,7 +854,7 @@ GetFileSize (
   @param[in]      File        File pointer.\r
   @param[in]      FileSize    Size of the file.\r
   @param[in]      FileName    Filename of the file.\r
-  @param[in out]  BufferSize  Size of the returned file infomation.\r
+  @param[in, out] BufferSize  Size of the returned file infomation.\r
   @param[out]     Buffer      Data of the returned file information.\r
 \r
   @retval EFI_SUCCESS          File information set.\r
@@ -991,9 +908,9 @@ GetVolumeSize (
   @param[in]      Volume        UDF volume information structure.\r
   @param[in]      File          File information structure.\r
   @param[in]      FileSize      Size of the file.\r
-  @param[in out]  FilePosition  File position.\r
-  @param[in out]  Buffer        File data.\r
-  @param[in out]  BufferSize    Read size.\r
+  @param[in, out] FilePosition  File position.\r
+  @param[in, out] Buffer        File data.\r
+  @param[in, out] BufferSize    Read size.\r
 \r
   @retval EFI_SUCCESS          File seeked and read.\r
   @retval EFI_UNSUPPORTED      Extended Allocation Descriptors not supported.\r
@@ -1037,7 +954,7 @@ SupportUdfFileSystem (
 \r
   @param[in] FileName Filename.\r
 \r
-  @retval @p FileName Filename mangled.\r
+  @retval The mangled Filename.\r
 \r
 **/\r
 CHAR16 *\r