From 61e2ee224acfa6bab4b43a229a3507d67c51a504 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Tue, 16 Apr 2024 08:10:32 -0600 Subject: [PATCH] xhcid: improve endpoint parsing --- xhcid/src/driver_interface.rs | 3 ++- xhcid/src/xhci/scheme.rs | 11 ++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/xhcid/src/driver_interface.rs b/xhcid/src/driver_interface.rs index 8b560a5cd1..efea45b6e5 100644 --- a/xhcid/src/driver_interface.rs +++ b/xhcid/src/driver_interface.rs @@ -156,7 +156,8 @@ impl EndpDesc { self.ssc.is_some() } pub fn is_superspeedplus(&self) -> bool { - todo!() + log::warn!("TODO: is_superspeedplus not implemented, defaulting to false"); + false } fn interrupt_usage_bits(&self) -> u8 { assert!(self.is_interrupt()); diff --git a/xhcid/src/xhci/scheme.rs b/xhcid/src/xhci/scheme.rs index 2a12fb5a4c..410b677c09 100644 --- a/xhcid/src/xhci/scheme.rs +++ b/xhcid/src/xhci/scheme.rs @@ -1093,14 +1093,18 @@ impl Xhci { let mut endpoints = SmallVec::<[EndpDesc; 4]>::new(); let mut hid_descs = SmallVec::<[HidDesc; 1]>::new(); - for _ in 0..idesc.endpoints { + while endpoints.len() < idesc.endpoints as usize { let next = match iter.next() { Some(AnyDescriptor::Endpoint(n)) => n, Some(AnyDescriptor::Hid(h)) if idesc.class == 3 => { hid_descs.push(h.into()); - break; + continue; } - _ => break, + Some(unexpected) => { + log::warn!("expected endpoint, got {:X?}", unexpected); + break; + }, + None => break, }; let mut endp = EndpDesc::from(next); @@ -1124,6 +1128,7 @@ impl Xhci { interface_descs.push(self.new_if_desc(port_id, slot, idesc, endpoints, hid_descs).await?); } else { + log::warn!("expected interface, got {:?}", item); // TODO break; }