NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
doca_devemu_virtio.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2022 NVIDIA CORPORATION & AFFILIATES, ALL RIGHTS RESERVED.
3  *
4  * This software product is a proprietary product of NVIDIA CORPORATION &
5  * AFFILIATES (the "Company") and all right, title, and interest in and to the
6  * software product, including all associated intellectual property rights, are
7  * and shall remain exclusively with the Company.
8  *
9  * This software product is governed by the End User License Agreement
10  * provided with the software product.
11  *
12  */
13 
25 #ifndef DOCA_DEVEMU_VIRTIO_H_
26 #define DOCA_DEVEMU_VIRTIO_H_
27 
28 #include <stdint.h>
29 
30 #include <doca_error.h>
31 #include <doca_dev.h>
32 #include <doca_devemu_pci.h>
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
43 struct doca_devemu_virtio_dev;
44 
50 struct doca_devemu_virtio_type;
51 
56 struct doca_devemu_virtio_io;
57 
62 struct doca_devemu_virtio_queue_stats;
63 
64 /*********************************************************************************************************************
65  * DOCA devemu Virtio device Properties
66  *********************************************************************************************************************/
67 
81 doca_error_t doca_devemu_virtio_dev_get_device_features_63_0(const struct doca_devemu_virtio_dev *virtio_dev,
82  uint64_t *features);
83 
97 doca_error_t doca_devemu_virtio_dev_set_device_features_63_0(struct doca_devemu_virtio_dev *virtio_dev,
98  uint64_t features);
99 
113 doca_error_t doca_devemu_virtio_dev_get_driver_features_63_0(const struct doca_devemu_virtio_dev *virtio_dev,
114  uint64_t *features);
115 
129 doca_error_t doca_devemu_virtio_dev_get_config_msix_vector(const struct doca_devemu_virtio_dev *virtio_dev,
130  uint16_t *config_msix_vector);
131 
145 doca_error_t doca_devemu_virtio_dev_get_num_queues(const struct doca_devemu_virtio_dev *virtio_dev,
146  uint16_t *num_queues);
147 
161 doca_error_t doca_devemu_virtio_dev_set_num_queues(struct doca_devemu_virtio_dev *virtio_dev, uint16_t num_queues);
162 
178 doca_error_t doca_devemu_virtio_dev_get_num_enabled_queues(const struct doca_devemu_virtio_dev *virtio_dev,
179  uint16_t *num_queues);
180 
194 doca_error_t doca_devemu_virtio_dev_get_device_status(const struct doca_devemu_virtio_dev *virtio_dev,
195  uint8_t *device_status);
196 
210 doca_error_t doca_devemu_virtio_dev_get_config_generation(const struct doca_devemu_virtio_dev *virtio_dev,
211  uint8_t *config_generation);
212 
226 doca_error_t doca_devemu_virtio_dev_get_queue_size(const struct doca_devemu_virtio_dev *virtio_dev,
227  uint16_t *queue_size);
228 
242 doca_error_t doca_devemu_virtio_dev_set_queue_size(struct doca_devemu_virtio_dev *virtio_dev, uint16_t queue_size);
243 
259 doca_error_t doca_devemu_virtio_dev_get_num_required_running_virtio_io_ctxs(const struct doca_devemu_virtio_dev *virtio_dev,
260  uint32_t *num_virtio_io);
261 
278  uint32_t num_virtio_io);
279 
292 doca_error_t doca_devemu_virtio_dev_reset_complete(struct doca_devemu_virtio_dev *virtio_dev);
293 
304 struct doca_ctx *doca_devemu_virtio_dev_as_ctx(struct doca_devemu_virtio_dev *virtio_dev);
305 
316 struct doca_devemu_pci_dev *doca_devemu_virtio_dev_as_pci_dev(struct doca_devemu_virtio_dev *virtio_dev);
317 
318 /*********************************************************************************************************************
319  * DOCA devemu Virtio device context events API
320  *********************************************************************************************************************/
321 
336 typedef void (*doca_devemu_virtio_dev_event_reset_handler_cb_t)(struct doca_devemu_virtio_dev *virtio_dev,
337  union doca_data event_user_data);
338 
359 doca_error_t doca_devemu_virtio_dev_event_reset_register(struct doca_devemu_virtio_dev *virtio_dev,
361  union doca_data user_data);
362 
363 /*********************************************************************************************************************
364  * DOCA devemu Virtio device statistics
365  *********************************************************************************************************************/
366 
387 doca_error_t doca_devemu_virtio_queue_stats_create_list(struct doca_devemu_virtio_dev *virtio_dev,
388  struct doca_devemu_virtio_queue_stats ***stats_list, uint32_t *num_stats);
389 
403 doca_error_t doca_devemu_virtio_queue_stats_destroy_list(struct doca_devemu_virtio_queue_stats **stats_list);
404 
415 typedef void (*doca_devemu_virtio_queue_stats_list_populate_done_cb_t)(struct doca_devemu_virtio_queue_stats **stats_list,
416  union doca_data user_data, doca_error_t err);
417 
437 doca_error_t doca_devemu_virtio_queue_stats_populate_list(struct doca_devemu_virtio_queue_stats **stats_list,
439 
455 doca_error_t doca_devemu_virtio_queue_stats_get_id(struct doca_devemu_virtio_queue_stats *stats, uint16_t *id);
456 
472 doca_error_t doca_devemu_virtio_queue_stats_get_size(struct doca_devemu_virtio_queue_stats *stats, uint16_t *size);
473 
489 doca_error_t doca_devemu_virtio_queue_stats_get_inflights(struct doca_devemu_virtio_queue_stats *stats,
490  uint16_t *inflights);
491 
508  uint16_t *idx);
509 
525 doca_error_t doca_devemu_virtio_queue_stats_get_driver_avail_idx(struct doca_devemu_virtio_queue_stats *stats, uint16_t *idx);
526 
542 doca_error_t doca_devemu_virtio_queue_stats_get_hw_used_idx(struct doca_devemu_virtio_queue_stats *stats, uint16_t *idx);
543 
559 doca_error_t doca_devemu_virtio_queue_stats_get_driver_used_idx(struct doca_devemu_virtio_queue_stats *stats, uint16_t *idx);
560 
576 doca_error_t doca_devemu_virtio_queue_stats_get_enabled(struct doca_devemu_virtio_queue_stats *stats, uint8_t *enabled);
577 
578 #ifdef __cplusplus
579 }
580 #endif
581 
584 #endif /* DOCA_DEVEMU_VIRTIO_H_ */
static struct eth_l2_fwd_stats stats
#define DOCA_EXPERIMENTAL
To set a Symbol (or specifically a function) as experimental.
Definition: doca_compat.h:103
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_queue_stats_get_size(struct doca_devemu_virtio_queue_stats *stats, uint16_t *size)
Retrieve the Virtio queue size (depth) from its statistics structure.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_queue_stats_create_list(struct doca_devemu_virtio_dev *virtio_dev, struct doca_devemu_virtio_queue_stats ***stats_list, uint32_t *num_stats)
Create an empty list of statistics for Virtio device queues.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_dev_get_num_queues(const struct doca_devemu_virtio_dev *virtio_dev, uint16_t *num_queues)
Get the Virtio device num_queues register from common configuration structure according to Virtio spe...
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_queue_stats_get_inflights(struct doca_devemu_virtio_queue_stats *stats, uint16_t *inflights)
Retrieve the number of in-flight requests for a Virtio queue from its statistics structure.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_dev_get_device_status(const struct doca_devemu_virtio_dev *virtio_dev, uint8_t *device_status)
Get the Virtio device_status register from common configuration structure according to Virtio specifi...
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_queue_stats_get_driver_avail_idx(struct doca_devemu_virtio_queue_stats *stats, uint16_t *idx)
Retrieve the available index of a Virtio queue as seen by the driver from its statistics structure.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_queue_stats_get_hw_avail_idx(struct doca_devemu_virtio_queue_stats *stats, uint16_t *idx)
Retrieve the available index of a Virtio queue as seen by the device from its statistics structure.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_dev_get_device_features_63_0(const struct doca_devemu_virtio_dev *virtio_dev, uint64_t *features)
Get the Virtio device_feature bits (0-63) according to Virtio specification.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_dev_get_queue_size(const struct doca_devemu_virtio_dev *virtio_dev, uint16_t *queue_size)
Get the Virtio max queue size for all Virtio queues.
void(* doca_devemu_virtio_dev_event_reset_handler_cb_t)(struct doca_devemu_virtio_dev *virtio_dev, union doca_data event_user_data)
Function to be executed on Virtio device reset. The event handler will enable users to quiesce,...
DOCA_EXPERIMENTAL struct doca_devemu_pci_dev * doca_devemu_virtio_dev_as_pci_dev(struct doca_devemu_virtio_dev *virtio_dev)
Convert DOCA Virtio device instance into DOCA devemu PCI device.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_queue_stats_get_hw_used_idx(struct doca_devemu_virtio_queue_stats *stats, uint16_t *idx)
Retrieve the used index of a Virtio queue as seen by the device from its statistics structure.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_dev_get_num_required_running_virtio_io_ctxs(const struct doca_devemu_virtio_dev *virtio_dev, uint32_t *num_virtio_io)
Get the number of required running Virtio io context's to be bounded to the Virtio device context....
void(* doca_devemu_virtio_queue_stats_list_populate_done_cb_t)(struct doca_devemu_virtio_queue_stats **stats_list, union doca_data user_data, doca_error_t err)
Function to be executed upon finishing asynchronous population of Virtio queue statistics list.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_dev_set_num_required_running_virtio_io_ctxs(struct doca_devemu_virtio_dev *virtio_dev, uint32_t num_virtio_io)
Set the number of required running Virtio IO context's to be bounded to the Virtio device context....
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_dev_get_config_generation(const struct doca_devemu_virtio_dev *virtio_dev, uint8_t *config_generation)
Get the Virtio config_generation register from common configuration structure according to Virtio spe...
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_dev_set_queue_size(struct doca_devemu_virtio_dev *virtio_dev, uint16_t queue_size)
Set the Virtio max queue size for all Virtio queues.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_queue_stats_destroy_list(struct doca_devemu_virtio_queue_stats **stats_list)
Destroy a list of Virtio queue statistics structures.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_dev_get_num_enabled_queues(const struct doca_devemu_virtio_dev *virtio_dev, uint16_t *num_queues)
Get the number of enabled Virtio device queues by the driver. The driver enables a queue by setting t...
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_dev_reset_complete(struct doca_devemu_virtio_dev *virtio_dev)
Complete the Virtio device reset handling. Prior to calling this function, the user must ensure that ...
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_queue_stats_get_id(struct doca_devemu_virtio_queue_stats *stats, uint16_t *id)
Retrieve the Virtio queue index from its statistics structure.
DOCA_EXPERIMENTAL struct doca_ctx * doca_devemu_virtio_dev_as_ctx(struct doca_devemu_virtio_dev *virtio_dev)
Convert DOCA Virtio device instance into DOCA context.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_dev_get_driver_features_63_0(const struct doca_devemu_virtio_dev *virtio_dev, uint64_t *features)
Get the Virtio driver_feature bits (0-63) according to Virtio specification.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_dev_set_device_features_63_0(struct doca_devemu_virtio_dev *virtio_dev, uint64_t features)
Set the Virtio device_feature bits (0-63) according to Virtio specification.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_queue_stats_populate_list(struct doca_devemu_virtio_queue_stats **stats_list, doca_devemu_virtio_queue_stats_list_populate_done_cb_t done, union doca_data user_data)
Issue an asynchronous population of a list of Virtio queue statistics structures.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_dev_set_num_queues(struct doca_devemu_virtio_dev *virtio_dev, uint16_t num_queues)
Set the Virtio device num_queues register in common configuration structure according to Virtio speci...
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_queue_stats_get_enabled(struct doca_devemu_virtio_queue_stats *stats, uint8_t *enabled)
Retrieve the enabled status of a Virtio queue from its statistics structure.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_dev_get_config_msix_vector(const struct doca_devemu_virtio_dev *virtio_dev, uint16_t *config_msix_vector)
Get the Virtio config_msix_vector register according to Virtio specification.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_dev_event_reset_register(struct doca_devemu_virtio_dev *virtio_dev, doca_devemu_virtio_dev_event_reset_handler_cb_t handler, union doca_data user_data)
Register to Virtio device reset event.
DOCA_EXPERIMENTAL doca_error_t doca_devemu_virtio_queue_stats_get_driver_used_idx(struct doca_devemu_virtio_queue_stats *stats, uint16_t *idx)
Retrieve the used index of a Virtio queue as seen by the driver from its statistics structure.
enum doca_error doca_error_t
DOCA API return codes.
Convenience type for representing opaque data.
Definition: doca_types.h:56