Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
drm
drm_crtc.h
Go to the documentation of this file.
1
/*
2
* Copyright © 2006 Keith Packard
3
* Copyright © 2007-2008 Dave Airlie
4
* Copyright © 2007-2008 Intel Corporation
5
* Jesse Barnes <
[email protected]
>
6
*
7
* Permission is hereby granted, free of charge, to any person obtaining a
8
* copy of this software and associated documentation files (the "Software"),
9
* to deal in the Software without restriction, including without limitation
10
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
11
* and/or sell copies of the Software, and to permit persons to whom the
12
* Software is furnished to do so, subject to the following conditions:
13
*
14
* The above copyright notice and this permission notice shall be included in
15
* all copies or substantial portions of the Software.
16
*
17
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
21
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23
* OTHER DEALINGS IN THE SOFTWARE.
24
*/
25
#ifndef __DRM_CRTC_H__
26
#define __DRM_CRTC_H__
27
28
#include <linux/i2c.h>
29
#include <
linux/spinlock.h
>
30
#include <linux/types.h>
31
#include <
linux/idr.h
>
32
#include <linux/fb.h>
33
#include <
drm/drm_mode.h
>
34
35
#include <
drm/drm_fourcc.h
>
36
37
struct
drm_device
;
38
struct
drm_mode_set
;
39
struct
drm_framebuffer
;
40
struct
drm_object_properties
;
41
42
43
#define DRM_MODE_OBJECT_CRTC 0xcccccccc
44
#define DRM_MODE_OBJECT_CONNECTOR 0xc0c0c0c0
45
#define DRM_MODE_OBJECT_ENCODER 0xe0e0e0e0
46
#define DRM_MODE_OBJECT_MODE 0xdededede
47
#define DRM_MODE_OBJECT_PROPERTY 0xb0b0b0b0
48
#define DRM_MODE_OBJECT_FB 0xfbfbfbfb
49
#define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb
50
#define DRM_MODE_OBJECT_PLANE 0xeeeeeeee
51
52
struct
drm_mode_object
{
53
uint32_t
id
;
54
uint32_t
type
;
55
struct
drm_object_properties
*
properties
;
56
};
57
58
#define DRM_OBJECT_MAX_PROPERTY 24
59
struct
drm_object_properties
{
60
int
count
;
61
uint32_t
ids
[
DRM_OBJECT_MAX_PROPERTY
];
62
uint64_t
values
[
DRM_OBJECT_MAX_PROPERTY
];
63
};
64
65
/*
66
* Note on terminology: here, for brevity and convenience, we refer to connector
67
* control chips as 'CRTCs'. They can control any type of connector, VGA, LVDS,
68
* DVI, etc. And 'screen' refers to the whole of the visible display, which
69
* may span multiple monitors (and therefore multiple CRTC and connector
70
* structures).
71
*/
72
73
enum
drm_mode_status
{
74
MODE_OK
= 0,
/* Mode OK */
75
MODE_HSYNC
,
/* hsync out of range */
76
MODE_VSYNC
,
/* vsync out of range */
77
MODE_H_ILLEGAL
,
/* mode has illegal horizontal timings */
78
MODE_V_ILLEGAL
,
/* mode has illegal horizontal timings */
79
MODE_BAD_WIDTH
,
/* requires an unsupported linepitch */
80
MODE_NOMODE
,
/* no mode with a matching name */
81
MODE_NO_INTERLACE
,
/* interlaced mode not supported */
82
MODE_NO_DBLESCAN
,
/* doublescan mode not supported */
83
MODE_NO_VSCAN
,
/* multiscan mode not supported */
84
MODE_MEM
,
/* insufficient video memory */
85
MODE_VIRTUAL_X
,
/* mode width too large for specified virtual size */
86
MODE_VIRTUAL_Y
,
/* mode height too large for specified virtual size */
87
MODE_MEM_VIRT
,
/* insufficient video memory given virtual size */
88
MODE_NOCLOCK
,
/* no fixed clock available */
89
MODE_CLOCK_HIGH
,
/* clock required is too high */
90
MODE_CLOCK_LOW
,
/* clock required is too low */
91
MODE_CLOCK_RANGE
,
/* clock/mode isn't in a ClockRange */
92
MODE_BAD_HVALUE
,
/* horizontal timing was out of range */
93
MODE_BAD_VVALUE
,
/* vertical timing was out of range */
94
MODE_BAD_VSCAN
,
/* VScan value out of range */
95
MODE_HSYNC_NARROW
,
/* horizontal sync too narrow */
96
MODE_HSYNC_WIDE
,
/* horizontal sync too wide */
97
MODE_HBLANK_NARROW
,
/* horizontal blanking too narrow */
98
MODE_HBLANK_WIDE
,
/* horizontal blanking too wide */
99
MODE_VSYNC_NARROW
,
/* vertical sync too narrow */
100
MODE_VSYNC_WIDE
,
/* vertical sync too wide */
101
MODE_VBLANK_NARROW
,
/* vertical blanking too narrow */
102
MODE_VBLANK_WIDE
,
/* vertical blanking too wide */
103
MODE_PANEL
,
/* exceeds panel dimensions */
104
MODE_INTERLACE_WIDTH
,
/* width too large for interlaced mode */
105
MODE_ONE_WIDTH
,
/* only one width is supported */
106
MODE_ONE_HEIGHT
,
/* only one height is supported */
107
MODE_ONE_SIZE
,
/* only one resolution is supported */
108
MODE_NO_REDUCED
,
/* monitor doesn't accept reduced blanking */
109
MODE_UNVERIFIED
= -3,
/* mode needs to reverified */
110
MODE_BAD
= -2,
/* unspecified reason */
111
MODE_ERROR
= -1
/* error condition */
112
};
113
114
#define DRM_MODE_TYPE_CLOCK_CRTC_C (DRM_MODE_TYPE_CLOCK_C | \
115
DRM_MODE_TYPE_CRTC_C)
116
117
#define DRM_MODE(nm, t, c, hd, hss, hse, ht, hsk, vd, vss, vse, vt, vs, f) \
118
.name = nm, .status = 0, .type = (t), .clock = (c), \
119
.hdisplay = (hd), .hsync_start = (hss), .hsync_end = (hse), \
120
.htotal = (ht), .hskew = (hsk), .vdisplay = (vd), \
121
.vsync_start = (vss), .vsync_end = (vse), .vtotal = (vt), \
122
.vscan = (vs), .flags = (f), .vrefresh = 0, \
123
.base.type = DRM_MODE_OBJECT_MODE
124
125
#define CRTC_INTERLACE_HALVE_V 0x1
/* halve V values for interlacing */
126
127
struct
drm_display_mode
{
128
/* Header */
129
struct
list_head
head
;
130
struct
drm_mode_object
base
;
131
132
char
name
[
DRM_DISPLAY_MODE_LEN
];
133
134
enum
drm_mode_status
status
;
135
unsigned
int
type
;
136
137
/* Proposed mode values */
138
int
clock
;
/* in kHz */
139
int
hdisplay
;
140
int
hsync_start
;
141
int
hsync_end
;
142
int
htotal
;
143
int
hskew
;
144
int
vdisplay
;
145
int
vsync_start
;
146
int
vsync_end
;
147
int
vtotal
;
148
int
vscan
;
149
unsigned
int
flags
;
150
151
/* Addressable image size (may be 0 for projectors, etc.) */
152
int
width_mm
;
153
int
height_mm
;
154
155
/* Actual mode we give to hw */
156
int
clock_index
;
157
int
synth_clock
;
158
int
crtc_hdisplay
;
159
int
crtc_hblank_start
;
160
int
crtc_hblank_end
;
161
int
crtc_hsync_start
;
162
int
crtc_hsync_end
;
163
int
crtc_htotal
;
164
int
crtc_hskew
;
165
int
crtc_vdisplay
;
166
int
crtc_vblank_start
;
167
int
crtc_vblank_end
;
168
int
crtc_vsync_start
;
169
int
crtc_vsync_end
;
170
int
crtc_vtotal
;
171
172
/* Driver private mode info */
173
int
private_size
;
174
int
*
private
;
175
int
private_flags
;
176
177
int
vrefresh
;
/* in Hz */
178
int
hsync
;
/* in kHz */
179
};
180
181
enum
drm_connector_status
{
182
connector_status_connected
= 1,
183
connector_status_disconnected
= 2,
184
connector_status_unknown
= 3,
185
};
186
187
enum
subpixel_order
{
188
SubPixelUnknown
= 0,
189
SubPixelHorizontalRGB
,
190
SubPixelHorizontalBGR
,
191
SubPixelVerticalRGB
,
192
SubPixelVerticalBGR
,
193
SubPixelNone
,
194
};
195
196
#define DRM_COLOR_FORMAT_RGB444 (1<<0)
197
#define DRM_COLOR_FORMAT_YCRCB444 (1<<1)
198
#define DRM_COLOR_FORMAT_YCRCB422 (1<<2)
199
/*
200
* Describes a given display (e.g. CRT or flat panel) and its limitations.
201
*/
202
struct
drm_display_info
{
203
char
name
[
DRM_DISPLAY_INFO_LEN
];
204
205
/* Physical size */
206
unsigned
int
width_mm
;
207
unsigned
int
height_mm
;
208
209
/* Clock limits FIXME: storage format */
210
unsigned
int
min_vfreq
,
max_vfreq
;
211
unsigned
int
min_hfreq
,
max_hfreq
;
212
unsigned
int
pixel_clock
;
213
unsigned
int
bpc
;
214
215
enum
subpixel_order
subpixel_order
;
216
u32
color_formats
;
217
218
u8
cea_rev
;
219
};
220
221
struct
drm_framebuffer_funcs
{
222
/* note: use drm_framebuffer_remove() */
223
void
(*
destroy
)(
struct
drm_framebuffer
*framebuffer);
224
int
(*
create_handle
)(
struct
drm_framebuffer
*
fb
,
225
struct
drm_file *file_priv,
226
unsigned
int
*
handle
);
239
int
(*
dirty
)(
struct
drm_framebuffer
*framebuffer,
240
struct
drm_file *file_priv,
unsigned
flags
,
241
unsigned
color
,
struct
drm_clip_rect
*clips,
242
unsigned
num_clips);
243
};
244
245
struct
drm_framebuffer
{
246
struct
drm_device
*
dev
;
247
/*
248
* Note that the fb is refcounted for the benefit of driver internals,
249
* for example some hw, disabling a CRTC/plane is asynchronous, and
250
* scanout does not actually complete until the next vblank. So some
251
* cleanup (like releasing the reference(s) on the backing GEM bo(s))
252
* should be deferred. In cases like this, the driver would like to
253
* hold a ref to the fb even though it has already been removed from
254
* userspace perspective.
255
*/
256
struct
kref
refcount
;
257
struct
list_head
head
;
258
struct
drm_mode_object
base
;
259
const
struct
drm_framebuffer_funcs
*
funcs
;
260
unsigned
int
pitches
[4];
261
unsigned
int
offsets
[4];
262
unsigned
int
width
;
263
unsigned
int
height
;
264
/* depth can be 15 or 16 */
265
unsigned
int
depth
;
266
int
bits_per_pixel
;
267
int
flags
;
268
uint32_t
pixel_format
;
/* fourcc format */
269
struct
list_head
filp_head
;
270
/* if you are using the helper */
271
void
*
helper_private
;
272
};
273
274
struct
drm_property_blob
{
275
struct
drm_mode_object
base
;
276
struct
list_head
head
;
277
unsigned
int
length
;
278
unsigned
char
data
[];
279
};
280
281
struct
drm_property_enum
{
282
uint64_t
value
;
283
struct
list_head
head
;
284
char
name
[
DRM_PROP_NAME_LEN
];
285
};
286
287
struct
drm_property
{
288
struct
list_head
head
;
289
struct
drm_mode_object
base
;
290
uint32_t
flags
;
291
char
name
[
DRM_PROP_NAME_LEN
];
292
uint32_t
num_values
;
293
uint64_t
*
values
;
294
295
struct
list_head
enum_blob_list
;
296
};
297
298
struct
drm_crtc
;
299
struct
drm_connector
;
300
struct
drm_encoder
;
301
struct
drm_pending_vblank_event;
302
struct
drm_plane
;
303
326
struct
drm_crtc_funcs
{
327
/* Save CRTC state */
328
void
(*
save
)(
struct
drm_crtc
*
crtc
);
/* suspend? */
329
/* Restore CRTC state */
330
void
(*
restore
)(
struct
drm_crtc
*
crtc
);
/* resume? */
331
/* Reset CRTC state */
332
void
(*
reset
)(
struct
drm_crtc
*
crtc
);
333
334
/* cursor controls */
335
int
(*
cursor_set
)(
struct
drm_crtc
*
crtc
,
struct
drm_file *file_priv,
336
uint32_t
handle
,
uint32_t
width
,
uint32_t
height
);
337
int
(*
cursor_move
)(
struct
drm_crtc
*
crtc
,
int
x
,
int
y
);
338
339
/* Set gamma on the CRTC */
340
void
(*
gamma_set
)(
struct
drm_crtc
*
crtc
,
u16
*
r
,
u16
*
g
,
u16
*
b
,
341
uint32_t
start
,
uint32_t
size
);
342
/* Object destroy routine */
343
void
(*
destroy
)(
struct
drm_crtc
*
crtc
);
344
345
int
(*
set_config
)(
struct
drm_mode_set
*
set
);
346
347
/*
348
* Flip to the given framebuffer. This implements the page
349
* flip ioctl described in drm_mode.h, specifically, the
350
* implementation must return immediately and block all
351
* rendering to the current fb until the flip has completed.
352
* If userspace set the event flag in the ioctl, the event
353
* argument will point to an event to send back when the flip
354
* completes, otherwise it will be NULL.
355
*/
356
int
(*
page_flip
)(
struct
drm_crtc
*
crtc
,
357
struct
drm_framebuffer
*
fb
,
358
struct
drm_pending_vblank_event *
event
);
359
360
int
(*
set_property
)(
struct
drm_crtc
*
crtc
,
361
struct
drm_property
*
property
,
uint64_t
val
);
362
};
363
389
struct
drm_crtc
{
390
struct
drm_device
*
dev
;
391
struct
list_head
head
;
392
393
struct
drm_mode_object
base
;
394
395
/* framebuffer the connector is currently bound to */
396
struct
drm_framebuffer
*
fb
;
397
398
bool
enabled
;
399
400
/* Requested mode from modesetting. */
401
struct
drm_display_mode
mode
;
402
403
/* Programmed mode in hw, after adjustments for encoders,
404
* crtc, panel scaling etc. Needed for timestamping etc.
405
*/
406
struct
drm_display_mode
hwmode
;
407
408
bool
invert_dimensions
;
409
410
int
x
,
y
;
411
const
struct
drm_crtc_funcs
*
funcs
;
412
413
/* CRTC gamma size for reporting to userspace */
414
uint32_t
gamma_size
;
415
uint16_t
*
gamma_store
;
416
417
/* Constants needed for precise vblank and swap timestamping. */
418
s64
framedur_ns
,
linedur_ns
,
pixeldur_ns
;
419
420
/* if you are using the helper */
421
void
*
helper_private
;
422
423
struct
drm_object_properties
properties
;
424
};
425
426
443
struct
drm_connector_funcs
{
444
void
(*
dpms
)(
struct
drm_connector
*
connector
,
int
mode
);
445
void
(*
save
)(
struct
drm_connector
*
connector
);
446
void
(*
restore
)(
struct
drm_connector
*
connector
);
447
void
(*
reset
)(
struct
drm_connector
*
connector
);
448
449
/* Check to see if anything is attached to the connector.
450
* @force is set to false whilst polling, true when checking the
451
* connector due to user request. @force can be used by the driver
452
* to avoid expensive, destructive operations during automated
453
* probing.
454
*/
455
enum
drm_connector_status
(*
detect
)(
struct
drm_connector
*
connector
,
456
bool
force
);
457
int
(*
fill_modes
)(
struct
drm_connector
*
connector
,
uint32_t
max_width
,
uint32_t
max_height
);
458
int
(*
set_property
)(
struct
drm_connector
*
connector
,
struct
drm_property
*
property
,
459
uint64_t
val
);
460
void
(*
destroy
)(
struct
drm_connector
*
connector
);
461
void
(*
force
)(
struct
drm_connector
*
connector
);
462
};
463
471
struct
drm_encoder_funcs
{
472
void
(*
reset
)(
struct
drm_encoder
*encoder);
473
void
(*
destroy
)(
struct
drm_encoder
*encoder);
474
};
475
476
#define DRM_CONNECTOR_MAX_UMODES 16
477
#define DRM_CONNECTOR_LEN 32
478
#define DRM_CONNECTOR_MAX_ENCODER 3
479
495
struct
drm_encoder
{
496
struct
drm_device
*
dev
;
497
struct
list_head
head
;
498
499
struct
drm_mode_object
base
;
500
int
encoder_type
;
501
uint32_t
possible_crtcs
;
502
uint32_t
possible_clones
;
503
504
struct
drm_crtc
*
crtc
;
505
const
struct
drm_encoder_funcs
*
funcs
;
506
void
*
helper_private
;
507
};
508
509
enum
drm_connector_force
{
510
DRM_FORCE_UNSPECIFIED
,
511
DRM_FORCE_OFF
,
512
DRM_FORCE_ON
,
/* force on analog part normally */
513
DRM_FORCE_ON_DIGITAL
,
/* for DVI-I use digital connector */
514
};
515
516
/* should we poll this connector for connects and disconnects */
517
/* hot plug detectable */
518
#define DRM_CONNECTOR_POLL_HPD (1 << 0)
519
/* poll for connections */
520
#define DRM_CONNECTOR_POLL_CONNECT (1 << 1)
521
/* can cleanly poll for disconnections without flickering the screen */
522
/* DACs should rarely do this without a lot of testing */
523
#define DRM_CONNECTOR_POLL_DISCONNECT (1 << 2)
524
525
#define MAX_ELD_BYTES 128
526
565
struct
drm_connector
{
566
struct
drm_device
*
dev
;
567
struct
device
kdev
;
568
struct
device_attribute
*
attr
;
569
struct
list_head
head
;
570
571
struct
drm_mode_object
base
;
572
573
int
connector_type
;
574
int
connector_type_id
;
575
bool
interlace_allowed
;
576
bool
doublescan_allowed
;
577
struct
list_head
modes
;
/* list of modes on this connector */
578
579
enum
drm_connector_status
status
;
580
581
/* these are modes added by probing with DDC or the BIOS */
582
struct
list_head
probed_modes
;
583
584
struct
drm_display_info
display_info
;
585
const
struct
drm_connector_funcs
*
funcs
;
586
587
struct
list_head
user_modes
;
588
struct
drm_property_blob
*
edid_blob_ptr
;
589
struct
drm_object_properties
properties
;
590
591
uint8_t
polled
;
/* DRM_CONNECTOR_POLL_* */
592
593
/* requested DPMS state */
594
int
dpms
;
595
596
void
*
helper_private
;
597
598
/* forced on connector */
599
enum
drm_connector_force
force
;
600
uint32_t
encoder_ids
[
DRM_CONNECTOR_MAX_ENCODER
];
601
struct
drm_encoder
*
encoder
;
/* currently active encoder */
602
603
/* EDID bits */
604
uint8_t
eld
[
MAX_ELD_BYTES
];
605
bool
dvi_dual
;
606
int
max_tmds_clock
;
/* in MHz */
607
bool
latency_present
[2];
608
int
video_latency
[2];
/* [0]: progressive, [1]: interlaced */
609
int
audio_latency
[2];
610
int
null_edid_counter
;
/* needed to workaround some HW bugs where we get all 0s */
611
unsigned
bad_edid_counter
;
612
};
613
621
struct
drm_plane_funcs
{
622
int
(*
update_plane
)(
struct
drm_plane
*
plane
,
623
struct
drm_crtc
*
crtc
,
struct
drm_framebuffer
*
fb
,
624
int
crtc_x,
int
crtc_y,
625
unsigned
int
crtc_w,
unsigned
int
crtc_h,
626
uint32_t
src_x,
uint32_t
src_y,
627
uint32_t
src_w,
uint32_t
src_h);
628
int
(*
disable_plane
)(
struct
drm_plane
*
plane
);
629
void
(*
destroy
)(
struct
drm_plane
*
plane
);
630
631
int
(*
set_property
)(
struct
drm_plane
*
plane
,
632
struct
drm_property
*
property
,
uint64_t
val
);
633
};
634
652
struct
drm_plane
{
653
struct
drm_device
*
dev
;
654
struct
list_head
head
;
655
656
struct
drm_mode_object
base
;
657
658
uint32_t
possible_crtcs
;
659
uint32_t
*
format_types
;
660
uint32_t
format_count
;
661
662
struct
drm_crtc
*
crtc
;
663
struct
drm_framebuffer
*
fb
;
664
665
/* CRTC gamma size for reporting to userspace */
666
uint32_t
gamma_size
;
667
uint16_t
*
gamma_store
;
668
669
bool
enabled
;
670
671
const
struct
drm_plane_funcs
*
funcs
;
672
void
*
helper_private
;
673
674
struct
drm_object_properties
properties
;
675
};
676
693
struct
drm_mode_set
{
694
struct
drm_framebuffer
*
fb
;
695
struct
drm_crtc
*
crtc
;
696
struct
drm_display_mode
*
mode
;
697
698
uint32_t
x
;
699
uint32_t
y
;
700
701
struct
drm_connector
**
connectors
;
702
size_t
num_connectors
;
703
};
704
713
struct
drm_mode_config_funcs
{
714
struct
drm_framebuffer
*(*fb_create)(
struct
drm_device
*
dev
,
715
struct
drm_file *file_priv,
716
struct
drm_mode_fb_cmd2
*mode_cmd);
717
void
(*
output_poll_changed
)(
struct
drm_device
*
dev
);
718
};
719
733
struct
drm_mode_group
{
734
uint32_t
num_crtcs
;
735
uint32_t
num_encoders
;
736
uint32_t
num_connectors
;
737
738
/* list of object IDs for this group */
739
uint32_t
*
id_list
;
740
};
741
769
struct
drm_mode_config
{
770
struct
mutex
mutex
;
/* protects configuration (mode lists etc.) */
771
struct
mutex
idr_mutex
;
/* for IDR management */
772
struct
idr
crtc_idr
;
/* use this idr for all IDs, fb, crtc, connector, modes - just makes life easier */
773
/* this is limited to one for now */
774
int
num_fb
;
775
struct
list_head
fb_list
;
776
int
num_connector
;
777
struct
list_head
connector_list
;
778
int
num_encoder
;
779
struct
list_head
encoder_list
;
780
int
num_plane
;
781
struct
list_head
plane_list
;
782
783
int
num_crtc
;
784
struct
list_head
crtc_list
;
785
786
struct
list_head
property_list
;
787
788
int
min_width
,
min_height
;
789
int
max_width
,
max_height
;
790
const
struct
drm_mode_config_funcs
*
funcs
;
791
resource_size_t
fb_base
;
792
793
/* output poll support */
794
bool
poll_enabled
;
795
struct
delayed_work
output_poll_work
;
796
797
/* pointers to standard properties */
798
struct
list_head
property_blob_list
;
799
struct
drm_property
*
edid_property
;
800
struct
drm_property
*
dpms_property
;
801
802
/* DVI-I properties */
803
struct
drm_property
*
dvi_i_subconnector_property
;
804
struct
drm_property
*
dvi_i_select_subconnector_property
;
805
806
/* TV properties */
807
struct
drm_property
*
tv_subconnector_property
;
808
struct
drm_property
*
tv_select_subconnector_property
;
809
struct
drm_property
*
tv_mode_property
;
810
struct
drm_property
*
tv_left_margin_property
;
811
struct
drm_property
*
tv_right_margin_property
;
812
struct
drm_property
*
tv_top_margin_property
;
813
struct
drm_property
*
tv_bottom_margin_property
;
814
struct
drm_property
*
tv_brightness_property
;
815
struct
drm_property
*
tv_contrast_property
;
816
struct
drm_property
*
tv_flicker_reduction_property
;
817
struct
drm_property
*
tv_overscan_property
;
818
struct
drm_property
*
tv_saturation_property
;
819
struct
drm_property
*
tv_hue_property
;
820
821
/* Optional properties */
822
struct
drm_property
*
scaling_mode_property
;
823
struct
drm_property
*
dithering_mode_property
;
824
struct
drm_property
*
dirty_info_property
;
825
826
/* dumb ioctl parameters */
827
uint32_t
preferred_depth
,
prefer_shadow
;
828
};
829
830
#define obj_to_crtc(x) container_of(x, struct drm_crtc, base)
831
#define obj_to_connector(x) container_of(x, struct drm_connector, base)
832
#define obj_to_encoder(x) container_of(x, struct drm_encoder, base)
833
#define obj_to_mode(x) container_of(x, struct drm_display_mode, base)
834
#define obj_to_fb(x) container_of(x, struct drm_framebuffer, base)
835
#define obj_to_property(x) container_of(x, struct drm_property, base)
836
#define obj_to_blob(x) container_of(x, struct drm_property_blob, base)
837
#define obj_to_plane(x) container_of(x, struct drm_plane, base)
838
839
struct
drm_prop_enum_list
{
840
int
type
;
841
char
*
name
;
842
};
843
844
extern
int
drm_crtc_init
(
struct
drm_device
*
dev
,
845
struct
drm_crtc
*
crtc
,
846
const
struct
drm_crtc_funcs
*funcs);
847
extern
void
drm_crtc_cleanup
(
struct
drm_crtc
*
crtc
);
848
849
extern
int
drm_connector_init
(
struct
drm_device
*
dev
,
850
struct
drm_connector
*
connector
,
851
const
struct
drm_connector_funcs
*funcs,
852
int
connector_type);
853
854
extern
void
drm_connector_cleanup
(
struct
drm_connector
*
connector
);
855
/* helper to unplug all connectors from sysfs for device */
856
extern
void
drm_connector_unplug_all
(
struct
drm_device
*
dev
);
857
858
extern
int
drm_encoder_init
(
struct
drm_device
*
dev
,
859
struct
drm_encoder
*encoder,
860
const
struct
drm_encoder_funcs
*funcs,
861
int
encoder_type);
862
863
extern
int
drm_plane_init
(
struct
drm_device
*
dev
,
864
struct
drm_plane
*
plane
,
865
unsigned
long
possible_crtcs,
866
const
struct
drm_plane_funcs
*funcs,
867
const
uint32_t
*formats,
uint32_t
format_count,
868
bool
priv
);
869
extern
void
drm_plane_cleanup
(
struct
drm_plane
*
plane
);
870
871
extern
void
drm_encoder_cleanup
(
struct
drm_encoder
*encoder);
872
873
extern
char
*
drm_get_connector_name
(
struct
drm_connector
*
connector
);
874
extern
char
*
drm_get_dpms_name
(
int
val
);
875
extern
char
*
drm_get_dvi_i_subconnector_name
(
int
val
);
876
extern
char
*
drm_get_dvi_i_select_name
(
int
val
);
877
extern
char
*
drm_get_tv_subconnector_name
(
int
val
);
878
extern
char
*
drm_get_tv_select_name
(
int
val
);
879
extern
void
drm_fb_release
(
struct
drm_file *file_priv);
880
extern
int
drm_mode_group_init_legacy_group
(
struct
drm_device
*
dev
,
struct
drm_mode_group
*
group
);
881
extern
bool
drm_probe_ddc
(
struct
i2c_adapter
*
adapter
);
882
extern
struct
edid
*
drm_get_edid
(
struct
drm_connector
*
connector
,
883
struct
i2c_adapter
*
adapter
);
884
extern
int
drm_add_edid_modes
(
struct
drm_connector
*
connector
,
struct
edid
*
edid
);
885
extern
void
drm_mode_probed_add
(
struct
drm_connector
*
connector
,
struct
drm_display_mode
*
mode
);
886
extern
void
drm_mode_remove
(
struct
drm_connector
*
connector
,
struct
drm_display_mode
*
mode
);
887
extern
void
drm_mode_copy
(
struct
drm_display_mode
*
dst
,
const
struct
drm_display_mode
*
src
);
888
extern
struct
drm_display_mode
*
drm_mode_duplicate
(
struct
drm_device
*
dev
,
889
const
struct
drm_display_mode
*
mode
);
890
extern
void
drm_mode_debug_printmodeline
(
struct
drm_display_mode
*
mode
);
891
extern
void
drm_mode_config_init
(
struct
drm_device
*
dev
);
892
extern
void
drm_mode_config_reset
(
struct
drm_device
*
dev
);
893
extern
void
drm_mode_config_cleanup
(
struct
drm_device
*
dev
);
894
extern
void
drm_mode_set_name
(
struct
drm_display_mode
*
mode
);
895
extern
bool
drm_mode_equal
(
struct
drm_display_mode
*mode1,
struct
drm_display_mode
*mode2);
896
extern
int
drm_mode_width
(
struct
drm_display_mode
*
mode
);
897
extern
int
drm_mode_height
(
struct
drm_display_mode
*
mode
);
898
899
/* for us by fb module */
900
extern
int
drm_mode_attachmode_crtc
(
struct
drm_device
*
dev
,
901
struct
drm_crtc
*
crtc
,
902
const
struct
drm_display_mode
*
mode
);
903
extern
int
drm_mode_detachmode_crtc
(
struct
drm_device
*
dev
,
struct
drm_display_mode
*
mode
);
904
905
extern
struct
drm_display_mode
*
drm_mode_create
(
struct
drm_device
*
dev
);
906
extern
void
drm_mode_destroy
(
struct
drm_device
*
dev
,
struct
drm_display_mode
*
mode
);
907
extern
void
drm_mode_list_concat
(
struct
list_head
*
head
,
908
struct
list_head
*
new
);
909
extern
void
drm_mode_validate_size
(
struct
drm_device
*
dev
,
910
struct
list_head
*mode_list,
911
int
maxX,
int
maxY,
int
maxPitch);
912
extern
void
drm_mode_prune_invalid
(
struct
drm_device
*
dev
,
913
struct
list_head
*mode_list,
bool
verbose
);
914
extern
void
drm_mode_sort
(
struct
list_head
*mode_list);
915
extern
int
drm_mode_hsync
(
const
struct
drm_display_mode
*
mode
);
916
extern
int
drm_mode_vrefresh
(
const
struct
drm_display_mode
*
mode
);
917
extern
void
drm_mode_set_crtcinfo
(
struct
drm_display_mode
*
p
,
918
int
adjust_flags);
919
extern
void
drm_mode_connector_list_update
(
struct
drm_connector
*
connector
);
920
extern
int
drm_mode_connector_update_edid_property
(
struct
drm_connector
*
connector
,
921
struct
edid
*
edid
);
922
extern
int
drm_connector_property_set_value
(
struct
drm_connector
*
connector
,
923
struct
drm_property
*
property
,
924
uint64_t
value
);
925
extern
int
drm_connector_property_get_value
(
struct
drm_connector
*
connector
,
926
struct
drm_property
*
property
,
927
uint64_t
*
value
);
928
extern
int
drm_object_property_set_value
(
struct
drm_mode_object
*obj,
929
struct
drm_property
*
property
,
930
uint64_t
val
);
931
extern
int
drm_object_property_get_value
(
struct
drm_mode_object
*obj,
932
struct
drm_property
*
property
,
933
uint64_t
*
value
);
934
extern
struct
drm_display_mode
*
drm_crtc_mode_create
(
struct
drm_device
*
dev
);
935
extern
void
drm_framebuffer_set_object
(
struct
drm_device
*
dev
,
936
unsigned
long
handle
);
937
extern
int
drm_framebuffer_init
(
struct
drm_device
*
dev
,
938
struct
drm_framebuffer
*
fb
,
939
const
struct
drm_framebuffer_funcs
*funcs);
940
extern
void
drm_framebuffer_unreference
(
struct
drm_framebuffer
*
fb
);
941
extern
void
drm_framebuffer_reference
(
struct
drm_framebuffer
*
fb
);
942
extern
void
drm_framebuffer_remove
(
struct
drm_framebuffer
*
fb
);
943
extern
void
drm_framebuffer_cleanup
(
struct
drm_framebuffer
*
fb
);
944
extern
int
drmfb_probe
(
struct
drm_device
*
dev
,
struct
drm_crtc
*
crtc
);
945
extern
int
drmfb_remove
(
struct
drm_device
*
dev
,
struct
drm_framebuffer
*
fb
);
946
extern
void
drm_crtc_probe_connector_modes
(
struct
drm_device
*
dev
,
int
maxX,
int
maxY);
947
extern
bool
drm_crtc_in_use
(
struct
drm_crtc
*
crtc
);
948
949
extern
void
drm_connector_attach_property
(
struct
drm_connector
*
connector
,
950
struct
drm_property
*
property
,
uint64_t
init_val);
951
extern
void
drm_object_attach_property
(
struct
drm_mode_object
*obj,
952
struct
drm_property
*
property
,
953
uint64_t
init_val);
954
extern
struct
drm_property
*
drm_property_create
(
struct
drm_device
*
dev
,
int
flags
,
955
const
char
*
name
,
int
num_values
);
956
extern
struct
drm_property
*
drm_property_create_enum
(
struct
drm_device
*
dev
,
int
flags
,
957
const
char
*
name
,
958
const
struct
drm_prop_enum_list
*props,
959
int
num_values
);
960
struct
drm_property
*
drm_property_create_bitmask
(
struct
drm_device
*
dev
,
961
int
flags
,
const
char
*
name
,
962
const
struct
drm_prop_enum_list
*props,
963
int
num_values
);
964
struct
drm_property
*
drm_property_create_range
(
struct
drm_device
*
dev
,
int
flags
,
965
const
char
*
name
,
966
uint64_t
min
,
uint64_t
max
);
967
extern
void
drm_property_destroy
(
struct
drm_device
*
dev
,
struct
drm_property
*
property
);
968
extern
int
drm_property_add_enum
(
struct
drm_property
*
property
,
int
index
,
969
uint64_t
value
,
const
char
*
name
);
970
extern
int
drm_mode_create_dvi_i_properties
(
struct
drm_device
*
dev
);
971
extern
int
drm_mode_create_tv_properties
(
struct
drm_device
*
dev
,
int
num_formats,
972
char
*formats[]);
973
extern
int
drm_mode_create_scaling_mode_property
(
struct
drm_device
*
dev
);
974
extern
int
drm_mode_create_dithering_property
(
struct
drm_device
*
dev
);
975
extern
int
drm_mode_create_dirty_info_property
(
struct
drm_device
*
dev
);
976
extern
char
*
drm_get_encoder_name
(
struct
drm_encoder
*encoder);
977
978
extern
int
drm_mode_connector_attach_encoder
(
struct
drm_connector
*
connector
,
979
struct
drm_encoder
*encoder);
980
extern
void
drm_mode_connector_detach_encoder
(
struct
drm_connector
*
connector
,
981
struct
drm_encoder
*encoder);
982
extern
int
drm_mode_crtc_set_gamma_size
(
struct
drm_crtc
*
crtc
,
983
int
gamma_size);
984
extern
struct
drm_mode_object
*
drm_mode_object_find
(
struct
drm_device
*
dev
,
985
uint32_t
id
,
uint32_t
type
);
986
/* IOCTLs */
987
extern
int
drm_mode_getresources
(
struct
drm_device
*
dev
,
988
void
*
data
,
struct
drm_file *file_priv);
989
extern
int
drm_mode_getplane_res
(
struct
drm_device
*
dev
,
void
*
data
,
990
struct
drm_file *file_priv);
991
extern
int
drm_mode_getcrtc
(
struct
drm_device
*
dev
,
992
void
*
data
,
struct
drm_file *file_priv);
993
extern
int
drm_mode_getconnector
(
struct
drm_device
*
dev
,
994
void
*
data
,
struct
drm_file *file_priv);
995
extern
int
drm_mode_setcrtc
(
struct
drm_device
*
dev
,
996
void
*
data
,
struct
drm_file *file_priv);
997
extern
int
drm_mode_getplane
(
struct
drm_device
*
dev
,
998
void
*
data
,
struct
drm_file *file_priv);
999
extern
int
drm_mode_setplane
(
struct
drm_device
*
dev
,
1000
void
*
data
,
struct
drm_file *file_priv);
1001
extern
int
drm_mode_cursor_ioctl
(
struct
drm_device
*
dev
,
1002
void
*
data
,
struct
drm_file *file_priv);
1003
extern
int
drm_mode_addfb
(
struct
drm_device
*
dev
,
1004
void
*
data
,
struct
drm_file *file_priv);
1005
extern
int
drm_mode_addfb2
(
struct
drm_device
*
dev
,
1006
void
*
data
,
struct
drm_file *file_priv);
1007
extern
uint32_t
drm_mode_legacy_fb_format
(
uint32_t
bpp
,
uint32_t
depth
);
1008
extern
int
drm_mode_rmfb
(
struct
drm_device
*
dev
,
1009
void
*
data
,
struct
drm_file *file_priv);
1010
extern
int
drm_mode_getfb
(
struct
drm_device
*
dev
,
1011
void
*
data
,
struct
drm_file *file_priv);
1012
extern
int
drm_mode_dirtyfb_ioctl
(
struct
drm_device
*
dev
,
1013
void
*
data
,
struct
drm_file *file_priv);
1014
extern
int
drm_mode_addmode_ioctl
(
struct
drm_device
*
dev
,
1015
void
*
data
,
struct
drm_file *file_priv);
1016
extern
int
drm_mode_rmmode_ioctl
(
struct
drm_device
*
dev
,
1017
void
*
data
,
struct
drm_file *file_priv);
1018
extern
int
drm_mode_attachmode_ioctl
(
struct
drm_device
*
dev
,
1019
void
*
data
,
struct
drm_file *file_priv);
1020
extern
int
drm_mode_detachmode_ioctl
(
struct
drm_device
*
dev
,
1021
void
*
data
,
struct
drm_file *file_priv);
1022
1023
extern
int
drm_mode_getproperty_ioctl
(
struct
drm_device
*
dev
,
1024
void
*
data
,
struct
drm_file *file_priv);
1025
extern
int
drm_mode_getblob_ioctl
(
struct
drm_device
*
dev
,
1026
void
*
data
,
struct
drm_file *file_priv);
1027
extern
int
drm_mode_connector_property_set_ioctl
(
struct
drm_device
*
dev
,
1028
void
*
data
,
struct
drm_file *file_priv);
1029
extern
int
drm_mode_hotplug_ioctl
(
struct
drm_device
*
dev
,
1030
void
*
data
,
struct
drm_file *file_priv);
1031
extern
int
drm_mode_replacefb
(
struct
drm_device
*
dev
,
1032
void
*
data
,
struct
drm_file *file_priv);
1033
extern
int
drm_mode_getencoder
(
struct
drm_device
*
dev
,
1034
void
*
data
,
struct
drm_file *file_priv);
1035
extern
int
drm_mode_gamma_get_ioctl
(
struct
drm_device
*
dev
,
1036
void
*
data
,
struct
drm_file *file_priv);
1037
extern
int
drm_mode_gamma_set_ioctl
(
struct
drm_device
*
dev
,
1038
void
*
data
,
struct
drm_file *file_priv);
1039
extern
u8
*
drm_find_cea_extension
(
struct
edid
*
edid
);
1040
extern
bool
drm_detect_hdmi_monitor
(
struct
edid
*
edid
);
1041
extern
bool
drm_detect_monitor_audio
(
struct
edid
*
edid
);
1042
extern
int
drm_mode_page_flip_ioctl
(
struct
drm_device
*
dev
,
1043
void
*
data
,
struct
drm_file *file_priv);
1044
extern
struct
drm_display_mode
*
drm_cvt_mode
(
struct
drm_device
*
dev
,
1045
int
hdisplay
,
int
vdisplay
,
int
vrefresh
,
1046
bool
reduced,
bool
interlaced
,
bool
margins);
1047
extern
struct
drm_display_mode
*
drm_gtf_mode
(
struct
drm_device
*
dev
,
1048
int
hdisplay
,
int
vdisplay
,
int
vrefresh
,
1049
bool
interlaced
,
int
margins);
1050
extern
struct
drm_display_mode
*
drm_gtf_mode_complex
(
struct
drm_device
*
dev
,
1051
int
hdisplay
,
int
vdisplay
,
int
vrefresh
,
1052
bool
interlaced
,
int
margins,
int
GTF_M,
1053
int
GTF_2C,
int
GTF_K,
int
GTF_2J);
1054
extern
int
drm_add_modes_noedid
(
struct
drm_connector
*
connector
,
1055
int
hdisplay
,
int
vdisplay
);
1056
1057
extern
int
drm_edid_header_is_valid
(
const
u8
*raw_edid);
1058
extern
bool
drm_edid_block_valid
(
u8
*raw_edid,
int
block
,
bool
print_bad_edid);
1059
extern
bool
drm_edid_is_valid
(
struct
edid
*
edid
);
1060
struct
drm_display_mode
*
drm_mode_find_dmt
(
struct
drm_device
*
dev
,
1061
int
hsize
,
int
vsize,
int
fresh,
1062
bool
rb
);
1063
1064
extern
int
drm_mode_create_dumb_ioctl
(
struct
drm_device
*
dev
,
1065
void
*
data
,
struct
drm_file *file_priv);
1066
extern
int
drm_mode_mmap_dumb_ioctl
(
struct
drm_device
*
dev
,
1067
void
*
data
,
struct
drm_file *file_priv);
1068
extern
int
drm_mode_destroy_dumb_ioctl
(
struct
drm_device
*
dev
,
1069
void
*
data
,
struct
drm_file *file_priv);
1070
extern
int
drm_mode_obj_get_properties_ioctl
(
struct
drm_device
*
dev
,
void
*
data
,
1071
struct
drm_file *file_priv);
1072
extern
int
drm_mode_obj_set_property_ioctl
(
struct
drm_device
*
dev
,
void
*
data
,
1073
struct
drm_file *file_priv);
1074
1075
extern
void
drm_fb_get_bpp_depth
(
uint32_t
format
,
unsigned
int
*
depth
,
1076
int
*
bpp
);
1077
extern
int
drm_format_num_planes
(
uint32_t
format
);
1078
extern
int
drm_format_plane_cpp
(
uint32_t
format
,
int
plane
);
1079
extern
int
drm_format_horz_chroma_subsampling
(
uint32_t
format
);
1080
extern
int
drm_format_vert_chroma_subsampling
(
uint32_t
format
);
1081
1082
#endif
/* __DRM_CRTC_H__ */
Generated on Thu Jan 10 2013 14:50:55 for Linux Kernel by
1.8.2