summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Lioncash2018-12-20 22:54:05 -0500
committerGravatar Lioncash2018-12-21 07:05:34 -0500
commit3dc59b74ec92f8ee6b856eb4a18c3efa9286730e (patch)
treee3d3d41ee14f7a27c955a50b74d2b4c16582aafa /src
parentkernel/process_capability: Handle the priority mask and core mask flags (diff)
downloadyuzu-3dc59b74ec92f8ee6b856eb4a18c3efa9286730e.tar.gz
yuzu-3dc59b74ec92f8ee6b856eb4a18c3efa9286730e.tar.xz
yuzu-3dc59b74ec92f8ee6b856eb4a18c3efa9286730e.zip
kernel/process_capability: Handle syscall capability flags
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/kernel/process_capability.cpp25
-rw-r--r--src/core/hle/kernel/process_capability.h5
2 files changed, 29 insertions, 1 deletions
diff --git a/src/core/hle/kernel/process_capability.cpp b/src/core/hle/kernel/process_capability.cpp
index 9f513b25b..615b354c6 100644
--- a/src/core/hle/kernel/process_capability.cpp
+++ b/src/core/hle/kernel/process_capability.cpp
@@ -239,7 +239,30 @@ ResultCode ProcessCapabilities::HandlePriorityCoreNumFlags(u32 flags) {
239} 239}
240 240
241ResultCode ProcessCapabilities::HandleSyscallFlags(u32& set_svc_bits, u32 flags) { 241ResultCode ProcessCapabilities::HandleSyscallFlags(u32& set_svc_bits, u32 flags) {
242 // TODO: Implement 242 const u32 index = flags >> 29;
243 const u32 svc_bit = 1U << index;
244
245 // If we've already set this svc before, bail.
246 if ((set_svc_bits & svc_bit) != 0) {
247 return ERR_INVALID_COMBINATION;
248 }
249 set_svc_bits |= svc_bit;
250
251 const u32 svc_mask = (flags >> 5) & 0xFFFFFF;
252 for (u32 i = 0; i < 24; ++i) {
253 const u32 svc_number = index * 24 + i;
254
255 if ((svc_mask & (1U << i)) == 0) {
256 continue;
257 }
258
259 if (svc_number >= svc_capabilities.size()) {
260 return ERR_OUT_OF_RANGE;
261 }
262
263 svc_capabilities[svc_number] = true;
264 }
265
243 return RESULT_SUCCESS; 266 return RESULT_SUCCESS;
244} 267}
245 268
diff --git a/src/core/hle/kernel/process_capability.h b/src/core/hle/kernel/process_capability.h
index 4b27ee8b9..4c151b3d5 100644
--- a/src/core/hle/kernel/process_capability.h
+++ b/src/core/hle/kernel/process_capability.h
@@ -132,6 +132,11 @@ public:
132 return priority_mask; 132 return priority_mask;
133 } 133 }
134 134
135 /// Gets the SVC access permission bits
136 const SyscallCapabilities& GetServiceCapabilities() const {
137 return svc_capabilities;
138 }
139
135private: 140private:
136 /// Attempts to parse a given sequence of capability descriptors. 141 /// Attempts to parse a given sequence of capability descriptors.
137 /// 142 ///