NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
dpa_basic_initiator_target_sample.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 "dpa_common.h"
27 #include "../common/dpa_basic_initiator_target_common_defs.h"
28 
29 DOCA_LOG_REGISTER(DPA_BASIC_INITIATOR_TARGET::SAMPLE);
30 
35 
41 
54  struct dpa_rdma_obj *dpa_rdma_obj)
55 {
56  doca_error_t doca_err = DOCA_SUCCESS, tmp_doca_err = DOCA_SUCCESS;
57 
58  DOCA_LOG_INFO("Create DOCA RDMA");
59  dpa_rdma_obj->doca_device = resources->rdma_doca_device;
60  dpa_rdma_obj->doca_dpa = resources->rdma_dpa_ctx;
67  doca_err = dpa_rdma_obj_init(dpa_rdma_obj);
68  if (doca_err != DOCA_SUCCESS) {
69  DOCA_LOG_ERR("Function dpa_rdma_obj_init failed (%s)", doca_error_get_descr(doca_err));
70  goto exit;
71  }
72 
73  DOCA_LOG_INFO("Start DOCA RDMA");
74  doca_err = dpa_rdma_obj_start(dpa_rdma_obj);
75  if (doca_err != DOCA_SUCCESS) {
76  DOCA_LOG_ERR("Function dpa_rdma_obj_start failed (%s)", doca_error_get_descr(doca_err));
77  goto destroy_rdma_obj;
78  }
79 
80  return doca_err;
81 
82 destroy_rdma_obj:
83  tmp_doca_err = dpa_rdma_obj_destroy(dpa_rdma_obj);
84  if (tmp_doca_err != DOCA_SUCCESS) {
85  DOCA_LOG_ERR("Function dpa_rdma_obj_destroy failed: %s", doca_error_get_descr(tmp_doca_err));
86  DOCA_ERROR_PROPAGATE(doca_err, tmp_doca_err);
87  }
88 
89 exit:
90  return doca_err;
91 }
92 
100 static doca_error_t rdma_obj_destroy(struct dpa_rdma_obj *dpa_rdma_obj, uint8_t is_initiator)
101 {
102  doca_error_t doca_err = DOCA_SUCCESS, tmp_doca_err = DOCA_SUCCESS;
103 
104  DOCA_LOG_INFO("Destroy %s DOCA RDMA", (is_initiator ? "Initiator" : "Target"));
105  tmp_doca_err = dpa_rdma_obj_destroy(dpa_rdma_obj);
106  if (tmp_doca_err != DOCA_SUCCESS) {
107  DOCA_LOG_ERR("Function dpa_rdma_obj_destroy failed: %s", doca_error_get_descr(tmp_doca_err));
108  DOCA_ERROR_PROPAGATE(doca_err, tmp_doca_err);
109  }
110 
111  return doca_err;
112 }
113 
123 static doca_error_t rdma_objs_connect(struct dpa_rdma_obj *initiator_rdma_obj, struct dpa_rdma_obj *target_rdma_obj)
124 {
125  doca_error_t doca_err = DOCA_SUCCESS;
126 
127  DOCA_LOG_INFO("Connect Initiator DOCA RDMA to Target DOCA RDMA");
128  doca_err = doca_rdma_connect(initiator_rdma_obj->rdma,
129  target_rdma_obj->connection_details,
130  target_rdma_obj->conn_det_len,
131  initiator_rdma_obj->connection);
132  if (doca_err != DOCA_SUCCESS) {
133  DOCA_LOG_ERR("Function doca_rdma_connect failed (%s)", doca_error_get_descr(doca_err));
134  return doca_err;
135  }
136 
137  DOCA_LOG_INFO("Connect Target DOCA RDMA to Initiator DOCA RDMA");
138  doca_err = doca_rdma_connect(target_rdma_obj->rdma,
139  initiator_rdma_obj->connection_details,
140  initiator_rdma_obj->conn_det_len,
141  target_rdma_obj->connection);
142  if (doca_err != DOCA_SUCCESS) {
143  DOCA_LOG_ERR("Function doca_rdma_connect failed (%s)", doca_error_get_descr(doca_err));
144  return doca_err;
145  }
146 
147  return doca_err;
148 }
149 
157 {
158  doca_error_t doca_err = DOCA_SUCCESS, tmp_doca_err = DOCA_SUCCESS;
159  struct dpa_rdma_obj initiator_rdma_obj = {0};
160  doca_dpa_dev_uintptr_t thread_arg_dev_ptr = 0;
161  struct dpa_thread_obj target_thread_obj = {0};
162  struct dpa_completion_obj initiator_dpa_completion_obj = {0};
163  struct dpa_completion_obj target_dpa_completion_obj = {0};
164  struct dpa_rdma_obj target_rdma_obj = {0};
165  struct doca_sync_event *comp_event = NULL;
166  doca_dpa_dev_sync_event_t dpa_dev_se_handle = 0;
167  doca_dpa_dev_uintptr_t received_buf_dev_ptr = 0;
168  struct doca_mmap_obj dpa_mmap_obj = {0};
169  struct dpa_thread_arg thread_arg = {0};
170  uint64_t send_val = 10;
171  struct doca_mmap_obj host_mmap_obj = {0};
172  uint64_t retval = 0;
173  const uint64_t expected_receive_val = 10;
174 
175  DOCA_LOG_INFO("Create Initiator DOCA DPA Completion");
176  initiator_dpa_completion_obj.doca_dpa = resources->rdma_dpa_ctx;
177  initiator_dpa_completion_obj.queue_size = 2;
178  doca_err = dpa_completion_obj_init(&initiator_dpa_completion_obj);
179  if (doca_err != DOCA_SUCCESS) {
180  DOCA_LOG_ERR("Function dpa_completion_obj_init failed (%s)", doca_error_get_descr(doca_err));
181  goto exit;
182  }
183 
184  DOCA_LOG_INFO("Initialize Initiator DOCA RDMA");
185  doca_err = rdma_obj_create(resources, &initiator_dpa_completion_obj, &initiator_rdma_obj);
186  if (doca_err != DOCA_SUCCESS) {
187  DOCA_LOG_ERR("Function rdma_obj_create failed (%s)", doca_error_get_descr(doca_err));
188  goto destroy_initiator_rdma_completion_obj;
189  }
190 
191  DOCA_LOG_INFO("Allocate Target DPA thread device argument");
192  doca_err = doca_dpa_mem_alloc(resources->rdma_dpa_ctx, sizeof(struct dpa_thread_arg), &thread_arg_dev_ptr);
193  if (doca_err != DOCA_SUCCESS) {
194  DOCA_LOG_ERR("Function doca_dpa_mem_alloc failed (%s)", doca_error_get_descr(doca_err));
195  goto destroy_initiator_rdma_obj;
196  }
197 
198  DOCA_LOG_INFO("Create Target DOCA DPA Thread");
199  target_thread_obj.doca_dpa = resources->rdma_dpa_ctx;
200  target_thread_obj.func = &thread_kernel;
201  target_thread_obj.arg = thread_arg_dev_ptr;
202  target_thread_obj.affinity = resources->num_affinities > 0 ? resources->affinities[0] : NULL;
203 
204  doca_err = dpa_thread_obj_init(&target_thread_obj);
205  if (doca_err != DOCA_SUCCESS) {
206  DOCA_LOG_ERR("Function dpa_thread_obj_init failed (%s)", doca_error_get_descr(doca_err));
207  goto destroy_target_thread_arg_dev_ptr;
208  }
209 
210  DOCA_LOG_INFO("Create Target DOCA DPA Completion");
211  target_dpa_completion_obj.doca_dpa = resources->rdma_dpa_ctx;
212  target_dpa_completion_obj.queue_size = 2;
213  target_dpa_completion_obj.thread = target_thread_obj.thread;
214  doca_err = dpa_completion_obj_init(&target_dpa_completion_obj);
215  if (doca_err != DOCA_SUCCESS) {
216  DOCA_LOG_ERR("Function dpa_completion_obj_init failed (%s)", doca_error_get_descr(doca_err));
217  goto destroy_target_thread_obj;
218  }
219 
220  DOCA_LOG_INFO("Initialize Target DOCA RDMA");
221  doca_err = rdma_obj_create(resources, &target_dpa_completion_obj, &target_rdma_obj);
222  if (doca_err != DOCA_SUCCESS) {
223  DOCA_LOG_ERR("Function rdma_obj_create failed (%s)", doca_error_get_descr(doca_err));
224  goto destroy_target_rdma_completion_obj;
225  }
226 
227  doca_err = rdma_objs_connect(&initiator_rdma_obj, &target_rdma_obj);
228  if (doca_err != DOCA_SUCCESS) {
229  DOCA_LOG_ERR("Function rdma_objs_connect failed (%s)", doca_error_get_descr(doca_err));
230  goto destroy_target_rdma_obj;
231  }
232 
233  DOCA_LOG_INFO("Run Target DOCA DPA Thread");
234  doca_err = doca_dpa_thread_run(target_thread_obj.thread);
235  if (doca_err != DOCA_SUCCESS) {
236  DOCA_LOG_ERR("Function doca_dpa_thread_run failed (%s)", doca_error_get_descr(doca_err));
237  goto destroy_target_rdma_obj;
238  }
239 
240  DOCA_LOG_INFO("Create completion DOCA sync event");
241  doca_err = create_doca_dpa_completion_sync_event(resources->pf_dpa_ctx,
242  resources->pf_doca_device,
243  &comp_event,
244  &dpa_dev_se_handle);
245  if (doca_err != DOCA_SUCCESS) {
246  DOCA_LOG_ERR("Function create_doca_dpa_completion_sync_event failed (%s)",
247  doca_error_get_descr(doca_err));
248  goto destroy_target_rdma_obj;
249  }
250 
251  DOCA_LOG_INFO("Create Target DOCA MMAP for received buffer on DPA");
252  doca_err = doca_dpa_mem_alloc(resources->rdma_dpa_ctx, sizeof(uint64_t), &received_buf_dev_ptr);
253  if (doca_err != DOCA_SUCCESS) {
254  DOCA_LOG_ERR("Function doca_dpa_mem_alloc failed (%s)", doca_error_get_descr(doca_err));
255  goto destroy_completion_sync_event;
256  }
257 
258  doca_err = doca_dpa_memset(resources->rdma_dpa_ctx, received_buf_dev_ptr, 0, sizeof(uint64_t));
259  if (doca_err != DOCA_SUCCESS) {
260  DOCA_LOG_ERR("Function doca_dpa_memset failed (%s)", doca_error_get_descr(doca_err));
261  goto destroy_received_buf_dev_ptr;
262  }
263 
264  dpa_mmap_obj.mmap_type = MMAP_TYPE_DPA;
265  dpa_mmap_obj.doca_dpa = resources->rdma_dpa_ctx;
266  dpa_mmap_obj.doca_device = resources->rdma_doca_device;
269  dpa_mmap_obj.memrange_addr = (void *)received_buf_dev_ptr;
270  dpa_mmap_obj.memrange_len = sizeof(uint64_t);
271  doca_err = doca_mmap_obj_init(&dpa_mmap_obj);
272  if (doca_err != DOCA_SUCCESS) {
273  DOCA_LOG_ERR("Function doca_mmap_obj_init failed (%s)", doca_error_get_descr(doca_err));
274  goto destroy_received_buf_dev_ptr;
275  }
276 
277  DOCA_LOG_INFO("Update Target DPA thread device argument");
278  thread_arg.dpa_ctx_handle = resources->rdma_dpa_ctx_handle;
279  thread_arg.dpa_comp_handle = target_dpa_completion_obj.handle;
280  thread_arg.local_buf_addr = received_buf_dev_ptr;
281  thread_arg.sync_event_handle = dpa_dev_se_handle;
282  doca_err = doca_dpa_h2d_memcpy(resources->rdma_dpa_ctx,
283  thread_arg_dev_ptr,
284  &thread_arg,
285  sizeof(struct dpa_thread_arg));
286  if (doca_err != DOCA_SUCCESS) {
287  DOCA_LOG_ERR("Function doca_dpa_h2d_memcpy failed (%s)", doca_error_get_descr(doca_err));
288  goto destroy_dpa_mmap_obj;
289  }
290 
291  DOCA_LOG_INFO("Create Initiator DOCA MMAP for send buffer on Host");
292  host_mmap_obj.mmap_type = MMAP_TYPE_CPU;
293  host_mmap_obj.doca_dpa = resources->rdma_dpa_ctx;
294  host_mmap_obj.doca_device = resources->rdma_doca_device;
297  host_mmap_obj.memrange_addr = (void *)&send_val;
298  host_mmap_obj.memrange_len = sizeof(uint64_t);
299  doca_err = doca_mmap_obj_init(&host_mmap_obj);
300  if (doca_err != DOCA_SUCCESS) {
301  DOCA_LOG_ERR("Function doca_mmap_obj_init failed (%s)", doca_error_get_descr(doca_err));
302  goto destroy_dpa_mmap_obj;
303  }
304 
305  DOCA_LOG_INFO("Trigger an RPC to prepare Target DPA receive memory");
306  doca_err = doca_dpa_rpc(resources->rdma_dpa_ctx,
308  &retval,
309  resources->rdma_dpa_ctx_handle,
310  target_rdma_obj.dpa_rdma,
311  received_buf_dev_ptr,
312  dpa_mmap_obj.dpa_mmap_handle,
313  dpa_mmap_obj.memrange_len);
314  if (doca_err != DOCA_SUCCESS) {
315  DOCA_LOG_ERR("Function doca_dpa_rpc failed (%s)", doca_error_get_descr(doca_err));
316  goto destroy_host_mmap_obj;
317  }
318 
319  DOCA_LOG_INFO("Trigger an RPC to post send on Initiator DOCA RDMA with buffer %lu", send_val);
320  doca_err = doca_dpa_rpc(resources->rdma_dpa_ctx,
322  &retval,
323  resources->rdma_dpa_ctx_handle,
324  initiator_rdma_obj.dpa_rdma,
325  &send_val,
326  host_mmap_obj.dpa_mmap_handle,
327  host_mmap_obj.memrange_len);
328  if (doca_err != DOCA_SUCCESS) {
329  DOCA_LOG_ERR("Function doca_dpa_rpc failed (%s)", doca_error_get_descr(doca_err));
330  goto destroy_host_mmap_obj;
331  }
332 
333  DOCA_LOG_INFO("Waiting for Target Thread to set completion Sync Event value to be greater than %lu",
334  (expected_receive_val - 1));
335  doca_err = doca_sync_event_wait_gt(comp_event, (expected_receive_val - 1), SYNC_EVENT_MASK_FFS);
336  if (doca_err != DOCA_SUCCESS) {
337  DOCA_LOG_ERR("Function doca_sync_event_wait_gt failed (%s)", doca_error_get_descr(doca_err));
338  goto destroy_host_mmap_obj;
339  }
340 
341  DOCA_LOG_INFO("Tear down");
342 
343 destroy_host_mmap_obj:
344  tmp_doca_err = doca_mmap_obj_destroy(&host_mmap_obj);
345  if (tmp_doca_err != DOCA_SUCCESS) {
346  DOCA_LOG_ERR("Function doca_mmap_obj_destroy failed: %s", doca_error_get_descr(tmp_doca_err));
347  DOCA_ERROR_PROPAGATE(doca_err, tmp_doca_err);
348  }
349 
350 destroy_dpa_mmap_obj:
351  tmp_doca_err = doca_mmap_obj_destroy(&dpa_mmap_obj);
352  if (tmp_doca_err != DOCA_SUCCESS) {
353  DOCA_LOG_ERR("Function doca_mmap_obj_destroy failed: %s", doca_error_get_descr(tmp_doca_err));
354  DOCA_ERROR_PROPAGATE(doca_err, tmp_doca_err);
355  }
356 
357 destroy_received_buf_dev_ptr:
358  tmp_doca_err = doca_dpa_mem_free(resources->rdma_dpa_ctx, received_buf_dev_ptr);
359  if (tmp_doca_err != DOCA_SUCCESS) {
360  DOCA_LOG_ERR("Function doca_dpa_mem_free failed: %s", doca_error_get_descr(tmp_doca_err));
361  DOCA_ERROR_PROPAGATE(doca_err, tmp_doca_err);
362  }
363 
364 destroy_completion_sync_event:
365  tmp_doca_err = doca_sync_event_destroy(comp_event);
366  if (tmp_doca_err != DOCA_SUCCESS) {
367  DOCA_LOG_ERR("Function doca_sync_event_destroy failed: %s", doca_error_get_descr(tmp_doca_err));
368  DOCA_ERROR_PROPAGATE(doca_err, tmp_doca_err);
369  }
370 
371 destroy_target_rdma_obj:
372  tmp_doca_err = rdma_obj_destroy(&target_rdma_obj, 0);
373  if (tmp_doca_err != DOCA_SUCCESS) {
374  DOCA_LOG_ERR("Function rdma_objs_destroy failed: %s", doca_error_get_descr(tmp_doca_err));
375  DOCA_ERROR_PROPAGATE(doca_err, tmp_doca_err);
376  }
377 
378 destroy_target_rdma_completion_obj:
379  tmp_doca_err = dpa_completion_obj_destroy(&target_dpa_completion_obj);
380  if (tmp_doca_err != DOCA_SUCCESS) {
381  DOCA_LOG_ERR("Function dpa_completion_obj_destroy failed: %s", doca_error_get_descr(tmp_doca_err));
382  DOCA_ERROR_PROPAGATE(doca_err, tmp_doca_err);
383  }
384 
385 destroy_target_thread_obj:
386  tmp_doca_err = dpa_thread_obj_destroy(&target_thread_obj);
387  if (tmp_doca_err != DOCA_SUCCESS) {
388  DOCA_LOG_ERR("Function dpa_thread_obj_destroy failed: %s", doca_error_get_descr(tmp_doca_err));
389  DOCA_ERROR_PROPAGATE(doca_err, tmp_doca_err);
390  }
391 
392 destroy_target_thread_arg_dev_ptr:
393  tmp_doca_err = doca_dpa_mem_free(resources->rdma_dpa_ctx, thread_arg_dev_ptr);
394  if (tmp_doca_err != DOCA_SUCCESS) {
395  DOCA_LOG_ERR("Function doca_dpa_mem_free failed: %s", doca_error_get_descr(tmp_doca_err));
396  DOCA_ERROR_PROPAGATE(doca_err, tmp_doca_err);
397  }
398 
399 destroy_initiator_rdma_obj:
400  tmp_doca_err = rdma_obj_destroy(&initiator_rdma_obj, 1);
401  if (tmp_doca_err != DOCA_SUCCESS) {
402  DOCA_LOG_ERR("Function rdma_objs_destroy failed: %s", doca_error_get_descr(tmp_doca_err));
403  DOCA_ERROR_PROPAGATE(doca_err, tmp_doca_err);
404  }
405 
406 destroy_initiator_rdma_completion_obj:
407  tmp_doca_err = dpa_completion_obj_destroy(&initiator_dpa_completion_obj);
408  if (tmp_doca_err != DOCA_SUCCESS) {
409  DOCA_LOG_ERR("Function dpa_completion_obj_destroy failed: %s", doca_error_get_descr(tmp_doca_err));
410  DOCA_ERROR_PROPAGATE(doca_err, tmp_doca_err);
411  }
412 
413 exit:
414  return doca_err;
415 }
#define NULL
Definition: __stddef_null.h:26
static doca_error_t create_doca_dpa_completion_sync_event(struct doca_dpa *doca_dpa, struct doca_dev *doca_device, struct doca_sync_event **comp_event)
#define SYNC_EVENT_MASK_FFS
doca_dpa_func_t thread_kernel
static doca_error_t rdma_obj_create(struct dpa_resources *resources, struct dpa_completion_obj *dpa_completion_obj, struct dpa_rdma_obj *dpa_rdma_obj)
Create, attach and start DPA RDMA object.
doca_dpa_func_t rdma_post_send_rpc
doca_error_t dpa_basic_initiator_target(struct dpa_resources *resources)
Sample's Logic.
doca_dpa_func_t rdma_post_receive_rpc
DOCA_LOG_REGISTER(DPA_BASIC_INITIATOR_TARGET::SAMPLE)
static doca_error_t rdma_obj_destroy(struct dpa_rdma_obj *dpa_rdma_obj, uint8_t is_initiator)
Destroy Initiator/Target DPA RDMA object.
static doca_error_t rdma_objs_connect(struct dpa_rdma_obj *initiator_rdma_obj, struct dpa_rdma_obj *target_rdma_obj)
RDMA Connect Initiator & Target DPA RDMA objects.
doca_error_t dpa_rdma_obj_destroy(struct dpa_rdma_obj *dpa_rdma_obj)
Destroy DPA RDMA.
Definition: dpa_common.c:1107
doca_error_t dpa_rdma_obj_start(struct dpa_rdma_obj *dpa_rdma_obj)
Start DPA RDMA.
Definition: dpa_common.c:1058
doca_error_t dpa_thread_obj_init(struct dpa_thread_obj *dpa_thread_obj)
Initialize DPA thread.
Definition: dpa_common.c:817
doca_error_t doca_mmap_obj_destroy(struct doca_mmap_obj *doca_mmap_obj)
Destroy DOCA Mmap.
Definition: dpa_common.c:1209
doca_error_t dpa_completion_obj_init(struct dpa_completion_obj *dpa_completion_obj)
Initialize DPA completion.
Definition: dpa_common.c:877
doca_error_t dpa_rdma_obj_init(struct dpa_rdma_obj *dpa_rdma_obj)
Initialize DPA RDMA without starting it.
Definition: dpa_common.c:976
doca_error_t doca_mmap_obj_init(struct doca_mmap_obj *doca_mmap_obj)
Initialize DOCA Mmap.
Definition: dpa_common.c:1126
doca_error_t dpa_completion_obj_destroy(struct dpa_completion_obj *dpa_completion_obj)
Destroy DPA completion.
Definition: dpa_common.c:916
doca_error_t dpa_thread_obj_destroy(struct dpa_thread_obj *dpa_thread_obj)
Destroy DPA thread.
Definition: dpa_common.c:864
#define RDMA_DEVICE_DEFAULT_GID_INDEX
default RDMA device GID index
Definition: dpa_common.h:65
#define RDMA_DEFAULT_BUF_LIST_LEN
default RDMA connection receive buffer length
Definition: dpa_common.h:70
@ MMAP_TYPE_DPA
Definition: dpa_common.h:172
@ MMAP_TYPE_CPU
Definition: dpa_common.h:171
struct rdma_resources resources
DOCA_EXPERIMENTAL doca_error_t doca_dpa_thread_run(struct doca_dpa_thread *dpa_thread)
Run DPA thread.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_mem_alloc(struct doca_dpa *dpa, size_t size, doca_dpa_dev_uintptr_t *dev_ptr)
Allocate DPA heap memory.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_mem_free(struct doca_dpa *dpa, doca_dpa_dev_uintptr_t dev_ptr)
Free the previously allocated DPA memory.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_rpc(struct doca_dpa *dpa, doca_dpa_func_t *func, uint64_t *retval,...)
RPC to run DPA kernel.
void() doca_dpa_func_t(void)
Generic function pointer type.
Definition: doca_dpa.h:118
DOCA_EXPERIMENTAL doca_error_t doca_dpa_h2d_memcpy(struct doca_dpa *dpa, doca_dpa_dev_uintptr_t dst_ptr, void *src_ptr, size_t size)
Copy from host memory to DPA Heap.
uint64_t doca_dpa_dev_uintptr_t
DPA pointer type definition.
Definition: doca_dpa.h:78
DOCA_EXPERIMENTAL doca_error_t doca_dpa_memset(struct doca_dpa *dpa, doca_dpa_dev_uintptr_t dev_ptr, int value, size_t size)
Set DPA Heap memory to a value.
#define DOCA_ERROR_PROPAGATE(r, t)
Save the first encountered doca_error_t.
Definition: doca_error.h:83
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_SUCCESS
Definition: doca_error.h:38
#define DOCA_LOG_ERR(format,...)
Generates an ERROR application log message.
Definition: doca_log.h:466
#define DOCA_LOG_INFO(format,...)
Generates an INFO application log message.
Definition: doca_log.h:486
DOCA_EXPERIMENTAL doca_error_t doca_rdma_connect(struct doca_rdma *rdma, const void *remote_rdma_conn_details, size_t remote_rdma_conn_details_size, struct doca_rdma_connection *rdma_connection)
Connect to remote doca_rdma peer. Can only be called when the ctx is in DOCA_CTX_STATE_STARTING state...
uint64_t doca_dpa_dev_sync_event_t
DOCA Sync Event DPA handle.
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_wait_gt(struct doca_sync_event *event, uint64_t value, uint64_t mask)
Wait for the value of a Sync Event to be grater than some threshold value synchronously in a polling ...
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_destroy(struct doca_sync_event *event)
Destroy a Sync Event instance.
@ DOCA_ACCESS_FLAG_LOCAL_READ_WRITE
Definition: doca_types.h:83
@ DOCA_ACCESS_FLAG_RDMA_READ
Definition: doca_types.h:84
@ DOCA_ACCESS_FLAG_RDMA_ATOMIC
Definition: doca_types.h:86
@ DOCA_ACCESS_FLAG_RDMA_WRITE
Definition: doca_types.h:85
A struct that includes all the resources needed for DOCA Mmap.
Definition: dpa_common.h:178
size_t memrange_len
Definition: dpa_common.h:184
enum mmap_type mmap_type
Definition: dpa_common.h:179
uint32_t permissions
Definition: dpa_common.h:182
struct doca_dev * doca_device
Definition: dpa_common.h:180
struct doca_dpa * doca_dpa
Definition: dpa_common.h:181
doca_dpa_dev_mmap_t dpa_mmap_handle
Definition: dpa_common.h:186
void * memrange_addr
Definition: dpa_common.h:183
A struct that includes all the resources needed for DPA completion.
Definition: dpa_common.h:123
struct doca_dpa_thread * thread
Definition: dpa_common.h:126
doca_dpa_dev_completion_t handle
Definition: dpa_common.h:128
struct doca_dpa_completion * dpa_comp
Definition: dpa_common.h:127
struct doca_dpa * doca_dpa
Definition: dpa_common.h:124
unsigned int queue_size
Definition: dpa_common.h:125
A struct that includes all the resources needed for DPA RDMA.
Definition: dpa_common.h:144
doca_dpa_dev_rdma_t dpa_rdma
Definition: dpa_common.h:155
struct doca_rdma_connection * connection
Definition: dpa_common.h:158
uint32_t permissions
Definition: dpa_common.h:147
uint32_t gid_index
Definition: dpa_common.h:151
size_t conn_det_len
Definition: dpa_common.h:157
uint32_t recv_queue_size
Definition: dpa_common.h:149
struct doca_dev * doca_device
Definition: dpa_common.h:145
uint32_t buf_list_len
Definition: dpa_common.h:148
struct doca_dpa_completion * dpa_comp
Definition: dpa_common.h:152
struct doca_rdma * rdma
Definition: dpa_common.h:153
struct doca_dpa * doca_dpa
Definition: dpa_common.h:146
const void * connection_details
Definition: dpa_common.h:156
A struct that includes all the resources needed for DPA.
Definition: dpa_common.h:85
DPA thread device argument struct.
A struct that includes all the resources needed for DPA thread.
Definition: dpa_common.h:111
struct doca_dpa_thread * thread
Definition: dpa_common.h:116
uint64_t arg
Definition: dpa_common.h:114
struct doca_dpa * doca_dpa
Definition: dpa_common.h:112
doca_dpa_func_t * func
Definition: dpa_common.h:113
struct doca_dpa_eu_affinity * affinity
Definition: dpa_common.h:117