1#[cfg(any(target_os = "android", target_env = "musl"))]
3#[doc(hidden)]
4pub type ioctl_num_type = ::libc::c_int;
5#[cfg(not(any(target_os = "android", target_env = "musl")))]
6#[doc(hidden)]
7pub type ioctl_num_type = ::libc::c_ulong;
8#[doc(hidden)]
10pub type ioctl_param_type = ::libc::c_ulong;
11
12#[doc(hidden)]
13pub const NRBITS: ioctl_num_type = 8;
14#[doc(hidden)]
15pub const TYPEBITS: ioctl_num_type = 8;
16
17#[cfg(any(target_arch = "mips", target_arch = "mips64", target_arch = "powerpc", target_arch = "powerpc64", target_arch = "sparc64"))]
18mod consts {
19 #[doc(hidden)]
20 pub const NONE: u8 = 1;
21 #[doc(hidden)]
22 pub const READ: u8 = 2;
23 #[doc(hidden)]
24 pub const WRITE: u8 = 4;
25 #[doc(hidden)]
26 pub const SIZEBITS: u8 = 13;
27 #[doc(hidden)]
28 pub const DIRBITS: u8 = 3;
29}
30
31#[cfg(any(target_arch = "x86",
33 target_arch = "arm",
34 target_arch = "s390x",
35 target_arch = "x86_64",
36 target_arch = "aarch64",
37 target_arch = "riscv32",
38 target_arch = "riscv64"))]
39mod consts {
40 #[doc(hidden)]
41 pub const NONE: u8 = 0;
42 #[doc(hidden)]
43 pub const READ: u8 = 2;
44 #[doc(hidden)]
45 pub const WRITE: u8 = 1;
46 #[doc(hidden)]
47 pub const SIZEBITS: u8 = 14;
48 #[doc(hidden)]
49 pub const DIRBITS: u8 = 2;
50}
51
52pub use self::consts::*;
53
54#[doc(hidden)]
55pub const NRSHIFT: ioctl_num_type = 0;
56#[doc(hidden)]
57pub const TYPESHIFT: ioctl_num_type = NRSHIFT + NRBITS as ioctl_num_type;
58#[doc(hidden)]
59pub const SIZESHIFT: ioctl_num_type = TYPESHIFT + TYPEBITS as ioctl_num_type;
60#[doc(hidden)]
61pub const DIRSHIFT: ioctl_num_type = SIZESHIFT + SIZEBITS as ioctl_num_type;
62
63#[doc(hidden)]
64pub const NRMASK: ioctl_num_type = (1 << NRBITS) - 1;
65#[doc(hidden)]
66pub const TYPEMASK: ioctl_num_type = (1 << TYPEBITS) - 1;
67#[doc(hidden)]
68pub const SIZEMASK: ioctl_num_type = (1 << SIZEBITS) - 1;
69#[doc(hidden)]
70pub const DIRMASK: ioctl_num_type = (1 << DIRBITS) - 1;
71
72#[macro_export]
74#[doc(hidden)]
75macro_rules! ioc {
76 ($dir:expr, $ty:expr, $nr:expr, $sz:expr) => (
77 (($dir as $crate::sys::ioctl::ioctl_num_type & $crate::sys::ioctl::DIRMASK) << $crate::sys::ioctl::DIRSHIFT) |
78 (($ty as $crate::sys::ioctl::ioctl_num_type & $crate::sys::ioctl::TYPEMASK) << $crate::sys::ioctl::TYPESHIFT) |
79 (($nr as $crate::sys::ioctl::ioctl_num_type & $crate::sys::ioctl::NRMASK) << $crate::sys::ioctl::NRSHIFT) |
80 (($sz as $crate::sys::ioctl::ioctl_num_type & $crate::sys::ioctl::SIZEMASK) << $crate::sys::ioctl::SIZESHIFT))
81}
82
83#[macro_export(local_inner_macros)]
99macro_rules! request_code_none {
100 ($ty:expr, $nr:expr) => (ioc!($crate::sys::ioctl::NONE, $ty, $nr, 0))
101}
102
103#[macro_export(local_inner_macros)]
114macro_rules! request_code_read {
115 ($ty:expr, $nr:expr, $sz:expr) => (ioc!($crate::sys::ioctl::READ, $ty, $nr, $sz))
116}
117
118#[macro_export(local_inner_macros)]
129macro_rules! request_code_write {
130 ($ty:expr, $nr:expr, $sz:expr) => (ioc!($crate::sys::ioctl::WRITE, $ty, $nr, $sz))
131}
132
133#[macro_export(local_inner_macros)]
140macro_rules! request_code_readwrite {
141 ($ty:expr, $nr:expr, $sz:expr) => (ioc!($crate::sys::ioctl::READ | $crate::sys::ioctl::WRITE, $ty, $nr, $sz))
142}