Browse Source

doc: add documents for derive macro RustSBI.

Signed-off-by: Zhouqi Jiang <[email protected]>
Zhouqi Jiang 1 year ago
parent
commit
ba9fd417dd
2 changed files with 28 additions and 1 deletions
  1. 1 1
      macros/src/lib.rs
  2. 27 0
      src/lib.rs

+ 1 - 1
macros/src/lib.rs

@@ -18,7 +18,7 @@ struct RustSBIImp<'a> {
     machine_info: Option<&'a Ident>,
 }
 
-/// Implement RustSBI trait for structure of each extensions.
+/// This macro should be used in `rustsbi` crate as `rustsbi::RustSBI`.
 #[proc_macro_derive(RustSBI, attributes(rustsbi))]
 pub fn derive_rustsbi(input: TokenStream) -> TokenStream {
     let input = parse_macro_input!(input as DeriveInput);

+ 27 - 0
src/lib.rs

@@ -546,6 +546,33 @@ const RUSTSBI_VERSION: usize =
 pub const VERSION: &str = env!("CARGO_PKG_VERSION");
 
 pub extern crate sbi_spec as spec;
+/// Implement RustSBI trait for structure of each extensions.
+///
+/// This macro should be used over a struct of RISC-V SBI extension implementaions.
+/// For example:
+///
+/// ```rust
+/// #[derive(RustSBI)]
+/// struct MySBI {
+///     fence: MyFence,
+///     info: MyMachineInfo,
+/// }
+/// # use rustsbi::{RustSBI, HartMask};
+/// # use sbi_spec::binary::SbiRet;
+/// # struct MyFence;
+/// # impl rustsbi::Fence for MyFence {
+/// #     fn remote_fence_i(&self, _: HartMask) -> SbiRet { unimplemented!() }
+/// #     fn remote_sfence_vma(&self, _: HartMask, _: usize, _: usize) -> SbiRet { unimplemented!() }
+/// #     fn remote_sfence_vma_asid(&self, _: HartMask, _: usize, _: usize, _: usize) -> SbiRet { unimplemented!() }
+/// # }
+/// # struct MyMachineInfo;
+/// # impl rustsbi::MachineInfo for MyMachineInfo {
+/// #     fn mvendorid(&self) -> usize { 1 }
+/// #     fn marchid(&self) -> usize { 2 }
+/// #     fn mimpid(&self) -> usize { 3 }
+/// # }
+/// ```
+#[doc(inline)]
 pub use rustsbi_macros::RustSBI;
 
 pub use console::Console;