aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2024-07-22 12:46:04 -0300
committerGitHub <noreply@github.com>2024-07-22 12:46:04 -0300
commit95d252b7b8d9940be032e6f4e37fba37b2fb9aad (patch)
tree06684d58995365a5b3f35e4cf4989c6e2127145d /src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs
parentadd681144bd1ab8eb5094f38ec71292a33958aff (diff)
Update kernel GetInfo SVC for firmware 18.0.0 (#7075)
* Implement kernel GetInfo AliasRegionExtraSize * Implement IsSvcPermitted * Remove warning supressions that are no longer needed * Remove useless cast
Diffstat (limited to 'src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs')
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs b/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs
index 314aadf3..ebab67bb 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs
@@ -8,6 +8,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
{
class KProcessCapabilities
{
+ private const int SvcMaskElementBits = 8;
+
public byte[] SvcAccessMask { get; }
public byte[] IrqAccessMask { get; }
@@ -22,7 +24,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
public KProcessCapabilities()
{
// length / number of bits of the underlying type
- SvcAccessMask = new byte[KernelConstants.SupervisorCallCount / 8];
+ SvcAccessMask = new byte[KernelConstants.SupervisorCallCount / SvcMaskElementBits];
IrqAccessMask = new byte[0x80];
}
@@ -208,7 +210,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
return KernelResult.MaximumExceeded;
}
- SvcAccessMask[svcId / 8] |= (byte)(1 << (svcId & 7));
+ SvcAccessMask[svcId / SvcMaskElementBits] |= (byte)(1 << (svcId % SvcMaskElementBits));
}
break;
@@ -324,5 +326,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
return mask << (int)min;
}
+
+ public bool IsSvcPermitted(int svcId)
+ {
+ int index = svcId / SvcMaskElementBits;
+ int mask = 1 << (svcId % SvcMaskElementBits);
+
+ return (uint)svcId < KernelConstants.SupervisorCallCount && (SvcAccessMask[index] & mask) != 0;
+ }
}
}