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