QDMA DPDK PMD Exported APIs

Xilinx QDMA DPDK Interface Definitions

Header file rte_pmd_qdma.h defines data structures and functions exported by QDMA DPDK PMD.

These APIs are subject to change.

enum rte_pmd_qdma_rx_bypass_mode

Supported bypass modes in C2H direction

Constants

RTE_PMD_QDMA_RX_BYPASS_NONE
Bypass mode is disabled i.e., internal QDMA mode is enabled
RTE_PMD_QDMA_RX_BYPASS_CACHE
Cache bypass mode, where in the prefetch engine keeps the order of the descriptors to pair with the C2H data packet from the user
RTE_PMD_QDMA_RX_BYPASS_SIMPLE
Simple bypass mode, where in the user application keeps the order of the descriptors to pair with the C2H data packet from the user
RTE_PMD_QDMA_RX_BYPASS_MAX
Unsupported value

Description

Rx (C2H) queue can be configured in one of these bypass modes.

enum rte_pmd_qdma_tx_bypass_mode

Supported bypass modes in H2C direction

Constants

RTE_PMD_QDMA_TX_BYPASS_NONE
Bypass mode is disabled i.e., internal QDMA mode is enabled
RTE_PMD_QDMA_TX_BYPASS_ENABLE
H2C bypass mode
RTE_PMD_QDMA_TX_BYPASS_MAX
Unsupported value

Description

Tx (H2C) queue can be configured in one of these bypass modes.

enum rte_pmd_qdma_dir_type

Enum to specify the direction i.e. TX or RX

Constants

RTE_PMD_QDMA_TX
H2C or Tx direction
RTE_PMD_QDMA_RX
C2H or Rx direction
RTE_PMD_QDMA_DIR_TYPE_MAX
Unsupported value
enum rte_pmd_qdma_pci_func_type

Indicates the type of PCIe function i.e., PF or VF

Constants

RTE_PMD_QDMA_PCI_FUNC_PF
PCIe Physical Function
RTE_PMD_QDMA_PCI_FUNC_VF
PCIe Virtual Function
RTE_PMD_QDMA_PCI_FUNC_TYPE_MAX
Unsupported value
enum rte_pmd_qdma_queue_mode_t

Indicates queue interface i.e., Memory mapped or Streaming

Constants

RTE_PMD_QDMA_MEMORY_MAPPED_MODE
Memory mapped mode
RTE_PMD_QDMA_STREAMING_MODE
Streaming mode
RTE_PMD_QDMA_QUEUE_MODE_MAX
Unsupported value

Description

Each queue must be configured in one of these modes.

enum rte_pmd_qdma_tigger_mode_t

Indicates the completion trigger mode

Constants

RTE_PMD_QDMA_TRIG_MODE_DISABLE
Completions are not trigerred
RTE_PMD_QDMA_TRIG_MODE_EVERY
Completions are trigerred on every event
RTE_PMD_QDMA_TRIG_MODE_USER_COUNT
Completions are trigerred when specified count of packets is reached
RTE_PMD_QDMA_TRIG_MODE_USER
Completions are trigerred on user defined event
RTE_PMD_QDMA_TRIG_MODE_USER_TIMER
Completions are trigerred on every expiry of the specified time
RTE_PMD_QDMA_TRIG_MODE_USER_TIMER_COUNT
Completions are trigerred either on expiry of specified time or when specified count of packets is reached, whichever is earlier.
RTE_PMD_QDMA_TRIG_MODE_MAX
Unsupported value
enum rte_pmd_qdma_cmpt_desc_len

Indicates the completion descriptor size

Constants

RTE_PMD_QDMA_CMPT_DESC_LEN_8B
Completion descriptor size of 8 Bytes
RTE_PMD_QDMA_CMPT_DESC_LEN_16B
Completion descriptor size of 16 Bytes
RTE_PMD_QDMA_CMPT_DESC_LEN_32B
Completion descriptor size of 32 Bytes
RTE_PMD_QDMA_CMPT_DESC_LEN_64B
Completion descriptor size of 64 Bytes
RTE_PMD_QDMA_CMPT_DESC_LEN_MAX
Unsupported value
enum rte_pmd_qdma_bypass_desc_len

Indicates the descriptor size of the queue configured in bypass mode

Constants

RTE_PMD_QDMA_BYPASS_DESC_LEN_8B
Bypass descriptor size of 8 Bytes
RTE_PMD_QDMA_BYPASS_DESC_LEN_16B
Bypass descriptor size of 16 Bytes
RTE_PMD_QDMA_BYPASS_DESC_LEN_32B
Bypass descriptor size of 32 Bytes
RTE_PMD_QDMA_BYPASS_DESC_LEN_64B
Bypass descriptor size of 64 Bytes
RTE_PMD_QDMA_BYPASS_DESC_LEN_MAX
Unsupported value
enum rte_pmd_qdma_xdebug_type

Indicates the type debug information to dump

Constants

RTE_PMD_QDMA_XDEBUG_QDMA_GLOBAL_CSR
Dump QDMA Global CSR registers
RTE_PMD_QDMA_XDEBUG_QDMA_DEVICE_STRUCT
Dump QDMA device structure maintained by driver
RTE_PMD_QDMA_XDEBUG_QUEUE_INFO
Dump queue contexts maintained by HW and queue specific software information
RTE_PMD_QDMA_XDEBUG_QUEUE_DESC_DUMP
Dump descriptor information of a queue
RTE_PMD_QDMA_XDEBUG_MAX
Unsupported value
enum rte_pmd_qdma_xdebug_desc_type

Indicates the type of queue descriptor ring to dump

Constants

RTE_PMD_QDMA_XDEBUG_DESC_C2H
Dump C2H queue’s descriptor
RTE_PMD_QDMA_XDEBUG_DESC_H2C
Dump H2C queue’s descriptor
RTE_PMD_QDMA_XDEBUG_DESC_CMPT
Dump completion queue’s descriptor
RTE_PMD_QDMA_XDEBUG_DESC_MAX
Unsupported value
enum rte_pmd_qdma_device_type

Indicates the type of QDMA device

Constants

RTE_PMD_QDMA_DEVICE_SOFT
Soft IP on Ultrascale+ device
RTE_PMD_QDMA_DEVICE_VERSAL
VERSAL device
RTE_PMD_QDMA_DEVICE_VERSAL_CPM5
VERSAL CPM5 device
RTE_PMD_QDMA_DEVICE_NONE
Not a valid QDMA device
enum rte_pmd_qdma_versal_ip_type

Indicates the type of QDMA Versal IP

Constants

RTE_PMD_QDMA_VERSAL_HARD_IP
Hard IP
RTE_PMD_QDMA_VERSAL_SOFT_IP
Soft IP
RTE_PMD_QDMA_VERSAL_NONE
Not a versal device
struct rte_pmd_qdma_xdebug_desc_param

Defines the parameters needed to dump descriptor information when RTE_PMD_QDMA_XDEBUG_QUEUE_DESC_DUMP is selected

Definition

struct rte_pmd_qdma_xdebug_desc_param {
  uint16_t queue;
  int start;
  int end;
  enum rte_pmd_qdma_xdebug_desc_type type;
};

Members

queue
Queue id of the ring whose descriptor dump is required
start
First index in the ring from where to start the dump
end
Last index in the descriptor ring to dump
type
Type of queue descriptor ring to dump
struct rte_pmd_qdma_dev_attributes

QDMA device attributes

Definition

struct rte_pmd_qdma_dev_attributes {
  uint8_t num_pfs;
  uint16_t num_qs;
  uint8_t flr_present:1;
  uint8_t st_en:1;
  uint8_t mm_en:1;
  uint8_t mm_cmpt_en:1;
  uint8_t mailbox_en:1;
  uint8_t mm_channel_max;
  uint8_t cmpt_ovf_chk_dis:1;
  uint8_t sw_desc_64b:1;
  uint8_t cmpt_desc_64b:1;
  uint8_t cmpt_trig_count_timer:1;
  enum rte_pmd_qdma_device_type device_type;
  enum rte_pmd_qdma_versal_ip_type versal_ip_type;
};

Members

num_pfs
Number of PFs
num_qs
Number of Queues supported
flr_present
Indicates FLR support present or not
st_en
Indicates ST mode support present or not
mm_en
Indicates MM mode support present or not
mm_cmpt_en
Indicates MM with Completions supported or not
mailbox_en
Indicates Mailbox supported or not
mm_channel_max
Number of MM channels
cmpt_ovf_chk_dis
Indicates support of overflow check disable in CMPT ring
sw_desc_64b
Indicates support of 64 bytes C2H/H2C descriptor format
cmpt_desc_64b
Indicates support of 64 bytes CMPT descriptor format
cmpt_trig_count_timer
Indicates support of counter + timer trigger mode
device_type
QDMA Device Type
versal_ip_type
Versal IP Type
int rte_pmd_qdma_dbg_regdump(uint8_t portid)

Dumps the QDMA configuration registers for the given port.

Parameters

uint8_t portid
Port ID

Return

‘0’ on success, ‘< 0’ on failure

int rte_pmd_qdma_dbg_qdevice(uint8_t portid)

Dumps the device specific SW structure for the given port.

Parameters

uint8_t portid
Port ID

Return

‘0’ on success, ‘< 0’ on failure

int rte_pmd_qdma_dbg_qinfo(uint8_t portid, uint16_t queue)

Dumps the queue contexts and queue specific SW structures for the given queue ID.

Parameters

uint8_t portid
Port ID
uint16_t queue
Queue ID relative to the Port

Return

‘0’ on success, ‘< 0’ on failure

int rte_pmd_qdma_dbg_qdesc(uint8_t portid, uint16_t queue, int start, int end, enum rte_pmd_qdma_xdebug_desc_type type)

Dumps the Queue descriptors.

Parameters

uint8_t portid
Port ID
uint16_t queue
Queue ID relative to the Port
int start
start index of the descriptor to dump
int end
end index of the descriptor to dump
enum rte_pmd_qdma_xdebug_desc_type type
Descriptor type

Return

‘0’ on success, ‘< 0’ on failure

int rte_pmd_qdma_get_bar_details(int portid, int32_t * config_bar_idx, int32_t * user_bar_idx, int32_t * bypass_bar_idx)

Returns the BAR indices of the QDMA BARs

Parameters

int portid
Port ID
int32_t * config_bar_idx
Config BAR index
int32_t * user_bar_idx
User BAR index
int32_t * bypass_bar_idx
Bypass BAR index

Return

‘0’ on success, ‘< 0’ on failure

int rte_pmd_qdma_get_queue_base(int portid, uint32_t * queue_base)

Returns queue base for given port

Parameters

int portid
Port ID
uint32_t * queue_base
queue base

Return

‘0’ on success, ‘< 0’ on failure

Note

Application can call this API only after successful call to rte_eth_dev_configure() API.

int rte_pmd_qdma_get_pci_func_type(int portid, enum rte_pmd_qdma_pci_func_type * func_type)

Retrieves PCI function type i.e. PF or VF

Parameters

int portid
Port ID
enum rte_pmd_qdma_pci_func_type * func_type
Indicates pci function type

Return

‘0’ on success, ‘< 0’ on failure

Note

This API returns the PCIe function type i.e. PF or VF of the given port.

int rte_pmd_qdma_get_immediate_data_state(int portid, uint32_t qid, int * state)

Returns immediate data state i.e. whether enabled or disabled, for the specified queue

Parameters

int portid
Port ID
uint32_t qid
Queue ID
int * state
Pointer to the state specifying whether immediate data is enabled or not

Return

‘0’ on success, ‘< 0’ on failure

Note

Application can call this function after rte_eth_rx_queue_setup() is called. This API is applicable for streaming queues only.

int rte_pmd_qdma_set_queue_mode(int portid, uint32_t qid, enum rte_pmd_qdma_queue_mode_t mode)

Sets queue interface mode for the specified queue

Parameters

int portid
Port ID
uint32_t qid
Queue ID
enum rte_pmd_qdma_queue_mode_t mode
Queue interface mode to be set

Return

‘0’ on success, ‘< 0’ on failure

Note

Application can call this API after successful call to rte_eth_dev_configure() but, before calling rte_eth_tx_queue_setup()/rte_eth_rx_queue_setup() API. By default, all queues are setup in Streaming mode.

int rte_pmd_qdma_set_immediate_data_state(int portid, uint32_t qid, uint8_t state)

Sets immediate data state i.e. enable or disable, for the specified queue. If enabled, the user defined data in the completion ring are dumped in to a queue specific file “q_<qid>_immmediate_data.txt” in the local directory.

Parameters

int portid
Port ID
uint32_t qid
Queue ID
uint8_t state
Immediate data state to be set. Set ‘0’ to disable and ‘1’ to enable

Return

‘0’ on success, ‘< 0’ on failure

Note

Application can call this API after successful call to rte_eth_dev_configure() API. Application can also call this API after successful call to rte_eth_rx_queue_setup() only if rx queue is not in start state. This API is applicable for streaming queues only.

int rte_pmd_qdma_set_cmpt_overflow_check(int portid, uint32_t qid, uint8_t enable)

Enables or disables the overflow check (whether PIDX is overflowing the CIDX) performed by QDMA on the completion descriptor ring of specified queue.

Parameters

int portid
Port ID
uint32_t qid
Queue ID
uint8_t enable
‘1’ to enable and ‘0’ to disable the overflow check

Return

‘0’ on success, ‘< 0’ on failure

Note

Application can call this API after successful call to rte_eth_dev_configure() API. Application can also call this API after successful call to rte_eth_rx_queue_setup()/ rte_pmd_qdma_dev_cmptq_setup() API only if rx/cmpt queue is not in start state.

int rte_pmd_qdma_set_cmpt_descriptor_size(int portid, uint32_t qid, enum rte_pmd_qdma_cmpt_desc_len size)

Configures the completion ring descriptor size

Parameters

int portid
Port ID
uint32_t qid
Queue ID
enum rte_pmd_qdma_cmpt_desc_len size
Descriptor size to be configured

Return

‘0’ on success, ‘< 0’ on failure

Note

Application can call this API after successful call to rte_eth_dev_configure() but before rte_eth_rx_queue_setup() API when queue is in streaming mode, and before rte_pmd_qdma_dev_cmptq_setup when queue is in memory mapped mode. By default, the completion desciptor size is set to 8 bytes.

int rte_pmd_qdma_set_cmpt_trigger_mode(int portid, uint32_t qid, enum rte_pmd_qdma_tigger_mode_t mode)

Configures the trigger mode for completion ring CIDX updates

Parameters

int portid
Port ID
uint32_t qid
Queue ID
enum rte_pmd_qdma_tigger_mode_t mode
Trigger mode to be configured

Return

‘0’ on success, ‘< 0’ on failure

Note

Application can call this API after successful call to rte_eth_dev_configure() API. Application can also call this API after successful call to rte_eth_rx_queue_setup()/rte_pmd_qdma_dev_cmptq_setup() API only if rx/cmpt queue is not in start state.

int rte_pmd_qdma_set_cmpt_timer(int portid, uint32_t qid, uint32_t value)

Configures the timer interval in microseconds to trigger the completion ring CIDX updates

Parameters

int portid
Port ID
uint32_t qid
Queue ID
uint32_t value
Timer interval for completion trigger to be configured

Return

‘0’ on success, ‘< 0’ on failure

Note

Application can call this API after successful call to rte_eth_dev_configure() API. Application can also call this API after successful call to rte_eth_rx_queue_setup()/rte_pmd_qdma_dev_cmptq_setup() API only if rx/cmpt queue is not in start state.

int rte_pmd_qdma_set_c2h_descriptor_prefetch(int portid, uint32_t qid, uint8_t enable)

Enables or disables prefetch of the descriptors by prefetch engine

Parameters

int portid
Port ID
uint32_t qid
Queue ID
uint8_t enable
‘1’ to enable and ‘0’ to disable the descriptor prefetch

Return

‘0’ on success, ‘< 0’ on failure

Note

Application can call this API after successful call to rte_eth_dev_configure() API. Application can also call this API after successful call to rte_eth_rx_queue_setup() API, only if rx queue is not in start state.

int rte_pmd_qdma_set_mm_endpoint_addr(int portid, uint32_t qid, enum rte_pmd_qdma_dir_type dir, uint32_t addr)

Sets the PCIe endpoint memory offset at which to perform DMA operation for the specified queue operating in memory mapped mode.

Parameters

int portid
Port ID
uint32_t qid
Queue ID
enum rte_pmd_qdma_dir_type dir
Queue direction i.e. Tx or Rx
uint32_t addr
Destination address for Tx, Source address for Rx

Return

‘0’ on success, ‘< 0’ on failure

Note

This API can be called before Tx/Rx burst API’s (rte_eth_tx_burst() and rte_eth_rx_burst()) are called.

int rte_pmd_qdma_configure_tx_bypass(int portid, uint32_t qid, enum rte_pmd_qdma_tx_bypass_mode bypass_mode, enum rte_pmd_qdma_bypass_desc_len size)

Sets the TX bypass mode and bypass descriptor size for the specified queue

Parameters

int portid
Port ID.
uint32_t qid
Queue ID.
enum rte_pmd_qdma_tx_bypass_mode bypass_mode
Bypass mode to be set
enum rte_pmd_qdma_bypass_desc_len size
Bypass descriptor size to be set

Return

‘0’ on success, ‘< 0’ on failure.

Note

Application can call this API after successful call to rte_eth_dev_configure() but before calling rte_eth_tx_queue_setup() API. By default, all queues are configured in internal mode i.e. bypass disabled. If size is specified zero, then the bypass descriptor size is set to the one used in internal mode.

int rte_pmd_qdma_configure_rx_bypass(int portid, uint32_t qid, enum rte_pmd_qdma_rx_bypass_mode bypass_mode, enum rte_pmd_qdma_bypass_desc_len size)

Sets the RX bypass mode and bypass descriptor size for the specified queue

Parameters

int portid
Port ID.
uint32_t qid
Queue ID.
enum rte_pmd_qdma_rx_bypass_mode bypass_mode
Bypass mode to be set
enum rte_pmd_qdma_bypass_desc_len size
Bypass descriptor size to be set

Return

‘0’ on success, ‘< 0’ on failure.

Note

Application can call this API after successful call to rte_eth_dev_configure() but before calling rte_eth_rx_queue_setup() API. By default, all queues are configured in internal mode i.e. bypass disabled. If size is specified zero, then the bypass descriptor size is set to the one used in internal mode.

int rte_pmd_qdma_get_device_capabilities(int portid, struct rte_pmd_qdma_dev_attributes * dev_attr)

Retrive the device capabilities

Parameters

int portid
Port ID.
struct rte_pmd_qdma_dev_attributes * dev_attr
Pointer to the device capabilities structure

Return

‘0’ on success, ‘< 0’ on failure.

int rte_pmd_qdma_dev_cmptq_setup(int portid, uint32_t qid, uint16_t nb_cmpt_desc, unsigned int socket_id)

Allocate and set up a completion queue for memory mapped mode.

Parameters

int portid
Port ID.
uint32_t qid
Queue ID.
uint16_t nb_cmpt_desc
Completion queue ring size.
unsigned int socket_id
The socket_id argument is the socket identifier in case of NUMA. Its value can be SOCKET_ID_ANY if there is no NUMA constraint for the DMA memory allocated for the transmit descriptors of the ring.

Return

‘0’ on success and ‘< 0’ on failure.

Note

Application can call this API after successful call to rte_eth_dev_configure() and rte_pmd_qdma_set_queue_mode() for queues in memory mapped mode.

int rte_pmd_qdma_dev_cmptq_start(int portid, uint32_t qid)

Start the MM completion queue.

Parameters

int portid
Port ID.
uint32_t qid
Queue ID.

Return

‘0’ on success and ‘< 0’ on failure.

Note

Application can call this API after successful call to rte_pmd_qdma_dev_cmptq_setup() API when queue is in memory mapped mode.

int rte_pmd_qdma_dev_cmptq_stop(int portid, uint32_t qid)

Stop the MM completion queue.

Parameters

int portid
Port ID.
uint32_t qid
Queue ID.

Return

‘0’ on success and ‘< 0’ on failure.

Note

Application can call this API after successful call to rte_pmd_qdma_dev_cmptq_start() API when queue is in memory mapped mode.

uint16_t rte_pmd_qdma_mm_cmpt_process(int portid, uint32_t qid, void * cmpt_buff, uint16_t nb_entries)

Process the MM Completion queue entries.

Parameters

int portid
Port ID.
uint32_t qid
Queue ID.
void * cmpt_buff
User buffer pointer to store the completion data.
uint16_t nb_entries
Number of compeltion entries to process.

Return

‘number of entries processed’ on success and ‘< 0’ on failure.

Note

Application can call this API after successful call to rte_pmd_qdma_dev_cmptq_start() API.