2 * Copyright © 2006 Keith Packard
3 * Copyright © 2007-2008 Dave Airlie
4 * Copyright © 2007-2008 Intel Corporation
5 * Jesse Barnes <jesse.barnes@intel.com>
6 * Copyright © 2014 Intel Corporation
7 * Daniel Vetter <daniel.vetter@ffwll.ch>
8 * Copyright (c) 2020, The Linux Foundation. All rights reserved.
10 * Permission is hereby granted, free of charge, to any person obtaining a
11 * copy of this software and associated documentation files (the "Software"),
12 * to deal in the Software without restriction, including without limitation
13 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
14 * and/or sell copies of the Software, and to permit persons to whom the
15 * Software is furnished to do so, subject to the following conditions:
17 * The above copyright notice and this permission notice shall be included in
18 * all copies or substantial portions of the Software.
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
24 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26 * OTHER DEALINGS IN THE SOFTWARE.
30 * This header file contains mode setting related functions and definitions
31 * which are only used within the drm module as internal implementation details
32 * and are not exported to drivers.
35 #ifndef __DRM_CRTC_INTERNAL_H__
36 #define __DRM_CRTC_INTERNAL_H__
38 #include <linux/err.h>
39 #include <linux/types.h>
41 enum drm_color_encoding
;
43 enum drm_connector_force
;
47 struct drm_atomic_state
;
52 struct drm_display_mode
;
55 struct drm_framebuffer
;
56 struct drm_mode_create_dumb
;
57 struct drm_mode_fb_cmd2
;
58 struct drm_mode_fb_cmd
;
59 struct drm_mode_object
;
62 struct drm_plane_state
;
72 int drm_mode_crtc_set_obj_prop(struct drm_mode_object
*obj
,
73 struct drm_property
*property
,
75 int drm_crtc_check_viewport(const struct drm_crtc
*crtc
,
77 const struct drm_display_mode
*mode
,
78 const struct drm_framebuffer
*fb
);
79 int drm_crtc_register_all(struct drm_device
*dev
);
80 void drm_crtc_unregister_all(struct drm_device
*dev
);
81 int drm_crtc_force_disable(struct drm_crtc
*crtc
);
83 struct dma_fence
*drm_crtc_create_fence(struct drm_crtc
*crtc
);
86 drm_create_scaling_filter_prop(struct drm_device
*dev
,
87 unsigned int supported_filters
);
89 int drm_mode_getcrtc(struct drm_device
*dev
,
90 void *data
, struct drm_file
*file_priv
);
91 int drm_mode_setcrtc(struct drm_device
*dev
,
92 void *data
, struct drm_file
*file_priv
);
95 /* drm_mode_config.c */
96 int drm_modeset_register_all(struct drm_device
*dev
);
97 void drm_modeset_unregister_all(struct drm_device
*dev
);
98 void drm_mode_config_validate(struct drm_device
*dev
);
101 const char *drm_get_mode_status_name(enum drm_mode_status status
);
104 int drm_mode_getresources(struct drm_device
*dev
,
105 void *data
, struct drm_file
*file_priv
);
108 /* drm_dumb_buffers.c */
109 int drm_mode_create_dumb(struct drm_device
*dev
,
110 struct drm_mode_create_dumb
*args
,
111 struct drm_file
*file_priv
);
112 int drm_mode_destroy_dumb(struct drm_device
*dev
, u32 handle
,
113 struct drm_file
*file_priv
);
116 int drm_mode_create_dumb_ioctl(struct drm_device
*dev
,
117 void *data
, struct drm_file
*file_priv
);
118 int drm_mode_mmap_dumb_ioctl(struct drm_device
*dev
,
119 void *data
, struct drm_file
*file_priv
);
120 int drm_mode_destroy_dumb_ioctl(struct drm_device
*dev
,
121 void *data
, struct drm_file
*file_priv
);
123 /* drm_color_mgmt.c */
124 const char *drm_get_color_encoding_name(enum drm_color_encoding encoding
);
125 const char *drm_get_color_range_name(enum drm_color_range range
);
128 int drm_mode_gamma_get_ioctl(struct drm_device
*dev
,
129 void *data
, struct drm_file
*file_priv
);
130 int drm_mode_gamma_set_ioctl(struct drm_device
*dev
,
131 void *data
, struct drm_file
*file_priv
);
134 void drm_property_destroy_user_blobs(struct drm_device
*dev
,
135 struct drm_file
*file_priv
);
136 bool drm_property_change_valid_get(struct drm_property
*property
,
138 struct drm_mode_object
**ref
);
139 void drm_property_change_valid_put(struct drm_property
*property
,
140 struct drm_mode_object
*ref
);
143 int drm_mode_getproperty_ioctl(struct drm_device
*dev
,
144 void *data
, struct drm_file
*file_priv
);
145 int drm_mode_getblob_ioctl(struct drm_device
*dev
,
146 void *data
, struct drm_file
*file_priv
);
147 int drm_mode_createblob_ioctl(struct drm_device
*dev
,
148 void *data
, struct drm_file
*file_priv
);
149 int drm_mode_destroyblob_ioctl(struct drm_device
*dev
,
150 void *data
, struct drm_file
*file_priv
);
152 /* drm_mode_object.c */
153 int __drm_mode_object_add(struct drm_device
*dev
, struct drm_mode_object
*obj
,
154 uint32_t obj_type
, bool register_obj
,
155 void (*obj_free_cb
)(struct kref
*kref
));
156 int drm_mode_object_add(struct drm_device
*dev
, struct drm_mode_object
*obj
,
158 void drm_mode_object_register(struct drm_device
*dev
,
159 struct drm_mode_object
*obj
);
160 struct drm_mode_object
*__drm_mode_object_find(struct drm_device
*dev
,
161 struct drm_file
*file_priv
,
162 uint32_t id
, uint32_t type
);
163 void drm_mode_object_unregister(struct drm_device
*dev
,
164 struct drm_mode_object
*object
);
165 int drm_mode_object_get_properties(struct drm_mode_object
*obj
, bool atomic
,
166 uint32_t __user
*prop_ptr
,
167 uint64_t __user
*prop_values
,
168 uint32_t *arg_count_props
);
169 struct drm_property
*drm_mode_obj_find_prop_id(struct drm_mode_object
*obj
,
174 int drm_mode_obj_get_properties_ioctl(struct drm_device
*dev
, void *data
,
175 struct drm_file
*file_priv
);
176 int drm_mode_obj_set_property_ioctl(struct drm_device
*dev
, void *data
,
177 struct drm_file
*file_priv
);
180 int drm_encoder_register_all(struct drm_device
*dev
);
181 void drm_encoder_unregister_all(struct drm_device
*dev
);
184 int drm_mode_getencoder(struct drm_device
*dev
,
185 void *data
, struct drm_file
*file_priv
);
187 /* drm_connector.c */
188 void drm_connector_ida_init(void);
189 void drm_connector_ida_destroy(void);
190 void drm_connector_unregister_all(struct drm_device
*dev
);
191 int drm_connector_register_all(struct drm_device
*dev
);
192 int drm_connector_set_obj_prop(struct drm_mode_object
*obj
,
193 struct drm_property
*property
,
195 int drm_connector_create_standard_properties(struct drm_device
*dev
);
196 const char *drm_get_connector_force_name(enum drm_connector_force force
);
197 void drm_connector_free_work_fn(struct work_struct
*work
);
198 struct drm_connector
*drm_connector_find_by_fwnode(struct fwnode_handle
*fwnode
);
201 int drm_connector_property_set_ioctl(struct drm_device
*dev
,
202 void *data
, struct drm_file
*file_priv
);
203 int drm_mode_getconnector(struct drm_device
*dev
,
204 void *data
, struct drm_file
*file_priv
);
206 /* drm_framebuffer.c */
207 struct drm_framebuffer
*
208 drm_internal_framebuffer_create(struct drm_device
*dev
,
209 const struct drm_mode_fb_cmd2
*r
,
210 struct drm_file
*file_priv
);
211 void drm_framebuffer_free(struct kref
*kref
);
212 int drm_framebuffer_check_src_coords(uint32_t src_x
, uint32_t src_y
,
213 uint32_t src_w
, uint32_t src_h
,
214 const struct drm_framebuffer
*fb
);
215 void drm_fb_release(struct drm_file
*file_priv
);
217 int drm_mode_addfb(struct drm_device
*dev
, struct drm_mode_fb_cmd
*or,
218 struct drm_file
*file_priv
);
219 int drm_mode_addfb2(struct drm_device
*dev
,
220 void *data
, struct drm_file
*file_priv
);
221 int drm_mode_rmfb(struct drm_device
*dev
, u32 fb_id
,
222 struct drm_file
*file_priv
);
226 int drm_mode_addfb_ioctl(struct drm_device
*dev
,
227 void *data
, struct drm_file
*file_priv
);
228 int drm_mode_addfb2_ioctl(struct drm_device
*dev
,
229 void *data
, struct drm_file
*file_priv
);
230 int drm_mode_rmfb_ioctl(struct drm_device
*dev
,
231 void *data
, struct drm_file
*file_priv
);
232 int drm_mode_closefb_ioctl(struct drm_device
*dev
,
233 void *data
, struct drm_file
*file_priv
);
234 int drm_mode_getfb(struct drm_device
*dev
,
235 void *data
, struct drm_file
*file_priv
);
236 int drm_mode_getfb2_ioctl(struct drm_device
*dev
,
237 void *data
, struct drm_file
*file_priv
);
238 int drm_mode_dirtyfb_ioctl(struct drm_device
*dev
,
239 void *data
, struct drm_file
*file_priv
);
242 #ifdef CONFIG_DEBUG_FS
244 void drm_atomic_debugfs_init(struct drm_device
*dev
);
247 int __drm_atomic_helper_disable_plane(struct drm_plane
*plane
,
248 struct drm_plane_state
*plane_state
);
249 int __drm_atomic_helper_set_config(struct drm_mode_set
*set
,
250 struct drm_atomic_state
*state
);
252 void drm_atomic_print_new_state(const struct drm_atomic_state
*state
,
253 struct drm_printer
*p
);
255 /* drm_atomic_uapi.c */
256 int drm_atomic_connector_commit_dpms(struct drm_atomic_state
*state
,
257 struct drm_connector
*connector
,
259 int drm_atomic_set_property(struct drm_atomic_state
*state
,
260 struct drm_file
*file_priv
,
261 struct drm_mode_object
*obj
,
262 struct drm_property
*prop
,
263 u64 prop_value
, bool async_flip
);
264 int drm_atomic_get_property(struct drm_mode_object
*obj
,
265 struct drm_property
*property
, uint64_t *val
);
268 int drm_mode_atomic_ioctl(struct drm_device
*dev
,
269 void *data
, struct drm_file
*file_priv
);
273 int drm_plane_register_all(struct drm_device
*dev
);
274 void drm_plane_unregister_all(struct drm_device
*dev
);
275 struct drm_mode_rect
*
276 __drm_plane_get_damage_clips(const struct drm_plane_state
*state
);
279 void drm_bridge_detach(struct drm_bridge
*bridge
);
282 int drm_mode_getplane_res(struct drm_device
*dev
, void *data
,
283 struct drm_file
*file_priv
);
284 int drm_mode_getplane(struct drm_device
*dev
,
285 void *data
, struct drm_file
*file_priv
);
286 int drm_mode_setplane(struct drm_device
*dev
,
287 void *data
, struct drm_file
*file_priv
);
288 int drm_mode_cursor_ioctl(struct drm_device
*dev
,
289 void *data
, struct drm_file
*file_priv
);
290 int drm_mode_cursor2_ioctl(struct drm_device
*dev
,
291 void *data
, struct drm_file
*file_priv
);
292 int drm_mode_page_flip_ioctl(struct drm_device
*dev
,
293 void *data
, struct drm_file
*file_priv
);
296 void drm_mode_fixup_1366x768(struct drm_display_mode
*mode
);
297 int drm_edid_override_show(struct drm_connector
*connector
, struct seq_file
*m
);
298 int drm_edid_override_set(struct drm_connector
*connector
, const void *edid
, size_t size
);
299 int drm_edid_override_reset(struct drm_connector
*connector
);
300 const u8
*drm_edid_find_extension(const struct drm_edid
*drm_edid
,
301 int ext_id
, int *ext_index
);
302 void drm_edid_cta_sad_get(const struct cea_sad
*cta_sad
, u8
*sad
);
303 void drm_edid_cta_sad_set(struct cea_sad
*cta_sad
, const u8
*sad
);
304 ssize_t
drm_edid_connector_property_show(struct drm_connector
*connector
,
305 char *buf
, loff_t off
, size_t count
);
307 /* drm_edid_load.c */
308 #ifdef CONFIG_DRM_LOAD_EDID_FIRMWARE
309 const struct drm_edid
*drm_edid_load_firmware(struct drm_connector
*connector
);
311 static inline const struct drm_edid
*
312 drm_edid_load_firmware(struct drm_connector
*connector
)
314 return ERR_PTR(-ENOENT
);
319 #ifdef CONFIG_DRM_PANIC
320 bool drm_panic_is_enabled(struct drm_device
*dev
);
321 void drm_panic_register(struct drm_device
*dev
);
322 void drm_panic_unregister(struct drm_device
*dev
);
323 void drm_panic_init(void);
324 void drm_panic_exit(void);
326 static inline bool drm_panic_is_enabled(struct drm_device
*dev
) { return false; }
327 static inline void drm_panic_register(struct drm_device
*dev
) {}
328 static inline void drm_panic_unregister(struct drm_device
*dev
) {}
329 static inline void drm_panic_init(void) {}
330 static inline void drm_panic_exit(void) {}
333 #endif /* __DRM_CRTC_INTERNAL_H__ */