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/structures.h>
12 
13 exception_t decodeCNodeInvocation(word_t invLabel, word_t length,
14                                   cap_t cap, word_t *buffer);
15 exception_t invokeCNodeRevoke(cte_t *destSlot);
16 exception_t invokeCNodeDelete(cte_t *destSlot);
17 exception_t invokeCNodeCancelBadgedSends(cap_t cap);
18 exception_t invokeCNodeInsert(cap_t cap, cte_t *srcSlot, cte_t *destSlot);
19 exception_t invokeCNodeMove(cap_t cap, cte_t *srcSlot, cte_t *destSlot);
20 exception_t invokeCNodeRotate(cap_t cap1, cap_t cap2, cte_t *slot1,
21                               cte_t *slot2, cte_t *slot3);
22 void cteInsert(cap_t newCap, cte_t *srcSlot, cte_t *destSlot);
23 void cteMove(cap_t newCap, cte_t *srcSlot, cte_t *destSlot);
24 void capSwapForDelete(cte_t *slot1, cte_t *slot2);
25 void cteSwap(cap_t cap1, cte_t *slot1, cap_t cap2, cte_t *slot2);
26 exception_t cteRevoke(cte_t *slot);
27 exception_t cteDelete(cte_t *slot, bool_t exposed);
28 void cteDeleteOne(cte_t *slot);
29 void insertNewCap(cte_t *parent, cte_t *slot, cap_t cap);
30 bool_t PURE isMDBParentOf(cte_t *cte_a, cte_t *cte_b);
31 exception_t ensureNoChildren(cte_t *slot);
32 exception_t ensureEmptySlot(cte_t *slot);
33 bool_t PURE isFinalCapability(cte_t *cte);
34 bool_t PURE slotCapLongRunningDelete(cte_t *slot);
35 cte_t *getReceiveSlots(tcb_t *thread, word_t *buffer);
36 cap_transfer_t PURE loadCapTransfer(word_t *buffer);
37 
38 #ifndef CONFIG_KERNEL_MCS
39 exception_t invokeCNodeSaveCaller(cte_t *destSlot);
40 void setupReplyMaster(tcb_t *thread);
41 #endif
42 
43