1/* 2 * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230) 3 * Copyright 2015, 2016 Hesham Almatary <heshamelmatary@gmail.com> 4 * 5 * SPDX-License-Identifier: GPL-2.0-only 6 */ 7 8#pragma once 9 10#include <types.h> 11#include <api/failures.h> 12#include <object/structures.h> 13 14cap_t create_it_address_space(cap_t root_cnode_cap, v_region_t it_v_reg); 15void map_it_pt_cap(cap_t vspace_cap, cap_t pt_cap); 16void map_it_frame_cap(cap_t vspace_cap, cap_t frame_cap); 17void map_kernel_window(void); 18void map_kernel_frame(paddr_t paddr, pptr_t vaddr, vm_rights_t vm_rights); 19void activate_kernel_vspace(void); 20void write_it_asid_pool(cap_t it_ap_cap, cap_t it_lvl1pt_cap); 21 22 23/* ==================== BOOT CODE FINISHES HERE ==================== */ 24#define IT_ASID 1 25 26void idle_thread(void); 27#define idleThreadStart (&idle_thread) 28 29struct lookupPTSlot_ret { 30 pte_t *ptSlot; 31 word_t ptBitsLeft; 32}; 33 34typedef struct lookupPTSlot_ret lookupPTSlot_ret_t; 35 36struct findVSpaceForASID_ret { 37 exception_t status; 38 pte_t *vspace_root; 39}; 40typedef struct findVSpaceForASID_ret findVSpaceForASID_ret_t; 41 42void copyGlobalMappings(pte_t *newlvl1pt); 43word_t *PURE lookupIPCBuffer(bool_t isReceiver, tcb_t *thread); 44lookupPTSlot_ret_t lookupPTSlot(pte_t *lvl1pt, vptr_t vptr); 45exception_t handleVMFault(tcb_t *thread, vm_fault_type_t vm_faultType); 46void unmapPageTable(asid_t, vptr_t vaddr, pte_t *pt); 47void unmapPage(vm_page_size_t page_size, asid_t asid, vptr_t vptr, pptr_t pptr); 48void deleteASID(asid_t asid, pte_t *vspace); 49void deleteASIDPool(asid_t asid_base, asid_pool_t *pool); 50bool_t CONST isValidVTableRoot(cap_t cap); 51exception_t checkValidIPCBuffer(vptr_t vptr, cap_t cap); 52vm_rights_t CONST maskVMRights(vm_rights_t vm_rights, 53 seL4_CapRights_t cap_rights_mask); 54exception_t decodeRISCVMMUInvocation(word_t label, word_t length, cptr_t cptr, 55 cte_t *cte, cap_t cap, extra_caps_t extraCaps, 56 word_t *buffer); 57exception_t performPageTableInvocationMap(cap_t cap, cte_t *ctSlot, 58 pte_t lvl1pt, pte_t *ptSlot); 59exception_t performPageTableInvocationUnmap(cap_t cap, cte_t *ctSlot); 60exception_t performPageInvocationMapPTE(cap_t cap, cte_t *ctSlot, 61 pte_t pte, pte_t *base); 62exception_t performPageInvocationUnmap(cap_t cap, cte_t *ctSlot); 63void setVMRoot(tcb_t *tcb); 64 65#ifdef CONFIG_PRINTING 66void Arch_userStackTrace(tcb_t *tptr); 67#endif 68 69