Linux Audio

Check our new training course

Loading...
Note: File does not exist in v4.6.
  1/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
  2
  3#ifndef _FUNETH_H
  4#define _FUNETH_H
  5
  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_128
 15#define ADMIN_CQE_SIZE SZ_64
 16#define ADMIN_RSP_MAX_LEN (ADMIN_CQE_SIZE - sizeof(struct fun_cqe_info))
 17
 18#define FUN_MAX_MTU 9024
 19
 20#define SQ_DEPTH 512U
 21#define CQ_DEPTH 1024U
 22#define RQ_DEPTH (512U / (PAGE_SIZE / 4096))
 23
 24#define CQ_INTCOAL_USEC 10
 25#define CQ_INTCOAL_NPKT 16
 26#define SQ_INTCOAL_USEC 10
 27#define SQ_INTCOAL_NPKT 16
 28
 29#define INVALID_LPORT 0xffff
 30
 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 */