1 /* 2 * Copyright (c) 2015, Mellanox Technologies. All rights reserved. 3 * 4 * This software is available to you under a choice of one of two 5 * licenses. You may choose to be licensed under the terms of the GNU 6 * General Public License (GPL) Version 2, available from the file 7 * COPYING in the main directory of this source tree, or the 8 * OpenIB.org BSD license below: 9 * 10 * Redistribution and use in source and binary forms, with or 11 * without modification, are permitted provided that the following 12 * conditions are met: 13 * 14 * - Redistributions of source code must retain the above 15 * copyright notice, this list of conditions and the following 16 * disclaimer. 17 * 18 * - Redistributions in binary form must reproduce the above 19 * copyright notice, this list of conditions and the following 20 * disclaimer in the documentation and/or other materials 21 * provided with the distribution. 22 * 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30 * SOFTWARE. 31 */ 32 33 #ifndef _MLX5_FS_CMD_ 34 #define _MLX5_FS_CMD_ 35 36 #include "fs_core.h" 37 38 struct mlx5_flow_cmds { 39 int (*create_flow_table)(struct mlx5_flow_root_namespace *ns, 40 struct mlx5_flow_table *ft, 41 unsigned int size, 42 struct mlx5_flow_table *next_ft); 43 int (*destroy_flow_table)(struct mlx5_flow_root_namespace *ns, 44 struct mlx5_flow_table *ft); 45 46 int (*modify_flow_table)(struct mlx5_flow_root_namespace *ns, 47 struct mlx5_flow_table *ft, 48 struct mlx5_flow_table *next_ft); 49 50 int (*create_flow_group)(struct mlx5_flow_root_namespace *ns, 51 struct mlx5_flow_table *ft, 52 u32 *in, 53 struct mlx5_flow_group *fg); 54 55 int (*destroy_flow_group)(struct mlx5_flow_root_namespace *ns, 56 struct mlx5_flow_table *ft, 57 struct mlx5_flow_group *fg); 58 59 int (*create_fte)(struct mlx5_flow_root_namespace *ns, 60 struct mlx5_flow_table *ft, 61 struct mlx5_flow_group *fg, 62 struct fs_fte *fte); 63 64 int (*update_fte)(struct mlx5_flow_root_namespace *ns, 65 struct mlx5_flow_table *ft, 66 struct mlx5_flow_group *fg, 67 int modify_mask, 68 struct fs_fte *fte); 69 70 int (*delete_fte)(struct mlx5_flow_root_namespace *ns, 71 struct mlx5_flow_table *ft, 72 struct fs_fte *fte); 73 74 int (*update_root_ft)(struct mlx5_flow_root_namespace *ns, 75 struct mlx5_flow_table *ft, 76 u32 underlay_qpn, 77 bool disconnect); 78 79 int (*packet_reformat_alloc)(struct mlx5_flow_root_namespace *ns, 80 struct mlx5_pkt_reformat_params *params, 81 enum mlx5_flow_namespace_type namespace, 82 struct mlx5_pkt_reformat *pkt_reformat); 83 84 void (*packet_reformat_dealloc)(struct mlx5_flow_root_namespace *ns, 85 struct mlx5_pkt_reformat *pkt_reformat); 86 87 int (*modify_header_alloc)(struct mlx5_flow_root_namespace *ns, 88 u8 namespace, u8 num_actions, 89 void *modify_actions, 90 struct mlx5_modify_hdr *modify_hdr); 91 92 void (*modify_header_dealloc)(struct mlx5_flow_root_namespace *ns, 93 struct mlx5_modify_hdr *modify_hdr); 94 95 int (*set_peer)(struct mlx5_flow_root_namespace *ns, 96 struct mlx5_flow_root_namespace *peer_ns); 97 98 int (*create_ns)(struct mlx5_flow_root_namespace *ns); 99 int (*destroy_ns)(struct mlx5_flow_root_namespace *ns); 100 int (*create_match_definer)(struct mlx5_flow_root_namespace *ns, 101 u16 format_id, u32 *match_mask); 102 int (*destroy_match_definer)(struct mlx5_flow_root_namespace *ns, 103 int definer_id); 104 105 u32 (*get_capabilities)(struct mlx5_flow_root_namespace *ns, 106 enum fs_flow_table_type ft_type); 107 }; 108 109 int mlx5_cmd_fc_alloc(struct mlx5_core_dev *dev, u32 *id); 110 int mlx5_cmd_fc_bulk_alloc(struct mlx5_core_dev *dev, 111 enum mlx5_fc_bulk_alloc_bitmask alloc_bitmask, 112 u32 *id); 113 int mlx5_cmd_fc_free(struct mlx5_core_dev *dev, u32 id); 114 int mlx5_cmd_fc_query(struct mlx5_core_dev *dev, u32 id, 115 u64 *packets, u64 *bytes); 116 117 int mlx5_cmd_fc_get_bulk_query_out_len(int bulk_len); 118 int mlx5_cmd_fc_bulk_query(struct mlx5_core_dev *dev, u32 base_id, int bulk_len, 119 u32 *out); 120 121 const struct mlx5_flow_cmds *mlx5_fs_cmd_get_default(enum fs_flow_table_type type); 122 const struct mlx5_flow_cmds *mlx5_fs_cmd_get_fw_cmds(void); 123 124 #endif 125