libnx v4.9.0
Loading...
Searching...
No Matches
shmem.h
Go to the documentation of this file.
1/**
2 * @file shmem.h
3 * @brief Shared memory object handling
4 * @author plutoo
5 * @copyright libnx Authors
6 * @remark Shared memory differs from transfer memory in the fact that the kernel (as opposed to the user process) allocates and owns its backing memory.
7 */
8#pragma once
9#include "../types.h"
10
11/// Shared memory information structure.
12typedef struct {
13 Handle handle; ///< Kernel object handle.
14 size_t size; ///< Size of the shared memory object.
15 Permission perm; ///< Permissions.
16 void* map_addr; ///< Address to which the shared memory object is mapped.
18
19/**
20 * @brief Creates a shared memory object.
21 * @param s Shared memory information structure which will be filled in.
22 * @param size Size of the shared memory object to create.
23 * @param local_perm Permissions with which the shared memory object will be mapped in the local process.
24 * @param remote_perm Permissions with which the shared memory object will be mapped in the remote process (can be Perm_DontCare).
25 * @return Result code.
26 * @warning This is a privileged operation; in normal circumstances applications cannot use this function.
27 */
28Result shmemCreate(SharedMemory* s, size_t size, Permission local_perm, Permission remote_perm);
29
30/**
31 * @brief Loads a shared memory object coming from a remote process.
32 * @param s Shared memory information structure which will be filled in.
33 * @param handle Handle of the shared memory object.
34 * @param size Size of the shared memory object that is being loaded.
35 * @param perm Permissions with which the shared memory object will be mapped in the local process.
36 */
37void shmemLoadRemote(SharedMemory* s, Handle handle, size_t size, Permission perm);
38
39/**
40 * @brief Maps a shared memory object.
41 * @param s Shared memory information structure.
42 * @return Result code.
43 */
45
46/**
47 * @brief Unmaps a shared memory object.
48 * @param s Shared memory information structure.
49 * @return Result code.
50 */
52
53/**
54 * @brief Retrieves the mapped address of a shared memory object.
55 * @param s Shared memory information structure.
56 * @return Mapped address of the shared memory object.
57 */
58static inline void* shmemGetAddr(SharedMemory* s) {
59 return s->map_addr;
60}
61
62/**
63 * @brief Frees up resources used by a shared memory object, unmapping and closing handles, etc.
64 * @param s Shared memory information structure.
65 * @return Result code.
66 */
Result shmemUnmap(SharedMemory *s)
Unmaps a shared memory object.
void shmemLoadRemote(SharedMemory *s, Handle handle, size_t size, Permission perm)
Loads a shared memory object coming from a remote process.
static void * shmemGetAddr(SharedMemory *s)
Retrieves the mapped address of a shared memory object.
Definition shmem.h:58
Result shmemMap(SharedMemory *s)
Maps a shared memory object.
Result shmemCreate(SharedMemory *s, size_t size, Permission local_perm, Permission remote_perm)
Creates a shared memory object.
Result shmemClose(SharedMemory *s)
Frees up resources used by a shared memory object, unmapping and closing handles, etc.
Shared memory information structure.
Definition shmem.h:12
size_t size
Size of the shared memory object.
Definition shmem.h:14
Permission perm
Permissions.
Definition shmem.h:15
Handle handle
Kernel object handle.
Definition shmem.h:13
void * map_addr
Address to which the shared memory object is mapped.
Definition shmem.h:16
Permission
Memory permission bitmasks.
Definition svc.h:80
u32 Handle
Kernel object handle.
Definition types.h:43
u32 Result
Function error code result type.
Definition types.h:44