brintos

brintos / linux-shallow public Read only

0
0
Text · 3.9 KiB · 1250e10 Raw
172 lines · c
1/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */2 3#ifndef _FUNETH_H4#define _FUNETH_H5 6#include <uapi/linux/if_ether.h>7#include <uapi/linux/net_tstamp.h>8#include <linux/mutex.h>9#include <linux/seqlock.h>10#include <linux/xarray.h>11#include <net/devlink.h>12#include "fun_dev.h"13 14#define ADMIN_SQE_SIZE SZ_12815#define ADMIN_CQE_SIZE SZ_6416#define ADMIN_RSP_MAX_LEN (ADMIN_CQE_SIZE - sizeof(struct fun_cqe_info))17 18#define FUN_MAX_MTU 902419 20#define SQ_DEPTH 512U21#define CQ_DEPTH 1024U22#define RQ_DEPTH (512U / (PAGE_SIZE / 4096))23 24#define CQ_INTCOAL_USEC 1025#define CQ_INTCOAL_NPKT 1626#define SQ_INTCOAL_USEC 1027#define SQ_INTCOAL_NPKT 1628 29#define INVALID_LPORT 0xffff30 31#define FUN_PORT_CAP_PAUSE_MASK (FUN_PORT_CAP_TX_PAUSE | FUN_PORT_CAP_RX_PAUSE)32 33struct fun_vport_info {34	u8 mac[ETH_ALEN];35	u16 vlan;36	__be16 vlan_proto;37	u8 qos;38	u8 spoofchk:1;39	u8 trusted:1;40	unsigned int max_rate;41};42 43/* "subclass" of fun_dev for Ethernet functions */44struct fun_ethdev {45	struct fun_dev fdev;46 47	/* the function's network ports */48	struct net_device **netdevs;49	unsigned int num_ports;50 51	/* configuration for the function's virtual ports */52	unsigned int num_vports;53	struct fun_vport_info *vport_info;54 55	struct mutex state_mutex; /* nests inside RTNL if both taken */56 57	unsigned int nsqs_per_port;58};59 60static inline struct fun_ethdev *to_fun_ethdev(struct fun_dev *p)61{62	return container_of(p, struct fun_ethdev, fdev);63}64 65struct fun_qset {66	struct funeth_rxq **rxqs;67	struct funeth_txq **txqs;68	struct funeth_txq **xdpqs;69	unsigned int nrxqs;70	unsigned int ntxqs;71	unsigned int nxdpqs;72	unsigned int rxq_start;73	unsigned int txq_start;74	unsigned int xdpq_start;75	unsigned int cq_depth;76	unsigned int rq_depth;77	unsigned int sq_depth;78	int state;79};80 81/* Per netdevice driver state, i.e., netdev_priv. */82struct funeth_priv {83	struct fun_dev *fdev;84	struct pci_dev *pdev;85	struct net_device *netdev;86 87	struct funeth_rxq * __rcu *rxqs;88	struct funeth_txq **txqs;89	struct funeth_txq * __rcu *xdpqs;90 91	struct xarray irqs;92	unsigned int num_tx_irqs;93	unsigned int num_rx_irqs;94	unsigned int rx_irq_ofst;95 96	unsigned int lane_attrs;97	u16 lport;98 99	/* link settings */100	u64 port_caps;101	u64 advertising;102	u64 lp_advertising;103	unsigned int link_speed;104	u8 xcvr_type;105	u8 active_fc;106	u8 active_fec;107	u8 link_down_reason;108	seqcount_t link_seq;109 110	u32 msg_enable;111 112	unsigned int num_xdpqs;113 114	/* ethtool, etc. config parameters */115	unsigned int sq_depth;116	unsigned int rq_depth;117	unsigned int cq_depth;118	unsigned int cq_irq_db;119	u8 tx_coal_usec;120	u8 tx_coal_count;121	u8 rx_coal_usec;122	u8 rx_coal_count;123 124	struct hwtstamp_config hwtstamp_cfg;125 126	/* cumulative queue stats from earlier queue instances */127	u64 tx_packets;128	u64 tx_bytes;129	u64 tx_dropped;130	u64 rx_packets;131	u64 rx_bytes;132	u64 rx_dropped;133 134	/* RSS */135	unsigned int rss_hw_id;136	enum fun_eth_hash_alg hash_algo;137	u8 rss_key[FUN_ETH_RSS_MAX_KEY_SIZE];138	unsigned int indir_table_nentries;139	u32 indir_table[FUN_ETH_RSS_MAX_INDIR_ENT];140	dma_addr_t rss_dma_addr;141	void *rss_cfg;142 143	/* DMA area for port stats */144	dma_addr_t stats_dma_addr;145	__be64 *stats;146 147	struct bpf_prog *xdp_prog;148 149	struct devlink_port dl_port;150 151	/* kTLS state */152	unsigned int ktls_id;153	atomic64_t tx_tls_add;154	atomic64_t tx_tls_del;155	atomic64_t tx_tls_resync;156};157 158void fun_set_ethtool_ops(struct net_device *netdev);159int fun_port_write_cmd(struct funeth_priv *fp, int key, u64 data);160int fun_port_read_cmd(struct funeth_priv *fp, int key, u64 *data);161int fun_create_and_bind_tx(struct funeth_priv *fp, u32 sqid);162int fun_replace_queues(struct net_device *dev, struct fun_qset *newqs,163		       struct netlink_ext_ack *extack);164int fun_change_num_queues(struct net_device *dev, unsigned int ntx,165			  unsigned int nrx);166void fun_set_ring_count(struct net_device *netdev, unsigned int ntx,167			unsigned int nrx);168int fun_config_rss(struct net_device *dev, int algo, const u8 *key,169		   const u32 *qtable, u8 op);170 171#endif /* _FUNETH_H */172