summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/address_arbiter.cpp
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2019-03-08 00:34:22 +0100
committerLioncash <mathew1800@gmail.com>2019-03-08 05:27:20 +0100
commit0209de123b0e8dfd793d23c6a9cb825ea6da5b8e (patch)
treeb089c5609f00730b21c1d7d31d77a0dfd9106b10 /src/core/hle/kernel/address_arbiter.cpp
parentMerge pull request #2196 from DarkLordZach/web-applet-esc (diff)
downloadyuzu-0209de123b0e8dfd793d23c6a9cb825ea6da5b8e.tar
yuzu-0209de123b0e8dfd793d23c6a9cb825ea6da5b8e.tar.gz
yuzu-0209de123b0e8dfd793d23c6a9cb825ea6da5b8e.tar.bz2
yuzu-0209de123b0e8dfd793d23c6a9cb825ea6da5b8e.tar.lz
yuzu-0209de123b0e8dfd793d23c6a9cb825ea6da5b8e.tar.xz
yuzu-0209de123b0e8dfd793d23c6a9cb825ea6da5b8e.tar.zst
yuzu-0209de123b0e8dfd793d23c6a9cb825ea6da5b8e.zip
Diffstat (limited to '')
-rw-r--r--src/core/hle/kernel/address_arbiter.cpp20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/core/hle/kernel/address_arbiter.cpp b/src/core/hle/kernel/address_arbiter.cpp
index 9780a7849..b6269c708 100644
--- a/src/core/hle/kernel/address_arbiter.cpp
+++ b/src/core/hle/kernel/address_arbiter.cpp
@@ -92,6 +92,20 @@ ResultCode AddressArbiter::ModifyByWaitingCountAndSignalToAddressIfEqual(VAddr a
return RESULT_SUCCESS;
}
+ResultCode AddressArbiter::WaitForAddress(VAddr address, ArbitrationType type, s32 value,
+ s64 timeout_ns) {
+ switch (type) {
+ case ArbitrationType::WaitIfLessThan:
+ return WaitForAddressIfLessThan(address, value, timeout_ns, false);
+ case ArbitrationType::DecrementAndWaitIfLessThan:
+ return WaitForAddressIfLessThan(address, value, timeout_ns, true);
+ case ArbitrationType::WaitIfEqual:
+ return WaitForAddressIfEqual(address, value, timeout_ns);
+ default:
+ return ERR_INVALID_ENUM_VALUE;
+ }
+}
+
ResultCode AddressArbiter::WaitForAddressIfLessThan(VAddr address, s32 value, s64 timeout,
bool should_decrement) {
// Ensure that we can read the address.
@@ -113,7 +127,7 @@ ResultCode AddressArbiter::WaitForAddressIfLessThan(VAddr address, s32 value, s6
return RESULT_TIMEOUT;
}
- return WaitForAddress(address, timeout);
+ return WaitForAddressImpl(address, timeout);
}
ResultCode AddressArbiter::WaitForAddressIfEqual(VAddr address, s32 value, s64 timeout) {
@@ -130,10 +144,10 @@ ResultCode AddressArbiter::WaitForAddressIfEqual(VAddr address, s32 value, s64 t
return RESULT_TIMEOUT;
}
- return WaitForAddress(address, timeout);
+ return WaitForAddressImpl(address, timeout);
}
-ResultCode AddressArbiter::WaitForAddress(VAddr address, s64 timeout) {
+ResultCode AddressArbiter::WaitForAddressImpl(VAddr address, s64 timeout) {
SharedPtr<Thread> current_thread = system.CurrentScheduler().GetCurrentThread();
current_thread->SetArbiterWaitAddress(address);
current_thread->SetStatus(ThreadStatus::WaitArb);