Revision aee1b935
b/vl.c | ||
---|---|---|
270 | 270 |
|
271 | 271 |
static int default_serial = 1; |
272 | 272 |
static int default_parallel = 1; |
273 |
static int default_virtcon = 0; |
|
273 | 274 |
static int default_monitor = 1; |
274 | 275 |
static int default_vga = 1; |
275 | 276 |
static int default_drive = 1; |
... | ... | |
280 | 281 |
} default_list[] = { |
281 | 282 |
{ .driver = "isa-serial", .flag = &default_serial }, |
282 | 283 |
{ .driver = "isa-parallel", .flag = &default_parallel }, |
284 |
{ .driver = "virtio-console-pci", .flag = &default_virtcon }, |
|
285 |
{ .driver = "virtio-console-s390", .flag = &default_virtcon }, |
|
283 | 286 |
{ .driver = "VGA", .flag = &default_vga }, |
284 | 287 |
{ .driver = "Cirrus VGA", .flag = &default_vga }, |
285 | 288 |
{ .driver = "QEMUware SVGA", .flag = &default_vga }, |
... | ... | |
4699 | 4702 |
|
4700 | 4703 |
struct device_config { |
4701 | 4704 |
enum { |
4702 |
DEV_USB, /* -usbdevice */ |
|
4703 |
DEV_BT, /* -bt */ |
|
4704 |
DEV_SERIAL, /* -serial */ |
|
4705 |
DEV_PARALLEL, /* -parallel */ |
|
4705 |
DEV_USB, /* -usbdevice */ |
|
4706 |
DEV_BT, /* -bt */ |
|
4707 |
DEV_SERIAL, /* -serial */ |
|
4708 |
DEV_PARALLEL, /* -parallel */ |
|
4709 |
DEV_VIRTCON, /* -virtioconsole */ |
|
4706 | 4710 |
} type; |
4707 | 4711 |
const char *cmdline; |
4708 | 4712 |
QTAILQ_ENTRY(device_config) next; |
... | ... | |
4778 | 4782 |
return 0; |
4779 | 4783 |
} |
4780 | 4784 |
|
4785 |
static int virtcon_parse(const char *devname) |
|
4786 |
{ |
|
4787 |
static int index = 0; |
|
4788 |
char label[32]; |
|
4789 |
|
|
4790 |
if (strcmp(devname, "none") == 0) |
|
4791 |
return 0; |
|
4792 |
if (index == MAX_VIRTIO_CONSOLES) { |
|
4793 |
fprintf(stderr, "qemu: too many virtio consoles\n"); |
|
4794 |
exit(1); |
|
4795 |
} |
|
4796 |
snprintf(label, sizeof(label), "virtcon%d", index); |
|
4797 |
virtcon_hds[index] = qemu_chr_open(label, devname, NULL); |
|
4798 |
if (!virtcon_hds[index]) { |
|
4799 |
fprintf(stderr, "qemu: could not open virtio console '%s': %s\n", |
|
4800 |
devname, strerror(errno)); |
|
4801 |
return -1; |
|
4802 |
} |
|
4803 |
index++; |
|
4804 |
return 0; |
|
4805 |
} |
|
4806 |
|
|
4781 | 4807 |
int main(int argc, char **argv, char **envp) |
4782 | 4808 |
{ |
4783 | 4809 |
const char *gdbstub_dev = NULL; |
... | ... | |
4793 | 4819 |
QemuOpts *hda_opts = NULL, *opts; |
4794 | 4820 |
int optind; |
4795 | 4821 |
const char *r, *optarg; |
4796 |
const char *virtio_consoles[MAX_VIRTIO_CONSOLES]; |
|
4797 |
int virtio_console_index; |
|
4798 | 4822 |
const char *loadvm = NULL; |
4799 | 4823 |
QEMUMachine *machine; |
4800 | 4824 |
const char *cpu_model; |
... | ... | |
4860 | 4884 |
cyls = heads = secs = 0; |
4861 | 4885 |
translation = BIOS_ATA_TRANSLATION_AUTO; |
4862 | 4886 |
|
4863 |
for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) |
|
4864 |
virtio_consoles[i] = NULL; |
|
4865 |
virtio_console_index = 0; |
|
4866 |
|
|
4867 | 4887 |
for (i = 0; i < MAX_NODES; i++) { |
4868 | 4888 |
node_mem[i] = 0; |
4869 | 4889 |
node_cpumask[i] = 0; |
... | ... | |
5322 | 5342 |
} |
5323 | 5343 |
break; |
5324 | 5344 |
case QEMU_OPTION_virtiocon: |
5325 |
if (virtio_console_index >= MAX_VIRTIO_CONSOLES) { |
|
5326 |
fprintf(stderr, "qemu: too many virtio consoles\n"); |
|
5327 |
exit(1); |
|
5328 |
} |
|
5329 |
virtio_consoles[virtio_console_index] = optarg; |
|
5330 |
virtio_console_index++; |
|
5345 |
add_device_config(DEV_VIRTCON, optarg); |
|
5346 |
default_virtcon = 0; |
|
5331 | 5347 |
break; |
5332 | 5348 |
case QEMU_OPTION_parallel: |
5333 | 5349 |
add_device_config(DEV_PARALLEL, optarg); |
... | ... | |
5527 | 5543 |
case QEMU_OPTION_nodefaults: |
5528 | 5544 |
default_serial = 0; |
5529 | 5545 |
default_parallel = 0; |
5546 |
default_virtcon = 0; |
|
5530 | 5547 |
default_monitor = 0; |
5531 | 5548 |
default_vga = 0; |
5532 | 5549 |
default_net = 0; |
... | ... | |
5830 | 5847 |
exit(1); |
5831 | 5848 |
if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0) |
5832 | 5849 |
exit(1); |
5833 |
|
|
5834 |
for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) { |
|
5835 |
const char *devname = virtio_consoles[i]; |
|
5836 |
if (devname && strcmp(devname, "none")) { |
|
5837 |
char label[32]; |
|
5838 |
snprintf(label, sizeof(label), "virtcon%d", i); |
|
5839 |
virtcon_hds[i] = qemu_chr_open(label, devname, NULL); |
|
5840 |
if (!virtcon_hds[i]) { |
|
5841 |
fprintf(stderr, "qemu: could not open virtio console '%s': %s\n", |
|
5842 |
devname, strerror(errno)); |
|
5843 |
exit(1); |
|
5844 |
} |
|
5845 |
} |
|
5846 |
} |
|
5850 |
if (foreach_device_config(DEV_VIRTCON, virtcon_parse) < 0) |
|
5851 |
exit(1); |
|
5847 | 5852 |
|
5848 | 5853 |
module_call_init(MODULE_INIT_DEVICE); |
5849 | 5854 |
|
Also available in: Unified diff