[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |