linux_media_sys/
lib.rs

1#![allow(non_upper_case_globals)]
2#![allow(non_camel_case_types)]
3#![allow(non_snake_case)]
4//!
5//! A Rust library providing access to the Linux Media Subsystem.
6//! It is implemented in the form of a wrapper around linux/media.h.
7//!
8
9use std::mem::size_of;
10
11include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
12
13const fn _IOC(
14    dir: libc::c_ulong,
15    r#type: libc::c_uchar,
16    nr: libc::c_ulong,
17    size: libc::size_t,
18) -> libc::c_ulong {
19    (dir << _IOC_DIRSHIFT)
20        | ((r#type as libc::c_ulong) << _IOC_TYPESHIFT)
21        | (nr << _IOC_NRSHIFT)
22        | ((size as libc::c_ulong) << _IOC_SIZESHIFT)
23}
24
25const fn _IO(type_: libc::c_uchar, nr: libc::c_ulong) -> libc::c_ulong {
26    _IOC(_IOC_NONE as libc::c_ulong, type_, nr, 0)
27}
28const fn _IOR(
29    type_: ::std::os::raw::c_uchar,
30    nr: libc::c_ulong,
31    size: libc::size_t,
32) -> libc::c_ulong {
33    _IOC(_IOC_READ as libc::c_ulong, type_, nr, size)
34}
35const fn _IOW(
36    type_: ::std::os::raw::c_uchar,
37    _: libc::c_char,
38    nr: libc::c_ulong,
39    size: libc::size_t,
40) -> libc::c_ulong {
41    _IOC(_IOC_WRITE as libc::c_ulong, type_, nr, size)
42}
43const fn _IOWR(
44    type_: ::std::os::raw::c_uchar,
45    nr: libc::c_ulong,
46    size: libc::size_t,
47) -> libc::c_ulong {
48    _IOC((_IOC_READ | _IOC_WRITE) as libc::c_ulong, type_, nr, size)
49}
50
51pub const MEDIA_IOC_DEVICE_INFO: libc::c_ulong = _IOWR(b'|', 0x00, size_of::<media_device_info>());
52pub const MEDIA_IOC_ENUM_ENTITIES: libc::c_ulong =
53    _IOWR(b'|', 0x01, size_of::<media_entity_desc>());
54pub const MEDIA_IOC_ENUM_LINKS: libc::c_ulong = _IOWR(b'|', 0x02, size_of::<media_links_enum>());
55pub const MEDIA_IOC_SETUP_LINK: libc::c_ulong = _IOWR(b'|', 0x03, size_of::<media_link_desc>());
56pub const MEDIA_IOC_G_TOPOLOGY: libc::c_ulong = _IOWR(b'|', 0x04, size_of::<media_v2_topology>());
57pub const MEDIA_IOC_REQUEST_ALLOC: libc::c_ulong = _IOR(b'|', 0x05, size_of::<libc::c_int>());
58
59///
60/// These ioctls are called on the request file descriptor as returned
61/// by MEDIA_IOC_REQUEST_ALLOC.
62///
63pub const MEDIA_REQUEST_IOC_QUEUE: libc::c_ulong = _IO(b'|', 0x80);
64pub const MEDIA_REQUEST_IOC_REINIT: libc::c_ulong = _IO(b'|', 0x81);
65
66///
67/// Appeared in 4.19.0.
68///
69/// The media_version argument comes from the media_version field in
70/// struct media_device_info.
71///
72pub const fn MEDIA_V2_ENTITY_HAS_FLAGS(media_version: u64) -> bool {
73    return media_version >= ((4u64 << 16) | (19u64 << 8) | 0u64);
74}
75
76///
77/// Appeared in 4.19.0.
78///
79/// The media_version argument comes from the media_version field in
80/// struct media_device_info.
81///
82pub const fn MEDIA_V2_PAD_HAS_INDEX(media_version: u64) -> bool {
83    return media_version >= ((4u64 << 16) | (19u64 << 8) | 0u64);
84}