qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

arm-powerctl.h (3035B)


      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  */
     30 CPUState *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  */
     49 int 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 
     63 int 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  */
     75 int 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  */
     91 int arm_set_cpu_on_and_reset(uint64_t cpuid);
     92 
     93 #endif