Skip site navigation (1)Skip section navigation (2)


| raw e-mail | index | archive | help
diff --git a/sys/dev/uart/uart_cpu_acpi.c b/sys/dev/uart/uart_cpu_acpi.c
index 2e2ff101619b..da77603f0093 100644
--- a/sys/dev/uart/uart_cpu_acpi.c
+++ b/sys/dev/uart/uart_cpu_acpi.c
@@ -44,15 +44,15 @@
 #include <contrib/dev/acpica/include/accommon.h>
 #include <contrib/dev/acpica/include/actables.h>
 
-static struct acpi_uart_compat_data *
+static struct acpi_spcr_compat_data *
 uart_cpu_acpi_scan(uint8_t interface_type)
 {
-	struct acpi_uart_compat_data **cd, *curcd;
+	struct acpi_spcr_compat_data **cd, *curcd;
 	int i;
 
-	SET_FOREACH(cd, uart_acpi_class_and_device_set) {
+	SET_FOREACH(cd, uart_acpi_spcr_class_set) {
 		curcd = *cd;
-		for (i = 0; curcd[i].cd_hid != NULL; i++) {
+		for (i = 0; curcd[i].cd_class != NULL; i++) {
 			if (curcd[i].cd_port_subtype == interface_type)
 				return (&curcd[i]);
 		}
@@ -135,7 +135,7 @@ uart_cpu_acpi_spcr(int devtype, struct uart_devinfo *di)
 {
 	vm_paddr_t spcr_physaddr;
 	ACPI_TABLE_SPCR *spcr;
-	struct acpi_uart_compat_data *cd;
+	struct acpi_spcr_compat_data *cd;
 	struct uart_class *class;
 	int error = ENXIO;
 
@@ -229,7 +229,7 @@ uart_cpu_acpi_dbg2(struct uart_devinfo *di)
 	ACPI_TABLE_DBG2 *dbg2;
 	ACPI_DBG2_DEVICE *dbg2_dev;
 	ACPI_GENERIC_ADDRESS *base_address;
-	struct acpi_uart_compat_data *cd;
+	struct acpi_spcr_compat_data *cd;
 	struct uart_class *class;
 	int error;
 	bool found;
diff --git a/sys/dev/uart/uart_cpu_acpi.h b/sys/dev/uart/uart_cpu_acpi.h
index c11ead373b86..7205303f0084 100644
--- a/sys/dev/uart/uart_cpu_acpi.h
+++ b/sys/dev/uart/uart_cpu_acpi.h
@@ -35,6 +35,14 @@
 
 struct uart_class;
 
+struct acpi_spcr_compat_data {
+	struct uart_class *cd_class;
+	uint16_t cd_port_subtype;
+};
+SET_DECLARE(uart_acpi_spcr_class_set, struct acpi_spcr_compat_data);
+#define	UART_ACPI_SPCR_CLASS(data)					\
+	DATA_SET(uart_acpi_spcr_class_set, data)
+
 struct acpi_uart_compat_data {
 	const char *cd_hid;
 	struct uart_class *cd_class;
diff --git a/sys/dev/uart/uart_dev_ns8250.c b/sys/dev/uart/uart_dev_ns8250.c
index 0f19ede6d9df..09eadb5d75e3 100644
--- a/sys/dev/uart/uart_dev_ns8250.c
+++ b/sys/dev/uart/uart_dev_ns8250.c
@@ -492,6 +492,13 @@ UART_CLASS(uart_ns8250_class);
  * XXX -- refactor out ACPI and FDT ifdefs
  */
 #ifdef DEV_ACPI
+static struct acpi_spcr_compat_data acpi_spcr_compat_data[] = {
+	{ &uart_ns8250_class, ACPI_DBG2_16550_COMPATIBLE },
+	{ &uart_ns8250_class, ACPI_DBG2_16550_SUBSET },
+	{ NULL, 0 },
+};
+UART_ACPI_SPCR_CLASS(acpi_spcr_compat_data);
+
 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"},
diff --git a/sys/dev/uart/uart_dev_pl011.c b/sys/dev/uart/uart_dev_pl011.c
index a0d5a5b1c7e2..dca2765cac59 100644
--- a/sys/dev/uart/uart_dev_pl011.c
+++ b/sys/dev/uart/uart_dev_pl011.c
@@ -391,6 +391,14 @@ UART_FDT_CLASS_AND_DEVICE(fdt_compat_data);
 #endif
 
 #ifdef DEV_ACPI
+static struct acpi_spcr_compat_data acpi_spcr_compat_data[] = {
+	{ &uart_pl011_class, ACPI_DBG2_ARM_PL011 },
+	{ &uart_pl011_class, ACPI_DBG2_ARM_SBSA_GENERIC },
+	{ &uart_pl011_class, ACPI_DBG2_ARM_SBSA_32BIT },
+	{ NULL, 0 },
+};
+UART_ACPI_SPCR_CLASS(acpi_spcr_compat_data);
+
 static struct acpi_uart_compat_data acpi_compat_data[] = {
 	{"ARMH0011", &uart_pl011_class, ACPI_DBG2_ARM_PL011, 2, 0, 0, 0, "uart pl011"},
 	{"ARMHB000", &uart_pl011_class, ACPI_DBG2_ARM_SBSA_GENERIC, 2, 0, 0, 0, "uart pl011"},



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