L4Re Operating System Framework
Interface and Usage Documentation
Loading...
Searching...
No Matches
types.h
Go to the documentation of this file.
1/*****************************************************************************/
7/*
8 * (c) 2008-2013 Adam Lackorzynski <adam@os.inf.tu-dresden.de>,
9 * Alexander Warg <warg@os.inf.tu-dresden.de>,
10 * Björn Döbel <doebel@os.inf.tu-dresden.de>,
11 * Torsten Frenzel <frenzel@os.inf.tu-dresden.de>
12 * economic rights: Technische Universität Dresden (Germany)
13 *
14 * This file is part of TUD:OS and distributed under the terms of the
15 * GNU General Public License 2.
16 * Please see the COPYING-GPL-2 file for details.
17 *
18 * As a special exception, you may use this file as part of a free software
19 * library without restriction. Specifically, if other files instantiate
20 * templates or use macros or inline functions from this file, or you compile
21 * this file and link it with other files to produce an executable, this
22 * file does not by itself cause the resulting executable to be covered by
23 * the GNU General Public License. This exception does not however
24 * invalidate any other reasons why the executable file might be covered by
25 * the GNU General Public License.
26 */
27/*****************************************************************************/
28#pragma once
29
30#include <l4/sys/l4int.h>
31#include <l4/sys/compiler.h>
32#include <l4/sys/consts.h>
33
34
79
80enum L4_varg_type
81{
82 L4_VARG_TYPE_NIL = 0x00,
83 L4_VARG_TYPE_UMWORD = 0x01,
84 L4_VARG_TYPE_MWORD = 0x81,
85 L4_VARG_TYPE_STRING = 0x02,
86 L4_VARG_TYPE_FPAGE = 0x03,
87
88 L4_VARG_TYPE_SIGN = 0x80,
89};
90
91
97{
98 // flags for received IPC
104
105 // flags for sending IPC
137 L4_MSGTAG_PROPAGATE = 0x4000,
138
144};
145
146
163typedef struct l4_msgtag_t
164{
166#ifdef __cplusplus
168 long label() const L4_NOTHROW { return raw >> 16; }
170 void label(long v) L4_NOTHROW { raw = (raw & 0x0ffff) | ((l4_umword_t)v << 16); }
172 unsigned words() const L4_NOTHROW { return raw & 0x3f; }
174 unsigned items() const L4_NOTHROW { return (raw >> 6) & 0x3f; }
181 unsigned flags() const L4_NOTHROW { return raw & 0xf000; }
183 bool is_page_fault() const L4_NOTHROW { return label() == L4_PROTO_PAGE_FAULT; }
185 bool is_preemption() const L4_NOTHROW { return label() == L4_PROTO_PREEMPTION; }
189 bool is_exception() const L4_NOTHROW { return label() == L4_PROTO_EXCEPTION; }
191 bool is_sigma0() const L4_NOTHROW { return label() == L4_PROTO_SIGMA0; }
195 unsigned has_error() const L4_NOTHROW { return raw & L4_MSGTAG_ERROR; }
196#endif
198
199
200
212L4_INLINE l4_msgtag_t l4_msgtag(long label, unsigned words, unsigned items,
213 unsigned flags) L4_NOTHROW;
214
224
234
244
256
270
280
289
299
309
319
329
359typedef unsigned long l4_cap_idx_t;
360
371
382
397
407
408/* ************************************************************************* */
409/* Implementation */
410
411L4_INLINE unsigned
413{ return c & L4_INVALID_CAP_BIT; }
414
415L4_INLINE unsigned
417{ return !(c & L4_INVALID_CAP_BIT); }
418
419L4_INLINE unsigned
422
423
428l4_msgtag_t l4_msgtag(long label, unsigned words, unsigned items,
429 unsigned flags) L4_NOTHROW
430{
431 return (l4_msgtag_t){ (l4_mword_t)((l4_umword_t)label << 16)
432 | (l4_mword_t)(words & 0x3f)
433 | (l4_mword_t)((items & 0x3f) << 6)
434 | (l4_mword_t)(flags & 0xf000)};
435}
436
437
438
441{ return t.raw >> 16; }
442
445{ return t.raw & 0x3f; }
446
449{ return (t.raw >> 6) & 0x3f; }
450
453{ return t.raw & 0xf000; }
454
455
459
460
461
464
467
470
473
476
479
482
483#include <l4/sys/__l4_fpage.h>
484#include <l4/sys/__timeout.h>
L4 compiler related defines.
unsigned long l4_umword_t
Unsigned machine word.
Definition l4int.h:51
signed long l4_mword_t
Signed machine word.
Definition l4int.h:48
unsigned long l4_cap_idx_t
Capability selector type.
Definition types.h:359
unsigned l4_is_invalid_cap(l4_cap_idx_t c) L4_NOTHROW
Test if a capability selector is the invalid capability.
Definition types.h:412
unsigned l4_capability_equal(l4_cap_idx_t c1, l4_cap_idx_t c2) L4_NOTHROW
Test if the capability indices of two capability selectors are equal.
Definition types.h:420
unsigned l4_is_valid_cap(l4_cap_idx_t c) L4_NOTHROW
Test if a capability selector is a valid selector.
Definition types.h:416
@ L4_CAP_OFFSET
Offset of two consecutive capability selectors.
Definition consts.h:161
@ L4_CAP_SHIFT
Capability index shift.
Definition consts.h:157
unsigned l4_msgtag_is_sigma0(l4_msgtag_t t) L4_NOTHROW
Test for sigma0 protocol.
Definition types.h:474
unsigned l4_msgtag_is_exception(l4_msgtag_t t) L4_NOTHROW
Test for exception protocol.
Definition types.h:471
L4_msgtag_flags
Flags for message tags.
Definition types.h:97
unsigned l4_msgtag_items(l4_msgtag_t t) L4_NOTHROW
Get the number of typed items.
Definition types.h:448
unsigned l4_msgtag_is_io_page_fault(l4_msgtag_t t) L4_NOTHROW
Test for IO-page-fault protocol.
Definition types.h:477
unsigned l4_msgtag_has_error(l4_msgtag_t t) L4_NOTHROW
Test for error indicator flag.
Definition types.h:457
l4_msgtag_t l4_msgtag(long label, unsigned words, unsigned items, unsigned flags) L4_NOTHROW
Create a message tag from the specified values.
Definition types.h:428
unsigned l4_msgtag_words(l4_msgtag_t t) L4_NOTHROW
Get the number of untyped words.
Definition types.h:444
L4_msgtag_protocol
Message tag for IPC operations.
Definition types.h:50
unsigned l4_msgtag_flags(l4_msgtag_t t) L4_NOTHROW
Get the flags.
Definition types.h:452
long l4_msgtag_label(l4_msgtag_t t) L4_NOTHROW
Get the protocol of tag.
Definition types.h:440
unsigned l4_msgtag_is_page_fault(l4_msgtag_t t) L4_NOTHROW
Test for page-fault protocol.
Definition types.h:462
unsigned l4_msgtag_is_preemption(l4_msgtag_t t) L4_NOTHROW
Test for preemption protocol.
Definition types.h:465
unsigned l4_msgtag_is_sys_exception(l4_msgtag_t t) L4_NOTHROW
Test for system-exception protocol.
Definition types.h:468
@ L4_MSGTAG_FLAGS
Mask for all flags.
Definition types.h:143
@ L4_MSGTAG_ERROR
Error indicator flag.
Definition types.h:103
@ L4_MSGTAG_SCHEDULE
Enable schedule in IPC flag.
Definition types.h:124
@ L4_MSGTAG_TRANSFER_FPU
Enable FPU transfer flag for IPC.
Definition types.h:115
@ L4_PROTO_IRQ
IRQ message.
Definition types.h:55
@ L4_PROTO_FACTORY
Protocol for messages to a factory object.
Definition types.h:67
@ L4_PROTO_DMA_SPACE
Protocol for (creating) kernel DMA space objects.
Definition types.h:69
@ L4_PROTO_SCHEDULER
Protocol for messages to a scheduler object.
Definition types.h:66
@ L4_PROTO_SYS_EXCEPTION
System exception.
Definition types.h:58
@ L4_PROTO_EXCEPTION
Exception.
Definition types.h:59
@ L4_PROTO_IRQ_SENDER
Protocol for IRQ senders (IRQ -> IPC)
Definition types.h:70
@ L4_PROTO_PREEMPTION
Preemption message.
Definition types.h:57
@ L4_PROTO_KOBJECT
Protocol for messages to a generic kobject.
Definition types.h:62
@ L4_PROTO_TASK
Protocol for messages to a task object.
Definition types.h:63
@ L4_PROTO_IO_PAGE_FAULT
I/O page fault message.
Definition types.h:61
@ L4_PROTO_NONE
Default protocol tag to reply to kernel.
Definition types.h:51
@ L4_PROTO_VM
Protocol for messages to a virtual machine object.
Definition types.h:68
@ L4_PROTO_SIGMA0
Sigma0 protocol.
Definition types.h:60
@ L4_PROTO_THREAD
Protocol for messages to a thread object.
Definition types.h:64
@ L4_PROTO_PF_EXCEPTION
Make an exception out of a page fault.
Definition types.h:53
@ L4_PROTO_META
Meta information protocol.
Definition types.h:73
@ L4_PROTO_IRQ_MUX
Protocol for IRQ mux (IRQ -> n x IRQ)
Definition types.h:71
@ L4_PROTO_PAGE_FAULT
Page fault message.
Definition types.h:56
@ L4_PROTO_IOMMU
Protocol ID for IO-MMUs.
Definition types.h:74
@ L4_PROTO_ALLOW_SYSCALL
Allow an alien the system call.
Definition types.h:52
@ L4_PROTO_SEMAPHORE
Protocol for semaphore objects.
Definition types.h:72
@ L4_PROTO_LOG
Protocol for messages to a log object.
Definition types.h:65
@ L4_PROTO_DEBUGGER
Protocol ID for the debugger.
Definition types.h:75
@ L4_PROTO_VCPU_CONTEXT
Protocol for hardware vCPU contexts.
Definition types.h:77
@ L4_PROTO_SMCCC
Protocol ID for ARM SMCCC calls.
Definition types.h:76
#define L4_NOTHROW
Mark a function declaration and definition as never throwing an exception.
Definition compiler.h:188
#define L4_INLINE
L4 Inline function attribute.
Definition compiler.h:62
l4_cap_idx_t l4_capability_next(l4_cap_idx_t c) L4_NOTHROW
Get the next capability selector after c.
Definition types.h:480
Message tag data structure.
Definition types.h:164
long label() const L4_NOTHROW
Get the protocol value.
Definition types.h:168
unsigned has_error() const L4_NOTHROW
Test if flags indicate an error.
Definition types.h:195
bool is_page_fault() const L4_NOTHROW
Test if protocol indicates page-fault protocol.
Definition types.h:183
bool is_sigma0() const L4_NOTHROW
Test if protocol indicates sigma0 protocol.
Definition types.h:191
bool is_preemption() const L4_NOTHROW
Test if protocol indicates preemption protocol.
Definition types.h:185
void label(long v) L4_NOTHROW
Set the protocol value.
Definition types.h:170
bool is_exception() const L4_NOTHROW
Test if protocol indicates exception protocol.
Definition types.h:189
bool is_sys_exception() const L4_NOTHROW
Test if protocol indicates system-exception protocol.
Definition types.h:187
unsigned words() const L4_NOTHROW
Get the number of untyped words.
Definition types.h:172
bool is_io_page_fault() const L4_NOTHROW
Test if protocol indicates IO-page-fault protocol.
Definition types.h:193
unsigned items() const L4_NOTHROW
Get the number of typed items.
Definition types.h:174
l4_mword_t raw
raw value
Definition types.h:165
unsigned flags() const L4_NOTHROW
Get the flags value.
Definition types.h:181