Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/xen/xen-front-pgdir-shbuf.h
26278 views
1
/* SPDX-License-Identifier: GPL-2.0 OR MIT */
2
3
/*
4
* Xen frontend/backend page directory based shared buffer
5
* helper module.
6
*
7
* Copyright (C) 2018 EPAM Systems Inc.
8
*
9
* Author: Oleksandr Andrushchenko <[email protected]>
10
*/
11
12
#ifndef __XEN_FRONT_PGDIR_SHBUF_H_
13
#define __XEN_FRONT_PGDIR_SHBUF_H_
14
15
#include <linux/kernel.h>
16
17
#include <xen/grant_table.h>
18
19
struct xen_front_pgdir_shbuf_ops;
20
21
struct xen_front_pgdir_shbuf {
22
/*
23
* Number of references granted for the backend use:
24
*
25
* - for frontend allocated/imported buffers this holds the number
26
* of grant references for the page directory and the pages
27
* of the buffer
28
*
29
* - for the buffer provided by the backend this only holds the number
30
* of grant references for the page directory itself as grant
31
* references for the buffer will be provided by the backend.
32
*/
33
int num_grefs;
34
grant_ref_t *grefs;
35
/* Page directory backing storage. */
36
u8 *directory;
37
38
/*
39
* Number of pages for the shared buffer itself (excluding the page
40
* directory).
41
*/
42
int num_pages;
43
/*
44
* Backing storage of the shared buffer: these are the pages being
45
* shared.
46
*/
47
struct page **pages;
48
49
struct xenbus_device *xb_dev;
50
51
/* These are the ops used internally depending on be_alloc mode. */
52
const struct xen_front_pgdir_shbuf_ops *ops;
53
54
/* Xen map handles for the buffer allocated by the backend. */
55
grant_handle_t *backend_map_handles;
56
};
57
58
struct xen_front_pgdir_shbuf_cfg {
59
struct xenbus_device *xb_dev;
60
61
/* Number of pages of the buffer backing storage. */
62
int num_pages;
63
/* Pages of the buffer to be shared. */
64
struct page **pages;
65
66
/*
67
* This is allocated outside because there are use-cases when
68
* the buffer structure is allocated as a part of a bigger one.
69
*/
70
struct xen_front_pgdir_shbuf *pgdir;
71
/*
72
* Mode of grant reference sharing: if set then backend will share
73
* grant references to the buffer with the frontend.
74
*/
75
int be_alloc;
76
};
77
78
int xen_front_pgdir_shbuf_alloc(struct xen_front_pgdir_shbuf_cfg *cfg);
79
80
grant_ref_t
81
xen_front_pgdir_shbuf_get_dir_start(struct xen_front_pgdir_shbuf *buf);
82
83
int xen_front_pgdir_shbuf_map(struct xen_front_pgdir_shbuf *buf);
84
85
int xen_front_pgdir_shbuf_unmap(struct xen_front_pgdir_shbuf *buf);
86
87
void xen_front_pgdir_shbuf_free(struct xen_front_pgdir_shbuf *buf);
88
89
#endif /* __XEN_FRONT_PGDIR_SHBUF_H_ */
90
91