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