Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 4 Nov 2018 23:28:56 +0000 (UTC)
From:      Matt Macy <mmacy@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r340145 - in stable/11/sys: arm/at91 arm/cavium/cns11xx arm/nvidia arm/xscale/i8134x arm/xscale/ixp425 arm/xscale/pxa dev/acpica dev/uart mips/adm5120 mips/alchemy mips/atheros mips/bro...
Message-ID:  <201811042328.wA4NSuDu039752@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mmacy
Date: Sun Nov  4 23:28:56 2018
New Revision: 340145
URL: https://svnweb.freebsd.org/changeset/base/340145

Log:
  Backport of r338074 - generalize uart_bus_probe and add SNPS support to x86
  
  Submitted by:	Rajesh Kumar
  Differential Revision:	https://reviews.freebsd.org/D17381

Added:
  stable/11/sys/dev/uart/uart_cpu_acpi.h   (contents, props changed)
  stable/11/sys/pc98/include/acpica_machdep.h   (contents, props changed)
Modified:
  stable/11/sys/arm/at91/uart_bus_at91usart.c
  stable/11/sys/arm/cavium/cns11xx/uart_bus_ec.c
  stable/11/sys/arm/nvidia/tegra_uart.c
  stable/11/sys/arm/xscale/i8134x/uart_bus_i81342.c
  stable/11/sys/arm/xscale/ixp425/uart_bus_ixp425.c
  stable/11/sys/arm/xscale/pxa/uart_bus_pxa.c
  stable/11/sys/dev/acpica/acpi.c
  stable/11/sys/dev/uart/uart.h
  stable/11/sys/dev/uart/uart_bus.h
  stable/11/sys/dev/uart/uart_bus_acpi.c
  stable/11/sys/dev/uart/uart_bus_ebus.c
  stable/11/sys/dev/uart/uart_bus_fdt.c
  stable/11/sys/dev/uart/uart_bus_isa.c
  stable/11/sys/dev/uart/uart_bus_pccard.c
  stable/11/sys/dev/uart/uart_bus_pci.c
  stable/11/sys/dev/uart/uart_bus_puc.c
  stable/11/sys/dev/uart/uart_bus_scc.c
  stable/11/sys/dev/uart/uart_core.c
  stable/11/sys/dev/uart/uart_cpu.h
  stable/11/sys/dev/uart/uart_cpu_fdt.c
  stable/11/sys/dev/uart/uart_cpu_fdt.h
  stable/11/sys/dev/uart/uart_dev_ns8250.c
  stable/11/sys/dev/uart/uart_dev_pl011.c
  stable/11/sys/dev/uart/uart_dev_snps.c
  stable/11/sys/mips/adm5120/uart_bus_adm5120.c
  stable/11/sys/mips/alchemy/uart_bus_alchemy.c
  stable/11/sys/mips/atheros/uart_bus_ar71xx.c
  stable/11/sys/mips/atheros/uart_bus_ar933x.c
  stable/11/sys/mips/broadcom/uart_bus_chipc.c
  stable/11/sys/mips/cavium/uart_bus_octeonusart.c
  stable/11/sys/mips/idt/uart_bus_rc32434.c
  stable/11/sys/mips/malta/uart_bus_maltausart.c
  stable/11/sys/mips/rmi/uart_bus_xlr_iodi.c
  stable/11/sys/mips/rt305x/uart_bus_rt305x.c
  stable/11/sys/modules/uart/Makefile
  stable/11/sys/powerpc/psim/uart_iobus.c
  stable/11/sys/sparc64/pci/sbbc.c

Modified: stable/11/sys/arm/at91/uart_bus_at91usart.c
==============================================================================
--- stable/11/sys/arm/at91/uart_bus_at91usart.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/arm/at91/uart_bus_at91usart.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -104,7 +104,7 @@ usart_at91_probe(device_t dev)
 	sc->sc_class = &at91_usart_class;
 	if (sc->sc_class->uc_rclk == 0)
 		sc->sc_class->uc_rclk = at91_master_clock;
-	return (uart_bus_probe(dev, 0, 0, 0, device_get_unit(dev)));
+	return (uart_bus_probe(dev, 0, 0, 0, 0, device_get_unit(dev), 0));
 }
 
 

Modified: stable/11/sys/arm/cavium/cns11xx/uart_bus_ec.c
==============================================================================
--- stable/11/sys/arm/cavium/cns11xx/uart_bus_ec.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/arm/cavium/cns11xx/uart_bus_ec.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -69,7 +69,7 @@ uart_ec_probe(device_t dev)
 
 	sc = device_get_softc(dev);
 	sc->sc_class = &uart_ns8250_class;
-	status = uart_bus_probe(dev, EC_UART_REGSHIFT, EC_UART_CLOCK, 0, 0);
+	status = uart_bus_probe(dev, EC_UART_REGSHIFT, 0, EC_UART_CLOCK, 0, 0, 0);
 	return (status);
 }
 

Modified: stable/11/sys/arm/nvidia/tegra_uart.c
==============================================================================
--- stable/11/sys/arm/nvidia/tegra_uart.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/arm/nvidia/tegra_uart.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -217,7 +217,7 @@ tegra_uart_probe(device_t dev)
 		device_printf(dev, "Cannot enable UART clock: %d\n", rv);
 		return (ENXIO);
 	}
-	return (uart_bus_probe(dev, shift, (int)freq, 0, 0));
+	return (uart_bus_probe(dev, shift, 0, (int)freq, 0, 0, 0));
 }
 
 static int
@@ -248,4 +248,4 @@ static driver_t tegra_uart_driver = {
 };
 
 DRIVER_MODULE(tegra_uart, simplebus,  tegra_uart_driver, uart_devclass,
-    0, 0);
\ No newline at end of file
+    0, 0);

Modified: stable/11/sys/arm/xscale/i8134x/uart_bus_i81342.c
==============================================================================
--- stable/11/sys/arm/xscale/i8134x/uart_bus_i81342.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/arm/xscale/i8134x/uart_bus_i81342.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -83,7 +83,7 @@ uart_i81342_probe(device_t dev)
 	    0x40 | 0x10);
         bus_release_resource(dev, sc->sc_rtype, sc->sc_rrid, sc->sc_rres);
 
-	err = uart_bus_probe(dev, 2, 33334000, 0, device_get_unit(dev));
+	err = uart_bus_probe(dev, 2, 0, 33334000, 0, device_get_unit(dev), 0);
 	sc->sc_rxfifosz = sc->sc_txfifosz = 1;
 	return (err);
 }

Modified: stable/11/sys/arm/xscale/ixp425/uart_bus_ixp425.c
==============================================================================
--- stable/11/sys/arm/xscale/ixp425/uart_bus_ixp425.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/arm/xscale/ixp425/uart_bus_ixp425.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -78,5 +78,5 @@ uart_ixp425_probe(device_t dev)
 	if (bootverbose)
 		device_printf(dev, "rclk %u\n", rclk);
 
-	return uart_bus_probe(dev, 0, rclk, 0, 0);
+	return uart_bus_probe(dev, 0, 0, rclk, 0, 0, 0);
 }

Modified: stable/11/sys/arm/xscale/pxa/uart_bus_pxa.c
==============================================================================
--- stable/11/sys/arm/xscale/pxa/uart_bus_pxa.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/arm/xscale/pxa/uart_bus_pxa.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -97,7 +97,7 @@ uart_pxa_probe(device_t dev)
 	sc = device_get_softc(dev);
 	sc->sc_class = &uart_ns8250_class;
 
-	return(uart_bus_probe(dev, 2, PXA2X0_COM_FREQ, 0, 0));
+	return(uart_bus_probe(dev, 2, 0, PXA2X0_COM_FREQ, 0, 0, 0));
 }
 
 DRIVER_MODULE(uart, pxa, uart_pxa_driver, uart_devclass, 0, 0);

Modified: stable/11/sys/dev/acpica/acpi.c
==============================================================================
--- stable/11/sys/dev/acpica/acpi.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/acpica/acpi.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -2169,6 +2169,14 @@ acpi_DeviceIsPresent(device_t dev)
 	ACPI_FAILURE(AcpiGetObjectInfo(h, &devinfo)))
 	return (FALSE);
 
+    /* Onboard serial ports on certain AMD motherboards have an invalid _STA
+     * method that always returns 0.  Force them to always be treated as present.
+     *
+     * This may solely be a quirk of a preproduction BIOS.
+     */
+    if (acpi_MatchHid(h, "AMDI0020") || acpi_MatchHid(h, "AMDI0010"))
+        return (TRUE);
+
     /* If no _STA method, must be present */
     present = (devinfo->Valid & ACPI_VALID_STA) == 0 ||
 	ACPI_DEVICE_PRESENT(devinfo->CurrentStatus) ? TRUE : FALSE;

Modified: stable/11/sys/dev/uart/uart.h
==============================================================================
--- stable/11/sys/dev/uart/uart.h	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart.h	Sun Nov  4 23:28:56 2018	(r340145)
@@ -41,9 +41,12 @@ struct uart_bas {
 	u_int	chan;
 	u_int	rclk;
 	u_int	regshft;
+	u_int	regiowidth;
+	u_int	busy_detect;
 };
 
 #define	uart_regofs(bas, reg)		((reg) << (bas)->regshft)
+#define	uart_regiowidth(bas)		((bas)->regiowidth)
 
 #define	uart_getreg(bas, reg)		\
 	bus_space_read_1((bas)->bst, (bas)->bsh, uart_regofs(bas, reg))

Modified: stable/11/sys/dev/uart/uart_bus.h
==============================================================================
--- stable/11/sys/dev/uart/uart_bus.h	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart_bus.h	Sun Nov  4 23:28:56 2018	(r340145)
@@ -54,6 +54,9 @@
 #define	UART_IOCTL_OFLOW	3
 #define	UART_IOCTL_BAUD		4
 
+/* UART quirk flag */
+#define	UART_F_BUSY_DETECT	0x1
+
 /*
  * UART class & instance (=softc)
  */
@@ -63,6 +66,7 @@ struct uart_class {
 	u_int	uc_range;		/* Bus space address range. */
 	u_int	uc_rclk;		/* Default rclk for this device. */
 	u_int	uc_rshift;		/* Default regshift for this device. */
+	u_int	uc_riowidth;		/* Default reg io width for this device. */
 };
 
 struct uart_softc {
@@ -137,7 +141,7 @@ int uart_bus_detach(device_t dev);
 int uart_bus_resume(device_t dev);
 serdev_intr_t *uart_bus_ihand(device_t dev, int ipend);
 int uart_bus_ipend(device_t dev);
-int uart_bus_probe(device_t dev, int regshft, int rclk, int rid, int chan);
+int uart_bus_probe(device_t dev, int regshft, int regiowidth, int rclk, int rid, int chan, int quirks);
 int uart_bus_sysdev(device_t dev);
 
 void uart_sched_softih(struct uart_softc *, uint32_t);

Modified: stable/11/sys/dev/uart/uart_bus_acpi.c
==============================================================================
--- stable/11/sys/dev/uart/uart_bus_acpi.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart_bus_acpi.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -35,11 +35,14 @@ __FBSDID("$FreeBSD$");
 #include <sys/rman.h>
 #include <machine/resource.h>
 
-#include <isa/isavar.h>
-
 #include <dev/uart/uart.h>
 #include <dev/uart/uart_bus.h>
+#include <dev/uart/uart_cpu_acpi.h>
 
+#include <contrib/dev/acpica/include/acpi.h>
+#include <contrib/dev/acpica/include/accommon.h>
+#include <dev/acpica/acpivar.h>
+
 static int uart_acpi_probe(device_t dev);
 
 static device_method_t uart_acpi_methods[] = {
@@ -57,33 +60,40 @@ static driver_t uart_acpi_driver = {
 	sizeof(struct uart_softc),
 };
 
-static struct isa_pnp_id acpi_ns8250_ids[] = {
-	{0x0005d041, "Standard PC COM port"},		/* PNP0500 */
-	{0x0105d041, "16550A-compatible COM port"},	/* PNP0501 */
-	{0x0205d041, "Multiport serial device (non-intelligent 16550)"}, /* PNP0502 */
-	{0x1005d041, "Generic IRDA-compatible device"},	/* PNP0510 */
-	{0x1105d041, "Generic IRDA-compatible device"},	/* PNP0511 */
-	{0x04f0235c, "Wacom Tablet PC Screen"},		/* WACF004 */
-	{0x0ef0235c, "Wacom Tablet PC Screen 00e"},	/* WACF00e */
-	{0xe502aa1a, "Wacom Tablet at FuS Lifebook T"},	/* FUJ02E5 */
-	{0}
-};
+static struct acpi_uart_compat_data *
+uart_acpi_find_device(device_t dev)
+{
+	struct acpi_uart_compat_data **cd, *cd_it;
+	ACPI_HANDLE h;
 
+	if ((h = acpi_get_handle(dev)) == NULL)
+		return (NULL);
+
+	SET_FOREACH(cd, uart_acpi_class_and_device_set) {
+		for (cd_it = *cd; cd_it->cd_hid != NULL; cd_it++) {
+			if (acpi_MatchHid(h, cd_it->cd_hid))
+				return (cd_it);
+		}
+	}
+
+	return (NULL);
+}
+
 static int
 uart_acpi_probe(device_t dev)
 {
 	struct uart_softc *sc;
-	device_t parent;
+	struct acpi_uart_compat_data *cd;
 
-	parent = device_get_parent(dev);
 	sc = device_get_softc(dev);
 
-	if (!ISA_PNP_PROBE(parent, dev, acpi_ns8250_ids)) {
-		sc->sc_class = &uart_ns8250_class;
-		return (uart_bus_probe(dev, 0, 0, 0, 0));
+	if ((cd = uart_acpi_find_device(dev)) != NULL) {
+		sc->sc_class = cd->cd_class;
+		if (cd->cd_desc != NULL)
+			device_set_desc(dev, cd->cd_desc);
+		return (uart_bus_probe(dev, cd->cd_regshft, cd->cd_regiowidth,
+			cd->cd_rclk, 0, 0, cd->cd_quirks));
 	}
-
-	/* Add checks for non-ns8250 IDs here. */
 	return (ENXIO);
 }
 

Modified: stable/11/sys/dev/uart/uart_bus_ebus.c
==============================================================================
--- stable/11/sys/dev/uart/uart_bus_ebus.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart_bus_ebus.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -97,7 +97,7 @@ uart_ebus_probe(device_t dev)
 				return (ENXIO);
 		}
 		sc->sc_class = &uart_ns8250_class;
-		return (uart_bus_probe(dev, 0, 0, 0, 0));
+		return (uart_bus_probe(dev, 0, 0, 0, 0, 0, 0));
 	}
 
 	return (ENXIO);

Modified: stable/11/sys/dev/uart/uart_bus_fdt.c
==============================================================================
--- stable/11/sys/dev/uart/uart_bus_fdt.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart_bus_fdt.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -90,6 +90,15 @@ uart_fdt_get_shift(phandle_t node, pcell_t *cell)
 	return (0);
 }
 
+int
+uart_fdt_get_io_width(phandle_t node, pcell_t *cell)
+{
+
+	if ((OF_getencprop(node, "reg-io-width", cell, sizeof(*cell))) <= 0)
+		return (-1);
+	return (0);
+}
+
 static uintptr_t
 uart_fdt_find_device(device_t dev)
 {
@@ -161,7 +170,7 @@ uart_cpu_fdt_probe(struct uart_class **classp, bus_spa
 	const char **name;
 	struct uart_class *class;
 	phandle_t node, chosen;
-	pcell_t br, clk, shift;
+	pcell_t br, clk, shift, iowidth;
 	char *cp;
 	int err;
 
@@ -212,6 +221,9 @@ uart_cpu_fdt_probe(struct uart_class **classp, bus_spa
 	if (uart_fdt_get_shift(node, &shift) != 0)
 		shift = uart_getregshift(class);
 
+	if (uart_fdt_get_io_width(node, &iowidth) != 0)
+		iowidth = uart_getregiowidth(class);
+
 	if (OF_getencprop(node, "current-speed", &br, sizeof(br)) <= 0)
 		br = 0;
 
@@ -232,7 +244,7 @@ uart_fdt_probe(device_t dev)
 {
 	struct uart_softc *sc;
 	phandle_t node;
-	pcell_t clock, shift;
+	pcell_t clock, shift, iowidth;
 	int err;
 
 	sc = device_get_softc(dev);
@@ -250,8 +262,10 @@ uart_fdt_probe(device_t dev)
 		return (err);
 	if (uart_fdt_get_shift(node, &shift) != 0)
 		shift = uart_getregshift(sc->sc_class);
+	if (uart_fdt_get_io_width(node, &iowidth) != 0)
+		iowidth = uart_getregiowidth(sc->sc_class);
 
-	return (uart_bus_probe(dev, (int)shift, (int)clock, 0, 0));
+	return (uart_bus_probe(dev, (int)shift, (int)iowidth, (int)clock, 0, 0, 0));
 }
 
 DRIVER_MODULE(uart, simplebus, uart_fdt_driver, uart_devclass, 0, 0);

Modified: stable/11/sys/dev/uart/uart_bus_isa.c
==============================================================================
--- stable/11/sys/dev/uart/uart_bus_isa.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart_bus_isa.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -185,7 +185,7 @@ uart_isa_probe(device_t dev)
 #else
 	sc->sc_class = &uart_ns8250_class;
 #endif
-	return (uart_bus_probe(dev, 0, 0, 0, 0));
+	return (uart_bus_probe(dev, 0, 0, 0, 0, 0, 0));
 }
 
 DRIVER_MODULE(uart, isa, uart_isa_driver, uart_devclass, 0, 0);

Modified: stable/11/sys/dev/uart/uart_bus_pccard.c
==============================================================================
--- stable/11/sys/dev/uart/uart_bus_pccard.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart_bus_pccard.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -93,7 +93,7 @@ uart_pccard_attach(device_t dev)
 	sc = device_get_softc(dev);
 	sc->sc_class = &uart_ns8250_class;
 
-	error = uart_bus_probe(dev, 0, 0, 0, 0);
+	error = uart_bus_probe(dev, 0, 0, 0, 0, 0, 0);
 	if (error > 0)
 		return (error);
 	return (uart_bus_attach(dev));

Modified: stable/11/sys/dev/uart/uart_bus_pci.c
==============================================================================
--- stable/11/sys/dev/uart/uart_bus_pci.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart_bus_pci.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -202,7 +202,7 @@ uart_pci_probe(device_t dev)
 	return (ENXIO);
 
  match:
-	result = uart_bus_probe(dev, id->regshft, id->rclk, id->rid, 0);
+	result = uart_bus_probe(dev, id->regshft, 0, id->rclk, id->rid, 0, 0);
 	/* Bail out on error. */
 	if (result > 0)
 		return (result);

Modified: stable/11/sys/dev/uart/uart_bus_puc.c
==============================================================================
--- stable/11/sys/dev/uart/uart_bus_puc.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart_bus_puc.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -81,7 +81,7 @@ uart_puc_probe(device_t dev)
 
 	if (BUS_READ_IVAR(parent, dev, PUC_IVAR_CLOCK, &rclk))
 		rclk = 0;
-	return (uart_bus_probe(dev, 0, rclk, 0, 0));
+	return (uart_bus_probe(dev, 0, 0, rclk, 0, 0, 0));
 }
 
 DRIVER_MODULE(uart, puc, uart_puc_driver, uart_devclass, 0, 0);

Modified: stable/11/sys/dev/uart/uart_bus_scc.c
==============================================================================
--- stable/11/sys/dev/uart/uart_bus_scc.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart_bus_scc.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -112,7 +112,7 @@ uart_scc_probe(device_t dev)
 	    BUS_READ_IVAR(parent, dev, SCC_IVAR_REGSHFT, &rs))
 		return (ENXIO);
 
-	return (uart_bus_probe(dev, rs, cl, 0, ch));
+	return (uart_bus_probe(dev, rs, 0, cl, 0, ch, 0));
 }
 
 DRIVER_MODULE(uart, scc, uart_scc_driver, uart_devclass, 0, 0);

Modified: stable/11/sys/dev/uart/uart_core.c
==============================================================================
--- stable/11/sys/dev/uart/uart_core.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart_core.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -252,6 +252,12 @@ uart_getregshift(struct uart_class *uc)
 	return ((uc != NULL) ? uc->uc_rshift : 0);
 }
 
+u_int
+uart_getregiowidth(struct uart_class *uc)
+{
+	return ((uc != NULL) ? uc->uc_riowidth : 0);
+}
+
 /*
  * Schedule a soft interrupt. We do this on the 0 to !0 transition
  * of the TTY pending interrupt status.
@@ -481,7 +487,7 @@ uart_bus_sysdev(device_t dev)
 }
 
 int
-uart_bus_probe(device_t dev, int regshft, int rclk, int rid, int chan)
+uart_bus_probe(device_t dev, int regshft, int regiowidth, int rclk, int rid, int chan, int quirks)
 {
 	struct uart_softc *sc;
 	struct uart_devinfo *sysdev;
@@ -539,7 +545,9 @@ uart_bus_probe(device_t dev, int regshft, int rclk, in
 	sc->sc_bas.bst = rman_get_bustag(sc->sc_rres);
 	sc->sc_bas.chan = chan;
 	sc->sc_bas.regshft = regshft;
+	sc->sc_bas.regiowidth = regiowidth;
 	sc->sc_bas.rclk = (rclk == 0) ? sc->sc_class->uc_rclk : rclk;
+	sc->sc_bas.busy_detect = !!(quirks & UART_F_BUSY_DETECT);
 
 	SLIST_FOREACH(sysdev, &uart_sysdevs, next) {
 		if (chan == sysdev->bas.chan &&

Modified: stable/11/sys/dev/uart/uart_cpu.h
==============================================================================
--- stable/11/sys/dev/uart/uart_cpu.h	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart_cpu.h	Sun Nov  4 23:28:56 2018	(r340145)
@@ -80,6 +80,7 @@ const char *uart_getname(struct uart_class *);
 struct uart_ops *uart_getops(struct uart_class *);
 int uart_getrange(struct uart_class *);
 u_int uart_getregshift(struct uart_class *);
+u_int uart_getregiowidth(struct uart_class *);
 
 void uart_add_sysdev(struct uart_devinfo *);
 

Added: stable/11/sys/dev/uart/uart_cpu_acpi.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/11/sys/dev/uart/uart_cpu_acpi.h	Sun Nov  4 23:28:56 2018	(r340145)
@@ -0,0 +1,69 @@
+/*-
+ * Copyright (c) 2015 Michal Meloun
+ * Copyright (c) 2016 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Andrew Turner under
+ * sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _DEV_UART_CPU_ACPI_H_
+#define _DEV_UART_CPU_ACPI_H_
+
+#include <sys/linker_set.h>
+
+struct uart_class;
+
+struct acpi_uart_compat_data {
+	const char *cd_hid;
+	struct uart_class *cd_class;
+
+	uint16_t cd_port_subtype;
+	int cd_regshft;
+	int cd_regiowidth;
+	int cd_rclk;
+	int cd_quirks;
+	const char *cd_desc;
+};
+
+/*
+ * If your UART driver implements only uart_class and uses uart_cpu_acpi.c
+ * for device instantiation, then use UART_ACPI_CLASS_AND_DEVICE for its
+ * declaration
+ */
+SET_DECLARE(uart_acpi_class_and_device_set, struct acpi_uart_compat_data);
+#define UART_ACPI_CLASS_AND_DEVICE(data)				\
+	DATA_SET(uart_acpi_class_and_device_set, data)
+
+/*
+ * If your UART driver implements uart_class and custom device layer,
+ * then use UART_ACPI_CLASS for its declaration
+ */
+SET_DECLARE(uart_acpi_class_set, struct acpi_uart_compat_data);
+#define UART_ACPI_CLASS(data)				\
+	DATA_SET(uart_acpi_class_set, data)
+
+#endif /* _DEV_UART_CPU_ACPI_H_ */

Modified: stable/11/sys/dev/uart/uart_cpu_fdt.c
==============================================================================
--- stable/11/sys/dev/uart/uart_cpu_fdt.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart_cpu_fdt.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -70,53 +70,6 @@ uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b
 	return ((pmap_kextract(b1->bsh) == pmap_kextract(b2->bsh)) ? 1 : 0);
 }
 
-static int
-phandle_chosen_propdev(phandle_t chosen, const char *name, phandle_t *node)
-{
-	char buf[64];
-
-	if (OF_getprop(chosen, name, buf, sizeof(buf)) <= 0)
-		return (ENXIO);
-	if ((*node = OF_finddevice(buf)) == -1)
-		return (ENXIO);
-	
-	return (0);
-}
-
-static const struct ofw_compat_data *
-uart_fdt_find_compatible(phandle_t node, const struct ofw_compat_data *cd)
-{
-	const struct ofw_compat_data *ocd;
-
-	for (ocd = cd; ocd->ocd_str != NULL; ocd++) {
-		if (fdt_is_compatible(node, ocd->ocd_str))
-			return (ocd);
-	}
-	return (NULL);
-}
-
-static uintptr_t
-uart_fdt_find_by_node(phandle_t node, int class_list)
-{
-	struct ofw_compat_data **cd;
-	const struct ofw_compat_data *ocd;
-
-	if (class_list) {
-		SET_FOREACH(cd, uart_fdt_class_set) {
-			ocd = uart_fdt_find_compatible(node, *cd);
-			if ((ocd != NULL) && (ocd->ocd_data != 0))
-				return (ocd->ocd_data);
-		}
-	} else {
-		SET_FOREACH(cd, uart_fdt_class_and_device_set) {
-			ocd = uart_fdt_find_compatible(node, *cd);
-			if ((ocd != NULL) && (ocd->ocd_data != 0))
-				return (ocd->ocd_data);
-		}
-	}
-	return (0);
-}
-
 int
 uart_cpu_getdev(int devtype, struct uart_devinfo *di)
 {

Modified: stable/11/sys/dev/uart/uart_cpu_fdt.h
==============================================================================
--- stable/11/sys/dev/uart/uart_cpu_fdt.h	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart_cpu_fdt.h	Sun Nov  4 23:28:56 2018	(r340145)
@@ -54,5 +54,6 @@ int uart_cpu_fdt_probe(struct uart_class **, bus_space
     bus_space_handle_t *, int *, u_int *, u_int *);
 int uart_fdt_get_clock(phandle_t node, pcell_t *cell);
 int uart_fdt_get_shift(phandle_t node, pcell_t *cell);
+int uart_fdt_get_io_width(phandle_t node, pcell_t *cell);
 
 #endif /* _DEV_UART_CPU_FDT_H_ */

Modified: stable/11/sys/dev/uart/uart_dev_ns8250.c
==============================================================================
--- stable/11/sys/dev/uart/uart_dev_ns8250.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart_dev_ns8250.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -24,6 +24,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "opt_acpi.h"
 #include "opt_platform.h"
 #include "opt_uart.h"
 
@@ -52,7 +53,9 @@ __FBSDID("$FreeBSD$");
 #include <dev/uart/uart_bus.h>
 #include <dev/uart/uart_dev_ns8250.h>
 #include <dev/uart/uart_ppstypes.h>
-
+#ifdef DEV_ACPI
+#include <dev/uart/uart_cpu_acpi.h>
+#endif
 #include <dev/ic/ns16550.h>
 
 #include "uart_if.h"
@@ -390,6 +393,26 @@ struct uart_class uart_ns8250_class = {
 	.uc_rclk = DEFAULT_RCLK,
 	.uc_rshift = 0
 };
+
+/*
+ * XXX -- refactor out ACPI and FDT ifdefs
+ */
+#ifdef DEV_ACPI
+static struct acpi_uart_compat_data acpi_compat_data[] = {
+	{"AMD0020",	&uart_ns8250_class, 0, 2, 0, 48000000, UART_F_BUSY_DETECT, "AMD / Synopsys Designware UART"},
+	{"AMDI0020", &uart_ns8250_class, 0, 2, 0, 48000000, UART_F_BUSY_DETECT, "AMD / Synopsys Designware UART"},
+	{"PNP0500", &uart_ns8250_class, 0, 0, 0, 0, 0, "Standard PC COM port"},
+	{"PNP0501", &uart_ns8250_class, 0, 0, 0, 0, 0, "16550A-compatible COM port"},
+	{"PNP0502", &uart_ns8250_class, 0, 0, 0, 0, 0, "Multiport serial device (non-intelligent 16550)"},
+	{"PNP0510", &uart_ns8250_class, 0, 0, 0, 0, 0, "Generic IRDA-compatible device"},
+	{"PNP0511", &uart_ns8250_class, 0, 0, 0, 0, 0, "Generic IRDA-compatible device"},
+	{"WACF004", &uart_ns8250_class, 0, 0, 0, 0, 0, "Wacom Tablet PC Screen"},
+	{"WACF00E", &uart_ns8250_class, 0, 0, 0, 0, 0, "Wacom Tablet PC Screen 00e"},
+	{"FUJ02E5", &uart_ns8250_class, 0, 0, 0, 0, 0, "Wacom Tablet at FuS Lifebook T"},
+	{NULL, 			NULL, 0, 0 , 0, 0, 0, NULL},
+};
+UART_ACPI_CLASS_AND_DEVICE(acpi_compat_data);
+#endif
 
 #ifdef FDT
 static struct ofw_compat_data compat_data[] = {

Modified: stable/11/sys/dev/uart/uart_dev_pl011.c
==============================================================================
--- stable/11/sys/dev/uart/uart_dev_pl011.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart_dev_pl011.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -283,6 +283,15 @@ static struct ofw_compat_data compat_data[] = {
 };
 UART_FDT_CLASS_AND_DEVICE(compat_data);
 
+#ifdef DEV_ACPI
+static struct acpi_uart_compat_data acpi_compat_data[] = {
+	{"ARMH0011", &uart_pl011_class, ACPI_DBG2_ARM_PL011, 2, 0, 0, 0, "uart plo11"},
+	{"ARMH0011", &uart_pl011_class, ACPI_DBG2_ARM_SBSA_GENERIC, 2, 0, 0, 0, "uart plo11"},
+	{NULL, NULL, 0, 0, 0, 0, 0, NULL},
+};
+UART_ACPI_CLASS_AND_DEVICE(acpi_compat_data);
+#endif
+
 static int
 uart_pl011_bus_attach(struct uart_softc *sc)
 {

Modified: stable/11/sys/dev/uart/uart_dev_snps.c
==============================================================================
--- stable/11/sys/dev/uart/uart_dev_snps.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/dev/uart/uart_dev_snps.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -61,22 +61,9 @@ struct snps_softc {
 #endif
 };
 
-static int
-snps_uart_attach(struct uart_softc *uart_sc)
-{
-	struct snps_softc *sc;
-
-	sc = (struct snps_softc *)uart_sc;
-
-	/* UART requires to read USR reg when IIR_BUSY */
-	sc->ns8250.busy_detect = 1;
-
-	return (ns8250_bus_attach(uart_sc));
-}
-
 static kobj_method_t snps_methods[] = {
 	KOBJMETHOD(uart_probe,		ns8250_bus_probe),
-	KOBJMETHOD(uart_attach,		snps_uart_attach),
+	KOBJMETHOD(uart_attach,		ns8250_bus_attach),
 	KOBJMETHOD(uart_detach,		ns8250_bus_detach),
 	KOBJMETHOD(uart_flush,		ns8250_bus_flush),
 	KOBJMETHOD(uart_getsig,		ns8250_bus_getsig),
@@ -136,7 +123,7 @@ snps_probe(device_t dev)
 	struct snps_softc *sc;
 	struct uart_class *uart_class;
 	phandle_t node;
-	uint32_t shift, clock;
+	uint32_t shift, iowidth, clock;
 	uint64_t freq;
 	int error;
 #ifdef EXT_RESOURCES
@@ -159,6 +146,8 @@ snps_probe(device_t dev)
 	node = ofw_bus_get_node(dev);
 	if (OF_getencprop(node, "reg-shift", &shift, sizeof(shift)) <= 0)
 		shift = 0;
+	if (OF_getencprop(node, "reg-io-width", &iowidth, sizeof(iowidth)) <= 0)
+		iowidth = 1;
 	if (OF_getencprop(node, "clock-frequency", &clock, sizeof(clock)) <= 0)
 		clock = 0;
 
@@ -200,7 +189,7 @@ snps_probe(device_t dev)
 	if (bootverbose && clock == 0)
 		device_printf(dev, "could not determine frequency\n");
 
-	error = uart_bus_probe(dev, (int)shift, (int)clock, 0, 0);
+	error = uart_bus_probe(dev, (int)shift, (int)iowidth, (int)clock, 0, 0, UART_F_BUSY_DETECT);
 	if (error != 0)
 		return (error);
 

Modified: stable/11/sys/mips/adm5120/uart_bus_adm5120.c
==============================================================================
--- stable/11/sys/mips/adm5120/uart_bus_adm5120.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/mips/adm5120/uart_bus_adm5120.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -87,7 +87,7 @@ uart_adm5120_probe(device_t dev)
 	sc->sc_class = &uart_adm5120_uart_class;
 	bcopy(&sc->sc_sysdev->bas, &sc->sc_bas, sizeof(sc->sc_bas));
 
-	return (uart_bus_probe(dev, 0, 0, 0, 0));
+	return (uart_bus_probe(dev, 0, 0, 0, 0, 0, 0));
 }
 
 DRIVER_MODULE(uart, obio, uart_adm5120_driver, uart_devclass, 0, 0);

Modified: stable/11/sys/mips/alchemy/uart_bus_alchemy.c
==============================================================================
--- stable/11/sys/mips/alchemy/uart_bus_alchemy.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/mips/alchemy/uart_bus_alchemy.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -81,7 +81,7 @@ uart_alchemy_probe(device_t dev)
 	sc->sc_class = &uart_ns8250_class;
 	bcopy(&sc->sc_sysdev->bas, &sc->sc_bas, sizeof(sc->sc_bas));
 
-	return (uart_bus_probe(dev, 0, 0, 0, 0));
+	return (uart_bus_probe(dev, 0, 0, 0, 0, 0, 0));
 }
 
 DRIVER_MODULE(uart, obio, uart_alchemy_driver, uart_devclass, 0, 0);

Modified: stable/11/sys/mips/atheros/uart_bus_ar71xx.c
==============================================================================
--- stable/11/sys/mips/atheros/uart_bus_ar71xx.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/mips/atheros/uart_bus_ar71xx.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -83,7 +83,7 @@ uart_ar71xx_probe(device_t dev)
 	sc->sc_bas.bst = mips_bus_space_generic;
 	sc->sc_bas.bsh = MIPS_PHYS_TO_KSEG1(AR71XX_UART_ADDR) + 3;
 
-	return (uart_bus_probe(dev, 2, freq, 0, 0));
+	return (uart_bus_probe(dev, 2, 0, freq, 0, 0, 0));
 }
 
 DRIVER_MODULE(uart, apb, uart_ar71xx_driver, uart_devclass, 0, 0);

Modified: stable/11/sys/mips/atheros/uart_bus_ar933x.c
==============================================================================
--- stable/11/sys/mips/atheros/uart_bus_ar933x.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/mips/atheros/uart_bus_ar933x.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -85,7 +85,7 @@ uart_ar933x_probe(device_t dev)
 	sc->sc_bas.bst = mips_bus_space_generic;
 	sc->sc_bas.bsh = MIPS_PHYS_TO_KSEG1(AR71XX_UART_ADDR);
 
-	return (uart_bus_probe(dev, 2, freq, 0, 0));
+	return (uart_bus_probe(dev, 2, 0, freq, 0, 0, 0));
 }
 
 DRIVER_MODULE(uart, apb, uart_ar933x_driver, uart_devclass, 0, 0);

Modified: stable/11/sys/mips/broadcom/uart_bus_chipc.c
==============================================================================
--- stable/11/sys/mips/broadcom/uart_bus_chipc.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/mips/broadcom/uart_bus_chipc.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -63,7 +63,7 @@ uart_chipc_probe(device_t dev)
 	/* TODO: UART rate should be calculated from CPU clock speed
 	 * as fetched from bhnd bus */
 	socinfo = bcm_get_socinfo();
-	return (uart_bus_probe(dev, 0, socinfo->uartrate, 0, 0));
+	return (uart_bus_probe(dev, 0, 0, socinfo->uartrate, 0, 0, 0));
 }
 
 static device_method_t uart_chipc_methods[] = {

Modified: stable/11/sys/mips/cavium/uart_bus_octeonusart.c
==============================================================================
--- stable/11/sys/mips/cavium/uart_bus_octeonusart.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/mips/cavium/uart_bus_octeonusart.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -105,7 +105,7 @@ uart_octeon_probe(device_t dev)
 	if (bus_space_map(sc->sc_bas.bst, CVMX_MIO_UARTX_RBR(0),
 	    uart_getrange(sc->sc_class), 0, &sc->sc_bas.bsh) != 0)
 		return (ENXIO);
-	return (uart_bus_probe(dev, sc->sc_bas.regshft, 0, 0, unit));
+	return (uart_bus_probe(dev, sc->sc_bas.regshft, 0, 0, 0, unit, 0));
 }
 
 DRIVER_MODULE(uart, obio, uart_octeon_driver, uart_devclass, 0, 0);

Modified: stable/11/sys/mips/idt/uart_bus_rc32434.c
==============================================================================
--- stable/11/sys/mips/idt/uart_bus_rc32434.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/mips/idt/uart_bus_rc32434.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -94,7 +94,7 @@ uart_rc32434_probe(device_t dev)
 	sc->sc_bas.bst = mips_bus_space_generic;
 	sc->sc_bas.bsh = MIPS_PHYS_TO_KSEG1(IDT_BASE_UART0);
 
-	return (uart_bus_probe(dev, 2, 330000000UL/2, 0, 0));
+	return (uart_bus_probe(dev, 2, 0, 330000000UL/2, 0, 0, 0));
 }
 
 DRIVER_MODULE(uart, obio, uart_rc32434_driver, uart_devclass, 0, 0);

Modified: stable/11/sys/mips/malta/uart_bus_maltausart.c
==============================================================================
--- stable/11/sys/mips/malta/uart_bus_maltausart.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/mips/malta/uart_bus_maltausart.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -85,7 +85,7 @@ uart_malta_probe(device_t dev)
 	sc->sc_sysdev->bas.bsh = MIPS_PHYS_TO_KSEG1(MALTA_UART0ADR);
 	sc->sc_bas.bst = mips_bus_space_generic;
 	sc->sc_bas.bsh = MIPS_PHYS_TO_KSEG1(MALTA_UART0ADR);
-	return(uart_bus_probe(dev, 0, 0, 0, 0));
+	return(uart_bus_probe(dev, 0, 0, 0, 0, 0, 0));
 }
 
 DRIVER_MODULE(uart, obio, uart_malta_driver, uart_devclass, 0, 0);

Modified: stable/11/sys/mips/rmi/uart_bus_xlr_iodi.c
==============================================================================
--- stable/11/sys/mips/rmi/uart_bus_xlr_iodi.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/mips/rmi/uart_bus_xlr_iodi.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -74,7 +74,7 @@ uart_iodi_probe(device_t dev)
 	sc->sc_bas.bst = rmi_bus_space;
 	sc->sc_bas.bsh = MIPS_PHYS_TO_KSEG1(XLR_UART0ADDR);
 	/* regshft = 2, rclk = 66000000, rid = 0, chan = 0 */
-	return (uart_bus_probe(dev, 2, 66000000, 0, 0));
+	return (uart_bus_probe(dev, 2, 0, 66000000, 0, 0, 0));
 }
 
 DRIVER_MODULE(uart, iodi, uart_iodi_driver, uart_devclass, 0, 0);

Modified: stable/11/sys/mips/rt305x/uart_bus_rt305x.c
==============================================================================
--- stable/11/sys/mips/rt305x/uart_bus_rt305x.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/mips/rt305x/uart_bus_rt305x.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -87,7 +87,7 @@ uart_rt305x_probe(device_t dev)
 	sc->sc_bas.bsh = 
 	    MIPS_PHYS_TO_KSEG1(device_get_unit(dev)?UARTLITE_BASE:UART_BASE);
 
-	return (uart_bus_probe(dev, 2, SYSTEM_CLOCK, 0, 0));
+	return (uart_bus_probe(dev, 2, 0, SYSTEM_CLOCK, 0, 0, 0));
 }
 
 DRIVER_MODULE(uart, obio, uart_rt305x_driver, uart_devclass, 0, 0);

Modified: stable/11/sys/modules/uart/Makefile
==============================================================================
--- stable/11/sys/modules/uart/Makefile	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/modules/uart/Makefile	Sun Nov  4 23:28:56 2018	(r340145)
@@ -2,6 +2,12 @@
 
 .PATH: ${SRCTOP}/sys/dev/uart
 
+
+.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "amd64" || \
+    ${MACHINE_ARCH} == "i386"
+uart_bus_acpi=uart_bus_acpi.c
+.endif
+
 .if ${MACHINE_CPUARCH} == "sparc64"
 uart_bus_ebus=	uart_bus_ebus.c
 .endif
@@ -25,15 +31,15 @@ uart_cpu_machine= ${_uart_cpu}
 .endif
 
 KMOD=	uart
-SRCS=	uart_bus_acpi.c ${uart_bus_ebus} uart_bus_isa.c uart_bus_pccard.c \
+SRCS=	${uart_bus_acpi} ${uart_bus_ebus} uart_bus_isa.c uart_bus_pccard.c \
 	uart_bus_pci.c uart_bus_puc.c uart_bus_scc.c \
 	uart_core.c ${uart_cpu_machine} uart_dbg.c \
 	${uart_dev_lpc} uart_dev_ns8250.c uart_dev_quicc.c uart_dev_sab82532.c \
 	uart_dev_z8530.c \
 	uart_if.c uart_if.h uart_subr.c uart_tty.c
 
-SRCS+=	bus_if.h card_if.h device_if.h isa_if.h ${ofw_bus_if} pci_if.h \
+SRCS+=	acpi_if.h bus_if.h card_if.h device_if.h isa_if.h ${ofw_bus_if} pci_if.h \
 	power_if.h pccarddevs.h serdev_if.h
-SRCS+=	opt_platform.h opt_uart.h
+SRCS+=	opt_acpi.h opt_platform.h opt_uart.h
 
 .include <bsd.kmod.mk>

Added: stable/11/sys/pc98/include/acpica_machdep.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/11/sys/pc98/include/acpica_machdep.h	Sun Nov  4 23:28:56 2018	(r340145)
@@ -0,0 +1,6 @@
+/*-
+ * This file is in the public domain.
+ */
+/* $FreeBSD$ */
+
+#include <x86/acpica_machdep.h>

Modified: stable/11/sys/powerpc/psim/uart_iobus.c
==============================================================================
--- stable/11/sys/powerpc/psim/uart_iobus.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/powerpc/psim/uart_iobus.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -81,7 +81,7 @@ uart_iobus_probe(device_t dev)
 	sc->sc_class = &uart_ns8250_class;
 
 	device_set_desc(dev, "PSIM serial port");
-	return (uart_bus_probe(dev, 0, 0, 0, 0));
+	return (uart_bus_probe(dev, 0, 0, 0, 0, 0, 0));
 }
 
 DRIVER_MODULE(uart, iobus, uart_iobus_driver, uart_devclass, 0, 0);

Modified: stable/11/sys/sparc64/pci/sbbc.c
==============================================================================
--- stable/11/sys/sparc64/pci/sbbc.c	Sun Nov  4 22:13:22 2018	(r340144)
+++ stable/11/sys/sparc64/pci/sbbc.c	Sun Nov  4 23:28:56 2018	(r340145)
@@ -618,7 +618,7 @@ sbbc_uart_sbbc_probe(device_t dev)
 	sc = device_get_softc(dev);
 	sc->sc_class = &uart_sbbc_class;
 	device_set_desc(dev, "Serengeti console");
-	return (uart_bus_probe(dev, 0, 0, SBBC_PCI_BAR, 0));
+	return (uart_bus_probe(dev, 0, 0, 0, SBBC_PCI_BAR, 0, 0));
 }
 
 /*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201811042328.wA4NSuDu039752>