blob: b13133e9c5011835bd88284253275918d121fb83 [file] [log] [blame]
Björn Töpelc0c77d82018-05-02 13:01:23 +02001/* 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
Magnus Karlsson423f3832018-05-02 13:01:24 +020022#include "xsk_queue.h"
Björn Töpelc0c77d82018-05-02 13:01:23 +020023#include "xdp_umem_props.h"
24
25struct xdp_umem {
Magnus Karlsson423f3832018-05-02 13:01:24 +020026 struct xsk_queue *fq;
Björn Töpelc0c77d82018-05-02 13:01:23 +020027 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
Magnus Karlsson965a9902018-05-02 13:01:26 +020042bool xdp_umem_validate_queues(struct xdp_umem *umem);
Björn Töpelc0c77d82018-05-02 13:01:23 +020043int xdp_umem_reg(struct xdp_umem *umem, struct xdp_umem_reg *mr);
44void xdp_get_umem(struct xdp_umem *umem);
45void xdp_put_umem(struct xdp_umem *umem);
46int xdp_umem_create(struct xdp_umem **umem);
47
48#endif /* XDP_UMEM_H_ */