root/include/xen/interface/io/pvcalls.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 #ifndef __XEN_PUBLIC_IO_XEN_PVCALLS_H__
   2 #define __XEN_PUBLIC_IO_XEN_PVCALLS_H__
   3 
   4 #include <linux/net.h>
   5 #include <xen/interface/io/ring.h>
   6 #include <xen/interface/grant_table.h>
   7 
   8 /* "1" means socket, connect, release, bind, listen, accept and poll */
   9 #define XENBUS_FUNCTIONS_CALLS "1"
  10 
  11 /*
  12  * See docs/misc/pvcalls.markdown in xen.git for the full specification:
  13  * https://xenbits.xen.org/docs/unstable/misc/pvcalls.html
  14  */
  15 struct pvcalls_data_intf {
  16     RING_IDX in_cons, in_prod, in_error;
  17 
  18     uint8_t pad1[52];
  19 
  20     RING_IDX out_cons, out_prod, out_error;
  21 
  22     uint8_t pad2[52];
  23 
  24     RING_IDX ring_order;
  25     grant_ref_t ref[];
  26 };
  27 DEFINE_XEN_FLEX_RING(pvcalls);
  28 
  29 #define PVCALLS_SOCKET         0
  30 #define PVCALLS_CONNECT        1
  31 #define PVCALLS_RELEASE        2
  32 #define PVCALLS_BIND           3
  33 #define PVCALLS_LISTEN         4
  34 #define PVCALLS_ACCEPT         5
  35 #define PVCALLS_POLL           6
  36 
  37 struct xen_pvcalls_request {
  38     uint32_t req_id; /* private to guest, echoed in response */
  39     uint32_t cmd;    /* command to execute */
  40     union {
  41         struct xen_pvcalls_socket {
  42             uint64_t id;
  43             uint32_t domain;
  44             uint32_t type;
  45             uint32_t protocol;
  46         } socket;
  47         struct xen_pvcalls_connect {
  48             uint64_t id;
  49             uint8_t addr[28];
  50             uint32_t len;
  51             uint32_t flags;
  52             grant_ref_t ref;
  53             uint32_t evtchn;
  54         } connect;
  55         struct xen_pvcalls_release {
  56             uint64_t id;
  57             uint8_t reuse;
  58         } release;
  59         struct xen_pvcalls_bind {
  60             uint64_t id;
  61             uint8_t addr[28];
  62             uint32_t len;
  63         } bind;
  64         struct xen_pvcalls_listen {
  65             uint64_t id;
  66             uint32_t backlog;
  67         } listen;
  68         struct xen_pvcalls_accept {
  69             uint64_t id;
  70             uint64_t id_new;
  71             grant_ref_t ref;
  72             uint32_t evtchn;
  73         } accept;
  74         struct xen_pvcalls_poll {
  75             uint64_t id;
  76         } poll;
  77         /* dummy member to force sizeof(struct xen_pvcalls_request)
  78          * to match across archs */
  79         struct xen_pvcalls_dummy {
  80             uint8_t dummy[56];
  81         } dummy;
  82     } u;
  83 };
  84 
  85 struct xen_pvcalls_response {
  86     uint32_t req_id;
  87     uint32_t cmd;
  88     int32_t ret;
  89     uint32_t pad;
  90     union {
  91         struct _xen_pvcalls_socket {
  92             uint64_t id;
  93         } socket;
  94         struct _xen_pvcalls_connect {
  95             uint64_t id;
  96         } connect;
  97         struct _xen_pvcalls_release {
  98             uint64_t id;
  99         } release;
 100         struct _xen_pvcalls_bind {
 101             uint64_t id;
 102         } bind;
 103         struct _xen_pvcalls_listen {
 104             uint64_t id;
 105         } listen;
 106         struct _xen_pvcalls_accept {
 107             uint64_t id;
 108         } accept;
 109         struct _xen_pvcalls_poll {
 110             uint64_t id;
 111         } poll;
 112         struct _xen_pvcalls_dummy {
 113             uint8_t dummy[8];
 114         } dummy;
 115     } u;
 116 };
 117 
 118 DEFINE_RING_TYPES(xen_pvcalls, struct xen_pvcalls_request,
 119                   struct xen_pvcalls_response);
 120 
 121 #endif

/* [<][>][^][v][top][bottom][index][help] */