Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F151999270
D44357.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D44357.id.diff
View Options
diff --git a/sys/dev/uart/uart_cpu_acpi.c b/sys/dev/uart/uart_cpu_acpi.c
--- a/sys/dev/uart/uart_cpu_acpi.c
+++ b/sys/dev/uart/uart_cpu_acpi.c
@@ -69,35 +69,10 @@
return (NULL);
}
-int
-uart_cpu_acpi_spcr(int devtype, struct uart_devinfo *di)
+static int
+uart_cpu_acpi_init_devinfo(struct uart_devinfo *di, struct uart_class *class,
+ ACPI_GENERIC_ADDRESS *addr)
{
- vm_paddr_t spcr_physaddr;
- ACPI_TABLE_SPCR *spcr;
- struct acpi_uart_compat_data *cd;
- struct uart_class *class;
- int error = ENXIO;
-
- /* SPCR only tells us about consoles. */
- if (devtype != UART_DEV_CONSOLE)
- return (error);
-
- /* Look for the SPCR table. */
- spcr_physaddr = acpi_find_table(ACPI_SIG_SPCR);
- if (spcr_physaddr == 0)
- return (error);
- spcr = acpi_map_table(spcr_physaddr, ACPI_SIG_SPCR);
- if (spcr == NULL) {
- printf("Unable to map the SPCR table!\n");
- return (error);
- }
-
- /* Search for information about this SPCR interface type. */
- cd = uart_cpu_acpi_scan(spcr->InterfaceType);
- if (cd == NULL)
- goto out;
- class = cd->cd_class;
-
/* Fill in some fixed details. */
di->bas.chan = 0;
di->bas.rclk = 0;
@@ -107,7 +82,7 @@
di->ops = uart_getops(class);
/* Fill in details from SPCR table. */
- switch (spcr->SerialPort.SpaceId) {
+ switch (addr->SpaceId) {
case 0:
di->bas.bst = uart_bus_space_mem;
break;
@@ -116,10 +91,10 @@
break;
default:
printf("UART in unrecognized address space: %d!\n",
- (int)spcr->SerialPort.SpaceId);
- goto out;
+ (int)addr->SpaceId);
+ return (ENXIO);
}
- switch (spcr->SerialPort.AccessWidth) {
+ switch (addr->AccessWidth) {
case 0: /* EFI_ACPI_6_0_UNDEFINED */
/* FALLTHROUGH */
case 1: /* EFI_ACPI_6_0_BYTE */
@@ -136,10 +111,10 @@
break;
default:
printf("UART unsupported access width: %d!\n",
- (int)spcr->SerialPort.AccessWidth);
- goto out;
+ (int)addr->AccessWidth);
+ return (ENXIO);
}
- switch (spcr->SerialPort.BitWidth) {
+ switch (addr->BitWidth) {
case 0:
/* FALLTHROUGH */
case 8:
@@ -156,9 +131,46 @@
break;
default:
printf("UART unsupported bit width: %d!\n",
- (int)spcr->SerialPort.BitWidth);
- goto out;
+ (int)addr->BitWidth);
+ return (ENXIO);
}
+
+ return (0);
+}
+
+int
+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 uart_class *class;
+ int error = ENXIO;
+
+ /* SPCR only tells us about consoles. */
+ if (devtype != UART_DEV_CONSOLE)
+ return (error);
+
+ /* Look for the SPCR table. */
+ spcr_physaddr = acpi_find_table(ACPI_SIG_SPCR);
+ if (spcr_physaddr == 0)
+ return (error);
+ spcr = acpi_map_table(spcr_physaddr, ACPI_SIG_SPCR);
+ if (spcr == NULL) {
+ printf("Unable to map the SPCR table!\n");
+ return (error);
+ }
+
+ /* Search for information about this SPCR interface type. */
+ cd = uart_cpu_acpi_scan(spcr->InterfaceType);
+ if (cd == NULL)
+ goto out;
+ class = cd->cd_class;
+
+ error = uart_cpu_acpi_init_devinfo(di, class, &spcr->SerialPort);
+ if (error != 0)
+ goto out;
+
switch (spcr->BaudRate) {
case 0:
/* Special value; means "keep current value unchanged". */
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Apr 13, 12:36 AM (19 h, 14 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31383728
Default Alt Text
D44357.id.diff (3 KB)
Attached To
Mode
D44357: uart: Split out initilisation of the acpi devinfo
Attached
Detach File
Event Timeline
Log In to Comment