From: Kiran Kumar K <kirankum...@marvell.com> Adding support to check TX and RX descriptor status.
Signed-off-by: Kiran Kumar K <kirankum...@marvell.com> --- app/test-pmd/cmdline.c | 111 ++++++++++++++++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 8 ++ 2 files changed, 119 insertions(+) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index b6bc34b4d..c22d041c3 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -18728,6 +18728,115 @@ cmdline_parse_inst_t cmd_show_tx_metadata = { }, }; +/* *** display rx/tx descriptor status *** */ +struct cmd_show_rx_tx_desc_status_result { + cmdline_fixed_string_t cmd_show; + cmdline_fixed_string_t cmd_port; + cmdline_fixed_string_t cmd_keyword; + cmdline_fixed_string_t cmd_status; + portid_t cmd_pid; + portid_t cmd_qid; + portid_t cmd_did; +}; + +static void +cmd_show_rx_tx_desc_status_parsed(void *parsed_result, + __attribute__((unused)) struct cmdline *cl, + __attribute__((unused)) void *data) +{ + struct cmd_show_rx_tx_desc_status_result *res = parsed_result; + int rc; + + if (!rte_eth_dev_is_valid_port(res->cmd_pid)) { + printf("invalid port id %u\n", res->cmd_pid); + return; + } + + if (!strcmp(res->cmd_keyword, "rx")) { + rc = rte_eth_rx_descriptor_status(res->cmd_pid, res->cmd_qid, + res->cmd_did); + if (rc < 0) { + printf("Invalid queueid = %d\n", res->cmd_qid); + return; + } + if (rc == RTE_ETH_RX_DESC_AVAIL) + printf("Desc status = AVAILABLE\n"); + else if (rc == RTE_ETH_RX_DESC_DONE) + printf("Desc status = DONE\n"); + else + printf("Desc status = UNAVAILABLE\n"); + } else if (!strcmp(res->cmd_keyword, "tx")) { + rc = rte_eth_tx_descriptor_status(res->cmd_pid, res->cmd_qid, + res->cmd_did); + if (rc < 0) { + printf("Invalid queueid = %d\n", res->cmd_qid); + return; + } + if (rc == RTE_ETH_TX_DESC_FULL) + printf("Desc status = FULL\n"); + else if (rc == RTE_ETH_TX_DESC_DONE) + printf("Desc status = DONE\n"); + else + printf("Desc status = UNAVAILABLE\n"); + } +} + +cmdline_parse_token_string_t cmd_show_rx_tx_desc_status_show = + TOKEN_STRING_INITIALIZER(struct cmd_show_rx_tx_desc_status_result, + cmd_show, "show"); +cmdline_parse_token_string_t cmd_show_rx_tx_desc_status_port = + TOKEN_STRING_INITIALIZER(struct cmd_show_rx_tx_desc_status_result, + cmd_port, "port"); +cmdline_parse_token_num_t cmd_show_rx_tx_desc_status_pid = + TOKEN_NUM_INITIALIZER(struct cmd_show_rx_tx_desc_status_result, + cmd_pid, UINT16); +cmdline_parse_token_string_t cmd_show_rx_desc_status_keyword = + TOKEN_STRING_INITIALIZER(struct cmd_show_rx_tx_desc_status_result, + cmd_keyword, "rx"); +cmdline_parse_token_string_t cmd_show_tx_desc_status_keyword = + TOKEN_STRING_INITIALIZER(struct cmd_show_rx_tx_desc_status_result, + cmd_keyword, "tx"); +cmdline_parse_token_string_t cmd_show_rx_tx_desc_status_status = + TOKEN_STRING_INITIALIZER(struct cmd_show_rx_tx_desc_status_result, + cmd_status, "status"); +cmdline_parse_token_num_t cmd_show_rx_tx_desc_status_qid = + TOKEN_NUM_INITIALIZER(struct cmd_show_rx_tx_desc_status_result, + cmd_qid, UINT16); +cmdline_parse_token_num_t cmd_show_rx_tx_desc_status_did = + TOKEN_NUM_INITIALIZER(struct cmd_show_rx_tx_desc_status_result, + cmd_did, UINT16); +cmdline_parse_inst_t cmd_show_rx_desc_status = { + .f = cmd_show_rx_tx_desc_status_parsed, + .data = NULL, + .help_str = "show port <port_id> rx <queue_id> <desc_id> status", + .tokens = { + (void *)&cmd_show_rx_tx_desc_status_show, + (void *)&cmd_show_rx_tx_desc_status_port, + (void *)&cmd_show_rx_tx_desc_status_pid, + (void *)&cmd_show_rx_desc_status_keyword, + (void *)&cmd_show_rx_tx_desc_status_qid, + (void *)&cmd_show_rx_tx_desc_status_did, + (void *)&cmd_show_rx_tx_desc_status_status, + NULL, + }, +}; + +cmdline_parse_inst_t cmd_show_tx_desc_status = { + .f = cmd_show_rx_tx_desc_status_parsed, + .data = NULL, + .help_str = "show port <port_id> tx <queue_id> <desc_id> status", + .tokens = { + (void *)&cmd_show_rx_tx_desc_status_show, + (void *)&cmd_show_rx_tx_desc_status_port, + (void *)&cmd_show_rx_tx_desc_status_pid, + (void *)&cmd_show_tx_desc_status_keyword, + (void *)&cmd_show_rx_tx_desc_status_qid, + (void *)&cmd_show_rx_tx_desc_status_did, + (void *)&cmd_show_rx_tx_desc_status_status, + NULL, + }, +}; + /* ******************************************************************************** */ /* list of instructions */ @@ -19016,6 +19125,8 @@ cmdline_parse_ctx_t main_ctx[] = { #endif (cmdline_parse_inst_t *)&cmd_config_tx_metadata_specific, (cmdline_parse_inst_t *)&cmd_show_tx_metadata, + (cmdline_parse_inst_t *)&cmd_show_rx_desc_status, + (cmdline_parse_inst_t *)&cmd_show_tx_desc_status, (cmdline_parse_inst_t *)&cmd_set_raw, NULL, }; diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 67f4339ca..a708c5ccf 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -254,6 +254,14 @@ Display information for a given port's RX/TX queue:: testpmd> show (rxq|txq) info (port_id) (queue_id) +show desc status(rxq|txq) +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Display information for a given port's RX/TX descriptor status:: + + testpmd> show port (port_id) (rx|tx) (queue_id) (desc_id) status + + show config ~~~~~~~~~~~ -- 2.17.1