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 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 1089 /* PC hardware initialisation */
1085 1090 static void pc_init1(ram_addr_t ram_size,
1086 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 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 1099 char *filename;
1092 1100 int ret, linux_boot, i;
... ... @@ -1104,6 +1112,7 @@ static void pc_init1(ram_addr_t ram_size,
1104 1112 BlockDriverState *fd[MAX_FD];
1105 1113 int using_vga = cirrus_vga_enabled || std_vga_enabled || vmsvga_enabled;
1106 1114 void *fw_cfg;
  1115 + const char *virtio_blk_name, *virtio_console_name;
1107 1116  
1108 1117 if (ram_size >= 0xe0000000 ) {
1109 1118 above_4g_mem_size = ram_size - 0xe0000000;
... ... @@ -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 1419 /* Add virtio block devices */
1398 1420 if (pci_enabled) {
1399 1421 int index;
1400 1422 int unit_id = 0;
1401 1423  
1402 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 1426 drives_table[index].devaddr);
1405 1427 qdev_init(&pci_dev->qdev);
1406 1428 unit_id++;
... ... @@ -1417,7 +1439,7 @@ static void pc_init1(ram_addr_t ram_size,
1417 1439 if (pci_enabled) {
1418 1440 for(i = 0; i < MAX_VIRTIO_CONSOLES; i++) {
1419 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 1454 {
1433 1455 pc_init1(ram_size, boot_device,
1434 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 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 1467 {
1445 1468 pc_init1(ram_size, boot_device,
1446 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 1487 /* set CMOS shutdown status register (index 0xF) as S3_resume(0xFE)
... ... @@ -1470,10 +1507,20 @@ static QEMUMachine isapc_machine = {
1470 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 1517 static void pc_machine_init(void)
1474 1518 {
1475 1519 qemu_register_machine(&pc_machine);
1476 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 1526 machine_init(pc_machine_init);
... ...