Trait rustsbi::Reset[][src]

pub trait Reset: Send {
    fn system_reset(&self, reset_type: usize, reset_reason: usize) -> SbiRet;
}
Expand description

System Reset Extension

Provides a function that allow the supervisor software to request system-level reboot or shutdown.

The term “system” refers to the world-view of supervisor software and the underlying SBI implementation could be machine mode firmware or hypervisor.

Ref: Section 9, RISC-V Supervisor Binary Interface Specification

Required methods

fn system_reset(&self, reset_type: usize, reset_reason: usize) -> SbiRet[src]

Reset the system based on provided reset_type and reset_reason.

This is a synchronous call and does not return if it succeeds.

Warm reboot and cold reboot

When supervisor software is running natively, the SBI implementation is machine mode firmware. In this case, shutdown is equivalent to physical power down of the entire system and cold reboot is equivalent to physical power cycle of the entire system. Further, warm reboot is equivalent to a power cycle of main processor and parts of the system but not the entire system.

For example, on a server class system with a BMC (board management controller), a warm reboot will not power cycle the BMC whereas a cold reboot will definitely power cycle the BMC.

When supervisor software is running inside a virtual machine, the SBI implementation is a hypervisor. The shutdown, cold reboot and warm reboot will behave functionally the same as the native case but might not result in any physical power changes.

Return value

The possible return error codes returned in SbiRet.error are shown in the table below:

Error codeDescription
SBI_ERR_INVALID_PARAMreset_type or reset_reason is not valid.
SBI_ERR_NOT_SUPPORTEDreset_type is valid but not implemented.
SBI_ERR_FAILEDReset request failed for unknown reasons.

Implementors