42#define EFI_UDF_DEVICE_PATH_GUID \
43 { 0xC5BD4D42, 0x1A76, 0x4996, \
44 { 0x89, 0x56, 0x73, 0xCD, 0xA3, 0x26, 0xCD, 0x0A } \
47#define FE_ICB_FILE_TYPE(_Ptr) \
48 (UDF_FILE_ENTRY_TYPE)( \
49 ((UDF_DESCRIPTOR_TAG *)(_Ptr))->TagIdentifier == UdfFileEntry ? \
50 ((UDF_FILE_ENTRY *)(_Ptr))->IcbTag.FileType : \
51 ((UDF_EXTENDED_FILE_ENTRY *)(_Ptr))->IcbTag.FileType)
54 UdfFileEntryDirectory = 4,
55 UdfFileEntryStandardFile = 5,
56 UdfFileEntrySymlink = 12,
59#define HIDDEN_FILE (1 << 0)
60#define DIRECTORY_FILE (1 << 1)
61#define DELETED_FILE (1 << 2)
62#define PARENT_FILE (1 << 3)
64#define IS_FID_HIDDEN_FILE(_Fid) \
65 (BOOLEAN)((_Fid)->FileCharacteristics & HIDDEN_FILE)
66#define IS_FID_DIRECTORY_FILE(_Fid) \
67 (BOOLEAN)((_Fid)->FileCharacteristics & DIRECTORY_FILE)
68#define IS_FID_DELETED_FILE(_Fid) \
69 (BOOLEAN)((_Fid)->FileCharacteristics & DELETED_FILE)
70#define IS_FID_PARENT_FILE(_Fid) \
71 (BOOLEAN)((_Fid)->FileCharacteristics & PARENT_FILE)
72#define IS_FID_NORMAL_FILE(_Fid) \
73 (BOOLEAN)(!IS_FID_DIRECTORY_FILE (_Fid) && \
74 !IS_FID_PARENT_FILE (_Fid))
81} UDF_FE_RECORDING_FLAGS;
83#define GET_FE_RECORDING_FLAGS(_Fe) \
84 ((UDF_FE_RECORDING_FLAGS)((UDF_ICB_TAG *)( \
86 sizeof (UDF_DESCRIPTOR_TAG)))->Flags & 0x07)
89 ExtentRecordedAndAllocated,
90 ExtentNotRecordedButAllocated,
91 ExtentNotRecordedNotAllocated,
95#define AD_LENGTH(_RecFlags) \
96 ((_RecFlags) == ShortAdsSequence ? \
97 ((UINT64)(sizeof (UDF_SHORT_ALLOCATION_DESCRIPTOR))) : \
98 ((UINT64)(sizeof (UDF_LONG_ALLOCATION_DESCRIPTOR))))
100#define GET_EXTENT_FLAGS(_RecFlags, _Ad) \
101 ((_RecFlags) == ShortAdsSequence ? \
102 ((UDF_EXTENT_FLAGS)((((UDF_SHORT_ALLOCATION_DESCRIPTOR *)(_Ad))->ExtentLength >> \
104 ((UDF_EXTENT_FLAGS)((((UDF_LONG_ALLOCATION_DESCRIPTOR *)(_Ad))->ExtentLength >> \
107#define GET_EXTENT_LENGTH(_RecFlags, _Ad) \
108 ((_RecFlags) == ShortAdsSequence ? \
109 ((UINT32)((((UDF_SHORT_ALLOCATION_DESCRIPTOR *)(_Ad))->ExtentLength & \
111 ((UINT32)((((UDF_LONG_ALLOCATION_DESCRIPTOR *)(_Ad))->ExtentLength & \
114#define UDF_FILENAME_LENGTH 128
115#define UDF_PATH_LENGTH 512
117#define GET_FID_FROM_ADS(_Data, _Offs) \
118 ((UDF_FILE_IDENTIFIER_DESCRIPTOR *)((UINT8 *)(_Data) + (_Offs)))
120#define IS_VALID_COMPRESSION_ID(_CompId) \
121 ((BOOLEAN)((_CompId) == 8 || (_CompId) == 16))
123#define UDF_STANDARD_IDENTIFIER_LENGTH 5
128 UINT8 StandardIdentifier[UDF_STANDARD_IDENTIFIER_LENGTH];
135 ReadFileAllocateAndRead,
137} UDF_READ_FILE_FLAGS;
141 UDF_READ_FILE_FLAGS Flags;
151 UINT16 TypeAndTimezone;
159 UINT8 HundredsOfMicroseconds;
165 UINT32 PrevAllocationExtentDescriptor;
166 UINT32 LengthOfAllocationDescriptors;
171 UINT8 StandardIdentifier[UDF_STANDARD_IDENTIFIER_LENGTH];
172 UINT8 StructureVersion;
174 UINT8 StructureData[2040];
180 UINT32 IntegrityType;
182 UINT8 LogicalVolumeContentsUse[32];
183 UINT32 NumberOfPartitions;
184 UINT32 LengthOfImplementationUse;
190 UINT32 VolumeDescriptorSequenceNumber;
191 UINT16 PartitionFlags;
192 UINT16 PartitionNumber;
194 UINT8 PartitionContentsUse[128];
196 UINT32 PartitionStartingLocation;
197 UINT32 PartitionLength;
199 UINT8 ImplementationUse[128];
206 UINT16 InterchangeLevel;
207 UINT16 MaximumInterchangeLevel;
208 UINT32 CharacterSetList;
209 UINT32 MaximumCharacterSetList;
210 UINT32 FileSetNumber;
211 UINT32 FileSetDescriptorNumber;
213 UINT8 LogicalVolumeIdentifier[128];
215 UINT8 FileSetIdentifier[32];
216 UINT8 CopyrightFileIdentifier[32];
217 UINT8 AbstractFileIdentifier[32];
227 UINT32 ExtentPosition;
232 UINT16 FileVersionNumber;
233 UINT8 FileCharacteristics;
234 UINT8 LengthOfFileIdentifier;
236 UINT16 LengthOfImplementationUse;
241 UINT32 PriorRecordNumberOfDirectEntries;
243 UINT16 StrategyParameter;
244 UINT16 MaximumNumberOfEntries;
257 UINT16 FileLinkCount;
259 UINT8 RecordDisplayAttributes;
261 UINT64 InformationLength;
262 UINT64 LogicalBlocksRecorded;
270 UINT32 LengthOfExtendedAttributes;
271 UINT32 LengthOfAllocationDescriptors;
281 UINT16 FileLinkCount;
283 UINT8 RecordDisplayAttributes;
285 UINT64 InformationLength;
287 UINT64 LogicalBlocksRecorded;
298 UINT32 LengthOfExtendedAttributes;
299 UINT32 LengthOfAllocationDescriptors;
305 UINT8 LengthOfComponentIdentifier;
306 UINT16 ComponentFileVersionNumber;
307 UINT8 ComponentIdentifier[0];
316 UINT64 MainVdsStartLocation;
330 UINT64 DirectoryLength;
334#define PRIVATE_UDF_FILE_DATA_SIGNATURE SIGNATURE_32 ('U', 'd', 'f', 'f')
336#define PRIVATE_UDF_FILE_DATA_FROM_THIS(a) \
339 PRIVATE_UDF_FILE_DATA, \
341 PRIVATE_UDF_FILE_DATA_SIGNATURE \
346 BOOLEAN IsRootDirectory;
352 CHAR16 AbsoluteFileName[UDF_PATH_LENGTH];
353 CHAR16 FileName[UDF_FILENAME_LENGTH];
358#define PRIVATE_UDF_SIMPLE_FS_DATA_SIGNATURE SIGNATURE_32 ('U', 'd', 'f', 's')
360#define PRIVATE_UDF_SIMPLE_FS_DATA_FROM_THIS(a) \
363 PRIVATE_UDF_SIMPLE_FS_DATA, \
365 PRIVATE_UDF_SIMPLE_FS_DATA_SIGNATURE \
953 OUT UINT64 *VolumeSize,
954 OUT UINT64 *FreeSpaceSize
985 IN OUT UINT64 *FilePosition,
987 IN OUT UINT64 *BufferSize
1135 OUT CHAR16 **DriverName
1213 OUT CHAR16 **ControllerName
EFI_STATUS EFIAPI UdfFlush(IN EFI_FILE_PROTOCOL *This)
EFI_STATUS GetFileNameFromFid(IN UDF_FILE_IDENTIFIER_DESCRIPTOR *FileIdentifierDesc, IN UINTN CharMax, OUT CHAR16 *FileName)
EFI_STATUS ReadUdfVolumeInformation(IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_DISK_IO_PROTOCOL *DiskIo, OUT UDF_VOLUME_INFO *Volume)
EFI_STATUS EFIAPI UdfDriverBindingStart(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
CHAR16 * MangleFileName(IN CHAR16 *FileName)
EFI_STATUS EFIAPI UdfRead(IN EFI_FILE_PROTOCOL *This, IN OUT UINTN *BufferSize, OUT VOID *Buffer)
EFI_STATUS EFIAPI UdfSetInfo(IN EFI_FILE_PROTOCOL *This, IN EFI_GUID *InformationType, IN UINTN BufferSize, IN VOID *Buffer)
EFI_STATUS GetFileSize(IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_DISK_IO_PROTOCOL *DiskIo, IN UDF_VOLUME_INFO *Volume, IN UDF_FILE_INFO *File, OUT UINT64 *Size)
EFI_STATUS GetVolumeSize(IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_DISK_IO_PROTOCOL *DiskIo, IN UDF_VOLUME_INFO *Volume, OUT UINT64 *VolumeSize, OUT UINT64 *FreeSpaceSize)
EFI_STATUS EFIAPI UdfOpenVolume(IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *This, OUT EFI_FILE_PROTOCOL **Root)
EFI_STATUS EFIAPI UdfGetPosition(IN EFI_FILE_PROTOCOL *This, OUT UINT64 *Position)
EFI_STATUS EFIAPI UdfGetInfo(IN EFI_FILE_PROTOCOL *This, IN EFI_GUID *InformationType, IN OUT UINTN *BufferSize, OUT VOID *Buffer)
EFI_STATUS EFIAPI UdfClose(IN EFI_FILE_PROTOCOL *This)
EFI_STATUS EFIAPI UdfDelete(IN EFI_FILE_PROTOCOL *This)
EFI_STATUS SetFileInfo(IN UDF_FILE_INFO *File, IN UINT64 FileSize, IN CHAR16 *FileName, IN OUT UINTN *BufferSize, OUT VOID *Buffer)
EFI_STATUS EFIAPI UdfComponentNameGetControllerName(IN EFI_COMPONENT_NAME_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE ChildHandle OPTIONAL, IN CHAR8 *Language, OUT CHAR16 **ControllerName)
EFI_STATUS EFIAPI UdfSetPosition(IN EFI_FILE_PROTOCOL *This, IN UINT64 Position)
EFI_STATUS EFIAPI UdfWrite(IN EFI_FILE_PROTOCOL *This, IN OUT UINTN *BufferSize, IN VOID *Buffer)
EFI_STATUS ReadDirectoryEntry(IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_DISK_IO_PROTOCOL *DiskIo, IN UDF_VOLUME_INFO *Volume, IN UDF_LONG_ALLOCATION_DESCRIPTOR *ParentIcb, IN VOID *FileEntryData, IN OUT UDF_READ_DIRECTORY_INFO *ReadDirInfo, OUT UDF_FILE_IDENTIFIER_DESCRIPTOR **FoundFid)
EFI_STATUS SupportUdfFileSystem(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle)
EFI_STATUS ReadFileData(IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_DISK_IO_PROTOCOL *DiskIo, IN UDF_VOLUME_INFO *Volume, IN UDF_FILE_INFO *File, IN UINT64 FileSize, IN OUT UINT64 *FilePosition, IN OUT VOID *Buffer, IN OUT UINT64 *BufferSize)
EFI_STATUS EFIAPI UdfDriverBindingStop(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer)
EFI_STATUS EFIAPI UdfComponentNameGetDriverName(IN EFI_COMPONENT_NAME_PROTOCOL *This, IN CHAR8 *Language, OUT CHAR16 **DriverName)
EFI_STATUS EFIAPI UdfOpen(IN EFI_FILE_PROTOCOL *This, OUT EFI_FILE_PROTOCOL **NewHandle, IN CHAR16 *FileName, IN UINT64 OpenMode, IN UINT64 Attributes)
EFI_STATUS FindFile(IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_DISK_IO_PROTOCOL *DiskIo, IN UDF_VOLUME_INFO *Volume, IN CHAR16 *FilePath, IN UDF_FILE_INFO *Root, IN UDF_FILE_INFO *Parent, IN UDF_LONG_ALLOCATION_DESCRIPTOR *Icb, OUT UDF_FILE_INFO *File)
EFI_STATUS GetVolumeLabel(IN UDF_VOLUME_INFO *Volume, IN UINTN CharMax, OUT CHAR16 *String)
VOID CleanupFileInformation(IN UDF_FILE_INFO *File)
EFI_STATUS ResolveSymlink(IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_DISK_IO_PROTOCOL *DiskIo, IN UDF_VOLUME_INFO *Volume, IN UDF_FILE_INFO *Parent, IN VOID *FileEntryData, OUT UDF_FILE_INFO *File)
EFI_STATUS EFIAPI UdfDriverBindingSupported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath)
EFI_STATUS FindFileEntry(IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_DISK_IO_PROTOCOL *DiskIo, IN UDF_VOLUME_INFO *Volume, IN UDF_LONG_ALLOCATION_DESCRIPTOR *Icb, OUT VOID **FileEntry)
EFI_STATUS FindRootDirectory(IN EFI_BLOCK_IO_PROTOCOL *BlockIo, IN EFI_DISK_IO_PROTOCOL *DiskIo, IN UDF_VOLUME_INFO *Volume, OUT UDF_FILE_INFO *File)