0001
0002
0003 #ifndef __XEN_PUBLIC_IO_XEN_PVCALLS_H__
0004 #define __XEN_PUBLIC_IO_XEN_PVCALLS_H__
0005
0006 #include <linux/net.h>
0007 #include <xen/interface/io/ring.h>
0008 #include <xen/interface/grant_table.h>
0009
0010
0011 #define XENBUS_FUNCTIONS_CALLS "1"
0012
0013
0014
0015
0016
0017 struct pvcalls_data_intf {
0018 RING_IDX in_cons, in_prod, in_error;
0019
0020 uint8_t pad1[52];
0021
0022 RING_IDX out_cons, out_prod, out_error;
0023
0024 uint8_t pad2[52];
0025
0026 RING_IDX ring_order;
0027 grant_ref_t ref[];
0028 };
0029 DEFINE_XEN_FLEX_RING(pvcalls);
0030
0031 #define PVCALLS_SOCKET 0
0032 #define PVCALLS_CONNECT 1
0033 #define PVCALLS_RELEASE 2
0034 #define PVCALLS_BIND 3
0035 #define PVCALLS_LISTEN 4
0036 #define PVCALLS_ACCEPT 5
0037 #define PVCALLS_POLL 6
0038
0039 struct xen_pvcalls_request {
0040 uint32_t req_id;
0041 uint32_t cmd;
0042 union {
0043 struct xen_pvcalls_socket {
0044 uint64_t id;
0045 uint32_t domain;
0046 uint32_t type;
0047 uint32_t protocol;
0048 } socket;
0049 struct xen_pvcalls_connect {
0050 uint64_t id;
0051 uint8_t addr[28];
0052 uint32_t len;
0053 uint32_t flags;
0054 grant_ref_t ref;
0055 uint32_t evtchn;
0056 } connect;
0057 struct xen_pvcalls_release {
0058 uint64_t id;
0059 uint8_t reuse;
0060 } release;
0061 struct xen_pvcalls_bind {
0062 uint64_t id;
0063 uint8_t addr[28];
0064 uint32_t len;
0065 } bind;
0066 struct xen_pvcalls_listen {
0067 uint64_t id;
0068 uint32_t backlog;
0069 } listen;
0070 struct xen_pvcalls_accept {
0071 uint64_t id;
0072 uint64_t id_new;
0073 grant_ref_t ref;
0074 uint32_t evtchn;
0075 } accept;
0076 struct xen_pvcalls_poll {
0077 uint64_t id;
0078 } poll;
0079
0080
0081 struct xen_pvcalls_dummy {
0082 uint8_t dummy[56];
0083 } dummy;
0084 } u;
0085 };
0086
0087 struct xen_pvcalls_response {
0088 uint32_t req_id;
0089 uint32_t cmd;
0090 int32_t ret;
0091 uint32_t pad;
0092 union {
0093 struct _xen_pvcalls_socket {
0094 uint64_t id;
0095 } socket;
0096 struct _xen_pvcalls_connect {
0097 uint64_t id;
0098 } connect;
0099 struct _xen_pvcalls_release {
0100 uint64_t id;
0101 } release;
0102 struct _xen_pvcalls_bind {
0103 uint64_t id;
0104 } bind;
0105 struct _xen_pvcalls_listen {
0106 uint64_t id;
0107 } listen;
0108 struct _xen_pvcalls_accept {
0109 uint64_t id;
0110 } accept;
0111 struct _xen_pvcalls_poll {
0112 uint64_t id;
0113 } poll;
0114 struct _xen_pvcalls_dummy {
0115 uint8_t dummy[8];
0116 } dummy;
0117 } u;
0118 };
0119
0120 DEFINE_RING_TYPES(xen_pvcalls, struct xen_pvcalls_request,
0121 struct xen_pvcalls_response);
0122
0123 #endif