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
18 deriveCap_ret_t deriveCap(cte_t *slot, cap_t cap);
19 finaliseCap_ret_t finaliseCap(cap_t cap, bool_t final, bool_t exposed);
20 bool_t CONST hasCancelSendRights(cap_t cap);
21 bool_t CONST sameRegionAs(cap_t cap_a, cap_t cap_b);
22 bool_t CONST sameObjectAs(cap_t cap_a, cap_t cap_b);
23 cap_t CONST updateCapData(bool_t preserve, word_t newData, cap_t cap);
24 cap_t CONST maskCapRights(seL4_CapRights_t seL4_CapRights, cap_t cap);
25 cap_t createObject(object_t t, void *regionBase, word_t, bool_t deviceMemory);
26 void createNewObjects(object_t t, cte_t *parent,
27 cte_t *destCNode, word_t destOffset, word_t destLength,
28 void *regionBase, word_t userSize, bool_t deviceMemory);
29 #ifdef CONFIG_KERNEL_MCS
30 exception_t decodeInvocation(word_t invLabel, word_t length,
31 cptr_t capIndex, cte_t *slot, cap_t cap,
32 bool_t block, bool_t call,
33 bool_t canDonate, bool_t firstPhase, word_t *buffer);
34 exception_t performInvocation_Endpoint(endpoint_t *ep, word_t badge,
35 bool_t canGrant, bool_t canGrantReply,
36 bool_t block, bool_t call, bool_t canDonate);
37 exception_t performInvocation_Notification(notification_t *ntfn,
38 word_t badge);
39 exception_t performInvocation_Reply(tcb_t *thread, reply_t *reply, bool_t canGrant);
40 #else
41 exception_t decodeInvocation(word_t invLabel, word_t length,
42 cptr_t capIndex, cte_t *slot, cap_t cap,
43 bool_t block, bool_t call, word_t *buffer);
44 exception_t performInvocation_Endpoint(endpoint_t *ep, word_t badge,
45 bool_t canGrant, bool_t canGrantReply,
46 bool_t block, bool_t call);
47 exception_t performInvocation_Notification(notification_t *ntfn,
48 word_t badge);
49 exception_t performInvocation_Reply(tcb_t *thread, cte_t *slot, bool_t canGrant);
50 #endif
51 word_t getObjectSize(word_t t, word_t userObjSize);
52
postCapDeletion(cap_t cap)53 static 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 word_t CONST cap_get_capSizeBits(cap_t cap);
64 bool_t CONST cap_get_capIsPhysical(cap_t cap);
65 void *CONST cap_get_capPtr(cap_t cap);
66 bool_t CONST isCapRevocable(cap_t derivedCap, cap_t srcCap);
67