1/* 2 * Copyright 2014, General Dynamics C4 Systems 3 * 4 * SPDX-License-Identifier: GPL-2.0-only 5 */ 6 7#pragma once 8 9#include <config.h> 10#include <types.h> 11#include <api/failures.h> 12#include <object/structures.h> 13#include <mode/kernel/vspace.h> 14 15#define IT_ASID 1 /* initial thread's ASID */ 16 17cap_t create_it_address_space(cap_t root_cnode_cap, v_region_t it_v_reg); 18bool_t create_device_frames(cap_t root_cnode_cap); 19cap_t create_unmapped_it_frame_cap(pptr_t pptr, bool_t use_large); 20cap_t create_mapped_it_frame_cap(cap_t pd_cap, pptr_t pptr, vptr_t vptr, asid_t asid, bool_t use_large, 21 bool_t executable); 22 23void map_kernel_window(void); 24void map_kernel_frame(paddr_t paddr, pptr_t vaddr, vm_rights_t vm_rights, vm_attributes_t vm_attributes); 25void activate_global_pd(void); 26void write_it_asid_pool(cap_t it_ap_cap, cap_t it_pd_cap); 27 28/* ==================== BOOT CODE FINISHES HERE ==================== */ 29 30void idle_thread(void); 31#define idleThreadStart (&idle_thread) 32 33/* need a fake array to get the pointer from the linker script */ 34extern char arm_vector_table[1]; 35 36word_t *PURE lookupIPCBuffer(bool_t isReceiver, tcb_t *thread); 37exception_t handleVMFault(tcb_t *thread, vm_fault_type_t vm_faultType); 38pde_t *pageTableMapped(asid_t asid, vptr_t vaddr, pte_t *pt); 39void setVMRoot(tcb_t *tcb); 40bool_t CONST isValidVTableRoot(cap_t cap); 41exception_t checkValidIPCBuffer(vptr_t vptr, cap_t cap); 42 43vm_rights_t CONST maskVMRights(vm_rights_t vm_rights, 44 seL4_CapRights_t cap_rights_mask); 45 46exception_t decodeARMMMUInvocation(word_t invLabel, word_t length, cptr_t cptr, 47 cte_t *cte, cap_t cap, extra_caps_t excaps, 48 word_t *buffer); 49 50#ifdef CONFIG_PRINTING 51void Arch_userStackTrace(tcb_t *tptr); 52#endif 53 54