]>
Commit | Line | Data |
---|---|---|
5e9c2a8d GE |
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 | * | |
6111a0c0 PMD |
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. | |
5e9c2a8d GE |
10 | */ |
11 | ||
12 | #ifndef BCM2835_FB_H | |
13 | #define BCM2835_FB_H | |
14 | ||
15 | #include "hw/sysbus.h" | |
5e9c2a8d GE |
16 | #include "ui/console.h" |
17 | ||
18 | #define TYPE_BCM2835_FB "bcm2835-fb" | |
19 | #define BCM2835_FB(obj) OBJECT_CHECK(BCM2835FBState, (obj), TYPE_BCM2835_FB) | |
20 | ||
a02755ec PM |
21 | /* |
22 | * Configuration information about the fb which the guest can program | |
23 | * via the mailbox property interface. | |
24 | */ | |
25 | typedef struct { | |
26 | uint32_t xres, yres; | |
27 | uint32_t xres_virtual, yres_virtual; | |
28 | uint32_t xoffset, yoffset; | |
29 | uint32_t bpp; | |
30 | uint32_t base; | |
31 | uint32_t pixo; | |
32 | uint32_t alpha; | |
33 | } BCM2835FBConfig; | |
34 | ||
5e9c2a8d GE |
35 | typedef struct { |
36 | /*< private >*/ | |
37 | SysBusDevice busdev; | |
38 | /*< public >*/ | |
39 | ||
40 | uint32_t vcram_base, vcram_size; | |
41 | MemoryRegion *dma_mr; | |
42 | AddressSpace dma_as; | |
43 | MemoryRegion iomem; | |
44 | MemoryRegionSection fbsection; | |
45 | QemuConsole *con; | |
46 | qemu_irq mbox_irq; | |
47 | ||
48 | bool lock, invalidate, pending; | |
a02755ec PM |
49 | |
50 | BCM2835FBConfig config; | |
9e2938a0 | 51 | BCM2835FBConfig initial_config; |
5e9c2a8d GE |
52 | } BCM2835FBState; |
53 | ||
193100b5 | 54 | void bcm2835_fb_reconfigure(BCM2835FBState *s, BCM2835FBConfig *newconfig); |
5e9c2a8d | 55 | |
9a1f03f4 PM |
56 | /** |
57 | * bcm2835_fb_get_pitch: return number of bytes per line of the framebuffer | |
58 | * @config: configuration info for the framebuffer | |
59 | * | |
60 | * Return the number of bytes per line of the framebuffer, ie the number | |
61 | * that must be added to a pixel address to get the address of the pixel | |
62 | * directly below it on screen. | |
63 | */ | |
64 | static inline uint32_t bcm2835_fb_get_pitch(BCM2835FBConfig *config) | |
65 | { | |
01f18af9 PM |
66 | uint32_t xres = MAX(config->xres, config->xres_virtual); |
67 | return xres * (config->bpp >> 3); | |
9a1f03f4 PM |
68 | } |
69 | ||
70 | /** | |
71 | * bcm2835_fb_get_size: return total size of framebuffer in bytes | |
72 | * @config: configuration info for the framebuffer | |
73 | */ | |
74 | static inline uint32_t bcm2835_fb_get_size(BCM2835FBConfig *config) | |
75 | { | |
01f18af9 PM |
76 | uint32_t yres = MAX(config->yres, config->yres_virtual); |
77 | return yres * bcm2835_fb_get_pitch(config); | |
9a1f03f4 PM |
78 | } |
79 | ||
f8add62c PM |
80 | /** |
81 | * bcm2835_fb_validate_config: check provided config | |
82 | * | |
83 | * Validates the configuration information provided by the guest and | |
84 | * adjusts it if necessary. | |
85 | */ | |
86 | void bcm2835_fb_validate_config(BCM2835FBConfig *config); | |
87 | ||
5e9c2a8d | 88 | #endif |