1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ 2 /* 3 * Copyright (c) 2004-2008 The Trustees of Indiana University and Indiana 4 * University Research and Technology 5 * Corporation. All rights reserved. 6 * Copyright (c) 2004-2005 The University of Tennessee and The University 7 * of Tennessee Research Foundation. All rights 8 * reserved. 9 * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, 10 * University of Stuttgart. All rights reserved. 11 * Copyright (c) 2004-2005 The Regents of the University of California. 12 * All rights reserved. 13 * Copyright (c) 2007-2015 Cisco Systems, Inc. All rights reserved. 14 * Copyright (c) 2009 Sun Microsystems, Inc. All rights reserved. 15 * Copyright (c) 2010 IBM Corporation. All rights reserved. 16 * Copyright (c) 2010-2015 Los Alamos National Security, LLC. 17 * All rights reserved. 18 * $COPYRIGHT$ 19 * 20 * Additional copyrights may follow 21 * 22 * $HEADER$ 23 */ 24 25 /** 26 * @file 27 * 28 * shmem (shared memory backing facility) framework component interface 29 * definitions. 30 * 31 * usage example: see ompi/mca/common/sm 32 * 33 * The module has the following functions: 34 * 35 * - module_init 36 * - segment_create 37 * - ds_copy 38 * - segment_attach 39 * - segment_detach 40 * - unlink 41 * - module_finalize 42 */ 43 44 #ifndef OPAL_SHMEM_H 45 #define OPAL_SHMEM_H 46 47 #include "opal_config.h" 48 49 #include "opal/mca/mca.h" 50 #include "opal/mca/base/base.h" 51 52 #include "opal/mca/shmem/shmem_types.h" 53 54 BEGIN_C_DECLS 55 56 /* ////////////////////////////////////////////////////////////////////////// */ 57 typedef int 58 (*mca_shmem_base_component_runtime_query_fn_t)(mca_base_module_t **module, 59 int *priority, 60 const char *hint); 61 62 /* structure for shmem components. */ 63 struct opal_shmem_base_component_2_0_0_t { 64 /* base MCA component */ 65 mca_base_component_t base_version; 66 /* base MCA data */ 67 mca_base_component_data_t base_data; 68 /* component runtime query */ 69 mca_shmem_base_component_runtime_query_fn_t runtime_query; 70 }; 71 72 /* convenience typedefs */ 73 typedef struct opal_shmem_base_component_2_0_0_t 74 opal_shmem_base_component_2_0_0_t; 75 76 typedef struct opal_shmem_base_component_2_0_0_t opal_shmem_base_component_t; 77 78 /* ////////////////////////////////////////////////////////////////////////// */ 79 /* shmem API function pointers */ 80 81 /** 82 * module initialization function. 83 * @return OPAL_SUCCESS on success. 84 */ 85 typedef int 86 (*opal_shmem_base_module_init_fn_t)(void); 87 88 /** 89 * copy shmem data structure information pointed to by from to the structure 90 * pointed to by to. 91 * 92 * @param from source pointer (IN). 93 * 94 * @param to destination pointer (OUT). 95 * 96 * @return OPAL_SUCCESS on success. 97 */ 98 typedef int 99 (*opal_shmem_base_ds_copy_fn_t)(const opal_shmem_ds_t *from, 100 opal_shmem_ds_t *to); 101 102 /** 103 * create a new shared memory segment and initialize members in structure 104 * pointed to by ds_buf. 105 * 106 * @param ds_buf pointer to opal_shmem_ds_t typedef'd structure 107 * defined in shmem_types.h (OUT). 108 * 109 * @param file_name file_name unique string identifier that must be a valid, 110 * writable path (IN). 111 * 112 * @param size size of the shared memory segment. 113 * 114 * @return OPAL_SUCCESS on success. 115 */ 116 typedef int 117 (*opal_shmem_base_module_segment_create_fn_t)(opal_shmem_ds_t *ds_buf, 118 const char *file_name, 119 size_t size); 120 121 /** 122 * attach to an existing shared memory segment initialized by segment_create. 123 * 124 * @param ds_buf pointer to initialized opal_shmem_ds_t typedef'd 125 * structure (IN/OUT). 126 * 127 * @return base address of shared memory segment on success. returns 128 * NULL otherwise. 129 */ 130 typedef void * 131 (*opal_shmem_base_module_segment_attach_fn_t)(opal_shmem_ds_t *ds_buf); 132 133 /** 134 * detach from an existing shared memory segment. 135 * 136 * @param ds_buf pointer to initialized opal_shmem_ds_t typedef'd structure 137 * (IN/OUT). 138 * 139 * @return OPAL_SUCCESS on success. 140 */ 141 typedef int 142 (*opal_shmem_base_module_segment_detach_fn_t)(opal_shmem_ds_t *ds_buf); 143 144 /** 145 * unlink an existing shared memory segment. 146 * 147 * @param ds_buf pointer to initialized opal_shmem_ds_t typedef'd structure 148 * (IN/OUT). 149 * 150 * @return OPAL_SUCCESS on success. 151 */ 152 typedef int 153 (*opal_shmem_base_module_unlink_fn_t)(opal_shmem_ds_t *ds_buf); 154 155 /** 156 * module finalize function. invoked by the base on the selected 157 * module when the shmem framework is being shut down. 158 */ 159 typedef int (*opal_shmem_base_module_finalize_fn_t)(void); 160 161 /** 162 * structure for shmem modules 163 */ 164 struct opal_shmem_base_module_2_0_0_t { 165 mca_base_module_t base; 166 opal_shmem_base_module_init_fn_t module_init; 167 opal_shmem_base_module_segment_create_fn_t segment_create; 168 opal_shmem_base_ds_copy_fn_t ds_copy; 169 opal_shmem_base_module_segment_attach_fn_t segment_attach; 170 opal_shmem_base_module_segment_detach_fn_t segment_detach; 171 opal_shmem_base_module_unlink_fn_t unlink; 172 opal_shmem_base_module_finalize_fn_t module_finalize; 173 }; 174 175 /** 176 * convenience typedefs 177 */ 178 typedef struct opal_shmem_base_module_2_0_0_t opal_shmem_base_module_2_0_0_t; 179 typedef struct opal_shmem_base_module_2_0_0_t opal_shmem_base_module_t; 180 181 /** 182 * macro for use in components that are of type shmem 183 * see: opal/mca/mca.h for more information 184 */ 185 #define OPAL_SHMEM_BASE_VERSION_2_0_0 \ 186 OPAL_MCA_BASE_VERSION_2_1_0("shmem", 2, 0, 0) 187 188 END_C_DECLS 189 190 #endif /* OPAL_SHMEM_H */ 191