@@ -12,40 +12,35 @@ pub mod mtime {
12
12
}
13
13
14
14
/// msip register
15
- ///
16
- /// TODO: not final API design; wait for const generics
17
15
pub mod msip {
18
16
use crate :: pac;
19
- // pub fn set_value<const HART_ID: usize>(value: bool) {
20
- // unsafe {
21
- // (*pac::CLINT::ptr()).msip[HART_ID].write(|w| w.bits(if value { 1 } else { 0 }))
22
- // }
23
- // }
24
-
25
- pub fn set_value ( hart_id : usize , value : bool ) {
17
+
18
+ /// set IPI interrupt flag for one given hart
19
+ pub fn set_ipi ( hart_id : usize ) {
20
+ unsafe {
21
+ ( * pac:: CLINT :: ptr ( ) ) . msip [ hart_id] . write ( |w|
22
+ w. bits ( 1 ) )
23
+ }
24
+ }
25
+ /// clear IPI interrupt flag for one given hart
26
+ pub fn clear_ipi ( hart_id : usize ) {
26
27
unsafe {
27
28
( * pac:: CLINT :: ptr ( ) ) . msip [ hart_id] . write ( |w|
28
- w. bits ( if value { 1 } else { 0 } ) )
29
+ w. bits ( 0 ) )
29
30
}
30
31
}
31
32
}
32
33
33
34
/// mtimecmp register
34
- ///
35
- /// TODO: not final API design; wait for const generics
36
35
pub mod mtimecmp {
37
36
use crate :: pac;
38
- // pub fn read<const HART_ID: usize>() -> u64 {
39
- // unsafe { (*pac::CLINT::ptr()).mtimecmp[HART_ID].read().bits() }
40
- // }
41
- // pub fn write<const HART_ID: usize>(value: u64) {
42
- // // Volume II: RISC-V Privileged Architectures V1.10 p.31, figure 3.15
43
- // unsafe { (*pac::CLINT::ptr()).mtimecmp[HART_ID].write(|w| w.bits(value)) };
44
- // }
37
+
38
+ /// Read 64-bit mtimecmp register for certain hart id
45
39
pub fn read ( hart_id : usize ) -> u64 {
46
40
unsafe { ( * pac:: CLINT :: ptr ( ) ) . mtimecmp [ hart_id] . read ( ) . bits ( ) }
47
41
}
48
42
43
+ /// Write 64-bit mtimecmp register for certain hart id
49
44
pub fn write ( hart_id : usize , bits : u64 ) {
50
45
// Volume II: RISC-V Privileged Architectures V1.10 p.31, figure 3.15
51
46
unsafe { ( * pac:: CLINT :: ptr ( ) ) . mtimecmp [ hart_id] . write ( |w|
0 commit comments