//! `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;