mod.rs 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. use rustsbi::RustSBI;
  2. pub mod console;
  3. pub mod hsm;
  4. pub mod ipi;
  5. pub mod reset;
  6. pub mod rfence;
  7. pub mod extensions;
  8. pub mod fifo;
  9. pub mod hart_context;
  10. pub mod logger;
  11. pub mod trap;
  12. pub mod trap_stack;
  13. use console::{ConsoleDevice, SbiConsole};
  14. use hsm::SbiHsm;
  15. use ipi::{IpiDevice, SbiIpi};
  16. use reset::{ResetDevice, SbiReset};
  17. use rfence::SbiRFence;
  18. #[derive(RustSBI, Default)]
  19. #[rustsbi(dynamic)]
  20. #[allow(clippy::upper_case_acronyms)]
  21. pub struct SBI<C: ConsoleDevice, I: IpiDevice, R: ResetDevice> {
  22. #[rustsbi(console)]
  23. pub console: Option<SbiConsole<C>>,
  24. #[rustsbi(ipi, timer)]
  25. pub ipi: Option<SbiIpi<I>>,
  26. #[rustsbi(hsm)]
  27. pub hsm: Option<SbiHsm>,
  28. #[rustsbi(reset)]
  29. pub reset: Option<SbiReset<R>>,
  30. #[rustsbi(fence)]
  31. pub rfence: Option<SbiRFence>,
  32. }
  33. impl<C: ConsoleDevice, I: IpiDevice, R: ResetDevice> SBI<C, I, R> {
  34. pub const fn new() -> Self {
  35. SBI {
  36. console: None,
  37. ipi: None,
  38. hsm: None,
  39. reset: None,
  40. rfence: None,
  41. }
  42. }
  43. }