3
3
"
4
4
[test-kernel] Testing base extension"
5
5
) ;
6
- let base_version = sbi :: probe_extension ( sbi :: EID_BASE ) ;
6
+ let base_version = sbi_rt :: probe_extension ( sbi_rt :: EID_BASE ) ;
7
7
if base_version == 0 {
8
8
panic ! (
9
9
"\
12
12
) ;
13
13
}
14
14
15
- let spec_version = sbi :: get_spec_version ( ) ;
15
+ let spec_version = sbi_rt :: get_spec_version ( ) ;
16
16
println ! (
17
17
"\
18
18
[test-kernel] Base extension version: {base_version:x}
24
24
[test-kernel] Device mimpid: {mimpid:x}" ,
25
25
major = ( spec_version >> 24 ) & 0x7F ,
26
26
minor = spec_version & 0xFFFFFF ,
27
- impl_id = sbi :: get_sbi_impl_id( ) ,
28
- impl_version = sbi :: get_sbi_impl_version( ) ,
29
- mvendorid = sbi :: get_mvendorid( ) ,
30
- marchid = sbi :: get_marchid( ) ,
31
- mimpid = sbi :: get_mimpid( ) ,
27
+ impl_id = sbi_rt :: get_sbi_impl_id( ) ,
28
+ impl_version = sbi_rt :: get_sbi_impl_version( ) ,
29
+ mvendorid = sbi_rt :: get_mvendorid( ) ,
30
+ marchid = sbi_rt :: get_marchid( ) ,
31
+ mimpid = sbi_rt :: get_mimpid( ) ,
32
32
) ;
33
33
}
34
34
@@ -80,13 +80,14 @@ pub(crate) fn trap_delegate(hartid: usize) {
80
80
81
81
/// 所有副核:启动 -> 不可恢复休眠 -> 唤醒 -> 可恢复休眠 -> 唤醒 -> 关闭。
82
82
pub ( crate ) fn hsm ( hartid : usize , smp : usize ) {
83
- const SUSPENDED : sbi:: SbiRet = sbi:: SbiRet {
84
- error : sbi:: RET_SUCCESS ,
85
- value : sbi:: HART_STATE_SUSPENDED ,
83
+ use sbi_rt:: SbiRet ;
84
+ const SUSPENDED : SbiRet = SbiRet {
85
+ error : sbi_rt:: RET_SUCCESS ,
86
+ value : sbi_rt:: HART_STATE_SUSPENDED ,
86
87
} ;
87
- const STOPPED : sbi :: SbiRet = sbi :: SbiRet {
88
- error : sbi :: RET_SUCCESS ,
89
- value : sbi :: HART_STATE_STOPPED ,
88
+ const STOPPED : SbiRet = SbiRet {
89
+ error : sbi_rt :: RET_SUCCESS ,
90
+ value : sbi_rt :: HART_STATE_STOPPED ,
90
91
} ;
91
92
92
93
use spin:: { Barrier , Once } ;
@@ -106,8 +107,8 @@ pub(crate) fn hsm(hartid: usize, smp: usize) {
106
107
107
108
extern "C" fn start_rust_main ( hart_id : usize ) -> ! {
108
109
STARTED . wait ( ) . wait ( ) ;
109
- let ret = sbi :: hart_suspend (
110
- sbi :: HART_SUSPEND_TYPE_NON_RETENTIVE ,
110
+ let ret = sbi_rt :: hart_suspend (
111
+ sbi_rt :: HART_SUSPEND_TYPE_NON_RETENTIVE ,
111
112
test_entry as _ ,
112
113
resume_rust_main as _ ,
113
114
) ;
@@ -116,9 +117,9 @@ pub(crate) fn hsm(hartid: usize, smp: usize) {
116
117
117
118
extern "C" fn resume_rust_main ( hart_id : usize ) -> ! {
118
119
RESUMED . wait ( ) . wait ( ) ;
119
- let ret = sbi :: hart_suspend ( sbi :: HART_SUSPEND_TYPE_RETENTIVE , 0 , 0 ) ;
120
- assert_eq ! ( sbi :: RET_SUCCESS , ret. error) ;
121
- let ret = sbi :: hart_stop ( ) ;
120
+ let ret = sbi_rt :: hart_suspend ( sbi_rt :: HART_SUSPEND_TYPE_RETENTIVE , 0 , 0 ) ;
121
+ assert_eq ! ( sbi_rt :: RET_SUCCESS , ret. error) ;
122
+ let ret = sbi_rt :: hart_stop ( ) ;
122
123
unreachable ! ( "stop [{hart_id}] but {ret:?}" ) ;
123
124
}
124
125
@@ -133,8 +134,8 @@ pub(crate) fn hsm(hartid: usize, smp: usize) {
133
134
for id in 0 ..smp {
134
135
if id != hartid {
135
136
println ! ( "[test-kernel] Hart{id} is booting..." ) ;
136
- let ret = sbi :: hart_start ( id, test_entry as _ , start_rust_main as _ ) ;
137
- if ret. error != sbi :: RET_SUCCESS {
137
+ let ret = sbi_rt :: hart_start ( id, test_entry as _ , start_rust_main as _ ) ;
138
+ if ret. error != sbi_rt :: RET_SUCCESS {
138
139
panic ! ( "[test-kernel] Start hart{id} failed: {ret:?}" ) ;
139
140
}
140
141
} else {
@@ -147,7 +148,7 @@ pub(crate) fn hsm(hartid: usize, smp: usize) {
147
148
// 等待副核休眠(不可恢复)
148
149
for id in 0 ..smp {
149
150
if id != hartid {
150
- while sbi :: hart_get_status ( id) != SUSPENDED {
151
+ while sbi_rt :: hart_get_status ( id) != SUSPENDED {
151
152
core:: hint:: spin_loop ( ) ;
152
153
}
153
154
println ! ( "[test-kernel] Hart{id} suspended." ) ;
@@ -156,21 +157,21 @@ pub(crate) fn hsm(hartid: usize, smp: usize) {
156
157
}
157
158
}
158
159
// 全部唤醒
159
- sbi :: send_ipi ( 0 , -1isize as usize ) ;
160
+ sbi_rt :: send_ipi ( 0 , -1isize as usize ) ;
160
161
// 等待副核恢复完成
161
162
resumed. wait ( ) ;
162
163
print ! ( "[test-kernel] All harts resume successfully!\n " ) ;
163
164
for id in 0 ..smp {
164
165
if id != hartid {
165
166
// 等待副核休眠
166
- while sbi :: hart_get_status ( id) != SUSPENDED {
167
+ while sbi_rt :: hart_get_status ( id) != SUSPENDED {
167
168
core:: hint:: spin_loop ( ) ;
168
169
}
169
170
print ! ( "[test-kernel] Hart{id} suspended, " ) ;
170
171
// 单独唤醒
171
- sbi :: send_ipi ( 1usize << id, 0 ) ;
172
+ sbi_rt :: send_ipi ( 1usize << id, 0 ) ;
172
173
// 等待副核关闭
173
- while sbi :: hart_get_status ( id) != STOPPED {
174
+ while sbi_rt :: hart_get_status ( id) != STOPPED {
174
175
core:: hint:: spin_loop ( ) ;
175
176
}
176
177
println ! ( "then stopped." ) ;
0 commit comments