brintos

brintos / linux-shallow public Read only

0
0
Text · 5.9 KiB · 14a751b Raw
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