From 7e472a9c1d7abb7a4fe55334ee0eca1ef5790dbf Mon Sep 17 00:00:00 2001 From: Bananymous Date: Fri, 8 Aug 2025 17:39:50 +0300 Subject: [PATCH] Kernel: Fix USB FS device default max packet size Apparently this is a common non spec compliant issue on many controllers/devices. thanks @sasdallas --- kernel/kernel/USB/XHCI/Device.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/kernel/kernel/USB/XHCI/Device.cpp b/kernel/kernel/USB/XHCI/Device.cpp index dc37887f..5acfaf8c 100644 --- a/kernel/kernel/USB/XHCI/Device.cpp +++ b/kernel/kernel/USB/XHCI/Device.cpp @@ -40,10 +40,9 @@ namespace Kernel switch (m_speed_class) { case USB::SpeedClass::LowSpeed: - case USB::SpeedClass::FullSpeed: m_endpoints[0].max_packet_size = 8; - is_ls_or_fs_device_on_hs_hub = m_info.parent_hub && (m_info.parent_hub->speed_class() == USB::SpeedClass::HighSpeed); break; + case USB::SpeedClass::FullSpeed: case USB::SpeedClass::HighSpeed: m_endpoints[0].max_packet_size = 64; break; @@ -53,6 +52,16 @@ namespace Kernel default: ASSERT_NOT_REACHED(); } + switch (m_speed_class) + { + case USB::SpeedClass::LowSpeed: + case USB::SpeedClass::FullSpeed: + is_ls_or_fs_device_on_hs_hub = m_info.parent_hub && (m_info.parent_hub->speed_class() == USB::SpeedClass::HighSpeed); + break; + default: + break; + } + m_input_context = TRY(DMARegion::create(33 * context_size)); memset(reinterpret_cast(m_input_context->vaddr()), 0, m_input_context->size());