xref: /openbmc/linux/include/net/netdev_rx_queue.h (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
1*49e47a5bSJakub Kicinski /* SPDX-License-Identifier: GPL-2.0 */
2*49e47a5bSJakub Kicinski #ifndef _LINUX_NETDEV_RX_QUEUE_H
3*49e47a5bSJakub Kicinski #define _LINUX_NETDEV_RX_QUEUE_H
4*49e47a5bSJakub Kicinski 
5*49e47a5bSJakub Kicinski #include <linux/kobject.h>
6*49e47a5bSJakub Kicinski #include <linux/netdevice.h>
7*49e47a5bSJakub Kicinski #include <linux/sysfs.h>
8*49e47a5bSJakub Kicinski #include <net/xdp.h>
9*49e47a5bSJakub Kicinski 
10*49e47a5bSJakub Kicinski /* This structure contains an instance of an RX queue. */
11*49e47a5bSJakub Kicinski struct netdev_rx_queue {
12*49e47a5bSJakub Kicinski 	struct xdp_rxq_info		xdp_rxq;
13*49e47a5bSJakub Kicinski #ifdef CONFIG_RPS
14*49e47a5bSJakub Kicinski 	struct rps_map __rcu		*rps_map;
15*49e47a5bSJakub Kicinski 	struct rps_dev_flow_table __rcu	*rps_flow_table;
16*49e47a5bSJakub Kicinski #endif
17*49e47a5bSJakub Kicinski 	struct kobject			kobj;
18*49e47a5bSJakub Kicinski 	struct net_device		*dev;
19*49e47a5bSJakub Kicinski 	netdevice_tracker		dev_tracker;
20*49e47a5bSJakub Kicinski 
21*49e47a5bSJakub Kicinski #ifdef CONFIG_XDP_SOCKETS
22*49e47a5bSJakub Kicinski 	struct xsk_buff_pool            *pool;
23*49e47a5bSJakub Kicinski #endif
24*49e47a5bSJakub Kicinski } ____cacheline_aligned_in_smp;
25*49e47a5bSJakub Kicinski 
26*49e47a5bSJakub Kicinski /*
27*49e47a5bSJakub Kicinski  * RX queue sysfs structures and functions.
28*49e47a5bSJakub Kicinski  */
29*49e47a5bSJakub Kicinski struct rx_queue_attribute {
30*49e47a5bSJakub Kicinski 	struct attribute attr;
31*49e47a5bSJakub Kicinski 	ssize_t (*show)(struct netdev_rx_queue *queue, char *buf);
32*49e47a5bSJakub Kicinski 	ssize_t (*store)(struct netdev_rx_queue *queue,
33*49e47a5bSJakub Kicinski 			 const char *buf, size_t len);
34*49e47a5bSJakub Kicinski };
35*49e47a5bSJakub Kicinski 
36*49e47a5bSJakub Kicinski static inline struct netdev_rx_queue *
__netif_get_rx_queue(struct net_device * dev,unsigned int rxq)37*49e47a5bSJakub Kicinski __netif_get_rx_queue(struct net_device *dev, unsigned int rxq)
38*49e47a5bSJakub Kicinski {
39*49e47a5bSJakub Kicinski 	return dev->_rx + rxq;
40*49e47a5bSJakub Kicinski }
41*49e47a5bSJakub Kicinski 
42*49e47a5bSJakub Kicinski #ifdef CONFIG_SYSFS
43*49e47a5bSJakub Kicinski static inline unsigned int
get_netdev_rx_queue_index(struct netdev_rx_queue * queue)44*49e47a5bSJakub Kicinski get_netdev_rx_queue_index(struct netdev_rx_queue *queue)
45*49e47a5bSJakub Kicinski {
46*49e47a5bSJakub Kicinski 	struct net_device *dev = queue->dev;
47*49e47a5bSJakub Kicinski 	int index = queue - dev->_rx;
48*49e47a5bSJakub Kicinski 
49*49e47a5bSJakub Kicinski 	BUG_ON(index >= dev->num_rx_queues);
50*49e47a5bSJakub Kicinski 	return index;
51*49e47a5bSJakub Kicinski }
52*49e47a5bSJakub Kicinski #endif
53*49e47a5bSJakub Kicinski #endif
54