summaryrefslogtreecommitdiffstats
path: root/sys/amd64
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1999-08-22 19:59:29 +0000
committerpeter <peter@FreeBSD.org>1999-08-22 19:59:29 +0000
commit56dea87fc0c79d9252ca073a745afe8209069e04 (patch)
tree40417a7d19b11fb8b4f01e4f62120b92ec48ce7a /sys/amd64
parent9dc99a106d12372648f0bae23d3a3f5f1507715a (diff)
downloadFreeBSD-src-56dea87fc0c79d9252ca073a745afe8209069e04.zip
FreeBSD-src-56dea87fc0c79d9252ca073a745afe8209069e04.tar.gz
Zap a heap of unused cruft now. We don't need the ISA/EISA/PCI hooks
here any more as they are self identifying. Only PNP remains but that will be replaced any day now. Also reword a comment that had been XXX'ed to death to make it clear[er] why we don't enable interrupts before probing. PCIBIOS interrupt routing controls may make this possible to fix one day.
Diffstat (limited to 'sys/amd64')
-rw-r--r--sys/amd64/amd64/autoconf.c59
1 files changed, 24 insertions, 35 deletions
diff --git a/sys/amd64/amd64/autoconf.c b/sys/amd64/amd64/autoconf.c
index abb1263..c0ab851 100644
--- a/sys/amd64/amd64/autoconf.c
+++ b/sys/amd64/amd64/autoconf.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)autoconf.c 7.1 (Berkeley) 5/9/91
- * $Id: autoconf.c,v 1.131 1999/08/09 10:34:40 phk Exp $
+ * $Id: autoconf.c,v 1.132 1999/08/13 10:29:16 phk Exp $
*/
/*
@@ -72,28 +72,12 @@
#include <machine/smp.h>
#endif /* APIC_IO */
-#include <i386/isa/icu.h>
-
#include "pnp.h"
#if NPNP > 0
-#include <i386/isa/isa_device.h>
#include <i386/isa/pnp.h>
#endif
-#include "eisa.h"
-#if NEISA > 0
-#include <i386/eisa/eisaconf.h>
-#endif
-
-#include "pci.h"
-#if NPCI > 0
-#include <pci/pcivar.h>
-#endif
-
-#include "isa.h"
-#if NISA > 0
device_t isa_bus_device = 0;
-#endif
static void configure_first __P((void *));
static void configure __P((void *));
@@ -206,19 +190,21 @@ configure(dummy)
void *dummy;
{
- /* Allow all routines to decide for themselves if they want intrs */
- /*
- * XXX Since this cannot be achieved on all architectures, we should
- * XXX go back to disabling all interrupts until configuration is
- * XXX completed and switch any devices that rely on the current
- * XXX behavior to no longer rely on interrupts or to register an
- * XXX interrupt_driven_config_hook for the task.
- */
/*
- * XXX The above is wrong, because we're implicitly at splhigh(),
- * XXX and should stay there, so enabling interrupts in the CPU
- * XXX and the ICU at most gives pending interrupts which just get
- * XXX in the way.
+ * Activate the ICU's. Note that we are explicitly at splhigh()
+ * at present as we have no way to disable stray PCI level triggered
+ * interrupts until the devices have had a driver attached. This
+ * is particularly a problem when the interrupts are shared. For
+ * example, if IRQ 10 is shared between a disk and network device
+ * and the disk device generates an interrupt, if we "activate"
+ * IRQ 10 when the network driver is set up, then we will get
+ * recursive interrupt 10's as nothing will know how to turn off
+ * the disk device's interrupt.
+ *
+ * Having the ICU's active means we can probe interrupt routing to
+ * see if a device causes the corresponding pending bit to be set.
+ *
+ * This is all rather inconvenient.
*/
#ifdef APIC_IO
bsp_apic_configure();
@@ -228,20 +214,23 @@ configure(dummy)
INTREN(IRQ_SLAVE);
#endif /* APIC_IO */
-#if NPNP > 0
- pnp_configure();
-#endif
-
/* nexus0 is the top of the i386 device tree */
device_add_child(root_bus, "nexus", 0, 0);
/* initialize new bus architecture */
root_bus_configure();
-#if NISA > 0
+#if NPNP > 0
+ /* Activate PNP. If no drivers are found, let ISA probe them.. */
+ pnp_configure();
+#endif
+
+ /*
+ * Explicitly probe and attach ISA last. The isa bus saves
+ * it's device node at attach time for us here.
+ */
if (isa_bus_device)
bus_generic_attach(isa_bus_device);
-#endif
/*
* Now we're ready to handle (pending) interrupts.
OpenPOWER on IntegriCloud