xref: /dpdk/drivers/net/ntnic/include/stream_binary_flow_api.h (revision effa04693274e59d82b24907c5ee4d1f8eef3cd7)
11d3f62a0SOleksandr Kolomeiets /*
21d3f62a0SOleksandr Kolomeiets  * SPDX-License-Identifier: BSD-3-Clause
31d3f62a0SOleksandr Kolomeiets  * Copyright(c) 2023 Napatech A/S
41d3f62a0SOleksandr Kolomeiets  */
51d3f62a0SOleksandr Kolomeiets 
61d3f62a0SOleksandr Kolomeiets #ifndef _STREAM_BINARY_FLOW_API_H_
71d3f62a0SOleksandr Kolomeiets #define _STREAM_BINARY_FLOW_API_H_
81d3f62a0SOleksandr Kolomeiets 
9*effa0469SDanylo Vodopianov #include <rte_ether.h>
10ed01e436SSerhii Iliushyk #include "rte_flow.h"
11ed01e436SSerhii Iliushyk #include "rte_flow_driver.h"
12e02fdb65SSerhii Iliushyk 
13e02fdb65SSerhii Iliushyk /* Max RSS hash key length in bytes */
14e02fdb65SSerhii Iliushyk #define MAX_RSS_KEY_LEN 40
15e02fdb65SSerhii Iliushyk 
167fa0bf29SDanylo Vodopianov /* NT specific MASKs for RSS configuration */
177fa0bf29SDanylo Vodopianov /* NOTE: Masks are required for correct RSS configuration, do not modify them! */
187fa0bf29SDanylo Vodopianov #define NT_ETH_RSS_IPV4_MASK                                                                      \
197fa0bf29SDanylo Vodopianov 	(RTE_ETH_RSS_IPV4 | RTE_ETH_RSS_FRAG_IPV4 | RTE_ETH_RSS_NONFRAG_IPV4_OTHER |              \
207fa0bf29SDanylo Vodopianov 	 RTE_ETH_RSS_NONFRAG_IPV4_SCTP | RTE_ETH_RSS_NONFRAG_IPV4_TCP |                           \
217fa0bf29SDanylo Vodopianov 	 RTE_ETH_RSS_NONFRAG_IPV4_UDP)
227fa0bf29SDanylo Vodopianov 
237fa0bf29SDanylo Vodopianov #define NT_ETH_RSS_IPV6_MASK                                                                      \
247fa0bf29SDanylo Vodopianov 	(RTE_ETH_RSS_IPV6 | RTE_ETH_RSS_FRAG_IPV6 | RTE_ETH_RSS_IPV6_EX |                         \
257fa0bf29SDanylo Vodopianov 	 RTE_ETH_RSS_IPV6_TCP_EX | RTE_ETH_RSS_IPV6_UDP_EX | RTE_ETH_RSS_NONFRAG_IPV6_OTHER |     \
267fa0bf29SDanylo Vodopianov 	 RTE_ETH_RSS_NONFRAG_IPV6_SCTP | RTE_ETH_RSS_NONFRAG_IPV6_TCP |                           \
277fa0bf29SDanylo Vodopianov 	 RTE_ETH_RSS_NONFRAG_IPV6_UDP)
287fa0bf29SDanylo Vodopianov 
297fa0bf29SDanylo Vodopianov #define NT_ETH_RSS_IP_MASK                                                                        \
307fa0bf29SDanylo Vodopianov 	(NT_ETH_RSS_IPV4_MASK | NT_ETH_RSS_IPV6_MASK | RTE_ETH_RSS_L3_SRC_ONLY |                  \
317fa0bf29SDanylo Vodopianov 	 RTE_ETH_RSS_L3_DST_ONLY)
327fa0bf29SDanylo Vodopianov 
337fa0bf29SDanylo Vodopianov /* List of all RSS flags supported for RSS calculation offload */
347fa0bf29SDanylo Vodopianov #define NT_ETH_RSS_OFFLOAD_MASK                                                                   \
357fa0bf29SDanylo Vodopianov 	(RTE_ETH_RSS_ETH | RTE_ETH_RSS_L2_PAYLOAD | RTE_ETH_RSS_IP | RTE_ETH_RSS_TCP |            \
367fa0bf29SDanylo Vodopianov 	 RTE_ETH_RSS_UDP | RTE_ETH_RSS_SCTP | RTE_ETH_RSS_L2_SRC_ONLY | RTE_ETH_RSS_L2_DST_ONLY | \
377fa0bf29SDanylo Vodopianov 	 RTE_ETH_RSS_L4_SRC_ONLY | RTE_ETH_RSS_L4_DST_ONLY | RTE_ETH_RSS_L3_SRC_ONLY |            \
387fa0bf29SDanylo Vodopianov 	 RTE_ETH_RSS_L3_DST_ONLY | RTE_ETH_RSS_VLAN | RTE_ETH_RSS_LEVEL_MASK |                    \
397fa0bf29SDanylo Vodopianov 	 RTE_ETH_RSS_IPV4_CHKSUM | RTE_ETH_RSS_L4_CHKSUM | RTE_ETH_RSS_PORT | RTE_ETH_RSS_GTPU)
407fa0bf29SDanylo Vodopianov 
411d3f62a0SOleksandr Kolomeiets /*
421d3f62a0SOleksandr Kolomeiets  * Flow frontend for binary programming interface
431d3f62a0SOleksandr Kolomeiets  */
441d3f62a0SOleksandr Kolomeiets 
451d3f62a0SOleksandr Kolomeiets #define FLOW_MAX_QUEUES 128
461d3f62a0SOleksandr Kolomeiets 
47c6821abfSDanylo Vodopianov #define RAW_ENCAP_DECAP_ELEMS_MAX 16
48*effa0469SDanylo Vodopianov 
49*effa0469SDanylo Vodopianov extern uint64_t rte_tsc_freq;
50*effa0469SDanylo Vodopianov extern rte_spinlock_t hwlock;
51*effa0469SDanylo Vodopianov 
52b01eb812SDanylo Vodopianov /*
53b01eb812SDanylo Vodopianov  * Flow eth dev profile determines how the FPGA module resources are
54b01eb812SDanylo Vodopianov  * managed and what features are available
55b01eb812SDanylo Vodopianov  */
56b01eb812SDanylo Vodopianov enum flow_eth_dev_profile {
57b01eb812SDanylo Vodopianov 	FLOW_ETH_DEV_PROFILE_INLINE = 0,
58b01eb812SDanylo Vodopianov };
59b01eb812SDanylo Vodopianov 
601d3f62a0SOleksandr Kolomeiets struct flow_queue_id_s {
611d3f62a0SOleksandr Kolomeiets 	int id;
621d3f62a0SOleksandr Kolomeiets 	int hw_id;
631d3f62a0SOleksandr Kolomeiets };
641d3f62a0SOleksandr Kolomeiets 
65c6821abfSDanylo Vodopianov /*
66c6821abfSDanylo Vodopianov  * RTE_FLOW_ACTION_TYPE_RAW_ENCAP
67c6821abfSDanylo Vodopianov  */
68c6821abfSDanylo Vodopianov struct flow_action_raw_encap {
69c6821abfSDanylo Vodopianov 	uint8_t *data;
70c6821abfSDanylo Vodopianov 	uint8_t *preserve;
71c6821abfSDanylo Vodopianov 	size_t size;
72c6821abfSDanylo Vodopianov 	struct rte_flow_item items[RAW_ENCAP_DECAP_ELEMS_MAX];
73c6821abfSDanylo Vodopianov 	int item_count;
74c6821abfSDanylo Vodopianov };
75c6821abfSDanylo Vodopianov 
76c6821abfSDanylo Vodopianov /*
77c6821abfSDanylo Vodopianov  * RTE_FLOW_ACTION_TYPE_RAW_DECAP
78c6821abfSDanylo Vodopianov  */
79c6821abfSDanylo Vodopianov struct flow_action_raw_decap {
80c6821abfSDanylo Vodopianov 	uint8_t *data;
81c6821abfSDanylo Vodopianov 	size_t size;
82c6821abfSDanylo Vodopianov 	struct rte_flow_item items[RAW_ENCAP_DECAP_ELEMS_MAX];
83c6821abfSDanylo Vodopianov 	int item_count;
84c6821abfSDanylo Vodopianov };
85c6821abfSDanylo Vodopianov 
861d3f62a0SOleksandr Kolomeiets struct flow_eth_dev;             /* port device */
87b01eb812SDanylo Vodopianov struct flow_handle;
881d3f62a0SOleksandr Kolomeiets 
891d3f62a0SOleksandr Kolomeiets #endif  /* _STREAM_BINARY_FLOW_API_H_ */
90