Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v4.16-rc7 360 lines 10 kB view raw
1/* QLogic qed NIC Driver 2 * Copyright (c) 2015-2017 QLogic Corporation 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 _QED_ETH_IF_H 34#define _QED_ETH_IF_H 35 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> 41 42struct qed_queue_start_common_params { 43 /* Should always be relative to entity sending this. */ 44 u8 vport_id; 45 u16 queue_id; 46 47 /* Relative, but relevant only for PFs */ 48 u8 stats_id; 49 50 struct qed_sb_info *p_sb; 51 u8 sb_idx; 52}; 53 54struct qed_rxq_start_ret_params { 55 void __iomem *p_prod; 56 void *p_handle; 57}; 58 59struct qed_txq_start_ret_params { 60 void __iomem *p_doorbell; 61 void *p_handle; 62}; 63 64enum qed_filter_config_mode { 65 QED_FILTER_CONFIG_MODE_DISABLE, 66 QED_FILTER_CONFIG_MODE_5_TUPLE, 67 QED_FILTER_CONFIG_MODE_L4_PORT, 68 QED_FILTER_CONFIG_MODE_IP_DEST, 69}; 70 71struct qed_ntuple_filter_params { 72 /* Physically mapped address containing header of buffer to be used 73 * as filter. 74 */ 75 dma_addr_t addr; 76 77 /* Length of header in bytes */ 78 u16 length; 79 80 /* Relative queue-id to receive classified packet */ 81#define QED_RFS_NTUPLE_QID_RSS ((u16)-1) 82 u16 qid; 83 84 /* Identifier can either be according to vport-id or vfid */ 85 bool b_is_vf; 86 u8 vport_id; 87 u8 vf_id; 88 89 /* true iff this filter is to be added. Else to be removed */ 90 bool b_is_add; 91}; 92 93struct qed_dev_eth_info { 94 struct qed_dev_info common; 95 96 u8 num_queues; 97 u8 num_tc; 98 99 u8 port_mac[ETH_ALEN]; 100 u16 num_vlan_filters; 101 u16 num_mac_filters; 102 103 /* Legacy VF - this affects the datapath, so qede has to know */ 104 bool is_legacy; 105 106 /* Might depend on available resources [in case of VF] */ 107 bool xdp_supported; 108}; 109 110struct qed_update_vport_rss_params { 111 void *rss_ind_table[128]; 112 u32 rss_key[10]; 113 u8 rss_caps; 114}; 115 116struct qed_update_vport_params { 117 u8 vport_id; 118 u8 update_vport_active_flg; 119 u8 vport_active_flg; 120 u8 update_tx_switching_flg; 121 u8 tx_switching_flg; 122 u8 update_accept_any_vlan_flg; 123 u8 accept_any_vlan; 124 u8 update_rss_flg; 125 struct qed_update_vport_rss_params rss_params; 126}; 127 128struct qed_start_vport_params { 129 bool remove_inner_vlan; 130 bool handle_ptp_pkts; 131 bool gro_enable; 132 bool drop_ttl0; 133 u8 vport_id; 134 u16 mtu; 135 bool clear_stats; 136}; 137 138enum qed_filter_rx_mode_type { 139 QED_FILTER_RX_MODE_TYPE_REGULAR, 140 QED_FILTER_RX_MODE_TYPE_MULTI_PROMISC, 141 QED_FILTER_RX_MODE_TYPE_PROMISC, 142}; 143 144enum qed_filter_xcast_params_type { 145 QED_FILTER_XCAST_TYPE_ADD, 146 QED_FILTER_XCAST_TYPE_DEL, 147 QED_FILTER_XCAST_TYPE_REPLACE, 148}; 149 150struct qed_filter_ucast_params { 151 enum qed_filter_xcast_params_type type; 152 u8 vlan_valid; 153 u16 vlan; 154 u8 mac_valid; 155 unsigned char mac[ETH_ALEN]; 156}; 157 158struct qed_filter_mcast_params { 159 enum qed_filter_xcast_params_type type; 160 u8 num; 161 unsigned char mac[64][ETH_ALEN]; 162}; 163 164union qed_filter_type_params { 165 enum qed_filter_rx_mode_type accept_flags; 166 struct qed_filter_ucast_params ucast; 167 struct qed_filter_mcast_params mcast; 168}; 169 170enum qed_filter_type { 171 QED_FILTER_TYPE_UCAST, 172 QED_FILTER_TYPE_MCAST, 173 QED_FILTER_TYPE_RX_MODE, 174 QED_MAX_FILTER_TYPES, 175}; 176 177struct qed_filter_params { 178 enum qed_filter_type type; 179 union qed_filter_type_params filter; 180}; 181 182struct qed_tunn_params { 183 u16 vxlan_port; 184 u8 update_vxlan_port; 185 u16 geneve_port; 186 u8 update_geneve_port; 187}; 188 189struct qed_eth_cb_ops { 190 struct qed_common_cb_ops common; 191 void (*force_mac) (void *dev, u8 *mac, bool forced); 192 void (*ports_update)(void *dev, u16 vxlan_port, u16 geneve_port); 193}; 194 195#define QED_MAX_PHC_DRIFT_PPB 291666666 196 197enum qed_ptp_filter_type { 198 QED_PTP_FILTER_NONE, 199 QED_PTP_FILTER_ALL, 200 QED_PTP_FILTER_V1_L4_EVENT, 201 QED_PTP_FILTER_V1_L4_GEN, 202 QED_PTP_FILTER_V2_L4_EVENT, 203 QED_PTP_FILTER_V2_L4_GEN, 204 QED_PTP_FILTER_V2_L2_EVENT, 205 QED_PTP_FILTER_V2_L2_GEN, 206 QED_PTP_FILTER_V2_EVENT, 207 QED_PTP_FILTER_V2_GEN 208}; 209 210enum qed_ptp_hwtstamp_tx_type { 211 QED_PTP_HWTSTAMP_TX_OFF, 212 QED_PTP_HWTSTAMP_TX_ON, 213}; 214 215#ifdef CONFIG_DCB 216/* Prototype declaration of qed_eth_dcbnl_ops should match with the declaration 217 * of dcbnl_rtnl_ops structure. 218 */ 219struct qed_eth_dcbnl_ops { 220 /* IEEE 802.1Qaz std */ 221 int (*ieee_getpfc)(struct qed_dev *cdev, struct ieee_pfc *pfc); 222 int (*ieee_setpfc)(struct qed_dev *cdev, struct ieee_pfc *pfc); 223 int (*ieee_getets)(struct qed_dev *cdev, struct ieee_ets *ets); 224 int (*ieee_setets)(struct qed_dev *cdev, struct ieee_ets *ets); 225 int (*ieee_peer_getets)(struct qed_dev *cdev, struct ieee_ets *ets); 226 int (*ieee_peer_getpfc)(struct qed_dev *cdev, struct ieee_pfc *pfc); 227 int (*ieee_getapp)(struct qed_dev *cdev, struct dcb_app *app); 228 int (*ieee_setapp)(struct qed_dev *cdev, struct dcb_app *app); 229 230 /* CEE std */ 231 u8 (*getstate)(struct qed_dev *cdev); 232 u8 (*setstate)(struct qed_dev *cdev, u8 state); 233 void (*getpgtccfgtx)(struct qed_dev *cdev, int prio, u8 *prio_type, 234 u8 *pgid, u8 *bw_pct, u8 *up_map); 235 void (*getpgbwgcfgtx)(struct qed_dev *cdev, int pgid, u8 *bw_pct); 236 void (*getpgtccfgrx)(struct qed_dev *cdev, int prio, u8 *prio_type, 237 u8 *pgid, u8 *bw_pct, u8 *up_map); 238 void (*getpgbwgcfgrx)(struct qed_dev *cdev, int pgid, u8 *bw_pct); 239 void (*getpfccfg)(struct qed_dev *cdev, int prio, u8 *setting); 240 void (*setpfccfg)(struct qed_dev *cdev, int prio, u8 setting); 241 u8 (*getcap)(struct qed_dev *cdev, int capid, u8 *cap); 242 int (*getnumtcs)(struct qed_dev *cdev, int tcid, u8 *num); 243 u8 (*getpfcstate)(struct qed_dev *cdev); 244 int (*getapp)(struct qed_dev *cdev, u8 idtype, u16 id); 245 u8 (*getfeatcfg)(struct qed_dev *cdev, int featid, u8 *flags); 246 247 /* DCBX configuration */ 248 u8 (*getdcbx)(struct qed_dev *cdev); 249 void (*setpgtccfgtx)(struct qed_dev *cdev, int prio, 250 u8 pri_type, u8 pgid, u8 bw_pct, u8 up_map); 251 void (*setpgtccfgrx)(struct qed_dev *cdev, int prio, 252 u8 pri_type, u8 pgid, u8 bw_pct, u8 up_map); 253 void (*setpgbwgcfgtx)(struct qed_dev *cdev, int pgid, u8 bw_pct); 254 void (*setpgbwgcfgrx)(struct qed_dev *cdev, int pgid, u8 bw_pct); 255 u8 (*setall)(struct qed_dev *cdev); 256 int (*setnumtcs)(struct qed_dev *cdev, int tcid, u8 num); 257 void (*setpfcstate)(struct qed_dev *cdev, u8 state); 258 int (*setapp)(struct qed_dev *cdev, u8 idtype, u16 idval, u8 up); 259 u8 (*setdcbx)(struct qed_dev *cdev, u8 state); 260 u8 (*setfeatcfg)(struct qed_dev *cdev, int featid, u8 flags); 261 262 /* Peer apps */ 263 int (*peer_getappinfo)(struct qed_dev *cdev, 264 struct dcb_peer_app_info *info, 265 u16 *app_count); 266 int (*peer_getapptable)(struct qed_dev *cdev, struct dcb_app *table); 267 268 /* CEE peer */ 269 int (*cee_peer_getpfc)(struct qed_dev *cdev, struct cee_pfc *pfc); 270 int (*cee_peer_getpg)(struct qed_dev *cdev, struct cee_pg *pg); 271}; 272#endif 273 274struct qed_eth_ptp_ops { 275 int (*cfg_filters)(struct qed_dev *, enum qed_ptp_filter_type, 276 enum qed_ptp_hwtstamp_tx_type); 277 int (*read_rx_ts)(struct qed_dev *, u64 *); 278 int (*read_tx_ts)(struct qed_dev *, u64 *); 279 int (*read_cc)(struct qed_dev *, u64 *); 280 int (*disable)(struct qed_dev *); 281 int (*adjfreq)(struct qed_dev *, s32); 282 int (*enable)(struct qed_dev *); 283}; 284 285struct qed_eth_ops { 286 const struct qed_common_ops *common; 287#ifdef CONFIG_QED_SRIOV 288 const struct qed_iov_hv_ops *iov; 289#endif 290#ifdef CONFIG_DCB 291 const struct qed_eth_dcbnl_ops *dcb; 292#endif 293 const struct qed_eth_ptp_ops *ptp; 294 295 int (*fill_dev_info)(struct qed_dev *cdev, 296 struct qed_dev_eth_info *info); 297 298 void (*register_ops)(struct qed_dev *cdev, 299 struct qed_eth_cb_ops *ops, 300 void *cookie); 301 302 bool(*check_mac) (struct qed_dev *cdev, u8 *mac); 303 304 int (*vport_start)(struct qed_dev *cdev, 305 struct qed_start_vport_params *params); 306 307 int (*vport_stop)(struct qed_dev *cdev, 308 u8 vport_id); 309 310 int (*vport_update)(struct qed_dev *cdev, 311 struct qed_update_vport_params *params); 312 313 int (*q_rx_start)(struct qed_dev *cdev, 314 u8 rss_num, 315 struct qed_queue_start_common_params *params, 316 u16 bd_max_bytes, 317 dma_addr_t bd_chain_phys_addr, 318 dma_addr_t cqe_pbl_addr, 319 u16 cqe_pbl_size, 320 struct qed_rxq_start_ret_params *ret_params); 321 322 int (*q_rx_stop)(struct qed_dev *cdev, u8 rss_id, void *handle); 323 324 int (*q_tx_start)(struct qed_dev *cdev, 325 u8 rss_num, 326 struct qed_queue_start_common_params *params, 327 dma_addr_t pbl_addr, 328 u16 pbl_size, 329 struct qed_txq_start_ret_params *ret_params); 330 331 int (*q_tx_stop)(struct qed_dev *cdev, u8 rss_id, void *handle); 332 333 int (*filter_config)(struct qed_dev *cdev, 334 struct qed_filter_params *params); 335 336 int (*fastpath_stop)(struct qed_dev *cdev); 337 338 int (*eth_cqe_completion)(struct qed_dev *cdev, 339 u8 rss_id, 340 struct eth_slow_path_rx_cqe *cqe); 341 342 void (*get_vport_stats)(struct qed_dev *cdev, 343 struct qed_eth_stats *stats); 344 345 int (*tunn_config)(struct qed_dev *cdev, 346 struct qed_tunn_params *params); 347 348 int (*ntuple_filter_config)(struct qed_dev *cdev, 349 void *cookie, 350 struct qed_ntuple_filter_params *params); 351 352 int (*configure_arfs_searcher)(struct qed_dev *cdev, 353 enum qed_filter_config_mode mode); 354 int (*get_coalesce)(struct qed_dev *cdev, u16 *coal, void *handle); 355}; 356 357const struct qed_eth_ops *qed_get_eth_ops(void); 358void qed_put_eth_ops(void); 359 360#endif