Lines Matching +full:io +full:- +full:width
4 * Copyright (c) 2007-2011 Herve Poussineau
24 #include "hw/qdev-properties.h"
26 #include "qemu/error-report.h"
48 uint32_t width, height; /* in pixels */ member
73 return memory_region_snapshot_get_dirty(&s->mem_vram, snap, page, G364_PAGE_SIZE); in check_dirty()
78 DisplaySurface *surface = qemu_console_surface(s->con); in g364fb_draw_graphic8()
116 xmin = s->width; in g364fb_draw_graphic8()
118 ymin = s->height; in g364fb_draw_graphic8()
121 if (!(s->ctla & CTLA_NO_CURSOR)) { in g364fb_draw_graphic8()
122 xcursor = s->cursor_position >> 12; in g364fb_draw_graphic8()
123 ycursor = s->cursor_position & 0xfff; in g364fb_draw_graphic8()
125 xcursor = ycursor = -65; in g364fb_draw_graphic8()
128 vram = memory_region_get_ram_ptr(&s->mem_vram) + s->top_of_screen; in g364fb_draw_graphic8()
131 snap = memory_region_snapshot_and_clear_dirty(&s->mem_vram, 0, s->vram_size, in g364fb_draw_graphic8()
133 while (y < s->height) { in g364fb_draw_graphic8()
145 int xdiff = x - xcursor; in g364fb_draw_graphic8()
146 uint16_t curs = s->cursor[(y - ycursor) * 8 + xdiff / 8]; in g364fb_draw_graphic8()
152 s->color_palette[index][0], in g364fb_draw_graphic8()
153 s->color_palette[index][1], in g364fb_draw_graphic8()
154 s->color_palette[index][2]); in g364fb_draw_graphic8()
157 index = op - 1; in g364fb_draw_graphic8()
159 s->cursor_palette[index][0], in g364fb_draw_graphic8()
160 s->cursor_palette[index][1], in g364fb_draw_graphic8()
161 s->cursor_palette[index][2]); in g364fb_draw_graphic8()
167 s->color_palette[index][0], in g364fb_draw_graphic8()
168 s->color_palette[index][1], in g364fb_draw_graphic8()
169 s->color_palette[index][2]); in g364fb_draw_graphic8()
175 if (x == s->width) { in g364fb_draw_graphic8()
176 xmax = s->width - 1; in g364fb_draw_graphic8()
178 if (y == s->height) { in g364fb_draw_graphic8()
179 ymax = s->height - 1; in g364fb_draw_graphic8()
194 dpy_gfx_update(s->con, xmin, ymin, in g364fb_draw_graphic8()
195 xmax - xmin + 1, ymax - ymin + 1); in g364fb_draw_graphic8()
196 xmin = s->width; in g364fb_draw_graphic8()
198 ymin = s->height; in g364fb_draw_graphic8()
202 dy = x / s->width; in g364fb_draw_graphic8()
203 x = x % s->width; in g364fb_draw_graphic8()
214 dpy_gfx_update(s->con, xmin, ymin, xmax - xmin + 1, ymax - ymin + 1); in g364fb_draw_graphic8()
221 DisplaySurface *surface = qemu_console_surface(s->con); in g364fb_draw_blank()
225 if (s->blanked) { in g364fb_draw_blank()
230 w = s->width * surface_bytes_per_pixel(surface); in g364fb_draw_blank()
232 for (i = 0; i < s->height; i++) { in g364fb_draw_blank()
237 dpy_gfx_update_full(s->con); in g364fb_draw_blank()
238 s->blanked = 1; in g364fb_draw_blank()
244 DisplaySurface *surface = qemu_console_surface(s->con); in g364fb_update_display()
248 if (s->width == 0 || s->height == 0) in g364fb_update_display()
251 if (s->width != surface_width(surface) || in g364fb_update_display()
252 s->height != surface_height(surface)) { in g364fb_update_display()
253 qemu_console_resize(s->con, s->width, s->height); in g364fb_update_display()
256 if (s->ctla & CTLA_FORCE_BLANK) { in g364fb_update_display()
258 } else if (s->depth == 8) { in g364fb_update_display()
261 error_report("g364: unknown guest depth %d", s->depth); in g364fb_update_display()
264 qemu_irq_raise(s->irq); in g364fb_update_display()
271 s->blanked = 0; in g364fb_invalidate_display()
272 memory_region_set_dirty(&s->mem_vram, 0, s->vram_size); in g364fb_invalidate_display()
277 uint8_t *vram = memory_region_get_ram_ptr(&s->mem_vram); in g364fb_reset()
279 qemu_irq_lower(s->irq); in g364fb_reset()
281 memset(s->color_palette, 0, sizeof(s->color_palette)); in g364fb_reset()
282 memset(s->cursor_palette, 0, sizeof(s->cursor_palette)); in g364fb_reset()
283 memset(s->cursor, 0, sizeof(s->cursor)); in g364fb_reset()
284 s->cursor_position = 0; in g364fb_reset()
285 s->ctla = 0; in g364fb_reset()
286 s->top_of_screen = 0; in g364fb_reset()
287 s->width = s->height = 0; in g364fb_reset()
288 memset(vram, 0, s->vram_size); in g364fb_reset()
292 /* called for accesses to io ports */
302 int idx = (addr - REG_CURS_PAT) >> 3; in g364fb_ctrl_read()
303 val = s->cursor[idx]; in g364fb_ctrl_read()
306 int idx = (addr - REG_CURS_PAL) >> 3; in g364fb_ctrl_read()
307 val = ((uint32_t)s->cursor_palette[idx][0] << 16); in g364fb_ctrl_read()
308 val |= ((uint32_t)s->cursor_palette[idx][1] << 8); in g364fb_ctrl_read()
309 val |= ((uint32_t)s->cursor_palette[idx][2] << 0); in g364fb_ctrl_read()
313 val = s->width / 4; in g364fb_ctrl_read()
316 val = s->height * 2; in g364fb_ctrl_read()
319 val = s->ctla; in g364fb_ctrl_read()
339 s->depth = depths[(s->ctla & 0x00700000) >> 20]; in g364fb_update_depth()
344 DisplaySurface *surface = qemu_console_surface(s->con); in g364_invalidate_cursor_position()
348 ymin = s->cursor_position & 0xfff; in g364_invalidate_cursor_position()
349 ymax = MIN(s->height, ymin + 64); in g364_invalidate_cursor_position()
353 memory_region_set_dirty(&s->mem_vram, start, end - start); in g364_invalidate_cursor_position()
367 int idx = (addr - REG_CLR_PAL) >> 3; in g364fb_ctrl_write()
368 s->color_palette[idx][0] = (val >> 16) & 0xff; in g364fb_ctrl_write()
369 s->color_palette[idx][1] = (val >> 8) & 0xff; in g364fb_ctrl_write()
370 s->color_palette[idx][2] = val & 0xff; in g364fb_ctrl_write()
374 int idx = (addr - REG_CURS_PAT) >> 3; in g364fb_ctrl_write()
375 s->cursor[idx] = val; in g364fb_ctrl_write()
379 int idx = (addr - REG_CURS_PAL) >> 3; in g364fb_ctrl_write()
380 s->cursor_palette[idx][0] = (val >> 16) & 0xff; in g364fb_ctrl_write()
381 s->cursor_palette[idx][1] = (val >> 8) & 0xff; in g364fb_ctrl_write()
382 s->cursor_palette[idx][2] = val & 0xff; in g364fb_ctrl_write()
403 s->top_of_screen = val; in g364fb_ctrl_write()
407 s->width = val * 4; in g364fb_ctrl_write()
410 s->height = val / 2; in g364fb_ctrl_write()
413 s->ctla = val; in g364fb_ctrl_write()
419 s->cursor_position = val; in g364fb_ctrl_write()
431 qemu_irq_lower(s->irq); in g364fb_ctrl_write()
465 VMSTATE_UINT32(width, G364State),
478 s->con = graphic_console_init(dev, 0, &g364fb_ops, s); in g364fb_init()
480 memory_region_init_io(&s->mem_ctrl, OBJECT(dev), &g364fb_ctrl_ops, s, in g364fb_init()
482 memory_region_init_ram(&s->mem_vram, NULL, "g364fb.vram", s->vram_size, in g364fb_init()
484 memory_region_set_log(&s->mem_vram, true, DIRTY_MEMORY_VGA); in g364fb_init()
487 #define TYPE_G364 "sysbus-g364"
499 G364State *s = &sbs->g364; in g364fb_sysbus_realize()
503 sysbus_init_irq(sbd, &s->irq); in g364fb_sysbus_realize()
504 sysbus_init_mmio(sbd, &s->mem_ctrl); in g364fb_sysbus_realize()
505 sysbus_init_mmio(sbd, &s->mem_vram); in g364fb_sysbus_realize()
512 g364fb_reset(&s->g364); in g364fb_sysbus_reset()
520 .name = "g364fb-sysbus",
533 dc->realize = g364fb_sysbus_realize; in g364fb_sysbus_class_init()
534 set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); in g364fb_sysbus_class_init()
535 dc->desc = "G364 framebuffer"; in g364fb_sysbus_class_init()
537 dc->vmsd = &vmstate_g364fb_sysbus; in g364fb_sysbus_class_init()