summaryrefslogtreecommitdiffstats
path: root/sys/arm
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2015-03-07 15:24:15 +0000
committerian <ian@FreeBSD.org>2015-03-07 15:24:15 +0000
commit550c116c702749dbb815eb45b23be45cebc2bddf (patch)
tree88196238c24ac63246b527ccfa8cfddcb66fc935 /sys/arm
parent7292a1689e4ab84c597c91255e4c24a2313d2420 (diff)
downloadFreeBSD-src-550c116c702749dbb815eb45b23be45cebc2bddf.zip
FreeBSD-src-550c116c702749dbb815eb45b23be45cebc2bddf.tar.gz
Move the uart_class definitions and fdt compat data into the individual
uart implementations, and export them using the new linker-set mechanism. Differential Revision: https://reviews.freebsd.org/D1993 Submitted by: Michal Meloun
Diffstat (limited to 'sys/arm')
-rw-r--r--sys/arm/at91/uart_bus_at91usart.c1
-rw-r--r--sys/arm/at91/uart_cpu_at91usart.c1
-rw-r--r--sys/arm/at91/uart_dev_at91usart.c12
-rw-r--r--sys/arm/freescale/vybrid/vf_uart.c9
-rw-r--r--sys/arm/samsung/exynos/exynos_uart.c9
-rw-r--r--sys/arm/samsung/s3c2xx0/uart_bus_s3c2410.c2
-rw-r--r--sys/arm/samsung/s3c2xx0/uart_cpu_s3c2410.c4
-rw-r--r--sys/arm/xilinx/uart_dev_cdnc.c9
8 files changed, 42 insertions, 5 deletions
diff --git a/sys/arm/at91/uart_bus_at91usart.c b/sys/arm/at91/uart_bus_at91usart.c
index 65829df..28182fa 100644
--- a/sys/arm/at91/uart_bus_at91usart.c
+++ b/sys/arm/at91/uart_bus_at91usart.c
@@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
#include "uart_if.h"
+extern struct uart_class at91_usart_class;
static int usart_at91_probe(device_t dev);
static device_method_t usart_at91_methods[] = {
diff --git a/sys/arm/at91/uart_cpu_at91usart.c b/sys/arm/at91/uart_cpu_at91usart.c
index 67a0a05..57c4a5a 100644
--- a/sys/arm/at91/uart_cpu_at91usart.c
+++ b/sys/arm/at91/uart_cpu_at91usart.c
@@ -51,6 +51,7 @@ bus_space_tag_t uart_bus_space_io;
bus_space_tag_t uart_bus_space_mem;
extern struct bus_space at91_bs_tag;
+extern struct uart_class at91_usart_class;
int
uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2)
diff --git a/sys/arm/at91/uart_dev_at91usart.c b/sys/arm/at91/uart_dev_at91usart.c
index 470c7aa..cac5e6a 100644
--- a/sys/arm/at91/uart_dev_at91usart.c
+++ b/sys/arm/at91/uart_dev_at91usart.c
@@ -40,6 +40,9 @@ __FBSDID("$FreeBSD$");
#include <dev/uart/uart.h>
#include <dev/uart/uart_cpu.h>
+#ifdef FDT
+#include <dev/uart/uart_cpu_fdt.h>
+#endif
#include <dev/uart/uart_bus.h>
#include <arm/at91/at91_usartreg.h>
#include <arm/at91/at91_pdcreg.h>
@@ -865,3 +868,12 @@ struct uart_class at91_usart_class = {
.uc_ops = &at91_usart_ops,
.uc_range = 8
};
+
+#ifdef FDT
+static struct ofw_compat_data compat_data[] = {
+ {"atmel,at91rm9200-usart",(uintptr_t)&at91_usart_class},
+ {"atmel,at91sam9260-usart",(uintptr_t)&at91_usart_class},
+ {NULL, (uintptr_t)NULL},
+};
+UART_FDT_CLASS_AND_DEVICE(compat_data);
+#endif
diff --git a/sys/arm/freescale/vybrid/vf_uart.c b/sys/arm/freescale/vybrid/vf_uart.c
index d181432..da11871 100644
--- a/sys/arm/freescale/vybrid/vf_uart.c
+++ b/sys/arm/freescale/vybrid/vf_uart.c
@@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
#include <dev/uart/uart.h>
#include <dev/uart/uart_cpu.h>
+#include <dev/uart/uart_cpu_fdt.h>
#include <dev/uart/uart_bus.h>
#include "uart_if.h"
@@ -270,7 +271,7 @@ static kobj_method_t vf_uart_methods[] = {
{ 0, 0 }
};
-struct uart_class uart_vybrid_class = {
+static struct uart_class uart_vybrid_class = {
"vybrid",
vf_uart_methods,
sizeof(struct vf_uart_softc),
@@ -279,6 +280,12 @@ struct uart_class uart_vybrid_class = {
.uc_rclk = 24000000 /* TODO: get value from CCM */
};
+static struct ofw_compat_data compat_data[] = {
+ {"fsl,mvf600-uart", (uintptr_t)&uart_vybrid_class},
+ {NULL, (uintptr_t)NULL},
+};
+UART_FDT_CLASS_AND_DEVICE(compat_data);
+
static int
vf_uart_bus_attach(struct uart_softc *sc)
{
diff --git a/sys/arm/samsung/exynos/exynos_uart.c b/sys/arm/samsung/exynos/exynos_uart.c
index 0b3c7f7..9e33bcb 100644
--- a/sys/arm/samsung/exynos/exynos_uart.c
+++ b/sys/arm/samsung/exynos/exynos_uart.c
@@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
#include <dev/uart/uart.h>
#include <dev/uart/uart_cpu.h>
+#include <dev/uart/uart_cpu_fdt.h>
#include <dev/uart/uart_bus.h>
#include <arm/samsung/exynos/exynos_uart.h>
@@ -372,7 +373,7 @@ exynos4210_bus_ioctl(struct uart_softc *sc, int request, intptr_t data)
return (EINVAL);
}
-struct uart_class uart_exynos4210_class = {
+static struct uart_class uart_exynos4210_class = {
"exynos4210 class",
exynos4210_methods,
1,
@@ -380,3 +381,9 @@ struct uart_class uart_exynos4210_class = {
.uc_range = 8,
.uc_rclk = 0,
};
+
+static struct ofw_compat_data compat_data[] = {
+ {"exynos", (uintptr_t)&uart_exynos4210_class},
+ {NULL, (uintptr_t)NULL},
+};
+UART_FDT_CLASS_AND_DEVICE(compat_data);
diff --git a/sys/arm/samsung/s3c2xx0/uart_bus_s3c2410.c b/sys/arm/samsung/s3c2xx0/uart_bus_s3c2410.c
index 2102d8b..882a546 100644
--- a/sys/arm/samsung/s3c2xx0/uart_bus_s3c2410.c
+++ b/sys/arm/samsung/s3c2xx0/uart_bus_s3c2410.c
@@ -19,6 +19,8 @@ __FBSDID("$FreeBSD$");
#include "uart_if.h"
+extern struct uart_class uart_s3c2410_class;
+
static int uart_s3c2410_probe(device_t dev);
static device_method_t uart_s3c2410_methods[] = {
diff --git a/sys/arm/samsung/s3c2xx0/uart_cpu_s3c2410.c b/sys/arm/samsung/s3c2xx0/uart_cpu_s3c2410.c
index 1beb12d..4be4b39 100644
--- a/sys/arm/samsung/s3c2xx0/uart_cpu_s3c2410.c
+++ b/sys/arm/samsung/s3c2xx0/uart_cpu_s3c2410.c
@@ -39,11 +39,11 @@ __FBSDID("$FreeBSD$");
#include <arm/samsung/s3c2xx0/s3c2xx0var.h>
+extern struct uart_class uart_s3c2410_class;
+
bus_space_tag_t uart_bus_space_io;
bus_space_tag_t uart_bus_space_mem;
-extern struct uart_ops uart_s3c2410_ops;
-
vm_offset_t s3c2410_uart_vaddr;
unsigned int s3c2410_pclk;
diff --git a/sys/arm/xilinx/uart_dev_cdnc.c b/sys/arm/xilinx/uart_dev_cdnc.c
index 526c546..96092ba 100644
--- a/sys/arm/xilinx/uart_dev_cdnc.c
+++ b/sys/arm/xilinx/uart_dev_cdnc.c
@@ -48,6 +48,7 @@ __FBSDID("$FreeBSD$");
#include <dev/uart/uart.h>
#include <dev/uart/uart_cpu.h>
+#include <dev/uart/uart_cpu_fdt.h>
#include <dev/uart/uart_bus.h>
#include "uart_if.h"
@@ -698,10 +699,16 @@ cdnc_uart_bus_ungrab(struct uart_softc *sc)
CDNC_UART_INT_DMSI);
}
-struct uart_class uart_cdnc_class = {
+static struct uart_class uart_cdnc_class = {
"cdnc_uart",
cdnc_uart_bus_methods,
sizeof(struct uart_softc),
.uc_ops = &cdnc_uart_ops,
.uc_range = 8
};
+
+static struct ofw_compat_data compat_data[] = {
+ {"cadence,uart", (uintptr_t)&uart_cdnc_class},
+ {NULL, (uintptr_t)NULL},
+};
+UART_FDT_CLASS_AND_DEVICE(compat_data);
OpenPOWER on IntegriCloud