VSF Documented
ioctl.h
Go to the documentation of this file.
1#ifndef __VSF_LINUX_SYS_IOCTL_H__
2#define __VSF_LINUX_SYS_IOCTL_H__
3
5
6#if VSF_LINUX_CFG_RELATIVE_PATH == ENABLED
7# include "../sys/types.h"
8# include "../fcntl.h"
9#else
10# include <sys/types.h>
11# include <fcntl.h>
12#endif
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
18#define _IOC_NRSHIFT 0
19#define _IOC_NRBITS 8
20#define _IOC_NRMASK ((1 << _IOC_NRBITS) - 1)
21
22#define _IOC_TYPESHIFT (_IOC_NRSHIFT + _IOC_NRBITS)
23#define _IOC_TYPEBITS 8
24#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS) - 1)
25
26#define _IOC_SIZESHIFT (_IOC_TYPESHIFT + _IOC_TYPEBITS)
27#define _IOC_SIZEBITS 14
28#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS) - 1)
29
30#define _IOC_DIRSHIFT (_IOC_SIZESHIFT + _IOC_SIZEBITS)
31#define _IOC_DIRBITS 2
32#define _IOC_DIRMASK ((1 << _IOC_DIRBITS) - 1)
33
34#define _IOC_NONE 0
35#define _IOC_WRITE 1
36#define _IOC_READ 2
37
38#define _IOC(dir, type, nr, size) \
39 ( ((dir) << _IOC_DIRSHIFT) \
40 | ((type) << _IOC_TYPESHIFT) \
41 | ((nr) << _IOC_NRSHIFT) \
42 | ((size) << _IOC_SIZESHIFT) \
43 )
44#define _IO(type, nr) _IOC(_IOC_NONE, (type), (nr), 0)
45#define _IOR(type, nr, size) _IOC(_IOC_READ, (type), (nr), sizeof(size))
46#define _IOW(type, nr, size) _IOC(_IOC_WRITE, (type), (nr), sizeof(size))
47#define _IOWR(type, nr, size) _IOC(_IOC_READ | _IOC_WRITE, (type), (nr), sizeof(size))
48
49#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
50#define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
51#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
52#define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
53
54enum {
63};
64
65#if VSF_LINUX_APPLET_USE_SYS_IOCTL == ENABLED
68
71# ifndef __VSF_APPLET__
73# endif
74#endif
75
76#if defined(__VSF_APPLET__) && (defined(__VSF_APPLET_LIB__) || defined(__VSF_APPLET_LINUX_SYS_IOCTL_LIB__))\
77 && VSF_APPLET_CFG_ABI_PATCH != ENABLED && VSF_LINUX_APPLET_USE_SYS_IOCTL == ENABLED
78
79#ifndef VSF_LINUX_APPLET_SYS_IOCTL_VPLT
80# if VSF_LINUX_USE_APPLET == ENABLED
81# define VSF_LINUX_APPLET_SYS_IOCTL_VPLT \
82 ((vsf_linux_sys_ioctl_vplt_t *)(VSF_LINUX_APPLET_VPLT->sys_ioctl_vplt))
83# else
84# define VSF_LINUX_APPLET_SYS_IOCTL_VPLT \
85 ((vsf_linux_sys_ioctl_vplt_t *)vsf_vplt((void *)0))
86# endif
87#endif
88
89#define VSF_LINUX_APPLET_SYS_IOCTL_ENTRY(__NAME) \
90 VSF_APPLET_VPLT_ENTRY_FUNC_ENTRY(VSF_LINUX_APPLET_SYS_IOCTL_VPLT, __NAME)
91#define VSF_LINUX_APPLET_SYS_IOCTL_IMP(...) \
92 VSF_APPLET_VPLT_ENTRY_FUNC_IMP(VSF_LINUX_APPLET_SYS_IOCTL_VPLT, __VA_ARGS__)
93
94VSF_APPLET_VPLT_FUNC_DECORATOR(ioctl) int ioctl(int fd, unsigned long request, ...) {
95 int result;
96 va_list ap;
97 va_start(ap, request);
98 result = __fcntl_va(fd, request, ap);
99 va_end(ap);
100 return result;
101}
102
103#else // __VSF_APPLET__ && VSF_LINUX_APPLET_USE_SYS_SEM
104
105int ioctl(int fd, unsigned long request, ...);
106
107#endif
108
109#ifdef __cplusplus
110}
111#endif
112
113#include <asm/ioctls.h>
114
115#endif // __VSF_LINUX_IOCTL_H__
#define F_IO
Definition fcntl.h:86
int __fcntl_va(int fd, int cmd, va_list ap)
Definition vsf_linux_fs.c:1901
Definition ioctl.h:66
vsf_vplt_info_t info
Definition ioctl.h:67
int ioctl(int fd, unsigned long request,...)
Definition vsf_linux_fs.c:1964
@ TIOCSCTTY
Definition ioctl.h:58
@ TIOCGSERIAL
Definition ioctl.h:56
@ TIOCSSERIAL
Definition ioctl.h:57
@ FIONREAD
Definition ioctl.h:59
@ TIOCSWINSZ
Definition ioctl.h:61
@ TIOCGWINSZ
Definition ioctl.h:55
@ TIOCCONS
Definition ioctl.h:62
@ TIOCSERCONFIG
Definition ioctl.h:60
__VSF_VPLT_DECORATOR__ vsf_linux_sys_ioctl_vplt_t vsf_linux_sys_ioctl_vplt
Definition vsf_linux_fs.c:3682
Definition vsf_cfg.h:95
#define __VSF_VPLT_DECORATOR__
Definition vsf_cfg.h:93
#define VSF_APPLET_VPLT_FUNC_DECORATOR(__NAME)
Definition vsf_linux_applet_lib.c:1