|  | 
| #define | _IO(g,  n)   _IOC(IOC_VOID,  (g), (n), 0) | 
|  | 
| #define | _IOC(inout,  group,  num,  len) | 
|  | 
| #define | _IOR(g,  n,  t)   _IOC(IOC_OUT,   (g), (n), sizeof(t)) | 
|  | 
| #define | _IOW(g,  n,  t)   _IOC(IOC_IN,    (g), (n), sizeof(t)) | 
|  | 
| #define | _IOWINT(g,  n)   _IOC(IOC_VOID,  (g), (n), sizeof(int)) | 
|  | 
| #define | _IOWR(g,  n,  t)   _IOC(IOC_INOUT, (g), (n), sizeof(t)) | 
|  | 
| #define | IOC_DIRMASK   (IOC_VOID|IOC_OUT|IOC_IN) | 
|  | 
| #define | IOC_IN   0x80000000      /* copy in parameters */ | 
|  | 
| #define | IOC_INOUT   (IOC_IN|IOC_OUT) | 
|  | 
| #define | IOC_OUT   0x40000000      /* copy out parameters */ | 
|  | 
| #define | IOC_VOID   0x20000000      /* no parameters */ | 
|  | 
| #define | IOCBASECMD(x)   ((x) & ~(IOCPARM_MASK << 16)) | 
|  | 
| #define | IOCGROUP(x)   (((x) >> 8) & 0xff) | 
|  | 
| #define | IOCPARM_IVAL(x)   ((int)(intptr_t)(void *)*(caddr_t *)(void *)(x)) | 
|  | 
| #define | IOCPARM_LEN(x)   (((x) >> 16) & IOCPARM_MASK) | 
|  | 
| #define | IOCPARM_MASK   ((1 << IOCPARM_SHIFT) - 1) /* parameter length mask */ | 
|  | 
| #define | IOCPARM_MAX   (1 << IOCPARM_SHIFT) /* max size of ioctl */ | 
|  | 
| #define | IOCPARM_SHIFT   13              /* number of bits for ioctl size */ | 
|  | 
| #define | NCCS   20 | 
|  | 
| #define | TIOCGETA   _IOR('t', 19, struct termios) /* get termios struct */ | 
|  | 
| #define | TIOCGWINSZ   _IOR('t', 104, struct winsize)  /* get window size */ | 
|  |