Vendor things
This commit is contained in:
parent
5deceec006
commit
977e3c17e5
19434 changed files with 10682014 additions and 0 deletions
118
third-party/vendor/rustix/src/ioctl/linux.rs
vendored
Normal file
118
third-party/vendor/rustix/src/ioctl/linux.rs
vendored
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
//! `ioctl` opcode behavior for Linux platforms.
|
||||
|
||||
use super::{Direction, RawOpcode};
|
||||
use consts::*;
|
||||
|
||||
/// Compose an opcode from its component parts.
|
||||
pub(super) const fn compose_opcode(
|
||||
dir: Direction,
|
||||
group: RawOpcode,
|
||||
num: RawOpcode,
|
||||
size: RawOpcode,
|
||||
) -> RawOpcode {
|
||||
macro_rules! mask_and_shift {
|
||||
($val:expr, $shift:expr, $mask:expr) => {{
|
||||
($val & $mask) << $shift
|
||||
}};
|
||||
}
|
||||
|
||||
let dir = match dir {
|
||||
Direction::None => NONE,
|
||||
Direction::Read => READ,
|
||||
Direction::Write => WRITE,
|
||||
Direction::ReadWrite => READ | WRITE,
|
||||
};
|
||||
|
||||
mask_and_shift!(group, GROUP_SHIFT, GROUP_MASK)
|
||||
| mask_and_shift!(num, NUM_SHIFT, NUM_MASK)
|
||||
| mask_and_shift!(size, SIZE_SHIFT, SIZE_MASK)
|
||||
| mask_and_shift!(dir, DIR_SHIFT, DIR_MASK)
|
||||
}
|
||||
|
||||
const NUM_BITS: RawOpcode = 8;
|
||||
const GROUP_BITS: RawOpcode = 8;
|
||||
|
||||
const NUM_SHIFT: RawOpcode = 0;
|
||||
const GROUP_SHIFT: RawOpcode = NUM_SHIFT + NUM_BITS;
|
||||
const SIZE_SHIFT: RawOpcode = GROUP_SHIFT + GROUP_BITS;
|
||||
const DIR_SHIFT: RawOpcode = SIZE_SHIFT + SIZE_BITS;
|
||||
|
||||
const NUM_MASK: RawOpcode = (1 << NUM_BITS) - 1;
|
||||
const GROUP_MASK: RawOpcode = (1 << GROUP_BITS) - 1;
|
||||
const SIZE_MASK: RawOpcode = (1 << SIZE_BITS) - 1;
|
||||
const DIR_MASK: RawOpcode = (1 << DIR_BITS) - 1;
|
||||
|
||||
#[cfg(any(
|
||||
target_arch = "x86",
|
||||
target_arch = "arm",
|
||||
target_arch = "s390x",
|
||||
target_arch = "x86_64",
|
||||
target_arch = "aarch64",
|
||||
target_arch = "riscv32",
|
||||
target_arch = "riscv64",
|
||||
target_arch = "loongarch64",
|
||||
target_arch = "csky"
|
||||
))]
|
||||
mod consts {
|
||||
use super::RawOpcode;
|
||||
|
||||
pub(super) const NONE: RawOpcode = 0;
|
||||
pub(super) const READ: RawOpcode = 2;
|
||||
pub(super) const WRITE: RawOpcode = 1;
|
||||
pub(super) const SIZE_BITS: RawOpcode = 14;
|
||||
pub(super) const DIR_BITS: RawOpcode = 2;
|
||||
}
|
||||
|
||||
#[cfg(any(
|
||||
target_arch = "mips",
|
||||
target_arch = "mips32r6",
|
||||
target_arch = "mips64",
|
||||
target_arch = "mips64r6",
|
||||
target_arch = "powerpc",
|
||||
target_arch = "powerpc64",
|
||||
target_arch = "sparc",
|
||||
target_arch = "sparc64"
|
||||
))]
|
||||
mod consts {
|
||||
use super::RawOpcode;
|
||||
|
||||
pub(super) const NONE: RawOpcode = 1;
|
||||
pub(super) const READ: RawOpcode = 2;
|
||||
pub(super) const WRITE: RawOpcode = 4;
|
||||
pub(super) const SIZE_BITS: RawOpcode = 13;
|
||||
pub(super) const DIR_BITS: RawOpcode = 3;
|
||||
}
|
||||
|
||||
#[cfg(not(any(
|
||||
// These have no ioctl opcodes defined in linux_raw_sys
|
||||
// so can't use that as a known-good value for this test.
|
||||
target_arch = "sparc",
|
||||
target_arch = "sparc64"
|
||||
)))]
|
||||
#[test]
|
||||
fn check_known_opcodes() {
|
||||
use crate::backend::c::{c_long, c_uint};
|
||||
use core::mem::size_of;
|
||||
|
||||
// _IOR('U', 15, unsigned int)
|
||||
assert_eq!(
|
||||
compose_opcode(
|
||||
Direction::Read,
|
||||
b'U' as RawOpcode,
|
||||
15,
|
||||
size_of::<c_uint>() as RawOpcode
|
||||
),
|
||||
linux_raw_sys::ioctl::USBDEVFS_CLAIMINTERFACE as RawOpcode
|
||||
);
|
||||
|
||||
// _IOW('v', 2, long)
|
||||
assert_eq!(
|
||||
compose_opcode(
|
||||
Direction::Write,
|
||||
b'v' as RawOpcode,
|
||||
2,
|
||||
size_of::<c_long>() as RawOpcode
|
||||
),
|
||||
linux_raw_sys::ioctl::FS_IOC_SETVERSION as RawOpcode
|
||||
);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue