summaryrefslogtreecommitdiff
path: root/src/core/hle
diff options
context:
space:
mode:
authorGravatar bunnei2014-05-26 22:12:46 -0400
committerGravatar bunnei2014-05-26 22:12:46 -0400
commit58a3adcdd2eed9d31cd441186af872a0a8924e73 (patch)
tree65dc8f4a1c26151ce027558ecdf886cb0beeb67b /src/core/hle
parentsvc: added some assertions (diff)
downloadyuzu-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.h9
-rw-r--r--src/core/hle/kernel/mutex.cpp8
-rw-r--r--src/core/hle/kernel/thread.cpp8
-rw-r--r--src/core/hle/service/service.h7
-rw-r--r--src/core/hle/svc.cpp11
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
53class ObjectPool : NonCopyable { 60class 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
94Result SendSyncRequest(Handle handle) { 94Result 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