qemu/target/arm/arm-powerctl.h
<<
>>
Prefs
   1/*
   2 * QEMU support -- ARM Power Control specific functions.
   3 *
   4 * Copyright (c) 2016 Jean-Christophe Dubois
   5 *
   6 * This work is licensed under the terms of the GNU GPL, version 2 or later.
   7 * See the COPYING file in the top-level directory.
   8 *
   9 */
  10
  11#ifndef QEMU_ARM_POWERCTL_H
  12#define QEMU_ARM_POWERCTL_H
  13
  14#include "kvm-consts.h"
  15
  16#define QEMU_ARM_POWERCTL_RET_SUCCESS QEMU_PSCI_RET_SUCCESS
  17#define QEMU_ARM_POWERCTL_INVALID_PARAM QEMU_PSCI_RET_INVALID_PARAMS
  18#define QEMU_ARM_POWERCTL_ALREADY_ON QEMU_PSCI_RET_ALREADY_ON
  19#define QEMU_ARM_POWERCTL_IS_OFF QEMU_PSCI_RET_DENIED
  20#define QEMU_ARM_POWERCTL_ON_PENDING QEMU_PSCI_RET_ON_PENDING
  21
  22/*
  23 * arm_get_cpu_by_id:
  24 * @cpuid: the id of the CPU we want to retrieve the state
  25 *
  26 * Retrieve a CPUState object from its CPU ID provided in @cpuid.
  27 *
  28 * Returns: a pointer to the CPUState structure of the requested CPU.
  29 */
  30CPUState *arm_get_cpu_by_id(uint64_t cpuid);
  31
  32/*
  33 * arm_set_cpu_on:
  34 * @cpuid: the id of the CPU we want to start/wake up.
  35 * @entry: the address the CPU shall start from.
  36 * @context_id: the value to put in r0/x0.
  37 * @target_el: The desired exception level.
  38 * @target_aa64: 1 if the requested mode is AArch64. 0 otherwise.
  39 *
  40 * Start the cpu designated by @cpuid in @target_el exception level. The mode
  41 * shall be AArch64 if @target_aa64 is set to 1. Otherwise the mode is
  42 * AArch32. The CPU shall start at @entry with @context_id in r0/x0.
  43 *
  44 * Returns: QEMU_ARM_POWERCTL_RET_SUCCESS on success.
  45 * QEMU_ARM_POWERCTL_INVALID_PARAM if bad parameters are provided.
  46 * QEMU_ARM_POWERCTL_ALREADY_ON if the CPU was already started.
  47 * QEMU_ARM_POWERCTL_ON_PENDING if the CPU is still powering up
  48 */
  49int arm_set_cpu_on(uint64_t cpuid, uint64_t entry, uint64_t context_id,
  50                   uint32_t target_el, bool target_aa64);
  51
  52/*
  53 * arm_set_cpu_off:
  54 * @cpuid: the id of the CPU we want to stop/shut down.
  55 *
  56 * Stop the cpu designated by @cpuid.
  57 *
  58 * Returns: QEMU_ARM_POWERCTL_RET_SUCCESS on success.
  59 * QEMU_ARM_POWERCTL_INVALID_PARAM if bad parameters are provided.
  60 * QEMU_ARM_POWERCTL_IS_OFF if CPU is already off
  61 */
  62
  63int arm_set_cpu_off(uint64_t cpuid);
  64
  65/*
  66 * arm_reset_cpu:
  67 * @cpuid: the id of the CPU we want to reset.
  68 *
  69 * Reset the cpu designated by @cpuid.
  70 *
  71 * Returns: QEMU_ARM_POWERCTL_RET_SUCCESS on success.
  72 * QEMU_ARM_POWERCTL_INVALID_PARAM if bad parameters are provided.
  73 * QEMU_ARM_POWERCTL_IS_OFF if CPU is off
  74 */
  75int arm_reset_cpu(uint64_t cpuid);
  76
  77/*
  78 * arm_set_cpu_on_and_reset:
  79 * @cpuid: the id of the CPU we want to star
  80 *
  81 * Start the cpu designated by @cpuid and put it through its normal
  82 * CPU reset process. The CPU will start in the way it is architected
  83 * to start after a power-on reset.
  84 *
  85 * Returns: QEMU_ARM_POWERCTL_RET_SUCCESS on success.
  86 * QEMU_ARM_POWERCTL_INVALID_PARAM if there is no CPU with that ID.
  87 * QEMU_ARM_POWERCTL_ALREADY_ON if the CPU is already on.
  88 * QEMU_ARM_POWERCTL_ON_PENDING if the CPU is already partway through
  89 * powering on.
  90 */
  91int arm_set_cpu_on_and_reset(uint64_t cpuid);
  92
  93#endif
  94