[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 5/8] hw/display/bcm2835_fb: Abstract out calculation
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PATCH 5/8] hw/display/bcm2835_fb: Abstract out calculation of pitch, size |
Date: |
Tue, 14 Aug 2018 15:44:33 +0100 |
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 <address@hidden>
---
include/hw/display/bcm2835_fb.h | 22 ++++++++++++++++++++++
hw/display/bcm2835_fb.c | 6 +++---
hw/misc/bcm2835_property.c | 4 ++--
3 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/include/hw/display/bcm2835_fb.h b/include/hw/display/bcm2835_fb.h
index 374de546121..95bcec7fe33 100644
--- a/include/hw/display/bcm2835_fb.h
+++ b/include/hw/display/bcm2835_fb.h
@@ -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
diff --git a/hw/display/bcm2835_fb.c b/hw/display/bcm2835_fb.c
index d95686c74c8..a6c0a0cc942 100644
--- a/hw/display/bcm2835_fb.c
+++ b/hw/display/bcm2835_fb.c
@@ -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)) {
@@ -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);
diff --git a/hw/misc/bcm2835_property.c b/hw/misc/bcm2835_property.c
index df0645d1b84..c8c4979bd26 100644
--- a/hw/misc/bcm2835_property.c
+++ b/hw/misc/bcm2835_property.c
@@ -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 */
@@ -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 */
--
2.18.0
- [Qemu-devel] [PATCH 0/8] arm/raspi: Make fb handle virtual viewport, Peter Maydell, 2018/08/14
- [Qemu-devel] [PATCH 3/8] hw/display/bcm2835_fb: Drop unused size and pitch fields, Peter Maydell, 2018/08/14
- [Qemu-devel] [PATCH 4/8] hw/display/bcm2835_fb: Reset resolution, etc correctly, Peter Maydell, 2018/08/14
- [Qemu-devel] [PATCH 5/8] hw/display/bcm2835_fb: Abstract out calculation of pitch, size,
Peter Maydell <=
- [Qemu-devel] [PATCH 2/8] hw/misc/bcm2835_property: Track fb settings using BCM2835FBConfig, Peter Maydell, 2018/08/14
- [Qemu-devel] [PATCH 6/8] hw/display/bcm2835_fb: Fix handling of virtual framebuffer, Peter Maydell, 2018/08/14
- [Qemu-devel] [PATCH 1/8] hw/misc/bcm2835_fb: Move config fields to their own struct, Peter Maydell, 2018/08/14
- [Qemu-devel] [PATCH 8/8] hw/display/bcm2835_fb: Validate bcm2835_fb_mbox_push() config, Peter Maydell, 2018/08/14
- [Qemu-devel] [PATCH 7/8] hw/display/bcm2835_fb: Validate config settings, Peter Maydell, 2018/08/14