1/* 2 * Copyright 2014, General Dynamics C4 Systems 3 * 4 * SPDX-License-Identifier: GPL-2.0-only 5 */ 6 7#pragma once 8 9#include <types.h> 10#include <api/failures.h> 11#include <object/cnode.h> 12#include <object/structures.h> 13#include <plat/machine/hardware.h> 14#include <object/cap.h> 15#include <arch/object/objecttype.h> 16#include <object/interrupt.h> 17 18deriveCap_ret_t deriveCap(cte_t *slot, cap_t cap); 19finaliseCap_ret_t finaliseCap(cap_t cap, bool_t final, bool_t exposed); 20bool_t CONST hasCancelSendRights(cap_t cap); 21bool_t CONST sameRegionAs(cap_t cap_a, cap_t cap_b); 22bool_t CONST sameObjectAs(cap_t cap_a, cap_t cap_b); 23cap_t CONST updateCapData(bool_t preserve, word_t newData, cap_t cap); 24cap_t CONST maskCapRights(seL4_CapRights_t seL4_CapRights, cap_t cap); 25cap_t createObject(object_t t, void *regionBase, word_t, bool_t deviceMemory); 26void createNewObjects(object_t t, cte_t *parent, slot_range_t slots, 27 void *regionBase, word_t userSize, bool_t deviceMemory); 28#ifdef CONFIG_KERNEL_MCS 29exception_t decodeInvocation(word_t invLabel, word_t length, 30 cptr_t capIndex, cte_t *slot, cap_t cap, 31 extra_caps_t excaps, bool_t block, bool_t call, 32 bool_t canDonate, bool_t firstPhase, word_t *buffer); 33exception_t performInvocation_Endpoint(endpoint_t *ep, word_t badge, 34 bool_t canGrant, bool_t canGrantReply, 35 bool_t block, bool_t call, bool_t canDonate); 36exception_t performInvocation_Notification(notification_t *ntfn, 37 word_t badge); 38exception_t performInvocation_Reply(tcb_t *thread, reply_t *reply, bool_t canGrant); 39#else 40exception_t decodeInvocation(word_t invLabel, word_t length, 41 cptr_t capIndex, cte_t *slot, cap_t cap, 42 extra_caps_t excaps, bool_t block, bool_t call, 43 word_t *buffer); 44exception_t performInvocation_Endpoint(endpoint_t *ep, word_t badge, 45 bool_t canGrant, bool_t canGrantReply, 46 bool_t block, bool_t call); 47exception_t performInvocation_Notification(notification_t *ntfn, 48 word_t badge); 49exception_t performInvocation_Reply(tcb_t *thread, cte_t *slot, bool_t canGrant); 50#endif 51word_t getObjectSize(word_t t, word_t userObjSize); 52 53static inline void postCapDeletion(cap_t cap) 54{ 55 if (cap_get_capType(cap) == cap_irq_handler_cap) { 56 irq_t irq = IDX_TO_IRQT(cap_irq_handler_cap_get_capIRQ(cap)); 57 deletedIRQHandler(irq); 58 } else if (isArchCap(cap)) { 59 Arch_postCapDeletion(cap); 60 } 61} 62 63