1
2
3
4
5
6
7
8
9
10
11
12 #if !defined(BTL_UCT_TYPES_H)
13 #define BTL_UCT_TYPES_H
14
15 #include "opal/mca/btl/btl.h"
16
17
18 struct mca_btl_uct_module_t;
19 struct mca_btl_base_endpoint_t;
20 struct mca_btl_uct_base_frag_t;
21
22
23
24 #define MCA_BTL_UCT_ENDPOINT_FLAG_CONN_REC 0x1
25
26 #define MCA_BTL_UCT_ENDPOINT_FLAG_CONN_REM_READY 0x2
27
28 #define MCA_BTL_UCT_ENDPOINT_FLAG_CONN_READY 0x4
29
30
31
32 #define MCA_BTL_UCT_FRAG 0x0d
33
34 #define MCA_BTL_UCT_CONNECT_RDMA 0x0e
35
36
37 #define MCA_BTL_UCT_MAX_MODULES 16
38
39 #define MCA_BTL_UCT_MAX_WORKERS 64
40
41
42
43
44 struct mca_btl_uct_modex_t {
45
46 int32_t module_count;
47
48
49 uint8_t data[];
50 };
51
52 typedef struct mca_btl_uct_modex_t mca_btl_uct_modex_t;
53
54
55
56
57
58
59
60 struct mca_btl_uct_md_t {
61
62 opal_object_t super;
63
64
65 uct_md_h uct_md;
66 };
67
68 typedef struct mca_btl_uct_md_t mca_btl_uct_md_t;
69
70 OBJ_CLASS_DECLARATION(mca_btl_uct_md_t);
71
72
73
74
75
76 struct mca_btl_uct_conn_req_t {
77
78 opal_process_name_t proc_name;
79
80
81 int type;
82
83
84 int context_id;
85
86
87 int tl_index;
88
89
90 uint8_t ep_addr[];
91 };
92
93 typedef struct mca_btl_uct_conn_req_t mca_btl_uct_conn_req_t;
94
95
96
97
98 struct mca_btl_uct_tl_endpoint_t {
99
100 opal_atomic_int32_t flags;
101
102
103 uct_ep_h uct_ep;
104 };
105
106 typedef struct mca_btl_uct_tl_endpoint_t mca_btl_uct_tl_endpoint_t;
107
108
109
110
111 struct mca_btl_uct_connection_ep_t {
112
113 opal_object_t super;
114
115
116 uct_ep_h uct_ep;
117 };
118
119 typedef struct mca_btl_uct_connection_ep_t mca_btl_uct_connection_ep_t;
120
121 OBJ_CLASS_DECLARATION(mca_btl_uct_connection_ep_t);
122
123
124
125
126
127
128
129
130
131 struct mca_btl_uct_device_context_t {
132
133 int context_id;
134
135
136 struct mca_btl_uct_module_t *uct_btl;
137
138
139 opal_recursive_mutex_t mutex;
140
141
142 uct_worker_h uct_worker;
143
144
145 uct_iface_h uct_iface;
146
147
148 uct_iface_attr_t uct_iface_attr;
149
150
151 opal_free_list_t rdma_completions;
152
153
154
155 opal_fifo_t completion_fifo;
156
157
158 bool progress_enabled;
159
160
161 volatile bool in_am_callback;
162 };
163
164 typedef struct mca_btl_uct_device_context_t mca_btl_uct_device_context_t;
165
166
167
168
169 union mca_btl_uct_am_header_t {
170
171 struct mca_btl_uct_am_header_data_t {
172
173 mca_btl_base_tag_t tag;
174
175
176 uint8_t padding[7];
177 } data;
178
179
180 uint64_t value;
181 };
182
183 typedef union mca_btl_uct_am_header_t mca_btl_uct_am_header_t;
184
185
186
187
188
189
190
191
192 struct mca_btl_uct_uct_completion_t {
193
194 opal_free_list_item_t super;
195
196
197 uct_completion_t uct_comp;
198
199
200 struct mca_btl_uct_base_frag_t *frag;
201
202
203 struct mca_btl_base_module_t *btl;
204
205
206 struct mca_btl_base_endpoint_t *endpoint;
207
208
209 void *local_address;
210
211
212 mca_btl_base_registration_handle_t *local_handle;
213
214
215 mca_btl_base_rdma_completion_fn_t cbfunc;
216
217
218 void *cbcontext;
219
220
221 void *cbdata;
222
223
224 mca_btl_uct_device_context_t *dev_context;
225
226
227 int status;
228 };
229
230 typedef struct mca_btl_uct_uct_completion_t mca_btl_uct_uct_completion_t;
231
232 OBJ_CLASS_DECLARATION(mca_btl_uct_uct_completion_t);
233
234
235
236
237 struct mca_btl_uct_base_frag_t {
238
239 mca_btl_base_descriptor_t base;
240
241
242 mca_btl_base_segment_t segments[2];
243
244
245 struct mca_btl_uct_module_t *btl;
246
247
248 mca_btl_uct_device_context_t *context;
249
250
251 bool ready;
252
253
254 struct mca_btl_base_endpoint_t *endpoint;
255
256
257 opal_free_list_t *free_list;
258
259
260 mca_btl_uct_am_header_t header;
261
262
263 uct_iov_t uct_iov;
264
265
266 mca_btl_uct_uct_completion_t comp;
267 };
268
269 typedef struct mca_btl_uct_base_frag_t mca_btl_uct_base_frag_t;
270
271 OBJ_CLASS_DECLARATION(mca_btl_uct_base_frag_t);
272
273 struct mca_btl_base_endpoint_t {
274
275 opal_object_t super;
276
277
278 opal_proc_t *ep_proc;
279
280
281 opal_recursive_mutex_t ep_lock;
282
283
284 mca_btl_uct_connection_ep_t *conn_ep;
285
286
287 mca_btl_uct_tl_endpoint_t uct_eps[][2];
288 };
289
290 typedef struct mca_btl_base_endpoint_t mca_btl_base_endpoint_t;
291 typedef mca_btl_base_endpoint_t mca_btl_uct_endpoint_t;
292 OBJ_CLASS_DECLARATION(mca_btl_uct_endpoint_t);
293
294
295
296
297 struct mca_btl_uct_tl_t {
298
299 opal_list_item_t super;
300
301
302 int priority;
303
304
305 mca_btl_uct_md_t *uct_md;
306
307
308 opal_mutex_t tl_lock;
309
310
311 uct_iface_config_t *uct_tl_config;
312
313
314 char *uct_tl_name;
315
316
317 char *uct_dev_name;
318
319
320 int max_device_contexts;
321
322
323 mca_btl_uct_device_context_t **uct_dev_contexts;
324
325
326
327 int tl_index;
328 };
329
330 typedef struct mca_btl_uct_tl_t mca_btl_uct_tl_t;
331 OBJ_CLASS_DECLARATION(mca_btl_uct_tl_t);
332
333 #define MCA_BTL_UCT_TL_ATTR(tl, context_id) (tl)->uct_dev_contexts[(context_id)]->uct_iface_attr
334
335 struct mca_btl_uct_pending_connection_request_t {
336 opal_list_item_t super;
337 uint8_t request_data[];
338 };
339
340 typedef struct mca_btl_uct_pending_connection_request_t mca_btl_uct_pending_connection_request_t;
341 OBJ_CLASS_DECLARATION(mca_btl_uct_pending_connection_request_t);
342
343 #endif