DPDK  26.07.0
rte_pmd_mlx5.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2020 Mellanox Technologies, Ltd
3  */
4 
5 #ifndef RTE_PMD_PRIVATE_MLX5_H_
6 #define RTE_PMD_PRIVATE_MLX5_H_
7 
8 #include <stdint.h>
9 
10 #include <rte_byteorder.h>
11 #include <rte_compat.h>
12 #include <rte_flow.h>
13 #include <rte_per_lcore.h>
14 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 #define RTE_PMD_MLX5_FINE_GRANULARITY_INLINE "mlx5_fine_granularity_inline"
28 
43 __rte_experimental
44 int rte_pmd_mlx5_get_dyn_flag_names(char *names[], unsigned int n);
45 
46 #define RTE_PMD_MLX5_DOMAIN_BIT_NIC_RX (1 << 0)
47 #define RTE_PMD_MLX5_DOMAIN_BIT_NIC_TX (1 << 1)
48 #define RTE_PMD_MLX5_DOMAIN_BIT_FDB (1 << 2)
68 __rte_experimental
69 int rte_pmd_mlx5_sync_flow(uint16_t port_id, uint32_t domains);
70 
74 #define RTE_PMD_MLX5_EXTERNAL_RX_QUEUE_ID_MIN (UINT16_MAX - 1000 + 1)
75 
79 #define MLX5_EXTERNAL_TX_QUEUE_ID_MIN (UINT16_MAX - 1000 + 1)
80 
84 #define RTE_PMD_MLX5_LINEAR_HASH_TAG_INDEX 255
85 
105 __rte_experimental
106 int rte_pmd_mlx5_external_rx_queue_id_map(uint16_t port_id, uint16_t dpdk_idx,
107  uint32_t hw_idx);
108 
125 __rte_experimental
126 int rte_pmd_mlx5_external_rx_queue_id_unmap(uint16_t port_id,
127  uint16_t dpdk_idx);
128 
148 __rte_experimental
149 int rte_pmd_mlx5_external_tx_queue_id_map(uint16_t port_id, uint16_t dpdk_idx,
150  uint32_t hw_idx);
151 
168 __rte_experimental
169 int rte_pmd_mlx5_external_tx_queue_id_unmap(uint16_t port_id,
170  uint16_t dpdk_idx);
171 
179 #define RTE_PMD_MLX5_HOST_SHAPER_FLAG_AVAIL_THRESH_TRIGGERED 0
180 
199 __rte_experimental
200 int rte_pmd_mlx5_host_shaper_config(int port_id, uint8_t rate, uint32_t flags);
201 
216 __rte_experimental
217 int rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num);
218 
219 /* MLX5 flow engine mode definition for live migration. */
220 enum rte_pmd_mlx5_flow_engine_mode {
221  RTE_PMD_MLX5_FLOW_ENGINE_MODE_ACTIVE, /* active means high priority, effective in HW. */
222  RTE_PMD_MLX5_FLOW_ENGINE_MODE_STANDBY, /* standby mode with lower priority flow rules. */
223 };
224 
229 #define RTE_PMD_MLX5_FLOW_ENGINE_FLAG_STANDBY_DUP_INGRESS RTE_BIT32(0)
230 
282 __rte_experimental
283 int rte_pmd_mlx5_flow_engine_set_mode(enum rte_pmd_mlx5_flow_engine_mode mode, uint32_t flags);
284 
298  uint8_t option_type;
303  uint8_t option_len;
316  uint8_t offset;
322  uint8_t sample_len;
328 };
329 
362 __rte_experimental
363 void *
365  const struct rte_pmd_mlx5_geneve_tlv tlv_list[],
366  uint8_t nb_options);
367 
383 __rte_experimental
384 int
386 
401 __rte_experimental
402 int
403 rte_pmd_mlx5_rxq_dump_contexts(uint16_t port_id, uint16_t queue_id, const char *filename);
404 
419 __rte_experimental
420 int
421 rte_pmd_mlx5_txq_dump_contexts(uint16_t port_id, uint16_t queue_id, const char *filename);
422 
427  uint32_t rate_mbps;
428  uint16_t pp_index;
429  uint16_t fw_pp_index;
430 };
431 
448 __rte_experimental
449 int
450 rte_pmd_mlx5_txq_rate_limit_query(uint16_t port_id, uint16_t queue_id,
451  struct rte_pmd_mlx5_txq_rate_limit_info *info);
452 
457  uint16_t total;
458  uint16_t port_used;
459 };
460 
492 __rte_experimental
493 int
494 rte_pmd_mlx5_pp_rate_table_query(uint16_t port_id,
495  struct rte_pmd_mlx5_pp_rate_table_info *info);
496 
507 };
508 
512  uint16_t dpdk_queue_id;
514  uint32_t hw_queue_id;
534  const char *queue_info;
535 };
536 
541  union {
553  };
554 };
555 
557 typedef void (*rte_pmd_mlx5_driver_event_callback_t)(uint16_t port_id,
558  const struct rte_pmd_mlx5_driver_event_cb_info *info,
559  const void *opaque);
560 
561 
577 __rte_experimental
578 int rte_pmd_mlx5_external_sq_disable(uint16_t port_id, uint32_t sq_num);
579 
623 int
625 
643 int
645 
680 void
682 
697 int
699 
700 struct rte_pmd_mlx5_rss_devx {
701  void *obj;
702  void *destroy_handle;
703  uint32_t id;
704 };
705 
731 __rte_experimental
732 int
733 rte_pmd_mlx5_rss_tir_register(uint16_t port_id,
734  const struct rte_flow_action_rss *rss,
735  struct rte_pmd_mlx5_rss_devx *devx);
736 
748 __rte_experimental
749 int
750 rte_pmd_mlx5_rss_tir_unregister(uint16_t port_id, void *handle);
751 
752 
753 #ifdef __cplusplus
754 }
755 #endif
756 
757 #endif /* RTE_PMD_PRIVATE_MLX5_H_ */
__rte_experimental int rte_pmd_mlx5_rss_tir_register(uint16_t port_id, const struct rte_flow_action_rss *rss, struct rte_pmd_mlx5_rss_devx *devx)
__rte_experimental int rte_pmd_mlx5_txq_rate_limit_query(uint16_t port_id, uint16_t queue_id, struct rte_pmd_mlx5_txq_rate_limit_info *info)
uint32_t rte_be32_t
__rte_experimental int rte_pmd_mlx5_host_shaper_config(int port_id, uint8_t rate, uint32_t flags)
__rte_experimental int rte_pmd_mlx5_external_rx_queue_id_unmap(uint16_t port_id, uint16_t dpdk_idx)
rte_be32_t * match_data_mask
Definition: rte_pmd_mlx5.h:327
__rte_experimental int rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
__rte_experimental void * rte_pmd_mlx5_create_geneve_tlv_parser(uint16_t port_id, const struct rte_pmd_mlx5_geneve_tlv tlv_list[], uint8_t nb_options)
rte_pmd_mlx5_driver_event_cb_type
Definition: rte_pmd_mlx5.h:498
int rte_pmd_mlx5_enable_steering(void)
enum rte_pmd_mlx5_driver_event_cb_type event
Definition: rte_pmd_mlx5.h:540
__rte_experimental int rte_pmd_mlx5_external_sq_disable(uint16_t port_id, uint32_t sq_num)
__rte_experimental int rte_pmd_mlx5_rxq_dump_contexts(uint16_t port_id, uint16_t queue_id, const char *filename)
int rte_pmd_mlx5_driver_event_cb_unregister(rte_pmd_mlx5_driver_event_callback_t cb)
void rte_pmd_mlx5_disable_steering(void)
__rte_experimental int rte_pmd_mlx5_external_tx_queue_id_unmap(uint16_t port_id, uint16_t dpdk_idx)
__rte_experimental int rte_pmd_mlx5_rss_tir_unregister(uint16_t port_id, void *handle)
__rte_experimental int rte_pmd_mlx5_destroy_geneve_tlv_parser(void *handle)
__rte_experimental int rte_pmd_mlx5_sync_flow(uint16_t port_id, uint32_t domains)
__rte_experimental int rte_pmd_mlx5_get_dyn_flag_names(char *names[], unsigned int n)
__rte_experimental int rte_pmd_mlx5_txq_dump_contexts(uint16_t port_id, uint16_t queue_id, const char *filename)
struct rte_pmd_mlx5_driver_event_cb_queue_info queue
Definition: rte_pmd_mlx5.h:552
__rte_experimental int rte_pmd_mlx5_flow_engine_set_mode(enum rte_pmd_mlx5_flow_engine_mode mode, uint32_t flags)
uint16_t rte_be16_t
__rte_experimental int rte_pmd_mlx5_external_rx_queue_id_map(uint16_t port_id, uint16_t dpdk_idx, uint32_t hw_idx)
void(* rte_pmd_mlx5_driver_event_callback_t)(uint16_t port_id, const struct rte_pmd_mlx5_driver_event_cb_info *info, const void *opaque)
Definition: rte_pmd_mlx5.h:557
int rte_pmd_mlx5_driver_event_cb_register(rte_pmd_mlx5_driver_event_callback_t cb, void *opaque)
__rte_experimental int rte_pmd_mlx5_external_tx_queue_id_map(uint16_t port_id, uint16_t dpdk_idx, uint32_t hw_idx)
__rte_experimental int rte_pmd_mlx5_pp_rate_table_query(uint16_t port_id, struct rte_pmd_mlx5_pp_rate_table_info *info)