From 3f369032013bf3fc63bf5e78b3bd9bd850851de1 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 5 Sep 2020 00:32:52 +0200 Subject: [PATCH] Kernel/USB: Start the UHCI controller after resetting it --- Kernel/Devices/UHCIController.cpp | 12 ++++++++++++ Kernel/Devices/UHCIController.h | 1 + 2 files changed, 13 insertions(+) diff --git a/Kernel/Devices/UHCIController.cpp b/Kernel/Devices/UHCIController.cpp index d53e6342b2..f58cfa0bc5 100644 --- a/Kernel/Devices/UHCIController.cpp +++ b/Kernel/Devices/UHCIController.cpp @@ -65,6 +65,7 @@ UHCIController::UHCIController(PCI::Address address, PCI::ID id) klog() << "UHCI: Interrupt line: " << PCI::get_interrupt_line(pci_address()); reset(); + start(); } UHCIController::~UHCIController() @@ -97,6 +98,17 @@ void UHCIController::stop() } } +void UHCIController::start() +{ + write_usbcmd(read_usbcmd() | UHCI_USBCMD_RUN); + // FIXME: Timeout + for (;;) { + if (!(read_usbsts() & UHCI_USBSTS_HOST_CONTROLLER_HALTED)) + break; + } + klog() << "UHCI: Started!"; +} + void UHCIController::handle_irq(const RegisterState&) { } diff --git a/Kernel/Devices/UHCIController.h b/Kernel/Devices/UHCIController.h index ed71595f03..a839b3b40c 100644 --- a/Kernel/Devices/UHCIController.h +++ b/Kernel/Devices/UHCIController.h @@ -38,6 +38,7 @@ public: void reset(); void stop(); + void start(); private: UHCIController(PCI::Address, PCI::ID);