[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Re: [Qemu-devel] [PATCH V9 05/16] xen: Add xen_machine_fv



On Wed, 26 Jan 2011, Anthony Liguori wrote:
> > +static void xen_init_fv(ram_addr_t ram_size,
> > +                        const char *boot_device,
> > +                        const char *kernel_filename,
> > +                        const char *kernel_cmdline,
> > +                        const char *initrd_filename,
> > +                        const char *cpu_model)
> > +{
> > +    int i;
> > +    ram_addr_t below_4g_mem_size, above_4g_mem_size = 0;
> > +    PCIBus *pci_bus;
> > +    PCII440FXState *i440fx_state;
> > +    int piix3_devfn = -1;
> > +    qemu_irq *cpu_irq;
> > +    qemu_irq *isa_irq;
> > +    qemu_irq *i8259;
> > +    qemu_irq *cmos_s3;
> > +    qemu_irq *smi_irq;
> > +    IsaIrqState *isa_irq_state;
> > +    DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
> > +    FDCtrl *floppy_controller;
> > +    BusState *idebus[MAX_IDE_BUS];
> > +    ISADevice *rtc_state;
> > +
> > +    CPUState *env;
> > +
> > +    /* Initialize a dummy CPU */
> > +    if (cpu_model == NULL) {
> > +#ifdef TARGET_X86_64
> > +        cpu_model = "qemu64";
> > +#else
> > +        cpu_model = "qemu32";
> > +#endif
> > +    }
> > +    env = cpu_init(cpu_model);
> > +    env->halted = 1;
> > +
> > +    cpu_irq = pc_allocate_cpu_irq();
> > +    i8259 = i8259_init(cpu_irq[0]);
> > +    isa_irq_state = qemu_mallocz(sizeof (*isa_irq_state));
> > +    isa_irq_state->i8259 = i8259;
> > +
> > +    isa_irq = qemu_allocate_irqs(isa_irq_handler, isa_irq_state, 24);
> > +
> > +    pci_bus = i440fx_init(&i440fx_state,&piix3_devfn, isa_irq, ram_size);
> > +    isa_bus_irqs(isa_irq);
> > +
> > +    pc_register_ferr_irq(isa_reserve_irq(13));
> > +
> > +    pc_vga_init(pci_bus);
> > +
> > +    /* init basic PC hardware */
> > +    pc_basic_device_init(isa_irq,&floppy_controller,&rtc_state);
> > +
> > +    for (i = 0; i<  nb_nics; i++) {
> > +        NICInfo *nd =&nd_table[i];
> > +
> > +        if (nd->model&&  strcmp(nd->model, "ne2k_isa") == 0)
> > +            pc_init_ne2k_isa(nd);
> > +        else
> > +            pci_nic_init_nofail(nd, "e1000", NULL);
> > +    }
> > +
> > +    if (drive_get_max_bus(IF_IDE)>= MAX_IDE_BUS) {
> > +        fprintf(stderr, "qemu: too many IDE bus\n");
> > +        exit(1);
> > +    }
> > +
> > +    for (i = 0; i<  MAX_IDE_BUS * MAX_IDE_DEVS; i++) {
> > +        hd[i] = drive_get(IF_IDE, i / MAX_IDE_DEVS, i % MAX_IDE_DEVS);
> > +    }
> > +
> > +    PCIDevice *dev = pci_piix3_ide_init(pci_bus, hd, piix3_devfn + 1);
> > +    idebus[0] = qdev_get_child_bus(&dev->qdev, "ide.0");
> > +    idebus[1] = qdev_get_child_bus(&dev->qdev, "ide.1");
> > +
> > +    audio_init(isa_irq, pci_bus);
> > +
> > +    if (ram_size>= 0xe0000000) {
> > +        above_4g_mem_size = ram_size - 0xe0000000;
> > +        below_4g_mem_size = 0xe0000000;
> > +    } else {
> > +        below_4g_mem_size = ram_size;
> > +    }
> > +    pc_cmos_init(below_4g_mem_size, above_4g_mem_size, boot_device,
> > +                 idebus[0], idebus[1], floppy_controller, rtc_state);
> > +
> > +    if (usb_enabled) {
> > +        usb_uhci_piix3_init(pci_bus, piix3_devfn + 2);
> > +    }
> > +
> > +    if (acpi_enabled) {
> > +        cmos_s3 = qemu_allocate_irqs(pc_cmos_set_s3_resume, rtc_state, 1);
> > +        smi_irq = qemu_allocate_irqs(pc_acpi_smi_interrupt, first_cpu, 1);
> > +        piix4_pm_init(pci_bus, piix3_devfn + 3, 0xb100,
> > +                      isa_reserve_irq(9), *cmos_s3, *smi_irq, 0);
> > +    }
> > +
> > +    if (i440fx_state) {
> > +        i440fx_init_memory_mappings(i440fx_state);
> > +    }
> > +
> > +    pc_pci_device_init(pci_bus);
> > +}
> >    
> 
> It's not obvious to me why you can't make use of most of the normal pc 
> code here.

I think we could, but we would need to add few "if (xen_available())".


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.