1 /* 2 * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 /* 8 * @file shmem.h 9 * @brief Shared memory primitives for libmetal. 10 */ 11 12 #ifndef __METAL_SHMEM__H__ 13 #define __METAL_SHMEM__H__ 14 15 #include <metal/io.h> 16 17 #ifdef __cplusplus 18 extern "C" { 19 #endif 20 21 /** \defgroup shmem Shared Memory Interfaces 22 * @{ */ 23 24 /** Generic shared memory data structure. */ 25 struct metal_generic_shmem { 26 const char *name; 27 struct metal_io_region io; 28 struct metal_list node; 29 }; 30 31 /** 32 * @brief Open a libmetal shared memory segment. 33 * 34 * Open a shared memory segment. 35 * 36 * @param[in] name Name of segment to open. 37 * @param[in] size Size of segment. 38 * @param[out] io I/O region handle, if successful. 39 * @return 0 on success, or -errno on failure. 40 * 41 * @see metal_shmem_create 42 */ 43 extern int metal_shmem_open(const char *name, size_t size, 44 struct metal_io_region **io); 45 46 /** 47 * @brief Statically register a generic shared memory region. 48 * 49 * Shared memory regions may be statically registered at application 50 * initialization, or may be dynamically opened. This interface is used for 51 * static registration of regions. Subsequent calls to metal_shmem_open() look 52 * up in this list of pre-registered regions. 53 * 54 * @param[in] shmem Generic shmem structure. 55 * @return 0 on success, or -errno on failure. 56 */ 57 extern int metal_shmem_register_generic(struct metal_generic_shmem *shmem); 58 59 #ifdef METAL_INTERNAL 60 61 /** 62 * @brief Open a statically registered shmem segment. 63 * 64 * This interface is meant for internal libmetal use within system specific 65 * shmem implementations. 66 * 67 * @param[in] name Name of segment to open. 68 * @param[in] size Size of segment. 69 * @param[out] io I/O region handle, if successful. 70 * @return 0 on success, or -errno on failure. 71 */ 72 int metal_shmem_open_generic(const char *name, size_t size, 73 struct metal_io_region **result); 74 75 #endif 76 77 /** @} */ 78 79 #ifdef __cplusplus 80 } 81 #endif 82 83 #endif /* __METAL_SHMEM__H__ */ 84