DPDK  21.11.7
rte_gpudev.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2021 NVIDIA Corporation & Affiliates
3  */
4 
5 #ifndef RTE_GPUDEV_H
6 #define RTE_GPUDEV_H
7 
8 #include <stddef.h>
9 #include <stdint.h>
10 #include <stdbool.h>
11 
12 #include <rte_mbuf.h>
13 #include <rte_bitops.h>
14 #include <rte_compat.h>
15 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30 
32 #define RTE_GPU_DEFAULT_MAX 32
33 
35 #define RTE_GPU_ID_NONE -1
36 
37 #define RTE_GPU_ID_ANY INT16_MIN
38 
40 #define RTE_GPU_CALLBACK_ANY_DATA ((void *)-1)
41 
43 #define RTE_GPU_VOLATILE(x) (*(volatile typeof(x) *)&(x))
44 
46 #define RTE_GPU_COMM_LIST_PKTS_MAX 1024
47 
49 struct rte_gpu_info {
51  const char *name;
53  uint64_t context;
55  int16_t dev_id;
57  int16_t parent;
59  uint32_t processor_count;
61  size_t total_memory;
62  /* Local NUMA memory ID. -1 if unknown. */
63  int16_t numa_node;
64 };
65 
72 };
73 
75 typedef void (rte_gpu_callback_t)(int16_t dev_id,
76  enum rte_gpu_event event, void *user_data);
77 
82 };
83 
87  uint16_t dev_id;
89  uint32_t *ptr;
92 };
93 
97  uintptr_t addr;
99  size_t size;
100 };
101 
112 };
113 
120  uint16_t dev_id;
122  struct rte_mbuf **mbufs;
126  uint32_t num_pkts;
129 };
130 
147 __rte_experimental
148 int rte_gpu_init(size_t dev_max);
149 
159 __rte_experimental
160 uint16_t rte_gpu_count_avail(void);
161 
175 __rte_experimental
176 bool rte_gpu_is_valid(int16_t dev_id);
177 
201 __rte_experimental
202 int16_t rte_gpu_add_child(const char *name,
203  int16_t parent, uint64_t child_context);
204 
222 __rte_experimental
223 int16_t rte_gpu_find_next(int16_t dev_id, int16_t parent);
224 
234 #define RTE_GPU_FOREACH(dev_id) \
235  RTE_GPU_FOREACH_CHILD(dev_id, RTE_GPU_ID_ANY)
236 
246 #define RTE_GPU_FOREACH_PARENT(dev_id) \
247  RTE_GPU_FOREACH_CHILD(dev_id, RTE_GPU_ID_NONE)
248 
260 #define RTE_GPU_FOREACH_CHILD(dev_id, parent) \
261  for (dev_id = rte_gpu_find_next(0, parent); \
262  dev_id >= 0; \
263  dev_id = rte_gpu_find_next(dev_id + 1, parent))
264 
280 __rte_experimental
281 int rte_gpu_close(int16_t dev_id);
282 
306 __rte_experimental
307 int rte_gpu_callback_register(int16_t dev_id, enum rte_gpu_event event,
308  rte_gpu_callback_t *function, void *user_data);
309 
332 __rte_experimental
333 int rte_gpu_callback_unregister(int16_t dev_id, enum rte_gpu_event event,
334  rte_gpu_callback_t *function, void *user_data);
335 
353 __rte_experimental
354 int rte_gpu_info_get(int16_t dev_id, struct rte_gpu_info *info);
355 
377 __rte_experimental
378 void *rte_gpu_mem_alloc(int16_t dev_id, size_t size)
380 
399 __rte_experimental
400 int rte_gpu_mem_free(int16_t dev_id, void *ptr);
401 
426 __rte_experimental
427 int rte_gpu_mem_register(int16_t dev_id, size_t size, void *ptr);
428 
447 __rte_experimental
448 int rte_gpu_mem_unregister(int16_t dev_id, void *ptr);
449 
465 __rte_experimental
466 int rte_gpu_wmb(int16_t dev_id);
467 
491 __rte_experimental
492 int rte_gpu_comm_create_flag(uint16_t dev_id,
493  struct rte_gpu_comm_flag *devflag,
494  enum rte_gpu_comm_flag_type mtype);
495 
512 __rte_experimental
513 int rte_gpu_comm_destroy_flag(struct rte_gpu_comm_flag *devflag);
514 
532 __rte_experimental
533 int rte_gpu_comm_set_flag(struct rte_gpu_comm_flag *devflag,
534  uint32_t val);
535 
553 __rte_experimental
555  uint32_t *val);
556 
581 __rte_experimental
582 struct rte_gpu_comm_list *rte_gpu_comm_create_list(uint16_t dev_id,
583  uint32_t num_comm_items);
584 
600 __rte_experimental
601 int rte_gpu_comm_destroy_list(struct rte_gpu_comm_list *comm_list,
602  uint32_t num_comm_items);
603 
624 __rte_experimental
625 int rte_gpu_comm_populate_list_pkts(struct rte_gpu_comm_list *comm_list_item,
626  struct rte_mbuf **mbufs, uint32_t num_mbufs);
627 
642 __rte_experimental
643 int rte_gpu_comm_cleanup_list(struct rte_gpu_comm_list *comm_list_item);
644 
645 #ifdef __cplusplus
646 }
647 #endif
648 
649 #endif /* RTE_GPUDEV_H */
__rte_experimental int rte_gpu_wmb(int16_t dev_id)
__rte_experimental int rte_gpu_init(size_t dev_max)
int16_t dev_id
Definition: rte_gpudev.h:55
__rte_experimental int16_t rte_gpu_find_next(int16_t dev_id, int16_t parent)
__rte_experimental int rte_gpu_mem_register(int16_t dev_id, size_t size, void *ptr)
__rte_experimental int rte_gpu_comm_destroy_list(struct rte_gpu_comm_list *comm_list, uint32_t num_comm_items)
__rte_experimental int rte_gpu_callback_unregister(int16_t dev_id, enum rte_gpu_event event, rte_gpu_callback_t *function, void *user_data)
__rte_experimental int rte_gpu_comm_create_flag(uint16_t dev_id, struct rte_gpu_comm_flag *devflag, enum rte_gpu_comm_flag_type mtype)
__rte_experimental int16_t rte_gpu_add_child(const char *name, int16_t parent, uint64_t child_context)
rte_gpu_comm_list_status
Definition: rte_gpudev.h:103
const char * name
Definition: rte_gpudev.h:51
size_t total_memory
Definition: rte_gpudev.h:61
uint32_t num_pkts
Definition: rte_gpudev.h:126
__rte_experimental int rte_gpu_callback_register(int16_t dev_id, enum rte_gpu_event event, rte_gpu_callback_t *function, void *user_data)
__rte_experimental int rte_gpu_mem_free(int16_t dev_id, void *ptr)
__rte_experimental int rte_gpu_comm_cleanup_list(struct rte_gpu_comm_list *comm_list_item)
uint16_t dev_id
Definition: rte_gpudev.h:87
__rte_experimental int rte_gpu_close(int16_t dev_id)
#define __rte_alloc_size(...)
Definition: rte_common.h:164
__rte_experimental int rte_gpu_comm_destroy_flag(struct rte_gpu_comm_flag *devflag)
struct rte_mbuf ** mbufs
Definition: rte_gpudev.h:122
__rte_experimental void * rte_gpu_mem_alloc(int16_t dev_id, size_t size) __rte_alloc_size(2)
__rte_experimental int rte_gpu_mem_unregister(int16_t dev_id, void *ptr)
__rte_experimental struct rte_gpu_comm_list * rte_gpu_comm_create_list(uint16_t dev_id, uint32_t num_comm_items)
__rte_experimental int rte_gpu_comm_get_flag_value(struct rte_gpu_comm_flag *devflag, uint32_t *val)
void() rte_gpu_callback_t(int16_t dev_id, enum rte_gpu_event event, void *user_data)
Definition: rte_gpudev.h:75
__rte_experimental bool rte_gpu_is_valid(int16_t dev_id)
__rte_experimental int rte_gpu_info_get(int16_t dev_id, struct rte_gpu_info *info)
__rte_experimental uint16_t rte_gpu_count_avail(void)
__rte_experimental int rte_gpu_comm_set_flag(struct rte_gpu_comm_flag *devflag, uint32_t val)
rte_gpu_event
Definition: rte_gpudev.h:67
struct rte_gpu_comm_pkt * pkt_list
Definition: rte_gpudev.h:124
rte_gpu_comm_flag_type
Definition: rte_gpudev.h:79
int16_t parent
Definition: rte_gpudev.h:57
__rte_experimental int rte_gpu_comm_populate_list_pkts(struct rte_gpu_comm_list *comm_list_item, struct rte_mbuf **mbufs, uint32_t num_mbufs)
uintptr_t addr
Definition: rte_gpudev.h:97
uint32_t processor_count
Definition: rte_gpudev.h:59
uint64_t context
Definition: rte_gpudev.h:53
uint32_t * ptr
Definition: rte_gpudev.h:89