27 #include "../common/dpa_basic_initiator_target_common_defs.h"
77 goto destroy_rdma_obj;
104 DOCA_LOG_INFO(
"Destroy %s DOCA RDMA", (is_initiator ?
"Initiator" :
"Target"));
127 DOCA_LOG_INFO(
"Connect Initiator DOCA RDMA to Target DOCA RDMA");
137 DOCA_LOG_INFO(
"Connect Target DOCA RDMA to Initiator DOCA RDMA");
165 struct doca_sync_event *comp_event =
NULL;
170 uint64_t send_val = 10;
173 const uint64_t expected_receive_val = 10;
188 goto destroy_initiator_rdma_completion_obj;
195 goto destroy_initiator_rdma_obj;
201 target_thread_obj.
arg = thread_arg_dev_ptr;
207 goto destroy_target_thread_arg_dev_ptr;
213 target_dpa_completion_obj.
thread = target_thread_obj.
thread;
217 goto destroy_target_thread_obj;
224 goto destroy_target_rdma_completion_obj;
230 goto destroy_target_rdma_obj;
237 goto destroy_target_rdma_obj;
246 DOCA_LOG_ERR(
"Function create_doca_dpa_completion_sync_event failed (%s)",
248 goto destroy_target_rdma_obj;
251 DOCA_LOG_INFO(
"Create Target DOCA MMAP for received buffer on DPA");
255 goto destroy_completion_sync_event;
261 goto destroy_received_buf_dev_ptr;
274 goto destroy_received_buf_dev_ptr;
288 goto destroy_dpa_mmap_obj;
291 DOCA_LOG_INFO(
"Create Initiator DOCA MMAP for send buffer on Host");
302 goto destroy_dpa_mmap_obj;
305 DOCA_LOG_INFO(
"Trigger an RPC to prepare Target DPA receive memory");
311 received_buf_dev_ptr,
316 goto destroy_host_mmap_obj;
319 DOCA_LOG_INFO(
"Trigger an RPC to post send on Initiator DOCA RDMA with buffer %lu", send_val);
330 goto destroy_host_mmap_obj;
333 DOCA_LOG_INFO(
"Waiting for Target Thread to set completion Sync Event value to be greater than %lu",
334 (expected_receive_val - 1));
338 goto destroy_host_mmap_obj;
343 destroy_host_mmap_obj:
350 destroy_dpa_mmap_obj:
357 destroy_received_buf_dev_ptr:
364 destroy_completion_sync_event:
371 destroy_target_rdma_obj:
378 destroy_target_rdma_completion_obj:
385 destroy_target_thread_obj:
392 destroy_target_thread_arg_dev_ptr:
399 destroy_initiator_rdma_obj:
406 destroy_initiator_rdma_completion_obj:
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.
doca_error_t dpa_rdma_obj_start(struct dpa_rdma_obj *dpa_rdma_obj)
Start DPA RDMA.
doca_error_t dpa_thread_obj_init(struct dpa_thread_obj *dpa_thread_obj)
Initialize DPA thread.
doca_error_t doca_mmap_obj_destroy(struct doca_mmap_obj *doca_mmap_obj)
Destroy DOCA Mmap.
doca_error_t dpa_completion_obj_init(struct dpa_completion_obj *dpa_completion_obj)
Initialize DPA completion.
doca_error_t dpa_rdma_obj_init(struct dpa_rdma_obj *dpa_rdma_obj)
Initialize DPA RDMA without starting it.
doca_error_t doca_mmap_obj_init(struct doca_mmap_obj *doca_mmap_obj)
Initialize DOCA Mmap.
doca_error_t dpa_completion_obj_destroy(struct dpa_completion_obj *dpa_completion_obj)
Destroy DPA completion.
doca_error_t dpa_thread_obj_destroy(struct dpa_thread_obj *dpa_thread_obj)
Destroy DPA thread.
#define RDMA_DEVICE_DEFAULT_GID_INDEX
default RDMA device GID index
#define RDMA_DEFAULT_BUF_LIST_LEN
default RDMA connection receive buffer length
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.
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.
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.
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.
#define DOCA_LOG_ERR(format,...)
Generates an ERROR application log message.
#define DOCA_LOG_INFO(format,...)
Generates an INFO application log message.
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
@ DOCA_ACCESS_FLAG_RDMA_READ
@ DOCA_ACCESS_FLAG_RDMA_ATOMIC
@ DOCA_ACCESS_FLAG_RDMA_WRITE
A struct that includes all the resources needed for DOCA Mmap.
struct doca_dev * doca_device
struct doca_dpa * doca_dpa
doca_dpa_dev_mmap_t dpa_mmap_handle
A struct that includes all the resources needed for DPA completion.
struct doca_dpa_thread * thread
doca_dpa_dev_completion_t handle
struct doca_dpa_completion * dpa_comp
struct doca_dpa * doca_dpa
A struct that includes all the resources needed for DPA RDMA.
doca_dpa_dev_rdma_t dpa_rdma
struct doca_rdma_connection * connection
struct doca_dev * doca_device
struct doca_dpa_completion * dpa_comp
struct doca_dpa * doca_dpa
const void * connection_details
A struct that includes all the resources needed for DPA.
DPA thread device argument struct.
doca_dpa_dev_t dpa_ctx_handle
uint64_t sync_event_handle
A struct that includes all the resources needed for DPA thread.
struct doca_dpa_thread * thread
struct doca_dpa * doca_dpa
struct doca_dpa_eu_affinity * affinity