// Copyright 2017 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT

#ifndef ZIRCON_KERNEL_INCLUDE_DEV_POWER_H_
#define ZIRCON_KERNEL_INCLUDE_DEV_POWER_H_

#include <lib/zx/result.h>
#include <sys/types.h>
#include <zircon/compiler.h>

enum class power_reboot_flags {
  REBOOT_NORMAL = 0,
  REBOOT_BOOTLOADER = 1,
  REBOOT_RECOVERY = 2,
};

// power_cpu_state represents the state a CPU in, and contains a union of the states found in all
// architectures.
enum class power_cpu_state {
  ON,
  OFF,
  ON_PENDING,
  STARTED,
  STOPPED,
  START_PENDING,
  STOP_PENDING,
  SUSPENDED,
  SUSPEND_PENDING,
  RESUME_PENDING,
};

void power_reboot(power_reboot_flags flags);
void power_shutdown();
zx_status_t power_cpu_off();

// Initiates the power on sequence for the CPU with the given hardware CPU ID. Note that a hardware
// CPU ID is architecture specific (e.g. MPID on ARM, hart ID on RISC-V, etc.) and not equivalent to
// a cpu_num_t. This function does not block/wait on the CPU actually coming online. Callers are
// expected to use power_get_cpu_state to poll the state of the CPU until it comes online.
//
// On some architectures, the context argument is passed to the newly started CPU.
zx_status_t power_cpu_on(uint64_t hw_cpu_id, paddr_t entry, uint64_t context);
zx::result<power_cpu_state> power_get_cpu_state(uint64_t hw_cpu_id);

#endif  // ZIRCON_KERNEL_INCLUDE_DEV_POWER_H_
