Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/xen/interface/io/pvcalls.h
26286 views
1
/* SPDX-License-Identifier: MIT */
2
3
#ifndef __XEN_PUBLIC_IO_XEN_PVCALLS_H__
4
#define __XEN_PUBLIC_IO_XEN_PVCALLS_H__
5
6
#include <linux/net.h>
7
#include <xen/interface/io/ring.h>
8
#include <xen/interface/grant_table.h>
9
10
/* "1" means socket, connect, release, bind, listen, accept and poll */
11
#define XENBUS_FUNCTIONS_CALLS "1"
12
13
/*
14
* See docs/misc/pvcalls.markdown in xen.git for the full specification:
15
* https://xenbits.xen.org/docs/unstable/misc/pvcalls.html
16
*/
17
struct pvcalls_data_intf {
18
RING_IDX in_cons, in_prod, in_error;
19
20
uint8_t pad1[52];
21
22
RING_IDX out_cons, out_prod, out_error;
23
24
uint8_t pad2[52];
25
26
RING_IDX ring_order;
27
grant_ref_t ref[];
28
};
29
DEFINE_XEN_FLEX_RING(pvcalls);
30
31
#define PVCALLS_SOCKET 0
32
#define PVCALLS_CONNECT 1
33
#define PVCALLS_RELEASE 2
34
#define PVCALLS_BIND 3
35
#define PVCALLS_LISTEN 4
36
#define PVCALLS_ACCEPT 5
37
#define PVCALLS_POLL 6
38
39
struct xen_pvcalls_request {
40
uint32_t req_id; /* private to guest, echoed in response */
41
uint32_t cmd; /* command to execute */
42
union {
43
struct xen_pvcalls_socket {
44
uint64_t id;
45
uint32_t domain;
46
uint32_t type;
47
uint32_t protocol;
48
} socket;
49
struct xen_pvcalls_connect {
50
uint64_t id;
51
uint8_t addr[28];
52
uint32_t len;
53
uint32_t flags;
54
grant_ref_t ref;
55
uint32_t evtchn;
56
} connect;
57
struct xen_pvcalls_release {
58
uint64_t id;
59
uint8_t reuse;
60
} release;
61
struct xen_pvcalls_bind {
62
uint64_t id;
63
uint8_t addr[28];
64
uint32_t len;
65
} bind;
66
struct xen_pvcalls_listen {
67
uint64_t id;
68
uint32_t backlog;
69
} listen;
70
struct xen_pvcalls_accept {
71
uint64_t id;
72
uint64_t id_new;
73
grant_ref_t ref;
74
uint32_t evtchn;
75
} accept;
76
struct xen_pvcalls_poll {
77
uint64_t id;
78
} poll;
79
/* dummy member to force sizeof(struct xen_pvcalls_request)
80
* to match across archs */
81
struct xen_pvcalls_dummy {
82
uint8_t dummy[56];
83
} dummy;
84
} u;
85
};
86
87
struct xen_pvcalls_response {
88
uint32_t req_id;
89
uint32_t cmd;
90
int32_t ret;
91
uint32_t pad;
92
union {
93
struct _xen_pvcalls_socket {
94
uint64_t id;
95
} socket;
96
struct _xen_pvcalls_connect {
97
uint64_t id;
98
} connect;
99
struct _xen_pvcalls_release {
100
uint64_t id;
101
} release;
102
struct _xen_pvcalls_bind {
103
uint64_t id;
104
} bind;
105
struct _xen_pvcalls_listen {
106
uint64_t id;
107
} listen;
108
struct _xen_pvcalls_accept {
109
uint64_t id;
110
} accept;
111
struct _xen_pvcalls_poll {
112
uint64_t id;
113
} poll;
114
struct _xen_pvcalls_dummy {
115
uint8_t dummy[8];
116
} dummy;
117
} u;
118
};
119
120
DEFINE_RING_TYPES(xen_pvcalls, struct xen_pvcalls_request,
121
struct xen_pvcalls_response);
122
123
#endif
124
125