L4Re Operating System Framework
Interface and Usage Documentation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
rm.h
Go to the documentation of this file.
1
5/*
6 * (c) 2008-2009 Adam Lackorzynski <adam@os.inf.tu-dresden.de>,
7 * Alexander Warg <warg@os.inf.tu-dresden.de>
8 * economic rights: Technische Universität Dresden (Germany)
9 *
10 * License: see LICENSE.spdx (in this directory or the directories above)
11 */
12#pragma once
13
20#include <l4/re/env.h>
21#include <l4/re/c/dataspace.h>
22
24
30 L4RE_RM_F_R = L4RE_DS_F_R,
31 L4RE_RM_F_W = L4RE_DS_F_W,
32 L4RE_RM_F_X = L4RE_DS_F_X,
33 L4RE_RM_F_RX = L4RE_DS_F_RX,
34 L4RE_RM_F_RW = L4RE_DS_F_RW,
35 L4RE_RM_F_RWX = L4RE_DS_F_RWX,
36
45
50
53
56
58 L4RE_RM_F_IN_AREA = 0x040000,
62};
63
64typedef l4_uint32_t l4re_rm_flags_t;
65typedef l4_uint64_t l4re_rm_offset_t;
66
76l4re_rm_reserve_area(l4_addr_t *start, unsigned long size,
77 l4re_rm_flags_t flags, unsigned char align) L4_NOTHROW;
78
89
141l4re_rm_attach(void **start, unsigned long size, l4re_rm_flags_t flags,
142 l4re_ds_t mem, l4re_rm_offset_t offs,
143 unsigned char align) L4_NOTHROW;
144
145
164l4re_rm_detach(void *addr) L4_NOTHROW;
165
186l4re_rm_detach_ds(void *addr, l4re_ds_t *ds) L4_NOTHROW;
187
201
217l4re_rm_detach_ds_unmap(void *addr, l4re_ds_t *ds,
219
220
228l4re_rm_find(l4_addr_t *addr, unsigned long *size,
229 l4re_rm_offset_t *offset,
230 l4re_rm_flags_t *flags, l4re_ds_t *m) L4_NOTHROW;
231
241 char *name, unsigned int len,
242 l4re_rm_offset_t *backing_offset) L4_NOTHROW;
243
244
251L4_CV L4_INLINE void
253
254
255/*
256 * Variants of functions that also take a capability of the region map
257 * service.
258 */
259
260
265L4_CV int
266l4re_rm_reserve_area_srv(l4_cap_idx_t rm, l4_addr_t *start, unsigned long size,
267 l4re_rm_flags_t flags, unsigned char align) L4_NOTHROW;
268
273L4_CV int
275
280L4_CV int
281l4re_rm_attach_srv(l4_cap_idx_t rm, void **start, unsigned long size,
282 l4re_rm_flags_t flags, l4re_ds_t mem,
283 l4re_rm_offset_t offs,
284 unsigned char align) L4_NOTHROW;
285
286
291L4_CV int
294
295
300L4_CV int
302 unsigned long *size, l4re_rm_offset_t *offset,
303 l4re_rm_flags_t *flags, l4re_ds_t *m) L4_NOTHROW;
304
305
310L4_CV int
312 char *name, unsigned int len,
313 l4re_rm_offset_t *backing_offset) L4_NOTHROW;
314
319L4_CV void
321
322
323/********** Implementations ***************************/
324
326l4re_rm_reserve_area(l4_addr_t *start, unsigned long size,
327 l4re_rm_flags_t flags, unsigned char align) L4_NOTHROW
328{
329 return l4re_rm_reserve_area_srv(l4re_global_env->rm, start, size,
330 flags, align);
331}
332
335{
336 return l4re_rm_free_area_srv(l4re_global_env->rm, addr);
337}
338
340l4re_rm_attach(void **start, unsigned long size, l4re_rm_flags_t flags,
341 l4re_ds_t mem, l4re_rm_offset_t offs,
342 unsigned char align) L4_NOTHROW
343{
344 return l4re_rm_attach_srv(l4re_global_env->rm, start, size,
345 flags, mem, offs, align);
346}
347
348
351{
352 return l4re_rm_detach_srv(l4re_global_env->rm,
353 (l4_addr_t)addr, 0, L4_BASE_TASK_CAP);
354}
355
358{
359 return l4re_rm_detach_srv(l4re_global_env->rm, addr, 0, task);
360}
361
364{
365 return l4re_rm_detach_srv(l4re_global_env->rm, (l4_addr_t)addr,
366 ds, L4_BASE_TASK_CAP);
367}
368
371{
372 return l4re_rm_detach_srv(l4re_global_env->rm, (l4_addr_t)addr,
373 ds, task);
374}
375
377l4re_rm_find(l4_addr_t *addr, unsigned long *size,
378 l4re_rm_offset_t *offset,
379 l4re_rm_flags_t *flags, l4re_ds_t *m) L4_NOTHROW
380{
381 return l4re_rm_find_srv(l4re_global_env->rm, addr, size, offset, flags, m);
382}
383
384L4_CV L4_INLINE void
386{
387 l4re_rm_show_lists_srv(l4re_global_env->rm);
388}
389
390
391
393l4re_rm_get_info(l4_addr_t addr, char *name, unsigned int len,
394 l4re_rm_offset_t *backing_offset) L4_NOTHROW
395{
396 return l4re_rm_get_info_srv(l4re_global_env->rm, addr, name, len,
397 backing_offset);
398}
399
Data space C interface.
Environment interface.
l4_cap_idx_t l4re_ds_t
Dataspace type.
Definition dataspace.h:28
@ L4RE_DS_F_BUFFERABLE
request bufferable (write buffered) mappings
Definition dataspace.h:59
@ L4RE_DS_F_NORMAL
request normal memory mapping
Definition dataspace.h:57
@ L4RE_DS_F_CACHING_MASK
mask for caching flags
Definition dataspace.h:61
@ L4RE_DS_F_UNCACHEABLE
request uncacheable memory mappings
Definition dataspace.h:60
int l4re_rm_attach(void **start, unsigned long size, l4re_rm_flags_t flags, l4re_ds_t mem, l4re_rm_offset_t offs, unsigned char align) L4_NOTHROW
Attach a data space to a region.
Definition rm.h:340
int l4re_rm_detach(void *addr) L4_NOTHROW
Detach and unmap a region from the address space in the current task.
Definition rm.h:350
void l4re_rm_show_lists_srv(l4_cap_idx_t rm) L4_NOTHROW
Dump region map internal data structures.
int l4re_rm_attach_srv(l4_cap_idx_t rm, void **start, unsigned long size, l4re_rm_flags_t flags, l4re_ds_t mem, l4re_rm_offset_t offs, unsigned char align) L4_NOTHROW
int l4re_rm_reserve_area_srv(l4_cap_idx_t rm, l4_addr_t *start, unsigned long size, l4re_rm_flags_t flags, unsigned char align) L4_NOTHROW
void l4re_rm_show_lists(void) L4_NOTHROW
Dump region map internal data structures.
Definition rm.h:385
int l4re_rm_find(l4_addr_t *addr, unsigned long *size, l4re_rm_offset_t *offset, l4re_rm_flags_t *flags, l4re_ds_t *m) L4_NOTHROW
Find a region given an address and size.
Definition rm.h:377
int l4re_rm_get_info(l4_addr_t addr, char *name, unsigned int len, l4re_rm_offset_t *backing_offset) L4_NOTHROW
Return auxiliary information of a region.
Definition rm.h:393
int l4re_rm_detach_ds(void *addr, l4re_ds_t *ds) L4_NOTHROW
Detach and unmap a region and return affected dataspace in the current task.
Definition rm.h:363
int l4re_rm_detach_srv(l4_cap_idx_t rm, l4_addr_t addr, l4re_ds_t *ds, l4_cap_idx_t task) L4_NOTHROW
int l4re_rm_detach_unmap(l4_addr_t addr, l4_cap_idx_t task) L4_NOTHROW
Detach and unmap in specified task.
Definition rm.h:357
l4re_rm_flags_values
Flags for region operations.
Definition rm.h:29
int l4re_rm_find_srv(l4_cap_idx_t rm, l4_addr_t *addr, unsigned long *size, l4re_rm_offset_t *offset, l4re_rm_flags_t *flags, l4re_ds_t *m) L4_NOTHROW
int l4re_rm_free_area_srv(l4_cap_idx_t rm, l4_addr_t addr) L4_NOTHROW
int l4re_rm_reserve_area(l4_addr_t *start, unsigned long size, l4re_rm_flags_t flags, unsigned char align) L4_NOTHROW
Reserve the given area in the region map.
Definition rm.h:326
int l4re_rm_detach_ds_unmap(void *addr, l4re_ds_t *ds, l4_cap_idx_t task) L4_NOTHROW
Detach and unmap in specified task.
Definition rm.h:370
int l4re_rm_free_area(l4_addr_t addr) L4_NOTHROW
Free an area from the region map.
Definition rm.h:334
int l4re_rm_get_info_srv(l4_cap_idx_t rm, l4_addr_t addr, char *name, unsigned int len, l4re_rm_offset_t *backing_offset) L4_NOTHROW
@ L4RE_RM_F_CACHE_BUFFERED
Cache bits for buffered (write combining) memory.
Definition rm.h:52
@ L4RE_RM_REGION_FLAGS
Mask of all region flags.
Definition rm.h:46
@ L4RE_RM_F_CACHE_UNCACHED
Cache bits for uncached memory.
Definition rm.h:55
@ L4RE_RM_CACHING_SHIFT
Start of region mapper cache bits.
Definition rm.h:41
@ L4RE_RM_F_NO_EAGER_MAP
Prevent eager mapping of the attached data space.
Definition rm.h:60
@ L4RE_RM_F_SEARCH_ADDR
Search for a suitable address range.
Definition rm.h:57
@ L4RE_RM_F_PAGER
Region has a pager.
Definition rm.h:38
@ L4RE_RM_F_R
Region is read-only.
Definition rm.h:30
@ L4RE_RM_F_IN_AREA
Search only in area, or map into area.
Definition rm.h:58
@ L4RE_RM_F_CACHE_NORMAL
Cache bits for normal cacheable memory.
Definition rm.h:49
@ L4RE_RM_F_ATTACH_FLAGS
Mask of all attach flags.
Definition rm.h:61
@ L4RE_RM_F_RESERVED
Region is reserved (blocked)
Definition rm.h:39
@ L4RE_RM_F_EAGER_MAP
Eagerly map the attached data space in.
Definition rm.h:59
@ L4RE_RM_F_NO_ALIAS
The region contains exclusive memory that is not mapped anywhere else.
Definition rm.h:37
@ L4RE_RM_F_CACHING
Mask of all region manager cache bits.
Definition rm.h:44
unsigned long l4_addr_t
Address type.
Definition l4int.h:34
unsigned int l4_uint32_t
Unsigned 32bit value.
Definition l4int.h:29
unsigned long long l4_uint64_t
Unsigned 64bit value.
Definition l4int.h:31
unsigned long l4_cap_idx_t
Capability selector type.
Definition types.h:335
@ L4_BASE_TASK_CAP
Capability selector for the current task.
Definition consts.h:327
#define __END_DECLS
End section with C types and functions.
Definition compiler.h:167
#define L4_CV
Define calling convention.
Definition linkage.h:33
#define L4_NOTHROW
Mark a function declaration and definition as never throwing an exception.
Definition compiler.h:159
#define L4_INLINE
L4 Inline function attribute.
Definition compiler.h:51
#define __BEGIN_DECLS
Start section with C types and functions.
Definition compiler.h:164
l4_cap_idx_t rm
Region map object-capability.
Definition env.h:101