diff options
| author | Subv <subv2112@gmail.com> | 2018-01-15 17:39:00 -0500 |
|---|---|---|
| committer | bunnei <bunneidev@gmail.com> | 2018-01-16 19:03:49 -0500 |
| commit | 30657f9ca1485dcf9611d3c4ea3c74d52b350dec (patch) | |
| tree | 66254dcdc6002297706d9c7169a46eaff806c611 /src/core/hle/service/nvdrv/nvdrv.cpp | |
| parent | f827b17dd4a3b555714032f409181b877686d10d (diff) | |
NV: Move the nvdrv classes into the Nvidia namespace, and move the functionality to a s single module that services call.
Diffstat (limited to 'src/core/hle/service/nvdrv/nvdrv.cpp')
| -rw-r--r-- | src/core/hle/service/nvdrv/nvdrv.cpp | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/src/core/hle/service/nvdrv/nvdrv.cpp b/src/core/hle/service/nvdrv/nvdrv.cpp index c874e6395..be9946505 100644 --- a/src/core/hle/service/nvdrv/nvdrv.cpp +++ b/src/core/hle/service/nvdrv/nvdrv.cpp @@ -2,19 +2,50 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include "core/hle/service/nvdrv/devices/nvdevice.h" +#include "core/hle/service/nvdrv/devices/nvdisp_disp0.h" +#include "core/hle/service/nvdrv/devices/nvhost_as_gpu.h" +#include "core/hle/service/nvdrv/devices/nvmap.h" #include "core/hle/service/nvdrv/nvdrv.h" #include "core/hle/service/nvdrv/nvdrv_a.h" namespace Service { -namespace NVDRV { +namespace Nvidia { -std::weak_ptr<NVDRV_A> nvdrv_a; +std::weak_ptr<Module> nvdrv; void InstallInterfaces(SM::ServiceManager& service_manager) { - auto nvdrv = std::make_shared<NVDRV_A>(); - nvdrv->InstallAsService(service_manager); - nvdrv_a = nvdrv; + auto module_ = std::make_shared<Module>(); + std::make_shared<NVDRV_A>(module_)->InstallAsService(service_manager); + nvdrv = module_; } -} // namespace NVDRV +Module::Module() { + auto nvmap_dev = std::make_shared<Devices::nvmap>(); + devices["/dev/nvhost-as-gpu"] = std::make_shared<Devices::nvhost_as_gpu>(); + devices["/dev/nvmap"] = nvmap_dev; + devices["/dev/nvdisp_disp0"] = std::make_shared<Devices::nvdisp_disp0>(nvmap_dev); +} + +u32 Module::Open(std::string device_name) { + ASSERT_MSG(devices.find(device_name) != devices.end(), "Trying to open unknown device %s", + device_name.c_str()); + + auto device = devices[device_name]; + u32 fd = next_fd++; + + open_files[fd] = device; + + return fd; +} + +u32 Module::Ioctl(u32 fd, u32 command, const std::vector<u8>& input, std::vector<u8>& output) { + auto itr = open_files.find(fd); + ASSERT_MSG(itr != open_files.end(), "Tried to talk to an invalid device"); + + auto device = itr->second; + return device->ioctl(command, input, output); +} + +} // namespace Nvidia } // namespace Service |
