Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/sgx/sgx.c
Show First 20 Lines • Show All 1,069 Lines • ▼ Show 20 Lines | sgx_get_epc_area(struct sgx_softc *sc) | ||||
cpuid_count(SGX_CPUID, 0x2, cp); | cpuid_count(SGX_CPUID, 0x2, cp); | ||||
sc->epc_base = ((uint64_t)(cp[1] & 0xfffff) << 32) + | sc->epc_base = ((uint64_t)(cp[1] & 0xfffff) << 32) + | ||||
(cp[0] & 0xfffff000); | (cp[0] & 0xfffff000); | ||||
sc->epc_size = ((uint64_t)(cp[3] & 0xfffff) << 32) + | sc->epc_size = ((uint64_t)(cp[3] & 0xfffff) << 32) + | ||||
(cp[2] & 0xfffff000); | (cp[2] & 0xfffff000); | ||||
sc->npages = sc->epc_size / SGX_PAGE_SIZE; | sc->npages = sc->epc_size / SGX_PAGE_SIZE; | ||||
if (sc->epc_size == 0 || sc->epc_base == 0) { | |||||
printf("%s: Incorrect EPC data: EPC base %lx, size %lu\n", | |||||
__func__, sc->epc_base, sc->epc_size); | |||||
return (EINVAL); | |||||
} | |||||
if (cp[3] & 0xffff) | if (cp[3] & 0xffff) | ||||
sc->enclave_size_max = (1 << ((cp[3] >> 8) & 0xff)); | sc->enclave_size_max = (1 << ((cp[3] >> 8) & 0xff)); | ||||
else | else | ||||
sc->enclave_size_max = SGX_ENCL_SIZE_MAX_DEF; | sc->enclave_size_max = SGX_ENCL_SIZE_MAX_DEF; | ||||
epc_base_vaddr = (vm_offset_t)pmap_mapdev_attr(sc->epc_base, | epc_base_vaddr = (vm_offset_t)pmap_mapdev_attr(sc->epc_base, | ||||
sc->epc_size, VM_MEMATTR_DEFAULT); | sc->epc_size, VM_MEMATTR_DEFAULT); | ||||
▲ Show 20 Lines • Show All 129 Lines • Show Last 20 Lines |