Author: ian
Date: Sat Mar  7 15:24:15 2015
New Revision: 279724
URL: https://svnweb.freebsd.org/changeset/base/279724

Log:
  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

Modified:
  head/sys/arm/at91/uart_bus_at91usart.c
  head/sys/arm/at91/uart_cpu_at91usart.c
  head/sys/arm/at91/uart_dev_at91usart.c
  head/sys/arm/freescale/vybrid/vf_uart.c
  head/sys/arm/samsung/exynos/exynos_uart.c
  head/sys/arm/samsung/s3c2xx0/uart_bus_s3c2410.c
  head/sys/arm/samsung/s3c2xx0/uart_cpu_s3c2410.c
  head/sys/arm/xilinx/uart_dev_cdnc.c
  head/sys/dev/uart/uart.h
  head/sys/dev/uart/uart_bus_fdt.c
  head/sys/dev/uart/uart_dev_imx.c
  head/sys/dev/uart/uart_dev_lpc.c
  head/sys/dev/uart/uart_dev_msm.c
  head/sys/dev/uart/uart_dev_ns8250.c
  head/sys/dev/uart/uart_dev_pl011.c
  head/sys/dev/uart/uart_dev_ti8250.c
  head/sys/dev/uart/uart_subr.c

Modified: head/sys/arm/at91/uart_bus_at91usart.c
==============================================================================
--- head/sys/arm/at91/uart_bus_at91usart.c      Sat Mar  7 15:18:57 2015        
(r279723)
+++ head/sys/arm/at91/uart_bus_at91usart.c      Sat Mar  7 15:24:15 2015        
(r279724)
@@ -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[] = {

Modified: head/sys/arm/at91/uart_cpu_at91usart.c
==============================================================================
--- head/sys/arm/at91/uart_cpu_at91usart.c      Sat Mar  7 15:18:57 2015        
(r279723)
+++ head/sys/arm/at91/uart_cpu_at91usart.c      Sat Mar  7 15:24:15 2015        
(r279724)
@@ -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)

Modified: head/sys/arm/at91/uart_dev_at91usart.c
==============================================================================
--- head/sys/arm/at91/uart_dev_at91usart.c      Sat Mar  7 15:18:57 2015        
(r279723)
+++ head/sys/arm/at91/uart_dev_at91usart.c      Sat Mar  7 15:24:15 2015        
(r279724)
@@ -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

Modified: head/sys/arm/freescale/vybrid/vf_uart.c
==============================================================================
--- head/sys/arm/freescale/vybrid/vf_uart.c     Sat Mar  7 15:18:57 2015        
(r279723)
+++ head/sys/arm/freescale/vybrid/vf_uart.c     Sat Mar  7 15:24:15 2015        
(r279724)
@@ -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)
 {

Modified: head/sys/arm/samsung/exynos/exynos_uart.c
==============================================================================
--- head/sys/arm/samsung/exynos/exynos_uart.c   Sat Mar  7 15:18:57 2015        
(r279723)
+++ head/sys/arm/samsung/exynos/exynos_uart.c   Sat Mar  7 15:24:15 2015        
(r279724)
@@ -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 *
        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);

Modified: head/sys/arm/samsung/s3c2xx0/uart_bus_s3c2410.c
==============================================================================
--- head/sys/arm/samsung/s3c2xx0/uart_bus_s3c2410.c     Sat Mar  7 15:18:57 
2015        (r279723)
+++ head/sys/arm/samsung/s3c2xx0/uart_bus_s3c2410.c     Sat Mar  7 15:24:15 
2015        (r279724)
@@ -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[] = {

Modified: head/sys/arm/samsung/s3c2xx0/uart_cpu_s3c2410.c
==============================================================================
--- head/sys/arm/samsung/s3c2xx0/uart_cpu_s3c2410.c     Sat Mar  7 15:18:57 
2015        (r279723)
+++ head/sys/arm/samsung/s3c2xx0/uart_cpu_s3c2410.c     Sat Mar  7 15:24:15 
2015        (r279724)
@@ -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;
 

Modified: head/sys/arm/xilinx/uart_dev_cdnc.c
==============================================================================
--- head/sys/arm/xilinx/uart_dev_cdnc.c Sat Mar  7 15:18:57 2015        
(r279723)
+++ head/sys/arm/xilinx/uart_dev_cdnc.c Sat Mar  7 15:24:15 2015        
(r279724)
@@ -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 *
            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);

Modified: head/sys/dev/uart/uart.h
==============================================================================
--- head/sys/dev/uart/uart.h    Sat Mar  7 15:18:57 2015        (r279723)
+++ head/sys/dev/uart/uart.h    Sat Mar  7 15:24:15 2015        (r279724)
@@ -64,22 +64,12 @@ struct uart_bas {
  */
 struct uart_class;
 
-extern struct uart_class uart_imx_class __attribute__((weak));
-extern struct uart_class uart_msm_class __attribute__((weak));
 extern struct uart_class uart_ns8250_class __attribute__((weak));
 extern struct uart_class uart_quicc_class __attribute__((weak));
 extern struct uart_class uart_s3c2410_class __attribute__((weak));
 extern struct uart_class uart_sab82532_class __attribute__((weak));
 extern struct uart_class uart_sbbc_class __attribute__((weak));
 extern struct uart_class uart_z8530_class __attribute__((weak));
-extern struct uart_class uart_lpc_class __attribute__((weak));
-extern struct uart_class uart_pl011_class __attribute__((weak));
-extern struct uart_class uart_cdnc_class __attribute__((weak));
-extern struct uart_class uart_ti8250_class __attribute__((weak));
-extern struct uart_class uart_vybrid_class __attribute__((weak));
-extern struct uart_class at91_usart_class __attribute__((weak));
-extern struct uart_class uart_exynos4210_class __attribute__((weak));
-
 
 #ifdef PC98
 struct uart_class *uart_pc98_getdev(u_long port);

Modified: head/sys/dev/uart/uart_bus_fdt.c
==============================================================================
--- head/sys/dev/uart/uart_bus_fdt.c    Sat Mar  7 15:18:57 2015        
(r279723)
+++ head/sys/dev/uart/uart_bus_fdt.c    Sat Mar  7 15:24:15 2015        
(r279724)
@@ -63,37 +63,6 @@ static driver_t uart_fdt_driver = {
        sizeof(struct uart_softc),
 };
 
-/*
- * Compatible devices.  Keep this sorted in most- to least-specific order 
first,
- * alphabetical second.  That is, "zwie,ns16550" should appear before "ns16550"
- * on the theory that the zwie driver knows how to make better use of the
- * hardware than the generic driver.  Likewise with chips within a family, the
- * highest-numbers / most recent models should probably appear earlier.
- */
-static struct ofw_compat_data compat_data[] = {
-       {"arm,pl011",           (uintptr_t)&uart_pl011_class},
-       {"atmel,at91rm9200-usart",(uintptr_t)&at91_usart_class},
-       {"atmel,at91sam9260-usart",(uintptr_t)&at91_usart_class},
-       {"cadence,uart",        (uintptr_t)&uart_cdnc_class},
-       {"exynos",              (uintptr_t)&uart_exynos4210_class},
-       {"fsl,imx6q-uart",      (uintptr_t)&uart_imx_class},
-       {"fsl,imx53-uart",      (uintptr_t)&uart_imx_class},
-       {"fsl,imx51-uart",      (uintptr_t)&uart_imx_class},
-       {"fsl,imx31-uart",      (uintptr_t)&uart_imx_class},
-       {"fsl,imx27-uart",      (uintptr_t)&uart_imx_class},
-       {"fsl,imx25-uart",      (uintptr_t)&uart_imx_class},
-       {"fsl,imx21-uart",      (uintptr_t)&uart_imx_class},
-       {"fsl,mvf600-uart",     (uintptr_t)&uart_vybrid_class},
-       {"lpc,uart",            (uintptr_t)&uart_lpc_class},
-       {"qcom,msm-uartdm",     (uintptr_t)&uart_msm_class},
-       {"ti,ns16550",          (uintptr_t)&uart_ti8250_class},
-       {"ns16550",             (uintptr_t)&uart_ns8250_class},
-       {NULL,                  (uintptr_t)NULL},
-};
-
-/* Export the compat_data table for use by the uart_cpu_fdt.c probe routine. */
-UART_FDT_CLASS_AND_DEVICE(compat_data);
-
 static int
 uart_fdt_get_clock(phandle_t node, pcell_t *cell)
 {

Modified: head/sys/dev/uart/uart_dev_imx.c
==============================================================================
--- head/sys/dev/uart/uart_dev_imx.c    Sat Mar  7 15:18:57 2015        
(r279723)
+++ head/sys/dev/uart/uart_dev_imx.c    Sat Mar  7 15:24:15 2015        
(r279724)
@@ -42,6 +42,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 <dev/uart/uart_dev_imx.h>
 #include "uart_if.h"
@@ -291,7 +292,7 @@ static kobj_method_t imx_uart_methods[] 
        { 0, 0 }
 };
 
-struct uart_class uart_imx_class = {
+static struct uart_class uart_imx_class = {
        "imx",
        imx_uart_methods,
        sizeof(struct imx_uart_softc),
@@ -300,6 +301,18 @@ struct uart_class uart_imx_class = {
        .uc_rclk = 24000000 /* TODO: get value from CCM */
 };
 
+static struct ofw_compat_data compat_data[] = {
+       {"fsl,imx6q-uart",      (uintptr_t)&uart_imx_class},
+       {"fsl,imx53-uart",      (uintptr_t)&uart_imx_class},
+       {"fsl,imx51-uart",      (uintptr_t)&uart_imx_class},
+       {"fsl,imx31-uart",      (uintptr_t)&uart_imx_class},
+       {"fsl,imx27-uart",      (uintptr_t)&uart_imx_class},
+       {"fsl,imx25-uart",      (uintptr_t)&uart_imx_class},
+       {"fsl,imx21-uart",      (uintptr_t)&uart_imx_class},
+       {NULL,                  (uintptr_t)NULL},
+};
+UART_FDT_CLASS_AND_DEVICE(compat_data);
+
 #define        SIGCHG(c, i, s, d)                              \
        if (c) {                                        \
                i |= (i & s) ? s : s | d;               \

Modified: head/sys/dev/uart/uart_dev_lpc.c
==============================================================================
--- head/sys/dev/uart/uart_dev_lpc.c    Sat Mar  7 15:18:57 2015        
(r279723)
+++ head/sys/dev/uart/uart_dev_lpc.c    Sat Mar  7 15:24:15 2015        
(r279724)
@@ -36,6 +36,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 <dev/ic/ns16550.h>
@@ -421,7 +422,7 @@ static kobj_method_t lpc_ns8250_methods[
        { 0, 0 }
 };
 
-struct uart_class uart_lpc_class = {
+static struct uart_class uart_lpc_class = {
        "lpc_ns8250",
        lpc_ns8250_methods,
        sizeof(struct lpc_ns8250_softc),
@@ -430,6 +431,12 @@ struct uart_class uart_lpc_class = {
        .uc_rclk = DEFAULT_RCLK
 };
 
+static struct ofw_compat_data compat_data[] = {
+       {"lpc,uart",            (uintptr_t)&uart_lpc_class},
+       {NULL,                  (uintptr_t)NULL},
+};
+UART_FDT_CLASS_AND_DEVICE(compat_data);
+
 #define        SIGCHG(c, i, s, d)                              \
        if (c) {                                        \
                i |= (i & s) ? s : s | d;               \

Modified: head/sys/dev/uart/uart_dev_msm.c
==============================================================================
--- head/sys/dev/uart/uart_dev_msm.c    Sat Mar  7 15:18:57 2015        
(r279723)
+++ head/sys/dev/uart/uart_dev_msm.c    Sat Mar  7 15:24:15 2015        
(r279724)
@@ -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 <dev/uart/uart_dev_msm.h>
 
@@ -558,7 +559,7 @@ msm_bus_ungrab(struct uart_softc *sc)
        uart_unlock(sc->sc_hwmtx);
 }
 
-struct uart_class uart_msm_class = {
+static struct uart_class uart_msm_class = {
        "msm",
        msm_methods,
        sizeof(struct msm_uart_softc),
@@ -566,3 +567,9 @@ struct uart_class uart_msm_class = {
        .uc_range = 8,
        .uc_rclk = DEF_CLK,
 };
+
+static struct ofw_compat_data compat_data[] = {
+       {"qcom,msm-uartdm",     (uintptr_t)&uart_msm_class},
+       {NULL,                  (uintptr_t)NULL},
+};
+UART_FDT_CLASS_AND_DEVICE(compat_data);

Modified: head/sys/dev/uart/uart_dev_ns8250.c
==============================================================================
--- head/sys/dev/uart/uart_dev_ns8250.c Sat Mar  7 15:18:57 2015        
(r279723)
+++ head/sys/dev/uart/uart_dev_ns8250.c Sat Mar  7 15:24:15 2015        
(r279724)
@@ -45,6 +45,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 <dev/uart/uart_dev_ns8250.h>
 
@@ -378,6 +381,14 @@ struct uart_class uart_ns8250_class = {
        .uc_rclk = DEFAULT_RCLK
 };
 
+#ifdef FDT
+static struct ofw_compat_data compat_data[] = {
+       {"ns16550",             (uintptr_t)&uart_ns8250_class},
+       {NULL,                  (uintptr_t)NULL},
+};
+UART_FDT_CLASS_AND_DEVICE(compat_data);
+#endif
+
 #define        SIGCHG(c, i, s, d)                              \
        if (c) {                                        \
                i |= (i & s) ? s : s | d;               \

Modified: head/sys/dev/uart/uart_dev_pl011.c
==============================================================================
--- head/sys/dev/uart/uart_dev_pl011.c  Sat Mar  7 15:18:57 2015        
(r279723)
+++ head/sys/dev/uart/uart_dev_pl011.c  Sat Mar  7 15:24:15 2015        
(r279724)
@@ -35,6 +35,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"
 
@@ -266,7 +267,7 @@ static kobj_method_t uart_pl011_methods[
        { 0, 0 }
 };
 
-struct uart_class uart_pl011_class = {
+static struct uart_class uart_pl011_class = {
        "uart_pl011",
        uart_pl011_methods,
        sizeof(struct uart_pl011_softc),
@@ -275,6 +276,12 @@ struct uart_class uart_pl011_class = {
        .uc_rclk = 0
 };
 
+static struct ofw_compat_data compat_data[] = {
+       {"arm,pl011",           (uintptr_t)&uart_pl011_class},
+       {NULL,                  (uintptr_t)NULL},
+};
+UART_FDT_CLASS_AND_DEVICE(compat_data);
+
 static int
 uart_pl011_bus_attach(struct uart_softc *sc)
 {

Modified: head/sys/dev/uart/uart_dev_ti8250.c
==============================================================================
--- head/sys/dev/uart/uart_dev_ti8250.c Sat Mar  7 15:18:57 2015        
(r279723)
+++ head/sys/dev/uart/uart_dev_ti8250.c Sat Mar  7 15:24:15 2015        
(r279724)
@@ -45,6 +45,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 <dev/uart/uart_dev_ns8250.h>
 
@@ -130,7 +131,7 @@ static kobj_method_t ti8250_methods[] = 
        KOBJMETHOD_END
 };
 
-struct uart_class uart_ti8250_class = {
+static struct uart_class uart_ti8250_class = {
        "ti8250",
        ti8250_methods,
        sizeof(struct ti8250_softc),
@@ -138,4 +139,8 @@ struct uart_class uart_ti8250_class = {
        .uc_range = 0x88,
        .uc_rclk = 48000000
 };
-
+static struct ofw_compat_data compat_data[] = {
+       {"ti,ns16550",          (uintptr_t)&uart_ti8250_class},
+       {NULL,                  (uintptr_t)NULL},
+};
+UART_FDT_CLASS_AND_DEVICE(compat_data);

Modified: head/sys/dev/uart/uart_subr.c
==============================================================================
--- head/sys/dev/uart/uart_subr.c       Sat Mar  7 15:18:57 2015        
(r279723)
+++ head/sys/dev/uart/uart_subr.c       Sat Mar  7 15:24:15 2015        
(r279724)
@@ -53,7 +53,6 @@ static struct uart_class *uart_classes[]
        &uart_sab82532_class,
        &uart_z8530_class,
 #if defined(__arm__)
-       &uart_lpc_class,
        &uart_s3c2410_class,
 #endif
 };
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to