Commit e8b2a1c648c095b5d431c50668709b714843ebb1
Committed by
Anthony Liguori
1 parent
21d58b57
Add a pc-0-10 machine type for compatibility with 0.10.x
Add a pc-0-10 machine type to allow a pc machine to be created with virtio block and console devices compatibility with qemu-0.10.x. Signed-off-by: Mark McLoughlin <markmc@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Showing
1 changed file
with
53 additions
and
6 deletions
hw/pc.c
@@ -1081,12 +1081,20 @@ static CPUState *pc_new_cpu(const char *cpu_model) | @@ -1081,12 +1081,20 @@ static CPUState *pc_new_cpu(const char *cpu_model) | ||
1081 | return env; | 1081 | return env; |
1082 | } | 1082 | } |
1083 | 1083 | ||
1084 | +enum { | ||
1085 | + COMPAT_DEFAULT = 0, | ||
1086 | + COMPAT_0_10, /* compatible with qemu 0.10.x */ | ||
1087 | +}; | ||
1088 | + | ||
1084 | /* PC hardware initialisation */ | 1089 | /* PC hardware initialisation */ |
1085 | static void pc_init1(ram_addr_t ram_size, | 1090 | static void pc_init1(ram_addr_t ram_size, |
1086 | const char *boot_device, | 1091 | const char *boot_device, |
1087 | - const char *kernel_filename, const char *kernel_cmdline, | 1092 | + const char *kernel_filename, |
1093 | + const char *kernel_cmdline, | ||
1088 | const char *initrd_filename, | 1094 | const char *initrd_filename, |
1089 | - int pci_enabled, const char *cpu_model) | 1095 | + const char *cpu_model, |
1096 | + int pci_enabled, | ||
1097 | + int compat_level) | ||
1090 | { | 1098 | { |
1091 | char *filename; | 1099 | char *filename; |
1092 | int ret, linux_boot, i; | 1100 | int ret, linux_boot, i; |
@@ -1104,6 +1112,7 @@ static void pc_init1(ram_addr_t ram_size, | @@ -1104,6 +1112,7 @@ static void pc_init1(ram_addr_t ram_size, | ||
1104 | BlockDriverState *fd[MAX_FD]; | 1112 | BlockDriverState *fd[MAX_FD]; |
1105 | int using_vga = cirrus_vga_enabled || std_vga_enabled || vmsvga_enabled; | 1113 | int using_vga = cirrus_vga_enabled || std_vga_enabled || vmsvga_enabled; |
1106 | void *fw_cfg; | 1114 | void *fw_cfg; |
1115 | + const char *virtio_blk_name, *virtio_console_name; | ||
1107 | 1116 | ||
1108 | if (ram_size >= 0xe0000000 ) { | 1117 | if (ram_size >= 0xe0000000 ) { |
1109 | above_4g_mem_size = ram_size - 0xe0000000; | 1118 | above_4g_mem_size = ram_size - 0xe0000000; |
@@ -1394,13 +1403,26 @@ static void pc_init1(ram_addr_t ram_size, | @@ -1394,13 +1403,26 @@ static void pc_init1(ram_addr_t ram_size, | ||
1394 | } | 1403 | } |
1395 | } | 1404 | } |
1396 | 1405 | ||
1406 | + switch (compat_level) { | ||
1407 | + case COMPAT_DEFAULT: | ||
1408 | + default: | ||
1409 | + virtio_blk_name = "virtio-blk-pci"; | ||
1410 | + virtio_console_name = "virtio-console-pci"; | ||
1411 | + break; | ||
1412 | + | ||
1413 | + case COMPAT_0_10: | ||
1414 | + virtio_blk_name = "virtio-blk-pci-0-10"; | ||
1415 | + virtio_console_name = "virtio-console-pci-0-10"; | ||
1416 | + break; | ||
1417 | + } | ||
1418 | + | ||
1397 | /* Add virtio block devices */ | 1419 | /* Add virtio block devices */ |
1398 | if (pci_enabled) { | 1420 | if (pci_enabled) { |
1399 | int index; | 1421 | int index; |
1400 | int unit_id = 0; | 1422 | int unit_id = 0; |
1401 | 1423 | ||
1402 | while ((index = drive_get_index(IF_VIRTIO, 0, unit_id)) != -1) { | 1424 | while ((index = drive_get_index(IF_VIRTIO, 0, unit_id)) != -1) { |
1403 | - pci_dev = pci_create("virtio-blk-pci", | 1425 | + pci_dev = pci_create(virtio_blk_name, |
1404 | drives_table[index].devaddr); | 1426 | drives_table[index].devaddr); |
1405 | qdev_init(&pci_dev->qdev); | 1427 | qdev_init(&pci_dev->qdev); |
1406 | unit_id++; | 1428 | unit_id++; |
@@ -1417,7 +1439,7 @@ static void pc_init1(ram_addr_t ram_size, | @@ -1417,7 +1439,7 @@ static void pc_init1(ram_addr_t ram_size, | ||
1417 | if (pci_enabled) { | 1439 | if (pci_enabled) { |
1418 | for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) { | 1440 | for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) { |
1419 | if (virtcon_hds[i]) { | 1441 | if (virtcon_hds[i]) { |
1420 | - pci_create_simple(pci_bus, -1, "virtio-console-pci"); | 1442 | + pci_create_simple(pci_bus, -1, virtio_console_name); |
1421 | } | 1443 | } |
1422 | } | 1444 | } |
1423 | } | 1445 | } |
@@ -1432,7 +1454,8 @@ static void pc_init_pci(ram_addr_t ram_size, | @@ -1432,7 +1454,8 @@ static void pc_init_pci(ram_addr_t ram_size, | ||
1432 | { | 1454 | { |
1433 | pc_init1(ram_size, boot_device, | 1455 | pc_init1(ram_size, boot_device, |
1434 | kernel_filename, kernel_cmdline, | 1456 | kernel_filename, kernel_cmdline, |
1435 | - initrd_filename, 1, cpu_model); | 1457 | + initrd_filename, cpu_model, |
1458 | + 1, COMPAT_DEFAULT); | ||
1436 | } | 1459 | } |
1437 | 1460 | ||
1438 | static void pc_init_isa(ram_addr_t ram_size, | 1461 | static void pc_init_isa(ram_addr_t ram_size, |
@@ -1444,7 +1467,21 @@ static void pc_init_isa(ram_addr_t ram_size, | @@ -1444,7 +1467,21 @@ static void pc_init_isa(ram_addr_t ram_size, | ||
1444 | { | 1467 | { |
1445 | pc_init1(ram_size, boot_device, | 1468 | pc_init1(ram_size, boot_device, |
1446 | kernel_filename, kernel_cmdline, | 1469 | kernel_filename, kernel_cmdline, |
1447 | - initrd_filename, 0, cpu_model); | 1470 | + initrd_filename, cpu_model, |
1471 | + 0, COMPAT_DEFAULT); | ||
1472 | +} | ||
1473 | + | ||
1474 | +static void pc_init_pci_0_10(ram_addr_t ram_size, | ||
1475 | + const char *boot_device, | ||
1476 | + const char *kernel_filename, | ||
1477 | + const char *kernel_cmdline, | ||
1478 | + const char *initrd_filename, | ||
1479 | + const char *cpu_model) | ||
1480 | +{ | ||
1481 | + pc_init1(ram_size, boot_device, | ||
1482 | + kernel_filename, kernel_cmdline, | ||
1483 | + initrd_filename, cpu_model, | ||
1484 | + 1, COMPAT_0_10); | ||
1448 | } | 1485 | } |
1449 | 1486 | ||
1450 | /* set CMOS shutdown status register (index 0xF) as S3_resume(0xFE) | 1487 | /* set CMOS shutdown status register (index 0xF) as S3_resume(0xFE) |
@@ -1470,10 +1507,20 @@ static QEMUMachine isapc_machine = { | @@ -1470,10 +1507,20 @@ static QEMUMachine isapc_machine = { | ||
1470 | .max_cpus = 1, | 1507 | .max_cpus = 1, |
1471 | }; | 1508 | }; |
1472 | 1509 | ||
1510 | +static QEMUMachine pc_0_10_machine = { | ||
1511 | + .name = "pc-0-10", | ||
1512 | + .desc = "Standard PC compatible with qemu 0.10.x", | ||
1513 | + .init = pc_init_pci_0_10, | ||
1514 | + .max_cpus = 255, | ||
1515 | +}; | ||
1516 | + | ||
1473 | static void pc_machine_init(void) | 1517 | static void pc_machine_init(void) |
1474 | { | 1518 | { |
1475 | qemu_register_machine(&pc_machine); | 1519 | qemu_register_machine(&pc_machine); |
1476 | qemu_register_machine(&isapc_machine); | 1520 | qemu_register_machine(&isapc_machine); |
1521 | + | ||
1522 | + /* For compatibility with 0.10.x */ | ||
1523 | + qemu_register_machine(&pc_0_10_machine); | ||
1477 | } | 1524 | } |
1478 | 1525 | ||
1479 | machine_init(pc_machine_init); | 1526 | machine_init(pc_machine_init); |