Blame view

include/linux/qed/qed_eth_if.h 7.05 KB
25c089d78   Yuval Mintz   qed: Add basic L2...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  /* QLogic qed NIC Driver
   * Copyright (c) 2015 QLogic Corporation
   *
   * This software is available under the terms of the GNU General Public License
   * (GPL) Version 2, available from the file COPYING in the main directory of
   * this source tree.
   */
  
  #ifndef _QED_ETH_IF_H
  #define _QED_ETH_IF_H
  
  #include <linux/list.h>
  #include <linux/if_link.h>
  #include <linux/qed/eth_common.h>
  #include <linux/qed/qed_if.h>
0b55e27d5   Yuval Mintz   qed: IOV configur...
16
  #include <linux/qed/qed_iov_if.h>
25c089d78   Yuval Mintz   qed: Add basic L2...
17

3da7a37ae   Mintz, Yuval   qed*: Handle-base...
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
  struct qed_queue_start_common_params {
  	/* Should always be relative to entity sending this. */
  	u8 vport_id;
  	u16 queue_id;
  
  	/* Relative, but relevant only for PFs */
  	u8 stats_id;
  
  	/* These are always absolute */
  	u16 sb;
  	u8 sb_idx;
  };
  
  struct qed_rxq_start_ret_params {
  	void __iomem *p_prod;
  	void *p_handle;
  };
  
  struct qed_txq_start_ret_params {
  	void __iomem *p_doorbell;
  	void *p_handle;
  };
25c089d78   Yuval Mintz   qed: Add basic L2...
40
41
42
43
44
45
46
  struct qed_dev_eth_info {
  	struct qed_dev_info common;
  
  	u8	num_queues;
  	u8	num_tc;
  
  	u8	port_mac[ETH_ALEN];
2edbff8dc   Tomer Tayar   qed: Learn resour...
47
  	u16	num_vlan_filters;
7b7e70f97   Yuval Mintz   qed*: Allow unica...
48
  	u16	num_mac_filters;
d8c2c7e34   Yuval Mintz   qed*: Add support...
49
50
51
  
  	/* Legacy VF - this affects the datapath, so qede has to know */
  	bool is_legacy;
25c089d78   Yuval Mintz   qed: Add basic L2...
52
  };
cee4d2644   Manish Chopra   qed: Add slowpath...
53
54
55
  struct qed_update_vport_rss_params {
  	u16	rss_ind_table[128];
  	u32	rss_key[10];
8c5ebd0c7   Sudarsana Reddy Kalluru   qed: add Rx flow ...
56
  	u8	rss_caps;
cee4d2644   Manish Chopra   qed: Add slowpath...
57
58
59
60
61
62
  };
  
  struct qed_update_vport_params {
  	u8 vport_id;
  	u8 update_vport_active_flg;
  	u8 vport_active_flg;
831bfb0e8   Yuval Mintz   qed*: Tx-switchin...
63
64
  	u8 update_tx_switching_flg;
  	u8 tx_switching_flg;
3f9b4a697   Yuval Mintz   qed: Lay infrastr...
65
66
  	u8 update_accept_any_vlan_flg;
  	u8 accept_any_vlan;
cee4d2644   Manish Chopra   qed: Add slowpath...
67
68
69
  	u8 update_rss_flg;
  	struct qed_update_vport_rss_params rss_params;
  };
088c86183   Manish Chopra   qed/qede: Add inf...
70
71
72
73
74
75
  struct qed_start_vport_params {
  	bool remove_inner_vlan;
  	bool gro_enable;
  	bool drop_ttl0;
  	u8 vport_id;
  	u16 mtu;
a0d26d5a4   Yuval Mintz   qed*: Don't reset...
76
  	bool clear_stats;
088c86183   Manish Chopra   qed/qede: Add inf...
77
  };
cee4d2644   Manish Chopra   qed: Add slowpath...
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
  enum qed_filter_rx_mode_type {
  	QED_FILTER_RX_MODE_TYPE_REGULAR,
  	QED_FILTER_RX_MODE_TYPE_MULTI_PROMISC,
  	QED_FILTER_RX_MODE_TYPE_PROMISC,
  };
  
  enum qed_filter_xcast_params_type {
  	QED_FILTER_XCAST_TYPE_ADD,
  	QED_FILTER_XCAST_TYPE_DEL,
  	QED_FILTER_XCAST_TYPE_REPLACE,
  };
  
  struct qed_filter_ucast_params {
  	enum qed_filter_xcast_params_type type;
  	u8 vlan_valid;
  	u16 vlan;
  	u8 mac_valid;
  	unsigned char mac[ETH_ALEN];
  };
  
  struct qed_filter_mcast_params {
  	enum qed_filter_xcast_params_type type;
  	u8 num;
  	unsigned char mac[64][ETH_ALEN];
  };
  
  union qed_filter_type_params {
  	enum qed_filter_rx_mode_type accept_flags;
  	struct qed_filter_ucast_params ucast;
  	struct qed_filter_mcast_params mcast;
  };
  
  enum qed_filter_type {
  	QED_FILTER_TYPE_UCAST,
  	QED_FILTER_TYPE_MCAST,
  	QED_FILTER_TYPE_RX_MODE,
  	QED_MAX_FILTER_TYPES,
  };
  
  struct qed_filter_params {
  	enum qed_filter_type type;
  	union qed_filter_type_params filter;
  };
464f66450   Manish Chopra   qed: Add infrastr...
121
122
123
124
125
126
  struct qed_tunn_params {
  	u16 vxlan_port;
  	u8 update_vxlan_port;
  	u16 geneve_port;
  	u8 update_geneve_port;
  };
cee4d2644   Manish Chopra   qed: Add slowpath...
127
128
  struct qed_eth_cb_ops {
  	struct qed_common_cb_ops common;
c3aaa4038   Yuval Mintz   qed: Pass MAC hin...
129
  	void (*force_mac) (void *dev, u8 *mac, bool forced);
cee4d2644   Manish Chopra   qed: Add slowpath...
130
  };
a1d8d8a51   Sudarsana Reddy Kalluru   qed: Add dcbnl su...
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
  #ifdef CONFIG_DCB
  /* Prototype declaration of qed_eth_dcbnl_ops should match with the declaration
   * of dcbnl_rtnl_ops structure.
   */
  struct qed_eth_dcbnl_ops {
  	/* IEEE 802.1Qaz std */
  	int (*ieee_getpfc)(struct qed_dev *cdev, struct ieee_pfc *pfc);
  	int (*ieee_setpfc)(struct qed_dev *cdev, struct ieee_pfc *pfc);
  	int (*ieee_getets)(struct qed_dev *cdev, struct ieee_ets *ets);
  	int (*ieee_setets)(struct qed_dev *cdev, struct ieee_ets *ets);
  	int (*ieee_peer_getets)(struct qed_dev *cdev, struct ieee_ets *ets);
  	int (*ieee_peer_getpfc)(struct qed_dev *cdev, struct ieee_pfc *pfc);
  	int (*ieee_getapp)(struct qed_dev *cdev, struct dcb_app *app);
  	int (*ieee_setapp)(struct qed_dev *cdev, struct dcb_app *app);
  
  	/* CEE std */
  	u8 (*getstate)(struct qed_dev *cdev);
  	u8 (*setstate)(struct qed_dev *cdev, u8 state);
  	void (*getpgtccfgtx)(struct qed_dev *cdev, int prio, u8 *prio_type,
  			     u8 *pgid, u8 *bw_pct, u8 *up_map);
  	void (*getpgbwgcfgtx)(struct qed_dev *cdev, int pgid, u8 *bw_pct);
  	void (*getpgtccfgrx)(struct qed_dev *cdev, int prio, u8 *prio_type,
  			     u8 *pgid, u8 *bw_pct, u8 *up_map);
  	void (*getpgbwgcfgrx)(struct qed_dev *cdev, int pgid, u8 *bw_pct);
  	void (*getpfccfg)(struct qed_dev *cdev, int prio, u8 *setting);
  	void (*setpfccfg)(struct qed_dev *cdev, int prio, u8 setting);
  	u8 (*getcap)(struct qed_dev *cdev, int capid, u8 *cap);
  	int (*getnumtcs)(struct qed_dev *cdev, int tcid, u8 *num);
  	u8 (*getpfcstate)(struct qed_dev *cdev);
  	int (*getapp)(struct qed_dev *cdev, u8 idtype, u16 id);
  	u8 (*getfeatcfg)(struct qed_dev *cdev, int featid, u8 *flags);
  
  	/* DCBX configuration */
  	u8 (*getdcbx)(struct qed_dev *cdev);
  	void (*setpgtccfgtx)(struct qed_dev *cdev, int prio,
  			     u8 pri_type, u8 pgid, u8 bw_pct, u8 up_map);
  	void (*setpgtccfgrx)(struct qed_dev *cdev, int prio,
  			     u8 pri_type, u8 pgid, u8 bw_pct, u8 up_map);
  	void (*setpgbwgcfgtx)(struct qed_dev *cdev, int pgid, u8 bw_pct);
  	void (*setpgbwgcfgrx)(struct qed_dev *cdev, int pgid, u8 bw_pct);
  	u8 (*setall)(struct qed_dev *cdev);
  	int (*setnumtcs)(struct qed_dev *cdev, int tcid, u8 num);
  	void (*setpfcstate)(struct qed_dev *cdev, u8 state);
  	int (*setapp)(struct qed_dev *cdev, u8 idtype, u16 idval, u8 up);
  	u8 (*setdcbx)(struct qed_dev *cdev, u8 state);
  	u8 (*setfeatcfg)(struct qed_dev *cdev, int featid, u8 flags);
  
  	/* Peer apps */
  	int (*peer_getappinfo)(struct qed_dev *cdev,
  			       struct dcb_peer_app_info *info,
  			       u16 *app_count);
  	int (*peer_getapptable)(struct qed_dev *cdev, struct dcb_app *table);
  
  	/* CEE peer */
  	int (*cee_peer_getpfc)(struct qed_dev *cdev, struct cee_pfc *pfc);
  	int (*cee_peer_getpg)(struct qed_dev *cdev, struct cee_pg *pg);
  };
  #endif
25c089d78   Yuval Mintz   qed: Add basic L2...
189
190
  struct qed_eth_ops {
  	const struct qed_common_ops *common;
0b55e27d5   Yuval Mintz   qed: IOV configur...
191
192
193
  #ifdef CONFIG_QED_SRIOV
  	const struct qed_iov_hv_ops *iov;
  #endif
a1d8d8a51   Sudarsana Reddy Kalluru   qed: Add dcbnl su...
194
195
196
  #ifdef CONFIG_DCB
  	const struct qed_eth_dcbnl_ops *dcb;
  #endif
25c089d78   Yuval Mintz   qed: Add basic L2...
197
198
199
  
  	int (*fill_dev_info)(struct qed_dev *cdev,
  			     struct qed_dev_eth_info *info);
cc875c2e4   Yuval Mintz   qed: Add link sup...
200
201
202
  	void (*register_ops)(struct qed_dev *cdev,
  			     struct qed_eth_cb_ops *ops,
  			     void *cookie);
eff169608   Yuval Mintz   qed*: Support for...
203
  	 bool(*check_mac) (struct qed_dev *cdev, u8 *mac);
cee4d2644   Manish Chopra   qed: Add slowpath...
204
  	int (*vport_start)(struct qed_dev *cdev,
088c86183   Manish Chopra   qed/qede: Add inf...
205
  			   struct qed_start_vport_params *params);
cee4d2644   Manish Chopra   qed: Add slowpath...
206
207
208
209
210
211
212
213
  
  	int (*vport_stop)(struct qed_dev *cdev,
  			  u8 vport_id);
  
  	int (*vport_update)(struct qed_dev *cdev,
  			    struct qed_update_vport_params *params);
  
  	int (*q_rx_start)(struct qed_dev *cdev,
3da7a37ae   Mintz, Yuval   qed*: Handle-base...
214
  			  u8 rss_num,
cee4d2644   Manish Chopra   qed: Add slowpath...
215
216
217
218
219
  			  struct qed_queue_start_common_params *params,
  			  u16 bd_max_bytes,
  			  dma_addr_t bd_chain_phys_addr,
  			  dma_addr_t cqe_pbl_addr,
  			  u16 cqe_pbl_size,
3da7a37ae   Mintz, Yuval   qed*: Handle-base...
220
  			  struct qed_rxq_start_ret_params *ret_params);
cee4d2644   Manish Chopra   qed: Add slowpath...
221

3da7a37ae   Mintz, Yuval   qed*: Handle-base...
222
  	int (*q_rx_stop)(struct qed_dev *cdev, u8 rss_id, void *handle);
cee4d2644   Manish Chopra   qed: Add slowpath...
223
224
  
  	int (*q_tx_start)(struct qed_dev *cdev,
3da7a37ae   Mintz, Yuval   qed*: Handle-base...
225
  			  u8 rss_num,
cee4d2644   Manish Chopra   qed: Add slowpath...
226
227
228
  			  struct qed_queue_start_common_params *params,
  			  dma_addr_t pbl_addr,
  			  u16 pbl_size,
3da7a37ae   Mintz, Yuval   qed*: Handle-base...
229
  			  struct qed_txq_start_ret_params *ret_params);
cee4d2644   Manish Chopra   qed: Add slowpath...
230

3da7a37ae   Mintz, Yuval   qed*: Handle-base...
231
  	int (*q_tx_stop)(struct qed_dev *cdev, u8 rss_id, void *handle);
cee4d2644   Manish Chopra   qed: Add slowpath...
232
233
234
235
236
237
238
239
240
  
  	int (*filter_config)(struct qed_dev *cdev,
  			     struct qed_filter_params *params);
  
  	int (*fastpath_stop)(struct qed_dev *cdev);
  
  	int (*eth_cqe_completion)(struct qed_dev *cdev,
  				  u8 rss_id,
  				  struct eth_slow_path_rx_cqe *cqe);
9df2ed041   Manish Chopra   qed: Add statisti...
241
242
243
  
  	void (*get_vport_stats)(struct qed_dev *cdev,
  				struct qed_eth_stats *stats);
464f66450   Manish Chopra   qed: Add infrastr...
244
245
246
  
  	int (*tunn_config)(struct qed_dev *cdev,
  			   struct qed_tunn_params *params);
25c089d78   Yuval Mintz   qed: Add basic L2...
247
  };
95114344e   Rahul Verma   qed*: remove vers...
248
  const struct qed_eth_ops *qed_get_eth_ops(void);
25c089d78   Yuval Mintz   qed: Add basic L2...
249
250
251
  void qed_put_eth_ops(void);
  
  #endif