xref: /OK3568_Linux_fs/kernel/include/xen/interface/io/xs_wire.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Details of the "wire" protocol between Xen Store Daemon and client
4*4882a593Smuzhiyun  * library or guest kernel.
5*4882a593Smuzhiyun  * Copyright (C) 2005 Rusty Russell IBM Corporation
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #ifndef _XS_WIRE_H
9*4882a593Smuzhiyun #define _XS_WIRE_H
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun enum xsd_sockmsg_type
12*4882a593Smuzhiyun {
13*4882a593Smuzhiyun     XS_DEBUG,
14*4882a593Smuzhiyun     XS_DIRECTORY,
15*4882a593Smuzhiyun     XS_READ,
16*4882a593Smuzhiyun     XS_GET_PERMS,
17*4882a593Smuzhiyun     XS_WATCH,
18*4882a593Smuzhiyun     XS_UNWATCH,
19*4882a593Smuzhiyun     XS_TRANSACTION_START,
20*4882a593Smuzhiyun     XS_TRANSACTION_END,
21*4882a593Smuzhiyun     XS_INTRODUCE,
22*4882a593Smuzhiyun     XS_RELEASE,
23*4882a593Smuzhiyun     XS_GET_DOMAIN_PATH,
24*4882a593Smuzhiyun     XS_WRITE,
25*4882a593Smuzhiyun     XS_MKDIR,
26*4882a593Smuzhiyun     XS_RM,
27*4882a593Smuzhiyun     XS_SET_PERMS,
28*4882a593Smuzhiyun     XS_WATCH_EVENT,
29*4882a593Smuzhiyun     XS_ERROR,
30*4882a593Smuzhiyun     XS_IS_DOMAIN_INTRODUCED,
31*4882a593Smuzhiyun     XS_RESUME,
32*4882a593Smuzhiyun     XS_SET_TARGET,
33*4882a593Smuzhiyun     XS_RESTRICT,
34*4882a593Smuzhiyun     XS_RESET_WATCHES,
35*4882a593Smuzhiyun };
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun #define XS_WRITE_NONE "NONE"
38*4882a593Smuzhiyun #define XS_WRITE_CREATE "CREATE"
39*4882a593Smuzhiyun #define XS_WRITE_CREATE_EXCL "CREATE|EXCL"
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun /* We hand errors as strings, for portability. */
42*4882a593Smuzhiyun struct xsd_errors
43*4882a593Smuzhiyun {
44*4882a593Smuzhiyun     int errnum;
45*4882a593Smuzhiyun     const char *errstring;
46*4882a593Smuzhiyun };
47*4882a593Smuzhiyun #define XSD_ERROR(x) { x, #x }
48*4882a593Smuzhiyun static struct xsd_errors xsd_errors[] __attribute__((unused)) = {
49*4882a593Smuzhiyun     XSD_ERROR(EINVAL),
50*4882a593Smuzhiyun     XSD_ERROR(EACCES),
51*4882a593Smuzhiyun     XSD_ERROR(EEXIST),
52*4882a593Smuzhiyun     XSD_ERROR(EISDIR),
53*4882a593Smuzhiyun     XSD_ERROR(ENOENT),
54*4882a593Smuzhiyun     XSD_ERROR(ENOMEM),
55*4882a593Smuzhiyun     XSD_ERROR(ENOSPC),
56*4882a593Smuzhiyun     XSD_ERROR(EIO),
57*4882a593Smuzhiyun     XSD_ERROR(ENOTEMPTY),
58*4882a593Smuzhiyun     XSD_ERROR(ENOSYS),
59*4882a593Smuzhiyun     XSD_ERROR(EROFS),
60*4882a593Smuzhiyun     XSD_ERROR(EBUSY),
61*4882a593Smuzhiyun     XSD_ERROR(EAGAIN),
62*4882a593Smuzhiyun     XSD_ERROR(EISCONN)
63*4882a593Smuzhiyun };
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun struct xsd_sockmsg
66*4882a593Smuzhiyun {
67*4882a593Smuzhiyun     uint32_t type;  /* XS_??? */
68*4882a593Smuzhiyun     uint32_t req_id;/* Request identifier, echoed in daemon's response.  */
69*4882a593Smuzhiyun     uint32_t tx_id; /* Transaction id (0 if not related to a transaction). */
70*4882a593Smuzhiyun     uint32_t len;   /* Length of data following this. */
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun     /* Generally followed by nul-terminated string(s). */
73*4882a593Smuzhiyun };
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun enum xs_watch_type
76*4882a593Smuzhiyun {
77*4882a593Smuzhiyun     XS_WATCH_PATH = 0,
78*4882a593Smuzhiyun     XS_WATCH_TOKEN
79*4882a593Smuzhiyun };
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun /* Inter-domain shared memory communications. */
82*4882a593Smuzhiyun #define XENSTORE_RING_SIZE 1024
83*4882a593Smuzhiyun typedef uint32_t XENSTORE_RING_IDX;
84*4882a593Smuzhiyun #define MASK_XENSTORE_IDX(idx) ((idx) & (XENSTORE_RING_SIZE-1))
85*4882a593Smuzhiyun struct xenstore_domain_interface {
86*4882a593Smuzhiyun     char req[XENSTORE_RING_SIZE]; /* Requests to xenstore daemon. */
87*4882a593Smuzhiyun     char rsp[XENSTORE_RING_SIZE]; /* Replies and async watch events. */
88*4882a593Smuzhiyun     XENSTORE_RING_IDX req_cons, req_prod;
89*4882a593Smuzhiyun     XENSTORE_RING_IDX rsp_cons, rsp_prod;
90*4882a593Smuzhiyun };
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun /* Violating this is very bad.  See docs/misc/xenstore.txt. */
93*4882a593Smuzhiyun #define XENSTORE_PAYLOAD_MAX 4096
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun #endif /* _XS_WIRE_H */
96