1 /* QLogic qed NIC Driver
2 * Copyright (c) 2015-2017 QLogic Corporation
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:
10 * Redistribution and use in source and binary forms, with or
11 * without modification, are permitted provided that the following
14 * - Redistributions of source code must retain the above
15 * copyright notice, this list of conditions and the following
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.
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
36 #include <linux/list.h>
37 #include <linux/if_link.h>
38 #include <linux/qed/eth_common.h>
39 #include <linux/qed/qed_if.h>
40 #include <linux/qed/qed_iov_if.h>
42 struct qed_queue_start_common_params
{
43 /* Should always be relative to entity sending this. */
47 /* Relative, but relevant only for PFs */
50 /* These are always absolute */
55 struct qed_rxq_start_ret_params
{
60 struct qed_txq_start_ret_params
{
61 void __iomem
*p_doorbell
;
65 struct qed_dev_eth_info
{
66 struct qed_dev_info common
;
71 u8 port_mac
[ETH_ALEN
];
75 /* Legacy VF - this affects the datapath, so qede has to know */
79 struct qed_update_vport_rss_params
{
80 u16 rss_ind_table
[128];
85 struct qed_update_vport_params
{
87 u8 update_vport_active_flg
;
89 u8 update_tx_switching_flg
;
91 u8 update_accept_any_vlan_flg
;
94 struct qed_update_vport_rss_params rss_params
;
97 struct qed_start_vport_params
{
98 bool remove_inner_vlan
;
106 enum qed_filter_rx_mode_type
{
107 QED_FILTER_RX_MODE_TYPE_REGULAR
,
108 QED_FILTER_RX_MODE_TYPE_MULTI_PROMISC
,
109 QED_FILTER_RX_MODE_TYPE_PROMISC
,
112 enum qed_filter_xcast_params_type
{
113 QED_FILTER_XCAST_TYPE_ADD
,
114 QED_FILTER_XCAST_TYPE_DEL
,
115 QED_FILTER_XCAST_TYPE_REPLACE
,
118 struct qed_filter_ucast_params
{
119 enum qed_filter_xcast_params_type type
;
123 unsigned char mac
[ETH_ALEN
];
126 struct qed_filter_mcast_params
{
127 enum qed_filter_xcast_params_type type
;
129 unsigned char mac
[64][ETH_ALEN
];
132 union qed_filter_type_params
{
133 enum qed_filter_rx_mode_type accept_flags
;
134 struct qed_filter_ucast_params ucast
;
135 struct qed_filter_mcast_params mcast
;
138 enum qed_filter_type
{
139 QED_FILTER_TYPE_UCAST
,
140 QED_FILTER_TYPE_MCAST
,
141 QED_FILTER_TYPE_RX_MODE
,
142 QED_MAX_FILTER_TYPES
,
145 struct qed_filter_params
{
146 enum qed_filter_type type
;
147 union qed_filter_type_params filter
;
150 struct qed_tunn_params
{
152 u8 update_vxlan_port
;
154 u8 update_geneve_port
;
157 struct qed_eth_cb_ops
{
158 struct qed_common_cb_ops common
;
159 void (*force_mac
) (void *dev
, u8
*mac
, bool forced
);
163 /* Prototype declaration of qed_eth_dcbnl_ops should match with the declaration
164 * of dcbnl_rtnl_ops structure.
166 struct qed_eth_dcbnl_ops
{
167 /* IEEE 802.1Qaz std */
168 int (*ieee_getpfc
)(struct qed_dev
*cdev
, struct ieee_pfc
*pfc
);
169 int (*ieee_setpfc
)(struct qed_dev
*cdev
, struct ieee_pfc
*pfc
);
170 int (*ieee_getets
)(struct qed_dev
*cdev
, struct ieee_ets
*ets
);
171 int (*ieee_setets
)(struct qed_dev
*cdev
, struct ieee_ets
*ets
);
172 int (*ieee_peer_getets
)(struct qed_dev
*cdev
, struct ieee_ets
*ets
);
173 int (*ieee_peer_getpfc
)(struct qed_dev
*cdev
, struct ieee_pfc
*pfc
);
174 int (*ieee_getapp
)(struct qed_dev
*cdev
, struct dcb_app
*app
);
175 int (*ieee_setapp
)(struct qed_dev
*cdev
, struct dcb_app
*app
);
178 u8 (*getstate
)(struct qed_dev
*cdev
);
179 u8 (*setstate
)(struct qed_dev
*cdev
, u8 state
);
180 void (*getpgtccfgtx
)(struct qed_dev
*cdev
, int prio
, u8
*prio_type
,
181 u8
*pgid
, u8
*bw_pct
, u8
*up_map
);
182 void (*getpgbwgcfgtx
)(struct qed_dev
*cdev
, int pgid
, u8
*bw_pct
);
183 void (*getpgtccfgrx
)(struct qed_dev
*cdev
, int prio
, u8
*prio_type
,
184 u8
*pgid
, u8
*bw_pct
, u8
*up_map
);
185 void (*getpgbwgcfgrx
)(struct qed_dev
*cdev
, int pgid
, u8
*bw_pct
);
186 void (*getpfccfg
)(struct qed_dev
*cdev
, int prio
, u8
*setting
);
187 void (*setpfccfg
)(struct qed_dev
*cdev
, int prio
, u8 setting
);
188 u8 (*getcap
)(struct qed_dev
*cdev
, int capid
, u8
*cap
);
189 int (*getnumtcs
)(struct qed_dev
*cdev
, int tcid
, u8
*num
);
190 u8 (*getpfcstate
)(struct qed_dev
*cdev
);
191 int (*getapp
)(struct qed_dev
*cdev
, u8 idtype
, u16 id
);
192 u8 (*getfeatcfg
)(struct qed_dev
*cdev
, int featid
, u8
*flags
);
194 /* DCBX configuration */
195 u8 (*getdcbx
)(struct qed_dev
*cdev
);
196 void (*setpgtccfgtx
)(struct qed_dev
*cdev
, int prio
,
197 u8 pri_type
, u8 pgid
, u8 bw_pct
, u8 up_map
);
198 void (*setpgtccfgrx
)(struct qed_dev
*cdev
, int prio
,
199 u8 pri_type
, u8 pgid
, u8 bw_pct
, u8 up_map
);
200 void (*setpgbwgcfgtx
)(struct qed_dev
*cdev
, int pgid
, u8 bw_pct
);
201 void (*setpgbwgcfgrx
)(struct qed_dev
*cdev
, int pgid
, u8 bw_pct
);
202 u8 (*setall
)(struct qed_dev
*cdev
);
203 int (*setnumtcs
)(struct qed_dev
*cdev
, int tcid
, u8 num
);
204 void (*setpfcstate
)(struct qed_dev
*cdev
, u8 state
);
205 int (*setapp
)(struct qed_dev
*cdev
, u8 idtype
, u16 idval
, u8 up
);
206 u8 (*setdcbx
)(struct qed_dev
*cdev
, u8 state
);
207 u8 (*setfeatcfg
)(struct qed_dev
*cdev
, int featid
, u8 flags
);
210 int (*peer_getappinfo
)(struct qed_dev
*cdev
,
211 struct dcb_peer_app_info
*info
,
213 int (*peer_getapptable
)(struct qed_dev
*cdev
, struct dcb_app
*table
);
216 int (*cee_peer_getpfc
)(struct qed_dev
*cdev
, struct cee_pfc
*pfc
);
217 int (*cee_peer_getpg
)(struct qed_dev
*cdev
, struct cee_pg
*pg
);
222 const struct qed_common_ops
*common
;
223 #ifdef CONFIG_QED_SRIOV
224 const struct qed_iov_hv_ops
*iov
;
227 const struct qed_eth_dcbnl_ops
*dcb
;
230 int (*fill_dev_info
)(struct qed_dev
*cdev
,
231 struct qed_dev_eth_info
*info
);
233 void (*register_ops
)(struct qed_dev
*cdev
,
234 struct qed_eth_cb_ops
*ops
,
237 bool(*check_mac
) (struct qed_dev
*cdev
, u8
*mac
);
239 int (*vport_start
)(struct qed_dev
*cdev
,
240 struct qed_start_vport_params
*params
);
242 int (*vport_stop
)(struct qed_dev
*cdev
,
245 int (*vport_update
)(struct qed_dev
*cdev
,
246 struct qed_update_vport_params
*params
);
248 int (*q_rx_start
)(struct qed_dev
*cdev
,
250 struct qed_queue_start_common_params
*params
,
252 dma_addr_t bd_chain_phys_addr
,
253 dma_addr_t cqe_pbl_addr
,
255 struct qed_rxq_start_ret_params
*ret_params
);
257 int (*q_rx_stop
)(struct qed_dev
*cdev
, u8 rss_id
, void *handle
);
259 int (*q_tx_start
)(struct qed_dev
*cdev
,
261 struct qed_queue_start_common_params
*params
,
264 struct qed_txq_start_ret_params
*ret_params
);
266 int (*q_tx_stop
)(struct qed_dev
*cdev
, u8 rss_id
, void *handle
);
268 int (*filter_config
)(struct qed_dev
*cdev
,
269 struct qed_filter_params
*params
);
271 int (*fastpath_stop
)(struct qed_dev
*cdev
);
273 int (*eth_cqe_completion
)(struct qed_dev
*cdev
,
275 struct eth_slow_path_rx_cqe
*cqe
);
277 void (*get_vport_stats
)(struct qed_dev
*cdev
,
278 struct qed_eth_stats
*stats
);
280 int (*tunn_config
)(struct qed_dev
*cdev
,
281 struct qed_tunn_params
*params
);
284 const struct qed_eth_ops
*qed_get_eth_ops(void);
285 void qed_put_eth_ops(void);