bcm2835_fb.h (2388B)
1/* 2 * Raspberry Pi emulation (c) 2012 Gregory Estrade 3 * Upstreaming code cleanup [including bcm2835_*] (c) 2013 Jan Petrous 4 * 5 * Rasperry Pi 2 emulation and refactoring Copyright (c) 2015, Microsoft 6 * Written by Andrew Baumann 7 * 8 * This work is licensed under the terms of the GNU GPL, version 2 or later. 9 * See the COPYING file in the top-level directory. 10 */ 11 12#ifndef BCM2835_FB_H 13#define BCM2835_FB_H 14 15#include "hw/sysbus.h" 16#include "ui/console.h" 17#include "qom/object.h" 18 19#define TYPE_BCM2835_FB "bcm2835-fb" 20OBJECT_DECLARE_SIMPLE_TYPE(BCM2835FBState, BCM2835_FB) 21 22/* 23 * Configuration information about the fb which the guest can program 24 * via the mailbox property interface. 25 */ 26typedef struct { 27 uint32_t xres, yres; 28 uint32_t xres_virtual, yres_virtual; 29 uint32_t xoffset, yoffset; 30 uint32_t bpp; 31 uint32_t base; 32 uint32_t pixo; 33 uint32_t alpha; 34} BCM2835FBConfig; 35 36struct BCM2835FBState { 37 /*< private >*/ 38 SysBusDevice busdev; 39 /*< public >*/ 40 41 uint32_t vcram_base, vcram_size; 42 MemoryRegion *dma_mr; 43 AddressSpace dma_as; 44 MemoryRegion iomem; 45 MemoryRegionSection fbsection; 46 QemuConsole *con; 47 qemu_irq mbox_irq; 48 49 bool lock, invalidate, pending; 50 51 BCM2835FBConfig config; 52 BCM2835FBConfig initial_config; 53}; 54 55void bcm2835_fb_reconfigure(BCM2835FBState *s, BCM2835FBConfig *newconfig); 56 57/** 58 * bcm2835_fb_get_pitch: return number of bytes per line of the framebuffer 59 * @config: configuration info for the framebuffer 60 * 61 * Return the number of bytes per line of the framebuffer, ie the number 62 * that must be added to a pixel address to get the address of the pixel 63 * directly below it on screen. 64 */ 65static inline uint32_t bcm2835_fb_get_pitch(BCM2835FBConfig *config) 66{ 67 uint32_t xres = MAX(config->xres, config->xres_virtual); 68 return xres * (config->bpp >> 3); 69} 70 71/** 72 * bcm2835_fb_get_size: return total size of framebuffer in bytes 73 * @config: configuration info for the framebuffer 74 */ 75static inline uint32_t bcm2835_fb_get_size(BCM2835FBConfig *config) 76{ 77 uint32_t yres = MAX(config->yres, config->yres_virtual); 78 return yres * bcm2835_fb_get_pitch(config); 79} 80 81/** 82 * bcm2835_fb_validate_config: check provided config 83 * 84 * Validates the configuration information provided by the guest and 85 * adjusts it if necessary. 86 */ 87void bcm2835_fb_validate_config(BCM2835FBConfig *config); 88 89#endif