mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
68 lines
2.5 KiB
C
68 lines
2.5 KiB
C
/**
|
|
* @file shmem.h
|
|
* @brief Shared memory object handling
|
|
* @author plutoo
|
|
* @copyright libnx Authors
|
|
* @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.
|
|
*/
|
|
#pragma once
|
|
#include "../types.h"
|
|
|
|
/// Shared memory information structure.
|
|
typedef struct {
|
|
Handle handle; ///< Kernel object handle.
|
|
size_t size; ///< Size of the shared memory object.
|
|
Permission perm; ///< Permissions.
|
|
void* map_addr; ///< Address to which the shared memory object is mapped.
|
|
} SharedMemory;
|
|
|
|
/**
|
|
* @brief Creates a shared memory object.
|
|
* @param s Shared memory information structure which will be filled in.
|
|
* @param size Size of the shared memory object to create.
|
|
* @param local_perm Permissions with which the shared memory object will be mapped in the local process.
|
|
* @param remote_perm Permissions with which the shared memory object will be mapped in the remote process (can be Perm_DontCare).
|
|
* @return Result code.
|
|
* @warning This is a privileged operation; in normal circumstances applications cannot use this function.
|
|
*/
|
|
Result shmemCreate(SharedMemory* s, size_t size, Permission local_perm, Permission remote_perm);
|
|
|
|
/**
|
|
* @brief Loads a shared memory object coming from a remote process.
|
|
* @param s Shared memory information structure which will be filled in.
|
|
* @param handle Handle of the shared memory object.
|
|
* @param size Size of the shared memory object that is being loaded.
|
|
* @param perm Permissions with which the shared memory object will be mapped in the local process.
|
|
*/
|
|
void shmemLoadRemote(SharedMemory* s, Handle handle, size_t size, Permission perm);
|
|
|
|
/**
|
|
* @brief Maps a shared memory object.
|
|
* @param s Shared memory information structure.
|
|
* @return Result code.
|
|
*/
|
|
Result shmemMap(SharedMemory* s);
|
|
|
|
/**
|
|
* @brief Unmaps a shared memory object.
|
|
* @param s Shared memory information structure.
|
|
* @return Result code.
|
|
*/
|
|
Result shmemUnmap(SharedMemory* s);
|
|
|
|
/**
|
|
* @brief Retrieves the mapped address of a shared memory object.
|
|
* @param s Shared memory information structure.
|
|
* @return Mapped address of the shared memory object.
|
|
*/
|
|
static inline void* shmemGetAddr(SharedMemory* s) {
|
|
return s->map_addr;
|
|
}
|
|
|
|
/**
|
|
* @brief Frees up resources used by a shared memory object, unmapping and closing handles, etc.
|
|
* @param s Shared memory information structure.
|
|
* @return Result code.
|
|
*/
|
|
Result shmemClose(SharedMemory* s);
|