mirror of https://github.com/xemu-project/xemu.git
vl: Use xemu settings to derive launch params
This commit is contained in:
parent
0245d3bee9
commit
658b354723
125
softmmu/vl.c
125
softmmu/vl.c
|
@ -113,6 +113,9 @@
|
||||||
#include "sysemu/iothread.h"
|
#include "sysemu/iothread.h"
|
||||||
#include "qemu/guest-random.h"
|
#include "qemu/guest-random.h"
|
||||||
|
|
||||||
|
#include "ui/xemu-settings.h"
|
||||||
|
#include "ui/xemu-notifications.h"
|
||||||
|
|
||||||
#define MAX_VIRTIO_CONSOLES 1
|
#define MAX_VIRTIO_CONSOLES 1
|
||||||
|
|
||||||
static const char *data_dir[16];
|
static const char *data_dir[16];
|
||||||
|
@ -126,7 +129,7 @@ bool enable_mlock = false;
|
||||||
bool enable_cpu_pm = false;
|
bool enable_cpu_pm = false;
|
||||||
int nb_nics;
|
int nb_nics;
|
||||||
NICInfo nd_table[MAX_NICS];
|
NICInfo nd_table[MAX_NICS];
|
||||||
int autostart;
|
int autostart = 1;
|
||||||
static enum {
|
static enum {
|
||||||
RTC_BASE_UTC,
|
RTC_BASE_UTC,
|
||||||
RTC_BASE_LOCALTIME,
|
RTC_BASE_LOCALTIME,
|
||||||
|
@ -2812,6 +2815,17 @@ static void create_default_memdev(MachineState *ms, const char *path)
|
||||||
&error_fatal);
|
&error_fatal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return 1 if file fails to open */
|
||||||
|
static int xemu_check_file(const char *path)
|
||||||
|
{
|
||||||
|
FILE *fd = fopen(path, "rb");
|
||||||
|
if (fd == NULL) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
fclose(fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void qemu_init(int argc, char **argv, char **envp)
|
void qemu_init(int argc, char **argv, char **envp)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -2857,6 +2871,113 @@ void qemu_init(int argc, char **argv, char **envp)
|
||||||
error_init(argv[0]);
|
error_init(argv[0]);
|
||||||
module_call_init(MODULE_INIT_TRACE);
|
module_call_init(MODULE_INIT_TRACE);
|
||||||
|
|
||||||
|
//
|
||||||
|
// FIXME: This is a hack to get QEMU to load correct machine and properties
|
||||||
|
// very early, and handle some basic error cases without hooking QEMU error
|
||||||
|
// reporting. This should be replaced eventually, but is "good enough" for
|
||||||
|
// now.
|
||||||
|
//
|
||||||
|
xemu_settings_load();
|
||||||
|
char *fake_argv[32];
|
||||||
|
memset(fake_argv, 0, 32 * sizeof(char*));
|
||||||
|
|
||||||
|
int fake_argc = 0;
|
||||||
|
fake_argv[fake_argc++] = argv[0];
|
||||||
|
fake_argv[fake_argc++] = strdup("-cpu");
|
||||||
|
fake_argv[fake_argc++] = strdup("pentium3");
|
||||||
|
fake_argv[fake_argc++] = strdup("-machine");
|
||||||
|
|
||||||
|
const char *bootrom_path;
|
||||||
|
xemu_settings_get_string(XEMU_SETTINGS_SYSTEM_BOOTROM_PATH, &bootrom_path);
|
||||||
|
if (strlen(bootrom_path) > 0 && xemu_check_file(bootrom_path)) {
|
||||||
|
char *msg = g_strdup_printf("Failed to open BootROM file '%s'. Please check machine settings.", bootrom_path);
|
||||||
|
xemu_queue_error_message(msg);
|
||||||
|
g_free(msg);
|
||||||
|
bootrom_path = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *eeprom_path;
|
||||||
|
xemu_settings_get_string(XEMU_SETTINGS_SYSTEM_EEPROM_PATH, &eeprom_path);
|
||||||
|
if (strlen(eeprom_path) > 0 && xemu_check_file(eeprom_path)) {
|
||||||
|
char *msg = g_strdup_printf("Failed to open EEPROM file '%s'. Please check machine settings.", eeprom_path);
|
||||||
|
xemu_queue_error_message(msg);
|
||||||
|
g_free(msg);
|
||||||
|
eeprom_path = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
int short_animation;
|
||||||
|
xemu_settings_get_bool(XEMU_SETTINGS_SYSTEM_SHORTANIM, &short_animation);
|
||||||
|
|
||||||
|
fake_argv[fake_argc++] = g_strdup_printf("xbox%s%s%s%s",
|
||||||
|
strlen(bootrom_path) > 0 ? g_strdup_printf(",bootrom=%s", bootrom_path) : "", // Leak
|
||||||
|
strlen(eeprom_path) > 0 ? g_strdup_printf(",eeprom=%s", eeprom_path) : "", // Leak
|
||||||
|
short_animation ? ",short-animation" : "",
|
||||||
|
",kernel-irqchip=off"
|
||||||
|
);
|
||||||
|
|
||||||
|
const char *flash_path;
|
||||||
|
xemu_settings_get_string(XEMU_SETTINGS_SYSTEM_FLASH_PATH, &flash_path);
|
||||||
|
autostart = 0; // Do not auto-start the machine without a valid BIOS file
|
||||||
|
if (strlen(flash_path) > 0) {
|
||||||
|
if (xemu_check_file(flash_path)) {
|
||||||
|
char *msg = g_strdup_printf("Failed to open flash file '%s'. Please check machine settings.", flash_path);
|
||||||
|
xemu_queue_error_message(msg);
|
||||||
|
g_free(msg);
|
||||||
|
} else {
|
||||||
|
fake_argv[fake_argc++] = strdup("-bios");
|
||||||
|
fake_argv[fake_argc++] = strdup(flash_path);
|
||||||
|
autostart = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int mem;
|
||||||
|
xemu_settings_get_int(XEMU_SETTINGS_SYSTEM_MEMORY, &mem);
|
||||||
|
fake_argv[fake_argc++] = strdup("-m");
|
||||||
|
fake_argv[fake_argc++] = g_strdup_printf("%d", mem);
|
||||||
|
|
||||||
|
const char *hdd_path;
|
||||||
|
xemu_settings_get_string(XEMU_SETTINGS_SYSTEM_HDD_PATH, &hdd_path);
|
||||||
|
if (strlen(hdd_path) > 0) {
|
||||||
|
if (xemu_check_file(hdd_path)) {
|
||||||
|
char *msg = g_strdup_printf("Failed to open hard disk image file '%s'. Please check machine settings.", hdd_path);
|
||||||
|
xemu_queue_error_message(msg);
|
||||||
|
g_free(msg);
|
||||||
|
} else {
|
||||||
|
fake_argv[fake_argc++] = strdup("-drive");
|
||||||
|
fake_argv[fake_argc++] = g_strdup_printf("index=0,media=disk,file=%s%s",
|
||||||
|
hdd_path,
|
||||||
|
strlen(hdd_path) > 0 ? ",locked" : "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *dvd_path;
|
||||||
|
xemu_settings_get_string(XEMU_SETTINGS_SYSTEM_DVD_PATH, &dvd_path);
|
||||||
|
if (strlen(dvd_path) > 0) {
|
||||||
|
if (xemu_check_file(dvd_path)) {
|
||||||
|
char *msg = g_strdup_printf("Failed to open DVD image file '%s'. Please check machine settings.", dvd_path);
|
||||||
|
xemu_queue_error_message(msg);
|
||||||
|
g_free(msg);
|
||||||
|
} else {
|
||||||
|
fake_argv[fake_argc++] = strdup("-drive");
|
||||||
|
fake_argv[fake_argc++] = g_strdup_printf("index=1,media=cdrom,file=%s",
|
||||||
|
dvd_path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fake_argv[fake_argc++] = strdup("-display");
|
||||||
|
fake_argv[fake_argc++] = strdup("xemu");
|
||||||
|
|
||||||
|
printf("Created QEMU launch parameters: ");
|
||||||
|
for (int i = 0; i < fake_argc; i++) {
|
||||||
|
printf("%s ", fake_argv[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
argc = fake_argc;
|
||||||
|
argv = fake_argv;
|
||||||
|
|
||||||
|
/**************************************************************************/
|
||||||
|
|
||||||
qemu_init_cpu_list();
|
qemu_init_cpu_list();
|
||||||
qemu_init_cpu_loop();
|
qemu_init_cpu_loop();
|
||||||
|
|
||||||
|
@ -2922,7 +3043,9 @@ void qemu_init(int argc, char **argv, char **envp)
|
||||||
|
|
||||||
bdrv_init_with_whitelist();
|
bdrv_init_with_whitelist();
|
||||||
|
|
||||||
|
#ifndef XBOX
|
||||||
autostart = 1;
|
autostart = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* first pass of option parsing */
|
/* first pass of option parsing */
|
||||||
optind = 1;
|
optind = 1;
|
||||||
|
|
Loading…
Reference in New Issue