summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/nvdrv/interface.cpp
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2019-06-08 00:41:55 +0200
committerFernandoS27 <fsahmkow27@gmail.com>2019-07-05 21:49:13 +0200
commite0027eba854b9cf097360e898457e164e6ae0b4d (patch)
tree3dfffe7615e1371aae0d31c98982608a62171701 /src/core/hle/service/nvdrv/interface.cpp
parentnv_services: Create GPU channels correctly (diff)
downloadyuzu-e0027eba854b9cf097360e898457e164e6ae0b4d.tar
yuzu-e0027eba854b9cf097360e898457e164e6ae0b4d.tar.gz
yuzu-e0027eba854b9cf097360e898457e164e6ae0b4d.tar.bz2
yuzu-e0027eba854b9cf097360e898457e164e6ae0b4d.tar.lz
yuzu-e0027eba854b9cf097360e898457e164e6ae0b4d.tar.xz
yuzu-e0027eba854b9cf097360e898457e164e6ae0b4d.tar.zst
yuzu-e0027eba854b9cf097360e898457e164e6ae0b4d.zip
Diffstat (limited to 'src/core/hle/service/nvdrv/interface.cpp')
-rw-r--r--src/core/hle/service/nvdrv/interface.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/core/hle/service/nvdrv/interface.cpp b/src/core/hle/service/nvdrv/interface.cpp
index b60fc748b..76482d16e 100644
--- a/src/core/hle/service/nvdrv/interface.cpp
+++ b/src/core/hle/service/nvdrv/interface.cpp
@@ -10,10 +10,15 @@
#include "core/hle/kernel/readable_event.h"
#include "core/hle/kernel/writable_event.h"
#include "core/hle/service/nvdrv/interface.h"
+#include "core/hle/service/nvdrv/nvdata.h"
#include "core/hle/service/nvdrv/nvdrv.h"
namespace Service::Nvidia {
+void NVDRV::SignalGPUInterrupt(const u32 event_id) {
+ nvdrv->SignalEvent(event_id);
+}
+
void NVDRV::Open(Kernel::HLERequestContext& ctx) {
LOG_DEBUG(Service_NVDRV, "called");
@@ -66,13 +71,19 @@ void NVDRV::Initialize(Kernel::HLERequestContext& ctx) {
void NVDRV::QueryEvent(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp{ctx};
u32 fd = rp.Pop<u32>();
- u32 event_id = rp.Pop<u32>();
+ // TODO(Blinkhawk): Figure the meaning of the flag at bit 16
+ u32 event_id = rp.Pop<u32>() & 0x000000FF;
LOG_WARNING(Service_NVDRV, "(STUBBED) called, fd={:X}, event_id={:X}", fd, event_id);
IPC::ResponseBuilder rb{ctx, 3, 1};
rb.Push(RESULT_SUCCESS);
- rb.PushCopyObjects(query_event.readable);
- rb.Push<u32>(0);
+ if (event_id < 64) {
+ rb.PushCopyObjects(nvdrv->GetEvent(event_id));
+ rb.Push<u32>(NvResult::Success);
+ } else {
+ rb.Push<u32>(0);
+ rb.Push<u32>(NvResult::BadParameter);
+ }
}
void NVDRV::SetClientPID(Kernel::HLERequestContext& ctx) {