cadmus_core/framebuffer/
mxcfb_sys.rs1#![allow(unused)]
2
3use nix::{ioctl_readwrite, ioctl_write_ptr};
4use std::mem;
5use std::ptr;
6
7const MAGIC: u8 = b'F';
8
9ioctl_write_ptr!(send_update_v1, MAGIC, 0x2E, MxcfbUpdateDataV1);
10ioctl_write_ptr!(send_update_v2, MAGIC, 0x2E, MxcfbUpdateDataV2);
11ioctl_write_ptr!(send_update_v3, MAGIC, 0x2E, HwtConUpdateData);
12ioctl_write_ptr!(wait_for_update_v1, MAGIC, 0x2F, u32);
13ioctl_readwrite!(wait_for_update_v2, MAGIC, 0x2F, MxcfbUpdateMarkerData);
14
15#[repr(C)]
16#[derive(Clone, Debug)]
17pub struct MxcfbRect {
18 pub top: u32,
19 pub left: u32,
20 pub width: u32,
21 pub height: u32,
22}
23
24impl Default for MxcfbRect {
25 fn default() -> Self {
26 unsafe { mem::zeroed() }
27 }
28}
29
30#[repr(C)]
31#[derive(Clone, Debug)]
32pub struct MxcfbAltBufferDataV1 {
33 pub virt_addr: *const libc::c_void,
34 pub phys_addr: u32,
35 pub width: u32,
36 pub height: u32,
37 pub alt_update_region: MxcfbRect,
38}
39
40impl Default for MxcfbAltBufferDataV1 {
41 fn default() -> Self {
42 MxcfbAltBufferDataV1 {
43 virt_addr: ptr::null(),
44 phys_addr: 0,
45 width: 0,
46 height: 0,
47 alt_update_region: MxcfbRect::default(),
48 }
49 }
50}
51
52#[repr(C)]
53#[derive(Clone, Debug)]
54pub struct MxcfbUpdateDataV1 {
55 pub update_region: MxcfbRect,
56 pub waveform_mode: u32,
57 pub update_mode: u32,
58 pub update_marker: u32,
59 pub temp: libc::c_int,
60 pub flags: libc::c_uint,
61 pub alt_buffer_data: MxcfbAltBufferDataV1,
62}
63
64#[repr(C)]
65#[derive(Clone, Debug)]
66pub struct MxcfbUpdateMarkerData {
67 pub update_marker: u32,
68 pub collision_test: u32,
69}
70
71#[repr(C)]
72#[derive(Clone, Debug)]
73pub struct MxcfbAltBufferDataV2 {
74 pub phys_addr: u32,
75 pub width: u32,
76 pub height: u32,
77 pub alt_update_region: MxcfbRect,
78}
79
80impl Default for MxcfbAltBufferDataV2 {
81 fn default() -> Self {
82 MxcfbAltBufferDataV2 {
83 phys_addr: 0,
84 width: 0,
85 height: 0,
86 alt_update_region: MxcfbRect::default(),
87 }
88 }
89}
90
91#[repr(C)]
92#[derive(Clone, Debug)]
93pub struct MxcfbUpdateDataV2 {
94 pub update_region: MxcfbRect,
95 pub waveform_mode: u32,
96 pub update_mode: u32,
97 pub update_marker: u32,
98 pub temp: libc::c_int,
99 pub flags: libc::c_uint,
100 pub dither_mode: libc::c_int,
101 pub quant_bit: libc::c_int,
102 pub alt_buffer_data: MxcfbAltBufferDataV2,
103}
104
105#[repr(C)]
106#[derive(Clone, Debug)]
107pub struct HwtConUpdateData {
108 pub update_region: MxcfbRect,
109 pub waveform_mode: u32,
110 pub update_mode: u32,
111 pub update_marker: u32,
112 pub flags: libc::c_uint,
113 pub dither_mode: libc::c_int,
114}
115
116pub const WAVEFORM_MODE_AUTO: u32 = 0x101;
117
118pub const NTX_WFM_MODE_INIT: u32 = 0;
119pub const NTX_WFM_MODE_DU: u32 = 1;
120pub const NTX_WFM_MODE_GC16: u32 = 2;
121pub const NTX_WFM_MODE_GC4: u32 = 3;
122pub const NTX_WFM_MODE_A2: u32 = 4;
123pub const NTX_WFM_MODE_GL16: u32 = 5;
124pub const NTX_WFM_MODE_GLR16: u32 = 6;
125pub const NTX_WFM_MODE_GLD16: u32 = 7;
126pub const NTX_WFM_MODE_DU4: u32 = 8;
128pub const NTX_WFM_MODE_GCK16: u32 = 9;
129pub const NTX_WFM_MODE_GLKW16: u32 = 10;
130
131pub const UPDATE_MODE_PARTIAL: u32 = 0x0;
132pub const UPDATE_MODE_FULL: u32 = 0x1;
133
134pub const TEMP_USE_AMBIENT: libc::c_int = 0x1000;
135
136pub const EPDC_FLAG_ENABLE_INVERSION: libc::c_uint = 0x01;
137pub const EPDC_FLAG_FORCE_MONOCHROME: libc::c_uint = 0x02;
138
139pub const EPDC_FLAG_TEST_COLLISION: libc::c_uint = 0x200;
140pub const EPDC_FLAG_GROUP_UPDATE: libc::c_uint = 0x400;
141
142pub const EPDC_FLAG_USE_AAD: libc::c_uint = 0x1000;
143pub const EPDC_FLAG_USE_REGAL: libc::c_uint = 0x8000;
144
145pub const EPDC_FLAG_USE_DITHERING_Y1: libc::c_uint = 0x2000;
146pub const EPDC_FLAG_USE_DITHERING_Y4: libc::c_uint = 0x4000;
147pub const EPDC_FLAG_USE_DITHERING_NTX_D8: libc::c_uint = 0x100000;
148
149pub const EPDC_FLAG_USE_DITHERING_PASSTHROUGH: libc::c_int = 0;
150pub const EPDC_FLAG_USE_DITHERING_ORDERED: libc::c_int = 3;
153pub const HWTCON_WAVEFORM_MODE_GL16: u32 = 3;
157pub const HWTCON_WAVEFORM_MODE_GLR16: u32 = 4;
158pub const HWTCON_WAVEFORM_MODE_REAGL: u32 = 4;
159pub const HWTCON_WAVEFORM_MODE_A2: u32 = 6;
160pub const HWTCON_WAVEFORM_MODE_GCK16: u32 = 8;
161pub const HWTCON_WAVEFORM_MODE_GLKW16: u32 = 9;
162pub const HWTCON_WAVEFORM_MODE_GCC16: u32 = 10;
164pub const HWTCON_WAVEFORM_MODE_GLRC16: u32 = 11;
165
166pub const HWTCON_FLAG_USE_DITHERING: libc::c_uint = 0x1;
167pub const HWTCON_FLAG_FORCE_A2_OUTPUT: libc::c_uint = 16;
168
169pub const HWTCON_FLAG_USE_DITHERING_Y8_Y1_S: libc::c_int = 770;
170pub const HWTCON_FLAG_USE_DITHERING_Y8_Y4_S: libc::c_int = 258;