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
20bool_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
31word_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