blob: 6dd1e8885f30808967b31ca096d13b15ae77e4d3 [file] [log] [blame]
#ifndef _VMAPI_HF_HVC_H
#define _VMAPI_HF_HVC_H
#include <stddef.h>
/* Keep macro alignment */
/* clang-format off */
/* Return values for vcpu_run() hypervisor call. */
#define HF_VCPU_YIELD 0x00
#define HF_VCPU_WAIT_FOR_INTERRUPT 0x01
#define HF_VCPU_WAKE_UP 0x02
#define HF_VCPU_RESPONSE_READY 0x03
/* TODO: Define constants below according to spec. */
#define HF_VCPU_RUN 0xff00
#define HF_VM_GET_COUNT 0xff01
#define HF_VCPU_GET_COUNT 0xff02
#define HF_VM_CONFIGURE 0xff03
#define HF_RPC_REQUEST 0xff04
#define HF_RPC_READ_REQUEST 0xff05
#define HF_RPC_ACK 0xff06
#define HF_RPC_REPLY 0xff07
/* clang-format on */
/*
* This function must be implemented to trigger the architecture specific call
* to the hypervisor.
*/
long hf_call(size_t arg0, size_t arg1, size_t arg2, size_t arg3);
/*
* Returns the number of secondary VMs.
*/
static inline long hf_vm_get_count(void)
{
return hf_call(HF_VM_GET_COUNT, 0, 0, 0);
}
/*
* Returns the number of VCPUs configured in the given secondary VM.
*/
static inline long hf_vcpu_get_count(size_t vm_idx)
{
return hf_call(HF_VCPU_GET_COUNT, vm_idx, 0, 0);
}
#endif /* _VMAPI_HF_HVC_H */