1a36b38aaSBjörn Töpel /* SPDX-License-Identifier: GPL-2.0 */ 2a36b38aaSBjörn Töpel /* Copyright(c) 2019 Intel Corporation. */ 3a36b38aaSBjörn Töpel 4a36b38aaSBjörn Töpel #ifndef XSK_H_ 5a36b38aaSBjörn Töpel #define XSK_H_ 6a36b38aaSBjörn Töpel 789e4a376SBjörn Töpel /* Masks for xdp_umem_page flags. 889e4a376SBjörn Töpel * The low 12-bits of the addr will be 0 since this is the page address, so we 989e4a376SBjörn Töpel * can use them for flags. 1089e4a376SBjörn Töpel */ 1189e4a376SBjörn Töpel #define XSK_NEXT_PG_CONTIG_SHIFT 0 1289e4a376SBjörn Töpel #define XSK_NEXT_PG_CONTIG_MASK BIT_ULL(XSK_NEXT_PG_CONTIG_SHIFT) 1389e4a376SBjörn Töpel 1477cd0d7bSMagnus Karlsson struct xdp_ring_offset_v1 { 1577cd0d7bSMagnus Karlsson __u64 producer; 1677cd0d7bSMagnus Karlsson __u64 consumer; 1777cd0d7bSMagnus Karlsson __u64 desc; 1877cd0d7bSMagnus Karlsson }; 1977cd0d7bSMagnus Karlsson 2077cd0d7bSMagnus Karlsson struct xdp_mmap_offsets_v1 { 2177cd0d7bSMagnus Karlsson struct xdp_ring_offset_v1 rx; 2277cd0d7bSMagnus Karlsson struct xdp_ring_offset_v1 tx; 2377cd0d7bSMagnus Karlsson struct xdp_ring_offset_v1 fr; 2477cd0d7bSMagnus Karlsson struct xdp_ring_offset_v1 cr; 2577cd0d7bSMagnus Karlsson }; 2677cd0d7bSMagnus Karlsson 27d20a1676SBjörn Töpel /* Nodes are linked in the struct xdp_sock map_list field, and used to 28d20a1676SBjörn Töpel * track which maps a certain socket reside in. 29d20a1676SBjörn Töpel */ 30d20a1676SBjörn Töpel 31d20a1676SBjörn Töpel struct xsk_map_node { 32d20a1676SBjörn Töpel struct list_head node; 33d20a1676SBjörn Töpel struct xsk_map *map; 34*782347b6SToke Høiland-Jørgensen struct xdp_sock __rcu **map_entry; 35d20a1676SBjörn Töpel }; 36d20a1676SBjörn Töpel xdp_sk(struct sock * sk)37a36b38aaSBjörn Töpelstatic inline struct xdp_sock *xdp_sk(struct sock *sk) 38a36b38aaSBjörn Töpel { 39a36b38aaSBjörn Töpel return (struct xdp_sock *)sk; 40a36b38aaSBjörn Töpel } 41a36b38aaSBjörn Töpel 42d20a1676SBjörn Töpel void xsk_map_try_sock_delete(struct xsk_map *map, struct xdp_sock *xs, 43*782347b6SToke Høiland-Jørgensen struct xdp_sock __rcu **map_entry); 441c1efc2aSMagnus Karlsson void xsk_clear_pool_at_qid(struct net_device *dev, u16 queue_id); 451c1efc2aSMagnus Karlsson int xsk_reg_pool_at_qid(struct net_device *dev, struct xsk_buff_pool *pool, 461c1efc2aSMagnus Karlsson u16 queue_id); 47d20a1676SBjörn Töpel 48a36b38aaSBjörn Töpel #endif /* XSK_H_ */ 49