1 /* SPDX-License-Identifier: MIT */
3 #ifndef __XEN_PUBLIC_IO_XEN_PVCALLS_H__
4 #define __XEN_PUBLIC_IO_XEN_PVCALLS_H__
7 #include <xen/interface/io/ring.h>
8 #include <xen/interface/grant_table.h>
10 /* "1" means socket, connect, release, bind, listen, accept and poll */
11 #define XENBUS_FUNCTIONS_CALLS "1"
14 * See docs/misc/pvcalls.markdown in xen.git for the full specification:
15 * https://xenbits.xen.org/docs/unstable/misc/pvcalls.html
17 struct pvcalls_data_intf {
18 RING_IDX in_cons, in_prod, in_error;
22 RING_IDX out_cons, out_prod, out_error;
29 DEFINE_XEN_FLEX_RING(pvcalls);
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
39 struct xen_pvcalls_request {
40 uint32_t req_id; /* private to guest, echoed in response */
41 uint32_t cmd; /* command to execute */
43 struct xen_pvcalls_socket {
49 struct xen_pvcalls_connect {
57 struct xen_pvcalls_release {
61 struct xen_pvcalls_bind {
66 struct xen_pvcalls_listen {
70 struct xen_pvcalls_accept {
76 struct xen_pvcalls_poll {
79 /* dummy member to force sizeof(struct xen_pvcalls_request)
80 * to match across archs */
81 struct xen_pvcalls_dummy {
87 struct xen_pvcalls_response {
93 struct _xen_pvcalls_socket {
96 struct _xen_pvcalls_connect {
99 struct _xen_pvcalls_release {
102 struct _xen_pvcalls_bind {
105 struct _xen_pvcalls_listen {
108 struct _xen_pvcalls_accept {
111 struct _xen_pvcalls_poll {
114 struct _xen_pvcalls_dummy {
120 DEFINE_RING_TYPES(xen_pvcalls, struct xen_pvcalls_request,
121 struct xen_pvcalls_response);