@@ -7,6 +7,18 @@ pub struct Hstatus {
77 bits : usize ,
88}
99impl Hstatus {
10+ #[ inline]
11+ pub fn bits ( & self ) -> usize {
12+ return self . bits ;
13+ }
14+ #[ inline]
15+ pub fn from_bits ( x : usize ) -> Self {
16+ return Hstatus { bits : x } ;
17+ }
18+ #[ inline]
19+ pub unsafe fn write ( & self ) {
20+ _write ( self . bits ) ;
21+ }
1022 /// Effective XLEN for VM.
1123 #[ inline]
1224 pub fn vsxl ( & self ) -> VsxlValues {
@@ -70,6 +82,15 @@ impl Hstatus {
7082 pub fn set_spvp ( & mut self , val : bool ) {
7183 self . bits . set_bit ( 8 , val) ;
7284 }
85+ /// Supervisor Previous Virtualization mode.
86+ #[ inline]
87+ pub fn spv ( & self ) -> bool {
88+ self . bits . get_bit ( 7 )
89+ }
90+ #[ inline]
91+ pub fn set_spv ( & mut self , val : bool ) {
92+ self . bits . set_bit ( 7 , val) ;
93+ }
7394 /// Guest Virtual Address.
7495 #[ inline]
7596 pub fn gva ( & self ) -> bool {
@@ -109,6 +130,9 @@ set_clear_csr!(
109130set_clear_csr ! (
110131 ///Supervisor Previous Virtual Privilege.
111132 , set_spvp, clear_spvp, 1 << 8 ) ;
133+ set_clear_csr ! (
134+ ///Supervisor Previous Virtualization mode.
135+ , set_spv, clear_spv, 1 << 7 ) ;
112136set_clear_csr ! (
113137 ///Guest Virtual Address.
114138 , set_gva, clear_gva, 1 << 6 ) ;
0 commit comments