WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

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

To: Anthony Liguori <anthony@xxxxxxxxxxxxx>
Subject: [Xen-devel] Re: [Qemu-devel] [PATCH V9 05/16] xen: Add xen_machine_fv
From: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Date: Thu, 27 Jan 2011 12:04:05 +0000
Cc: Anthony Perard <anthony.perard@xxxxxxxxxx>, Xen Devel <xen-devel@xxxxxxxxxxxxxxxxxxx>, Stabellini <Stefano.Stabellini@xxxxxxxxxxxxx>, QEMU-devel <qemu-devel@xxxxxxxxxx>, Stefano
Delivery-date: Thu, 27 Jan 2011 04:05:26 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <4D40A6A5.8090903@xxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <1295965760-31508-1-git-send-email-anthony.perard@xxxxxxxxxx> <1295965760-31508-6-git-send-email-anthony.perard@xxxxxxxxxx> <4D40A6A5.8090903@xxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Alpine 2.00 (DEB 1167 2008-08-23)
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

<Prev in Thread] Current Thread [Next in Thread>