obj-y := enlighten.o hypercall.o grant-table.o p2m.o mm.o
obj-$(CONFIG_XEN_EFI) += efi.o
+obj-$(CONFIG_PCI) += pci.o
--- /dev/null
+#include <asm/xen/xen-ops.h>
+#include <linux/printk.h>
+
+void xen_pci_register_host_bridge(struct pci_host_bridge *bridge)
+{
+// struct physdev_pci_mmcfg_reserved r;
+ struct pci_bus *bus = bridge->bus;
+
+ printk("============== Register Hostbridge ================\n");
+
+ printk("seg %u\n", pci_domain_nr(bus));
+
+ while (1);
+}
#ifndef _ASM_XEN_OPS_H
#define _ASM_XEN_OPS_H
+#include <linux/pci.h>
+#include <xen/xen-ops.h>
+#include <asm/xen/xen-ops.h>
+
void xen_efi_runtime_setup(void);
+void xen_pci_register_host_bridge(struct pci_host_bridge *bridge);
+
#endif /* _ASM_XEN_OPS_H */
#include <linux/pci-acpi.h>
#include <linux/pci-ecam.h>
#include <linux/slab.h>
+#include <asm/xen/xen-ops.h>
#ifdef CONFIG_ACPI
/*
void pcibios_add_bus(struct pci_bus *bus)
{
acpi_pci_add_bus(bus);
+
+ /*
+ * XXX This function is also called for child bus. Maybe we should
+ * hooked up in another function or check if we are registering
+ * the root parent
+ */
+ if (xen_initial_domain() && !pci_is_root_bus(bus))
+ xen_pci_register_host_bridge(pci_find_host_bridge(bus));
}
void pcibios_remove_bus(struct pci_bus *bus)
{
acpi_pci_remove_bus(bus);
+ /* XXX Implement remove bus */
}
#endif
xen-arm-y += $(addprefix ../../arm/xen/, enlighten.o grant-table.o p2m.o mm.o)
obj-y := xen-arm.o hypercall.o
obj-$(CONFIG_XEN_EFI) += $(addprefix ../../arm/xen/, efi.o)
+obj-$(CONFIG_PCI) += $(addprefix ../../arm/xen/, pci.o)