summaryrefslogtreecommitdiff
path: root/src/core/hle/service
diff options
context:
space:
mode:
authorGravatar bunnei2019-11-28 11:43:17 -0500
committerGravatar GitHub2019-11-28 11:43:17 -0500
commite3ee017e91ef4d713f1af8cb60c5157e40d43f18 (patch)
treee0a5b47cac1d548599b8ceba7f71b40746fe6b48 /src/core/hle/service
parentMerge pull request #3171 from lioncash/internal-link (diff)
parentcore/memory; Migrate over SetCurrentPageTable() to the Memory class (diff)
downloadyuzu-e3ee017e91ef4d713f1af8cb60c5157e40d43f18.tar.gz
yuzu-e3ee017e91ef4d713f1af8cb60c5157e40d43f18.tar.xz
yuzu-e3ee017e91ef4d713f1af8cb60c5157e40d43f18.zip
Merge pull request #3169 from lioncash/memory
core/memory: Deglobalize memory management code
Diffstat (limited to 'src/core/hle/service')
-rw-r--r--src/core/hle/service/audio/audout_u.cpp6
-rw-r--r--src/core/hle/service/audio/audren_u.cpp5
-rw-r--r--src/core/hle/service/filesystem/fsp_srv.cpp7
-rw-r--r--src/core/hle/service/ldr/ldr.cpp5
-rw-r--r--src/core/hle/service/lm/lm.cpp23
-rw-r--r--src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp4
6 files changed, 28 insertions, 22 deletions
diff --git a/src/core/hle/service/audio/audout_u.cpp b/src/core/hle/service/audio/audout_u.cpp
index 6a29377e3..4fb2cbc4b 100644
--- a/src/core/hle/service/audio/audout_u.cpp
+++ b/src/core/hle/service/audio/audout_u.cpp
@@ -43,7 +43,8 @@ public:
43 IAudioOut(Core::System& system, AudoutParams audio_params, AudioCore::AudioOut& audio_core, 43 IAudioOut(Core::System& system, AudoutParams audio_params, AudioCore::AudioOut& audio_core,
44 std::string&& device_name, std::string&& unique_name) 44 std::string&& device_name, std::string&& unique_name)
45 : ServiceFramework("IAudioOut"), audio_core(audio_core), 45 : ServiceFramework("IAudioOut"), audio_core(audio_core),
46 device_name(std::move(device_name)), audio_params(audio_params) { 46 device_name(std::move(device_name)),
47 audio_params(audio_params), main_memory{system.Memory()} {
47 // clang-format off 48 // clang-format off
48 static const FunctionInfo functions[] = { 49 static const FunctionInfo functions[] = {
49 {0, &IAudioOut::GetAudioOutState, "GetAudioOutState"}, 50 {0, &IAudioOut::GetAudioOutState, "GetAudioOutState"},
@@ -137,7 +138,7 @@ private:
137 const u64 tag{rp.Pop<u64>()}; 138 const u64 tag{rp.Pop<u64>()};
138 139
139 std::vector<s16> samples(audio_buffer.buffer_size / sizeof(s16)); 140 std::vector<s16> samples(audio_buffer.buffer_size / sizeof(s16));
140 Memory::ReadBlock(audio_buffer.buffer, samples.data(), audio_buffer.buffer_size); 141 main_memory.ReadBlock(audio_buffer.buffer, samples.data(), audio_buffer.buffer_size);
141 142
142 if (!audio_core.QueueBuffer(stream, tag, std::move(samples))) { 143 if (!audio_core.QueueBuffer(stream, tag, std::move(samples))) {
143 IPC::ResponseBuilder rb{ctx, 2}; 144 IPC::ResponseBuilder rb{ctx, 2};
@@ -209,6 +210,7 @@ private:
209 210
210 /// This is the event handle used to check if the audio buffer was released 211 /// This is the event handle used to check if the audio buffer was released
211 Kernel::EventPair buffer_event; 212 Kernel::EventPair buffer_event;
213 Memory::Memory& main_memory;
212}; 214};
213 215
214AudOutU::AudOutU(Core::System& system_) : ServiceFramework("audout:u"), system{system_} { 216AudOutU::AudOutU(Core::System& system_) : ServiceFramework("audout:u"), system{system_} {
diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp
index 4ea7ade6e..82a5dbf14 100644
--- a/src/core/hle/service/audio/audren_u.cpp
+++ b/src/core/hle/service/audio/audren_u.cpp
@@ -49,8 +49,9 @@ public:
49 49
50 system_event = 50 system_event =
51 Kernel::WritableEvent::CreateEventPair(system.Kernel(), "IAudioRenderer:SystemEvent"); 51 Kernel::WritableEvent::CreateEventPair(system.Kernel(), "IAudioRenderer:SystemEvent");
52 renderer = std::make_unique<AudioCore::AudioRenderer>( 52 renderer = std::make_unique<AudioCore::AudioRenderer>(system.CoreTiming(), system.Memory(),
53 system.CoreTiming(), audren_params, system_event.writable, instance_number); 53 audren_params, system_event.writable,
54 instance_number);
54 } 55 }
55 56
56private: 57private:
diff --git a/src/core/hle/service/filesystem/fsp_srv.cpp b/src/core/hle/service/filesystem/fsp_srv.cpp
index ea9cc901e..55d62fc5e 100644
--- a/src/core/hle/service/filesystem/fsp_srv.cpp
+++ b/src/core/hle/service/filesystem/fsp_srv.cpp
@@ -391,13 +391,10 @@ public:
391 } 391 }
392 392
393 void RenameFile(Kernel::HLERequestContext& ctx) { 393 void RenameFile(Kernel::HLERequestContext& ctx) {
394 std::vector<u8> buffer; 394 std::vector<u8> buffer = ctx.ReadBuffer(0);
395 buffer.resize(ctx.BufferDescriptorX()[0].Size());
396 Memory::ReadBlock(ctx.BufferDescriptorX()[0].Address(), buffer.data(), buffer.size());
397 const std::string src_name = Common::StringFromBuffer(buffer); 395 const std::string src_name = Common::StringFromBuffer(buffer);
398 396
399 buffer.resize(ctx.BufferDescriptorX()[1].Size()); 397 buffer = ctx.ReadBuffer(1);
400 Memory::ReadBlock(ctx.BufferDescriptorX()[1].Address(), buffer.data(), buffer.size());
401 const std::string dst_name = Common::StringFromBuffer(buffer); 398 const std::string dst_name = Common::StringFromBuffer(buffer);
402 399
403 LOG_DEBUG(Service_FS, "called. file '{}' to file '{}'", src_name, dst_name); 400 LOG_DEBUG(Service_FS, "called. file '{}' to file '{}'", src_name, dst_name);
diff --git a/src/core/hle/service/ldr/ldr.cpp b/src/core/hle/service/ldr/ldr.cpp
index 88f903bfd..157aeec88 100644
--- a/src/core/hle/service/ldr/ldr.cpp
+++ b/src/core/hle/service/ldr/ldr.cpp
@@ -140,9 +140,10 @@ public:
140 rb.Push(ERROR_INVALID_SIZE); 140 rb.Push(ERROR_INVALID_SIZE);
141 return; 141 return;
142 } 142 }
143
143 // Read NRR data from memory 144 // Read NRR data from memory
144 std::vector<u8> nrr_data(nrr_size); 145 std::vector<u8> nrr_data(nrr_size);
145 Memory::ReadBlock(nrr_address, nrr_data.data(), nrr_size); 146 system.Memory().ReadBlock(nrr_address, nrr_data.data(), nrr_size);
146 NRRHeader header; 147 NRRHeader header;
147 std::memcpy(&header, nrr_data.data(), sizeof(NRRHeader)); 148 std::memcpy(&header, nrr_data.data(), sizeof(NRRHeader));
148 149
@@ -291,7 +292,7 @@ public:
291 292
292 // Read NRO data from memory 293 // Read NRO data from memory
293 std::vector<u8> nro_data(nro_size); 294 std::vector<u8> nro_data(nro_size);
294 Memory::ReadBlock(nro_address, nro_data.data(), nro_size); 295 system.Memory().ReadBlock(nro_address, nro_data.data(), nro_size);
295 296
296 SHA256Hash hash{}; 297 SHA256Hash hash{};
297 mbedtls_sha256_ret(nro_data.data(), nro_data.size(), hash.data(), 0); 298 mbedtls_sha256_ret(nro_data.data(), nro_data.size(), hash.data(), 0);
diff --git a/src/core/hle/service/lm/lm.cpp b/src/core/hle/service/lm/lm.cpp
index 435f2d286..346c8f899 100644
--- a/src/core/hle/service/lm/lm.cpp
+++ b/src/core/hle/service/lm/lm.cpp
@@ -17,7 +17,8 @@ namespace Service::LM {
17 17
18class ILogger final : public ServiceFramework<ILogger> { 18class ILogger final : public ServiceFramework<ILogger> {
19public: 19public:
20 ILogger(Manager& manager) : ServiceFramework("ILogger"), manager(manager) { 20 explicit ILogger(Manager& manager_, Memory::Memory& memory_)
21 : ServiceFramework("ILogger"), manager{manager_}, memory{memory_} {
21 static const FunctionInfo functions[] = { 22 static const FunctionInfo functions[] = {
22 {0, &ILogger::Log, "Log"}, 23 {0, &ILogger::Log, "Log"},
23 {1, &ILogger::SetDestination, "SetDestination"}, 24 {1, &ILogger::SetDestination, "SetDestination"},
@@ -35,15 +36,15 @@ private:
35 MessageHeader header{}; 36 MessageHeader header{};
36 VAddr addr{ctx.BufferDescriptorX()[0].Address()}; 37 VAddr addr{ctx.BufferDescriptorX()[0].Address()};
37 const VAddr end_addr{addr + ctx.BufferDescriptorX()[0].size}; 38 const VAddr end_addr{addr + ctx.BufferDescriptorX()[0].size};
38 Memory::ReadBlock(addr, &header, sizeof(MessageHeader)); 39 memory.ReadBlock(addr, &header, sizeof(MessageHeader));
39 addr += sizeof(MessageHeader); 40 addr += sizeof(MessageHeader);
40 41
41 FieldMap fields; 42 FieldMap fields;
42 while (addr < end_addr) { 43 while (addr < end_addr) {
43 const auto field = static_cast<Field>(Memory::Read8(addr++)); 44 const auto field = static_cast<Field>(memory.Read8(addr++));
44 const auto length = Memory::Read8(addr++); 45 const auto length = memory.Read8(addr++);
45 46
46 if (static_cast<Field>(Memory::Read8(addr)) == Field::Skip) { 47 if (static_cast<Field>(memory.Read8(addr)) == Field::Skip) {
47 ++addr; 48 ++addr;
48 } 49 }
49 50
@@ -54,7 +55,7 @@ private:
54 } 55 }
55 56
56 std::vector<u8> data(length); 57 std::vector<u8> data(length);
57 Memory::ReadBlock(addr, data.data(), length); 58 memory.ReadBlock(addr, data.data(), length);
58 fields.emplace(field, std::move(data)); 59 fields.emplace(field, std::move(data));
59 } 60 }
60 61
@@ -74,11 +75,13 @@ private:
74 } 75 }
75 76
76 Manager& manager; 77 Manager& manager;
78 Memory::Memory& memory;
77}; 79};
78 80
79class LM final : public ServiceFramework<LM> { 81class LM final : public ServiceFramework<LM> {
80public: 82public:
81 explicit LM(Manager& manager) : ServiceFramework{"lm"}, manager(manager) { 83 explicit LM(Manager& manager_, Memory::Memory& memory_)
84 : ServiceFramework{"lm"}, manager{manager_}, memory{memory_} {
82 // clang-format off 85 // clang-format off
83 static const FunctionInfo functions[] = { 86 static const FunctionInfo functions[] = {
84 {0, &LM::OpenLogger, "OpenLogger"}, 87 {0, &LM::OpenLogger, "OpenLogger"},
@@ -94,14 +97,16 @@ private:
94 97
95 IPC::ResponseBuilder rb{ctx, 2, 0, 1}; 98 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
96 rb.Push(RESULT_SUCCESS); 99 rb.Push(RESULT_SUCCESS);
97 rb.PushIpcInterface<ILogger>(manager); 100 rb.PushIpcInterface<ILogger>(manager, memory);
98 } 101 }
99 102
100 Manager& manager; 103 Manager& manager;
104 Memory::Memory& memory;
101}; 105};
102 106
103void InstallInterfaces(Core::System& system) { 107void InstallInterfaces(Core::System& system) {
104 std::make_shared<LM>(system.GetLogManager())->InstallAsService(system.ServiceManager()); 108 std::make_shared<LM>(system.GetLogManager(), system.Memory())
109 ->InstallAsService(system.ServiceManager());
105} 110}
106 111
107} // namespace Service::LM 112} // namespace Service::LM
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp b/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp
index 9de0ace22..6d8bca8bb 100644
--- a/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp
+++ b/src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp
@@ -191,8 +191,8 @@ u32 nvhost_gpu::KickoffPB(const std::vector<u8>& input, std::vector<u8>& output,
191 std::memcpy(entries.data(), input2.data(), 191 std::memcpy(entries.data(), input2.data(),
192 params.num_entries * sizeof(Tegra::CommandListHeader)); 192 params.num_entries * sizeof(Tegra::CommandListHeader));
193 } else { 193 } else {
194 Memory::ReadBlock(params.address, entries.data(), 194 system.Memory().ReadBlock(params.address, entries.data(),
195 params.num_entries * sizeof(Tegra::CommandListHeader)); 195 params.num_entries * sizeof(Tegra::CommandListHeader));
196 } 196 }
197 UNIMPLEMENTED_IF(params.flags.add_wait.Value() != 0); 197 UNIMPLEMENTED_IF(params.flags.add_wait.Value() != 0);
198 UNIMPLEMENTED_IF(params.flags.add_increment.Value() != 0); 198 UNIMPLEMENTED_IF(params.flags.add_increment.Value() != 0);