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(); }
/// <summary> /// Initializes a new generic host controller interface using the specified PCI device. /// </summary> /// <param name="aPCIDevice">The PCI device that represents the HCI device.</param> public HCI(PCI.PCIDeviceNormal aPCIDevice) : base() { Status = HCIStatus.Unset; pciDevice = aPCIDevice; for (byte i = 0; i < RootPortCount; i++) { RootPorts.Add(new HCPort() { portNum = i }); } }