124 lines · c
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.html16 */17struct 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};29DEFINE_XEN_FLEX_RING(pvcalls);30 31#define PVCALLS_SOCKET 032#define PVCALLS_CONNECT 133#define PVCALLS_RELEASE 234#define PVCALLS_BIND 335#define PVCALLS_LISTEN 436#define PVCALLS_ACCEPT 537#define PVCALLS_POLL 638 39struct 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 87struct 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 120DEFINE_RING_TYPES(xen_pvcalls, struct xen_pvcalls_request,121 struct xen_pvcalls_response);122 123#endif124