From d9f94efeb5e27ba3bca53633acb92b9e40b5a164 Mon Sep 17 00:00:00 2001 From: Andrew Baumann Date: Wed, 25 Nov 2015 13:10:39 -0800 Subject: [PATCH] bcm2835_fb: (finish) refactor to header file + init/realize methods --- hw/arm/bcm2835_peripherals.c | 21 ++++++++++----------- hw/display/bcm2835_fb.c | 17 +++++------------ include/hw/arm/bcm2835_peripherals.h | 5 ++++- include/hw/display/bcm2835_fb.h | 19 +++++++++++++++++++ 4 files changed, 38 insertions(+), 24 deletions(-) diff --git a/hw/arm/bcm2835_peripherals.c b/hw/arm/bcm2835_peripherals.c index 4f7c51a880..96c5dd9b29 100644 --- a/hw/arm/bcm2835_peripherals.c +++ b/hw/arm/bcm2835_peripherals.c @@ -11,7 +11,6 @@ #include "hw/arm/bcm2835_peripherals.h" #include "hw/arm/bcm2835_mbox.h" #include "hw/arm/raspi_platform.h" -#include "exec/address-spaces.h" static void bcm2835_peripherals_init(Object *obj) { @@ -82,13 +81,13 @@ static void bcm2835_peripherals_init(Object *obj) qdev_set_parent_bus(DEVICE(dev), sysbus_get_default()); /* Framebuffer */ - s->fb = dev = SYS_BUS_DEVICE(object_new("bcm2835_fb")); - object_property_add_child(obj, "fb", OBJECT(dev), NULL); - object_property_add_alias(obj, "vcram-size", OBJECT(dev), "vcram-size", + object_initialize(&s->fb, sizeof(s->fb), TYPE_BCM2835_FB); + object_property_add_child(obj, "fb", OBJECT(&s->fb), NULL); + object_property_add_alias(obj, "vcram-size", OBJECT(&s->fb), "vcram-size", &error_abort); - qdev_set_parent_bus(DEVICE(dev), sysbus_get_default()); + qdev_set_parent_bus(DEVICE(&s->fb), sysbus_get_default()); - object_property_add_const_link(OBJECT(dev), "dma_mr", + object_property_add_const_link(OBJECT(&s->fb), "dma_mr", OBJECT(&s->gpu_bus_mr), &error_abort); /* Property channel */ @@ -97,7 +96,7 @@ static void bcm2835_peripherals_init(Object *obj) qdev_set_parent_bus(DEVICE(dev), sysbus_get_default()); object_property_add_const_link(OBJECT(dev), "bcm2835_fb", - OBJECT(s->fb), &error_abort); + OBJECT(&s->fb), &error_abort); object_property_add_const_link(OBJECT(dev), "dma_mr", OBJECT(&s->gpu_bus_mr), &error_abort); @@ -273,18 +272,18 @@ static void bcm2835_peripherals_realize(DeviceState *dev, Error **errp) return; } - object_property_set_int(OBJECT(s->fb), ram_size - vcram_size, + object_property_set_int(OBJECT(&s->fb), ram_size - vcram_size, "vcram-base", &err); - object_property_set_bool(OBJECT(s->fb), true, "realized", &err); + object_property_set_bool(OBJECT(&s->fb), true, "realized", &err); if (err) { error_propagate(errp, err); return; } memory_region_add_subregion(&s->mbox_mr, MBOX_CHAN_FB<<4, - sysbus_mmio_get_region(s->fb, 0)); - sysbus_connect_irq(s->fb, 0, mbox_irq[MBOX_CHAN_FB]); + sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->fb), 0)); + sysbus_connect_irq(SYS_BUS_DEVICE(&s->fb), 0, mbox_irq[MBOX_CHAN_FB]); /* Property channel */ object_property_set_bool(OBJECT(s->property), true, "realized", &err); diff --git a/hw/display/bcm2835_fb.c b/hw/display/bcm2835_fb.c index 792b41ab14..a75b418f9d 100644 --- a/hw/display/bcm2835_fb.c +++ b/hw/display/bcm2835_fb.c @@ -25,14 +25,10 @@ * */ -#include "hw/sysbus.h" -#include "exec/address-spaces.h" -#include "exec/cpu-common.h" +#include "hw/display/bcm2835_fb.h" #include "hw/display/framebuffer.h" -#include "ui/console.h" #include "ui/pixel_ops.h" #include "hw/arm/bcm2835_mbox.h" -#include "hw/display/bcm2835_fb.h" #define DEFAULT_VCRAM_SIZE 0x4000000 #define BCM2835_FB_OFFSET 0x00100000 @@ -347,6 +343,8 @@ static void bcm2835_fb_init(Object *obj) Bcm2835FbState *s = BCM2835_FB(obj); memory_region_init_io(&s->iomem, obj, &bcm2835_fb_ops, s, TYPE_BCM2835_FB, 0x10); + sysbus_init_mmio(SYS_BUS_DEVICE(s), &s->iomem); + sysbus_init_irq(SYS_BUS_DEVICE(s), &s->mbox_irq); } static void bcm2835_fb_realize(DeviceState *dev, Error **errp) @@ -382,19 +380,14 @@ static void bcm2835_fb_realize(DeviceState *dev, Error **errp) s->size = s->yres * s->pitch; s->invalidate = true; - s->lock = true; - - sysbus_init_irq(SYS_BUS_DEVICE(s), &s->mbox_irq); + s->lock = false; s->con = graphic_console_init(dev, 0, &vgafb_ops, s); qemu_console_resize(s->con, s->xres, s->yres); - s->lock = false; - - sysbus_init_mmio(SYS_BUS_DEVICE(s), &s->iomem); } static Property bcm2835_fb_props[] = { - DEFINE_PROP_UINT32("vcram-base", Bcm2835FbState, vcram_base, 0), /* required */ + DEFINE_PROP_UINT32("vcram-base", Bcm2835FbState, vcram_base, 0),/*required*/ DEFINE_PROP_UINT32("vcram-size", Bcm2835FbState, vcram_size, DEFAULT_VCRAM_SIZE), DEFINE_PROP_UINT32("xres", Bcm2835FbState, xres, 640), diff --git a/include/hw/arm/bcm2835_peripherals.h b/include/hw/arm/bcm2835_peripherals.h index db253ceb9b..052eeb106d 100644 --- a/include/hw/arm/bcm2835_peripherals.h +++ b/include/hw/arm/bcm2835_peripherals.h @@ -12,7 +12,9 @@ #define BCM2835_PERIPHERALS_H #include "qemu-common.h" +#include "exec/address-spaces.h" #include "hw/sysbus.h" +#include "hw/display/bcm2835_fb.h" #define TYPE_BCM2835_PERIPHERALS "bcm2835_peripherals" #define BCM2835_PERIPHERALS(obj) \ @@ -27,8 +29,9 @@ typedef struct BCM2835PeripheralState { MemoryRegion ram_alias[4]; qemu_irq irq, fiq; + Bcm2835FbState fb; SysBusDevice *ic, *uart0, *uart1, *systimer, *armtimer, *usb, *mphi, *sbm, - *power, *fb, *property, *vchiq, *emmc, *dma; + *power, *property, *vchiq, *emmc, *dma; } BCM2835PeripheralState; #endif /* BCM2835_PERIPHERALS_H */ diff --git a/include/hw/display/bcm2835_fb.h b/include/hw/display/bcm2835_fb.h index 88a0e5eeef..f9debce5b1 100644 --- a/include/hw/display/bcm2835_fb.h +++ b/include/hw/display/bcm2835_fb.h @@ -1,3 +1,20 @@ +/* + * 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 "exec/address-spaces.h" +#include "ui/console.h" + #define TYPE_BCM2835_FB "bcm2835_fb" #define BCM2835_FB(obj) OBJECT_CHECK(Bcm2835FbState, (obj), TYPE_BCM2835_FB) @@ -27,3 +44,5 @@ typedef struct { void bcm2835_fb_reconfigure(Bcm2835FbState *s, uint32_t *xres, uint32_t *yres, uint32_t *xoffset, uint32_t *yoffset, uint32_t *bpp, uint32_t *pixo, uint32_t *alpha); + +#endif -- 2.11.4.GIT