1/*
2 * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <autoconf.h>
10#include <sel4/macros.h>
11
12#define EXCEPT_IPC_LENGTH SEL4_DEPRECATE_MACRO(seL4_UnknownSyscall_Length)
13
14typedef seL4_Word seL4_UserExceptIPCRegister SEL4_DEPRECATED("use seL4_UserException_Msg");
15
16#define EXCEPT_IPC_USER_MR_FAULT_IP  SEL4_DEPRECATE_MACRO(seL4_UserException_FaultIP)
17#define EXCEPT_IPC_USER_MR_ESP SEL4_DEPRECATE_MACRO(seL4_UserException_SP)
18#define EXCEPT_IPC_USER_MR_EFLAGS SEL4_DEPRECATE_MACRO(seL4_UserException_EFLAGS)
19#define EXCEPT_IPC_USER_MR_NUMBER SEL4_DEPRECATE_MACRO(seL4_UserException_Number)
20#define EXCEPT_IPC_USER_MR_CODE SEL4_DEPRECATE_MACRO(seL4_UserException_Code)
21#define SEL4_USER_EXCEPT_IPC_LENGTH
22
23typedef seL4_Word seL4_ExceptIPCRegister SEL4_DEPRECATED("use seL4_UnknownSyscall_Msg");
24
25#define EXCEPT_IPC_SYS_MR_EAX SEL4_DEPRECATE_MACRO(seL4_UnknownSyscall_EAX)
26#define EXCEPT_IPC_SYS_MR_EBX SEL4_DEPRECATE_MACRO(seL4_UnknownSyscall_EBX)
27#define EXCEPT_IPC_SYS_MR_ECX SEL4_DEPRECATE_MACRO(seL4_UnknownSyscall_ECX)
28#define EXCEPT_IPC_SYS_MR_EDX SEL4_DEPRECATE_MACRO(seL4_UnknownSyscall_EDX)
29#define EXCEPT_IPC_SYS_MR_ESI SEL4_DEPRECATE_MACRO(seL4_UnknownSyscall_ESI)
30#define EXCEPT_IPC_SYS_MR_EDI SEL4_DEPRECATE_MACRO(seL4_UnknownSyscall_EDI)
31#define EXCEPT_IPC_SYS_MR_EBP SEL4_DEPRECATE_MACRO(seL4_UnknownSyscall_EBP)
32#define EXCEPT_IPC_SYS_MR_EIP SEL4_DEPRECATE_MACRO(seL4_UnknownSyscall_FaultIP)
33#define EXCEPT_IPC_SYS_MR_ESP SEL4_DEPRECATE_MACRO(seL4_UnknownSyscall_SP)
34#define EXCEPT_IPC_SYS_MR_EFLAGS SEL4_DEPRECATE_MACRO(seL4_UnknownSyscall_FLAGS)
35#define EXCEPT_IPC_SYS_MR_SYSCALL SEL4_DEPRECATE_MACRO(seL4_UnknownSyscall_Syscall)
36#define SEL4_EXCEPT_IPC_LENGTH SEL4_DEPRECATE_MACRO(seL4_UnknownSyscall_Length)
37
38typedef union {
39    struct {
40        seL4_Word fault_ip;
41        seL4_Word esp;
42        seL4_Word eflags;
43        seL4_Word exception_number;
44        seL4_Word exception_code;
45    } regs;
46    seL4_Word raw[5];
47}   seL4_UserExceptionIpcRegisters SEL4_DEPRECATED("Use seL4_Fault_t");
48
49typedef union {
50    struct {
51        seL4_Word eax;
52        seL4_Word ebx;
53        seL4_Word ecx;
54        seL4_Word edx;
55        seL4_Word esi;
56        seL4_Word edi;
57        seL4_Word ebp;
58        seL4_Word eip;
59        seL4_Word esp;
60        seL4_Word eflags;
61        seL4_Word syscall;
62    } regs;
63    seL4_Word raw[11];
64} seL4_ExceptionIpcRegisters SEL4_DEPRECATED("Use seL4_Fault_t");
65
66
67static inline SEL4_DEPRECATED("") seL4_Bool seL4_Fault_isWriteFault(seL4_Word FaultStatusRegister)
68{
69    return (FaultStatusRegister & 0x2);
70}
71
72static inline SEL4_DEPRECATED("") seL4_Bool seL4_Fault_isReadFault(seL4_Word FaultStatusRegister)
73{
74    return !(FaultStatusRegister & 0x2);
75}
76
77static inline SEL4_DEPRECATED("") seL4_Bool seL4_Fault_isProtectionFault(seL4_Word FaultStatusRegister)
78{
79    return (FaultStatusRegister & 0x1);
80}
81
82static inline SEL4_DEPRECATED("") seL4_Bool seL4_Fault_isNonPresentFault(seL4_Word FaultStatusRegister)
83{
84    return !(FaultStatusRegister & 0x1);
85}
86
87