/* we have to flush all pending changes so that the copy
is generated at the appropriate moment in time */
if (notify)
- vga_hw_update();
+ graphic_hw_update(s->vga.con);
(*s->cirrus_rop) (s, s->vga.vram_ptr +
(s->cirrus_blt_dstaddr & s->cirrus_addr_mask),
qemu_spice_create_host_primary(&d->ssd);
d->mode = QXL_MODE_VGA;
vga_dirty_log_start(&d->vga);
- vga_hw_update();
+ graphic_hw_update(d->vga.con);
}
static void qxl_exit_vga_mode(PCIQXLDevice *d)
if (cswitch) {
vga_invalidate_display(s);
}
- vga_hw_update();
+ graphic_hw_update(s->con);
ppm_save(filename, surface, errp);
}
uint32_t cursor_offset;
unsigned int (*rgb_to_pixel)(unsigned int r,
unsigned int g, unsigned b);
- vga_hw_update_ptr update;
- vga_hw_invalidate_ptr invalidate;
- vga_hw_screen_dump_ptr screen_dump;
- vga_hw_text_update_ptr text_update;
+ graphic_hw_update_ptr update;
+ graphic_hw_invalidate_ptr invalidate;
+ graphic_hw_screen_dump_ptr screen_dump;
+ graphic_hw_text_update_ptr text_update;
bool full_update_text;
bool full_update_gfx;
/* hardware mouse cursor support */
*dest = ch;
}
-typedef void (*vga_hw_update_ptr)(void *);
-typedef void (*vga_hw_invalidate_ptr)(void *);
-typedef void (*vga_hw_screen_dump_ptr)(void *, const char *, bool cswitch,
+typedef void (*graphic_hw_update_ptr)(void *);
+typedef void (*graphic_hw_invalidate_ptr)(void *);
+typedef void (*graphic_hw_screen_dump_ptr)(void *, const char *, bool cswitch,
Error **errp);
-typedef void (*vga_hw_text_update_ptr)(void *, console_ch_t *);
+typedef void (*graphic_hw_text_update_ptr)(void *, console_ch_t *);
-QemuConsole *graphic_console_init(vga_hw_update_ptr update,
- vga_hw_invalidate_ptr invalidate,
- vga_hw_screen_dump_ptr screen_dump,
- vga_hw_text_update_ptr text_update,
+QemuConsole *graphic_console_init(graphic_hw_update_ptr update,
+ graphic_hw_invalidate_ptr invalidate,
+ graphic_hw_screen_dump_ptr screen_dump,
+ graphic_hw_text_update_ptr text_update,
void *opaque);
-void vga_hw_update(void);
-void vga_hw_invalidate(void);
-void vga_hw_text_update(console_ch_t *chardata);
+void graphic_hw_update(QemuConsole *con);
+void graphic_hw_invalidate(QemuConsole *con);
+void graphic_hw_text_update(QemuConsole *con, console_ch_t *chardata);
int is_graphic_console(void);
int is_fixedsize_console(void);
DisplayState *ds;
/* Graphic console state. */
- vga_hw_update_ptr hw_update;
- vga_hw_invalidate_ptr hw_invalidate;
- vga_hw_screen_dump_ptr hw_screen_dump;
- vga_hw_text_update_ptr hw_text_update;
+ graphic_hw_update_ptr hw_update;
+ graphic_hw_invalidate_ptr hw_invalidate;
+ graphic_hw_screen_dump_ptr hw_screen_dump;
+ graphic_hw_text_update_ptr hw_text_update;
void *hw;
int g_width, g_height;
static void text_console_do_init(CharDriverState *chr, DisplayState *ds);
-void vga_hw_update(void)
+void graphic_hw_update(QemuConsole *con)
{
- if (active_console && active_console->hw_update)
- active_console->hw_update(active_console->hw);
+ if (!con) {
+ con = active_console;
+ }
+ if (con && con->hw_update) {
+ con->hw_update(con->hw);
+ }
}
-void vga_hw_invalidate(void)
+void graphic_hw_invalidate(QemuConsole *con)
{
- if (active_console && active_console->hw_invalidate)
- active_console->hw_invalidate(active_console->hw);
+ if (!con) {
+ con = active_console;
+ }
+ if (con && con->hw_invalidate) {
+ con->hw_invalidate(con->hw);
+ }
}
void qmp_screendump(const char *filename, Error **errp)
}
}
-void vga_hw_text_update(console_ch_t *chardata)
+void graphic_hw_text_update(QemuConsole *con, console_ch_t *chardata)
{
- if (active_console && active_console->hw_text_update)
- active_console->hw_text_update(active_console->hw, chardata);
+ if (!con) {
+ con = active_console;
+ }
+ if (con && con->hw_text_update)
+ con->hw_text_update(con->hw, chardata);
}
static void vga_fill_rect(QemuConsole *con,
qemu_mod_timer(s->cursor_timer,
qemu_get_clock_ms(rt_clock) + CONSOLE_CURSOR_PERIOD / 2);
}
- vga_hw_invalidate();
+ graphic_hw_invalidate(s);
}
}
return display_state;
}
-QemuConsole *graphic_console_init(vga_hw_update_ptr update,
- vga_hw_invalidate_ptr invalidate,
- vga_hw_screen_dump_ptr screen_dump,
- vga_hw_text_update_ptr text_update,
+QemuConsole *graphic_console_init(graphic_hw_update_ptr update,
+ graphic_hw_invalidate_ptr invalidate,
+ graphic_hw_screen_dump_ptr screen_dump,
+ graphic_hw_text_update_ptr text_update,
void *opaque)
{
int width = 640;
QemuConsole *s = opaque;
s->cursor_visible_phase = !s->cursor_visible_phase;
- vga_hw_invalidate();
+ graphic_hw_invalidate(s);
qemu_mod_timer(s->cursor_timer,
qemu_get_clock_ms(rt_clock) + CONSOLE_CURSOR_PERIOD / 2);
}
clear();
refresh();
curses_calc_pad();
- vga_hw_invalidate();
+ graphic_hw_invalidate(NULL);
invalidate = 0;
}
- vga_hw_text_update(screen);
+ graphic_hw_text_update(NULL, screen);
nextchr = ERR;
while (1) {
static void gd_refresh(DisplayChangeListener *dcl)
{
- vga_hw_update();
+ graphic_hw_update(NULL);
}
static void gd_switch(DisplayChangeListener *dcl,
sdl_grab_end();
}
}
- vga_hw_invalidate();
- vga_hw_update();
+ graphic_hw_invalidate(NULL);
+ graphic_hw_update(NULL);
}
static void handle_keydown(SDL_Event *ev)
if (scaling_active) {
scaling_active = 0;
sdl_switch(dcl, NULL);
- vga_hw_invalidate();
- vga_hw_update();
+ graphic_hw_invalidate(NULL);
+ graphic_hw_update(NULL);
}
gui_keysym = 1;
break;
surface_width(surface);
sdl_scale(width, height);
- vga_hw_invalidate();
- vga_hw_update();
+ graphic_hw_invalidate(NULL);
+ graphic_hw_update(NULL);
gui_keysym = 1;
}
default:
sdl_update_caption();
}
- vga_hw_update();
+ graphic_hw_update(NULL);
SDL_EnableUNICODE(!is_graphic_console());
while (SDL_PollEvent(ev)) {
break;
case SDL_VIDEORESIZE:
sdl_scale(ev->resize.w, ev->resize.h);
- vga_hw_invalidate();
- vga_hw_update();
+ graphic_hw_invalidate(NULL);
+ graphic_hw_update(NULL);
break;
default:
break;
void qemu_spice_display_refresh(SimpleSpiceDisplay *ssd)
{
dprint(3, "%s:\n", __func__);
- vga_hw_update();
+ graphic_hw_update(ssd->con);
qemu_mutex_lock(&ssd->lock);
if (QTAILQ_EMPTY(&ssd->updates) && ssd->ds) {
set_pixel_conversion(vs);
- vga_hw_invalidate();
- vga_hw_update();
+ graphic_hw_invalidate(NULL);
+ graphic_hw_update(NULL);
}
static void pixel_format_message (VncState *vs) {
VncState *vs, *vn;
int has_dirty, rects = 0;
- vga_hw_update();
+ graphic_hw_update(NULL);
if (vnc_trylock_display(vd)) {
vd->timer_interval = VNC_REFRESH_INTERVAL_BASE;
vd->timer_interval = VNC_REFRESH_INTERVAL_BASE;
if (vd->timer == NULL && !QTAILQ_EMPTY(&vd->clients)) {
vd->timer = qemu_new_timer_ms(rt_clock, vnc_refresh, vd);
- vga_hw_update();
+ graphic_hw_update(NULL);
vnc_refresh(vd);
}
}
QTAILQ_INSERT_HEAD(&vd->clients, vs, next);
- vga_hw_update();
+ graphic_hw_update(NULL);
vnc_write(vs, "RFB 003.008\n", 12);
vnc_flush(vs);
int csock;
/* Catch-up */
- vga_hw_update();
+ graphic_hw_update(NULL);
#ifdef CONFIG_VNC_WS
if (websocket) {
csock = qemu_accept(vs->lwebsock, (struct sockaddr *)&addr, &addrlen);