public void Load(bool ProcessIsUM) { VirtMemImpl.PageFlags flags = ProcessIsUM ? VirtMemImpl.PageFlags.None : VirtMemImpl.PageFlags.KernelOnly; UInt32Dictionary.Iterator iterator = CodePages.GetIterator(); while (iterator.HasNext()) { UInt32Dictionary.KeyValuePair pair = iterator.Next(); uint vAddr = pair.Key; uint pAddr = pair.Value; #if MEMLAYOUT_TRACE BasicConsole.WriteLine("Loading code page..."); #endif VirtMemManager.Map(pAddr, vAddr, 4096, flags, UpdateUsedPagesFlags.Virtual); } iterator.RestoreState(); flags = ProcessIsUM ? VirtMemImpl.PageFlags.None : VirtMemImpl.PageFlags.KernelOnly; iterator = DataPages.GetIterator(); while (iterator.HasNext()) { UInt32Dictionary.KeyValuePair pair = iterator.Next(); uint vAddr = pair.Key; uint pAddr = pair.Value; #if MEMLAYOUT_TRACE BasicConsole.WriteLine("Loading data page..."); #endif VirtMemManager.Map(pAddr, vAddr, 4096, flags, UpdateUsedPagesFlags.Virtual); } iterator.RestoreState(); }
public UHCI(PCI.PCIDeviceNormal aPCIDevice) : base(aPCIDevice) { #if UHCI_TRACE BasicConsole.WriteLine("UHCI: Constructor"); BasicConsole.DelayOutput(5); #endif usbBaseAddress = pciDevice.BaseAddresses[4].BaseAddress(); Processes.ProcessManager.CurrentProcess.TheMemoryLayout.AddDataPage( (uint)usbBaseAddress & 0xFFFFF000, (uint)usbBaseAddress & 0xFFFFF000); VirtMemManager.Map((uint)usbBaseAddress & 0xFFFFF000, (uint)usbBaseAddress & 0xFFFFF000, 4096, VirtMem.VirtMemImpl.PageFlags.KernelOnly); RootPortCount = UHCI_Consts.PORTMAX; EnabledPorts = false; USBCMD = new IO.IOPort(MapPort(UHCI_Consts.USBCMD)); USBINTR = new IO.IOPort(MapPort(UHCI_Consts.USBINTR)); USBSTS = new IO.IOPort(MapPort(UHCI_Consts.USBSTS)); SOFMOD = new IO.IOPort(MapPort(UHCI_Consts.SOFMOD)); FRBASEADD = new IO.IOPort(MapPort(UHCI_Consts.FRBASEADD)); FRNUM = new IO.IOPort(MapPort(UHCI_Consts.FRNUM)); PORTSC1 = new IO.IOPort(MapPort(UHCI_Consts.PORTSC1)); PORTSC2 = new IO.IOPort(MapPort(UHCI_Consts.PORTSC2)); FrameList = (uint *)VirtMemManager.MapFreePage(VirtMem.VirtMemImpl.PageFlags.KernelOnly); Processes.ProcessManager.CurrentProcess.TheMemoryLayout.AddDataPage( (uint)FrameList & 0xFFFFF000, (uint)FrameList & 0xFFFFF000); Start(); }
protected ushort MapPort(uint portOffset) { uint portAddr = (uint)(usbBaseAddress + portOffset); if ((portAddr & 0xFFFFF000) != ((uint)usbBaseAddress & 0xFFFFF000)) { Processes.ProcessManager.CurrentProcess.TheMemoryLayout.AddDataPage( portAddr & 0xFFFFF000, portAddr & 0xFFFFF000); VirtMemManager.Map(portAddr & 0xFFFFF000, portAddr & 0xFFFFF000, 4096, VirtMem.VirtMemImpl.PageFlags.KernelOnly); } return((ushort)portAddr); }
public void Load(bool ProcessIsUM) { VirtMemImpl.PageFlags flags = ProcessIsUM ? VirtMemImpl.PageFlags.None : VirtMemImpl.PageFlags.KernelOnly; for (int i = 0; i < CodePages.Keys.Count; i++) { uint vAddr = CodePages.Keys[i]; uint pAddr = CodePages[vAddr]; #if MEMLAYOUT_TRACE BasicConsole.WriteLine("Loading code page..."); #endif //if (loadPrint) //{ // BasicConsole.WriteLine(((FOS_System.String)"Loading code page v->p: ") + vAddr + " -> " + pAddr); //} VirtMemManager.Map(pAddr, vAddr, 4096, flags, UpdateUsedPagesFlags.Virtual); } flags = ProcessIsUM ? VirtMemImpl.PageFlags.None : VirtMemImpl.PageFlags.KernelOnly; for (int i = 0; i < DataPages.Keys.Count; i++) { uint vAddr = DataPages.Keys[i]; uint pAddr = DataPages[vAddr]; #if MEMLAYOUT_TRACE BasicConsole.WriteLine("Loading data page..."); #endif //if (loadPrint) //{ // BasicConsole.WriteLine(((FOS_System.String)"Loading data page v->p: ") + vAddr + " -> " + pAddr); //} VirtMemManager.Map(pAddr, vAddr, 4096, flags, UpdateUsedPagesFlags.Virtual); } //if (loadPrint) //{ // //BasicConsole.DelayOutput(1); // loadPrint = false; //} }