xref: /netbsd-src/external/gpl3/gcc/dist/libphobos/libdruntime/core/sys/posix/sys/ioctl.d (revision 0a3071956a3a9fdebdbf7f338cf2d439b45fc728)
1 /**
2  * D header file for POSIX.
3  *
4  * Copyright: Copyright Alex Rønne Petersen 2011 - 2012.
5  * License:   $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6  * Authors:   Alex Rønne Petersen
7  * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
8  */
9 
10 /*          Copyright Alex Rønne Petersen 2011 - 2012.
11  * Distributed under the Boost Software License, Version 1.0.
12  *    (See accompanying file LICENSE or copy at
13  *          http://www.boost.org/LICENSE_1_0.txt)
14  */
15 module core.sys.posix.sys.ioctl;
16 
17 import core.stdc.config;
18 public import core.sys.posix.sys.ttycom;
19 
20 version (OSX)
21     version = Darwin;
22 else version (iOS)
23     version = Darwin;
24 else version (TVOS)
25     version = Darwin;
26 else version (WatchOS)
27     version = Darwin;
28 
version(Posix)29 version (Posix):
30 
31 extern (C) nothrow @nogc:
32 @system:
33 
34 version (linux)
35 {
36     import core.sys.posix.termios; // tcflag_t, speed_t, cc_t
37 
38     enum _IOC_NRBITS = 8;
39     enum _IOC_TYPEBITS = 8;
40     enum _IOC_SIZEBITS = 14;
41     enum _IOC_DIRBITS = 2;
42 
43     enum _IOC_NRMASK = (1 << _IOC_NRBITS) - 1;
44     enum _IOC_TYPEMASK = (1 << _IOC_TYPEBITS) - 1;
45     enum _IOC_SIZEMASK = (1 << _IOC_SIZEBITS) - 1;
46     enum _IOC_DIRMASK = (1 << _IOC_DIRBITS) - 1;
47 
48     enum _IOC_NRSHIFT = 0;
49     enum _IOC_TYPESHIFT = _IOC_NRSHIFT + _IOC_NRBITS;
50     enum _IOC_SIZESHIFT = _IOC_TYPESHIFT + _IOC_TYPEBITS;
51     enum _IOC_DIRSHIFT = _IOC_SIZESHIFT + _IOC_SIZEBITS;
52 
53     enum _IOC_NONE = 0;
54     enum _IOC_WRITE = 1;
55     enum _IOC_READ = 2;
56 
57     extern (D) int _IOC(T = typeof(null))(int dir, int type, int nr)
58     {
59         return (dir << _IOC_DIRSHIFT) |
60                (type << _IOC_TYPESHIFT) |
61                (nr << _IOC_NRSHIFT) |
62                (is(T == typeof(null)) ? 0 : T.sizeof << _IOC_SIZESHIFT);
63     }
64 
65     extern (D) int _IO(int type, int nr)
66     {
67         return _IOC(_IOC_NONE, type, nr);
68     }
69 
70     extern (D) int _IOR(T)(int type, int nr)
71     {
72         return _IOC!T(_IOC_READ, type, nr);
73     }
74 
75     extern (D) int _IOW(T)(int type, int nr)
76     {
77         return _IOC!T(_IOC_WRITE, type, nr);
78     }
79 
80     extern (D) int _IOWR(T)(int type, int nr)
81     {
82         return _IOC!T(_IOC_READ | _IOC_WRITE, type, nr);
83     }
84 
85     extern (D) int _IOC_DIR(int nr)
86     {
87         return (nr >> _IOC_DIRSHIFT) & _IOC_DIRMASK;
88     }
89 
90     extern (D) int _IOC_TYPE(int nr)
91     {
92         return (nr >> _IOC_TYPESHIFT) & _IOC_TYPEMASK;
93     }
94 
95     extern (D) int _IOC_NR(int nr)
96     {
97         return (nr >> _IOC_NRSHIFT) & _IOC_NRMASK;
98     }
99 
100     extern (D) int _IOC_SIZE(int nr)
101     {
102         return (nr >> _IOC_SIZESHIFT) & _IOC_SIZEMASK;
103     }
104 
105     enum IOC_IN = _IOC_WRITE << _IOC_DIRSHIFT;
106     enum IOC_OUT = _IOC_READ << _IOC_DIRSHIFT;
107     enum IOC_INOUT = (_IOC_READ | _IOC_WRITE) << _IOC_DIRSHIFT;
108     enum IOCSIZE_MASK = _IOC_SIZEMASK << _IOC_DIRSHIFT;
109     enum IOCSIZE_SHIFT = _IOC_SIZESHIFT;
110 
111     enum NCCS = 19;
112 
113     struct termios2
114     {
115         tcflag_t c_iflag;
116         tcflag_t c_oflag;
117         tcflag_t c_cflag;
118         tcflag_t c_lflag;
119         cc_t c_line;
120         cc_t[NCCS] c_cc;
121         speed_t c_ispeed;
122         speed_t c_ospeed;
123     }
124 
125     struct winsize
126     {
127         ushort ws_row;
128         ushort ws_col;
129         ushort ws_xpixel;
130         ushort ws_ypixel;
131     }
132 
133     enum NCC = 8;
134 
135     struct termio
136     {
137         ushort c_iflag;
138         ushort c_oflag;
139         ushort c_cflag;
140         ushort c_lflag;
141         ubyte c_line;
142         ubyte[NCC] c_cc;
143     }
144 
145     enum TIOCM_LE = 0x001;
146     enum TIOCM_DTR = 0x002;
147     enum TIOCM_RTS = 0x004;
148     enum TIOCM_ST = 0x008;
149     enum TIOCM_SR = 0x010;
150     enum TIOCM_CTS = 0x020;
151     enum TIOCM_CAR = 0x040;
152     enum TIOCM_RNG = 0x080;
153     enum TIOCM_DSR = 0x100;
154     enum TIOCM_CD = TIOCM_CAR;
155     enum TIOCM_RI = TIOCM_RNG;
156 
157     enum N_TTY = 0;
158     enum N_SLIP = 1;
159     enum N_MOUSE = 2;
160     enum N_PPP = 3;
161     enum N_STRIP = 4;
162     enum N_AX25 = 5;
163     enum N_X25 = 6;
164     enum N_6PACK = 7;
165     enum N_MASC = 8;
166     enum N_R3964 = 9;
167     enum N_PROFIBUS_FDL = 10;
168     enum N_IRDA = 11;
169     enum N_SMSBLOCK = 12;
170     enum N_HDLC = 13;
171     enum N_SYNC_PPP = 14;
172     enum N_HCI = 15;
173 
174     enum TCGETS = 0x5401;
175     enum TCSETS = 0x5402;
176     enum TCSETSW = 0x5403;
177     enum TCSETSF = 0x5404;
178     enum TCGETA = 0x5405;
179     enum TCSETA = 0x5406;
180     enum TCSETAW = 0x5407;
181     enum TCSETAF = 0x5408;
182     enum TCSBRK = 0x5409;
183     enum TCXONC = 0x540A;
184     enum TCFLSH = 0x540B;
185     enum TIOCEXCL = 0x540C;
186     enum TIOCNXCL = 0x540D;
187     enum TIOCSCTTY = 0x540E;
188     enum TIOCGPGRP = 0x540F;
189     enum TIOCSPGRP = 0x5410;
190     enum TIOCOUTQ = 0x5411;
191     enum TIOCSTI = 0x5412;
192     enum TIOCGWINSZ = 0x5413;
193     enum TIOCSWINSZ = 0x5414;
194     enum TIOCMGET = 0x5415;
195     enum TIOCMBIS = 0x5416;
196     enum TIOCMBIC = 0x5417;
197     enum TIOCMSET = 0x5418;
198     enum TIOCGSOFTCAR = 0x5419;
199     enum TIOCSSOFTCAR = 0x541A;
200     enum FIONREAD = 0x541B;
201     enum TIOCINQ = FIONREAD;
202     enum TIOCLINUX = 0x541C;
203     enum TIOCCONS = 0x541D;
204     enum TIOCGSERIAL = 0x541E;
205     enum TIOCSSERIAL = 0x541F;
206     enum TIOCPKT = 0x5420;
207     enum FIONBIO = 0x5421;
208     enum TIOCNOTTY = 0x5422;
209     enum TIOCSETD = 0x5423;
210     enum TIOCGETD = 0x5424;
211     enum TCSBRKP = 0x5425;
212     enum TIOCSBRK = 0x5427;
213     enum TIOCCBRK = 0x5428;
214     enum TIOCGSID = 0x5429;
215 
216     enum TCGETS2 = _IOR!termios2('T', 0x2A);
217     enum TCSETS2 = _IOW!termios2('T', 0x2B);
218     enum TCSETSW2 = _IOW!termios2('T', 0x2C);
219     enum TCSETSF2 = _IOW!termios2('T', 0x2D);
220 
221     enum TIOCGRS485 = 0x542E;
222     enum TIOCSRS485 = 0x542F;
223 
224     enum TIOCGPTN   = _IOR!uint('T', 0x30);
225     enum TIOCSPTLCK = _IOW!int('T', 0x31);
226     enum TIOCGDEV   = _IOR!uint('T', 0x32);
227 
228     enum TCGETX = 0x5432;
229     enum TCSETX = 0x5433;
230     enum TCSETXF = 0x5434;
231     enum TCSETXW = 0x5435;
232 
233     enum TIOCSIG = _IOW!int('T', 0x36);
234 
235     enum TIOCVHANGUP = 0x5437;
236 
237     enum FIONCLEX = 0x5450;
238     enum FIOCLEX = 0x5451;
239     enum FIOASYNC = 0x5452;
240     enum TIOCSERCONFIG = 0x5453;
241     enum TIOCSERGWILD = 0x5454;
242     enum TIOCSERSWILD = 0x5455;
243     enum TIOCGLCKTRMIOS = 0x5456;
244     enum TIOCSLCKTRMIOS = 0x5457;
245     enum TIOCSERGSTRUCT = 0x5458;
246     enum TIOCSERGETLSR = 0x5459;
247     enum TIOCSERGETMULTI = 0x545A;
248     enum TIOCSERSETMULTI = 0x545B;
249 
250     enum TIOCMIWAIT = 0x545C;
251     enum TIOCGICOUNT = 0x545D;
252 
253     enum FIOQSIZE = 0x5460;
254 
255     enum TIOCPKT_DATA = 0;
256     enum TIOCPKT_FLUSHREAD = 1;
257     enum TIOCPKT_FLUSHWRITE = 2;
258     enum TIOCPKT_STOP = 4;
259     enum TIOCPKT_START = 8;
260     enum TIOCPKT_NOSTOP = 16;
261     enum TIOCPKT_DOSTOP = 32;
262     enum TIOCPKT_IOCTL = 64;
263 
264     enum TIOCSER_TEMT = 0x01;
265 
266     enum SIOCADDRT = 0x890B;
267     enum SIOCDELRT = 0x890C;
268     enum SIOCRTMSG = 0x890D;
269 
270     enum SIOCGIFNAME = 0x8910;
271     enum SIOCSIFLINK = 0x8911;
272     enum SIOCGIFCONF = 0x8912;
273     enum SIOCGIFFLAGS = 0x8913;
274     enum SIOCSIFFLAGS = 0x8914;
275     enum SIOCGIFADDR = 0x8915;
276     enum SIOCSIFADDR = 0x8916;
277     enum SIOCGIFDSTADDR = 0x8917;
278     enum SIOCSIFDSTADDR = 0x8918;
279     enum SIOCGIFBRDADDR = 0x8919;
280     enum SIOCSIFBRDADDR = 0x891a;
281     enum SIOCGIFNETMASK = 0x891b;
282     enum SIOCSIFNETMASK = 0x891c;
283     enum SIOCGIFMETRIC = 0x891d;
284     enum SIOCSIFMETRIC = 0x891e;
285     enum SIOCGIFMEM = 0x891f;
286     enum SIOCSIFMEM = 0x8920;
287     enum SIOCGIFMTU = 0x8921;
288     enum SIOCSIFMTU = 0x8922;
289     enum SIOCSIFNAME = 0x8923;
290     enum SIOCSIFHWADDR = 0x8924;
291     enum SIOCGIFENCAP = 0x8925;
292     enum SIOCSIFENCAP = 0x8926;
293     enum SIOCGIFHWADDR = 0x8927;
294     enum SIOCGIFSLAVE = 0x8929;
295     enum SIOCSIFSLAVE = 0x8930;
296     enum SIOCADDMULTI = 0x8931;
297     enum SIOCDELMULTI = 0x8932;
298     enum SIOCGIFINDEX = 0x8933;
299     enum SIOGIFINDEX = SIOCGIFINDEX;
300     enum SIOCSIFPFLAGS = 0x8934;
301     enum SIOCGIFPFLAGS = 0x8935;
302     enum SIOCDIFADDR = 0x8936;
303     enum SIOCSIFHWBROADCAST = 0x8937;
304     enum SIOCGIFCOUNT = 0x8938;
305 
306     enum SIOCGIFBR = 0x8940;
307     enum SIOCSIFBR = 0x8941;
308 
309     enum SIOCGIFTXQLEN = 0x8942;
310     enum SIOCSIFTXQLEN = 0x8943;
311 
312     enum SIOCDARP = 0x8953;
313     enum SIOCGARP = 0x8954;
314     enum SIOCSARP = 0x8955;
315 
316     enum SIOCDRARP = 0x8960;
317     enum SIOCGRARP = 0x8961;
318     enum SIOCSRARP = 0x8962;
319 
320     enum SIOCGIFMAP = 0x8970;
321     enum SIOCSIFMAP = 0x8971;
322 
323     enum SIOCADDDLCI = 0x8980;
324     enum SIOCDELDLCI = 0x8981;
325 
326     enum SIOCDEVPRIVATE = 0x89F0;
327 
328     enum SIOCPROTOPRIVATE = 0x89E0;
329 }
version(Darwin)330 else version (Darwin)
331 {
332     import core.sys.posix.termios; // termios
333     import core.sys.posix.sys.time; // timeval
334 
335     public import core.sys.posix.sys.ttycom; // Terminal related ioctls
336 
337     struct ttysize
338     {
339         ushort ts_lines;
340         ushort ts_cols;
341         ushort ts_xxx;
342         ushort ts_yyy;
343     }
344 
345     enum uint TIOCGSIZE = TIOCGWINSZ;
346     enum uint TIOCSSIZE = TIOCSWINSZ;
347 
348     public import core.sys.posix.sys.filio; // File related ioctls
349 }
version(FreeBSD)350 else version (FreeBSD)
351 {
352     struct fiodgname_arg
353     {
354         int len;
355         void* buf;
356     }
357 }
358 else version (NetBSD)
359 {
360     struct winsize
361     {
362         ushort ws_row;
363         ushort ws_col;
364         ushort ws_xpixel;
365         ushort ws_ypixel;
366     }
367 }
368 else version (OpenBSD)
369 {
370     import core.sys.posix.termios; // termios
371     import core.sys.posix.sys.time; // timeval
372 
373     public import core.sys.posix.sys.ttycom; // Terminal related ioctls
374 
375     struct winsize
376     {
377         ushort ws_row;
378         ushort ws_col;
379         ushort ws_xpixel;
380         ushort ws_ypixel;
381     }
382 
383     public import core.sys.posix.sys.filio; // File related ioctls
384 }
385 else version (DragonFlyBSD)
386 {
387     struct fiodgname_arg
388     {
389         int len;
390         void* buf;
391     }
392 
393     struct winsize
394     {
395         ushort ws_row;
396         ushort ws_col;
397         ushort ws_xpixel;
398         ushort ws_ypixel;
399     }
400 }
401 else version (Solaris)
402 {
403 }
404 else
405 {
406     static assert(false, "Unsupported platform");
407 }
408 
409 ///
410 version (CRuntime_Glibc)
411 {
412     int ioctl(int __fd, c_ulong __request, ...);
413 }
414 else version (Darwin)
415 {
416     int ioctl(int fildes, c_ulong request, ...);
417 }
418 else version (FreeBSD)
419 {
420     int ioctl(int, c_ulong, ...);
421 }
422 else version (NetBSD)
423 {
424     int ioctl(int, c_ulong, ...);
425 }
426 else version (OpenBSD)
427 {
428     int ioctl(int, c_ulong, ...);
429 }
430 else version (DragonFlyBSD)
431 {
432     int ioctl(int, c_ulong, ...);
433 }
434 else version (Solaris)
435 {
436     int ioctl(int fildes, int request, ...);
437 }
438 else version (CRuntime_Bionic)
439 {
440     int ioctl(int, int, ...);
441 }
442 else version (CRuntime_Musl)
443 {
444     int ioctl(int, int, ...);
445 }
446 else version (CRuntime_UClibc)
447 {
448     int ioctl(int __fd, c_ulong __request, ...);
449 }
450 else
451 {
452     static assert(false, "Unsupported platform");
453 }
454