drm: Make helper vtable pointers type-safe
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 4 Dec 2015 08:45:45 +0000 (09:45 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 8 Dec 2015 15:07:52 +0000 (16:07 +0100)
Originally the idea behind void* was to allow different sets of
helpers. But now we have that (with probe, plane, crtc and atomic
helpers) and we still just use the same set of vtables. That's the
only way to make the individual helpers modular and allow drivers to
pick&choose and transition between them. So this flexibility isn't
really needed. Also we have lots of non-vtable data meanwhile in core
structures too, this is not the first one at all.

Given that the void * is only trouble since gcc can't warn you if you
mix them up. Let's fix that and make them typesafe.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1449218769-16577-5-git-send-email-daniel.vetter@ffwll.ch
Reviewed-by: Thierry Reding <treding@nvidia.com>
include/drm/drm_crtc.h

index 4765df3..e8f8e4e 100644 (file)
@@ -254,6 +254,11 @@ struct drm_plane;
 struct drm_bridge;
 struct drm_atomic_state;
 
 struct drm_bridge;
 struct drm_atomic_state;
 
+struct drm_crtc_helper_funcs;
+struct drm_encoder_helper_funcs;
+struct drm_connector_helper_funcs;
+struct drm_plane_helper_funcs;
+
 /**
  * struct drm_crtc_state - mutable CRTC state
  * @crtc: backpointer to the CRTC
 /**
  * struct drm_crtc_state - mutable CRTC state
  * @crtc: backpointer to the CRTC
@@ -467,7 +472,7 @@ struct drm_crtc {
        uint16_t *gamma_store;
 
        /* if you are using the helper */
        uint16_t *gamma_store;
 
        /* if you are using the helper */
-       const void *helper_private;
+       const struct drm_crtc_helper_funcs *helper_private;
 
        struct drm_object_properties properties;
 
 
        struct drm_object_properties properties;
 
@@ -597,7 +602,7 @@ struct drm_encoder {
        struct drm_crtc *crtc;
        struct drm_bridge *bridge;
        const struct drm_encoder_funcs *funcs;
        struct drm_crtc *crtc;
        struct drm_bridge *bridge;
        const struct drm_encoder_funcs *funcs;
-       const void *helper_private;
+       const struct drm_encoder_helper_funcs *helper_private;
 };
 
 /* should we poll this connector for connects and disconnects */
 };
 
 /* should we poll this connector for connects and disconnects */
@@ -702,7 +707,7 @@ struct drm_connector {
        /* requested DPMS state */
        int dpms;
 
        /* requested DPMS state */
        int dpms;
 
-       const void *helper_private;
+       const struct drm_connector_helper_funcs *helper_private;
 
        /* forced on connector */
        struct drm_cmdline_mode cmdline_mode;
 
        /* forced on connector */
        struct drm_cmdline_mode cmdline_mode;
@@ -870,7 +875,7 @@ struct drm_plane {
 
        enum drm_plane_type type;
 
 
        enum drm_plane_type type;
 
-       const void *helper_private;
+       const struct drm_plane_helper_funcs *helper_private;
 
        struct drm_plane_state *state;
 };
 
        struct drm_plane_state *state;
 };