Revision b584726d hw/vmware_vga.c
b/hw/vmware_vga.c | ||
---|---|---|
59 | 59 |
DisplayState *ds; |
60 | 60 |
int vram_size; |
61 | 61 |
ram_addr_t vram_offset; |
62 |
uint8_t *vram_ptr; |
|
62 | 63 |
#endif |
63 |
uint8_t *vram; |
|
64 | 64 |
target_phys_addr_t vram_base; |
65 | 65 |
|
66 | 66 |
int index; |
... | ... | |
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 + start; |
|
329 |
src = s->vram_ptr + start;
|
|
330 | 330 |
dst = ds_get_data(s->ds) + start; |
331 | 331 |
|
332 | 332 |
for (; line > 0; line --, src += bypl, dst += bypl) |
... | ... | |
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, s->bypp * s->width * s->height); |
|
342 |
memcpy(ds_get_data(s->ds), s->vram_ptr, s->bypp * s->width * s->height);
|
|
343 | 343 |
#endif |
344 | 344 |
|
345 | 345 |
dpy_update(s->ds, 0, 0, s->width, s->height); |
... | ... | |
383 | 383 |
# ifdef DIRECT_VRAM |
384 | 384 |
uint8_t *vram = ds_get_data(s->ds); |
385 | 385 |
# else |
386 |
uint8_t *vram = s->vram; |
|
386 |
uint8_t *vram = s->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; |
|
423 |
uint8_t *vram = s->vram_ptr;
|
|
424 | 424 |
# endif |
425 | 425 |
int bypp = s->bypp; |
426 | 426 |
int bypl = bypp * s->width; |
... | ... | |
801 | 801 |
|
802 | 802 |
case SVGA_REG_CONFIG_DONE: |
803 | 803 |
if (value) { |
804 |
s->fifo = (uint32_t *) &s->vram[s->vram_size - SVGA_FIFO_SIZE]; |
|
804 |
s->fifo = (uint32_t *) &s->vram_ptr[s->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) |
... | ... | |
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); |
|
988 |
s->height, 32, ds_get_linesize(s->ds), s->vram_ptr);
|
|
989 | 989 |
ppm_save(filename, ds); |
990 | 990 |
qemu_free(ds); |
991 | 991 |
} |
... | ... | |
1006 | 1006 |
if (addr < s->fb_size) |
1007 | 1007 |
return *(uint8_t *) (ds_get_data(s->ds) + addr); |
1008 | 1008 |
else |
1009 |
return *(uint8_t *) (s->vram + addr); |
|
1009 |
return *(uint8_t *) (s->vram_ptr + addr);
|
|
1010 | 1010 |
} |
1011 | 1011 |
|
1012 | 1012 |
static uint32_t vmsvga_vram_readw(void *opaque, target_phys_addr_t addr) |
... | ... | |
1015 | 1015 |
if (addr < s->fb_size) |
1016 | 1016 |
return *(uint16_t *) (ds_get_data(s->ds) + addr); |
1017 | 1017 |
else |
1018 |
return *(uint16_t *) (s->vram + addr); |
|
1018 |
return *(uint16_t *) (s->vram_ptr + addr);
|
|
1019 | 1019 |
} |
1020 | 1020 |
|
1021 | 1021 |
static uint32_t vmsvga_vram_readl(void *opaque, target_phys_addr_t addr) |
... | ... | |
1024 | 1024 |
if (addr < s->fb_size) |
1025 | 1025 |
return *(uint32_t *) (ds_get_data(s->ds) + addr); |
1026 | 1026 |
else |
1027 |
return *(uint32_t *) (s->vram + addr); |
|
1027 |
return *(uint32_t *) (s->vram_ptr + addr);
|
|
1028 | 1028 |
} |
1029 | 1029 |
|
1030 | 1030 |
static void vmsvga_vram_writeb(void *opaque, target_phys_addr_t addr, |
... | ... | |
1034 | 1034 |
if (addr < s->fb_size) |
1035 | 1035 |
*(uint8_t *) (ds_get_data(s->ds) + addr) = value; |
1036 | 1036 |
else |
1037 |
*(uint8_t *) (s->vram + addr) = value; |
|
1037 |
*(uint8_t *) (s->vram_ptr + addr) = value;
|
|
1038 | 1038 |
} |
1039 | 1039 |
|
1040 | 1040 |
static void vmsvga_vram_writew(void *opaque, target_phys_addr_t addr, |
... | ... | |
1044 | 1044 |
if (addr < s->fb_size) |
1045 | 1045 |
*(uint16_t *) (ds_get_data(s->ds) + addr) = value; |
1046 | 1046 |
else |
1047 |
*(uint16_t *) (s->vram + addr) = value; |
|
1047 |
*(uint16_t *) (s->vram_ptr + addr) = value;
|
|
1048 | 1048 |
} |
1049 | 1049 |
|
1050 | 1050 |
static void vmsvga_vram_writel(void *opaque, target_phys_addr_t addr, |
... | ... | |
1054 | 1054 |
if (addr < s->fb_size) |
1055 | 1055 |
*(uint32_t *) (ds_get_data(s->ds) + addr) = value; |
1056 | 1056 |
else |
1057 |
*(uint32_t *) (s->vram + addr) = value; |
|
1057 |
*(uint32_t *) (s->vram_ptr + addr) = value;
|
|
1058 | 1058 |
} |
1059 | 1059 |
|
1060 | 1060 |
static CPUReadMemoryFunc *vmsvga_vram_read[] = { |
... | ... | |
1116 | 1116 |
|
1117 | 1117 |
s->invalidated = 1; |
1118 | 1118 |
if (s->config) |
1119 |
s->fifo = (uint32_t *) &s->vram[s->vram_size - SVGA_FIFO_SIZE]; |
|
1119 |
s->fifo = (uint32_t *) &s->vram_ptr[s->vram_size - SVGA_FIFO_SIZE];
|
|
1120 | 1120 |
|
1121 | 1121 |
return 0; |
1122 | 1122 |
} |
1123 | 1123 |
|
1124 |
static void vmsvga_init(struct vmsvga_state_s *s, |
|
1125 |
uint8_t *vga_ram_base, unsigned long vga_ram_offset, |
|
1126 |
int vga_ram_size) |
|
1124 |
static void vmsvga_init(struct vmsvga_state_s *s, int vga_ram_size) |
|
1127 | 1125 |
{ |
1128 |
s->vram = vga_ram_base; |
|
1129 |
s->vram_size = vga_ram_size; |
|
1130 |
s->vram_offset = vga_ram_offset; |
|
1131 |
|
|
1132 | 1126 |
s->scratch_size = SVGA_SCRATCH_SIZE; |
1133 | 1127 |
s->scratch = (uint32_t *) qemu_malloc(s->scratch_size * 4); |
1134 | 1128 |
|
1135 | 1129 |
vmsvga_reset(s); |
1136 | 1130 |
|
1137 | 1131 |
#ifdef EMBED_STDVGA |
1138 |
vga_common_init((VGAState *) s, |
|
1139 |
vga_ram_base, vga_ram_offset, vga_ram_size); |
|
1132 |
vga_common_init((VGAState *) s, vga_ram_size); |
|
1140 | 1133 |
vga_init((VGAState *) s); |
1134 |
#else |
|
1135 |
s->vram_size = vga_ram_size; |
|
1136 |
s->vram_offset = qemu_ram_alloc(vga_ram_size); |
|
1137 |
s->vram_ptr = qemu_get_ram_ptr(s->vram_offset); |
|
1141 | 1138 |
#endif |
1142 | 1139 |
|
1143 | 1140 |
s->ds = graphic_console_init(vmsvga_update_display, |
... | ... | |
1148 | 1145 |
#ifdef CONFIG_BOCHS_VBE |
1149 | 1146 |
/* XXX: use optimized standard vga accesses */ |
1150 | 1147 |
cpu_register_physical_memory(VBE_DISPI_LFB_PHYSICAL_ADDRESS, |
1151 |
vga_ram_size, vga_ram_offset);
|
|
1148 |
vga_ram_size, s->vram_offset);
|
|
1152 | 1149 |
#endif |
1153 | 1150 |
} |
1154 | 1151 |
|
... | ... | |
1215 | 1212 |
|
1216 | 1213 |
#define PCI_CLASS_HEADERTYPE_00h 0x00 |
1217 | 1214 |
|
1218 |
void pci_vmsvga_init(PCIBus *bus, uint8_t *vga_ram_base, |
|
1219 |
unsigned long vga_ram_offset, int vga_ram_size) |
|
1215 |
void pci_vmsvga_init(PCIBus *bus, int vga_ram_size) |
|
1220 | 1216 |
{ |
1221 | 1217 |
struct pci_vmsvga_state_s *s; |
1222 | 1218 |
|
... | ... | |
1242 | 1238 |
pci_register_io_region(&s->card, 1, vga_ram_size, |
1243 | 1239 |
PCI_ADDRESS_SPACE_MEM_PREFETCH, pci_vmsvga_map_mem); |
1244 | 1240 |
|
1245 |
vmsvga_init(&s->chip, vga_ram_base, vga_ram_offset, vga_ram_size);
|
|
1241 |
vmsvga_init(&s->chip, vga_ram_size); |
|
1246 | 1242 |
|
1247 | 1243 |
register_savevm("vmware_vga", 0, 0, pci_vmsvga_save, pci_vmsvga_load, s); |
1248 | 1244 |
} |
Also available in: Unified diff