1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 11:17:35 +00:00

Kernel/USB: Rework UHCI interrupt transfer schedule

This reworks the way the UHCI schedule is set up to handle interrupt
transfers, creating 11 queue heads each assigned a different
period/latency, so that interrupt transfers can be linked into the
schedule with their specified period more easily.
This commit is contained in:
b14ckcat 2022-07-17 18:53:18 -04:00 committed by Andreas Kling
parent 4a3a0ac19e
commit 550b3c7330
2 changed files with 28 additions and 11 deletions

View file

@ -7,9 +7,9 @@
#pragma once
#include <AK/Platform.h>
#include <AK/Array.h>
#include <AK/NonnullOwnPtr.h>
#include <AK/Platform.h>
#include <Kernel/Arch/x86/IO.h>
#include <Kernel/Bus/PCI/Device.h>
#include <Kernel/Bus/USB/UHCI/UHCIDescriptorPool.h>
@ -31,6 +31,7 @@ class UHCIController final
static constexpr u8 MAXIMUM_NUMBER_OF_TDS = 128; // Upper pool limit. This consumes the second page we have allocated
static constexpr u8 MAXIMUM_NUMBER_OF_QHS = 64;
static constexpr u8 NUMBER_OF_INTERRUPT_QHS = 11;
public:
static constexpr u8 NUMBER_OF_ROOT_PORTS = 2;
@ -102,7 +103,7 @@ private:
Vector<TransferDescriptor*> m_iso_td_list;
QueueHead* m_schedule_begin_anchor;
QueueHead* m_interrupt_qh_anchor;
Array<QueueHead*, NUMBER_OF_INTERRUPT_QHS> m_interrupt_qh_anchor_arr;
QueueHead* m_ls_control_qh_anchor;
QueueHead* m_fs_control_qh_anchor;
// Always final queue in the schedule, may loop back to previous QH for bandwidth