| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- using Ryujinx.HLE.HOS.Kernel.Common;
- using Ryujinx.HLE.HOS.Kernel.Memory;
- using Ryujinx.HLE.HOS.Kernel.Process;
- using Ryujinx.HLE.HOS.Kernel.Threading;
- using System;
- using System.Threading;
- namespace Ryujinx.HLE.HOS.Kernel
- {
- static class KernelStatic
- {
- [ThreadStatic]
- private static KernelContext Context;
- [ThreadStatic]
- private static KThread CurrentThread;
- public static KernelResult StartInitialProcess(
- KernelContext context,
- ProcessCreationInfo creationInfo,
- ReadOnlySpan<int> capabilities,
- int mainThreadPriority,
- ThreadStart customThreadStart)
- {
- KProcess process = new KProcess(context);
- KernelResult result = process.Initialize(
- creationInfo,
- capabilities,
- context.ResourceLimit,
- MemoryRegion.Service,
- null,
- customThreadStart);
- if (result != KernelResult.Success)
- {
- return result;
- }
- process.DefaultCpuCore = 3;
- context.Processes.TryAdd(process.Pid, process);
- return process.Start(mainThreadPriority, 0x1000UL);
- }
- internal static void SetKernelContext(KernelContext context, KThread thread)
- {
- Context = context;
- CurrentThread = thread;
- }
- internal static KThread GetCurrentThread()
- {
- return CurrentThread;
- }
- internal static KProcess GetCurrentProcess()
- {
- return GetCurrentThread().Owner;
- }
- internal static KProcess GetProcessByPid(ulong pid)
- {
- if (Context.Processes.TryGetValue(pid, out KProcess process))
- {
- return process;
- }
- return null;
- }
- }
- }
|