93 lines
1.8 KiB
C
93 lines
1.8 KiB
C
/*
|
|
* Copyright (C) 2019 Intel Corporation.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#ifndef SGX_H
|
|
#define SGX_H
|
|
|
|
#define CPUID_SGX_LEAF 0x12U
|
|
#define CPUID_SGX_EPC_SUBLEAF_BASE 0x2U
|
|
#define CPUID_SGX_EPC_TYPE_MASK 0xFU
|
|
#define CPUID_SGX_EPC_TYPE_INVALID 0x0U
|
|
#define CPUID_SGX_EPC_TYPE_VALID 0x1U
|
|
#define CPUID_SGX_EPC_HIGH_MASK 0x000FFFFFU
|
|
#define CPUID_SGX_EPC_LOW_MASK 0xFFFFF000U
|
|
|
|
#define MAX_EPC_SECTIONS 4U
|
|
/**
|
|
* @file sgx.h
|
|
*
|
|
* @brief public APIs for SGX
|
|
*/
|
|
|
|
/**
|
|
* @brief SGX
|
|
*
|
|
* @defgroup acrn_sgx ACRN SGX
|
|
* @{
|
|
*/
|
|
|
|
struct epc_section
|
|
{
|
|
uint64_t base; /* EPC section base, must be page aligned */
|
|
uint64_t size; /* EPC section size in byte, must be page aligned */
|
|
};
|
|
|
|
struct epc_map
|
|
{
|
|
uint64_t hpa; /* EPC reource address in host, must be page aligned */
|
|
uint64_t gpa; /* EPC reource address in guest, must be page aligned */
|
|
uint64_t size; /* EPC reource size in byte, must be page aligned */
|
|
};
|
|
|
|
/**
|
|
* @brief Get physcial EPC sections of the platform.
|
|
*
|
|
* @retval Physical EPC sections of the platform
|
|
*
|
|
*/
|
|
struct epc_section* get_phys_epc(void);
|
|
|
|
/**
|
|
* @brief Get EPC resource information for a specific VM.
|
|
*
|
|
* @param[in] vm_id VM ID to specify a VM
|
|
*
|
|
* @retval EPC sections for a VM
|
|
*
|
|
* @pre vm_id < CONFIG_MAX_VM_NUM
|
|
*
|
|
*/
|
|
struct epc_map* get_epc_mapping(uint16_t vm_id);
|
|
|
|
/**
|
|
* @brief If SGX support is enabled or not for a specific VM.
|
|
*
|
|
* @param[in] vm_id VM ID to specify a VM
|
|
*
|
|
* @retval True when SGX is supported in the specific VM
|
|
* @retval False When SGX is not supported in the specific VM
|
|
*
|
|
* @pre vm_id < CONFIG_MAX_VM_NUM
|
|
*
|
|
*/
|
|
bool is_vsgx_supported(uint16_t vm_id);
|
|
|
|
/**
|
|
* @brief SGX initialization.
|
|
*
|
|
* Init SGX and parition EPC resource for VMs.
|
|
*
|
|
* @retval 0 on success
|
|
* @retval <0 on failure
|
|
*
|
|
*/
|
|
int32_t init_sgx(void);
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif
|