L4Re Operating System Framework
Interface and Usage Documentation
Loading...
Searching...
No Matches
pi_mutex.h
Go to the documentation of this file.
1
5/*
6 * Copyright (C) 2025-2026 Kernkonzept GmbH.
7 * Author(s): Georg Kotheimer <georg.kotheimer@kernkonzept.com>
8 *
9 * License: see LICENSE.spdx (in this directory or the directories above)
10 */
11
12#pragma once
13
14#include <l4/sys/types.h>
15#include <l4/sys/utcb.h>
16
49
74
79l4_pi_mutex_lock_u(l4_cap_idx_t mutex, l4_timeout_t timeout,
80 l4_utcb_t *utcb) L4_NOTHROW;
81
96
101l4_pi_mutex_unlock_u(l4_cap_idx_t mutex, l4_utcb_t *utcb) L4_NOTHROW;
102 /* ends l4_pi_mutex_api group */
104
105
119
120/* IMPLEMENTATION -----------------------------------------------------------*/
121
122#include <l4/sys/ipc.h>
123
125l4_pi_mutex_lock_u(l4_cap_idx_t mutex, l4_timeout_t timeout,
126 l4_utcb_t *utcb) L4_NOTHROW
127{
128 l4_msg_regs_t *v = l4_utcb_mr_u(utcb);
129 v->mr[0] = L4_PI_MUTEX_LOCK_OP;
130 return l4_ipc_call(mutex, utcb, l4_msgtag(L4_PROTO_PI_MUTEX, 1, 0, 0),
131 timeout);
132}
133
135l4_pi_mutex_unlock_u(l4_cap_idx_t mutex, l4_utcb_t *utcb) L4_NOTHROW
136{
137 l4_msg_regs_t *v = l4_utcb_mr_u(utcb);
139 return l4_ipc_call(mutex, utcb, l4_msgtag(L4_PROTO_PI_MUTEX, 1, 0, 0),
141}
142
143
146{
147 return l4_pi_mutex_lock_u(mutex, timeout, l4_utcb());
148}
149
152{
153 return l4_pi_mutex_unlock_u(mutex, l4_utcb());
154}
unsigned long l4_cap_idx_t
Capability selector type.
Definition types.h:372
l4_msgtag_t l4_ipc_call(l4_cap_idx_t object, l4_utcb_t *utcb, l4_msgtag_t tag, l4_timeout_t timeout) L4_NOTHROW
Object call (usual invocation).
Definition ipc.h:598
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:441
@ L4_PROTO_PI_MUTEX
Protocol for priority inheritance mutex.
Definition types.h:84
l4_msgtag_t l4_pi_mutex_unlock(l4_cap_idx_t mutex) L4_NOTHROW
Unlock contended priority inheritance mutex from fast path or slow path.
Definition pi_mutex.h:151
l4_msgtag_t l4_pi_mutex_lock(l4_cap_idx_t mutex, l4_timeout_t timeout) L4_NOTHROW
Lock contended priority inheritance mutex on slow path.
Definition pi_mutex.h:145
L4_pi_mutex_ops
Operations on priority inheritance mutex objects.
Definition pi_mutex.h:115
@ L4_PI_MUTEX_LOCK_OP
Lock mutex.
Definition pi_mutex.h:116
@ L4_PI_MUTEX_UNLOCK_OP
Unlock mutex.
Definition pi_mutex.h:117
#define L4_IPC_NEVER
never timeout
Definition __timeout.h:76
struct l4_utcb_t l4_utcb_t
Opaque type for the UTCB.
Definition utcb.h:56
l4_utcb_t * l4_utcb(void) L4_NOTHROW L4_PURE
Get the UTCB address.
Definition utcb.h:369
#define L4_NOTHROW
Mark a function declaration and definition as never throwing an exception.
Definition compiler.h:167
#define L4_INLINE
L4 Inline function attribute.
Definition compiler.h:51
Common IPC interface.
Common L4 ABI Data Types.
UTCB definitions.
Message tag data structure.
Definition types.h:269
Encapsulation of the message-register block in the UTCB.
Definition utcb.h:133
l4_umword_t mr[L4_UTCB_GENERIC_DATA_SIZE]
Message registers.
Definition utcb.h:134
Timeout pair.
Definition __timeout.h:53