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