diff options
| author | 2019-11-28 11:43:17 -0500 | |
|---|---|---|
| committer | 2019-11-28 11:43:17 -0500 | |
| commit | e3ee017e91ef4d713f1af8cb60c5157e40d43f18 (patch) | |
| tree | e0a5b47cac1d548599b8ceba7f71b40746fe6b48 /src/core/hle/service | |
| parent | Merge pull request #3171 from lioncash/internal-link (diff) | |
| parent | core/memory; Migrate over SetCurrentPageTable() to the Memory class (diff) | |
| download | yuzu-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.cpp | 6 | ||||
| -rw-r--r-- | src/core/hle/service/audio/audren_u.cpp | 5 | ||||
| -rw-r--r-- | src/core/hle/service/filesystem/fsp_srv.cpp | 7 | ||||
| -rw-r--r-- | src/core/hle/service/ldr/ldr.cpp | 5 | ||||
| -rw-r--r-- | src/core/hle/service/lm/lm.cpp | 23 | ||||
| -rw-r--r-- | src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp | 4 |
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 | ||
| 214 | AudOutU::AudOutU(Core::System& system_) : ServiceFramework("audout:u"), system{system_} { | 216 | AudOutU::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 | ||
| 56 | private: | 57 | private: |
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 | ||
| 18 | class ILogger final : public ServiceFramework<ILogger> { | 18 | class ILogger final : public ServiceFramework<ILogger> { |
| 19 | public: | 19 | public: |
| 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 | ||
| 79 | class LM final : public ServiceFramework<LM> { | 81 | class LM final : public ServiceFramework<LM> { |
| 80 | public: | 82 | public: |
| 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 | ||
| 103 | void InstallInterfaces(Core::System& system) { | 107 | void 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); |