blob: af6d45bfed18da54b121d0aaf5e0e19c71e27227 [file] [log] [blame]
// 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.power.manager;
using fuchsia.device.manager;
using fuchsia.io;
/// Error codes for the DriverManagerRegistration protocol.
type RegistrationError = strict enum {
/// The component encountered an unspecified error while performing the operation.
INTERNAL = 0;
/// At least one handle provided was invalid.
INVALID_HANDLE = 1;
};
/// Protocol for the Driver Manager to register the required protocol instances with the
/// Power Manager.
@discoverable
protocol DriverManagerRegistration {
/// Registers a [fuchsia.device.manager/SystemStateTransition] and [fuchsia.io.Directory] with
/// the Power Manager. The Power Manager expects to receive this call exactly once and it will
/// be inoperable until the call is made successfully. If the call succeeds, the
/// DriverManagerRegistration channel will no longer serve any purpose and may be closed. If
/// the call fails, the Power Manager will leave the channel open and await a retry.
///
/// + request `system_state_transition` a [fuchsia.device.manager/SystemStateTransition] that
/// allows the Power Manager to set the Driver Manager termination behavior. This is an
/// essential piece involved in coordinating orderly system shutdown.
/// + request `dir` a [fuchsia.io.Directory] that represents the devfs (/dev) served by the
/// Driver Manager.
/// * error a [fuchsia.power.manager.Error] value indicating the reason (if any) that Register
/// failed.
//
// TODO(pshickel): Replace the following comment with a link to a markdown file explaining the
// orderly shutdown process, especially the dependencies between the Driver and Power Managers.
// These protocol instances are passed from Driver Manager to Power Manager in this way (as
// opposed to the Power Manager discovering the protocols in the usual way) in order to
// satisfy the requirement that Driver Manager has a dependency on Power Manager (and not the
// reverse) according to the Component Manager capability routes. This requirement ensures
// that during shutdown, the Driver Manager will be stopped before the Power Manager, allowing
// the Power Manager to observe and react to any potential failures during the shutdown
// process.
Register(resource struct {
system_state_transition client_end:fuchsia.device.manager.SystemStateTransition;
dir client_end:fuchsia.io.Directory;
}) -> (struct {}) error RegistrationError;
};