summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/filesystem/filesystem.h
diff options
context:
space:
mode:
authorZach Hilman <zachhilman@gmail.com>2019-04-16 15:13:34 +0200
committerZach Hilman <zachhilman@gmail.com>2019-09-21 22:43:10 +0200
commit8abbc619a1b452e2324f9482226d544fa9bcd3f2 (patch)
treed3d9341bd3c68075bf9ba482852856b0182a29bd /src/core/hle/service/filesystem/filesystem.h
parentsubmisson_package: Fix edge case with improperly sized filenames (diff)
downloadyuzu-8abbc619a1b452e2324f9482226d544fa9bcd3f2.tar
yuzu-8abbc619a1b452e2324f9482226d544fa9bcd3f2.tar.gz
yuzu-8abbc619a1b452e2324f9482226d544fa9bcd3f2.tar.bz2
yuzu-8abbc619a1b452e2324f9482226d544fa9bcd3f2.tar.lz
yuzu-8abbc619a1b452e2324f9482226d544fa9bcd3f2.tar.xz
yuzu-8abbc619a1b452e2324f9482226d544fa9bcd3f2.tar.zst
yuzu-8abbc619a1b452e2324f9482226d544fa9bcd3f2.zip
Diffstat (limited to '')
-rw-r--r--src/core/hle/service/filesystem/filesystem.h108
1 files changed, 82 insertions, 26 deletions
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<FileSys::RomFSFactory>&& factory);
-ResultCode RegisterSaveData(std::unique_ptr<FileSys::SaveDataFactory>&& factory);
-ResultCode RegisterSDMC(std::unique_ptr<FileSys::SDMCFactory>&& factory);
-ResultCode RegisterBIS(std::unique_ptr<FileSys::BISFactory>&& factory);
-
-void SetPackedUpdate(FileSys::VirtualFile update_raw);
-ResultVal<FileSys::VirtualFile> OpenRomFSCurrentProcess();
-ResultVal<FileSys::VirtualFile> OpenRomFS(u64 title_id, FileSys::StorageId storage_id,
- FileSys::ContentRecordType type);
-ResultVal<FileSys::VirtualDir> OpenSaveData(FileSys::SaveDataSpaceId space,
- const FileSys::SaveDataDescriptor& descriptor);
-ResultVal<FileSys::VirtualDir> OpenSaveDataSpace(FileSys::SaveDataSpaceId space);
-ResultVal<FileSys::VirtualDir> 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<FileSys::RomFSFactory>&& factory);
+ ResultCode RegisterSaveData(std::unique_ptr<FileSys::SaveDataFactory>&& factory);
+ ResultCode RegisterSDMC(std::unique_ptr<FileSys::SDMCFactory>&& factory);
+ ResultCode RegisterBIS(std::unique_ptr<FileSys::BISFactory>&& factory);
+
+ void SetPackedUpdate(FileSys::VirtualFile update_raw);
+ ResultVal<FileSys::VirtualFile> OpenRomFSCurrentProcess();
+ ResultVal<FileSys::VirtualFile> OpenRomFS(u64 title_id, FileSys::StorageId storage_id,
+ FileSys::ContentRecordType type);
+ ResultVal<FileSys::VirtualDir> CreateSaveData(FileSys::SaveDataSpaceId space,
+ const FileSys::SaveDataDescriptor& save_struct);
+ ResultVal<FileSys::VirtualDir> OpenSaveData(FileSys::SaveDataSpaceId space,
+ const FileSys::SaveDataDescriptor& save_struct);
+ ResultVal<FileSys::VirtualDir> OpenSaveDataSpace(FileSys::SaveDataSpaceId space);
+ ResultVal<FileSys::VirtualDir> OpenSDMC();
+ ResultVal<FileSys::VirtualDir> OpenBISPartition(FileSys::BisPartitionId id);
+ ResultVal<FileSys::VirtualFile> 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<FileSys::RomFSFactory> romfs_factory;
+ std::unique_ptr<FileSys::SaveDataFactory> save_data_factory;
+ std::unique_ptr<FileSys::SDMCFactory> sdmc_factory;
+ std::unique_ptr<FileSys::BISFactory> bis_factory;
+
+ std::unique_ptr<FileSys::XCI> gamecard;
+ std::unique_ptr<FileSys::RegisteredCache> gamecard_registered;
+ std::unique_ptr<FileSys::PlaceholderCache> 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