L4Re - L4 Runtime Environment
ipc.h
1 
7 /*
8  * (c) 2008-2009 Adam Lackorzynski <adam@os.inf.tu-dresden.de>,
9  * Alexander Warg <warg@os.inf.tu-dresden.de>,
10  * Frank Mehnert <fm3@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 #ifndef __L4SYS__INCLUDE__ARCH_AMD64__L4API_L4F__IPC_H__
28 #define __L4SYS__INCLUDE__ARCH_AMD64__L4API_L4F__IPC_H__
29 
30 #include_next <l4/sys/ipc.h>
31 
32 L4_INLINE l4_msgtag_t
34  l4_umword_t flags,
35  l4_umword_t slabel,
36  l4_msgtag_t tag,
37  l4_umword_t *rlabel,
38  l4_timeout_t timeout) L4_NOTHROW
39 {
40  l4_umword_t dummy, dummy2;
41  register l4_umword_t to __asm__("r8") = timeout.raw;
42 
43  (void)utcb;
44 
45  __asm__ __volatile__
46  ("syscall"
47  :
48  "=d" (dummy2),
49  "=S" (slabel),
50  "=D" (dummy),
51  "=a" (tag.raw)
52  :
53  "S" (slabel),
54  "r" (to),
55  "a" (tag.raw),
56  "d" (dest | flags)
57  :
58  "memory", "cc", "rcx", "r11", "r15"
59  );
60 
61  if (rlabel)
62  *rlabel = slabel;
63 
64  return tag;
65 }
66 
67 #endif /* ! __L4SYS__INCLUDE__ARCH_AMD64__L4API_L4F__IPC_H__ */
unsigned long l4_cap_idx_t
L4 Capability selector Type.
Definition: types.h:342
struct l4_utcb_t l4_utcb_t
Opaque type for the UTCB.
Definition: utcb.h:67
Timeout pair.
Definition: __timeout.h:57
L4_ALWAYS_INLINE l4_msgtag_t l4_ipc(l4_cap_idx_t dest, l4_utcb_t *utcb, l4_umword_t flags, l4_umword_t slabel, l4_msgtag_t tag, l4_umword_t *rlabel, l4_timeout_t timeout) L4_NOTHROW
Generic L4 object invocation.
Definition: ipc.h:34
unsigned long l4_umword_t
Unsigned machine word.
Definition: l4int.h:52
Message tag data structure.
Definition: types.h:159
#define L4_NOTHROW
Mark a function declaration and definition as never throwing an exception.
Definition: compiler.h:185