Hi, Avi Due to last merge with Qemu upstream, some interfaces are changed, and leads to build fail , this patch fixed them. Xiantao From: Zhang Xiantao <[EMAIL PROTECTED]> Date: Fri, 21 Dec 2007 22:47:52 +0800 Subject: [PATCH] kvm: qemu : Fix ia64 build on latest source.
Due to last merge with qemu upstream, ia64 build
is broken. This patch fix it.
Signed-off-by: Zhang Xiantao <[EMAIL PROTECTED]>
---
qemu/hw/boards.h | 3 +
qemu/hw/ipf.c | 553
+++++++++++++++++++++++-------------------
qemu/qemu-kvm-ia64.c | 2 +-
qemu/sysemu.h | 5 +
qemu/target-ia64/cpu.h | 10 +-
qemu/target-ia64/firmware.c | 1 -
qemu/target-ia64/op_helper.c | 2 +-
7 files changed, 325 insertions(+), 251 deletions(-)
diff --git a/qemu/hw/boards.h b/qemu/hw/boards.h
index 079760d..3285e6e 100644
--- a/qemu/hw/boards.h
+++ b/qemu/hw/boards.h
@@ -96,4 +96,7 @@ extern QEMUMachine dummy_m68k_machine;
/* mainstone.c */
extern QEMUMachine mainstone2_machine;
+/* ipf.c */
+extern QEMUMachine ipf_machine;
+
#endif
diff --git a/qemu/hw/ipf.c b/qemu/hw/ipf.c
index 9bcdb85..9c74531 100644
--- a/qemu/hw/ipf.c
+++ b/qemu/hw/ipf.c
@@ -24,9 +24,20 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN
* THE SOFTWARE.
*/
-#include "vl.h"
+
+#include "hw.h"
+#include "pc.h"
+#include "fdc.h"
+#include "pci.h"
+#include "block.h"
+#include "sysemu.h"
+#include "audio/audio.h"
+#include "net.h"
+#include "smbus.h"
+#include "boards.h"
#include "firmware.h"
#include "ia64intrin.h"
+#include "dyngen.h"
#include <unistd.h>
#ifdef USE_KVM
@@ -34,34 +45,23 @@
extern int kvm_allowed;
#endif
-/* output Bochs bios info messages */
-//#define DEBUG_BIOS
-
#define FW_FILENAME "Flash.fd"
/* Leave a chunk of memory at the top of RAM for the BIOS ACPI tables.
*/
#define ACPI_DATA_SIZE 0x10000
+#define MAX_IDE_BUS 2
+
static fdctrl_t *floppy_controller;
static RTCState *rtc_state;
static PCIDevice *i440fx_state;
-static const int ide_iobase[2] = { 0x1f0, 0x170 };
-static const int ide_iobase2[2] = { 0x3f6, 0x376 };
-static const int ide_irq[2] = { 14, 15 };
-
-#define NE2000_NB_MAX 6
-
-static int ne2000_io[NE2000_NB_MAX] = { 0x300, 0x320, 0x340, 0x360,
0x280, 0x380 };
-static int ne2000_irq[NE2000_NB_MAX] = { 9, 10, 11, 3, 4, 5 };
-
-static int serial_io[MAX_SERIAL_PORTS] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8
};
-static int serial_irq[MAX_SERIAL_PORTS] = { 4, 3, 4, 3 };
-
-static int parallel_io[MAX_PARALLEL_PORTS] = { 0x378, 0x278, 0x3bc };
-static int parallel_irq[MAX_PARALLEL_PORTS] = { 7, 7, 7 };
+static void pic_irq_request(void *opaque, int irq, int level)
+{
+ fprintf(stderr,"pic_irq_request called!\n");
+}
-/* cmos mappings */
+/* PC cmos mappings */
#define REG_EQUIPMENT_BYTE 0x14
@@ -106,10 +106,30 @@ static void cmos_init_hd(int type_ofs, int
info_ofs, BlockDriverState *hd)
rtc_set_memory(s, info_ofs + 8, sectors);
}
+/* convert boot_device letter to something recognizable by the bios */
+static int boot_device2nibble(char boot_device)
+{
+ switch(boot_device) {
+ case 'a':
+ case 'b':
+ return 0x01; /* floppy boot */
+ case 'c':
+ return 0x02; /* hard drive boot */
+ case 'd':
+ return 0x03; /* CD-ROM boot */
+ case 'n':
+ return 0x04; /* Network boot */
+ }
+ return 0;
+}
+
/* hd_table must contain 4 block drivers */
-static void cmos_init(ram_addr_t ram_size, ram_addr_t
above_4g_mem_size, int boot_device, BlockDriverState **hd_table, int
smp_cpus)
+static void cmos_init(ram_addr_t ram_size, ram_addr_t
above_4g_mem_size,
+ const char *boot_device, BlockDriverState
**hd_table,
+ int smp_cpus)
{
RTCState *s = rtc_state;
+ int nbds, bds[3] = { 0, };
int val;
int fd0, fd1, nb;
int i;
@@ -145,24 +165,23 @@ static void cmos_init(ram_addr_t ram_size,
ram_addr_t above_4g_mem_size, int boo
rtc_set_memory(s, 0x34, val);
rtc_set_memory(s, 0x35, val >> 8);
- switch(boot_device) {
- case 'a':
- case 'b':
- rtc_set_memory(s, 0x3d, 0x01); /* floppy boot */
- if (!fd_bootchk)
- rtc_set_memory(s, 0x38, 0x01); /* disable signature check
*/
- break;
- default:
- case 'c':
- rtc_set_memory(s, 0x3d, 0x02); /* hard drive boot */
- break;
- case 'd':
- rtc_set_memory(s, 0x3d, 0x03); /* CD-ROM boot */
- break;
- case 'n':
- rtc_set_memory(s, 0x3d, 0x04); /* Network boot */
- break;
+ /* set boot devices, and disable floppy signature check if
requested */
+#define PC_MAX_BOOT_DEVICES 3
+ nbds = strlen(boot_device);
+ if (nbds > PC_MAX_BOOT_DEVICES) {
+ fprintf(stderr, "Too many boot devices for PC\n");
+ exit(1);
+ }
+ for (i = 0; i < nbds; i++) {
+ bds[i] = boot_device2nibble(boot_device[i]);
+ if (bds[i] == 0) {
+ fprintf(stderr, "Invalid boot device for PC: '%c'\n",
+ boot_device[i]);
+ exit(1);
+ }
}
+ rtc_set_memory(s, 0x3d, (bds[1] << 4) | bds[0]);
+ rtc_set_memory(s, 0x38, (bds[2] << 4) | (fd_bootchk ? 0x0 : 0x1));
/* floppy type */
@@ -227,47 +246,67 @@ static void cmos_init(ram_addr_t ram_size,
ram_addr_t above_4g_mem_size, int boo
rtc_set_memory(s, 0x39, val);
}
+static void main_cpu_reset(void *opaque)
+{
+ CPUState *env = opaque;
+ cpu_reset(env);
+}
+
+static const int ide_iobase[2] = { 0x1f0, 0x170 };
+static const int ide_iobase2[2] = { 0x3f6, 0x376 };
+static const int ide_irq[2] = { 14, 15 };
+
+#define NE2000_NB_MAX 6
+
+static int ne2000_io[NE2000_NB_MAX] = { 0x300, 0x320, 0x340, 0x360,
0x280, 0x380 };
+static int ne2000_irq[NE2000_NB_MAX] = { 9, 10, 11, 3, 4, 5 };
+
+static int serial_io[MAX_SERIAL_PORTS] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8
};
+static int serial_irq[MAX_SERIAL_PORTS] = { 4, 3, 4, 3 };
+
+static int parallel_io[MAX_PARALLEL_PORTS] = { 0x378, 0x278, 0x3bc };
+static int parallel_irq[MAX_PARALLEL_PORTS] = { 7, 7, 7 };
#ifdef HAS_AUDIO
static void audio_init (PCIBus *pci_bus, qemu_irq *pic)
{
- struct soundhw *c;
- int audio_enabled = 0;
+ struct soundhw *c;
+ int audio_enabled = 0;
- for (c = soundhw; !audio_enabled && c->name; ++c) {
- audio_enabled = c->enabled;
- }
+ for (c = soundhw; !audio_enabled && c->name; ++c) {
+ audio_enabled = c->enabled;
+ }
- if (audio_enabled) {
- AudioState *s;
-
- s = AUD_init ();
- if (s) {
- for (c = soundhw; c->name; ++c) {
- if (c->enabled) {
- if (c->isa) {
- c->init.init_isa (s,
pic);
- }
- else {
- if (pci_bus) {
- c->init.init_pci
(pci_bus, s);
- }
- }
- }
- }
- }
- }
+ if (audio_enabled) {
+ AudioState *s;
+
+ s = AUD_init ();
+ if (s) {
+ for (c = soundhw; c->name; ++c) {
+ if (c->enabled) {
+ if (c->isa) {
+ c->init.init_isa (s, pic);
+ }
+ else {
+ if (pci_bus) {
+ c->init.init_pci (pci_bus, s);
+ }
+ }
+ }
+ }
+ }
+ }
}
#endif
static void pc_init_ne2k_isa(NICInfo *nd, qemu_irq *pic)
{
- static int nb_ne2k = 0;
+ static int nb_ne2k = 0;
- if (nb_ne2k == NE2000_NB_MAX)
- return;
- isa_ne2000_init(ne2000_io[nb_ne2k], pic[ne2000_irq[nb_ne2k]],
nd);
- nb_ne2k++;
+ if (nb_ne2k == NE2000_NB_MAX)
+ return;
+ isa_ne2000_init(ne2000_io[nb_ne2k], pic[ne2000_irq[nb_ne2k]], nd);
+ nb_ne2k++;
}
#ifdef USE_KVM
@@ -275,55 +314,57 @@ extern kvm_context_t kvm_context;
extern int kvm_allowed;
#endif
-static void main_cpu_reset(void *opaque)
-{
- CPUState *env = opaque;
- cpu_reset(env);
-}
-static void pic_irq_request(void *opaque, int irq, int level)
-{
- fprintf(stderr,"pic_irq_request called!\n");
-}
-
-/* IPF hardware initialisation */
-static void ipf_init1(ram_addr_t ram_size, int vga_ram_size, int
boot_device,
- DisplayState *ds, const char **fd_filename, int
snapshot,
- const char *kernel_filename, const char *kernel_cmdline,
- const char *initrd_filename,
- int pci_enabled)
+/* Itanium hardware initialisation */
+static void ipf_init1(ram_addr_t ram_size, int vga_ram_size,
+ const char *boot_device, DisplayState *ds,
+ const char *kernel_filename, const char
*kernel_cmdline,
+ const char *initrd_filename,
+ int pci_enabled, const char *cpu_model)
{
- char buf[1024];
- int i;
- ram_addr_t ram_addr, vga_ram_addr;
- ram_addr_t above_4g_mem_size = 0;
- PCIBus *pci_bus;
- int piix3_devfn = -1;
- CPUState *env;
- NICInfo *nd;
- qemu_irq *cpu_irq;
- qemu_irq *i8259;
- int page_size;
-
- page_size = getpagesize();
- if (page_size != TARGET_PAGE_SIZE) {
- fprintf(stderr,"Error! Host page size != qemu target
page size,"
- " you may need to change TARGET_PAGE_BITS in
qemu!\n");
+ char buf[1024];
+ int i;
+ ram_addr_t ram_addr, vga_ram_addr;
+ ram_addr_t above_4g_mem_size = 0;
+ PCIBus *pci_bus;
+ int piix3_devfn = -1;
+ CPUState *env;
+ NICInfo *nd;
+ qemu_irq *cpu_irq;
+ qemu_irq *i8259;
+ int page_size;
+ int index;
+ BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
+ BlockDriverState *fd[MAX_FD];
+
+ page_size = getpagesize();
+ if (page_size != TARGET_PAGE_SIZE) {
+ fprintf(stderr,"Error! Host page size != qemu target page size,"
+ " you may need to change TARGET_PAGE_BITS in
qemu!"
+ "host page size:0x%x\n", page_size);
exit(-1);
- }
+ };
- if (ram_size >= 0xc0000000 ) {
- above_4g_mem_size = ram_size - 0xc0000000;
- ram_size = 0xc0000000;
- }
+ if (ram_size >= 0xc0000000 ) {
+ above_4g_mem_size = ram_size - 0xc0000000;
+ ram_size = 0xc0000000;
+ }
- /* init CPUs */
- for(i = 0; i < smp_cpus; i++) {
- env = cpu_init();
- if (i != 0)
- env->hflags |= HF_HALTED_MASK;
- register_savevm("cpu", i, 4, cpu_save, cpu_load, env);
- qemu_register_reset(main_cpu_reset, env);
- }
+ /* init CPUs */
+ if (cpu_model == NULL) {
+ cpu_model = "IA64";
+ }
+
+ for(i = 0; i < smp_cpus; i++) {
+ env = cpu_init(cpu_model);
+ if (!env) {
+ fprintf(stderr, "Unable to find CPU definition\n");
+ exit(1);
+ }
+ if (i != 0)
+ env->hflags |= HF_HALTED_MASK;
+ register_savevm("cpu", i, 4, cpu_save, cpu_load, env);
+ qemu_register_reset(main_cpu_reset, env);
+ }
/* allocate RAM */
#ifdef USE_KVM
@@ -346,20 +387,20 @@ static void ipf_init1(ram_addr_t ram_size, int
vga_ram_size, int boot_device,
} else
#endif
#endif
- {
- ram_addr = qemu_ram_alloc(ram_size);
- cpu_register_physical_memory(0, ram_size, ram_addr);
- }
- /* allocate VGA RAM */
- vga_ram_addr = qemu_ram_alloc(vga_ram_size);
+ {
+ ram_addr = qemu_ram_alloc(ram_size);
+ cpu_register_physical_memory(0, ram_size, ram_addr);
+ }
+ /* allocate VGA RAM */
+ vga_ram_addr = qemu_ram_alloc(vga_ram_size);
/* above 4giga memory allocation */
if (above_4g_mem_size > 0) {
ram_addr = qemu_ram_alloc(above_4g_mem_size);
cpu_register_physical_memory(0x100000000,
above_4g_mem_size, ram_addr);
#ifdef USE_KVM
- if (kvm_allowed)
- kvm_cpu_register_physical_memory(0x100000000,
above_4g_mem_size,
+ if (kvm_allowed)
+ kvm_cpu_register_physical_memory(0x100000000,
above_4g_mem_size,
ram_addr);
#endif
}
@@ -400,158 +441,180 @@ static void ipf_init1(ram_addr_t ram_size, int
vga_ram_size, int boot_device,
memcpy(fw_image_start, image, image_size);
}
free(image);
- kvm_sync_icache((unsigned long)fw_image_start,
image_size);
+ flush_icache_range((unsigned long)fw_image_start,
+ (unsigned long)fw_image_start + image_size);
kvm_ia64_build_hob(ram_size, smp_cpus, fw_start);
}
#endif
- cpu_irq = qemu_allocate_irqs(pic_irq_request, first_cpu, 1);
- i8259 = i8259_init(cpu_irq[0]);
+ cpu_irq = qemu_allocate_irqs(pic_irq_request, first_cpu, 1);
+ i8259 = i8259_init(cpu_irq[0]);
- if (pci_enabled) {
- pci_bus = i440fx_init(&i440fx_state, i8259);
- piix3_devfn = piix3_init(pci_bus, -1);
- } else {
- pci_bus = NULL;
- }
+ if (pci_enabled) {
+ pci_bus = i440fx_init(&i440fx_state, i8259);
+ piix3_devfn = piix3_init(pci_bus, -1);
+ } else {
+ pci_bus = NULL;
+ }
- if (cirrus_vga_enabled) {
- if (pci_enabled) {
- pci_cirrus_vga_init(pci_bus,
- ds, phys_ram_base +
vga_ram_addr,
- vga_ram_addr, vga_ram_size);
- } else {
- isa_cirrus_vga_init(ds, phys_ram_base +
vga_ram_addr,
- vga_ram_addr, vga_ram_size);
- }
- } else {
- if (pci_enabled) {
- pci_vga_init(pci_bus, ds, phys_ram_base +
vga_ram_addr,
- vga_ram_addr, vga_ram_size, 0,
0);
- } else {
- isa_vga_init(ds, phys_ram_base + vga_ram_addr,
- vga_ram_addr, vga_ram_size);
- }
- }
- rtc_state = rtc_init(0x70, i8259[8]);
+ if (cirrus_vga_enabled) {
+ if (pci_enabled) {
+ pci_cirrus_vga_init(pci_bus,
+ ds, phys_ram_base + vga_ram_addr,
+ vga_ram_addr, vga_ram_size);
+ } else {
+ isa_cirrus_vga_init(ds, phys_ram_base + vga_ram_addr,
+ vga_ram_addr, vga_ram_size);
+ }
+ } else {
+ if (pci_enabled) {
+ pci_vga_init(pci_bus, ds, phys_ram_base + vga_ram_addr,
+ vga_ram_addr, vga_ram_size, 0, 0);
+ } else {
+ isa_vga_init(ds, phys_ram_base + vga_ram_addr,
+ vga_ram_addr, vga_ram_size);
+ }
+ }
- if (pci_enabled) {
- pic_set_alt_irq_func(isa_pic, NULL, NULL);
- }
+ rtc_state = rtc_init(0x70, i8259[8]);
- for(i = 0; i < MAX_SERIAL_PORTS; i++) {
- if (serial_hds[i]) {
- serial_init(serial_io[i], i8259[serial_irq[i]],
serial_hds[i]);
- }
- }
+ if (pci_enabled) {
+ pic_set_alt_irq_func(isa_pic, NULL, NULL);
+ }
- for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
- if (parallel_hds[i]) {
- parallel_init(parallel_io[i],
i8259[parallel_irq[i]],
- parallel_hds[i]);
- }
- }
+ for(i = 0; i < MAX_SERIAL_PORTS; i++) {
+ if (serial_hds[i]) {
+ serial_init(serial_io[i], i8259[serial_irq[i]],
serial_hds[i]);
+ }
+ }
- for(i = 0; i < nb_nics; i++) {
- nd = &nd_table[i];
- if (!nd->model) {
- if (pci_enabled) {
- nd->model = "ne2k_pci";
- } else {
- nd->model = "ne2k_isa";
- }
- }
- if (strcmp(nd->model, "ne2k_isa") == 0) {
- pc_init_ne2k_isa(nd, i8259);
- } else if (pci_enabled) {
- if (strcmp(nd->model, "?") == 0)
- fprintf(stderr, "qemu: Supported ISA
NICs: ne2k_isa\n");
- pci_nic_init(pci_bus, nd, -1);
- } else if (strcmp(nd->model, "?") == 0) {
- fprintf(stderr, "qemu: Supported ISA NICs:
ne2k_isa\n");
- exit(1);
- } else {
- fprintf(stderr, "qemu: Unsupported NIC: %s\n",
nd->model);
- exit(1);
- }
- }
+ for(i = 0; i < MAX_PARALLEL_PORTS; i++) {
+ if (parallel_hds[i]) {
+ parallel_init(parallel_io[i], i8259[parallel_irq[i]],
+ parallel_hds[i]);
+ }
+ }
-#undef USE_HYPERCALL // Disable hypercall now, due to shor of support
for VT-i.
+ for(i = 0; i < nb_nics; i++) {
+ nd = &nd_table[i];
+ if (!nd->model) {
+ if (pci_enabled) {
+ nd->model = "ne2k_pci";
+ } else {
+ nd->model = "ne2k_isa";
+ }
+ }
+ if (strcmp(nd->model, "ne2k_isa") == 0) {
+ pc_init_ne2k_isa(nd, i8259);
+ } else if (pci_enabled) {
+ if (strcmp(nd->model, "?") == 0)
+ fprintf(stderr, "qemu: Supported ISA NICs:
ne2k_isa\n");
+ pci_nic_init(pci_bus, nd, -1);
+ } else if (strcmp(nd->model, "?") == 0) {
+ fprintf(stderr, "qemu: Supported ISA NICs: ne2k_isa\n");
+ exit(1);
+ } else {
+ fprintf(stderr, "qemu: Unsupported NIC: %s\n", nd->model);
+ exit(1);
+ }
+ }
+
+#undef USE_HYPERCALL //Disable it now, need to implement later!
#ifdef USE_HYPERCALL
- pci_hypercall_init(pci_bus);
+ pci_hypercall_init(pci_bus);
#endif
- if (pci_enabled) {
- pci_piix3_ide_init(pci_bus, bs_table, piix3_devfn + 1,
i8259);
- } else {
- for(i = 0; i < 2; i++) {
- isa_ide_init(ide_iobase[i], ide_iobase2[i],
i8259[ide_irq[i]],
- bs_table[2 * i], bs_table[2 * i
+ 1]);
- }
- }
- i8042_init(i8259[1], i8259[12], 0x60);
- DMA_init(0);
+ 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++) {
+ index = drive_get_index(IF_IDE, i / MAX_IDE_DEVS, i %
MAX_IDE_DEVS);
+ if (index != -1)
+ hd[i] = drives_table[index].bdrv;
+ else
+ hd[i] = NULL;
+ }
+
+ if (pci_enabled) {
+ pci_piix3_ide_init(pci_bus, hd, piix3_devfn + 1, i8259);
+ } else {
+ for(i = 0; i < MAX_IDE_BUS; i++) {
+ isa_ide_init(ide_iobase[i], ide_iobase2[i],
i8259[ide_irq[i]],
+ hd[MAX_IDE_DEVS * i], hd[MAX_IDE_DEVS * i +
1]);
+ }
+ }
+
+ i8042_init(i8259[1], i8259[12], 0x60);
+ DMA_init(0);
#ifdef HAS_AUDIO
- audio_init(pci_enabled ? pci_bus : NULL, i8259);
+ audio_init(pci_enabled ? pci_bus : NULL, i8259);
#endif
- floppy_controller = fdctrl_init(i8259[6], 2, 0, 0x3f0,
fd_table);
+ for(i = 0; i < MAX_FD; i++) {
+ index = drive_get_index(IF_FLOPPY, 0, i);
+ if (index != -1)
+ fd[i] = drives_table[index].bdrv;
+ else
+ fd[i] = NULL;
+ }
+ floppy_controller = fdctrl_init(i8259[6], 2, 0, 0x3f0, fd);
- cmos_init(ram_size, above_4g_mem_size, boot_device, bs_table,
smp_cpus);
+ cmos_init(ram_size, above_4g_mem_size, boot_device, hd, smp_cpus);
- if (pci_enabled && usb_enabled) {
- usb_uhci_piix3_init(pci_bus, piix3_devfn + 2);
- }
+ if (pci_enabled && usb_enabled) {
+ usb_uhci_piix3_init(pci_bus, piix3_devfn + 2);
+ }
- if (pci_enabled && acpi_enabled) {
- uint8_t *eeprom_buf = qemu_mallocz(8 * 256); /* XXX:
make this persistent */
- i2c_bus *smbus;
+ if (pci_enabled && acpi_enabled) {
+ uint8_t *eeprom_buf = qemu_mallocz(8 * 256); /* XXX: make this
persistent */
+ i2c_bus *smbus;
- /* TODO: Populate SPD eeprom data. */
- smbus = piix4_pm_init(pci_bus, piix3_devfn + 3, 0xb100);
- for (i = 0; i < 8; i++) {
- smbus_eeprom_device_init(smbus, 0x50 + i,
eeprom_buf + (i * 256));
- }
- }
+ /* TODO: Populate SPD eeprom data. */
+ smbus = piix4_pm_init(pci_bus, piix3_devfn + 3, 0xb100);
+ for (i = 0; i < 8; i++) {
+ smbus_eeprom_device_init(smbus, 0x50 + i, eeprom_buf + (i *
256));
+ }
+ }
- if (i440fx_state) {
- i440fx_init_memory_mappings(i440fx_state);
- }
-#if 0
- /* ??? Need to figure out some way for the user to
- specify SCSI devices. */
- if (pci_enabled) {
- void *scsi;
- BlockDriverState *bdrv;
-
- scsi = lsi_scsi_init(pci_bus, -1);
- bdrv = bdrv_new("scsidisk");
- bdrv_open(bdrv, "scsi_disk.img", 0);
- lsi_scsi_attach(scsi, bdrv, -1);
- bdrv = bdrv_new("scsicd");
- bdrv_open(bdrv, "scsi_cd.iso", 0);
- bdrv_set_type_hint(bdrv, BDRV_TYPE_CDROM);
- lsi_scsi_attach(scsi, bdrv, -1);
- }
-#endif
+ if (i440fx_state) {
+ i440fx_init_memory_mappings(i440fx_state);
+ }
+
+ if (pci_enabled) {
+ int max_bus;
+ int bus, unit;
+ void *scsi;
+
+ max_bus = drive_get_max_bus(IF_SCSI);
+
+ for (bus = 0; bus <= max_bus; bus++) {
+ scsi = lsi_scsi_init(pci_bus, -1);
+ for (unit = 0; unit < LSI_MAX_DEVS; unit++) {
+ index = drive_get_index(IF_SCSI, bus, unit);
+ if (index == -1)
+ continue;
+ lsi_scsi_attach(scsi, drives_table[index].bdrv, unit);
+ }
+ }
+ }
}
-static void ipf_init_pci(ram_addr_t ram_size, int vga_ram_size, int
boot_device,
- DisplayState *ds, const char **fd_filename,
- int snapshot,
- const char *kernel_filename,
- const char *kernel_cmdline,
- const char *initrd_filename,
- const char *cpu_model)
+static void ipf_init_pci(ram_addr_t ram_size, int vga_ram_size,
+ const char *boot_device, DisplayState *ds,
+ const char *kernel_filename,
+ const char *kernel_cmdline,
+ const char *initrd_filename,
+ const char *cpu_model)
{
- ipf_init1(ram_size, vga_ram_size, boot_device,
- ds, fd_filename, snapshot,
- kernel_filename, kernel_cmdline,
- initrd_filename, 1);
+ ipf_init1(ram_size, vga_ram_size, boot_device, ds,
+ kernel_filename, kernel_cmdline,
+ initrd_filename, 1, cpu_model);
}
QEMUMachine ipf_machine = {
- "itanium",
- "Itanium Platform",
- ipf_init_pci,
+ "itanium",
+ "Itanium Platform",
+ ipf_init_pci,
};
diff --git a/qemu/qemu-kvm-ia64.c b/qemu/qemu-kvm-ia64.c
index 0029a43..d3d6ac7 100644
--- a/qemu/qemu-kvm-ia64.c
+++ b/qemu/qemu-kvm-ia64.c
@@ -8,8 +8,8 @@ extern int kvm_irqchip;
#ifdef USE_KVM
#include <string.h>
-#include "vl.h"
+#include "hw/hw.h"
#include "qemu-kvm.h"
#include <libkvm.h>
#include <pthread.h>
diff --git a/qemu/sysemu.h b/qemu/sysemu.h
index 1f5b093..87098ae 100644
--- a/qemu/sysemu.h
+++ b/qemu/sysemu.h
@@ -107,7 +107,12 @@ extern unsigned int nb_prom_envs;
#endif
/* XXX: make it dynamic */
+#ifndef TARGET_IA64
#define MAX_BIOS_SIZE (4 * 1024 * 1024)
+#else
+#define MAX_BIOS_SIZE (16 * 1024 * 1024)
+#endif
+
#if defined (TARGET_PPC)
#define BIOS_SIZE (1024 * 1024)
#elif defined (TARGET_SPARC64)
diff --git a/qemu/target-ia64/cpu.h b/qemu/target-ia64/cpu.h
index be409c7..2d91cb9 100644
--- a/qemu/target-ia64/cpu.h
+++ b/qemu/target-ia64/cpu.h
@@ -30,11 +30,11 @@
#define TARGET_LONG_BITS 64
-
-#define TARGET_PAGE_BITS 14
+#define TARGET_PAGE_BITS 16
#define ELF_MACHINE EM_IA_64
+#define NB_MMU_MODES 2
#define CPU_PAL_HALT 1
#define HF_HALTED_MASK (1 << CPU_PAL_HALT)
@@ -69,7 +69,11 @@ void cpu_dump_state(CPUState *env, FILE *f,
int (*cpu_fprintf)(FILE *f, const char *fmt, ...),
int flags);
-CPUState *cpu_ia64_init(void);
+CPUState *cpu_ia64_init(char * cpu_model);
+static inline int cpu_mmu_index (CPUState *env)
+{
+ return 0;
+}
#include "cpu-all.h"
diff --git a/qemu/target-ia64/firmware.c b/qemu/target-ia64/firmware.c
index 2469350..51650c8 100644
--- a/qemu/target-ia64/firmware.c
+++ b/qemu/target-ia64/firmware.c
@@ -253,7 +253,6 @@ load_hob(void *hob_buf,
return 0;
}
-#define MIN(x, y) ((x) < (y)) ? (x) : (y)
static int
add_mem_hob(void* hob_buf, unsigned long dom_mem_size)
{
diff --git a/qemu/target-ia64/op_helper.c b/qemu/target-ia64/op_helper.c
index 1b8226a..5138af5 100644
--- a/qemu/target-ia64/op_helper.c
+++ b/qemu/target-ia64/op_helper.c
@@ -26,7 +26,7 @@
extern int kvm_allowed;
-CPUState *cpu_ia64_init(void){
+CPUState *cpu_ia64_init(char *cpu_model){
CPUState *env;
env = qemu_mallocz(sizeof(CPUState));
if (!env)
--
1.5.2
0001-kvm-qemu-Fix-ia64-build-on-latest-source.patch
Description: 0001-kvm-qemu-Fix-ia64-build-on-latest-source.patch
------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________ kvm-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/kvm-devel
