cadmus_core/framebuffer/
mxcfb_sys.rs

1#![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;
126/* Mark 9 */
127pub 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;
150// pub const EPDC_FLAG_USE_DITHERING_FLOYD_STEINBERG: libc::c_int = 1;
151// pub const EPDC_FLAG_USE_DITHERING_ATKINSON: libc::c_int = 2;
152pub const EPDC_FLAG_USE_DITHERING_ORDERED: libc::c_int = 3;
153// pub const EPDC_FLAG_USE_DITHERING_QUANT_ONLY: libc::c_int = 4;
154
155/* Mark 11 */
156pub 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;
162/* Mark 12 */
163pub 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;