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_STE_LU_TYPE_DONT_CARE			= 0x0f,
91d918647SAlex Vesker };
101d918647SAlex Vesker 
111d918647SAlex Vesker struct mlx5_ifc_ste_general_bits {
121d918647SAlex Vesker 	u8         entry_type[0x4];
131d918647SAlex Vesker 	u8         reserved_at_4[0x4];
141d918647SAlex Vesker 	u8         entry_sub_type[0x8];
151d918647SAlex Vesker 	u8         byte_mask[0x10];
161d918647SAlex Vesker 
171d918647SAlex Vesker 	u8         next_table_base_63_48[0x10];
181d918647SAlex Vesker 	u8         next_lu_type[0x8];
191d918647SAlex Vesker 	u8         next_table_base_39_32_size[0x8];
201d918647SAlex Vesker 
211d918647SAlex Vesker 	u8         next_table_base_31_5_size[0x1b];
221d918647SAlex Vesker 	u8         linear_hash_enable[0x1];
231d918647SAlex Vesker 	u8         reserved_at_5c[0x2];
241d918647SAlex Vesker 	u8         next_table_rank[0x2];
251d918647SAlex Vesker 
261d918647SAlex Vesker 	u8         reserved_at_60[0xa0];
271d918647SAlex Vesker 	u8         tag_value[0x60];
281d918647SAlex Vesker 	u8         bit_mask[0x60];
291d918647SAlex Vesker };
301d918647SAlex Vesker 
311d918647SAlex Vesker struct mlx5_ifc_ste_sx_transmit_bits {
321d918647SAlex Vesker 	u8         entry_type[0x4];
331d918647SAlex Vesker 	u8         reserved_at_4[0x4];
341d918647SAlex Vesker 	u8         entry_sub_type[0x8];
351d918647SAlex Vesker 	u8         byte_mask[0x10];
361d918647SAlex Vesker 
371d918647SAlex Vesker 	u8         next_table_base_63_48[0x10];
381d918647SAlex Vesker 	u8         next_lu_type[0x8];
391d918647SAlex Vesker 	u8         next_table_base_39_32_size[0x8];
401d918647SAlex Vesker 
411d918647SAlex Vesker 	u8         next_table_base_31_5_size[0x1b];
421d918647SAlex Vesker 	u8         linear_hash_enable[0x1];
431d918647SAlex Vesker 	u8         reserved_at_5c[0x2];
441d918647SAlex Vesker 	u8         next_table_rank[0x2];
451d918647SAlex Vesker 
461d918647SAlex Vesker 	u8         sx_wire[0x1];
471d918647SAlex Vesker 	u8         sx_func_lb[0x1];
481d918647SAlex Vesker 	u8         sx_sniffer[0x1];
491d918647SAlex Vesker 	u8         sx_wire_enable[0x1];
501d918647SAlex Vesker 	u8         sx_func_lb_enable[0x1];
511d918647SAlex Vesker 	u8         sx_sniffer_enable[0x1];
521d918647SAlex Vesker 	u8         action_type[0x3];
531d918647SAlex Vesker 	u8         reserved_at_69[0x1];
541d918647SAlex Vesker 	u8         action_description[0x6];
551d918647SAlex Vesker 	u8         gvmi[0x10];
561d918647SAlex Vesker 
571d918647SAlex Vesker 	u8         encap_pointer_vlan_data[0x20];
581d918647SAlex Vesker 
591d918647SAlex Vesker 	u8         loopback_syndome_en[0x8];
601d918647SAlex Vesker 	u8         loopback_syndome[0x8];
611d918647SAlex Vesker 	u8         counter_trigger[0x10];
621d918647SAlex Vesker 
631d918647SAlex Vesker 	u8         miss_address_63_48[0x10];
641d918647SAlex Vesker 	u8         counter_trigger_23_16[0x8];
651d918647SAlex Vesker 	u8         miss_address_39_32[0x8];
661d918647SAlex Vesker 
671d918647SAlex Vesker 	u8         miss_address_31_6[0x1a];
681d918647SAlex Vesker 	u8         learning_point[0x1];
691d918647SAlex Vesker 	u8         go_back[0x1];
701d918647SAlex Vesker 	u8         match_polarity[0x1];
711d918647SAlex Vesker 	u8         mask_mode[0x1];
721d918647SAlex Vesker 	u8         miss_rank[0x2];
731d918647SAlex Vesker };
741d918647SAlex Vesker 
751d918647SAlex Vesker struct mlx5_ifc_ste_rx_steering_mult_bits {
761d918647SAlex Vesker 	u8         entry_type[0x4];
771d918647SAlex Vesker 	u8         reserved_at_4[0x4];
781d918647SAlex Vesker 	u8         entry_sub_type[0x8];
791d918647SAlex Vesker 	u8         byte_mask[0x10];
801d918647SAlex Vesker 
811d918647SAlex Vesker 	u8         next_table_base_63_48[0x10];
821d918647SAlex Vesker 	u8         next_lu_type[0x8];
831d918647SAlex Vesker 	u8         next_table_base_39_32_size[0x8];
841d918647SAlex Vesker 
851d918647SAlex Vesker 	u8         next_table_base_31_5_size[0x1b];
861d918647SAlex Vesker 	u8         linear_hash_enable[0x1];
871d918647SAlex Vesker 	u8         reserved_at_[0x2];
881d918647SAlex Vesker 	u8         next_table_rank[0x2];
891d918647SAlex Vesker 
901d918647SAlex Vesker 	u8         member_count[0x10];
911d918647SAlex Vesker 	u8         gvmi[0x10];
921d918647SAlex Vesker 
931d918647SAlex Vesker 	u8         qp_list_pointer[0x20];
941d918647SAlex Vesker 
951d918647SAlex Vesker 	u8         reserved_at_a0[0x1];
961d918647SAlex Vesker 	u8         tunneling_action[0x3];
971d918647SAlex Vesker 	u8         action_description[0x4];
981d918647SAlex Vesker 	u8         reserved_at_a8[0x8];
991d918647SAlex Vesker 	u8         counter_trigger_15_0[0x10];
1001d918647SAlex Vesker 
1011d918647SAlex Vesker 	u8         miss_address_63_48[0x10];
1021d918647SAlex Vesker 	u8         counter_trigger_23_16[0x08];
1031d918647SAlex Vesker 	u8         miss_address_39_32[0x8];
1041d918647SAlex Vesker 
1051d918647SAlex Vesker 	u8         miss_address_31_6[0x1a];
1061d918647SAlex Vesker 	u8         learning_point[0x1];
1071d918647SAlex Vesker 	u8         fail_on_error[0x1];
1081d918647SAlex Vesker 	u8         match_polarity[0x1];
1091d918647SAlex Vesker 	u8         mask_mode[0x1];
1101d918647SAlex Vesker 	u8         miss_rank[0x2];
1111d918647SAlex Vesker };
1121d918647SAlex Vesker 
1131d918647SAlex Vesker struct mlx5_ifc_ste_modify_packet_bits {
1141d918647SAlex Vesker 	u8         entry_type[0x4];
1151d918647SAlex Vesker 	u8         reserved_at_4[0x4];
1161d918647SAlex Vesker 	u8         entry_sub_type[0x8];
1171d918647SAlex Vesker 	u8         byte_mask[0x10];
1181d918647SAlex Vesker 
1191d918647SAlex Vesker 	u8         next_table_base_63_48[0x10];
1201d918647SAlex Vesker 	u8         next_lu_type[0x8];
1211d918647SAlex Vesker 	u8         next_table_base_39_32_size[0x8];
1221d918647SAlex Vesker 
1231d918647SAlex Vesker 	u8         next_table_base_31_5_size[0x1b];
1241d918647SAlex Vesker 	u8         linear_hash_enable[0x1];
1251d918647SAlex Vesker 	u8         reserved_at_[0x2];
1261d918647SAlex Vesker 	u8         next_table_rank[0x2];
1271d918647SAlex Vesker 
1281d918647SAlex Vesker 	u8         number_of_re_write_actions[0x10];
1291d918647SAlex Vesker 	u8         gvmi[0x10];
1301d918647SAlex Vesker 
1311d918647SAlex Vesker 	u8         header_re_write_actions_pointer[0x20];
1321d918647SAlex Vesker 
1331d918647SAlex Vesker 	u8         reserved_at_a0[0x1];
1341d918647SAlex Vesker 	u8         tunneling_action[0x3];
1351d918647SAlex Vesker 	u8         action_description[0x4];
1361d918647SAlex Vesker 	u8         reserved_at_a8[0x8];
1371d918647SAlex Vesker 	u8         counter_trigger_15_0[0x10];
1381d918647SAlex Vesker 
1391d918647SAlex Vesker 	u8         miss_address_63_48[0x10];
1401d918647SAlex Vesker 	u8         counter_trigger_23_16[0x08];
1411d918647SAlex Vesker 	u8         miss_address_39_32[0x8];
1421d918647SAlex Vesker 
1431d918647SAlex Vesker 	u8         miss_address_31_6[0x1a];
1441d918647SAlex Vesker 	u8         learning_point[0x1];
1451d918647SAlex Vesker 	u8         fail_on_error[0x1];
1461d918647SAlex Vesker 	u8         match_polarity[0x1];
1471d918647SAlex Vesker 	u8         mask_mode[0x1];
1481d918647SAlex Vesker 	u8         miss_rank[0x2];
1491d918647SAlex Vesker };
1501d918647SAlex Vesker 
1511d918647SAlex Vesker struct mlx5_ifc_ste_eth_l2_src_bits {
1521d918647SAlex Vesker 	u8         smac_47_16[0x20];
1531d918647SAlex Vesker 
1541d918647SAlex Vesker 	u8         smac_15_0[0x10];
1551d918647SAlex Vesker 	u8         l3_ethertype[0x10];
1561d918647SAlex Vesker 
1571d918647SAlex Vesker 	u8         qp_type[0x2];
1581d918647SAlex Vesker 	u8         ethertype_filter[0x1];
1591d918647SAlex Vesker 	u8         reserved_at_43[0x1];
1601d918647SAlex Vesker 	u8         sx_sniffer[0x1];
1611d918647SAlex Vesker 	u8         force_lb[0x1];
1621d918647SAlex Vesker 	u8         functional_lb[0x1];
1631d918647SAlex Vesker 	u8         port[0x1];
1641d918647SAlex Vesker 	u8         reserved_at_48[0x4];
1651d918647SAlex Vesker 	u8         first_priority[0x3];
1661d918647SAlex Vesker 	u8         first_cfi[0x1];
1671d918647SAlex Vesker 	u8         first_vlan_qualifier[0x2];
1681d918647SAlex Vesker 	u8         reserved_at_52[0x2];
1691d918647SAlex Vesker 	u8         first_vlan_id[0xc];
1701d918647SAlex Vesker 
1711d918647SAlex Vesker 	u8         ip_fragmented[0x1];
1721d918647SAlex Vesker 	u8         tcp_syn[0x1];
1731d918647SAlex Vesker 	u8         encp_type[0x2];
1741d918647SAlex Vesker 	u8         l3_type[0x2];
1751d918647SAlex Vesker 	u8         l4_type[0x2];
1761d918647SAlex Vesker 	u8         reserved_at_68[0x4];
1771d918647SAlex Vesker 	u8         second_priority[0x3];
1781d918647SAlex Vesker 	u8         second_cfi[0x1];
1791d918647SAlex Vesker 	u8         second_vlan_qualifier[0x2];
1801d918647SAlex Vesker 	u8         reserved_at_72[0x2];
1811d918647SAlex Vesker 	u8         second_vlan_id[0xc];
1821d918647SAlex Vesker };
1831d918647SAlex Vesker 
1841d918647SAlex Vesker struct mlx5_ifc_ste_eth_l2_dst_bits {
1851d918647SAlex Vesker 	u8         dmac_47_16[0x20];
1861d918647SAlex Vesker 
1871d918647SAlex Vesker 	u8         dmac_15_0[0x10];
1881d918647SAlex Vesker 	u8         l3_ethertype[0x10];
1891d918647SAlex Vesker 
1901d918647SAlex Vesker 	u8         qp_type[0x2];
1911d918647SAlex Vesker 	u8         ethertype_filter[0x1];
1921d918647SAlex Vesker 	u8         reserved_at_43[0x1];
1931d918647SAlex Vesker 	u8         sx_sniffer[0x1];
1941d918647SAlex Vesker 	u8         force_lb[0x1];
1951d918647SAlex Vesker 	u8         functional_lb[0x1];
1961d918647SAlex Vesker 	u8         port[0x1];
1971d918647SAlex Vesker 	u8         reserved_at_48[0x4];
1981d918647SAlex Vesker 	u8         first_priority[0x3];
1991d918647SAlex Vesker 	u8         first_cfi[0x1];
2001d918647SAlex Vesker 	u8         first_vlan_qualifier[0x2];
2011d918647SAlex Vesker 	u8         reserved_at_52[0x2];
2021d918647SAlex Vesker 	u8         first_vlan_id[0xc];
2031d918647SAlex Vesker 
2041d918647SAlex Vesker 	u8         ip_fragmented[0x1];
2051d918647SAlex Vesker 	u8         tcp_syn[0x1];
2061d918647SAlex Vesker 	u8         encp_type[0x2];
2071d918647SAlex Vesker 	u8         l3_type[0x2];
2081d918647SAlex Vesker 	u8         l4_type[0x2];
2091d918647SAlex Vesker 	u8         reserved_at_68[0x4];
2101d918647SAlex Vesker 	u8         second_priority[0x3];
2111d918647SAlex Vesker 	u8         second_cfi[0x1];
2121d918647SAlex Vesker 	u8         second_vlan_qualifier[0x2];
2131d918647SAlex Vesker 	u8         reserved_at_72[0x2];
2141d918647SAlex Vesker 	u8         second_vlan_id[0xc];
2151d918647SAlex Vesker };
2161d918647SAlex Vesker 
2171d918647SAlex Vesker struct mlx5_ifc_ste_eth_l2_src_dst_bits {
2181d918647SAlex Vesker 	u8         dmac_47_16[0x20];
2191d918647SAlex Vesker 
2201d918647SAlex Vesker 	u8         dmac_15_0[0x10];
2211d918647SAlex Vesker 	u8         smac_47_32[0x10];
2221d918647SAlex Vesker 
2231d918647SAlex Vesker 	u8         smac_31_0[0x20];
2241d918647SAlex Vesker 
2251d918647SAlex Vesker 	u8         sx_sniffer[0x1];
2261d918647SAlex Vesker 	u8         force_lb[0x1];
2271d918647SAlex Vesker 	u8         functional_lb[0x1];
2281d918647SAlex Vesker 	u8         port[0x1];
2291d918647SAlex Vesker 	u8         l3_type[0x2];
2301d918647SAlex Vesker 	u8         reserved_at_66[0x6];
2311d918647SAlex Vesker 	u8         first_priority[0x3];
2321d918647SAlex Vesker 	u8         first_cfi[0x1];
2331d918647SAlex Vesker 	u8         first_vlan_qualifier[0x2];
2341d918647SAlex Vesker 	u8         reserved_at_72[0x2];
2351d918647SAlex Vesker 	u8         first_vlan_id[0xc];
2361d918647SAlex Vesker };
2371d918647SAlex Vesker 
2381d918647SAlex Vesker struct mlx5_ifc_ste_eth_l3_ipv4_5_tuple_bits {
2391d918647SAlex Vesker 	u8         destination_address[0x20];
2401d918647SAlex Vesker 
2411d918647SAlex Vesker 	u8         source_address[0x20];
2421d918647SAlex Vesker 
2431d918647SAlex Vesker 	u8         source_port[0x10];
2441d918647SAlex Vesker 	u8         destination_port[0x10];
2451d918647SAlex Vesker 
2461d918647SAlex Vesker 	u8         fragmented[0x1];
2471d918647SAlex Vesker 	u8         first_fragment[0x1];
2481d918647SAlex Vesker 	u8         reserved_at_62[0x2];
2491d918647SAlex Vesker 	u8         reserved_at_64[0x1];
2501d918647SAlex Vesker 	u8         ecn[0x2];
2511d918647SAlex Vesker 	u8         tcp_ns[0x1];
2521d918647SAlex Vesker 	u8         tcp_cwr[0x1];
2531d918647SAlex Vesker 	u8         tcp_ece[0x1];
2541d918647SAlex Vesker 	u8         tcp_urg[0x1];
2551d918647SAlex Vesker 	u8         tcp_ack[0x1];
2561d918647SAlex Vesker 	u8         tcp_psh[0x1];
2571d918647SAlex Vesker 	u8         tcp_rst[0x1];
2581d918647SAlex Vesker 	u8         tcp_syn[0x1];
2591d918647SAlex Vesker 	u8         tcp_fin[0x1];
2601d918647SAlex Vesker 	u8         dscp[0x6];
2611d918647SAlex Vesker 	u8         reserved_at_76[0x2];
2621d918647SAlex Vesker 	u8         protocol[0x8];
2631d918647SAlex Vesker };
2641d918647SAlex Vesker 
2651d918647SAlex Vesker struct mlx5_ifc_ste_eth_l3_ipv6_dst_bits {
2661d918647SAlex Vesker 	u8         dst_ip_127_96[0x20];
2671d918647SAlex Vesker 
2681d918647SAlex Vesker 	u8         dst_ip_95_64[0x20];
2691d918647SAlex Vesker 
2701d918647SAlex Vesker 	u8         dst_ip_63_32[0x20];
2711d918647SAlex Vesker 
2721d918647SAlex Vesker 	u8         dst_ip_31_0[0x20];
2731d918647SAlex Vesker };
2741d918647SAlex Vesker 
2751d918647SAlex Vesker struct mlx5_ifc_ste_eth_l2_tnl_bits {
2761d918647SAlex Vesker 	u8         dmac_47_16[0x20];
2771d918647SAlex Vesker 
2781d918647SAlex Vesker 	u8         dmac_15_0[0x10];
2791d918647SAlex Vesker 	u8         l3_ethertype[0x10];
2801d918647SAlex Vesker 
2811d918647SAlex Vesker 	u8         l2_tunneling_network_id[0x20];
2821d918647SAlex Vesker 
2831d918647SAlex Vesker 	u8         ip_fragmented[0x1];
2841d918647SAlex Vesker 	u8         tcp_syn[0x1];
2851d918647SAlex Vesker 	u8         encp_type[0x2];
2861d918647SAlex Vesker 	u8         l3_type[0x2];
2871d918647SAlex Vesker 	u8         l4_type[0x2];
2881d918647SAlex Vesker 	u8         first_priority[0x3];
2891d918647SAlex Vesker 	u8         first_cfi[0x1];
2901d918647SAlex Vesker 	u8         reserved_at_6c[0x3];
2911d918647SAlex Vesker 	u8         gre_key_flag[0x1];
2921d918647SAlex Vesker 	u8         first_vlan_qualifier[0x2];
2931d918647SAlex Vesker 	u8         reserved_at_72[0x2];
2941d918647SAlex Vesker 	u8         first_vlan_id[0xc];
2951d918647SAlex Vesker };
2961d918647SAlex Vesker 
2971d918647SAlex Vesker struct mlx5_ifc_ste_eth_l3_ipv6_src_bits {
2981d918647SAlex Vesker 	u8         src_ip_127_96[0x20];
2991d918647SAlex Vesker 
3001d918647SAlex Vesker 	u8         src_ip_95_64[0x20];
3011d918647SAlex Vesker 
3021d918647SAlex Vesker 	u8         src_ip_63_32[0x20];
3031d918647SAlex Vesker 
3041d918647SAlex Vesker 	u8         src_ip_31_0[0x20];
3051d918647SAlex Vesker };
3061d918647SAlex Vesker 
3071d918647SAlex Vesker struct mlx5_ifc_ste_eth_l3_ipv4_misc_bits {
3081d918647SAlex Vesker 	u8         version[0x4];
3091d918647SAlex Vesker 	u8         ihl[0x4];
3101d918647SAlex Vesker 	u8         reserved_at_8[0x8];
3111d918647SAlex Vesker 	u8         total_length[0x10];
3121d918647SAlex Vesker 
3131d918647SAlex Vesker 	u8         identification[0x10];
3141d918647SAlex Vesker 	u8         flags[0x3];
3151d918647SAlex Vesker 	u8         fragment_offset[0xd];
3161d918647SAlex Vesker 
3171d918647SAlex Vesker 	u8         time_to_live[0x8];
3181d918647SAlex Vesker 	u8         reserved_at_48[0x8];
3191d918647SAlex Vesker 	u8         checksum[0x10];
3201d918647SAlex Vesker 
3211d918647SAlex Vesker 	u8         reserved_at_60[0x20];
3221d918647SAlex Vesker };
3231d918647SAlex Vesker 
3241d918647SAlex Vesker struct mlx5_ifc_ste_eth_l4_bits {
3251d918647SAlex Vesker 	u8         fragmented[0x1];
3261d918647SAlex Vesker 	u8         first_fragment[0x1];
3271d918647SAlex Vesker 	u8         reserved_at_2[0x6];
3281d918647SAlex Vesker 	u8         protocol[0x8];
3291d918647SAlex Vesker 	u8         dst_port[0x10];
3301d918647SAlex Vesker 
3311d918647SAlex Vesker 	u8         ipv6_version[0x4];
3321d918647SAlex Vesker 	u8         reserved_at_24[0x1];
3331d918647SAlex Vesker 	u8         ecn[0x2];
3341d918647SAlex Vesker 	u8         tcp_ns[0x1];
3351d918647SAlex Vesker 	u8         tcp_cwr[0x1];
3361d918647SAlex Vesker 	u8         tcp_ece[0x1];
3371d918647SAlex Vesker 	u8         tcp_urg[0x1];
3381d918647SAlex Vesker 	u8         tcp_ack[0x1];
3391d918647SAlex Vesker 	u8         tcp_psh[0x1];
3401d918647SAlex Vesker 	u8         tcp_rst[0x1];
3411d918647SAlex Vesker 	u8         tcp_syn[0x1];
3421d918647SAlex Vesker 	u8         tcp_fin[0x1];
3431d918647SAlex Vesker 	u8         src_port[0x10];
3441d918647SAlex Vesker 
3451d918647SAlex Vesker 	u8         ipv6_payload_length[0x10];
3461d918647SAlex Vesker 	u8         ipv6_hop_limit[0x8];
3471d918647SAlex Vesker 	u8         dscp[0x6];
3481d918647SAlex Vesker 	u8         reserved_at_5e[0x2];
3491d918647SAlex Vesker 
3501d918647SAlex Vesker 	u8         tcp_data_offset[0x4];
3511d918647SAlex Vesker 	u8         reserved_at_64[0x8];
3521d918647SAlex Vesker 	u8         flow_label[0x14];
3531d918647SAlex Vesker };
3541d918647SAlex Vesker 
3551d918647SAlex Vesker struct mlx5_ifc_ste_eth_l4_misc_bits {
3561d918647SAlex Vesker 	u8         checksum[0x10];
3571d918647SAlex Vesker 	u8         length[0x10];
3581d918647SAlex Vesker 
3591d918647SAlex Vesker 	u8         seq_num[0x20];
3601d918647SAlex Vesker 
3611d918647SAlex Vesker 	u8         ack_num[0x20];
3621d918647SAlex Vesker 
3631d918647SAlex Vesker 	u8         urgent_pointer[0x10];
3641d918647SAlex Vesker 	u8         window_size[0x10];
3651d918647SAlex Vesker };
3661d918647SAlex Vesker 
3671d918647SAlex Vesker struct mlx5_ifc_ste_mpls_bits {
3681d918647SAlex Vesker 	u8         mpls0_label[0x14];
3691d918647SAlex Vesker 	u8         mpls0_exp[0x3];
3701d918647SAlex Vesker 	u8         mpls0_s_bos[0x1];
3711d918647SAlex Vesker 	u8         mpls0_ttl[0x8];
3721d918647SAlex Vesker 
3731d918647SAlex Vesker 	u8         mpls1_label[0x20];
3741d918647SAlex Vesker 
3751d918647SAlex Vesker 	u8         mpls2_label[0x20];
3761d918647SAlex Vesker 
3771d918647SAlex Vesker 	u8         reserved_at_60[0x16];
3781d918647SAlex Vesker 	u8         mpls4_s_bit[0x1];
3791d918647SAlex Vesker 	u8         mpls4_qualifier[0x1];
3801d918647SAlex Vesker 	u8         mpls3_s_bit[0x1];
3811d918647SAlex Vesker 	u8         mpls3_qualifier[0x1];
3821d918647SAlex Vesker 	u8         mpls2_s_bit[0x1];
3831d918647SAlex Vesker 	u8         mpls2_qualifier[0x1];
3841d918647SAlex Vesker 	u8         mpls1_s_bit[0x1];
3851d918647SAlex Vesker 	u8         mpls1_qualifier[0x1];
3861d918647SAlex Vesker 	u8         mpls0_s_bit[0x1];
3871d918647SAlex Vesker 	u8         mpls0_qualifier[0x1];
3881d918647SAlex Vesker };
3891d918647SAlex Vesker 
3901d918647SAlex Vesker struct mlx5_ifc_ste_register_0_bits {
3911d918647SAlex Vesker 	u8         register_0_h[0x20];
3921d918647SAlex Vesker 
3931d918647SAlex Vesker 	u8         register_0_l[0x20];
3941d918647SAlex Vesker 
3951d918647SAlex Vesker 	u8         register_1_h[0x20];
3961d918647SAlex Vesker 
3971d918647SAlex Vesker 	u8         register_1_l[0x20];
3981d918647SAlex Vesker };
3991d918647SAlex Vesker 
4001d918647SAlex Vesker struct mlx5_ifc_ste_register_1_bits {
4011d918647SAlex Vesker 	u8         register_2_h[0x20];
4021d918647SAlex Vesker 
4031d918647SAlex Vesker 	u8         register_2_l[0x20];
4041d918647SAlex Vesker 
4051d918647SAlex Vesker 	u8         register_3_h[0x20];
4061d918647SAlex Vesker 
4071d918647SAlex Vesker 	u8         register_3_l[0x20];
4081d918647SAlex Vesker };
4091d918647SAlex Vesker 
4101d918647SAlex Vesker struct mlx5_ifc_ste_gre_bits {
4111d918647SAlex Vesker 	u8         gre_c_present[0x1];
4121d918647SAlex Vesker 	u8         reserved_at_30[0x1];
4131d918647SAlex Vesker 	u8         gre_k_present[0x1];
4141d918647SAlex Vesker 	u8         gre_s_present[0x1];
4151d918647SAlex Vesker 	u8         strict_src_route[0x1];
4161d918647SAlex Vesker 	u8         recur[0x3];
4171d918647SAlex Vesker 	u8         flags[0x5];
4181d918647SAlex Vesker 	u8         version[0x3];
4191d918647SAlex Vesker 	u8         gre_protocol[0x10];
4201d918647SAlex Vesker 
4211d918647SAlex Vesker 	u8         checksum[0x10];
4221d918647SAlex Vesker 	u8         offset[0x10];
4231d918647SAlex Vesker 
4241d918647SAlex Vesker 	u8         gre_key_h[0x18];
4251d918647SAlex Vesker 	u8         gre_key_l[0x8];
4261d918647SAlex Vesker 
4271d918647SAlex Vesker 	u8         seq_num[0x20];
4281d918647SAlex Vesker };
4291d918647SAlex Vesker 
4301d918647SAlex Vesker struct mlx5_ifc_ste_flex_parser_0_bits {
431323b91acSMuhammad Sammar 	u8         flex_parser_3[0x20];
4321d918647SAlex Vesker 
4331d918647SAlex Vesker 	u8         flex_parser_2[0x20];
4341d918647SAlex Vesker 
4351d918647SAlex Vesker 	u8         flex_parser_1[0x20];
4361d918647SAlex Vesker 
4371d918647SAlex Vesker 	u8         flex_parser_0[0x20];
4381d918647SAlex Vesker };
4391d918647SAlex Vesker 
4401d918647SAlex Vesker struct mlx5_ifc_ste_flex_parser_1_bits {
4411d918647SAlex Vesker 	u8         flex_parser_7[0x20];
4421d918647SAlex Vesker 
4431d918647SAlex Vesker 	u8         flex_parser_6[0x20];
4441d918647SAlex Vesker 
4451d918647SAlex Vesker 	u8         flex_parser_5[0x20];
4461d918647SAlex Vesker 
4471d918647SAlex Vesker 	u8         flex_parser_4[0x20];
4481d918647SAlex Vesker };
4491d918647SAlex Vesker 
450f59464e2SYevgeny Kliteynik struct mlx5_ifc_ste_flex_parser_ok_bits {
451f59464e2SYevgeny Kliteynik 	u8         flex_parser_3[0x20];
452f59464e2SYevgeny Kliteynik 	u8         flex_parser_2[0x20];
453f59464e2SYevgeny Kliteynik 	u8         flex_parsers_ok[0x8];
454f59464e2SYevgeny Kliteynik 	u8         reserved_at_48[0x18];
455f59464e2SYevgeny Kliteynik 	u8         flex_parser_0[0x20];
456f59464e2SYevgeny Kliteynik };
457f59464e2SYevgeny Kliteynik 
4581d918647SAlex Vesker struct mlx5_ifc_ste_flex_parser_tnl_bits {
4591d918647SAlex Vesker 	u8         flex_parser_tunneling_header_63_32[0x20];
4601d918647SAlex Vesker 
4611d918647SAlex Vesker 	u8         flex_parser_tunneling_header_31_0[0x20];
4621d918647SAlex Vesker 
4631d918647SAlex Vesker 	u8         reserved_at_40[0x40];
4641d918647SAlex Vesker };
4651d918647SAlex Vesker 
4666e9e286eSYevgeny Kliteynik struct mlx5_ifc_ste_flex_parser_tnl_vxlan_gpe_bits {
4676e9e286eSYevgeny Kliteynik 	u8         outer_vxlan_gpe_flags[0x8];
4686e9e286eSYevgeny Kliteynik 	u8         reserved_at_8[0x10];
4696e9e286eSYevgeny Kliteynik 	u8         outer_vxlan_gpe_next_protocol[0x8];
4706e9e286eSYevgeny Kliteynik 
4716e9e286eSYevgeny Kliteynik 	u8         outer_vxlan_gpe_vni[0x18];
4726e9e286eSYevgeny Kliteynik 	u8         reserved_at_38[0x8];
4736e9e286eSYevgeny Kliteynik 
4746e9e286eSYevgeny Kliteynik 	u8         reserved_at_40[0x40];
4756e9e286eSYevgeny Kliteynik };
4766e9e286eSYevgeny Kliteynik 
477a18fab48SYevgeny Kliteynik struct mlx5_ifc_ste_flex_parser_tnl_geneve_bits {
478a18fab48SYevgeny Kliteynik 	u8         reserved_at_0[0x2];
479a18fab48SYevgeny Kliteynik 	u8         geneve_opt_len[0x6];
480a18fab48SYevgeny Kliteynik 	u8         geneve_oam[0x1];
481a18fab48SYevgeny Kliteynik 	u8         reserved_at_9[0x7];
482a18fab48SYevgeny Kliteynik 	u8         geneve_protocol_type[0x10];
483a18fab48SYevgeny Kliteynik 
484a18fab48SYevgeny Kliteynik 	u8         geneve_vni[0x18];
485a18fab48SYevgeny Kliteynik 	u8         reserved_at_38[0x8];
486a18fab48SYevgeny Kliteynik 
487a18fab48SYevgeny Kliteynik 	u8         reserved_at_40[0x40];
488a18fab48SYevgeny Kliteynik };
489a18fab48SYevgeny Kliteynik 
490df9dd15aSYevgeny Kliteynik struct mlx5_ifc_ste_flex_parser_tnl_gtpu_bits {
491df9dd15aSYevgeny Kliteynik 	u8	   reserved_at_0[0x5];
492df9dd15aSYevgeny Kliteynik 	u8	   gtpu_msg_flags[0x3];
493df9dd15aSYevgeny Kliteynik 	u8	   gtpu_msg_type[0x8];
494df9dd15aSYevgeny Kliteynik 	u8	   reserved_at_10[0x10];
495df9dd15aSYevgeny Kliteynik 
496df9dd15aSYevgeny Kliteynik 	u8	   gtpu_teid[0x20];
497df9dd15aSYevgeny Kliteynik 
498df9dd15aSYevgeny Kliteynik 	u8	   reserved_at_40[0x40];
499df9dd15aSYevgeny Kliteynik };
500df9dd15aSYevgeny Kliteynik 
50109753babSMuhammad Sammar struct mlx5_ifc_ste_tunnel_header_bits {
50209753babSMuhammad Sammar 	u8	   tunnel_header_0[0x20];
50309753babSMuhammad Sammar 
50409753babSMuhammad Sammar 	u8	   tunnel_header_1[0x20];
50509753babSMuhammad Sammar 
50609753babSMuhammad Sammar 	u8	   reserved_at_40[0x40];
50709753babSMuhammad Sammar };
50809753babSMuhammad Sammar 
5091d918647SAlex Vesker struct mlx5_ifc_ste_general_purpose_bits {
5101d918647SAlex Vesker 	u8         general_purpose_lookup_field[0x20];
5111d918647SAlex Vesker 
5121d918647SAlex Vesker 	u8         reserved_at_20[0x20];
5131d918647SAlex Vesker 
5141d918647SAlex Vesker 	u8         reserved_at_40[0x20];
5151d918647SAlex Vesker 
5161d918647SAlex Vesker 	u8         reserved_at_60[0x20];
5171d918647SAlex Vesker };
5181d918647SAlex Vesker 
5191d918647SAlex Vesker struct mlx5_ifc_ste_src_gvmi_qp_bits {
5201d918647SAlex Vesker 	u8         loopback_syndrome[0x8];
5211d918647SAlex Vesker 	u8         reserved_at_8[0x8];
5221d918647SAlex Vesker 	u8         source_gvmi[0x10];
5231d918647SAlex Vesker 
5241d918647SAlex Vesker 	u8         reserved_at_20[0x5];
5251d918647SAlex Vesker 	u8         force_lb[0x1];
5261d918647SAlex Vesker 	u8         functional_lb[0x1];
5271d918647SAlex Vesker 	u8         source_is_requestor[0x1];
5281d918647SAlex Vesker 	u8         source_qp[0x18];
5291d918647SAlex Vesker 
5301d918647SAlex Vesker 	u8         reserved_at_40[0x20];
5311d918647SAlex Vesker 
5321d918647SAlex Vesker 	u8         reserved_at_60[0x20];
5331d918647SAlex Vesker };
5341d918647SAlex Vesker 
5351d918647SAlex Vesker struct mlx5_ifc_l2_hdr_bits {
5361d918647SAlex Vesker 	u8         dmac_47_16[0x20];
5371d918647SAlex Vesker 
5381d918647SAlex Vesker 	u8         dmac_15_0[0x10];
5391d918647SAlex Vesker 	u8         smac_47_32[0x10];
5401d918647SAlex Vesker 
5411d918647SAlex Vesker 	u8         smac_31_0[0x20];
5421d918647SAlex Vesker 
5431d918647SAlex Vesker 	u8         ethertype[0x10];
5441d918647SAlex Vesker 	u8         vlan_type[0x10];
5451d918647SAlex Vesker 
5461d918647SAlex Vesker 	u8         vlan[0x10];
5471d918647SAlex Vesker 	u8         reserved_at_90[0x10];
5481d918647SAlex Vesker };
5491d918647SAlex Vesker 
5501d918647SAlex Vesker /* Both HW set and HW add share the same HW format with different opcodes */
5511d918647SAlex Vesker struct mlx5_ifc_dr_action_hw_set_bits {
5521d918647SAlex Vesker 	u8         opcode[0x8];
5531d918647SAlex Vesker 	u8         destination_field_code[0x8];
5541d918647SAlex Vesker 	u8         reserved_at_10[0x2];
5551d918647SAlex Vesker 	u8         destination_left_shifter[0x6];
5561d918647SAlex Vesker 	u8         reserved_at_18[0x3];
5571d918647SAlex Vesker 	u8         destination_length[0x5];
5581d918647SAlex Vesker 
5591d918647SAlex Vesker 	u8         inline_data[0x20];
5601d918647SAlex Vesker };
5611d918647SAlex Vesker 
562c21a49b3SHamdan Igbaria struct mlx5_ifc_dr_action_hw_copy_bits {
563c21a49b3SHamdan Igbaria 	u8         opcode[0x8];
564c21a49b3SHamdan Igbaria 	u8         destination_field_code[0x8];
565c21a49b3SHamdan Igbaria 	u8         reserved_at_10[0x2];
566c21a49b3SHamdan Igbaria 	u8         destination_left_shifter[0x6];
567c21a49b3SHamdan Igbaria 	u8         reserved_at_18[0x2];
568c21a49b3SHamdan Igbaria 	u8         destination_length[0x6];
569c21a49b3SHamdan Igbaria 
570c21a49b3SHamdan Igbaria 	u8         reserved_at_20[0x8];
571c21a49b3SHamdan Igbaria 	u8         source_field_code[0x8];
572c21a49b3SHamdan Igbaria 	u8         reserved_at_30[0x2];
573c21a49b3SHamdan Igbaria 	u8         source_left_shifter[0x6];
574c21a49b3SHamdan Igbaria 	u8         reserved_at_38[0x8];
575c21a49b3SHamdan Igbaria };
576c21a49b3SHamdan Igbaria 
577*8920d92bSYevgeny Kliteynik enum {
578*8920d92bSYevgeny Kliteynik 	MLX5DR_ASO_FLOW_METER_NUM_PER_OBJ = 2,
579*8920d92bSYevgeny Kliteynik };
580*8920d92bSYevgeny Kliteynik 
581*8920d92bSYevgeny Kliteynik struct mlx5_ifc_ste_aso_flow_meter_action_bits {
582*8920d92bSYevgeny Kliteynik 	u8         reserved_at_0[0xc];
583*8920d92bSYevgeny Kliteynik 	u8         action[0x1];
584*8920d92bSYevgeny Kliteynik 	u8         initial_color[0x2];
585*8920d92bSYevgeny Kliteynik 	u8         line_id[0x1];
586*8920d92bSYevgeny Kliteynik };
587*8920d92bSYevgeny Kliteynik 
588*8920d92bSYevgeny Kliteynik struct mlx5_ifc_ste_double_action_aso_v1_bits {
589*8920d92bSYevgeny Kliteynik 	u8         action_id[0x8];
590*8920d92bSYevgeny Kliteynik 	u8         aso_context_number[0x18];
591*8920d92bSYevgeny Kliteynik 
592*8920d92bSYevgeny Kliteynik 	u8         dest_reg_id[0x2];
593*8920d92bSYevgeny Kliteynik 	u8         change_ordering_tag[0x1];
594*8920d92bSYevgeny Kliteynik 	u8         aso_check_ordering[0x1];
595*8920d92bSYevgeny Kliteynik 	u8         aso_context_type[0x4];
596*8920d92bSYevgeny Kliteynik 	u8         reserved_at_28[0x8];
597*8920d92bSYevgeny Kliteynik 	union {
598*8920d92bSYevgeny Kliteynik 		u8 aso_fields[0x10];
599*8920d92bSYevgeny Kliteynik 		struct mlx5_ifc_ste_aso_flow_meter_action_bits flow_meter;
600*8920d92bSYevgeny Kliteynik 	};
601*8920d92bSYevgeny Kliteynik };
602*8920d92bSYevgeny Kliteynik 
6031d918647SAlex Vesker #endif /* MLX5_IFC_DR_H */
604