@@ -12,40 +12,35 @@ pub mod mtime {
1212}
1313
1414/// msip register
15- ///
16- /// TODO: not final API design; wait for const generics
1715pub mod msip {
1816 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 ) {
2627 unsafe {
2728 ( * pac:: CLINT :: ptr ( ) ) . msip [ hart_id] . write ( |w|
28- w. bits ( if value { 1 } else { 0 } ) )
29+ w. bits ( 0 ) )
2930 }
3031 }
3132}
3233
3334/// mtimecmp register
34- ///
35- /// TODO: not final API design; wait for const generics
3635pub mod mtimecmp {
3736 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
4539 pub fn read ( hart_id : usize ) -> u64 {
4640 unsafe { ( * pac:: CLINT :: ptr ( ) ) . mtimecmp [ hart_id] . read ( ) . bits ( ) }
4741 }
4842
43+ /// Write 64-bit mtimecmp register for certain hart id
4944 pub fn write ( hart_id : usize , bits : u64 ) {
5045 // Volume II: RISC-V Privileged Architectures V1.10 p.31, figure 3.15
5146 unsafe { ( * pac:: CLINT :: ptr ( ) ) . mtimecmp [ hart_id] . write ( |w|
0 commit comments