mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-03 16:39:01 -06:00 
			
		
		
		
	nvhost_nvdec_common: Remove BufferMap
This was mainly used to keep track of mapped buffers for later unmapping. Since unmap is no longer implemented, this no longer seves a valuable purpose.
This commit is contained in:
		@@ -166,8 +166,6 @@ NvResult nvhost_nvdec_common::MapBuffer(const std::vector<u8>& input, std::vecto
 | 
			
		||||
            LOG_ERROR(Service_NVDRV, "failed to map size={}", object->size);
 | 
			
		||||
        } else {
 | 
			
		||||
            cmd_buffer.map_address = object->dma_map_addr;
 | 
			
		||||
            AddBufferMap(object->dma_map_addr, object->size, object->addr,
 | 
			
		||||
                         object->status == nvmap::Object::Status::Allocated);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    std::memcpy(output.data(), ¶ms, sizeof(IoctlMapBuffer));
 | 
			
		||||
@@ -193,33 +191,4 @@ NvResult nvhost_nvdec_common::SetSubmitTimeout(const std::vector<u8>& input,
 | 
			
		||||
    return NvResult::Success;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::optional<nvhost_nvdec_common::BufferMap> nvhost_nvdec_common::FindBufferMap(
 | 
			
		||||
    GPUVAddr gpu_addr) const {
 | 
			
		||||
    const auto it = std::find_if(
 | 
			
		||||
        buffer_mappings.begin(), buffer_mappings.upper_bound(gpu_addr), [&](const auto& entry) {
 | 
			
		||||
            return (gpu_addr >= entry.second.StartAddr() && gpu_addr < entry.second.EndAddr());
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    ASSERT(it != buffer_mappings.end());
 | 
			
		||||
    return it->second;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void nvhost_nvdec_common::AddBufferMap(GPUVAddr gpu_addr, std::size_t size, VAddr cpu_addr,
 | 
			
		||||
                                       bool is_allocated) {
 | 
			
		||||
    buffer_mappings.insert_or_assign(gpu_addr, BufferMap{gpu_addr, size, cpu_addr, is_allocated});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::optional<std::size_t> nvhost_nvdec_common::RemoveBufferMap(GPUVAddr gpu_addr) {
 | 
			
		||||
    const auto iter{buffer_mappings.find(gpu_addr)};
 | 
			
		||||
    if (iter == buffer_mappings.end()) {
 | 
			
		||||
        return std::nullopt;
 | 
			
		||||
    }
 | 
			
		||||
    std::size_t size = 0;
 | 
			
		||||
    if (iter->second.IsAllocated()) {
 | 
			
		||||
        size = iter->second.Size();
 | 
			
		||||
    }
 | 
			
		||||
    buffer_mappings.erase(iter);
 | 
			
		||||
    return size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace Service::Nvidia::Devices
 | 
			
		||||
 
 | 
			
		||||
@@ -23,45 +23,6 @@ public:
 | 
			
		||||
    ~nvhost_nvdec_common() override;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    class BufferMap final {
 | 
			
		||||
    public:
 | 
			
		||||
        constexpr BufferMap() = default;
 | 
			
		||||
 | 
			
		||||
        constexpr BufferMap(GPUVAddr start_addr_, std::size_t size_)
 | 
			
		||||
            : start_addr{start_addr_}, end_addr{start_addr_ + size_} {}
 | 
			
		||||
 | 
			
		||||
        constexpr BufferMap(GPUVAddr start_addr_, std::size_t size_, VAddr cpu_addr_,
 | 
			
		||||
                            bool is_allocated_)
 | 
			
		||||
            : start_addr{start_addr_}, end_addr{start_addr_ + size_}, cpu_addr{cpu_addr_},
 | 
			
		||||
              is_allocated{is_allocated_} {}
 | 
			
		||||
 | 
			
		||||
        constexpr VAddr StartAddr() const {
 | 
			
		||||
            return start_addr;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        constexpr VAddr EndAddr() const {
 | 
			
		||||
            return end_addr;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        constexpr std::size_t Size() const {
 | 
			
		||||
            return end_addr - start_addr;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        constexpr VAddr CpuAddr() const {
 | 
			
		||||
            return cpu_addr;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        constexpr bool IsAllocated() const {
 | 
			
		||||
            return is_allocated;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        GPUVAddr start_addr{};
 | 
			
		||||
        GPUVAddr end_addr{};
 | 
			
		||||
        VAddr cpu_addr{};
 | 
			
		||||
        bool is_allocated{};
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    struct IoctlSetNvmapFD {
 | 
			
		||||
        s32_le nvmap_fd{};
 | 
			
		||||
    };
 | 
			
		||||
@@ -154,17 +115,11 @@ protected:
 | 
			
		||||
    NvResult UnmapBuffer(const std::vector<u8>& input, std::vector<u8>& output);
 | 
			
		||||
    NvResult SetSubmitTimeout(const std::vector<u8>& input, std::vector<u8>& output);
 | 
			
		||||
 | 
			
		||||
    std::optional<BufferMap> FindBufferMap(GPUVAddr gpu_addr) const;
 | 
			
		||||
    void AddBufferMap(GPUVAddr gpu_addr, std::size_t size, VAddr cpu_addr, bool is_allocated);
 | 
			
		||||
    std::optional<std::size_t> RemoveBufferMap(GPUVAddr gpu_addr);
 | 
			
		||||
 | 
			
		||||
    s32_le nvmap_fd{};
 | 
			
		||||
    u32_le submit_timeout{};
 | 
			
		||||
    std::shared_ptr<nvmap> nvmap_dev;
 | 
			
		||||
    SyncpointManager& syncpoint_manager;
 | 
			
		||||
    std::array<u32, MaxSyncPoints> device_syncpoints{};
 | 
			
		||||
    // This is expected to be ordered, therefore we must use a map, not unordered_map
 | 
			
		||||
    std::map<GPUVAddr, BufferMap> buffer_mappings;
 | 
			
		||||
};
 | 
			
		||||
}; // namespace Devices
 | 
			
		||||
} // namespace Service::Nvidia
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user