Skip to content

Commit 180c1f4

Browse files
committed
Registers fixup.
1 parent 74ee9c1 commit 180c1f4

File tree

19 files changed

+223
-7
lines changed

19 files changed

+223
-7
lines changed

descriptor/generator.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,18 @@ use bit_field::BitField;
258258
#[derive(Copy, Clone, Debug)]
259259
pub struct {}{{\n bits: usize,\n}}
260260
impl {}{{
261+
#[inline]
262+
pub fn bits(&self) -> usize{{
263+
return self.bits;
264+
}}
265+
#[inline]
266+
pub fn from_bits(x: usize) -> Self{{
267+
return {}{{bits: x}};
268+
}}
269+
#[inline]
270+
pub unsafe fn write(&self){{
271+
_write(self.bits);
272+
}}
261273
{}
262274
}}
263275
read_csr_as!({}, {}, __read_{});
@@ -273,6 +285,7 @@ clear!({}, __clear_{});
273285
, self.description,
274286
self.name,
275287
self.name,
288+
self.name,
276289
trait_impls,
277290
self.name, self.id, self.canonical_name(),
278291
self.id, self.canonical_name(),

descriptor/hstatus.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ vtvm,20,20,number,TVM for VM.
77
vgein,17,12,number,Virtual Guest External Interrupt Number.
88
hu,9,9,number,Hypervisor User mode.
99
spvp,8,8,number,Supervisor Previous Virtual Privilege.
10+
spv,7,7,number,Supervisor Previous Virtualization mode.
1011
gva,6,6,number,Guest Virtual Address.
1112
vsbe,5,5,number,VS access endianness.
1213
end

descriptor/vsstatus.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Vstatus
1+
Vsstatus
22
512
33
sd,63,60,number,
44
uxl,33,32,UxlValues,Uxl32=1;Uxl64;Uxl128,Effective User XLEN.

src/register/hypervisorx64/hcounteren.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@ pub struct Hcounteren {
77
bits: usize,
88
}
99
impl Hcounteren {
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 Hcounteren { bits: x };
17+
}
18+
#[inline]
19+
pub unsafe fn write(&self) {
20+
_write(self.bits);
21+
}
1022
///
1123
#[inline]
1224
pub fn cy(&self) -> bool {

src/register/hypervisorx64/hedeleg.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@ pub struct Hedeleg {
77
bits: usize,
88
}
99
impl Hedeleg {
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 Hedeleg { bits: x };
17+
}
18+
#[inline]
19+
pub unsafe fn write(&self) {
20+
_write(self.bits);
21+
}
1022
/// Instruction address misaligned
1123
#[inline]
1224
pub fn ex0(&self) -> bool {

src/register/hypervisorx64/hgatp.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@ pub struct Hgatp {
77
bits: usize,
88
}
99
impl Hgatp {
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 Hgatp { bits: x };
17+
}
18+
#[inline]
19+
pub unsafe fn write(&self) {
20+
_write(self.bits);
21+
}
1022
/// Guest address translation mode.
1123
#[inline]
1224
pub fn mode(&self) -> HgatpValues {

src/register/hypervisorx64/hideleg.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@ pub struct Hideleg {
77
bits: usize,
88
}
99
impl Hideleg {
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 Hideleg { bits: x };
17+
}
18+
#[inline]
19+
pub unsafe fn write(&self) {
20+
_write(self.bits);
21+
}
1022
/// Software Interrupt
1123
#[inline]
1224
pub fn sip(&self) -> bool {

src/register/hypervisorx64/hie.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@ pub struct Hie {
77
bits: usize,
88
}
99
impl Hie {
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 Hie { bits: x };
17+
}
18+
#[inline]
19+
pub unsafe fn write(&self) {
20+
_write(self.bits);
21+
}
1022
/// Software Interrupt
1123
#[inline]
1224
pub fn vssie(&self) -> bool {

src/register/hypervisorx64/hip.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@ pub struct Hip {
77
bits: usize,
88
}
99
impl Hip {
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 Hip { bits: x };
17+
}
18+
#[inline]
19+
pub unsafe fn write(&self) {
20+
_write(self.bits);
21+
}
1022
/// Software Interrupt
1123
#[inline]
1224
pub fn vssip(&self) -> bool {

src/register/hypervisorx64/hstatus.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,18 @@ pub struct Hstatus {
77
bits: usize,
88
}
99
impl 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!(
109130
set_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);
112136
set_clear_csr!(
113137
///Guest Virtual Address.
114138
, set_gva, clear_gva, 1 << 6);

0 commit comments

Comments
 (0)