// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include "core/hle/service/cmif_types.h" #include "core/hle/service/service.h" namespace Core { class Reporter; } namespace FileSys { class ContentProvider; class FileSystemBackend; } // namespace FileSys namespace Service::FileSystem { class RomFsController; class SaveDataController; class IFileSystem; class ISaveDataInfoReader; class IStorage; class IMultiCommitManager; enum class AccessLogVersion : u32 { V7_0_0 = 2, Latest = V7_0_0, }; enum class AccessLogMode : u32 { None, Log, SdCard, }; enum class FileSystemProxyType : u8 { Code = 0, Rom = 1, Logo = 2, Control = 3, Manual = 4, Meta = 5, Data = 6, Package = 7, RegisteredUpdate = 8, }; class FSP_SRV final : public ServiceFramework { public: explicit FSP_SRV(Core::System& system_); ~FSP_SRV() override; private: Result SetCurrentProcess(ClientProcessId pid); Result OpenFileSystemWithPatch(OutInterface out_interface, FileSystemProxyType type, u64 open_program_id); Result OpenSdCardFileSystem(OutInterface out_interface); Result CreateSaveDataFileSystem(std::array save_create_struct, FileSys::SaveDataAttribute save_struct, u128 uid); Result CreateSaveDataFileSystemBySystemSaveDataId(std::array save_create_struct, FileSys::SaveDataAttribute save_struct); Result OpenSaveDataFileSystem(OutInterface out_interface, FileSys::SaveDataSpaceId space_id, FileSys::SaveDataAttribute attribute); Result OpenSaveDataFileSystemBySystemSaveDataId(OutInterface out_interface, FileSys::SaveDataSpaceId space_id, FileSys::SaveDataAttribute attribute); Result OpenReadOnlySaveDataFileSystem(OutInterface out_interface, FileSys::SaveDataSpaceId space_id, FileSys::SaveDataAttribute attribute); Result OpenSaveDataInfoReaderBySaveDataSpaceId(OutInterface out_interface, FileSys::SaveDataSpaceId space); Result OpenSaveDataInfoReaderOnlyCacheStorage(OutInterface out_interface); Result WriteSaveDataFileSystemExtraDataBySaveDataAttribute(); Result ReadSaveDataFileSystemExtraDataWithMaskBySaveDataAttribute( FileSys::SaveDataSpaceId space_id, FileSys::SaveDataAttribute attribute, InBuffer mask_buffer, OutBuffer out_buffer); Result OpenDataStorageByCurrentProcess(OutInterface out_interface); Result OpenDataStorageByDataId(OutInterface out_interface, FileSys::StorageId storage_id, u32 unknown, u64 title_id); Result OpenPatchDataStorageByCurrentProcess(OutInterface out_interface, FileSys::StorageId storage_id, u64 title_id); Result OpenDataStorageWithProgramIndex(OutInterface out_interface, u8 program_index); Result DisableAutoSaveDataCreation(); Result SetGlobalAccessLogMode(AccessLogMode access_log_mode_); Result GetGlobalAccessLogMode(Out out_access_log_mode); Result OutputAccessLogToSdCard(InBuffer log_message_buffer); Result FlushAccessLogOnSdCard(); Result GetProgramIndexForAccessLog(Out out_access_log_version, Out out_access_log_program_index); Result OpenMultiCommitManager(OutInterface out_interface); Result GetCacheStorageSize(s32 index, Out out_data_size, Out out_journal_size); FileSystemController& fsc; const FileSys::ContentProvider& content_provider; const Core::Reporter& reporter; FileSys::VirtualFile romfs; u64 current_process_id = 0; u32 access_log_program_index = 0; AccessLogMode access_log_mode = AccessLogMode::None; u64 program_id = 0; std::shared_ptr save_data_controller; std::shared_ptr romfs_controller; }; } // namespace Service::FileSystem