/* automatically generated by rust-bindgen 0.72.1 */

#[repr(C)]
#[derive(Default)]
pub struct __IncompleteArrayField<T>(::core::marker::PhantomData<T>, [T; 0]);
impl<T> __IncompleteArrayField<T> {
    #[inline]
    pub const fn new() -> Self {
        __IncompleteArrayField(::core::marker::PhantomData, [])
    }
    #[inline]
    pub fn as_ptr(&self) -> *const T {
        self as *const _ as *const T
    }
    #[inline]
    pub fn as_mut_ptr(&mut self) -> *mut T {
        self as *mut _ as *mut T
    }
    #[inline]
    pub unsafe fn as_slice(&self, len: usize) -> &[T] {
        unsafe { ::core::slice::from_raw_parts(self.as_ptr(), len) }
    }
    #[inline]
    pub unsafe fn as_mut_slice(&mut self, len: usize) -> &mut [T] {
        unsafe { ::core::slice::from_raw_parts_mut(self.as_mut_ptr(), len) }
    }
}
impl<T> ::core::fmt::Debug for __IncompleteArrayField<T> {
    fn fmt(&self, fmt: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
        fmt.write_str("__IncompleteArrayField")
    }
}
pub const _SYS_TYPES_H: u32 = 1;
pub const _FEATURES_H: u32 = 1;
pub const _DEFAULT_SOURCE: u32 = 1;
pub const __GLIBC_USE_ISOC2Y: u32 = 0;
pub const __GLIBC_USE_ISOC23: u32 = 0;
pub const __USE_ISOC11: u32 = 1;
pub const __USE_ISOC99: u32 = 1;
pub const __USE_ISOC95: u32 = 1;
pub const __USE_POSIX_IMPLICITLY: u32 = 1;
pub const _POSIX_SOURCE: u32 = 1;
pub const _POSIX_C_SOURCE: u32 = 200809;
pub const __USE_POSIX: u32 = 1;
pub const __USE_POSIX2: u32 = 1;
pub const __USE_POSIX199309: u32 = 1;
pub const __USE_POSIX199506: u32 = 1;
pub const __USE_XOPEN2K: u32 = 1;
pub const __USE_XOPEN2K8: u32 = 1;
pub const _ATFILE_SOURCE: u32 = 1;
pub const __WORDSIZE: u32 = 64;
pub const __WORDSIZE_TIME64_COMPAT32: u32 = 1;
pub const __SYSCALL_WORDSIZE: u32 = 64;
pub const __TIMESIZE: u32 = 64;
pub const __USE_TIME_BITS64: u32 = 1;
pub const __USE_MISC: u32 = 1;
pub const __USE_ATFILE: u32 = 1;
pub const __USE_FORTIFY_LEVEL: u32 = 0;
pub const __GLIBC_USE_DEPRECATED_GETS: u32 = 0;
pub const __GLIBC_USE_DEPRECATED_SCANF: u32 = 0;
pub const __GLIBC_USE_C23_STRTOL: u32 = 0;
pub const _STDC_PREDEF_H: u32 = 1;
pub const __STDC_IEC_559__: u32 = 1;
pub const __STDC_IEC_60559_BFP__: u32 = 201404;
pub const __STDC_IEC_559_COMPLEX__: u32 = 1;
pub const __STDC_IEC_60559_COMPLEX__: u32 = 201404;
pub const __STDC_ISO_10646__: u32 = 201706;
pub const __GNU_LIBRARY__: u32 = 6;
pub const __GLIBC__: u32 = 2;
pub const __GLIBC_MINOR__: u32 = 42;
pub const _SYS_CDEFS_H: u32 = 1;
pub const __glibc_c99_flexarr_available: u32 = 1;
pub const __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI: u32 = 0;
pub const __HAVE_GENERIC_SELECTION: u32 = 1;
pub const _BITS_TYPES_H: u32 = 1;
pub const _BITS_TYPESIZES_H: u32 = 1;
pub const __OFF_T_MATCHES_OFF64_T: u32 = 1;
pub const __INO_T_MATCHES_INO64_T: u32 = 1;
pub const __RLIM_T_MATCHES_RLIM64_T: u32 = 1;
pub const __STATFS_MATCHES_STATFS64: u32 = 1;
pub const __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64: u32 = 1;
pub const __FD_SETSIZE: u32 = 1024;
pub const _BITS_TIME64_H: u32 = 1;
pub const __clock_t_defined: u32 = 1;
pub const __clockid_t_defined: u32 = 1;
pub const __time_t_defined: u32 = 1;
pub const __timer_t_defined: u32 = 1;
pub const _BITS_STDINT_INTN_H: u32 = 1;
pub const __BIT_TYPES_DEFINED__: u32 = 1;
pub const _ENDIAN_H: u32 = 1;
pub const _BITS_ENDIAN_H: u32 = 1;
pub const __LITTLE_ENDIAN: u32 = 1234;
pub const __BIG_ENDIAN: u32 = 4321;
pub const __PDP_ENDIAN: u32 = 3412;
pub const _BITS_ENDIANNESS_H: u32 = 1;
pub const __BYTE_ORDER: u32 = 1234;
pub const __FLOAT_WORD_ORDER: u32 = 1234;
pub const LITTLE_ENDIAN: u32 = 1234;
pub const BIG_ENDIAN: u32 = 4321;
pub const PDP_ENDIAN: u32 = 3412;
pub const BYTE_ORDER: u32 = 1234;
pub const _BITS_BYTESWAP_H: u32 = 1;
pub const _BITS_UINTN_IDENTITY_H: u32 = 1;
pub const _SYS_SELECT_H: u32 = 1;
pub const __sigset_t_defined: u32 = 1;
pub const __timeval_defined: u32 = 1;
pub const _STRUCT_TIMESPEC: u32 = 1;
pub const FD_SETSIZE: u32 = 1024;
pub const _BITS_PTHREADTYPES_COMMON_H: u32 = 1;
pub const _THREAD_SHARED_TYPES_H: u32 = 1;
pub const _BITS_PTHREADTYPES_ARCH_H: u32 = 1;
pub const __SIZEOF_PTHREAD_MUTEX_T: u32 = 40;
pub const __SIZEOF_PTHREAD_ATTR_T: u32 = 56;
pub const __SIZEOF_PTHREAD_RWLOCK_T: u32 = 56;
pub const __SIZEOF_PTHREAD_BARRIER_T: u32 = 32;
pub const __SIZEOF_PTHREAD_MUTEXATTR_T: u32 = 4;
pub const __SIZEOF_PTHREAD_COND_T: u32 = 48;
pub const __SIZEOF_PTHREAD_CONDATTR_T: u32 = 4;
pub const __SIZEOF_PTHREAD_RWLOCKATTR_T: u32 = 8;
pub const __SIZEOF_PTHREAD_BARRIERATTR_T: u32 = 4;
pub const _THREAD_MUTEX_INTERNAL_H: u32 = 1;
pub const __PTHREAD_MUTEX_HAVE_PREV: u32 = 1;
pub const __have_pthread_attr_t: u32 = 1;
pub const _STDINT_H: u32 = 1;
pub const __GLIBC_USE_LIB_EXT2: u32 = 0;
pub const __GLIBC_USE_IEC_60559_BFP_EXT: u32 = 0;
pub const __GLIBC_USE_IEC_60559_BFP_EXT_C23: u32 = 0;
pub const __GLIBC_USE_IEC_60559_EXT: u32 = 0;
pub const __GLIBC_USE_IEC_60559_FUNCS_EXT: u32 = 0;
pub const __GLIBC_USE_IEC_60559_FUNCS_EXT_C23: u32 = 0;
pub const __GLIBC_USE_IEC_60559_TYPES_EXT: u32 = 0;
pub const _BITS_WCHAR_H: u32 = 1;
pub const _BITS_STDINT_UINTN_H: u32 = 1;
pub const _BITS_STDINT_LEAST_H: u32 = 1;
pub const INT8_MIN: i32 = -128;
pub const INT16_MIN: i32 = -32768;
pub const INT32_MIN: i32 = -2147483648;
pub const INT8_MAX: u32 = 127;
pub const INT16_MAX: u32 = 32767;
pub const INT32_MAX: u32 = 2147483647;
pub const UINT8_MAX: u32 = 255;
pub const UINT16_MAX: u32 = 65535;
pub const UINT32_MAX: u32 = 4294967295;
pub const INT_LEAST8_MIN: i32 = -128;
pub const INT_LEAST16_MIN: i32 = -32768;
pub const INT_LEAST32_MIN: i32 = -2147483648;
pub const INT_LEAST8_MAX: u32 = 127;
pub const INT_LEAST16_MAX: u32 = 32767;
pub const INT_LEAST32_MAX: u32 = 2147483647;
pub const UINT_LEAST8_MAX: u32 = 255;
pub const UINT_LEAST16_MAX: u32 = 65535;
pub const UINT_LEAST32_MAX: u32 = 4294967295;
pub const INT_FAST8_MIN: i32 = -128;
pub const INT_FAST16_MIN: i64 = -9223372036854775808;
pub const INT_FAST32_MIN: i64 = -9223372036854775808;
pub const INT_FAST8_MAX: u32 = 127;
pub const INT_FAST16_MAX: u64 = 9223372036854775807;
pub const INT_FAST32_MAX: u64 = 9223372036854775807;
pub const UINT_FAST8_MAX: u32 = 255;
pub const UINT_FAST16_MAX: i32 = -1;
pub const UINT_FAST32_MAX: i32 = -1;
pub const INTPTR_MIN: i64 = -9223372036854775808;
pub const INTPTR_MAX: u64 = 9223372036854775807;
pub const UINTPTR_MAX: i32 = -1;
pub const PTRDIFF_MIN: i64 = -9223372036854775808;
pub const PTRDIFF_MAX: u64 = 9223372036854775807;
pub const SIG_ATOMIC_MIN: i32 = -2147483648;
pub const SIG_ATOMIC_MAX: u32 = 2147483647;
pub const SIZE_MAX: i32 = -1;
pub const WINT_MIN: u32 = 0;
pub const WINT_MAX: u32 = 4294967295;
pub const __BITS_PER_LONG: u32 = 64;
pub const __BITS_PER_LONG_LONG: u32 = 64;
pub const _IOC_NRBITS: u32 = 8;
pub const _IOC_TYPEBITS: u32 = 8;
pub const _IOC_SIZEBITS: u32 = 14;
pub const _IOC_DIRBITS: u32 = 2;
pub const _IOC_NRMASK: u32 = 255;
pub const _IOC_TYPEMASK: u32 = 255;
pub const _IOC_SIZEMASK: u32 = 16383;
pub const _IOC_DIRMASK: u32 = 3;
pub const _IOC_NRSHIFT: u32 = 0;
pub const _IOC_TYPESHIFT: u32 = 8;
pub const _IOC_SIZESHIFT: u32 = 16;
pub const _IOC_DIRSHIFT: u32 = 30;
pub const _IOC_NONE: u32 = 0;
pub const _IOC_WRITE: u32 = 1;
pub const _IOC_READ: u32 = 2;
pub const IOC_IN: u32 = 1073741824;
pub const IOC_OUT: u32 = 2147483648;
pub const IOC_INOUT: u32 = 3221225472;
pub const IOCSIZE_MASK: u32 = 1073676288;
pub const IOCSIZE_SHIFT: u32 = 16;
pub const DRM_NAME: &[u8; 4] = b"drm\0";
pub const DRM_MIN_ORDER: u32 = 5;
pub const DRM_MAX_ORDER: u32 = 22;
pub const DRM_RAM_PERCENT: u32 = 10;
pub const _DRM_LOCK_HELD: u32 = 2147483648;
pub const _DRM_LOCK_CONT: u32 = 1073741824;
pub const _DRM_VBLANK_HIGH_CRTC_SHIFT: u32 = 1;
pub const _DRM_PRE_MODESET: u32 = 1;
pub const _DRM_POST_MODESET: u32 = 2;
pub const DRM_CAP_DUMB_BUFFER: u32 = 1;
pub const DRM_CAP_VBLANK_HIGH_CRTC: u32 = 2;
pub const DRM_CAP_DUMB_PREFERRED_DEPTH: u32 = 3;
pub const DRM_CAP_DUMB_PREFER_SHADOW: u32 = 4;
pub const DRM_CAP_PRIME: u32 = 5;
pub const DRM_PRIME_CAP_IMPORT: u32 = 1;
pub const DRM_PRIME_CAP_EXPORT: u32 = 2;
pub const DRM_CAP_TIMESTAMP_MONOTONIC: u32 = 6;
pub const DRM_CAP_ASYNC_PAGE_FLIP: u32 = 7;
pub const DRM_CAP_CURSOR_WIDTH: u32 = 8;
pub const DRM_CAP_CURSOR_HEIGHT: u32 = 9;
pub const DRM_CAP_ADDFB2_MODIFIERS: u32 = 16;
pub const DRM_CAP_PAGE_FLIP_TARGET: u32 = 17;
pub const DRM_CAP_CRTC_IN_VBLANK_EVENT: u32 = 18;
pub const DRM_CAP_SYNCOBJ: u32 = 19;
pub const DRM_CAP_SYNCOBJ_TIMELINE: u32 = 20;
pub const DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP: u32 = 21;
pub const DRM_CLIENT_CAP_STEREO_3D: u32 = 1;
pub const DRM_CLIENT_CAP_UNIVERSAL_PLANES: u32 = 2;
pub const DRM_CLIENT_CAP_ATOMIC: u32 = 3;
pub const DRM_CLIENT_CAP_ASPECT_RATIO: u32 = 4;
pub const DRM_CLIENT_CAP_WRITEBACK_CONNECTORS: u32 = 5;
pub const DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT: u32 = 6;
pub const DRM_SYNCOBJ_CREATE_SIGNALED: u32 = 1;
pub const DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE: u32 = 1;
pub const DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE: u32 = 1;
pub const DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL: u32 = 1;
pub const DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT: u32 = 2;
pub const DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE: u32 = 4;
pub const DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE: u32 = 8;
pub const DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED: u32 = 1;
pub const DRM_CRTC_SEQUENCE_RELATIVE: u32 = 1;
pub const DRM_CRTC_SEQUENCE_NEXT_ON_MISS: u32 = 2;
pub const DRM_CONNECTOR_NAME_LEN: u32 = 32;
pub const DRM_DISPLAY_MODE_LEN: u32 = 32;
pub const DRM_PROP_NAME_LEN: u32 = 32;
pub const DRM_MODE_TYPE_BUILTIN: u32 = 1;
pub const DRM_MODE_TYPE_CLOCK_C: u32 = 3;
pub const DRM_MODE_TYPE_CRTC_C: u32 = 5;
pub const DRM_MODE_TYPE_PREFERRED: u32 = 8;
pub const DRM_MODE_TYPE_DEFAULT: u32 = 16;
pub const DRM_MODE_TYPE_USERDEF: u32 = 32;
pub const DRM_MODE_TYPE_DRIVER: u32 = 64;
pub const DRM_MODE_TYPE_ALL: u32 = 104;
pub const DRM_MODE_FLAG_PHSYNC: u32 = 1;
pub const DRM_MODE_FLAG_NHSYNC: u32 = 2;
pub const DRM_MODE_FLAG_PVSYNC: u32 = 4;
pub const DRM_MODE_FLAG_NVSYNC: u32 = 8;
pub const DRM_MODE_FLAG_INTERLACE: u32 = 16;
pub const DRM_MODE_FLAG_DBLSCAN: u32 = 32;
pub const DRM_MODE_FLAG_CSYNC: u32 = 64;
pub const DRM_MODE_FLAG_PCSYNC: u32 = 128;
pub const DRM_MODE_FLAG_NCSYNC: u32 = 256;
pub const DRM_MODE_FLAG_HSKEW: u32 = 512;
pub const DRM_MODE_FLAG_BCAST: u32 = 1024;
pub const DRM_MODE_FLAG_PIXMUX: u32 = 2048;
pub const DRM_MODE_FLAG_DBLCLK: u32 = 4096;
pub const DRM_MODE_FLAG_CLKDIV2: u32 = 8192;
pub const DRM_MODE_FLAG_3D_MASK: u32 = 507904;
pub const DRM_MODE_FLAG_3D_NONE: u32 = 0;
pub const DRM_MODE_FLAG_3D_FRAME_PACKING: u32 = 16384;
pub const DRM_MODE_FLAG_3D_FIELD_ALTERNATIVE: u32 = 32768;
pub const DRM_MODE_FLAG_3D_LINE_ALTERNATIVE: u32 = 49152;
pub const DRM_MODE_FLAG_3D_SIDE_BY_SIDE_FULL: u32 = 65536;
pub const DRM_MODE_FLAG_3D_L_DEPTH: u32 = 81920;
pub const DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH: u32 = 98304;
pub const DRM_MODE_FLAG_3D_TOP_AND_BOTTOM: u32 = 114688;
pub const DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF: u32 = 131072;
pub const DRM_MODE_PICTURE_ASPECT_NONE: u32 = 0;
pub const DRM_MODE_PICTURE_ASPECT_4_3: u32 = 1;
pub const DRM_MODE_PICTURE_ASPECT_16_9: u32 = 2;
pub const DRM_MODE_PICTURE_ASPECT_64_27: u32 = 3;
pub const DRM_MODE_PICTURE_ASPECT_256_135: u32 = 4;
pub const DRM_MODE_CONTENT_TYPE_NO_DATA: u32 = 0;
pub const DRM_MODE_CONTENT_TYPE_GRAPHICS: u32 = 1;
pub const DRM_MODE_CONTENT_TYPE_PHOTO: u32 = 2;
pub const DRM_MODE_CONTENT_TYPE_CINEMA: u32 = 3;
pub const DRM_MODE_CONTENT_TYPE_GAME: u32 = 4;
pub const DRM_MODE_FLAG_PIC_AR_MASK: u32 = 7864320;
pub const DRM_MODE_FLAG_PIC_AR_NONE: u32 = 0;
pub const DRM_MODE_FLAG_PIC_AR_4_3: u32 = 524288;
pub const DRM_MODE_FLAG_PIC_AR_16_9: u32 = 1048576;
pub const DRM_MODE_FLAG_PIC_AR_64_27: u32 = 1572864;
pub const DRM_MODE_FLAG_PIC_AR_256_135: u32 = 2097152;
pub const DRM_MODE_FLAG_ALL: u32 = 521215;
pub const DRM_MODE_DPMS_ON: u32 = 0;
pub const DRM_MODE_DPMS_STANDBY: u32 = 1;
pub const DRM_MODE_DPMS_SUSPEND: u32 = 2;
pub const DRM_MODE_DPMS_OFF: u32 = 3;
pub const DRM_MODE_SCALE_NONE: u32 = 0;
pub const DRM_MODE_SCALE_FULLSCREEN: u32 = 1;
pub const DRM_MODE_SCALE_CENTER: u32 = 2;
pub const DRM_MODE_SCALE_ASPECT: u32 = 3;
pub const DRM_MODE_DITHERING_OFF: u32 = 0;
pub const DRM_MODE_DITHERING_ON: u32 = 1;
pub const DRM_MODE_DITHERING_AUTO: u32 = 2;
pub const DRM_MODE_DIRTY_OFF: u32 = 0;
pub const DRM_MODE_DIRTY_ON: u32 = 1;
pub const DRM_MODE_DIRTY_ANNOTATE: u32 = 2;
pub const DRM_MODE_LINK_STATUS_GOOD: u32 = 0;
pub const DRM_MODE_LINK_STATUS_BAD: u32 = 1;
pub const DRM_MODE_ROTATE_0: u32 = 1;
pub const DRM_MODE_ROTATE_90: u32 = 2;
pub const DRM_MODE_ROTATE_180: u32 = 4;
pub const DRM_MODE_ROTATE_270: u32 = 8;
pub const DRM_MODE_ROTATE_MASK: u32 = 15;
pub const DRM_MODE_REFLECT_X: u32 = 16;
pub const DRM_MODE_REFLECT_Y: u32 = 32;
pub const DRM_MODE_REFLECT_MASK: u32 = 48;
pub const DRM_MODE_CONTENT_PROTECTION_UNDESIRED: u32 = 0;
pub const DRM_MODE_CONTENT_PROTECTION_DESIRED: u32 = 1;
pub const DRM_MODE_CONTENT_PROTECTION_ENABLED: u32 = 2;
pub const DRM_MODE_PRESENT_TOP_FIELD: u32 = 1;
pub const DRM_MODE_PRESENT_BOTTOM_FIELD: u32 = 2;
pub const DRM_MODE_ENCODER_NONE: u32 = 0;
pub const DRM_MODE_ENCODER_DAC: u32 = 1;
pub const DRM_MODE_ENCODER_TMDS: u32 = 2;
pub const DRM_MODE_ENCODER_LVDS: u32 = 3;
pub const DRM_MODE_ENCODER_TVDAC: u32 = 4;
pub const DRM_MODE_ENCODER_VIRTUAL: u32 = 5;
pub const DRM_MODE_ENCODER_DSI: u32 = 6;
pub const DRM_MODE_ENCODER_DPMST: u32 = 7;
pub const DRM_MODE_ENCODER_DPI: u32 = 8;
pub const DRM_MODE_CONNECTOR_Unknown: u32 = 0;
pub const DRM_MODE_CONNECTOR_VGA: u32 = 1;
pub const DRM_MODE_CONNECTOR_DVII: u32 = 2;
pub const DRM_MODE_CONNECTOR_DVID: u32 = 3;
pub const DRM_MODE_CONNECTOR_DVIA: u32 = 4;
pub const DRM_MODE_CONNECTOR_Composite: u32 = 5;
pub const DRM_MODE_CONNECTOR_SVIDEO: u32 = 6;
pub const DRM_MODE_CONNECTOR_LVDS: u32 = 7;
pub const DRM_MODE_CONNECTOR_Component: u32 = 8;
pub const DRM_MODE_CONNECTOR_9PinDIN: u32 = 9;
pub const DRM_MODE_CONNECTOR_DisplayPort: u32 = 10;
pub const DRM_MODE_CONNECTOR_HDMIA: u32 = 11;
pub const DRM_MODE_CONNECTOR_HDMIB: u32 = 12;
pub const DRM_MODE_CONNECTOR_TV: u32 = 13;
pub const DRM_MODE_CONNECTOR_eDP: u32 = 14;
pub const DRM_MODE_CONNECTOR_VIRTUAL: u32 = 15;
pub const DRM_MODE_CONNECTOR_DSI: u32 = 16;
pub const DRM_MODE_CONNECTOR_DPI: u32 = 17;
pub const DRM_MODE_CONNECTOR_WRITEBACK: u32 = 18;
pub const DRM_MODE_CONNECTOR_SPI: u32 = 19;
pub const DRM_MODE_CONNECTOR_USB: u32 = 20;
pub const DRM_MODE_PROP_PENDING: u32 = 1;
pub const DRM_MODE_PROP_RANGE: u32 = 2;
pub const DRM_MODE_PROP_IMMUTABLE: u32 = 4;
pub const DRM_MODE_PROP_ENUM: u32 = 8;
pub const DRM_MODE_PROP_BLOB: u32 = 16;
pub const DRM_MODE_PROP_BITMASK: u32 = 32;
pub const DRM_MODE_PROP_LEGACY_TYPE: u32 = 58;
pub const DRM_MODE_PROP_EXTENDED_TYPE: u32 = 65472;
pub const DRM_MODE_PROP_ATOMIC: u32 = 2147483648;
pub const DRM_MODE_OBJECT_CRTC: u32 = 3435973836;
pub const DRM_MODE_OBJECT_CONNECTOR: u32 = 3233857728;
pub const DRM_MODE_OBJECT_ENCODER: u32 = 3772834016;
pub const DRM_MODE_OBJECT_MODE: u32 = 3739147998;
pub const DRM_MODE_OBJECT_PROPERTY: u32 = 2964369584;
pub const DRM_MODE_OBJECT_FB: u32 = 4227595259;
pub const DRM_MODE_OBJECT_BLOB: u32 = 3149642683;
pub const DRM_MODE_OBJECT_PLANE: u32 = 4008636142;
pub const DRM_MODE_OBJECT_ANY: u32 = 0;
pub const DRM_MODE_FB_INTERLACED: u32 = 1;
pub const DRM_MODE_FB_MODIFIERS: u32 = 2;
pub const DRM_MODE_FB_DIRTY_ANNOTATE_COPY: u32 = 1;
pub const DRM_MODE_FB_DIRTY_ANNOTATE_FILL: u32 = 2;
pub const DRM_MODE_FB_DIRTY_FLAGS: u32 = 3;
pub const DRM_MODE_FB_DIRTY_MAX_CLIPS: u32 = 256;
pub const DRM_MODE_CURSOR_BO: u32 = 1;
pub const DRM_MODE_CURSOR_MOVE: u32 = 2;
pub const DRM_MODE_CURSOR_FLAGS: u32 = 3;
pub const DRM_MODE_PAGE_FLIP_EVENT: u32 = 1;
pub const DRM_MODE_PAGE_FLIP_ASYNC: u32 = 2;
pub const DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE: u32 = 4;
pub const DRM_MODE_PAGE_FLIP_TARGET_RELATIVE: u32 = 8;
pub const DRM_MODE_PAGE_FLIP_TARGET: u32 = 12;
pub const DRM_MODE_PAGE_FLIP_FLAGS: u32 = 15;
pub const DRM_MODE_ATOMIC_TEST_ONLY: u32 = 256;
pub const DRM_MODE_ATOMIC_NONBLOCK: u32 = 512;
pub const DRM_MODE_ATOMIC_ALLOW_MODESET: u32 = 1024;
pub const DRM_MODE_ATOMIC_FLAGS: u32 = 1795;
pub const FORMAT_BLOB_CURRENT: u32 = 1;
pub const DRM_IOCTL_BASE: u8 = 100u8;
pub const DRM_COMMAND_BASE: u32 = 64;
pub const DRM_COMMAND_END: u32 = 160;
pub const DRM_EVENT_VBLANK: u32 = 1;
pub const DRM_EVENT_FLIP_COMPLETE: u32 = 2;
pub const DRM_EVENT_CRTC_SEQUENCE: u32 = 3;
pub const DRM_MAX_MINOR: u32 = 64;
pub const DRM_IOC_VOID: u32 = 0;
pub const DRM_IOC_READ: u32 = 2;
pub const DRM_IOC_WRITE: u32 = 1;
pub const DRM_IOC_READWRITE: u32 = 3;
pub const DRM_DEV_UID: u32 = 0;
pub const DRM_DEV_GID: u32 = 0;
pub const DRM_DIR_NAME: &[u8; 9] = b"/dev/dri\0";
pub const DRM_PRIMARY_MINOR_NAME: &[u8; 5] = b"card\0";
pub const DRM_CONTROL_MINOR_NAME: &[u8; 9] = b"controlD\0";
pub const DRM_RENDER_MINOR_NAME: &[u8; 8] = b"renderD\0";
pub const DRM_PROC_NAME: &[u8; 11] = b"/proc/dri/\0";
pub const DRM_DEV_NAME: &[u8; 10] = b"%s/card%d\0";
pub const DRM_CONTROL_DEV_NAME: &[u8; 14] = b"%s/controlD%d\0";
pub const DRM_RENDER_DEV_NAME: &[u8; 13] = b"%s/renderD%d\0";
pub const DRM_ERR_NO_DEVICE: i32 = -1001;
pub const DRM_ERR_NO_ACCESS: i32 = -1002;
pub const DRM_ERR_NOT_ROOT: i32 = -1003;
pub const DRM_ERR_INVALID: i32 = -1004;
pub const DRM_ERR_NO_FD: i32 = -1005;
pub const DRM_AGP_NO_HANDLE: u32 = 0;
pub const DRM_VBLANK_HIGH_CRTC_SHIFT: u32 = 1;
pub const DRM_LOCK_HELD: u32 = 2147483648;
pub const DRM_LOCK_CONT: u32 = 1073741824;
pub const DRM_NODE_PRIMARY: u32 = 0;
pub const DRM_NODE_CONTROL: u32 = 1;
pub const DRM_NODE_RENDER: u32 = 2;
pub const DRM_NODE_MAX: u32 = 3;
pub const DRM_EVENT_CONTEXT_VERSION: u32 = 4;
pub const DRM_BUS_PCI: u32 = 0;
pub const DRM_BUS_USB: u32 = 1;
pub const DRM_BUS_PLATFORM: u32 = 2;
pub const DRM_BUS_HOST1X: u32 = 3;
pub const DRM_PLATFORM_DEVICE_NAME_LEN: u32 = 512;
pub const DRM_HOST1X_DEVICE_NAME_LEN: u32 = 512;
pub const DRM_DEVICE_GET_PCI_REVISION: u32 = 1;
pub const __bool_true_false_are_defined: u32 = 1;
pub const true_: u32 = 1;
pub const false_: u32 = 0;
pub const DRM_MODE_FEATURE_KMS: u32 = 1;
pub const DRM_MODE_FEATURE_DIRTYFB: u32 = 1;
pub const DRM_PLANE_TYPE_OVERLAY: u32 = 0;
pub const DRM_PLANE_TYPE_PRIMARY: u32 = 1;
pub const DRM_PLANE_TYPE_CURSOR: u32 = 2;
pub type __gnuc_va_list = __builtin_va_list;
pub type va_list = __builtin_va_list;
pub type __u_char = ::core::ffi::c_uchar;
pub type __u_short = ::core::ffi::c_ushort;
pub type __u_int = ::core::ffi::c_uint;
pub type __u_long = ::core::ffi::c_ulong;
pub type __int8_t = ::core::ffi::c_schar;
pub type __uint8_t = ::core::ffi::c_uchar;
pub type __int16_t = ::core::ffi::c_short;
pub type __uint16_t = ::core::ffi::c_ushort;
pub type __int32_t = ::core::ffi::c_int;
pub type __uint32_t = ::core::ffi::c_uint;
pub type __int64_t = ::core::ffi::c_long;
pub type __uint64_t = ::core::ffi::c_ulong;
pub type __int_least8_t = __int8_t;
pub type __uint_least8_t = __uint8_t;
pub type __int_least16_t = __int16_t;
pub type __uint_least16_t = __uint16_t;
pub type __int_least32_t = __int32_t;
pub type __uint_least32_t = __uint32_t;
pub type __int_least64_t = __int64_t;
pub type __uint_least64_t = __uint64_t;
pub type __quad_t = ::core::ffi::c_long;
pub type __u_quad_t = ::core::ffi::c_ulong;
pub type __intmax_t = ::core::ffi::c_long;
pub type __uintmax_t = ::core::ffi::c_ulong;
pub type __dev_t = ::core::ffi::c_ulong;
pub type __uid_t = ::core::ffi::c_uint;
pub type __gid_t = ::core::ffi::c_uint;
pub type __ino_t = ::core::ffi::c_ulong;
pub type __ino64_t = ::core::ffi::c_ulong;
pub type __mode_t = ::core::ffi::c_uint;
pub type __nlink_t = ::core::ffi::c_ulong;
pub type __off_t = ::core::ffi::c_long;
pub type __off64_t = ::core::ffi::c_long;
pub type __pid_t = ::core::ffi::c_int;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __fsid_t {
    pub __val: [::core::ffi::c_int; 2usize],
}
pub type __clock_t = ::core::ffi::c_long;
pub type __rlim_t = ::core::ffi::c_ulong;
pub type __rlim64_t = ::core::ffi::c_ulong;
pub type __id_t = ::core::ffi::c_uint;
pub type __time_t = ::core::ffi::c_long;
pub type __useconds_t = ::core::ffi::c_uint;
pub type __suseconds_t = ::core::ffi::c_long;
pub type __suseconds64_t = ::core::ffi::c_long;
pub type __daddr_t = ::core::ffi::c_int;
pub type __key_t = ::core::ffi::c_int;
pub type __clockid_t = ::core::ffi::c_int;
pub type __timer_t = *mut ::core::ffi::c_void;
pub type __blksize_t = ::core::ffi::c_long;
pub type __blkcnt_t = ::core::ffi::c_long;
pub type __blkcnt64_t = ::core::ffi::c_long;
pub type __fsblkcnt_t = ::core::ffi::c_ulong;
pub type __fsblkcnt64_t = ::core::ffi::c_ulong;
pub type __fsfilcnt_t = ::core::ffi::c_ulong;
pub type __fsfilcnt64_t = ::core::ffi::c_ulong;
pub type __fsword_t = ::core::ffi::c_long;
pub type __ssize_t = ::core::ffi::c_long;
pub type __syscall_slong_t = ::core::ffi::c_long;
pub type __syscall_ulong_t = ::core::ffi::c_ulong;
pub type __loff_t = __off64_t;
pub type __caddr_t = *mut ::core::ffi::c_char;
pub type __intptr_t = ::core::ffi::c_long;
pub type __socklen_t = ::core::ffi::c_uint;
pub type __sig_atomic_t = ::core::ffi::c_int;
pub type u_char = __u_char;
pub type u_short = __u_short;
pub type u_int = __u_int;
pub type u_long = __u_long;
pub type quad_t = __quad_t;
pub type u_quad_t = __u_quad_t;
pub type fsid_t = __fsid_t;
pub type loff_t = __loff_t;
pub type ino_t = __ino_t;
pub type dev_t = __dev_t;
pub type gid_t = __gid_t;
pub type mode_t = __mode_t;
pub type nlink_t = __nlink_t;
pub type uid_t = __uid_t;
pub type off_t = __off_t;
pub type pid_t = __pid_t;
pub type id_t = __id_t;
pub type daddr_t = __daddr_t;
pub type caddr_t = __caddr_t;
pub type key_t = __key_t;
pub type clock_t = __clock_t;
pub type clockid_t = __clockid_t;
pub type time_t = __time_t;
pub type timer_t = __timer_t;
pub type ulong = ::core::ffi::c_ulong;
pub type ushort = ::core::ffi::c_ushort;
pub type uint = ::core::ffi::c_uint;
pub type u_int8_t = __uint8_t;
pub type u_int16_t = __uint16_t;
pub type u_int32_t = __uint32_t;
pub type u_int64_t = __uint64_t;
pub type register_t = ::core::ffi::c_long;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __sigset_t {
    pub __val: [::core::ffi::c_ulong; 16usize],
}
pub type sigset_t = __sigset_t;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct timeval {
    pub tv_sec: __time_t,
    pub tv_usec: __suseconds_t,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct timespec {
    pub tv_sec: __time_t,
    pub tv_nsec: __syscall_slong_t,
}
pub type suseconds_t = __suseconds_t;
pub type __fd_mask = ::core::ffi::c_long;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct fd_set {
    pub __fds_bits: [__fd_mask; 16usize],
}
pub type fd_mask = __fd_mask;
pub type blksize_t = __blksize_t;
pub type blkcnt_t = __blkcnt_t;
pub type fsblkcnt_t = __fsblkcnt_t;
pub type fsfilcnt_t = __fsfilcnt_t;
#[repr(C)]
#[derive(Copy, Clone)]
pub union __atomic_wide_counter {
    pub __value64: ::core::ffi::c_ulonglong,
    pub __value32: __atomic_wide_counter__bindgen_ty_1,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __atomic_wide_counter__bindgen_ty_1 {
    pub __low: ::core::ffi::c_uint,
    pub __high: ::core::ffi::c_uint,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __pthread_internal_list {
    pub __prev: *mut __pthread_internal_list,
    pub __next: *mut __pthread_internal_list,
}
pub type __pthread_list_t = __pthread_internal_list;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __pthread_internal_slist {
    pub __next: *mut __pthread_internal_slist,
}
pub type __pthread_slist_t = __pthread_internal_slist;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __pthread_mutex_s {
    pub __lock: ::core::ffi::c_int,
    pub __count: ::core::ffi::c_uint,
    pub __owner: ::core::ffi::c_int,
    pub __nusers: ::core::ffi::c_uint,
    pub __kind: ::core::ffi::c_int,
    pub __spins: ::core::ffi::c_short,
    pub __elision: ::core::ffi::c_short,
    pub __list: __pthread_list_t,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __pthread_rwlock_arch_t {
    pub __readers: ::core::ffi::c_uint,
    pub __writers: ::core::ffi::c_uint,
    pub __wrphase_futex: ::core::ffi::c_uint,
    pub __writers_futex: ::core::ffi::c_uint,
    pub __pad3: ::core::ffi::c_uint,
    pub __pad4: ::core::ffi::c_uint,
    pub __cur_writer: ::core::ffi::c_int,
    pub __shared: ::core::ffi::c_int,
    pub __rwelision: ::core::ffi::c_schar,
    pub __pad1: [::core::ffi::c_uchar; 7usize],
    pub __pad2: ::core::ffi::c_ulong,
    pub __flags: ::core::ffi::c_uint,
}
#[repr(C)]
#[derive(Copy, Clone)]
pub struct __pthread_cond_s {
    pub __wseq: __atomic_wide_counter,
    pub __g1_start: __atomic_wide_counter,
    pub __g_size: [::core::ffi::c_uint; 2usize],
    pub __g1_orig_size: ::core::ffi::c_uint,
    pub __wrefs: ::core::ffi::c_uint,
    pub __g_signals: [::core::ffi::c_uint; 2usize],
    pub __unused_initialized_1: ::core::ffi::c_uint,
    pub __unused_initialized_2: ::core::ffi::c_uint,
}
pub type __tss_t = ::core::ffi::c_uint;
pub type __thrd_t = ::core::ffi::c_ulong;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __once_flag {
    pub __data: ::core::ffi::c_int,
}
pub type pthread_t = ::core::ffi::c_ulong;
#[repr(C)]
#[derive(Copy, Clone)]
pub union pthread_mutexattr_t {
    pub __size: [::core::ffi::c_char; 4usize],
    pub __align: ::core::ffi::c_int,
}
#[repr(C)]
#[derive(Copy, Clone)]
pub union pthread_condattr_t {
    pub __size: [::core::ffi::c_char; 4usize],
    pub __align: ::core::ffi::c_int,
}
pub type pthread_key_t = ::core::ffi::c_uint;
pub type pthread_once_t = ::core::ffi::c_int;
#[repr(C)]
#[derive(Copy, Clone)]
pub union pthread_attr_t {
    pub __size: [::core::ffi::c_char; 56usize],
    pub __align: ::core::ffi::c_long,
}
#[repr(C)]
#[derive(Copy, Clone)]
pub union pthread_mutex_t {
    pub __data: __pthread_mutex_s,
    pub __size: [::core::ffi::c_char; 40usize],
    pub __align: ::core::ffi::c_long,
}
#[repr(C)]
#[derive(Copy, Clone)]
pub union pthread_cond_t {
    pub __data: __pthread_cond_s,
    pub __size: [::core::ffi::c_char; 48usize],
    pub __align: ::core::ffi::c_longlong,
}
#[repr(C)]
#[derive(Copy, Clone)]
pub union pthread_rwlock_t {
    pub __data: __pthread_rwlock_arch_t,
    pub __size: [::core::ffi::c_char; 56usize],
    pub __align: ::core::ffi::c_long,
}
#[repr(C)]
#[derive(Copy, Clone)]
pub union pthread_rwlockattr_t {
    pub __size: [::core::ffi::c_char; 8usize],
    pub __align: ::core::ffi::c_long,
}
pub type pthread_spinlock_t = ::core::ffi::c_int;
#[repr(C)]
#[derive(Copy, Clone)]
pub union pthread_barrier_t {
    pub __size: [::core::ffi::c_char; 32usize],
    pub __align: ::core::ffi::c_long,
}
#[repr(C)]
#[derive(Copy, Clone)]
pub union pthread_barrierattr_t {
    pub __size: [::core::ffi::c_char; 4usize],
    pub __align: ::core::ffi::c_int,
}
pub type int_least8_t = __int_least8_t;
pub type int_least16_t = __int_least16_t;
pub type int_least32_t = __int_least32_t;
pub type int_least64_t = __int_least64_t;
pub type uint_least8_t = __uint_least8_t;
pub type uint_least16_t = __uint_least16_t;
pub type uint_least32_t = __uint_least32_t;
pub type uint_least64_t = __uint_least64_t;
pub type int_fast8_t = ::core::ffi::c_schar;
pub type int_fast16_t = ::core::ffi::c_long;
pub type int_fast32_t = ::core::ffi::c_long;
pub type int_fast64_t = ::core::ffi::c_long;
pub type uint_fast8_t = ::core::ffi::c_uchar;
pub type uint_fast16_t = ::core::ffi::c_ulong;
pub type uint_fast32_t = ::core::ffi::c_ulong;
pub type uint_fast64_t = ::core::ffi::c_ulong;
pub type intmax_t = __intmax_t;
pub type uintmax_t = __uintmax_t;
pub type __s8 = ::core::ffi::c_schar;
pub type __u8 = ::core::ffi::c_uchar;
pub type __s16 = ::core::ffi::c_short;
pub type __u16 = ::core::ffi::c_ushort;
pub type __s32 = ::core::ffi::c_int;
pub type __u32 = ::core::ffi::c_uint;
pub type __s64 = ::core::ffi::c_longlong;
pub type __u64 = ::core::ffi::c_ulonglong;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __kernel_fd_set {
    pub fds_bits: [::core::ffi::c_ulong; 16usize],
}
pub type __kernel_sighandler_t =
    ::core::option::Option<unsafe extern "C" fn(arg1: ::core::ffi::c_int)>;
pub type __kernel_key_t = ::core::ffi::c_int;
pub type __kernel_mqd_t = ::core::ffi::c_int;
pub type __kernel_old_uid_t = ::core::ffi::c_ushort;
pub type __kernel_old_gid_t = ::core::ffi::c_ushort;
pub type __kernel_old_dev_t = ::core::ffi::c_ulong;
pub type __kernel_long_t = ::core::ffi::c_long;
pub type __kernel_ulong_t = ::core::ffi::c_ulong;
pub type __kernel_ino_t = __kernel_ulong_t;
pub type __kernel_mode_t = ::core::ffi::c_uint;
pub type __kernel_pid_t = ::core::ffi::c_int;
pub type __kernel_ipc_pid_t = ::core::ffi::c_int;
pub type __kernel_uid_t = ::core::ffi::c_uint;
pub type __kernel_gid_t = ::core::ffi::c_uint;
pub type __kernel_suseconds_t = __kernel_long_t;
pub type __kernel_daddr_t = ::core::ffi::c_int;
pub type __kernel_uid32_t = ::core::ffi::c_uint;
pub type __kernel_gid32_t = ::core::ffi::c_uint;
pub type __kernel_size_t = __kernel_ulong_t;
pub type __kernel_ssize_t = __kernel_long_t;
pub type __kernel_ptrdiff_t = __kernel_long_t;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __kernel_fsid_t {
    pub val: [::core::ffi::c_int; 2usize],
}
pub type __kernel_off_t = __kernel_long_t;
pub type __kernel_loff_t = ::core::ffi::c_longlong;
pub type __kernel_uoff_t = ::core::ffi::c_ulonglong;
pub type __kernel_old_time_t = __kernel_long_t;
pub type __kernel_time_t = __kernel_long_t;
pub type __kernel_time64_t = ::core::ffi::c_longlong;
pub type __kernel_clock_t = __kernel_long_t;
pub type __kernel_timer_t = ::core::ffi::c_int;
pub type __kernel_clockid_t = ::core::ffi::c_int;
pub type __kernel_caddr_t = *mut ::core::ffi::c_char;
pub type __kernel_uid16_t = ::core::ffi::c_ushort;
pub type __kernel_gid16_t = ::core::ffi::c_ushort;
pub type __s128 = i128;
pub type __u128 = u128;
pub type __le16 = __u16;
pub type __be16 = __u16;
pub type __le32 = __u32;
pub type __be32 = __u32;
pub type __le64 = __u64;
pub type __be64 = __u64;
pub type __sum16 = __u16;
pub type __wsum = __u32;
pub type __poll_t = ::core::ffi::c_uint;
pub type drm_handle_t = ::core::ffi::c_uint;
pub type drm_context_t = ::core::ffi::c_uint;
pub type drm_drawable_t = ::core::ffi::c_uint;
pub type drm_magic_t = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_clip_rect {
    pub x1: ::core::ffi::c_ushort,
    pub y1: ::core::ffi::c_ushort,
    pub x2: ::core::ffi::c_ushort,
    pub y2: ::core::ffi::c_ushort,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_drawable_info {
    pub num_rects: ::core::ffi::c_uint,
    pub rects: *mut drm_clip_rect,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_tex_region {
    pub next: ::core::ffi::c_uchar,
    pub prev: ::core::ffi::c_uchar,
    pub in_use: ::core::ffi::c_uchar,
    pub padding: ::core::ffi::c_uchar,
    pub age: ::core::ffi::c_uint,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_hw_lock {
    #[doc = "< lock variable"]
    pub lock: ::core::ffi::c_uint,
    #[doc = "< Pad to cache line"]
    pub padding: [::core::ffi::c_char; 60usize],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_version {
    #[doc = "< Major version"]
    pub version_major: ::core::ffi::c_int,
    #[doc = "< Minor version"]
    pub version_minor: ::core::ffi::c_int,
    #[doc = "< Patch level"]
    pub version_patchlevel: ::core::ffi::c_int,
    #[doc = "< Length of name buffer"]
    pub name_len: __kernel_size_t,
    #[doc = "< Name of driver"]
    pub name: *mut ::core::ffi::c_char,
    #[doc = "< Length of date buffer"]
    pub date_len: __kernel_size_t,
    #[doc = "< User-space buffer to hold date"]
    pub date: *mut ::core::ffi::c_char,
    #[doc = "< Length of desc buffer"]
    pub desc_len: __kernel_size_t,
    #[doc = "< User-space buffer to hold desc"]
    pub desc: *mut ::core::ffi::c_char,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_unique {
    #[doc = "< Length of unique"]
    pub unique_len: __kernel_size_t,
    #[doc = "< Unique name for driver instantiation"]
    pub unique: *mut ::core::ffi::c_char,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_list {
    #[doc = "< Length of user-space structures"]
    pub count: ::core::ffi::c_int,
    pub version: *mut drm_version,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_block {
    pub unused: ::core::ffi::c_int,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_control {
    pub func: drm_control__bindgen_ty_1,
    pub irq: ::core::ffi::c_int,
}
pub const drm_control_DRM_ADD_COMMAND: drm_control__bindgen_ty_1 = 0;
pub const drm_control_DRM_RM_COMMAND: drm_control__bindgen_ty_1 = 1;
pub const drm_control_DRM_INST_HANDLER: drm_control__bindgen_ty_1 = 2;
pub const drm_control_DRM_UNINST_HANDLER: drm_control__bindgen_ty_1 = 3;
pub type drm_control__bindgen_ty_1 = ::core::ffi::c_uint;
#[doc = "< WC (no caching), no core dump"]
pub const drm_map_type__DRM_FRAME_BUFFER: drm_map_type = 0;
#[doc = "< no caching, no core dump"]
pub const drm_map_type__DRM_REGISTERS: drm_map_type = 1;
#[doc = "< shared, cached"]
pub const drm_map_type__DRM_SHM: drm_map_type = 2;
#[doc = "< AGP/GART"]
pub const drm_map_type__DRM_AGP: drm_map_type = 3;
#[doc = "< Scatter/gather memory for PCI DMA"]
pub const drm_map_type__DRM_SCATTER_GATHER: drm_map_type = 4;
#[doc = "< Consistent memory for PCI DMA"]
pub const drm_map_type__DRM_CONSISTENT: drm_map_type = 5;
pub type drm_map_type = ::core::ffi::c_uint;
#[doc = "< Cannot be mapped to user-virtual"]
pub const drm_map_flags__DRM_RESTRICTED: drm_map_flags = 1;
pub const drm_map_flags__DRM_READ_ONLY: drm_map_flags = 2;
#[doc = "< shared, cached, locked"]
pub const drm_map_flags__DRM_LOCKED: drm_map_flags = 4;
#[doc = "< kernel requires access"]
pub const drm_map_flags__DRM_KERNEL: drm_map_flags = 8;
#[doc = "< use write-combining if available"]
pub const drm_map_flags__DRM_WRITE_COMBINING: drm_map_flags = 16;
#[doc = "< SHM page that contains lock"]
pub const drm_map_flags__DRM_CONTAINS_LOCK: drm_map_flags = 32;
#[doc = "< Removable mapping"]
pub const drm_map_flags__DRM_REMOVABLE: drm_map_flags = 64;
#[doc = "< Managed by driver"]
pub const drm_map_flags__DRM_DRIVER: drm_map_flags = 128;
pub type drm_map_flags = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_ctx_priv_map {
    #[doc = "< Context requesting private mapping"]
    pub ctx_id: ::core::ffi::c_uint,
    #[doc = "< Handle of map"]
    pub handle: *mut ::core::ffi::c_void,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_map {
    #[doc = "< Requested physical address (0 for SAREA)"]
    pub offset: ::core::ffi::c_ulong,
    #[doc = "< Requested physical size (bytes)"]
    pub size: ::core::ffi::c_ulong,
    #[doc = "< Type of memory to map"]
    pub type_: drm_map_type,
    #[doc = "< Flags"]
    pub flags: drm_map_flags,
    #[doc = "< User-space: \"Handle\" to pass to mmap() */\n/**< Kernel-space: kernel-virtual address"]
    pub handle: *mut ::core::ffi::c_void,
    #[doc = "< MTRR slot used"]
    pub mtrr: ::core::ffi::c_int,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_client {
    #[doc = "< Which client desired?"]
    pub idx: ::core::ffi::c_int,
    #[doc = "< Is client authenticated?"]
    pub auth: ::core::ffi::c_int,
    #[doc = "< Process ID"]
    pub pid: ::core::ffi::c_ulong,
    #[doc = "< User ID"]
    pub uid: ::core::ffi::c_ulong,
    #[doc = "< Magic"]
    pub magic: ::core::ffi::c_ulong,
    #[doc = "< Ioctl count"]
    pub iocs: ::core::ffi::c_ulong,
}
pub const drm_stat_type__DRM_STAT_LOCK: drm_stat_type = 0;
pub const drm_stat_type__DRM_STAT_OPENS: drm_stat_type = 1;
pub const drm_stat_type__DRM_STAT_CLOSES: drm_stat_type = 2;
pub const drm_stat_type__DRM_STAT_IOCTLS: drm_stat_type = 3;
pub const drm_stat_type__DRM_STAT_LOCKS: drm_stat_type = 4;
pub const drm_stat_type__DRM_STAT_UNLOCKS: drm_stat_type = 5;
#[doc = "< Generic value"]
pub const drm_stat_type__DRM_STAT_VALUE: drm_stat_type = 6;
#[doc = "< Generic byte counter (1024bytes/K)"]
pub const drm_stat_type__DRM_STAT_BYTE: drm_stat_type = 7;
#[doc = "< Generic non-byte counter (1000/k)"]
pub const drm_stat_type__DRM_STAT_COUNT: drm_stat_type = 8;
#[doc = "< IRQ"]
pub const drm_stat_type__DRM_STAT_IRQ: drm_stat_type = 9;
#[doc = "< Primary DMA bytes"]
pub const drm_stat_type__DRM_STAT_PRIMARY: drm_stat_type = 10;
#[doc = "< Secondary DMA bytes"]
pub const drm_stat_type__DRM_STAT_SECONDARY: drm_stat_type = 11;
#[doc = "< DMA"]
pub const drm_stat_type__DRM_STAT_DMA: drm_stat_type = 12;
#[doc = "< Special DMA (e.g., priority or polled)"]
pub const drm_stat_type__DRM_STAT_SPECIAL: drm_stat_type = 13;
#[doc = "< Missed DMA opportunity"]
pub const drm_stat_type__DRM_STAT_MISSED: drm_stat_type = 14;
pub type drm_stat_type = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_stats {
    pub count: ::core::ffi::c_ulong,
    pub data: [drm_stats__bindgen_ty_1; 15usize],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_stats__bindgen_ty_1 {
    pub value: ::core::ffi::c_ulong,
    pub type_: drm_stat_type,
}
#[doc = "< Wait until hardware is ready for DMA"]
pub const drm_lock_flags__DRM_LOCK_READY: drm_lock_flags = 1;
#[doc = "< Wait until hardware quiescent"]
pub const drm_lock_flags__DRM_LOCK_QUIESCENT: drm_lock_flags = 2;
#[doc = "< Flush this context's DMA queue first"]
pub const drm_lock_flags__DRM_LOCK_FLUSH: drm_lock_flags = 4;
#[doc = "< Flush all DMA queues first"]
pub const drm_lock_flags__DRM_LOCK_FLUSH_ALL: drm_lock_flags = 8;
#[doc = "< Halt all current and future queues"]
pub const drm_lock_flags__DRM_HALT_ALL_QUEUES: drm_lock_flags = 16;
#[doc = "< Halt all current queues"]
pub const drm_lock_flags__DRM_HALT_CUR_QUEUES: drm_lock_flags = 32;
pub type drm_lock_flags = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_lock {
    pub context: ::core::ffi::c_int,
    pub flags: drm_lock_flags,
}
#[doc = "<\n Block until buffer dispatched.\n\n \\note The buffer may not yet have\n been processed by the hardware --\n getting a hardware lock with the\n hardware quiescent will ensure\n that the buffer has been\n processed."]
pub const drm_dma_flags__DRM_DMA_BLOCK: drm_dma_flags = 1;
#[doc = "< Dispatch while lock held"]
pub const drm_dma_flags__DRM_DMA_WHILE_LOCKED: drm_dma_flags = 2;
#[doc = "< High priority dispatch"]
pub const drm_dma_flags__DRM_DMA_PRIORITY: drm_dma_flags = 4;
#[doc = "< Wait for free buffers"]
pub const drm_dma_flags__DRM_DMA_WAIT: drm_dma_flags = 16;
#[doc = "< Smaller-than-requested buffers OK"]
pub const drm_dma_flags__DRM_DMA_SMALLER_OK: drm_dma_flags = 32;
#[doc = "< Larger-than-requested buffers OK"]
pub const drm_dma_flags__DRM_DMA_LARGER_OK: drm_dma_flags = 64;
pub type drm_dma_flags = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_buf_desc {
    #[doc = "< Number of buffers of this size"]
    pub count: ::core::ffi::c_int,
    #[doc = "< Size in bytes"]
    pub size: ::core::ffi::c_int,
    #[doc = "< Low water mark"]
    pub low_mark: ::core::ffi::c_int,
    #[doc = "< High water mark"]
    pub high_mark: ::core::ffi::c_int,
    pub flags: drm_buf_desc__bindgen_ty_1,
    #[doc = "<\n Start address of where the AGP buffers are\n in the AGP aperture"]
    pub agp_start: ::core::ffi::c_ulong,
}
#[doc = "< Align on page boundaries for DMA"]
pub const drm_buf_desc__DRM_PAGE_ALIGN: drm_buf_desc__bindgen_ty_1 = 1;
#[doc = "< Buffer is in AGP space"]
pub const drm_buf_desc__DRM_AGP_BUFFER: drm_buf_desc__bindgen_ty_1 = 2;
#[doc = "< Scatter/gather memory buffer"]
pub const drm_buf_desc__DRM_SG_BUFFER: drm_buf_desc__bindgen_ty_1 = 4;
#[doc = "< Buffer is in frame buffer"]
pub const drm_buf_desc__DRM_FB_BUFFER: drm_buf_desc__bindgen_ty_1 = 8;
#[doc = "< Map PCI DMA buffer read-only"]
pub const drm_buf_desc__DRM_PCI_BUFFER_RO: drm_buf_desc__bindgen_ty_1 = 16;
pub type drm_buf_desc__bindgen_ty_1 = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_buf_info {
    #[doc = "< Entries in list"]
    pub count: ::core::ffi::c_int,
    pub list: *mut drm_buf_desc,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_buf_free {
    pub count: ::core::ffi::c_int,
    pub list: *mut ::core::ffi::c_int,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_buf_pub {
    #[doc = "< Index into the master buffer list"]
    pub idx: ::core::ffi::c_int,
    #[doc = "< Buffer size"]
    pub total: ::core::ffi::c_int,
    #[doc = "< Amount of buffer in use (for DMA)"]
    pub used: ::core::ffi::c_int,
    #[doc = "< Address of buffer"]
    pub address: *mut ::core::ffi::c_void,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_buf_map {
    #[doc = "< Length of the buffer list"]
    pub count: ::core::ffi::c_int,
    #[doc = "< Mmap'd area in user-virtual"]
    pub virtual_: *mut ::core::ffi::c_void,
    #[doc = "< Buffer information"]
    pub list: *mut drm_buf_pub,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_dma {
    #[doc = "< Context handle"]
    pub context: ::core::ffi::c_int,
    #[doc = "< Number of buffers to send"]
    pub send_count: ::core::ffi::c_int,
    #[doc = "< List of handles to buffers"]
    pub send_indices: *mut ::core::ffi::c_int,
    #[doc = "< Lengths of data to send"]
    pub send_sizes: *mut ::core::ffi::c_int,
    #[doc = "< Flags"]
    pub flags: drm_dma_flags,
    #[doc = "< Number of buffers requested"]
    pub request_count: ::core::ffi::c_int,
    #[doc = "< Desired size for buffers"]
    pub request_size: ::core::ffi::c_int,
    #[doc = "< Buffer information"]
    pub request_indices: *mut ::core::ffi::c_int,
    pub request_sizes: *mut ::core::ffi::c_int,
    #[doc = "< Number of buffers granted"]
    pub granted_count: ::core::ffi::c_int,
}
pub const drm_ctx_flags__DRM_CONTEXT_PRESERVED: drm_ctx_flags = 1;
pub const drm_ctx_flags__DRM_CONTEXT_2DONLY: drm_ctx_flags = 2;
pub type drm_ctx_flags = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_ctx {
    pub handle: drm_context_t,
    pub flags: drm_ctx_flags,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_ctx_res {
    pub count: ::core::ffi::c_int,
    pub contexts: *mut drm_ctx,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_draw {
    pub handle: drm_drawable_t,
}
pub const drm_drawable_info_type_t_DRM_DRAWABLE_CLIPRECTS: drm_drawable_info_type_t = 0;
pub type drm_drawable_info_type_t = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_update_draw {
    pub handle: drm_drawable_t,
    pub type_: ::core::ffi::c_uint,
    pub num: ::core::ffi::c_uint,
    pub data: ::core::ffi::c_ulonglong,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_auth {
    pub magic: drm_magic_t,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_irq_busid {
    #[doc = "< IRQ number"]
    pub irq: ::core::ffi::c_int,
    #[doc = "< bus number"]
    pub busnum: ::core::ffi::c_int,
    #[doc = "< device number"]
    pub devnum: ::core::ffi::c_int,
    #[doc = "< function number"]
    pub funcnum: ::core::ffi::c_int,
}
#[doc = "< Wait for specific vblank sequence number"]
pub const drm_vblank_seq_type__DRM_VBLANK_ABSOLUTE: drm_vblank_seq_type = 0;
#[doc = "< Wait for given number of vblanks"]
pub const drm_vblank_seq_type__DRM_VBLANK_RELATIVE: drm_vblank_seq_type = 1;
pub const drm_vblank_seq_type__DRM_VBLANK_HIGH_CRTC_MASK: drm_vblank_seq_type = 62;
#[doc = "< Send event instead of blocking"]
pub const drm_vblank_seq_type__DRM_VBLANK_EVENT: drm_vblank_seq_type = 67108864;
#[doc = "< Scheduled buffer swap should flip"]
pub const drm_vblank_seq_type__DRM_VBLANK_FLIP: drm_vblank_seq_type = 134217728;
#[doc = "< If missed, wait for next vblank"]
pub const drm_vblank_seq_type__DRM_VBLANK_NEXTONMISS: drm_vblank_seq_type = 268435456;
#[doc = "< Secondary display controller"]
pub const drm_vblank_seq_type__DRM_VBLANK_SECONDARY: drm_vblank_seq_type = 536870912;
#[doc = "< Send signal instead of blocking, unsupported"]
pub const drm_vblank_seq_type__DRM_VBLANK_SIGNAL: drm_vblank_seq_type = 1073741824;
pub type drm_vblank_seq_type = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_wait_vblank_request {
    pub type_: drm_vblank_seq_type,
    pub sequence: ::core::ffi::c_uint,
    pub signal: ::core::ffi::c_ulong,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_wait_vblank_reply {
    pub type_: drm_vblank_seq_type,
    pub sequence: ::core::ffi::c_uint,
    pub tval_sec: ::core::ffi::c_long,
    pub tval_usec: ::core::ffi::c_long,
}
#[repr(C)]
#[derive(Copy, Clone)]
pub union drm_wait_vblank {
    pub request: drm_wait_vblank_request,
    pub reply: drm_wait_vblank_reply,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_modeset_ctl {
    pub crtc: __u32,
    pub cmd: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_agp_mode {
    #[doc = "< AGP mode"]
    pub mode: ::core::ffi::c_ulong,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_agp_buffer {
    #[doc = "< In bytes -- will round to page boundary"]
    pub size: ::core::ffi::c_ulong,
    #[doc = "< Used for binding / unbinding"]
    pub handle: ::core::ffi::c_ulong,
    #[doc = "< Type of memory to allocate"]
    pub type_: ::core::ffi::c_ulong,
    #[doc = "< Physical used by i810"]
    pub physical: ::core::ffi::c_ulong,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_agp_binding {
    #[doc = "< From drm_agp_buffer"]
    pub handle: ::core::ffi::c_ulong,
    #[doc = "< In bytes -- will round to page boundary"]
    pub offset: ::core::ffi::c_ulong,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_agp_info {
    pub agp_version_major: ::core::ffi::c_int,
    pub agp_version_minor: ::core::ffi::c_int,
    pub mode: ::core::ffi::c_ulong,
    pub aperture_base: ::core::ffi::c_ulong,
    pub aperture_size: ::core::ffi::c_ulong,
    pub memory_allowed: ::core::ffi::c_ulong,
    pub memory_used: ::core::ffi::c_ulong,
    pub id_vendor: ::core::ffi::c_ushort,
    pub id_device: ::core::ffi::c_ushort,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_scatter_gather {
    #[doc = "< In bytes -- will round to page boundary"]
    pub size: ::core::ffi::c_ulong,
    #[doc = "< Used for mapping / unmapping"]
    pub handle: ::core::ffi::c_ulong,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_set_version {
    pub drm_di_major: ::core::ffi::c_int,
    pub drm_di_minor: ::core::ffi::c_int,
    pub drm_dd_major: ::core::ffi::c_int,
    pub drm_dd_minor: ::core::ffi::c_int,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_gem_close {
    #[doc = " Handle of the object to be closed."]
    pub handle: __u32,
    pub pad: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_gem_flink {
    #[doc = " Handle for the object being named"]
    pub handle: __u32,
    #[doc = " Returned global name"]
    pub name: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_gem_open {
    #[doc = " Name of object being opened"]
    pub name: __u32,
    #[doc = " Returned handle for the object"]
    pub handle: __u32,
    #[doc = " Returned size of the object"]
    pub size: __u64,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_get_cap {
    pub capability: __u64,
    pub value: __u64,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_set_client_cap {
    pub capability: __u64,
    pub value: __u64,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_prime_handle {
    pub handle: __u32,
    #[doc = " Flags.. only applicable for handle->fd"]
    pub flags: __u32,
    #[doc = " Returned dmabuf file descriptor"]
    pub fd: __s32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_syncobj_create {
    pub handle: __u32,
    pub flags: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_syncobj_destroy {
    pub handle: __u32,
    pub pad: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_syncobj_handle {
    pub handle: __u32,
    pub flags: __u32,
    pub fd: __s32,
    pub pad: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_syncobj_transfer {
    pub src_handle: __u32,
    pub dst_handle: __u32,
    pub src_point: __u64,
    pub dst_point: __u64,
    pub flags: __u32,
    pub pad: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_syncobj_wait {
    pub handles: __u64,
    pub timeout_nsec: __s64,
    pub count_handles: __u32,
    pub flags: __u32,
    pub first_signaled: __u32,
    pub pad: __u32,
    #[doc = " @deadline_nsec - fence deadline hint\n\n Deadline hint, in absolute CLOCK_MONOTONIC, to set on backing\n fence(s) if the DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE flag is\n set."]
    pub deadline_nsec: __u64,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_syncobj_timeline_wait {
    pub handles: __u64,
    pub points: __u64,
    pub timeout_nsec: __s64,
    pub count_handles: __u32,
    pub flags: __u32,
    pub first_signaled: __u32,
    pub pad: __u32,
    #[doc = " @deadline_nsec - fence deadline hint\n\n Deadline hint, in absolute CLOCK_MONOTONIC, to set on backing\n fence(s) if the DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE flag is\n set."]
    pub deadline_nsec: __u64,
}
#[doc = " struct drm_syncobj_eventfd\n @handle: syncobj handle.\n @flags: Zero to wait for the point to be signalled, or\n         &DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE to wait for a fence to be\n         available for the point.\n @point: syncobj timeline point (set to zero for binary syncobjs).\n @fd: Existing eventfd to sent events to.\n @pad: Must be zero.\n\n Register an eventfd to be signalled by a syncobj. The eventfd counter will\n be incremented by one."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_syncobj_eventfd {
    pub handle: __u32,
    pub flags: __u32,
    pub point: __u64,
    pub fd: __s32,
    pub pad: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_syncobj_array {
    pub handles: __u64,
    pub count_handles: __u32,
    pub pad: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_syncobj_timeline_array {
    pub handles: __u64,
    pub points: __u64,
    pub count_handles: __u32,
    pub flags: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_crtc_get_sequence {
    pub crtc_id: __u32,
    pub active: __u32,
    pub sequence: __u64,
    pub sequence_ns: __s64,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_crtc_queue_sequence {
    pub crtc_id: __u32,
    pub flags: __u32,
    pub sequence: __u64,
    pub user_data: __u64,
}
#[doc = " struct drm_mode_modeinfo - Display mode information.\n @clock: pixel clock in kHz\n @hdisplay: horizontal display size\n @hsync_start: horizontal sync start\n @hsync_end: horizontal sync end\n @htotal: horizontal total size\n @hskew: horizontal skew\n @vdisplay: vertical display size\n @vsync_start: vertical sync start\n @vsync_end: vertical sync end\n @vtotal: vertical total size\n @vscan: vertical scan\n @vrefresh: approximate vertical refresh rate in Hz\n @flags: bitmask of misc. flags, see DRM_MODE_FLAG_* defines\n @type: bitmask of type flags, see DRM_MODE_TYPE_* defines\n @name: string describing the mode resolution\n\n This is the user-space API display mode information structure. For the\n kernel version see struct drm_display_mode."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_modeinfo {
    pub clock: __u32,
    pub hdisplay: __u16,
    pub hsync_start: __u16,
    pub hsync_end: __u16,
    pub htotal: __u16,
    pub hskew: __u16,
    pub vdisplay: __u16,
    pub vsync_start: __u16,
    pub vsync_end: __u16,
    pub vtotal: __u16,
    pub vscan: __u16,
    pub vrefresh: __u32,
    pub flags: __u32,
    pub type_: __u32,
    pub name: [::core::ffi::c_char; 32usize],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_card_res {
    pub fb_id_ptr: __u64,
    pub crtc_id_ptr: __u64,
    pub connector_id_ptr: __u64,
    pub encoder_id_ptr: __u64,
    pub count_fbs: __u32,
    pub count_crtcs: __u32,
    pub count_connectors: __u32,
    pub count_encoders: __u32,
    pub min_width: __u32,
    pub max_width: __u32,
    pub min_height: __u32,
    pub max_height: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_crtc {
    pub set_connectors_ptr: __u64,
    pub count_connectors: __u32,
    #[doc = "< Id"]
    pub crtc_id: __u32,
    #[doc = "< Id of framebuffer"]
    pub fb_id: __u32,
    #[doc = "< x Position on the framebuffer"]
    pub x: __u32,
    #[doc = "< y Position on the framebuffer"]
    pub y: __u32,
    pub gamma_size: __u32,
    pub mode_valid: __u32,
    pub mode: drm_mode_modeinfo,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_set_plane {
    pub plane_id: __u32,
    pub crtc_id: __u32,
    pub fb_id: __u32,
    pub flags: __u32,
    pub crtc_x: __s32,
    pub crtc_y: __s32,
    pub crtc_w: __u32,
    pub crtc_h: __u32,
    pub src_x: __u32,
    pub src_y: __u32,
    pub src_h: __u32,
    pub src_w: __u32,
}
#[doc = " struct drm_mode_get_plane - Get plane metadata.\n\n Userspace can perform a GETPLANE ioctl to retrieve information about a\n plane.\n\n To retrieve the number of formats supported, set @count_format_types to zero\n and call the ioctl. @count_format_types will be updated with the value.\n\n To retrieve these formats, allocate an array with the memory needed to store\n @count_format_types formats. Point @format_type_ptr to this array and call\n the ioctl again (with @count_format_types still set to the value returned in\n the first ioctl call)."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_get_plane {
    #[doc = " @plane_id: Object ID of the plane whose information should be\n retrieved. Set by caller."]
    pub plane_id: __u32,
    #[doc = " @crtc_id: Object ID of the current CRTC."]
    pub crtc_id: __u32,
    #[doc = " @fb_id: Object ID of the current fb."]
    pub fb_id: __u32,
    #[doc = " @possible_crtcs: Bitmask of CRTC's compatible with the plane. CRTC's\n are created and they receive an index, which corresponds to their\n position in the bitmask. Bit N corresponds to\n :ref:`CRTC index<crtc_index>` N."]
    pub possible_crtcs: __u32,
    #[doc = " @gamma_size: Never used."]
    pub gamma_size: __u32,
    #[doc = " @count_format_types: Number of formats."]
    pub count_format_types: __u32,
    #[doc = " @format_type_ptr: Pointer to ``__u32`` array of formats that are\n supported by the plane. These formats do not require modifiers."]
    pub format_type_ptr: __u64,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_get_plane_res {
    pub plane_id_ptr: __u64,
    pub count_planes: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_get_encoder {
    pub encoder_id: __u32,
    pub encoder_type: __u32,
    #[doc = "< Id of crtc"]
    pub crtc_id: __u32,
    pub possible_crtcs: __u32,
    pub possible_clones: __u32,
}
pub const drm_mode_subconnector_DRM_MODE_SUBCONNECTOR_Automatic: drm_mode_subconnector = 0;
pub const drm_mode_subconnector_DRM_MODE_SUBCONNECTOR_Unknown: drm_mode_subconnector = 0;
pub const drm_mode_subconnector_DRM_MODE_SUBCONNECTOR_VGA: drm_mode_subconnector = 1;
pub const drm_mode_subconnector_DRM_MODE_SUBCONNECTOR_DVID: drm_mode_subconnector = 3;
pub const drm_mode_subconnector_DRM_MODE_SUBCONNECTOR_DVIA: drm_mode_subconnector = 4;
pub const drm_mode_subconnector_DRM_MODE_SUBCONNECTOR_Composite: drm_mode_subconnector = 5;
pub const drm_mode_subconnector_DRM_MODE_SUBCONNECTOR_SVIDEO: drm_mode_subconnector = 6;
pub const drm_mode_subconnector_DRM_MODE_SUBCONNECTOR_Component: drm_mode_subconnector = 8;
pub const drm_mode_subconnector_DRM_MODE_SUBCONNECTOR_SCART: drm_mode_subconnector = 9;
pub const drm_mode_subconnector_DRM_MODE_SUBCONNECTOR_DisplayPort: drm_mode_subconnector = 10;
pub const drm_mode_subconnector_DRM_MODE_SUBCONNECTOR_HDMIA: drm_mode_subconnector = 11;
pub const drm_mode_subconnector_DRM_MODE_SUBCONNECTOR_Native: drm_mode_subconnector = 15;
pub const drm_mode_subconnector_DRM_MODE_SUBCONNECTOR_Wireless: drm_mode_subconnector = 18;
pub type drm_mode_subconnector = ::core::ffi::c_uint;
#[doc = " struct drm_mode_get_connector - Get connector metadata.\n\n User-space can perform a GETCONNECTOR ioctl to retrieve information about a\n connector. User-space is expected to retrieve encoders, modes and properties\n by performing this ioctl at least twice: the first time to retrieve the\n number of elements, the second time to retrieve the elements themselves.\n\n To retrieve the number of elements, set @count_props and @count_encoders to\n zero, set @count_modes to 1, and set @modes_ptr to a temporary struct\n drm_mode_modeinfo element.\n\n To retrieve the elements, allocate arrays for @encoders_ptr, @modes_ptr,\n @props_ptr and @prop_values_ptr, then set @count_modes, @count_props and\n @count_encoders to their capacity.\n\n Performing the ioctl only twice may be racy: the number of elements may have\n changed with a hotplug event in-between the two ioctls. User-space is\n expected to retry the last ioctl until the number of elements stabilizes.\n The kernel won't fill any array which doesn't have the expected length.\n\n **Force-probing a connector**\n\n If the @count_modes field is set to zero and the DRM client is the current\n DRM master, the kernel will perform a forced probe on the connector to\n refresh the connector status, modes and EDID. A forced-probe can be slow,\n might cause flickering and the ioctl will block.\n\n User-space needs to force-probe connectors to ensure their metadata is\n up-to-date at startup and after receiving a hot-plug event. User-space\n may perform a forced-probe when the user explicitly requests it. User-space\n shouldn't perform a forced-probe in other situations."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_get_connector {
    #[doc = " @encoders_ptr: Pointer to ``__u32`` array of object IDs."]
    pub encoders_ptr: __u64,
    #[doc = " @modes_ptr: Pointer to struct drm_mode_modeinfo array."]
    pub modes_ptr: __u64,
    #[doc = " @props_ptr: Pointer to ``__u32`` array of property IDs."]
    pub props_ptr: __u64,
    #[doc = " @prop_values_ptr: Pointer to ``__u64`` array of property values."]
    pub prop_values_ptr: __u64,
    #[doc = " @count_modes: Number of modes."]
    pub count_modes: __u32,
    #[doc = " @count_props: Number of properties."]
    pub count_props: __u32,
    #[doc = " @count_encoders: Number of encoders."]
    pub count_encoders: __u32,
    #[doc = " @encoder_id: Object ID of the current encoder."]
    pub encoder_id: __u32,
    #[doc = " @connector_id: Object ID of the connector."]
    pub connector_id: __u32,
    #[doc = " @connector_type: Type of the connector.\n\n See DRM_MODE_CONNECTOR_* defines."]
    pub connector_type: __u32,
    #[doc = " @connector_type_id: Type-specific connector number.\n\n This is not an object ID. This is a per-type connector number. Each\n (type, type_id) combination is unique across all connectors of a DRM\n device.\n\n The (type, type_id) combination is not a stable identifier: the\n type_id can change depending on the driver probe order."]
    pub connector_type_id: __u32,
    #[doc = " @connection: Status of the connector.\n\n See enum drm_connector_status."]
    pub connection: __u32,
    #[doc = " @mm_width: Width of the connected sink in millimeters."]
    pub mm_width: __u32,
    #[doc = " @mm_height: Height of the connected sink in millimeters."]
    pub mm_height: __u32,
    #[doc = " @subpixel: Subpixel order of the connected sink.\n\n See enum subpixel_order."]
    pub subpixel: __u32,
    #[doc = " @pad: Padding, must be zero."]
    pub pad: __u32,
}
#[doc = " struct drm_mode_property_enum - Description for an enum/bitfield entry.\n @value: numeric value for this enum entry.\n @name: symbolic name for this enum entry.\n\n See struct drm_property_enum for details."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_property_enum {
    pub value: __u64,
    pub name: [::core::ffi::c_char; 32usize],
}
#[doc = " struct drm_mode_get_property - Get property metadata.\n\n User-space can perform a GETPROPERTY ioctl to retrieve information about a\n property. The same property may be attached to multiple objects, see\n \"Modeset Base Object Abstraction\".\n\n The meaning of the @values_ptr field changes depending on the property type.\n See &drm_property.flags for more details.\n\n The @enum_blob_ptr and @count_enum_blobs fields are only meaningful when the\n property has the type &DRM_MODE_PROP_ENUM or &DRM_MODE_PROP_BITMASK. For\n backwards compatibility, the kernel will always set @count_enum_blobs to\n zero when the property has the type &DRM_MODE_PROP_BLOB. User-space must\n ignore these two fields if the property has a different type.\n\n User-space is expected to retrieve values and enums by performing this ioctl\n at least twice: the first time to retrieve the number of elements, the\n second time to retrieve the elements themselves.\n\n To retrieve the number of elements, set @count_values and @count_enum_blobs\n to zero, then call the ioctl. @count_values will be updated with the number\n of elements. If the property has the type &DRM_MODE_PROP_ENUM or\n &DRM_MODE_PROP_BITMASK, @count_enum_blobs will be updated as well.\n\n To retrieve the elements themselves, allocate an array for @values_ptr and\n set @count_values to its capacity. If the property has the type\n &DRM_MODE_PROP_ENUM or &DRM_MODE_PROP_BITMASK, allocate an array for\n @enum_blob_ptr and set @count_enum_blobs to its capacity. Calling the ioctl\n again will fill the arrays."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_get_property {
    #[doc = " @values_ptr: Pointer to a ``__u64`` array."]
    pub values_ptr: __u64,
    #[doc = " @enum_blob_ptr: Pointer to a struct drm_mode_property_enum array."]
    pub enum_blob_ptr: __u64,
    #[doc = " @prop_id: Object ID of the property which should be retrieved. Set\n by the caller."]
    pub prop_id: __u32,
    #[doc = " @flags: ``DRM_MODE_PROP_*`` bitfield. See &drm_property.flags for\n a definition of the flags."]
    pub flags: __u32,
    #[doc = " @name: Symbolic property name. User-space should use this field to\n recognize properties."]
    pub name: [::core::ffi::c_char; 32usize],
    #[doc = " @count_values: Number of elements in @values_ptr."]
    pub count_values: __u32,
    #[doc = " @count_enum_blobs: Number of elements in @enum_blob_ptr."]
    pub count_enum_blobs: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_connector_set_property {
    pub value: __u64,
    pub prop_id: __u32,
    pub connector_id: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_obj_get_properties {
    pub props_ptr: __u64,
    pub prop_values_ptr: __u64,
    pub count_props: __u32,
    pub obj_id: __u32,
    pub obj_type: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_obj_set_property {
    pub value: __u64,
    pub prop_id: __u32,
    pub obj_id: __u32,
    pub obj_type: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_get_blob {
    pub blob_id: __u32,
    pub length: __u32,
    pub data: __u64,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_fb_cmd {
    pub fb_id: __u32,
    pub width: __u32,
    pub height: __u32,
    pub pitch: __u32,
    pub bpp: __u32,
    pub depth: __u32,
    pub handle: __u32,
}
#[doc = " struct drm_mode_fb_cmd2 - Frame-buffer metadata.\n\n This struct holds frame-buffer metadata. There are two ways to use it:\n\n - User-space can fill this struct and perform a &DRM_IOCTL_MODE_ADDFB2\n   ioctl to register a new frame-buffer. The new frame-buffer object ID will\n   be set by the kernel in @fb_id.\n - User-space can set @fb_id and perform a &DRM_IOCTL_MODE_GETFB2 ioctl to\n   fetch metadata about an existing frame-buffer.\n\n In case of planar formats, this struct allows up to 4 buffer objects with\n offsets and pitches per plane. The pitch and offset order are dictated by\n the format FourCC as defined by ``drm_fourcc.h``, e.g. NV12 is described as:\n\n     YUV 4:2:0 image with a plane of 8-bit Y samples followed by an\n     interleaved U/V plane containing 8-bit 2x2 subsampled colour difference\n     samples.\n\n So it would consist of a Y plane at ``offsets[0]`` and a UV plane at\n ``offsets[1]``.\n\n To accommodate tiled, compressed, etc formats, a modifier can be specified.\n For more information see the \"Format Modifiers\" section. Note that even\n though it looks like we have a modifier per-plane, we in fact do not. The\n modifier for each plane must be identical. Thus all combinations of\n different data layouts for multi-plane formats must be enumerated as\n separate modifiers.\n\n All of the entries in @handles, @pitches, @offsets and @modifier must be\n zero when unused. Warning, for @offsets and @modifier zero can't be used to\n figure out whether the entry is used or not since it's a valid value (a zero\n offset is common, and a zero modifier is &DRM_FORMAT_MOD_LINEAR)."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_fb_cmd2 {
    #[doc = " @fb_id: Object ID of the frame-buffer."]
    pub fb_id: __u32,
    #[doc = " @width: Width of the frame-buffer."]
    pub width: __u32,
    #[doc = " @height: Height of the frame-buffer."]
    pub height: __u32,
    #[doc = " @pixel_format: FourCC format code, see ``DRM_FORMAT_*`` constants in\n ``drm_fourcc.h``."]
    pub pixel_format: __u32,
    #[doc = " @flags: Frame-buffer flags (see &DRM_MODE_FB_INTERLACED and\n &DRM_MODE_FB_MODIFIERS)."]
    pub flags: __u32,
    #[doc = " @handles: GEM buffer handle, one per plane. Set to 0 if the plane is\n unused. The same handle can be used for multiple planes."]
    pub handles: [__u32; 4usize],
    #[doc = " @pitches: Pitch (aka. stride) in bytes, one per plane."]
    pub pitches: [__u32; 4usize],
    #[doc = " @offsets: Offset into the buffer in bytes, one per plane."]
    pub offsets: [__u32; 4usize],
    #[doc = " @modifier: Format modifier, one per plane. See ``DRM_FORMAT_MOD_*``\n constants in ``drm_fourcc.h``. All planes must use the same\n modifier. Ignored unless &DRM_MODE_FB_MODIFIERS is set in @flags."]
    pub modifier: [__u64; 4usize],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_fb_dirty_cmd {
    pub fb_id: __u32,
    pub flags: __u32,
    pub color: __u32,
    pub num_clips: __u32,
    pub clips_ptr: __u64,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_mode_cmd {
    pub connector_id: __u32,
    pub mode: drm_mode_modeinfo,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_cursor {
    pub flags: __u32,
    pub crtc_id: __u32,
    pub x: __s32,
    pub y: __s32,
    pub width: __u32,
    pub height: __u32,
    pub handle: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_cursor2 {
    pub flags: __u32,
    pub crtc_id: __u32,
    pub x: __s32,
    pub y: __s32,
    pub width: __u32,
    pub height: __u32,
    pub handle: __u32,
    pub hot_x: __s32,
    pub hot_y: __s32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_crtc_lut {
    pub crtc_id: __u32,
    pub gamma_size: __u32,
    pub red: __u64,
    pub green: __u64,
    pub blue: __u64,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_color_ctm {
    pub matrix: [__u64; 9usize],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_color_lut {
    pub red: __u16,
    pub green: __u16,
    pub blue: __u16,
    pub reserved: __u16,
}
#[doc = " struct drm_plane_size_hint - Plane size hints\n\n The plane SIZE_HINTS property blob contains an\n array of struct drm_plane_size_hint."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_plane_size_hint {
    pub width: __u16,
    pub height: __u16,
}
#[doc = " struct hdr_metadata_infoframe - HDR Metadata Infoframe Data.\n\n HDR Metadata Infoframe as per CTA 861.G spec. This is expected\n to match exactly with the spec.\n\n Userspace is expected to pass the metadata information as per\n the format described in this structure."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct hdr_metadata_infoframe {
    #[doc = " @eotf: Electro-Optical Transfer Function (EOTF)\n used in the stream."]
    pub eotf: __u8,
    #[doc = " @metadata_type: Static_Metadata_Descriptor_ID."]
    pub metadata_type: __u8,
    pub display_primaries: [hdr_metadata_infoframe__bindgen_ty_1; 3usize],
    pub white_point: hdr_metadata_infoframe__bindgen_ty_2,
    #[doc = " @max_display_mastering_luminance: Max Mastering Display Luminance.\n This value is coded as an unsigned 16-bit value in units of 1 cd/m2,\n where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2."]
    pub max_display_mastering_luminance: __u16,
    #[doc = " @min_display_mastering_luminance: Min Mastering Display Luminance.\n This value is coded as an unsigned 16-bit value in units of\n 0.0001 cd/m2, where 0x0001 represents 0.0001 cd/m2 and 0xFFFF\n represents 6.5535 cd/m2."]
    pub min_display_mastering_luminance: __u16,
    #[doc = " @max_cll: Max Content Light Level.\n This value is coded as an unsigned 16-bit value in units of 1 cd/m2,\n where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2."]
    pub max_cll: __u16,
    #[doc = " @max_fall: Max Frame Average Light Level.\n This value is coded as an unsigned 16-bit value in units of 1 cd/m2,\n where 0x0001 represents 1 cd/m2 and 0xFFFF represents 65535 cd/m2."]
    pub max_fall: __u16,
}
#[doc = " @display_primaries: Color Primaries of the Data.\n These are coded as unsigned 16-bit values in units of\n 0.00002, where 0x0000 represents zero and 0xC350\n represents 1.0000.\n @display_primaries.x: X coordinate of color primary.\n @display_primaries.y: Y coordinate of color primary."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct hdr_metadata_infoframe__bindgen_ty_1 {
    pub x: __u16,
    pub y: __u16,
}
#[doc = " @white_point: White Point of Colorspace Data.\n These are coded as unsigned 16-bit values in units of\n 0.00002, where 0x0000 represents zero and 0xC350\n represents 1.0000.\n @white_point.x: X coordinate of whitepoint of color primary.\n @white_point.y: Y coordinate of whitepoint of color primary."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct hdr_metadata_infoframe__bindgen_ty_2 {
    pub x: __u16,
    pub y: __u16,
}
#[doc = " struct hdr_output_metadata - HDR output metadata\n\n Metadata Information to be passed from userspace"]
#[repr(C)]
#[derive(Copy, Clone)]
pub struct hdr_output_metadata {
    #[doc = " @metadata_type: Static_Metadata_Descriptor_ID."]
    pub metadata_type: __u32,
    pub __bindgen_anon_1: hdr_output_metadata__bindgen_ty_1,
}
#[doc = " @hdmi_metadata_type1: HDR Metadata Infoframe."]
#[repr(C)]
#[derive(Copy, Clone)]
pub union hdr_output_metadata__bindgen_ty_1 {
    pub hdmi_metadata_type1: hdr_metadata_infoframe,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_crtc_page_flip {
    pub crtc_id: __u32,
    pub fb_id: __u32,
    pub flags: __u32,
    pub reserved: __u32,
    pub user_data: __u64,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_crtc_page_flip_target {
    pub crtc_id: __u32,
    pub fb_id: __u32,
    pub flags: __u32,
    pub sequence: __u32,
    pub user_data: __u64,
}
#[doc = " struct drm_mode_create_dumb - Create a KMS dumb buffer for scanout.\n @height: buffer height in pixels\n @width: buffer width in pixels\n @bpp: bits per pixel\n @flags: must be zero\n @handle: buffer object handle\n @pitch: number of bytes between two consecutive lines\n @size: size of the whole buffer in bytes\n\n User-space fills @height, @width, @bpp and @flags. If the IOCTL succeeds,\n the kernel fills @handle, @pitch and @size."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_create_dumb {
    pub height: __u32,
    pub width: __u32,
    pub bpp: __u32,
    pub flags: __u32,
    pub handle: __u32,
    pub pitch: __u32,
    pub size: __u64,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_map_dumb {
    #[doc = " Handle for the object being mapped."]
    pub handle: __u32,
    pub pad: __u32,
    #[doc = " Fake offset to use for subsequent mmap call\n\n This is a fixed-size type for 32/64 compatibility."]
    pub offset: __u64,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_destroy_dumb {
    pub handle: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_atomic {
    pub flags: __u32,
    pub count_objs: __u32,
    pub objs_ptr: __u64,
    pub count_props_ptr: __u64,
    pub props_ptr: __u64,
    pub prop_values_ptr: __u64,
    pub reserved: __u64,
    pub user_data: __u64,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_format_modifier_blob {
    pub version: __u32,
    pub flags: __u32,
    pub count_formats: __u32,
    pub formats_offset: __u32,
    pub count_modifiers: __u32,
    pub modifiers_offset: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_format_modifier {
    pub formats: __u64,
    pub offset: __u32,
    pub pad: __u32,
    pub modifier: __u64,
}
#[doc = " struct drm_mode_create_blob - Create New blob property\n\n Create a new 'blob' data property, copying length bytes from data pointer,\n and returning new blob ID."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_create_blob {
    #[doc = " @data: Pointer to data to copy."]
    pub data: __u64,
    #[doc = " @length: Length of data to copy."]
    pub length: __u32,
    #[doc = " @blob_id: Return: new property ID."]
    pub blob_id: __u32,
}
#[doc = " struct drm_mode_destroy_blob - Destroy user blob\n @blob_id: blob_id to destroy\n\n Destroy a user-created blob property.\n\n User-space can release blobs as soon as they do not need to refer to them by\n their blob object ID.  For instance, if you are using a MODE_ID blob in an\n atomic commit and you will not make another commit re-using the same ID, you\n can destroy the blob as soon as the commit has been issued, without waiting\n for it to complete."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_destroy_blob {
    pub blob_id: __u32,
}
#[doc = " struct drm_mode_create_lease - Create lease\n\n Lease mode resources, creating another drm_master.\n\n The @object_ids array must reference at least one CRTC, one connector and\n one plane if &DRM_CLIENT_CAP_UNIVERSAL_PLANES is enabled. Alternatively,\n the lease can be completely empty."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_create_lease {
    #[doc = " @object_ids: Pointer to array of object ids (__u32)"]
    pub object_ids: __u64,
    #[doc = " @object_count: Number of object ids"]
    pub object_count: __u32,
    #[doc = " @flags: flags for new FD (O_CLOEXEC, etc)"]
    pub flags: __u32,
    #[doc = " @lessee_id: Return: unique identifier for lessee."]
    pub lessee_id: __u32,
    #[doc = " @fd: Return: file descriptor to new drm_master file"]
    pub fd: __u32,
}
#[doc = " struct drm_mode_list_lessees - List lessees\n\n List lesses from a drm_master."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_list_lessees {
    #[doc = " @count_lessees: Number of lessees.\n\n On input, provides length of the array.\n On output, provides total number. No\n more than the input number will be written\n back, so two calls can be used to get\n the size and then the data."]
    pub count_lessees: __u32,
    #[doc = " @pad: Padding."]
    pub pad: __u32,
    #[doc = " @lessees_ptr: Pointer to lessees.\n\n Pointer to __u64 array of lessee ids"]
    pub lessees_ptr: __u64,
}
#[doc = " struct drm_mode_get_lease - Get Lease\n\n Get leased objects."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_get_lease {
    #[doc = " @count_objects: Number of leased objects.\n\n On input, provides length of the array.\n On output, provides total number. No\n more than the input number will be written\n back, so two calls can be used to get\n the size and then the data."]
    pub count_objects: __u32,
    #[doc = " @pad: Padding."]
    pub pad: __u32,
    #[doc = " @objects_ptr: Pointer to objects.\n\n Pointer to __u32 array of object ids."]
    pub objects_ptr: __u64,
}
#[doc = " struct drm_mode_revoke_lease - Revoke lease"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_revoke_lease {
    #[doc = " @lessee_id: Unique ID of lessee"]
    pub lessee_id: __u32,
}
#[doc = " struct drm_mode_rect - Two dimensional rectangle.\n @x1: Horizontal starting coordinate (inclusive).\n @y1: Vertical starting coordinate (inclusive).\n @x2: Horizontal ending coordinate (exclusive).\n @y2: Vertical ending coordinate (exclusive).\n\n With drm subsystem using struct drm_rect to manage rectangular area this\n export it to user-space.\n\n Currently used by drm_mode_atomic blob property FB_DAMAGE_CLIPS."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_rect {
    pub x1: __s32,
    pub y1: __s32,
    pub x2: __s32,
    pub y2: __s32,
}
#[doc = " struct drm_mode_closefb\n @fb_id: Framebuffer ID.\n @pad: Must be zero."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_mode_closefb {
    pub fb_id: __u32,
    pub pad: __u32,
}
#[doc = " struct drm_event - Header for DRM events\n @type: event type.\n @length: total number of payload bytes (including header).\n\n This struct is a header for events written back to user-space on the DRM FD.\n A read on the DRM FD will always only return complete events: e.g. if the\n read buffer is 100 bytes large and there are two 64 byte events pending,\n only one will be returned.\n\n Event types 0 - 0x7fffffff are generic DRM events, 0x80000000 and\n up are chipset specific. Generic DRM events include &DRM_EVENT_VBLANK,\n &DRM_EVENT_FLIP_COMPLETE and &DRM_EVENT_CRTC_SEQUENCE."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_event {
    pub type_: __u32,
    pub length: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_event_vblank {
    pub base: drm_event,
    pub user_data: __u64,
    pub tv_sec: __u32,
    pub tv_usec: __u32,
    pub sequence: __u32,
    pub crtc_id: __u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drm_event_crtc_sequence {
    pub base: drm_event,
    pub user_data: __u64,
    pub time_ns: __s64,
    pub sequence: __u64,
}
pub type drm_clip_rect_t = drm_clip_rect;
pub type drm_drawable_info_t = drm_drawable_info;
pub type drm_tex_region_t = drm_tex_region;
pub type drm_hw_lock_t = drm_hw_lock;
pub type drm_version_t = drm_version;
pub type drm_unique_t = drm_unique;
pub type drm_list_t = drm_list;
pub type drm_block_t = drm_block;
pub type drm_control_t = drm_control;
pub use self::drm_map_flags as drm_map_flags_t;
pub use self::drm_map_type as drm_map_type_t;
pub type drm_ctx_priv_map_t = drm_ctx_priv_map;
pub type drm_map_t = drm_map;
pub type drm_client_t = drm_client;
pub use self::drm_stat_type as drm_stat_type_t;
pub type drm_stats_t = drm_stats;
pub use self::drm_lock_flags as drm_lock_flags_t;
pub type drm_lock_t = drm_lock;
pub use self::drm_dma_flags as drm_dma_flags_t;
pub type drm_buf_desc_t = drm_buf_desc;
pub type drm_buf_info_t = drm_buf_info;
pub type drm_buf_free_t = drm_buf_free;
pub type drm_buf_pub_t = drm_buf_pub;
pub type drm_buf_map_t = drm_buf_map;
pub type drm_dma_t = drm_dma;
pub type drm_wait_vblank_t = drm_wait_vblank;
pub type drm_agp_mode_t = drm_agp_mode;
pub use self::drm_ctx_flags as drm_ctx_flags_t;
pub type drm_ctx_t = drm_ctx;
pub type drm_ctx_res_t = drm_ctx_res;
pub type drm_draw_t = drm_draw;
pub type drm_update_draw_t = drm_update_draw;
pub type drm_auth_t = drm_auth;
pub type drm_irq_busid_t = drm_irq_busid;
pub use self::drm_vblank_seq_type as drm_vblank_seq_type_t;
pub type drm_agp_buffer_t = drm_agp_buffer;
pub type drm_agp_binding_t = drm_agp_binding;
pub type drm_agp_info_t = drm_agp_info;
pub type drm_scatter_gather_t = drm_scatter_gather;
pub type drm_set_version_t = drm_set_version;
pub type drmSize = ::core::ffi::c_uint;
pub type drmSizePtr = *mut ::core::ffi::c_uint;
pub type drmAddress = *mut ::core::ffi::c_void;
pub type drmAddressPtr = *mut *mut ::core::ffi::c_void;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmServerInfo {
    pub debug_print: ::core::option::Option<
        unsafe extern "C" fn(
            format: *const ::core::ffi::c_char,
            ap: *mut __va_list_tag,
        ) -> ::core::ffi::c_int,
    >,
    pub load_module: ::core::option::Option<
        unsafe extern "C" fn(name: *const ::core::ffi::c_char) -> ::core::ffi::c_int,
    >,
    pub get_perms:
        ::core::option::Option<unsafe extern "C" fn(arg1: *mut gid_t, arg2: *mut mode_t)>,
}
pub type drmServerInfo = _drmServerInfo;
pub type drmServerInfoPtr = *mut _drmServerInfo;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct drmHashEntry {
    pub fd: ::core::ffi::c_int,
    pub f: ::core::option::Option<
        unsafe extern "C" fn(
            arg1: ::core::ffi::c_int,
            arg2: *mut ::core::ffi::c_void,
            arg3: *mut ::core::ffi::c_void,
        ),
    >,
    pub tagTable: *mut ::core::ffi::c_void,
}
#[doc = " Driver version information.\n\n \\sa drmGetVersion() and drmSetVersion()."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmVersion {
    #[doc = "< Major version"]
    pub version_major: ::core::ffi::c_int,
    #[doc = "< Minor version"]
    pub version_minor: ::core::ffi::c_int,
    #[doc = "< Patch level"]
    pub version_patchlevel: ::core::ffi::c_int,
    #[doc = "< Length of name buffer"]
    pub name_len: ::core::ffi::c_int,
    #[doc = "< Name of driver"]
    pub name: *mut ::core::ffi::c_char,
    #[doc = "< Length of date buffer"]
    pub date_len: ::core::ffi::c_int,
    #[doc = "< User-space buffer to hold date"]
    pub date: *mut ::core::ffi::c_char,
    #[doc = "< Length of desc buffer"]
    pub desc_len: ::core::ffi::c_int,
    #[doc = "< User-space buffer to hold desc"]
    pub desc: *mut ::core::ffi::c_char,
}
#[doc = " Driver version information.\n\n \\sa drmGetVersion() and drmSetVersion()."]
pub type drmVersion = _drmVersion;
#[doc = " Driver version information.\n\n \\sa drmGetVersion() and drmSetVersion()."]
pub type drmVersionPtr = *mut _drmVersion;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmStats {
    #[doc = "< Number of data"]
    pub count: ::core::ffi::c_ulong,
    pub data: [_drmStats__bindgen_ty_1; 15usize],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmStats__bindgen_ty_1 {
    #[doc = "< Value from kernel"]
    pub value: ::core::ffi::c_ulong,
    #[doc = "< Suggested format for long_name"]
    pub long_format: *const ::core::ffi::c_char,
    #[doc = "< Long name for value"]
    pub long_name: *const ::core::ffi::c_char,
    #[doc = "< Suggested format for rate_name"]
    pub rate_format: *const ::core::ffi::c_char,
    #[doc = "< Short name for value per second"]
    pub rate_name: *const ::core::ffi::c_char,
    #[doc = "< True if value (vs. counter)"]
    pub isvalue: ::core::ffi::c_int,
    #[doc = "< Multiplier names (e.g., \"KGM\")"]
    pub mult_names: *const ::core::ffi::c_char,
    #[doc = "< Multiplier value (e.g., 1024)"]
    pub mult: ::core::ffi::c_int,
    #[doc = "< Suggest only in verbose output"]
    pub verbose: ::core::ffi::c_int,
}
pub type drmStatsT = _drmStats;
#[doc = "< WC, no caching, no core dump"]
pub const drmMapType_DRM_FRAME_BUFFER: drmMapType = 0;
#[doc = "< no caching, no core dump"]
pub const drmMapType_DRM_REGISTERS: drmMapType = 1;
#[doc = "< shared, cached"]
pub const drmMapType_DRM_SHM: drmMapType = 2;
#[doc = "< AGP/GART"]
pub const drmMapType_DRM_AGP: drmMapType = 3;
#[doc = "< PCI scatter/gather"]
pub const drmMapType_DRM_SCATTER_GATHER: drmMapType = 4;
#[doc = "< PCI consistent"]
pub const drmMapType_DRM_CONSISTENT: drmMapType = 5;
pub type drmMapType = ::core::ffi::c_uint;
#[doc = "< Cannot be mapped to client-virtual"]
pub const drmMapFlags_DRM_RESTRICTED: drmMapFlags = 1;
#[doc = "< Read-only in client-virtual"]
pub const drmMapFlags_DRM_READ_ONLY: drmMapFlags = 2;
#[doc = "< Physical pages locked"]
pub const drmMapFlags_DRM_LOCKED: drmMapFlags = 4;
#[doc = "< Kernel requires access"]
pub const drmMapFlags_DRM_KERNEL: drmMapFlags = 8;
#[doc = "< Use write-combining, if available"]
pub const drmMapFlags_DRM_WRITE_COMBINING: drmMapFlags = 16;
#[doc = "< SHM page that contains lock"]
pub const drmMapFlags_DRM_CONTAINS_LOCK: drmMapFlags = 32;
#[doc = "< Removable mapping"]
pub const drmMapFlags_DRM_REMOVABLE: drmMapFlags = 64;
pub type drmMapFlags = ::core::ffi::c_uint;
#[doc = "<\n Block until buffer dispatched.\n\n \\note the buffer may not yet have been\n processed by the hardware -- getting a\n hardware lock with the hardware quiescent\n will ensure that the buffer has been\n processed."]
pub const drmDMAFlags_DRM_DMA_BLOCK: drmDMAFlags = 1;
#[doc = "< Dispatch while lock held"]
pub const drmDMAFlags_DRM_DMA_WHILE_LOCKED: drmDMAFlags = 2;
#[doc = "< High priority dispatch"]
pub const drmDMAFlags_DRM_DMA_PRIORITY: drmDMAFlags = 4;
#[doc = "< Wait for free buffers"]
pub const drmDMAFlags_DRM_DMA_WAIT: drmDMAFlags = 16;
#[doc = "< Smaller-than-requested buffers OK"]
pub const drmDMAFlags_DRM_DMA_SMALLER_OK: drmDMAFlags = 32;
#[doc = "< Larger-than-requested buffers OK"]
pub const drmDMAFlags_DRM_DMA_LARGER_OK: drmDMAFlags = 64;
#[doc = " \\warning These values *MUST* match drm.h"]
pub type drmDMAFlags = ::core::ffi::c_uint;
pub const drmBufDescFlags_DRM_PAGE_ALIGN: drmBufDescFlags = 1;
pub const drmBufDescFlags_DRM_AGP_BUFFER: drmBufDescFlags = 2;
pub const drmBufDescFlags_DRM_SG_BUFFER: drmBufDescFlags = 4;
pub const drmBufDescFlags_DRM_FB_BUFFER: drmBufDescFlags = 8;
pub const drmBufDescFlags_DRM_PCI_BUFFER_RO: drmBufDescFlags = 16;
pub type drmBufDescFlags = ::core::ffi::c_uint;
#[doc = "< Wait until hardware is ready for DMA"]
pub const drmLockFlags_DRM_LOCK_READY: drmLockFlags = 1;
#[doc = "< Wait until hardware quiescent"]
pub const drmLockFlags_DRM_LOCK_QUIESCENT: drmLockFlags = 2;
#[doc = "< Flush this context's DMA queue first"]
pub const drmLockFlags_DRM_LOCK_FLUSH: drmLockFlags = 4;
#[doc = "< Flush all DMA queues first"]
pub const drmLockFlags_DRM_LOCK_FLUSH_ALL: drmLockFlags = 8;
#[doc = "< Halt all current and future queues"]
pub const drmLockFlags_DRM_HALT_ALL_QUEUES: drmLockFlags = 16;
#[doc = "< Halt all current queues"]
pub const drmLockFlags_DRM_HALT_CUR_QUEUES: drmLockFlags = 32;
pub type drmLockFlags = ::core::ffi::c_uint;
#[doc = "< This context is preserved and\nnever swapped."]
pub const drm_context_tFlags_DRM_CONTEXT_PRESERVED: drm_context_tFlags = 1;
#[doc = "< This context is for 2D rendering only."]
pub const drm_context_tFlags_DRM_CONTEXT_2DONLY: drm_context_tFlags = 2;
pub type drm_context_tFlags = ::core::ffi::c_uint;
pub type drm_context_tFlagsPtr = *mut drm_context_tFlags;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmBufDesc {
    #[doc = "< Number of buffers of this size"]
    pub count: ::core::ffi::c_int,
    #[doc = "< Size in bytes"]
    pub size: ::core::ffi::c_int,
    #[doc = "< Low water mark"]
    pub low_mark: ::core::ffi::c_int,
    #[doc = "< High water mark"]
    pub high_mark: ::core::ffi::c_int,
}
pub type drmBufDesc = _drmBufDesc;
pub type drmBufDescPtr = *mut _drmBufDesc;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmBufInfo {
    #[doc = "< Number of buffers described in list"]
    pub count: ::core::ffi::c_int,
    #[doc = "< List of buffer descriptions"]
    pub list: drmBufDescPtr,
}
pub type drmBufInfo = _drmBufInfo;
pub type drmBufInfoPtr = *mut _drmBufInfo;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmBuf {
    #[doc = "< Index into the master buffer list"]
    pub idx: ::core::ffi::c_int,
    #[doc = "< Buffer size"]
    pub total: ::core::ffi::c_int,
    #[doc = "< Amount of buffer in use (for DMA)"]
    pub used: ::core::ffi::c_int,
    #[doc = "< Address"]
    pub address: drmAddress,
}
pub type drmBuf = _drmBuf;
pub type drmBufPtr = *mut _drmBuf;
#[doc = " Buffer mapping information.\n\n Used by drmMapBufs() and drmUnmapBufs() to store information about the\n mapped buffers."]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmBufMap {
    #[doc = "< Number of buffers mapped"]
    pub count: ::core::ffi::c_int,
    #[doc = "< Buffers"]
    pub list: drmBufPtr,
}
#[doc = " Buffer mapping information.\n\n Used by drmMapBufs() and drmUnmapBufs() to store information about the\n mapped buffers."]
pub type drmBufMap = _drmBufMap;
#[doc = " Buffer mapping information.\n\n Used by drmMapBufs() and drmUnmapBufs() to store information about the\n mapped buffers."]
pub type drmBufMapPtr = *mut _drmBufMap;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmLock {
    pub lock: ::core::ffi::c_uint,
    pub padding: [::core::ffi::c_char; 60usize],
}
pub type drmLock = _drmLock;
pub type drmLockPtr = *mut _drmLock;
#[doc = " Indices here refer to the offset into\n list in drmBufInfo"]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmDMAReq {
    #[doc = "< Context handle"]
    pub context: drm_context_t,
    #[doc = "< Number of buffers to send"]
    pub send_count: ::core::ffi::c_int,
    #[doc = "< List of handles to buffers"]
    pub send_list: *mut ::core::ffi::c_int,
    #[doc = "< Lengths of data to send, in bytes"]
    pub send_sizes: *mut ::core::ffi::c_int,
    #[doc = "< Flags"]
    pub flags: drmDMAFlags,
    #[doc = "< Number of buffers requested"]
    pub request_count: ::core::ffi::c_int,
    #[doc = "< Desired size of buffers requested"]
    pub request_size: ::core::ffi::c_int,
    #[doc = "< Buffer information"]
    pub request_list: *mut ::core::ffi::c_int,
    #[doc = "< Minimum acceptable sizes"]
    pub request_sizes: *mut ::core::ffi::c_int,
    #[doc = "< Number of buffers granted at this size"]
    pub granted_count: ::core::ffi::c_int,
}
#[doc = " Indices here refer to the offset into\n list in drmBufInfo"]
pub type drmDMAReq = _drmDMAReq;
#[doc = " Indices here refer to the offset into\n list in drmBufInfo"]
pub type drmDMAReqPtr = *mut _drmDMAReq;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmRegion {
    pub handle: drm_handle_t,
    pub offset: ::core::ffi::c_uint,
    pub size: drmSize,
    pub map: drmAddress,
}
pub type drmRegion = _drmRegion;
pub type drmRegionPtr = *mut _drmRegion;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmTextureRegion {
    pub next: ::core::ffi::c_uchar,
    pub prev: ::core::ffi::c_uchar,
    pub in_use: ::core::ffi::c_uchar,
    #[doc = "< Explicitly pad this out"]
    pub padding: ::core::ffi::c_uchar,
    pub age: ::core::ffi::c_uint,
}
pub type drmTextureRegion = _drmTextureRegion;
pub type drmTextureRegionPtr = *mut _drmTextureRegion;
#[doc = "< Wait for specific vblank sequence number"]
pub const drmVBlankSeqType_DRM_VBLANK_ABSOLUTE: drmVBlankSeqType = 0;
#[doc = "< Wait for given number of vblanks"]
pub const drmVBlankSeqType_DRM_VBLANK_RELATIVE: drmVBlankSeqType = 1;
pub const drmVBlankSeqType_DRM_VBLANK_HIGH_CRTC_MASK: drmVBlankSeqType = 62;
#[doc = "< Send event instead of blocking"]
pub const drmVBlankSeqType_DRM_VBLANK_EVENT: drmVBlankSeqType = 67108864;
#[doc = "< Scheduled buffer swap should flip"]
pub const drmVBlankSeqType_DRM_VBLANK_FLIP: drmVBlankSeqType = 134217728;
#[doc = "< If missed, wait for next vblank"]
pub const drmVBlankSeqType_DRM_VBLANK_NEXTONMISS: drmVBlankSeqType = 268435456;
#[doc = "< Secondary display controller"]
pub const drmVBlankSeqType_DRM_VBLANK_SECONDARY: drmVBlankSeqType = 536870912;
pub const drmVBlankSeqType_DRM_VBLANK_SIGNAL: drmVBlankSeqType = 1073741824;
pub type drmVBlankSeqType = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmVBlankReq {
    pub type_: drmVBlankSeqType,
    pub sequence: ::core::ffi::c_uint,
    pub signal: ::core::ffi::c_ulong,
}
pub type drmVBlankReq = _drmVBlankReq;
pub type drmVBlankReqPtr = *mut _drmVBlankReq;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmVBlankReply {
    pub type_: drmVBlankSeqType,
    pub sequence: ::core::ffi::c_uint,
    pub tval_sec: ::core::ffi::c_long,
    pub tval_usec: ::core::ffi::c_long,
}
pub type drmVBlankReply = _drmVBlankReply;
pub type drmVBlankReplyPtr = *mut _drmVBlankReply;
#[repr(C)]
#[derive(Copy, Clone)]
pub union _drmVBlank {
    pub request: drmVBlankReq,
    pub reply: drmVBlankReply,
}
pub type drmVBlank = _drmVBlank;
pub type drmVBlankPtr = *mut _drmVBlank;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmSetVersion {
    pub drm_di_major: ::core::ffi::c_int,
    pub drm_di_minor: ::core::ffi::c_int,
    pub drm_dd_major: ::core::ffi::c_int,
    pub drm_dd_minor: ::core::ffi::c_int,
}
pub type drmSetVersion = _drmSetVersion;
pub type drmSetVersionPtr = *mut _drmSetVersion;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmEventContext {
    pub version: ::core::ffi::c_int,
    pub vblank_handler: ::core::option::Option<
        unsafe extern "C" fn(
            fd: ::core::ffi::c_int,
            sequence: ::core::ffi::c_uint,
            tv_sec: ::core::ffi::c_uint,
            tv_usec: ::core::ffi::c_uint,
            user_data: *mut ::core::ffi::c_void,
        ),
    >,
    pub page_flip_handler: ::core::option::Option<
        unsafe extern "C" fn(
            fd: ::core::ffi::c_int,
            sequence: ::core::ffi::c_uint,
            tv_sec: ::core::ffi::c_uint,
            tv_usec: ::core::ffi::c_uint,
            user_data: *mut ::core::ffi::c_void,
        ),
    >,
    pub page_flip_handler2: ::core::option::Option<
        unsafe extern "C" fn(
            fd: ::core::ffi::c_int,
            sequence: ::core::ffi::c_uint,
            tv_sec: ::core::ffi::c_uint,
            tv_usec: ::core::ffi::c_uint,
            crtc_id: ::core::ffi::c_uint,
            user_data: *mut ::core::ffi::c_void,
        ),
    >,
    pub sequence_handler: ::core::option::Option<
        unsafe extern "C" fn(fd: ::core::ffi::c_int, sequence: u64, ns: u64, user_data: u64),
    >,
}
pub type drmEventContext = _drmEventContext;
pub type drmEventContextPtr = *mut _drmEventContext;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmPciBusInfo {
    pub domain: u16,
    pub bus: u8,
    pub dev: u8,
    pub func: u8,
}
pub type drmPciBusInfo = _drmPciBusInfo;
pub type drmPciBusInfoPtr = *mut _drmPciBusInfo;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmPciDeviceInfo {
    pub vendor_id: u16,
    pub device_id: u16,
    pub subvendor_id: u16,
    pub subdevice_id: u16,
    pub revision_id: u8,
}
pub type drmPciDeviceInfo = _drmPciDeviceInfo;
pub type drmPciDeviceInfoPtr = *mut _drmPciDeviceInfo;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmUsbBusInfo {
    pub bus: u8,
    pub dev: u8,
}
pub type drmUsbBusInfo = _drmUsbBusInfo;
pub type drmUsbBusInfoPtr = *mut _drmUsbBusInfo;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmUsbDeviceInfo {
    pub vendor: u16,
    pub product: u16,
}
pub type drmUsbDeviceInfo = _drmUsbDeviceInfo;
pub type drmUsbDeviceInfoPtr = *mut _drmUsbDeviceInfo;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmPlatformBusInfo {
    pub fullname: [::core::ffi::c_char; 512usize],
}
pub type drmPlatformBusInfo = _drmPlatformBusInfo;
pub type drmPlatformBusInfoPtr = *mut _drmPlatformBusInfo;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmPlatformDeviceInfo {
    pub compatible: *mut *mut ::core::ffi::c_char,
}
pub type drmPlatformDeviceInfo = _drmPlatformDeviceInfo;
pub type drmPlatformDeviceInfoPtr = *mut _drmPlatformDeviceInfo;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmHost1xBusInfo {
    pub fullname: [::core::ffi::c_char; 512usize],
}
pub type drmHost1xBusInfo = _drmHost1xBusInfo;
pub type drmHost1xBusInfoPtr = *mut _drmHost1xBusInfo;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmHost1xDeviceInfo {
    pub compatible: *mut *mut ::core::ffi::c_char,
}
pub type drmHost1xDeviceInfo = _drmHost1xDeviceInfo;
pub type drmHost1xDeviceInfoPtr = *mut _drmHost1xDeviceInfo;
#[repr(C)]
#[derive(Copy, Clone)]
pub struct _drmDevice {
    pub nodes: *mut *mut ::core::ffi::c_char,
    pub available_nodes: ::core::ffi::c_int,
    pub bustype: ::core::ffi::c_int,
    pub businfo: _drmDevice__bindgen_ty_1,
    pub deviceinfo: _drmDevice__bindgen_ty_2,
}
#[repr(C)]
#[derive(Copy, Clone)]
pub union _drmDevice__bindgen_ty_1 {
    pub pci: drmPciBusInfoPtr,
    pub usb: drmUsbBusInfoPtr,
    pub platform: drmPlatformBusInfoPtr,
    pub host1x: drmHost1xBusInfoPtr,
}
#[repr(C)]
#[derive(Copy, Clone)]
pub union _drmDevice__bindgen_ty_2 {
    pub pci: drmPciDeviceInfoPtr,
    pub usb: drmUsbDeviceInfoPtr,
    pub platform: drmPlatformDeviceInfoPtr,
    pub host1x: drmHost1xDeviceInfoPtr,
}
pub type drmDevice = _drmDevice;
pub type drmDevicePtr = *mut _drmDevice;
pub type wchar_t = ::core::ffi::c_int;
#[repr(C)]
#[repr(align(16))]
#[derive(Debug, Copy, Clone)]
pub struct max_align_t {
    pub __clang_max_align_nonce1: ::core::ffi::c_longlong,
    pub __bindgen_padding_0: u64,
    pub __clang_max_align_nonce2: u128,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmModeRes {
    pub count_fbs: ::core::ffi::c_int,
    pub fbs: *mut u32,
    pub count_crtcs: ::core::ffi::c_int,
    pub crtcs: *mut u32,
    pub count_connectors: ::core::ffi::c_int,
    pub connectors: *mut u32,
    pub count_encoders: ::core::ffi::c_int,
    pub encoders: *mut u32,
    pub min_width: u32,
    pub max_width: u32,
    pub min_height: u32,
    pub max_height: u32,
}
pub type drmModeRes = _drmModeRes;
pub type drmModeResPtr = *mut _drmModeRes;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmModeModeInfo {
    pub clock: u32,
    pub hdisplay: u16,
    pub hsync_start: u16,
    pub hsync_end: u16,
    pub htotal: u16,
    pub hskew: u16,
    pub vdisplay: u16,
    pub vsync_start: u16,
    pub vsync_end: u16,
    pub vtotal: u16,
    pub vscan: u16,
    pub vrefresh: u32,
    pub flags: u32,
    pub type_: u32,
    pub name: [::core::ffi::c_char; 32usize],
}
pub type drmModeModeInfo = _drmModeModeInfo;
pub type drmModeModeInfoPtr = *mut _drmModeModeInfo;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmModeFB {
    pub fb_id: u32,
    pub width: u32,
    pub height: u32,
    pub pitch: u32,
    pub bpp: u32,
    pub depth: u32,
    pub handle: u32,
}
pub type drmModeFB = _drmModeFB;
pub type drmModeFBPtr = *mut _drmModeFB;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmModeFB2 {
    pub fb_id: u32,
    pub width: u32,
    pub height: u32,
    pub pixel_format: u32,
    pub modifier: u64,
    pub flags: u32,
    pub handles: [u32; 4usize],
    pub pitches: [u32; 4usize],
    pub offsets: [u32; 4usize],
}
pub type drmModeFB2 = _drmModeFB2;
pub type drmModeFB2Ptr = *mut _drmModeFB2;
pub type drmModeClip = drm_clip_rect;
pub type drmModeClipPtr = *mut drm_clip_rect;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmModePropertyBlob {
    pub id: u32,
    pub length: u32,
    pub data: *mut ::core::ffi::c_void,
}
pub type drmModePropertyBlobRes = _drmModePropertyBlob;
pub type drmModePropertyBlobPtr = *mut _drmModePropertyBlob;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmModeProperty {
    pub prop_id: u32,
    pub flags: u32,
    pub name: [::core::ffi::c_char; 32usize],
    pub count_values: ::core::ffi::c_int,
    pub values: *mut u64,
    pub count_enums: ::core::ffi::c_int,
    pub enums: *mut drm_mode_property_enum,
    pub count_blobs: ::core::ffi::c_int,
    pub blob_ids: *mut u32,
}
pub type drmModePropertyRes = _drmModeProperty;
pub type drmModePropertyPtr = *mut _drmModeProperty;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmModeCrtc {
    pub crtc_id: u32,
    #[doc = "< FB id to connect to 0 = disconnect"]
    pub buffer_id: u32,
    #[doc = "< Position on the framebuffer"]
    pub x: u32,
    #[doc = "< Position on the framebuffer"]
    pub y: u32,
    pub width: u32,
    pub height: u32,
    pub mode_valid: ::core::ffi::c_int,
    pub mode: drmModeModeInfo,
    #[doc = "< Number of gamma stops"]
    pub gamma_size: ::core::ffi::c_int,
}
pub type drmModeCrtc = _drmModeCrtc;
pub type drmModeCrtcPtr = *mut _drmModeCrtc;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmModeEncoder {
    pub encoder_id: u32,
    pub encoder_type: u32,
    pub crtc_id: u32,
    pub possible_crtcs: u32,
    pub possible_clones: u32,
}
pub type drmModeEncoder = _drmModeEncoder;
pub type drmModeEncoderPtr = *mut _drmModeEncoder;
pub const drmModeConnection_DRM_MODE_CONNECTED: drmModeConnection = 1;
pub const drmModeConnection_DRM_MODE_DISCONNECTED: drmModeConnection = 2;
pub const drmModeConnection_DRM_MODE_UNKNOWNCONNECTION: drmModeConnection = 3;
#[doc = " Describes the connector status.\n\n DRM_MODE_CONNECTED means that the connector has a sink plugged in.\n DRM_MODE_DISCONNECTED means the contrary. DRM_MODE_UNKNOWNCONNECTION is used\n when it could be either.\n\n User-space should first try to enable DRM_MODE_CONNECTED connectors and\n ignore other connectors. If there are no DRM_MODE_CONNECTED connectors,\n user-space should then try to probe and enable DRM_MODE_UNKNOWNCONNECTION\n connectors."]
pub type drmModeConnection = ::core::ffi::c_uint;
pub const drmModeSubPixel_DRM_MODE_SUBPIXEL_UNKNOWN: drmModeSubPixel = 1;
pub const drmModeSubPixel_DRM_MODE_SUBPIXEL_HORIZONTAL_RGB: drmModeSubPixel = 2;
pub const drmModeSubPixel_DRM_MODE_SUBPIXEL_HORIZONTAL_BGR: drmModeSubPixel = 3;
pub const drmModeSubPixel_DRM_MODE_SUBPIXEL_VERTICAL_RGB: drmModeSubPixel = 4;
pub const drmModeSubPixel_DRM_MODE_SUBPIXEL_VERTICAL_BGR: drmModeSubPixel = 5;
pub const drmModeSubPixel_DRM_MODE_SUBPIXEL_NONE: drmModeSubPixel = 6;
pub type drmModeSubPixel = ::core::ffi::c_uint;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmModeConnector {
    pub connector_id: u32,
    #[doc = "< Encoder currently connected to"]
    pub encoder_id: u32,
    pub connector_type: u32,
    pub connector_type_id: u32,
    pub connection: drmModeConnection,
    #[doc = "< HxW in millimeters"]
    pub mmWidth: u32,
    #[doc = "< HxW in millimeters"]
    pub mmHeight: u32,
    pub subpixel: drmModeSubPixel,
    pub count_modes: ::core::ffi::c_int,
    pub modes: drmModeModeInfoPtr,
    pub count_props: ::core::ffi::c_int,
    #[doc = "< List of property ids"]
    pub props: *mut u32,
    #[doc = "< List of property values"]
    pub prop_values: *mut u64,
    pub count_encoders: ::core::ffi::c_int,
    #[doc = "< List of encoder ids"]
    pub encoders: *mut u32,
}
pub type drmModeConnector = _drmModeConnector;
pub type drmModeConnectorPtr = *mut _drmModeConnector;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmModeObjectProperties {
    pub count_props: u32,
    pub props: *mut u32,
    pub prop_values: *mut u64,
}
pub type drmModeObjectProperties = _drmModeObjectProperties;
pub type drmModeObjectPropertiesPtr = *mut _drmModeObjectProperties;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmModeFormatModifierIterator {
    pub fmt_idx: u32,
    pub mod_idx: u32,
    pub fmt: u32,
    pub mod_: u64,
}
pub type drmModeFormatModifierIterator = _drmModeFormatModifierIterator;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmModePlane {
    pub count_formats: u32,
    pub formats: *mut u32,
    pub plane_id: u32,
    pub crtc_id: u32,
    pub fb_id: u32,
    pub crtc_x: u32,
    pub crtc_y: u32,
    pub x: u32,
    pub y: u32,
    pub possible_crtcs: u32,
    pub gamma_size: u32,
}
pub type drmModePlane = _drmModePlane;
pub type drmModePlanePtr = *mut _drmModePlane;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmModePlaneRes {
    pub count_planes: u32,
    pub planes: *mut u32,
}
pub type drmModePlaneRes = _drmModePlaneRes;
pub type drmModePlaneResPtr = *mut _drmModePlaneRes;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct _drmModeAtomicReq {
    _unused: [u8; 0],
}
pub type drmModeAtomicReq = _drmModeAtomicReq;
pub type drmModeAtomicReqPtr = *mut _drmModeAtomicReq;
#[repr(C)]
#[derive(Debug)]
pub struct drmModeLesseeList {
    pub count: u32,
    pub lessees: __IncompleteArrayField<u32>,
}
pub type drmModeLesseeListRes = drmModeLesseeList;
pub type drmModeLesseeListPtr = *mut drmModeLesseeList;
#[repr(C)]
#[derive(Debug)]
pub struct drmModeObjectList {
    pub count: u32,
    pub objects: __IncompleteArrayField<u32>,
}
pub type drmModeObjectListRes = drmModeObjectList;
pub type drmModeObjectListPtr = *mut drmModeObjectList;
pub type __builtin_va_list = [__va_list_tag; 1usize];
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __va_list_tag {
    pub gp_offset: ::core::ffi::c_uint,
    pub fp_offset: ::core::ffi::c_uint,
    pub overflow_arg_area: *mut ::core::ffi::c_void,
    pub reg_save_area: *mut ::core::ffi::c_void,
}
pub struct DynLibDrm {
    __library: ::libloading::Library,
    pub select: unsafe extern "C" fn(
        __nfds: ::core::ffi::c_int,
        __readfds: *mut fd_set,
        __writefds: *mut fd_set,
        __exceptfds: *mut fd_set,
        __timeout: *mut timeval,
    ) -> ::core::ffi::c_int,
    pub pselect: unsafe extern "C" fn(
        __nfds: ::core::ffi::c_int,
        __readfds: *mut fd_set,
        __writefds: *mut fd_set,
        __exceptfds: *mut fd_set,
        __timeout: *const timespec,
        __sigmask: *const __sigset_t,
    ) -> ::core::ffi::c_int,
    pub drmIoctl: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        request: ::core::ffi::c_ulong,
        arg: *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int,
    pub drmGetHashTable: unsafe extern "C" fn() -> *mut ::core::ffi::c_void,
    pub drmGetEntry: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> *mut drmHashEntry,
    pub drmAvailable: unsafe extern "C" fn() -> ::core::ffi::c_int,
    pub drmOpen: unsafe extern "C" fn(
        name: *const ::core::ffi::c_char,
        busid: *const ::core::ffi::c_char,
    ) -> ::core::ffi::c_int,
    pub drmOpenWithType: unsafe extern "C" fn(
        name: *const ::core::ffi::c_char,
        busid: *const ::core::ffi::c_char,
        type_: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int,
    pub drmOpenControl: unsafe extern "C" fn(minor: ::core::ffi::c_int) -> ::core::ffi::c_int,
    pub drmOpenRender: unsafe extern "C" fn(minor: ::core::ffi::c_int) -> ::core::ffi::c_int,
    pub drmClose: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_int,
    pub drmGetVersion: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> drmVersionPtr,
    pub drmGetLibVersion: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> drmVersionPtr,
    pub drmGetCap: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        capability: u64,
        value: *mut u64,
    ) -> ::core::ffi::c_int,
    pub drmFreeVersion: unsafe extern "C" fn(arg1: drmVersionPtr),
    pub drmGetMagic:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, magic: *mut drm_magic_t) -> ::core::ffi::c_int,
    pub drmGetBusid: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> *mut ::core::ffi::c_char,
    pub drmGetInterruptFromBusID: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        busnum: ::core::ffi::c_int,
        devnum: ::core::ffi::c_int,
        funcnum: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int,
    pub drmGetMap: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        idx: ::core::ffi::c_int,
        offset: *mut drm_handle_t,
        size: *mut drmSize,
        type_: *mut drmMapType,
        flags: *mut drmMapFlags,
        handle: *mut drm_handle_t,
        mtrr: *mut ::core::ffi::c_int,
    ) -> ::core::ffi::c_int,
    pub drmGetClient: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        idx: ::core::ffi::c_int,
        auth: *mut ::core::ffi::c_int,
        pid: *mut ::core::ffi::c_int,
        uid: *mut ::core::ffi::c_int,
        magic: *mut ::core::ffi::c_ulong,
        iocs: *mut ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int,
    pub drmGetStats:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, stats: *mut drmStatsT) -> ::core::ffi::c_int,
    pub drmSetInterfaceVersion: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        version: *mut drmSetVersion,
    ) -> ::core::ffi::c_int,
    pub drmCommandNone: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        drmCommandIndex: ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int,
    pub drmCommandRead: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        drmCommandIndex: ::core::ffi::c_ulong,
        data: *mut ::core::ffi::c_void,
        size: ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int,
    pub drmCommandWrite: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        drmCommandIndex: ::core::ffi::c_ulong,
        data: *mut ::core::ffi::c_void,
        size: ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int,
    pub drmCommandWriteRead: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        drmCommandIndex: ::core::ffi::c_ulong,
        data: *mut ::core::ffi::c_void,
        size: ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int,
    pub drmFreeBusid: unsafe extern "C" fn(busid: *const ::core::ffi::c_char),
    pub drmSetBusid: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        busid: *const ::core::ffi::c_char,
    ) -> ::core::ffi::c_int,
    pub drmAuthMagic:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, magic: drm_magic_t) -> ::core::ffi::c_int,
    pub drmAddMap: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        offset: drm_handle_t,
        size: drmSize,
        type_: drmMapType,
        flags: drmMapFlags,
        handle: *mut drm_handle_t,
    ) -> ::core::ffi::c_int,
    pub drmRmMap:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, handle: drm_handle_t) -> ::core::ffi::c_int,
    pub drmAddContextPrivateMapping: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        ctx_id: drm_context_t,
        handle: drm_handle_t,
    ) -> ::core::ffi::c_int,
    pub drmAddBufs: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        count: ::core::ffi::c_int,
        size: ::core::ffi::c_int,
        flags: drmBufDescFlags,
        agp_offset: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int,
    pub drmMarkBufs:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, low: f64, high: f64) -> ::core::ffi::c_int,
    pub drmCreateContext: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handle: *mut drm_context_t,
    ) -> ::core::ffi::c_int,
    pub drmSetContextFlags: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        context: drm_context_t,
        flags: drm_context_tFlags,
    ) -> ::core::ffi::c_int,
    pub drmGetContextFlags: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        context: drm_context_t,
        flags: drm_context_tFlagsPtr,
    ) -> ::core::ffi::c_int,
    pub drmAddContextTag: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        context: drm_context_t,
        tag: *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int,
    pub drmDelContextTag:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, context: drm_context_t) -> ::core::ffi::c_int,
    pub drmGetContextTag: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        context: drm_context_t,
    ) -> *mut ::core::ffi::c_void,
    pub drmGetReservedContextList: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        count: *mut ::core::ffi::c_int,
    ) -> *mut drm_context_t,
    pub drmFreeReservedContextList: unsafe extern "C" fn(arg1: *mut drm_context_t),
    pub drmSwitchToContext:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, context: drm_context_t) -> ::core::ffi::c_int,
    pub drmDestroyContext:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, handle: drm_context_t) -> ::core::ffi::c_int,
    pub drmCreateDrawable: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handle: *mut drm_drawable_t,
    ) -> ::core::ffi::c_int,
    pub drmDestroyDrawable:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, handle: drm_drawable_t) -> ::core::ffi::c_int,
    pub drmUpdateDrawableInfo: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handle: drm_drawable_t,
        type_: drm_drawable_info_type_t,
        num: ::core::ffi::c_uint,
        data: *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int,
    pub drmCtlInstHandler:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, irq: ::core::ffi::c_int) -> ::core::ffi::c_int,
    pub drmCtlUninstHandler: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_int,
    pub drmSetClientCap: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        capability: u64,
        value: u64,
    ) -> ::core::ffi::c_int,
    pub drmCrtcGetSequence: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        crtcId: u32,
        sequence: *mut u64,
        ns: *mut u64,
    ) -> ::core::ffi::c_int,
    pub drmCrtcQueueSequence: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        crtcId: u32,
        flags: u32,
        sequence: u64,
        sequence_queued: *mut u64,
        user_data: u64,
    ) -> ::core::ffi::c_int,
    pub drmMap: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handle: drm_handle_t,
        size: drmSize,
        address: drmAddressPtr,
    ) -> ::core::ffi::c_int,
    pub drmUnmap: unsafe extern "C" fn(address: drmAddress, size: drmSize) -> ::core::ffi::c_int,
    pub drmGetBufInfo: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> drmBufInfoPtr,
    pub drmMapBufs: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> drmBufMapPtr,
    pub drmUnmapBufs: unsafe extern "C" fn(bufs: drmBufMapPtr) -> ::core::ffi::c_int,
    pub drmDMA:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, request: drmDMAReqPtr) -> ::core::ffi::c_int,
    pub drmFreeBufs: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        count: ::core::ffi::c_int,
        list: *mut ::core::ffi::c_int,
    ) -> ::core::ffi::c_int,
    pub drmGetLock: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        context: drm_context_t,
        flags: drmLockFlags,
    ) -> ::core::ffi::c_int,
    pub drmUnlock:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, context: drm_context_t) -> ::core::ffi::c_int,
    pub drmFinish: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        context: ::core::ffi::c_int,
        flags: drmLockFlags,
    ) -> ::core::ffi::c_int,
    pub drmGetContextPrivateMapping: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        ctx_id: drm_context_t,
        handle: *mut drm_handle_t,
    ) -> ::core::ffi::c_int,
    pub drmAgpAcquire: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_int,
    pub drmAgpRelease: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_int,
    pub drmAgpEnable: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        mode: ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int,
    pub drmAgpAlloc: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        size: ::core::ffi::c_ulong,
        type_: ::core::ffi::c_ulong,
        address: *mut ::core::ffi::c_ulong,
        handle: *mut drm_handle_t,
    ) -> ::core::ffi::c_int,
    pub drmAgpFree:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, handle: drm_handle_t) -> ::core::ffi::c_int,
    pub drmAgpBind: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handle: drm_handle_t,
        offset: ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int,
    pub drmAgpUnbind:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, handle: drm_handle_t) -> ::core::ffi::c_int,
    pub drmAgpVersionMajor: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_int,
    pub drmAgpVersionMinor: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_int,
    pub drmAgpGetMode: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_ulong,
    pub drmAgpBase: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_ulong,
    pub drmAgpSize: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_ulong,
    pub drmAgpMemoryUsed: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_ulong,
    pub drmAgpMemoryAvail: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_ulong,
    pub drmAgpVendorId: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_uint,
    pub drmAgpDeviceId: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_uint,
    pub drmScatterGatherAlloc: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        size: ::core::ffi::c_ulong,
        handle: *mut drm_handle_t,
    ) -> ::core::ffi::c_int,
    pub drmScatterGatherFree:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, handle: drm_handle_t) -> ::core::ffi::c_int,
    pub drmWaitVBlank:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, vbl: drmVBlankPtr) -> ::core::ffi::c_int,
    pub drmSetServerInfo: unsafe extern "C" fn(info: drmServerInfoPtr),
    pub drmError: unsafe extern "C" fn(
        err: ::core::ffi::c_int,
        label: *const ::core::ffi::c_char,
    ) -> ::core::ffi::c_int,
    pub drmMalloc: unsafe extern "C" fn(size: ::core::ffi::c_int) -> *mut ::core::ffi::c_void,
    pub drmFree: unsafe extern "C" fn(pt: *mut ::core::ffi::c_void),
    pub drmHashCreate: unsafe extern "C" fn() -> *mut ::core::ffi::c_void,
    pub drmHashDestroy: unsafe extern "C" fn(t: *mut ::core::ffi::c_void) -> ::core::ffi::c_int,
    pub drmHashLookup: unsafe extern "C" fn(
        t: *mut ::core::ffi::c_void,
        key: ::core::ffi::c_ulong,
        value: *mut *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int,
    pub drmHashInsert: unsafe extern "C" fn(
        t: *mut ::core::ffi::c_void,
        key: ::core::ffi::c_ulong,
        value: *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int,
    pub drmHashDelete: unsafe extern "C" fn(
        t: *mut ::core::ffi::c_void,
        key: ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int,
    pub drmHashFirst: unsafe extern "C" fn(
        t: *mut ::core::ffi::c_void,
        key: *mut ::core::ffi::c_ulong,
        value: *mut *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int,
    pub drmHashNext: unsafe extern "C" fn(
        t: *mut ::core::ffi::c_void,
        key: *mut ::core::ffi::c_ulong,
        value: *mut *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int,
    pub drmRandomCreate:
        unsafe extern "C" fn(seed: ::core::ffi::c_ulong) -> *mut ::core::ffi::c_void,
    pub drmRandomDestroy:
        unsafe extern "C" fn(state: *mut ::core::ffi::c_void) -> ::core::ffi::c_int,
    pub drmRandom: unsafe extern "C" fn(state: *mut ::core::ffi::c_void) -> ::core::ffi::c_ulong,
    pub drmRandomDouble: unsafe extern "C" fn(state: *mut ::core::ffi::c_void) -> f64,
    pub drmSLCreate: unsafe extern "C" fn() -> *mut ::core::ffi::c_void,
    pub drmSLDestroy: unsafe extern "C" fn(l: *mut ::core::ffi::c_void) -> ::core::ffi::c_int,
    pub drmSLLookup: unsafe extern "C" fn(
        l: *mut ::core::ffi::c_void,
        key: ::core::ffi::c_ulong,
        value: *mut *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int,
    pub drmSLInsert: unsafe extern "C" fn(
        l: *mut ::core::ffi::c_void,
        key: ::core::ffi::c_ulong,
        value: *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int,
    pub drmSLDelete: unsafe extern "C" fn(
        l: *mut ::core::ffi::c_void,
        key: ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int,
    pub drmSLNext: unsafe extern "C" fn(
        l: *mut ::core::ffi::c_void,
        key: *mut ::core::ffi::c_ulong,
        value: *mut *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int,
    pub drmSLFirst: unsafe extern "C" fn(
        l: *mut ::core::ffi::c_void,
        key: *mut ::core::ffi::c_ulong,
        value: *mut *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int,
    pub drmSLDump: unsafe extern "C" fn(l: *mut ::core::ffi::c_void),
    pub drmSLLookupNeighbors: unsafe extern "C" fn(
        l: *mut ::core::ffi::c_void,
        key: ::core::ffi::c_ulong,
        prev_key: *mut ::core::ffi::c_ulong,
        prev_value: *mut *mut ::core::ffi::c_void,
        next_key: *mut ::core::ffi::c_ulong,
        next_value: *mut *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int,
    pub drmOpenOnce: unsafe extern "C" fn(
        unused: *mut ::core::ffi::c_void,
        BusID: *const ::core::ffi::c_char,
        newlyopened: *mut ::core::ffi::c_int,
    ) -> ::core::ffi::c_int,
    pub drmOpenOnceWithType: unsafe extern "C" fn(
        BusID: *const ::core::ffi::c_char,
        newlyopened: *mut ::core::ffi::c_int,
        type_: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int,
    pub drmCloseOnce: unsafe extern "C" fn(fd: ::core::ffi::c_int),
    pub drmMsg: unsafe extern "C" fn(format: *const ::core::ffi::c_char, ...),
    pub drmSetMaster: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_int,
    pub drmDropMaster: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_int,
    pub drmIsMaster: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_int,
    pub drmHandleEvent: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        evctx: drmEventContextPtr,
    ) -> ::core::ffi::c_int,
    pub drmGetDeviceNameFromFd:
        unsafe extern "C" fn(fd: ::core::ffi::c_int) -> *mut ::core::ffi::c_char,
    pub drmGetDeviceNameFromFd2:
        unsafe extern "C" fn(fd: ::core::ffi::c_int) -> *mut ::core::ffi::c_char,
    pub drmGetNodeTypeFromFd: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_int,
    pub drmPrimeHandleToFD: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handle: u32,
        flags: u32,
        prime_fd: *mut ::core::ffi::c_int,
    ) -> ::core::ffi::c_int,
    pub drmPrimeFDToHandle: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        prime_fd: ::core::ffi::c_int,
        handle: *mut u32,
    ) -> ::core::ffi::c_int,
    pub drmCloseBufferHandle:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, handle: u32) -> ::core::ffi::c_int,
    pub drmGetPrimaryDeviceNameFromFd:
        unsafe extern "C" fn(fd: ::core::ffi::c_int) -> *mut ::core::ffi::c_char,
    pub drmGetRenderDeviceNameFromFd:
        unsafe extern "C" fn(fd: ::core::ffi::c_int) -> *mut ::core::ffi::c_char,
    pub drmGetDevice: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        device: *mut drmDevicePtr,
    ) -> ::core::ffi::c_int,
    pub drmFreeDevice: unsafe extern "C" fn(device: *mut drmDevicePtr),
    pub drmGetDevices: unsafe extern "C" fn(
        devices: *mut drmDevicePtr,
        max_devices: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int,
    pub drmFreeDevices: unsafe extern "C" fn(devices: *mut drmDevicePtr, count: ::core::ffi::c_int),
    pub drmGetDevice2: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        flags: u32,
        device: *mut drmDevicePtr,
    ) -> ::core::ffi::c_int,
    pub drmGetDevices2: unsafe extern "C" fn(
        flags: u32,
        devices: *mut drmDevicePtr,
        max_devices: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int,
    pub drmGetDeviceFromDevId: unsafe extern "C" fn(
        dev_id: dev_t,
        flags: u32,
        device: *mut drmDevicePtr,
    ) -> ::core::ffi::c_int,
    pub drmGetNodeTypeFromDevId: unsafe extern "C" fn(devid: dev_t) -> ::core::ffi::c_int,
    pub drmDevicesEqual:
        unsafe extern "C" fn(a: drmDevicePtr, b: drmDevicePtr) -> ::core::ffi::c_int,
    pub drmSyncobjCreate: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        flags: u32,
        handle: *mut u32,
    ) -> ::core::ffi::c_int,
    pub drmSyncobjDestroy:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, handle: u32) -> ::core::ffi::c_int,
    pub drmSyncobjHandleToFD: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handle: u32,
        obj_fd: *mut ::core::ffi::c_int,
    ) -> ::core::ffi::c_int,
    pub drmSyncobjFDToHandle: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        obj_fd: ::core::ffi::c_int,
        handle: *mut u32,
    ) -> ::core::ffi::c_int,
    pub drmSyncobjImportSyncFile: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handle: u32,
        sync_file_fd: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int,
    pub drmSyncobjExportSyncFile: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handle: u32,
        sync_file_fd: *mut ::core::ffi::c_int,
    ) -> ::core::ffi::c_int,
    pub drmSyncobjWait: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handles: *mut u32,
        num_handles: ::core::ffi::c_uint,
        timeout_nsec: i64,
        flags: ::core::ffi::c_uint,
        first_signaled: *mut u32,
    ) -> ::core::ffi::c_int,
    pub drmSyncobjReset: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handles: *const u32,
        handle_count: u32,
    ) -> ::core::ffi::c_int,
    pub drmSyncobjSignal: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handles: *const u32,
        handle_count: u32,
    ) -> ::core::ffi::c_int,
    pub drmSyncobjTimelineSignal: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handles: *const u32,
        points: *mut u64,
        handle_count: u32,
    ) -> ::core::ffi::c_int,
    pub drmSyncobjTimelineWait: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handles: *mut u32,
        points: *mut u64,
        num_handles: ::core::ffi::c_uint,
        timeout_nsec: i64,
        flags: ::core::ffi::c_uint,
        first_signaled: *mut u32,
    ) -> ::core::ffi::c_int,
    pub drmSyncobjQuery: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handles: *mut u32,
        points: *mut u64,
        handle_count: u32,
    ) -> ::core::ffi::c_int,
    pub drmSyncobjQuery2: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handles: *mut u32,
        points: *mut u64,
        handle_count: u32,
        flags: u32,
    ) -> ::core::ffi::c_int,
    pub drmSyncobjTransfer: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        dst_handle: u32,
        dst_point: u64,
        src_handle: u32,
        src_point: u64,
        flags: u32,
    ) -> ::core::ffi::c_int,
    pub drmSyncobjEventfd: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handle: u32,
        point: u64,
        ev_fd: ::core::ffi::c_int,
        flags: u32,
    ) -> ::core::ffi::c_int,
    pub drmGetFormatModifierVendor: unsafe extern "C" fn(modifier: u64) -> *mut ::core::ffi::c_char,
    pub drmGetFormatModifierName: unsafe extern "C" fn(modifier: u64) -> *mut ::core::ffi::c_char,
    pub drmGetFormatName: unsafe extern "C" fn(format: u32) -> *mut ::core::ffi::c_char,
    pub drmModeFreeModeInfo: unsafe extern "C" fn(ptr: drmModeModeInfoPtr),
    pub drmModeFreeResources: unsafe extern "C" fn(ptr: drmModeResPtr),
    pub drmModeFreeFB: unsafe extern "C" fn(ptr: drmModeFBPtr),
    pub drmModeFreeFB2: unsafe extern "C" fn(ptr: drmModeFB2Ptr),
    pub drmModeFreeCrtc: unsafe extern "C" fn(ptr: drmModeCrtcPtr),
    pub drmModeFreeConnector: unsafe extern "C" fn(ptr: drmModeConnectorPtr),
    pub drmModeFreeEncoder: unsafe extern "C" fn(ptr: drmModeEncoderPtr),
    pub drmModeFreePlane: unsafe extern "C" fn(ptr: drmModePlanePtr),
    pub drmModeFreePlaneResources: unsafe extern "C" fn(ptr: drmModePlaneResPtr),
    pub drmIsKMS: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> ::core::ffi::c_int,
    pub drmModeGetResources: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> drmModeResPtr,
    pub drmModeGetFB: unsafe extern "C" fn(fd: ::core::ffi::c_int, bufferId: u32) -> drmModeFBPtr,
    pub drmModeGetFB2: unsafe extern "C" fn(fd: ::core::ffi::c_int, bufferId: u32) -> drmModeFB2Ptr,
    pub drmModeAddFB: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        width: u32,
        height: u32,
        depth: u8,
        bpp: u8,
        pitch: u32,
        bo_handle: u32,
        buf_id: *mut u32,
    ) -> ::core::ffi::c_int,
    pub drmModeAddFB2: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        width: u32,
        height: u32,
        pixel_format: u32,
        bo_handles: *const u32,
        pitches: *const u32,
        offsets: *const u32,
        buf_id: *mut u32,
        flags: u32,
    ) -> ::core::ffi::c_int,
    pub drmModeAddFB2WithModifiers: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        width: u32,
        height: u32,
        pixel_format: u32,
        bo_handles: *const u32,
        pitches: *const u32,
        offsets: *const u32,
        modifier: *const u64,
        buf_id: *mut u32,
        flags: u32,
    ) -> ::core::ffi::c_int,
    pub drmModeRmFB:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, bufferId: u32) -> ::core::ffi::c_int,
    pub drmModeCloseFB:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, buffer_id: u32) -> ::core::ffi::c_int,
    pub drmModeDirtyFB: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        bufferId: u32,
        clips: drmModeClipPtr,
        num_clips: u32,
    ) -> ::core::ffi::c_int,
    pub drmModeGetCrtc: unsafe extern "C" fn(fd: ::core::ffi::c_int, crtcId: u32) -> drmModeCrtcPtr,
    pub drmModeSetCrtc: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        crtcId: u32,
        bufferId: u32,
        x: u32,
        y: u32,
        connectors: *mut u32,
        count: ::core::ffi::c_int,
        mode: drmModeModeInfoPtr,
    ) -> ::core::ffi::c_int,
    pub drmModeSetCursor: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        crtcId: u32,
        bo_handle: u32,
        width: u32,
        height: u32,
    ) -> ::core::ffi::c_int,
    pub drmModeSetCursor2: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        crtcId: u32,
        bo_handle: u32,
        width: u32,
        height: u32,
        hot_x: i32,
        hot_y: i32,
    ) -> ::core::ffi::c_int,
    pub drmModeMoveCursor: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        crtcId: u32,
        x: ::core::ffi::c_int,
        y: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int,
    pub drmModeGetEncoder:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, encoder_id: u32) -> drmModeEncoderPtr,
    pub drmModeGetConnector:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, connectorId: u32) -> drmModeConnectorPtr,
    pub drmModeGetConnectorCurrent:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, connector_id: u32) -> drmModeConnectorPtr,
    pub drmModeConnectorGetPossibleCrtcs:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, connector: *const drmModeConnector) -> u32,
    pub drmModeAttachMode: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        connectorId: u32,
        mode_info: drmModeModeInfoPtr,
    ) -> ::core::ffi::c_int,
    pub drmModeDetachMode: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        connectorId: u32,
        mode_info: drmModeModeInfoPtr,
    ) -> ::core::ffi::c_int,
    pub drmModeGetProperty:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, propertyId: u32) -> drmModePropertyPtr,
    pub drmModeFreeProperty: unsafe extern "C" fn(ptr: drmModePropertyPtr),
    pub drmModeGetPropertyBlob:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, blob_id: u32) -> drmModePropertyBlobPtr,
    pub drmModeFormatModifierBlobIterNext: unsafe extern "C" fn(
        blob: *const drmModePropertyBlobRes,
        iter: *mut drmModeFormatModifierIterator,
    ) -> bool,
    pub drmModeFreePropertyBlob: unsafe extern "C" fn(ptr: drmModePropertyBlobPtr),
    pub drmModeConnectorSetProperty: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        connector_id: u32,
        property_id: u32,
        value: u64,
    ) -> ::core::ffi::c_int,
    pub drmCheckModesettingSupported:
        unsafe extern "C" fn(busid: *const ::core::ffi::c_char) -> ::core::ffi::c_int,
    pub drmModeCrtcSetGamma: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        crtc_id: u32,
        size: u32,
        red: *const u16,
        green: *const u16,
        blue: *const u16,
    ) -> ::core::ffi::c_int,
    pub drmModeCrtcGetGamma: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        crtc_id: u32,
        size: u32,
        red: *mut u16,
        green: *mut u16,
        blue: *mut u16,
    ) -> ::core::ffi::c_int,
    pub drmModePageFlip: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        crtc_id: u32,
        fb_id: u32,
        flags: u32,
        user_data: *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int,
    pub drmModePageFlipTarget: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        crtc_id: u32,
        fb_id: u32,
        flags: u32,
        user_data: *mut ::core::ffi::c_void,
        target_vblank: u32,
    ) -> ::core::ffi::c_int,
    pub drmModeGetPlaneResources:
        unsafe extern "C" fn(fd: ::core::ffi::c_int) -> drmModePlaneResPtr,
    pub drmModeGetPlane:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, plane_id: u32) -> drmModePlanePtr,
    pub drmModeSetPlane: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        plane_id: u32,
        crtc_id: u32,
        fb_id: u32,
        flags: u32,
        crtc_x: i32,
        crtc_y: i32,
        crtc_w: u32,
        crtc_h: u32,
        src_x: u32,
        src_y: u32,
        src_w: u32,
        src_h: u32,
    ) -> ::core::ffi::c_int,
    pub drmModeObjectGetProperties: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        object_id: u32,
        object_type: u32,
    ) -> drmModeObjectPropertiesPtr,
    pub drmModeFreeObjectProperties: unsafe extern "C" fn(ptr: drmModeObjectPropertiesPtr),
    pub drmModeObjectSetProperty: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        object_id: u32,
        object_type: u32,
        property_id: u32,
        value: u64,
    ) -> ::core::ffi::c_int,
    pub drmModeAtomicAlloc: unsafe extern "C" fn() -> drmModeAtomicReqPtr,
    pub drmModeAtomicDuplicate:
        unsafe extern "C" fn(req: drmModeAtomicReqPtr) -> drmModeAtomicReqPtr,
    pub drmModeAtomicMerge: unsafe extern "C" fn(
        base: drmModeAtomicReqPtr,
        augment: drmModeAtomicReqPtr,
    ) -> ::core::ffi::c_int,
    pub drmModeAtomicFree: unsafe extern "C" fn(req: drmModeAtomicReqPtr),
    pub drmModeAtomicGetCursor:
        unsafe extern "C" fn(req: drmModeAtomicReqPtr) -> ::core::ffi::c_int,
    pub drmModeAtomicSetCursor:
        unsafe extern "C" fn(req: drmModeAtomicReqPtr, cursor: ::core::ffi::c_int),
    pub drmModeAtomicAddProperty: unsafe extern "C" fn(
        req: drmModeAtomicReqPtr,
        object_id: u32,
        property_id: u32,
        value: u64,
    ) -> ::core::ffi::c_int,
    pub drmModeAtomicCommit: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        req: drmModeAtomicReqPtr,
        flags: u32,
        user_data: *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int,
    pub drmModeCreatePropertyBlob: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        data: *const ::core::ffi::c_void,
        size: usize,
        id: *mut u32,
    ) -> ::core::ffi::c_int,
    pub drmModeDestroyPropertyBlob:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, id: u32) -> ::core::ffi::c_int,
    pub drmModeCreateLease: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        objects: *const u32,
        num_objects: ::core::ffi::c_int,
        flags: ::core::ffi::c_int,
        lessee_id: *mut u32,
    ) -> ::core::ffi::c_int,
    pub drmModeListLessees: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> drmModeLesseeListPtr,
    pub drmModeGetLease: unsafe extern "C" fn(fd: ::core::ffi::c_int) -> drmModeObjectListPtr,
    pub drmModeRevokeLease:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, lessee_id: u32) -> ::core::ffi::c_int,
    pub drmModeGetConnectorTypeName:
        unsafe extern "C" fn(connector_type: u32) -> *const ::core::ffi::c_char,
    pub drmModeCreateDumbBuffer: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        width: u32,
        height: u32,
        bpp: u32,
        flags: u32,
        handle: *mut u32,
        pitch: *mut u32,
        size: *mut u64,
    ) -> ::core::ffi::c_int,
    pub drmModeDestroyDumbBuffer:
        unsafe extern "C" fn(fd: ::core::ffi::c_int, handle: u32) -> ::core::ffi::c_int,
    pub drmModeMapDumbBuffer: unsafe extern "C" fn(
        fd: ::core::ffi::c_int,
        handle: u32,
        offset: *mut u64,
    ) -> ::core::ffi::c_int,
}
impl DynLibDrm {
    pub unsafe fn new<P>(path: P) -> Result<Self, ::libloading::Error>
    where
        P: AsRef<::std::ffi::OsStr>,
    {
        let library = unsafe { ::libloading::Library::new(path) }?;
        unsafe { Self::from_library(library) }
    }
    pub unsafe fn from_library<L>(library: L) -> Result<Self, ::libloading::Error>
    where
        L: Into<::libloading::Library>,
    {
        let __library = library.into();
        let select = unsafe { __library.get(b"select\0") }.map(|sym| *sym)?;
        let pselect = unsafe { __library.get(b"pselect\0") }.map(|sym| *sym)?;
        let drmIoctl = unsafe { __library.get(b"drmIoctl\0") }.map(|sym| *sym)?;
        let drmGetHashTable = unsafe { __library.get(b"drmGetHashTable\0") }.map(|sym| *sym)?;
        let drmGetEntry = unsafe { __library.get(b"drmGetEntry\0") }.map(|sym| *sym)?;
        let drmAvailable = unsafe { __library.get(b"drmAvailable\0") }.map(|sym| *sym)?;
        let drmOpen = unsafe { __library.get(b"drmOpen\0") }.map(|sym| *sym)?;
        let drmOpenWithType = unsafe { __library.get(b"drmOpenWithType\0") }.map(|sym| *sym)?;
        let drmOpenControl = unsafe { __library.get(b"drmOpenControl\0") }.map(|sym| *sym)?;
        let drmOpenRender = unsafe { __library.get(b"drmOpenRender\0") }.map(|sym| *sym)?;
        let drmClose = unsafe { __library.get(b"drmClose\0") }.map(|sym| *sym)?;
        let drmGetVersion = unsafe { __library.get(b"drmGetVersion\0") }.map(|sym| *sym)?;
        let drmGetLibVersion = unsafe { __library.get(b"drmGetLibVersion\0") }.map(|sym| *sym)?;
        let drmGetCap = unsafe { __library.get(b"drmGetCap\0") }.map(|sym| *sym)?;
        let drmFreeVersion = unsafe { __library.get(b"drmFreeVersion\0") }.map(|sym| *sym)?;
        let drmGetMagic = unsafe { __library.get(b"drmGetMagic\0") }.map(|sym| *sym)?;
        let drmGetBusid = unsafe { __library.get(b"drmGetBusid\0") }.map(|sym| *sym)?;
        let drmGetInterruptFromBusID =
            unsafe { __library.get(b"drmGetInterruptFromBusID\0") }.map(|sym| *sym)?;
        let drmGetMap = unsafe { __library.get(b"drmGetMap\0") }.map(|sym| *sym)?;
        let drmGetClient = unsafe { __library.get(b"drmGetClient\0") }.map(|sym| *sym)?;
        let drmGetStats = unsafe { __library.get(b"drmGetStats\0") }.map(|sym| *sym)?;
        let drmSetInterfaceVersion =
            unsafe { __library.get(b"drmSetInterfaceVersion\0") }.map(|sym| *sym)?;
        let drmCommandNone = unsafe { __library.get(b"drmCommandNone\0") }.map(|sym| *sym)?;
        let drmCommandRead = unsafe { __library.get(b"drmCommandRead\0") }.map(|sym| *sym)?;
        let drmCommandWrite = unsafe { __library.get(b"drmCommandWrite\0") }.map(|sym| *sym)?;
        let drmCommandWriteRead =
            unsafe { __library.get(b"drmCommandWriteRead\0") }.map(|sym| *sym)?;
        let drmFreeBusid = unsafe { __library.get(b"drmFreeBusid\0") }.map(|sym| *sym)?;
        let drmSetBusid = unsafe { __library.get(b"drmSetBusid\0") }.map(|sym| *sym)?;
        let drmAuthMagic = unsafe { __library.get(b"drmAuthMagic\0") }.map(|sym| *sym)?;
        let drmAddMap = unsafe { __library.get(b"drmAddMap\0") }.map(|sym| *sym)?;
        let drmRmMap = unsafe { __library.get(b"drmRmMap\0") }.map(|sym| *sym)?;
        let drmAddContextPrivateMapping =
            unsafe { __library.get(b"drmAddContextPrivateMapping\0") }.map(|sym| *sym)?;
        let drmAddBufs = unsafe { __library.get(b"drmAddBufs\0") }.map(|sym| *sym)?;
        let drmMarkBufs = unsafe { __library.get(b"drmMarkBufs\0") }.map(|sym| *sym)?;
        let drmCreateContext = unsafe { __library.get(b"drmCreateContext\0") }.map(|sym| *sym)?;
        let drmSetContextFlags =
            unsafe { __library.get(b"drmSetContextFlags\0") }.map(|sym| *sym)?;
        let drmGetContextFlags =
            unsafe { __library.get(b"drmGetContextFlags\0") }.map(|sym| *sym)?;
        let drmAddContextTag = unsafe { __library.get(b"drmAddContextTag\0") }.map(|sym| *sym)?;
        let drmDelContextTag = unsafe { __library.get(b"drmDelContextTag\0") }.map(|sym| *sym)?;
        let drmGetContextTag = unsafe { __library.get(b"drmGetContextTag\0") }.map(|sym| *sym)?;
        let drmGetReservedContextList =
            unsafe { __library.get(b"drmGetReservedContextList\0") }.map(|sym| *sym)?;
        let drmFreeReservedContextList =
            unsafe { __library.get(b"drmFreeReservedContextList\0") }.map(|sym| *sym)?;
        let drmSwitchToContext =
            unsafe { __library.get(b"drmSwitchToContext\0") }.map(|sym| *sym)?;
        let drmDestroyContext = unsafe { __library.get(b"drmDestroyContext\0") }.map(|sym| *sym)?;
        let drmCreateDrawable = unsafe { __library.get(b"drmCreateDrawable\0") }.map(|sym| *sym)?;
        let drmDestroyDrawable =
            unsafe { __library.get(b"drmDestroyDrawable\0") }.map(|sym| *sym)?;
        let drmUpdateDrawableInfo =
            unsafe { __library.get(b"drmUpdateDrawableInfo\0") }.map(|sym| *sym)?;
        let drmCtlInstHandler = unsafe { __library.get(b"drmCtlInstHandler\0") }.map(|sym| *sym)?;
        let drmCtlUninstHandler =
            unsafe { __library.get(b"drmCtlUninstHandler\0") }.map(|sym| *sym)?;
        let drmSetClientCap = unsafe { __library.get(b"drmSetClientCap\0") }.map(|sym| *sym)?;
        let drmCrtcGetSequence =
            unsafe { __library.get(b"drmCrtcGetSequence\0") }.map(|sym| *sym)?;
        let drmCrtcQueueSequence =
            unsafe { __library.get(b"drmCrtcQueueSequence\0") }.map(|sym| *sym)?;
        let drmMap = unsafe { __library.get(b"drmMap\0") }.map(|sym| *sym)?;
        let drmUnmap = unsafe { __library.get(b"drmUnmap\0") }.map(|sym| *sym)?;
        let drmGetBufInfo = unsafe { __library.get(b"drmGetBufInfo\0") }.map(|sym| *sym)?;
        let drmMapBufs = unsafe { __library.get(b"drmMapBufs\0") }.map(|sym| *sym)?;
        let drmUnmapBufs = unsafe { __library.get(b"drmUnmapBufs\0") }.map(|sym| *sym)?;
        let drmDMA = unsafe { __library.get(b"drmDMA\0") }.map(|sym| *sym)?;
        let drmFreeBufs = unsafe { __library.get(b"drmFreeBufs\0") }.map(|sym| *sym)?;
        let drmGetLock = unsafe { __library.get(b"drmGetLock\0") }.map(|sym| *sym)?;
        let drmUnlock = unsafe { __library.get(b"drmUnlock\0") }.map(|sym| *sym)?;
        let drmFinish = unsafe { __library.get(b"drmFinish\0") }.map(|sym| *sym)?;
        let drmGetContextPrivateMapping =
            unsafe { __library.get(b"drmGetContextPrivateMapping\0") }.map(|sym| *sym)?;
        let drmAgpAcquire = unsafe { __library.get(b"drmAgpAcquire\0") }.map(|sym| *sym)?;
        let drmAgpRelease = unsafe { __library.get(b"drmAgpRelease\0") }.map(|sym| *sym)?;
        let drmAgpEnable = unsafe { __library.get(b"drmAgpEnable\0") }.map(|sym| *sym)?;
        let drmAgpAlloc = unsafe { __library.get(b"drmAgpAlloc\0") }.map(|sym| *sym)?;
        let drmAgpFree = unsafe { __library.get(b"drmAgpFree\0") }.map(|sym| *sym)?;
        let drmAgpBind = unsafe { __library.get(b"drmAgpBind\0") }.map(|sym| *sym)?;
        let drmAgpUnbind = unsafe { __library.get(b"drmAgpUnbind\0") }.map(|sym| *sym)?;
        let drmAgpVersionMajor =
            unsafe { __library.get(b"drmAgpVersionMajor\0") }.map(|sym| *sym)?;
        let drmAgpVersionMinor =
            unsafe { __library.get(b"drmAgpVersionMinor\0") }.map(|sym| *sym)?;
        let drmAgpGetMode = unsafe { __library.get(b"drmAgpGetMode\0") }.map(|sym| *sym)?;
        let drmAgpBase = unsafe { __library.get(b"drmAgpBase\0") }.map(|sym| *sym)?;
        let drmAgpSize = unsafe { __library.get(b"drmAgpSize\0") }.map(|sym| *sym)?;
        let drmAgpMemoryUsed = unsafe { __library.get(b"drmAgpMemoryUsed\0") }.map(|sym| *sym)?;
        let drmAgpMemoryAvail = unsafe { __library.get(b"drmAgpMemoryAvail\0") }.map(|sym| *sym)?;
        let drmAgpVendorId = unsafe { __library.get(b"drmAgpVendorId\0") }.map(|sym| *sym)?;
        let drmAgpDeviceId = unsafe { __library.get(b"drmAgpDeviceId\0") }.map(|sym| *sym)?;
        let drmScatterGatherAlloc =
            unsafe { __library.get(b"drmScatterGatherAlloc\0") }.map(|sym| *sym)?;
        let drmScatterGatherFree =
            unsafe { __library.get(b"drmScatterGatherFree\0") }.map(|sym| *sym)?;
        let drmWaitVBlank = unsafe { __library.get(b"drmWaitVBlank\0") }.map(|sym| *sym)?;
        let drmSetServerInfo = unsafe { __library.get(b"drmSetServerInfo\0") }.map(|sym| *sym)?;
        let drmError = unsafe { __library.get(b"drmError\0") }.map(|sym| *sym)?;
        let drmMalloc = unsafe { __library.get(b"drmMalloc\0") }.map(|sym| *sym)?;
        let drmFree = unsafe { __library.get(b"drmFree\0") }.map(|sym| *sym)?;
        let drmHashCreate = unsafe { __library.get(b"drmHashCreate\0") }.map(|sym| *sym)?;
        let drmHashDestroy = unsafe { __library.get(b"drmHashDestroy\0") }.map(|sym| *sym)?;
        let drmHashLookup = unsafe { __library.get(b"drmHashLookup\0") }.map(|sym| *sym)?;
        let drmHashInsert = unsafe { __library.get(b"drmHashInsert\0") }.map(|sym| *sym)?;
        let drmHashDelete = unsafe { __library.get(b"drmHashDelete\0") }.map(|sym| *sym)?;
        let drmHashFirst = unsafe { __library.get(b"drmHashFirst\0") }.map(|sym| *sym)?;
        let drmHashNext = unsafe { __library.get(b"drmHashNext\0") }.map(|sym| *sym)?;
        let drmRandomCreate = unsafe { __library.get(b"drmRandomCreate\0") }.map(|sym| *sym)?;
        let drmRandomDestroy = unsafe { __library.get(b"drmRandomDestroy\0") }.map(|sym| *sym)?;
        let drmRandom = unsafe { __library.get(b"drmRandom\0") }.map(|sym| *sym)?;
        let drmRandomDouble = unsafe { __library.get(b"drmRandomDouble\0") }.map(|sym| *sym)?;
        let drmSLCreate = unsafe { __library.get(b"drmSLCreate\0") }.map(|sym| *sym)?;
        let drmSLDestroy = unsafe { __library.get(b"drmSLDestroy\0") }.map(|sym| *sym)?;
        let drmSLLookup = unsafe { __library.get(b"drmSLLookup\0") }.map(|sym| *sym)?;
        let drmSLInsert = unsafe { __library.get(b"drmSLInsert\0") }.map(|sym| *sym)?;
        let drmSLDelete = unsafe { __library.get(b"drmSLDelete\0") }.map(|sym| *sym)?;
        let drmSLNext = unsafe { __library.get(b"drmSLNext\0") }.map(|sym| *sym)?;
        let drmSLFirst = unsafe { __library.get(b"drmSLFirst\0") }.map(|sym| *sym)?;
        let drmSLDump = unsafe { __library.get(b"drmSLDump\0") }.map(|sym| *sym)?;
        let drmSLLookupNeighbors =
            unsafe { __library.get(b"drmSLLookupNeighbors\0") }.map(|sym| *sym)?;
        let drmOpenOnce = unsafe { __library.get(b"drmOpenOnce\0") }.map(|sym| *sym)?;
        let drmOpenOnceWithType =
            unsafe { __library.get(b"drmOpenOnceWithType\0") }.map(|sym| *sym)?;
        let drmCloseOnce = unsafe { __library.get(b"drmCloseOnce\0") }.map(|sym| *sym)?;
        let drmMsg = unsafe { __library.get(b"drmMsg\0") }.map(|sym| *sym)?;
        let drmSetMaster = unsafe { __library.get(b"drmSetMaster\0") }.map(|sym| *sym)?;
        let drmDropMaster = unsafe { __library.get(b"drmDropMaster\0") }.map(|sym| *sym)?;
        let drmIsMaster = unsafe { __library.get(b"drmIsMaster\0") }.map(|sym| *sym)?;
        let drmHandleEvent = unsafe { __library.get(b"drmHandleEvent\0") }.map(|sym| *sym)?;
        let drmGetDeviceNameFromFd =
            unsafe { __library.get(b"drmGetDeviceNameFromFd\0") }.map(|sym| *sym)?;
        let drmGetDeviceNameFromFd2 =
            unsafe { __library.get(b"drmGetDeviceNameFromFd2\0") }.map(|sym| *sym)?;
        let drmGetNodeTypeFromFd =
            unsafe { __library.get(b"drmGetNodeTypeFromFd\0") }.map(|sym| *sym)?;
        let drmPrimeHandleToFD =
            unsafe { __library.get(b"drmPrimeHandleToFD\0") }.map(|sym| *sym)?;
        let drmPrimeFDToHandle =
            unsafe { __library.get(b"drmPrimeFDToHandle\0") }.map(|sym| *sym)?;
        let drmCloseBufferHandle =
            unsafe { __library.get(b"drmCloseBufferHandle\0") }.map(|sym| *sym)?;
        let drmGetPrimaryDeviceNameFromFd =
            unsafe { __library.get(b"drmGetPrimaryDeviceNameFromFd\0") }.map(|sym| *sym)?;
        let drmGetRenderDeviceNameFromFd =
            unsafe { __library.get(b"drmGetRenderDeviceNameFromFd\0") }.map(|sym| *sym)?;
        let drmGetDevice = unsafe { __library.get(b"drmGetDevice\0") }.map(|sym| *sym)?;
        let drmFreeDevice = unsafe { __library.get(b"drmFreeDevice\0") }.map(|sym| *sym)?;
        let drmGetDevices = unsafe { __library.get(b"drmGetDevices\0") }.map(|sym| *sym)?;
        let drmFreeDevices = unsafe { __library.get(b"drmFreeDevices\0") }.map(|sym| *sym)?;
        let drmGetDevice2 = unsafe { __library.get(b"drmGetDevice2\0") }.map(|sym| *sym)?;
        let drmGetDevices2 = unsafe { __library.get(b"drmGetDevices2\0") }.map(|sym| *sym)?;
        let drmGetDeviceFromDevId =
            unsafe { __library.get(b"drmGetDeviceFromDevId\0") }.map(|sym| *sym)?;
        let drmGetNodeTypeFromDevId =
            unsafe { __library.get(b"drmGetNodeTypeFromDevId\0") }.map(|sym| *sym)?;
        let drmDevicesEqual = unsafe { __library.get(b"drmDevicesEqual\0") }.map(|sym| *sym)?;
        let drmSyncobjCreate = unsafe { __library.get(b"drmSyncobjCreate\0") }.map(|sym| *sym)?;
        let drmSyncobjDestroy = unsafe { __library.get(b"drmSyncobjDestroy\0") }.map(|sym| *sym)?;
        let drmSyncobjHandleToFD =
            unsafe { __library.get(b"drmSyncobjHandleToFD\0") }.map(|sym| *sym)?;
        let drmSyncobjFDToHandle =
            unsafe { __library.get(b"drmSyncobjFDToHandle\0") }.map(|sym| *sym)?;
        let drmSyncobjImportSyncFile =
            unsafe { __library.get(b"drmSyncobjImportSyncFile\0") }.map(|sym| *sym)?;
        let drmSyncobjExportSyncFile =
            unsafe { __library.get(b"drmSyncobjExportSyncFile\0") }.map(|sym| *sym)?;
        let drmSyncobjWait = unsafe { __library.get(b"drmSyncobjWait\0") }.map(|sym| *sym)?;
        let drmSyncobjReset = unsafe { __library.get(b"drmSyncobjReset\0") }.map(|sym| *sym)?;
        let drmSyncobjSignal = unsafe { __library.get(b"drmSyncobjSignal\0") }.map(|sym| *sym)?;
        let drmSyncobjTimelineSignal =
            unsafe { __library.get(b"drmSyncobjTimelineSignal\0") }.map(|sym| *sym)?;
        let drmSyncobjTimelineWait =
            unsafe { __library.get(b"drmSyncobjTimelineWait\0") }.map(|sym| *sym)?;
        let drmSyncobjQuery = unsafe { __library.get(b"drmSyncobjQuery\0") }.map(|sym| *sym)?;
        let drmSyncobjQuery2 = unsafe { __library.get(b"drmSyncobjQuery2\0") }.map(|sym| *sym)?;
        let drmSyncobjTransfer =
            unsafe { __library.get(b"drmSyncobjTransfer\0") }.map(|sym| *sym)?;
        let drmSyncobjEventfd = unsafe { __library.get(b"drmSyncobjEventfd\0") }.map(|sym| *sym)?;
        let drmGetFormatModifierVendor =
            unsafe { __library.get(b"drmGetFormatModifierVendor\0") }.map(|sym| *sym)?;
        let drmGetFormatModifierName =
            unsafe { __library.get(b"drmGetFormatModifierName\0") }.map(|sym| *sym)?;
        let drmGetFormatName = unsafe { __library.get(b"drmGetFormatName\0") }.map(|sym| *sym)?;
        let drmModeFreeModeInfo =
            unsafe { __library.get(b"drmModeFreeModeInfo\0") }.map(|sym| *sym)?;
        let drmModeFreeResources =
            unsafe { __library.get(b"drmModeFreeResources\0") }.map(|sym| *sym)?;
        let drmModeFreeFB = unsafe { __library.get(b"drmModeFreeFB\0") }.map(|sym| *sym)?;
        let drmModeFreeFB2 = unsafe { __library.get(b"drmModeFreeFB2\0") }.map(|sym| *sym)?;
        let drmModeFreeCrtc = unsafe { __library.get(b"drmModeFreeCrtc\0") }.map(|sym| *sym)?;
        let drmModeFreeConnector =
            unsafe { __library.get(b"drmModeFreeConnector\0") }.map(|sym| *sym)?;
        let drmModeFreeEncoder =
            unsafe { __library.get(b"drmModeFreeEncoder\0") }.map(|sym| *sym)?;
        let drmModeFreePlane = unsafe { __library.get(b"drmModeFreePlane\0") }.map(|sym| *sym)?;
        let drmModeFreePlaneResources =
            unsafe { __library.get(b"drmModeFreePlaneResources\0") }.map(|sym| *sym)?;
        let drmIsKMS = unsafe { __library.get(b"drmIsKMS\0") }.map(|sym| *sym)?;
        let drmModeGetResources =
            unsafe { __library.get(b"drmModeGetResources\0") }.map(|sym| *sym)?;
        let drmModeGetFB = unsafe { __library.get(b"drmModeGetFB\0") }.map(|sym| *sym)?;
        let drmModeGetFB2 = unsafe { __library.get(b"drmModeGetFB2\0") }.map(|sym| *sym)?;
        let drmModeAddFB = unsafe { __library.get(b"drmModeAddFB\0") }.map(|sym| *sym)?;
        let drmModeAddFB2 = unsafe { __library.get(b"drmModeAddFB2\0") }.map(|sym| *sym)?;
        let drmModeAddFB2WithModifiers =
            unsafe { __library.get(b"drmModeAddFB2WithModifiers\0") }.map(|sym| *sym)?;
        let drmModeRmFB = unsafe { __library.get(b"drmModeRmFB\0") }.map(|sym| *sym)?;
        let drmModeCloseFB = unsafe { __library.get(b"drmModeCloseFB\0") }.map(|sym| *sym)?;
        let drmModeDirtyFB = unsafe { __library.get(b"drmModeDirtyFB\0") }.map(|sym| *sym)?;
        let drmModeGetCrtc = unsafe { __library.get(b"drmModeGetCrtc\0") }.map(|sym| *sym)?;
        let drmModeSetCrtc = unsafe { __library.get(b"drmModeSetCrtc\0") }.map(|sym| *sym)?;
        let drmModeSetCursor = unsafe { __library.get(b"drmModeSetCursor\0") }.map(|sym| *sym)?;
        let drmModeSetCursor2 = unsafe { __library.get(b"drmModeSetCursor2\0") }.map(|sym| *sym)?;
        let drmModeMoveCursor = unsafe { __library.get(b"drmModeMoveCursor\0") }.map(|sym| *sym)?;
        let drmModeGetEncoder = unsafe { __library.get(b"drmModeGetEncoder\0") }.map(|sym| *sym)?;
        let drmModeGetConnector =
            unsafe { __library.get(b"drmModeGetConnector\0") }.map(|sym| *sym)?;
        let drmModeGetConnectorCurrent =
            unsafe { __library.get(b"drmModeGetConnectorCurrent\0") }.map(|sym| *sym)?;
        let drmModeConnectorGetPossibleCrtcs =
            unsafe { __library.get(b"drmModeConnectorGetPossibleCrtcs\0") }.map(|sym| *sym)?;
        let drmModeAttachMode = unsafe { __library.get(b"drmModeAttachMode\0") }.map(|sym| *sym)?;
        let drmModeDetachMode = unsafe { __library.get(b"drmModeDetachMode\0") }.map(|sym| *sym)?;
        let drmModeGetProperty =
            unsafe { __library.get(b"drmModeGetProperty\0") }.map(|sym| *sym)?;
        let drmModeFreeProperty =
            unsafe { __library.get(b"drmModeFreeProperty\0") }.map(|sym| *sym)?;
        let drmModeGetPropertyBlob =
            unsafe { __library.get(b"drmModeGetPropertyBlob\0") }.map(|sym| *sym)?;
        let drmModeFormatModifierBlobIterNext =
            unsafe { __library.get(b"drmModeFormatModifierBlobIterNext\0") }.map(|sym| *sym)?;
        let drmModeFreePropertyBlob =
            unsafe { __library.get(b"drmModeFreePropertyBlob\0") }.map(|sym| *sym)?;
        let drmModeConnectorSetProperty =
            unsafe { __library.get(b"drmModeConnectorSetProperty\0") }.map(|sym| *sym)?;
        let drmCheckModesettingSupported =
            unsafe { __library.get(b"drmCheckModesettingSupported\0") }.map(|sym| *sym)?;
        let drmModeCrtcSetGamma =
            unsafe { __library.get(b"drmModeCrtcSetGamma\0") }.map(|sym| *sym)?;
        let drmModeCrtcGetGamma =
            unsafe { __library.get(b"drmModeCrtcGetGamma\0") }.map(|sym| *sym)?;
        let drmModePageFlip = unsafe { __library.get(b"drmModePageFlip\0") }.map(|sym| *sym)?;
        let drmModePageFlipTarget =
            unsafe { __library.get(b"drmModePageFlipTarget\0") }.map(|sym| *sym)?;
        let drmModeGetPlaneResources =
            unsafe { __library.get(b"drmModeGetPlaneResources\0") }.map(|sym| *sym)?;
        let drmModeGetPlane = unsafe { __library.get(b"drmModeGetPlane\0") }.map(|sym| *sym)?;
        let drmModeSetPlane = unsafe { __library.get(b"drmModeSetPlane\0") }.map(|sym| *sym)?;
        let drmModeObjectGetProperties =
            unsafe { __library.get(b"drmModeObjectGetProperties\0") }.map(|sym| *sym)?;
        let drmModeFreeObjectProperties =
            unsafe { __library.get(b"drmModeFreeObjectProperties\0") }.map(|sym| *sym)?;
        let drmModeObjectSetProperty =
            unsafe { __library.get(b"drmModeObjectSetProperty\0") }.map(|sym| *sym)?;
        let drmModeAtomicAlloc =
            unsafe { __library.get(b"drmModeAtomicAlloc\0") }.map(|sym| *sym)?;
        let drmModeAtomicDuplicate =
            unsafe { __library.get(b"drmModeAtomicDuplicate\0") }.map(|sym| *sym)?;
        let drmModeAtomicMerge =
            unsafe { __library.get(b"drmModeAtomicMerge\0") }.map(|sym| *sym)?;
        let drmModeAtomicFree = unsafe { __library.get(b"drmModeAtomicFree\0") }.map(|sym| *sym)?;
        let drmModeAtomicGetCursor =
            unsafe { __library.get(b"drmModeAtomicGetCursor\0") }.map(|sym| *sym)?;
        let drmModeAtomicSetCursor =
            unsafe { __library.get(b"drmModeAtomicSetCursor\0") }.map(|sym| *sym)?;
        let drmModeAtomicAddProperty =
            unsafe { __library.get(b"drmModeAtomicAddProperty\0") }.map(|sym| *sym)?;
        let drmModeAtomicCommit =
            unsafe { __library.get(b"drmModeAtomicCommit\0") }.map(|sym| *sym)?;
        let drmModeCreatePropertyBlob =
            unsafe { __library.get(b"drmModeCreatePropertyBlob\0") }.map(|sym| *sym)?;
        let drmModeDestroyPropertyBlob =
            unsafe { __library.get(b"drmModeDestroyPropertyBlob\0") }.map(|sym| *sym)?;
        let drmModeCreateLease =
            unsafe { __library.get(b"drmModeCreateLease\0") }.map(|sym| *sym)?;
        let drmModeListLessees =
            unsafe { __library.get(b"drmModeListLessees\0") }.map(|sym| *sym)?;
        let drmModeGetLease = unsafe { __library.get(b"drmModeGetLease\0") }.map(|sym| *sym)?;
        let drmModeRevokeLease =
            unsafe { __library.get(b"drmModeRevokeLease\0") }.map(|sym| *sym)?;
        let drmModeGetConnectorTypeName =
            unsafe { __library.get(b"drmModeGetConnectorTypeName\0") }.map(|sym| *sym)?;
        let drmModeCreateDumbBuffer =
            unsafe { __library.get(b"drmModeCreateDumbBuffer\0") }.map(|sym| *sym)?;
        let drmModeDestroyDumbBuffer =
            unsafe { __library.get(b"drmModeDestroyDumbBuffer\0") }.map(|sym| *sym)?;
        let drmModeMapDumbBuffer =
            unsafe { __library.get(b"drmModeMapDumbBuffer\0") }.map(|sym| *sym)?;
        Ok(DynLibDrm {
            __library,
            select,
            pselect,
            drmIoctl,
            drmGetHashTable,
            drmGetEntry,
            drmAvailable,
            drmOpen,
            drmOpenWithType,
            drmOpenControl,
            drmOpenRender,
            drmClose,
            drmGetVersion,
            drmGetLibVersion,
            drmGetCap,
            drmFreeVersion,
            drmGetMagic,
            drmGetBusid,
            drmGetInterruptFromBusID,
            drmGetMap,
            drmGetClient,
            drmGetStats,
            drmSetInterfaceVersion,
            drmCommandNone,
            drmCommandRead,
            drmCommandWrite,
            drmCommandWriteRead,
            drmFreeBusid,
            drmSetBusid,
            drmAuthMagic,
            drmAddMap,
            drmRmMap,
            drmAddContextPrivateMapping,
            drmAddBufs,
            drmMarkBufs,
            drmCreateContext,
            drmSetContextFlags,
            drmGetContextFlags,
            drmAddContextTag,
            drmDelContextTag,
            drmGetContextTag,
            drmGetReservedContextList,
            drmFreeReservedContextList,
            drmSwitchToContext,
            drmDestroyContext,
            drmCreateDrawable,
            drmDestroyDrawable,
            drmUpdateDrawableInfo,
            drmCtlInstHandler,
            drmCtlUninstHandler,
            drmSetClientCap,
            drmCrtcGetSequence,
            drmCrtcQueueSequence,
            drmMap,
            drmUnmap,
            drmGetBufInfo,
            drmMapBufs,
            drmUnmapBufs,
            drmDMA,
            drmFreeBufs,
            drmGetLock,
            drmUnlock,
            drmFinish,
            drmGetContextPrivateMapping,
            drmAgpAcquire,
            drmAgpRelease,
            drmAgpEnable,
            drmAgpAlloc,
            drmAgpFree,
            drmAgpBind,
            drmAgpUnbind,
            drmAgpVersionMajor,
            drmAgpVersionMinor,
            drmAgpGetMode,
            drmAgpBase,
            drmAgpSize,
            drmAgpMemoryUsed,
            drmAgpMemoryAvail,
            drmAgpVendorId,
            drmAgpDeviceId,
            drmScatterGatherAlloc,
            drmScatterGatherFree,
            drmWaitVBlank,
            drmSetServerInfo,
            drmError,
            drmMalloc,
            drmFree,
            drmHashCreate,
            drmHashDestroy,
            drmHashLookup,
            drmHashInsert,
            drmHashDelete,
            drmHashFirst,
            drmHashNext,
            drmRandomCreate,
            drmRandomDestroy,
            drmRandom,
            drmRandomDouble,
            drmSLCreate,
            drmSLDestroy,
            drmSLLookup,
            drmSLInsert,
            drmSLDelete,
            drmSLNext,
            drmSLFirst,
            drmSLDump,
            drmSLLookupNeighbors,
            drmOpenOnce,
            drmOpenOnceWithType,
            drmCloseOnce,
            drmMsg,
            drmSetMaster,
            drmDropMaster,
            drmIsMaster,
            drmHandleEvent,
            drmGetDeviceNameFromFd,
            drmGetDeviceNameFromFd2,
            drmGetNodeTypeFromFd,
            drmPrimeHandleToFD,
            drmPrimeFDToHandle,
            drmCloseBufferHandle,
            drmGetPrimaryDeviceNameFromFd,
            drmGetRenderDeviceNameFromFd,
            drmGetDevice,
            drmFreeDevice,
            drmGetDevices,
            drmFreeDevices,
            drmGetDevice2,
            drmGetDevices2,
            drmGetDeviceFromDevId,
            drmGetNodeTypeFromDevId,
            drmDevicesEqual,
            drmSyncobjCreate,
            drmSyncobjDestroy,
            drmSyncobjHandleToFD,
            drmSyncobjFDToHandle,
            drmSyncobjImportSyncFile,
            drmSyncobjExportSyncFile,
            drmSyncobjWait,
            drmSyncobjReset,
            drmSyncobjSignal,
            drmSyncobjTimelineSignal,
            drmSyncobjTimelineWait,
            drmSyncobjQuery,
            drmSyncobjQuery2,
            drmSyncobjTransfer,
            drmSyncobjEventfd,
            drmGetFormatModifierVendor,
            drmGetFormatModifierName,
            drmGetFormatName,
            drmModeFreeModeInfo,
            drmModeFreeResources,
            drmModeFreeFB,
            drmModeFreeFB2,
            drmModeFreeCrtc,
            drmModeFreeConnector,
            drmModeFreeEncoder,
            drmModeFreePlane,
            drmModeFreePlaneResources,
            drmIsKMS,
            drmModeGetResources,
            drmModeGetFB,
            drmModeGetFB2,
            drmModeAddFB,
            drmModeAddFB2,
            drmModeAddFB2WithModifiers,
            drmModeRmFB,
            drmModeCloseFB,
            drmModeDirtyFB,
            drmModeGetCrtc,
            drmModeSetCrtc,
            drmModeSetCursor,
            drmModeSetCursor2,
            drmModeMoveCursor,
            drmModeGetEncoder,
            drmModeGetConnector,
            drmModeGetConnectorCurrent,
            drmModeConnectorGetPossibleCrtcs,
            drmModeAttachMode,
            drmModeDetachMode,
            drmModeGetProperty,
            drmModeFreeProperty,
            drmModeGetPropertyBlob,
            drmModeFormatModifierBlobIterNext,
            drmModeFreePropertyBlob,
            drmModeConnectorSetProperty,
            drmCheckModesettingSupported,
            drmModeCrtcSetGamma,
            drmModeCrtcGetGamma,
            drmModePageFlip,
            drmModePageFlipTarget,
            drmModeGetPlaneResources,
            drmModeGetPlane,
            drmModeSetPlane,
            drmModeObjectGetProperties,
            drmModeFreeObjectProperties,
            drmModeObjectSetProperty,
            drmModeAtomicAlloc,
            drmModeAtomicDuplicate,
            drmModeAtomicMerge,
            drmModeAtomicFree,
            drmModeAtomicGetCursor,
            drmModeAtomicSetCursor,
            drmModeAtomicAddProperty,
            drmModeAtomicCommit,
            drmModeCreatePropertyBlob,
            drmModeDestroyPropertyBlob,
            drmModeCreateLease,
            drmModeListLessees,
            drmModeGetLease,
            drmModeRevokeLease,
            drmModeGetConnectorTypeName,
            drmModeCreateDumbBuffer,
            drmModeDestroyDumbBuffer,
            drmModeMapDumbBuffer,
        })
    }
    pub unsafe fn select(
        &self,
        __nfds: ::core::ffi::c_int,
        __readfds: *mut fd_set,
        __writefds: *mut fd_set,
        __exceptfds: *mut fd_set,
        __timeout: *mut timeval,
    ) -> ::core::ffi::c_int {
        unsafe { (self.select)(__nfds, __readfds, __writefds, __exceptfds, __timeout) }
    }
    pub unsafe fn pselect(
        &self,
        __nfds: ::core::ffi::c_int,
        __readfds: *mut fd_set,
        __writefds: *mut fd_set,
        __exceptfds: *mut fd_set,
        __timeout: *const timespec,
        __sigmask: *const __sigset_t,
    ) -> ::core::ffi::c_int {
        unsafe {
            (self.pselect)(
                __nfds,
                __readfds,
                __writefds,
                __exceptfds,
                __timeout,
                __sigmask,
            )
        }
    }
    pub unsafe fn drmIoctl(
        &self,
        fd: ::core::ffi::c_int,
        request: ::core::ffi::c_ulong,
        arg: *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmIoctl)(fd, request, arg) }
    }
    pub unsafe fn drmGetHashTable(&self) -> *mut ::core::ffi::c_void {
        unsafe { (self.drmGetHashTable)() }
    }
    pub unsafe fn drmGetEntry(&self, fd: ::core::ffi::c_int) -> *mut drmHashEntry {
        unsafe { (self.drmGetEntry)(fd) }
    }
    pub unsafe fn drmAvailable(&self) -> ::core::ffi::c_int {
        unsafe { (self.drmAvailable)() }
    }
    pub unsafe fn drmOpen(
        &self,
        name: *const ::core::ffi::c_char,
        busid: *const ::core::ffi::c_char,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmOpen)(name, busid) }
    }
    pub unsafe fn drmOpenWithType(
        &self,
        name: *const ::core::ffi::c_char,
        busid: *const ::core::ffi::c_char,
        type_: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmOpenWithType)(name, busid, type_) }
    }
    pub unsafe fn drmOpenControl(&self, minor: ::core::ffi::c_int) -> ::core::ffi::c_int {
        unsafe { (self.drmOpenControl)(minor) }
    }
    pub unsafe fn drmOpenRender(&self, minor: ::core::ffi::c_int) -> ::core::ffi::c_int {
        unsafe { (self.drmOpenRender)(minor) }
    }
    pub unsafe fn drmClose(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_int {
        unsafe { (self.drmClose)(fd) }
    }
    pub unsafe fn drmGetVersion(&self, fd: ::core::ffi::c_int) -> drmVersionPtr {
        unsafe { (self.drmGetVersion)(fd) }
    }
    pub unsafe fn drmGetLibVersion(&self, fd: ::core::ffi::c_int) -> drmVersionPtr {
        unsafe { (self.drmGetLibVersion)(fd) }
    }
    pub unsafe fn drmGetCap(
        &self,
        fd: ::core::ffi::c_int,
        capability: u64,
        value: *mut u64,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmGetCap)(fd, capability, value) }
    }
    pub unsafe fn drmFreeVersion(&self, arg1: drmVersionPtr) {
        unsafe { (self.drmFreeVersion)(arg1) }
    }
    pub unsafe fn drmGetMagic(
        &self,
        fd: ::core::ffi::c_int,
        magic: *mut drm_magic_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmGetMagic)(fd, magic) }
    }
    pub unsafe fn drmGetBusid(&self, fd: ::core::ffi::c_int) -> *mut ::core::ffi::c_char {
        unsafe { (self.drmGetBusid)(fd) }
    }
    pub unsafe fn drmGetInterruptFromBusID(
        &self,
        fd: ::core::ffi::c_int,
        busnum: ::core::ffi::c_int,
        devnum: ::core::ffi::c_int,
        funcnum: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmGetInterruptFromBusID)(fd, busnum, devnum, funcnum) }
    }
    pub unsafe fn drmGetMap(
        &self,
        fd: ::core::ffi::c_int,
        idx: ::core::ffi::c_int,
        offset: *mut drm_handle_t,
        size: *mut drmSize,
        type_: *mut drmMapType,
        flags: *mut drmMapFlags,
        handle: *mut drm_handle_t,
        mtrr: *mut ::core::ffi::c_int,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmGetMap)(fd, idx, offset, size, type_, flags, handle, mtrr) }
    }
    pub unsafe fn drmGetClient(
        &self,
        fd: ::core::ffi::c_int,
        idx: ::core::ffi::c_int,
        auth: *mut ::core::ffi::c_int,
        pid: *mut ::core::ffi::c_int,
        uid: *mut ::core::ffi::c_int,
        magic: *mut ::core::ffi::c_ulong,
        iocs: *mut ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmGetClient)(fd, idx, auth, pid, uid, magic, iocs) }
    }
    pub unsafe fn drmGetStats(
        &self,
        fd: ::core::ffi::c_int,
        stats: *mut drmStatsT,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmGetStats)(fd, stats) }
    }
    pub unsafe fn drmSetInterfaceVersion(
        &self,
        fd: ::core::ffi::c_int,
        version: *mut drmSetVersion,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSetInterfaceVersion)(fd, version) }
    }
    pub unsafe fn drmCommandNone(
        &self,
        fd: ::core::ffi::c_int,
        drmCommandIndex: ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmCommandNone)(fd, drmCommandIndex) }
    }
    pub unsafe fn drmCommandRead(
        &self,
        fd: ::core::ffi::c_int,
        drmCommandIndex: ::core::ffi::c_ulong,
        data: *mut ::core::ffi::c_void,
        size: ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmCommandRead)(fd, drmCommandIndex, data, size) }
    }
    pub unsafe fn drmCommandWrite(
        &self,
        fd: ::core::ffi::c_int,
        drmCommandIndex: ::core::ffi::c_ulong,
        data: *mut ::core::ffi::c_void,
        size: ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmCommandWrite)(fd, drmCommandIndex, data, size) }
    }
    pub unsafe fn drmCommandWriteRead(
        &self,
        fd: ::core::ffi::c_int,
        drmCommandIndex: ::core::ffi::c_ulong,
        data: *mut ::core::ffi::c_void,
        size: ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmCommandWriteRead)(fd, drmCommandIndex, data, size) }
    }
    pub unsafe fn drmFreeBusid(&self, busid: *const ::core::ffi::c_char) {
        unsafe { (self.drmFreeBusid)(busid) }
    }
    pub unsafe fn drmSetBusid(
        &self,
        fd: ::core::ffi::c_int,
        busid: *const ::core::ffi::c_char,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSetBusid)(fd, busid) }
    }
    pub unsafe fn drmAuthMagic(
        &self,
        fd: ::core::ffi::c_int,
        magic: drm_magic_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmAuthMagic)(fd, magic) }
    }
    pub unsafe fn drmAddMap(
        &self,
        fd: ::core::ffi::c_int,
        offset: drm_handle_t,
        size: drmSize,
        type_: drmMapType,
        flags: drmMapFlags,
        handle: *mut drm_handle_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmAddMap)(fd, offset, size, type_, flags, handle) }
    }
    pub unsafe fn drmRmMap(
        &self,
        fd: ::core::ffi::c_int,
        handle: drm_handle_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmRmMap)(fd, handle) }
    }
    pub unsafe fn drmAddContextPrivateMapping(
        &self,
        fd: ::core::ffi::c_int,
        ctx_id: drm_context_t,
        handle: drm_handle_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmAddContextPrivateMapping)(fd, ctx_id, handle) }
    }
    pub unsafe fn drmAddBufs(
        &self,
        fd: ::core::ffi::c_int,
        count: ::core::ffi::c_int,
        size: ::core::ffi::c_int,
        flags: drmBufDescFlags,
        agp_offset: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmAddBufs)(fd, count, size, flags, agp_offset) }
    }
    pub unsafe fn drmMarkBufs(
        &self,
        fd: ::core::ffi::c_int,
        low: f64,
        high: f64,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmMarkBufs)(fd, low, high) }
    }
    pub unsafe fn drmCreateContext(
        &self,
        fd: ::core::ffi::c_int,
        handle: *mut drm_context_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmCreateContext)(fd, handle) }
    }
    pub unsafe fn drmSetContextFlags(
        &self,
        fd: ::core::ffi::c_int,
        context: drm_context_t,
        flags: drm_context_tFlags,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSetContextFlags)(fd, context, flags) }
    }
    pub unsafe fn drmGetContextFlags(
        &self,
        fd: ::core::ffi::c_int,
        context: drm_context_t,
        flags: drm_context_tFlagsPtr,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmGetContextFlags)(fd, context, flags) }
    }
    pub unsafe fn drmAddContextTag(
        &self,
        fd: ::core::ffi::c_int,
        context: drm_context_t,
        tag: *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmAddContextTag)(fd, context, tag) }
    }
    pub unsafe fn drmDelContextTag(
        &self,
        fd: ::core::ffi::c_int,
        context: drm_context_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmDelContextTag)(fd, context) }
    }
    pub unsafe fn drmGetContextTag(
        &self,
        fd: ::core::ffi::c_int,
        context: drm_context_t,
    ) -> *mut ::core::ffi::c_void {
        unsafe { (self.drmGetContextTag)(fd, context) }
    }
    pub unsafe fn drmGetReservedContextList(
        &self,
        fd: ::core::ffi::c_int,
        count: *mut ::core::ffi::c_int,
    ) -> *mut drm_context_t {
        unsafe { (self.drmGetReservedContextList)(fd, count) }
    }
    pub unsafe fn drmFreeReservedContextList(&self, arg1: *mut drm_context_t) {
        unsafe { (self.drmFreeReservedContextList)(arg1) }
    }
    pub unsafe fn drmSwitchToContext(
        &self,
        fd: ::core::ffi::c_int,
        context: drm_context_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSwitchToContext)(fd, context) }
    }
    pub unsafe fn drmDestroyContext(
        &self,
        fd: ::core::ffi::c_int,
        handle: drm_context_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmDestroyContext)(fd, handle) }
    }
    pub unsafe fn drmCreateDrawable(
        &self,
        fd: ::core::ffi::c_int,
        handle: *mut drm_drawable_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmCreateDrawable)(fd, handle) }
    }
    pub unsafe fn drmDestroyDrawable(
        &self,
        fd: ::core::ffi::c_int,
        handle: drm_drawable_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmDestroyDrawable)(fd, handle) }
    }
    pub unsafe fn drmUpdateDrawableInfo(
        &self,
        fd: ::core::ffi::c_int,
        handle: drm_drawable_t,
        type_: drm_drawable_info_type_t,
        num: ::core::ffi::c_uint,
        data: *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmUpdateDrawableInfo)(fd, handle, type_, num, data) }
    }
    pub unsafe fn drmCtlInstHandler(
        &self,
        fd: ::core::ffi::c_int,
        irq: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmCtlInstHandler)(fd, irq) }
    }
    pub unsafe fn drmCtlUninstHandler(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_int {
        unsafe { (self.drmCtlUninstHandler)(fd) }
    }
    pub unsafe fn drmSetClientCap(
        &self,
        fd: ::core::ffi::c_int,
        capability: u64,
        value: u64,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSetClientCap)(fd, capability, value) }
    }
    pub unsafe fn drmCrtcGetSequence(
        &self,
        fd: ::core::ffi::c_int,
        crtcId: u32,
        sequence: *mut u64,
        ns: *mut u64,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmCrtcGetSequence)(fd, crtcId, sequence, ns) }
    }
    pub unsafe fn drmCrtcQueueSequence(
        &self,
        fd: ::core::ffi::c_int,
        crtcId: u32,
        flags: u32,
        sequence: u64,
        sequence_queued: *mut u64,
        user_data: u64,
    ) -> ::core::ffi::c_int {
        unsafe {
            (self.drmCrtcQueueSequence)(fd, crtcId, flags, sequence, sequence_queued, user_data)
        }
    }
    pub unsafe fn drmMap(
        &self,
        fd: ::core::ffi::c_int,
        handle: drm_handle_t,
        size: drmSize,
        address: drmAddressPtr,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmMap)(fd, handle, size, address) }
    }
    pub unsafe fn drmUnmap(&self, address: drmAddress, size: drmSize) -> ::core::ffi::c_int {
        unsafe { (self.drmUnmap)(address, size) }
    }
    pub unsafe fn drmGetBufInfo(&self, fd: ::core::ffi::c_int) -> drmBufInfoPtr {
        unsafe { (self.drmGetBufInfo)(fd) }
    }
    pub unsafe fn drmMapBufs(&self, fd: ::core::ffi::c_int) -> drmBufMapPtr {
        unsafe { (self.drmMapBufs)(fd) }
    }
    pub unsafe fn drmUnmapBufs(&self, bufs: drmBufMapPtr) -> ::core::ffi::c_int {
        unsafe { (self.drmUnmapBufs)(bufs) }
    }
    pub unsafe fn drmDMA(
        &self,
        fd: ::core::ffi::c_int,
        request: drmDMAReqPtr,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmDMA)(fd, request) }
    }
    pub unsafe fn drmFreeBufs(
        &self,
        fd: ::core::ffi::c_int,
        count: ::core::ffi::c_int,
        list: *mut ::core::ffi::c_int,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmFreeBufs)(fd, count, list) }
    }
    pub unsafe fn drmGetLock(
        &self,
        fd: ::core::ffi::c_int,
        context: drm_context_t,
        flags: drmLockFlags,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmGetLock)(fd, context, flags) }
    }
    pub unsafe fn drmUnlock(
        &self,
        fd: ::core::ffi::c_int,
        context: drm_context_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmUnlock)(fd, context) }
    }
    pub unsafe fn drmFinish(
        &self,
        fd: ::core::ffi::c_int,
        context: ::core::ffi::c_int,
        flags: drmLockFlags,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmFinish)(fd, context, flags) }
    }
    pub unsafe fn drmGetContextPrivateMapping(
        &self,
        fd: ::core::ffi::c_int,
        ctx_id: drm_context_t,
        handle: *mut drm_handle_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmGetContextPrivateMapping)(fd, ctx_id, handle) }
    }
    pub unsafe fn drmAgpAcquire(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_int {
        unsafe { (self.drmAgpAcquire)(fd) }
    }
    pub unsafe fn drmAgpRelease(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_int {
        unsafe { (self.drmAgpRelease)(fd) }
    }
    pub unsafe fn drmAgpEnable(
        &self,
        fd: ::core::ffi::c_int,
        mode: ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmAgpEnable)(fd, mode) }
    }
    pub unsafe fn drmAgpAlloc(
        &self,
        fd: ::core::ffi::c_int,
        size: ::core::ffi::c_ulong,
        type_: ::core::ffi::c_ulong,
        address: *mut ::core::ffi::c_ulong,
        handle: *mut drm_handle_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmAgpAlloc)(fd, size, type_, address, handle) }
    }
    pub unsafe fn drmAgpFree(
        &self,
        fd: ::core::ffi::c_int,
        handle: drm_handle_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmAgpFree)(fd, handle) }
    }
    pub unsafe fn drmAgpBind(
        &self,
        fd: ::core::ffi::c_int,
        handle: drm_handle_t,
        offset: ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmAgpBind)(fd, handle, offset) }
    }
    pub unsafe fn drmAgpUnbind(
        &self,
        fd: ::core::ffi::c_int,
        handle: drm_handle_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmAgpUnbind)(fd, handle) }
    }
    pub unsafe fn drmAgpVersionMajor(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_int {
        unsafe { (self.drmAgpVersionMajor)(fd) }
    }
    pub unsafe fn drmAgpVersionMinor(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_int {
        unsafe { (self.drmAgpVersionMinor)(fd) }
    }
    pub unsafe fn drmAgpGetMode(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_ulong {
        unsafe { (self.drmAgpGetMode)(fd) }
    }
    pub unsafe fn drmAgpBase(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_ulong {
        unsafe { (self.drmAgpBase)(fd) }
    }
    pub unsafe fn drmAgpSize(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_ulong {
        unsafe { (self.drmAgpSize)(fd) }
    }
    pub unsafe fn drmAgpMemoryUsed(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_ulong {
        unsafe { (self.drmAgpMemoryUsed)(fd) }
    }
    pub unsafe fn drmAgpMemoryAvail(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_ulong {
        unsafe { (self.drmAgpMemoryAvail)(fd) }
    }
    pub unsafe fn drmAgpVendorId(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_uint {
        unsafe { (self.drmAgpVendorId)(fd) }
    }
    pub unsafe fn drmAgpDeviceId(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_uint {
        unsafe { (self.drmAgpDeviceId)(fd) }
    }
    pub unsafe fn drmScatterGatherAlloc(
        &self,
        fd: ::core::ffi::c_int,
        size: ::core::ffi::c_ulong,
        handle: *mut drm_handle_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmScatterGatherAlloc)(fd, size, handle) }
    }
    pub unsafe fn drmScatterGatherFree(
        &self,
        fd: ::core::ffi::c_int,
        handle: drm_handle_t,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmScatterGatherFree)(fd, handle) }
    }
    pub unsafe fn drmWaitVBlank(
        &self,
        fd: ::core::ffi::c_int,
        vbl: drmVBlankPtr,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmWaitVBlank)(fd, vbl) }
    }
    pub unsafe fn drmSetServerInfo(&self, info: drmServerInfoPtr) {
        unsafe { (self.drmSetServerInfo)(info) }
    }
    pub unsafe fn drmError(
        &self,
        err: ::core::ffi::c_int,
        label: *const ::core::ffi::c_char,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmError)(err, label) }
    }
    pub unsafe fn drmMalloc(&self, size: ::core::ffi::c_int) -> *mut ::core::ffi::c_void {
        unsafe { (self.drmMalloc)(size) }
    }
    pub unsafe fn drmFree(&self, pt: *mut ::core::ffi::c_void) {
        unsafe { (self.drmFree)(pt) }
    }
    pub unsafe fn drmHashCreate(&self) -> *mut ::core::ffi::c_void {
        unsafe { (self.drmHashCreate)() }
    }
    pub unsafe fn drmHashDestroy(&self, t: *mut ::core::ffi::c_void) -> ::core::ffi::c_int {
        unsafe { (self.drmHashDestroy)(t) }
    }
    pub unsafe fn drmHashLookup(
        &self,
        t: *mut ::core::ffi::c_void,
        key: ::core::ffi::c_ulong,
        value: *mut *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmHashLookup)(t, key, value) }
    }
    pub unsafe fn drmHashInsert(
        &self,
        t: *mut ::core::ffi::c_void,
        key: ::core::ffi::c_ulong,
        value: *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmHashInsert)(t, key, value) }
    }
    pub unsafe fn drmHashDelete(
        &self,
        t: *mut ::core::ffi::c_void,
        key: ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmHashDelete)(t, key) }
    }
    pub unsafe fn drmHashFirst(
        &self,
        t: *mut ::core::ffi::c_void,
        key: *mut ::core::ffi::c_ulong,
        value: *mut *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmHashFirst)(t, key, value) }
    }
    pub unsafe fn drmHashNext(
        &self,
        t: *mut ::core::ffi::c_void,
        key: *mut ::core::ffi::c_ulong,
        value: *mut *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmHashNext)(t, key, value) }
    }
    pub unsafe fn drmRandomCreate(&self, seed: ::core::ffi::c_ulong) -> *mut ::core::ffi::c_void {
        unsafe { (self.drmRandomCreate)(seed) }
    }
    pub unsafe fn drmRandomDestroy(&self, state: *mut ::core::ffi::c_void) -> ::core::ffi::c_int {
        unsafe { (self.drmRandomDestroy)(state) }
    }
    pub unsafe fn drmRandom(&self, state: *mut ::core::ffi::c_void) -> ::core::ffi::c_ulong {
        unsafe { (self.drmRandom)(state) }
    }
    pub unsafe fn drmRandomDouble(&self, state: *mut ::core::ffi::c_void) -> f64 {
        unsafe { (self.drmRandomDouble)(state) }
    }
    pub unsafe fn drmSLCreate(&self) -> *mut ::core::ffi::c_void {
        unsafe { (self.drmSLCreate)() }
    }
    pub unsafe fn drmSLDestroy(&self, l: *mut ::core::ffi::c_void) -> ::core::ffi::c_int {
        unsafe { (self.drmSLDestroy)(l) }
    }
    pub unsafe fn drmSLLookup(
        &self,
        l: *mut ::core::ffi::c_void,
        key: ::core::ffi::c_ulong,
        value: *mut *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSLLookup)(l, key, value) }
    }
    pub unsafe fn drmSLInsert(
        &self,
        l: *mut ::core::ffi::c_void,
        key: ::core::ffi::c_ulong,
        value: *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSLInsert)(l, key, value) }
    }
    pub unsafe fn drmSLDelete(
        &self,
        l: *mut ::core::ffi::c_void,
        key: ::core::ffi::c_ulong,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSLDelete)(l, key) }
    }
    pub unsafe fn drmSLNext(
        &self,
        l: *mut ::core::ffi::c_void,
        key: *mut ::core::ffi::c_ulong,
        value: *mut *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSLNext)(l, key, value) }
    }
    pub unsafe fn drmSLFirst(
        &self,
        l: *mut ::core::ffi::c_void,
        key: *mut ::core::ffi::c_ulong,
        value: *mut *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSLFirst)(l, key, value) }
    }
    pub unsafe fn drmSLDump(&self, l: *mut ::core::ffi::c_void) {
        unsafe { (self.drmSLDump)(l) }
    }
    pub unsafe fn drmSLLookupNeighbors(
        &self,
        l: *mut ::core::ffi::c_void,
        key: ::core::ffi::c_ulong,
        prev_key: *mut ::core::ffi::c_ulong,
        prev_value: *mut *mut ::core::ffi::c_void,
        next_key: *mut ::core::ffi::c_ulong,
        next_value: *mut *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSLLookupNeighbors)(l, key, prev_key, prev_value, next_key, next_value) }
    }
    pub unsafe fn drmOpenOnce(
        &self,
        unused: *mut ::core::ffi::c_void,
        BusID: *const ::core::ffi::c_char,
        newlyopened: *mut ::core::ffi::c_int,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmOpenOnce)(unused, BusID, newlyopened) }
    }
    pub unsafe fn drmOpenOnceWithType(
        &self,
        BusID: *const ::core::ffi::c_char,
        newlyopened: *mut ::core::ffi::c_int,
        type_: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmOpenOnceWithType)(BusID, newlyopened, type_) }
    }
    pub unsafe fn drmCloseOnce(&self, fd: ::core::ffi::c_int) {
        unsafe { (self.drmCloseOnce)(fd) }
    }
    pub unsafe fn drmSetMaster(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_int {
        unsafe { (self.drmSetMaster)(fd) }
    }
    pub unsafe fn drmDropMaster(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_int {
        unsafe { (self.drmDropMaster)(fd) }
    }
    pub unsafe fn drmIsMaster(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_int {
        unsafe { (self.drmIsMaster)(fd) }
    }
    pub unsafe fn drmHandleEvent(
        &self,
        fd: ::core::ffi::c_int,
        evctx: drmEventContextPtr,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmHandleEvent)(fd, evctx) }
    }
    pub unsafe fn drmGetDeviceNameFromFd(
        &self,
        fd: ::core::ffi::c_int,
    ) -> *mut ::core::ffi::c_char {
        unsafe { (self.drmGetDeviceNameFromFd)(fd) }
    }
    pub unsafe fn drmGetDeviceNameFromFd2(
        &self,
        fd: ::core::ffi::c_int,
    ) -> *mut ::core::ffi::c_char {
        unsafe { (self.drmGetDeviceNameFromFd2)(fd) }
    }
    pub unsafe fn drmGetNodeTypeFromFd(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_int {
        unsafe { (self.drmGetNodeTypeFromFd)(fd) }
    }
    pub unsafe fn drmPrimeHandleToFD(
        &self,
        fd: ::core::ffi::c_int,
        handle: u32,
        flags: u32,
        prime_fd: *mut ::core::ffi::c_int,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmPrimeHandleToFD)(fd, handle, flags, prime_fd) }
    }
    pub unsafe fn drmPrimeFDToHandle(
        &self,
        fd: ::core::ffi::c_int,
        prime_fd: ::core::ffi::c_int,
        handle: *mut u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmPrimeFDToHandle)(fd, prime_fd, handle) }
    }
    pub unsafe fn drmCloseBufferHandle(
        &self,
        fd: ::core::ffi::c_int,
        handle: u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmCloseBufferHandle)(fd, handle) }
    }
    pub unsafe fn drmGetPrimaryDeviceNameFromFd(
        &self,
        fd: ::core::ffi::c_int,
    ) -> *mut ::core::ffi::c_char {
        unsafe { (self.drmGetPrimaryDeviceNameFromFd)(fd) }
    }
    pub unsafe fn drmGetRenderDeviceNameFromFd(
        &self,
        fd: ::core::ffi::c_int,
    ) -> *mut ::core::ffi::c_char {
        unsafe { (self.drmGetRenderDeviceNameFromFd)(fd) }
    }
    pub unsafe fn drmGetDevice(
        &self,
        fd: ::core::ffi::c_int,
        device: *mut drmDevicePtr,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmGetDevice)(fd, device) }
    }
    pub unsafe fn drmFreeDevice(&self, device: *mut drmDevicePtr) {
        unsafe { (self.drmFreeDevice)(device) }
    }
    pub unsafe fn drmGetDevices(
        &self,
        devices: *mut drmDevicePtr,
        max_devices: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmGetDevices)(devices, max_devices) }
    }
    pub unsafe fn drmFreeDevices(&self, devices: *mut drmDevicePtr, count: ::core::ffi::c_int) {
        unsafe { (self.drmFreeDevices)(devices, count) }
    }
    pub unsafe fn drmGetDevice2(
        &self,
        fd: ::core::ffi::c_int,
        flags: u32,
        device: *mut drmDevicePtr,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmGetDevice2)(fd, flags, device) }
    }
    pub unsafe fn drmGetDevices2(
        &self,
        flags: u32,
        devices: *mut drmDevicePtr,
        max_devices: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmGetDevices2)(flags, devices, max_devices) }
    }
    pub unsafe fn drmGetDeviceFromDevId(
        &self,
        dev_id: dev_t,
        flags: u32,
        device: *mut drmDevicePtr,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmGetDeviceFromDevId)(dev_id, flags, device) }
    }
    #[doc = " Get the node type (DRM_NODE_PRIMARY or DRM_NODE_RENDER) from a device ID.\n\n Returns negative errno on error."]
    pub unsafe fn drmGetNodeTypeFromDevId(&self, devid: dev_t) -> ::core::ffi::c_int {
        unsafe { (self.drmGetNodeTypeFromDevId)(devid) }
    }
    #[doc = " Check if two drmDevice pointers represent the same DRM device.\n\n Returns 1 if the devices are equal, 0 otherwise."]
    pub unsafe fn drmDevicesEqual(&self, a: drmDevicePtr, b: drmDevicePtr) -> ::core::ffi::c_int {
        unsafe { (self.drmDevicesEqual)(a, b) }
    }
    pub unsafe fn drmSyncobjCreate(
        &self,
        fd: ::core::ffi::c_int,
        flags: u32,
        handle: *mut u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSyncobjCreate)(fd, flags, handle) }
    }
    pub unsafe fn drmSyncobjDestroy(
        &self,
        fd: ::core::ffi::c_int,
        handle: u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSyncobjDestroy)(fd, handle) }
    }
    pub unsafe fn drmSyncobjHandleToFD(
        &self,
        fd: ::core::ffi::c_int,
        handle: u32,
        obj_fd: *mut ::core::ffi::c_int,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSyncobjHandleToFD)(fd, handle, obj_fd) }
    }
    pub unsafe fn drmSyncobjFDToHandle(
        &self,
        fd: ::core::ffi::c_int,
        obj_fd: ::core::ffi::c_int,
        handle: *mut u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSyncobjFDToHandle)(fd, obj_fd, handle) }
    }
    pub unsafe fn drmSyncobjImportSyncFile(
        &self,
        fd: ::core::ffi::c_int,
        handle: u32,
        sync_file_fd: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSyncobjImportSyncFile)(fd, handle, sync_file_fd) }
    }
    pub unsafe fn drmSyncobjExportSyncFile(
        &self,
        fd: ::core::ffi::c_int,
        handle: u32,
        sync_file_fd: *mut ::core::ffi::c_int,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSyncobjExportSyncFile)(fd, handle, sync_file_fd) }
    }
    pub unsafe fn drmSyncobjWait(
        &self,
        fd: ::core::ffi::c_int,
        handles: *mut u32,
        num_handles: ::core::ffi::c_uint,
        timeout_nsec: i64,
        flags: ::core::ffi::c_uint,
        first_signaled: *mut u32,
    ) -> ::core::ffi::c_int {
        unsafe {
            (self.drmSyncobjWait)(
                fd,
                handles,
                num_handles,
                timeout_nsec,
                flags,
                first_signaled,
            )
        }
    }
    pub unsafe fn drmSyncobjReset(
        &self,
        fd: ::core::ffi::c_int,
        handles: *const u32,
        handle_count: u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSyncobjReset)(fd, handles, handle_count) }
    }
    pub unsafe fn drmSyncobjSignal(
        &self,
        fd: ::core::ffi::c_int,
        handles: *const u32,
        handle_count: u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSyncobjSignal)(fd, handles, handle_count) }
    }
    pub unsafe fn drmSyncobjTimelineSignal(
        &self,
        fd: ::core::ffi::c_int,
        handles: *const u32,
        points: *mut u64,
        handle_count: u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSyncobjTimelineSignal)(fd, handles, points, handle_count) }
    }
    pub unsafe fn drmSyncobjTimelineWait(
        &self,
        fd: ::core::ffi::c_int,
        handles: *mut u32,
        points: *mut u64,
        num_handles: ::core::ffi::c_uint,
        timeout_nsec: i64,
        flags: ::core::ffi::c_uint,
        first_signaled: *mut u32,
    ) -> ::core::ffi::c_int {
        unsafe {
            (self.drmSyncobjTimelineWait)(
                fd,
                handles,
                points,
                num_handles,
                timeout_nsec,
                flags,
                first_signaled,
            )
        }
    }
    pub unsafe fn drmSyncobjQuery(
        &self,
        fd: ::core::ffi::c_int,
        handles: *mut u32,
        points: *mut u64,
        handle_count: u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSyncobjQuery)(fd, handles, points, handle_count) }
    }
    pub unsafe fn drmSyncobjQuery2(
        &self,
        fd: ::core::ffi::c_int,
        handles: *mut u32,
        points: *mut u64,
        handle_count: u32,
        flags: u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSyncobjQuery2)(fd, handles, points, handle_count, flags) }
    }
    pub unsafe fn drmSyncobjTransfer(
        &self,
        fd: ::core::ffi::c_int,
        dst_handle: u32,
        dst_point: u64,
        src_handle: u32,
        src_point: u64,
        flags: u32,
    ) -> ::core::ffi::c_int {
        unsafe {
            (self.drmSyncobjTransfer)(fd, dst_handle, dst_point, src_handle, src_point, flags)
        }
    }
    pub unsafe fn drmSyncobjEventfd(
        &self,
        fd: ::core::ffi::c_int,
        handle: u32,
        point: u64,
        ev_fd: ::core::ffi::c_int,
        flags: u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmSyncobjEventfd)(fd, handle, point, ev_fd, flags) }
    }
    pub unsafe fn drmGetFormatModifierVendor(&self, modifier: u64) -> *mut ::core::ffi::c_char {
        unsafe { (self.drmGetFormatModifierVendor)(modifier) }
    }
    pub unsafe fn drmGetFormatModifierName(&self, modifier: u64) -> *mut ::core::ffi::c_char {
        unsafe { (self.drmGetFormatModifierName)(modifier) }
    }
    pub unsafe fn drmGetFormatName(&self, format: u32) -> *mut ::core::ffi::c_char {
        unsafe { (self.drmGetFormatName)(format) }
    }
    pub unsafe fn drmModeFreeModeInfo(&self, ptr: drmModeModeInfoPtr) {
        unsafe { (self.drmModeFreeModeInfo)(ptr) }
    }
    pub unsafe fn drmModeFreeResources(&self, ptr: drmModeResPtr) {
        unsafe { (self.drmModeFreeResources)(ptr) }
    }
    pub unsafe fn drmModeFreeFB(&self, ptr: drmModeFBPtr) {
        unsafe { (self.drmModeFreeFB)(ptr) }
    }
    pub unsafe fn drmModeFreeFB2(&self, ptr: drmModeFB2Ptr) {
        unsafe { (self.drmModeFreeFB2)(ptr) }
    }
    pub unsafe fn drmModeFreeCrtc(&self, ptr: drmModeCrtcPtr) {
        unsafe { (self.drmModeFreeCrtc)(ptr) }
    }
    pub unsafe fn drmModeFreeConnector(&self, ptr: drmModeConnectorPtr) {
        unsafe { (self.drmModeFreeConnector)(ptr) }
    }
    pub unsafe fn drmModeFreeEncoder(&self, ptr: drmModeEncoderPtr) {
        unsafe { (self.drmModeFreeEncoder)(ptr) }
    }
    pub unsafe fn drmModeFreePlane(&self, ptr: drmModePlanePtr) {
        unsafe { (self.drmModeFreePlane)(ptr) }
    }
    pub unsafe fn drmModeFreePlaneResources(&self, ptr: drmModePlaneResPtr) {
        unsafe { (self.drmModeFreePlaneResources)(ptr) }
    }
    #[doc = " Check whether the DRM node supports Kernel Mode-Setting.\n\n Returns 1 if suitable for KMS, 0 otherwise."]
    pub unsafe fn drmIsKMS(&self, fd: ::core::ffi::c_int) -> ::core::ffi::c_int {
        unsafe { (self.drmIsKMS)(fd) }
    }
    #[doc = " Retrieves all of the resources associated with a card."]
    pub unsafe fn drmModeGetResources(&self, fd: ::core::ffi::c_int) -> drmModeResPtr {
        unsafe { (self.drmModeGetResources)(fd) }
    }
    #[doc = " Retrieve information about framebuffer bufferId"]
    pub unsafe fn drmModeGetFB(&self, fd: ::core::ffi::c_int, bufferId: u32) -> drmModeFBPtr {
        unsafe { (self.drmModeGetFB)(fd, bufferId) }
    }
    pub unsafe fn drmModeGetFB2(&self, fd: ::core::ffi::c_int, bufferId: u32) -> drmModeFB2Ptr {
        unsafe { (self.drmModeGetFB2)(fd, bufferId) }
    }
    #[doc = " Creates a new framebuffer with an buffer object as its scanout buffer."]
    pub unsafe fn drmModeAddFB(
        &self,
        fd: ::core::ffi::c_int,
        width: u32,
        height: u32,
        depth: u8,
        bpp: u8,
        pitch: u32,
        bo_handle: u32,
        buf_id: *mut u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeAddFB)(fd, width, height, depth, bpp, pitch, bo_handle, buf_id) }
    }
    pub unsafe fn drmModeAddFB2(
        &self,
        fd: ::core::ffi::c_int,
        width: u32,
        height: u32,
        pixel_format: u32,
        bo_handles: *const u32,
        pitches: *const u32,
        offsets: *const u32,
        buf_id: *mut u32,
        flags: u32,
    ) -> ::core::ffi::c_int {
        unsafe {
            (self.drmModeAddFB2)(
                fd,
                width,
                height,
                pixel_format,
                bo_handles,
                pitches,
                offsets,
                buf_id,
                flags,
            )
        }
    }
    pub unsafe fn drmModeAddFB2WithModifiers(
        &self,
        fd: ::core::ffi::c_int,
        width: u32,
        height: u32,
        pixel_format: u32,
        bo_handles: *const u32,
        pitches: *const u32,
        offsets: *const u32,
        modifier: *const u64,
        buf_id: *mut u32,
        flags: u32,
    ) -> ::core::ffi::c_int {
        unsafe {
            (self.drmModeAddFB2WithModifiers)(
                fd,
                width,
                height,
                pixel_format,
                bo_handles,
                pitches,
                offsets,
                modifier,
                buf_id,
                flags,
            )
        }
    }
    #[doc = " Destroies the given framebuffer."]
    pub unsafe fn drmModeRmFB(&self, fd: ::core::ffi::c_int, bufferId: u32) -> ::core::ffi::c_int {
        unsafe { (self.drmModeRmFB)(fd, bufferId) }
    }
    #[doc = " Close a framebuffer.\n\n Same as drmModeRmFB(), except it doesn't implicitly disable planes and CRTCs."]
    pub unsafe fn drmModeCloseFB(
        &self,
        fd: ::core::ffi::c_int,
        buffer_id: u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeCloseFB)(fd, buffer_id) }
    }
    #[doc = " Mark a region of a framebuffer as dirty."]
    pub unsafe fn drmModeDirtyFB(
        &self,
        fd: ::core::ffi::c_int,
        bufferId: u32,
        clips: drmModeClipPtr,
        num_clips: u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeDirtyFB)(fd, bufferId, clips, num_clips) }
    }
    #[doc = " Retrieve information about the ctrt crtcId"]
    pub unsafe fn drmModeGetCrtc(&self, fd: ::core::ffi::c_int, crtcId: u32) -> drmModeCrtcPtr {
        unsafe { (self.drmModeGetCrtc)(fd, crtcId) }
    }
    #[doc = " Set the mode on a crtc crtcId with the given mode modeId."]
    pub unsafe fn drmModeSetCrtc(
        &self,
        fd: ::core::ffi::c_int,
        crtcId: u32,
        bufferId: u32,
        x: u32,
        y: u32,
        connectors: *mut u32,
        count: ::core::ffi::c_int,
        mode: drmModeModeInfoPtr,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeSetCrtc)(fd, crtcId, bufferId, x, y, connectors, count, mode) }
    }
    #[doc = " Set the cursor on crtc"]
    pub unsafe fn drmModeSetCursor(
        &self,
        fd: ::core::ffi::c_int,
        crtcId: u32,
        bo_handle: u32,
        width: u32,
        height: u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeSetCursor)(fd, crtcId, bo_handle, width, height) }
    }
    pub unsafe fn drmModeSetCursor2(
        &self,
        fd: ::core::ffi::c_int,
        crtcId: u32,
        bo_handle: u32,
        width: u32,
        height: u32,
        hot_x: i32,
        hot_y: i32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeSetCursor2)(fd, crtcId, bo_handle, width, height, hot_x, hot_y) }
    }
    #[doc = " Move the cursor on crtc"]
    pub unsafe fn drmModeMoveCursor(
        &self,
        fd: ::core::ffi::c_int,
        crtcId: u32,
        x: ::core::ffi::c_int,
        y: ::core::ffi::c_int,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeMoveCursor)(fd, crtcId, x, y) }
    }
    #[doc = " Encoder functions"]
    pub unsafe fn drmModeGetEncoder(
        &self,
        fd: ::core::ffi::c_int,
        encoder_id: u32,
    ) -> drmModeEncoderPtr {
        unsafe { (self.drmModeGetEncoder)(fd, encoder_id) }
    }
    #[doc = " Retrieve all information about the connector connectorId. This will do a\n forced probe on the connector to retrieve remote information such as EDIDs\n from the display device."]
    pub unsafe fn drmModeGetConnector(
        &self,
        fd: ::core::ffi::c_int,
        connectorId: u32,
    ) -> drmModeConnectorPtr {
        unsafe { (self.drmModeGetConnector)(fd, connectorId) }
    }
    #[doc = " Retrieve current information, i.e the currently active mode and encoder,\n about the connector connectorId. This will not do any probing on the\n connector or remote device, and only reports what is currently known.\n For the complete set of modes and encoders associated with the connector\n use drmModeGetConnector() which will do a probe to determine any display\n link changes first."]
    pub unsafe fn drmModeGetConnectorCurrent(
        &self,
        fd: ::core::ffi::c_int,
        connector_id: u32,
    ) -> drmModeConnectorPtr {
        unsafe { (self.drmModeGetConnectorCurrent)(fd, connector_id) }
    }
    #[doc = " Get a bitmask of CRTCs a connector is compatible with.\n\n The bits reference CRTC indices. If the n-th CRTC is compatible with the\n connector, the n-th bit will be set. The indices are taken from the array\n returned by drmModeGetResources(). The indices are different from the object\n IDs.\n\n Zero is returned on error."]
    pub unsafe fn drmModeConnectorGetPossibleCrtcs(
        &self,
        fd: ::core::ffi::c_int,
        connector: *const drmModeConnector,
    ) -> u32 {
        unsafe { (self.drmModeConnectorGetPossibleCrtcs)(fd, connector) }
    }
    #[doc = " Attaches the given mode to an connector."]
    pub unsafe fn drmModeAttachMode(
        &self,
        fd: ::core::ffi::c_int,
        connectorId: u32,
        mode_info: drmModeModeInfoPtr,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeAttachMode)(fd, connectorId, mode_info) }
    }
    #[doc = " Detaches a mode from the connector\n must be unused, by the given mode."]
    pub unsafe fn drmModeDetachMode(
        &self,
        fd: ::core::ffi::c_int,
        connectorId: u32,
        mode_info: drmModeModeInfoPtr,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeDetachMode)(fd, connectorId, mode_info) }
    }
    pub unsafe fn drmModeGetProperty(
        &self,
        fd: ::core::ffi::c_int,
        propertyId: u32,
    ) -> drmModePropertyPtr {
        unsafe { (self.drmModeGetProperty)(fd, propertyId) }
    }
    pub unsafe fn drmModeFreeProperty(&self, ptr: drmModePropertyPtr) {
        unsafe { (self.drmModeFreeProperty)(ptr) }
    }
    pub unsafe fn drmModeGetPropertyBlob(
        &self,
        fd: ::core::ffi::c_int,
        blob_id: u32,
    ) -> drmModePropertyBlobPtr {
        unsafe { (self.drmModeGetPropertyBlob)(fd, blob_id) }
    }
    pub unsafe fn drmModeFormatModifierBlobIterNext(
        &self,
        blob: *const drmModePropertyBlobRes,
        iter: *mut drmModeFormatModifierIterator,
    ) -> bool {
        unsafe { (self.drmModeFormatModifierBlobIterNext)(blob, iter) }
    }
    pub unsafe fn drmModeFreePropertyBlob(&self, ptr: drmModePropertyBlobPtr) {
        unsafe { (self.drmModeFreePropertyBlob)(ptr) }
    }
    pub unsafe fn drmModeConnectorSetProperty(
        &self,
        fd: ::core::ffi::c_int,
        connector_id: u32,
        property_id: u32,
        value: u64,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeConnectorSetProperty)(fd, connector_id, property_id, value) }
    }
    pub unsafe fn drmCheckModesettingSupported(
        &self,
        busid: *const ::core::ffi::c_char,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmCheckModesettingSupported)(busid) }
    }
    pub unsafe fn drmModeCrtcSetGamma(
        &self,
        fd: ::core::ffi::c_int,
        crtc_id: u32,
        size: u32,
        red: *const u16,
        green: *const u16,
        blue: *const u16,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeCrtcSetGamma)(fd, crtc_id, size, red, green, blue) }
    }
    pub unsafe fn drmModeCrtcGetGamma(
        &self,
        fd: ::core::ffi::c_int,
        crtc_id: u32,
        size: u32,
        red: *mut u16,
        green: *mut u16,
        blue: *mut u16,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeCrtcGetGamma)(fd, crtc_id, size, red, green, blue) }
    }
    pub unsafe fn drmModePageFlip(
        &self,
        fd: ::core::ffi::c_int,
        crtc_id: u32,
        fb_id: u32,
        flags: u32,
        user_data: *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModePageFlip)(fd, crtc_id, fb_id, flags, user_data) }
    }
    pub unsafe fn drmModePageFlipTarget(
        &self,
        fd: ::core::ffi::c_int,
        crtc_id: u32,
        fb_id: u32,
        flags: u32,
        user_data: *mut ::core::ffi::c_void,
        target_vblank: u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModePageFlipTarget)(fd, crtc_id, fb_id, flags, user_data, target_vblank) }
    }
    pub unsafe fn drmModeGetPlaneResources(&self, fd: ::core::ffi::c_int) -> drmModePlaneResPtr {
        unsafe { (self.drmModeGetPlaneResources)(fd) }
    }
    pub unsafe fn drmModeGetPlane(&self, fd: ::core::ffi::c_int, plane_id: u32) -> drmModePlanePtr {
        unsafe { (self.drmModeGetPlane)(fd, plane_id) }
    }
    pub unsafe fn drmModeSetPlane(
        &self,
        fd: ::core::ffi::c_int,
        plane_id: u32,
        crtc_id: u32,
        fb_id: u32,
        flags: u32,
        crtc_x: i32,
        crtc_y: i32,
        crtc_w: u32,
        crtc_h: u32,
        src_x: u32,
        src_y: u32,
        src_w: u32,
        src_h: u32,
    ) -> ::core::ffi::c_int {
        unsafe {
            (self.drmModeSetPlane)(
                fd, plane_id, crtc_id, fb_id, flags, crtc_x, crtc_y, crtc_w, crtc_h, src_x, src_y,
                src_w, src_h,
            )
        }
    }
    pub unsafe fn drmModeObjectGetProperties(
        &self,
        fd: ::core::ffi::c_int,
        object_id: u32,
        object_type: u32,
    ) -> drmModeObjectPropertiesPtr {
        unsafe { (self.drmModeObjectGetProperties)(fd, object_id, object_type) }
    }
    pub unsafe fn drmModeFreeObjectProperties(&self, ptr: drmModeObjectPropertiesPtr) {
        unsafe { (self.drmModeFreeObjectProperties)(ptr) }
    }
    pub unsafe fn drmModeObjectSetProperty(
        &self,
        fd: ::core::ffi::c_int,
        object_id: u32,
        object_type: u32,
        property_id: u32,
        value: u64,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeObjectSetProperty)(fd, object_id, object_type, property_id, value) }
    }
    pub unsafe fn drmModeAtomicAlloc(&self) -> drmModeAtomicReqPtr {
        unsafe { (self.drmModeAtomicAlloc)() }
    }
    pub unsafe fn drmModeAtomicDuplicate(&self, req: drmModeAtomicReqPtr) -> drmModeAtomicReqPtr {
        unsafe { (self.drmModeAtomicDuplicate)(req) }
    }
    pub unsafe fn drmModeAtomicMerge(
        &self,
        base: drmModeAtomicReqPtr,
        augment: drmModeAtomicReqPtr,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeAtomicMerge)(base, augment) }
    }
    pub unsafe fn drmModeAtomicFree(&self, req: drmModeAtomicReqPtr) {
        unsafe { (self.drmModeAtomicFree)(req) }
    }
    pub unsafe fn drmModeAtomicGetCursor(&self, req: drmModeAtomicReqPtr) -> ::core::ffi::c_int {
        unsafe { (self.drmModeAtomicGetCursor)(req) }
    }
    pub unsafe fn drmModeAtomicSetCursor(
        &self,
        req: drmModeAtomicReqPtr,
        cursor: ::core::ffi::c_int,
    ) {
        unsafe { (self.drmModeAtomicSetCursor)(req, cursor) }
    }
    pub unsafe fn drmModeAtomicAddProperty(
        &self,
        req: drmModeAtomicReqPtr,
        object_id: u32,
        property_id: u32,
        value: u64,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeAtomicAddProperty)(req, object_id, property_id, value) }
    }
    pub unsafe fn drmModeAtomicCommit(
        &self,
        fd: ::core::ffi::c_int,
        req: drmModeAtomicReqPtr,
        flags: u32,
        user_data: *mut ::core::ffi::c_void,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeAtomicCommit)(fd, req, flags, user_data) }
    }
    pub unsafe fn drmModeCreatePropertyBlob(
        &self,
        fd: ::core::ffi::c_int,
        data: *const ::core::ffi::c_void,
        size: usize,
        id: *mut u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeCreatePropertyBlob)(fd, data, size, id) }
    }
    pub unsafe fn drmModeDestroyPropertyBlob(
        &self,
        fd: ::core::ffi::c_int,
        id: u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeDestroyPropertyBlob)(fd, id) }
    }
    pub unsafe fn drmModeCreateLease(
        &self,
        fd: ::core::ffi::c_int,
        objects: *const u32,
        num_objects: ::core::ffi::c_int,
        flags: ::core::ffi::c_int,
        lessee_id: *mut u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeCreateLease)(fd, objects, num_objects, flags, lessee_id) }
    }
    pub unsafe fn drmModeListLessees(&self, fd: ::core::ffi::c_int) -> drmModeLesseeListPtr {
        unsafe { (self.drmModeListLessees)(fd) }
    }
    pub unsafe fn drmModeGetLease(&self, fd: ::core::ffi::c_int) -> drmModeObjectListPtr {
        unsafe { (self.drmModeGetLease)(fd) }
    }
    pub unsafe fn drmModeRevokeLease(
        &self,
        fd: ::core::ffi::c_int,
        lessee_id: u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeRevokeLease)(fd, lessee_id) }
    }
    #[doc = " Get a string describing a connector type.\n\n NULL is returned if the connector type is unsupported. Callers should handle\n this gracefully, e.g. by falling back to \"Unknown\" or printing the raw value."]
    pub unsafe fn drmModeGetConnectorTypeName(
        &self,
        connector_type: u32,
    ) -> *const ::core::ffi::c_char {
        unsafe { (self.drmModeGetConnectorTypeName)(connector_type) }
    }
    #[doc = " Create a dumb buffer.\n\n Given a width, height and bits-per-pixel, the kernel will return a buffer\n handle, pitch and size. The flags must be zero.\n\n Returns 0 on success, negative errno on error."]
    pub unsafe fn drmModeCreateDumbBuffer(
        &self,
        fd: ::core::ffi::c_int,
        width: u32,
        height: u32,
        bpp: u32,
        flags: u32,
        handle: *mut u32,
        pitch: *mut u32,
        size: *mut u64,
    ) -> ::core::ffi::c_int {
        unsafe {
            (self.drmModeCreateDumbBuffer)(fd, width, height, bpp, flags, handle, pitch, size)
        }
    }
    #[doc = " Destroy a dumb buffer.\n\n Returns 0 on success, negative errno on error."]
    pub unsafe fn drmModeDestroyDumbBuffer(
        &self,
        fd: ::core::ffi::c_int,
        handle: u32,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeDestroyDumbBuffer)(fd, handle) }
    }
    #[doc = " Prepare a dumb buffer for mapping.\n\n The kernel returns an offset which can be used as an argument to mmap(2) on\n the DRM FD.\n\n Returns 0 on success, negative errno on error."]
    pub unsafe fn drmModeMapDumbBuffer(
        &self,
        fd: ::core::ffi::c_int,
        handle: u32,
        offset: *mut u64,
    ) -> ::core::ffi::c_int {
        unsafe { (self.drmModeMapDumbBuffer)(fd, handle, offset) }
    }
}
