Skip to content

Commit

Permalink
hw/display/bcm2835_fb: Abstract out calculation of pitch, size
Browse files Browse the repository at this point in the history
Abstract out the calculation of the pitch and size of the
framebuffer into functions that operate on the BCM2835FBConfig
struct -- these are about to get a little more complicated
when we add support for virtual and physical sizes differing.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20180814144436.679-6-peter.maydell@linaro.org
  • Loading branch information
pm215 committed Aug 24, 2018
1 parent 9e2938a commit 9a1f03f
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 5 deletions.
6 changes: 3 additions & 3 deletions hw/display/bcm2835_fb.c
Expand Up @@ -139,7 +139,7 @@ static void fb_update_display(void *opaque)
return;
}

src_width = s->config.xres * (s->config.bpp >> 3);
src_width = bcm2835_fb_get_pitch(&s->config);
dest_width = s->config.xres;

switch (surface_bits_per_pixel(surface)) {
Expand Down Expand Up @@ -204,8 +204,8 @@ static void bcm2835_fb_mbox_push(BCM2835FBState *s, uint32_t value)

/* TODO - Manage properly virtual resolution */

pitch = s->config.xres * (s->config.bpp >> 3);
size = s->config.yres * pitch;
pitch = bcm2835_fb_get_pitch(&s->config);
size = bcm2835_fb_get_size(&s->config);

stl_le_phys(&s->dma_as, value + 16, pitch);
stl_le_phys(&s->dma_as, value + 32, s->config.base);
Expand Down
4 changes: 2 additions & 2 deletions hw/misc/bcm2835_property.c
Expand Up @@ -146,7 +146,7 @@ static void bcm2835_property_mbox_push(BCM2835PropertyState *s, uint32_t value)
case 0x00040001: /* Allocate buffer */
stl_le_phys(&s->dma_as, value + 12, fbconfig.base);
stl_le_phys(&s->dma_as, value + 16,
fbconfig.xres * fbconfig.yres * fbconfig.bpp / 8);
bcm2835_fb_get_size(&fbconfig));
resplen = 8;
break;
case 0x00048001: /* Release buffer */
Expand Down Expand Up @@ -210,7 +210,7 @@ static void bcm2835_property_mbox_push(BCM2835PropertyState *s, uint32_t value)
break;
case 0x00040008: /* Get pitch */
stl_le_phys(&s->dma_as, value + 12,
fbconfig.xres * fbconfig.bpp / 8);
bcm2835_fb_get_pitch(&fbconfig));
resplen = 4;
break;
case 0x00040009: /* Get virtual offset */
Expand Down
22 changes: 22 additions & 0 deletions include/hw/display/bcm2835_fb.h
Expand Up @@ -52,4 +52,26 @@ typedef struct {

void bcm2835_fb_reconfigure(BCM2835FBState *s, BCM2835FBConfig *newconfig);

/**
* bcm2835_fb_get_pitch: return number of bytes per line of the framebuffer
* @config: configuration info for the framebuffer
*
* Return the number of bytes per line of the framebuffer, ie the number
* that must be added to a pixel address to get the address of the pixel
* directly below it on screen.
*/
static inline uint32_t bcm2835_fb_get_pitch(BCM2835FBConfig *config)
{
return config->xres * (config->bpp >> 3);
}

/**
* bcm2835_fb_get_size: return total size of framebuffer in bytes
* @config: configuration info for the framebuffer
*/
static inline uint32_t bcm2835_fb_get_size(BCM2835FBConfig *config)
{
return config->yres * bcm2835_fb_get_pitch(config);
}

#endif

0 comments on commit 9a1f03f

Please sign in to comment.