warpshell/shells/
mod.rs

1//! # User-space interfaces to shells
2
3mod xilinx_u55n_xdma_std;
4
5use crate::{
6    cores::{
7        axi_firewall::Error as AxiFirewallError, cms::Error as CmsError,
8        dfx_decoupler::Error as DfxDecouplerError, hbicap::Error as HbicapError,
9    },
10    xdma::Error as XdmaError,
11    Error as BasedError,
12};
13use thiserror::Error;
14
15pub use xilinx_u55n_xdma_std::*;
16
17pub type Result<T> = std::result::Result<T, Error>;
18
19#[derive(Debug, Error)]
20pub enum Error {
21    #[error("XDMA error: {0}")]
22    XdmaError(#[from] XdmaError),
23    #[error("Based access error: {0}")]
24    BasedError(#[from] BasedError),
25    #[error("CMS error")]
26    Cms(#[from] CmsError),
27    #[error("HBICAP is not ready")]
28    HbicapNotReady,
29    #[error("HBICAP error")]
30    Hbicap(#[from] HbicapError),
31    #[error("DFX decoupler error")]
32    DfxDecoupler(#[from] DfxDecouplerError),
33    #[error("AXI firewall error")]
34    AxiFirewall(#[from] AxiFirewallError),
35}
36
37/// A shell is a collection of cores with host interfaces to them, for example,
38/// [`XilinxU55nXdmaStd`]. This trait provides methods that may involve multiple cores.
39pub trait Shell {
40    fn init(&self) -> Result<()>;
41    fn program_user_image(&self, image: &[u8]) -> Result<()>;
42}