aboutsummaryrefslogtreecommitdiff
path: root/src/core/hle/service/nvdrv/interface.cpp
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2019-06-07 18:41:55 -0400
committerFernandoS27 <fsahmkow27@gmail.com>2019-07-05 15:49:13 -0400
commit9a3dea2bdc4ab0e77be3ceaba98d44a82a9d8ad6 (patch)
tree3dfffe7615e1371aae0d31c98982608a62171701 /src/core/hle/service/nvdrv/interface.cpp
parent5ff576460eb79b730baa6c8ff7fb62c59b11f181 (diff)
nv_services: Implement NvQueryEvent, NvCtrlEventWait, NvEventRegister, NvEventUnregister
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 b60fc748b8..76482d16e4 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) {