Skip to main content

Executor

Struct Executor 

Source
pub struct Executor<B, C> { /* private fields */ }
Expand description

Read-path and sequence executor shared by all sessions. Each call takes the calling session’s validated AccessPolicy.

Implementations§

Source§

impl<B: ResourceBackend, C: Clock> Executor<B, C>

Source

pub fn new( backends: BTreeMap<ResourceId, B>, clock: C, limits: ExecLimits, ) -> Self

Creates an executor over the instance’s backends.

Source

pub fn limits(&self) -> ExecLimits

The execution limits, for capability reporting.

Source

pub fn backend(&self, resource: ResourceId) -> Option<&B>

The backend for resource, for diagnostics and tests.

Source

pub fn poll_read_once( &mut self, resource: ResourceId, offset: u64, ) -> Result<u32, BackendError>

Reads a register once directly from the backend without policy or audit.

Source

pub fn barrier(&mut self)

Invokes hardware MMIO barriers across all backends.

Source

pub fn read32( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, offset: u64, ) -> Result<ReadOutcome, ReadError>

Performs one policy-checked, audited 32-bit read.

Source

pub fn read32_internal( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, offset: u64, item_index: Option<u32>, ) -> Result<ReadOutcome, ReadError>

Internal 32-bit read implementation supporting sequence item indexing.

Source

pub fn write32( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, offset: u64, value: u32, write_mask: u32, precondition: Option<WritePrecondition>, readback: bool, ) -> Result<WriteOutcome, WriteError>

Performs one policy-checked, audited 32-bit masked write.

Source

pub fn write32_internal( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, offset: u64, value: u32, write_mask: u32, precondition: Option<WritePrecondition>, readback: bool, item_index: Option<u32>, ) -> Result<WriteOutcome, WriteError>

Internal 32-bit write implementation supporting sequence item indexing.

Source

pub fn poll32_read_step( &mut self, audit: &mut AuditRing, session: u64, resource: ResourceId, offset: u64, expected: u32, mask: u32, item_index: Option<u32>, ) -> Result<Result<PollOutcome, u32>, PollError>

Evaluates one polling read step against expected value and mask.

Source

pub fn poll32_timeout( &mut self, audit: &mut AuditRing, session: u64, resource: ResourceId, offset: u64, last_val: Option<u32>, item_index: Option<u32>, ) -> PollError

Records an audit rejection when polling times out.

Source

pub fn prevalidate_sequence( &self, policy: &AccessPolicy, items: &[SequenceItem], ) -> Result<(), (usize, Denial)>

Validates whole sequence before any hardware execution.

Source

pub fn snapshot( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, items: &[SnapshotItem], ) -> Result<SnapshotOutcome, SnapshotError>

Performs a bounded snapshot: every item is validated before the first read, then items execute in order, stopping at the first backend failure.

Source

pub fn gpio_read( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, ) -> Result<GpioReadOutcome, GpioReadError>

Performs one policy-checked, audited GPIO read.

Source

pub fn gpio_read_internal( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, item_index: Option<u32>, ) -> Result<GpioReadOutcome, GpioReadError>

Internal GPIO read implementation supporting sequence item indexing.

Source

pub fn gpio_write( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, value: bool, ) -> Result<GpioWriteOutcome, GpioWriteError>

Performs one policy-checked, audited GPIO write.

Source

pub fn gpio_write_internal( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, value: bool, item_index: Option<u32>, ) -> Result<GpioWriteOutcome, GpioWriteError>

Internal GPIO write implementation supporting sequence item indexing.

Source

pub fn i2c_transfer( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, write_data: &[u8], read_length: u32, ) -> Result<I2cTransferOutcome, I2cTransferError>

Performs one policy-checked, audited I2C transfer.

Source

pub fn i2c_transfer_internal( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, write_data: &[u8], read_length: u32, item_index: Option<u32>, ) -> Result<I2cTransferOutcome, I2cTransferError>

Internal I2C transfer implementation supporting sequence item indexing.

Source

pub fn spi_transmit( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, tx_data: &[u8], ) -> Result<SpiTransmitOutcome, SpiTransmitError>

Performs one policy-checked, audited SPI transmit.

Source

pub fn spi_transmit_internal( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, tx_data: &[u8], item_index: Option<u32>, ) -> Result<SpiTransmitOutcome, SpiTransmitError>

Internal SPI transmit implementation supporting sequence item indexing.

Source

pub fn clock_enable( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, ) -> Result<ClockEnableOutcome, ClockOpError>

Source

pub fn clock_disable( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, ) -> Result<ClockDisableOutcome, ClockOpError>

Source

pub fn clock_is_enabled( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, ) -> Result<ClockIsEnabledOutcome, ClockOpError>

Source

pub fn clock_set_rate( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, hz: u64, ) -> Result<ClockSetRateOutcome, ClockOpError>

Source

pub fn clock_query_rate( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, hz_in: u64, ) -> Result<ClockQueryRateOutcome, ClockOpError>

Source

pub fn clock_get_rate( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, ) -> Result<ClockGetRateOutcome, ClockOpError>

Source

pub fn reset_assert( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, ) -> Result<ResetAssertOutcome, ResetOpError>

Source

pub fn reset_deassert( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, ) -> Result<ResetDeassertOutcome, ResetOpError>

Source

pub fn reset_toggle( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, ) -> Result<ResetToggleOutcome, ResetOpError>

Source

pub fn reset_status( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, ) -> Result<ResetStatusOutcome, ResetOpError>

Source

pub fn serial_read( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, ) -> Result<SerialReadOutcome, SerialOpError>

Source

pub fn serial_write( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, data: &[u8], ) -> Result<SerialWriteOutcome, SerialOpError>

Source§

impl<B: ResourceBackend, C: Timer> Executor<B, C>

Source

pub async fn poll32_with_abort( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, offset: u64, expected: u32, mask: u32, interval_ns: i64, timeout_ns: i64, abort: Option<&AtomicBool>, ) -> Result<PollOutcome, PollError>

Performs an asynchronous 32-bit poll with an optional abort token.

Source

pub async fn poll32( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, offset: u64, expected: u32, mask: u32, interval_ns: i64, timeout_ns: i64, ) -> Result<PollOutcome, PollError>

Performs an asynchronous 32-bit poll.

Source

pub async fn poll32_internal( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, resource: ResourceId, offset: u64, expected: u32, mask: u32, interval_ns: i64, timeout_ns: i64, item_index: Option<u32>, abort: Option<&AtomicBool>, ) -> Result<PollOutcome, PollError>

Internal 32-bit poll implementation supporting sequence item indexing.

Source

pub async fn execute_sequence( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, items: &[SequenceItem], ) -> Result<SequenceOutcome, SequenceError>

Executes a bounded ordered sequence.

Source

pub async fn execute_sequence_with_abort( &mut self, policy: &AccessPolicy, audit: &mut AuditRing, session: u64, items: &[SequenceItem], abort: Option<&AtomicBool>, ) -> Result<SequenceOutcome, SequenceError>

Executes a bounded ordered sequence with an optional abort token.

Trait Implementations§

Source§

impl<B: Debug, C: Debug> Debug for Executor<B, C>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<B, C> Freeze for Executor<B, C>
where C: Freeze,

§

impl<B, C> RefUnwindSafe for Executor<B, C>

§

impl<B, C> Send for Executor<B, C>
where C: Send, B: Send,

§

impl<B, C> Sync for Executor<B, C>
where C: Sync, B: Sync,

§

impl<B, C> Unpin for Executor<B, C>
where C: Unpin,

§

impl<B, C> UnsafeUnpin for Executor<B, C>
where C: UnsafeUnpin,

§

impl<B, C> UnwindSafe for Executor<B, C>

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> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.