use crate::ioctls::drm;
use nix::{ioctl_readwrite, ioctl_write_ptr};
#[allow(clippy::identity_op)]
const GLOBAL_REFRESH_NR: u8 = drm::COMMAND_BASE + 0x00;
const OFF_SCREEN_NR: u8 = drm::COMMAND_BASE + 0x01;
const EXTRACT_FB_NR: u8 = drm::COMMAND_BASE + 0x02;
const RECT_HINTS_NR: u8 = drm::COMMAND_BASE + 0x03;
const MODE_NR: u8 = drm::COMMAND_BASE + 0x04;
const ZERO_WAVEFORM_NR: u8 = drm::COMMAND_BASE + 0x05;
#[repr(C)]
pub struct GlobalRefresh {
pub trigger_global_refresh: u8,
}
ioctl_readwrite!(
global_refresh_iowr,
drm::IOCTL_MAGIC, GLOBAL_REFRESH_NR, GlobalRefresh);
#[repr(C)]
pub struct OffScreen {
pub _info: u64,
pub ptr_screen_content: u64,
}
ioctl_write_ptr!(
off_screen_iow,
drm::IOCTL_MAGIC, OFF_SCREEN_NR, OffScreen);
#[repr(C)]
pub struct ExtractFBs {
pub ptr_packed_inner_outer_nextprev: u64,
pub ptr_hints: u64,
pub ptr_prelim_target: u64,
pub ptr_phase1: u64,
pub ptr_phase2: u64,
}
ioctl_readwrite!(
extract_fbs_iowr, drm::IOCTL_MAGIC, EXTRACT_FB_NR, ExtractFBs);
#[repr(C)]
pub struct RectHint {
pub pixel_hints: u8,
pub _padding: [u8; 7],
pub rect: drm::Rect,
}
#[repr(C)]
pub struct RectHints {
pub set_default_hints: u8,
pub default_hints: u8,
pub _padding: [u8; 2],
pub num_rects: u32,
pub ptr_rect_hints: u64,
}
ioctl_write_ptr!(
rect_hints_iow,
drm::IOCTL_MAGIC, RECT_HINTS_NR, RectHints);
#[derive(Default)]
#[repr(C)]
pub struct Mode {
pub set_driver_mode: u8,
pub driver_mode: u8,
pub set_dither_mode: u8,
pub dither_mode: u8,
pub redraw_delay: u16,
pub set_redraw_delay: u8,
pub _pad: u8,
}
ioctl_readwrite!(
mode_iowr,
drm::IOCTL_MAGIC, MODE_NR, Mode);
impl Mode {
pub fn new() -> Self {
Default::default()
}
}
#[repr(C)]
pub struct ZeroWaveform {
pub set_zero_waveform_mode: u8,
pub zero_waveform_mode: u8,
pub _pad: [u8; 6],
}
ioctl_readwrite!(
zero_waveform_iowr, drm::IOCTL_MAGIC, ZERO_WAVEFORM_NR, ZeroWaveform);