1 /*
2  * Copyright (c) 2013-2017 Intel Corporation. All rights reserved.
3  * Copyright (c) 2016 Cisco Systems, Inc. All rights reserved.
4  *
5  * This software is available to you under a choice of one of two
6  * licenses.  You may choose to be licensed under the terms of the GNU
7  * General Public License (GPL) Version 2, available from the file
8  * COPYING in the main directory of this source tree, or the
9  * BSD license below:
10  *
11  *     Redistribution and use in source and binary forms, with or
12  *     without modification, are permitted provided that the following
13  *     conditions are met:
14  *
15  *      - Redistributions of source code must retain the above
16  *        copyright notice, this list of conditions and the following
17  *        disclaimer.
18  *
19  *      - Redistributions in binary form must reproduce the above
20  *        copyright notice, this list of conditions and the following
21  *        disclaimer in the documentation and/or other materials
22  *        provided with the distribution.
23  *
24  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
28  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
29  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
30  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31  * SOFTWARE.
32  */
33 
34 #ifndef _OFI_PROV_H_
35 #define _OFI_PROV_H_
36 
37 #include "config.h"
38 
39 #include <rdma/providers/fi_prov.h>
40 
41 /* Provider initialization function signature that built-in providers
42  * must specify. */
43 #define INI_SIG(name) struct fi_provider* name(void)
44 
45 /* for each provider defines for three scenarios:
46  * dl: externally visible ctor with known name (see fi_prov.h)
47  * built-in: ctor function def, don't export symbols
48  * not built: no-op call for ctor
49 */
50 
51 #if (HAVE_GNI) && (HAVE_GNI_DL)
52 #  define GNI_INI FI_EXT_INI
53 #  define GNI_INIT NULL
54 #elif (HAVE_GNI)
55 #  define GNI_INI INI_SIG(fi_gni_ini)
56 #  define GNI_INIT fi_gni_ini()
57 GNI_INI ;
58 #else
59 #  define GNI_INIT NULL
60 #endif
61 
62 #if (HAVE_VERBS) && (HAVE_VERBS_DL)
63 #  define VERBS_INI FI_EXT_INI
64 #  define VERBS_INIT NULL
65 #elif (HAVE_VERBS)
66 #  define VERBS_INI INI_SIG(fi_verbs_ini)
67 #  define VERBS_INIT fi_verbs_ini()
68 VERBS_INI ;
69 #else
70 #  define VERBS_INIT NULL
71 #endif
72 
73 #if (HAVE_EFA) && (HAVE_EFA_DL)
74 #  define EFA_INI FI_EXT_INI
75 #  define EFA_INIT NULL
76 #elif (HAVE_EFA)
77 #  define EFA_INI INI_SIG(fi_efa_ini)
78 #  define EFA_INIT fi_efa_ini()
79 EFA_INI ;
80 #else
81 #  define EFA_INIT NULL
82 #endif
83 
84 #if (HAVE_PSM) && (HAVE_PSM_DL)
85 #  define PSM_INI FI_EXT_INI
86 #  define PSM_INIT NULL
87 #elif (HAVE_PSM)
88 #  define PSM_INI INI_SIG(fi_psm_ini)
89 #  define PSM_INIT fi_psm_ini()
90 PSM_INI ;
91 #else
92 #  define PSM_INIT NULL
93 #endif
94 
95 #if (HAVE_PSM2) && (HAVE_PSM2_DL)
96 #  define PSM2_INI FI_EXT_INI
97 #  define PSM2_INIT NULL
98 #elif (HAVE_PSM2)
99 #  define PSM2_INI INI_SIG(fi_psm2_ini)
100 #  define PSM2_INIT fi_psm2_ini()
101 PSM2_INI ;
102 #else
103 #  define PSM2_INIT NULL
104 #endif
105 
106 #if (HAVE_SOCKETS) && (HAVE_SOCKETS_DL)
107 #  define SOCKETS_INI FI_EXT_INI
108 #  define SOCKETS_INIT NULL
109 #elif (HAVE_SOCKETS)
110 #  define SOCKETS_INI INI_SIG(fi_sockets_ini)
111 #  define SOCKETS_INIT fi_sockets_ini()
112 SOCKETS_INI ;
113 #else
114 #  define SOCKETS_INIT NULL
115 #endif
116 
117 #if (HAVE_USNIC) && (HAVE_USNIC_DL)
118 #  define USNIC_INI FI_EXT_INI
119 #  define USNIC_INIT NULL
120 #elif (HAVE_USNIC)
121 #  define USNIC_INI INI_SIG(fi_usnic_ini)
122 #  define USNIC_INIT fi_usnic_ini()
123 USNIC_INI ;
124 #else
125 #  define USNIC_INIT NULL
126 #endif
127 
128 #if (HAVE_UDP) && (HAVE_UDP_DL)
129 #  define UDP_INI FI_EXT_INI
130 #  define UDP_INIT NULL
131 #elif (HAVE_UDP)
132 #  define UDP_INI INI_SIG(fi_udp_ini)
133 #  define UDP_INIT fi_udp_ini()
134 UDP_INI ;
135 #else
136 #  define UDP_INIT NULL
137 #endif
138 
139 #if (HAVE_TCP) && (HAVE_TCP_DL)
140 #  define TCP_INI FI_EXT_INI
141 #  define TCP_INIT NULL
142 #elif (HAVE_TCP)
143 #  define TCP_INI INI_SIG(fi_tcp_ini)
144 #  define TCP_INIT fi_tcp_ini()
145 TCP_INI ;
146 #else
147 #  define TCP_INIT NULL
148 #endif
149 
150 #if (HAVE_RXM) && (HAVE_RXM_DL)
151 #  define RXM_INI FI_EXT_INI
152 #  define RXM_INIT NULL
153 #elif (HAVE_RXM)
154 #  define RXM_INI INI_SIG(fi_rxm_ini)
155 #  define RXM_INIT fi_rxm_ini()
156 RXM_INI ;
157 #else
158 #  define RXM_INIT NULL
159 #endif
160 
161 #if (HAVE_RXD) && (HAVE_RXD_DL)
162 #  define RXD_INI FI_EXT_INI
163 #  define RXD_INIT NULL
164 #elif (HAVE_RXD)
165 #  define RXD_INI INI_SIG(fi_rxd_ini)
166 #  define RXD_INIT fi_rxd_ini()
167 RXD_INI ;
168 #else
169 #  define RXD_INIT NULL
170 #endif
171 
172 #if (HAVE_BGQ) && (HAVE_BGQ_DL)
173 #  define BGQ_INI FI_EXT_INI
174 #  define BGQ_INIT NULL
175 #elif (HAVE_BGQ)
176 #  define BGQ_INI INI_SIG(fi_bgq_ini)
177 #  define BGQ_INIT fi_bgq_ini()
178 BGQ_INI ;
179 #else
180 #  define BGQ_INIT NULL
181 #endif
182 
183 #ifdef _WIN32
184 #if (HAVE_NETDIR) && (HAVE_NETDIR_DL)
185 #  define NETDIR_INI FI_EXT_INI
186 #  define NETDIR_INIT NULL
187 #elif (HAVE_NETDIR)
188 #  define NETDIR_INI INI_SIG(fi_netdir_ini)
189 #  define NETDIR_INIT fi_netdir_ini()
190 NETDIR_INI ;
191 #else
192 #  define NETDIR_INIT NULL
193 #endif
194 #else /* _WIN32 */
195 #  define NETDIR_INIT NULL
196 #endif /* _WIN32 */
197 
198 #if (HAVE_SHM) && (HAVE_SHM_DL)
199 #  define SHM_INI FI_EXT_INI
200 #  define SHM_INIT NULL
201 #elif (HAVE_SHM)
202 #  define SHM_INI INI_SIG(fi_shm_ini)
203 #  define SHM_INIT fi_shm_ini()
204 SHM_INI ;
205 #else
206 #  define SHM_INIT NULL
207 #endif
208 
209 #if (HAVE_MRAIL) && (HAVE_MRAIL_DL)
210 #  define MRAIL_INI FI_EXT_INI
211 #  define MRAIL_INIT NULL
212 #elif (HAVE_MRAIL)
213 #  define MRAIL_INI INI_SIG(fi_mrail_ini)
214 #  define MRAIL_INIT fi_mrail_ini()
215 MRAIL_INI ;
216 #else
217 #  define MRAIL_INIT NULL
218 #endif
219 
220 #if (HAVE_RSTREAM) && (HAVE_RSTREAM_DL)
221 #  define RSTREAM_INI FI_EXT_INI
222 #  define RSTREAM_INIT NULL
223 #elif (HAVE_RSTREAM)
224 #  define RSTREAM_INI INI_SIG(fi_rstream_ini)
225 #  define RSTREAM_INIT fi_rstream_ini()
226 RSTREAM_INI ;
227 #else
228 #  define RSTREAM_INIT NULL
229 #endif
230 
231 #if(HAVE_PERF)
232 #  define HOOK_PERF_INI INI_SIG(fi_hook_perf_ini)
233 #  define HOOK_PERF_INIT fi_hook_perf_ini()
234 HOOK_PERF_INI ;
235 #else
236 #  define HOOK_PERF_INIT NULL
237 #endif
238 
239 #if(HAVE_HOOK_DEBUG)
240 #  define HOOK_DEBUG_INI INI_SIG(fi_debug_hook_ini)
241 #  define HOOK_DEBUG_INIT fi_debug_hook_ini()
242 HOOK_DEBUG_INI ;
243 #else
244 #  define HOOK_DEBUG_INIT NULL
245 #endif
246 
247 #  define HOOK_NOOP_INI INI_SIG(fi_hook_noop_ini)
248 #  define HOOK_NOOP_INIT fi_hook_noop_ini()
249 HOOK_NOOP_INI ;
250 
251 #endif /* _OFI_PROV_H_ */
252