blob: 2639d81fccf85a6b4444ec538c8e484374e12f48 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
//! `ioctl` opcode behavior for BSD platforms.
use super::{Direction, RawOpcode};
pub(super) const fn compose_opcode(
dir: Direction,
group: RawOpcode,
num: RawOpcode,
size: RawOpcode,
) -> RawOpcode {
let dir = match dir {
Direction::None => NONE,
Direction::Read => READ,
Direction::Write => WRITE,
Direction::ReadWrite => READ | WRITE,
};
dir | num | (group << 8) | ((size & IOCPARAM_MASK) << 16)
}
// `IOC_VOID`
pub const NONE: RawOpcode = 0x2000_0000;
// `IOC_OUT` ("out" is from the perspective of the kernel)
pub const READ: RawOpcode = 0x4000_0000;
// `IOC_IN`
pub const WRITE: RawOpcode = 0x8000_0000;
pub const IOCPARAM_MASK: RawOpcode = 0x1FFF;
|