xref: /openbmc/linux/net/xdp/xsk.h (revision 762f99f4f3cb41a775b5157dd761217beba65873)
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öpel static 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