1*54f00cceSWilliam Tu /* SPDX-License-Identifier: GPL-2.0-or-later
2*54f00cceSWilliam Tu *
3*54f00cceSWilliam Tu * Linux driver for VMware's vmxnet3 ethernet NIC.
4*54f00cceSWilliam Tu * Copyright (C) 2008-2023, VMware, Inc. All Rights Reserved.
5*54f00cceSWilliam Tu * Maintained by: pv-drivers@vmware.com
6*54f00cceSWilliam Tu *
7*54f00cceSWilliam Tu */
8*54f00cceSWilliam Tu
9*54f00cceSWilliam Tu #ifndef _VMXNET3_XDP_H
10*54f00cceSWilliam Tu #define _VMXNET3_XDP_H
11*54f00cceSWilliam Tu
12*54f00cceSWilliam Tu #include <linux/filter.h>
13*54f00cceSWilliam Tu #include <linux/bpf_trace.h>
14*54f00cceSWilliam Tu #include <linux/netlink.h>
15*54f00cceSWilliam Tu
16*54f00cceSWilliam Tu #include "vmxnet3_int.h"
17*54f00cceSWilliam Tu
18*54f00cceSWilliam Tu #define VMXNET3_XDP_HEADROOM (XDP_PACKET_HEADROOM + NET_IP_ALIGN)
19*54f00cceSWilliam Tu #define VMXNET3_XDP_RX_TAILROOM SKB_DATA_ALIGN(sizeof(struct skb_shared_info))
20*54f00cceSWilliam Tu #define VMXNET3_XDP_RX_OFFSET VMXNET3_XDP_HEADROOM
21*54f00cceSWilliam Tu #define VMXNET3_XDP_MAX_FRSIZE (PAGE_SIZE - VMXNET3_XDP_HEADROOM - \
22*54f00cceSWilliam Tu VMXNET3_XDP_RX_TAILROOM)
23*54f00cceSWilliam Tu #define VMXNET3_XDP_MAX_MTU (VMXNET3_XDP_MAX_FRSIZE - ETH_HLEN - \
24*54f00cceSWilliam Tu 2 * VLAN_HLEN - ETH_FCS_LEN)
25*54f00cceSWilliam Tu
26*54f00cceSWilliam Tu int vmxnet3_xdp(struct net_device *netdev, struct netdev_bpf *bpf);
27*54f00cceSWilliam Tu int vmxnet3_xdp_xmit(struct net_device *dev, int n, struct xdp_frame **frames,
28*54f00cceSWilliam Tu u32 flags);
29*54f00cceSWilliam Tu int vmxnet3_process_xdp(struct vmxnet3_adapter *adapter,
30*54f00cceSWilliam Tu struct vmxnet3_rx_queue *rq,
31*54f00cceSWilliam Tu struct Vmxnet3_RxCompDesc *rcd,
32*54f00cceSWilliam Tu struct vmxnet3_rx_buf_info *rbi,
33*54f00cceSWilliam Tu struct Vmxnet3_RxDesc *rxd,
34*54f00cceSWilliam Tu struct sk_buff **skb_xdp_pass);
35*54f00cceSWilliam Tu int vmxnet3_process_xdp_small(struct vmxnet3_adapter *adapter,
36*54f00cceSWilliam Tu struct vmxnet3_rx_queue *rq,
37*54f00cceSWilliam Tu void *data, int len,
38*54f00cceSWilliam Tu struct sk_buff **skb_xdp_pass);
39*54f00cceSWilliam Tu void *vmxnet3_pp_get_buff(struct page_pool *pp, dma_addr_t *dma_addr,
40*54f00cceSWilliam Tu gfp_t gfp_mask);
41*54f00cceSWilliam Tu
vmxnet3_xdp_enabled(struct vmxnet3_adapter * adapter)42*54f00cceSWilliam Tu static inline bool vmxnet3_xdp_enabled(struct vmxnet3_adapter *adapter)
43*54f00cceSWilliam Tu {
44*54f00cceSWilliam Tu return !!rcu_access_pointer(adapter->xdp_bpf_prog);
45*54f00cceSWilliam Tu }
46*54f00cceSWilliam Tu
47*54f00cceSWilliam Tu #endif
48