diff options
| author | 2014-05-26 22:12:46 -0400 | |
|---|---|---|
| committer | 2014-05-26 22:12:46 -0400 | |
| commit | 58a3adcdd2eed9d31cd441186af872a0a8924e73 (patch) | |
| tree | 65dc8f4a1c26151ce027558ecdf886cb0beeb67b /src/core/hle | |
| parent | svc: added some assertions (diff) | |
| download | yuzu-58a3adcdd2eed9d31cd441186af872a0a8924e73.tar.gz yuzu-58a3adcdd2eed9d31cd441186af872a0a8924e73.tar.xz yuzu-58a3adcdd2eed9d31cd441186af872a0a8924e73.zip | |
kernel: updated SyncRequest to take boolean thread wait result as a parameter
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/kernel/kernel.h | 9 | ||||
| -rw-r--r-- | src/core/hle/kernel/mutex.cpp | 8 | ||||
| -rw-r--r-- | src/core/hle/kernel/thread.cpp | 8 | ||||
| -rw-r--r-- | src/core/hle/service/service.h | 7 | ||||
| -rw-r--r-- | src/core/hle/svc.cpp | 11 |
5 files changed, 33 insertions, 10 deletions
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h index 786d3abf3..4acc9f220 100644 --- a/src/core/hle/kernel/kernel.h +++ b/src/core/hle/kernel/kernel.h | |||
| @@ -47,7 +47,14 @@ public: | |||
| 47 | virtual const char *GetTypeName() { return "[BAD KERNEL OBJECT TYPE]"; } | 47 | virtual const char *GetTypeName() { return "[BAD KERNEL OBJECT TYPE]"; } |
| 48 | virtual const char *GetName() { return "[UNKNOWN KERNEL OBJECT]"; } | 48 | virtual const char *GetName() { return "[UNKNOWN KERNEL OBJECT]"; } |
| 49 | virtual Kernel::HandleType GetHandleType() const = 0; | 49 | virtual Kernel::HandleType GetHandleType() const = 0; |
| 50 | virtual Result SyncRequest() = 0; | 50 | |
| 51 | /** | ||
| 52 | * Synchronize kernel object | ||
| 53 | * @param wait Boolean wait set if current thread should wait as a result of sync operation | ||
| 54 | * @return Result of operation, 0 on success, otherwise error code | ||
| 55 | */ | ||
| 56 | virtual Result SyncRequest(bool* wait) = 0; | ||
| 57 | |||
| 51 | }; | 58 | }; |
| 52 | 59 | ||
| 53 | class ObjectPool : NonCopyable { | 60 | class ObjectPool : NonCopyable { |
diff --git a/src/core/hle/kernel/mutex.cpp b/src/core/hle/kernel/mutex.cpp index fa924404d..5465b7a3c 100644 --- a/src/core/hle/kernel/mutex.cpp +++ b/src/core/hle/kernel/mutex.cpp | |||
| @@ -24,8 +24,12 @@ public: | |||
| 24 | Handle lock_thread; ///< Handle to thread that currently has mutex | 24 | Handle lock_thread; ///< Handle to thread that currently has mutex |
| 25 | std::vector<Handle> waiting_threads; ///< Threads that are waiting for the mutex | 25 | std::vector<Handle> waiting_threads; ///< Threads that are waiting for the mutex |
| 26 | 26 | ||
| 27 | /// Synchronize kernel object | 27 | /** |
| 28 | Result SyncRequest() { | 28 | * Synchronize kernel object |
| 29 | * @param wait Boolean wait set if current thread should wait as a result of sync operation | ||
| 30 | * @return Result of operation, 0 on success, otherwise error code | ||
| 31 | */ | ||
| 32 | Result SyncRequest(bool* wait) { | ||
| 29 | return 0; | 33 | return 0; |
| 30 | } | 34 | } |
| 31 | }; | 35 | }; |
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index b9dd9fac4..56c7755cf 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp | |||
| @@ -36,8 +36,12 @@ public: | |||
| 36 | inline bool IsWaiting() const { return (status & THREADSTATUS_WAIT) != 0; } | 36 | inline bool IsWaiting() const { return (status & THREADSTATUS_WAIT) != 0; } |
| 37 | inline bool IsSuspended() const { return (status & THREADSTATUS_SUSPEND) != 0; } | 37 | inline bool IsSuspended() const { return (status & THREADSTATUS_SUSPEND) != 0; } |
| 38 | 38 | ||
| 39 | /// Synchronize kernel object | 39 | /** |
| 40 | Result SyncRequest() { | 40 | * Synchronize kernel object |
| 41 | * @param wait Boolean wait set if current thread should wait as a result of sync operation | ||
| 42 | * @return Result of operation, 0 on success, otherwise error code | ||
| 43 | */ | ||
| 44 | Result SyncRequest(bool* wait) { | ||
| 41 | return 0; | 45 | return 0; |
| 42 | } | 46 | } |
| 43 | 47 | ||
diff --git a/src/core/hle/service/service.h b/src/core/hle/service/service.h index c970ace4b..12ef51b91 100644 --- a/src/core/hle/service/service.h +++ b/src/core/hle/service/service.h | |||
| @@ -76,10 +76,11 @@ public: | |||
| 76 | } | 76 | } |
| 77 | 77 | ||
| 78 | /** | 78 | /** |
| 79 | * Called when svcSendSyncRequest is called, loads command buffer and executes comand | 79 | * Synchronize kernel object |
| 80 | * @return Return result of svcSendSyncRequest passed back to user app | 80 | * @param wait Boolean wait set if current thread should wait as a result of sync operation |
| 81 | * @return Result of operation, 0 on success, otherwise error code | ||
| 81 | */ | 82 | */ |
| 82 | Result SyncRequest() { | 83 | Result SyncRequest(bool* wait) { |
| 83 | u32* cmd_buff = GetCommandBuffer(); | 84 | u32* cmd_buff = GetCommandBuffer(); |
| 84 | auto itr = m_functions.find(cmd_buff[0]); | 85 | auto itr = m_functions.find(cmd_buff[0]); |
| 85 | 86 | ||
diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index 6f72a6eb7..e566036e5 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp | |||
| @@ -92,11 +92,18 @@ Result ConnectToPort(void* out, const char* port_name) { | |||
| 92 | 92 | ||
| 93 | /// Synchronize to an OS service | 93 | /// Synchronize to an OS service |
| 94 | Result SendSyncRequest(Handle handle) { | 94 | Result SendSyncRequest(Handle handle) { |
| 95 | bool wait = false; | ||
| 95 | Kernel::Object* object = Kernel::g_object_pool.GetFast<Kernel::Object>(handle); | 96 | Kernel::Object* object = Kernel::g_object_pool.GetFast<Kernel::Object>(handle); |
| 97 | |||
| 96 | DEBUG_LOG(SVC, "SendSyncRequest called handle=0x%08X"); | 98 | DEBUG_LOG(SVC, "SendSyncRequest called handle=0x%08X"); |
| 97 | _assert_msg_(KERNEL, object, "SendSyncRequest called, but kernel object is NULL!"); | 99 | _assert_msg_(KERNEL, object, "SendSyncRequest called, but kernel object is NULL!"); |
| 98 | object->SyncRequest(); | 100 | |
| 99 | return 0; | 101 | Result res = object->SyncRequest(&wait); |
| 102 | if (wait) { | ||
| 103 | Kernel::WaitCurrentThread(WAITTYPE_SYNCH); // TODO(bunnei): Is this correct? | ||
| 104 | } | ||
| 105 | |||
| 106 | return res; | ||
| 100 | } | 107 | } |
| 101 | 108 | ||
| 102 | /// Close a handle | 109 | /// Close a handle |