]> asedeno.scripts.mit.edu Git - linux.git/blob - net/xdp/xdp_umem.h
b13133e9c5011835bd88284253275918d121fb83
[linux.git] / net / xdp / xdp_umem.h
1 /* SPDX-License-Identifier: GPL-2.0
2  * XDP user-space packet buffer
3  * Copyright(c) 2018 Intel Corporation.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms and conditions of the GNU General Public License,
7  * version 2, as published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12  * more details.
13  */
14
15 #ifndef XDP_UMEM_H_
16 #define XDP_UMEM_H_
17
18 #include <linux/mm.h>
19 #include <linux/if_xdp.h>
20 #include <linux/workqueue.h>
21
22 #include "xsk_queue.h"
23 #include "xdp_umem_props.h"
24
25 struct xdp_umem {
26         struct xsk_queue *fq;
27         struct page **pgs;
28         struct xdp_umem_props props;
29         u32 npgs;
30         u32 frame_headroom;
31         u32 nfpp_mask;
32         u32 nfpplog2;
33         u32 frame_size_log2;
34         struct user_struct *user;
35         struct pid *pid;
36         unsigned long address;
37         size_t size;
38         atomic_t users;
39         struct work_struct work;
40 };
41
42 bool xdp_umem_validate_queues(struct xdp_umem *umem);
43 int xdp_umem_reg(struct xdp_umem *umem, struct xdp_umem_reg *mr);
44 void xdp_get_umem(struct xdp_umem *umem);
45 void xdp_put_umem(struct xdp_umem *umem);
46 int xdp_umem_create(struct xdp_umem **umem);
47
48 #endif /* XDP_UMEM_H_ */