1const _IOC_NRBITS: u8 = 8;
20const _IOC_TYPEBITS: u8 = 8;
21
22
23const _IOC_SIZEBITS: u8 = 14;
24
25
26pub const _IOC_NRSHIFT: u64 = 0;
27pub const _IOC_TYPESHIFT: u64 = _IOC_NRSHIFT + _IOC_NRBITS as u64;
28pub const _IOC_SIZESHIFT: u64 = _IOC_TYPESHIFT + _IOC_TYPEBITS as u64;
29pub const _IOC_DIRSHIFT: u64 = _IOC_SIZESHIFT + _IOC_SIZEBITS as u64;
30
31
32pub const _IOC_NONE: u8 = 0;
33pub const _IOC_WRITE: u8 = 1;
34pub const _IOC_READ: u8 = 2;
35
36
37
38#[doc(hidden)]
39#[macro_export]
40macro_rules! _IOC {
41 ($dir: expr, $type: expr, $nr: expr, $size: expr) => {
42 (($dir as u64) << $crate::ioctl::_IOC_DIRSHIFT) |
43 (($type as u64) << $crate::ioctl::_IOC_TYPESHIFT) |
44 (($nr) << $crate::ioctl::_IOC_NRSHIFT) |
45 (($size as u64) << $crate::ioctl::_IOC_SIZESHIFT)
46 };
47}
48
49#[doc(hidden)]
50#[macro_export]
51macro_rules! _IOC_TYPECHECK {
52 ($t: ty) => {
53 std::mem::size_of::<$t>()
54 };
55}
56
57
58
59
60
61#[doc(hidden)]
68#[macro_export(local_inner_macros)]
69macro_rules! _IO {
70 ($type: expr, $nr: expr) => {
71 _IOC!($crate::ioctl::_IOC_NONE, $type, $nr, 0)
72 };
73}
74
75#[doc(hidden)]
76#[macro_export(local_inner_macros)]
77macro_rules! _IOR {
78 ($type: expr, $nr: expr, $size: ty) => {
79 _IOC!($crate::ioctl::_IOC_READ, $type, $nr, _IOC_TYPECHECK!($size))
80 };
81}
82
83#[doc(hidden)]
84#[macro_export(local_inner_macros)]
85macro_rules! _IOW {
86 ($type: expr, $nr: expr, $size: ty) => {
87 _IOC!($crate::ioctl::_IOC_WRITE, $type, $nr, _IOC_TYPECHECK!($size))
88 };
89}
90
91#[doc(hidden)]
92#[macro_export(local_inner_macros)]
93macro_rules! _IOWR {
94 ($type: expr, $nr: expr, $size: ty) => {
95 _IOC!($crate::ioctl::_IOC_READ | $crate::ioctl::_IOC_WRITE, $type, $nr, _IOC_TYPECHECK!($size))
96 };
97}