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