diff options
| author | bunnei <bunneidev@gmail.com> | 2018-06-03 11:18:00 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-06-03 11:18:00 -0400 | 
| commit | 41faeeeb037700dd66d124c9b45a55d4d7045759 (patch) | |
| tree | 72bfc306c39d1f7ea8f490eafde772325dea2b00 /src/core/hle | |
| parent | 63270e588b23d44b5a4d780b3d838d1755259a77 (diff) | |
| parent | 9a273bb23b3c273f5e3362b304e45f551a36ee60 (diff) | |
Merge pull request #484 from mailwl/nvhost-nvdec
Services/nvdrv: add '/dev/nvhost-nvdec' device
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp | 32 | ||||
| -rw-r--r-- | src/core/hle/service/nvdrv/devices/nvhost_nvdec.h | 38 | ||||
| -rw-r--r-- | src/core/hle/service/nvdrv/nvdrv.cpp | 2 | 
3 files changed, 72 insertions, 0 deletions
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp b/src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp new file mode 100644 index 000000000..0b6c22898 --- /dev/null +++ b/src/core/hle/service/nvdrv/devices/nvhost_nvdec.cpp @@ -0,0 +1,32 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "common/assert.h" +#include "common/logging/log.h" +#include "core/hle/service/nvdrv/devices/nvhost_nvdec.h" + +namespace Service::Nvidia::Devices { + +u32 nvhost_nvdec::ioctl(Ioctl command, const std::vector<u8>& input, std::vector<u8>& output) { +    NGLOG_DEBUG(Service_NVDRV, "called, command=0x{:08X}, input_size=0x{:X}, output_size=0x{:X}", +                command.raw, input.size(), output.size()); + +    switch (static_cast<IoctlCommand>(command.raw)) { +    case IoctlCommand::IocSetNVMAPfdCommand: +        return SetNVMAPfd(input, output); +    } + +    UNIMPLEMENTED_MSG("Unimplemented ioctl"); +    return 0; +} + +u32 nvhost_nvdec::SetNVMAPfd(const std::vector<u8>& input, std::vector<u8>& output) { +    IoctlSetNvmapFD params{}; +    std::memcpy(¶ms, input.data(), input.size()); +    NGLOG_DEBUG(Service_NVDRV, "called, fd={}", params.nvmap_fd); +    nvmap_fd = params.nvmap_fd; +    return 0; +} + +} // namespace Service::Nvidia::Devices diff --git a/src/core/hle/service/nvdrv/devices/nvhost_nvdec.h b/src/core/hle/service/nvdrv/devices/nvhost_nvdec.h new file mode 100644 index 000000000..0192aecdd --- /dev/null +++ b/src/core/hle/service/nvdrv/devices/nvhost_nvdec.h @@ -0,0 +1,38 @@ +// Copyright 2018 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <array> +#include <cstdlib> +#include <cstring> +#include <vector> +#include "common/common_types.h" +#include "core/hle/service/nvdrv/devices/nvdevice.h" + +namespace Service::Nvidia::Devices { + +class nvhost_nvdec final : public nvdevice { +public: +    nvhost_nvdec() = default; +    ~nvhost_nvdec() override = default; + +    u32 ioctl(Ioctl command, const std::vector<u8>& input, std::vector<u8>& output) override; + +private: +    enum class IoctlCommand : u32_le { +        IocSetNVMAPfdCommand = 0x40044801, +    }; + +    struct IoctlSetNvmapFD { +        u32_le nvmap_fd; +    }; +    static_assert(sizeof(IoctlSetNvmapFD) == 4, "IoctlSetNvmapFD is incorrect size"); + +    u32_le nvmap_fd{}; + +    u32 SetNVMAPfd(const std::vector<u8>& input, std::vector<u8>& output); +}; + +} // namespace Service::Nvidia::Devices diff --git a/src/core/hle/service/nvdrv/nvdrv.cpp b/src/core/hle/service/nvdrv/nvdrv.cpp index a6a4ab7d3..cc5cfe34e 100644 --- a/src/core/hle/service/nvdrv/nvdrv.cpp +++ b/src/core/hle/service/nvdrv/nvdrv.cpp @@ -9,6 +9,7 @@  #include "core/hle/service/nvdrv/devices/nvhost_ctrl.h"  #include "core/hle/service/nvdrv/devices/nvhost_ctrl_gpu.h"  #include "core/hle/service/nvdrv/devices/nvhost_gpu.h" +#include "core/hle/service/nvdrv/devices/nvhost_nvdec.h"  #include "core/hle/service/nvdrv/devices/nvmap.h"  #include "core/hle/service/nvdrv/interface.h"  #include "core/hle/service/nvdrv/nvdrv.h" @@ -36,6 +37,7 @@ Module::Module() {      devices["/dev/nvmap"] = nvmap_dev;      devices["/dev/nvdisp_disp0"] = std::make_shared<Devices::nvdisp_disp0>(nvmap_dev);      devices["/dev/nvhost-ctrl"] = std::make_shared<Devices::nvhost_ctrl>(); +    devices["/dev/nvhost-nvdec"] = std::make_shared<Devices::nvhost_nvdec>();  }  u32 Module::Open(std::string device_name) {  | 
