| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* Copyright(c) 2019 Intel Corporation. */ |
| |
| #ifndef XSK_H_ |
| #define XSK_H_ |
| |
| /* Masks for xdp_umem_page flags. |
| * The low 12-bits of the addr will be 0 since this is the page address, so we |
| * can use them for flags. |
| */ |
| #define XSK_NEXT_PG_CONTIG_SHIFT 0 |
| #define XSK_NEXT_PG_CONTIG_MASK BIT_ULL(XSK_NEXT_PG_CONTIG_SHIFT) |
| |
| struct xdp_ring_offset_v1 { |
| __u64 producer; |
| __u64 consumer; |
| __u64 desc; |
| }; |
| |
| struct xdp_mmap_offsets_v1 { |
| struct xdp_ring_offset_v1 rx; |
| struct xdp_ring_offset_v1 tx; |
| struct xdp_ring_offset_v1 fr; |
| struct xdp_ring_offset_v1 cr; |
| }; |
| |
| /* Nodes are linked in the struct xdp_sock map_list field, and used to |
| * track which maps a certain socket reside in. |
| */ |
| |
| struct xsk_map_node { |
| struct list_head node; |
| struct xsk_map *map; |
| struct xdp_sock __rcu **map_entry; |
| }; |
| |
| static inline struct xdp_sock *xdp_sk(struct sock *sk) |
| { |
| return (struct xdp_sock *)sk; |
| } |
| |
| void xsk_map_try_sock_delete(struct xsk_map *map, struct xdp_sock *xs, |
| struct xdp_sock __rcu **map_entry); |
| void xsk_clear_pool_at_qid(struct net_device *dev, u16 queue_id); |
| int xsk_reg_pool_at_qid(struct net_device *dev, struct xsk_buff_pool *pool, |
| u16 queue_id); |
| |
| #endif /* XSK_H_ */ |