aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/uart/uart_bus_isa.c2
-rw-r--r--sys/dev/uart/uart_cpu.h1
-rw-r--r--sys/dev/uart/uart_cpu_alpha.c6
-rw-r--r--sys/dev/uart/uart_cpu_amd64.c6
-rw-r--r--sys/dev/uart/uart_cpu_i386.c6
-rw-r--r--sys/dev/uart/uart_cpu_ia64.c6
-rw-r--r--sys/dev/uart/uart_cpu_pc98.c6
-rw-r--r--sys/dev/uart/uart_cpu_sparc64.c46
8 files changed, 79 insertions, 0 deletions
diff --git a/sys/dev/uart/uart_bus_isa.c b/sys/dev/uart/uart_bus_isa.c
index d6b5cda734bbd..72e0549879540 100644
--- a/sys/dev/uart/uart_bus_isa.c
+++ b/sys/dev/uart/uart_bus_isa.c
@@ -39,11 +39,13 @@ __FBSDID("$FreeBSD$");
#include <dev/uart/uart.h>
#include <dev/uart/uart_bus.h>
+#include <dev/uart/uart_cpu.h>
static int uart_isa_probe(device_t dev);
static device_method_t uart_isa_methods[] = {
/* Device interface */
+ DEVMETHOD(device_identify, uart_cpu_identify),
DEVMETHOD(device_probe, uart_isa_probe),
DEVMETHOD(device_attach, uart_bus_attach),
DEVMETHOD(device_detach, uart_bus_detach),
diff --git a/sys/dev/uart/uart_cpu.h b/sys/dev/uart/uart_cpu.h
index 462eb59b1e830..78626339fa149 100644
--- a/sys/dev/uart/uart_cpu.h
+++ b/sys/dev/uart/uart_cpu.h
@@ -75,6 +75,7 @@ int uart_cpu_getdev(int, struct uart_devinfo *);
int uart_getenv(int, struct uart_devinfo *);
void uart_add_sysdev(struct uart_devinfo *);
+void uart_cpu_identify(driver_t *, device_t);
/*
* Operations for low-level access to the UART. Primarily for use
diff --git a/sys/dev/uart/uart_cpu_alpha.c b/sys/dev/uart/uart_cpu_alpha.c
index a3a132f6aa2bb..67b49b4f0c50d 100644
--- a/sys/dev/uart/uart_cpu_alpha.c
+++ b/sys/dev/uart/uart_cpu_alpha.c
@@ -123,3 +123,9 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di)
return (ENXIO);
}
+
+void
+uart_cpu_identify(driver_t *driver, device_t parent)
+{
+
+}
diff --git a/sys/dev/uart/uart_cpu_amd64.c b/sys/dev/uart/uart_cpu_amd64.c
index c0270ae6a2cbd..8a32574f0c32e 100644
--- a/sys/dev/uart/uart_cpu_amd64.c
+++ b/sys/dev/uart/uart_cpu_amd64.c
@@ -99,3 +99,9 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di)
return (ENXIO);
}
+
+void
+uart_cpu_identify(driver_t *driver, device_t parent)
+{
+
+}
diff --git a/sys/dev/uart/uart_cpu_i386.c b/sys/dev/uart/uart_cpu_i386.c
index 93ca77079459b..7cf2fd09c089d 100644
--- a/sys/dev/uart/uart_cpu_i386.c
+++ b/sys/dev/uart/uart_cpu_i386.c
@@ -99,3 +99,9 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di)
return (ENXIO);
}
+
+void
+uart_cpu_identify(driver_t *driver, device_t parent)
+{
+
+}
diff --git a/sys/dev/uart/uart_cpu_ia64.c b/sys/dev/uart/uart_cpu_ia64.c
index 6c3f3809826e5..70464567036a9 100644
--- a/sys/dev/uart/uart_cpu_ia64.c
+++ b/sys/dev/uart/uart_cpu_ia64.c
@@ -104,3 +104,9 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di)
/* Check the environment. */
return (uart_getenv(devtype, di));
}
+
+void
+uart_cpu_identify(driver_t *driver, device_t parent)
+{
+
+}
diff --git a/sys/dev/uart/uart_cpu_pc98.c b/sys/dev/uart/uart_cpu_pc98.c
index ffe7957ecec9c..3fc263017afb1 100644
--- a/sys/dev/uart/uart_cpu_pc98.c
+++ b/sys/dev/uart/uart_cpu_pc98.c
@@ -104,3 +104,9 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di)
return (ENXIO);
}
+
+void
+uart_cpu_identify(driver_t *driver, device_t parent)
+{
+
+}
diff --git a/sys/dev/uart/uart_cpu_sparc64.c b/sys/dev/uart/uart_cpu_sparc64.c
index df89a2e0789d0..a56b0ad7b3c60 100644
--- a/sys/dev/uart/uart_cpu_sparc64.c
+++ b/sys/dev/uart/uart_cpu_sparc64.c
@@ -27,18 +27,28 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include "opt_isa.h"
+
#include <sys/param.h>
#include <sys/systm.h>
#include <machine/bus.h>
#include <machine/bus_private.h>
+#include <machine/resource.h>
+#include <dev/ofw/ofw_bus.h>
#include <dev/ofw/openfirm.h>
#include <machine/ofw_machdep.h>
+#include <isa/isavar.h>
+
#include <dev/uart/uart.h>
+#include <dev/uart/uart_bus.h>
#include <dev/uart/uart_cpu.h>
+#include <sparc64/pci/ofw_pci.h>
+#include <sparc64/isa/ofw_isa.h>
+
bus_space_tag_t uart_bus_space_io;
bus_space_tag_t uart_bus_space_mem;
@@ -240,3 +250,39 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di)
(par == 'o') ? UART_PARITY_ODD : UART_PARITY_EVEN;
return (0);
}
+
+void
+uart_cpu_identify(driver_t *driver, device_t parent)
+{
+#ifdef DEV_ISA
+ char buf[32];
+ struct isa_regs reg;
+ device_t child;
+ phandle_t node;
+ ofw_isa_intr_t intr;
+#endif
+
+#ifdef DEV_ISA
+ if (strcmp(device_get_name(parent), "isa") == 0) {
+ if ((node = ofw_bus_get_node(device_get_parent(parent))) == 0)
+ return;
+ for (node = OF_child(node); node != 0; node = OF_peer(node)) {
+ if (OF_getprop(node, "name", buf, sizeof(buf)) == -1)
+ continue;
+ if (strcmp(buf, "serial") != 0)
+ continue;
+ if ((OF_getprop(node, "reg", &reg,
+ sizeof(reg)) == -1) ||
+ (OF_getprop(node, "interrupts", &intr,
+ sizeof(intr)) == -1))
+ continue;
+ if ((child = BUS_ADD_CHILD(parent, ISA_ORDER_SENSITIVE,
+ uart_driver_name, -1)) == NULL)
+ return;
+ bus_set_resource(child, SYS_RES_IOPORT, 0,
+ ISA_REG_PHYS(&reg), reg.size);
+ bus_set_resource(child, SYS_RES_IRQ, 0, intr, 1);
+ }
+ }
+#endif
+}