public Horizon(Switch Ns) { this.Ns = Ns; IdGen = new IdPool(); NvMapIds = new IdPool(); Handles = new IdPoolWithObj(); Fds = new IdPoolWithObj(); Displays = new IdPoolWithObj(); Mutexes = new ConcurrentDictionary <long, Mutex>(); CondVars = new ConcurrentDictionary <long, CondVar>(); Processes = new ConcurrentDictionary <int, Process>(); Allocator = new AMemoryAlloc(); HidOffset = Allocator.Alloc(HidSize); FontOffset = Allocator.Alloc(FontSize); HidSharedMem = new HSharedMem(HidOffset); HidSharedMem.MemoryMapped += HidInit; HidHandle = Handles.GenerateId(HidSharedMem); FontHandle = Handles.GenerateId(new HSharedMem(FontOffset)); }
private void SvcUnmapSharedMemory(AThreadState ThreadState) { int Handle = (int)ThreadState.X0; long Src = (long)ThreadState.X1; long Size = (long)ThreadState.X2; if (!IsValidPosition(Src)) { Ns.Log.PrintWarning(LogClass.KernelSvc, $"Invalid address {Src:x16}!"); ThreadState.X0 = MakeError(ErrorModule.Kernel, KernelErr.InvalidMemRange); return; } HSharedMem SharedMem = Process.HandleTable.GetData <HSharedMem>(Handle); if (SharedMem != null) { Memory.Manager.Unmap(Src, Size, (int)MemoryType.SharedMemory); SharedMem.RemoveVirtualPosition(Memory, Src, Size); lock (MappedSharedMems) { MappedSharedMems.Remove((SharedMem, Src, Size)); } ThreadState.X0 = 0; } //TODO: Error codes. }
public long CreateAppletResource(ServiceCtx Context) { HSharedMem HidHndData = Context.Ns.Os.Handles.GetData <HSharedMem>(Context.Ns.Os.HidHandle); MakeObject(Context, new IAppletResource(HidHndData)); return(0); }
public IAppletResource(HSharedMem Handle) { m_Commands = new Dictionary <int, ServiceProcessRequest>() { { 0, GetSharedMemoryHandle } }; this.Handle = Handle; }
private void HidInit(object sender, EventArgs e) { HSharedMem SharedMem = (HSharedMem)sender; if (SharedMem.TryGetLastVirtualPosition(out long Position)) { Logging.Info($"HID shared memory successfully mapped to {Position:x16}!"); Ns.Hid.Init(Position); } }
public IIrSensorServer(HSharedMem IrSensorSharedMem) { m_Commands = new Dictionary <int, ServiceProcessRequest>() { { 302, ActivateIrsensor }, { 303, DeactivateIrsensor }, { 304, GetIrsensorSharedMemoryHandle }, { 311, GetNpadIrCameraHandle } }; this.IrSensorSharedMem = IrSensorSharedMem; }
public Horizon(Switch Ns) { this.Ns = Ns; Scheduler = new KProcessScheduler(); Processes = new ConcurrentDictionary <int, Process>(); HidSharedMem = new HSharedMem(); FontSharedMem = new HSharedMem(); VsyncEvent = new KEvent(); }
public Horizon(Switch Ns) { this.Ns = Ns; Mutexes = new ConcurrentDictionary <long, Mutex>(); CondVars = new ConcurrentDictionary <long, CondVar>(); Processes = new ConcurrentDictionary <int, Process>(); HidSharedMem = new HSharedMem(); FontSharedMem = new HSharedMem(); VsyncEvent = new KEvent(); }
private void SvcUnmapSharedMemory(AThreadState ThreadState) { int Handle = (int)ThreadState.X0; long Position = (long)ThreadState.X1; long Size = (long)ThreadState.X2; HSharedMem HndData = Ns.Os.Handles.GetData <HSharedMem>(Handle); if (HndData != null) { ThreadState.X0 = (int)SvcResult.Success; } //TODO: Error codes. }
private static void SvcUnmapSharedMemory(Switch Ns, ARegisters Registers, AMemory Memory) { int Handle = (int)Registers.X0; long Position = (long)Registers.X1; long Size = (long)Registers.X2; HSharedMem HndData = Ns.Os.Handles.GetData <HSharedMem>(Handle); if (HndData != null) { Registers.X0 = (int)SvcResult.Success; } //TODO: Error codes. }
public Horizon(Switch Ns) { this.Ns = Ns; Scheduler = new KProcessScheduler(Ns.Log); Processes = new ConcurrentDictionary <int, Process>(); SystemState = new SystemStateMgr(); Allocator = new MemoryAllocator(); HidSharedMem = new HSharedMem(); FontSharedMem = new HSharedMem(); VsyncEvent = new KEvent(); }
private void SvcMapSharedMemory(AThreadState ThreadState) { int Handle = (int)ThreadState.X0; long Src = (long)ThreadState.X1; long Size = (long)ThreadState.X2; int Perm = (int)ThreadState.X3; HSharedMem SharedMem = Ns.Os.Handles.GetData <HSharedMem>(Handle); if (SharedMem != null) { SharedMem.AddVirtualPosition(Src); Memory.Manager.MapPhys(Src, Size, (int)MemoryType.SharedMemory, (AMemoryPerm)Perm); ThreadState.X0 = (int)SvcResult.Success; } //TODO: Error codes. }
private void SvcMapSharedMemory(AThreadState ThreadState) { int Handle = (int)ThreadState.X0; long Src = (long)ThreadState.X1; long Size = (long)ThreadState.X2; int Perm = (int)ThreadState.X3; if (!IsValidPosition(Src)) { Ns.Log.PrintWarning(LogClass.KernelSvc, $"Invalid address {Src:x16}!"); ThreadState.X0 = MakeError(ErrorModule.Kernel, KernelErr.InvalidMemRange); return; } HSharedMem SharedMem = Process.HandleTable.GetData <HSharedMem>(Handle); if (SharedMem != null) { Memory.Manager.Map(Src, Size, (int)MemoryType.SharedMemory, AMemoryPerm.Write); AMemoryHelper.FillWithZeros(Memory, Src, (int)Size); SharedMem.AddVirtualPosition(Memory, Src, Size); Memory.Manager.Reprotect(Src, Size, (AMemoryPerm)Perm); lock (MappedSharedMems) { MappedSharedMems.Add((SharedMem, Src, Size)); } ThreadState.X0 = 0; } //TODO: Error codes. }
private static void SvcMapSharedMemory(Switch Ns, ARegisters Registers, AMemory Memory) { int Handle = (int)Registers.X0; long Position = (long)Registers.X1; long Size = (long)Registers.X2; int Perm = (int)Registers.X3; HSharedMem HndData = Ns.Os.Handles.GetData <HSharedMem>(Handle); if (HndData != null) { long Src = Position; long Dst = HndData.PhysPos; HndData.VirtPos = Src; Memory.Manager.MapPhys(Position, Size, (int)MemoryType.SharedMemory, (AMemoryPerm)Perm); Registers.X0 = (int)SvcResult.Success; } //TODO: Error codes. }
public long GetVirtHidOffset() { HSharedMem HidSharedMem = Handles.GetData <HSharedMem>(HidHandle); return(HidSharedMem.VirtPos); }
public HidIAppletResource(HSharedMem Handle) { this.Handle = Handle; }