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: BSD-2-Clause
6 */
7
8#pragma once
9
10#ifdef HAVE_AUTOCONF
11#include <autoconf.h>
12#endif
13
14#define seL4_WordBits           64
15/* log 2 bits in a word */
16#define seL4_WordSizeBits       3
17
18#define seL4_SlotBits           5
19#ifdef CONFIG_KERNEL_MCS
20#define seL4_NotificationBits   6
21#define seL4_ReplyBits          5
22#else
23#define seL4_NotificationBits   5
24#endif
25#define seL4_EndpointBits       4
26#define seL4_IPCBufferSizeBits  10
27#ifdef CONFIG_HAVE_FPU
28#define seL4_TCBBits            11
29#else
30#define seL4_TCBBits            10
31#endif
32
33/* Sv39/Sv48 pages/ptes sizes */
34#define seL4_PageTableEntryBits 3
35#define seL4_PageTableIndexBits 9
36
37#define seL4_PageBits          12
38#define seL4_LargePageBits     21
39#define seL4_HugePageBits      30
40#define seL4_TeraPageBits      39
41#define seL4_PageTableBits     12
42#define seL4_VSpaceBits        seL4_PageTableBits
43
44#define seL4_NumASIDPoolsBits   7
45#define seL4_ASIDPoolIndexBits  9
46#define seL4_ASIDPoolBits       12
47
48/* Untyped size limits */
49#define seL4_MinUntypedBits     4
50#define seL4_MaxUntypedBits     38
51#ifndef __ASSEMBLER__
52
53typedef enum {
54    seL4_VMFault_IP,
55    seL4_VMFault_Addr,
56    seL4_VMFault_PrefetchFault,
57    seL4_VMFault_FSR,
58    seL4_VMFault_Length,
59} seL4_VMFault_Msg;
60
61typedef enum {
62    seL4_UnknownSyscall_FaultIP,
63    seL4_UnknownSyscall_SP,
64    seL4_UnknownSyscall_RA,
65    seL4_UnknownSyscall_A0,
66    seL4_UnknownSyscall_A1,
67    seL4_UnknownSyscall_A2,
68    seL4_UnknownSyscall_A3,
69    seL4_UnknownSyscall_A4,
70    seL4_UnknownSyscall_A5,
71    seL4_UnknownSyscall_A6,
72    seL4_UnknownSyscall_Syscall,
73    seL4_UnknownSyscall_Length,
74} seL4_UnknownSyscall_Msg;
75
76typedef enum {
77    seL4_UserException_FaultIP,
78    seL4_UserException_SP,
79    seL4_UserException_Number,
80    seL4_UserException_Code,
81    seL4_UserException_Length,
82} seL4_UserException_Msg;
83
84#ifdef CONFIG_KERNEL_MCS
85typedef enum {
86    seL4_TimeoutReply_FaultIP,
87    seL4_TimeoutReply_LR,
88    seL4_TimeoutReply_SP,
89    seL4_TimeoutReply_GP,
90    seL4_TimeoutReply_s0,
91    seL4_TimeoutReply_s1,
92    seL4_TimeoutReply_s2,
93    seL4_TimeoutReply_s3,
94    seL4_TimeoutReply_s4,
95    seL4_TimeoutReply_s5,
96    seL4_TimeoutReply_s6,
97    seL4_TimeoutReply_s7,
98    seL4_TimeoutReply_s8,
99    seL4_TimeoutReply_s9,
100    seL4_TimeoutReply_s10,
101    seL4_TimeoutReply_s11,
102    seL4_TimeoutReply_a0,
103    seL4_TimeoutReply_a1,
104    seL4_TimeoutReply_a2,
105    seL4_TimeoutReply_a3,
106    seL4_TimeoutReply_a4,
107    seL4_TimeoutReply_a5,
108    seL4_TimeoutReply_a6,
109    seL4_TimeoutReply_a7,
110    seL4_TimeoutReply_t0,
111    seL4_TimeoutReply_t1,
112    seL4_TimeoutReply_t2,
113    seL4_TimeoutReply_t3,
114    seL4_TimeoutReply_t4,
115    seL4_TimeoutReply_t5,
116    seL4_TimeoutReply_t6,
117    seL4_TimeoutReply_TP,
118    seL4_TimeoutReply_Length,
119} seL4_TimeoutReply_Msg;
120
121typedef enum {
122    seL4_Timeout_Data,
123    seL4_Timeout_Consumed,
124    seL4_Timeout_Length,
125} seL4_TimeoutMsg;
126#endif
127#endif /* __ASSEMBLER__ */
128
129/* First address in the virtual address space that is not accessible to user level */
130#define seL4_UserTop 0x0000003ffffff000
131
132#ifdef CONFIG_ENABLE_BENCHMARKS
133/* size of kernel log buffer in bytes */
134#define seL4_LogBufferSize (LIBSEL4_BIT(20))
135#endif /* CONFIG_ENABLE_BENCHMARKS */
136