From: SeokYeon Hwang Date: Fri, 8 Jul 2016 11:36:33 +0000 (+0900) Subject: vigs: add vblank emulation for headless emulator X-Git-Tag: Tizen_Studio_1.3_Release_p2.3.2~34^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dceea3c24e1c6f6167bae9c503ff502e0344c954;p=sdk%2Femulator%2Fqemu.git vigs: add vblank emulation for headless emulator Change-Id: Iac85fa67399b51890bfb54c37698f56f2ef40468 Signed-off-by: SeokYeon Hwang --- diff --git a/hw/vigs/vigs_device.c b/hw/vigs/vigs_device.c index e266190a68..d802319a87 100644 --- a/hw/vigs/vigs_device.c +++ b/hw/vigs/vigs_device.c @@ -42,6 +42,7 @@ #include "ui/console.h" #include "qemu/main-loop.h" #include "qemu/error-report.h" +#include "sysemu/sysemu.h" #define PCI_VENDOR_ID_VIGS 0x19B2 #define PCI_DEVICE_ID_VIGS 0x1011 @@ -81,6 +82,9 @@ typedef struct VIGSState uint32_t reg_con; uint32_t reg_int; + + // for VBLANK emulation + QEMUTimer *vblank_timer; } VIGSState; #define TYPE_VIGS_DEVICE "vigs" @@ -341,6 +345,24 @@ static struct vigs_capture_ops capture_ops = .process_captured = vigs_process_captured, }; +static void vblank_update(void *opaque) { + VIGSState *s = opaque; + uint64_t last_update; + + if (s->reg_con & VIGS_REG_CON_VBLANK_ENABLE) { + s->reg_int |= VIGS_REG_INT_VBLANK_PENDING; + vigs_update_irq(s); + } + + last_update = qemu_clock_get_ms(QEMU_CLOCK_REALTIME); + timer_mod(s->vblank_timer, last_update + GUI_REFRESH_INTERVAL_DEFAULT); +} + +static void vigs_vblank_timer_init(VIGSState *s) { + s->vblank_timer = timer_new_ms(QEMU_CLOCK_REALTIME, vblank_update, s); + timer_mod(s->vblank_timer, qemu_clock_get_ms(QEMU_CLOCK_REALTIME)); +} + static int vigs_device_init(PCIDevice *dev) { VIGSState *s = DO_UPCAST(VIGSState, dev, dev); @@ -502,6 +524,12 @@ static int vigs_device_init(PCIDevice *dev) } } + // XXX: VBLANK emulation + if (display_type == DT_NONE || display_type == DT_NOGRAPHIC) { + VIGS_LOG_INFO("VIGS vblank emulation enabled"); + vigs_vblank_timer_init(s); + } + VIGS_LOG_INFO("VIGS initialized"); VIGS_LOG_DEBUG("vram_size = %u", s->vram_size);