**************** Developers Guide **************** QEP DPDK driver is implemented as an Ethernet poll mode driver in DPDK v18.11. It supports streaming interface to QDMA. Driver interfaces and callbacks =============================== The Driver registers two driver interfaces (``net_qdma`` for PFs and ``net_qdma_vf`` for VFs) with DPDK RTE. However, QEP supports only PF interface. Below ``eth_dev_ops`` callbacks are implemented by the driver interface of the DPDK driver. :: static struct eth_dev_ops qdma_eth_dev_ops = { .dev_configure = qdma_dev_configure, .dev_infos_get = qdma_dev_infos_get, .dev_start = qdma_dev_start, .dev_stop = qdma_dev_stop, .dev_close = qdma_dev_close, .link_update = qdma_dev_link_update, .dev_set_link_up = qep_dev_set_link_up, .dev_set_link_down = qep_dev_set_link_down, .rx_queue_setup = qdma_dev_rx_queue_setup, .tx_queue_setup = qdma_dev_tx_queue_setup, .rx_queue_release = qdma_dev_rx_queue_release, .tx_queue_release = qdma_dev_tx_queue_release, .rx_queue_start = qdma_dev_rx_queue_start, .rx_queue_stop = qdma_dev_rx_queue_stop, .tx_queue_start = qdma_dev_tx_queue_start, .tx_queue_stop = qdma_dev_tx_queue_stop, .stats_get = qdma_dev_stats_get, .xstats_get_names = qdma_xstats_get_names, .xstats_get = qdma_xstats_get, .mtu_set = qdma_dev_mtu_set, .rxq_info_get = qep_dev_rxq_info_get, .txq_info_get = qep_dev_txq_info_get, .reta_query = qep_dev_rss_reta_query, .reta_update = qep_dev_rss_reta_update, .rss_hash_conf_get = qep_dev_rss_conf_get, .filter_ctrl = qep_filter_ctrl, }; In addition, the DPDK driver also implements below ``rte_flow_ops`` for RSS configuration. :: const struct rte_flow_ops qep_flow_ops = { .validate = qep_flow_validate, .create = qep_flow_create, .destroy = qep_flow_destroy, .flush = qep_flow_flush, }; Below sequence diagram depicts the application call flow to the driver callbacks and their high level operations. .. image:: images/dpdk_call_flow.png Implementation details of the callback APIs is described further in .. toctree:: :maxdepth: 1 dpdk-callbacks.rst Additional interfaces are exported by the driver for QDMA configuration. These new interfaces are described in .. toctree:: :maxdepth: 1 qep_pmd_export.rst DMA Hardware Error Monitoring ============================= There are various causes for errors in QDMA IP e.g. descriptor errors, DMA engine errors, etc. If the errors are enabled by SW, QDMA logs the status of error in the respective global status registers. DPDK driver executes a poll thread ``qdma_check_errors()`` every 1 second to check the error status and log the type of HW error occured on the console. DPDK Driver debug ================= DPDK driver provides APIs ``rte_pmd_qep_dbg_regdump()``, ``rte_pmd_qep_dbg_qinfo()``, ``rte_pmd_qep_dbg_qdesc()``, ``rte_pmd_qep_dbg_stmninfo()`` to dump debug information. Below debug information can be dumped using this API - Dump QDMA registers - Dump queue contexts for the given queue id - Dump software information for the given queue id - Dump the specified descriptor ring of the given queue id - Dump STM-N status and statistics registers User application can call this API to dump the required debug information.