/*++ Copyright (c) 1991 Microsoft Corporation Module Name: UDFSBoot.h Abstract: This module defines globally used procedure and data structures used by CD/DVD boot for UDF images. Author: Vijayachandran Jayaseelan (vijayj@microsoft.com) Revision History: --*/ #ifndef _UDFSBOOT_ #define _UDFSBOOT_ #include #ifdef __cplusplus extern "C" { #endif #define UDF_BLOCK_SIZE 2048 #define UDF_MAX_VOLUMES 1 // // forward declarations // typedef struct _UDF_VOLUME* PUDF_VOLUME; typedef struct _UDF_CACHE_ENTRY* PUDF_CACHE_ENTRY; typedef struct _UDF_FILE_DIRECTORY* PUDF_FILE_DIRECTORY; typedef PVOID PUDF_BLOCK; // // Volume abstraction // typedef struct _UDF_VOLUME { PUDF_CACHE_ENTRY Cache; ULONG StartBlk; ULONG BlockSize; ULONG DeviceId; ULONG RootDirBlk; } UDF_VOLUME; ARC_STATUS UDFSVolumeOpen( IN PUDF_VOLUME Volume, IN ULONG DeviceId ); ARC_STATUS UDFSVolumeReadBlock( IN PUDF_VOLUME Volume, IN ULONG BlockIdx, OUT PUDF_BLOCK Block ); // // File or Directory abstraction // typedef struct _UDF_FILE_IDENTIFIER { ULONG BlockIdx; USHORT Offset; // inside the block } UDF_FILE_IDENTIFIER, * PUDF_FILE_IDENTIFIER; typedef struct _UDF_FILE_DIRECTORY { PUDF_VOLUME Volume; ULONGLONG Size; ULONG IcbBlk; ULONG StartDataBlk; UDF_FILE_IDENTIFIER FileId; UCHAR NumExtents; BOOLEAN IsDirectory; } UDF_FILE_DIRECTORY; ARC_STATUS UDFSDirGetFirstFID( IN PUDF_FILE_DIRECTORY Dir, OUT PUDF_FILE_IDENTIFIER File, OUT PUDF_BLOCK Block ); ARC_STATUS UDFSDirGetNextFID( IN PUDF_FILE_DIRECTORY Dir, IN OUT PUDF_FILE_IDENTIFIER File, IN OUT PUDF_BLOCK Block ); ARC_STATUS UDFSDirGetFile( IN PUDF_FILE_DIRECTORY Dir, IN PCHAR Name, OUT PUDF_FILE_DIRECTORY File ); ARC_STATUS UDFSFileReadBlock( IN PUDF_FILE_DIRECTORY File, IN ULONG BlockIdx, IN ULONG Size, OUT PUDF_BLOCK Block ); ARC_STATUS UDFSFileRead( IN PUDF_FILE_DIRECTORY File, IN PVOID Buffer, IN ULONG BufferSize, OUT PULONG Transfer ); ARC_STATUS UDFSFileSeek( IN PUDF_FILE_DIRECTORY File, IN PLARGE_INTEGER Offset, IN SEEK_MODE SeekMode ); ARC_STATUS UDFSFileClose( IN PUDF_FILE_DIRECTORY File ); // // Cache abstractions // #define UDF_MAX_PATH_LEN 256 #define UDF_MAX_CACHE_ENTRIES 48 typedef struct _UDF_CACHE_ENTRY { CHAR Name[UDF_MAX_PATH_LEN]; USHORT Usage; UDF_FILE_DIRECTORY File; } UDF_CACHE_ENTRY; ULONG UDFCachePutEntry( IN OUT PUDF_CACHE_ENTRY Cache, IN PCHAR Name, IN PUDF_FILE_DIRECTORY File ); ULONG UDFCacheGetEntryByName( IN PUDF_CACHE_ENTRY Cache, IN PCHAR Name, IN BOOLEAN Increment ); VOID UDFCacheFreeEntry( IN OUT PUDF_CACHE_ENTRY Cache, IN ULONG Idx ); VOID UDFCacheIncrementUsage( IN OUT PUDF_CACHE_ENTRY Cache, IN ULONG Idx ); VOID UDFCacheDecrementUsage( IN OUT PUDF_CACHE_ENTRY Cache, IN ULONG Idx ); // // abstractions used by outside (loader) world // typedef struct _UDFS_STRUCTURE_CONTEXT { PUDF_VOLUME Volume; } UDFS_STRUCTURE_CONTEXT, *PUDFS_STRUCTURE_CONTEXT; // // Define UDFS file context structure. // typedef struct _UDFS_FILE_CONTEXT { ULONG CacheIdx; } UDFS_FILE_CONTEXT, *PUDFS_FILE_CONTEXT; // // Define file I/O prototypes. // PBL_DEVICE_ENTRY_TABLE IsUDFSFileStructure ( IN ULONG DeviceId, IN PVOID StructureContext ); ARC_STATUS UDFSOpen ( IN CHAR * FIRMWARE_PTR OpenPath, IN OPEN_MODE OpenMode, OUT ULONG * FIRMWARE_PTR FileId ); ARC_STATUS UDFSClose ( IN ULONG FileId ); ARC_STATUS UDFSRead ( IN ULONG FileId, OUT VOID * FIRMWARE_PTR Buffer, IN ULONG Length, OUT ULONG * FIRMWARE_PTR Count ); ARC_STATUS UDFSSeek ( IN ULONG FileId, IN LARGE_INTEGER * FIRMWARE_PTR Offset, IN SEEK_MODE SeekMode ); ARC_STATUS UDFSWrite ( IN ULONG FileId, IN VOID * FIRMWARE_PTR Buffer, IN ULONG Length, OUT ULONG * FIRMWARE_PTR Count ); ARC_STATUS UDFSGetFileInformation ( IN ULONG FileId, OUT FILE_INFORMATION * FIRMWARE_PTR Buffer ); ARC_STATUS UDFSSetFileInformation ( IN ULONG FileId, IN ULONG AttributeFlags, IN ULONG AttributeMask ); ARC_STATUS UDFSInitialize( VOID ); #ifdef __cplusplus } #endif #endif // _UDFSBOOT_