123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- use sbi_spec::binary::SbiRet;
- pub trait Cppc {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- fn probe(&self, reg_id: u32) -> SbiRet;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- fn read(&self, reg_id: u32) -> SbiRet;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- fn read_hi(&self, reg_id: u32) -> SbiRet;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- fn write(&self, reg_id: u32, val: u64) -> SbiRet;
-
- #[doc(hidden)]
- #[inline]
- fn _rustsbi_probe(&self) -> usize {
- sbi_spec::base::UNAVAILABLE_EXTENSION.wrapping_add(1)
- }
- }
- impl<T: Cppc> Cppc for &T {
- #[inline]
- fn probe(&self, reg_id: u32) -> SbiRet {
- T::probe(self, reg_id)
- }
- #[inline]
- fn read(&self, reg_id: u32) -> SbiRet {
- T::read(self, reg_id)
- }
- #[inline]
- fn read_hi(&self, reg_id: u32) -> SbiRet {
- T::read_hi(self, reg_id)
- }
- #[inline]
- fn write(&self, reg_id: u32, val: u64) -> SbiRet {
- T::write(self, reg_id, val)
- }
- }
- impl<T: Cppc> Cppc for Option<T> {
- #[inline]
- fn probe(&self, reg_id: u32) -> SbiRet {
- self.as_ref()
- .map(|inner| T::probe(inner, reg_id))
- .unwrap_or(SbiRet::not_supported())
- }
- #[inline]
- fn read(&self, reg_id: u32) -> SbiRet {
- self.as_ref()
- .map(|inner| T::read(inner, reg_id))
- .unwrap_or(SbiRet::not_supported())
- }
- #[inline]
- fn read_hi(&self, reg_id: u32) -> SbiRet {
- self.as_ref()
- .map(|inner| T::read_hi(inner, reg_id))
- .unwrap_or(SbiRet::not_supported())
- }
- #[inline]
- fn write(&self, reg_id: u32, val: u64) -> SbiRet {
- self.as_ref()
- .map(|inner| T::write(inner, reg_id, val))
- .unwrap_or(SbiRet::not_supported())
- }
- #[inline]
- fn _rustsbi_probe(&self) -> usize {
- match self {
- Some(_) => sbi_spec::base::UNAVAILABLE_EXTENSION.wrapping_add(1),
- None => sbi_spec::base::UNAVAILABLE_EXTENSION,
- }
- }
- }
|