18bd441b2SDaniel Vetter /*
28bd441b2SDaniel Vetter  * Copyright © 2006 Keith Packard
38bd441b2SDaniel Vetter  * Copyright © 2007-2008 Dave Airlie
48bd441b2SDaniel Vetter  * Copyright © 2007-2008 Intel Corporation
58bd441b2SDaniel Vetter  *   Jesse Barnes <jesse.barnes@intel.com>
68bd441b2SDaniel Vetter  * Copyright © 2014 Intel Corporation
78bd441b2SDaniel Vetter  *   Daniel Vetter <daniel.vetter@ffwll.ch>
8a4324a7aSAbhinav Kumar  * Copyright (c) 2020, The Linux Foundation. All rights reserved.
98bd441b2SDaniel Vetter  *
108bd441b2SDaniel Vetter  * Permission is hereby granted, free of charge, to any person obtaining a
118bd441b2SDaniel Vetter  * copy of this software and associated documentation files (the "Software"),
128bd441b2SDaniel Vetter  * to deal in the Software without restriction, including without limitation
138bd441b2SDaniel Vetter  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
148bd441b2SDaniel Vetter  * and/or sell copies of the Software, and to permit persons to whom the
158bd441b2SDaniel Vetter  * Software is furnished to do so, subject to the following conditions:
168bd441b2SDaniel Vetter  *
178bd441b2SDaniel Vetter  * The above copyright notice and this permission notice shall be included in
188bd441b2SDaniel Vetter  * all copies or substantial portions of the Software.
198bd441b2SDaniel Vetter  *
208bd441b2SDaniel Vetter  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
218bd441b2SDaniel Vetter  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
228bd441b2SDaniel Vetter  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
238bd441b2SDaniel Vetter  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
248bd441b2SDaniel Vetter  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
258bd441b2SDaniel Vetter  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
268bd441b2SDaniel Vetter  * OTHER DEALINGS IN THE SOFTWARE.
278bd441b2SDaniel Vetter  */
288bd441b2SDaniel Vetter 
298bd441b2SDaniel Vetter /*
308bd441b2SDaniel Vetter  * This header file contains mode setting related functions and definitions
318bd441b2SDaniel Vetter  * which are only used within the drm module as internal implementation details
328bd441b2SDaniel Vetter  * and are not exported to drivers.
338bd441b2SDaniel Vetter  */
348bd441b2SDaniel Vetter 
351dccccbaSSam Ravnborg #include <linux/types.h>
36b88ac005SDaniel Vetter 
371dccccbaSSam Ravnborg enum drm_color_encoding;
381dccccbaSSam Ravnborg enum drm_color_range;
391dccccbaSSam Ravnborg enum drm_connector_force;
401dccccbaSSam Ravnborg enum drm_mode_status;
411dccccbaSSam Ravnborg 
421dccccbaSSam Ravnborg struct drm_atomic_state;
43b88ac005SDaniel Vetter struct drm_bridge;
441dccccbaSSam Ravnborg struct drm_connector;
451dccccbaSSam Ravnborg struct drm_crtc;
461dccccbaSSam Ravnborg struct drm_device;
471dccccbaSSam Ravnborg struct drm_display_mode;
481dccccbaSSam Ravnborg struct drm_file;
491dccccbaSSam Ravnborg struct drm_framebuffer;
501dccccbaSSam Ravnborg struct drm_mode_create_dumb;
511dccccbaSSam Ravnborg struct drm_mode_fb_cmd2;
521dccccbaSSam Ravnborg struct drm_mode_fb_cmd;
531dccccbaSSam Ravnborg struct drm_mode_object;
54df737895SNoralf Trønnes struct drm_mode_set;
551dccccbaSSam Ravnborg struct drm_plane;
56df737895SNoralf Trønnes struct drm_plane_state;
571dccccbaSSam Ravnborg struct drm_property;
58b88ac005SDaniel Vetter struct edid;
593d3f7c1eSHans de Goede struct fwnode_handle;
6091ec9ab4SJani Nikula struct kref;
6191ec9ab4SJani Nikula struct seq_file;
6291ec9ab4SJani Nikula struct work_struct;
6381065548SDaniel Vetter 
6481065548SDaniel Vetter /* drm_crtc.c */
65949619f3SDaniel Vetter int drm_mode_crtc_set_obj_prop(struct drm_mode_object *obj,
66949619f3SDaniel Vetter 			       struct drm_property *property,
67949619f3SDaniel Vetter 			       uint64_t value);
6881065548SDaniel Vetter int drm_crtc_check_viewport(const struct drm_crtc *crtc,
6981065548SDaniel Vetter 			    int x, int y,
7081065548SDaniel Vetter 			    const struct drm_display_mode *mode,
7181065548SDaniel Vetter 			    const struct drm_framebuffer *fb);
7228575f16SDaniel Vetter int drm_crtc_register_all(struct drm_device *dev);
7328575f16SDaniel Vetter void drm_crtc_unregister_all(struct drm_device *dev);
741e9080acSDaniel Vetter int drm_crtc_force_disable(struct drm_crtc *crtc);
7581065548SDaniel Vetter 
7635f8cc3bSGustavo Padovan struct dma_fence *drm_crtc_create_fence(struct drm_crtc *crtc);
776d6003c4SGustavo Padovan 
785c759edaSPankaj Bharadiya struct drm_property *
795c759edaSPankaj Bharadiya drm_create_scaling_filter_prop(struct drm_device *dev,
805c759edaSPankaj Bharadiya 			       unsigned int supported_filters);
8181065548SDaniel Vetter /* IOCTLs */
8281065548SDaniel Vetter int drm_mode_getcrtc(struct drm_device *dev,
8381065548SDaniel Vetter 		     void *data, struct drm_file *file_priv);
8481065548SDaniel Vetter int drm_mode_setcrtc(struct drm_device *dev,
8581065548SDaniel Vetter 		     void *data, struct drm_file *file_priv);
86f1e2f66cSDaniel Vetter 
871a02ea43SDaniel Vetter 
8828575f16SDaniel Vetter /* drm_mode_config.c */
8928575f16SDaniel Vetter int drm_modeset_register_all(struct drm_device *dev);
9028575f16SDaniel Vetter void drm_modeset_unregister_all(struct drm_device *dev);
9171427795SVille Syrjälä void drm_mode_config_validate(struct drm_device *dev);
9228575f16SDaniel Vetter 
936ab0edf4SVille Syrjälä /* drm_modes.c */
946ab0edf4SVille Syrjälä const char *drm_get_mode_status_name(enum drm_mode_status status);
956ab0edf4SVille Syrjälä 
9628575f16SDaniel Vetter /* IOCTLs */
9728575f16SDaniel Vetter int drm_mode_getresources(struct drm_device *dev,
9828575f16SDaniel Vetter 			  void *data, struct drm_file *file_priv);
9928575f16SDaniel Vetter 
10028575f16SDaniel Vetter 
10128575f16SDaniel Vetter /* drm_dumb_buffers.c */
102d30827ceSNoralf Trønnes int drm_mode_create_dumb(struct drm_device *dev,
103d30827ceSNoralf Trønnes 			 struct drm_mode_create_dumb *args,
104d30827ceSNoralf Trønnes 			 struct drm_file *file_priv);
105d30827ceSNoralf Trønnes int drm_mode_destroy_dumb(struct drm_device *dev, u32 handle,
106d30827ceSNoralf Trønnes 			  struct drm_file *file_priv);
107d30827ceSNoralf Trønnes 
1081a02ea43SDaniel Vetter /* IOCTLs */
1091a02ea43SDaniel Vetter int drm_mode_create_dumb_ioctl(struct drm_device *dev,
1101a02ea43SDaniel Vetter 			       void *data, struct drm_file *file_priv);
1111a02ea43SDaniel Vetter int drm_mode_mmap_dumb_ioctl(struct drm_device *dev,
1121a02ea43SDaniel Vetter 			     void *data, struct drm_file *file_priv);
1131a02ea43SDaniel Vetter int drm_mode_destroy_dumb_ioctl(struct drm_device *dev,
1141a02ea43SDaniel Vetter 				void *data, struct drm_file *file_priv);
1151a02ea43SDaniel Vetter 
116f1e2f66cSDaniel Vetter /* drm_color_mgmt.c */
11756dbbaffSVille Syrjälä const char *drm_get_color_encoding_name(enum drm_color_encoding encoding);
11856dbbaffSVille Syrjälä const char *drm_get_color_range_name(enum drm_color_range range);
119f1e2f66cSDaniel Vetter 
120f1e2f66cSDaniel Vetter /* IOCTLs */
12159e71ee7SDaniel Vetter int drm_mode_gamma_get_ioctl(struct drm_device *dev,
12259e71ee7SDaniel Vetter 			     void *data, struct drm_file *file_priv);
12359e71ee7SDaniel Vetter int drm_mode_gamma_set_ioctl(struct drm_device *dev,
12459e71ee7SDaniel Vetter 			     void *data, struct drm_file *file_priv);
12559e71ee7SDaniel Vetter 
12659e71ee7SDaniel Vetter /* drm_property.c */
12759e71ee7SDaniel Vetter void drm_property_destroy_user_blobs(struct drm_device *dev,
12859e71ee7SDaniel Vetter 				     struct drm_file *file_priv);
12959e71ee7SDaniel Vetter bool drm_property_change_valid_get(struct drm_property *property,
13059e71ee7SDaniel Vetter 				   uint64_t value,
13159e71ee7SDaniel Vetter 				   struct drm_mode_object **ref);
13259e71ee7SDaniel Vetter void drm_property_change_valid_put(struct drm_property *property,
13359e71ee7SDaniel Vetter 				   struct drm_mode_object *ref);
13459e71ee7SDaniel Vetter 
13559e71ee7SDaniel Vetter /* IOCTL */
13681065548SDaniel Vetter int drm_mode_getproperty_ioctl(struct drm_device *dev,
13781065548SDaniel Vetter 			       void *data, struct drm_file *file_priv);
13881065548SDaniel Vetter int drm_mode_getblob_ioctl(struct drm_device *dev,
13981065548SDaniel Vetter 			   void *data, struct drm_file *file_priv);
14081065548SDaniel Vetter int drm_mode_createblob_ioctl(struct drm_device *dev,
14181065548SDaniel Vetter 			      void *data, struct drm_file *file_priv);
14281065548SDaniel Vetter int drm_mode_destroyblob_ioctl(struct drm_device *dev,
14381065548SDaniel Vetter 			       void *data, struct drm_file *file_priv);
1448bd441b2SDaniel Vetter 
145949619f3SDaniel Vetter /* drm_mode_object.c */
1462135ea7aSThierry Reding int __drm_mode_object_add(struct drm_device *dev, struct drm_mode_object *obj,
1472135ea7aSThierry Reding 			  uint32_t obj_type, bool register_obj,
148949619f3SDaniel Vetter 			  void (*obj_free_cb)(struct kref *kref));
1492135ea7aSThierry Reding int drm_mode_object_add(struct drm_device *dev, struct drm_mode_object *obj,
1502135ea7aSThierry Reding 			uint32_t obj_type);
151949619f3SDaniel Vetter void drm_mode_object_register(struct drm_device *dev,
152949619f3SDaniel Vetter 			      struct drm_mode_object *obj);
153949619f3SDaniel Vetter struct drm_mode_object *__drm_mode_object_find(struct drm_device *dev,
154418da172SKeith Packard 					       struct drm_file *file_priv,
155949619f3SDaniel Vetter 					       uint32_t id, uint32_t type);
156949619f3SDaniel Vetter void drm_mode_object_unregister(struct drm_device *dev,
157949619f3SDaniel Vetter 				struct drm_mode_object *object);
158949619f3SDaniel Vetter int drm_mode_object_get_properties(struct drm_mode_object *obj, bool atomic,
159949619f3SDaniel Vetter 				   uint32_t __user *prop_ptr,
160949619f3SDaniel Vetter 				   uint64_t __user *prop_values,
161949619f3SDaniel Vetter 				   uint32_t *arg_count_props);
162f92f053bSMaarten Lankhorst struct drm_property *drm_mode_obj_find_prop_id(struct drm_mode_object *obj,
163f92f053bSMaarten Lankhorst 					       uint32_t prop_id);
164949619f3SDaniel Vetter 
165949619f3SDaniel Vetter /* IOCTL */
166949619f3SDaniel Vetter 
167949619f3SDaniel Vetter int drm_mode_obj_get_properties_ioctl(struct drm_device *dev, void *data,
168949619f3SDaniel Vetter 				      struct drm_file *file_priv);
169949619f3SDaniel Vetter int drm_mode_obj_set_property_ioctl(struct drm_device *dev, void *data,
170949619f3SDaniel Vetter 				    struct drm_file *file_priv);
171949619f3SDaniel Vetter 
172321a95aeSDaniel Vetter /* drm_encoder.c */
173321a95aeSDaniel Vetter int drm_encoder_register_all(struct drm_device *dev);
174321a95aeSDaniel Vetter void drm_encoder_unregister_all(struct drm_device *dev);
175321a95aeSDaniel Vetter 
176321a95aeSDaniel Vetter /* IOCTL */
177321a95aeSDaniel Vetter int drm_mode_getencoder(struct drm_device *dev,
178321a95aeSDaniel Vetter 			void *data, struct drm_file *file_priv);
179321a95aeSDaniel Vetter 
18052217195SDaniel Vetter /* drm_connector.c */
18152217195SDaniel Vetter void drm_connector_ida_init(void);
18252217195SDaniel Vetter void drm_connector_ida_destroy(void);
18352217195SDaniel Vetter void drm_connector_unregister_all(struct drm_device *dev);
18452217195SDaniel Vetter int drm_connector_register_all(struct drm_device *dev);
18597e14fbeSDaniel Vetter int drm_connector_set_obj_prop(struct drm_mode_object *obj,
18652217195SDaniel Vetter 				    struct drm_property *property,
18752217195SDaniel Vetter 				    uint64_t value);
18852217195SDaniel Vetter int drm_connector_create_standard_properties(struct drm_device *dev);
1896140cf20SJani Nikula const char *drm_get_connector_force_name(enum drm_connector_force force);
190ea497bb9SDaniel Vetter void drm_connector_free_work_fn(struct work_struct *work);
1913d3f7c1eSHans de Goede struct drm_connector *drm_connector_find_by_fwnode(struct fwnode_handle *fwnode);
19252217195SDaniel Vetter 
19352217195SDaniel Vetter /* IOCTL */
19497e14fbeSDaniel Vetter int drm_connector_property_set_ioctl(struct drm_device *dev,
19552217195SDaniel Vetter 				     void *data, struct drm_file *file_priv);
19652217195SDaniel Vetter int drm_mode_getconnector(struct drm_device *dev,
19752217195SDaniel Vetter 			  void *data, struct drm_file *file_priv);
19852217195SDaniel Vetter 
1997520a277SDaniel Vetter /* drm_framebuffer.c */
2007520a277SDaniel Vetter struct drm_framebuffer *
2017520a277SDaniel Vetter drm_internal_framebuffer_create(struct drm_device *dev,
2027520a277SDaniel Vetter 				const struct drm_mode_fb_cmd2 *r,
2037520a277SDaniel Vetter 				struct drm_file *file_priv);
2047520a277SDaniel Vetter void drm_framebuffer_free(struct kref *kref);
20543968d7bSDaniel Vetter int drm_framebuffer_check_src_coords(uint32_t src_x, uint32_t src_y,
20643968d7bSDaniel Vetter 				     uint32_t src_w, uint32_t src_h,
20743968d7bSDaniel Vetter 				     const struct drm_framebuffer *fb);
20828575f16SDaniel Vetter void drm_fb_release(struct drm_file *file_priv);
20928575f16SDaniel Vetter 
210d30827ceSNoralf Trønnes int drm_mode_addfb(struct drm_device *dev, struct drm_mode_fb_cmd *or,
211d30827ceSNoralf Trønnes 		   struct drm_file *file_priv);
212eae06120SGerd Hoffmann int drm_mode_addfb2(struct drm_device *dev,
213eae06120SGerd Hoffmann 		    void *data, struct drm_file *file_priv);
214d30827ceSNoralf Trønnes int drm_mode_rmfb(struct drm_device *dev, u32 fb_id,
215d30827ceSNoralf Trønnes 		  struct drm_file *file_priv);
216d30827ceSNoralf Trønnes 
2177520a277SDaniel Vetter 
2187520a277SDaniel Vetter /* IOCTL */
219d30827ceSNoralf Trønnes int drm_mode_addfb_ioctl(struct drm_device *dev,
2207520a277SDaniel Vetter 			 void *data, struct drm_file *file_priv);
221eae06120SGerd Hoffmann int drm_mode_addfb2_ioctl(struct drm_device *dev,
2227520a277SDaniel Vetter 			  void *data, struct drm_file *file_priv);
223d30827ceSNoralf Trønnes int drm_mode_rmfb_ioctl(struct drm_device *dev,
2247520a277SDaniel Vetter 			void *data, struct drm_file *file_priv);
2257520a277SDaniel Vetter int drm_mode_getfb(struct drm_device *dev,
2267520a277SDaniel Vetter 		   void *data, struct drm_file *file_priv);
227455e00f1SDaniel Stone int drm_mode_getfb2_ioctl(struct drm_device *dev,
228455e00f1SDaniel Stone 			  void *data, struct drm_file *file_priv);
2297520a277SDaniel Vetter int drm_mode_dirtyfb_ioctl(struct drm_device *dev,
2307520a277SDaniel Vetter 			   void *data, struct drm_file *file_priv);
2317520a277SDaniel Vetter 
232a97df1ccSDaniel Vetter /* drm_atomic.c */
2335bc9cb4dSDaniel Vetter #ifdef CONFIG_DEBUG_FS
2345bc9cb4dSDaniel Vetter struct drm_minor;
2357ce84471SWambui Karuga void drm_atomic_debugfs_init(struct drm_minor *minor);
2365bc9cb4dSDaniel Vetter #endif
2375bc9cb4dSDaniel Vetter 
238df737895SNoralf Trønnes int __drm_atomic_helper_disable_plane(struct drm_plane *plane,
239df737895SNoralf Trønnes 				      struct drm_plane_state *plane_state);
240df737895SNoralf Trønnes int __drm_atomic_helper_set_config(struct drm_mode_set *set,
241df737895SNoralf Trønnes 				   struct drm_atomic_state *state);
242df737895SNoralf Trønnes 
243a4324a7aSAbhinav Kumar void drm_atomic_print_new_state(const struct drm_atomic_state *state,
244a4324a7aSAbhinav Kumar 		struct drm_printer *p);
24572fdb40cSDaniel Vetter 
24672fdb40cSDaniel Vetter /* drm_atomic_uapi.c */
247144a7999SDaniel Vetter int drm_atomic_connector_commit_dpms(struct drm_atomic_state *state,
248144a7999SDaniel Vetter 				     struct drm_connector *connector,
249144a7999SDaniel Vetter 				     int mode);
250144a7999SDaniel Vetter int drm_atomic_set_property(struct drm_atomic_state *state,
25136e4523aSDaniel Vetter 			    struct drm_file *file_priv,
252144a7999SDaniel Vetter 			    struct drm_mode_object *obj,
253144a7999SDaniel Vetter 			    struct drm_property *prop,
254144a7999SDaniel Vetter 			    uint64_t prop_value);
255a97df1ccSDaniel Vetter int drm_atomic_get_property(struct drm_mode_object *obj,
256a97df1ccSDaniel Vetter 			    struct drm_property *property, uint64_t *val);
25772fdb40cSDaniel Vetter 
25872fdb40cSDaniel Vetter /* IOCTL */
259a97df1ccSDaniel Vetter int drm_mode_atomic_ioctl(struct drm_device *dev,
260a97df1ccSDaniel Vetter 			  void *data, struct drm_file *file_priv);
261a97df1ccSDaniel Vetter 
26243968d7bSDaniel Vetter 
26343968d7bSDaniel Vetter /* drm_plane.c */
26443968d7bSDaniel Vetter int drm_plane_register_all(struct drm_device *dev);
26543968d7bSDaniel Vetter void drm_plane_unregister_all(struct drm_device *dev);
26623163a7dSVille Syrjälä int drm_plane_check_pixel_format(struct drm_plane *plane,
26723163a7dSVille Syrjälä 				 u32 format, u64 modifier);
268c7fcbf25SDaniel Vetter struct drm_mode_rect *
269c7fcbf25SDaniel Vetter __drm_plane_get_damage_clips(const struct drm_plane_state *state);
27043968d7bSDaniel Vetter 
2714a878c03SLaurent Pinchart /* drm_bridge.c */
2724a878c03SLaurent Pinchart void drm_bridge_detach(struct drm_bridge *bridge);
2734a878c03SLaurent Pinchart 
27443968d7bSDaniel Vetter /* IOCTL */
27543968d7bSDaniel Vetter int drm_mode_getplane_res(struct drm_device *dev, void *data,
27643968d7bSDaniel Vetter 			  struct drm_file *file_priv);
27743968d7bSDaniel Vetter int drm_mode_getplane(struct drm_device *dev,
27843968d7bSDaniel Vetter 		      void *data, struct drm_file *file_priv);
27943968d7bSDaniel Vetter int drm_mode_setplane(struct drm_device *dev,
28043968d7bSDaniel Vetter 		      void *data, struct drm_file *file_priv);
28143968d7bSDaniel Vetter int drm_mode_cursor_ioctl(struct drm_device *dev,
28243968d7bSDaniel Vetter 			  void *data, struct drm_file *file_priv);
28343968d7bSDaniel Vetter int drm_mode_cursor2_ioctl(struct drm_device *dev,
28443968d7bSDaniel Vetter 			   void *data, struct drm_file *file_priv);
28543968d7bSDaniel Vetter int drm_mode_page_flip_ioctl(struct drm_device *dev,
28643968d7bSDaniel Vetter 			     void *data, struct drm_file *file_priv);
287969218feSTakashi Iwai 
288969218feSTakashi Iwai /* drm_edid.c */
289969218feSTakashi Iwai void drm_mode_fixup_1366x768(struct drm_display_mode *mode);
29091ec9ab4SJani Nikula int drm_edid_override_show(struct drm_connector *connector, struct seq_file *m);
2916aa145bcSJani Nikula int drm_edid_override_set(struct drm_connector *connector, const void *edid, size_t size);
2926aa145bcSJani Nikula int drm_edid_override_reset(struct drm_connector *connector);
293*5f2d0ed4SJani Nikula 
294*5f2d0ed4SJani Nikula /* drm_edid_load.c */
295*5f2d0ed4SJani Nikula #ifdef CONFIG_DRM_LOAD_EDID_FIRMWARE
296*5f2d0ed4SJani Nikula const struct drm_edid *drm_edid_load_firmware(struct drm_connector *connector);
297*5f2d0ed4SJani Nikula #else
298*5f2d0ed4SJani Nikula static inline const struct drm_edid *
drm_edid_load_firmware(struct drm_connector * connector)299*5f2d0ed4SJani Nikula drm_edid_load_firmware(struct drm_connector *connector)
300*5f2d0ed4SJani Nikula {
301*5f2d0ed4SJani Nikula 	return ERR_PTR(-ENOENT);
302*5f2d0ed4SJani Nikula }
303*5f2d0ed4SJani Nikula #endif
304