浏览代码

Finish simple reset process design

luojia65 4 年之前
父节点
当前提交
de238a0338
共有 2 个文件被更改,包括 9 次插入3 次删除
  1. 2 3
      rustsbi/src/ecall/legacy.rs
  2. 7 0
      rustsbi/src/reset.rs

+ 2 - 3
rustsbi/src/ecall/legacy.rs

@@ -68,7 +68,6 @@ pub fn set_timer_32(arg0: usize, arg1: usize) -> SbiRet {
 
 #[inline]
 pub fn shutdown() -> SbiRet {
-    // todo: wrap
-    loop {}
-    SbiRet::ok(0)
+    // todo: ref: opensbi; much more complex process
+    crate::reset::reset()
 }

+ 7 - 0
rustsbi/src/reset.rs

@@ -18,3 +18,10 @@ lazy_static::lazy_static! {
 pub fn init_reset<T: Reset + Send + 'static>(reset: T) {
     *RESET.lock() = Some(Box::new(reset));
 }
+
+pub(crate) fn reset() -> ! {
+    if let Some(obj) = &*RESET.lock() {
+        obj.reset();
+    }
+    panic!("no reset handler available")
+}