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