1/* 2 * Copyright 2014, General Dynamics C4 Systems 3 * 4 * This software may be distributed and modified according to the terms of 5 * the GNU General Public License version 2. Note that NO WARRANTY is provided. 6 * See "LICENSE_GPLv2.txt" for details. 7 * 8 * @TAG(GD_GPL) 9 */ 10 11#ifndef __OBJECT_OBJECTTYPE_H 12#define __OBJECT_OBJECTTYPE_H 13 14#include <types.h> 15#include <api/failures.h> 16#include <object/cnode.h> 17#include <object/structures.h> 18#include <plat/machine/hardware.h> 19#include <object/cap.h> 20#include <arch/object/objecttype.h> 21#include <object/interrupt.h> 22 23deriveCap_ret_t deriveCap(cte_t *slot, cap_t cap); 24finaliseCap_ret_t finaliseCap(cap_t cap, bool_t final, bool_t exposed); 25bool_t CONST hasCancelSendRights(cap_t cap); 26bool_t CONST sameRegionAs(cap_t cap_a, cap_t cap_b); 27bool_t CONST sameObjectAs(cap_t cap_a, cap_t cap_b); 28cap_t CONST updateCapData(bool_t preserve, word_t newData, cap_t cap); 29cap_t CONST maskCapRights(seL4_CapRights_t seL4_CapRights, cap_t cap); 30cap_t createObject(object_t t, void *regionBase, word_t, bool_t deviceMemory); 31void createNewObjects(object_t t, cte_t *parent, slot_range_t slots, 32 void *regionBase, word_t userSize, bool_t deviceMemory); 33exception_t decodeInvocation(word_t invLabel, word_t length, 34 cptr_t capIndex, cte_t *slot, cap_t cap, 35 extra_caps_t excaps, bool_t block, bool_t call, 36 word_t *buffer); 37exception_t performInvocation_Endpoint(endpoint_t *ep, word_t badge, 38 bool_t canGrant, bool_t block, 39 bool_t call); 40exception_t performInvocation_Notification(notification_t *ntfn, 41 word_t badge); 42exception_t performInvocation_Reply(tcb_t *thread, cte_t *slot); 43word_t getObjectSize(word_t t, word_t userObjSize); 44 45static inline void 46postCapDeletion(cap_t cap) 47{ 48 if (cap_get_capType(cap) == cap_irq_handler_cap) { 49 irq_t irq = cap_irq_handler_cap_get_capIRQ(cap); 50 deletedIRQHandler(irq); 51 } else if (isArchCap(cap)) { 52 Arch_postCapDeletion(cap); 53 } 54} 55 56#endif 57