FILE
definer.h
File preview with syntax highlighting.
linux-6.19.14/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/definer.h
1/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 2/* Copyright (c) 2024 NVIDIA Corporation & Affiliates */ 3 4#ifndef HWS_DEFINER_H_ 5#define HWS_DEFINER_H_ 6 7/* Max available selecotrs */ 8#define DW_SELECTORS 9 9#define BYTE_SELECTORS 8 10 11/* Selectors based on match TAG */ 12#define DW_SELECTORS_MATCH 6 13#define DW_SELECTORS_LIMITED 3 14 15/* Selectors based on range TAG */ 16#define DW_SELECTORS_RANGE 2 17#define BYTE_SELECTORS_RANGE 8 18 19#define HWS_NUM_OF_FLEX_PARSERS 8 20 21enum mlx5hws_definer_fname { 22 MLX5HWS_DEFINER_FNAME_ETH_SMAC_47_16_O, 23 MLX5HWS_DEFINER_FNAME_ETH_SMAC_47_16_I, 24 MLX5HWS_DEFINER_FNAME_ETH_SMAC_15_0_O, 25 MLX5HWS_DEFINER_FNAME_ETH_SMAC_15_0_I, 26 MLX5HWS_DEFINER_FNAME_ETH_DMAC_47_16_O, 27 MLX5HWS_DEFINER_FNAME_ETH_DMAC_47_16_I, 28 MLX5HWS_DEFINER_FNAME_ETH_DMAC_15_0_O, 29 MLX5HWS_DEFINER_FNAME_ETH_DMAC_15_0_I, 30 MLX5HWS_DEFINER_FNAME_ETH_TYPE_O, 31 MLX5HWS_DEFINER_FNAME_ETH_TYPE_I, 32 MLX5HWS_DEFINER_FNAME_ETH_L3_TYPE_O, 33 MLX5HWS_DEFINER_FNAME_ETH_L3_TYPE_I, 34 MLX5HWS_DEFINER_FNAME_VLAN_TYPE_O, 35 MLX5HWS_DEFINER_FNAME_VLAN_TYPE_I, 36 MLX5HWS_DEFINER_FNAME_VLAN_FIRST_PRIO_O, 37 MLX5HWS_DEFINER_FNAME_VLAN_FIRST_PRIO_I, 38 MLX5HWS_DEFINER_FNAME_VLAN_CFI_O, 39 MLX5HWS_DEFINER_FNAME_VLAN_CFI_I, 40 MLX5HWS_DEFINER_FNAME_VLAN_ID_O, 41 MLX5HWS_DEFINER_FNAME_VLAN_ID_I, 42 MLX5HWS_DEFINER_FNAME_VLAN_SECOND_TYPE_O, 43 MLX5HWS_DEFINER_FNAME_VLAN_SECOND_TYPE_I, 44 MLX5HWS_DEFINER_FNAME_VLAN_SECOND_PRIO_O, 45 MLX5HWS_DEFINER_FNAME_VLAN_SECOND_PRIO_I, 46 MLX5HWS_DEFINER_FNAME_VLAN_SECOND_CFI_O, 47 MLX5HWS_DEFINER_FNAME_VLAN_SECOND_CFI_I, 48 MLX5HWS_DEFINER_FNAME_VLAN_SECOND_ID_O, 49 MLX5HWS_DEFINER_FNAME_VLAN_SECOND_ID_I, 50 MLX5HWS_DEFINER_FNAME_IPV4_IHL_O, 51 MLX5HWS_DEFINER_FNAME_IPV4_IHL_I, 52 MLX5HWS_DEFINER_FNAME_IP_DSCP_O, 53 MLX5HWS_DEFINER_FNAME_IP_DSCP_I, 54 MLX5HWS_DEFINER_FNAME_IP_ECN_O, 55 MLX5HWS_DEFINER_FNAME_IP_ECN_I, 56 MLX5HWS_DEFINER_FNAME_IP_TTL_O, 57 MLX5HWS_DEFINER_FNAME_IP_TTL_I, 58 MLX5HWS_DEFINER_FNAME_IPV4_DST_O, 59 MLX5HWS_DEFINER_FNAME_IPV4_DST_I, 60 MLX5HWS_DEFINER_FNAME_IPV4_SRC_O, 61 MLX5HWS_DEFINER_FNAME_IPV4_SRC_I, 62 MLX5HWS_DEFINER_FNAME_IP_VERSION_O, 63 MLX5HWS_DEFINER_FNAME_IP_VERSION_I, 64 MLX5HWS_DEFINER_FNAME_IP_FRAG_O, 65 MLX5HWS_DEFINER_FNAME_IP_FRAG_I, 66 MLX5HWS_DEFINER_FNAME_IP_LEN_O, 67 MLX5HWS_DEFINER_FNAME_IP_LEN_I, 68 MLX5HWS_DEFINER_FNAME_IP_TOS_O, 69 MLX5HWS_DEFINER_FNAME_IP_TOS_I, 70 MLX5HWS_DEFINER_FNAME_IPV6_FLOW_LABEL_O, 71 MLX5HWS_DEFINER_FNAME_IPV6_FLOW_LABEL_I, 72 MLX5HWS_DEFINER_FNAME_IPV6_DST_127_96_O, 73 MLX5HWS_DEFINER_FNAME_IPV6_DST_95_64_O, 74 MLX5HWS_DEFINER_FNAME_IPV6_DST_63_32_O, 75 MLX5HWS_DEFINER_FNAME_IPV6_DST_31_0_O, 76 MLX5HWS_DEFINER_FNAME_IPV6_DST_127_96_I, 77 MLX5HWS_DEFINER_FNAME_IPV6_DST_95_64_I, 78 MLX5HWS_DEFINER_FNAME_IPV6_DST_63_32_I, 79 MLX5HWS_DEFINER_FNAME_IPV6_DST_31_0_I, 80 MLX5HWS_DEFINER_FNAME_IPV6_SRC_127_96_O, 81 MLX5HWS_DEFINER_FNAME_IPV6_SRC_95_64_O, 82 MLX5HWS_DEFINER_FNAME_IPV6_SRC_63_32_O, 83 MLX5HWS_DEFINER_FNAME_IPV6_SRC_31_0_O, 84 MLX5HWS_DEFINER_FNAME_IPV6_SRC_127_96_I, 85 MLX5HWS_DEFINER_FNAME_IPV6_SRC_95_64_I, 86 MLX5HWS_DEFINER_FNAME_IPV6_SRC_63_32_I, 87 MLX5HWS_DEFINER_FNAME_IPV6_SRC_31_0_I, 88 MLX5HWS_DEFINER_FNAME_IP_PROTOCOL_O, 89 MLX5HWS_DEFINER_FNAME_IP_PROTOCOL_I, 90 MLX5HWS_DEFINER_FNAME_L4_SPORT_O, 91 MLX5HWS_DEFINER_FNAME_L4_SPORT_I, 92 MLX5HWS_DEFINER_FNAME_L4_DPORT_O, 93 MLX5HWS_DEFINER_FNAME_L4_DPORT_I, 94 MLX5HWS_DEFINER_FNAME_TCP_FLAGS_I, 95 MLX5HWS_DEFINER_FNAME_TCP_FLAGS_O, 96 MLX5HWS_DEFINER_FNAME_TCP_SEQ_NUM, 97 MLX5HWS_DEFINER_FNAME_TCP_ACK_NUM, 98 MLX5HWS_DEFINER_FNAME_GTP_TEID, 99 MLX5HWS_DEFINER_FNAME_GTP_MSG_TYPE, 100 MLX5HWS_DEFINER_FNAME_GTP_EXT_FLAG, 101 MLX5HWS_DEFINER_FNAME_GTP_NEXT_EXT_HDR, 102 MLX5HWS_DEFINER_FNAME_GTP_EXT_HDR_PDU, 103 MLX5HWS_DEFINER_FNAME_GTP_EXT_HDR_QFI, 104 MLX5HWS_DEFINER_FNAME_GTPU_DW0, 105 MLX5HWS_DEFINER_FNAME_GTPU_FIRST_EXT_DW0, 106 MLX5HWS_DEFINER_FNAME_GTPU_DW2, 107 MLX5HWS_DEFINER_FNAME_FLEX_PARSER_0, 108 MLX5HWS_DEFINER_FNAME_FLEX_PARSER_1, 109 MLX5HWS_DEFINER_FNAME_FLEX_PARSER_2, 110 MLX5HWS_DEFINER_FNAME_FLEX_PARSER_3, 111 MLX5HWS_DEFINER_FNAME_FLEX_PARSER_4, 112 MLX5HWS_DEFINER_FNAME_FLEX_PARSER_5, 113 MLX5HWS_DEFINER_FNAME_FLEX_PARSER_6, 114 MLX5HWS_DEFINER_FNAME_FLEX_PARSER_7, 115 MLX5HWS_DEFINER_FNAME_VPORT_REG_C_0, 116 MLX5HWS_DEFINER_FNAME_VXLAN_FLAGS, 117 MLX5HWS_DEFINER_FNAME_VXLAN_VNI, 118 MLX5HWS_DEFINER_FNAME_VXLAN_GPE_FLAGS, 119 MLX5HWS_DEFINER_FNAME_VXLAN_GPE_RSVD0, 120 MLX5HWS_DEFINER_FNAME_VXLAN_GPE_PROTO, 121 MLX5HWS_DEFINER_FNAME_VXLAN_GPE_VNI, 122 MLX5HWS_DEFINER_FNAME_VXLAN_GPE_RSVD1, 123 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_LEN, 124 MLX5HWS_DEFINER_FNAME_GENEVE_OAM, 125 MLX5HWS_DEFINER_FNAME_GENEVE_PROTO, 126 MLX5HWS_DEFINER_FNAME_GENEVE_VNI, 127 MLX5HWS_DEFINER_FNAME_SOURCE_QP, 128 MLX5HWS_DEFINER_FNAME_SOURCE_GVMI, 129 MLX5HWS_DEFINER_FNAME_REG_0, 130 MLX5HWS_DEFINER_FNAME_REG_1, 131 MLX5HWS_DEFINER_FNAME_REG_2, 132 MLX5HWS_DEFINER_FNAME_REG_3, 133 MLX5HWS_DEFINER_FNAME_REG_4, 134 MLX5HWS_DEFINER_FNAME_REG_5, 135 MLX5HWS_DEFINER_FNAME_REG_6, 136 MLX5HWS_DEFINER_FNAME_REG_7, 137 MLX5HWS_DEFINER_FNAME_REG_8, 138 MLX5HWS_DEFINER_FNAME_REG_9, 139 MLX5HWS_DEFINER_FNAME_REG_10, 140 MLX5HWS_DEFINER_FNAME_REG_11, 141 MLX5HWS_DEFINER_FNAME_REG_A, 142 MLX5HWS_DEFINER_FNAME_REG_B, 143 MLX5HWS_DEFINER_FNAME_GRE_KEY_PRESENT, 144 MLX5HWS_DEFINER_FNAME_GRE_C, 145 MLX5HWS_DEFINER_FNAME_GRE_K, 146 MLX5HWS_DEFINER_FNAME_GRE_S, 147 MLX5HWS_DEFINER_FNAME_GRE_PROTOCOL, 148 MLX5HWS_DEFINER_FNAME_GRE_OPT_KEY, 149 MLX5HWS_DEFINER_FNAME_GRE_OPT_SEQ, 150 MLX5HWS_DEFINER_FNAME_GRE_OPT_CHECKSUM, 151 MLX5HWS_DEFINER_FNAME_INTEGRITY_O, 152 MLX5HWS_DEFINER_FNAME_INTEGRITY_I, 153 MLX5HWS_DEFINER_FNAME_ICMP_DW1, 154 MLX5HWS_DEFINER_FNAME_ICMP_DW2, 155 MLX5HWS_DEFINER_FNAME_ICMP_DW3, 156 MLX5HWS_DEFINER_FNAME_IPSEC_SPI, 157 MLX5HWS_DEFINER_FNAME_IPSEC_SEQUENCE_NUMBER, 158 MLX5HWS_DEFINER_FNAME_IPSEC_SYNDROME, 159 MLX5HWS_DEFINER_FNAME_MPLS0_O, 160 MLX5HWS_DEFINER_FNAME_MPLS1_O, 161 MLX5HWS_DEFINER_FNAME_MPLS2_O, 162 MLX5HWS_DEFINER_FNAME_MPLS3_O, 163 MLX5HWS_DEFINER_FNAME_MPLS4_O, 164 MLX5HWS_DEFINER_FNAME_MPLS0_I, 165 MLX5HWS_DEFINER_FNAME_MPLS1_I, 166 MLX5HWS_DEFINER_FNAME_MPLS2_I, 167 MLX5HWS_DEFINER_FNAME_MPLS3_I, 168 MLX5HWS_DEFINER_FNAME_MPLS4_I, 169 MLX5HWS_DEFINER_FNAME_FLEX_PARSER0_OK, 170 MLX5HWS_DEFINER_FNAME_FLEX_PARSER1_OK, 171 MLX5HWS_DEFINER_FNAME_FLEX_PARSER2_OK, 172 MLX5HWS_DEFINER_FNAME_FLEX_PARSER3_OK, 173 MLX5HWS_DEFINER_FNAME_FLEX_PARSER4_OK, 174 MLX5HWS_DEFINER_FNAME_FLEX_PARSER5_OK, 175 MLX5HWS_DEFINER_FNAME_FLEX_PARSER6_OK, 176 MLX5HWS_DEFINER_FNAME_FLEX_PARSER7_OK, 177 MLX5HWS_DEFINER_FNAME_OKS2_MPLS0_O, 178 MLX5HWS_DEFINER_FNAME_OKS2_MPLS1_O, 179 MLX5HWS_DEFINER_FNAME_OKS2_MPLS2_O, 180 MLX5HWS_DEFINER_FNAME_OKS2_MPLS3_O, 181 MLX5HWS_DEFINER_FNAME_OKS2_MPLS4_O, 182 MLX5HWS_DEFINER_FNAME_OKS2_MPLS0_I, 183 MLX5HWS_DEFINER_FNAME_OKS2_MPLS1_I, 184 MLX5HWS_DEFINER_FNAME_OKS2_MPLS2_I, 185 MLX5HWS_DEFINER_FNAME_OKS2_MPLS3_I, 186 MLX5HWS_DEFINER_FNAME_OKS2_MPLS4_I, 187 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_OK_0, 188 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_OK_1, 189 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_OK_2, 190 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_OK_3, 191 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_OK_4, 192 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_OK_5, 193 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_OK_6, 194 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_OK_7, 195 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_DW_0, 196 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_DW_1, 197 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_DW_2, 198 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_DW_3, 199 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_DW_4, 200 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_DW_5, 201 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_DW_6, 202 MLX5HWS_DEFINER_FNAME_GENEVE_OPT_DW_7, 203 MLX5HWS_DEFINER_FNAME_IB_L4_OPCODE, 204 MLX5HWS_DEFINER_FNAME_IB_L4_QPN, 205 MLX5HWS_DEFINER_FNAME_IB_L4_A, 206 MLX5HWS_DEFINER_FNAME_RANDOM_NUM, 207 MLX5HWS_DEFINER_FNAME_PTYPE_L2_O, 208 MLX5HWS_DEFINER_FNAME_PTYPE_L2_I, 209 MLX5HWS_DEFINER_FNAME_PTYPE_L3_O, 210 MLX5HWS_DEFINER_FNAME_PTYPE_L3_I, 211 MLX5HWS_DEFINER_FNAME_PTYPE_L4_O, 212 MLX5HWS_DEFINER_FNAME_PTYPE_L4_I, 213 MLX5HWS_DEFINER_FNAME_PTYPE_L4_EXT_O, 214 MLX5HWS_DEFINER_FNAME_PTYPE_L4_EXT_I, 215 MLX5HWS_DEFINER_FNAME_PTYPE_FRAG_O, 216 MLX5HWS_DEFINER_FNAME_PTYPE_FRAG_I, 217 MLX5HWS_DEFINER_FNAME_TNL_HDR_0, 218 MLX5HWS_DEFINER_FNAME_TNL_HDR_1, 219 MLX5HWS_DEFINER_FNAME_TNL_HDR_2, 220 MLX5HWS_DEFINER_FNAME_TNL_HDR_3, 221 MLX5HWS_DEFINER_FNAME_MAX, 222}; 223 224enum mlx5hws_definer_match_criteria { 225 MLX5HWS_DEFINER_MATCH_CRITERIA_EMPTY = 0, 226 MLX5HWS_DEFINER_MATCH_CRITERIA_OUTER = 1 << 0, 227 MLX5HWS_DEFINER_MATCH_CRITERIA_MISC = 1 << 1, 228 MLX5HWS_DEFINER_MATCH_CRITERIA_INNER = 1 << 2, 229 MLX5HWS_DEFINER_MATCH_CRITERIA_MISC2 = 1 << 3, 230 MLX5HWS_DEFINER_MATCH_CRITERIA_MISC3 = 1 << 4, 231 MLX5HWS_DEFINER_MATCH_CRITERIA_MISC4 = 1 << 5, 232 MLX5HWS_DEFINER_MATCH_CRITERIA_MISC5 = 1 << 6, 233 MLX5HWS_DEFINER_MATCH_CRITERIA_MISC6 = 1 << 7, 234}; 235 236enum mlx5hws_definer_type { 237 MLX5HWS_DEFINER_TYPE_MATCH, 238 MLX5HWS_DEFINER_TYPE_JUMBO, 239}; 240 241enum mlx5hws_definer_match_flag { 242 MLX5HWS_DEFINER_MATCH_FLAG_TNL_VXLAN_GPE = 1 << 0, 243 MLX5HWS_DEFINER_MATCH_FLAG_TNL_GENEVE = 1 << 1, 244 MLX5HWS_DEFINER_MATCH_FLAG_TNL_GTPU = 1 << 2, 245 MLX5HWS_DEFINER_MATCH_FLAG_TNL_GRE = 1 << 3, 246 MLX5HWS_DEFINER_MATCH_FLAG_TNL_VXLAN = 1 << 4, 247 MLX5HWS_DEFINER_MATCH_FLAG_TNL_HEADER_0_1 = 1 << 5, 248 249 MLX5HWS_DEFINER_MATCH_FLAG_TNL_GRE_OPT_KEY = 1 << 6, 250 MLX5HWS_DEFINER_MATCH_FLAG_TNL_HEADER_2 = 1 << 7, 251 252 MLX5HWS_DEFINER_MATCH_FLAG_TNL_MPLS_OVER_GRE = 1 << 8, 253 MLX5HWS_DEFINER_MATCH_FLAG_TNL_MPLS_OVER_UDP = 1 << 9, 254 255 MLX5HWS_DEFINER_MATCH_FLAG_ICMPV4 = 1 << 10, 256 MLX5HWS_DEFINER_MATCH_FLAG_ICMPV6 = 1 << 11, 257 MLX5HWS_DEFINER_MATCH_FLAG_TCP_O = 1 << 12, 258 MLX5HWS_DEFINER_MATCH_FLAG_TCP_I = 1 << 13, 259}; 260 261struct mlx5hws_definer_fc { 262 struct mlx5hws_context *ctx; 263 /* Source */ 264 u32 s_byte_off; 265 int s_bit_off; 266 u32 s_bit_mask; 267 /* Destination */ 268 u32 byte_off; 269 int bit_off; 270 u32 bit_mask; 271 enum mlx5hws_definer_fname fname; 272 void (*tag_set)(struct mlx5hws_definer_fc *fc, 273 void *mach_param, 274 u8 *tag); 275 void (*tag_mask_set)(struct mlx5hws_definer_fc *fc, 276 void *mach_param, 277 u8 *tag); 278}; 279 280struct mlx5_ifc_definer_hl_eth_l2_bits { 281 u8 dmac_47_16[0x20]; 282 u8 dmac_15_0[0x10]; 283 u8 l3_ethertype[0x10]; 284 u8 reserved_at_40[0x1]; 285 u8 sx_sniffer[0x1]; 286 u8 functional_lb[0x1]; 287 u8 ip_fragmented[0x1]; 288 u8 qp_type[0x2]; 289 u8 encap_type[0x2]; 290 u8 port_number[0x2]; 291 u8 l3_type[0x2]; 292 u8 l4_type_bwc[0x2]; 293 u8 first_vlan_qualifier[0x2]; 294 u8 first_priority[0x3]; 295 u8 first_cfi[0x1]; 296 u8 first_vlan_id[0xc]; 297 u8 l4_type[0x4]; 298 u8 reserved_at_64[0x2]; 299 u8 ipsec_layer[0x2]; 300 u8 l2_type[0x2]; 301 u8 force_lb[0x1]; 302 u8 l2_ok[0x1]; 303 u8 l3_ok[0x1]; 304 u8 l4_ok[0x1]; 305 u8 second_vlan_qualifier[0x2]; 306 u8 second_priority[0x3]; 307 u8 second_cfi[0x1]; 308 u8 second_vlan_id[0xc]; 309}; 310 311struct mlx5_ifc_definer_hl_eth_l2_src_bits { 312 u8 smac_47_16[0x20]; 313 u8 smac_15_0[0x10]; 314 u8 loopback_syndrome[0x8]; 315 u8 l3_type[0x2]; 316 u8 l4_type_bwc[0x2]; 317 u8 first_vlan_qualifier[0x2]; 318 u8 ip_fragmented[0x1]; 319 u8 functional_lb[0x1]; 320}; 321 322struct mlx5_ifc_definer_hl_ib_l2_bits { 323 u8 sx_sniffer[0x1]; 324 u8 force_lb[0x1]; 325 u8 functional_lb[0x1]; 326 u8 reserved_at_3[0x3]; 327 u8 port_number[0x2]; 328 u8 sl[0x4]; 329 u8 qp_type[0x2]; 330 u8 lnh[0x2]; 331 u8 dlid[0x10]; 332 u8 vl[0x4]; 333 u8 lrh_packet_length[0xc]; 334 u8 slid[0x10]; 335}; 336 337struct mlx5_ifc_definer_hl_eth_l3_bits { 338 u8 ip_version[0x4]; 339 u8 ihl[0x4]; 340 union { 341 u8 tos[0x8]; 342 struct { 343 u8 dscp[0x6]; 344 u8 ecn[0x2]; 345 }; 346 }; 347 u8 time_to_live_hop_limit[0x8]; 348 u8 protocol_next_header[0x8]; 349 u8 identification[0x10]; 350 union { 351 u8 ipv4_frag[0x10]; 352 struct { 353 u8 flags[0x3]; 354 u8 fragment_offset[0xd]; 355 }; 356 }; 357 u8 ipv4_total_length[0x10]; 358 u8 checksum[0x10]; 359 u8 reserved_at_60[0xc]; 360 u8 flow_label[0x14]; 361 u8 packet_length[0x10]; 362 u8 ipv6_payload_length[0x10]; 363}; 364 365struct mlx5_ifc_definer_hl_eth_l4_bits { 366 u8 source_port[0x10]; 367 u8 destination_port[0x10]; 368 u8 data_offset[0x4]; 369 u8 l4_ok[0x1]; 370 u8 l3_ok[0x1]; 371 u8 ip_fragmented[0x1]; 372 u8 tcp_ns[0x1]; 373 union { 374 u8 tcp_flags[0x8]; 375 struct { 376 u8 tcp_cwr[0x1]; 377 u8 tcp_ece[0x1]; 378 u8 tcp_urg[0x1]; 379 u8 tcp_ack[0x1]; 380 u8 tcp_psh[0x1]; 381 u8 tcp_rst[0x1]; 382 u8 tcp_syn[0x1]; 383 u8 tcp_fin[0x1]; 384 }; 385 }; 386 u8 first_fragment[0x1]; 387 u8 reserved_at_31[0xf]; 388}; 389 390struct mlx5_ifc_definer_hl_src_qp_gvmi_bits { 391 u8 loopback_syndrome[0x8]; 392 u8 l3_type[0x2]; 393 u8 l4_type_bwc[0x2]; 394 u8 first_vlan_qualifier[0x2]; 395 u8 reserved_at_e[0x1]; 396 u8 functional_lb[0x1]; 397 u8 source_gvmi[0x10]; 398 u8 force_lb[0x1]; 399 u8 ip_fragmented[0x1]; 400 u8 source_is_requestor[0x1]; 401 u8 reserved_at_23[0x5]; 402 u8 source_qp[0x18]; 403}; 404 405struct mlx5_ifc_definer_hl_ib_l4_bits { 406 u8 opcode[0x8]; 407 u8 qp[0x18]; 408 u8 se[0x1]; 409 u8 migreq[0x1]; 410 u8 ackreq[0x1]; 411 u8 fecn[0x1]; 412 u8 becn[0x1]; 413 u8 bth[0x1]; 414 u8 deth[0x1]; 415 u8 dcceth[0x1]; 416 u8 reserved_at_28[0x2]; 417 u8 pad_count[0x2]; 418 u8 tver[0x4]; 419 u8 p_key[0x10]; 420 u8 reserved_at_40[0x8]; 421 u8 deth_source_qp[0x18]; 422}; 423 424enum mlx5hws_integrity_ok1_bits { 425 MLX5HWS_DEFINER_OKS1_FIRST_L4_OK = 24, 426 MLX5HWS_DEFINER_OKS1_FIRST_L3_OK = 25, 427 MLX5HWS_DEFINER_OKS1_SECOND_L4_OK = 26, 428 MLX5HWS_DEFINER_OKS1_SECOND_L3_OK = 27, 429 MLX5HWS_DEFINER_OKS1_FIRST_L4_CSUM_OK = 28, 430 MLX5HWS_DEFINER_OKS1_FIRST_IPV4_CSUM_OK = 29, 431 MLX5HWS_DEFINER_OKS1_SECOND_L4_CSUM_OK = 30, 432 MLX5HWS_DEFINER_OKS1_SECOND_IPV4_CSUM_OK = 31, 433}; 434 435struct mlx5_ifc_definer_hl_oks1_bits { 436 union { 437 u8 oks1_bits[0x20]; 438 struct { 439 u8 second_ipv4_checksum_ok[0x1]; 440 u8 second_l4_checksum_ok[0x1]; 441 u8 first_ipv4_checksum_ok[0x1]; 442 u8 first_l4_checksum_ok[0x1]; 443 u8 second_l3_ok[0x1]; 444 u8 second_l4_ok[0x1]; 445 u8 first_l3_ok[0x1]; 446 u8 first_l4_ok[0x1]; 447 u8 flex_parser7_steering_ok[0x1]; 448 u8 flex_parser6_steering_ok[0x1]; 449 u8 flex_parser5_steering_ok[0x1]; 450 u8 flex_parser4_steering_ok[0x1]; 451 u8 flex_parser3_steering_ok[0x1]; 452 u8 flex_parser2_steering_ok[0x1]; 453 u8 flex_parser1_steering_ok[0x1]; 454 u8 flex_parser0_steering_ok[0x1]; 455 u8 second_ipv6_extension_header_vld[0x1]; 456 u8 first_ipv6_extension_header_vld[0x1]; 457 u8 l3_tunneling_ok[0x1]; 458 u8 l2_tunneling_ok[0x1]; 459 u8 second_tcp_ok[0x1]; 460 u8 second_udp_ok[0x1]; 461 u8 second_ipv4_ok[0x1]; 462 u8 second_ipv6_ok[0x1]; 463 u8 second_l2_ok[0x1]; 464 u8 vxlan_ok[0x1]; 465 u8 gre_ok[0x1]; 466 u8 first_tcp_ok[0x1]; 467 u8 first_udp_ok[0x1]; 468 u8 first_ipv4_ok[0x1]; 469 u8 first_ipv6_ok[0x1]; 470 u8 first_l2_ok[0x1]; 471 }; 472 }; 473}; 474 475struct mlx5_ifc_definer_hl_oks2_bits { 476 u8 reserved_at_0[0xa]; 477 u8 second_mpls_ok[0x1]; 478 u8 second_mpls4_s_bit[0x1]; 479 u8 second_mpls4_qualifier[0x1]; 480 u8 second_mpls3_s_bit[0x1]; 481 u8 second_mpls3_qualifier[0x1]; 482 u8 second_mpls2_s_bit[0x1]; 483 u8 second_mpls2_qualifier[0x1]; 484 u8 second_mpls1_s_bit[0x1]; 485 u8 second_mpls1_qualifier[0x1]; 486 u8 second_mpls0_s_bit[0x1]; 487 u8 second_mpls0_qualifier[0x1]; 488 u8 first_mpls_ok[0x1]; 489 u8 first_mpls4_s_bit[0x1]; 490 u8 first_mpls4_qualifier[0x1]; 491 u8 first_mpls3_s_bit[0x1]; 492 u8 first_mpls3_qualifier[0x1]; 493 u8 first_mpls2_s_bit[0x1]; 494 u8 first_mpls2_qualifier[0x1]; 495 u8 first_mpls1_s_bit[0x1]; 496 u8 first_mpls1_qualifier[0x1]; 497 u8 first_mpls0_s_bit[0x1]; 498 u8 first_mpls0_qualifier[0x1]; 499}; 500 501struct mlx5_ifc_definer_hl_voq_bits { 502 u8 reserved_at_0[0x18]; 503 u8 ecn_ok[0x1]; 504 u8 congestion[0x1]; 505 u8 profile[0x2]; 506 u8 internal_prio[0x4]; 507}; 508 509struct mlx5_ifc_definer_hl_ipv4_src_dst_bits { 510 u8 source_address[0x20]; 511 u8 destination_address[0x20]; 512}; 513 514struct mlx5_ifc_definer_hl_random_number_bits { 515 u8 random_number[0x10]; 516 u8 reserved[0x10]; 517}; 518 519struct mlx5_ifc_definer_hl_ipv6_addr_bits { 520 u8 ipv6_address_127_96[0x20]; 521 u8 ipv6_address_95_64[0x20]; 522 u8 ipv6_address_63_32[0x20]; 523 u8 ipv6_address_31_0[0x20]; 524}; 525 526struct mlx5_ifc_definer_tcp_icmp_header_bits { 527 union { 528 struct { 529 u8 icmp_dw1[0x20]; 530 u8 icmp_dw2[0x20]; 531 u8 icmp_dw3[0x20]; 532 }; 533 struct { 534 u8 tcp_seq[0x20]; 535 u8 tcp_ack[0x20]; 536 u8 tcp_win_urg[0x20]; 537 }; 538 }; 539}; 540 541struct mlx5_ifc_definer_hl_tunnel_header_bits { 542 u8 tunnel_header_0[0x20]; 543 u8 tunnel_header_1[0x20]; 544 u8 tunnel_header_2[0x20]; 545 u8 tunnel_header_3[0x20]; 546}; 547 548struct mlx5_ifc_definer_hl_ipsec_bits { 549 u8 spi[0x20]; 550 u8 sequence_number[0x20]; 551 u8 reserved[0x10]; 552 u8 ipsec_syndrome[0x8]; 553 u8 next_header[0x8]; 554}; 555 556struct mlx5_ifc_definer_hl_metadata_bits { 557 u8 metadata_to_cqe[0x20]; 558 u8 general_purpose[0x20]; 559 u8 acomulated_hash[0x20]; 560}; 561 562struct mlx5_ifc_definer_hl_flex_parser_bits { 563 u8 flex_parser_7[0x20]; 564 u8 flex_parser_6[0x20]; 565 u8 flex_parser_5[0x20]; 566 u8 flex_parser_4[0x20]; 567 u8 flex_parser_3[0x20]; 568 u8 flex_parser_2[0x20]; 569 u8 flex_parser_1[0x20]; 570 u8 flex_parser_0[0x20]; 571}; 572 573struct mlx5_ifc_definer_hl_registers_bits { 574 u8 register_c_10[0x20]; 575 u8 register_c_11[0x20]; 576 u8 register_c_8[0x20]; 577 u8 register_c_9[0x20]; 578 u8 register_c_6[0x20]; 579 u8 register_c_7[0x20]; 580 u8 register_c_4[0x20]; 581 u8 register_c_5[0x20]; 582 u8 register_c_2[0x20]; 583 u8 register_c_3[0x20]; 584 u8 register_c_0[0x20]; 585 u8 register_c_1[0x20]; 586}; 587 588struct mlx5_ifc_definer_hl_mpls_bits { 589 u8 mpls0_label[0x20]; 590 u8 mpls1_label[0x20]; 591 u8 mpls2_label[0x20]; 592 u8 mpls3_label[0x20]; 593 u8 mpls4_label[0x20]; 594}; 595 596struct mlx5_ifc_definer_hl_bits { 597 struct mlx5_ifc_definer_hl_eth_l2_bits eth_l2_outer; 598 struct mlx5_ifc_definer_hl_eth_l2_bits eth_l2_inner; 599 struct mlx5_ifc_definer_hl_eth_l2_src_bits eth_l2_src_outer; 600 struct mlx5_ifc_definer_hl_eth_l2_src_bits eth_l2_src_inner; 601 struct mlx5_ifc_definer_hl_ib_l2_bits ib_l2; 602 struct mlx5_ifc_definer_hl_eth_l3_bits eth_l3_outer; 603 struct mlx5_ifc_definer_hl_eth_l3_bits eth_l3_inner; 604 struct mlx5_ifc_definer_hl_eth_l4_bits eth_l4_outer; 605 struct mlx5_ifc_definer_hl_eth_l4_bits eth_l4_inner; 606 struct mlx5_ifc_definer_hl_src_qp_gvmi_bits source_qp_gvmi; 607 struct mlx5_ifc_definer_hl_ib_l4_bits ib_l4; 608 struct mlx5_ifc_definer_hl_oks1_bits oks1; 609 struct mlx5_ifc_definer_hl_oks2_bits oks2; 610 struct mlx5_ifc_definer_hl_voq_bits voq; 611 u8 reserved_at_480[0x380]; 612 struct mlx5_ifc_definer_hl_ipv4_src_dst_bits ipv4_src_dest_outer; 613 struct mlx5_ifc_definer_hl_ipv4_src_dst_bits ipv4_src_dest_inner; 614 struct mlx5_ifc_definer_hl_ipv6_addr_bits ipv6_dst_outer; 615 struct mlx5_ifc_definer_hl_ipv6_addr_bits ipv6_dst_inner; 616 struct mlx5_ifc_definer_hl_ipv6_addr_bits ipv6_src_outer; 617 struct mlx5_ifc_definer_hl_ipv6_addr_bits ipv6_src_inner; 618 u8 unsupported_dest_ib_l3[0x80]; 619 u8 unsupported_source_ib_l3[0x80]; 620 u8 unsupported_udp_misc_outer[0x20]; 621 u8 unsupported_udp_misc_inner[0x20]; 622 struct mlx5_ifc_definer_tcp_icmp_header_bits tcp_icmp; 623 struct mlx5_ifc_definer_hl_tunnel_header_bits tunnel_header; 624 struct mlx5_ifc_definer_hl_mpls_bits mpls_outer; 625 struct mlx5_ifc_definer_hl_mpls_bits mpls_inner; 626 u8 unsupported_config_headers_outer[0x80]; 627 u8 unsupported_config_headers_inner[0x80]; 628 struct mlx5_ifc_definer_hl_random_number_bits random_number; 629 struct mlx5_ifc_definer_hl_ipsec_bits ipsec; 630 struct mlx5_ifc_definer_hl_metadata_bits metadata; 631 u8 unsupported_utc_timestamp[0x40]; 632 u8 unsupported_free_running_timestamp[0x40]; 633 struct mlx5_ifc_definer_hl_flex_parser_bits flex_parser; 634 struct mlx5_ifc_definer_hl_registers_bits registers; 635 /* Reserved in case header layout on future HW */ 636 u8 unsupported_reserved[0xd40]; 637}; 638 639enum mlx5hws_definer_gtp { 640 MLX5HWS_DEFINER_GTP_EXT_HDR_BIT = 0x04, 641}; 642 643struct mlx5_ifc_header_gtp_bits { 644 u8 version[0x3]; 645 u8 proto_type[0x1]; 646 u8 reserved1[0x1]; 647 union { 648 u8 msg_flags[0x3]; 649 struct { 650 u8 ext_hdr_flag[0x1]; 651 u8 seq_num_flag[0x1]; 652 u8 pdu_flag[0x1]; 653 }; 654 }; 655 u8 msg_type[0x8]; 656 u8 msg_len[0x8]; 657 u8 teid[0x20]; 658}; 659 660struct mlx5_ifc_header_opt_gtp_bits { 661 u8 seq_num[0x10]; 662 u8 pdu_num[0x8]; 663 u8 next_ext_hdr_type[0x8]; 664}; 665 666struct mlx5_ifc_header_gtp_psc_bits { 667 u8 len[0x8]; 668 u8 pdu_type[0x4]; 669 u8 flags[0x4]; 670 u8 qfi[0x8]; 671 u8 reserved2[0x8]; 672}; 673 674struct mlx5_ifc_header_ipv6_vtc_bits { 675 u8 version[0x4]; 676 union { 677 u8 tos[0x8]; 678 struct { 679 u8 dscp[0x6]; 680 u8 ecn[0x2]; 681 }; 682 }; 683 u8 flow_label[0x14]; 684}; 685 686struct mlx5_ifc_header_ipv6_routing_ext_bits { 687 u8 next_hdr[0x8]; 688 u8 hdr_len[0x8]; 689 u8 type[0x8]; 690 u8 segments_left[0x8]; 691 union { 692 u8 flags[0x20]; 693 struct { 694 u8 last_entry[0x8]; 695 u8 flag[0x8]; 696 u8 tag[0x10]; 697 }; 698 }; 699}; 700 701struct mlx5_ifc_header_vxlan_bits { 702 u8 flags[0x8]; 703 u8 reserved1[0x18]; 704 u8 vni[0x18]; 705 u8 reserved2[0x8]; 706}; 707 708struct mlx5_ifc_header_vxlan_gpe_bits { 709 u8 flags[0x8]; 710 u8 rsvd0[0x10]; 711 u8 protocol[0x8]; 712 u8 vni[0x18]; 713 u8 rsvd1[0x8]; 714}; 715 716struct mlx5_ifc_header_gre_bits { 717 union { 718 u8 c_rsvd0_ver[0x10]; 719 struct { 720 u8 gre_c_present[0x1]; 721 u8 reserved_at_1[0x1]; 722 u8 gre_k_present[0x1]; 723 u8 gre_s_present[0x1]; 724 u8 reserved_at_4[0x9]; 725 u8 version[0x3]; 726 }; 727 }; 728 u8 gre_protocol[0x10]; 729 u8 checksum[0x10]; 730 u8 reserved_at_30[0x10]; 731}; 732 733struct mlx5_ifc_header_geneve_bits { 734 union { 735 u8 ver_opt_len_o_c_rsvd[0x10]; 736 struct { 737 u8 version[0x2]; 738 u8 opt_len[0x6]; 739 u8 o_flag[0x1]; 740 u8 c_flag[0x1]; 741 u8 reserved_at_a[0x6]; 742 }; 743 }; 744 u8 protocol_type[0x10]; 745 u8 vni[0x18]; 746 u8 reserved_at_38[0x8]; 747}; 748 749struct mlx5_ifc_header_geneve_opt_bits { 750 u8 class[0x10]; 751 u8 type[0x8]; 752 u8 reserved[0x3]; 753 u8 len[0x5]; 754}; 755 756struct mlx5_ifc_header_icmp_bits { 757 union { 758 u8 icmp_dw1[0x20]; 759 struct { 760 u8 type[0x8]; 761 u8 code[0x8]; 762 u8 cksum[0x10]; 763 }; 764 }; 765 union { 766 u8 icmp_dw2[0x20]; 767 struct { 768 u8 ident[0x10]; 769 u8 seq_nb[0x10]; 770 }; 771 }; 772}; 773 774struct mlx5hws_definer { 775 enum mlx5hws_definer_type type; 776 u8 dw_selector[DW_SELECTORS]; 777 u8 byte_selector[BYTE_SELECTORS]; 778 struct mlx5hws_rule_match_tag mask; 779 u32 obj_id; 780}; 781 782struct mlx5hws_definer_cache { 783 struct list_head list_head; 784}; 785 786struct mlx5hws_definer_cache_item { 787 struct mlx5hws_definer definer; 788 u32 refcount; /* protected by context ctrl lock */ 789 struct list_head list_node; 790}; 791 792static inline bool 793mlx5hws_definer_is_jumbo(struct mlx5hws_definer *definer) 794{ 795 return (definer->type == MLX5HWS_DEFINER_TYPE_JUMBO); 796} 797 798void mlx5hws_definer_create_tag(u32 *match_param, 799 struct mlx5hws_definer_fc *fc, 800 u32 fc_sz, 801 u8 *tag); 802 803int mlx5hws_definer_get_id(struct mlx5hws_definer *definer); 804 805int mlx5hws_definer_mt_init(struct mlx5hws_context *ctx, 806 struct mlx5hws_match_template *mt); 807 808void mlx5hws_definer_mt_uninit(struct mlx5hws_context *ctx, 809 struct mlx5hws_match_template *mt); 810 811int mlx5hws_definer_init_cache(struct mlx5hws_definer_cache **cache); 812 813void mlx5hws_definer_uninit_cache(struct mlx5hws_definer_cache *cache); 814 815int mlx5hws_definer_compare(struct mlx5hws_definer *definer_a, 816 struct mlx5hws_definer *definer_b); 817 818int mlx5hws_definer_get_obj(struct mlx5hws_context *ctx, 819 struct mlx5hws_definer *definer); 820 821void mlx5hws_definer_free(struct mlx5hws_context *ctx, 822 struct mlx5hws_definer *definer); 823 824int mlx5hws_definer_calc_layout(struct mlx5hws_context *ctx, 825 struct mlx5hws_match_template *mt, 826 struct mlx5hws_definer *match_definer, 827 bool allow_jumbo); 828 829const char *mlx5hws_definer_fname_to_str(enum mlx5hws_definer_fname fname); 830 831#endif /* HWS_DEFINER_H_ */
~/
Read-only file preview.