15a93b4cdSHans Petter Selasky /*- 25a93b4cdSHans Petter Selasky * Copyright (c) 2013-2017, Mellanox Technologies, Ltd. All rights reserved. 35a93b4cdSHans Petter Selasky * 45a93b4cdSHans Petter Selasky * Redistribution and use in source and binary forms, with or without 55a93b4cdSHans Petter Selasky * modification, are permitted provided that the following conditions 65a93b4cdSHans Petter Selasky * are met: 75a93b4cdSHans Petter Selasky * 1. Redistributions of source code must retain the above copyright 85a93b4cdSHans Petter Selasky * notice, this list of conditions and the following disclaimer. 95a93b4cdSHans Petter Selasky * 2. Redistributions in binary form must reproduce the above copyright 105a93b4cdSHans Petter Selasky * notice, this list of conditions and the following disclaimer in the 115a93b4cdSHans Petter Selasky * documentation and/or other materials provided with the distribution. 125a93b4cdSHans Petter Selasky * 135a93b4cdSHans Petter Selasky * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS `AS IS' AND 145a93b4cdSHans Petter Selasky * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 155a93b4cdSHans Petter Selasky * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 165a93b4cdSHans Petter Selasky * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE 175a93b4cdSHans Petter Selasky * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 185a93b4cdSHans Petter Selasky * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 195a93b4cdSHans Petter Selasky * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 205a93b4cdSHans Petter Selasky * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 215a93b4cdSHans Petter Selasky * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 225a93b4cdSHans Petter Selasky * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 235a93b4cdSHans Petter Selasky * SUCH DAMAGE. 245a93b4cdSHans Petter Selasky */ 255a93b4cdSHans Petter Selasky 265a93b4cdSHans Petter Selasky #ifndef _MLX5_FS_CORE_ 275a93b4cdSHans Petter Selasky #define _MLX5_FS_CORE_ 285a93b4cdSHans Petter Selasky 295a93b4cdSHans Petter Selasky #include <asm/atomic.h> 305a93b4cdSHans Petter Selasky #include <linux/completion.h> 315a93b4cdSHans Petter Selasky #include <linux/mutex.h> 325a93b4cdSHans Petter Selasky #include <dev/mlx5/fs.h> 335a93b4cdSHans Petter Selasky 345a93b4cdSHans Petter Selasky enum fs_type { 355a93b4cdSHans Petter Selasky FS_TYPE_NAMESPACE, 365a93b4cdSHans Petter Selasky FS_TYPE_PRIO, 375a93b4cdSHans Petter Selasky FS_TYPE_FLOW_TABLE, 385a93b4cdSHans Petter Selasky FS_TYPE_FLOW_GROUP, 395a93b4cdSHans Petter Selasky FS_TYPE_FLOW_ENTRY, 405a93b4cdSHans Petter Selasky FS_TYPE_FLOW_DEST 415a93b4cdSHans Petter Selasky }; 425a93b4cdSHans Petter Selasky 435a93b4cdSHans Petter Selasky enum fs_ft_type { 445a93b4cdSHans Petter Selasky FS_FT_NIC_RX = 0x0, 455a93b4cdSHans Petter Selasky FS_FT_ESW_EGRESS_ACL = 0x2, 465a93b4cdSHans Petter Selasky FS_FT_ESW_INGRESS_ACL = 0x3, 475a93b4cdSHans Petter Selasky FS_FT_FDB = 0X4, 485a93b4cdSHans Petter Selasky FS_FT_SNIFFER_RX = 0x5, 495a93b4cdSHans Petter Selasky FS_FT_SNIFFER_TX = 0x6 505a93b4cdSHans Petter Selasky }; 515a93b4cdSHans Petter Selasky 525a93b4cdSHans Petter Selasky enum fs_fte_status { 535a93b4cdSHans Petter Selasky FS_FTE_STATUS_EXISTING = 1UL << 0, 545a93b4cdSHans Petter Selasky }; 555a93b4cdSHans Petter Selasky 565a93b4cdSHans Petter Selasky /* Should always be the first variable in the struct */ 575a93b4cdSHans Petter Selasky struct fs_base { 585a93b4cdSHans Petter Selasky struct list_head list; 595a93b4cdSHans Petter Selasky struct fs_base *parent; 605a93b4cdSHans Petter Selasky enum fs_type type; 615a93b4cdSHans Petter Selasky struct kref refcount; 625a93b4cdSHans Petter Selasky /* lock the node for writing and traversing */ 635a93b4cdSHans Petter Selasky struct mutex lock; 645a93b4cdSHans Petter Selasky struct completion complete; 655a93b4cdSHans Petter Selasky atomic_t users_refcount; 665a93b4cdSHans Petter Selasky const char *name; 675a93b4cdSHans Petter Selasky }; 685a93b4cdSHans Petter Selasky 695a93b4cdSHans Petter Selasky struct mlx5_flow_rule { 705a93b4cdSHans Petter Selasky struct fs_base base; 715a93b4cdSHans Petter Selasky struct mlx5_flow_destination dest_attr; 725a93b4cdSHans Petter Selasky struct list_head clients_data; 735a93b4cdSHans Petter Selasky /*protect clients lits*/ 745a93b4cdSHans Petter Selasky struct mutex clients_lock; 755a93b4cdSHans Petter Selasky }; 765a93b4cdSHans Petter Selasky 775a93b4cdSHans Petter Selasky struct fs_fte { 785a93b4cdSHans Petter Selasky struct fs_base base; 795a93b4cdSHans Petter Selasky u32 val[MLX5_ST_SZ_DW(fte_match_param)]; 805a93b4cdSHans Petter Selasky uint32_t dests_size; 815a93b4cdSHans Petter Selasky struct list_head dests; 825a93b4cdSHans Petter Selasky uint32_t index; /* index in ft */ 83cb054a49SMark Bloch struct mlx5_flow_act flow_act; 8476ed99edSMark Bloch u32 sw_action; /* enum mlx5_rule_fwd_action */ 855a93b4cdSHans Petter Selasky enum fs_fte_status status; 865a93b4cdSHans Petter Selasky }; 875a93b4cdSHans Petter Selasky 885a93b4cdSHans Petter Selasky struct fs_star_rule { 895a93b4cdSHans Petter Selasky struct mlx5_flow_group *fg; 905a93b4cdSHans Petter Selasky struct fs_fte *fte; 915a93b4cdSHans Petter Selasky }; 925a93b4cdSHans Petter Selasky 935a93b4cdSHans Petter Selasky struct mlx5_flow_table { 945a93b4cdSHans Petter Selasky struct fs_base base; 955a93b4cdSHans Petter Selasky /* sorted list by start_index */ 965a93b4cdSHans Petter Selasky struct list_head fgs; 975a93b4cdSHans Petter Selasky struct { 985a93b4cdSHans Petter Selasky bool active; 995a93b4cdSHans Petter Selasky unsigned int max_types; 1005a93b4cdSHans Petter Selasky unsigned int num_types; 1015a93b4cdSHans Petter Selasky } autogroup; 1025a93b4cdSHans Petter Selasky unsigned int max_fte; 1035a93b4cdSHans Petter Selasky unsigned int level; 1045a93b4cdSHans Petter Selasky uint32_t id; 1055a93b4cdSHans Petter Selasky u16 vport; 1065a93b4cdSHans Petter Selasky enum fs_ft_type type; 1075a93b4cdSHans Petter Selasky struct fs_star_rule star_rule; 1085a93b4cdSHans Petter Selasky unsigned int shared_refcount; 1095a93b4cdSHans Petter Selasky }; 1105a93b4cdSHans Petter Selasky 1115a93b4cdSHans Petter Selasky enum fs_prio_flags { 1125a93b4cdSHans Petter Selasky MLX5_CORE_FS_PRIO_SHARED = 1 1135a93b4cdSHans Petter Selasky }; 1145a93b4cdSHans Petter Selasky 1155a93b4cdSHans Petter Selasky struct fs_prio { 1165a93b4cdSHans Petter Selasky struct fs_base base; 1175a93b4cdSHans Petter Selasky struct list_head objs; /* each object is a namespace or ft */ 1185a93b4cdSHans Petter Selasky unsigned int max_ft; 1195a93b4cdSHans Petter Selasky unsigned int num_ft; 1205a93b4cdSHans Petter Selasky unsigned int max_ns; 1215a93b4cdSHans Petter Selasky unsigned int prio; 1225a93b4cdSHans Petter Selasky /*When create shared flow table, this lock should be taken*/ 1235a93b4cdSHans Petter Selasky struct mutex shared_lock; 1245a93b4cdSHans Petter Selasky u8 flags; 1255a93b4cdSHans Petter Selasky }; 1265a93b4cdSHans Petter Selasky 1275a93b4cdSHans Petter Selasky struct mlx5_flow_namespace { 1285a93b4cdSHans Petter Selasky /* parent == NULL => root ns */ 1295a93b4cdSHans Petter Selasky struct fs_base base; 1305a93b4cdSHans Petter Selasky /* sorted by priority number */ 1315a93b4cdSHans Petter Selasky struct list_head prios; /* list of fs_prios */ 1325a93b4cdSHans Petter Selasky struct list_head list_notifiers; 1335a93b4cdSHans Petter Selasky struct rw_semaphore notifiers_rw_sem; 1345a93b4cdSHans Petter Selasky struct rw_semaphore dests_rw_sem; 1355a93b4cdSHans Petter Selasky }; 1365a93b4cdSHans Petter Selasky 1375a93b4cdSHans Petter Selasky struct mlx5_flow_root_namespace { 1385a93b4cdSHans Petter Selasky struct mlx5_flow_namespace ns; 1395a93b4cdSHans Petter Selasky struct mlx5_flow_table *ft_level_0; 1405a93b4cdSHans Petter Selasky enum fs_ft_type table_type; 1415a93b4cdSHans Petter Selasky struct mlx5_core_dev *dev; 1425a93b4cdSHans Petter Selasky struct mlx5_flow_table *root_ft; 1435a93b4cdSHans Petter Selasky /* When chaining flow-tables, this lock should be taken */ 1445a93b4cdSHans Petter Selasky struct mutex fs_chain_lock; 1455a93b4cdSHans Petter Selasky }; 1465a93b4cdSHans Petter Selasky 1475a93b4cdSHans Petter Selasky struct mlx5_flow_group { 1485a93b4cdSHans Petter Selasky struct fs_base base; 1495a93b4cdSHans Petter Selasky struct list_head ftes; 1505a93b4cdSHans Petter Selasky struct mlx5_core_fs_mask mask; 1515a93b4cdSHans Petter Selasky uint32_t start_index; 1525a93b4cdSHans Petter Selasky uint32_t max_ftes; 1535a93b4cdSHans Petter Selasky uint32_t num_ftes; 1545a93b4cdSHans Petter Selasky uint32_t id; 1555a93b4cdSHans Petter Selasky }; 1565a93b4cdSHans Petter Selasky 1575a93b4cdSHans Petter Selasky struct mlx5_flow_handler { 1585a93b4cdSHans Petter Selasky struct list_head list; 1595a93b4cdSHans Petter Selasky rule_event_fn add_dst_cb; 1605a93b4cdSHans Petter Selasky rule_event_fn del_dst_cb; 1615a93b4cdSHans Petter Selasky void *client_context; 1625a93b4cdSHans Petter Selasky struct mlx5_flow_namespace *ns; 1635a93b4cdSHans Petter Selasky }; 1645a93b4cdSHans Petter Selasky 1655a93b4cdSHans Petter Selasky struct fs_client_priv_data { 1665a93b4cdSHans Petter Selasky struct mlx5_flow_handler *fs_handler; 1675a93b4cdSHans Petter Selasky struct list_head list; 1685a93b4cdSHans Petter Selasky void *client_dst_data; 1695a93b4cdSHans Petter Selasky }; 1705a93b4cdSHans Petter Selasky 171e4f84168SMark Bloch struct mlx5_modify_hdr { 172e4f84168SMark Bloch enum mlx5_flow_namespace_type ns_type; 173e4f84168SMark Bloch u32 id; 174e4f84168SMark Bloch }; 175e4f84168SMark Bloch 176bb4645b9SMark Bloch struct mlx5_pkt_reformat { 177bb4645b9SMark Bloch enum mlx5_flow_namespace_type ns_type; 178bb4645b9SMark Bloch int reformat_type; /* from mlx5_ifc */ 179bb4645b9SMark Bloch u32 id; 180bb4645b9SMark Bloch }; 181bb4645b9SMark Bloch 1825a93b4cdSHans Petter Selasky void _fs_remove_node(struct kref *kref); 1835a93b4cdSHans Petter Selasky #define fs_get_obj(v, _base) {v = container_of((_base), typeof(*v), base); } 1845a93b4cdSHans Petter Selasky #define fs_get_parent(v, child) {v = (child)->base.parent ? \ 1855a93b4cdSHans Petter Selasky container_of((child)->base.parent, \ 1865a93b4cdSHans Petter Selasky typeof(*v), base) : NULL; } 1875a93b4cdSHans Petter Selasky 1885a93b4cdSHans Petter Selasky #define fs_list_for_each_entry(pos, cond, root) \ 1895a93b4cdSHans Petter Selasky list_for_each_entry(pos, root, base.list) \ 1905a93b4cdSHans Petter Selasky if (!(cond)) {} else 1915a93b4cdSHans Petter Selasky 1925a93b4cdSHans Petter Selasky #define fs_list_for_each_entry_continue(pos, cond, root) \ 1935a93b4cdSHans Petter Selasky list_for_each_entry_continue(pos, root, base.list) \ 1945a93b4cdSHans Petter Selasky if (!(cond)) {} else 1955a93b4cdSHans Petter Selasky 1965a93b4cdSHans Petter Selasky #define fs_list_for_each_entry_reverse(pos, cond, root) \ 1975a93b4cdSHans Petter Selasky list_for_each_entry_reverse(pos, root, base.list) \ 1985a93b4cdSHans Petter Selasky if (!(cond)) {} else 1995a93b4cdSHans Petter Selasky 2005a93b4cdSHans Petter Selasky #define fs_list_for_each_entry_continue_reverse(pos, cond, root) \ 2015a93b4cdSHans Petter Selasky list_for_each_entry_continue_reverse(pos, root, base.list) \ 2025a93b4cdSHans Petter Selasky if (!(cond)) {} else 2035a93b4cdSHans Petter Selasky 2045a93b4cdSHans Petter Selasky #define fs_for_each_ft(pos, prio) \ 2055a93b4cdSHans Petter Selasky fs_list_for_each_entry(pos, (pos)->base.type == FS_TYPE_FLOW_TABLE, \ 2065a93b4cdSHans Petter Selasky &(prio)->objs) 2075a93b4cdSHans Petter Selasky 2085a93b4cdSHans Petter Selasky #define fs_for_each_ft_reverse(pos, prio) \ 2095a93b4cdSHans Petter Selasky fs_list_for_each_entry_reverse(pos, \ 2105a93b4cdSHans Petter Selasky (pos)->base.type == FS_TYPE_FLOW_TABLE, \ 2115a93b4cdSHans Petter Selasky &(prio)->objs) 2125a93b4cdSHans Petter Selasky 2135a93b4cdSHans Petter Selasky #define fs_for_each_ns(pos, prio) \ 2145a93b4cdSHans Petter Selasky fs_list_for_each_entry(pos, \ 2155a93b4cdSHans Petter Selasky (pos)->base.type == FS_TYPE_NAMESPACE, \ 2165a93b4cdSHans Petter Selasky &(prio)->objs) 2175a93b4cdSHans Petter Selasky 2185a93b4cdSHans Petter Selasky #define fs_for_each_ns_or_ft_reverse(pos, prio) \ 2195a93b4cdSHans Petter Selasky list_for_each_entry_reverse(pos, &(prio)->objs, list) \ 2205a93b4cdSHans Petter Selasky if (!((pos)->type == FS_TYPE_NAMESPACE || \ 2215a93b4cdSHans Petter Selasky (pos)->type == FS_TYPE_FLOW_TABLE)) {} else 2225a93b4cdSHans Petter Selasky 2235a93b4cdSHans Petter Selasky #define fs_for_each_ns_or_ft(pos, prio) \ 2245a93b4cdSHans Petter Selasky list_for_each_entry(pos, &(prio)->objs, list) \ 2255a93b4cdSHans Petter Selasky if (!((pos)->type == FS_TYPE_NAMESPACE || \ 2265a93b4cdSHans Petter Selasky (pos)->type == FS_TYPE_FLOW_TABLE)) {} else 2275a93b4cdSHans Petter Selasky 2285a93b4cdSHans Petter Selasky #define fs_for_each_ns_or_ft_continue_reverse(pos, prio) \ 2295a93b4cdSHans Petter Selasky list_for_each_entry_continue_reverse(pos, &(prio)->objs, list) \ 2305a93b4cdSHans Petter Selasky if (!((pos)->type == FS_TYPE_NAMESPACE || \ 2315a93b4cdSHans Petter Selasky (pos)->type == FS_TYPE_FLOW_TABLE)) {} else 2325a93b4cdSHans Petter Selasky 2335a93b4cdSHans Petter Selasky #define fs_for_each_ns_or_ft_continue(pos, prio) \ 2345a93b4cdSHans Petter Selasky list_for_each_entry_continue(pos, &(prio)->objs, list) \ 2355a93b4cdSHans Petter Selasky if (!((pos)->type == FS_TYPE_NAMESPACE || \ 2365a93b4cdSHans Petter Selasky (pos)->type == FS_TYPE_FLOW_TABLE)) {} else 2375a93b4cdSHans Petter Selasky 2385a93b4cdSHans Petter Selasky #define fs_for_each_prio(pos, ns) \ 2395a93b4cdSHans Petter Selasky fs_list_for_each_entry(pos, (pos)->base.type == FS_TYPE_PRIO, \ 2405a93b4cdSHans Petter Selasky &(ns)->prios) 2415a93b4cdSHans Petter Selasky 2425a93b4cdSHans Petter Selasky #define fs_for_each_prio_reverse(pos, ns) \ 2435a93b4cdSHans Petter Selasky fs_list_for_each_entry_reverse(pos, (pos)->base.type == FS_TYPE_PRIO, \ 2445a93b4cdSHans Petter Selasky &(ns)->prios) 2455a93b4cdSHans Petter Selasky 2465a93b4cdSHans Petter Selasky #define fs_for_each_prio_continue(pos, ns) \ 2475a93b4cdSHans Petter Selasky fs_list_for_each_entry_continue(pos, (pos)->base.type == FS_TYPE_PRIO, \ 2485a93b4cdSHans Petter Selasky &(ns)->prios) 2495a93b4cdSHans Petter Selasky 2505a93b4cdSHans Petter Selasky #define fs_for_each_prio_continue_reverse(pos, ns) \ 2515a93b4cdSHans Petter Selasky fs_list_for_each_entry_continue_reverse(pos, \ 2525a93b4cdSHans Petter Selasky (pos)->base.type == FS_TYPE_PRIO, \ 2535a93b4cdSHans Petter Selasky &(ns)->prios) 2545a93b4cdSHans Petter Selasky 2555a93b4cdSHans Petter Selasky #define fs_for_each_fg(pos, ft) \ 2565a93b4cdSHans Petter Selasky fs_list_for_each_entry(pos, (pos)->base.type == FS_TYPE_FLOW_GROUP, \ 2575a93b4cdSHans Petter Selasky &(ft)->fgs) 2585a93b4cdSHans Petter Selasky 2595a93b4cdSHans Petter Selasky #define fs_for_each_fte(pos, fg) \ 2605a93b4cdSHans Petter Selasky fs_list_for_each_entry(pos, (pos)->base.type == FS_TYPE_FLOW_ENTRY, \ 2615a93b4cdSHans Petter Selasky &(fg)->ftes) 2625a93b4cdSHans Petter Selasky #define fs_for_each_dst(pos, fte) \ 2635a93b4cdSHans Petter Selasky fs_list_for_each_entry(pos, (pos)->base.type == FS_TYPE_FLOW_DEST, \ 2645a93b4cdSHans Petter Selasky &(fte)->dests) 2655a93b4cdSHans Petter Selasky 2665a93b4cdSHans Petter Selasky int mlx5_cmd_fs_create_ft(struct mlx5_core_dev *dev, 26745e2e55dSMark Bloch u16 vport, enum fs_ft_type type, unsigned int level, 26845e2e55dSMark Bloch unsigned int log_size, const char *name, unsigned int *table_id); 2695a93b4cdSHans Petter Selasky 2705a93b4cdSHans Petter Selasky int mlx5_cmd_fs_destroy_ft(struct mlx5_core_dev *dev, 2715a93b4cdSHans Petter Selasky u16 vport, 2725a93b4cdSHans Petter Selasky enum fs_ft_type type, unsigned int table_id); 2735a93b4cdSHans Petter Selasky 2745a93b4cdSHans Petter Selasky int mlx5_cmd_fs_create_fg(struct mlx5_core_dev *dev, 2755a93b4cdSHans Petter Selasky u32 *in, 2765a93b4cdSHans Petter Selasky u16 vport, 2775a93b4cdSHans Petter Selasky enum fs_ft_type type, unsigned int table_id, 2785a93b4cdSHans Petter Selasky unsigned int *group_id); 2795a93b4cdSHans Petter Selasky 2805a93b4cdSHans Petter Selasky int mlx5_cmd_fs_destroy_fg(struct mlx5_core_dev *dev, 2815a93b4cdSHans Petter Selasky u16 vport, 2825a93b4cdSHans Petter Selasky enum fs_ft_type type, unsigned int table_id, 2835a93b4cdSHans Petter Selasky unsigned int group_id); 2845a93b4cdSHans Petter Selasky 2855a93b4cdSHans Petter Selasky 2865a93b4cdSHans Petter Selasky int mlx5_cmd_fs_set_fte(struct mlx5_core_dev *dev, 2875a93b4cdSHans Petter Selasky u16 vport, 2885a93b4cdSHans Petter Selasky enum fs_fte_status *fte_status, 2895a93b4cdSHans Petter Selasky u32 *match_val, 2905a93b4cdSHans Petter Selasky enum fs_ft_type type, unsigned int table_id, 2915a93b4cdSHans Petter Selasky unsigned int index, unsigned int group_id, 292cb054a49SMark Bloch struct mlx5_flow_act *flow_act, 29376ed99edSMark Bloch u32 sw_action, int dest_size, 2945a93b4cdSHans Petter Selasky struct list_head *dests); /* mlx5_flow_desination */ 2955a93b4cdSHans Petter Selasky 2965a93b4cdSHans Petter Selasky int mlx5_cmd_fs_delete_fte(struct mlx5_core_dev *dev, 2975a93b4cdSHans Petter Selasky u16 vport, 2985a93b4cdSHans Petter Selasky enum fs_fte_status *fte_status, 2995a93b4cdSHans Petter Selasky enum fs_ft_type type, unsigned int table_id, 3005a93b4cdSHans Petter Selasky unsigned int index); 3015a93b4cdSHans Petter Selasky 3025a93b4cdSHans Petter Selasky int mlx5_cmd_update_root_ft(struct mlx5_core_dev *dev, 3035a93b4cdSHans Petter Selasky enum fs_ft_type type, 3045a93b4cdSHans Petter Selasky unsigned int id); 3055a93b4cdSHans Petter Selasky 3065a93b4cdSHans Petter Selasky int mlx5_init_fs(struct mlx5_core_dev *dev); 3075a93b4cdSHans Petter Selasky void mlx5_cleanup_fs(struct mlx5_core_dev *dev); 308e4f84168SMark Bloch void mlx5_fc_update_sampling_interval(struct mlx5_core_dev *dev, 309e4f84168SMark Bloch unsigned long interval); 310e4f84168SMark Bloch 311e4f84168SMark Bloch int mlx5_cmd_modify_header_alloc(struct mlx5_core_dev *dev, 312e4f84168SMark Bloch enum mlx5_flow_namespace_type namespace, 313e4f84168SMark Bloch u8 num_actions, 314e4f84168SMark Bloch void *modify_actions, 315e4f84168SMark Bloch struct mlx5_modify_hdr *modify_hdr); 316e4f84168SMark Bloch void mlx5_cmd_modify_header_dealloc(struct mlx5_core_dev *dev, 317e4f84168SMark Bloch struct mlx5_modify_hdr *modify_hdr); 318bb4645b9SMark Bloch int mlx5_cmd_packet_reformat_alloc(struct mlx5_core_dev *dev, 319bb4645b9SMark Bloch struct mlx5_pkt_reformat_params *params, 320bb4645b9SMark Bloch enum mlx5_flow_namespace_type namespace, 321bb4645b9SMark Bloch struct mlx5_pkt_reformat *pkt_reformat); 322bb4645b9SMark Bloch void mlx5_cmd_packet_reformat_dealloc(struct mlx5_core_dev *dev, 323bb4645b9SMark Bloch struct mlx5_pkt_reformat *pkt_reformat); 3245a93b4cdSHans Petter Selasky #endif 325