1
1
Fork 0
forked from suyu/suyu

NV: Implemented the nvdrv service, which uses the same interface as nvdrv:a

This commit is contained in:
Subv 2018-01-15 18:30:49 -05:00 committed by bunnei
parent 30657f9ca1
commit cb75b56e45
4 changed files with 18 additions and 16 deletions

View file

@ -48,8 +48,8 @@ set(SRCS
hle/service/nvdrv/devices/nvdisp_disp0.cpp hle/service/nvdrv/devices/nvdisp_disp0.cpp
hle/service/nvdrv/devices/nvhost_as_gpu.cpp hle/service/nvdrv/devices/nvhost_as_gpu.cpp
hle/service/nvdrv/devices/nvmap.cpp hle/service/nvdrv/devices/nvmap.cpp
hle/service/nvdrv/interface.cpp
hle/service/nvdrv/nvdrv.cpp hle/service/nvdrv/nvdrv.cpp
hle/service/nvdrv/nvdrv_a.cpp
hle/service/pctl/pctl.cpp hle/service/pctl/pctl.cpp
hle/service/pctl/pctl_a.cpp hle/service/pctl/pctl_a.cpp
hle/service/service.cpp hle/service/service.cpp
@ -136,8 +136,8 @@ set(HEADERS
hle/service/nvdrv/devices/nvdisp_disp0.h hle/service/nvdrv/devices/nvdisp_disp0.h
hle/service/nvdrv/devices/nvhost_as_gpu.h hle/service/nvdrv/devices/nvhost_as_gpu.h
hle/service/nvdrv/devices/nvmap.h hle/service/nvdrv/devices/nvmap.h
hle/service/nvdrv/interface.h
hle/service/nvdrv/nvdrv.h hle/service/nvdrv/nvdrv.h
hle/service/nvdrv/nvdrv_a.h
hle/service/pctl/pctl.h hle/service/pctl/pctl.h
hle/service/pctl/pctl_a.h hle/service/pctl/pctl_a.h
hle/service/service.h hle/service/service.h

View file

@ -4,13 +4,13 @@
#include "common/logging/log.h" #include "common/logging/log.h"
#include "core/hle/ipc_helpers.h" #include "core/hle/ipc_helpers.h"
#include "core/hle/service/nvdrv/interface.h"
#include "core/hle/service/nvdrv/nvdrv.h" #include "core/hle/service/nvdrv/nvdrv.h"
#include "core/hle/service/nvdrv/nvdrv_a.h"
namespace Service { namespace Service {
namespace Nvidia { namespace Nvidia {
void NVDRV_A::Open(Kernel::HLERequestContext& ctx) { void NVDRV::Open(Kernel::HLERequestContext& ctx) {
LOG_WARNING(Service, "(STUBBED) called"); LOG_WARNING(Service, "(STUBBED) called");
auto buffer = ctx.BufferDescriptorA()[0]; auto buffer = ctx.BufferDescriptorA()[0];
@ -24,7 +24,7 @@ void NVDRV_A::Open(Kernel::HLERequestContext& ctx) {
rb.Push<u32>(0); rb.Push<u32>(0);
} }
void NVDRV_A::Ioctl(Kernel::HLERequestContext& ctx) { void NVDRV::Ioctl(Kernel::HLERequestContext& ctx) {
LOG_WARNING(Service, "(STUBBED) called"); LOG_WARNING(Service, "(STUBBED) called");
IPC::RequestParser rp{ctx}; IPC::RequestParser rp{ctx};
@ -48,19 +48,19 @@ void NVDRV_A::Ioctl(Kernel::HLERequestContext& ctx) {
rb.Push(nv_result); rb.Push(nv_result);
} }
void NVDRV_A::Initialize(Kernel::HLERequestContext& ctx) { void NVDRV::Initialize(Kernel::HLERequestContext& ctx) {
LOG_WARNING(Service, "(STUBBED) called"); LOG_WARNING(Service, "(STUBBED) called");
IPC::RequestBuilder rb{ctx, 3}; IPC::RequestBuilder rb{ctx, 3};
rb.Push(RESULT_SUCCESS); rb.Push(RESULT_SUCCESS);
rb.Push<u32>(0); rb.Push<u32>(0);
} }
NVDRV_A::NVDRV_A(std::shared_ptr<Module> nvdrv) NVDRV::NVDRV(std::shared_ptr<Module> nvdrv, const char* name)
: ServiceFramework("nvdrv:a"), nvdrv(std::move(nvdrv)) { : ServiceFramework(name), nvdrv(std::move(nvdrv)) {
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
{0, &NVDRV_A::Open, "Open"}, {0, &NVDRV::Open, "Open"},
{1, &NVDRV_A::Ioctl, "Ioctl"}, {1, &NVDRV::Ioctl, "Ioctl"},
{3, &NVDRV_A::Initialize, "Initialize"}, {3, &NVDRV::Initialize, "Initialize"},
}; };
RegisterHandlers(functions); RegisterHandlers(functions);
} }

View file

@ -12,10 +12,10 @@
namespace Service { namespace Service {
namespace Nvidia { namespace Nvidia {
class NVDRV_A final : public ServiceFramework<NVDRV_A> { class NVDRV final : public ServiceFramework<NVDRV> {
public: public:
NVDRV_A(std::shared_ptr<Module> nvdrv); NVDRV(std::shared_ptr<Module> nvdrv, const char* name);
~NVDRV_A() = default; ~NVDRV() = default;
private: private:
void Open(Kernel::HLERequestContext& ctx); void Open(Kernel::HLERequestContext& ctx);

View file

@ -2,12 +2,13 @@
// Licensed under GPLv2 or any later version // Licensed under GPLv2 or any later version
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include "core/hle/ipc_helpers.h"
#include "core/hle/service/nvdrv/devices/nvdevice.h" #include "core/hle/service/nvdrv/devices/nvdevice.h"
#include "core/hle/service/nvdrv/devices/nvdisp_disp0.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/nvhost_as_gpu.h"
#include "core/hle/service/nvdrv/devices/nvmap.h" #include "core/hle/service/nvdrv/devices/nvmap.h"
#include "core/hle/service/nvdrv/nvdrv.h" #include "core/hle/service/nvdrv/nvdrv.h"
#include "core/hle/service/nvdrv/nvdrv_a.h" #include "core/hle/service/nvdrv/interface.h"
namespace Service { namespace Service {
namespace Nvidia { namespace Nvidia {
@ -16,7 +17,8 @@ std::weak_ptr<Module> nvdrv;
void InstallInterfaces(SM::ServiceManager& service_manager) { void InstallInterfaces(SM::ServiceManager& service_manager) {
auto module_ = std::make_shared<Module>(); auto module_ = std::make_shared<Module>();
std::make_shared<NVDRV_A>(module_)->InstallAsService(service_manager); std::make_shared<NVDRV>(module_, "nvdrv")->InstallAsService(service_manager);
std::make_shared<NVDRV>(module_, "nvdrv:a")->InstallAsService(service_manager);
nvdrv = module_; nvdrv = module_;
} }