1 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 2 /* Copyright (c) 2019, Mellanox Technologies */ 3 4 #ifndef MLX5_IFC_DR_H 5 #define MLX5_IFC_DR_H 6 7 enum { 8 MLX5DR_ACTION_MDFY_HW_FLD_L2_0 = 0, 9 MLX5DR_ACTION_MDFY_HW_FLD_L2_1 = 1, 10 MLX5DR_ACTION_MDFY_HW_FLD_L2_2 = 2, 11 MLX5DR_ACTION_MDFY_HW_FLD_L3_0 = 3, 12 MLX5DR_ACTION_MDFY_HW_FLD_L3_1 = 4, 13 MLX5DR_ACTION_MDFY_HW_FLD_L3_2 = 5, 14 MLX5DR_ACTION_MDFY_HW_FLD_L3_3 = 6, 15 MLX5DR_ACTION_MDFY_HW_FLD_L3_4 = 7, 16 MLX5DR_ACTION_MDFY_HW_FLD_L4_0 = 8, 17 MLX5DR_ACTION_MDFY_HW_FLD_L4_1 = 9, 18 MLX5DR_ACTION_MDFY_HW_FLD_MPLS = 10, 19 MLX5DR_ACTION_MDFY_HW_FLD_L2_TNL_0 = 11, 20 MLX5DR_ACTION_MDFY_HW_FLD_REG_0 = 12, 21 MLX5DR_ACTION_MDFY_HW_FLD_REG_1 = 13, 22 MLX5DR_ACTION_MDFY_HW_FLD_REG_2 = 14, 23 MLX5DR_ACTION_MDFY_HW_FLD_REG_3 = 15, 24 MLX5DR_ACTION_MDFY_HW_FLD_L4_2 = 16, 25 MLX5DR_ACTION_MDFY_HW_FLD_FLEX_0 = 17, 26 MLX5DR_ACTION_MDFY_HW_FLD_FLEX_1 = 18, 27 MLX5DR_ACTION_MDFY_HW_FLD_FLEX_2 = 19, 28 MLX5DR_ACTION_MDFY_HW_FLD_FLEX_3 = 20, 29 MLX5DR_ACTION_MDFY_HW_FLD_L2_TNL_1 = 21, 30 MLX5DR_ACTION_MDFY_HW_FLD_METADATA = 22, 31 MLX5DR_ACTION_MDFY_HW_FLD_RESERVED = 23, 32 }; 33 34 enum { 35 MLX5DR_ACTION_MDFY_HW_OP_SET = 0x2, 36 MLX5DR_ACTION_MDFY_HW_OP_ADD = 0x3, 37 }; 38 39 enum { 40 MLX5DR_ACTION_MDFY_HW_HDR_L3_NONE = 0x0, 41 MLX5DR_ACTION_MDFY_HW_HDR_L3_IPV4 = 0x1, 42 MLX5DR_ACTION_MDFY_HW_HDR_L3_IPV6 = 0x2, 43 }; 44 45 enum { 46 MLX5DR_ACTION_MDFY_HW_HDR_L4_NONE = 0x0, 47 MLX5DR_ACTION_MDFY_HW_HDR_L4_TCP = 0x1, 48 MLX5DR_ACTION_MDFY_HW_HDR_L4_UDP = 0x2, 49 }; 50 51 enum { 52 MLX5DR_STE_LU_TYPE_NOP = 0x00, 53 MLX5DR_STE_LU_TYPE_SRC_GVMI_AND_QP = 0x05, 54 MLX5DR_STE_LU_TYPE_ETHL2_TUNNELING_I = 0x0a, 55 MLX5DR_STE_LU_TYPE_ETHL2_DST_O = 0x06, 56 MLX5DR_STE_LU_TYPE_ETHL2_DST_I = 0x07, 57 MLX5DR_STE_LU_TYPE_ETHL2_DST_D = 0x1b, 58 MLX5DR_STE_LU_TYPE_ETHL2_SRC_O = 0x08, 59 MLX5DR_STE_LU_TYPE_ETHL2_SRC_I = 0x09, 60 MLX5DR_STE_LU_TYPE_ETHL2_SRC_D = 0x1c, 61 MLX5DR_STE_LU_TYPE_ETHL2_SRC_DST_O = 0x36, 62 MLX5DR_STE_LU_TYPE_ETHL2_SRC_DST_I = 0x37, 63 MLX5DR_STE_LU_TYPE_ETHL2_SRC_DST_D = 0x38, 64 MLX5DR_STE_LU_TYPE_ETHL3_IPV6_DST_O = 0x0d, 65 MLX5DR_STE_LU_TYPE_ETHL3_IPV6_DST_I = 0x0e, 66 MLX5DR_STE_LU_TYPE_ETHL3_IPV6_DST_D = 0x1e, 67 MLX5DR_STE_LU_TYPE_ETHL3_IPV6_SRC_O = 0x0f, 68 MLX5DR_STE_LU_TYPE_ETHL3_IPV6_SRC_I = 0x10, 69 MLX5DR_STE_LU_TYPE_ETHL3_IPV6_SRC_D = 0x1f, 70 MLX5DR_STE_LU_TYPE_ETHL3_IPV4_5_TUPLE_O = 0x11, 71 MLX5DR_STE_LU_TYPE_ETHL3_IPV4_5_TUPLE_I = 0x12, 72 MLX5DR_STE_LU_TYPE_ETHL3_IPV4_5_TUPLE_D = 0x20, 73 MLX5DR_STE_LU_TYPE_ETHL3_IPV4_MISC_O = 0x29, 74 MLX5DR_STE_LU_TYPE_ETHL3_IPV4_MISC_I = 0x2a, 75 MLX5DR_STE_LU_TYPE_ETHL3_IPV4_MISC_D = 0x2b, 76 MLX5DR_STE_LU_TYPE_ETHL4_O = 0x13, 77 MLX5DR_STE_LU_TYPE_ETHL4_I = 0x14, 78 MLX5DR_STE_LU_TYPE_ETHL4_D = 0x21, 79 MLX5DR_STE_LU_TYPE_ETHL4_MISC_O = 0x2c, 80 MLX5DR_STE_LU_TYPE_ETHL4_MISC_I = 0x2d, 81 MLX5DR_STE_LU_TYPE_ETHL4_MISC_D = 0x2e, 82 MLX5DR_STE_LU_TYPE_MPLS_FIRST_O = 0x15, 83 MLX5DR_STE_LU_TYPE_MPLS_FIRST_I = 0x24, 84 MLX5DR_STE_LU_TYPE_MPLS_FIRST_D = 0x25, 85 MLX5DR_STE_LU_TYPE_GRE = 0x16, 86 MLX5DR_STE_LU_TYPE_FLEX_PARSER_0 = 0x22, 87 MLX5DR_STE_LU_TYPE_FLEX_PARSER_1 = 0x23, 88 MLX5DR_STE_LU_TYPE_FLEX_PARSER_TNL_HEADER = 0x19, 89 MLX5DR_STE_LU_TYPE_GENERAL_PURPOSE = 0x18, 90 MLX5DR_STE_LU_TYPE_STEERING_REGISTERS_0 = 0x2f, 91 MLX5DR_STE_LU_TYPE_STEERING_REGISTERS_1 = 0x30, 92 MLX5DR_STE_LU_TYPE_DONT_CARE = 0x0f, 93 }; 94 95 enum mlx5dr_ste_entry_type { 96 MLX5DR_STE_TYPE_TX = 1, 97 MLX5DR_STE_TYPE_RX = 2, 98 MLX5DR_STE_TYPE_MODIFY_PKT = 6, 99 }; 100 101 struct mlx5_ifc_ste_general_bits { 102 u8 entry_type[0x4]; 103 u8 reserved_at_4[0x4]; 104 u8 entry_sub_type[0x8]; 105 u8 byte_mask[0x10]; 106 107 u8 next_table_base_63_48[0x10]; 108 u8 next_lu_type[0x8]; 109 u8 next_table_base_39_32_size[0x8]; 110 111 u8 next_table_base_31_5_size[0x1b]; 112 u8 linear_hash_enable[0x1]; 113 u8 reserved_at_5c[0x2]; 114 u8 next_table_rank[0x2]; 115 116 u8 reserved_at_60[0xa0]; 117 u8 tag_value[0x60]; 118 u8 bit_mask[0x60]; 119 }; 120 121 struct mlx5_ifc_ste_sx_transmit_bits { 122 u8 entry_type[0x4]; 123 u8 reserved_at_4[0x4]; 124 u8 entry_sub_type[0x8]; 125 u8 byte_mask[0x10]; 126 127 u8 next_table_base_63_48[0x10]; 128 u8 next_lu_type[0x8]; 129 u8 next_table_base_39_32_size[0x8]; 130 131 u8 next_table_base_31_5_size[0x1b]; 132 u8 linear_hash_enable[0x1]; 133 u8 reserved_at_5c[0x2]; 134 u8 next_table_rank[0x2]; 135 136 u8 sx_wire[0x1]; 137 u8 sx_func_lb[0x1]; 138 u8 sx_sniffer[0x1]; 139 u8 sx_wire_enable[0x1]; 140 u8 sx_func_lb_enable[0x1]; 141 u8 sx_sniffer_enable[0x1]; 142 u8 action_type[0x3]; 143 u8 reserved_at_69[0x1]; 144 u8 action_description[0x6]; 145 u8 gvmi[0x10]; 146 147 u8 encap_pointer_vlan_data[0x20]; 148 149 u8 loopback_syndome_en[0x8]; 150 u8 loopback_syndome[0x8]; 151 u8 counter_trigger[0x10]; 152 153 u8 miss_address_63_48[0x10]; 154 u8 counter_trigger_23_16[0x8]; 155 u8 miss_address_39_32[0x8]; 156 157 u8 miss_address_31_6[0x1a]; 158 u8 learning_point[0x1]; 159 u8 go_back[0x1]; 160 u8 match_polarity[0x1]; 161 u8 mask_mode[0x1]; 162 u8 miss_rank[0x2]; 163 }; 164 165 struct mlx5_ifc_ste_rx_steering_mult_bits { 166 u8 entry_type[0x4]; 167 u8 reserved_at_4[0x4]; 168 u8 entry_sub_type[0x8]; 169 u8 byte_mask[0x10]; 170 171 u8 next_table_base_63_48[0x10]; 172 u8 next_lu_type[0x8]; 173 u8 next_table_base_39_32_size[0x8]; 174 175 u8 next_table_base_31_5_size[0x1b]; 176 u8 linear_hash_enable[0x1]; 177 u8 reserved_at_[0x2]; 178 u8 next_table_rank[0x2]; 179 180 u8 member_count[0x10]; 181 u8 gvmi[0x10]; 182 183 u8 qp_list_pointer[0x20]; 184 185 u8 reserved_at_a0[0x1]; 186 u8 tunneling_action[0x3]; 187 u8 action_description[0x4]; 188 u8 reserved_at_a8[0x8]; 189 u8 counter_trigger_15_0[0x10]; 190 191 u8 miss_address_63_48[0x10]; 192 u8 counter_trigger_23_16[0x08]; 193 u8 miss_address_39_32[0x8]; 194 195 u8 miss_address_31_6[0x1a]; 196 u8 learning_point[0x1]; 197 u8 fail_on_error[0x1]; 198 u8 match_polarity[0x1]; 199 u8 mask_mode[0x1]; 200 u8 miss_rank[0x2]; 201 }; 202 203 struct mlx5_ifc_ste_modify_packet_bits { 204 u8 entry_type[0x4]; 205 u8 reserved_at_4[0x4]; 206 u8 entry_sub_type[0x8]; 207 u8 byte_mask[0x10]; 208 209 u8 next_table_base_63_48[0x10]; 210 u8 next_lu_type[0x8]; 211 u8 next_table_base_39_32_size[0x8]; 212 213 u8 next_table_base_31_5_size[0x1b]; 214 u8 linear_hash_enable[0x1]; 215 u8 reserved_at_[0x2]; 216 u8 next_table_rank[0x2]; 217 218 u8 number_of_re_write_actions[0x10]; 219 u8 gvmi[0x10]; 220 221 u8 header_re_write_actions_pointer[0x20]; 222 223 u8 reserved_at_a0[0x1]; 224 u8 tunneling_action[0x3]; 225 u8 action_description[0x4]; 226 u8 reserved_at_a8[0x8]; 227 u8 counter_trigger_15_0[0x10]; 228 229 u8 miss_address_63_48[0x10]; 230 u8 counter_trigger_23_16[0x08]; 231 u8 miss_address_39_32[0x8]; 232 233 u8 miss_address_31_6[0x1a]; 234 u8 learning_point[0x1]; 235 u8 fail_on_error[0x1]; 236 u8 match_polarity[0x1]; 237 u8 mask_mode[0x1]; 238 u8 miss_rank[0x2]; 239 }; 240 241 struct mlx5_ifc_ste_eth_l2_src_bits { 242 u8 smac_47_16[0x20]; 243 244 u8 smac_15_0[0x10]; 245 u8 l3_ethertype[0x10]; 246 247 u8 qp_type[0x2]; 248 u8 ethertype_filter[0x1]; 249 u8 reserved_at_43[0x1]; 250 u8 sx_sniffer[0x1]; 251 u8 force_lb[0x1]; 252 u8 functional_lb[0x1]; 253 u8 port[0x1]; 254 u8 reserved_at_48[0x4]; 255 u8 first_priority[0x3]; 256 u8 first_cfi[0x1]; 257 u8 first_vlan_qualifier[0x2]; 258 u8 reserved_at_52[0x2]; 259 u8 first_vlan_id[0xc]; 260 261 u8 ip_fragmented[0x1]; 262 u8 tcp_syn[0x1]; 263 u8 encp_type[0x2]; 264 u8 l3_type[0x2]; 265 u8 l4_type[0x2]; 266 u8 reserved_at_68[0x4]; 267 u8 second_priority[0x3]; 268 u8 second_cfi[0x1]; 269 u8 second_vlan_qualifier[0x2]; 270 u8 reserved_at_72[0x2]; 271 u8 second_vlan_id[0xc]; 272 }; 273 274 struct mlx5_ifc_ste_eth_l2_dst_bits { 275 u8 dmac_47_16[0x20]; 276 277 u8 dmac_15_0[0x10]; 278 u8 l3_ethertype[0x10]; 279 280 u8 qp_type[0x2]; 281 u8 ethertype_filter[0x1]; 282 u8 reserved_at_43[0x1]; 283 u8 sx_sniffer[0x1]; 284 u8 force_lb[0x1]; 285 u8 functional_lb[0x1]; 286 u8 port[0x1]; 287 u8 reserved_at_48[0x4]; 288 u8 first_priority[0x3]; 289 u8 first_cfi[0x1]; 290 u8 first_vlan_qualifier[0x2]; 291 u8 reserved_at_52[0x2]; 292 u8 first_vlan_id[0xc]; 293 294 u8 ip_fragmented[0x1]; 295 u8 tcp_syn[0x1]; 296 u8 encp_type[0x2]; 297 u8 l3_type[0x2]; 298 u8 l4_type[0x2]; 299 u8 reserved_at_68[0x4]; 300 u8 second_priority[0x3]; 301 u8 second_cfi[0x1]; 302 u8 second_vlan_qualifier[0x2]; 303 u8 reserved_at_72[0x2]; 304 u8 second_vlan_id[0xc]; 305 }; 306 307 struct mlx5_ifc_ste_eth_l2_src_dst_bits { 308 u8 dmac_47_16[0x20]; 309 310 u8 dmac_15_0[0x10]; 311 u8 smac_47_32[0x10]; 312 313 u8 smac_31_0[0x20]; 314 315 u8 sx_sniffer[0x1]; 316 u8 force_lb[0x1]; 317 u8 functional_lb[0x1]; 318 u8 port[0x1]; 319 u8 l3_type[0x2]; 320 u8 reserved_at_66[0x6]; 321 u8 first_priority[0x3]; 322 u8 first_cfi[0x1]; 323 u8 first_vlan_qualifier[0x2]; 324 u8 reserved_at_72[0x2]; 325 u8 first_vlan_id[0xc]; 326 }; 327 328 struct mlx5_ifc_ste_eth_l3_ipv4_5_tuple_bits { 329 u8 destination_address[0x20]; 330 331 u8 source_address[0x20]; 332 333 u8 source_port[0x10]; 334 u8 destination_port[0x10]; 335 336 u8 fragmented[0x1]; 337 u8 first_fragment[0x1]; 338 u8 reserved_at_62[0x2]; 339 u8 reserved_at_64[0x1]; 340 u8 ecn[0x2]; 341 u8 tcp_ns[0x1]; 342 u8 tcp_cwr[0x1]; 343 u8 tcp_ece[0x1]; 344 u8 tcp_urg[0x1]; 345 u8 tcp_ack[0x1]; 346 u8 tcp_psh[0x1]; 347 u8 tcp_rst[0x1]; 348 u8 tcp_syn[0x1]; 349 u8 tcp_fin[0x1]; 350 u8 dscp[0x6]; 351 u8 reserved_at_76[0x2]; 352 u8 protocol[0x8]; 353 }; 354 355 struct mlx5_ifc_ste_eth_l3_ipv6_dst_bits { 356 u8 dst_ip_127_96[0x20]; 357 358 u8 dst_ip_95_64[0x20]; 359 360 u8 dst_ip_63_32[0x20]; 361 362 u8 dst_ip_31_0[0x20]; 363 }; 364 365 struct mlx5_ifc_ste_eth_l2_tnl_bits { 366 u8 dmac_47_16[0x20]; 367 368 u8 dmac_15_0[0x10]; 369 u8 l3_ethertype[0x10]; 370 371 u8 l2_tunneling_network_id[0x20]; 372 373 u8 ip_fragmented[0x1]; 374 u8 tcp_syn[0x1]; 375 u8 encp_type[0x2]; 376 u8 l3_type[0x2]; 377 u8 l4_type[0x2]; 378 u8 first_priority[0x3]; 379 u8 first_cfi[0x1]; 380 u8 reserved_at_6c[0x3]; 381 u8 gre_key_flag[0x1]; 382 u8 first_vlan_qualifier[0x2]; 383 u8 reserved_at_72[0x2]; 384 u8 first_vlan_id[0xc]; 385 }; 386 387 struct mlx5_ifc_ste_eth_l3_ipv6_src_bits { 388 u8 src_ip_127_96[0x20]; 389 390 u8 src_ip_95_64[0x20]; 391 392 u8 src_ip_63_32[0x20]; 393 394 u8 src_ip_31_0[0x20]; 395 }; 396 397 struct mlx5_ifc_ste_eth_l3_ipv4_misc_bits { 398 u8 version[0x4]; 399 u8 ihl[0x4]; 400 u8 reserved_at_8[0x8]; 401 u8 total_length[0x10]; 402 403 u8 identification[0x10]; 404 u8 flags[0x3]; 405 u8 fragment_offset[0xd]; 406 407 u8 time_to_live[0x8]; 408 u8 reserved_at_48[0x8]; 409 u8 checksum[0x10]; 410 411 u8 reserved_at_60[0x20]; 412 }; 413 414 struct mlx5_ifc_ste_eth_l4_bits { 415 u8 fragmented[0x1]; 416 u8 first_fragment[0x1]; 417 u8 reserved_at_2[0x6]; 418 u8 protocol[0x8]; 419 u8 dst_port[0x10]; 420 421 u8 ipv6_version[0x4]; 422 u8 reserved_at_24[0x1]; 423 u8 ecn[0x2]; 424 u8 tcp_ns[0x1]; 425 u8 tcp_cwr[0x1]; 426 u8 tcp_ece[0x1]; 427 u8 tcp_urg[0x1]; 428 u8 tcp_ack[0x1]; 429 u8 tcp_psh[0x1]; 430 u8 tcp_rst[0x1]; 431 u8 tcp_syn[0x1]; 432 u8 tcp_fin[0x1]; 433 u8 src_port[0x10]; 434 435 u8 ipv6_payload_length[0x10]; 436 u8 ipv6_hop_limit[0x8]; 437 u8 dscp[0x6]; 438 u8 reserved_at_5e[0x2]; 439 440 u8 tcp_data_offset[0x4]; 441 u8 reserved_at_64[0x8]; 442 u8 flow_label[0x14]; 443 }; 444 445 struct mlx5_ifc_ste_eth_l4_misc_bits { 446 u8 checksum[0x10]; 447 u8 length[0x10]; 448 449 u8 seq_num[0x20]; 450 451 u8 ack_num[0x20]; 452 453 u8 urgent_pointer[0x10]; 454 u8 window_size[0x10]; 455 }; 456 457 struct mlx5_ifc_ste_mpls_bits { 458 u8 mpls0_label[0x14]; 459 u8 mpls0_exp[0x3]; 460 u8 mpls0_s_bos[0x1]; 461 u8 mpls0_ttl[0x8]; 462 463 u8 mpls1_label[0x20]; 464 465 u8 mpls2_label[0x20]; 466 467 u8 reserved_at_60[0x16]; 468 u8 mpls4_s_bit[0x1]; 469 u8 mpls4_qualifier[0x1]; 470 u8 mpls3_s_bit[0x1]; 471 u8 mpls3_qualifier[0x1]; 472 u8 mpls2_s_bit[0x1]; 473 u8 mpls2_qualifier[0x1]; 474 u8 mpls1_s_bit[0x1]; 475 u8 mpls1_qualifier[0x1]; 476 u8 mpls0_s_bit[0x1]; 477 u8 mpls0_qualifier[0x1]; 478 }; 479 480 struct mlx5_ifc_ste_register_0_bits { 481 u8 register_0_h[0x20]; 482 483 u8 register_0_l[0x20]; 484 485 u8 register_1_h[0x20]; 486 487 u8 register_1_l[0x20]; 488 }; 489 490 struct mlx5_ifc_ste_register_1_bits { 491 u8 register_2_h[0x20]; 492 493 u8 register_2_l[0x20]; 494 495 u8 register_3_h[0x20]; 496 497 u8 register_3_l[0x20]; 498 }; 499 500 struct mlx5_ifc_ste_gre_bits { 501 u8 gre_c_present[0x1]; 502 u8 reserved_at_30[0x1]; 503 u8 gre_k_present[0x1]; 504 u8 gre_s_present[0x1]; 505 u8 strict_src_route[0x1]; 506 u8 recur[0x3]; 507 u8 flags[0x5]; 508 u8 version[0x3]; 509 u8 gre_protocol[0x10]; 510 511 u8 checksum[0x10]; 512 u8 offset[0x10]; 513 514 u8 gre_key_h[0x18]; 515 u8 gre_key_l[0x8]; 516 517 u8 seq_num[0x20]; 518 }; 519 520 struct mlx5_ifc_ste_flex_parser_0_bits { 521 u8 parser_3_label[0x14]; 522 u8 parser_3_exp[0x3]; 523 u8 parser_3_s_bos[0x1]; 524 u8 parser_3_ttl[0x8]; 525 526 u8 flex_parser_2[0x20]; 527 528 u8 flex_parser_1[0x20]; 529 530 u8 flex_parser_0[0x20]; 531 }; 532 533 struct mlx5_ifc_ste_flex_parser_1_bits { 534 u8 flex_parser_7[0x20]; 535 536 u8 flex_parser_6[0x20]; 537 538 u8 flex_parser_5[0x20]; 539 540 u8 flex_parser_4[0x20]; 541 }; 542 543 struct mlx5_ifc_ste_flex_parser_tnl_bits { 544 u8 flex_parser_tunneling_header_63_32[0x20]; 545 546 u8 flex_parser_tunneling_header_31_0[0x20]; 547 548 u8 reserved_at_40[0x40]; 549 }; 550 551 struct mlx5_ifc_ste_general_purpose_bits { 552 u8 general_purpose_lookup_field[0x20]; 553 554 u8 reserved_at_20[0x20]; 555 556 u8 reserved_at_40[0x20]; 557 558 u8 reserved_at_60[0x20]; 559 }; 560 561 struct mlx5_ifc_ste_src_gvmi_qp_bits { 562 u8 loopback_syndrome[0x8]; 563 u8 reserved_at_8[0x8]; 564 u8 source_gvmi[0x10]; 565 566 u8 reserved_at_20[0x5]; 567 u8 force_lb[0x1]; 568 u8 functional_lb[0x1]; 569 u8 source_is_requestor[0x1]; 570 u8 source_qp[0x18]; 571 572 u8 reserved_at_40[0x20]; 573 574 u8 reserved_at_60[0x20]; 575 }; 576 577 struct mlx5_ifc_l2_hdr_bits { 578 u8 dmac_47_16[0x20]; 579 580 u8 dmac_15_0[0x10]; 581 u8 smac_47_32[0x10]; 582 583 u8 smac_31_0[0x20]; 584 585 u8 ethertype[0x10]; 586 u8 vlan_type[0x10]; 587 588 u8 vlan[0x10]; 589 u8 reserved_at_90[0x10]; 590 }; 591 592 /* Both HW set and HW add share the same HW format with different opcodes */ 593 struct mlx5_ifc_dr_action_hw_set_bits { 594 u8 opcode[0x8]; 595 u8 destination_field_code[0x8]; 596 u8 reserved_at_10[0x2]; 597 u8 destination_left_shifter[0x6]; 598 u8 reserved_at_18[0x3]; 599 u8 destination_length[0x5]; 600 601 u8 inline_data[0x20]; 602 }; 603 604 #endif /* MLX5_IFC_DR_H */ 605