1use libc::*;
27
28use ffi::drm::*;
29use ffi::drm_mode::*;
30
31pub const DRM_MODE_SCALE_NON_GPU: c_int = 0;
50pub const DRM_MODE_SCALE_NO_SCALE: c_int = 2;
51
52pub const DRM_MODE_ENCODER_NONE: c_int = 0;
54pub const DRM_MODE_ENCODER_DAC: c_int = 1;
55pub const DRM_MODE_ENCODER_TMDS: c_int = 2;
56pub const DRM_MODE_ENCODER_LVDS: c_int = 3;
57pub const DRM_MODE_ENCODER_TVDAC: c_int = 4;
58pub const DRM_MODE_ENCODER_VIRTUAL: c_int = 5;
59pub const DRM_MODE_ENCODER_DSI: c_int = 6;
60
61pub const DRM_MODE_SUBCONNECTOR_AUTOMATIC: c_int = 0;
62pub const DRM_MODE_SUBCONNECTOR_UNKNOWN: c_int = 0;
63pub const DRM_MODE_SUBCONNECTOR_DVID: c_int = 3;
64pub const DRM_MODE_SUBCONNECTOR_DVIA: c_int = 4;
65pub const DRM_MODE_SUBCONNECTOR_COMPOSITE: c_int = 5;
66pub const DRM_MODE_SUBCONNECTOR_SVIDEO: c_int = 6;
67pub const DRM_MODE_SUBCONNECTOR_COMPONENT: c_int = 8;
68pub const DRM_MODE_SUBCONNECTOR_SCART: c_int = 9;
69
70pub const DRM_MODE_CONNECTOR_UNKNOWN: c_int = 0;
71pub const DRM_MODE_CONNECTOR_VGA: c_int = 1;
72pub const DRM_MODE_CONNECTOR_DVII: c_int = 2;
73pub const DRM_MODE_CONNECTOR_DVID: c_int = 3;
74pub const DRM_MODE_CONNECTOR_DVIA: c_int = 4;
75pub const DRM_MODE_CONNECTOR_COMPOSITE: c_int = 5;
76pub const DRM_MODE_CONNECTOR_SVIDEO: c_int = 6;
77pub const DRM_MODE_CONNECTOR_LVDS: c_int = 7;
78pub const DRM_MODE_CONNECTOR_COMPONENT: c_int = 8;
79pub const DRM_MODE_CONNECTOR_9PINDIN: c_int = 9;
80pub const DRM_MODE_CONNECTOR_DISPLAYPORT: c_int = 10;
81pub const DRM_MODE_CONNECTOR_HDMIA: c_int = 11;
82pub const DRM_MODE_CONNECTOR_HDMIB: c_int = 12;
83pub const DRM_MODE_CONNECTOR_TV: c_int = 13;
84pub const DRM_MODE_CONNECTOR_EDP: c_int = 14;
85pub const DRM_MODE_CONNECTOR_VIRTUAL: c_int = 15;
86pub const DRM_MODE_CONNECTOR_DSI: c_int = 16;
87
88pub const DRM_MODE_PROP_PENDING: c_int = (1<<0);
89pub const DRM_MODE_PROP_RANGE: c_int = (1<<1);
90pub const DRM_MODE_PROP_IMMUTABLE: c_int = (1<<2);
91pub const DRM_MODE_PROP_ENUM: c_int = (1<<3) ;
92pub const DRM_MODE_PROP_BLOB: c_int = (1<<4);
93
94pub const DRM_MODE_CURSOR_BO: c_int = (1<<0);
95pub const DRM_MODE_CURSOR_MOVE: c_int = (1<<1);
96
97pub const DRM_MODE_FEATURE_KMS: c_int = 1;
104pub const DRM_MODE_FEATURE_DIRTYFB: c_int = 1;
105
106#[repr(C)]
107pub struct drmModeRes {
108 pub count_fbs: c_int,
109 pub fbs: *mut uint32_t,
110
111 pub count_crtcs: c_int,
112 pub crtcs: *mut uint32_t,
113
114 pub count_connectors: c_int,
115 pub connectors: *mut uint32_t,
116
117 pub count_encoders: c_int,
118 pub encoders: *mut uint32_t,
119
120 pub min_width: uint32_t,
121 pub max_width: uint32_t,
122 pub min_height: uint32_t,
123 pub max_height: uint32_t
124}
125impl ::std::default::Default for drmModeRes {
126 fn default() -> drmModeRes { unsafe { ::std::mem::zeroed() } }
127}
128
129pub type drmModeResPtr = *mut drmModeRes;
130
131#[repr(C)]
132#[derive(Clone)]
133pub struct drmModeModeInfo {
134 pub clock: uint32_t,
135 pub hdisplay: uint16_t,
136 pub hsync_start: uint16_t,
137 pub hsync_end: uint16_t,
138 pub htotal: uint16_t,
139 pub hskew: uint16_t,
140 pub vdisplay: uint16_t,
141 pub vsync_start: uint16_t,
142 pub vsync_end: uint16_t,
143 pub vtotal: uint16_t,
144 pub vscan: uint16_t,
145 pub vrefresh: uint32_t,
146 pub flags: uint32_t,
147 pub mode_type: uint32_t,
148 pub name: [c_char; DRM_DISPLAY_MODE_LEN as usize]
149}
150impl ::std::default::Default for drmModeModeInfo {
151 fn default() -> drmModeModeInfo { unsafe { ::std::mem::zeroed() } }
152}
153
154pub type drmModeModeInfoPtr = *const drmModeModeInfo;
155
156#[repr(C)]
157pub struct drmModeFB {
158 fb_id: uint32_t,
159 width: uint32_t,
160 height: uint32_t,
161 pitch: uint32_t,
162 bpp: uint32_t,
163 depth: uint32_t,
164 handle: uint32_t
166}
167impl ::std::default::Default for drmModeFB {
168 fn default() -> drmModeFB { unsafe { ::std::mem::zeroed() } }
169}
170
171pub type drmModeFBPtr = *mut drmModeFB;
172
173pub type drmModeClip = drm_clip_rect;
174pub type drmModeClipPtr = *mut drmModeClip;
175
176#[repr(C)]
177pub struct drmModePropertyBlobRes {
178 id: uint32_t,
179 length: uint32_t,
180 data: *mut c_void
181}
182impl ::std::default::Default for drmModePropertyBlobRes {
183 fn default() -> drmModePropertyBlobRes { unsafe { ::std::mem::zeroed() } }
184}
185
186pub type drmModePropertyBlobPtr = *mut drmModePropertyBlobRes;
187
188#[repr(C)]
189pub struct drmModePropertyRes {
190 prop_id: uint32_t,
191 flags: uint32_t,
192 name: [c_char; DRM_PROP_NAME_LEN as usize],
193 count_values: c_int,
194 values: uint64_t, count_enums: c_int,
196 enums: *mut drm_mode_property_enum,
197 count_blobs: c_int,
198 blob_ids: *mut uint32_t
199}
200impl ::std::default::Default for drmModePropertyRes {
201 fn default() -> drmModePropertyRes { unsafe { ::std::mem::zeroed() } }
202}
203
204pub type drmModePropertyPtr = *mut drmModePropertyRes;
205
206#[repr(C)]
216pub struct drmModeCrtc {
217 pub crtc_id: uint32_t,
218 pub buffer_id: uint32_t, pub x: uint32_t,
221 pub y: uint32_t, pub width: uint32_t,
223 pub height: uint32_t,
224 pub mode_valid: c_int,
225 pub mode: drmModeModeInfo,
226 pub gamma_size: c_int
227}
228impl ::std::default::Default for drmModeCrtc {
229 fn default() -> drmModeCrtc { unsafe { ::std::mem::zeroed() } }
230}
231
232pub type drmModeCrtcPtr = *mut drmModeCrtc;
233
234#[repr(C)]
235pub struct drmModeEncoder {
236 pub encoder_id: uint32_t,
237 pub encoder_type: uint32_t,
238 pub crtc_id: uint32_t,
239 pub possible_crtcs: uint32_t,
240 pub possible_clones: uint32_t
241}
242impl ::std::default::Default for drmModeEncoder {
243 fn default() -> drmModeEncoder { unsafe { ::std::mem::zeroed() } }
244}
245
246pub type drmModeEncoderPtr = *mut drmModeEncoder;
247
248#[repr(C)]
249pub enum drmModeConnection {
250 DRM_MODE_CONNECTED = 1,
251 DRM_MODE_DISCONNECTED = 2,
252 DRM_MODE_UNKNOWNCONNECTION = 3
253}
254
255#[repr(C)]
256pub enum drmModeSubPixel {
257 DRM_MODE_SUBPIXEL_UNKNOWN = 1,
258 DRM_MODE_SUBPIXEL_HORIZONTAL_RGB = 2,
259 DRM_MODE_SUBPIXEL_HORIZONTAL_BGR = 3,
260 DRM_MODE_SUBPIXEL_VERTICAL_RGB = 4,
261 DRM_MODE_SUBPIXEL_VERTICAL_BGR = 5,
262 DRM_MODE_SUBPIXEL_NONE = 6
263}
264
265#[repr(C)]
266pub struct drmModeConnector {
267 pub connector_id: uint32_t,
268 pub encoder_id: uint32_t, pub connector_type: uint32_t,
270 pub connector_type_id: uint32_t,
271 pub connection: drmModeConnection,
272 pub mmWidth: uint32_t,
273 pub mmHeight: uint32_t, pub subpixel: drmModeSubPixel,
275
276 pub count_modes: c_int,
277 pub modes: drmModeModeInfoPtr,
278
279 pub count_props: c_int,
280 pub props: *mut uint32_t, pub prop_values: *mut uint64_t, pub count_encoders: c_int,
284 pub encoders: *mut uint32_t
285}
286impl ::std::default::Default for drmModeConnector {
287 fn default() -> drmModeConnector { unsafe { ::std::mem::zeroed() } }
288}
289
290pub type drmModeConnectorPtr = *mut drmModeConnector;
291
292pub const DRM_PLANE_TYPE_OVERLAY: c_int = 0;
293pub const DRM_PLANE_TYPE_PRIMARY: c_int = 1;
294pub const DRM_PLANE_TYPE_CURSOR: c_int = 2;
295
296#[repr(C)]
297pub struct drmModeObjectProperties {
298 count_props: uint32_t,
299 props: *mut uint32_t,
300 prop_values: *mut uint64_t
301}
302impl ::std::default::Default for drmModeObjectProperties {
303 fn default() -> drmModeObjectProperties { unsafe { ::std::mem::zeroed() } }
304}
305
306pub type drmModeObjectPropertiesPtr = *mut drmModeObjectProperties;
307
308#[repr(C)]
309pub struct drmModePlane {
310 count_formats: uint32_t,
311 formats: *mut uint32_t,
312 plane_id: uint32_t,
313
314 crtc_id: uint32_t,
315 fb_id: uint32_t,
316
317 crtc_x: uint32_t,
318 crtc_y: uint32_t,
319 x: uint32_t,
320 y: uint32_t,
321
322 possible_crtcs: uint32_t,
323 gamma_size: uint32_t
324}
325impl ::std::default::Default for drmModePlane {
326 fn default() -> drmModePlane { unsafe { ::std::mem::zeroed() } }
327}
328
329pub type drmModePlanePtr = *mut drmModePlane;
330
331#[repr(C)]
332pub struct drmModePlaneRes {
333 count_planes: uint32_t,
334 planes: *mut uint32_t
335}
336impl ::std::default::Default for drmModePlaneRes {
337 fn default() -> drmModePlaneRes { unsafe { ::std::mem::zeroed() } }
338}
339
340pub type drmModePlaneResPtr = *mut drmModePlaneRes;
341
342#[repr(C)]
343pub struct _drmModeAtomicReqItem {
344 object_id: uint32_t,
345 property_id: uint32_t,
346 value: uint64_t
347}
348impl ::std::default::Default for _drmModeAtomicReqItem {
349 fn default() -> _drmModeAtomicReqItem { unsafe { ::std::mem::zeroed() } }
350}
351
352
353#[repr(C)]
354pub struct _drmModeAtomicReq {
355 cursor: uint32_t,
356 size_items: uint32_t,
357 items: _drmModeAtomicReqItem
358}
359impl ::std::default::Default for _drmModeAtomicReq {
360 fn default() -> _drmModeAtomicReq { unsafe { ::std::mem::zeroed() } }
361}
362
363
364pub type drmModeAtomicReq = _drmModeAtomicReq;
365pub type drmModeAtomicReqPtr = *mut drmModeAtomicReq;
366
367#[link(name = "drm")]
368#[allow(dead_code)]
369extern {
370 pub fn drmModeFreeModeInfo(ptr: drmModeModeInfoPtr) -> c_void;
371 pub fn drmModeFreeResources(ptr: drmModeResPtr) -> c_void;
372 pub fn drmModeFreeFB(ptr: drmModeFBPtr) -> c_void;
373 pub fn drmModeFreeCrtc(ptr: drmModeCrtcPtr) -> c_void;
374 pub fn drmModeFreeConnector(ptr: drmModeConnectorPtr) -> c_void;
375 pub fn drmModeFreeEncoder(ptr: drmModeEncoderPtr) -> c_void;
376 pub fn drmModeFreePlane(ptr: drmModePlanePtr) -> c_void;
377 pub fn drmModeFreePlaneResources(ptr: drmModePlaneResPtr) -> c_void;
378
379 pub fn drmModeGetResources(fd: c_int) -> drmModeResPtr;
383
384 pub fn drmModeGetFB(fd: c_int, bufferId: uint32_t) -> drmModeFBPtr;
392
393 pub fn drmModeAddFB(fd: c_int, width: uint32_t, height: uint32_t, depth: uint8_t,
397 bpp: uint8_t, pitch: uint32_t, bo_handle: uint32_t,
398 buf_id: *mut uint32_t) -> c_int;
399
400 pub fn drmModeAddFB2(fd: c_int, width: uint32_t, height: uint32_t,
402 pixel_format: uint32_t, bo_handles: [uint32_t; 4],
403 pitches: [uint32_t; 4], offsets: [uint32_t; 4],
404 buf_id: *mut uint32_t, flags: uint32_t) -> c_int;
405
406 pub fn drmModeRmFB(fd: c_int, bufferId: uint32_t) -> c_int;
410
411 pub fn drmModeDirtyFB(fd: c_int, bufferId: uint32_t,
415 clips: drmModeClipPtr, num_clips: uint32_t) -> c_int;
416
417 pub fn drmModeGetCrtc(fd: c_int, crtcId: uint32_t) -> drmModeCrtcPtr;
425
426 pub fn drmModeSetCrtc(fd: c_int, crtcId: uint32_t, bufferId: uint32_t,
430 x: uint32_t, y: uint32_t, connectors: *const uint32_t, count: c_int,
431 mode: drmModeModeInfoPtr) -> c_int;
432
433 pub fn drmModeSetCursor(fd: c_int, crtcId: uint32_t, bo_handle: uint32_t, width: uint32_t,
441 height: uint32_t) -> c_int;
442
443 pub fn drmModeSetCursor2(fd: c_int, crtcId: uint32_t, bo_handle: uint32_t, width: uint32_t,
444 height: uint32_t, hot_x: int32_t, hot_y: int32_t) -> c_int;
445
446 pub fn drmModeMoveCursor(fd: c_int, crtcId: uint32_t, x: c_int, y: c_int) -> c_int;
450
451 pub fn drmModeGetEncoder(fd: c_int, encoder_id: uint32_t) -> drmModeEncoderPtr;
455
456 pub fn drmModeGetConnector(fd: c_int, connectorId: uint32_t) -> drmModeConnectorPtr;
466
467 pub fn drmModeGetConnectorCurrent(fd: c_int, connector_id: uint32_t) -> drmModeConnectorPtr;
476
477 pub fn drmModeAttachMode(fd: c_int, connectorId: uint32_t,
481 mode_info: drmModeModeInfoPtr) -> c_int;
482
483 pub fn drmModeDetachMode(fd: c_int, connectorId: uint32_t,
488 mode_info: drmModeModeInfoPtr) -> c_int;
489
490 pub fn drmModeGetProperty(fd: c_int, propertyId: uint32_t) -> drmModePropertyPtr;
491 pub fn drmModeFreeProperty(ptr: drmModePropertyPtr) -> c_void;
492
493 pub fn drmModeGetPropertyBlob(fd: c_int, blob_id: uint32_t) -> drmModePropertyBlobPtr;
494 pub fn drmModeFreePropertyBlob(ptr: drmModePropertyBlobPtr) -> c_void;
495 pub fn drmModeConnectorSetProperty(fd: c_int, connector_id: uint32_t, property_id: uint32_t,
496 value: uint64_t) -> c_int;
497 pub fn drmCheckModesettingSupported(busid: *const c_char) -> c_int;
498
499 pub fn drmModeCrtcSetGamma(fd: c_int, crtc_id: uint32_t, size: uint32_t,
500 red: *mut uint16_t, green: *mut uint16_t, blue: *mut uint16_t) -> c_int;
501 pub fn drmModeCrtcGetGamma(fd: c_int, crtc_id: uint32_t, size: uint32_t,
502 red: *mut uint16_t, green: *mut uint16_t, blue: *mut uint16_t) -> c_int;
503 pub fn drmModePageFlip(fd: c_int, crtc_id: uint32_t, fb_id: uint32_t,
504 flags: uint32_t, user_data: *const c_void) -> c_int;
505
506 pub fn drmModeGetPlaneResources(fd: c_int) -> drmModePlaneResPtr;
507 pub fn drmModeGetPlane(fd: c_int, plane_id: uint32_t) -> drmModePlanePtr;
508 pub fn drmModeSetPlane(fd: c_int, plane_id: uint32_t, crtc_id: uint32_t,
509 fb_id: uint32_t, flags: uint32_t,
510 crtc_x: int32_t, crtc_y: int32_t,
511 crtc_w: uint32_t, crtc_h: uint32_t,
512 src_x: uint32_t, src_y: uint32_t,
513 src_w: uint32_t, src_h: uint32_t) -> c_int;
514
515 pub fn drmModeObjectGetProperties(fd: c_int,
516 object_id: uint32_t,
517 object_type: uint32_t) -> drmModeObjectPropertiesPtr;
518 pub fn drmModeFreeObjectProperties(ptr: drmModeObjectPropertiesPtr) -> c_void;
519 pub fn drmModeObjectSetProperty(fd: c_int, object_id: uint32_t,
520 object_type: uint32_t, property_id: uint32_t,
521 value: uint64_t) -> c_int;
522
523 pub fn drmModeAtomicAlloc() -> drmModeAtomicReqPtr;
524 pub fn drmModeAtomicDuplicate(req: drmModeAtomicReqPtr) -> drmModeAtomicReqPtr;
525 pub fn drmModeAtomicMerge(base: drmModeAtomicReqPtr,
526 augment: drmModeAtomicReqPtr) -> c_int;
527 pub fn drmModeAtomicFree(req: drmModeAtomicReqPtr) -> c_void;
528 pub fn drmModeAtomicGetCursor(req: drmModeAtomicReqPtr) -> c_int;
529 pub fn drmModeAtomicSetCursor(req: drmModeAtomicReqPtr, cursor: c_int) -> c_void;
530 pub fn drmModeAtomicAddProperty(req: drmModeAtomicReqPtr,
531 object_id: uint32_t,
532 property_id: uint32_t,
533 value: uint64_t) -> c_int;
534 pub fn drmModeAtomicCommit(fd: c_int,
535 req: drmModeAtomicReqPtr,
536 flags: uint32_t,
537 user_data: *mut c_void) -> c_int;
538
539 pub fn drmModeCreatePropertyBlob(fd: c_int, data: *const c_void, size: size_t,
540 id: *mut uint32_t) -> c_int;
541 pub fn drmModeDestroyPropertyBlob(fd: c_int, id: uint32_t) -> c_int;
542}