Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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;
            //}
        }