qemu/include/hw/display/bcm2835_fb.h
<<
>>
Prefs
   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
  90