From 8abbc619a1b452e2324f9482226d544fa9bcd3f2 Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Tue, 16 Apr 2019 09:13:34 -0400 Subject: filesystem: Add FileSystemController to deglobalize FS services --- src/core/hle/service/filesystem/filesystem.h | 108 ++++++++++++++++++++------- 1 file changed, 82 insertions(+), 26 deletions(-) (limited to 'src/core/hle/service/filesystem/filesystem.h') diff --git a/src/core/hle/service/filesystem/filesystem.h b/src/core/hle/service/filesystem/filesystem.h index 3849dd89e..aa4e437ac 100644 --- a/src/core/hle/service/filesystem/filesystem.h +++ b/src/core/hle/service/filesystem/filesystem.h @@ -14,10 +14,13 @@ namespace FileSys { class BISFactory; class RegisteredCache; class RegisteredCacheUnion; +class PlaceholderCache; class RomFSFactory; class SaveDataFactory; class SDMCFactory; +class XCI; +enum class BisPartitionId : u32; enum class ContentRecordType : u8; enum class Mode : u32; enum class SaveDataSpaceId : u8; @@ -36,36 +39,89 @@ class ServiceManager; namespace FileSystem { -ResultCode RegisterRomFS(std::unique_ptr&& factory); -ResultCode RegisterSaveData(std::unique_ptr&& factory); -ResultCode RegisterSDMC(std::unique_ptr&& factory); -ResultCode RegisterBIS(std::unique_ptr&& factory); - -void SetPackedUpdate(FileSys::VirtualFile update_raw); -ResultVal OpenRomFSCurrentProcess(); -ResultVal OpenRomFS(u64 title_id, FileSys::StorageId storage_id, - FileSys::ContentRecordType type); -ResultVal OpenSaveData(FileSys::SaveDataSpaceId space, - const FileSys::SaveDataDescriptor& descriptor); -ResultVal OpenSaveDataSpace(FileSys::SaveDataSpaceId space); -ResultVal OpenSDMC(); - -FileSys::SaveDataSize ReadSaveDataSize(FileSys::SaveDataType type, u64 title_id, u128 user_id); -void WriteSaveDataSize(FileSys::SaveDataType type, u64 title_id, u128 user_id, - FileSys::SaveDataSize new_value); +enum class ContentStorageId : u32 { + System, + User, + SdCard, +}; -FileSys::RegisteredCache* GetSystemNANDContents(); -FileSys::RegisteredCache* GetUserNANDContents(); -FileSys::RegisteredCache* GetSDMCContents(); +enum class ImageDirectoryId : u32 { + NAND, + SdCard, +}; -FileSys::VirtualDir GetModificationLoadRoot(u64 title_id); -FileSys::VirtualDir GetModificationDumpRoot(u64 title_id); +class FileSystemController { +public: + ResultCode RegisterRomFS(std::unique_ptr&& factory); + ResultCode RegisterSaveData(std::unique_ptr&& factory); + ResultCode RegisterSDMC(std::unique_ptr&& factory); + ResultCode RegisterBIS(std::unique_ptr&& factory); + + void SetPackedUpdate(FileSys::VirtualFile update_raw); + ResultVal OpenRomFSCurrentProcess(); + ResultVal OpenRomFS(u64 title_id, FileSys::StorageId storage_id, + FileSys::ContentRecordType type); + ResultVal CreateSaveData(FileSys::SaveDataSpaceId space, + const FileSys::SaveDataDescriptor& save_struct); + ResultVal OpenSaveData(FileSys::SaveDataSpaceId space, + const FileSys::SaveDataDescriptor& save_struct); + ResultVal OpenSaveDataSpace(FileSys::SaveDataSpaceId space); + ResultVal OpenSDMC(); + ResultVal OpenBISPartition(FileSys::BisPartitionId id); + ResultVal OpenBISPartitionStorage(FileSys::BisPartitionId id); + + u64 GetFreeSpaceSize(FileSys::StorageId id) const; + u64 GetTotalSpaceSize(FileSys::StorageId id) const; + + FileSys::SaveDataSize ReadSaveDataSize(FileSys::SaveDataType type, u64 title_id, u128 user_id); + void WriteSaveDataSize(FileSys::SaveDataType type, u64 title_id, u128 user_id, + FileSys::SaveDataSize new_value); + + void SetGameCard(FileSys::VirtualFile file); + FileSys::XCI* GetGameCard(); + + FileSys::RegisteredCache* GetSystemNANDContents(); + FileSys::RegisteredCache* GetUserNANDContents(); + FileSys::RegisteredCache* GetSDMCContents(); + FileSys::RegisteredCache* GetGameCardContents(); + + FileSys::PlaceholderCache* GetSystemNANDPlaceholder(); + FileSys::PlaceholderCache* GetUserNANDPlaceholder(); + FileSys::PlaceholderCache* GetSDMCPlaceholder(); + FileSys::PlaceholderCache* GetGameCardPlaceholder(); + + FileSys::RegisteredCache* GetRegisteredCacheForStorage(FileSys::StorageId id); + FileSys::PlaceholderCache* GetPlaceholderCacheForStorage(FileSys::StorageId id); + + FileSys::VirtualDir GetSystemNANDContentDirectory(); + FileSys::VirtualDir GetUserNANDContentDirectory(); + FileSys::VirtualDir GetSDMCContentDirectory(); + + FileSys::VirtualDir GetNANDImageDirectory(); + FileSys::VirtualDir GetSDMCImageDirectory(); + + FileSys::VirtualDir GetContentDirectory(ContentStorageId id); + FileSys::VirtualDir GetImageDirectory(ImageDirectoryId id); + + FileSys::VirtualDir GetModificationLoadRoot(u64 title_id); + FileSys::VirtualDir GetModificationDumpRoot(u64 title_id); + + // Creates the SaveData, SDMC, and BIS Factories. Should be called once and before any function + // above is called. + void CreateFactories(FileSys::VfsFilesystem& vfs, bool overwrite = true); -// Creates the SaveData, SDMC, and BIS Factories. Should be called once and before any function -// above is called. -void CreateFactories(FileSys::VfsFilesystem& vfs, bool overwrite = true); +private: + std::unique_ptr romfs_factory; + std::unique_ptr save_data_factory; + std::unique_ptr sdmc_factory; + std::unique_ptr bis_factory; + + std::unique_ptr gamecard; + std::unique_ptr gamecard_registered; + std::unique_ptr gamecard_placeholder; +}; -void InstallInterfaces(Core::System& system); +void InstallInterfaces(SM::ServiceManager& service_manager, FileSystemController& controller); // A class that wraps a VfsDirectory with methods that return ResultVal and ResultCode instead of // pointers and booleans. This makes using a VfsDirectory with switch services much easier and -- cgit v1.2.3