aboutsummaryrefslogtreecommitdiff
path: root/hw/syborg_fb.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/syborg_fb.c')
-rw-r--r--hw/syborg_fb.c45
1 files changed, 27 insertions, 18 deletions
diff --git a/hw/syborg_fb.c b/hw/syborg_fb.c
index 42c62744ce..2929ffd0b5 100644
--- a/hw/syborg_fb.c
+++ b/hw/syborg_fb.c
@@ -76,8 +76,8 @@ typedef struct {
uint32_t base;
uint32_t pitch;
- int rows;
- int cols;
+ uint32_t rows;
+ uint32_t cols;
int blank;
int bpp;
int rgb; /* 0 = BGR, 1 = RGB */
@@ -507,41 +507,50 @@ static void syborg_fb_init(SysBusDevice *dev)
{
SyborgFBState *s = FROM_SYSBUS(SyborgFBState, dev);
int iomemtype;
- int width;
- int height;
sysbus_init_irq(dev, &s->irq);
iomemtype = cpu_register_io_memory(syborg_fb_readfn,
syborg_fb_writefn, s);
sysbus_init_mmio(dev, 0x1000, iomemtype);
- width = qdev_get_prop_int(&dev->qdev, "width", 0);
- height = qdev_get_prop_int(&dev->qdev, "height", 0);
-
s->ds = graphic_console_init(syborg_fb_update_display,
syborg_fb_invalidate_display,
NULL, NULL, s);
- if (width != 0 && height != 0) {
- qemu_console_resize(s->ds, width, height);
+ if (s->cols != 0 && s->rows != 0) {
+ qemu_console_resize(s->ds, s->cols, s->rows);
}
- if (!width)
- width = ds_get_width(s->ds);
- if (!height)
- height = ds_get_height(s->ds);
-
- s->cols = width;
- s->rows = height;
+ if (!s->cols)
+ s->cols = ds_get_width(s->ds);
+ if (!s->rows)
+ s->rows = ds_get_height(s->ds);
register_savevm("syborg_framebuffer", -1, 1,
syborg_fb_save, syborg_fb_load, s);
}
+static SysBusDeviceInfo syborg_fb_info = {
+ .init = syborg_fb_init,
+ .qdev.name = "syborg,framebuffer",
+ .qdev.size = sizeof(SyborgFBState),
+ .qdev.props = (Property[]) {
+ {
+ .name = "width",
+ .info = &qdev_prop_uint32,
+ .offset = offsetof(SyborgFBState, cols),
+ },{
+ .name = "height",
+ .info = &qdev_prop_uint32,
+ .offset = offsetof(SyborgFBState, rows),
+ },
+ {/* end of list */}
+ }
+};
+
static void syborg_fb_register_devices(void)
{
- sysbus_register_dev("syborg,framebuffer", sizeof(SyborgFBState),
- syborg_fb_init);
+ sysbus_register_withprop(&syborg_fb_info);
}
device_init(syborg_fb_register_devices)