Introduce the C header file which defines the PV Calls interface. It is imported from xen/include/public/io/pvcalls.h. Signed-off-by: Stefano Stabellini <stefano@aporeto.com> Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> Reviewed-by: Juergen Gross <jgross@suse.com> CC: konrad.wilk@oracle.com CC: boris.ostrovsky@oracle.com CC: jgross@suse.com Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
		
			
				
	
	
		
			122 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #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
 |