Struct devices::usb::xhci::interrupter::Interrupter
source · pub struct Interrupter {
interrupt_evt: Event,
usbsts: Register<u32>,
iman: Register<u32>,
erdp: Register<u64>,
event_handler_busy: bool,
enabled: bool,
moderation_interval: u16,
moderation_counter: u16,
event_ring: EventRing,
last_interrupt_time: Instant,
clock: Clock,
}
Expand description
See spec 4.17 for interrupters. Controller can send an event back to guest kernel driver through interrupter.
Fields§
§interrupt_evt: Event
§usbsts: Register<u32>
§iman: Register<u32>
§erdp: Register<u64>
§event_handler_busy: bool
§enabled: bool
§moderation_interval: u16
§moderation_counter: u16
§event_ring: EventRing
§last_interrupt_time: Instant
§clock: Clock
Implementations§
source§impl Interrupter
impl Interrupter
sourcepub fn new(mem: GuestMemory, irq_evt: Event, regs: &XhciRegs) -> Self
pub fn new(mem: GuestMemory, irq_evt: Event, regs: &XhciRegs) -> Self
Create a new interrupter.
sourcepub fn event_ring_is_empty(&self) -> bool
pub fn event_ring_is_empty(&self) -> bool
Returns true if event ring is empty.
sourcepub fn send_port_status_change_trb(&mut self, port_id: u8) -> Result<(), Error>
pub fn send_port_status_change_trb(&mut self, port_id: u8) -> Result<(), Error>
Send port status change trb for port.
sourcepub fn send_command_completion_trb(
&mut self,
completion_code: TrbCompletionCode,
slot_id: u8,
trb_addr: GuestAddress
) -> Result<(), Error>
pub fn send_command_completion_trb( &mut self, completion_code: TrbCompletionCode, slot_id: u8, trb_addr: GuestAddress ) -> Result<(), Error>
Send command completion trb.
sourcepub fn send_transfer_event_trb(
&mut self,
completion_code: TrbCompletionCode,
trb_pointer: u64,
transfer_length: u32,
event_data: bool,
slot_id: u8,
endpoint_id: u8
) -> Result<(), Error>
pub fn send_transfer_event_trb( &mut self, completion_code: TrbCompletionCode, trb_pointer: u64, transfer_length: u32, event_data: bool, slot_id: u8, endpoint_id: u8 ) -> Result<(), Error>
Send transfer event trb.
sourcepub fn set_enabled(&mut self, enabled: bool) -> Result<(), Error>
pub fn set_enabled(&mut self, enabled: bool) -> Result<(), Error>
Enable/Disable this interrupter.
sourcepub fn set_moderation(
&mut self,
interval: u16,
counter: u16
) -> Result<(), Error>
pub fn set_moderation( &mut self, interval: u16, counter: u16 ) -> Result<(), Error>
Set interrupt moderation.
sourcepub fn set_event_ring_seg_table_size(&mut self, size: u16) -> Result<(), Error>
pub fn set_event_ring_seg_table_size(&mut self, size: u16) -> Result<(), Error>
Set event ring seg table size.
sourcepub fn set_event_ring_seg_table_base_addr(
&mut self,
addr: GuestAddress
) -> Result<(), Error>
pub fn set_event_ring_seg_table_base_addr( &mut self, addr: GuestAddress ) -> Result<(), Error>
Set event ring segment table base address.
sourcepub fn set_event_ring_dequeue_pointer(
&mut self,
addr: GuestAddress,
busy: bool
) -> Result<(), Error>
pub fn set_event_ring_dequeue_pointer( &mut self, addr: GuestAddress, busy: bool ) -> Result<(), Error>
Set event ring dequeue pointer.
fn interrupt_interval(&self) -> Duration
fn interrupt_if_needed(&mut self) -> Result<(), Error>
Auto Trait Implementations§
impl RefUnwindSafe for Interrupter
impl Send for Interrupter
impl Sync for Interrupter
impl Unpin for Interrupter
impl UnwindSafe for Interrupter
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.