lib.rs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. //! Confidential VM Extension (CoVE) structure and constant definitions.
  2. //!
  3. //! Confidential VM Extension (CoVE) provides an interface for a scalable
  4. //! Trusted Execution Environment (TEE) that supports hardware virtual-machine-based
  5. //! workloads on RISC-V platforms.
  6. //!
  7. //! This crate can be integrated as part of RustSBI and used in Prototyper,
  8. //! or included as a component of Rust-based bare-metal applications or operating
  9. //! systems to facilitate invoking services provided by the Confidential VM Extension.
  10. #![no_std]
  11. // §10
  12. pub mod host;
  13. // §11
  14. pub mod interrupt;
  15. // §12
  16. pub mod guest;
  17. /// Converts SBI EID from str.
  18. const fn eid_from_str(name: &str) -> i32 {
  19. match *name.as_bytes() {
  20. [a] => i32::from_be_bytes([0, 0, 0, a]),
  21. [a, b] => i32::from_be_bytes([0, 0, a, b]),
  22. [a, b, c] => i32::from_be_bytes([0, a, b, c]),
  23. [a, b, c, d] => i32::from_be_bytes([a, b, c, d]),
  24. _ => unreachable!(),
  25. }
  26. }
  27. #[cfg(test)]
  28. mod tests {
  29. use static_assertions::const_assert_eq;
  30. // §10
  31. #[test]
  32. fn test_cove_host() {
  33. use crate::host::*;
  34. const_assert_eq!(0x434F5648, EID_COVH);
  35. const_assert_eq!(0, GET_TSM_INFO);
  36. const_assert_eq!(1, CONVERT_PAGES);
  37. const_assert_eq!(2, RECLAIM_PAGES);
  38. const_assert_eq!(3, GLOBAL_FENCE);
  39. const_assert_eq!(4, LOCAL_FENCE);
  40. const_assert_eq!(5, CREATE_TVM);
  41. const_assert_eq!(6, FINALIZE_TVM);
  42. const_assert_eq!(8, DESTROY_TVM);
  43. const_assert_eq!(9, ADD_TVM_MEMORY_REGION);
  44. const_assert_eq!(10, ADD_TVM_PAGE_TABLE_PAGES);
  45. const_assert_eq!(11, ADD_TVM_MEASURED_PAGES);
  46. const_assert_eq!(12, ADD_TVM_ZERO_PAGES);
  47. const_assert_eq!(13, ADD_TVM_SHARED_PAGES);
  48. const_assert_eq!(14, CREATE_TVM_VCPU);
  49. const_assert_eq!(15, RUN_TVM_VCPU);
  50. const_assert_eq!(16, TVM_FENCE);
  51. const_assert_eq!(17, TVM_INVALIDATE_PAGES);
  52. const_assert_eq!(18, TVM_VALIDATE_PAGES);
  53. const_assert_eq!(19, TVM_REMOVE_PAGES);
  54. }
  55. // §11
  56. #[test]
  57. fn test_cove_interrupt() {
  58. use crate::interrupt::*;
  59. const_assert_eq!(0x434F5649, EID_COVI);
  60. const_assert_eq!(0, INIT_TVM_AIA);
  61. const_assert_eq!(1, SET_TVM_AIA_CPU_IMSIC_ADDR);
  62. const_assert_eq!(2, CONVERT_AIA_IMSIC);
  63. const_assert_eq!(3, RECLAIM_TVM_AIA_IMSIC);
  64. const_assert_eq!(4, BIND_AIA_IMSIC);
  65. const_assert_eq!(5, UNBIND_AIA_IMSIC_BEGIN);
  66. const_assert_eq!(6, UNBIND_AIA_IMSIC_END);
  67. const_assert_eq!(7, INJECT_TVM_CPU);
  68. const_assert_eq!(8, REBIND_AIA_IMSIC_BEGIN);
  69. const_assert_eq!(9, REBIND_AIA_IMSIC_CLONE);
  70. const_assert_eq!(10, REBIND_AIA_IMSIC_END);
  71. }
  72. // §12
  73. #[test]
  74. fn test_cove_guest() {
  75. use crate::guest::*;
  76. const_assert_eq!(0x434F5647, EID_COVG);
  77. const_assert_eq!(0, ADD_MMIO_REGION);
  78. const_assert_eq!(1, REMOVE_MMIO_REGION);
  79. const_assert_eq!(2, SHARE_MEMORY_REGION);
  80. const_assert_eq!(3, UNSHARE_MEMORY_REGION);
  81. const_assert_eq!(4, ALLOW_EXTERNAL_INTERRUPT);
  82. const_assert_eq!(5, DENY_EXTERNAL_INTERRUPT);
  83. const_assert_eq!(6, GET_ATTESTATION_CAPABILITIES);
  84. const_assert_eq!(7, EXTEND_MEASUREMENT);
  85. const_assert_eq!(8, GET_EVIDENCE);
  86. const_assert_eq!(9, RETRIEVE_SECRET);
  87. const_assert_eq!(10, READ_MEASUREMENT);
  88. }
  89. }