Compile isa_mmio only once
authorBlue Swirl <blauwirbel@gmail.com>
Sun, 21 Mar 2010 19:47:09 +0000 (19:47 +0000)
committerBlue Swirl <blauwirbel@gmail.com>
Sun, 21 Mar 2010 19:47:09 +0000 (19:47 +0000)
Push TARGET_WORDS_BIGENDIAN dependency to board level.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
14 files changed:
Makefile.objs
Makefile.target
hw/gt64xxx.c
hw/isa.h
hw/isa_mmio.c
hw/mips_jazz.c
hw/mips_mipssim.c
hw/mips_r4k.c
hw/ppc440.c
hw/ppc_newworld.c
hw/ppc_oldworld.c
hw/ppce500_mpc8544ds.c
hw/sun4u.c
hw/versatile_pci.c

index ca4ee39e18beca51f060b54ecce14cc72062945a..333904b071e7adcb342ea567b3d2878e4bbbf4b6 100644 (file)
@@ -131,6 +131,7 @@ hw-obj-y += loader.o
 hw-obj-y += virtio.o virtio-console.o
 hw-obj-y += fw_cfg.o
 hw-obj-y += watchdog.o
+hw-obj-$(CONFIG_ISA_MMIO) += isa_mmio.o
 hw-obj-$(CONFIG_ECC) += ecc.o
 hw-obj-$(CONFIG_NAND) += nand.o
 
index 9d55924b6e955f8dcc490aa962bc6da8bbb5f045..d3edc04199b77941a179c5d4437542097bdbea3b 100644 (file)
@@ -168,7 +168,6 @@ obj-y += qemu-timer.o
 obj-y += virtio-blk.o virtio-balloon.o virtio-net.o virtio-pci.o virtio-serial-bus.o
 obj-y += rwhandler.o
 obj-$(CONFIG_KVM) += kvm.o kvm-all.o
-obj-$(CONFIG_ISA_MMIO) += isa_mmio.o
 LIBS+=-lz
 
 sound-obj-y =
index f47af43966c86edd9913f78a73ae69e161708b60..55971b9c33c3585cbbd5cbd3705ae99d1bcd1623 100644 (file)
@@ -297,7 +297,11 @@ static void gt64120_pci_mapping(GT64120State *s)
       s->PCI0IO_start = s->regs[GT_PCI0IOLD] << 21;
       s->PCI0IO_length = ((s->regs[GT_PCI0IOHD] + 1) - (s->regs[GT_PCI0IOLD] & 0x7f)) << 21;
       isa_mem_base = s->PCI0IO_start;
-      isa_mmio_init(s->PCI0IO_start, s->PCI0IO_length);
+#ifdef TARGET_WORDS_BIGENDIAN
+      isa_mmio_init(s->PCI0IO_start, s->PCI0IO_length, 1);
+#else
+      isa_mmio_init(s->PCI0IO_start, s->PCI0IO_length, 0);
+#endif
     }
 }
 
index 655ad62c1d8464ff84d96f651692ce76855d8862..97f69a25cbb50e93bed77592c260ed13bec427bb 100644 (file)
--- a/hw/isa.h
+++ b/hw/isa.h
@@ -32,7 +32,7 @@ ISADevice *isa_create_simple(const char *name);
 
 extern target_phys_addr_t isa_mem_base;
 
-void isa_mmio_init(target_phys_addr_t base, target_phys_addr_t size);
+void isa_mmio_init(target_phys_addr_t base, target_phys_addr_t size, int be);
 
 /* dma.c */
 int DMA_get_channel_mode (int nchan);
index ed0e189c8c939f89d56fefb6878b2b53ac97c2d7..66bdd2cef6f697ffacdd15b82d148866930a32ee 100644 (file)
@@ -31,21 +31,29 @@ static void isa_mmio_writeb (void *opaque, target_phys_addr_t addr,
     cpu_outb(addr & IOPORTS_MASK, val);
 }
 
-static void isa_mmio_writew (void *opaque, target_phys_addr_t addr,
-                                  uint32_t val)
+static void isa_mmio_writew_be(void *opaque, target_phys_addr_t addr,
+                               uint32_t val)
 {
-#ifdef TARGET_WORDS_BIGENDIAN
     val = bswap16(val);
-#endif
     cpu_outw(addr & IOPORTS_MASK, val);
 }
 
-static void isa_mmio_writel (void *opaque, target_phys_addr_t addr,
-                                uint32_t val)
+static void isa_mmio_writew_le(void *opaque, target_phys_addr_t addr,
+                               uint32_t val)
+{
+    cpu_outw(addr & IOPORTS_MASK, val);
+}
+
+static void isa_mmio_writel_be(void *opaque, target_phys_addr_t addr,
+                               uint32_t val)
 {
-#ifdef TARGET_WORDS_BIGENDIAN
     val = bswap32(val);
-#endif
+    cpu_outl(addr & IOPORTS_MASK, val);
+}
+
+static void isa_mmio_writel_le(void *opaque, target_phys_addr_t addr,
+                               uint32_t val)
+{
     cpu_outl(addr & IOPORTS_MASK, val);
 }
 
@@ -57,47 +65,78 @@ static uint32_t isa_mmio_readb (void *opaque, target_phys_addr_t addr)
     return val;
 }
 
-static uint32_t isa_mmio_readw (void *opaque, target_phys_addr_t addr)
+static uint32_t isa_mmio_readw_be(void *opaque, target_phys_addr_t addr)
 {
     uint32_t val;
 
     val = cpu_inw(addr & IOPORTS_MASK);
-#ifdef TARGET_WORDS_BIGENDIAN
     val = bswap16(val);
-#endif
     return val;
 }
 
-static uint32_t isa_mmio_readl (void *opaque, target_phys_addr_t addr)
+static uint32_t isa_mmio_readw_le(void *opaque, target_phys_addr_t addr)
+{
+    uint32_t val;
+
+    val = cpu_inw(addr & IOPORTS_MASK);
+    return val;
+}
+
+static uint32_t isa_mmio_readl_be(void *opaque, target_phys_addr_t addr)
 {
     uint32_t val;
 
     val = cpu_inl(addr & IOPORTS_MASK);
-#ifdef TARGET_WORDS_BIGENDIAN
     val = bswap32(val);
-#endif
     return val;
 }
 
-static CPUWriteMemoryFunc * const isa_mmio_write[] = {
+static uint32_t isa_mmio_readl_le(void *opaque, target_phys_addr_t addr)
+{
+    uint32_t val;
+
+    val = cpu_inl(addr & IOPORTS_MASK);
+    return val;
+}
+
+static CPUWriteMemoryFunc * const isa_mmio_write_be[] = {
+    &isa_mmio_writeb,
+    &isa_mmio_writew_be,
+    &isa_mmio_writel_be,
+};
+
+static CPUReadMemoryFunc * const isa_mmio_read_be[] = {
+    &isa_mmio_readb,
+    &isa_mmio_readw_be,
+    &isa_mmio_readl_be,
+};
+
+static CPUWriteMemoryFunc * const isa_mmio_write_le[] = {
     &isa_mmio_writeb,
-    &isa_mmio_writew,
-    &isa_mmio_writel,
+    &isa_mmio_writew_le,
+    &isa_mmio_writel_le,
 };
 
-static CPUReadMemoryFunc * const isa_mmio_read[] = {
+static CPUReadMemoryFunc * const isa_mmio_read_le[] = {
     &isa_mmio_readb,
-    &isa_mmio_readw,
-    &isa_mmio_readl,
+    &isa_mmio_readw_le,
+    &isa_mmio_readl_le,
 };
 
 static int isa_mmio_iomemtype = 0;
 
-void isa_mmio_init(target_phys_addr_t base, target_phys_addr_t size)
+void isa_mmio_init(target_phys_addr_t base, target_phys_addr_t size, int be)
 {
     if (!isa_mmio_iomemtype) {
-        isa_mmio_iomemtype = cpu_register_io_memory(isa_mmio_read,
-                                                    isa_mmio_write, NULL);
+        if (be) {
+            isa_mmio_iomemtype = cpu_register_io_memory(isa_mmio_read_be,
+                                                        isa_mmio_write_be,
+                                                        NULL);
+        } else {
+            isa_mmio_iomemtype = cpu_register_io_memory(isa_mmio_read_le,
+                                                        isa_mmio_write_le,
+                                                        NULL);
+        }
     }
     cpu_register_physical_memory(base, size, isa_mmio_iomemtype);
 }
index 94ebd36c29bab4bdefc26a64ebfac0c82c5a3896..ea74ea4ed08eab35a3e4953b62229001ebd7252b 100644 (file)
@@ -192,7 +192,12 @@ void mips_jazz_init (ram_addr_t ram_size,
     pcspk_init(pit);
 
     /* ISA IO space at 0x90000000 */
-    isa_mmio_init(0x90000000, 0x01000000);
+#ifdef TARGET_WORDS_BIGENDIAN
+    isa_mmio_init(0x90000000, 0x01000000, 1);
+#else
+    isa_mmio_init(0x90000000, 0x01000000, 0);
+#endif
+
     isa_mem_base = 0x11000000;
 
     /* Video card */
index 9a6f50cd15152f2ac714e2836a6f6cc96a77fb62..98d1a011194810a827ca71e9134ca27bb3a3fb2c 100644 (file)
@@ -182,7 +182,11 @@ mips_mipssim_init (ram_addr_t ram_size,
     cpu_mips_clock_init(env);
 
     /* Register 64 KB of ISA IO space at 0x1fd00000. */
-    isa_mmio_init(0x1fd00000, 0x00010000);
+#ifdef TARGET_WORDS_BIGENDIAN
+    isa_mmio_init(0x1fd00000, 0x00010000, 1);
+#else
+    isa_mmio_init(0x1fd00000, 0x00010000, 0);
+#endif
 
     /* A single 16450 sits at offset 0x3f8. It is attached to
        MIPS CPU INT2, which is interrupt 4. */
index 3edc8d5921a9df6df2050aa631d647e4128863cf..c29615c6bf1801eca26d1ea5831aa4824b19f3c0 100644 (file)
@@ -261,7 +261,11 @@ void mips_r4k_init (ram_addr_t ram_size,
     rtc_state = rtc_init(2000);
 
     /* Register 64 KB of ISA IO space at 0x14000000 */
-    isa_mmio_init(0x14000000, 0x00010000);
+#ifdef TARGET_WORDS_BIGENDIAN
+    isa_mmio_init(0x14000000, 0x00010000, 1);
+#else
+    isa_mmio_init(0x14000000, 0x00010000, 0);
+#endif
     isa_mem_base = 0x10000000;
 
     pit = pit_init(0x40, i8259[0]);
index abe0a560da54be3cd3fd0627ea78744e2465d093..2ee7aea0eebf24ba5d8faaf6319339dca10eb86e 100644 (file)
@@ -85,7 +85,7 @@ CPUState *ppc440ep_init(ram_addr_t *ram_size, PCIBus **pcip,
     if (!*pcip)
         printf("couldn't create PCI controller!\n");
 
-    isa_mmio_init(PPC440EP_PCI_IO, PPC440EP_PCI_IOLEN);
+    isa_mmio_init(PPC440EP_PCI_IO, PPC440EP_PCI_IOLEN, 1);
 
     if (serial_hds[0] != NULL) {
         serial_mm_init(0xef600300, 0, pic[0], PPC_SERIAL_MM_BAUDBASE,
index 7c100e77a4848c89f96acc163329d21a8d28c2dd..d131aa5e681eaf485a9a47c3c543f054da6dfb98 100644 (file)
@@ -291,7 +291,7 @@ static void ppc_core99_init (ram_addr_t ram_size,
     isa_mem_base = 0x80000000;
 
     /* Register 8 MB of ISA IO space */
-    isa_mmio_init(0xf2000000, 0x00800000);
+    isa_mmio_init(0xf2000000, 0x00800000, 1);
 
     /* UniN init */
     unin_memory = cpu_register_io_memory(unin_read, unin_write, NULL);
index bdc5bcd92ef93dbc4ac35f87f4171fc2c4b067de..27ddc013e6feb0b6c7f09baebf853ee930737cd8 100644 (file)
@@ -304,7 +304,7 @@ static void ppc_heathrow_init (ram_addr_t ram_size,
     isa_mem_base = 0x80000000;
 
     /* Register 2 MB of ISA IO space */
-    isa_mmio_init(0xfe000000, 0x00200000);
+    isa_mmio_init(0xfe000000, 0x00200000, 1);
 
     /* XXX: we register only 1 output pin for heathrow PIC */
     heathrow_irqs = qemu_mallocz(smp_cpus * sizeof(qemu_irq *));
index a83dba4a18c2feca9f1e43ec56c5b8116de15e4f..491ea7a07a72f04c56e9238ea043fd8d77b3c1af 100644 (file)
@@ -218,7 +218,7 @@ static void mpc8544ds_init(ram_addr_t ram_size,
     if (!pci_bus)
         printf("couldn't create PCI controller!\n");
 
-    isa_mmio_init(MPC8544_PCI_IO, MPC8544_PCI_IOLEN);
+    isa_mmio_init(MPC8544_PCI_IO, MPC8544_PCI_IOLEN, 1);
 
     if (pci_bus) {
         /* Register network interfaces. */
index 666383607f3d16592473ec1ebf87e5e56eceebd8..260c5913f8f9efa6160f23f762bbe008706061be 100644 (file)
@@ -520,10 +520,10 @@ static void ebus_mmio_mapfunc(PCIDevice *pci_dev, int region_num,
                  region_num, addr);
     switch (region_num) {
     case 0:
-        isa_mmio_init(addr, 0x1000000);
+        isa_mmio_init(addr, 0x1000000, 1);
         break;
     case 1:
-        isa_mmio_init(addr, 0x800000);
+        isa_mmio_init(addr, 0x800000, 1);
         break;
     }
 }
index 7048fb84d0eaa513cf77c2ee25cfba80ae403dc4..199bc1936ec0dc0aa2e0e28c5b332c1b1916755b 100644 (file)
@@ -108,7 +108,11 @@ static void pci_vpb_map(SysBusDevice *dev, target_phys_addr_t base)
 
     if (s->realview) {
         /* IO memory area.  */
-        isa_mmio_init(base + 0x03000000, 0x00100000);
+#ifdef TARGET_WORDS_BIGENDIAN
+        isa_mmio_init(base + 0x03000000, 0x00100000, 1);
+#else
+        isa_mmio_init(base + 0x03000000, 0x00100000, 0);
+#endif
     }
 }