Merge tag 'media/v4.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[cascardo/linux.git] / include / linux / auto_dev-ioctl.h
1 /*
2  * Copyright 2008 Red Hat, Inc. All rights reserved.
3  * Copyright 2008 Ian Kent <raven@themaw.net>
4  *
5  * This file is part of the Linux kernel and is made available under
6  * the terms of the GNU General Public License, version 2, or at your
7  * option, any later version, incorporated herein by reference.
8  */
9
10 #ifndef _LINUX_AUTO_DEV_IOCTL_H
11 #define _LINUX_AUTO_DEV_IOCTL_H
12
13 #include <linux/auto_fs.h>
14 #include <linux/string.h>
15
16 #define AUTOFS_DEVICE_NAME              "autofs"
17
18 #define AUTOFS_DEV_IOCTL_VERSION_MAJOR  1
19 #define AUTOFS_DEV_IOCTL_VERSION_MINOR  0
20
21 #define AUTOFS_DEVID_LEN                16
22
23 #define AUTOFS_DEV_IOCTL_SIZE           sizeof(struct autofs_dev_ioctl)
24
25 /*
26  * An ioctl interface for autofs mount point control.
27  */
28
29 struct args_protover {
30         __u32   version;
31 };
32
33 struct args_protosubver {
34         __u32   sub_version;
35 };
36
37 struct args_openmount {
38         __u32   devid;
39 };
40
41 struct args_ready {
42         __u32   token;
43 };
44
45 struct args_fail {
46         __u32   token;
47         __s32   status;
48 };
49
50 struct args_setpipefd {
51         __s32   pipefd;
52 };
53
54 struct args_timeout {
55         __u64   timeout;
56 };
57
58 struct args_requester {
59         __u32   uid;
60         __u32   gid;
61 };
62
63 struct args_expire {
64         __u32   how;
65 };
66
67 struct args_askumount {
68         __u32   may_umount;
69 };
70
71 struct args_ismountpoint {
72         union {
73                 struct args_in {
74                         __u32   type;
75                 } in;
76                 struct args_out {
77                         __u32   devid;
78                         __u32   magic;
79                 } out;
80         };
81 };
82
83 /*
84  * All the ioctls use this structure.
85  * When sending a path size must account for the total length
86  * of the chunk of memory otherwise is is the size of the
87  * structure.
88  */
89
90 struct autofs_dev_ioctl {
91         __u32 ver_major;
92         __u32 ver_minor;
93         __u32 size;             /* total size of data passed in
94                                  * including this struct */
95         __s32 ioctlfd;          /* automount command fd */
96
97         /* Command parameters */
98
99         union {
100                 struct args_protover            protover;
101                 struct args_protosubver         protosubver;
102                 struct args_openmount           openmount;
103                 struct args_ready               ready;
104                 struct args_fail                fail;
105                 struct args_setpipefd           setpipefd;
106                 struct args_timeout             timeout;
107                 struct args_requester           requester;
108                 struct args_expire              expire;
109                 struct args_askumount           askumount;
110                 struct args_ismountpoint        ismountpoint;
111         };
112
113         char path[0];
114 };
115
116 static inline void init_autofs_dev_ioctl(struct autofs_dev_ioctl *in)
117 {
118         memset(in, 0, sizeof(struct autofs_dev_ioctl));
119         in->ver_major = AUTOFS_DEV_IOCTL_VERSION_MAJOR;
120         in->ver_minor = AUTOFS_DEV_IOCTL_VERSION_MINOR;
121         in->size = sizeof(struct autofs_dev_ioctl);
122         in->ioctlfd = -1;
123 }
124
125 /*
126  * If you change this make sure you make the corresponding change
127  * to autofs-dev-ioctl.c:lookup_ioctl()
128  */
129 enum {
130         /* Get various version info */
131         AUTOFS_DEV_IOCTL_VERSION_CMD = 0x71,
132         AUTOFS_DEV_IOCTL_PROTOVER_CMD,
133         AUTOFS_DEV_IOCTL_PROTOSUBVER_CMD,
134
135         /* Open mount ioctl fd */
136         AUTOFS_DEV_IOCTL_OPENMOUNT_CMD,
137
138         /* Close mount ioctl fd */
139         AUTOFS_DEV_IOCTL_CLOSEMOUNT_CMD,
140
141         /* Mount/expire status returns */
142         AUTOFS_DEV_IOCTL_READY_CMD,
143         AUTOFS_DEV_IOCTL_FAIL_CMD,
144
145         /* Activate/deactivate autofs mount */
146         AUTOFS_DEV_IOCTL_SETPIPEFD_CMD,
147         AUTOFS_DEV_IOCTL_CATATONIC_CMD,
148
149         /* Expiry timeout */
150         AUTOFS_DEV_IOCTL_TIMEOUT_CMD,
151
152         /* Get mount last requesting uid and gid */
153         AUTOFS_DEV_IOCTL_REQUESTER_CMD,
154
155         /* Check for eligible expire candidates */
156         AUTOFS_DEV_IOCTL_EXPIRE_CMD,
157
158         /* Request busy status */
159         AUTOFS_DEV_IOCTL_ASKUMOUNT_CMD,
160
161         /* Check if path is a mountpoint */
162         AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD,
163 };
164
165 #define AUTOFS_IOCTL 0x93
166
167 #define AUTOFS_DEV_IOCTL_VERSION \
168         _IOWR(AUTOFS_IOCTL, \
169               AUTOFS_DEV_IOCTL_VERSION_CMD, struct autofs_dev_ioctl)
170
171 #define AUTOFS_DEV_IOCTL_PROTOVER \
172         _IOWR(AUTOFS_IOCTL, \
173               AUTOFS_DEV_IOCTL_PROTOVER_CMD, struct autofs_dev_ioctl)
174
175 #define AUTOFS_DEV_IOCTL_PROTOSUBVER \
176         _IOWR(AUTOFS_IOCTL, \
177               AUTOFS_DEV_IOCTL_PROTOSUBVER_CMD, struct autofs_dev_ioctl)
178
179 #define AUTOFS_DEV_IOCTL_OPENMOUNT \
180         _IOWR(AUTOFS_IOCTL, \
181               AUTOFS_DEV_IOCTL_OPENMOUNT_CMD, struct autofs_dev_ioctl)
182
183 #define AUTOFS_DEV_IOCTL_CLOSEMOUNT \
184         _IOWR(AUTOFS_IOCTL, \
185               AUTOFS_DEV_IOCTL_CLOSEMOUNT_CMD, struct autofs_dev_ioctl)
186
187 #define AUTOFS_DEV_IOCTL_READY \
188         _IOWR(AUTOFS_IOCTL, \
189               AUTOFS_DEV_IOCTL_READY_CMD, struct autofs_dev_ioctl)
190
191 #define AUTOFS_DEV_IOCTL_FAIL \
192         _IOWR(AUTOFS_IOCTL, \
193               AUTOFS_DEV_IOCTL_FAIL_CMD, struct autofs_dev_ioctl)
194
195 #define AUTOFS_DEV_IOCTL_SETPIPEFD \
196         _IOWR(AUTOFS_IOCTL, \
197               AUTOFS_DEV_IOCTL_SETPIPEFD_CMD, struct autofs_dev_ioctl)
198
199 #define AUTOFS_DEV_IOCTL_CATATONIC \
200         _IOWR(AUTOFS_IOCTL, \
201               AUTOFS_DEV_IOCTL_CATATONIC_CMD, struct autofs_dev_ioctl)
202
203 #define AUTOFS_DEV_IOCTL_TIMEOUT \
204         _IOWR(AUTOFS_IOCTL, \
205               AUTOFS_DEV_IOCTL_TIMEOUT_CMD, struct autofs_dev_ioctl)
206
207 #define AUTOFS_DEV_IOCTL_REQUESTER \
208         _IOWR(AUTOFS_IOCTL, \
209               AUTOFS_DEV_IOCTL_REQUESTER_CMD, struct autofs_dev_ioctl)
210
211 #define AUTOFS_DEV_IOCTL_EXPIRE \
212         _IOWR(AUTOFS_IOCTL, \
213               AUTOFS_DEV_IOCTL_EXPIRE_CMD, struct autofs_dev_ioctl)
214
215 #define AUTOFS_DEV_IOCTL_ASKUMOUNT \
216         _IOWR(AUTOFS_IOCTL, \
217               AUTOFS_DEV_IOCTL_ASKUMOUNT_CMD, struct autofs_dev_ioctl)
218
219 #define AUTOFS_DEV_IOCTL_ISMOUNTPOINT \
220         _IOWR(AUTOFS_IOCTL, \
221               AUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD, struct autofs_dev_ioctl)
222
223 #endif  /* _LINUX_AUTO_DEV_IOCTL_H */