Provided by: dpdk-doc_24.11.2-2_all bug

NAME

       rte_gpudev.h

SYNOPSIS

       #include <stddef.h>
       #include <stdint.h>
       #include <stdbool.h>
       #include <rte_mbuf.h>
       #include <rte_bitops.h>
       #include <rte_compat.h>

   Data Structures
       struct rte_gpu_info
       struct rte_gpu_comm_flag
       struct rte_gpu_comm_pkt
       struct rte_gpu_comm_list

   Macros
       #define RTE_GPU_DEFAULT_MAX   32
       #define RTE_GPU_ID_NONE   -1
       #define RTE_GPU_ID_ANY   INT16_MIN
       #define RTE_GPU_CALLBACK_ANY_DATA   ((void *)-1)
       #define RTE_GPU_VOLATILE(x)   (*(volatile typeof(x) *)&(x))
       #define RTE_GPU_COMM_LIST_PKTS_MAX   1024
       #define RTE_GPU_FOREACH(dev_id)    RTE_GPU_FOREACH_CHILD(dev_id, RTE_GPU_ID_ANY)
       #define RTE_GPU_FOREACH_PARENT(dev_id)       RTE_GPU_FOREACH_CHILD(dev_id, RTE_GPU_ID_NONE)
       #define RTE_GPU_FOREACH_CHILD(dev_id,  parent)

   Typedefs
       typedef void() rte_gpu_callback_t(int16_t dev_id, enum rte_gpu_event event, void *user_data)

   Enumerations
       enum rte_gpu_event { RTE_GPU_EVENT_NEW, RTE_GPU_EVENT_DEL }
       enum rte_gpu_comm_flag_type { RTE_GPU_COMM_FLAG_CPU = 0 }
       enum rte_gpu_comm_list_status { RTE_GPU_COMM_LIST_FREE = 0, RTE_GPU_COMM_LIST_READY,
           RTE_GPU_COMM_LIST_DONE, RTE_GPU_COMM_LIST_ERROR }

   Functions
       __rte_experimental int rte_gpu_init (size_t dev_max)
       __rte_experimental uint16_t rte_gpu_count_avail (void)
       __rte_experimental bool rte_gpu_is_valid (int16_t dev_id)
       __rte_experimental int16_t rte_gpu_add_child (const char *name, int16_t parent, uint64_t child_context)
       __rte_experimental int16_t rte_gpu_find_next (int16_t dev_id, int16_t parent)
       __rte_experimental int rte_gpu_close (int16_t dev_id)
       __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_callback_unregister (int16_t dev_id, enum rte_gpu_event event,
           rte_gpu_callback_t *function, void *user_data)
       __rte_experimental int rte_gpu_info_get (int16_t dev_id, struct rte_gpu_info *info)
       __rte_experimental void * rte_gpu_mem_alloc (int16_t dev_id, size_t size, unsigned int align)
           __rte_alloc_size(2)
       __rte_experimental int rte_gpu_mem_free (int16_t dev_id, void *ptr)
       __rte_experimental int rte_gpu_mem_register (int16_t dev_id, size_t size, void *ptr)
       __rte_experimental int rte_gpu_mem_unregister (int16_t dev_id, void *ptr)
       __rte_experimental void * rte_gpu_mem_cpu_map (int16_t dev_id, size_t size, void *ptr)
       __rte_experimental int rte_gpu_mem_cpu_unmap (int16_t dev_id, void *ptr)
       __rte_experimental int rte_gpu_wmb (int16_t dev_id)
       __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 int rte_gpu_comm_destroy_flag (struct rte_gpu_comm_flag *devflag)
       __rte_experimental int rte_gpu_comm_set_flag (struct rte_gpu_comm_flag *devflag, uint32_t val)
       __rte_experimental int rte_gpu_comm_get_flag_value (struct rte_gpu_comm_flag *devflag, uint32_t *val)
       __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_destroy_list (struct rte_gpu_comm_list *comm_list, uint32_t
           num_comm_items)
       __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)
       __rte_experimental int rte_gpu_comm_set_status (struct rte_gpu_comm_list *comm_list_item, enum
           rte_gpu_comm_list_status status)
       __rte_experimental int rte_gpu_comm_get_status (struct rte_gpu_comm_list *comm_list_item, enum
           rte_gpu_comm_list_status *status)
       __rte_experimental int rte_gpu_comm_cleanup_list (struct rte_gpu_comm_list *comm_list_item)

Detailed Description

       Generic library to interact with GPU computing device.

       The API is not thread-safe. Device management must be done by a single thread.

       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Definition in file rte_gpudev.h.

Macro Definition Documentation

   #define RTE_GPU_DEFAULT_MAX   32
       Maximum number of devices if rte_gpu_init() is not called.

       Definition at line 32 of file rte_gpudev.h.

   #define RTE_GPU_ID_NONE   -1
       Empty device ID.

       Definition at line 35 of file rte_gpudev.h.

   #define RTE_GPU_ID_ANY   INT16_MIN
       Catch-all device ID.

       Definition at line 37 of file rte_gpudev.h.

   #define RTE_GPU_CALLBACK_ANY_DATA   ((void *)-1)
       Catch-all callback data.

       Definition at line 40 of file rte_gpudev.h.

   #define RTE_GPU_VOLATILE(x)   (*(volatile typeof(x) *)&(x))
       Access variable as volatile.

       Definition at line 43 of file rte_gpudev.h.

   #define RTE_GPU_COMM_LIST_PKTS_MAX   1024
       Max number of packets per communication list.

       Definition at line 46 of file rte_gpudev.h.

   #define RTE_GPU_FOREACH(dev_id)    RTE_GPU_FOREACH_CHILD(dev_id, RTE_GPU_ID_ANY)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Macro to iterate over all valid GPU devices.

       Parameters
           dev_id The ID of the next possible valid device, usually 0 to iterate all.

       Definition at line 238 of file rte_gpudev.h.

   #define RTE_GPU_FOREACH_PARENT(dev_id)       RTE_GPU_FOREACH_CHILD(dev_id, RTE_GPU_ID_NONE)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Macro to iterate over all valid computing devices having no parent.

       Parameters
           dev_id The ID of the next possible valid device, usually 0 to iterate all.

       Definition at line 250 of file rte_gpudev.h.

   #define RTE_GPU_FOREACH_CHILD(dev_id, parent)
       Value:.PP
           for (dev_id = rte_gpu_find_next(0, parent); \
                dev_id >= 0; \
                dev_id = rte_gpu_find_next(dev_id + 1, parent))

       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Macro to iterate over all valid children of a computing device parent.

       Parameters
           dev_id The ID of the next possible valid device, usually 0 to iterate all.
           parent The device ID of the parent.

       Definition at line 264 of file rte_gpudev.h.

Typedef Documentation

   typedef void() rte_gpu_callback_t(int16_t dev_id, enum rte_gpu_event event, void *user_data)
       Prototype of event callback function.

       Definition at line 77 of file rte_gpudev.h.

Enumeration Type Documentation

   enum rte_gpu_event
       Flags passed in notification callback.

       Enumerator

       RTE_GPU_EVENT_NEW
              Device is just initialized.

       RTE_GPU_EVENT_DEL
              Device is going to be released.

       Definition at line 69 of file rte_gpudev.h.

   enum rte_gpu_comm_flag_type
       Memory where communication flag is allocated.

       Enumerator

       RTE_GPU_COMM_FLAG_CPU
              Allocate flag on CPU memory visible from device.

       Definition at line 81 of file rte_gpudev.h.

   enum rte_gpu_comm_list_status
       Possible status for the list of packets shared among CPU and device.

       Enumerator

       RTE_GPU_COMM_LIST_FREE
              Packet list can be filled with new mbufs, no one is using it.

       RTE_GPU_COMM_LIST_READY
              Packet list has been filled with new mbufs and it's ready to be used .

       RTE_GPU_COMM_LIST_DONE
              Packet list has been processed, it's ready to be freed.

       RTE_GPU_COMM_LIST_ERROR
              Some error occurred during packet list processing.

       Definition at line 105 of file rte_gpudev.h.

Function Documentation

   __rte_experimental int rte_gpu_init (size_t dev_max)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Initialize  the  device  array  before  probing  devices. If not called, the maximum of probed devices is
       RTE_GPU_DEFAULT_MAX.

       Parameters
           dev_max Maximum number of devices.

       Returns
           0 on success, -rte_errno otherwise:

           • ENOMEM if out of memory

           • EINVAL if 0 size

           • EBUSY if already initialized

   __rte_experimental uint16_t rte_gpu_count_avail (void)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Return the number of GPU detected and associated to DPDK.

       Returns
           The number of available computing devices.

   __rte_experimental bool rte_gpu_is_valid (int16_t dev_id)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Check if the device is valid and initialized in DPDK.

       Parameters
           dev_id The input device ID.

       Returns

           • True if dev_id is a valid and initialized computing device.

           • False otherwise.

   __rte_experimental int16_t rte_gpu_add_child (const char * name, int16_t parent, uint64_t child_context)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Create a virtual device representing a context in the parent device.

       Parameters
           name Unique string to identify the device.
           parent Device ID of the parent.
           child_context Opaque context handler.

       Returns
           Device ID of the new created child, -rte_errno otherwise:

           • EINVAL if empty name

           • ENAMETOOLONG if long name

           • EEXIST if existing device name

           • ENODEV if invalid parent

           • EPERM if secondary process

           • ENOENT if too many devices

           • ENOMEM if out of space

   __rte_experimental int16_t rte_gpu_find_next (int16_t dev_id, int16_t parent)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Get the ID of the next valid GPU initialized in DPDK.

       Parameters
           dev_id The initial device ID to start the research.
           parent The device ID of the parent. RTE_GPU_ID_NONE means no parent. RTE_GPU_ID_ANY means no  or  any
           parent.

       Returns
           Next device ID corresponding to a valid and initialized computing device, RTE_GPU_ID_NONE if there is
           none.

   __rte_experimental int rte_gpu_close (int16_t dev_id)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Close device or child context. All resources are released.

       Parameters
           dev_id Device ID to close.

       Returns
           0 on success, -rte_errno otherwise:

           • ENODEV if invalid dev_id

           • EPERM if driver error

   __rte_experimental    int    rte_gpu_callback_register    (int16_t    dev_id,   enum   rte_gpu_event   event,
       rte_gpu_callback_t * function, void * user_data)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Register a function as event callback. A function may be registered multiple times for different events.

       Parameters
           dev_id Device ID to get notified about. RTE_GPU_ID_ANY means all devices.
           event Device event to be registered for.
           function Callback function to be called on event.
           user_data Optional parameter passed in the callback.

       Returns
           0 on success, -rte_errno otherwise:

           • ENODEV if invalid dev_id

           • EINVAL if NULL function

           • ENOMEM if out of memory

   __rte_experimental   int   rte_gpu_callback_unregister   (int16_t   dev_id,   enum    rte_gpu_event    event,
       rte_gpu_callback_t * function, void * user_data)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Unregister for an event.

       Parameters
           dev_id Device ID to be silenced. RTE_GPU_ID_ANY means all devices.
           event Registered event.
           function Registered function.
           user_data Optional parameter as registered. RTE_GPU_CALLBACK_ANY_DATA is a catch-all.

       Returns
           0 on success, -rte_errno otherwise:

           • ENODEV if invalid dev_id

           • EINVAL if NULL function

   __rte_experimental int rte_gpu_info_get (int16_t dev_id, struct rte_gpu_info * info)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Return device specific info.

       Parameters
           dev_id Device ID to get info.
           info Memory structure to fill with the info.

       Returns
           0 on success, -rte_errno otherwise:

           • ENODEV if invalid dev_id

           • EINVAL if NULL info

           • EPERM if driver error

   __rte_experimental void * rte_gpu_mem_alloc (int16_t dev_id, size_t size, unsigned int align)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Allocate a chunk of memory in the device.

       Parameters
           dev_id Device ID requiring allocated memory.
           size Number of bytes to allocate. Requesting 0 will do nothing.
           align  If  0,  the return is a pointer that is suitably aligned for any kind of variable (in the same
           manner as malloc()). Otherwise, the return is a pointer that is a multiple of align. In this case, it
           must obviously be a power of two.

       Returns
           A pointer to the allocated memory, otherwise NULL and rte_errno is set:

           • ENODEV if invalid dev_id

           • EINVAL if align is not a power of two

           • ENOTSUP if operation not supported by the driver

           • E2BIG if size is higher than limit

           • ENOMEM if out of space

           • EPERM if driver error

   __rte_experimental int rte_gpu_mem_free (int16_t dev_id, void * ptr)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Deallocate a chunk of memory allocated with rte_gpu_mem_alloc().

       Parameters
           dev_id Reference device ID.
           ptr Pointer to the memory area to be deallocated. NULL is a no-op accepted value.

       Returns
           0 on success, -rte_errno otherwise:

           • ENODEV if invalid dev_id

           • ENOTSUP if operation not supported by the driver

           • EPERM if driver error

   __rte_experimental int rte_gpu_mem_register (int16_t dev_id, size_t size, void * ptr)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Register a chunk of memory on the CPU usable by the device.

       Parameters
           dev_id Device ID requiring allocated memory.
           size Number of bytes to allocate. Requesting 0 will do nothing.
           ptr Pointer to the memory area to be registered. NULL is a no-op accepted value.

       Returns
           A pointer to the allocated memory, otherwise NULL and rte_errno is set:

           • ENODEV if invalid dev_id

           • EINVAL if reserved flags

           • ENOTSUP if operation not supported by the driver

           • E2BIG if size is higher than limit

           • ENOMEM if out of space

           • EPERM if driver error

   __rte_experimental int rte_gpu_mem_unregister (int16_t dev_id, void * ptr)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Deregister a chunk of memory previously registered with rte_gpu_mem_register()

       Parameters
           dev_id Reference device ID.
           ptr Pointer to the memory area to be unregistered. NULL is a no-op accepted value.

       Returns
           0 on success, -rte_errno otherwise:

           • ENODEV if invalid dev_id

           • ENOTSUP if operation not supported by the driver

           • EPERM if driver error

   __rte_experimental void * rte_gpu_mem_cpu_map (int16_t dev_id, size_t size, void * ptr)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Map a chunk of GPU memory to make it accessible from the CPU using the memory  pointer  returned  by  the
       function. GPU memory has to be allocated via rte_gpu_mem_alloc().

       Parameters
           dev_id Device ID requiring mapped memory.
           size Number of bytes to map. Requesting 0 will do nothing.
           ptr Pointer to the GPU memory area to be mapped. NULL is a no-op accepted value.

       Returns
           A pointer to the mapped GPU memory usable by the CPU, otherwise NULL and rte_errno is set:

           • ENODEV if invalid dev_id

           • ENOTSUP if operation not supported by the driver

           • E2BIG if size is higher than limit

           • ENOMEM if out of space

           • EPERM if driver error

   __rte_experimental int rte_gpu_mem_cpu_unmap (int16_t dev_id, void * ptr)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Unmap a chunk of GPU memory previously mapped with rte_gpu_mem_cpu_map()

       Parameters
           dev_id Reference device ID.
           ptr Pointer to the GPU memory area to be unmapped. NULL is a no-op accepted value.

       Returns
           0 on success, -rte_errno otherwise:

           • ENODEV if invalid dev_id

           • ENOTSUP if operation not supported by the driver

           • EPERM if driver error

   __rte_experimental int rte_gpu_wmb (int16_t dev_id)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Enforce a GPU write memory barrier.

       Parameters
           dev_id Reference device ID.

       Returns
           0 on success, -rte_errno otherwise:

           • ENODEV if invalid dev_id

           • ENOTSUP if operation not supported by the driver

           • EPERM if driver error

   __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)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Create a communication flag that can be shared between CPU threads and device workload to  exchange  some
       status info (e.g. work is done, processing can start, etc..).

       Parameters
           dev_id Reference device ID.
           devflag Pointer to the memory area of the devflag structure.
           mtype Type of memory to allocate the communication flag.

       Returns
           0 on success, -rte_errno otherwise:

           • ENODEV if invalid dev_id

           • EINVAL if invalid inputs

           • ENOTSUP if operation not supported by the driver

           • ENOMEM if out of space

           • EPERM if driver error

   __rte_experimental int rte_gpu_comm_destroy_flag (struct rte_gpu_comm_flag * devflag)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Deallocate a communication flag.

       Parameters
           devflag Pointer to the memory area of the devflag structure.

       Returns
           0 on success, -rte_errno otherwise:

           • ENODEV if invalid dev_id

           • EINVAL if NULL devflag

           • ENOTSUP if operation not supported by the driver

           • EPERM if driver error

   __rte_experimental int rte_gpu_comm_set_flag (struct rte_gpu_comm_flag * devflag, uint32_t val)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Set  the  value  of a communication flag as the input value. Flag memory area is treated as volatile. The
       flag must have been allocated with RTE_GPU_COMM_FLAG_CPU.

       Parameters
           devflag Pointer to the memory area of the devflag structure.
           val Value to set in the flag.

       Returns
           0 on success, -rte_errno otherwise:

           • EINVAL if invalid input params

   __rte_experimental int rte_gpu_comm_get_flag_value (struct rte_gpu_comm_flag * devflag, uint32_t * val)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Get the value of the communication flag. Flag memory area is treated as volatile. The flag must have been
       allocated with RTE_GPU_COMM_FLAG_CPU.

       Parameters
           devflag Pointer to the memory area of the devflag structure.
           val Flag output value.

       Returns
           0 on success, -rte_errno otherwise:

           • EINVAL if invalid input params

   __rte_experimental  struct  rte_gpu_comm_list   *   rte_gpu_comm_create_list   (uint16_t   dev_id,   uint32_t
       num_comm_items)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Create a communication list that can be used to share packets between CPU and device. Each element of the
       list contains:

       • a packet list of RTE_GPU_COMM_LIST_PKTS_MAX elements

       • number of packets in the list

       • a status flag to communicate if the packet list is FREE, READY to be processed, DONE with processing.

       The list is allocated in CPU-visible memory. At creation time, every list is in FREE state.

       Parameters
           dev_id Reference device ID.
           num_comm_items Number of items in the communication list.

       Returns
           A pointer to the allocated list, otherwise NULL and rte_errno is set:

           • EINVAL if invalid input params

   __rte_experimental   int   rte_gpu_comm_destroy_list   (struct   rte_gpu_comm_list   *   comm_list,  uint32_t
       num_comm_items)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Destroy a communication list.

       Parameters
           comm_list Communication list to be destroyed.
           num_comm_items Number of items in the communication list.

       Returns
           0 on success, -rte_errno otherwise:

           • EINVAL if invalid input params

   __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)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Populate  the  packets list of the communication item with info from a list of mbufs. Status flag of that
       packet list is set to READY.

       Parameters
           comm_list_item Communication list item to fill.
           mbufs List of mbufs.
           num_mbufs Number of mbufs.

       Returns
           0 on success, -rte_errno otherwise:

           • EINVAL if invalid input params

           • ENOTSUP if mbufs are chained (multiple segments)

   __rte_experimental   int   rte_gpu_comm_set_status   (struct   rte_gpu_comm_list   *   comm_list_item,   enum
       rte_gpu_comm_list_status status)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Set status flag value of a communication list item.

       Parameters
           comm_list_item Communication list item to query.
           status Status value to set.

       Returns
           0 on success, -rte_errno otherwise:

           • EINVAL if invalid input params

   __rte_experimental   int   rte_gpu_comm_get_status   (struct   rte_gpu_comm_list   *   comm_list_item,   enum
       rte_gpu_comm_list_status * status)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Get status flag value of a communication list item.

       Parameters
           comm_list_item Communication list item to query. Input parameter.
           status Communication list item status flag value. Output parameter.

       Returns
           0 on success, -rte_errno otherwise:

           • EINVAL if invalid input params

   __rte_experimental int rte_gpu_comm_cleanup_list (struct rte_gpu_comm_list * comm_list_item)
       Warning
           EXPERIMENTAL: this API may change without prior notice.

       Reset a communication list item to the original state. The status flag set to FREE and mbufs are returned
       to the pool.

       Parameters
           comm_list_item Communication list item to reset.

       Returns
           0 on success, -rte_errno otherwise:

           • EINVAL if invalid input params

Author

       Generated automatically by Doxygen for DPDK from the source code.

DPDK                                             Version 24.11.2                                 rte_gpudev.h(3)