16862c787SYevgeny Kliteynik /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 26862c787SYevgeny Kliteynik /* Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ 36862c787SYevgeny Kliteynik 46862c787SYevgeny Kliteynik #ifndef _DR_STE_V1_ 56862c787SYevgeny Kliteynik #define _DR_STE_V1_ 66862c787SYevgeny Kliteynik 76862c787SYevgeny Kliteynik #include "dr_types.h" 86862c787SYevgeny Kliteynik #include "dr_ste.h" 96862c787SYevgeny Kliteynik 101207a772SYevgeny Kliteynik bool dr_ste_v1_is_miss_addr_set(u8 *hw_ste_p); 116862c787SYevgeny Kliteynik void dr_ste_v1_set_miss_addr(u8 *hw_ste_p, u64 miss_addr); 126862c787SYevgeny Kliteynik u64 dr_ste_v1_get_miss_addr(u8 *hw_ste_p); 136862c787SYevgeny Kliteynik void dr_ste_v1_set_byte_mask(u8 *hw_ste_p, u16 byte_mask); 146862c787SYevgeny Kliteynik u16 dr_ste_v1_get_byte_mask(u8 *hw_ste_p); 156862c787SYevgeny Kliteynik void dr_ste_v1_set_next_lu_type(u8 *hw_ste_p, u16 lu_type); 166862c787SYevgeny Kliteynik u16 dr_ste_v1_get_next_lu_type(u8 *hw_ste_p); 176862c787SYevgeny Kliteynik void dr_ste_v1_set_hit_addr(u8 *hw_ste_p, u64 icm_addr, u32 ht_size); 186862c787SYevgeny Kliteynik void dr_ste_v1_init(u8 *hw_ste_p, u16 lu_type, bool is_rx, u16 gvmi); 196862c787SYevgeny Kliteynik void dr_ste_v1_prepare_for_postsend(u8 *hw_ste_p, u32 ste_size); 206862c787SYevgeny Kliteynik void dr_ste_v1_set_actions_tx(struct mlx5dr_domain *dmn, u8 *action_type_set, 216862c787SYevgeny Kliteynik u32 actions_caps, u8 *last_ste, 226862c787SYevgeny Kliteynik struct mlx5dr_ste_actions_attr *attr, u32 *added_stes); 236862c787SYevgeny Kliteynik void dr_ste_v1_set_actions_rx(struct mlx5dr_domain *dmn, u8 *action_type_set, 246862c787SYevgeny Kliteynik u32 actions_caps, u8 *last_ste, 256862c787SYevgeny Kliteynik struct mlx5dr_ste_actions_attr *attr, u32 *added_stes); 266862c787SYevgeny Kliteynik void dr_ste_v1_set_action_set(u8 *d_action, u8 hw_field, u8 shifter, 276862c787SYevgeny Kliteynik u8 length, u32 data); 286862c787SYevgeny Kliteynik void dr_ste_v1_set_action_add(u8 *d_action, u8 hw_field, u8 shifter, 296862c787SYevgeny Kliteynik u8 length, u32 data); 306862c787SYevgeny Kliteynik void dr_ste_v1_set_action_copy(u8 *d_action, u8 dst_hw_field, u8 dst_shifter, 316862c787SYevgeny Kliteynik u8 dst_len, u8 src_hw_field, u8 src_shifter); 326862c787SYevgeny Kliteynik int dr_ste_v1_set_action_decap_l3_list(void *data, u32 data_sz, u8 *hw_action, 336862c787SYevgeny Kliteynik u32 hw_action_sz, u16 *used_hw_action_num); 34*2533e726SYevgeny Kliteynik int dr_ste_v1_alloc_modify_hdr_ptrn_arg(struct mlx5dr_action *action); 35*2533e726SYevgeny Kliteynik void dr_ste_v1_free_modify_hdr_ptrn_arg(struct mlx5dr_action *action); 366862c787SYevgeny Kliteynik void dr_ste_v1_build_eth_l2_src_dst_init(struct mlx5dr_ste_build *sb, 376862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 386862c787SYevgeny Kliteynik void dr_ste_v1_build_eth_l3_ipv6_dst_init(struct mlx5dr_ste_build *sb, 396862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 406862c787SYevgeny Kliteynik void dr_ste_v1_build_eth_l3_ipv6_src_init(struct mlx5dr_ste_build *sb, 416862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 426862c787SYevgeny Kliteynik void dr_ste_v1_build_eth_l3_ipv4_5_tuple_init(struct mlx5dr_ste_build *sb, 436862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 446862c787SYevgeny Kliteynik void dr_ste_v1_build_eth_l2_src_init(struct mlx5dr_ste_build *sb, 456862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 466862c787SYevgeny Kliteynik void dr_ste_v1_build_eth_l2_dst_init(struct mlx5dr_ste_build *sb, 476862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 486862c787SYevgeny Kliteynik void dr_ste_v1_build_eth_l2_tnl_init(struct mlx5dr_ste_build *sb, 496862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 506862c787SYevgeny Kliteynik void dr_ste_v1_build_eth_l3_ipv4_misc_init(struct mlx5dr_ste_build *sb, 516862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 526862c787SYevgeny Kliteynik void dr_ste_v1_build_eth_ipv6_l3_l4_init(struct mlx5dr_ste_build *sb, 536862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 546862c787SYevgeny Kliteynik void dr_ste_v1_build_mpls_init(struct mlx5dr_ste_build *sb, 556862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 566862c787SYevgeny Kliteynik void dr_ste_v1_build_tnl_gre_init(struct mlx5dr_ste_build *sb, 576862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 586862c787SYevgeny Kliteynik void dr_ste_v1_build_tnl_mpls_init(struct mlx5dr_ste_build *sb, 596862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 606862c787SYevgeny Kliteynik void dr_ste_v1_build_tnl_mpls_over_udp_init(struct mlx5dr_ste_build *sb, 616862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 626862c787SYevgeny Kliteynik void dr_ste_v1_build_tnl_mpls_over_gre_init(struct mlx5dr_ste_build *sb, 636862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 646862c787SYevgeny Kliteynik void dr_ste_v1_build_icmp_init(struct mlx5dr_ste_build *sb, 656862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 666862c787SYevgeny Kliteynik void dr_ste_v1_build_general_purpose_init(struct mlx5dr_ste_build *sb, 676862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 686862c787SYevgeny Kliteynik void dr_ste_v1_build_eth_l4_misc_init(struct mlx5dr_ste_build *sb, 696862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 706862c787SYevgeny Kliteynik void dr_ste_v1_build_flex_parser_tnl_vxlan_gpe_init(struct mlx5dr_ste_build *sb, 716862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 726862c787SYevgeny Kliteynik void dr_ste_v1_build_flex_parser_tnl_geneve_init(struct mlx5dr_ste_build *sb, 736862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 746862c787SYevgeny Kliteynik void dr_ste_v1_build_tnl_header_0_1_init(struct mlx5dr_ste_build *sb, 756862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 766862c787SYevgeny Kliteynik void dr_ste_v1_build_register_0_init(struct mlx5dr_ste_build *sb, 776862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 786862c787SYevgeny Kliteynik void dr_ste_v1_build_register_1_init(struct mlx5dr_ste_build *sb, 796862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 806862c787SYevgeny Kliteynik void dr_ste_v1_build_src_gvmi_qpn_init(struct mlx5dr_ste_build *sb, 816862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 826862c787SYevgeny Kliteynik void dr_ste_v1_build_flex_parser_0_init(struct mlx5dr_ste_build *sb, 836862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 846862c787SYevgeny Kliteynik void dr_ste_v1_build_flex_parser_1_init(struct mlx5dr_ste_build *sb, 856862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 866862c787SYevgeny Kliteynik void dr_ste_v1_build_flex_parser_tnl_geneve_tlv_opt_init(struct mlx5dr_ste_build *sb, 876862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 886862c787SYevgeny Kliteynik void dr_ste_v1_build_flex_parser_tnl_geneve_tlv_opt_exist_init(struct mlx5dr_ste_build *sb, 896862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 906862c787SYevgeny Kliteynik void dr_ste_v1_build_flex_parser_tnl_gtpu_init(struct mlx5dr_ste_build *sb, 916862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 926862c787SYevgeny Kliteynik void dr_ste_v1_build_tnl_gtpu_flex_parser_0_init(struct mlx5dr_ste_build *sb, 936862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 946862c787SYevgeny Kliteynik void dr_ste_v1_build_tnl_gtpu_flex_parser_1_init(struct mlx5dr_ste_build *sb, 956862c787SYevgeny Kliteynik struct mlx5dr_match_param *mask); 966862c787SYevgeny Kliteynik 976862c787SYevgeny Kliteynik #endif /* _DR_STE_V1_ */ 98