diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2024-07-22 12:46:04 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-22 12:46:04 -0300 |
| commit | 95d252b7b8d9940be032e6f4e37fba37b2fb9aad (patch) | |
| tree | 06684d58995365a5b3f35e4cf4989c6e2127145d /src/Ryujinx.HLE/HOS/Kernel/Process/KProcessCapabilities.cs | |
| parent | add681144bd1ab8eb5094f38ec71292a33958aff (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.cs | 14 |
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; + } } } |
