1/* 2 * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230) 3 * 4 * SPDX-License-Identifier: GPL-2.0-only 5 */ 6 7#pragma once 8 9#include <config.h> 10#include <object/structures.h> 11 12#ifdef CONFIG_VTX 13 14struct EPTPDPTMapped_ret { 15 ept_pml4e_t *pml4; 16 ept_pml4e_t *pml4Slot; 17 exception_t status; 18}; 19typedef struct EPTPDPTMapped_ret EPTPDPTMapped_ret_t; 20 21struct EPTPageDirectoryMapped_ret { 22 ept_pml4e_t *pml4; 23 ept_pdpte_t *pdptSlot; 24 exception_t status; 25}; 26typedef struct EPTPageDirectoryMapped_ret EPTPageDirectoryMapped_ret_t; 27 28struct EPTPageTableMapped_ret { 29 ept_pml4e_t *pml4; 30 ept_pde_t *pdSlot; 31 exception_t status; 32}; 33typedef struct EPTPageTableMapped_ret EPTPageTableMapped_ret_t; 34 35struct findEPTForASID_ret { 36 exception_t status; 37 ept_pml4e_t *ept; 38}; 39typedef struct findEPTForASID_ret findEPTForASID_ret_t; 40 41EPTPDPTMapped_ret_t EPTPDPTMapped(asid_t asid, vptr_t vptr, ept_pdpte_t *pdpt); 42EPTPageDirectoryMapped_ret_t EPTPageDirectoryMapped(asid_t asid, vptr_t vaddr, ept_pde_t *pd); 43EPTPageTableMapped_ret_t EPTPageTableMapped(asid_t asid, vptr_t vaddr, ept_pte_t *pt); 44findEPTForASID_ret_t findEPTForASID(asid_t asid); 45 46void deleteEPTASID(asid_t asid, ept_pml4e_t *ept); 47exception_t decodeX86EPTInvocation(word_t invLabel, word_t length, cptr_t cptr, cte_t *cte, cap_t cap, 48 extra_caps_t excaps, word_t *buffer); 49exception_t decodeX86EPTPDInvocation(word_t invLabel, word_t length, cte_t *cte, cap_t cap, extra_caps_t excaps, 50 word_t *buffer); 51exception_t decodeX86EPTPTInvocation(word_t invLabel, word_t length, cte_t *cte, cap_t cap, extra_caps_t excaps, 52 word_t *buffer); 53exception_t decodeX86EPTPageMap(word_t invLabel, word_t length, cte_t *cte, cap_t cap, extra_caps_t excaps, 54 word_t *buffer); 55exception_t performX86EPTPageInvocationUnmap(cap_t cap, cte_t *ctSlot); 56void unmapEPTPDPT(asid_t asid, vptr_t vaddr, ept_pdpte_t *pdpt); 57void unmapEPTPageDirectory(asid_t asid, vptr_t vaddr, ept_pde_t *pd); 58void unmapEPTPageTable(asid_t asid, vptr_t vaddr, ept_pte_t *pt); 59void unmapEPTPage(vm_page_size_t page_size, asid_t asid, vptr_t vptr, void *pptr); 60 61#endif /* CONFIG_VTX */ 62 63