brintos

brintos / linux-shallow public Read only

0
0
Text · 3.1 KiB · b6680fd Raw
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