[01/10] drm: Move a few macros away from drm_crtc.h
diff mbox

Message ID 20160831160913.12991-2-daniel.vetter@ffwll.ch
State New
Headers show

Commit Message

Daniel Vetter Aug. 31, 2016, 4:09 p.m. UTC
Now that there's less stuff in there I noticed that I overlooked them.
Sprinkle some docs over them while at it.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 include/drm/drm_connector.h   | 24 ++++++++++++++++++++++--
 include/drm/drm_crtc.h        | 32 --------------------------------
 include/drm/drm_encoder.h     | 22 ++++++++++++++++++++++
 include/drm/drm_framebuffer.h | 17 +++++++++++++++++
 include/drm/drm_modes.h       |  2 ++
 include/drm/drm_property.h    |  1 +
 6 files changed, 64 insertions(+), 34 deletions(-)

Comments

Sean Paul Sept. 6, 2016, 4:59 p.m. UTC | #1
On Wed, Aug 31, 2016 at 12:09 PM, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> Now that there's less stuff in there I noticed that I overlooked them.
> Sprinkle some docs over them while at it.
>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>

Reviewed-by: Sean Paul <seanpaul@chromium.org>

> ---
>  include/drm/drm_connector.h   | 24 ++++++++++++++++++++++--
>  include/drm/drm_crtc.h        | 32 --------------------------------
>  include/drm/drm_encoder.h     | 22 ++++++++++++++++++++++
>  include/drm/drm_framebuffer.h | 17 +++++++++++++++++
>  include/drm/drm_modes.h       |  2 ++
>  include/drm/drm_property.h    |  1 +
>  6 files changed, 64 insertions(+), 34 deletions(-)
>
> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
> index 66b7d6744dd2..e4e545e9516d 100644
> --- a/include/drm/drm_connector.h
> +++ b/include/drm/drm_connector.h
> @@ -181,14 +181,19 @@ int drm_display_info_set_bus_formats(struct drm_display_info *info,
>  /**
>   * struct drm_connector_state - mutable connector state
>   * @connector: backpointer to the connector
> - * @crtc: CRTC to connect connector to, NULL if disabled
>   * @best_encoder: can be used by helpers and drivers to select the encoder
>   * @state: backpointer to global drm_atomic_state
>   */
>  struct drm_connector_state {
>         struct drm_connector *connector;
>
> -       struct drm_crtc *crtc;  /* do not write directly, use drm_atomic_set_crtc_for_connector() */
> +       /**
> +        * @crtc: CRTC to connect connector to, NULL if disabled.
> +        *
> +        * Do not change this directly, use drm_atomic_set_crtc_for_connector()
> +        * instead.
> +        */
> +       struct drm_crtc *crtc;
>
>         struct drm_encoder *best_encoder;
>
> @@ -744,4 +749,19 @@ int drm_mode_connector_set_path_property(struct drm_connector *connector,
>  int drm_mode_connector_set_tile_property(struct drm_connector *connector);
>  int drm_mode_connector_update_edid_property(struct drm_connector *connector,
>                                             const struct edid *edid);
> +
> +/**
> + * drm_for_each_connector - iterate over all connectors
> + * @connector: the loop cursor
> + * @dev: the DRM device
> + *
> + * Iterate over all connectors of @dev.
> + */
> +#define drm_for_each_connector(connector, dev) \
> +       for (assert_drm_connector_list_read_locked(&(dev)->mode_config),        \
> +            connector = list_first_entry(&(dev)->mode_config.connector_list,   \
> +                                         struct drm_connector, head);          \
> +            &connector->head != (&(dev)->mode_config.connector_list);          \
> +            connector = list_next_entry(connector, head))
> +
>  #endif
> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> index 4880606e2ffd..2a642ae96127 100644
> --- a/include/drm/drm_crtc.h
> +++ b/include/drm/drm_crtc.h
> @@ -1991,22 +1991,7 @@ struct drm_mode_config {
>         list_for_each_entry((plane), &(dev)->mode_config.plane_list, head) \
>                 for_each_if ((plane_mask) & (1 << drm_plane_index(plane)))
>
> -/**
> - * drm_for_each_encoder_mask - iterate over encoders specified by bitmask
> - * @encoder: the loop cursor
> - * @dev: the DRM device
> - * @encoder_mask: bitmask of encoder indices
> - *
> - * Iterate over all encoders specified by bitmask.
> - */
> -#define drm_for_each_encoder_mask(encoder, dev, encoder_mask) \
> -       list_for_each_entry((encoder), &(dev)->mode_config.encoder_list, head) \
> -               for_each_if ((encoder_mask) & (1 << drm_encoder_index(encoder)))
> -
>  #define obj_to_crtc(x) container_of(x, struct drm_crtc, base)
> -#define obj_to_mode(x) container_of(x, struct drm_display_mode, base)
> -#define obj_to_fb(x) container_of(x, struct drm_framebuffer, base)
> -#define obj_to_blob(x) container_of(x, struct drm_property_blob, base)
>  #define obj_to_plane(x) container_of(x, struct drm_plane, base)
>
>  extern __printf(6, 7)
> @@ -2174,23 +2159,6 @@ assert_drm_connector_list_read_locked(struct drm_mode_config *mode_config)
>                 !drm_modeset_is_locked(&mode_config->connection_mutex));
>  }
>
> -#define drm_for_each_connector(connector, dev) \
> -       for (assert_drm_connector_list_read_locked(&(dev)->mode_config),        \
> -            connector = list_first_entry(&(dev)->mode_config.connector_list,   \
> -                                         struct drm_connector, head);          \
> -            &connector->head != (&(dev)->mode_config.connector_list);          \
> -            connector = list_next_entry(connector, head))
> -
> -#define drm_for_each_encoder(encoder, dev) \
> -       list_for_each_entry(encoder, &(dev)->mode_config.encoder_list, head)
> -
> -#define drm_for_each_fb(fb, dev) \
> -       for (WARN_ON(!mutex_is_locked(&(dev)->mode_config.fb_lock)),            \
> -            fb = list_first_entry(&(dev)->mode_config.fb_list, \
> -                                         struct drm_framebuffer, head);        \
> -            &fb->head != (&(dev)->mode_config.fb_list);                        \
> -            fb = list_next_entry(fb, head))
> -
>  /* drm_edid.c */
>  bool drm_probe_ddc(struct i2c_adapter *adapter);
>  struct edid *drm_get_edid(struct drm_connector *connector,
> diff --git a/include/drm/drm_encoder.h b/include/drm/drm_encoder.h
> index fce0203094f7..387e33a4d6ee 100644
> --- a/include/drm/drm_encoder.h
> +++ b/include/drm/drm_encoder.h
> @@ -224,4 +224,26 @@ static inline struct drm_encoder *drm_encoder_find(struct drm_device *dev,
>
>  void drm_encoder_cleanup(struct drm_encoder *encoder);
>
> +/**
> + * drm_for_each_encoder_mask - iterate over encoders specified by bitmask
> + * @encoder: the loop cursor
> + * @dev: the DRM device
> + * @encoder_mask: bitmask of encoder indices
> + *
> + * Iterate over all encoders specified by bitmask.
> + */
> +#define drm_for_each_encoder_mask(encoder, dev, encoder_mask) \
> +       list_for_each_entry((encoder), &(dev)->mode_config.encoder_list, head) \
> +               for_each_if ((encoder_mask) & (1 << drm_encoder_index(encoder)))
> +
> +/**
> + * drm_for_each_encoder - iterate over all encoders
> + * @encoder: the loop cursor
> + * @dev: the DRM device
> + *
> + * Iterate over all encoders of @dev.
> + */
> +#define drm_for_each_encoder(encoder, dev) \
> +       list_for_each_entry(encoder, &(dev)->mode_config.encoder_list, head)
> +
>  #endif
> diff --git a/include/drm/drm_framebuffer.h b/include/drm/drm_framebuffer.h
> index b2554c50a903..f5ae1f436a4b 100644
> --- a/include/drm/drm_framebuffer.h
> +++ b/include/drm/drm_framebuffer.h
> @@ -206,6 +206,8 @@ struct drm_framebuffer {
>         struct list_head filp_head;
>  };
>
> +#define obj_to_fb(x) container_of(x, struct drm_framebuffer, base)
> +
>  int drm_framebuffer_init(struct drm_device *dev,
>                          struct drm_framebuffer *fb,
>                          const struct drm_framebuffer_funcs *funcs);
> @@ -247,4 +249,19 @@ static inline uint32_t drm_framebuffer_read_refcount(struct drm_framebuffer *fb)
>  {
>         return atomic_read(&fb->base.refcount.refcount);
>  }
> +
> +/**
> + * drm_for_each_fb - iterate over all framebuffers
> + * @fb: the loop cursor
> + * @dev: the DRM device
> + *
> + * Iterate over all framebuffers of @dev. User must hold the fb_lock from
> + * &drm_mode_config.
> + */
> +#define drm_for_each_fb(fb, dev) \
> +       for (WARN_ON(!mutex_is_locked(&(dev)->mode_config.fb_lock)),            \
> +            fb = list_first_entry(&(dev)->mode_config.fb_list, \
> +                                         struct drm_framebuffer, head);        \
> +            &fb->head != (&(dev)->mode_config.fb_list);                        \
> +            fb = list_next_entry(fb, head))
>  #endif
> diff --git a/include/drm/drm_modes.h b/include/drm/drm_modes.h
> index 011f199d3bcf..986ed6ff635a 100644
> --- a/include/drm/drm_modes.h
> +++ b/include/drm/drm_modes.h
> @@ -403,6 +403,8 @@ struct drm_display_mode {
>         enum hdmi_picture_aspect picture_aspect_ratio;
>  };
>
> +#define obj_to_mode(x) container_of(x, struct drm_display_mode, base)
> +
>  /**
>   * drm_mode_is_stereo - check for stereo mode flags
>   * @mode: drm_display_mode to check
> diff --git a/include/drm/drm_property.h b/include/drm/drm_property.h
> index 30ab289be05d..43c4b6a2046d 100644
> --- a/include/drm/drm_property.h
> +++ b/include/drm/drm_property.h
> @@ -219,6 +219,7 @@ struct drm_prop_enum_list {
>  };
>
>  #define obj_to_property(x) container_of(x, struct drm_property, base)
> +#define obj_to_blob(x) container_of(x, struct drm_property_blob, base)
>
>  /**
>   * drm_property_type_is - check the type of a property
> --
> 2.9.3
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Carlos Santa Sept. 8, 2016, 12:05 a.m. UTC | #2
On Wed, 2016-08-31 at 18:09 +0200, Daniel Vetter wrote:
> Now that there's less stuff in there I noticed that I overlooked
> them.
> Sprinkle some docs over them while at it.
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
>  include/drm/drm_connector.h   | 24 ++++++++++++++++++++++--
>  include/drm/drm_crtc.h        | 32 --------------------------------
>  include/drm/drm_encoder.h     | 22 ++++++++++++++++++++++
>  include/drm/drm_framebuffer.h | 17 +++++++++++++++++
>  include/drm/drm_modes.h       |  2 ++
>  include/drm/drm_property.h    |  1 +
>  6 files changed, 64 insertions(+), 34 deletions(-)
> 
> diff --git a/include/drm/drm_connector.h
> b/include/drm/drm_connector.h
> index 66b7d6744dd2..e4e545e9516d 100644
> --- a/include/drm/drm_connector.h
> +++ b/include/drm/drm_connector.h
> @@ -181,14 +181,19 @@ int drm_display_info_set_bus_formats(struct
> drm_display_info *info,
>  /**
>   * struct drm_connector_state - mutable connector state
>   * @connector: backpointer to the connector
> - * @crtc: CRTC to connect connector to, NULL if disabled
>   * @best_encoder: can be used by helpers and drivers to select the
> encoder
>   * @state: backpointer to global drm_atomic_state
>   */
>  struct drm_connector_state {
>  	struct drm_connector *connector;
>  
> -	struct drm_crtc *crtc;  /* do not write directly, use
> drm_atomic_set_crtc_for_connector() */
> +	/**
> +	 * @crtc: CRTC to connect connector to, NULL if disabled.
> +	 *
> +	 * Do not change this directly, use
> drm_atomic_set_crtc_for_connector()
> +	 * instead.
> +	 */
> +	struct drm_crtc *crtc;
>  
>  	struct drm_encoder *best_encoder;
>  
> @@ -744,4 +749,19 @@ int drm_mode_connector_set_path_property(struct
> drm_connector *connector,
>  int drm_mode_connector_set_tile_property(struct drm_connector
> *connector);
>  int drm_mode_connector_update_edid_property(struct drm_connector
> *connector,
>  					    const struct edid
> *edid);
> +
> +/**
> + * drm_for_each_connector - iterate over all connectors
> + * @connector: the loop cursor
> + * @dev: the DRM device
> + *
> + * Iterate over all connectors of @dev.
> + */
> +#define drm_for_each_connector(connector, dev) \
> +	for (assert_drm_connector_list_read_locked(&(dev)-
> >mode_config),	\
> +	     connector = list_first_entry(&(dev)-
> >mode_config.connector_list,	\
> +					  struct drm_connector,
> head);		\
> +	     &connector->head != (&(dev)-
> >mode_config.connector_list);		\
> +	     connector = list_next_entry(connector, head))
> +
>  #endif
> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> index 4880606e2ffd..2a642ae96127 100644
> --- a/include/drm/drm_crtc.h
> +++ b/include/drm/drm_crtc.h
> @@ -1991,22 +1991,7 @@ struct drm_mode_config {
>  	list_for_each_entry((plane), &(dev)->mode_config.plane_list, 
> head) \
>  		for_each_if ((plane_mask) & (1 <<
> drm_plane_index(plane)))
>  
> -/**
> - * drm_for_each_encoder_mask - iterate over encoders specified by
> bitmask
> - * @encoder: the loop cursor
> - * @dev: the DRM device
> - * @encoder_mask: bitmask of encoder indices
> - *
> - * Iterate over all encoders specified by bitmask.
> - */
> -#define drm_for_each_encoder_mask(encoder, dev, encoder_mask) \
> -	list_for_each_entry((encoder), &(dev)-
> >mode_config.encoder_list, head) \
> -		for_each_if ((encoder_mask) & (1 <<
> drm_encoder_index(encoder)))
> -
>  #define obj_to_crtc(x) container_of(x, struct drm_crtc, base)
> -#define obj_to_mode(x) container_of(x, struct drm_display_mode,
> base)
> -#define obj_to_fb(x) container_of(x, struct drm_framebuffer, base)
> -#define obj_to_blob(x) container_of(x, struct drm_property_blob,
> base)
>  #define obj_to_plane(x) container_of(x, struct drm_plane, base)
>  
>  extern __printf(6, 7)
> @@ -2174,23 +2159,6 @@ assert_drm_connector_list_read_locked(struct
> drm_mode_config *mode_config)
>  		!drm_modeset_is_locked(&mode_config-
> >connection_mutex));
>  }
>  
> -#define drm_for_each_connector(connector, dev) \
> -	for (assert_drm_connector_list_read_locked(&(dev)-
> >mode_config),	\
> -	     connector = list_first_entry(&(dev)-
> >mode_config.connector_list,	\
> -					  struct drm_connector,
> head);		\
> -	     &connector->head != (&(dev)-
> >mode_config.connector_list);		\
> -	     connector = list_next_entry(connector, head))
> -
> -#define drm_for_each_encoder(encoder, dev) \
> -	list_for_each_entry(encoder, &(dev)-
> >mode_config.encoder_list, head)
> -
> -#define drm_for_each_fb(fb, dev) \
> -	for (WARN_ON(!mutex_is_locked(&(dev)->mode_config.fb_lock)),
> 		\
> -	     fb = list_first_entry(&(dev)->mode_config.fb_list,	
> \
> -					  struct drm_framebuffer,
> head);	\
> -	     &fb->head != (&(dev)->mode_config.fb_list);		
> 	\
> -	     fb = list_next_entry(fb, head))
> -
>  /* drm_edid.c */
>  bool drm_probe_ddc(struct i2c_adapter *adapter);
>  struct edid *drm_get_edid(struct drm_connector *connector,
> diff --git a/include/drm/drm_encoder.h b/include/drm/drm_encoder.h
> index fce0203094f7..387e33a4d6ee 100644
> --- a/include/drm/drm_encoder.h
> +++ b/include/drm/drm_encoder.h
> @@ -224,4 +224,26 @@ static inline struct drm_encoder
> *drm_encoder_find(struct drm_device *dev,
>  
>  void drm_encoder_cleanup(struct drm_encoder *encoder);
>  
> +/**
> + * drm_for_each_encoder_mask - iterate over encoders specified by
> bitmask
> + * @encoder: the loop cursor
> + * @dev: the DRM device
> + * @encoder_mask: bitmask of encoder indices
> + *
> + * Iterate over all encoders specified by bitmask.
> + */
> +#define drm_for_each_encoder_mask(encoder, dev, encoder_mask) \
> +	list_for_each_entry((encoder), &(dev)-
> >mode_config.encoder_list, head) \
> +		for_each_if ((encoder_mask) & (1 <<
> drm_encoder_index(encoder)))

I know this is code movement for now but getting rid of the blank space
above in the "for_each_if ((" makes 1 Error and 1 Warning go away from
the checkpatch script

> +
> +/**
> + * drm_for_each_encoder - iterate over all encoders
> + * @encoder: the loop cursor
> + * @dev: the DRM device
> + *
> + * Iterate over all encoders of @dev.
> + */
> +#define drm_for_each_encoder(encoder, dev) \
> +	list_for_each_entry(encoder, &(dev)-
> >mode_config.encoder_list, head)
> +
>  #endif
> diff --git a/include/drm/drm_framebuffer.h
> b/include/drm/drm_framebuffer.h
> index b2554c50a903..f5ae1f436a4b 100644
> --- a/include/drm/drm_framebuffer.h
> +++ b/include/drm/drm_framebuffer.h
> @@ -206,6 +206,8 @@ struct drm_framebuffer {
>  	struct list_head filp_head;
>  };
>  
> +#define obj_to_fb(x) container_of(x, struct drm_framebuffer, base)
> +
>  int drm_framebuffer_init(struct drm_device *dev,
>  			 struct drm_framebuffer *fb,
>  			 const struct drm_framebuffer_funcs *funcs);
> @@ -247,4 +249,19 @@ static inline uint32_t
> drm_framebuffer_read_refcount(struct drm_framebuffer *fb)
>  {
>  	return atomic_read(&fb->base.refcount.refcount);
>  }
> +
> +/**
> + * drm_for_each_fb - iterate over all framebuffers
> + * @fb: the loop cursor
> + * @dev: the DRM device
> + *
> + * Iterate over all framebuffers of @dev. User must hold the fb_lock
> from
> + * &drm_mode_config.
> + */
> +#define drm_for_each_fb(fb, dev) \
> +	for (WARN_ON(!mutex_is_locked(&(dev)->mode_config.fb_lock)),
> 		\
> +	     fb = list_first_entry(&(dev)->mode_config.fb_list,	
> \
> +					  struct drm_framebuffer,
> head);	\
> +	     &fb->head != (&(dev)->mode_config.fb_list);		
> 	\
> +	     fb = list_next_entry(fb, head))
>  #endif
> diff --git a/include/drm/drm_modes.h b/include/drm/drm_modes.h
> index 011f199d3bcf..986ed6ff635a 100644
> --- a/include/drm/drm_modes.h
> +++ b/include/drm/drm_modes.h
> @@ -403,6 +403,8 @@ struct drm_display_mode {
>  	enum hdmi_picture_aspect picture_aspect_ratio;
>  };
>  
> +#define obj_to_mode(x) container_of(x, struct drm_display_mode,
> base)
> +
>  /**
>   * drm_mode_is_stereo - check for stereo mode flags
>   * @mode: drm_display_mode to check
> diff --git a/include/drm/drm_property.h b/include/drm/drm_property.h
> index 30ab289be05d..43c4b6a2046d 100644
> --- a/include/drm/drm_property.h
> +++ b/include/drm/drm_property.h
> @@ -219,6 +219,7 @@ struct drm_prop_enum_list {
>  };
>  
>  #define obj_to_property(x) container_of(x, struct drm_property,
> base)
> +#define obj_to_blob(x) container_of(x, struct drm_property_blob,
> base)
>  
>  /**
>   * drm_property_type_is - check the type of a property

thanks,
Carlos Santa

Patch
diff mbox

diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index 66b7d6744dd2..e4e545e9516d 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -181,14 +181,19 @@  int drm_display_info_set_bus_formats(struct drm_display_info *info,
 /**
  * struct drm_connector_state - mutable connector state
  * @connector: backpointer to the connector
- * @crtc: CRTC to connect connector to, NULL if disabled
  * @best_encoder: can be used by helpers and drivers to select the encoder
  * @state: backpointer to global drm_atomic_state
  */
 struct drm_connector_state {
 	struct drm_connector *connector;
 
-	struct drm_crtc *crtc;  /* do not write directly, use drm_atomic_set_crtc_for_connector() */
+	/**
+	 * @crtc: CRTC to connect connector to, NULL if disabled.
+	 *
+	 * Do not change this directly, use drm_atomic_set_crtc_for_connector()
+	 * instead.
+	 */
+	struct drm_crtc *crtc;
 
 	struct drm_encoder *best_encoder;
 
@@ -744,4 +749,19 @@  int drm_mode_connector_set_path_property(struct drm_connector *connector,
 int drm_mode_connector_set_tile_property(struct drm_connector *connector);
 int drm_mode_connector_update_edid_property(struct drm_connector *connector,
 					    const struct edid *edid);
+
+/**
+ * drm_for_each_connector - iterate over all connectors
+ * @connector: the loop cursor
+ * @dev: the DRM device
+ *
+ * Iterate over all connectors of @dev.
+ */
+#define drm_for_each_connector(connector, dev) \
+	for (assert_drm_connector_list_read_locked(&(dev)->mode_config),	\
+	     connector = list_first_entry(&(dev)->mode_config.connector_list,	\
+					  struct drm_connector, head);		\
+	     &connector->head != (&(dev)->mode_config.connector_list);		\
+	     connector = list_next_entry(connector, head))
+
 #endif
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index 4880606e2ffd..2a642ae96127 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -1991,22 +1991,7 @@  struct drm_mode_config {
 	list_for_each_entry((plane), &(dev)->mode_config.plane_list, head) \
 		for_each_if ((plane_mask) & (1 << drm_plane_index(plane)))
 
-/**
- * drm_for_each_encoder_mask - iterate over encoders specified by bitmask
- * @encoder: the loop cursor
- * @dev: the DRM device
- * @encoder_mask: bitmask of encoder indices
- *
- * Iterate over all encoders specified by bitmask.
- */
-#define drm_for_each_encoder_mask(encoder, dev, encoder_mask) \
-	list_for_each_entry((encoder), &(dev)->mode_config.encoder_list, head) \
-		for_each_if ((encoder_mask) & (1 << drm_encoder_index(encoder)))
-
 #define obj_to_crtc(x) container_of(x, struct drm_crtc, base)
-#define obj_to_mode(x) container_of(x, struct drm_display_mode, base)
-#define obj_to_fb(x) container_of(x, struct drm_framebuffer, base)
-#define obj_to_blob(x) container_of(x, struct drm_property_blob, base)
 #define obj_to_plane(x) container_of(x, struct drm_plane, base)
 
 extern __printf(6, 7)
@@ -2174,23 +2159,6 @@  assert_drm_connector_list_read_locked(struct drm_mode_config *mode_config)
 		!drm_modeset_is_locked(&mode_config->connection_mutex));
 }
 
-#define drm_for_each_connector(connector, dev) \
-	for (assert_drm_connector_list_read_locked(&(dev)->mode_config),	\
-	     connector = list_first_entry(&(dev)->mode_config.connector_list,	\
-					  struct drm_connector, head);		\
-	     &connector->head != (&(dev)->mode_config.connector_list);		\
-	     connector = list_next_entry(connector, head))
-
-#define drm_for_each_encoder(encoder, dev) \
-	list_for_each_entry(encoder, &(dev)->mode_config.encoder_list, head)
-
-#define drm_for_each_fb(fb, dev) \
-	for (WARN_ON(!mutex_is_locked(&(dev)->mode_config.fb_lock)),		\
-	     fb = list_first_entry(&(dev)->mode_config.fb_list,	\
-					  struct drm_framebuffer, head);	\
-	     &fb->head != (&(dev)->mode_config.fb_list);			\
-	     fb = list_next_entry(fb, head))
-
 /* drm_edid.c */
 bool drm_probe_ddc(struct i2c_adapter *adapter);
 struct edid *drm_get_edid(struct drm_connector *connector,
diff --git a/include/drm/drm_encoder.h b/include/drm/drm_encoder.h
index fce0203094f7..387e33a4d6ee 100644
--- a/include/drm/drm_encoder.h
+++ b/include/drm/drm_encoder.h
@@ -224,4 +224,26 @@  static inline struct drm_encoder *drm_encoder_find(struct drm_device *dev,
 
 void drm_encoder_cleanup(struct drm_encoder *encoder);
 
+/**
+ * drm_for_each_encoder_mask - iterate over encoders specified by bitmask
+ * @encoder: the loop cursor
+ * @dev: the DRM device
+ * @encoder_mask: bitmask of encoder indices
+ *
+ * Iterate over all encoders specified by bitmask.
+ */
+#define drm_for_each_encoder_mask(encoder, dev, encoder_mask) \
+	list_for_each_entry((encoder), &(dev)->mode_config.encoder_list, head) \
+		for_each_if ((encoder_mask) & (1 << drm_encoder_index(encoder)))
+
+/**
+ * drm_for_each_encoder - iterate over all encoders
+ * @encoder: the loop cursor
+ * @dev: the DRM device
+ *
+ * Iterate over all encoders of @dev.
+ */
+#define drm_for_each_encoder(encoder, dev) \
+	list_for_each_entry(encoder, &(dev)->mode_config.encoder_list, head)
+
 #endif
diff --git a/include/drm/drm_framebuffer.h b/include/drm/drm_framebuffer.h
index b2554c50a903..f5ae1f436a4b 100644
--- a/include/drm/drm_framebuffer.h
+++ b/include/drm/drm_framebuffer.h
@@ -206,6 +206,8 @@  struct drm_framebuffer {
 	struct list_head filp_head;
 };
 
+#define obj_to_fb(x) container_of(x, struct drm_framebuffer, base)
+
 int drm_framebuffer_init(struct drm_device *dev,
 			 struct drm_framebuffer *fb,
 			 const struct drm_framebuffer_funcs *funcs);
@@ -247,4 +249,19 @@  static inline uint32_t drm_framebuffer_read_refcount(struct drm_framebuffer *fb)
 {
 	return atomic_read(&fb->base.refcount.refcount);
 }
+
+/**
+ * drm_for_each_fb - iterate over all framebuffers
+ * @fb: the loop cursor
+ * @dev: the DRM device
+ *
+ * Iterate over all framebuffers of @dev. User must hold the fb_lock from
+ * &drm_mode_config.
+ */
+#define drm_for_each_fb(fb, dev) \
+	for (WARN_ON(!mutex_is_locked(&(dev)->mode_config.fb_lock)),		\
+	     fb = list_first_entry(&(dev)->mode_config.fb_list,	\
+					  struct drm_framebuffer, head);	\
+	     &fb->head != (&(dev)->mode_config.fb_list);			\
+	     fb = list_next_entry(fb, head))
 #endif
diff --git a/include/drm/drm_modes.h b/include/drm/drm_modes.h
index 011f199d3bcf..986ed6ff635a 100644
--- a/include/drm/drm_modes.h
+++ b/include/drm/drm_modes.h
@@ -403,6 +403,8 @@  struct drm_display_mode {
 	enum hdmi_picture_aspect picture_aspect_ratio;
 };
 
+#define obj_to_mode(x) container_of(x, struct drm_display_mode, base)
+
 /**
  * drm_mode_is_stereo - check for stereo mode flags
  * @mode: drm_display_mode to check
diff --git a/include/drm/drm_property.h b/include/drm/drm_property.h
index 30ab289be05d..43c4b6a2046d 100644
--- a/include/drm/drm_property.h
+++ b/include/drm/drm_property.h
@@ -219,6 +219,7 @@  struct drm_prop_enum_list {
 };
 
 #define obj_to_property(x) container_of(x, struct drm_property, base)
+#define obj_to_blob(x) container_of(x, struct drm_property_blob, base)
 
 /**
  * drm_property_type_is - check the type of a property