123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /* 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
|