aboutsummaryrefslogtreecommitdiffstats
path: root/include/drm
diff options
context:
space:
mode:
Diffstat (limited to 'include/drm')
-rw-r--r--include/drm/drm_atomic.h24
-rw-r--r--include/drm/drm_crtc.h10
-rw-r--r--include/drm/drm_crtc_helper.h6
-rw-r--r--include/drm/drm_edid.h2
-rw-r--r--include/drm/drm_gem.h14
-rw-r--r--include/drm/drm_plane_helper.h2
6 files changed, 43 insertions, 15 deletions
diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h
index 51168a8b723a..c157103492b0 100644
--- a/include/drm/drm_atomic.h
+++ b/include/drm/drm_atomic.h
@@ -75,4 +75,28 @@ int __must_check drm_atomic_check_only(struct drm_atomic_state *state);
75int __must_check drm_atomic_commit(struct drm_atomic_state *state); 75int __must_check drm_atomic_commit(struct drm_atomic_state *state);
76int __must_check drm_atomic_async_commit(struct drm_atomic_state *state); 76int __must_check drm_atomic_async_commit(struct drm_atomic_state *state);
77 77
78#define for_each_connector_in_state(state, connector, connector_state, __i) \
79 for ((__i) = 0; \
80 (connector) = (state)->connectors[__i], \
81 (connector_state) = (state)->connector_states[__i], \
82 (__i) < (state)->num_connector; \
83 (__i)++) \
84 if (connector)
85
86#define for_each_crtc_in_state(state, crtc, crtc_state, __i) \
87 for ((__i) = 0; \
88 (crtc) = (state)->crtcs[__i], \
89 (crtc_state) = (state)->crtc_states[__i], \
90 (__i) < (state)->dev->mode_config.num_crtc; \
91 (__i)++) \
92 if (crtc_state)
93
94#define for_each_plane_in_state(state, plane, plane_state, __i) \
95 for ((__i) = 0; \
96 (plane) = (state)->planes[__i], \
97 (plane_state) = (state)->plane_states[__i], \
98 (__i) < (state)->dev->mode_config.num_total_plane; \
99 (__i)++) \
100 if (plane_state)
101
78#endif /* DRM_ATOMIC_H_ */ 102#endif /* DRM_ATOMIC_H_ */
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index 2e80ad1aea84..ca71c03143d1 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -466,7 +466,7 @@ struct drm_crtc {
466 int framedur_ns, linedur_ns, pixeldur_ns; 466 int framedur_ns, linedur_ns, pixeldur_ns;
467 467
468 /* if you are using the helper */ 468 /* if you are using the helper */
469 void *helper_private; 469 const void *helper_private;
470 470
471 struct drm_object_properties properties; 471 struct drm_object_properties properties;
472 472
@@ -596,7 +596,7 @@ struct drm_encoder {
596 struct drm_crtc *crtc; 596 struct drm_crtc *crtc;
597 struct drm_bridge *bridge; 597 struct drm_bridge *bridge;
598 const struct drm_encoder_funcs *funcs; 598 const struct drm_encoder_funcs *funcs;
599 void *helper_private; 599 const void *helper_private;
600}; 600};
601 601
602/* should we poll this connector for connects and disconnects */ 602/* should we poll this connector for connects and disconnects */
@@ -700,7 +700,7 @@ struct drm_connector {
700 /* requested DPMS state */ 700 /* requested DPMS state */
701 int dpms; 701 int dpms;
702 702
703 void *helper_private; 703 const void *helper_private;
704 704
705 /* forced on connector */ 705 /* forced on connector */
706 struct drm_cmdline_mode cmdline_mode; 706 struct drm_cmdline_mode cmdline_mode;
@@ -863,7 +863,7 @@ struct drm_plane {
863 863
864 enum drm_plane_type type; 864 enum drm_plane_type type;
865 865
866 void *helper_private; 866 const void *helper_private;
867 867
868 struct drm_plane_state *state; 868 struct drm_plane_state *state;
869}; 869};
@@ -974,7 +974,7 @@ struct drm_mode_set {
974 * struct drm_mode_config_funcs - basic driver provided mode setting functions 974 * struct drm_mode_config_funcs - basic driver provided mode setting functions
975 * @fb_create: create a new framebuffer object 975 * @fb_create: create a new framebuffer object
976 * @output_poll_changed: function to handle output configuration changes 976 * @output_poll_changed: function to handle output configuration changes
977 * @atomic_check: check whether a give atomic state update is possible 977 * @atomic_check: check whether a given atomic state update is possible
978 * @atomic_commit: commit an atomic state update previously verified with 978 * @atomic_commit: commit an atomic state update previously verified with
979 * atomic_check() 979 * atomic_check()
980 * 980 *
diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
index 92d5135b55d2..c8fc187061de 100644
--- a/include/drm/drm_crtc_helper.h
+++ b/include/drm/drm_crtc_helper.h
@@ -197,19 +197,19 @@ extern void drm_helper_mode_fill_fb_struct(struct drm_framebuffer *fb,
197static inline void drm_crtc_helper_add(struct drm_crtc *crtc, 197static inline void drm_crtc_helper_add(struct drm_crtc *crtc,
198 const struct drm_crtc_helper_funcs *funcs) 198 const struct drm_crtc_helper_funcs *funcs)
199{ 199{
200 crtc->helper_private = (void *)funcs; 200 crtc->helper_private = funcs;
201} 201}
202 202
203static inline void drm_encoder_helper_add(struct drm_encoder *encoder, 203static inline void drm_encoder_helper_add(struct drm_encoder *encoder,
204 const struct drm_encoder_helper_funcs *funcs) 204 const struct drm_encoder_helper_funcs *funcs)
205{ 205{
206 encoder->helper_private = (void *)funcs; 206 encoder->helper_private = funcs;
207} 207}
208 208
209static inline void drm_connector_helper_add(struct drm_connector *connector, 209static inline void drm_connector_helper_add(struct drm_connector *connector,
210 const struct drm_connector_helper_funcs *funcs) 210 const struct drm_connector_helper_funcs *funcs)
211{ 211{
212 connector->helper_private = (void *)funcs; 212 connector->helper_private = funcs;
213} 213}
214 214
215extern void drm_helper_resume_force_mode(struct drm_device *dev); 215extern void drm_helper_resume_force_mode(struct drm_device *dev);
diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h
index 87d85e81d3a7..799050198323 100644
--- a/include/drm/drm_edid.h
+++ b/include/drm/drm_edid.h
@@ -215,6 +215,8 @@ struct detailed_timing {
215#define DRM_ELD_VER 0 215#define DRM_ELD_VER 0
216# define DRM_ELD_VER_SHIFT 3 216# define DRM_ELD_VER_SHIFT 3
217# define DRM_ELD_VER_MASK (0x1f << 3) 217# define DRM_ELD_VER_MASK (0x1f << 3)
218# define DRM_ELD_VER_CEA861D (2 << 3) /* supports 861D or below */
219# define DRM_ELD_VER_CANNED (0x1f << 3)
218 220
219#define DRM_ELD_BASELINE_ELD_LEN 2 /* in dwords! */ 221#define DRM_ELD_BASELINE_ELD_LEN 2 /* in dwords! */
220 222
diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h
index 1e6ae1458f7a..7a592d7e398b 100644
--- a/include/drm/drm_gem.h
+++ b/include/drm/drm_gem.h
@@ -149,14 +149,16 @@ drm_gem_object_unreference(struct drm_gem_object *obj)
149static inline void 149static inline void
150drm_gem_object_unreference_unlocked(struct drm_gem_object *obj) 150drm_gem_object_unreference_unlocked(struct drm_gem_object *obj)
151{ 151{
152 if (obj && !atomic_add_unless(&obj->refcount.refcount, -1, 1)) { 152 struct drm_device *dev;
153 struct drm_device *dev = obj->dev; 153
154 if (!obj)
155 return;
154 156
155 mutex_lock(&dev->struct_mutex); 157 dev = obj->dev;
156 if (likely(atomic_dec_and_test(&obj->refcount.refcount))) 158 if (kref_put_mutex(&obj->refcount, drm_gem_object_free, &dev->struct_mutex))
157 drm_gem_object_free(&obj->refcount);
158 mutex_unlock(&dev->struct_mutex); 159 mutex_unlock(&dev->struct_mutex);
159 } 160 else
161 might_lock(&dev->struct_mutex);
160} 162}
161 163
162int drm_gem_handle_create(struct drm_file *file_priv, 164int drm_gem_handle_create(struct drm_file *file_priv,
diff --git a/include/drm/drm_plane_helper.h b/include/drm/drm_plane_helper.h
index e48157a5a59c..96e16283afb9 100644
--- a/include/drm/drm_plane_helper.h
+++ b/include/drm/drm_plane_helper.h
@@ -76,7 +76,7 @@ struct drm_plane_helper_funcs {
76static inline void drm_plane_helper_add(struct drm_plane *plane, 76static inline void drm_plane_helper_add(struct drm_plane *plane,
77 const struct drm_plane_helper_funcs *funcs) 77 const struct drm_plane_helper_funcs *funcs)
78{ 78{
79 plane->helper_private = (void *)funcs; 79 plane->helper_private = funcs;
80} 80}
81 81
82extern int drm_plane_helper_check_update(struct drm_plane *plane, 82extern int drm_plane_helper_check_update(struct drm_plane *plane,