qemu/include/hw/display/bcm2835_fb.h
Peter Maydell 9a1f03f4ee hw/display/bcm2835_fb: Abstract out calculation of pitch, size
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
2018-08-24 13:17:49 +01:00

77 lines
1.9 KiB
C

/*
* Raspberry Pi emulation (c) 2012 Gregory Estrade
* Upstreaming code cleanup [including bcm2835_*] (c) 2013 Jan Petrous
*
* Rasperry Pi 2 emulation and refactoring Copyright (c) 2015, Microsoft
* Written by Andrew Baumann
*
* This code is licensed under the GNU GPLv2 and later.
*/
#ifndef BCM2835_FB_H
#define BCM2835_FB_H
#include "hw/sysbus.h"
#include "ui/console.h"
#define TYPE_BCM2835_FB "bcm2835-fb"
#define BCM2835_FB(obj) OBJECT_CHECK(BCM2835FBState, (obj), TYPE_BCM2835_FB)
/*
* Configuration information about the fb which the guest can program
* via the mailbox property interface.
*/
typedef struct {
uint32_t xres, yres;
uint32_t xres_virtual, yres_virtual;
uint32_t xoffset, yoffset;
uint32_t bpp;
uint32_t base;
uint32_t pixo;
uint32_t alpha;
} BCM2835FBConfig;
typedef struct {
/*< private >*/
SysBusDevice busdev;
/*< public >*/
uint32_t vcram_base, vcram_size;
MemoryRegion *dma_mr;
AddressSpace dma_as;
MemoryRegion iomem;
MemoryRegionSection fbsection;
QemuConsole *con;
qemu_irq mbox_irq;
bool lock, invalidate, pending;
BCM2835FBConfig config;
BCM2835FBConfig initial_config;
} BCM2835FBState;
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