11d918647SAlex Vesker /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
21d918647SAlex Vesker /* Copyright (c) 2019, Mellanox Technologies */
31d918647SAlex Vesker 
41d918647SAlex Vesker #ifndef MLX5_IFC_DR_H
51d918647SAlex Vesker #define MLX5_IFC_DR_H
61d918647SAlex Vesker 
71d918647SAlex Vesker enum {
81d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_L2_0		= 0,
91d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_L2_1		= 1,
101d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_L2_2		= 2,
111d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_L3_0		= 3,
121d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_L3_1		= 4,
131d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_L3_2		= 5,
141d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_L3_3		= 6,
151d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_L3_4		= 7,
161d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_L4_0		= 8,
171d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_L4_1		= 9,
181d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_MPLS		= 10,
191d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_L2_TNL_0	= 11,
201d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_REG_0		= 12,
211d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_REG_1		= 13,
221d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_REG_2		= 14,
231d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_REG_3		= 15,
241d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_L4_2		= 16,
251d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_FLEX_0	= 17,
261d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_FLEX_1	= 18,
271d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_FLEX_2	= 19,
281d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_FLEX_3	= 20,
291d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_L2_TNL_1	= 21,
301d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_METADATA	= 22,
311d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_FLD_RESERVED	= 23,
321d918647SAlex Vesker };
331d918647SAlex Vesker 
341d918647SAlex Vesker enum {
351d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_OP_SET		= 0x2,
361d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_OP_ADD		= 0x3,
371d918647SAlex Vesker };
381d918647SAlex Vesker 
391d918647SAlex Vesker enum {
401d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_HDR_L3_NONE	= 0x0,
411d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_HDR_L3_IPV4	= 0x1,
421d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_HDR_L3_IPV6	= 0x2,
431d918647SAlex Vesker };
441d918647SAlex Vesker 
451d918647SAlex Vesker enum {
461d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_HDR_L4_NONE	= 0x0,
471d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_HDR_L4_TCP	= 0x1,
481d918647SAlex Vesker 	MLX5DR_ACTION_MDFY_HW_HDR_L4_UDP	= 0x2,
491d918647SAlex Vesker };
501d918647SAlex Vesker 
511d918647SAlex Vesker enum {
521d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_NOP				= 0x00,
531d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_SRC_GVMI_AND_QP		= 0x05,
541d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL2_TUNNELING_I		= 0x0a,
551d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL2_DST_O			= 0x06,
561d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL2_DST_I			= 0x07,
571d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL2_DST_D			= 0x1b,
581d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL2_SRC_O			= 0x08,
591d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL2_SRC_I			= 0x09,
601d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL2_SRC_D			= 0x1c,
611d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL2_SRC_DST_O		= 0x36,
621d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL2_SRC_DST_I		= 0x37,
631d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL2_SRC_DST_D		= 0x38,
641d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL3_IPV6_DST_O		= 0x0d,
651d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL3_IPV6_DST_I		= 0x0e,
661d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL3_IPV6_DST_D		= 0x1e,
671d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL3_IPV6_SRC_O		= 0x0f,
681d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL3_IPV6_SRC_I		= 0x10,
691d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL3_IPV6_SRC_D		= 0x1f,
701d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL3_IPV4_5_TUPLE_O		= 0x11,
711d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL3_IPV4_5_TUPLE_I		= 0x12,
721d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL3_IPV4_5_TUPLE_D		= 0x20,
731d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL3_IPV4_MISC_O		= 0x29,
741d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL3_IPV4_MISC_I		= 0x2a,
751d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL3_IPV4_MISC_D		= 0x2b,
761d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL4_O			= 0x13,
771d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL4_I			= 0x14,
781d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL4_D			= 0x21,
791d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL4_MISC_O			= 0x2c,
801d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL4_MISC_I			= 0x2d,
811d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_ETHL4_MISC_D			= 0x2e,
821d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_MPLS_FIRST_O			= 0x15,
831d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_MPLS_FIRST_I			= 0x24,
841d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_MPLS_FIRST_D			= 0x25,
851d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_GRE				= 0x16,
861d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_FLEX_PARSER_0		= 0x22,
871d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_FLEX_PARSER_1		= 0x23,
881d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_FLEX_PARSER_TNL_HEADER	= 0x19,
891d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_GENERAL_PURPOSE		= 0x18,
901d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_STEERING_REGISTERS_0		= 0x2f,
911d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_STEERING_REGISTERS_1		= 0x30,
921d918647SAlex Vesker 	MLX5DR_STE_LU_TYPE_DONT_CARE			= 0x0f,
931d918647SAlex Vesker };
941d918647SAlex Vesker 
951d918647SAlex Vesker enum mlx5dr_ste_entry_type {
961d918647SAlex Vesker 	MLX5DR_STE_TYPE_TX		= 1,
971d918647SAlex Vesker 	MLX5DR_STE_TYPE_RX		= 2,
981d918647SAlex Vesker 	MLX5DR_STE_TYPE_MODIFY_PKT	= 6,
991d918647SAlex Vesker };
1001d918647SAlex Vesker 
1011d918647SAlex Vesker struct mlx5_ifc_ste_general_bits {
1021d918647SAlex Vesker 	u8         entry_type[0x4];
1031d918647SAlex Vesker 	u8         reserved_at_4[0x4];
1041d918647SAlex Vesker 	u8         entry_sub_type[0x8];
1051d918647SAlex Vesker 	u8         byte_mask[0x10];
1061d918647SAlex Vesker 
1071d918647SAlex Vesker 	u8         next_table_base_63_48[0x10];
1081d918647SAlex Vesker 	u8         next_lu_type[0x8];
1091d918647SAlex Vesker 	u8         next_table_base_39_32_size[0x8];
1101d918647SAlex Vesker 
1111d918647SAlex Vesker 	u8         next_table_base_31_5_size[0x1b];
1121d918647SAlex Vesker 	u8         linear_hash_enable[0x1];
1131d918647SAlex Vesker 	u8         reserved_at_5c[0x2];
1141d918647SAlex Vesker 	u8         next_table_rank[0x2];
1151d918647SAlex Vesker 
1161d918647SAlex Vesker 	u8         reserved_at_60[0xa0];
1171d918647SAlex Vesker 	u8         tag_value[0x60];
1181d918647SAlex Vesker 	u8         bit_mask[0x60];
1191d918647SAlex Vesker };
1201d918647SAlex Vesker 
1211d918647SAlex Vesker struct mlx5_ifc_ste_sx_transmit_bits {
1221d918647SAlex Vesker 	u8         entry_type[0x4];
1231d918647SAlex Vesker 	u8         reserved_at_4[0x4];
1241d918647SAlex Vesker 	u8         entry_sub_type[0x8];
1251d918647SAlex Vesker 	u8         byte_mask[0x10];
1261d918647SAlex Vesker 
1271d918647SAlex Vesker 	u8         next_table_base_63_48[0x10];
1281d918647SAlex Vesker 	u8         next_lu_type[0x8];
1291d918647SAlex Vesker 	u8         next_table_base_39_32_size[0x8];
1301d918647SAlex Vesker 
1311d918647SAlex Vesker 	u8         next_table_base_31_5_size[0x1b];
1321d918647SAlex Vesker 	u8         linear_hash_enable[0x1];
1331d918647SAlex Vesker 	u8         reserved_at_5c[0x2];
1341d918647SAlex Vesker 	u8         next_table_rank[0x2];
1351d918647SAlex Vesker 
1361d918647SAlex Vesker 	u8         sx_wire[0x1];
1371d918647SAlex Vesker 	u8         sx_func_lb[0x1];
1381d918647SAlex Vesker 	u8         sx_sniffer[0x1];
1391d918647SAlex Vesker 	u8         sx_wire_enable[0x1];
1401d918647SAlex Vesker 	u8         sx_func_lb_enable[0x1];
1411d918647SAlex Vesker 	u8         sx_sniffer_enable[0x1];
1421d918647SAlex Vesker 	u8         action_type[0x3];
1431d918647SAlex Vesker 	u8         reserved_at_69[0x1];
1441d918647SAlex Vesker 	u8         action_description[0x6];
1451d918647SAlex Vesker 	u8         gvmi[0x10];
1461d918647SAlex Vesker 
1471d918647SAlex Vesker 	u8         encap_pointer_vlan_data[0x20];
1481d918647SAlex Vesker 
1491d918647SAlex Vesker 	u8         loopback_syndome_en[0x8];
1501d918647SAlex Vesker 	u8         loopback_syndome[0x8];
1511d918647SAlex Vesker 	u8         counter_trigger[0x10];
1521d918647SAlex Vesker 
1531d918647SAlex Vesker 	u8         miss_address_63_48[0x10];
1541d918647SAlex Vesker 	u8         counter_trigger_23_16[0x8];
1551d918647SAlex Vesker 	u8         miss_address_39_32[0x8];
1561d918647SAlex Vesker 
1571d918647SAlex Vesker 	u8         miss_address_31_6[0x1a];
1581d918647SAlex Vesker 	u8         learning_point[0x1];
1591d918647SAlex Vesker 	u8         go_back[0x1];
1601d918647SAlex Vesker 	u8         match_polarity[0x1];
1611d918647SAlex Vesker 	u8         mask_mode[0x1];
1621d918647SAlex Vesker 	u8         miss_rank[0x2];
1631d918647SAlex Vesker };
1641d918647SAlex Vesker 
1651d918647SAlex Vesker struct mlx5_ifc_ste_rx_steering_mult_bits {
1661d918647SAlex Vesker 	u8         entry_type[0x4];
1671d918647SAlex Vesker 	u8         reserved_at_4[0x4];
1681d918647SAlex Vesker 	u8         entry_sub_type[0x8];
1691d918647SAlex Vesker 	u8         byte_mask[0x10];
1701d918647SAlex Vesker 
1711d918647SAlex Vesker 	u8         next_table_base_63_48[0x10];
1721d918647SAlex Vesker 	u8         next_lu_type[0x8];
1731d918647SAlex Vesker 	u8         next_table_base_39_32_size[0x8];
1741d918647SAlex Vesker 
1751d918647SAlex Vesker 	u8         next_table_base_31_5_size[0x1b];
1761d918647SAlex Vesker 	u8         linear_hash_enable[0x1];
1771d918647SAlex Vesker 	u8         reserved_at_[0x2];
1781d918647SAlex Vesker 	u8         next_table_rank[0x2];
1791d918647SAlex Vesker 
1801d918647SAlex Vesker 	u8         member_count[0x10];
1811d918647SAlex Vesker 	u8         gvmi[0x10];
1821d918647SAlex Vesker 
1831d918647SAlex Vesker 	u8         qp_list_pointer[0x20];
1841d918647SAlex Vesker 
1851d918647SAlex Vesker 	u8         reserved_at_a0[0x1];
1861d918647SAlex Vesker 	u8         tunneling_action[0x3];
1871d918647SAlex Vesker 	u8         action_description[0x4];
1881d918647SAlex Vesker 	u8         reserved_at_a8[0x8];
1891d918647SAlex Vesker 	u8         counter_trigger_15_0[0x10];
1901d918647SAlex Vesker 
1911d918647SAlex Vesker 	u8         miss_address_63_48[0x10];
1921d918647SAlex Vesker 	u8         counter_trigger_23_16[0x08];
1931d918647SAlex Vesker 	u8         miss_address_39_32[0x8];
1941d918647SAlex Vesker 
1951d918647SAlex Vesker 	u8         miss_address_31_6[0x1a];
1961d918647SAlex Vesker 	u8         learning_point[0x1];
1971d918647SAlex Vesker 	u8         fail_on_error[0x1];
1981d918647SAlex Vesker 	u8         match_polarity[0x1];
1991d918647SAlex Vesker 	u8         mask_mode[0x1];
2001d918647SAlex Vesker 	u8         miss_rank[0x2];
2011d918647SAlex Vesker };
2021d918647SAlex Vesker 
2031d918647SAlex Vesker struct mlx5_ifc_ste_modify_packet_bits {
2041d918647SAlex Vesker 	u8         entry_type[0x4];
2051d918647SAlex Vesker 	u8         reserved_at_4[0x4];
2061d918647SAlex Vesker 	u8         entry_sub_type[0x8];
2071d918647SAlex Vesker 	u8         byte_mask[0x10];
2081d918647SAlex Vesker 
2091d918647SAlex Vesker 	u8         next_table_base_63_48[0x10];
2101d918647SAlex Vesker 	u8         next_lu_type[0x8];
2111d918647SAlex Vesker 	u8         next_table_base_39_32_size[0x8];
2121d918647SAlex Vesker 
2131d918647SAlex Vesker 	u8         next_table_base_31_5_size[0x1b];
2141d918647SAlex Vesker 	u8         linear_hash_enable[0x1];
2151d918647SAlex Vesker 	u8         reserved_at_[0x2];
2161d918647SAlex Vesker 	u8         next_table_rank[0x2];
2171d918647SAlex Vesker 
2181d918647SAlex Vesker 	u8         number_of_re_write_actions[0x10];
2191d918647SAlex Vesker 	u8         gvmi[0x10];
2201d918647SAlex Vesker 
2211d918647SAlex Vesker 	u8         header_re_write_actions_pointer[0x20];
2221d918647SAlex Vesker 
2231d918647SAlex Vesker 	u8         reserved_at_a0[0x1];
2241d918647SAlex Vesker 	u8         tunneling_action[0x3];
2251d918647SAlex Vesker 	u8         action_description[0x4];
2261d918647SAlex Vesker 	u8         reserved_at_a8[0x8];
2271d918647SAlex Vesker 	u8         counter_trigger_15_0[0x10];
2281d918647SAlex Vesker 
2291d918647SAlex Vesker 	u8         miss_address_63_48[0x10];
2301d918647SAlex Vesker 	u8         counter_trigger_23_16[0x08];
2311d918647SAlex Vesker 	u8         miss_address_39_32[0x8];
2321d918647SAlex Vesker 
2331d918647SAlex Vesker 	u8         miss_address_31_6[0x1a];
2341d918647SAlex Vesker 	u8         learning_point[0x1];
2351d918647SAlex Vesker 	u8         fail_on_error[0x1];
2361d918647SAlex Vesker 	u8         match_polarity[0x1];
2371d918647SAlex Vesker 	u8         mask_mode[0x1];
2381d918647SAlex Vesker 	u8         miss_rank[0x2];
2391d918647SAlex Vesker };
2401d918647SAlex Vesker 
2411d918647SAlex Vesker struct mlx5_ifc_ste_eth_l2_src_bits {
2421d918647SAlex Vesker 	u8         smac_47_16[0x20];
2431d918647SAlex Vesker 
2441d918647SAlex Vesker 	u8         smac_15_0[0x10];
2451d918647SAlex Vesker 	u8         l3_ethertype[0x10];
2461d918647SAlex Vesker 
2471d918647SAlex Vesker 	u8         qp_type[0x2];
2481d918647SAlex Vesker 	u8         ethertype_filter[0x1];
2491d918647SAlex Vesker 	u8         reserved_at_43[0x1];
2501d918647SAlex Vesker 	u8         sx_sniffer[0x1];
2511d918647SAlex Vesker 	u8         force_lb[0x1];
2521d918647SAlex Vesker 	u8         functional_lb[0x1];
2531d918647SAlex Vesker 	u8         port[0x1];
2541d918647SAlex Vesker 	u8         reserved_at_48[0x4];
2551d918647SAlex Vesker 	u8         first_priority[0x3];
2561d918647SAlex Vesker 	u8         first_cfi[0x1];
2571d918647SAlex Vesker 	u8         first_vlan_qualifier[0x2];
2581d918647SAlex Vesker 	u8         reserved_at_52[0x2];
2591d918647SAlex Vesker 	u8         first_vlan_id[0xc];
2601d918647SAlex Vesker 
2611d918647SAlex Vesker 	u8         ip_fragmented[0x1];
2621d918647SAlex Vesker 	u8         tcp_syn[0x1];
2631d918647SAlex Vesker 	u8         encp_type[0x2];
2641d918647SAlex Vesker 	u8         l3_type[0x2];
2651d918647SAlex Vesker 	u8         l4_type[0x2];
2661d918647SAlex Vesker 	u8         reserved_at_68[0x4];
2671d918647SAlex Vesker 	u8         second_priority[0x3];
2681d918647SAlex Vesker 	u8         second_cfi[0x1];
2691d918647SAlex Vesker 	u8         second_vlan_qualifier[0x2];
2701d918647SAlex Vesker 	u8         reserved_at_72[0x2];
2711d918647SAlex Vesker 	u8         second_vlan_id[0xc];
2721d918647SAlex Vesker };
2731d918647SAlex Vesker 
2741d918647SAlex Vesker struct mlx5_ifc_ste_eth_l2_dst_bits {
2751d918647SAlex Vesker 	u8         dmac_47_16[0x20];
2761d918647SAlex Vesker 
2771d918647SAlex Vesker 	u8         dmac_15_0[0x10];
2781d918647SAlex Vesker 	u8         l3_ethertype[0x10];
2791d918647SAlex Vesker 
2801d918647SAlex Vesker 	u8         qp_type[0x2];
2811d918647SAlex Vesker 	u8         ethertype_filter[0x1];
2821d918647SAlex Vesker 	u8         reserved_at_43[0x1];
2831d918647SAlex Vesker 	u8         sx_sniffer[0x1];
2841d918647SAlex Vesker 	u8         force_lb[0x1];
2851d918647SAlex Vesker 	u8         functional_lb[0x1];
2861d918647SAlex Vesker 	u8         port[0x1];
2871d918647SAlex Vesker 	u8         reserved_at_48[0x4];
2881d918647SAlex Vesker 	u8         first_priority[0x3];
2891d918647SAlex Vesker 	u8         first_cfi[0x1];
2901d918647SAlex Vesker 	u8         first_vlan_qualifier[0x2];
2911d918647SAlex Vesker 	u8         reserved_at_52[0x2];
2921d918647SAlex Vesker 	u8         first_vlan_id[0xc];
2931d918647SAlex Vesker 
2941d918647SAlex Vesker 	u8         ip_fragmented[0x1];
2951d918647SAlex Vesker 	u8         tcp_syn[0x1];
2961d918647SAlex Vesker 	u8         encp_type[0x2];
2971d918647SAlex Vesker 	u8         l3_type[0x2];
2981d918647SAlex Vesker 	u8         l4_type[0x2];
2991d918647SAlex Vesker 	u8         reserved_at_68[0x4];
3001d918647SAlex Vesker 	u8         second_priority[0x3];
3011d918647SAlex Vesker 	u8         second_cfi[0x1];
3021d918647SAlex Vesker 	u8         second_vlan_qualifier[0x2];
3031d918647SAlex Vesker 	u8         reserved_at_72[0x2];
3041d918647SAlex Vesker 	u8         second_vlan_id[0xc];
3051d918647SAlex Vesker };
3061d918647SAlex Vesker 
3071d918647SAlex Vesker struct mlx5_ifc_ste_eth_l2_src_dst_bits {
3081d918647SAlex Vesker 	u8         dmac_47_16[0x20];
3091d918647SAlex Vesker 
3101d918647SAlex Vesker 	u8         dmac_15_0[0x10];
3111d918647SAlex Vesker 	u8         smac_47_32[0x10];
3121d918647SAlex Vesker 
3131d918647SAlex Vesker 	u8         smac_31_0[0x20];
3141d918647SAlex Vesker 
3151d918647SAlex Vesker 	u8         sx_sniffer[0x1];
3161d918647SAlex Vesker 	u8         force_lb[0x1];
3171d918647SAlex Vesker 	u8         functional_lb[0x1];
3181d918647SAlex Vesker 	u8         port[0x1];
3191d918647SAlex Vesker 	u8         l3_type[0x2];
3201d918647SAlex Vesker 	u8         reserved_at_66[0x6];
3211d918647SAlex Vesker 	u8         first_priority[0x3];
3221d918647SAlex Vesker 	u8         first_cfi[0x1];
3231d918647SAlex Vesker 	u8         first_vlan_qualifier[0x2];
3241d918647SAlex Vesker 	u8         reserved_at_72[0x2];
3251d918647SAlex Vesker 	u8         first_vlan_id[0xc];
3261d918647SAlex Vesker };
3271d918647SAlex Vesker 
3281d918647SAlex Vesker struct mlx5_ifc_ste_eth_l3_ipv4_5_tuple_bits {
3291d918647SAlex Vesker 	u8         destination_address[0x20];
3301d918647SAlex Vesker 
3311d918647SAlex Vesker 	u8         source_address[0x20];
3321d918647SAlex Vesker 
3331d918647SAlex Vesker 	u8         source_port[0x10];
3341d918647SAlex Vesker 	u8         destination_port[0x10];
3351d918647SAlex Vesker 
3361d918647SAlex Vesker 	u8         fragmented[0x1];
3371d918647SAlex Vesker 	u8         first_fragment[0x1];
3381d918647SAlex Vesker 	u8         reserved_at_62[0x2];
3391d918647SAlex Vesker 	u8         reserved_at_64[0x1];
3401d918647SAlex Vesker 	u8         ecn[0x2];
3411d918647SAlex Vesker 	u8         tcp_ns[0x1];
3421d918647SAlex Vesker 	u8         tcp_cwr[0x1];
3431d918647SAlex Vesker 	u8         tcp_ece[0x1];
3441d918647SAlex Vesker 	u8         tcp_urg[0x1];
3451d918647SAlex Vesker 	u8         tcp_ack[0x1];
3461d918647SAlex Vesker 	u8         tcp_psh[0x1];
3471d918647SAlex Vesker 	u8         tcp_rst[0x1];
3481d918647SAlex Vesker 	u8         tcp_syn[0x1];
3491d918647SAlex Vesker 	u8         tcp_fin[0x1];
3501d918647SAlex Vesker 	u8         dscp[0x6];
3511d918647SAlex Vesker 	u8         reserved_at_76[0x2];
3521d918647SAlex Vesker 	u8         protocol[0x8];
3531d918647SAlex Vesker };
3541d918647SAlex Vesker 
3551d918647SAlex Vesker struct mlx5_ifc_ste_eth_l3_ipv6_dst_bits {
3561d918647SAlex Vesker 	u8         dst_ip_127_96[0x20];
3571d918647SAlex Vesker 
3581d918647SAlex Vesker 	u8         dst_ip_95_64[0x20];
3591d918647SAlex Vesker 
3601d918647SAlex Vesker 	u8         dst_ip_63_32[0x20];
3611d918647SAlex Vesker 
3621d918647SAlex Vesker 	u8         dst_ip_31_0[0x20];
3631d918647SAlex Vesker };
3641d918647SAlex Vesker 
3651d918647SAlex Vesker struct mlx5_ifc_ste_eth_l2_tnl_bits {
3661d918647SAlex Vesker 	u8         dmac_47_16[0x20];
3671d918647SAlex Vesker 
3681d918647SAlex Vesker 	u8         dmac_15_0[0x10];
3691d918647SAlex Vesker 	u8         l3_ethertype[0x10];
3701d918647SAlex Vesker 
3711d918647SAlex Vesker 	u8         l2_tunneling_network_id[0x20];
3721d918647SAlex Vesker 
3731d918647SAlex Vesker 	u8         ip_fragmented[0x1];
3741d918647SAlex Vesker 	u8         tcp_syn[0x1];
3751d918647SAlex Vesker 	u8         encp_type[0x2];
3761d918647SAlex Vesker 	u8         l3_type[0x2];
3771d918647SAlex Vesker 	u8         l4_type[0x2];
3781d918647SAlex Vesker 	u8         first_priority[0x3];
3791d918647SAlex Vesker 	u8         first_cfi[0x1];
3801d918647SAlex Vesker 	u8         reserved_at_6c[0x3];
3811d918647SAlex Vesker 	u8         gre_key_flag[0x1];
3821d918647SAlex Vesker 	u8         first_vlan_qualifier[0x2];
3831d918647SAlex Vesker 	u8         reserved_at_72[0x2];
3841d918647SAlex Vesker 	u8         first_vlan_id[0xc];
3851d918647SAlex Vesker };
3861d918647SAlex Vesker 
3871d918647SAlex Vesker struct mlx5_ifc_ste_eth_l3_ipv6_src_bits {
3881d918647SAlex Vesker 	u8         src_ip_127_96[0x20];
3891d918647SAlex Vesker 
3901d918647SAlex Vesker 	u8         src_ip_95_64[0x20];
3911d918647SAlex Vesker 
3921d918647SAlex Vesker 	u8         src_ip_63_32[0x20];
3931d918647SAlex Vesker 
3941d918647SAlex Vesker 	u8         src_ip_31_0[0x20];
3951d918647SAlex Vesker };
3961d918647SAlex Vesker 
3971d918647SAlex Vesker struct mlx5_ifc_ste_eth_l3_ipv4_misc_bits {
3981d918647SAlex Vesker 	u8         version[0x4];
3991d918647SAlex Vesker 	u8         ihl[0x4];
4001d918647SAlex Vesker 	u8         reserved_at_8[0x8];
4011d918647SAlex Vesker 	u8         total_length[0x10];
4021d918647SAlex Vesker 
4031d918647SAlex Vesker 	u8         identification[0x10];
4041d918647SAlex Vesker 	u8         flags[0x3];
4051d918647SAlex Vesker 	u8         fragment_offset[0xd];
4061d918647SAlex Vesker 
4071d918647SAlex Vesker 	u8         time_to_live[0x8];
4081d918647SAlex Vesker 	u8         reserved_at_48[0x8];
4091d918647SAlex Vesker 	u8         checksum[0x10];
4101d918647SAlex Vesker 
4111d918647SAlex Vesker 	u8         reserved_at_60[0x20];
4121d918647SAlex Vesker };
4131d918647SAlex Vesker 
4141d918647SAlex Vesker struct mlx5_ifc_ste_eth_l4_bits {
4151d918647SAlex Vesker 	u8         fragmented[0x1];
4161d918647SAlex Vesker 	u8         first_fragment[0x1];
4171d918647SAlex Vesker 	u8         reserved_at_2[0x6];
4181d918647SAlex Vesker 	u8         protocol[0x8];
4191d918647SAlex Vesker 	u8         dst_port[0x10];
4201d918647SAlex Vesker 
4211d918647SAlex Vesker 	u8         ipv6_version[0x4];
4221d918647SAlex Vesker 	u8         reserved_at_24[0x1];
4231d918647SAlex Vesker 	u8         ecn[0x2];
4241d918647SAlex Vesker 	u8         tcp_ns[0x1];
4251d918647SAlex Vesker 	u8         tcp_cwr[0x1];
4261d918647SAlex Vesker 	u8         tcp_ece[0x1];
4271d918647SAlex Vesker 	u8         tcp_urg[0x1];
4281d918647SAlex Vesker 	u8         tcp_ack[0x1];
4291d918647SAlex Vesker 	u8         tcp_psh[0x1];
4301d918647SAlex Vesker 	u8         tcp_rst[0x1];
4311d918647SAlex Vesker 	u8         tcp_syn[0x1];
4321d918647SAlex Vesker 	u8         tcp_fin[0x1];
4331d918647SAlex Vesker 	u8         src_port[0x10];
4341d918647SAlex Vesker 
4351d918647SAlex Vesker 	u8         ipv6_payload_length[0x10];
4361d918647SAlex Vesker 	u8         ipv6_hop_limit[0x8];
4371d918647SAlex Vesker 	u8         dscp[0x6];
4381d918647SAlex Vesker 	u8         reserved_at_5e[0x2];
4391d918647SAlex Vesker 
4401d918647SAlex Vesker 	u8         tcp_data_offset[0x4];
4411d918647SAlex Vesker 	u8         reserved_at_64[0x8];
4421d918647SAlex Vesker 	u8         flow_label[0x14];
4431d918647SAlex Vesker };
4441d918647SAlex Vesker 
4451d918647SAlex Vesker struct mlx5_ifc_ste_eth_l4_misc_bits {
4461d918647SAlex Vesker 	u8         checksum[0x10];
4471d918647SAlex Vesker 	u8         length[0x10];
4481d918647SAlex Vesker 
4491d918647SAlex Vesker 	u8         seq_num[0x20];
4501d918647SAlex Vesker 
4511d918647SAlex Vesker 	u8         ack_num[0x20];
4521d918647SAlex Vesker 
4531d918647SAlex Vesker 	u8         urgent_pointer[0x10];
4541d918647SAlex Vesker 	u8         window_size[0x10];
4551d918647SAlex Vesker };
4561d918647SAlex Vesker 
4571d918647SAlex Vesker struct mlx5_ifc_ste_mpls_bits {
4581d918647SAlex Vesker 	u8         mpls0_label[0x14];
4591d918647SAlex Vesker 	u8         mpls0_exp[0x3];
4601d918647SAlex Vesker 	u8         mpls0_s_bos[0x1];
4611d918647SAlex Vesker 	u8         mpls0_ttl[0x8];
4621d918647SAlex Vesker 
4631d918647SAlex Vesker 	u8         mpls1_label[0x20];
4641d918647SAlex Vesker 
4651d918647SAlex Vesker 	u8         mpls2_label[0x20];
4661d918647SAlex Vesker 
4671d918647SAlex Vesker 	u8         reserved_at_60[0x16];
4681d918647SAlex Vesker 	u8         mpls4_s_bit[0x1];
4691d918647SAlex Vesker 	u8         mpls4_qualifier[0x1];
4701d918647SAlex Vesker 	u8         mpls3_s_bit[0x1];
4711d918647SAlex Vesker 	u8         mpls3_qualifier[0x1];
4721d918647SAlex Vesker 	u8         mpls2_s_bit[0x1];
4731d918647SAlex Vesker 	u8         mpls2_qualifier[0x1];
4741d918647SAlex Vesker 	u8         mpls1_s_bit[0x1];
4751d918647SAlex Vesker 	u8         mpls1_qualifier[0x1];
4761d918647SAlex Vesker 	u8         mpls0_s_bit[0x1];
4771d918647SAlex Vesker 	u8         mpls0_qualifier[0x1];
4781d918647SAlex Vesker };
4791d918647SAlex Vesker 
4801d918647SAlex Vesker struct mlx5_ifc_ste_register_0_bits {
4811d918647SAlex Vesker 	u8         register_0_h[0x20];
4821d918647SAlex Vesker 
4831d918647SAlex Vesker 	u8         register_0_l[0x20];
4841d918647SAlex Vesker 
4851d918647SAlex Vesker 	u8         register_1_h[0x20];
4861d918647SAlex Vesker 
4871d918647SAlex Vesker 	u8         register_1_l[0x20];
4881d918647SAlex Vesker };
4891d918647SAlex Vesker 
4901d918647SAlex Vesker struct mlx5_ifc_ste_register_1_bits {
4911d918647SAlex Vesker 	u8         register_2_h[0x20];
4921d918647SAlex Vesker 
4931d918647SAlex Vesker 	u8         register_2_l[0x20];
4941d918647SAlex Vesker 
4951d918647SAlex Vesker 	u8         register_3_h[0x20];
4961d918647SAlex Vesker 
4971d918647SAlex Vesker 	u8         register_3_l[0x20];
4981d918647SAlex Vesker };
4991d918647SAlex Vesker 
5001d918647SAlex Vesker struct mlx5_ifc_ste_gre_bits {
5011d918647SAlex Vesker 	u8         gre_c_present[0x1];
5021d918647SAlex Vesker 	u8         reserved_at_30[0x1];
5031d918647SAlex Vesker 	u8         gre_k_present[0x1];
5041d918647SAlex Vesker 	u8         gre_s_present[0x1];
5051d918647SAlex Vesker 	u8         strict_src_route[0x1];
5061d918647SAlex Vesker 	u8         recur[0x3];
5071d918647SAlex Vesker 	u8         flags[0x5];
5081d918647SAlex Vesker 	u8         version[0x3];
5091d918647SAlex Vesker 	u8         gre_protocol[0x10];
5101d918647SAlex Vesker 
5111d918647SAlex Vesker 	u8         checksum[0x10];
5121d918647SAlex Vesker 	u8         offset[0x10];
5131d918647SAlex Vesker 
5141d918647SAlex Vesker 	u8         gre_key_h[0x18];
5151d918647SAlex Vesker 	u8         gre_key_l[0x8];
5161d918647SAlex Vesker 
5171d918647SAlex Vesker 	u8         seq_num[0x20];
5181d918647SAlex Vesker };
5191d918647SAlex Vesker 
5201d918647SAlex Vesker struct mlx5_ifc_ste_flex_parser_0_bits {
5211d918647SAlex Vesker 	u8         parser_3_label[0x14];
5221d918647SAlex Vesker 	u8         parser_3_exp[0x3];
5231d918647SAlex Vesker 	u8         parser_3_s_bos[0x1];
5241d918647SAlex Vesker 	u8         parser_3_ttl[0x8];
5251d918647SAlex Vesker 
5261d918647SAlex Vesker 	u8         flex_parser_2[0x20];
5271d918647SAlex Vesker 
5281d918647SAlex Vesker 	u8         flex_parser_1[0x20];
5291d918647SAlex Vesker 
5301d918647SAlex Vesker 	u8         flex_parser_0[0x20];
5311d918647SAlex Vesker };
5321d918647SAlex Vesker 
5331d918647SAlex Vesker struct mlx5_ifc_ste_flex_parser_1_bits {
5341d918647SAlex Vesker 	u8         flex_parser_7[0x20];
5351d918647SAlex Vesker 
5361d918647SAlex Vesker 	u8         flex_parser_6[0x20];
5371d918647SAlex Vesker 
5381d918647SAlex Vesker 	u8         flex_parser_5[0x20];
5391d918647SAlex Vesker 
5401d918647SAlex Vesker 	u8         flex_parser_4[0x20];
5411d918647SAlex Vesker };
5421d918647SAlex Vesker 
5431d918647SAlex Vesker struct mlx5_ifc_ste_flex_parser_tnl_bits {
5441d918647SAlex Vesker 	u8         flex_parser_tunneling_header_63_32[0x20];
5451d918647SAlex Vesker 
5461d918647SAlex Vesker 	u8         flex_parser_tunneling_header_31_0[0x20];
5471d918647SAlex Vesker 
5481d918647SAlex Vesker 	u8         reserved_at_40[0x40];
5491d918647SAlex Vesker };
5501d918647SAlex Vesker 
5516e9e286eSYevgeny Kliteynik struct mlx5_ifc_ste_flex_parser_tnl_vxlan_gpe_bits {
5526e9e286eSYevgeny Kliteynik 	u8         outer_vxlan_gpe_flags[0x8];
5536e9e286eSYevgeny Kliteynik 	u8         reserved_at_8[0x10];
5546e9e286eSYevgeny Kliteynik 	u8         outer_vxlan_gpe_next_protocol[0x8];
5556e9e286eSYevgeny Kliteynik 
5566e9e286eSYevgeny Kliteynik 	u8         outer_vxlan_gpe_vni[0x18];
5576e9e286eSYevgeny Kliteynik 	u8         reserved_at_38[0x8];
5586e9e286eSYevgeny Kliteynik 
5596e9e286eSYevgeny Kliteynik 	u8         reserved_at_40[0x40];
5606e9e286eSYevgeny Kliteynik };
5616e9e286eSYevgeny Kliteynik 
562a18fab48SYevgeny Kliteynik struct mlx5_ifc_ste_flex_parser_tnl_geneve_bits {
563a18fab48SYevgeny Kliteynik 	u8         reserved_at_0[0x2];
564a18fab48SYevgeny Kliteynik 	u8         geneve_opt_len[0x6];
565a18fab48SYevgeny Kliteynik 	u8         geneve_oam[0x1];
566a18fab48SYevgeny Kliteynik 	u8         reserved_at_9[0x7];
567a18fab48SYevgeny Kliteynik 	u8         geneve_protocol_type[0x10];
568a18fab48SYevgeny Kliteynik 
569a18fab48SYevgeny Kliteynik 	u8         geneve_vni[0x18];
570a18fab48SYevgeny Kliteynik 	u8         reserved_at_38[0x8];
571a18fab48SYevgeny Kliteynik 
572a18fab48SYevgeny Kliteynik 	u8         reserved_at_40[0x40];
573a18fab48SYevgeny Kliteynik };
574a18fab48SYevgeny Kliteynik 
5751d918647SAlex Vesker struct mlx5_ifc_ste_general_purpose_bits {
5761d918647SAlex Vesker 	u8         general_purpose_lookup_field[0x20];
5771d918647SAlex Vesker 
5781d918647SAlex Vesker 	u8         reserved_at_20[0x20];
5791d918647SAlex Vesker 
5801d918647SAlex Vesker 	u8         reserved_at_40[0x20];
5811d918647SAlex Vesker 
5821d918647SAlex Vesker 	u8         reserved_at_60[0x20];
5831d918647SAlex Vesker };
5841d918647SAlex Vesker 
5851d918647SAlex Vesker struct mlx5_ifc_ste_src_gvmi_qp_bits {
5861d918647SAlex Vesker 	u8         loopback_syndrome[0x8];
5871d918647SAlex Vesker 	u8         reserved_at_8[0x8];
5881d918647SAlex Vesker 	u8         source_gvmi[0x10];
5891d918647SAlex Vesker 
5901d918647SAlex Vesker 	u8         reserved_at_20[0x5];
5911d918647SAlex Vesker 	u8         force_lb[0x1];
5921d918647SAlex Vesker 	u8         functional_lb[0x1];
5931d918647SAlex Vesker 	u8         source_is_requestor[0x1];
5941d918647SAlex Vesker 	u8         source_qp[0x18];
5951d918647SAlex Vesker 
5961d918647SAlex Vesker 	u8         reserved_at_40[0x20];
5971d918647SAlex Vesker 
5981d918647SAlex Vesker 	u8         reserved_at_60[0x20];
5991d918647SAlex Vesker };
6001d918647SAlex Vesker 
6011d918647SAlex Vesker struct mlx5_ifc_l2_hdr_bits {
6021d918647SAlex Vesker 	u8         dmac_47_16[0x20];
6031d918647SAlex Vesker 
6041d918647SAlex Vesker 	u8         dmac_15_0[0x10];
6051d918647SAlex Vesker 	u8         smac_47_32[0x10];
6061d918647SAlex Vesker 
6071d918647SAlex Vesker 	u8         smac_31_0[0x20];
6081d918647SAlex Vesker 
6091d918647SAlex Vesker 	u8         ethertype[0x10];
6101d918647SAlex Vesker 	u8         vlan_type[0x10];
6111d918647SAlex Vesker 
6121d918647SAlex Vesker 	u8         vlan[0x10];
6131d918647SAlex Vesker 	u8         reserved_at_90[0x10];
6141d918647SAlex Vesker };
6151d918647SAlex Vesker 
6161d918647SAlex Vesker /* Both HW set and HW add share the same HW format with different opcodes */
6171d918647SAlex Vesker struct mlx5_ifc_dr_action_hw_set_bits {
6181d918647SAlex Vesker 	u8         opcode[0x8];
6191d918647SAlex Vesker 	u8         destination_field_code[0x8];
6201d918647SAlex Vesker 	u8         reserved_at_10[0x2];
6211d918647SAlex Vesker 	u8         destination_left_shifter[0x6];
6221d918647SAlex Vesker 	u8         reserved_at_18[0x3];
6231d918647SAlex Vesker 	u8         destination_length[0x5];
6241d918647SAlex Vesker 
6251d918647SAlex Vesker 	u8         inline_data[0x20];
6261d918647SAlex Vesker };
6271d918647SAlex Vesker 
6281d918647SAlex Vesker #endif /* MLX5_IFC_DR_H */
629