use crate::{
Mmio, USBHost,
backend::kmod::hub::{Hub, HubInfo},
};
mod dwc;
mod hub;
mod kcore;
pub mod osal;
pub(crate) mod queue;
mod transfer;
mod xhci;
use alloc::{boxed::Box, collections::btree_map::BTreeMap};
use dwc::Dwc;
pub use dwc::{
CruOp, DwcNewParams, DwcParams, UdphyParam, Usb2PhyParam, UsbPhyInterfaceMode,
usb2phy::Usb2PhyPortId,
};
use id_arena::Id;
use kcore::*;
pub use osal::*;
use usb_if::Speed;
use xhci::Xhci;
use crate::err::*;
impl USBHost {
pub fn new_xhci(mmio: Mmio, kernel: &'static dyn KernelOp) -> Result<USBHost> {
Ok(USBHost::new(Xhci::new(mmio, kernel)?))
}
pub fn new_dwc(params: DwcNewParams<'_, impl CruOp>) -> Result<USBHost> {
Ok(USBHost::new(Dwc::new(params)?))
}
pub(crate) fn new(backend: impl CoreOp) -> Self {
let b = Core::new(backend);
Self {
backend: Box::new(b),
initialized: false,
}
}
}
pub struct DeviceAddressInfo {
pub root_port_id: u8,
pub parent_hub: Option<Id<Hub>>,
pub port_speed: Speed,
pub port_id: u8,
pub infos: BTreeMap<Id<Hub>, HubInfo>,
}