[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] [RFC] Variable video ram size option - revised
From: |
Trolle Selander |
Subject: |
[Qemu-devel] [PATCH] [RFC] Variable video ram size option - revised |
Date: |
Wed, 21 Jan 2009 13:07:51 -0500 |
User-agent: |
Thunderbird 2.0.0.19 (X11/20090105) |
Hi all,
This is an updated version of the patch after the suggestions/discussion
on the list. It also includes different handling of how the -vga option
is handled internally, replacing the multiple
independent-yet-mutually-exclusive xxx_vga_enabled variables with one
vgahw_model variable, and also includes the -vga none option added by
Stefano in the time since my last version of this patch. Further
comments & testing welcome. :)
-- Trolle
Signed-off-by: Trolle Selander <address@hidden>
diff -uNr trunk/hw/cirrus_vga.c trunk-patched/hw/cirrus_vga.c
--- trunk/hw/cirrus_vga.c 2009-01-19 18:04:34.402289923 -0500
+++ trunk-patched/hw/cirrus_vga.c 2009-01-19 18:12:25.593320302 -0500
@@ -3297,6 +3297,12 @@
s = qemu_mallocz(sizeof(CirrusVGAState));
+ if ( vga_ram_size != 4*1024*1024 )
+ {
+ fprintf(stderr,"The -videoram option does not work with the cirrus vga
model. Video ram set to 4M. \n");
+ vga_ram_size=4*1024*1024;
+ }
+
vga_common_init((VGAState *)s,
vga_ram_base, vga_ram_offset, vga_ram_size);
cirrus_init_common(s, CIRRUS_ID_CLGD5430, 0);
@@ -3324,10 +3330,10 @@
s->map_addr = s->map_end = 0;
s->lfb_addr = addr & TARGET_PAGE_MASK;
- s->lfb_end = ((addr + VGA_RAM_SIZE) + TARGET_PAGE_SIZE - 1) &
TARGET_PAGE_MASK;
+ s->lfb_end = ((addr + s->vram_size) + TARGET_PAGE_SIZE - 1) &
TARGET_PAGE_MASK;
/* account for overflow */
- if (s->lfb_end < addr + VGA_RAM_SIZE)
- s->lfb_end = addr + VGA_RAM_SIZE;
+ if (s->lfb_end < addr + s->vram_size)
+ s->lfb_end = addr + s->vram_size;
}
static void cirrus_pci_mmio_map(PCIDevice *d, int region_num,
@@ -3365,6 +3371,13 @@
/* setup VGA */
s = &d->cirrus_vga;
+
+ if ( vga_ram_size != 4*1024*1024 )
+ {
+ fprintf(stderr,"The -videoram option does not work with the cirrus vga
model. Video ram set to 4M. \n");
+ vga_ram_size=4*1024*1024;
+ }
+
vga_common_init((VGAState *)s,
vga_ram_base, vga_ram_offset, vga_ram_size);
cirrus_init_common(s, device_id, 1);
diff -uNr trunk/hw/mips_jazz.c trunk-patched/hw/mips_jazz.c
--- trunk/hw/mips_jazz.c 2009-01-19 18:04:34.482293278 -0500
+++ trunk-patched/hw/mips_jazz.c 2009-01-19 18:12:25.594322030 -0500
@@ -293,7 +293,7 @@
.name = "magnum",
.desc = "MIPS Magnum",
.init = mips_magnum_init,
- .ram_require = MAGNUM_BIOS_SIZE + VGA_RAM_SIZE,
+ .ram_require = MAGNUM_BIOS_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
};
@@ -302,7 +302,7 @@
.name = "pica61",
.desc = "Acer Pica 61",
.init = mips_pica61_init,
- .ram_require = MAGNUM_BIOS_SIZE + VGA_RAM_SIZE,
+ .ram_require = MAGNUM_BIOS_SIZE,
.nodisk_ok = 1,
.use_scsi = 1,
};
diff -uNr trunk/hw/mips_malta.c trunk-patched/hw/mips_malta.c
--- trunk/hw/mips_malta.c 2009-01-19 18:04:34.514292790 -0500
+++ trunk-patched/hw/mips_malta.c 2009-01-19 18:12:25.595322502 -0500
@@ -943,6 +943,6 @@
.name = "malta",
.desc = "MIPS Malta Core LV",
.init = mips_malta_init,
- .ram_require = VGA_RAM_SIZE + BIOS_SIZE,
+ .ram_require = BIOS_SIZE,
.nodisk_ok = 1,
};
diff -uNr trunk/hw/mips_mipssim.c trunk-patched/hw/mips_mipssim.c
--- trunk/hw/mips_mipssim.c 2009-01-19 18:04:34.495297312 -0500
+++ trunk-patched/hw/mips_mipssim.c 2009-01-19 18:12:25.596288472 -0500
@@ -184,6 +184,6 @@
.name = "mipssim",
.desc = "MIPS MIPSsim platform",
.init = mips_mipssim_init,
- .ram_require = BIOS_SIZE + VGA_RAM_SIZE /* unused */,
+ .ram_require = BIOS_SIZE /* unused */,
.nodisk_ok = 1,
};
diff -uNr trunk/hw/mips_r4k.c trunk-patched/hw/mips_r4k.c
--- trunk/hw/mips_r4k.c 2009-01-19 18:04:34.523310792 -0500
+++ trunk-patched/hw/mips_r4k.c 2009-01-19 18:12:25.597288246 -0500
@@ -275,6 +275,6 @@
.name = "mips",
.desc = "mips r4k platform",
.init = mips_r4k_init,
- .ram_require = VGA_RAM_SIZE + BIOS_SIZE,
+ .ram_require = BIOS_SIZE,
.nodisk_ok = 1,
};
diff -uNr trunk/hw/pc.c trunk-patched/hw/pc.c
--- trunk/hw/pc.c 2009-01-19 18:04:34.518294675 -0500
+++ trunk-patched/hw/pc.c 2009-01-19 18:12:25.599288142 -0500
@@ -852,29 +852,29 @@
exit(1);
}
- if (cirrus_vga_enabled || std_vga_enabled || vmsvga_enabled) {
- /* VGA BIOS load */
- if (cirrus_vga_enabled) {
- snprintf(buf, sizeof(buf), "%s/%s", bios_dir,
VGABIOS_CIRRUS_FILENAME);
- } else {
- snprintf(buf, sizeof(buf), "%s/%s", bios_dir, VGABIOS_FILENAME);
- }
- vga_bios_size = get_image_size(buf);
- if (vga_bios_size <= 0 || vga_bios_size > 65536)
- goto vga_bios_error;
- vga_bios_offset = qemu_ram_alloc(65536);
-
- ret = load_image(buf, phys_ram_base + vga_bios_offset);
- if (ret != vga_bios_size) {
-vga_bios_error:
- fprintf(stderr, "qemu: could not load VGA BIOS '%s'\n", buf);
- exit(1);
- }
+ if (vgahw_model != VGAHW_NONE) {
+ /* VGA BIOS load */
+ if (vgahw_model == VGAHW_CIRRUS)
+ snprintf(buf, sizeof(buf), "%s/%s", bios_dir,
VGABIOS_CIRRUS_FILENAME);
+ else
+ snprintf(buf, sizeof(buf), "%s/%s", bios_dir, VGABIOS_FILENAME);
+
+ vga_bios_size = get_image_size(buf);
+ if (vga_bios_size <= 0 || vga_bios_size > 65536)
+ goto vga_bios_error;
+ vga_bios_offset = qemu_ram_alloc(65536);
+
+ ret = load_image(buf, phys_ram_base + vga_bios_offset);
+ if (ret != vga_bios_size) {
+ vga_bios_error:
+ fprintf(stderr, "qemu: could not load VGA BIOS '%s'\n", buf);
+ exit(1);
+ }
+ }
- /* setup basic memory access */
- cpu_register_physical_memory(0xc0000, 0x10000,
+ /* setup basic memory access */
+ cpu_register_physical_memory(0xc0000, 0x10000,
vga_bios_offset | IO_MEM_ROM);
- }
/* map the last 128KB of the BIOS in ISA space */
isa_bios_size = bios_size;
@@ -943,29 +943,35 @@
register_ioport_write(0xf0, 1, 1, ioportF0_write, NULL);
- if (cirrus_vga_enabled) {
- if (pci_enabled) {
- pci_cirrus_vga_init(pci_bus,
+ switch(vgahw_model) {
+ case VGAHW_NONE:
+ break;
+ case VGAHW_CIRRUS:
+ if (pci_enabled)
+ pci_cirrus_vga_init(pci_bus,
+ phys_ram_base + vga_ram_addr,
+ vga_ram_addr, vga_ram_size);
+ else
+ isa_cirrus_vga_init(phys_ram_base + vga_ram_addr,
+ vga_ram_addr, vga_ram_size);
+ break;
+ case VGAHW_VMWARE:
+ if (pci_enabled)
+ pci_vmsvga_init(pci_bus,
phys_ram_base + vga_ram_addr,
vga_ram_addr, vga_ram_size);
- } else {
- isa_cirrus_vga_init(phys_ram_base + vga_ram_addr,
- vga_ram_addr, vga_ram_size);
- }
- } else if (vmsvga_enabled) {
- if (pci_enabled)
- pci_vmsvga_init(pci_bus, phys_ram_base + vga_ram_addr,
- vga_ram_addr, vga_ram_size);
- else
- fprintf(stderr, "%s: vmware_vga: no PCI bus\n", __FUNCTION__);
- } else if (std_vga_enabled) {
- if (pci_enabled) {
- pci_vga_init(pci_bus, phys_ram_base + vga_ram_addr,
- vga_ram_addr, vga_ram_size, 0, 0);
- } else {
- isa_vga_init(phys_ram_base + vga_ram_addr,
- vga_ram_addr, vga_ram_size);
- }
+ else
+ fprintf(stderr, "%s: vmware_vga: no PCI bus\n", __FUNCTION__);
+ break;
+ case VGAHW_STD:
+ if (pci_enabled)
+ pci_vga_init(pci_bus,
+ phys_ram_base + vga_ram_addr,
+ vga_ram_addr, vga_ram_size, 0, 0);
+ else
+ isa_vga_init(phys_ram_base + vga_ram_addr,
+ vga_ram_addr, vga_ram_size);
+ break;
}
rtc_state = rtc_init(0x70, i8259[8]);
@@ -1146,7 +1152,7 @@
.name = "pc",
.desc = "Standard PC",
.init = pc_init_pci,
- .ram_require = VGA_RAM_SIZE + PC_MAX_BIOS_SIZE,
+ .ram_require = PC_MAX_BIOS_SIZE,
.max_cpus = 255,
};
@@ -1154,6 +1160,6 @@
.name = "isapc",
.desc = "ISA-only PC",
.init = pc_init_isa,
- .ram_require = VGA_RAM_SIZE + PC_MAX_BIOS_SIZE,
+ .ram_require = PC_MAX_BIOS_SIZE,
.max_cpus = 1,
};
diff -uNr trunk/hw/pc.h trunk-patched/hw/pc.h
--- trunk/hw/pc.h 2009-01-19 18:04:34.518294675 -0500
+++ trunk-patched/hw/pc.h 2009-01-19 18:12:25.599288142 -0500
@@ -126,12 +126,6 @@
extern enum vga_retrace_method vga_retrace_method;
-#ifndef TARGET_SPARC
-#define VGA_RAM_SIZE (8192 * 1024)
-#else
-#define VGA_RAM_SIZE (9 * 1024 * 1024)
-#endif
-
int isa_vga_init(uint8_t *vga_ram_base,
unsigned long vga_ram_offset, int vga_ram_size);
int pci_vga_init(PCIBus *bus, uint8_t *vga_ram_base,
diff -uNr trunk/hw/ppc_chrp.c trunk-patched/hw/ppc_chrp.c
--- trunk/hw/ppc_chrp.c 2009-01-19 18:04:34.414289295 -0500
+++ trunk-patched/hw/ppc_chrp.c 2009-01-19 18:12:25.600286867 -0500
@@ -334,6 +334,6 @@
.name = "mac99",
.desc = "Mac99 based PowerMAC",
.init = ppc_core99_init,
- .ram_require = BIOS_SIZE + VGA_RAM_SIZE,
+ .ram_require = BIOS_SIZE,
.max_cpus = MAX_CPUS,
};
diff -uNr trunk/hw/ppc_oldworld.c trunk-patched/hw/ppc_oldworld.c
--- trunk/hw/ppc_oldworld.c 2009-01-19 18:04:34.505293366 -0500
+++ trunk-patched/hw/ppc_oldworld.c 2009-01-19 18:12:25.601287409 -0500
@@ -383,6 +383,6 @@
.name = "g3beige",
.desc = "Heathrow based PowerMAC",
.init = ppc_heathrow_init,
- .ram_require = BIOS_SIZE + VGA_BIOS_SIZE + VGA_RAM_SIZE,
+ .ram_require = BIOS_SIZE + VGA_BIOS_SIZE,
.max_cpus = MAX_CPUS,
};
diff -uNr trunk/hw/ppc_prep.c trunk-patched/hw/ppc_prep.c
--- trunk/hw/ppc_prep.c 2009-01-19 18:04:34.430293137 -0500
+++ trunk-patched/hw/ppc_prep.c 2009-01-19 18:12:25.602286553 -0500
@@ -760,6 +760,6 @@
.name = "prep",
.desc = "PowerPC PREP platform",
.init = ppc_prep_init,
- .ram_require = BIOS_SIZE + VGA_RAM_SIZE,
+ .ram_require = BIOS_SIZE,
.max_cpus = MAX_CPUS,
};
diff -uNr trunk/hw/sun4u.c trunk-patched/hw/sun4u.c
--- trunk/hw/sun4u.c 2009-01-19 18:04:34.486295094 -0500
+++ trunk-patched/hw/sun4u.c 2009-01-19 18:12:25.603302111 -0500
@@ -644,7 +644,7 @@
.name = "sun4u",
.desc = "Sun4u platform",
.init = sun4u_init,
- .ram_require = PROM_SIZE_MAX + VGA_RAM_SIZE,
+ .ram_require = PROM_SIZE_MAX,
.nodisk_ok = 1,
.max_cpus = 1, // XXX for now
};
@@ -653,7 +653,7 @@
.name = "sun4v",
.desc = "Sun4v platform",
.init = sun4v_init,
- .ram_require = PROM_SIZE_MAX + VGA_RAM_SIZE,
+ .ram_require = PROM_SIZE_MAX,
.nodisk_ok = 1,
.max_cpus = 1, // XXX for now
};
@@ -662,7 +662,7 @@
.name = "Niagara",
.desc = "Sun4v platform, Niagara",
.init = niagara_init,
- .ram_require = PROM_SIZE_MAX + VGA_RAM_SIZE,
+ .ram_require = PROM_SIZE_MAX,
.nodisk_ok = 1,
.max_cpus = 1, // XXX for now
};
diff -uNr trunk/hw/vga.c trunk-patched/hw/vga.c
--- trunk/hw/vga.c 2009-01-19 18:04:34.484284722 -0500
+++ trunk-patched/hw/vga.c 2009-01-19 18:12:25.605321282 -0500
@@ -36,6 +36,11 @@
//#define DEBUG_BOCHS_VBE
+// PCI 0x04: command(word), 0x06(word): status
+#define PCI_COMMAND_IOACCESS 0x0001
+#define PCI_COMMAND_MEMACCESS 0x0002
+#define PCI_COMMAND_BUSMASTER 0x0004
+
/* force some bits to zero */
const uint8_t sr_mask[8] = {
(uint8_t)~0xfc,
@@ -2246,10 +2251,20 @@
cpu_register_physical_memory(addr, s->bios_size, s->bios_offset);
} else {
cpu_register_physical_memory(addr, s->vram_size, s->vram_offset);
+ s->lfb_addr = addr;
+ s->lfb_end = addr + size;
+#ifdef CONFIG_BOCHS_VBE
+ s->vbe_regs[VBE_DISPI_INDEX_LFB_ADDRESS_H] = s->lfb_addr >> 16;
+ s->vbe_regs[VBE_DISPI_INDEX_LFB_ADDRESS_L] = s->lfb_addr & 0xFFFF;
+ s->vbe_regs[VBE_DISPI_INDEX_VIDEO_MEMORY_64K] = s->vram_size >> 16;
+#endif
+
+ if (size != s->vram_size)
+ fprintf(stderr, "vga map with size %x != %x\n", size,
s->vram_size);
}
s->map_addr = addr;
- s->map_end = addr + VGA_RAM_SIZE;
+ s->map_end = addr + s->vram_size;
vga_dirty_log_start(s);
}
@@ -2509,6 +2524,7 @@
pci_conf[0x01] = 0x12;
pci_conf[0x02] = 0x11;
pci_conf[0x03] = 0x11;
+ pci_conf[0x04] = PCI_COMMAND_IOACCESS | PCI_COMMAND_MEMACCESS /* |
PCI_COMMAND_BUSMASTER */;
pci_conf[0x0a] = 0x00; // VGA controller
pci_conf[0x0b] = 0x03;
pci_conf[0x0e] = 0x00; // header_type
diff -uNr trunk/hw/vga_int.h trunk-patched/hw/vga_int.h
--- trunk/hw/vga_int.h 2009-01-19 18:04:34.421284633 -0500
+++ trunk-patched/hw/vga_int.h 2009-01-19 18:12:25.606286414 -0500
@@ -30,36 +30,39 @@
/* bochs VBE support */
#define CONFIG_BOCHS_VBE
-#define VBE_DISPI_MAX_XRES 1600
-#define VBE_DISPI_MAX_YRES 1200
-#define VBE_DISPI_MAX_BPP 32
-
-#define VBE_DISPI_INDEX_ID 0x0
-#define VBE_DISPI_INDEX_XRES 0x1
-#define VBE_DISPI_INDEX_YRES 0x2
-#define VBE_DISPI_INDEX_BPP 0x3
-#define VBE_DISPI_INDEX_ENABLE 0x4
-#define VBE_DISPI_INDEX_BANK 0x5
-#define VBE_DISPI_INDEX_VIRT_WIDTH 0x6
-#define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7
-#define VBE_DISPI_INDEX_X_OFFSET 0x8
-#define VBE_DISPI_INDEX_Y_OFFSET 0x9
-#define VBE_DISPI_INDEX_NB 0xa
-
-#define VBE_DISPI_ID0 0xB0C0
-#define VBE_DISPI_ID1 0xB0C1
-#define VBE_DISPI_ID2 0xB0C2
-#define VBE_DISPI_ID3 0xB0C3
-#define VBE_DISPI_ID4 0xB0C4
-
-#define VBE_DISPI_DISABLED 0x00
-#define VBE_DISPI_ENABLED 0x01
-#define VBE_DISPI_GETCAPS 0x02
-#define VBE_DISPI_8BIT_DAC 0x20
-#define VBE_DISPI_LFB_ENABLED 0x40
-#define VBE_DISPI_NOCLEARMEM 0x80
+#define VBE_DISPI_MAX_XRES 2560
+#define VBE_DISPI_MAX_YRES 1600
+#define VBE_DISPI_MAX_BPP 32
+
+#define VBE_DISPI_INDEX_ID 0x0
+#define VBE_DISPI_INDEX_XRES 0x1
+#define VBE_DISPI_INDEX_YRES 0x2
+#define VBE_DISPI_INDEX_BPP 0x3
+#define VBE_DISPI_INDEX_ENABLE 0x4
+#define VBE_DISPI_INDEX_BANK 0x5
+#define VBE_DISPI_INDEX_VIRT_WIDTH 0x6
+#define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7
+#define VBE_DISPI_INDEX_X_OFFSET 0x8
+#define VBE_DISPI_INDEX_Y_OFFSET 0x9
+#define VBE_DISPI_INDEX_VIDEO_MEMORY_64K 0xa
+#define VBE_DISPI_INDEX_LFB_ADDRESS_H 0xb
+#define VBE_DISPI_INDEX_LFB_ADDRESS_L 0xc
+#define VBE_DISPI_INDEX_NB 0xd
+
+#define VBE_DISPI_ID0 0xB0C0
+#define VBE_DISPI_ID1 0xB0C1
+#define VBE_DISPI_ID2 0xB0C2
+#define VBE_DISPI_ID3 0xB0C3
+#define VBE_DISPI_ID4 0xB0C4
+
+#define VBE_DISPI_DISABLED 0x00
+#define VBE_DISPI_ENABLED 0x01
+#define VBE_DISPI_GETCAPS 0x02
+#define VBE_DISPI_8BIT_DAC 0x20
+#define VBE_DISPI_LFB_ENABLED 0x40
+#define VBE_DISPI_NOCLEARMEM 0x80
-#define VBE_DISPI_LFB_PHYSICAL_ADDRESS 0xE0000000
+#define VBE_DISPI_LFB_PHYSICAL_ADDRESS 0xE0000000
#ifdef CONFIG_BOCHS_VBE
diff -uNr trunk/sysemu.h trunk-patched/sysemu.h
--- trunk/sysemu.h 2009-01-19 18:04:55.735316222 -0500
+++ trunk-patched/sysemu.h 2009-01-19 18:12:25.608286519 -0500
@@ -81,10 +81,12 @@
/* SLIRP */
void do_info_slirp(void);
+typedef enum {
+ VGAHW_NONE, VGAHW_CIRRUS, VGAHW_STD, VGAHW_VMWARE
+} VGAHardwareModel;
+
+extern VGAHardwareModel vgahw_model;
extern int bios_size;
-extern int cirrus_vga_enabled;
-extern int std_vga_enabled;
-extern int vmsvga_enabled;
extern int graphic_width;
extern int graphic_height;
extern int graphic_depth;
diff -uNr trunk/vl.c trunk-patched/vl.c
--- trunk/vl.c 2009-01-19 18:04:55.701293559 -0500
+++ trunk-patched/vl.c 2009-01-19 18:12:25.613287760 -0500
@@ -185,7 +185,8 @@
to store the VM snapshots */
DriveInfo drives_table[MAX_DRIVES+1];
int nb_drives;
-static int vga_ram_size;
+static int vga_ram_size = 0;
+VGAHardwareModel vgahw_model = VGAHW_CIRRUS;
enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
static DisplayState *display_state;
int nographic;
@@ -3874,7 +3875,10 @@
" use -soundhw ? to get the list of supported
cards\n"
" use -soundhw all to enable all of them\n"
#endif
+#if !defined(TARGET_SPARC) || defined(TARGET_SPARC64)
"-vga [std|cirrus|vmware|none]\n"
+ "-videoram set amount of memory available to virtual video
adapter\n"
+#endif
" select video card type\n"
"-localtime set the real time clock to local time
[default=utc]\n"
"-full-screen start in full screen\n"
@@ -4062,6 +4066,7 @@
QEMU_OPTION_localtime,
QEMU_OPTION_g,
QEMU_OPTION_vga,
+ QEMU_OPTION_videoram,
QEMU_OPTION_echr,
QEMU_OPTION_monitor,
QEMU_OPTION_serial,
@@ -4174,6 +4179,7 @@
#endif
{ "localtime", 0, QEMU_OPTION_localtime },
{ "vga", HAS_ARG, QEMU_OPTION_vga },
+ { "videoram", HAS_ARG, QEMU_OPTION_videoram },
{ "echr", HAS_ARG, QEMU_OPTION_echr },
{ "monitor", HAS_ARG, QEMU_OPTION_monitor },
{ "serial", HAS_ARG, QEMU_OPTION_serial },
@@ -4410,21 +4416,13 @@
const char *opts;
if (strstart(p, "std", &opts)) {
- std_vga_enabled = 1;
- cirrus_vga_enabled = 0;
- vmsvga_enabled = 0;
+ vgahw_model = VGAHW_STD;
} else if (strstart(p, "cirrus", &opts)) {
- cirrus_vga_enabled = 1;
- std_vga_enabled = 0;
- vmsvga_enabled = 0;
+ vgahw_model = VGAHW_CIRRUS;
} else if (strstart(p, "vmware", &opts)) {
- cirrus_vga_enabled = 0;
- std_vga_enabled = 0;
- vmsvga_enabled = 1;
+ vgahw_model = VGAHW_VMWARE;
} else if (strstart(p, "none", &opts)) {
- cirrus_vga_enabled = 0;
- std_vga_enabled = 0;
- vmsvga_enabled = 0;
+ vgahw_model = VGAHW_NONE;
} else {
invalid_vga:
fprintf(stderr, "Unknown vga type: %s\n", p);
@@ -4571,7 +4569,6 @@
cpu_model = NULL;
initrd_filename = NULL;
ram_size = 0;
- vga_ram_size = VGA_RAM_SIZE;
#ifdef CONFIG_GDBSTUB
use_gdbstub = 0;
gdbstub_port = DEFAULT_GDBSTUB_PORT;
@@ -4933,6 +4930,13 @@
case QEMU_OPTION_vga:
select_vgahw (optarg);
break;
+ case QEMU_OPTION_videoram:
+ {
+ char *ptr;
+ vga_ram_size = strtol(optarg,&ptr,10);
+ vga_ram_size *= 1024 * 1024;
+ }
+ break;
case QEMU_OPTION_g:
{
const char *p;
@@ -5361,7 +5365,30 @@
exit(1);
/* init the memory */
- phys_ram_size = machine->ram_require & ~RAMSIZE_FIXED;
+
+ /* Set defaults according to model, if -videoram has not been used. */
+#if !defined(TARGET_SPARC) || defined(TARGET_SPARC64)
+ if (vga_ram_size && vgahw_model == VGAHW_NONE) {
+ fprintf(stderr, "Nonsensical options: -vga none & -videoram used
together. \n");
+ vga_ram_size = 0;
+ } else if (!vga_ram_size && vgahw_model != VGAHW_NONE) {
+ switch(vgahw_model) {
+ case VGAHW_CIRRUS:
+ vga_ram_size=4 * 1024 * 1024;
+ break;
+ case VGAHW_STD:
+ vga_ram_size=8 * 1024 * 1024;
+ break;
+ case VGAHW_VMWARE:
+ vga_ram_size=8 * 1024 * 1024;
+ break;
+ }
+ }
+#else
+ vga_ram_size = 9 * 1024 * 1024;
+#endif
+
+ phys_ram_size = (machine->ram_require + vga_ram_size) & ~RAMSIZE_FIXED;
if (machine->ram_require & RAMSIZE_FIXED) {
if (ram_size > 0) {
Re: [Qemu-devel] [PATCH] [RFC] Variable video ram size option, Avi Kivity, 2009/01/11
- Re: [Qemu-devel] [PATCH] [RFC] Variable video ram size option, Trolle Selander, 2009/01/12
- Re: [Qemu-devel] [PATCH] [RFC] Variable video ram size option, Paul Brook, 2009/01/14
- Re: [Qemu-devel] [PATCH] [RFC] Variable video ram size option, Trolle Selander, 2009/01/14
- Re: [Qemu-devel] [PATCH] [RFC] Variable video ram size option, Paul Brook, 2009/01/14
- Re: [Qemu-devel] [PATCH] [RFC] Variable video ram size option, Trolle Selander, 2009/01/14
- Re: [Qemu-devel] [PATCH] [RFC] Variable video ram size option, Jamie Lokier, 2009/01/15
- Re: [Qemu-devel] [PATCH] [RFC] Variable video ram size option, Rene Rebe, 2009/01/15