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 | struct mlx5_flow_table_attr *ft_attr, |
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 (*)(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 (*)(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 | u16 peer_vhca_id); |
98 | |
99 | int (*create_ns)(struct mlx5_flow_root_namespace *ns); |
100 | int (*destroy_ns)(struct mlx5_flow_root_namespace *ns); |
101 | int (*create_match_definer)(struct mlx5_flow_root_namespace *ns, |
102 | u16 format_id, u32 *match_mask); |
103 | int (*destroy_match_definer)(struct mlx5_flow_root_namespace *ns, |
104 | int definer_id); |
105 | |
106 | u32 (*get_capabilities)(struct mlx5_flow_root_namespace *ns, |
107 | enum fs_flow_table_type ft_type); |
108 | }; |
109 | |
110 | int mlx5_cmd_fc_alloc(struct mlx5_core_dev *dev, u32 *id); |
111 | int mlx5_cmd_fc_bulk_alloc(struct mlx5_core_dev *dev, |
112 | enum mlx5_fc_bulk_alloc_bitmask alloc_bitmask, |
113 | u32 *id); |
114 | int mlx5_cmd_fc_free(struct mlx5_core_dev *dev, u32 id); |
115 | int mlx5_cmd_fc_query(struct mlx5_core_dev *dev, u32 id, |
116 | u64 *packets, u64 *bytes); |
117 | |
118 | int mlx5_cmd_fc_get_bulk_query_out_len(int bulk_len); |
119 | int mlx5_cmd_fc_bulk_query(struct mlx5_core_dev *dev, u32 base_id, int bulk_len, |
120 | u32 *out); |
121 | |
122 | const struct mlx5_flow_cmds *mlx5_fs_cmd_get_default(enum fs_flow_table_type type); |
123 | const struct mlx5_flow_cmds *mlx5_fs_cmd_get_fw_cmds(void); |
124 | |
125 | int mlx5_fs_cmd_set_l2table_entry_silent(struct mlx5_core_dev *dev, u8 silent_mode); |
126 | int mlx5_fs_cmd_set_tx_flow_table_root(struct mlx5_core_dev *dev, u32 ft_id, bool disconnect); |
127 | #endif |
128 | |