derive.rs 828 B

1234567891011121314151617181920212223242526272829303132333435
  1. use rustsbi::{HartMask, RustSBI};
  2. use sbi_spec::binary::SbiRet;
  3. #[derive(RustSBI)]
  4. struct MySBI {
  5. fence: MyFence,
  6. }
  7. struct MyFence;
  8. impl rustsbi::Fence for MyFence {
  9. fn remote_fence_i(&self, _: HartMask) -> SbiRet {
  10. println!("remote fence i");
  11. SbiRet::success(0)
  12. }
  13. fn remote_sfence_vma(&self, _: HartMask, _: usize, _: usize) -> SbiRet {
  14. todo!()
  15. }
  16. fn remote_sfence_vma_asid(&self, _: HartMask, _: usize, _: usize, _: usize) -> SbiRet {
  17. todo!()
  18. }
  19. }
  20. fn main() {
  21. let sbi = MySBI { fence: MyFence };
  22. sbi.handle_ecall(sbi_spec::rfnc::EID_RFNC, 0, [0; 6]);
  23. let spec_version = sbi.handle_ecall(
  24. sbi_spec::base::EID_BASE,
  25. sbi_spec::base::GET_SBI_SPEC_VERSION,
  26. [0; 6],
  27. );
  28. println!("spec version: {:x?}", spec_version.value);
  29. }