| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| library fuchsia.device.manager; |
| |
| using zx; |
| using fuchsia.hardware.power.statecontrol; |
| |
| /// Provides protocol for managing driver manager and all the devices during a |
| /// system state transition. |
| @discoverable |
| protocol SystemStateTransition { |
| /// Sets and updates the termination SystemPowerState of driver_manager. |
| /// On Success, the system power state is cached. The next time |
| /// driver_manager's stop event is triggered, driver_manager suspends |
| /// the system to "state". |
| /// Returns ZX_ERR_INVALID_ARGS if the system power state is not a shutdown/reboot |
| /// state(POWEROFF, REBOOT, REBOOT_BOOTLOADER, REBOOT_RECOVERY, MEXEC) |
| /// Returns ZX_ERR_BAD_STATE if driver_manager is unable to save the state. |
| /// Each time the api is called the termination state is updated and cached. |
| SetTerminationSystemState(struct { |
| state fuchsia.hardware.power.statecontrol.SystemPowerState; |
| }) -> (struct {}) error zx.status; |
| |
| // When the system termination state is MEXEC, in the course of shutting |
| // down, driver_manager will perform an mexec itself after suspending all |
| // drivers. This method prepares for that event, stashing the kernel and |
| // data ZBIs to later be passed to zx_system_mexec(). |
| // |
| // This method only prepares for the event of a MEXEC shutdown, but does |
| // not affect termination state itself (which is expected to be set |
| // separately). |
| // |
| // It is expected that the ZBI items specified by |
| // `zx_system_mexec_payload_get()` have not yet been appended to the |
| // provided data ZBI. |
| // |
| // Returns |
| // * ZX_ERR_INVALID_ARGS: if either VMO handle is invalid; |
| // * ZX_ERR_IO_DATA_INTEGRITY: if any ZBI format or storage access errors are |
| // encountered; |
| // * any status returned by `zx_system_mexec_payload_get()`. |
| SetMexecZbis(resource struct { |
| kernel_zbi zx.handle:VMO; |
| data_zbi zx.handle:VMO; |
| }) -> (struct {}) error zx.status; |
| }; |