diff options
Diffstat (limited to '')
| -rw-r--r-- | src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp | 31 | ||||
| -rw-r--r-- | src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.h | 45 |
2 files changed, 0 insertions, 76 deletions
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp b/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp index 207a5b90d..845de724d 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.cpp | |||
| @@ -166,8 +166,6 @@ NvResult nvhost_nvdec_common::MapBuffer(const std::vector<u8>& input, std::vecto | |||
| 166 | LOG_ERROR(Service_NVDRV, "failed to map size={}", object->size); | 166 | LOG_ERROR(Service_NVDRV, "failed to map size={}", object->size); |
| 167 | } else { | 167 | } else { |
| 168 | cmd_buffer.map_address = object->dma_map_addr; | 168 | cmd_buffer.map_address = object->dma_map_addr; |
| 169 | AddBufferMap(object->dma_map_addr, object->size, object->addr, | ||
| 170 | object->status == nvmap::Object::Status::Allocated); | ||
| 171 | } | 169 | } |
| 172 | } | 170 | } |
| 173 | std::memcpy(output.data(), ¶ms, sizeof(IoctlMapBuffer)); | 171 | std::memcpy(output.data(), ¶ms, sizeof(IoctlMapBuffer)); |
| @@ -193,33 +191,4 @@ NvResult nvhost_nvdec_common::SetSubmitTimeout(const std::vector<u8>& input, | |||
| 193 | return NvResult::Success; | 191 | return NvResult::Success; |
| 194 | } | 192 | } |
| 195 | 193 | ||
| 196 | std::optional<nvhost_nvdec_common::BufferMap> nvhost_nvdec_common::FindBufferMap( | ||
| 197 | GPUVAddr gpu_addr) const { | ||
| 198 | const auto it = std::find_if( | ||
| 199 | buffer_mappings.begin(), buffer_mappings.upper_bound(gpu_addr), [&](const auto& entry) { | ||
| 200 | return (gpu_addr >= entry.second.StartAddr() && gpu_addr < entry.second.EndAddr()); | ||
| 201 | }); | ||
| 202 | |||
| 203 | ASSERT(it != buffer_mappings.end()); | ||
| 204 | return it->second; | ||
| 205 | } | ||
| 206 | |||
| 207 | void nvhost_nvdec_common::AddBufferMap(GPUVAddr gpu_addr, std::size_t size, VAddr cpu_addr, | ||
| 208 | bool is_allocated) { | ||
| 209 | buffer_mappings.insert_or_assign(gpu_addr, BufferMap{gpu_addr, size, cpu_addr, is_allocated}); | ||
| 210 | } | ||
| 211 | |||
| 212 | std::optional<std::size_t> nvhost_nvdec_common::RemoveBufferMap(GPUVAddr gpu_addr) { | ||
| 213 | const auto iter{buffer_mappings.find(gpu_addr)}; | ||
| 214 | if (iter == buffer_mappings.end()) { | ||
| 215 | return std::nullopt; | ||
| 216 | } | ||
| 217 | std::size_t size = 0; | ||
| 218 | if (iter->second.IsAllocated()) { | ||
| 219 | size = iter->second.Size(); | ||
| 220 | } | ||
| 221 | buffer_mappings.erase(iter); | ||
| 222 | return size; | ||
| 223 | } | ||
| 224 | |||
| 225 | } // namespace Service::Nvidia::Devices | 194 | } // namespace Service::Nvidia::Devices |
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.h b/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.h index da10f5f41..af59f00d2 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.h +++ b/src/core/hle/service/nvdrv/devices/nvhost_nvdec_common.h | |||
| @@ -23,45 +23,6 @@ public: | |||
| 23 | ~nvhost_nvdec_common() override; | 23 | ~nvhost_nvdec_common() override; |
| 24 | 24 | ||
| 25 | protected: | 25 | protected: |
| 26 | class BufferMap final { | ||
| 27 | public: | ||
| 28 | constexpr BufferMap() = default; | ||
| 29 | |||
| 30 | constexpr BufferMap(GPUVAddr start_addr_, std::size_t size_) | ||
| 31 | : start_addr{start_addr_}, end_addr{start_addr_ + size_} {} | ||
| 32 | |||
| 33 | constexpr BufferMap(GPUVAddr start_addr_, std::size_t size_, VAddr cpu_addr_, | ||
| 34 | bool is_allocated_) | ||
| 35 | : start_addr{start_addr_}, end_addr{start_addr_ + size_}, cpu_addr{cpu_addr_}, | ||
| 36 | is_allocated{is_allocated_} {} | ||
| 37 | |||
| 38 | constexpr VAddr StartAddr() const { | ||
| 39 | return start_addr; | ||
| 40 | } | ||
| 41 | |||
| 42 | constexpr VAddr EndAddr() const { | ||
| 43 | return end_addr; | ||
| 44 | } | ||
| 45 | |||
| 46 | constexpr std::size_t Size() const { | ||
| 47 | return end_addr - start_addr; | ||
| 48 | } | ||
| 49 | |||
| 50 | constexpr VAddr CpuAddr() const { | ||
| 51 | return cpu_addr; | ||
| 52 | } | ||
| 53 | |||
| 54 | constexpr bool IsAllocated() const { | ||
| 55 | return is_allocated; | ||
| 56 | } | ||
| 57 | |||
| 58 | private: | ||
| 59 | GPUVAddr start_addr{}; | ||
| 60 | GPUVAddr end_addr{}; | ||
| 61 | VAddr cpu_addr{}; | ||
| 62 | bool is_allocated{}; | ||
| 63 | }; | ||
| 64 | |||
| 65 | struct IoctlSetNvmapFD { | 26 | struct IoctlSetNvmapFD { |
| 66 | s32_le nvmap_fd{}; | 27 | s32_le nvmap_fd{}; |
| 67 | }; | 28 | }; |
| @@ -154,17 +115,11 @@ protected: | |||
| 154 | NvResult UnmapBuffer(const std::vector<u8>& input, std::vector<u8>& output); | 115 | NvResult UnmapBuffer(const std::vector<u8>& input, std::vector<u8>& output); |
| 155 | NvResult SetSubmitTimeout(const std::vector<u8>& input, std::vector<u8>& output); | 116 | NvResult SetSubmitTimeout(const std::vector<u8>& input, std::vector<u8>& output); |
| 156 | 117 | ||
| 157 | std::optional<BufferMap> FindBufferMap(GPUVAddr gpu_addr) const; | ||
| 158 | void AddBufferMap(GPUVAddr gpu_addr, std::size_t size, VAddr cpu_addr, bool is_allocated); | ||
| 159 | std::optional<std::size_t> RemoveBufferMap(GPUVAddr gpu_addr); | ||
| 160 | |||
| 161 | s32_le nvmap_fd{}; | 118 | s32_le nvmap_fd{}; |
| 162 | u32_le submit_timeout{}; | 119 | u32_le submit_timeout{}; |
| 163 | std::shared_ptr<nvmap> nvmap_dev; | 120 | std::shared_ptr<nvmap> nvmap_dev; |
| 164 | SyncpointManager& syncpoint_manager; | 121 | SyncpointManager& syncpoint_manager; |
| 165 | std::array<u32, MaxSyncPoints> device_syncpoints{}; | 122 | std::array<u32, MaxSyncPoints> device_syncpoints{}; |
| 166 | // This is expected to be ordered, therefore we must use a map, not unordered_map | ||
| 167 | std::map<GPUVAddr, BufferMap> buffer_mappings; | ||
| 168 | }; | 123 | }; |
| 169 | }; // namespace Devices | 124 | }; // namespace Devices |
| 170 | } // namespace Service::Nvidia | 125 | } // namespace Service::Nvidia |