pub struct Pic {
interrupt_request: bool,
resample_events: Vec<Vec<Event>>,
pics: [PicState; 2],
}
Fields§
§interrupt_request: bool
§resample_events: Vec<Vec<Event>>
§pics: [PicState; 2]
Implementations§
source§impl Pic
impl Pic
pub fn new() -> Pic
sourcepub fn get_pic_state(&self, select: PicSelect) -> PicState
pub fn get_pic_state(&self, select: PicSelect) -> PicState
Get the current state of the primary or secondary PIC
sourcepub fn set_pic_state(&mut self, select: PicSelect, state: &PicState)
pub fn set_pic_state(&mut self, select: PicSelect, state: &PicState)
Set the current state of the primary or secondary PIC
pub fn register_resample_events(&mut self, resample_events: Vec<Vec<Event>>)
pub fn service_irq(&mut self, irq: u8, level: bool) -> bool
sourcepub fn has_interrupt(&self) -> bool
pub fn has_interrupt(&self) -> bool
Determines whether the PIC has an interrupt ready.
sourcepub fn interrupt_requested(&self) -> bool
pub fn interrupt_requested(&self) -> bool
Determines whether the PIC has fired an interrupt to LAPIC.
sourcepub fn get_external_interrupt(&mut self) -> Option<u8>
pub fn get_external_interrupt(&mut self) -> Option<u8>
Determines the external interrupt number that the PIC is prepared to inject, if any.
fn pic_read_command(&mut self, pic_type: PicSelect) -> u8
fn pic_read_data(&mut self, pic_type: PicSelect) -> u8
fn pic_read_elcr(&mut self, pic_type: PicSelect) -> u8
fn pic_write_command(&mut self, pic_type: PicSelect, value: u8)
fn pic_write_data(&mut self, pic_type: PicSelect, value: u8)
fn pic_write_elcr(&mut self, pic_type: PicSelect, value: u8)
fn reset_pic(&mut self, pic_type: PicSelect)
sourcefn poll_read(&mut self, pic_type: PicSelect) -> (u8, bool)
fn poll_read(&mut self, pic_type: PicSelect) -> (u8, bool)
Determine the priority and whether an update_irq call is needed.
fn get_irq(&self, pic_type: PicSelect) -> Option<u8>
fn clear_isr(&mut self, pic_type: PicSelect, irq: u8)
fn update_irq(&mut self) -> bool
sourcefn set_irq_internal(pic: &mut PicState, irq: u8, level: bool)
fn set_irq_internal(pic: &mut PicState, irq: u8, level: bool)
Set Irq level. If edge is detected, then IRR is set to 1.
fn get_priority(pic: &PicState, irq_bitmap: u8) -> Option<u8>
sourcefn interrupt_ack(&mut self, pic_type: PicSelect, irq: u8)
fn interrupt_ack(&mut self, pic_type: PicSelect, irq: u8)
Move interrupt from IRR to ISR to indicate that the interrupt is injected. If auto EOI is set, then ISR is immediately cleared (since the purpose of EOI is to clear ISR bit).
fn init_command_word_1(&mut self, pic_type: PicSelect, value: u8)
fn operation_command_word_2(&mut self, pic_type: PicSelect, value: u8)
fn operation_command_word_3(pic: &mut PicState, value: u8)
Trait Implementations§
source§impl BusDevice for Pic
impl BusDevice for Pic
source§fn device_id(&self) -> DeviceId
fn device_id(&self) -> DeviceId
Returns a unique id per device type suitable for metrics gathering.
source§fn debug_label(&self) -> String
fn debug_label(&self) -> String
Returns a label suitable for debug output.
source§fn write(&mut self, info: BusAccessInfo, data: &[u8])
fn write(&mut self, info: BusAccessInfo, data: &[u8])
Writes at
offset
into this devicesource§fn read(&mut self, info: BusAccessInfo, data: &mut [u8])
fn read(&mut self, info: BusAccessInfo, data: &mut [u8])
Reads at
offset
from this devicesource§fn config_register_write(
&mut self,
reg_idx: usize,
offset: u64,
data: &[u8]
) -> ConfigWriteResult
fn config_register_write( &mut self, reg_idx: usize, offset: u64, data: &[u8] ) -> ConfigWriteResult
Sets a register in the configuration space. Only used by PCI. Read more
source§fn config_register_read(&self, reg_idx: usize) -> u32
fn config_register_read(&self, reg_idx: usize) -> u32
Gets a register from the configuration space. Only used by PCI. Read more
source§fn init_pci_config_mapping(
&mut self,
shmem: &SharedMemory,
base: usize,
len: usize
) -> bool
fn init_pci_config_mapping( &mut self, shmem: &SharedMemory, base: usize, len: usize ) -> bool
Provides a memory region to back MMIO access to the configuration
space. If the device can keep the memory region up to date, then it
should return true, after which no more calls to config_register_read
will be made. Otherwise the device should return false. Read more
source§fn virtual_config_register_write(&mut self, reg_idx: usize, value: u32)
fn virtual_config_register_write(&mut self, reg_idx: usize, value: u32)
Sets a register in the virtual config space. Only used by PCI. Read more
source§fn virtual_config_register_read(&self, reg_idx: usize) -> u32
fn virtual_config_register_read(&self, reg_idx: usize) -> u32
Gets a register from the virtual config space. Only used by PCI. Read more
source§fn on_sandboxed(&mut self)
fn on_sandboxed(&mut self)
Invoked when the device is sandboxed.
source§fn get_ranges(&self) -> Vec<(BusRange, BusType)>
fn get_ranges(&self) -> Vec<(BusRange, BusType)>
Gets a list of all ranges registered by this BusDevice.
source§fn destroy_device(&mut self)
fn destroy_device(&mut self)
Invoked when the device is destroyed
source§impl Suspendable for Pic
impl Suspendable for Pic
The PIC is only used in very early boot on x86_64, and snapshots are not generally taken during that time, so we can safely skip the PIC for now.
source§fn sleep(&mut self) -> Result<()>
fn sleep(&mut self) -> Result<()>
Stop all threads related to the device.
Sleep should be idempotent.
source§fn wake(&mut self) -> Result<()>
fn wake(&mut self) -> Result<()>
Create/Resume all threads related to the device.
Wake should be idempotent.
Auto Trait Implementations§
impl RefUnwindSafe for Pic
impl Send for Pic
impl Sync for Pic
impl Unpin for Pic
impl UnwindSafe for Pic
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.