NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
worker_rdmo.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2024 NVIDIA CORPORATION AND AFFILIATES. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without modification, are permitted
5  * provided that the following conditions are met:
6  * * Redistributions of source code must retain the above copyright notice, this list of
7  * conditions and the following disclaimer.
8  * * Redistributions in binary form must reproduce the above copyright notice, this list of
9  * conditions and the following disclaimer in the documentation and/or other materials
10  * provided with the distribution.
11  * * Neither the name of the NVIDIA CORPORATION nor the names of its contributors may be used
12  * to endorse or promote products derived from this software without specific prior written
13  * permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
17  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
19  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
21  * STRICT LIABILITY, OR TOR (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  *
24  */
25 
26 #include <stdint.h>
27 #include <stdlib.h>
28 
29 #include <doca_buf.h>
30 #include <doca_pe.h>
31 #include "worker_rdmo.h"
32 
33 DOCA_LOG_REGISTER(UROM::WORKER::RDMO);
34 
35 static uint64_t rdmo_id; /* RDMO plugin id, id is generated by UROM lib and
36  * will be updated in init function
37  */
38 static uint64_t rdmo_version = 0x01; /* RDMO plugin host version */
39 
40 /* RDMO task metadata */
42  union doca_data cookie; /* User cookie */
43  union {
44  urom_rdmo_client_init_finished client_init_cb; /* User client init task callback */
45  urom_rdmo_rq_create_finished rq_create_cb; /* User RQ create task callback */
46  urom_rdmo_rq_destroy_finished rq_destroy_cb; /* User RQ destroy task callback */
47  urom_rdmo_mr_register_finished mr_reg_cb; /* User MR register task callback */
48  urom_rdmo_mr_deregister_finished mr_dereg_cb; /* User MR deregister task callback */
49  };
50 };
51 
52 /*
53  * RDMO notification unpack function
54  *
55  * @packed_notif [in]: packed RDMO notification buffer
56  * @rdmo_notif [out]: set unpacked RDMO notification
57  * @return: DOCA_SUCCESS on success and DOCA_ERROR otherwise
58  */
59 static doca_error_t urom_worker_rdmo_notif_unpack(void *packed_notif, struct urom_worker_notify_rdmo **rdmo_notif)
60 {
61  void *ptr;
62 
63  *rdmo_notif = packed_notif;
64  ptr = packed_notif + sizeof(struct urom_worker_notify_rdmo);
65 
66  switch ((*rdmo_notif)->type) {
68  (*rdmo_notif)->client_init.addr = ptr;
69  break;
70  }
71  return DOCA_SUCCESS;
72 }
73 
74 /*
75  * Calculate RDMO packed command size
76  *
77  * @rdmo_cmd [in]: RDMO command
78  * @return: command packed size
79  */
81 {
82  size_t pack_len;
83 
84  pack_len = sizeof(struct urom_worker_rdmo_cmd);
85 
86  /* Pack inline data */
87  switch (rdmo_cmd->type) {
89  pack_len += rdmo_cmd->client_init.addr_len;
90  break;
92  pack_len += rdmo_cmd->rq_create.addr_len;
93  break;
95  pack_len += rdmo_cmd->mr_reg.packed_rkey_len;
96  pack_len += rdmo_cmd->mr_reg.packed_memh_len;
97  break;
98  }
99 
100  return pack_len;
101 }
102 
103 /*
104  * Pack RDMO command
105  *
106  * @rdmo_cmd [in]: rdmo command
107  * @packed_cmd_len [in/out]: packed command buffer size
108  * @packed_cmd [out]: packed command buffer
109  * @return: DOCA_SUCCESS on success and DOCA_ERROR otherwise
110  */
112  size_t *packed_cmd_len,
113  void *packed_cmd)
114 {
115  void *pack_tail = packed_cmd;
116  void *pack_head;
117  size_t pack_len;
118 
119  pack_len = urom_worker_rdmo_cmd_packed_len(rdmo_cmd);
120  if (pack_len > *packed_cmd_len)
122 
123  /* Pack base command */
124  pack_len = sizeof(struct urom_worker_rdmo_cmd);
125  pack_head = urom_rdmo_serialize_next_raw(&pack_tail, void, pack_len);
126  memcpy(pack_head, rdmo_cmd, pack_len);
127  *packed_cmd_len = pack_len;
128 
129  /* Pack inline data */
130  switch (rdmo_cmd->type) {
132  pack_len = rdmo_cmd->client_init.addr_len;
133  pack_head = urom_rdmo_serialize_next_raw(&pack_tail, void, pack_len);
134  memcpy(pack_head, rdmo_cmd->client_init.addr, pack_len);
135  *packed_cmd_len += pack_len;
136  break;
138  pack_len = rdmo_cmd->rq_create.addr_len;
139  pack_head = urom_rdmo_serialize_next_raw(&pack_tail, void, pack_len);
140  memcpy(pack_head, rdmo_cmd->rq_create.addr, pack_len);
141  *packed_cmd_len += pack_len;
142  break;
144  pack_len = rdmo_cmd->mr_reg.packed_rkey_len;
145  pack_head = urom_rdmo_serialize_next_raw(&pack_tail, void, pack_len);
146  memcpy(pack_head, rdmo_cmd->mr_reg.packed_rkey, pack_len);
147  *packed_cmd_len += pack_len;
148  pack_len = rdmo_cmd->mr_reg.packed_memh_len;
149  pack_head = urom_rdmo_serialize_next_raw(&pack_tail, void, pack_len);
150  memcpy(pack_head, rdmo_cmd->mr_reg.packed_memh, pack_len);
151  *packed_cmd_len += pack_len;
152  break;
153  }
154 
155  return DOCA_SUCCESS;
156 }
157 
158 /*
159  * RDMO common command's completion callback function
160  *
161  * @task [in]: UROM worker task
162  * @type [in]: RDMO task type
163  */
164 static void urom_rdmo_completion(struct doca_urom_worker_cmd_task *task, enum urom_worker_rdmo_notify_type type)
165 {
166  size_t data_len;
168  size_t extended_mem = 0;
169  struct doca_buf *response;
170  struct urom_worker_notify_rdmo notify_error = {0};
171  struct urom_worker_notify_rdmo *rdmo_notify = &notify_error;
172  struct doca_rdmo_task_data *task_data;
173 
174  notify_error.type = type;
175 
177  if (task_data == NULL) {
178  DOCA_LOG_ERR("Failed to get task data buffer");
179  goto task_release;
180  }
181 
183  if (response == NULL) {
184  DOCA_LOG_ERR("Failed to get task response buffer");
186  goto error_exit;
187  }
188 
189  result = doca_buf_get_data(response, (void **)&rdmo_notify);
190  if (result != DOCA_SUCCESS)
191  goto error_exit;
192 
193  result = urom_worker_rdmo_notif_unpack((void *)rdmo_notify, &rdmo_notify);
194  if (result != DOCA_SUCCESS)
195  goto error_exit;
196 
197  result = doca_buf_get_data_len(response, &data_len);
198  if (result != DOCA_SUCCESS) {
199  DOCA_LOG_ERR("Failed to get response data length");
200  goto error_exit;
201  }
202 
204  if (result != DOCA_SUCCESS)
205  goto error_exit;
206 
207  if (rdmo_notify->type == UROM_WORKER_NOTIFY_RDMO_CLIENT_INIT)
208  extended_mem = rdmo_notify->client_init.addr_len;
209 
210  if (data_len != sizeof(*rdmo_notify) + extended_mem) {
211  DOCA_LOG_ERR("Task response data length is different from notification expected length");
213  goto error_exit;
214  }
215 
216 error_exit:
217  switch (rdmo_notify->type) {
219  (task_data->client_init_cb)(result,
220  task_data->cookie,
221  rdmo_notify->client_init.addr,
222  rdmo_notify->client_init.addr_len);
223  break;
225  (task_data->rq_create_cb)(result, task_data->cookie, rdmo_notify->rq_create.rq_id);
226  break;
228  (task_data->rq_destroy_cb)(result, task_data->cookie, rdmo_notify->rq_destroy.rq_id);
229  break;
231  (task_data->mr_reg_cb)(result, task_data->cookie, rdmo_notify->mr_reg.rkey);
232  break;
234  (task_data->mr_dereg_cb)(result, task_data->cookie, rdmo_notify->mr_dereg.rkey);
235  break;
236  default:
237  DOCA_LOG_ERR("Invalid RDMO notification type %lu", rdmo_notify->type);
238  break;
239  }
240 
241 task_release:
243  if (result != DOCA_SUCCESS)
244  DOCA_LOG_ERR("Failed to release worker command task %s", doca_error_get_descr(result));
245 }
246 
247 /*
248  * RDMO client init command completion callback function, user callback will be called inside the function
249  *
250  * @task [in]: UROM worker task
251  * @task_user_data [in]: task user data
252  * @ctx_user_data [in]: worker context user data
253  */
254 static void urom_rdmo_client_init_completed(struct doca_urom_worker_cmd_task *task,
255  union doca_data task_user_data,
256  union doca_data ctx_user_data)
257 {
258  (void)task_user_data;
259  (void)ctx_user_data;
260 
262 }
263 
265  union doca_data cookie,
266  uint64_t id,
267  void *addr,
268  uint64_t addr_len,
270 {
272  size_t pack_len = 0;
273  struct doca_buf *payload;
274  struct doca_urom_worker_cmd_task *task;
275  struct doca_rdmo_task_data *task_data;
276  struct urom_worker_rdmo_cmd *rdmo_cmd;
277 
278  /* Allocate task */
280  if (result != DOCA_SUCCESS)
281  return result;
282 
284  result = doca_buf_get_data(payload, (void **)&rdmo_cmd);
285  if (result != DOCA_SUCCESS)
286  goto task_destroy;
287 
288  result = doca_buf_get_data_len(payload, &pack_len);
289  if (result != DOCA_SUCCESS)
290  goto task_destroy;
291 
292  /* Populate commands attributes */
294  rdmo_cmd->client_init.id = id;
295  rdmo_cmd->client_init.addr = addr;
296  rdmo_cmd->client_init.addr_len = addr_len;
297 
298  urom_worker_rdmo_cmd_pack(rdmo_cmd, &pack_len, (void *)rdmo_cmd);
299 
300  doca_buf_set_data(payload, rdmo_cmd, pack_len);
301 
303  task_data->client_init_cb = cb;
304  task_data->cookie = cookie;
305 
307 
309  if (result != DOCA_SUCCESS)
310  goto task_destroy;
311 
312  return DOCA_SUCCESS;
313 
314 task_destroy:
316  return result;
317 }
318 
319 /*
320  * RDMO RQ create command completion callback function, user callback will be called inside the function
321  *
322  * @task [in]: UROM worker task
323  * @task_user_data [in]: task user data
324  * @ctx_user_data [in]: worker context user data
325  */
326 static void doca_urom_rq_create_init_completed(struct doca_urom_worker_cmd_task *task,
327  union doca_data task_user_data,
328  union doca_data ctx_user_data)
329 {
330  (void)task_user_data;
331  (void)ctx_user_data;
332 
334 }
335 
337  union doca_data cookie,
338  void *addr,
339  uint64_t addr_len,
341 {
343  size_t pack_len = 0;
344  struct doca_buf *payload;
345  struct doca_urom_worker_cmd_task *task;
346  struct doca_rdmo_task_data *task_data;
347  struct urom_worker_rdmo_cmd *rdmo_cmd;
348 
349  /* Allocate task */
351  if (result != DOCA_SUCCESS)
352  return result;
353 
355  result = doca_buf_get_data(payload, (void **)&rdmo_cmd);
356  if (result != DOCA_SUCCESS)
357  goto task_destroy;
358 
359  result = doca_buf_get_data_len(payload, &pack_len);
360  if (result != DOCA_SUCCESS)
361  goto task_destroy;
362 
363  /* Populate commands attributes */
365  rdmo_cmd->rq_create.addr = addr;
366  rdmo_cmd->rq_create.addr_len = addr_len;
367 
368  urom_worker_rdmo_cmd_pack(rdmo_cmd, &pack_len, (void *)rdmo_cmd);
369 
370  doca_buf_set_data(payload, rdmo_cmd, pack_len);
371 
373  task_data->rq_create_cb = cb;
374  task_data->cookie = cookie;
375 
377 
379  if (result != DOCA_SUCCESS)
380  goto task_destroy;
381 
382  return DOCA_SUCCESS;
383 
384 task_destroy:
386  return result;
387 }
388 
389 /*
390  * RDMO RQ destroy command completion callback function, user callback will be called inside the function
391  *
392  * @task [in]: UROM worker task
393  * @task_user_data [in]: task user data
394  * @ctx_user_data [in]: worker context user data
395  */
396 static void urom_rdmo_rq_destroy_completed(struct doca_urom_worker_cmd_task *task,
397  union doca_data task_user_data,
398  union doca_data ctx_user_data)
399 {
400  (void)task_user_data;
401  (void)ctx_user_data;
402 
404 }
405 
407  union doca_data cookie,
408  uint64_t rq_id,
410 {
412  size_t pack_len = 0;
413  struct doca_buf *payload;
414  struct doca_urom_worker_cmd_task *task;
415  struct doca_rdmo_task_data *task_data;
416  struct urom_worker_rdmo_cmd *rdmo_cmd;
417 
418  /* Allocate task */
420  if (result != DOCA_SUCCESS)
421  return result;
422 
424  result = doca_buf_get_data(payload, (void **)&rdmo_cmd);
425  if (result != DOCA_SUCCESS)
426  goto task_destroy;
427 
428  result = doca_buf_get_data_len(payload, &pack_len);
429  if (result != DOCA_SUCCESS)
430  goto task_destroy;
431 
432  /* Populate commands attributes */
434  rdmo_cmd->rq_destroy.rq_id = rq_id;
435 
436  urom_worker_rdmo_cmd_pack(rdmo_cmd, &pack_len, (void *)rdmo_cmd);
437 
438  doca_buf_set_data(payload, rdmo_cmd, pack_len);
439 
441  task_data->rq_destroy_cb = cb;
442  task_data->cookie = cookie;
443 
445 
447  if (result != DOCA_SUCCESS)
448  goto task_destroy;
449 
450  return DOCA_SUCCESS;
451 
452 task_destroy:
454  return result;
455 }
456 
457 /*
458  * RDMO MR register command completion callback function, user callback will be called inside the function
459  *
460  * @task [in]: UROM worker task
461  * @task_user_data [in]: task user data
462  * @ctx_user_data [in]: worker context user data
463  */
464 static void urom_rdmo_mr_reg_completed(struct doca_urom_worker_cmd_task *task,
465  union doca_data task_user_data,
466  union doca_data ctx_user_data)
467 {
468  (void)task_user_data;
469  (void)ctx_user_data;
470 
472 }
473 
475  union doca_data cookie,
476  uint64_t va,
477  uint64_t len,
478  void *rkey,
479  uint64_t rkey_len,
480  void *memh,
481  uint64_t memh_len,
483 {
485  size_t pack_len = 0;
486  struct doca_buf *payload;
487  struct doca_urom_worker_cmd_task *task;
488  struct doca_rdmo_task_data *task_data;
489  struct urom_worker_rdmo_cmd *rdmo_cmd;
490 
491  /* Allocate task */
493  if (result != DOCA_SUCCESS)
494  return result;
495 
497  result = doca_buf_get_data(payload, (void **)&rdmo_cmd);
498  if (result != DOCA_SUCCESS)
499  goto task_destroy;
500 
501  result = doca_buf_get_data_len(payload, &pack_len);
502  if (result != DOCA_SUCCESS)
503  goto task_destroy;
504 
505  /* Populate commands attributes */
506  rdmo_cmd->type = UROM_WORKER_CMD_RDMO_MR_REG;
507  rdmo_cmd->mr_reg.va = va;
508  rdmo_cmd->mr_reg.len = len;
509  rdmo_cmd->mr_reg.packed_rkey = rkey;
510  rdmo_cmd->mr_reg.packed_rkey_len = rkey_len;
511  rdmo_cmd->mr_reg.packed_memh = memh;
512  rdmo_cmd->mr_reg.packed_memh_len = memh_len;
513 
514  urom_worker_rdmo_cmd_pack(rdmo_cmd, &pack_len, (void *)rdmo_cmd);
515 
516  doca_buf_set_data(payload, rdmo_cmd, pack_len);
517 
519  task_data->mr_reg_cb = cb;
520  task_data->cookie = cookie;
521 
523 
525  if (result != DOCA_SUCCESS)
526  goto task_destroy;
527 
528  return DOCA_SUCCESS;
529 
530 task_destroy:
532  return result;
533 }
534 
535 /*
536  * RDMO MR deregister command completion callback function, user callback will be called inside the function
537  *
538  * @task [in]: UROM worker task
539  * @task_user_data [in]: task user data
540  * @ctx_user_data [in]: worker context user data
541  */
542 static void urom_rdmo_mr_dereg_completed(struct doca_urom_worker_cmd_task *task,
543  union doca_data task_user_data,
544  union doca_data ctx_user_data)
545 {
546  (void)task_user_data;
547  (void)ctx_user_data;
548 
550 }
551 
553  union doca_data cookie,
554  uint64_t rkey_id,
556 {
558  size_t pack_len = 0;
559  struct doca_buf *payload;
560  struct doca_urom_worker_cmd_task *task;
561  struct doca_rdmo_task_data *task_data;
562  struct urom_worker_rdmo_cmd *rdmo_cmd;
563 
564  /* Allocate task */
566  if (result != DOCA_SUCCESS)
567  return result;
568 
570  result = doca_buf_get_data(payload, (void **)&rdmo_cmd);
571  if (result != DOCA_SUCCESS)
572  goto task_destroy;
573 
574  result = doca_buf_get_data_len(payload, &pack_len);
575  if (result != DOCA_SUCCESS)
576  goto task_destroy;
577 
578  /* Populate commands attributes */
580  rdmo_cmd->mr_dereg.rkey = rkey_id;
581 
582  urom_worker_rdmo_cmd_pack(rdmo_cmd, &pack_len, (void *)rdmo_cmd);
583 
584  doca_buf_set_data(payload, rdmo_cmd, pack_len);
585 
587  task_data->mr_dereg_cb = cb;
588  task_data->cookie = cookie;
589 
591 
593  if (result != DOCA_SUCCESS)
594  goto task_destroy;
595 
596  return DOCA_SUCCESS;
597 
598 task_destroy:
600  return result;
601 }
602 
603 doca_error_t urom_rdmo_init(uint64_t plugin_id, uint64_t version)
604 {
605  if (version != rdmo_version)
607 
608  rdmo_id = plugin_id;
609  return DOCA_SUCCESS;
610 }
#define NULL
Definition: __stddef_null.h:26
int32_t result
uintptr_t addr
uint64_t len
uint64_t cookie
DOCA_LOG_REGISTER(UROM::WORKER::RDMO)
DOCA_STABLE doca_error_t doca_buf_get_data(const struct doca_buf *buf, void **data)
Get the buffer's data.
DOCA_STABLE doca_error_t doca_buf_get_data_len(const struct doca_buf *buf, size_t *data_len)
Get buffer's data length.
DOCA_STABLE doca_error_t doca_buf_set_data(struct doca_buf *buf, void *data, size_t data_len)
enum doca_error doca_error_t
DOCA API return codes.
DOCA_STABLE const char * doca_error_get_descr(doca_error_t error)
Returns the description string of an error code.
@ DOCA_ERROR_INVALID_VALUE
Definition: doca_error.h:44
@ DOCA_ERROR_INITIALIZATION
Definition: doca_error.h:46
@ DOCA_ERROR_UNSUPPORTED_VERSION
Definition: doca_error.h:57
@ DOCA_SUCCESS
Definition: doca_error.h:38
#define DOCA_LOG_ERR(format,...)
Generates an ERROR application log message.
Definition: doca_log.h:466
DOCA_STABLE doca_error_t doca_task_get_status(const struct doca_task *task)
Get task status.
DOCA_STABLE doca_error_t doca_task_submit(struct doca_task *task)
Submit a task to a progress engine.
DOCA_EXPERIMENTAL doca_error_t doca_urom_worker_cmd_task_release(struct doca_urom_worker_cmd_task *task)
Release Worker Command task.
DOCA_EXPERIMENTAL void doca_urom_worker_cmd_task_set_cb(struct doca_urom_worker_cmd_task *task, doca_urom_worker_cmd_task_completion_cb_t cb)
Set Worker Command task callback.
DOCA_EXPERIMENTAL struct doca_buf * doca_urom_worker_cmd_task_get_response(struct doca_urom_worker_cmd_task *task)
Get Worker Command task response.
DOCA_EXPERIMENTAL void * doca_urom_worker_cmd_task_get_user_data(struct doca_urom_worker_cmd_task *task)
Get Worker Command user data to populate.
DOCA_EXPERIMENTAL doca_error_t doca_urom_worker_cmd_task_allocate_init(struct doca_urom_worker *worker_ctx, uint64_t plugin, struct doca_urom_worker_cmd_task **task)
Allocate and initialize Worker Command task.
DOCA_EXPERIMENTAL struct doca_buf * doca_urom_worker_cmd_task_get_payload(struct doca_urom_worker_cmd_task *task)
Get Worker Command task payload.
DOCA_EXPERIMENTAL struct doca_task * doca_urom_worker_cmd_task_as_task(struct doca_urom_worker_cmd_task *task)
This method converts a worker cmd task to doca_task.
static void urom_rdmo_mr_reg_completed(struct doca_urom_worker_cmd_task *task, union doca_data task_user_data, union doca_data ctx_user_data)
Definition: worker_rdmo.c:464
doca_error_t urom_rdmo_task_mr_deregister(struct doca_urom_worker *worker_ctx, union doca_data cookie, uint64_t rkey_id, urom_rdmo_mr_deregister_finished cb)
Definition: worker_rdmo.c:552
static doca_error_t urom_worker_rdmo_cmd_pack(struct urom_worker_rdmo_cmd *rdmo_cmd, size_t *packed_cmd_len, void *packed_cmd)
Definition: worker_rdmo.c:111
static void urom_rdmo_rq_destroy_completed(struct doca_urom_worker_cmd_task *task, union doca_data task_user_data, union doca_data ctx_user_data)
Definition: worker_rdmo.c:396
static void doca_urom_rq_create_init_completed(struct doca_urom_worker_cmd_task *task, union doca_data task_user_data, union doca_data ctx_user_data)
Definition: worker_rdmo.c:326
doca_error_t urom_rdmo_init(uint64_t plugin_id, uint64_t version)
Definition: worker_rdmo.c:603
doca_error_t urom_rdmo_task_rq_destroy(struct doca_urom_worker *worker_ctx, union doca_data cookie, uint64_t rq_id, urom_rdmo_rq_destroy_finished cb)
Definition: worker_rdmo.c:406
doca_error_t urom_rdmo_task_client_init(struct doca_urom_worker *worker_ctx, union doca_data cookie, uint64_t id, void *addr, uint64_t addr_len, urom_rdmo_client_init_finished cb)
Definition: worker_rdmo.c:264
doca_error_t urom_rdmo_task_mr_register(struct doca_urom_worker *worker_ctx, union doca_data cookie, uint64_t va, uint64_t len, void *rkey, uint64_t rkey_len, void *memh, uint64_t memh_len, urom_rdmo_mr_register_finished cb)
Definition: worker_rdmo.c:474
static void urom_rdmo_client_init_completed(struct doca_urom_worker_cmd_task *task, union doca_data task_user_data, union doca_data ctx_user_data)
Definition: worker_rdmo.c:254
static void urom_rdmo_completion(struct doca_urom_worker_cmd_task *task, enum urom_worker_rdmo_notify_type type)
Definition: worker_rdmo.c:164
static size_t urom_worker_rdmo_cmd_packed_len(struct urom_worker_rdmo_cmd *rdmo_cmd)
Definition: worker_rdmo.c:80
static uint64_t rdmo_version
Definition: worker_rdmo.c:38
static doca_error_t urom_worker_rdmo_notif_unpack(void *packed_notif, struct urom_worker_notify_rdmo **rdmo_notif)
Definition: worker_rdmo.c:59
doca_error_t urom_rdmo_task_rq_create(struct doca_urom_worker *worker_ctx, union doca_data cookie, void *addr, uint64_t addr_len, urom_rdmo_rq_create_finished cb)
Definition: worker_rdmo.c:336
static void urom_rdmo_mr_dereg_completed(struct doca_urom_worker_cmd_task *task, union doca_data task_user_data, union doca_data ctx_user_data)
Definition: worker_rdmo.c:542
static uint64_t rdmo_id
Definition: worker_rdmo.c:35
void(* urom_rdmo_mr_deregister_finished)(doca_error_t result, union doca_data cookie, uint64_t rkey)
Definition: worker_rdmo.h:83
void(* urom_rdmo_client_init_finished)(doca_error_t result, union doca_data cookie, void *addr, uint64_t addr_len)
Definition: worker_rdmo.h:44
void(* urom_rdmo_mr_register_finished)(doca_error_t result, union doca_data cookie, uint64_t rkey)
Definition: worker_rdmo.h:74
void(* urom_rdmo_rq_create_finished)(doca_error_t result, union doca_data cookie, uint64_t rq_id)
Definition: worker_rdmo.h:56
void(* urom_rdmo_rq_destroy_finished)(doca_error_t result, union doca_data cookie, uint64_t rq_id)
Definition: worker_rdmo.h:65
uint8_t type
Definition: packets.h:0
urom_rdmo_rq_destroy_finished rq_destroy_cb
Definition: worker_rdmo.c:46
urom_rdmo_mr_deregister_finished mr_dereg_cb
Definition: worker_rdmo.c:48
urom_rdmo_mr_register_finished mr_reg_cb
Definition: worker_rdmo.c:47
urom_rdmo_rq_create_finished rq_create_cb
Definition: worker_rdmo.c:45
urom_rdmo_client_init_finished client_init_cb
Definition: worker_rdmo.c:44
union doca_data cookie
Definition: worker_rdmo.c:42
struct urom_worker_rdmo_notify_mr_reg mr_reg
Definition: urom_rdmo.h:142
struct urom_worker_rdmo_notify_rq_create rq_create
Definition: urom_rdmo.h:140
struct urom_worker_rdmo_notify_rq_destroy rq_destroy
Definition: urom_rdmo.h:141
struct urom_worker_rdmo_notify_mr_dereg mr_dereg
Definition: urom_rdmo.h:143
struct urom_worker_rdmo_notify_client_init client_init
Definition: urom_rdmo.h:139
struct urom_worker_rdmo_cmd_mr_dereg mr_dereg
Definition: urom_rdmo.h:93
struct urom_worker_rdmo_cmd_mr_reg mr_reg
Definition: urom_rdmo.h:92
struct urom_worker_rdmo_cmd_client_init client_init
Definition: urom_rdmo.h:89
struct urom_worker_rdmo_cmd_rq_destroy rq_destroy
Definition: urom_rdmo.h:91
struct urom_worker_rdmo_cmd_rq_create rq_create
Definition: urom_rdmo.h:90
Convenience type for representing opaque data.
Definition: doca_types.h:56
urom_worker_rdmo_notify_type
Definition: urom_rdmo.h:98
@ UROM_WORKER_NOTIFY_RDMO_CLIENT_INIT
Definition: urom_rdmo.h:99
@ UROM_WORKER_NOTIFY_RDMO_RQ_CREATE
Definition: urom_rdmo.h:101
@ UROM_WORKER_NOTIFY_RDMO_RQ_DESTROY
Definition: urom_rdmo.h:103
@ UROM_WORKER_NOTIFY_RDMO_MR_REG
Definition: urom_rdmo.h:105
@ UROM_WORKER_NOTIFY_RDMO_MR_DEREG
Definition: urom_rdmo.h:106
@ UROM_WORKER_CMD_RDMO_MR_REG
Definition: urom_rdmo.h:48
@ UROM_WORKER_CMD_RDMO_MR_DEREG
Definition: urom_rdmo.h:49
@ UROM_WORKER_CMD_RDMO_RQ_CREATE
Definition: urom_rdmo.h:46
@ UROM_WORKER_CMD_RDMO_RQ_DESTROY
Definition: urom_rdmo.h:47
@ UROM_WORKER_CMD_RDMO_CLIENT_INIT
Definition: urom_rdmo.h:45
#define urom_rdmo_serialize_next_raw(_iter, _type, _offset)
Definition: urom_rdmo.h:36