Services/nvdrv: add '/dev/nvhost-nvdec' device
This commit is contained in:
parent
c8e1383fa9
commit
9a273bb23b
|
@ -175,6 +175,8 @@ add_library(core STATIC
|
||||||
hle/service/nvdrv/devices/nvhost_ctrl_gpu.h
|
hle/service/nvdrv/devices/nvhost_ctrl_gpu.h
|
||||||
hle/service/nvdrv/devices/nvhost_gpu.cpp
|
hle/service/nvdrv/devices/nvhost_gpu.cpp
|
||||||
hle/service/nvdrv/devices/nvhost_gpu.h
|
hle/service/nvdrv/devices/nvhost_gpu.h
|
||||||
|
hle/service/nvdrv/devices/nvhost_nvdec.cpp
|
||||||
|
hle/service/nvdrv/devices/nvhost_nvdec.h
|
||||||
hle/service/nvdrv/devices/nvmap.cpp
|
hle/service/nvdrv/devices/nvmap.cpp
|
||||||
hle/service/nvdrv/devices/nvmap.h
|
hle/service/nvdrv/devices/nvmap.h
|
||||||
hle/service/nvdrv/interface.cpp
|
hle/service/nvdrv/interface.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
|
|
@ -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
|
|
@ -9,6 +9,7 @@
|
||||||
#include "core/hle/service/nvdrv/devices/nvhost_ctrl.h"
|
#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_ctrl_gpu.h"
|
||||||
#include "core/hle/service/nvdrv/devices/nvhost_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/devices/nvmap.h"
|
||||||
#include "core/hle/service/nvdrv/interface.h"
|
#include "core/hle/service/nvdrv/interface.h"
|
||||||
#include "core/hle/service/nvdrv/nvdrv.h"
|
#include "core/hle/service/nvdrv/nvdrv.h"
|
||||||
|
@ -36,6 +37,7 @@ Module::Module() {
|
||||||
devices["/dev/nvmap"] = nvmap_dev;
|
devices["/dev/nvmap"] = nvmap_dev;
|
||||||
devices["/dev/nvdisp_disp0"] = std::make_shared<Devices::nvdisp_disp0>(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-ctrl"] = std::make_shared<Devices::nvhost_ctrl>();
|
||||||
|
devices["/dev/nvhost-nvdec"] = std::make_shared<Devices::nvhost_nvdec>();
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 Module::Open(std::string device_name) {
|
u32 Module::Open(std::string device_name) {
|
||||||
|
|
Loading…
Reference in New Issue