diff options
| author | 2014-06-01 10:33:55 -0400 | |
|---|---|---|
| committer | 2014-06-01 10:33:55 -0400 | |
| commit | f7cececc5ca82f97a9fb1ab50c62fd9e3a49ccdc (patch) | |
| tree | 20948ca4b9df5e7b60399f197c448ba3745dede7 /src/core/hle/kernel/event.cpp | |
| parent | hle: added stubbed service for ndm_u (diff) | |
| download | yuzu-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.cpp | 28 |
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: | |||
| 59 | Result SetEventLocked(const Handle handle, const bool locked) { | 60 | Result 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 | */ | ||
| 78 | Result 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; |