1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 21:57:34 +00:00

Kernel/USB: Prevent system crash via correct UHCI inititilisation

It seems that not setting the framelist address register
was causing the entire system to lock up as it generated an insane
interrupt storm in the IRQ handler for the UHCI controller.
We now allocate a 4KiB aligned page via
`MemoryManager::allocate_supervisor_physical_page()` and set every
value to 1. In effect, this creates a framelist with each entry
being a "TERMINATE" entry in which the controller stalls until its'
1mS time slice is up.

Some more registers have also been set for consistency, though it
seems like this don't need to be set explicitly in software.
This commit is contained in:
Jesse Buhagiar 2020-11-10 21:24:19 +11:00 committed by Andreas Kling
parent 33d73c600c
commit 375d269b21
2 changed files with 20 additions and 1 deletions

View file

@ -64,6 +64,7 @@ private:
virtual void handle_irq(const RegisterState&) override;
IOAddress m_io_base;
PhysicalAddress m_framelist;
};
}