pub struct Xhci {
fail_handle: Arc<dyn FailHandle>,
regs: XhciRegs,
interrupter: Arc<Mutex<Interrupter>>,
command_ring_controller: Arc<RingBufferController<CommandRingTrbHandler>>,
device_slots: DeviceSlots,
event_loop: Arc<EventLoop>,
event_loop_join_handle: Option<JoinHandle<()>>,
intr_resample_handler: Arc<IntrResampleHandler>,
device_provider: Box<dyn XhciBackendDeviceProvider>,
}
Expand description
xHCI controller implementation.
Fields§
§fail_handle: Arc<dyn FailHandle>
§regs: XhciRegs
§interrupter: Arc<Mutex<Interrupter>>
§command_ring_controller: Arc<RingBufferController<CommandRingTrbHandler>>
§device_slots: DeviceSlots
§event_loop: Arc<EventLoop>
§event_loop_join_handle: Option<JoinHandle<()>>
§intr_resample_handler: Arc<IntrResampleHandler>
§device_provider: Box<dyn XhciBackendDeviceProvider>
Implementations§
source§impl Xhci
impl Xhci
sourcepub fn new(
fail_handle: Arc<dyn FailHandle>,
mem: GuestMemory,
device_provider: Box<dyn XhciBackendDeviceProvider>,
interrupt_evt: IrqLevelEvent,
regs: XhciRegs
) -> Result<Arc<Self>, Error>
pub fn new( fail_handle: Arc<dyn FailHandle>, mem: GuestMemory, device_provider: Box<dyn XhciBackendDeviceProvider>, interrupt_evt: IrqLevelEvent, regs: XhciRegs ) -> Result<Arc<Self>, Error>
Create a new xHCI controller.
fn init_reg_callbacks(xhci: &Arc<Xhci>)
fn handle_register_callback_result<T>(&self, r: Result<T, Error>, t: T) -> T
fn usbcmd_callback(&self, value: u32) -> Result<u32, Error>
fn crcr_callback(&self, value: u64) -> u64
fn portsc_callback(&self, index: u32, value: u32) -> Result<u32, Error>
fn doorbell_callback(&self, index: u32, value: u32) -> Result<(), Error>
fn iman_callback(&self, value: u32) -> Result<(), Error>
fn imod_callback(&self, value: u32) -> Result<(), Error>
fn erstsz_callback(&self, value: u32) -> Result<(), Error>
fn erstba_callback(&self, value: u64) -> Result<(), Error>
fn erdp_callback(&self, value: u64) -> Result<(), Error>
fn reset(&self)
fn halt(&self)
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for Xhci
impl Send for Xhci
impl Sync for Xhci
impl Unpin for Xhci
impl !UnwindSafe for Xhci
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.