diff --git a/hw/apb_pci.c b/hw/apb_pci.c
index 8fc8f21..ec29217 100644
--- a/hw/apb_pci.c
+++ b/hw/apb_pci.c
@@ -29,6 +29,7 @@
 #include "sysbus.h"
 #include "pci.h"
 #include "pci_host.h"
+#include "apb_pci.h"
 
 /* debug APB */
 //#define DEBUG_APB
diff --git a/hw/apb_pci.h b/hw/apb_pci.h
new file mode 100644
index 0000000..8869f9d
--- /dev/null
+++ b/hw/apb_pci.h
@@ -0,0 +1,9 @@
+#ifndef APB_PCI_H
+#define APB_PCI_H
+
+#include "qemu-common.h"
+
+PCIBus *pci_apb_init(target_phys_addr_t special_base,
+                     target_phys_addr_t mem_base,
+                     qemu_irq *pic, PCIBus **bus2, PCIBus **bus3);
+#endif
diff --git a/hw/lsi53c895a.c b/hw/lsi53c895a.c
index 7e47fc9..8b8a80b 100644
--- a/hw/lsi53c895a.c
+++ b/hw/lsi53c895a.c
@@ -31,6 +31,8 @@ do { fprintf(stderr, "lsi_scsi: error: " fmt , ## __VA_ARGS__); exit(1);} while
 do { fprintf(stderr, "lsi_scsi: error: " fmt , ## __VA_ARGS__);} while (0)
 #endif
 
+#define LSI_MAX_DEVS 7
+
 #define LSI_SCNTL0_TRG    0x01
 #define LSI_SCNTL0_AAP    0x02
 #define LSI_SCNTL0_EPC    0x08
diff --git a/hw/mips_malta.c b/hw/mips_malta.c
index 30fa6b8..ebec76f 100644
--- a/hw/mips_malta.c
+++ b/hw/mips_malta.c
@@ -32,6 +32,8 @@
 #include "flash.h"
 #include "mips.h"
 #include "pci.h"
+#include "usb-uhci.h"
+#include "vmware_vga.h"
 #include "qemu-char.h"
 #include "sysemu.h"
 #include "audio/audio.h"
diff --git a/hw/pc.c b/hw/pc.c
index bf4718e..bc1bb34 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -25,6 +25,11 @@
 #include "pc.h"
 #include "fdc.h"
 #include "pci.h"
+#include "vmware_vga.h"
+#include "usb-uhci.h"
+#include "usb-ohci.h"
+#include "prep_pci.h"
+#include "apb_pci.h"
 #include "block.h"
 #include "sysemu.h"
 #include "audio/audio.h"
diff --git a/hw/pci.h b/hw/pci.h
index 39ee0f7..c649cfe 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -414,31 +414,6 @@ static inline uint32_t pci_config_size(PCIDevice *d)
     return pci_is_express(d) ? PCIE_CONFIG_SPACE_SIZE : PCI_CONFIG_SPACE_SIZE;
 }
 
-/* lsi53c895a.c */
-#define LSI_MAX_DEVS 7
-
-/* vmware_vga.c */
-void pci_vmsvga_init(PCIBus *bus);
-
-/* usb-uhci.c */
-void usb_uhci_piix3_init(PCIBus *bus, int devfn);
-void usb_uhci_piix4_init(PCIBus *bus, int devfn);
-
-/* usb-ohci.c */
-void usb_ohci_init_pci(struct PCIBus *bus, int devfn);
-
-/* prep_pci.c */
-PCIBus *pci_prep_init(qemu_irq *pic);
-
-/* apb_pci.c */
-PCIBus *pci_apb_init(target_phys_addr_t special_base,
-                     target_phys_addr_t mem_base,
-                     qemu_irq *pic, PCIBus **bus2, PCIBus **bus3);
-
-/* sh_pci.c */
-PCIBus *sh_pci_register_bus(pci_set_irq_fn set_irq, pci_map_irq_fn map_irq,
-                            void *pic, int devfn_min, int nirq);
-
 /* These are not pci specific. Should move into a separate header.
  * Only pci.c uses them, so keep them here for now.
  */
diff --git a/hw/ppc_newworld.c b/hw/ppc_newworld.c
index da868d3..7579ddd 100644
--- a/hw/ppc_newworld.c
+++ b/hw/ppc_newworld.c
@@ -29,6 +29,7 @@
 #include "nvram.h"
 #include "pc.h"
 #include "pci.h"
+#include "usb-ohci.h"
 #include "net.h"
 #include "sysemu.h"
 #include "boards.h"
diff --git a/hw/ppc_oldworld.c b/hw/ppc_oldworld.c
index 9b49a3d..32fd03a 100644
--- a/hw/ppc_oldworld.c
+++ b/hw/ppc_oldworld.c
@@ -32,6 +32,7 @@
 #include "net.h"
 #include "isa.h"
 #include "pci.h"
+#include "usb-ohci.h"
 #include "boards.h"
 #include "fw_cfg.h"
 #include "escc.h"
diff --git a/hw/ppc_prep.c b/hw/ppc_prep.c
index cd561e1..eb758f2 100644
--- a/hw/ppc_prep.c
+++ b/hw/ppc_prep.c
@@ -29,6 +29,8 @@
 #include "sysemu.h"
 #include "isa.h"
 #include "pci.h"
+#include "prep_pci.h"
+#include "usb-ohci.h"
 #include "ppc.h"
 #include "boards.h"
 #include "qemu-log.h"
diff --git a/hw/prep_pci.c b/hw/prep_pci.c
index a338f81..80e20ac 100644
--- a/hw/prep_pci.c
+++ b/hw/prep_pci.c
@@ -25,6 +25,7 @@
 #include "hw.h"
 #include "pci.h"
 #include "pci_host.h"
+#include "prep_pci.h"
 
 typedef PCIHostState PREPPCIState;
 
diff --git a/hw/prep_pci.h b/hw/prep_pci.h
new file mode 100644
index 0000000..cd68512
--- /dev/null
+++ b/hw/prep_pci.h
@@ -0,0 +1,8 @@
+#ifndef QEMU_PREP_PCI_H
+#define QEMU_PREP_PCI_H
+
+#include "qemu-common.h"
+
+PCIBus *pci_prep_init(qemu_irq *pic);
+
+#endif
diff --git a/hw/r2d.c b/hw/r2d.c
index c074a6e..e4c02f0 100644
--- a/hw/r2d.c
+++ b/hw/r2d.c
@@ -29,6 +29,7 @@
 #include "sysemu.h"
 #include "boards.h"
 #include "pci.h"
+#include "sh_pci.h"
 #include "net.h"
 #include "sh7750_regs.h"
 #include "ide.h"
diff --git a/hw/realview.c b/hw/realview.c
index c494a20..d5e55aa 100644
--- a/hw/realview.c
+++ b/hw/realview.c
@@ -12,6 +12,7 @@
 #include "primecell.h"
 #include "devices.h"
 #include "pci.h"
+#include "usb-ohci.h"
 #include "net.h"
 #include "sysemu.h"
 #include "boards.h"
diff --git a/hw/sh_pci.c b/hw/sh_pci.c
index 4277b01..52dc02e 100644
--- a/hw/sh_pci.c
+++ b/hw/sh_pci.c
@@ -24,6 +24,7 @@
 #include "hw.h"
 #include "sh.h"
 #include "pci.h"
+#include "sh_pci.h"
 #include "bswap.h"
 
 typedef struct {
diff --git a/hw/sh_pci.h b/hw/sh_pci.h
new file mode 100644
index 0000000..b1a5ec3
--- /dev/null
+++ b/hw/sh_pci.h
@@ -0,0 +1,9 @@
+#ifndef QEMU_SH_PCI_H
+#define QEMU_SH_PCI_H
+
+#include "qemu-common.h"
+
+PCIBus *sh_pci_register_bus(pci_set_irq_fn set_irq, pci_map_irq_fn map_irq,
+                            void *pic, int devfn_min, int nirq);
+
+#endif
diff --git a/hw/sun4u.c b/hw/sun4u.c
index 2189fa0..a7a227b 100644
--- a/hw/sun4u.c
+++ b/hw/sun4u.c
@@ -23,6 +23,7 @@
  */
 #include "hw.h"
 #include "pci.h"
+#include "apb_pci.h"
 #include "pc.h"
 #include "nvram.h"
 #include "fdc.h"
diff --git a/hw/usb-ohci.c b/hw/usb-ohci.c
index 0f7f4de..7ab3a98 100644
--- a/hw/usb-ohci.c
+++ b/hw/usb-ohci.c
@@ -32,6 +32,7 @@
 #include "pci.h"
 #include "pxa.h"
 #include "devices.h"
+#include "usb-ohci.h"
 
 //#define DEBUG_OHCI
 /* Dump packet contents.  */
diff --git a/hw/usb-ohci.h b/hw/usb-ohci.h
new file mode 100644
index 0000000..eefcef3
--- /dev/null
+++ b/hw/usb-ohci.h
@@ -0,0 +1,9 @@
+#ifndef QEMU_USB_OHCI_H
+#define QEMU_USB_OHCI_H
+
+#include "qemu-common.h"
+
+void usb_ohci_init_pci(struct PCIBus *bus, int devfn);
+
+#endif
+
diff --git a/hw/usb-uhci.c b/hw/usb-uhci.c
index 8babb02..671916e 100644
--- a/hw/usb-uhci.c
+++ b/hw/usb-uhci.c
@@ -29,6 +29,7 @@
 #include "usb.h"
 #include "pci.h"
 #include "qemu-timer.h"
+#include "usb-uhci.h"
 
 //#define DEBUG
 //#define DEBUG_DUMP_DATA
diff --git a/hw/usb-uhci.h b/hw/usb-uhci.h
new file mode 100644
index 0000000..911948e
--- /dev/null
+++ b/hw/usb-uhci.h
@@ -0,0 +1,9 @@
+#ifndef QEMU_USB_UHCI_H
+#define QEMU_USB_UHCI_H
+
+#include "qemu-common.h"
+
+void usb_uhci_piix3_init(PCIBus *bus, int devfn);
+void usb_uhci_piix4_init(PCIBus *bus, int devfn);
+
+#endif
diff --git a/hw/versatilepb.c b/hw/versatilepb.c
index e8ebdf1..bcbcc55 100644
--- a/hw/versatilepb.c
+++ b/hw/versatilepb.c
@@ -14,6 +14,7 @@
 #include "net.h"
 #include "sysemu.h"
 #include "pci.h"
+#include "usb-ohci.h"
 #include "boards.h"
 
 /* Primary interrupt controller.  */
diff --git a/hw/vmware_vga.c b/hw/vmware_vga.c
index 33e876e..bb34101 100644
--- a/hw/vmware_vga.c
+++ b/hw/vmware_vga.c
@@ -24,6 +24,7 @@
 #include "hw.h"
 #include "console.h"
 #include "pci.h"
+#include "vmware_vga.h"
 
 #define VERBOSE
 #undef DIRECT_VRAM
diff --git a/hw/vmware_vga.h b/hw/vmware_vga.h
new file mode 100644
index 0000000..2e0813c
--- /dev/null
+++ b/hw/vmware_vga.h
@@ -0,0 +1,9 @@
+#ifndef QEMU_VMWARE_VGA_H
+#define QEMU_VMWARE_VGA_H
+
+#include "qemu-common.h"
+
+/* vmware_vga.c */
+void pci_vmsvga_init(PCIBus *bus);
+
+#endif
