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 #include <types.h>
9 #include <object.h>
10 #include <kernel/vspace.h>
11 #include <api/faults.h>
12 #include <api/syscall.h>
13 
14 #include <types.h>
15 #include <machine/io.h>
16 #include <api/faults.h>
17 #include <api/syscall.h>
18 #include <util.h>
19 
Arch_handleFaultReply(tcb_t * receiver,tcb_t * sender,word_t faultType)20 bool_t Arch_handleFaultReply(tcb_t *receiver, tcb_t *sender, word_t faultType)
21 {
22     switch (faultType) {
23     case seL4_Fault_VMFault:
24         return true;
25 
26     default:
27         fail("Invalid fault");
28     }
29 }
30 
Arch_setMRs_fault(tcb_t * sender,tcb_t * receiver,word_t * receiveIPCBuffer,word_t faultType)31 word_t Arch_setMRs_fault(tcb_t *sender, tcb_t *receiver, word_t *receiveIPCBuffer, word_t faultType)
32 {
33     switch (faultType) {
34     case seL4_Fault_VMFault: {
35         setMR(receiver, receiveIPCBuffer, seL4_VMFault_IP, getRestartPC(sender));
36         setMR(receiver, receiveIPCBuffer, seL4_VMFault_Addr,
37               seL4_Fault_VMFault_get_address(sender->tcbFault));
38         setMR(receiver, receiveIPCBuffer, seL4_VMFault_PrefetchFault,
39               seL4_Fault_VMFault_get_instructionFault(sender->tcbFault));
40         return setMR(receiver, receiveIPCBuffer, seL4_VMFault_FSR,
41                      seL4_Fault_VMFault_get_FSR(sender->tcbFault));
42     }
43     default:
44         fail("Invalid fault");
45     }
46 }
47