198 lines · c
1/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */2/* Copyright (C) 2015-2018 Netronome Systems, Inc. */3 4/*5 * nfp_main.h6 * Author: Jason McMullan <jason.mcmullan@netronome.com>7 */8 9#ifndef NFP_MAIN_H10#define NFP_MAIN_H11 12#include <linux/ethtool.h>13#include <linux/list.h>14#include <linux/types.h>15#include <linux/pci.h>16#include <linux/workqueue.h>17#include <net/devlink.h>18 19struct dentry;20struct device;21struct pci_dev;22 23struct nfp_cpp;24struct nfp_cpp_area;25struct nfp_eth_table;26struct nfp_hwinfo;27struct nfp_mip;28struct nfp_net;29struct nfp_nsp_identify;30struct nfp_eth_media_buf;31struct nfp_port;32struct nfp_rtsym;33struct nfp_rtsym_table;34struct nfp_shared_buf;35 36/**37 * struct nfp_dumpspec - NFP FW dump specification structure38 * @size: Size of the data39 * @data: Sequence of TLVs, each being an instruction to dump some data40 * from FW41 */42struct nfp_dumpspec {43 u32 size;44 u8 data[];45};46 47/**48 * struct nfp_pf - NFP PF-specific device structure49 * @pdev: Backpointer to PCI device50 * @dev_info: NFP ASIC params51 * @cpp: Pointer to the CPP handle52 * @app: Pointer to the APP handle53 * @data_vnic_bar: Pointer to the CPP area for the data vNICs' BARs54 * @ctrl_vnic_bar: Pointer to the CPP area for the ctrl vNIC's BAR55 * @qc_area: Pointer to the CPP area for the queues56 * @mac_stats_bar: Pointer to the CPP area for the MAC stats57 * @mac_stats_mem: Pointer to mapped MAC stats area58 * @vf_cfg_bar: Pointer to the CPP area for the VF configuration BAR59 * @vf_cfg_mem: Pointer to mapped VF configuration area60 * @vfcfg_tbl2_area: Pointer to the CPP area for the VF config table61 * @vfcfg_tbl2: Pointer to mapped VF config table62 * @mbox: RTSym of per-PCI PF mailbox (under devlink lock)63 * @irq_entries: Array of MSI-X entries for all vNICs64 * @limit_vfs: Number of VFs supported by firmware (~0 for PCI limit)65 * @num_vfs: Number of SR-IOV VFs enabled66 * @fw_loaded: Is the firmware loaded?67 * @unload_fw_on_remove:Do we need to unload firmware on driver removal?68 * @ctrl_vnic: Pointer to the control vNIC if available69 * @mip: MIP handle70 * @rtbl: RTsym table71 * @hwinfo: HWInfo table72 * @dumpspec: Debug dump specification73 * @dump_flag: Store dump flag between set_dump and get_dump_flag74 * @dump_len: Store dump length between set_dump and get_dump_flag75 * @eth_tbl: NSP ETH table76 * @nspi: NSP identification info77 * @hwmon_dev: pointer to hwmon device78 * @ddir: Per-device debugfs directory79 * @max_data_vnics: Number of data vNICs app firmware supports80 * @num_vnics: Number of vNICs spawned81 * @vnics: Linked list of vNIC structures (struct nfp_net)82 * @ports: Linked list of port structures (struct nfp_port)83 * @wq: Workqueue for running works which need to grab @lock84 * @port_refresh_work: Work entry for taking netdevs out85 * @shared_bufs: Array of shared buffer structures if FW has any SBs86 * @num_shared_bufs: Number of elements in @shared_bufs87 *88 * Fields which may change after proble are protected by devlink instance lock.89 */90struct nfp_pf {91 struct pci_dev *pdev;92 const struct nfp_dev_info *dev_info;93 94 struct nfp_cpp *cpp;95 96 struct nfp_app *app;97 98 struct nfp_cpp_area *data_vnic_bar;99 struct nfp_cpp_area *ctrl_vnic_bar;100 struct nfp_cpp_area *qc_area;101 struct nfp_cpp_area *mac_stats_bar;102 u8 __iomem *mac_stats_mem;103 struct nfp_cpp_area *vf_cfg_bar;104 u8 __iomem *vf_cfg_mem;105 struct nfp_cpp_area *vfcfg_tbl2_area;106 u8 __iomem *vfcfg_tbl2;107 108 const struct nfp_rtsym *mbox;109 110 struct msix_entry *irq_entries;111 112 unsigned int limit_vfs;113 unsigned int num_vfs;114 115 bool fw_loaded;116 bool unload_fw_on_remove;117 118 struct nfp_net *ctrl_vnic;119 120 const struct nfp_mip *mip;121 struct nfp_rtsym_table *rtbl;122 struct nfp_hwinfo *hwinfo;123 struct nfp_dumpspec *dumpspec;124 u32 dump_flag;125 u32 dump_len;126 struct nfp_eth_table *eth_tbl;127 struct nfp_nsp_identify *nspi;128 129 struct device *hwmon_dev;130 131 struct dentry *ddir;132 133 unsigned int max_data_vnics;134 unsigned int num_vnics;135 136 struct list_head vnics;137 struct list_head ports;138 139 struct workqueue_struct *wq;140 struct work_struct port_refresh_work;141 142 struct nfp_shared_buf *shared_bufs;143 unsigned int num_shared_bufs;144};145 146extern struct pci_driver nfp_netvf_pci_driver;147 148extern const struct devlink_ops nfp_devlink_ops;149 150int nfp_net_pci_probe(struct nfp_pf *pf);151void nfp_net_pci_remove(struct nfp_pf *pf);152 153int nfp_hwmon_register(struct nfp_pf *pf);154void nfp_hwmon_unregister(struct nfp_pf *pf);155 156void157nfp_net_get_mac_addr(struct nfp_pf *pf, struct net_device *netdev,158 struct nfp_port *port);159 160bool nfp_ctrl_tx(struct nfp_net *nn, struct sk_buff *skb);161 162int nfp_pf_rtsym_read_optional(struct nfp_pf *pf, const char *format,163 unsigned int default_val);164int nfp_net_pf_get_app_id(struct nfp_pf *pf);165u8 __iomem *166nfp_pf_map_rtsym(struct nfp_pf *pf, const char *name, const char *sym_fmt,167 unsigned int min_size, struct nfp_cpp_area **area);168int nfp_mbox_cmd(struct nfp_pf *pf, u32 cmd, void *in_data, u64 in_length,169 void *out_data, u64 out_length);170int nfp_flash_update_common(struct nfp_pf *pf, const struct firmware *fw,171 struct netlink_ext_ack *extack);172 173enum nfp_dump_diag {174 NFP_DUMP_NSP_DIAG = 0,175};176 177struct nfp_dumpspec *178nfp_net_dump_load_dumpspec(struct nfp_cpp *cpp, struct nfp_rtsym_table *rtbl);179s64 nfp_net_dump_calculate_size(struct nfp_pf *pf, struct nfp_dumpspec *spec,180 u32 flag);181int nfp_net_dump_populate_buffer(struct nfp_pf *pf, struct nfp_dumpspec *spec,182 struct ethtool_dump *dump_param, void *dest);183 184int nfp_shared_buf_register(struct nfp_pf *pf);185void nfp_shared_buf_unregister(struct nfp_pf *pf);186int nfp_shared_buf_pool_get(struct nfp_pf *pf, unsigned int sb, u16 pool_index,187 struct devlink_sb_pool_info *pool_info);188int nfp_shared_buf_pool_set(struct nfp_pf *pf, unsigned int sb,189 u16 pool_index, u32 size,190 enum devlink_sb_threshold_type threshold_type);191 192int nfp_devlink_params_register(struct nfp_pf *pf);193void nfp_devlink_params_unregister(struct nfp_pf *pf);194 195unsigned int nfp_net_lr2speed(unsigned int linkrate);196unsigned int nfp_net_speed2lr(unsigned int speed);197#endif /* NFP_MAIN_H */198