Commit e8b2a1c648c095b5d431c50668709b714843ebb1

Authored by Mark McLoughlin
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
@@ -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);