1
2
3
4
5
6
7
8
9
10
11#ifndef BCM2835_FB_H
12#define BCM2835_FB_H
13
14#include "hw/sysbus.h"
15#include "ui/console.h"
16
17#define TYPE_BCM2835_FB "bcm2835-fb"
18#define BCM2835_FB(obj) OBJECT_CHECK(BCM2835FBState, (obj), TYPE_BCM2835_FB)
19
20
21
22
23
24typedef struct {
25 uint32_t xres, yres;
26 uint32_t xres_virtual, yres_virtual;
27 uint32_t xoffset, yoffset;
28 uint32_t bpp;
29 uint32_t base;
30 uint32_t pixo;
31 uint32_t alpha;
32} BCM2835FBConfig;
33
34typedef struct {
35
36 SysBusDevice busdev;
37
38
39 uint32_t vcram_base, vcram_size;
40 MemoryRegion *dma_mr;
41 AddressSpace dma_as;
42 MemoryRegion iomem;
43 MemoryRegionSection fbsection;
44 QemuConsole *con;
45 qemu_irq mbox_irq;
46
47 bool lock, invalidate, pending;
48
49 BCM2835FBConfig config;
50 BCM2835FBConfig initial_config;
51} BCM2835FBState;
52
53void bcm2835_fb_reconfigure(BCM2835FBState *s, BCM2835FBConfig *newconfig);
54
55
56
57
58
59
60
61
62
63static inline uint32_t bcm2835_fb_get_pitch(BCM2835FBConfig *config)
64{
65 uint32_t xres = MAX(config->xres, config->xres_virtual);
66 return xres * (config->bpp >> 3);
67}
68
69
70
71
72
73static inline uint32_t bcm2835_fb_get_size(BCM2835FBConfig *config)
74{
75 uint32_t yres = MAX(config->yres, config->yres_virtual);
76 return yres * bcm2835_fb_get_pitch(config);
77}
78
79
80
81
82
83
84
85void bcm2835_fb_validate_config(BCM2835FBConfig *config);
86
87#endif
88