mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
3.1 KiB
123 lines
3.1 KiB
/* SPDX-License-Identifier: MIT */ |
|
|
|
#ifndef __XEN_PUBLIC_IO_XEN_PVCALLS_H__ |
|
#define __XEN_PUBLIC_IO_XEN_PVCALLS_H__ |
|
|
|
#include <linux/net.h> |
|
#include <xen/interface/io/ring.h> |
|
#include <xen/interface/grant_table.h> |
|
|
|
/* "1" means socket, connect, release, bind, listen, accept and poll */ |
|
#define XENBUS_FUNCTIONS_CALLS "1" |
|
|
|
/* |
|
* See docs/misc/pvcalls.markdown in xen.git for the full specification: |
|
* https://xenbits.xen.org/docs/unstable/misc/pvcalls.html |
|
*/ |
|
struct pvcalls_data_intf { |
|
RING_IDX in_cons, in_prod, in_error; |
|
|
|
uint8_t pad1[52]; |
|
|
|
RING_IDX out_cons, out_prod, out_error; |
|
|
|
uint8_t pad2[52]; |
|
|
|
RING_IDX ring_order; |
|
grant_ref_t ref[]; |
|
}; |
|
DEFINE_XEN_FLEX_RING(pvcalls); |
|
|
|
#define PVCALLS_SOCKET 0 |
|
#define PVCALLS_CONNECT 1 |
|
#define PVCALLS_RELEASE 2 |
|
#define PVCALLS_BIND 3 |
|
#define PVCALLS_LISTEN 4 |
|
#define PVCALLS_ACCEPT 5 |
|
#define PVCALLS_POLL 6 |
|
|
|
struct xen_pvcalls_request { |
|
uint32_t req_id; /* private to guest, echoed in response */ |
|
uint32_t cmd; /* command to execute */ |
|
union { |
|
struct xen_pvcalls_socket { |
|
uint64_t id; |
|
uint32_t domain; |
|
uint32_t type; |
|
uint32_t protocol; |
|
} socket; |
|
struct xen_pvcalls_connect { |
|
uint64_t id; |
|
uint8_t addr[28]; |
|
uint32_t len; |
|
uint32_t flags; |
|
grant_ref_t ref; |
|
uint32_t evtchn; |
|
} connect; |
|
struct xen_pvcalls_release { |
|
uint64_t id; |
|
uint8_t reuse; |
|
} release; |
|
struct xen_pvcalls_bind { |
|
uint64_t id; |
|
uint8_t addr[28]; |
|
uint32_t len; |
|
} bind; |
|
struct xen_pvcalls_listen { |
|
uint64_t id; |
|
uint32_t backlog; |
|
} listen; |
|
struct xen_pvcalls_accept { |
|
uint64_t id; |
|
uint64_t id_new; |
|
grant_ref_t ref; |
|
uint32_t evtchn; |
|
} accept; |
|
struct xen_pvcalls_poll { |
|
uint64_t id; |
|
} poll; |
|
/* dummy member to force sizeof(struct xen_pvcalls_request) |
|
* to match across archs */ |
|
struct xen_pvcalls_dummy { |
|
uint8_t dummy[56]; |
|
} dummy; |
|
} u; |
|
}; |
|
|
|
struct xen_pvcalls_response { |
|
uint32_t req_id; |
|
uint32_t cmd; |
|
int32_t ret; |
|
uint32_t pad; |
|
union { |
|
struct _xen_pvcalls_socket { |
|
uint64_t id; |
|
} socket; |
|
struct _xen_pvcalls_connect { |
|
uint64_t id; |
|
} connect; |
|
struct _xen_pvcalls_release { |
|
uint64_t id; |
|
} release; |
|
struct _xen_pvcalls_bind { |
|
uint64_t id; |
|
} bind; |
|
struct _xen_pvcalls_listen { |
|
uint64_t id; |
|
} listen; |
|
struct _xen_pvcalls_accept { |
|
uint64_t id; |
|
} accept; |
|
struct _xen_pvcalls_poll { |
|
uint64_t id; |
|
} poll; |
|
struct _xen_pvcalls_dummy { |
|
uint8_t dummy[8]; |
|
} dummy; |
|
} u; |
|
}; |
|
|
|
DEFINE_RING_TYPES(xen_pvcalls, struct xen_pvcalls_request, |
|
struct xen_pvcalls_response); |
|
|
|
#endif
|
|
|