printk("PCI: Ignoring controller...\n");
}
+static int pci_is_controller(char *model_name, int namelen, int node)
+{
+ int i;
+
+ for (i = 0; i < PCI_NUM_CONTROLLER_TYPES; i++) {
+ if (!strncmp(model_name,
+ pci_controller_table[i].model_name,
+ namelen)) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/* Is there some PCI controller in the system? */
+int pcic_present(void)
+{
+ char namebuf[16];
+ int node;
+
+ node = prom_getchild(prom_root_node);
+ while ((node = prom_searchsiblings(node, "pci")) != 0) {
+ int len, ret;
+
+ len = prom_getproperty(node, "model",
+ namebuf, sizeof(namebuf));
+
+ ret = 0;
+ if (len > 0) {
+ ret = pci_is_controller(namebuf, len, node);
+ } else {
+ len = prom_getproperty(node, "compatible",
+ namebuf, sizeof(namebuf));
+ if (len > 0)
+ ret = pci_controller_init(namebuf, len, node);
+ }
+ if (ret)
+ return ret;
+
+ node = prom_getsibling(node);
+ if (!node)
+ break;
+ }
+
+ return 0;
+}
+
/* Find each controller in the system, attach and initialize
* software state structure for each and link into the
* pci_controller_root. Setup the controller enough such
#include <asm/oplib.h>
#include <asm/bpp.h>
#include <asm/irq.h>
-#ifdef CONFIG_SPARC32
-#include <asm/pcic.h> /* pcic_present */
-#endif
struct sbus_bus *sbus_root = NULL;
static struct linux_prom_irqs irqs[PROMINTR_MAX] __initdata = { { 0 } };
+#ifdef CONFIG_PCI
+extern int pcic_present(void);
+#endif
+
/* Perhaps when I figure out more about the iommu we'll put a
* device registration routine here that probe_sbus() calls to
* setup the iommu for each Sbus.
(nd = prom_getchild(iommund)) == 0 ||
(nd = prom_searchsiblings(nd, "sbus")) == 0) {
#ifdef CONFIG_PCI
-#ifdef CONFIG_SPARC32
if (!pcic_present()) {
prom_printf("Neither SBUS nor PCI found.\n");
prom_halt();
}
-#else
- if (!pcibios_present()) {
- prom_printf("Neither SBUS nor PCI found.\n");
- prom_halt();
- }
-#endif
return 0;
#else
/* No reason to run further - the data access trap will occur. */