summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/CMakeLists.txt4
-rw-r--r--src/core/hle/service/am/service/storage_accessor.cpp68
-rw-r--r--src/core/hle/service/am/service/storage_accessor.h (renamed from src/core/hle/service/am/storage_accessor.h)21
-rw-r--r--src/core/hle/service/am/storage.cpp2
-rw-r--r--src/core/hle/service/am/storage_accessor.cpp90
5 files changed, 82 insertions, 103 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 956207fcf..c2c08c2e9 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -475,14 +475,14 @@ add_library(core STATIC
475 hle/service/am/service/process_winding_controller.h 475 hle/service/am/service/process_winding_controller.h
476 hle/service/am/service/self_controller.cpp 476 hle/service/am/service/self_controller.cpp
477 hle/service/am/service/self_controller.h 477 hle/service/am/service/self_controller.h
478 hle/service/am/service/storage_accessor.cpp
479 hle/service/am/service/storage_accessor.h
478 hle/service/am/service/system_applet_proxy.cpp 480 hle/service/am/service/system_applet_proxy.cpp
479 hle/service/am/service/system_applet_proxy.h 481 hle/service/am/service/system_applet_proxy.h
480 hle/service/am/system_buffer_manager.cpp 482 hle/service/am/system_buffer_manager.cpp
481 hle/service/am/system_buffer_manager.h 483 hle/service/am/system_buffer_manager.h
482 hle/service/am/spsm.cpp 484 hle/service/am/spsm.cpp
483 hle/service/am/spsm.h 485 hle/service/am/spsm.h
484 hle/service/am/storage_accessor.cpp
485 hle/service/am/storage_accessor.h
486 hle/service/am/storage.cpp 486 hle/service/am/storage.cpp
487 hle/service/am/storage.h 487 hle/service/am/storage.h
488 hle/service/am/window_controller.cpp 488 hle/service/am/window_controller.cpp
diff --git a/src/core/hle/service/am/service/storage_accessor.cpp b/src/core/hle/service/am/service/storage_accessor.cpp
new file mode 100644
index 000000000..84577fee4
--- /dev/null
+++ b/src/core/hle/service/am/service/storage_accessor.cpp
@@ -0,0 +1,68 @@
1// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "core/hle/kernel/k_transfer_memory.h"
5#include "core/hle/service/am/library_applet_storage.h"
6#include "core/hle/service/am/service/storage_accessor.h"
7#include "core/hle/service/cmif_serialization.h"
8
9namespace Service::AM {
10
11IStorageAccessor::IStorageAccessor(Core::System& system_,
12 std::shared_ptr<LibraryAppletStorage> impl)
13 : ServiceFramework{system_, "IStorageAccessor"}, m_impl{std::move(impl)} {
14 static const FunctionInfo functions[] = {
15 {0, D<&IStorageAccessor::GetSize>, "GetSize"},
16 {10, D<&IStorageAccessor::Write>, "Write"},
17 {11, D<&IStorageAccessor::Read>, "Read"},
18 };
19
20 RegisterHandlers(functions);
21}
22
23IStorageAccessor::~IStorageAccessor() = default;
24
25Result IStorageAccessor::GetSize(Out<s64> out_size) {
26 LOG_DEBUG(Service_AM, "called");
27 *out_size = m_impl->GetSize();
28 R_SUCCEED();
29}
30
31Result IStorageAccessor::Write(InBuffer<BufferAttr_HipcAutoSelect> buffer, s64 offset) {
32 LOG_DEBUG(Service_AM, "called, offset={} size={}", offset, buffer.size());
33 R_RETURN(m_impl->Write(offset, buffer.data(), buffer.size()));
34}
35
36Result IStorageAccessor::Read(OutBuffer<BufferAttr_HipcAutoSelect> out_buffer, s64 offset) {
37 LOG_DEBUG(Service_AM, "called, offset={} size={}", offset, out_buffer.size());
38 R_RETURN(m_impl->Read(offset, out_buffer.data(), out_buffer.size()));
39}
40
41ITransferStorageAccessor::ITransferStorageAccessor(Core::System& system_,
42 std::shared_ptr<LibraryAppletStorage> impl)
43 : ServiceFramework{system_, "ITransferStorageAccessor"}, m_impl{std::move(impl)} {
44 static const FunctionInfo functions[] = {
45 {0, D<&ITransferStorageAccessor::GetSize>, "GetSize"},
46 {1, D<&ITransferStorageAccessor::GetHandle>, "GetHandle"},
47 };
48
49 RegisterHandlers(functions);
50}
51
52ITransferStorageAccessor::~ITransferStorageAccessor() = default;
53
54Result ITransferStorageAccessor::GetSize(Out<s64> out_size) {
55 LOG_DEBUG(Service_AM, "called");
56 *out_size = m_impl->GetSize();
57 R_SUCCEED();
58}
59
60Result ITransferStorageAccessor::GetHandle(Out<s64> out_size,
61 OutCopyHandle<Kernel::KTransferMemory> out_handle) {
62 LOG_INFO(Service_AM, "called");
63 *out_size = m_impl->GetSize();
64 *out_handle = m_impl->GetHandle();
65 R_SUCCEED();
66}
67
68} // namespace Service::AM
diff --git a/src/core/hle/service/am/storage_accessor.h b/src/core/hle/service/am/service/storage_accessor.h
index b9aa85a66..1a01730e0 100644
--- a/src/core/hle/service/am/storage_accessor.h
+++ b/src/core/hle/service/am/service/storage_accessor.h
@@ -3,35 +3,36 @@
3 3
4#pragma once 4#pragma once
5 5
6#include "core/hle/service/am/storage.h" 6#include "core/hle/service/am/library_applet_storage.h"
7#include "core/hle/service/cmif_types.h"
7#include "core/hle/service/service.h" 8#include "core/hle/service/service.h"
8 9
9namespace Service::AM { 10namespace Service::AM {
10 11
11class IStorageAccessor final : public ServiceFramework<IStorageAccessor> { 12class IStorageAccessor final : public ServiceFramework<IStorageAccessor> {
12public: 13public:
13 explicit IStorageAccessor(Core::System& system_, std::shared_ptr<LibraryAppletStorage> impl_); 14 explicit IStorageAccessor(Core::System& system_, std::shared_ptr<LibraryAppletStorage> impl);
14 ~IStorageAccessor() override; 15 ~IStorageAccessor() override;
15 16
16private: 17private:
17 void GetSize(HLERequestContext& ctx); 18 Result GetSize(Out<s64> out_size);
18 void Write(HLERequestContext& ctx); 19 Result Write(InBuffer<BufferAttr_HipcAutoSelect> buffer, s64 offset);
19 void Read(HLERequestContext& ctx); 20 Result Read(OutBuffer<BufferAttr_HipcAutoSelect> out_buffer, s64 offset);
20 21
21 const std::shared_ptr<LibraryAppletStorage> impl; 22 const std::shared_ptr<LibraryAppletStorage> m_impl;
22}; 23};
23 24
24class ITransferStorageAccessor final : public ServiceFramework<ITransferStorageAccessor> { 25class ITransferStorageAccessor final : public ServiceFramework<ITransferStorageAccessor> {
25public: 26public:
26 explicit ITransferStorageAccessor(Core::System& system_, 27 explicit ITransferStorageAccessor(Core::System& system_,
27 std::shared_ptr<LibraryAppletStorage> impl_); 28 std::shared_ptr<LibraryAppletStorage> impl);
28 ~ITransferStorageAccessor() override; 29 ~ITransferStorageAccessor() override;
29 30
30private: 31private:
31 void GetSize(HLERequestContext& ctx); 32 Result GetSize(Out<s64> out_size);
32 void GetHandle(HLERequestContext& ctx); 33 Result GetHandle(Out<s64> out_size, OutCopyHandle<Kernel::KTransferMemory> out_handle);
33 34
34 const std::shared_ptr<LibraryAppletStorage> impl; 35 const std::shared_ptr<LibraryAppletStorage> m_impl;
35}; 36};
36 37
37} // namespace Service::AM 38} // namespace Service::AM
diff --git a/src/core/hle/service/am/storage.cpp b/src/core/hle/service/am/storage.cpp
index 4e82afd1c..12d95eebd 100644
--- a/src/core/hle/service/am/storage.cpp
+++ b/src/core/hle/service/am/storage.cpp
@@ -3,8 +3,8 @@
3 3
4#include "core/hle/service/am/am_results.h" 4#include "core/hle/service/am/am_results.h"
5#include "core/hle/service/am/library_applet_storage.h" 5#include "core/hle/service/am/library_applet_storage.h"
6#include "core/hle/service/am/service/storage_accessor.h"
6#include "core/hle/service/am/storage.h" 7#include "core/hle/service/am/storage.h"
7#include "core/hle/service/am/storage_accessor.h"
8#include "core/hle/service/ipc_helpers.h" 8#include "core/hle/service/ipc_helpers.h"
9 9
10namespace Service::AM { 10namespace Service::AM {
diff --git a/src/core/hle/service/am/storage_accessor.cpp b/src/core/hle/service/am/storage_accessor.cpp
deleted file mode 100644
index a1184b065..000000000
--- a/src/core/hle/service/am/storage_accessor.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
1// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "core/hle/kernel/k_transfer_memory.h"
5#include "core/hle/service/am/am_results.h"
6#include "core/hle/service/am/library_applet_storage.h"
7#include "core/hle/service/am/storage_accessor.h"
8#include "core/hle/service/ipc_helpers.h"
9
10namespace Service::AM {
11
12IStorageAccessor::IStorageAccessor(Core::System& system_,
13 std::shared_ptr<LibraryAppletStorage> impl_)
14 : ServiceFramework{system_, "IStorageAccessor"}, impl{std::move(impl_)} {
15 static const FunctionInfo functions[] = {
16 {0, &IStorageAccessor::GetSize, "GetSize"},
17 {10, &IStorageAccessor::Write, "Write"},
18 {11, &IStorageAccessor::Read, "Read"},
19 };
20
21 RegisterHandlers(functions);
22}
23
24IStorageAccessor::~IStorageAccessor() = default;
25
26void IStorageAccessor::GetSize(HLERequestContext& ctx) {
27 LOG_DEBUG(Service_AM, "called");
28
29 IPC::ResponseBuilder rb{ctx, 4};
30
31 rb.Push(ResultSuccess);
32 rb.Push(impl->GetSize());
33}
34
35void IStorageAccessor::Write(HLERequestContext& ctx) {
36 IPC::RequestParser rp{ctx};
37
38 const s64 offset{rp.Pop<s64>()};
39 const auto data{ctx.ReadBuffer()};
40 LOG_DEBUG(Service_AM, "called, offset={}, size={}", offset, data.size());
41
42 const auto res{impl->Write(offset, data.data(), data.size())};
43
44 IPC::ResponseBuilder rb{ctx, 2};
45 rb.Push(res);
46}
47
48void IStorageAccessor::Read(HLERequestContext& ctx) {
49 IPC::RequestParser rp{ctx};
50
51 const s64 offset{rp.Pop<s64>()};
52 std::vector<u8> data(ctx.GetWriteBufferSize());
53
54 LOG_DEBUG(Service_AM, "called, offset={}, size={}", offset, data.size());
55
56 const auto res{impl->Read(offset, data.data(), data.size())};
57
58 ctx.WriteBuffer(data);
59
60 IPC::ResponseBuilder rb{ctx, 2};
61 rb.Push(res);
62}
63
64ITransferStorageAccessor::ITransferStorageAccessor(Core::System& system_,
65 std::shared_ptr<LibraryAppletStorage> impl_)
66 : ServiceFramework{system_, "ITransferStorageAccessor"}, impl{std::move(impl_)} {
67 static const FunctionInfo functions[] = {
68 {0, &ITransferStorageAccessor::GetSize, "GetSize"},
69 {1, &ITransferStorageAccessor::GetHandle, "GetHandle"},
70 };
71
72 RegisterHandlers(functions);
73}
74
75ITransferStorageAccessor::~ITransferStorageAccessor() = default;
76
77void ITransferStorageAccessor::GetSize(HLERequestContext& ctx) {
78 IPC::ResponseBuilder rb{ctx, 4};
79 rb.Push(ResultSuccess);
80 rb.Push(impl->GetSize());
81}
82
83void ITransferStorageAccessor::GetHandle(HLERequestContext& ctx) {
84 IPC::ResponseBuilder rb{ctx, 4, 1};
85 rb.Push(ResultSuccess);
86 rb.Push(impl->GetSize());
87 rb.PushCopyObjects(impl->GetHandle());
88}
89
90} // namespace Service::AM