drm_mode.h 6.7 KB
Newer Older
D
Dave Airlie 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
/*
 * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
 * Copyright (c) 2007 Jakob Bornecrantz <wallbraker@gmail.com>
 * Copyright (c) 2008 Red Hat Inc.
 * Copyright (c) 2007-2008 Tungsten Graphics, Inc., Cedar Park, TX., USA
 * Copyright (c) 2007-2008 Intel Corporation
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 * IN THE SOFTWARE.
 */

#ifndef _DRM_MODE_H
#define _DRM_MODE_H

#include <linux/kernel.h>
31
#include <linux/types.h>
D
Dave Airlie 已提交
32

33 34 35 36
#define DRM_DISPLAY_INFO_LEN	32
#define DRM_CONNECTOR_NAME_LEN	32
#define DRM_DISPLAY_MODE_LEN	32
#define DRM_PROP_NAME_LEN	32
D
Dave Airlie 已提交
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

#define DRM_MODE_TYPE_BUILTIN	(1<<0)
#define DRM_MODE_TYPE_CLOCK_C	((1<<1) | DRM_MODE_TYPE_BUILTIN)
#define DRM_MODE_TYPE_CRTC_C	((1<<2) | DRM_MODE_TYPE_BUILTIN)
#define DRM_MODE_TYPE_PREFERRED	(1<<3)
#define DRM_MODE_TYPE_DEFAULT	(1<<4)
#define DRM_MODE_TYPE_USERDEF	(1<<5)
#define DRM_MODE_TYPE_DRIVER	(1<<6)

/* Video mode flags */
/* bit compatible with the xorg definitions. */
#define DRM_MODE_FLAG_PHSYNC	(1<<0)
#define DRM_MODE_FLAG_NHSYNC	(1<<1)
#define DRM_MODE_FLAG_PVSYNC	(1<<2)
#define DRM_MODE_FLAG_NVSYNC	(1<<3)
#define DRM_MODE_FLAG_INTERLACE	(1<<4)
#define DRM_MODE_FLAG_DBLSCAN	(1<<5)
#define DRM_MODE_FLAG_CSYNC	(1<<6)
#define DRM_MODE_FLAG_PCSYNC	(1<<7)
#define DRM_MODE_FLAG_NCSYNC	(1<<8)
#define DRM_MODE_FLAG_HSKEW	(1<<9) /* hskew provided */
#define DRM_MODE_FLAG_BCAST	(1<<10)
#define DRM_MODE_FLAG_PIXMUX	(1<<11)
#define DRM_MODE_FLAG_DBLCLK	(1<<12)
#define DRM_MODE_FLAG_CLKDIV2	(1<<13)

/* DPMS flags */
/* bit compatible with the xorg definitions. */
65 66 67 68
#define DRM_MODE_DPMS_ON	0
#define DRM_MODE_DPMS_STANDBY	1
#define DRM_MODE_DPMS_SUSPEND	2
#define DRM_MODE_DPMS_OFF	3
D
Dave Airlie 已提交
69 70

/* Scaling mode options */
71 72 73 74
#define DRM_MODE_SCALE_NON_GPU		0
#define DRM_MODE_SCALE_FULLSCREEN	1
#define DRM_MODE_SCALE_NO_SCALE		2
#define DRM_MODE_SCALE_ASPECT		3
D
Dave Airlie 已提交
75 76

/* Dithering mode options */
77 78
#define DRM_MODE_DITHERING_OFF	0
#define DRM_MODE_DITHERING_ON	1
D
Dave Airlie 已提交
79 80

struct drm_mode_modeinfo {
81 82 83
	__u32 clock;
	__u16 hdisplay, hsync_start, hsync_end, htotal, hskew;
	__u16 vdisplay, vsync_start, vsync_end, vtotal, vscan;
D
Dave Airlie 已提交
84

85
	__u32 vrefresh; /* vertical refresh * 1000 */
D
Dave Airlie 已提交
86

87 88
	__u32 flags;
	__u32 type;
D
Dave Airlie 已提交
89 90 91 92
	char name[DRM_DISPLAY_MODE_LEN];
};

struct drm_mode_card_res {
93 94 95 96 97 98 99 100 101 102
	__u64 fb_id_ptr;
	__u64 crtc_id_ptr;
	__u64 connector_id_ptr;
	__u64 encoder_id_ptr;
	__u32 count_fbs;
	__u32 count_crtcs;
	__u32 count_connectors;
	__u32 count_encoders;
	__u32 min_width, max_width;
	__u32 min_height, max_height;
D
Dave Airlie 已提交
103 104 105
};

struct drm_mode_crtc {
106 107
	__u64 set_connectors_ptr;
	__u32 count_connectors;
D
Dave Airlie 已提交
108

109 110
	__u32 crtc_id; /**< Id */
	__u32 fb_id; /**< Id of framebuffer */
D
Dave Airlie 已提交
111

112
	__u32 x, y; /**< Position on the frameuffer */
D
Dave Airlie 已提交
113

114 115
	__u32 gamma_size;
	__u32 mode_valid;
D
Dave Airlie 已提交
116 117 118
	struct drm_mode_modeinfo mode;
};

119 120 121 122 123
#define DRM_MODE_ENCODER_NONE	0
#define DRM_MODE_ENCODER_DAC	1
#define DRM_MODE_ENCODER_TMDS	2
#define DRM_MODE_ENCODER_LVDS	3
#define DRM_MODE_ENCODER_TVDAC	4
D
Dave Airlie 已提交
124 125

struct drm_mode_get_encoder {
126 127
	__u32 encoder_id;
	__u32 encoder_type;
D
Dave Airlie 已提交
128

129
	__u32 crtc_id; /**< Id of crtc */
D
Dave Airlie 已提交
130

131 132
	__u32 possible_crtcs;
	__u32 possible_clones;
D
Dave Airlie 已提交
133 134 135 136
};

/* This is for connectors with multiple signal types. */
/* Try to match DRM_MODE_CONNECTOR_X as closely as possible. */
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
#define DRM_MODE_SUBCONNECTOR_Automatic	0
#define DRM_MODE_SUBCONNECTOR_Unknown	0
#define DRM_MODE_SUBCONNECTOR_DVID	3
#define DRM_MODE_SUBCONNECTOR_DVIA	4
#define DRM_MODE_SUBCONNECTOR_Composite	5
#define DRM_MODE_SUBCONNECTOR_SVIDEO	6
#define DRM_MODE_SUBCONNECTOR_Component	8

#define DRM_MODE_CONNECTOR_Unknown	0
#define DRM_MODE_CONNECTOR_VGA		1
#define DRM_MODE_CONNECTOR_DVII		2
#define DRM_MODE_CONNECTOR_DVID		3
#define DRM_MODE_CONNECTOR_DVIA		4
#define DRM_MODE_CONNECTOR_Composite	5
#define DRM_MODE_CONNECTOR_SVIDEO	6
#define DRM_MODE_CONNECTOR_LVDS		7
#define DRM_MODE_CONNECTOR_Component	8
#define DRM_MODE_CONNECTOR_9PinDIN	9
#define DRM_MODE_CONNECTOR_DisplayPort	10
#define DRM_MODE_CONNECTOR_HDMIA	11
#define DRM_MODE_CONNECTOR_HDMIB	12
158
#define DRM_MODE_CONNECTOR_TV		13
D
Dave Airlie 已提交
159 160 161

struct drm_mode_get_connector {

162 163 164 165
	__u64 encoders_ptr;
	__u64 modes_ptr;
	__u64 props_ptr;
	__u64 prop_values_ptr;
D
Dave Airlie 已提交
166

167 168 169
	__u32 count_modes;
	__u32 count_props;
	__u32 count_encoders;
D
Dave Airlie 已提交
170

171 172 173 174
	__u32 encoder_id; /**< Current Encoder */
	__u32 connector_id; /**< Id */
	__u32 connector_type;
	__u32 connector_type_id;
D
Dave Airlie 已提交
175

176 177 178
	__u32 connection;
	__u32 mm_width, mm_height; /**< HxW in millimeters */
	__u32 subpixel;
D
Dave Airlie 已提交
179 180
};

181 182 183 184 185
#define DRM_MODE_PROP_PENDING	(1<<0)
#define DRM_MODE_PROP_RANGE	(1<<1)
#define DRM_MODE_PROP_IMMUTABLE	(1<<2)
#define DRM_MODE_PROP_ENUM	(1<<3) /* enumerated type with text strings */
#define DRM_MODE_PROP_BLOB	(1<<4)
D
Dave Airlie 已提交
186 187

struct drm_mode_property_enum {
188
	__u64 value;
189
	char name[DRM_PROP_NAME_LEN];
D
Dave Airlie 已提交
190 191 192
};

struct drm_mode_get_property {
193 194
	__u64 values_ptr; /* values and blob lengths */
	__u64 enum_blob_ptr; /* enum and blob id ptrs */
D
Dave Airlie 已提交
195

196 197
	__u32 prop_id;
	__u32 flags;
198
	char name[DRM_PROP_NAME_LEN];
D
Dave Airlie 已提交
199

200 201
	__u32 count_values;
	__u32 count_enum_blobs;
D
Dave Airlie 已提交
202 203 204
};

struct drm_mode_connector_set_property {
205 206 207
	__u64 value;
	__u32 prop_id;
	__u32 connector_id;
D
Dave Airlie 已提交
208 209 210
};

struct drm_mode_get_blob {
211 212 213
	__u32 blob_id;
	__u32 length;
	__u64 data;
D
Dave Airlie 已提交
214 215 216
};

struct drm_mode_fb_cmd {
217 218 219 220 221
	__u32 fb_id;
	__u32 width, height;
	__u32 pitch;
	__u32 bpp;
	__u32 depth;
222
	/* driver specific handle */
223
	__u32 handle;
D
Dave Airlie 已提交
224 225 226
};

struct drm_mode_mode_cmd {
227
	__u32 connector_id;
D
Dave Airlie 已提交
228 229 230
	struct drm_mode_modeinfo mode;
};

231 232
#define DRM_MODE_CURSOR_BO	(1<<0)
#define DRM_MODE_CURSOR_MOVE	(1<<1)
D
Dave Airlie 已提交
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248

/*
 * depending on the value in flags diffrent members are used.
 *
 * CURSOR_BO uses
 *    crtc
 *    width
 *    height
 *    handle - if 0 turns the cursor of
 *
 * CURSOR_MOVE uses
 *    crtc
 *    x
 *    y
 */
struct drm_mode_cursor {
249 250 251 252 253 254
	__u32 flags;
	__u32 crtc_id;
	__s32 x;
	__s32 y;
	__u32 width;
	__u32 height;
255
	/* driver specific handle */
256
	__u32 handle;
D
Dave Airlie 已提交
257 258 259
};

struct drm_mode_crtc_lut {
260 261
	__u32 crtc_id;
	__u32 gamma_size;
D
Dave Airlie 已提交
262 263

	/* pointers to arrays */
264 265 266
	__u64 red;
	__u64 green;
	__u64 blue;
D
Dave Airlie 已提交
267 268 269
};

#endif