aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/hle/kernel/address_arbiter.h
diff options
context:
space:
mode:
authorGravatar bunnei <bunneidev@gmail.com>2014-07-06 23:15:40 -0400
committerGravatar bunnei <bunneidev@gmail.com>2014-07-08 18:46:38 -0400
commit3eb89f3e98b118f7829d3e56f32bcacbe58afc46 (patch)
treea4e8761b1b55ca53941db9f2ce8c04f224226238 /src/core/hle/kernel/address_arbiter.h
parentba840d3200183e30a5d85acf494d2a6bbbb3a386 (diff)
Kernel: Added preliminary support for address arbiters.
AddressArbiter: Added documentation comment, fixed whitespace issue. AddressArbiter: Fixed incorrect comment, reordered if-statement to be more clear. SVC: Removed trailing whitespace.
Diffstat (limited to 'src/core/hle/kernel/address_arbiter.h')
-rw-r--r--src/core/hle/kernel/address_arbiter.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/core/hle/kernel/address_arbiter.h b/src/core/hle/kernel/address_arbiter.h
new file mode 100644
index 00000000..a483fe46
--- /dev/null
+++ b/src/core/hle/kernel/address_arbiter.h
@@ -0,0 +1,36 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include "common/common_types.h"
+
+#include "core/hle/kernel/kernel.h"
+
+// Address arbiters are an underlying kernel synchronization object that can be created/used via
+// supervisor calls (SVCs). They function as sort of a global lock. Typically, games/other CTR
+// applications use them as an underlying mechanism to implement thread-safe barriers, events, and
+// semphores.
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Kernel namespace
+
+namespace Kernel {
+
+/// Address arbitration types
+enum class ArbitrationType : u32 {
+ Signal,
+ WaitIfLessThan,
+ DecrementAndWaitIfLessThan,
+ WaitIfLessThanWithTimeout,
+ DecrementAndWaitIfLessThanWithTimeout,
+};
+
+/// Arbitrate an address
+Result ArbitrateAddress(Handle handle, ArbitrationType type, u32 address, s32 value);
+
+/// Create an address arbiter
+Handle CreateAddressArbiter(const std::string& name = "Unknown");
+
+} // namespace FileSys