public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] kvm/qemu: Fix ia64 build broken.
@ 2007-12-21 14:58 Zhang, Xiantao
       [not found] ` <42DFA526FC41B1429CE7279EF83C6BDCB567F5-wq7ZOvIWXbMAbVU2wMM1CrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
  0 siblings, 1 reply; 24+ messages in thread
From: Zhang, Xiantao @ 2007-12-21 14:58 UTC (permalink / raw)
  To: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f; +Cc: Avi Kivity

[-- Attachment #1: Type: text/plain, Size: 24251 bytes --]

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 <xiantao.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
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 <xiantao.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
---
 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

[-- Attachment #2: 0001-kvm-qemu-Fix-ia64-build-on-latest-source.patch --]
[-- Type: application/octet-stream, Size: 23276 bytes --]

From 9925c33dffdfbdc7502d255aa2200489f62c62be Mon Sep 17 00:00:00 2001
From: Zhang Xiantao <xiantao.zhang@intel.com>
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 <xiantao.zhang@intel.com>
---
 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


[-- Attachment #3: Type: text/plain, Size: 228 bytes --]

-------------------------------------------------------------------------
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/

[-- Attachment #4: Type: text/plain, Size: 186 bytes --]

_______________________________________________
kvm-devel mailing list
kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/kvm-devel

^ permalink raw reply related	[flat|nested] 24+ messages in thread
[parent not found: <20071222135553.1341211901C5@genesis.frugalware.org>]

end of thread, other threads:[~2008-01-10 12:44 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-12-21 14:58 [PATCH] kvm/qemu: Fix ia64 build broken Zhang, Xiantao
     [not found] ` <42DFA526FC41B1429CE7279EF83C6BDCB567F5-wq7ZOvIWXbMAbVU2wMM1CrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2007-12-21 17:52   ` Amit Shah
     [not found]     ` <200712212322.31805.amit.shah-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-12-21 18:08       ` Izik Eidus
     [not found]         ` <476C010E.1020606-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-12-21 18:25           ` Amit Shah
2007-12-22  5:00       ` Zhang, Xiantao
2007-12-22 20:25       ` Avi Kivity
     [not found]         ` <476D72D3.8010601-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2008-01-02 19:59           ` Hollis Blanchard
2008-01-02 20:32             ` Amit Shah
2007-12-22 20:15   ` Avi Kivity
2007-12-26  8:57   ` Akio Takebe
     [not found]     ` <B1C8479D552433takebe_akio-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2007-12-26  9:03       ` Zhang, Xiantao
2008-01-01  1:27   ` Carlo Marcelo Arenas Belon
2008-01-01  9:04     ` Avi Kivity
     [not found]       ` <477A0211.9020708-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2008-01-01 15:37         ` Zhang, Xiantao
     [not found]           ` <42DFA526FC41B1429CE7279EF83C6BDCBB7441-wq7ZOvIWXbMAbVU2wMM1CrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2008-01-01 15:51             ` Avi Kivity
     [not found]               ` <477A6193.1080804-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2008-01-01 16:07                 ` Zhang, Xiantao
     [not found]                   ` <42DFA526FC41B1429CE7279EF83C6BDCBB7443-wq7ZOvIWXbMAbVU2wMM1CrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2008-01-01 16:14                     ` Avi Kivity
2008-01-01 15:31     ` Zhang, Xiantao
2008-01-01 16:37     ` Avi Kivity
     [not found]       ` <477A6C43.5030301-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2008-01-01 19:49         ` Carlo Marcelo Arenas Belon
2008-01-02  9:22           ` Avi Kivity
     [not found] <20071222135553.1341211901C5@genesis.frugalware.org>
     [not found] ` <42DFA526FC41B1429CE7279EF83C6BDCBB743E-wq7ZOvIWXbMAbVU2wMM1CrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2008-01-06  1:06   ` Miklos Vajna
     [not found]     ` <20080106010600.GD29972-mNO0jnlB3V1KNP/gQ5GeZj64mgHaRSMb@public.gmane.org>
2008-01-06  1:53       ` Carlo Marcelo Arenas Belon
2008-01-10 12:44         ` Miklos Vajna

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox