summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/event.cpp
diff options
context:
space:
mode:
authorGravatar bunnei2014-06-01 10:33:55 -0400
committerGravatar bunnei2014-06-01 10:33:55 -0400
commitf7cececc5ca82f97a9fb1ab50c62fd9e3a49ccdc (patch)
tree20948ca4b9df5e7b60399f197c448ba3745dede7 /src/core/hle/kernel/event.cpp
parenthle: added stubbed service for ndm_u (diff)
downloadyuzu-f7cececc5ca82f97a9fb1ab50c62fd9e3a49ccdc.tar.gz
yuzu-f7cececc5ca82f97a9fb1ab50c62fd9e3a49ccdc.tar.xz
yuzu-f7cececc5ca82f97a9fb1ab50c62fd9e3a49ccdc.zip
event: added a hackish ability to set an event as "locked" to its current state, cleaned up some comments
Diffstat (limited to 'src/core/hle/kernel/event.cpp')
-rw-r--r--src/core/hle/kernel/event.cpp28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/core/hle/kernel/event.cpp b/src/core/hle/kernel/event.cpp
index 7cb8c5142..e84d0b49e 100644
--- a/src/core/hle/kernel/event.cpp
+++ b/src/core/hle/kernel/event.cpp
@@ -23,6 +23,7 @@ public:
23 ResetType reset_type; ///< Current ResetType 23 ResetType reset_type; ///< Current ResetType
24 24
25 bool locked; ///< Current locked state 25 bool locked; ///< Current locked state
26 bool permanent_locked; ///< Hack - to set event permanent state (for easy passthrough)
26 27
27 /** 28 /**
28 * Synchronize kernel object 29 * Synchronize kernel object
@@ -31,7 +32,7 @@ public:
31 */ 32 */
32 Result SyncRequest(bool* wait) { 33 Result SyncRequest(bool* wait) {
33 // TODO(bunnei): ImplementMe 34 // TODO(bunnei): ImplementMe
34 ERROR_LOG(KERNEL, "Unimplemented function Event::SyncRequest"); 35 ERROR_LOG(KERNEL, "(UMIMPLEMENTED) call");
35 return 0; 36 return 0;
36 } 37 }
37 38
@@ -43,7 +44,7 @@ public:
43 Result WaitSynchronization(bool* wait) { 44 Result WaitSynchronization(bool* wait) {
44 // TODO(bunnei): ImplementMe 45 // TODO(bunnei): ImplementMe
45 *wait = locked; 46 *wait = locked;
46 if (reset_type != RESETTYPE_STICKY) { 47 if (reset_type != RESETTYPE_STICKY && !permanent_locked) {
47 locked = true; 48 locked = true;
48 } 49 }
49 return 0; 50 return 0;
@@ -59,10 +60,28 @@ public:
59Result SetEventLocked(const Handle handle, const bool locked) { 60Result SetEventLocked(const Handle handle, const bool locked) {
60 Event* evt = g_object_pool.GetFast<Event>(handle); 61 Event* evt = g_object_pool.GetFast<Event>(handle);
61 if (!evt) { 62 if (!evt) {
62 ERROR_LOG(KERNEL, "SetEventLocked called with unknown handle=0x%08X", handle); 63 ERROR_LOG(KERNEL, "called with unknown handle=0x%08X", handle);
63 return -1; 64 return -1;
64 } 65 }
65 evt->locked = locked; 66 if (!evt->permanent_locked) {
67 evt->locked = locked;
68 }
69 return 0;
70}
71
72/**
73 * Hackish function to set an events permanent lock state, used to pass through synch blocks
74 * @param handle Handle to event to change
75 * @param permanent_locked Boolean permanent locked value to set event
76 * @return Result of operation, 0 on success, otherwise error code
77 */
78Result SetPermanentLock(Handle handle, const bool permanent_locked) {
79 Event* evt = g_object_pool.GetFast<Event>(handle);
80 if (!evt) {
81 ERROR_LOG(KERNEL, "called with unknown handle=0x%08X", handle);
82 return -1;
83 }
84 evt->permanent_locked = permanent_locked;
66 return 0; 85 return 0;
67} 86}
68 87
@@ -87,6 +106,7 @@ Event* CreateEvent(Handle& handle, const ResetType reset_type) {
87 handle = Kernel::g_object_pool.Create(evt); 106 handle = Kernel::g_object_pool.Create(evt);
88 107
89 evt->locked = true; 108 evt->locked = true;
109 evt->permanent_locked = false;
90 evt->reset_type = evt->intitial_reset_type = reset_type; 110 evt->reset_type = evt->intitial_reset_type = reset_type;
91 111
92 return evt; 112 return evt;