Struct Chip

Source
pub struct Chip {
    pub inner: Box<dyn ChipImpl>,
}
Expand description

A wrapper around a chip that implements ChipImpl. This allows us to create and use chips without knowing their type, but we can still downcast to the concrete type if we need to.

Fields§

§inner: Box<dyn ChipImpl>

Implementations§

Source§

impl Chip

Source

pub fn gs_open<T: Clone + Send + Sync + 'static>( arch: Arch, backend: CallbackStorage<T>, ) -> Result<Grayskull, PlatformError>

Source

pub fn wh_open<T: Clone + Send + Sync + 'static>( arch: Arch, backend: CallbackStorage<T>, ) -> Result<Wormhole, PlatformError>

Source

pub fn open<T: Clone + Send + Sync + 'static>( arch: Arch, backend: CallbackStorage<T>, ) -> Result<Chip, PlatformError>

Source§

impl Chip

Source

pub fn as_wh(&self) -> Option<&Wormhole>

Downcast to a wormhole chip

Source

pub fn as_gs(&self) -> Option<&Grayskull>

Downcast to a grayskull chip

Trait Implementations§

Source§

impl ChipImpl for Chip

Source§

fn update_init_state( &mut self, status: &mut InitStatus, ) -> Result<ChipInitResult, PlatformError>

Update the initialization state of the chip. The primary purpose of this function is to tell the caller when it is safe to starting interacting with the chip. Read more
Source§

fn get_arch(&self) -> Arch

Returns the current arch of the chip, can be used to avoid needing to ducktype when downcasting.
Source§

fn arc_msg(&self, msg: ArcMsgOptions) -> Result<ArcMsgOk, PlatformError>

Send an arc_msg to the underlying chip.
Source§

fn get_neighbouring_chips(&self) -> Result<Vec<NeighbouringChip>, PlatformError>

Get a list of neighbouring chips. Will return an empty list for gs and up to four chips for wh.
Source§

fn as_any(&self) -> &dyn Any

Convinence function to downcast to a concrete type.
Source§

fn get_telemetry(&self) -> Result<Telemetry, PlatformError>

Get telemetry information from the chip. The information is not cached, so should not be called repeatedly.
Source§

fn get_device_info(&self) -> Result<Option<DeviceInfo>, PlatformError>

Get information about the underlying chip transport. This is a hack to get the physical id of the chip.
Source§

impl From<Box<dyn ChipImpl>> for Chip

Source§

fn from(inner: Box<dyn ChipImpl>) -> Self

Converts to this type from the input type.
Source§

impl HlComms for Chip

Source§

fn comms_obj(&self) -> (&dyn ChipComms, &dyn ChipInterface)

Source§

fn noc_read( &self, noc_id: u8, x: u8, y: u8, addr: u64, data: &mut [u8], ) -> Result<(), Box<dyn Error>>

Source§

fn noc_write( &self, noc_id: u8, x: u8, y: u8, addr: u64, data: &[u8], ) -> Result<(), Box<dyn Error>>

Source§

fn noc_broadcast( &self, noc_id: u8, addr: u64, data: &[u8], ) -> Result<(), Box<dyn Error>>

Source§

fn noc_read32( &self, noc_id: u8, x: u8, y: u8, addr: u64, ) -> Result<u32, Box<dyn Error>>

Source§

fn noc_write32( &self, noc_id: u8, x: u8, y: u8, addr: u64, value: u32, ) -> Result<(), Box<dyn Error>>

Source§

fn noc_broadcast32( &self, noc_id: u8, addr: u64, value: u32, ) -> Result<(), Box<dyn Error>>

Source§

fn axi_read(&self, addr: u64, data: &mut [u8]) -> Result<(), Box<dyn Error>>

Source§

fn axi_write(&self, addr: u64, data: &[u8]) -> Result<(), Box<dyn Error>>

Source§

fn axi_read32(&self, addr: u64) -> Result<u32, Box<dyn Error>>

Source§

fn axi_write32(&self, addr: u64, value: u32) -> Result<(), Box<dyn Error>>

Auto Trait Implementations§

§

impl Freeze for Chip

§

impl !RefUnwindSafe for Chip

§

impl Send for Chip

§

impl Sync for Chip

§

impl Unpin for Chip

§

impl !UnwindSafe for Chip

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> HlCommsInterface for T
where T: HlComms,

Source§

fn axi_translate(&self, addr: impl AsRef<str>) -> Result<AxiData, AxiError>

Source§

fn axi_sread<'a>( &self, addr: impl AsRef<str>, value: &'a mut [u8], ) -> Result<&'a [u8], PlatformError>

Source§

fn axi_sread_to_vec( &self, addr: impl AsRef<str>, ) -> Result<Vec<u8>, PlatformError>

Source§

fn axi_sread32(&self, addr: impl AsRef<str>) -> Result<u32, PlatformError>

Source§

fn axi_swrite( &self, addr: impl AsRef<str>, value: &[u8], ) -> Result<(), PlatformError>

Source§

fn axi_swrite32( &self, addr: impl AsRef<str>, value: u32, ) -> Result<(), PlatformError>

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 = 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.