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 <config.h>
10#include <types.h>
11#include <api/failures.h>
12#include <api/types.h>
13#include <object/structures.h>
14#include <object/cnode.h>
15
16/* It is assumed that every untyped is within seL4_MinUntypedBits and seL4_MaxUntypedBits
17 * (inclusive). This means that every untyped stored as seL4_MinUntypedBits
18 * subtracted from its size before it is stored in capBlockSize, and
19 * capFreeIndex counts in chunks of size 2^seL4_MinUntypedBits. The seL4_MaxUntypedBits
20 * is the minimal untyped that can be stored when considering both how
21 * many bits of capBlockSize there are, and the largest offset that can
22 * be stored in capFreeIndex */
23#define MAX_FREE_INDEX(sizeBits) (BIT((sizeBits) - seL4_MinUntypedBits))
24#define FREE_INDEX_TO_OFFSET(freeIndex) ((freeIndex)<<seL4_MinUntypedBits)
25#define GET_FREE_REF(base,freeIndex) ((word_t)(((word_t)(base)) + FREE_INDEX_TO_OFFSET(freeIndex)))
26#define GET_FREE_INDEX(base,free) (((word_t)(free) - (word_t)(base))>>seL4_MinUntypedBits)
27#define GET_OFFSET_FREE_PTR(base, offset) ((void *)(((word_t)(base)) + (offset)))
28#define OFFSET_TO_FREE_INDEX(offset) ((offset)>>seL4_MinUntypedBits)
29
30exception_t decodeUntypedInvocation(word_t invLabel, word_t length,
31                                    cte_t *slot, cap_t cap,
32                                    extra_caps_t excaps, bool_t call,
33                                    word_t *buffer);
34exception_t invokeUntyped_Retype(cte_t *srcSlot, bool_t reset,
35                                 void *retypeBase, object_t newType,
36                                 word_t userSize, slot_range_t destSlots,
37                                 bool_t deviceMemory);
38