On Mon, Dec 21, 2015 at 03:10:55PM +0200, Jani Nikula wrote:
> Have get_blocksize() support the special case of MIPI sequence block v3+
> which has a separate field for size. Provide and use abstractions for
> getting the blocksize given a pointer to the block "envelope",
> i.e. pointer to the block id, and given a pointer to the block payload
> data.
> 
> Signed-off-by: Jani Nikula <jani.nik...@intel.com>

Reviewed-by: Daniel Vetter <daniel.vet...@ffwll.ch>

> ---
>  drivers/gpu/drm/i915/intel_bios.c | 36 ++++++++++++++++++------------------
>  1 file changed, 18 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_bios.c 
> b/drivers/gpu/drm/i915/intel_bios.c
> index 91540ab15e0b..7393596df37d 100644
> --- a/drivers/gpu/drm/i915/intel_bios.c
> +++ b/drivers/gpu/drm/i915/intel_bios.c
> @@ -58,6 +58,22 @@
>  
>  static int panel_type;
>  
> +/* Get BDB block size given a pointer to Block ID. */
> +static u32 _get_blocksize(const u8 *block_base)
> +{
> +     /* The MIPI Sequence Block v3+ has a separate size field. */
> +     if (*block_base == BDB_MIPI_SEQUENCE && *(block_base + 3) >= 3)
> +             return *((const u32 *)(block_base + 4));
> +     else
> +             return *((const u16 *)(block_base + 1));
> +}
> +
> +/* Get BDB block size give a pointer to data after Block ID and Block Size. 
> */
> +static u32 get_blocksize(const void *block_data)
> +{
> +     return _get_blocksize(block_data - 3);
> +}
> +
>  static const void *
>  find_section(const void *_bdb, int section_id)
>  {
> @@ -74,14 +90,8 @@ find_section(const void *_bdb, int section_id)
>       /* walk the sections looking for section_id */
>       while (index + 3 < total) {
>               current_id = *(base + index);
> -             index++;
> -
> -             current_size = *((const u16 *)(base + index));
> -             index += 2;
> -
> -             /* The MIPI Sequence Block v3+ has a separate size field. */
> -             if (current_id == BDB_MIPI_SEQUENCE && *(base + index) >= 3)
> -                     current_size = *((const u32 *)(base + index + 1));
> +             current_size = _get_blocksize(base + index);
> +             index += 3;
>  
>               if (index + current_size > total)
>                       return NULL;
> @@ -95,16 +105,6 @@ find_section(const void *_bdb, int section_id)
>       return NULL;
>  }
>  
> -static u16
> -get_blocksize(const void *p)
> -{
> -     u16 *block_ptr, block_size;
> -
> -     block_ptr = (u16 *)((char *)p - 2);
> -     block_size = *block_ptr;
> -     return block_size;
> -}
> -
>  static void
>  fill_detail_timing_data(struct drm_display_mode *panel_fixed_mode,
>                       const struct lvds_dvo_timing *dvo_timing)
> -- 
> 2.1.4
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to