Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/uart/uart_cpu_arm64.c
Show First 20 Lines • Show All 73 Lines • ▼ Show 20 Lines | uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) | ||||
if (pmap_kextract(b1->bsh) == 0) | if (pmap_kextract(b1->bsh) == 0) | ||||
return (0); | return (0); | ||||
if (pmap_kextract(b2->bsh) == 0) | if (pmap_kextract(b2->bsh) == 0) | ||||
return (0); | return (0); | ||||
return ((pmap_kextract(b1->bsh) == pmap_kextract(b2->bsh)) ? 1 : 0); | return ((pmap_kextract(b1->bsh) == pmap_kextract(b2->bsh)) ? 1 : 0); | ||||
} | } | ||||
int | #ifdef FDT | ||||
uart_cpu_getdev(int devtype, struct uart_devinfo *di) | static int | ||||
uart_cpu_fdt_setup(struct uart_class *class, int devtype, struct uart_devinfo *di) | |||||
{ | { | ||||
struct uart_class *class; | |||||
bus_space_handle_t bsh; | bus_space_handle_t bsh; | ||||
bus_space_tag_t bst; | bus_space_tag_t bst; | ||||
u_int rclk, shift, iowidth; | u_int rclk, shift, iowidth; | ||||
int br, err; | int br, err; | ||||
/* Allow overriding the FDT using the environment. */ | |||||
class = &uart_ns8250_class; | |||||
err = uart_getenv(devtype, di, class); | |||||
if (err == 0) | |||||
return (0); | |||||
#ifdef DEV_ACPI | |||||
/* Check if SPCR can tell us what console to use. */ | |||||
if (uart_cpu_acpi_spcr(devtype, di) == 0) | |||||
return (0); | |||||
#endif | |||||
err = ENXIO; | |||||
#ifdef FDT | |||||
if (err != 0) { | |||||
err = uart_cpu_fdt_probe(&class, &bst, &bsh, &br, &rclk, | err = uart_cpu_fdt_probe(&class, &bst, &bsh, &br, &rclk, | ||||
&shift, &iowidth, devtype); | &shift, &iowidth, devtype); | ||||
} | |||||
#endif | |||||
if (err != 0) | if (err != 0) | ||||
return (err); | return (err); | ||||
/* | /* | ||||
* Finalize configuration. | * Finalize configuration. | ||||
*/ | */ | ||||
di->bas.chan = 0; | di->bas.chan = 0; | ||||
di->bas.regshft = shift; | di->bas.regshft = shift; | ||||
di->bas.regiowidth = iowidth; | di->bas.regiowidth = iowidth; | ||||
di->baudrate = br; | di->baudrate = br; | ||||
di->bas.rclk = rclk; | di->bas.rclk = rclk; | ||||
di->ops = uart_getops(class); | di->ops = uart_getops(class); | ||||
di->databits = 8; | di->databits = 8; | ||||
di->stopbits = 1; | di->stopbits = 1; | ||||
di->parity = UART_PARITY_NONE; | di->parity = UART_PARITY_NONE; | ||||
di->bas.bst = bst; | di->bas.bst = bst; | ||||
di->bas.bsh = bsh; | di->bas.bsh = bsh; | ||||
uart_bus_space_mem = di->bas.bst; | uart_bus_space_mem = di->bas.bst; | ||||
uart_bus_space_io = NULL; | uart_bus_space_io = NULL; | ||||
return (0); | return (0); | ||||
} | |||||
#endif | |||||
int | |||||
uart_cpu_getdev(int devtype, struct uart_devinfo *di) | |||||
{ | |||||
struct uart_class *class; | |||||
int err; | |||||
/* Allow overriding ACPI/FDT using the environment. */ | |||||
class = &uart_ns8250_class; | |||||
err = uart_getenv(devtype, di, class); | |||||
if (err == 0) | |||||
return (0); | |||||
#ifdef DEV_ACPI | |||||
/* Check if SPCR can tell us what console to use. */ | |||||
if (uart_cpu_acpi_spcr(devtype, di) == 0) | |||||
return (0); | |||||
#endif | |||||
#ifdef FDT | |||||
if (uart_cpu_fdt_setup(class, devtype, di) == 0) | |||||
return (0); | |||||
#endif | |||||
return (ENXIO); | |||||
} | } |