lib: remove unneeded header includes
[dpdk.git] / lib / eventdev / rte_event_eth_rx_adapter.c
index 3adec52..ae1e260 100644 (file)
@@ -777,19 +777,25 @@ rxa_flush_event_buffer(struct event_eth_rx_adapter *rx_adapter,
                       struct eth_event_enqueue_buffer *buf,
                       struct rte_event_eth_rx_adapter_stats *stats)
 {
-       uint16_t count = buf->last ? buf->last - buf->head : buf->count;
+       uint16_t count = buf->count;
+       uint16_t n = 0;
 
        if (!count)
                return 0;
 
-       uint16_t n = rte_event_enqueue_new_burst(rx_adapter->eventdev_id,
-                                       rx_adapter->event_port_id,
-                                       &buf->events[buf->head],
-                                       count);
-       if (n != count)
-               stats->rx_enq_retry++;
+       if (buf->last)
+               count = buf->last - buf->head;
+
+       if (count) {
+               n = rte_event_enqueue_new_burst(rx_adapter->eventdev_id,
+                                               rx_adapter->event_port_id,
+                                               &buf->events[buf->head],
+                                               count);
+               if (n != count)
+                       stats->rx_enq_retry++;
 
-       buf->head += n;
+               buf->head += n;
+       }
 
        if (buf->last && n == count) {
                uint16_t n1;
@@ -1000,6 +1006,7 @@ rxa_eth_rx(struct event_eth_rx_adapter *rx_adapter, uint16_t port_id,
        struct rte_mbuf *mbufs[BATCH_SIZE];
        uint16_t n;
        uint32_t nb_rx = 0;
+       uint32_t nb_flushed = 0;
 
        if (rxq_empty)
                *rxq_empty = 0;
@@ -1008,7 +1015,8 @@ rxa_eth_rx(struct event_eth_rx_adapter *rx_adapter, uint16_t port_id,
         */
        while (rxa_pkt_buf_available(buf)) {
                if (buf->count >= BATCH_SIZE)
-                       rxa_flush_event_buffer(rx_adapter, buf, stats);
+                       nb_flushed +=
+                               rxa_flush_event_buffer(rx_adapter, buf, stats);
 
                stats->rx_poll_count++;
                n = rte_eth_rx_burst(port_id, queue_id, mbufs, BATCH_SIZE);
@@ -1025,9 +1033,12 @@ rxa_eth_rx(struct event_eth_rx_adapter *rx_adapter, uint16_t port_id,
        }
 
        if (buf->count > 0)
-               rxa_flush_event_buffer(rx_adapter, buf, stats);
+               nb_flushed += rxa_flush_event_buffer(rx_adapter, buf, stats);
 
        stats->rx_packets += nb_rx;
+       if (nb_flushed == 0)
+               rte_event_maintain(rx_adapter->eventdev_id,
+                                  rx_adapter->event_port_id, 0);
 
        return nb_rx;
 }
@@ -2973,15 +2984,17 @@ rte_event_eth_rx_adapter_queue_stats_get(uint8_t id,
                return -EINVAL;
        }
 
-       queue_info = &dev_info->rx_queue[rx_queue_id];
-       event_buf = queue_info->event_buf;
-       q_stats = queue_info->stats;
+       if (dev_info->internal_event_port == 0) {
+               queue_info = &dev_info->rx_queue[rx_queue_id];
+               event_buf = queue_info->event_buf;
+               q_stats = queue_info->stats;
 
-       stats->rx_event_buf_count = event_buf->count;
-       stats->rx_event_buf_size = event_buf->events_size;
-       stats->rx_packets = q_stats->rx_packets;
-       stats->rx_poll_count = q_stats->rx_poll_count;
-       stats->rx_dropped = q_stats->rx_dropped;
+               stats->rx_event_buf_count = event_buf->count;
+               stats->rx_event_buf_size = event_buf->events_size;
+               stats->rx_packets = q_stats->rx_packets;
+               stats->rx_poll_count = q_stats->rx_poll_count;
+               stats->rx_dropped = q_stats->rx_dropped;
+       }
 
        dev = &rte_eventdevs[rx_adapter->eventdev_id];
        if (dev->dev_ops->eth_rx_adapter_queue_stats_get != NULL) {
@@ -3075,8 +3088,10 @@ rte_event_eth_rx_adapter_queue_stats_reset(uint8_t id,
                return -EINVAL;
        }
 
-       queue_info = &dev_info->rx_queue[rx_queue_id];
-       rxa_queue_stats_reset(queue_info);
+       if (dev_info->internal_event_port == 0) {
+               queue_info = &dev_info->rx_queue[rx_queue_id];
+               rxa_queue_stats_reset(queue_info);
+       }
 
        dev = &rte_eventdevs[rx_adapter->eventdev_id];
        if (dev->dev_ops->eth_rx_adapter_queue_stats_reset != NULL) {
@@ -3108,6 +3123,26 @@ rte_event_eth_rx_adapter_service_id_get(uint8_t id, uint32_t *service_id)
        return rx_adapter->service_inited ? 0 : -ESRCH;
 }
 
+int
+rte_event_eth_rx_adapter_event_port_get(uint8_t id, uint8_t *event_port_id)
+{
+       struct event_eth_rx_adapter *rx_adapter;
+
+       if (rxa_memzone_lookup())
+               return -ENOMEM;
+
+       RTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_ERR_RET(id, -EINVAL);
+
+       rx_adapter = rxa_id_to_adapter(id);
+       if (rx_adapter == NULL || event_port_id == NULL)
+               return -EINVAL;
+
+       if (rx_adapter->service_inited)
+               *event_port_id = rx_adapter->event_port_id;
+
+       return rx_adapter->service_inited ? 0 : -ESRCH;
+}
+
 int
 rte_event_eth_rx_adapter_cb_register(uint8_t id,
                                        uint16_t eth_dev_id,
@@ -3323,7 +3358,7 @@ handle_rxa_get_queue_conf(const char *cmd __rte_unused,
        token = strtok(NULL, "\0");
        if (token != NULL)
                RTE_EDEV_LOG_ERR("Extra parameters passed to eventdev"
-                                " telemetry command, igrnoring");
+                                " telemetry command, ignoring");
 
        if (rte_event_eth_rx_adapter_queue_conf_get(rx_adapter_id, eth_dev_id,
                                                    rx_queue_id, &queue_conf)) {
@@ -3345,6 +3380,122 @@ handle_rxa_get_queue_conf(const char *cmd __rte_unused,
        return 0;
 }
 
+static int
+handle_rxa_get_queue_stats(const char *cmd __rte_unused,
+                          const char *params,
+                          struct rte_tel_data *d)
+{
+       uint8_t rx_adapter_id;
+       uint16_t rx_queue_id;
+       int eth_dev_id;
+       char *token, *l_params;
+       struct rte_event_eth_rx_adapter_queue_stats q_stats;
+
+       if (params == NULL || strlen(params) == 0 || !isdigit(*params))
+               return -1;
+
+       /* Get Rx adapter ID from parameter string */
+       l_params = strdup(params);
+       token = strtok(l_params, ",");
+       rx_adapter_id = strtoul(token, NULL, 10);
+       RTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_ERR_RET(rx_adapter_id, -EINVAL);
+
+       token = strtok(NULL, ",");
+       if (token == NULL || strlen(token) == 0 || !isdigit(*token))
+               return -1;
+
+       /* Get device ID from parameter string */
+       eth_dev_id = strtoul(token, NULL, 10);
+       RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(eth_dev_id, -EINVAL);
+
+       token = strtok(NULL, ",");
+       if (token == NULL || strlen(token) == 0 || !isdigit(*token))
+               return -1;
+
+       /* Get Rx queue ID from parameter string */
+       rx_queue_id = strtoul(token, NULL, 10);
+       if (rx_queue_id >= rte_eth_devices[eth_dev_id].data->nb_rx_queues) {
+               RTE_EDEV_LOG_ERR("Invalid rx queue_id %u", rx_queue_id);
+               return -EINVAL;
+       }
+
+       token = strtok(NULL, "\0");
+       if (token != NULL)
+               RTE_EDEV_LOG_ERR("Extra parameters passed to eventdev"
+                                " telemetry command, ignoring");
+
+       if (rte_event_eth_rx_adapter_queue_stats_get(rx_adapter_id, eth_dev_id,
+                                                   rx_queue_id, &q_stats)) {
+               RTE_EDEV_LOG_ERR("Failed to get Rx adapter queue stats");
+               return -1;
+       }
+
+       rte_tel_data_start_dict(d);
+       rte_tel_data_add_dict_u64(d, "rx_adapter_id", rx_adapter_id);
+       rte_tel_data_add_dict_u64(d, "eth_dev_id", eth_dev_id);
+       rte_tel_data_add_dict_u64(d, "rx_queue_id", rx_queue_id);
+       RXA_ADD_DICT(q_stats, rx_event_buf_count);
+       RXA_ADD_DICT(q_stats, rx_event_buf_size);
+       RXA_ADD_DICT(q_stats, rx_poll_count);
+       RXA_ADD_DICT(q_stats, rx_packets);
+       RXA_ADD_DICT(q_stats, rx_dropped);
+
+       return 0;
+}
+
+static int
+handle_rxa_queue_stats_reset(const char *cmd __rte_unused,
+                            const char *params,
+                            struct rte_tel_data *d __rte_unused)
+{
+       uint8_t rx_adapter_id;
+       uint16_t rx_queue_id;
+       int eth_dev_id;
+       char *token, *l_params;
+
+       if (params == NULL || strlen(params) == 0 || !isdigit(*params))
+               return -1;
+
+       /* Get Rx adapter ID from parameter string */
+       l_params = strdup(params);
+       token = strtok(l_params, ",");
+       rx_adapter_id = strtoul(token, NULL, 10);
+       RTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_ERR_RET(rx_adapter_id, -EINVAL);
+
+       token = strtok(NULL, ",");
+       if (token == NULL || strlen(token) == 0 || !isdigit(*token))
+               return -1;
+
+       /* Get device ID from parameter string */
+       eth_dev_id = strtoul(token, NULL, 10);
+       RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(eth_dev_id, -EINVAL);
+
+       token = strtok(NULL, ",");
+       if (token == NULL || strlen(token) == 0 || !isdigit(*token))
+               return -1;
+
+       /* Get Rx queue ID from parameter string */
+       rx_queue_id = strtoul(token, NULL, 10);
+       if (rx_queue_id >= rte_eth_devices[eth_dev_id].data->nb_rx_queues) {
+               RTE_EDEV_LOG_ERR("Invalid rx queue_id %u", rx_queue_id);
+               return -EINVAL;
+       }
+
+       token = strtok(NULL, "\0");
+       if (token != NULL)
+               RTE_EDEV_LOG_ERR("Extra parameters passed to eventdev"
+                                " telemetry command, ignoring");
+
+       if (rte_event_eth_rx_adapter_queue_stats_reset(rx_adapter_id,
+                                                      eth_dev_id,
+                                                      rx_queue_id)) {
+               RTE_EDEV_LOG_ERR("Failed to reset Rx adapter queue stats");
+               return -1;
+       }
+
+       return 0;
+}
+
 RTE_INIT(rxa_init_telemetry)
 {
        rte_telemetry_register_cmd("/eventdev/rxa_stats",
@@ -3358,4 +3509,12 @@ RTE_INIT(rxa_init_telemetry)
        rte_telemetry_register_cmd("/eventdev/rxa_queue_conf",
                handle_rxa_get_queue_conf,
                "Returns Rx queue config. Parameter: rxa_id, dev_id, queue_id");
+
+       rte_telemetry_register_cmd("/eventdev/rxa_queue_stats",
+               handle_rxa_get_queue_stats,
+               "Returns Rx queue stats. Parameter: rxa_id, dev_id, queue_id");
+
+       rte_telemetry_register_cmd("/eventdev/rxa_queue_stats_reset",
+               handle_rxa_queue_stats_reset,
+               "Reset Rx queue stats. Parameter: rxa_id, dev_id, queue_id");
 }