Struct Plic

Source
pub struct Plic<const TOTAL_INTS: usize = 51> { /* private fields */ }
Expand description

The PLIC instance generic parameter indicates the total number of interrupt sources implemented on the specific chip.

51 is a default for backwards compatibility with the SiFive based platforms implemented without the generic parameter.

Implementations§

Source§

impl<const TOTAL_INTS: usize> Plic<TOTAL_INTS>

Source

pub const fn new(base: StaticRef<PlicRegisters>) -> Self

Source

pub fn clear_all_pending(&self)

Clear all pending interrupts. The [PLIC specification] section 7:

A successful claim will also atomically clear the corresponding pending bit on the interrupt source.. Note that this function will only clear the enabled interrupt sources, as only those can be claimed. [PLIC specification]: https://github.com/riscv/riscv-plic-spec/blob/master/riscv-plic.adoc

Source

pub fn enable_specific_interrupts(&self, interrupts: &[u32])

Enable a list of interrupt IDs. The IDs must be in the range 1..TOTAL_INTS.

Source

pub fn disable_specific_interrupts(&self, interrupts: &[u32])

Source

pub fn enable_all(&self)

Enable all interrupts.

Source

pub fn disable_all(&self)

Disable all interrupts.

Source

pub fn next_pending(&self) -> Option<u32>

Get the index (0-256) of the lowest number pending interrupt, or None if none is pending. RISC-V PLIC has a “claim” register which makes it easy to grab the highest priority pending interrupt.

Source

pub unsafe fn save_interrupt(&self, index: u32)

Save the current interrupt to be handled later This will save the interrupt at index internally to be handled later. Interrupts must be disabled before this is called. Saved interrupts can be retrieved by calling get_saved_interrupts(). Saved interrupts are cleared when 'complete() is called.

Source

pub fn get_saved_interrupts(&self) -> Option<u32>

The next_pending() function will only return enabled interrupts. This function will return a pending interrupt that has been disabled by save_interrupt().

Source

pub unsafe fn complete(&self, index: u32)

Signal that an interrupt is finished being handled. In Tock, this should be called from the normal main loop (not the interrupt handler). Interrupts must be disabled before this is called.

Source

pub fn suppress_all(&self)

This is a generic implementation. There may be board specific versions as some platforms have added more bits to the mtvec register.

Auto Trait Implementations§

§

impl<const TOTAL_INTS: usize = 51> !Freeze for Plic<TOTAL_INTS>

§

impl<const TOTAL_INTS: usize = 51> !RefUnwindSafe for Plic<TOTAL_INTS>

§

impl<const TOTAL_INTS: usize = 51> !Send for Plic<TOTAL_INTS>

§

impl<const TOTAL_INTS: usize = 51> !Sync for Plic<TOTAL_INTS>

§

impl<const TOTAL_INTS: usize> Unpin for Plic<TOTAL_INTS>

§

impl<const TOTAL_INTS: usize = 51> !UnwindSafe for Plic<TOTAL_INTS>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.