Revision 4e12cd94 hw/vmware_vga.c
b/hw/vmware_vga.c | ||
---|---|---|
38 | 38 |
|
39 | 39 |
struct vmsvga_state_s { |
40 | 40 |
#ifdef EMBED_STDVGA |
41 |
VGA_STATE_COMMON
|
|
41 |
VGACommonState vga;
|
|
42 | 42 |
#endif |
43 | 43 |
|
44 | 44 |
int width; |
... | ... | |
326 | 326 |
bypl = s->bypp * s->width; |
327 | 327 |
width = s->bypp * w; |
328 | 328 |
start = s->bypp * x + bypl * y; |
329 |
src = s->vram_ptr + start; |
|
330 |
dst = ds_get_data(s->ds) + start; |
|
329 |
src = s->vga.vram_ptr + start;
|
|
330 |
dst = ds_get_data(s->vga.ds) + start;
|
|
331 | 331 |
|
332 | 332 |
for (; line > 0; line --, src += bypl, dst += bypl) |
333 | 333 |
memcpy(dst, src, width); |
334 | 334 |
#endif |
335 | 335 |
|
336 |
dpy_update(s->ds, x, y, w, h); |
|
336 |
dpy_update(s->vga.ds, x, y, w, h);
|
|
337 | 337 |
} |
338 | 338 |
|
339 | 339 |
static inline void vmsvga_update_screen(struct vmsvga_state_s *s) |
340 | 340 |
{ |
341 | 341 |
#ifndef DIRECT_VRAM |
342 |
memcpy(ds_get_data(s->ds), s->vram_ptr, s->bypp * s->width * s->height);
|
|
342 |
memcpy(ds_get_data(s->vga.ds), s->vga.vram_ptr, s->bypp * s->width * s->height);
|
|
343 | 343 |
#endif |
344 | 344 |
|
345 |
dpy_update(s->ds, 0, 0, s->width, s->height); |
|
345 |
dpy_update(s->vga.ds, 0, 0, s->width, s->height);
|
|
346 | 346 |
} |
347 | 347 |
|
348 | 348 |
#ifdef DIRECT_VRAM |
... | ... | |
383 | 383 |
# ifdef DIRECT_VRAM |
384 | 384 |
uint8_t *vram = ds_get_data(s->ds); |
385 | 385 |
# else |
386 |
uint8_t *vram = s->vram_ptr; |
|
386 |
uint8_t *vram = s->vga.vram_ptr;
|
|
387 | 387 |
# endif |
388 | 388 |
int bypl = s->bypp * s->width; |
389 | 389 |
int width = s->bypp * w; |
... | ... | |
420 | 420 |
# ifdef DIRECT_VRAM |
421 | 421 |
uint8_t *vram = ds_get_data(s->ds); |
422 | 422 |
# else |
423 |
uint8_t *vram = s->vram_ptr; |
|
423 |
uint8_t *vram = s->vga.vram_ptr;
|
|
424 | 424 |
# endif |
425 | 425 |
int bypp = s->bypp; |
426 | 426 |
int bypl = bypp * s->width; |
... | ... | |
485 | 485 |
for (i = SVGA_BITMAP_SIZE(c->width, c->height) - 1; i >= 0; i --) |
486 | 486 |
c->mask[i] = ~c->mask[i]; |
487 | 487 |
|
488 |
if (s->ds->cursor_define) |
|
489 |
s->ds->cursor_define(c->width, c->height, c->bpp, c->hot_x, c->hot_y, |
|
488 |
if (s->vga.ds->cursor_define)
|
|
489 |
s->vga.ds->cursor_define(c->width, c->height, c->bpp, c->hot_x, c->hot_y,
|
|
490 | 490 |
(uint8_t *) c->image, (uint8_t *) c->mask); |
491 | 491 |
} |
492 | 492 |
#endif |
... | ... | |
689 | 689 |
return 0x0; |
690 | 690 |
|
691 | 691 |
case SVGA_REG_VRAM_SIZE: |
692 |
return s->vram_size - SVGA_FIFO_SIZE; |
|
692 |
return s->vga.vram_size - SVGA_FIFO_SIZE;
|
|
693 | 693 |
|
694 | 694 |
case SVGA_REG_FB_SIZE: |
695 | 695 |
return s->fb_size; |
... | ... | |
703 | 703 |
caps |= SVGA_CAP_RECT_FILL; |
704 | 704 |
#endif |
705 | 705 |
#ifdef HW_MOUSE_ACCEL |
706 |
if (s->ds->mouse_set) |
|
706 |
if (s->vga.ds->mouse_set)
|
|
707 | 707 |
caps |= SVGA_CAP_CURSOR | SVGA_CAP_CURSOR_BYPASS_2 | |
708 | 708 |
SVGA_CAP_CURSOR_BYPASS; |
709 | 709 |
#endif |
710 | 710 |
return caps; |
711 | 711 |
|
712 | 712 |
case SVGA_REG_MEM_START: |
713 |
return s->vram_base + s->vram_size - SVGA_FIFO_SIZE; |
|
713 |
return s->vram_base + s->vga.vram_size - SVGA_FIFO_SIZE;
|
|
714 | 714 |
|
715 | 715 |
case SVGA_REG_MEM_SIZE: |
716 | 716 |
return SVGA_FIFO_SIZE; |
... | ... | |
775 | 775 |
s->height = -1; |
776 | 776 |
s->invalidated = 1; |
777 | 777 |
#ifdef EMBED_STDVGA |
778 |
s->invalidate(opaque);
|
|
778 |
s->vga.invalidate(&s->vga);
|
|
779 | 779 |
#endif |
780 | 780 |
if (s->enable) |
781 | 781 |
s->fb_size = ((s->depth + 7) >> 3) * s->new_width * s->new_height; |
... | ... | |
801 | 801 |
|
802 | 802 |
case SVGA_REG_CONFIG_DONE: |
803 | 803 |
if (value) { |
804 |
s->fifo = (uint32_t *) &s->vram_ptr[s->vram_size - SVGA_FIFO_SIZE];
|
|
804 |
s->fifo = (uint32_t *) &s->vga.vram_ptr[s->vga.vram_size - SVGA_FIFO_SIZE];
|
|
805 | 805 |
/* Check range and alignment. */ |
806 | 806 |
if ((CMD(min) | CMD(max) | |
807 | 807 |
CMD(next_cmd) | CMD(stop)) & 3) |
... | ... | |
847 | 847 |
s->cursor.on |= (value == SVGA_CURSOR_ON_SHOW); |
848 | 848 |
s->cursor.on &= (value != SVGA_CURSOR_ON_HIDE); |
849 | 849 |
#ifdef HW_MOUSE_ACCEL |
850 |
if (s->ds->mouse_set && value <= SVGA_CURSOR_ON_SHOW) |
|
851 |
s->ds->mouse_set(s->cursor.x, s->cursor.y, s->cursor.on); |
|
850 |
if (s->vga.ds->mouse_set && value <= SVGA_CURSOR_ON_SHOW)
|
|
851 |
s->vga.ds->mouse_set(s->cursor.x, s->cursor.y, s->cursor.on);
|
|
852 | 852 |
#endif |
853 | 853 |
break; |
854 | 854 |
|
... | ... | |
885 | 885 |
if (s->new_width != s->width || s->new_height != s->height) { |
886 | 886 |
s->width = s->new_width; |
887 | 887 |
s->height = s->new_height; |
888 |
qemu_console_resize(s->ds, s->width, s->height); |
|
888 |
qemu_console_resize(s->vga.ds, s->width, s->height);
|
|
889 | 889 |
s->invalidated = 1; |
890 | 890 |
} |
891 | 891 |
} |
... | ... | |
895 | 895 |
struct vmsvga_state_s *s = (struct vmsvga_state_s *) opaque; |
896 | 896 |
if (!s->enable) { |
897 | 897 |
#ifdef EMBED_STDVGA |
898 |
s->update(opaque);
|
|
898 |
s->vga.update(&s->vga);
|
|
899 | 899 |
#endif |
900 | 900 |
return; |
901 | 901 |
} |
... | ... | |
963 | 963 |
struct vmsvga_state_s *s = (struct vmsvga_state_s *) opaque; |
964 | 964 |
if (!s->enable) { |
965 | 965 |
#ifdef EMBED_STDVGA |
966 |
s->invalidate(opaque);
|
|
966 |
s->vga.invalidate(&s->vga);
|
|
967 | 967 |
#endif |
968 | 968 |
return; |
969 | 969 |
} |
... | ... | |
978 | 978 |
struct vmsvga_state_s *s = (struct vmsvga_state_s *) opaque; |
979 | 979 |
if (!s->enable) { |
980 | 980 |
#ifdef EMBED_STDVGA |
981 |
s->screen_dump(opaque, filename);
|
|
981 |
s->vga.screen_dump(&s->vga, filename);
|
|
982 | 982 |
#endif |
983 | 983 |
return; |
984 | 984 |
} |
985 | 985 |
|
986 | 986 |
if (s->depth == 32) { |
987 | 987 |
DisplaySurface *ds = qemu_create_displaysurface_from(s->width, |
988 |
s->height, 32, ds_get_linesize(s->ds), s->vram_ptr);
|
|
988 |
s->height, 32, ds_get_linesize(s->vga.ds), s->vga.vram_ptr);
|
|
989 | 989 |
ppm_save(filename, ds); |
990 | 990 |
qemu_free(ds); |
991 | 991 |
} |
... | ... | |
995 | 995 |
{ |
996 | 996 |
struct vmsvga_state_s *s = (struct vmsvga_state_s *) opaque; |
997 | 997 |
|
998 |
if (s->text_update) |
|
999 |
s->text_update(opaque, chardata);
|
|
998 |
if (s->vga.text_update)
|
|
999 |
s->vga.text_update(&s->vga, chardata);
|
|
1000 | 1000 |
} |
1001 | 1001 |
|
1002 | 1002 |
#ifdef DIRECT_VRAM |
... | ... | |
1116 | 1116 |
|
1117 | 1117 |
s->invalidated = 1; |
1118 | 1118 |
if (s->config) |
1119 |
s->fifo = (uint32_t *) &s->vram_ptr[s->vram_size - SVGA_FIFO_SIZE];
|
|
1119 |
s->fifo = (uint32_t *) &s->vga.vram_ptr[s->vga.vram_size - SVGA_FIFO_SIZE];
|
|
1120 | 1120 |
|
1121 | 1121 |
return 0; |
1122 | 1122 |
} |
... | ... | |
1137 | 1137 |
s->vram_ptr = qemu_get_ram_ptr(s->vram_offset); |
1138 | 1138 |
#endif |
1139 | 1139 |
|
1140 |
s->ds = graphic_console_init(vmsvga_update_display, |
|
1141 |
vmsvga_invalidate_display, |
|
1142 |
vmsvga_screen_dump, |
|
1143 |
vmsvga_text_update, s);
|
|
1140 |
s->vga.ds = graphic_console_init(vmsvga_update_display,
|
|
1141 |
vmsvga_invalidate_display,
|
|
1142 |
vmsvga_screen_dump,
|
|
1143 |
vmsvga_text_update, &s->vga);
|
|
1144 | 1144 |
|
1145 | 1145 |
#ifdef CONFIG_BOCHS_VBE |
1146 | 1146 |
/* XXX: use optimized standard vga accesses */ |
1147 | 1147 |
cpu_register_physical_memory(VBE_DISPI_LFB_PHYSICAL_ADDRESS, |
1148 |
vga_ram_size, s->vram_offset); |
|
1148 |
vga_ram_size, s->vga.vram_offset);
|
|
1149 | 1149 |
#endif |
1150 | 1150 |
} |
1151 | 1151 |
|
... | ... | |
1204 | 1204 |
iomemtype = cpu_register_io_memory(0, vmsvga_vram_read, |
1205 | 1205 |
vmsvga_vram_write, s); |
1206 | 1206 |
#else |
1207 |
iomemtype = s->vram_offset | IO_MEM_RAM; |
|
1207 |
iomemtype = s->vga.vram_offset | IO_MEM_RAM;
|
|
1208 | 1208 |
#endif |
1209 |
cpu_register_physical_memory(s->vram_base, s->vram_size, |
|
1209 |
cpu_register_physical_memory(s->vram_base, s->vga.vram_size,
|
|
1210 | 1210 |
iomemtype); |
1211 | 1211 |
} |
1212 | 1212 |
|
Also available in: Unified diff