123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146 |
- #[derive(Clone, Copy, PartialEq, Eq)]
- #[repr(C)]
- pub struct SbiRet<T = usize> {
-
- pub error: T,
-
- pub value: T,
- }
- pub mod id {
- use super::SbiRegister;
-
- #[doc(alias = "SBI_SUCCESS")]
- pub const RET_SUCCESS: usize = <usize as SbiRegister>::RET_SUCCESS;
-
- #[doc(alias = "SBI_ERR_FAILED")]
- pub const RET_ERR_FAILED: usize = <usize as SbiRegister>::RET_ERR_FAILED;
-
- #[doc(alias = "SBI_ERR_NOT_SUPPORTED")]
- pub const RET_ERR_NOT_SUPPORTED: usize = <usize as SbiRegister>::RET_ERR_NOT_SUPPORTED;
-
- #[doc(alias = "SBI_ERR_INVALID_PARAM")]
- pub const RET_ERR_INVALID_PARAM: usize = <usize as SbiRegister>::RET_ERR_INVALID_PARAM;
-
- #[doc(alias = "SBI_ERR_DENIED")]
- pub const RET_ERR_DENIED: usize = <usize as SbiRegister>::RET_ERR_DENIED;
-
- #[doc(alias = "SBI_ERR_INVALID_ADDRESS")]
- pub const RET_ERR_INVALID_ADDRESS: usize = <usize as SbiRegister>::RET_ERR_INVALID_ADDRESS;
-
- #[doc(alias = "SBI_ERR_ALREADY_AVAILABLE")]
- pub const RET_ERR_ALREADY_AVAILABLE: usize = <usize as SbiRegister>::RET_ERR_ALREADY_AVAILABLE;
-
- #[doc(alias = "SBI_ERR_ALREADY_STARTED")]
- pub const RET_ERR_ALREADY_STARTED: usize = <usize as SbiRegister>::RET_ERR_ALREADY_STARTED;
-
- #[doc(alias = "SBI_ERR_ALREADY_STOPPED")]
- pub const RET_ERR_ALREADY_STOPPED: usize = <usize as SbiRegister>::RET_ERR_ALREADY_STOPPED;
-
- #[doc(alias = "SBI_ERR_NO_SHMEM")]
- pub const RET_ERR_NO_SHMEM: usize = <usize as SbiRegister>::RET_ERR_NO_SHMEM;
-
- #[doc(alias = "SBI_ERR_INVALID_STATE")]
- pub const RET_ERR_INVALID_STATE: usize = <usize as SbiRegister>::RET_ERR_INVALID_STATE;
-
- #[doc(alias = "SBI_ERR_BAD_RANGE")]
- pub const RET_ERR_BAD_RANGE: usize = <usize as SbiRegister>::RET_ERR_BAD_RANGE;
-
- #[doc(alias = "SBI_ERR_TIMEOUT")]
- pub const RET_ERR_TIMEOUT: usize = <usize as SbiRegister>::RET_ERR_TIMEOUT;
-
- #[doc(alias = "SBI_ERR_IO")]
- pub const RET_ERR_IO: usize = <usize as SbiRegister>::RET_ERR_IO;
-
- #[doc(alias = "SBI_ERR_DENIED_LOCKED")]
- pub const RET_ERR_DENIED_LOCKED: usize = <usize as SbiRegister>::RET_ERR_DENIED_LOCKED;
-
-
- }
- use id::*;
- pub trait SbiRegister: Copy + Eq + Ord + core::fmt::Debug {
-
- const RET_SUCCESS: Self;
-
- const RET_ERR_FAILED: Self;
-
- const RET_ERR_NOT_SUPPORTED: Self;
-
- const RET_ERR_INVALID_PARAM: Self;
-
- const RET_ERR_DENIED: Self;
-
- const RET_ERR_INVALID_ADDRESS: Self;
-
- const RET_ERR_ALREADY_AVAILABLE: Self;
-
- const RET_ERR_ALREADY_STARTED: Self;
-
- const RET_ERR_ALREADY_STOPPED: Self;
-
- const RET_ERR_NO_SHMEM: Self;
-
- const RET_ERR_INVALID_STATE: Self;
-
- const RET_ERR_BAD_RANGE: Self;
-
- const RET_ERR_TIMEOUT: Self;
-
- const RET_ERR_IO: Self;
-
- const RET_ERR_DENIED_LOCKED: Self;
-
- const ZERO: Self;
-
-
- const FULL_MASK: Self;
-
- fn into_result(ret: SbiRet<Self>) -> Result<Self, Error<Self>>;
- }
- macro_rules! impl_sbi_register {
- ($ty:ty, $signed:ty) => {
- impl SbiRegister for $ty {
- const RET_SUCCESS: Self = 0;
- const RET_ERR_FAILED: Self = -1 as $signed as $ty;
- const RET_ERR_NOT_SUPPORTED: Self = -2 as $signed as $ty;
- const RET_ERR_INVALID_PARAM: Self = -3 as $signed as $ty;
- const RET_ERR_DENIED: Self = -4 as $signed as $ty;
- const RET_ERR_INVALID_ADDRESS: Self = -5 as $signed as $ty;
- const RET_ERR_ALREADY_AVAILABLE: Self = -6 as $signed as $ty;
- const RET_ERR_ALREADY_STARTED: Self = -7 as $signed as $ty;
- const RET_ERR_ALREADY_STOPPED: Self = -8 as $signed as $ty;
- const RET_ERR_NO_SHMEM: Self = -9 as $signed as $ty;
- const RET_ERR_INVALID_STATE: Self = -10 as $signed as $ty;
- const RET_ERR_BAD_RANGE: Self = -11 as $signed as $ty;
- const RET_ERR_TIMEOUT: Self = -12 as $signed as $ty;
- const RET_ERR_IO: Self = -13 as $signed as $ty;
- const RET_ERR_DENIED_LOCKED: Self = -14 as $signed as $ty;
- const ZERO: Self = 0;
- const FULL_MASK: Self = !0;
- fn into_result(ret: SbiRet<Self>) -> Result<Self, Error<Self>> {
- match ret.error {
- Self::RET_SUCCESS => Ok(ret.value),
- Self::RET_ERR_FAILED => Err(Error::Failed),
- Self::RET_ERR_NOT_SUPPORTED => Err(Error::NotSupported),
- Self::RET_ERR_INVALID_PARAM => Err(Error::InvalidParam),
- Self::RET_ERR_DENIED => Err(Error::Denied),
- Self::RET_ERR_INVALID_ADDRESS => Err(Error::InvalidAddress),
- Self::RET_ERR_ALREADY_AVAILABLE => Err(Error::AlreadyAvailable),
- Self::RET_ERR_ALREADY_STARTED => Err(Error::AlreadyStarted),
- Self::RET_ERR_ALREADY_STOPPED => Err(Error::AlreadyStopped),
- Self::RET_ERR_NO_SHMEM => Err(Error::NoShmem),
- Self::RET_ERR_INVALID_STATE => Err(Error::InvalidState),
- Self::RET_ERR_BAD_RANGE => Err(Error::BadRange),
- Self::RET_ERR_TIMEOUT => Err(Error::Timeout),
- Self::RET_ERR_IO => Err(Error::Io),
- Self::RET_ERR_DENIED_LOCKED => Err(Error::DeniedLocked),
- unknown => Err(Error::Custom(unknown as _)),
- }
- }
- }
- };
- }
- impl_sbi_register!(usize, isize);
- impl_sbi_register!(isize, isize);
- impl_sbi_register!(u32, i32);
- impl_sbi_register!(i32, i32);
- impl_sbi_register!(u64, i64);
- impl_sbi_register!(i64, i64);
- impl_sbi_register!(u128, i128);
- impl_sbi_register!(i128, i128);
- impl<T: SbiRegister + core::fmt::LowerHex> core::fmt::Debug for SbiRet<T> {
- fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
- match T::into_result(*self) {
- Ok(value) => write!(f, "{:?}", value),
- Err(err) => match err {
- Error::Failed => write!(f, "<SBI call failed>"),
- Error::NotSupported => write!(f, "<SBI feature not supported>"),
- Error::InvalidParam => write!(f, "<SBI invalid parameter>"),
- Error::Denied => write!(f, "<SBI denied>"),
- Error::InvalidAddress => write!(f, "<SBI invalid address>"),
- Error::AlreadyAvailable => write!(f, "<SBI already available>"),
- Error::AlreadyStarted => write!(f, "<SBI already started>"),
- Error::AlreadyStopped => write!(f, "<SBI already stopped>"),
- Error::NoShmem => write!(f, "<SBI shared memory not available>"),
- Error::InvalidState => write!(f, "<SBI invalid state>"),
- Error::BadRange => write!(f, "<SBI bad range>"),
- Error::Timeout => write!(f, "<SBI timeout>"),
- Error::Io => write!(f, "<SBI input/output error>"),
- Error::DeniedLocked => write!(f, "<SBI denied due to locked status>"),
- Error::Custom(unknown) => write!(f, "[SBI Unknown error: {:#x}]", unknown),
- },
- }
- }
- }
- #[derive(Debug, Clone, Copy, PartialEq, Eq)]
- pub enum Error<T = usize> {
-
- Failed,
-
- NotSupported,
-
- InvalidParam,
-
- Denied,
-
- InvalidAddress,
-
- AlreadyAvailable,
-
- AlreadyStarted,
-
- AlreadyStopped,
-
- NoShmem,
-
- InvalidState,
-
- BadRange,
-
- Timeout,
-
- Io,
-
- DeniedLocked,
-
- Custom(T),
- }
- impl<T: SbiRegister> SbiRet<T> {
-
- #[inline]
- pub const fn success(value: T) -> Self {
- Self {
- error: T::RET_SUCCESS,
- value,
- }
- }
-
- #[inline]
- pub const fn failed() -> Self {
- Self {
- error: T::RET_ERR_FAILED,
- value: T::ZERO,
- }
- }
-
-
-
- #[inline]
- pub const fn not_supported() -> Self {
- Self {
- error: T::RET_ERR_NOT_SUPPORTED,
- value: T::ZERO,
- }
- }
-
-
-
-
- #[inline]
- pub const fn invalid_param() -> Self {
- Self {
- error: T::RET_ERR_INVALID_PARAM,
- value: T::ZERO,
- }
- }
-
-
- #[inline]
- pub const fn denied() -> Self {
- Self {
- error: T::RET_ERR_DENIED,
- value: T::ZERO,
- }
- }
-
-
-
- #[inline]
- pub const fn invalid_address() -> Self {
- Self {
- error: T::RET_ERR_INVALID_ADDRESS,
- value: T::ZERO,
- }
- }
-
-
- #[inline]
- pub const fn already_available() -> Self {
- Self {
- error: T::RET_ERR_ALREADY_AVAILABLE,
- value: T::ZERO,
- }
- }
-
-
- #[inline]
- pub const fn already_started() -> Self {
- Self {
- error: T::RET_ERR_ALREADY_STARTED,
- value: T::ZERO,
- }
- }
-
-
- #[inline]
- pub const fn already_stopped() -> Self {
- Self {
- error: T::RET_ERR_ALREADY_STOPPED,
- value: T::ZERO,
- }
- }
-
-
- #[inline]
- pub const fn no_shmem() -> Self {
- Self {
- error: T::RET_ERR_NO_SHMEM,
- value: T::ZERO,
- }
- }
-
-
- #[inline]
- pub const fn invalid_state() -> Self {
- Self {
- error: T::RET_ERR_INVALID_STATE,
- value: T::ZERO,
- }
- }
-
-
- #[inline]
- pub const fn bad_range() -> Self {
- Self {
- error: T::RET_ERR_BAD_RANGE,
- value: T::ZERO,
- }
- }
-
-
- #[inline]
- pub const fn timeout() -> Self {
- Self {
- error: T::RET_ERR_TIMEOUT,
- value: T::ZERO,
- }
- }
-
- #[inline]
- pub const fn io() -> Self {
- Self {
- error: T::RET_ERR_IO,
- value: T::ZERO,
- }
- }
-
- #[inline]
- pub const fn denied_locked() -> Self {
- Self {
- error: T::RET_ERR_DENIED_LOCKED,
- value: T::ZERO,
- }
- }
- }
- impl<T: SbiRegister> From<Error<T>> for SbiRet<T> {
- #[inline]
- fn from(value: Error<T>) -> Self {
- match value {
- Error::Failed => SbiRet::failed(),
- Error::NotSupported => SbiRet::not_supported(),
- Error::InvalidParam => SbiRet::invalid_param(),
- Error::Denied => SbiRet::denied(),
- Error::InvalidAddress => SbiRet::invalid_address(),
- Error::AlreadyAvailable => SbiRet::already_available(),
- Error::AlreadyStarted => SbiRet::already_started(),
- Error::AlreadyStopped => SbiRet::already_stopped(),
- Error::NoShmem => SbiRet::no_shmem(),
- Error::InvalidState => SbiRet::invalid_state(),
- Error::BadRange => SbiRet::bad_range(),
- Error::Timeout => SbiRet::timeout(),
- Error::Io => SbiRet::io(),
- Error::DeniedLocked => SbiRet::denied_locked(),
- Error::Custom(error) => SbiRet {
- error,
- value: T::ZERO,
- },
- }
- }
- }
- impl SbiRet {
-
- #[inline]
- pub const fn into_result(self) -> Result<usize, Error> {
- match self.error {
- RET_SUCCESS => Ok(self.value),
- RET_ERR_FAILED => Err(Error::Failed),
- RET_ERR_NOT_SUPPORTED => Err(Error::NotSupported),
- RET_ERR_INVALID_PARAM => Err(Error::InvalidParam),
- RET_ERR_DENIED => Err(Error::Denied),
- RET_ERR_INVALID_ADDRESS => Err(Error::InvalidAddress),
- RET_ERR_ALREADY_AVAILABLE => Err(Error::AlreadyAvailable),
- RET_ERR_ALREADY_STARTED => Err(Error::AlreadyStarted),
- RET_ERR_ALREADY_STOPPED => Err(Error::AlreadyStopped),
- RET_ERR_NO_SHMEM => Err(Error::NoShmem),
- RET_ERR_INVALID_STATE => Err(Error::InvalidState),
- RET_ERR_BAD_RANGE => Err(Error::BadRange),
- RET_ERR_TIMEOUT => Err(Error::Timeout),
- RET_ERR_IO => Err(Error::Io),
- RET_ERR_DENIED_LOCKED => Err(Error::DeniedLocked),
- unknown => Err(Error::Custom(unknown as _)),
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[must_use = "if you intended to assert that this is ok, consider `.unwrap()` instead"]
- #[inline]
- pub const fn is_ok(&self) -> bool {
- matches!(self.error, RET_SUCCESS)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[must_use]
- #[inline]
- pub fn is_ok_and(self, f: impl FnOnce(usize) -> bool) -> bool {
- self.into_result().is_ok_and(f)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[must_use = "if you intended to assert that this is err, consider `.unwrap_err()` instead"]
- #[inline]
- pub const fn is_err(&self) -> bool {
- !self.is_ok()
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[must_use]
- #[inline]
- pub fn is_err_and(self, f: impl FnOnce(Error) -> bool) -> bool {
- self.into_result().is_err_and(f)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn ok(self) -> Option<usize> {
- self.into_result().ok()
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn err(self) -> Option<Error> {
- self.into_result().err()
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn map<U, F: FnOnce(usize) -> U>(self, op: F) -> Result<U, Error> {
- self.into_result().map(op)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn map_or<U, F: FnOnce(usize) -> U>(self, default: U, f: F) -> U {
- self.into_result().map_or(default, f)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn map_or_else<U, D: FnOnce(Error) -> U, F: FnOnce(usize) -> U>(
- self,
- default: D,
- f: F,
- ) -> U {
- self.into_result().map_or_else(default, f)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn map_err<F, O: FnOnce(Error) -> F>(self, op: O) -> Result<usize, F> {
- self.into_result().map_err(op)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn inspect<F: FnOnce(&usize)>(self, f: F) -> Self {
- if let Ok(ref t) = self.into_result() {
- f(t);
- }
- self
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn inspect_err<F: FnOnce(&Error)>(self, f: F) -> Self {
- if let Err(ref e) = self.into_result() {
- f(e);
- }
- self
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn expect(self, msg: &str) -> usize {
- self.into_result().expect(msg)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn unwrap(self) -> usize {
- self.into_result().unwrap()
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn expect_err(self, msg: &str) -> Error {
- self.into_result().expect_err(msg)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn unwrap_err(self) -> Error {
- self.into_result().unwrap_err()
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn and<U>(self, res: Result<U, Error>) -> Result<U, Error> {
- self.into_result().and(res)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn and_then<U, F: FnOnce(usize) -> Result<U, Error>>(self, op: F) -> Result<U, Error> {
- self.into_result().and_then(op)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn or<F>(self, res: Result<usize, F>) -> Result<usize, F> {
- self.into_result().or(res)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn or_else<F, O: FnOnce(Error) -> Result<usize, F>>(self, op: O) -> Result<usize, F> {
- self.into_result().or_else(op)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn unwrap_or(self, default: usize) -> usize {
- self.into_result().unwrap_or(default)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub fn unwrap_or_else<F: FnOnce(Error) -> usize>(self, op: F) -> usize {
- self.into_result().unwrap_or_else(op)
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub unsafe fn unwrap_unchecked(self) -> usize {
- unsafe { self.into_result().unwrap_unchecked() }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- pub unsafe fn unwrap_err_unchecked(self) -> Error {
- unsafe { self.into_result().unwrap_err_unchecked() }
- }
- }
- impl IntoIterator for SbiRet {
- type Item = usize;
- type IntoIter = core::result::IntoIter<usize>;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- #[inline]
- fn into_iter(self) -> Self::IntoIter {
- self.into_result().into_iter()
- }
- }
- #[cfg(test)]
- mod tests {
- use super::*;
- #[test]
- #[rustfmt::skip]
- fn rustsbi_sbi_ret_constructors() {
- assert_eq!(SbiRet::success(0), SbiRet { value: 0, error: 0 });
- assert_eq!(SbiRet::success(1037), SbiRet { value: 1037, error: 0 });
- assert_eq!(SbiRet::success(usize::MAX), SbiRet { value: usize::MAX, error: 0 });
- assert_eq!(SbiRet::failed(), SbiRet { value: 0, error: usize::MAX - 1 + 1 });
- assert_eq!(SbiRet::not_supported(), SbiRet { value: 0, error: usize::MAX - 2 + 1 });
- assert_eq!(SbiRet::invalid_param(), SbiRet { value: 0, error: usize::MAX - 3 + 1 });
- assert_eq!(SbiRet::denied(), SbiRet { value: 0, error: usize::MAX - 4 + 1 });
- assert_eq!(SbiRet::invalid_address(), SbiRet { value: 0, error: usize::MAX - 5 + 1 });
- assert_eq!(SbiRet::already_available(), SbiRet { value: 0, error: usize::MAX - 6 + 1 });
- assert_eq!(SbiRet::already_started(), SbiRet { value: 0, error: usize::MAX - 7 + 1 });
- assert_eq!(SbiRet::already_stopped(), SbiRet { value: 0, error: usize::MAX - 8 + 1 });
- assert_eq!(SbiRet::no_shmem(), SbiRet { value: 0, error: usize::MAX - 9 + 1 });
- assert_eq!(SbiRet::invalid_state(), SbiRet { value: 0, error: usize::MAX - 10 + 1 });
- assert_eq!(SbiRet::bad_range(), SbiRet { value: 0, error: usize::MAX - 11 + 1 });
- assert_eq!(SbiRet::timeout(), SbiRet { value: 0, error: usize::MAX - 12 + 1 });
- assert_eq!(SbiRet::io(), SbiRet { value: 0, error: usize::MAX - 13 + 1 });
- assert_eq!(SbiRet::denied_locked(), SbiRet { value: 0, error: usize::MAX - 14 + 1 });
- }
- }
|