summaryrefslogtreecommitdiffstats
path: root/vendor/rustix/src/ioctl/bsd.rs
blob: 66b75b54b605551f806ec5f7c3fd1adece59116b (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
//! `ioctl` opcode behavior for Linux 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)
}

pub const NONE: RawOpcode = 0x2000_0000;
pub const WRITE: RawOpcode = 0x4000_0000;
pub const READ: RawOpcode = 0x8000_0000;
pub const IOCPARAM_MASK: RawOpcode = 0x1FFF;