From 1648ab5277eadd18ea2c1294a38141255fe01702 Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Sun, 15 Aug 2021 16:59:17 -0500 Subject: [PATCH] kernel/uart: Clean up uarts, make calling convention consistent Change-Id: I36ef92ef13edb0b006344db74e9d1b3ae52e0127 Reviewed-on: https://review.haiku-os.org/c/haiku/+/4327 Reviewed-by: X512 Reviewed-by: Jessica Hamilton Tested-by: Commit checker robot --- .../kernel/arch/arm/arch_uart_8250_omap.h | 36 +++++++++++++++++++ .../kernel/arch/generic/debug_uart_8250.h | 5 ++- .../kernel/arch/riscv64/arch_uart_sifive.h | 6 ++-- src/system/boot/platform/efi/dtb.cpp | 18 ---------- .../kernel/arch/arm/arch_uart_8250_omap.cpp | 19 +++------- .../kernel/arch/arm/arch_uart_pl011.cpp | 3 +- .../kernel/arch/generic/debug_uart_8250.cpp | 13 ++++++- .../arch/riscv64/arch_debug_console.cpp | 18 ---------- .../kernel/arch/riscv64/arch_uart_sifive.cpp | 11 ++++++ 9 files changed, 71 insertions(+), 58 deletions(-) create mode 100644 headers/private/kernel/arch/arm/arch_uart_8250_omap.h diff --git a/headers/private/kernel/arch/arm/arch_uart_8250_omap.h b/headers/private/kernel/arch/arm/arch_uart_8250_omap.h new file mode 100644 index 0000000000..39ff62ecad --- /dev/null +++ b/headers/private/kernel/arch/arm/arch_uart_8250_omap.h @@ -0,0 +1,36 @@ +/* + * Copyright 2012-2021 Haiku, Inc. All rights reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * François Revol, revol@free.fr + * Alexander von Gluck IV, kallisti5@unixzen.com + */ +#ifndef _KERNEL_ARCH_DEBUG_UART_8250_OMAP_H +#define _KERNEL_ARCH_DEBUG_UART_8250_OMAP_H + + +#include + +#include +#include + +#include "debug_uart.h" + + +class ArchUART8250Omap : public DebugUART8250 { +public: + ArchUART8250Omap(addr_t base, int64 clock); + ~ArchUART8250Omap(); + void InitEarly(); + + // ARM MMIO: on ARM the UART regs are aligned on 32bit + virtual void Out8(int reg, uint8 value); + virtual uint8 In8(int reg); +}; + + +DebugUART8250* arch_get_uart_8250_omap(addr_t base, int64 clock); + + +#endif /* _KERNEL_ARCH_DEBUG_UART_8250_OMAP_H */ diff --git a/headers/private/kernel/arch/generic/debug_uart_8250.h b/headers/private/kernel/arch/generic/debug_uart_8250.h index 34694a4232..fad17be4ce 100644 --- a/headers/private/kernel/arch/generic/debug_uart_8250.h +++ b/headers/private/kernel/arch/generic/debug_uart_8250.h @@ -1,5 +1,5 @@ /* - * Copyright 2012 Haiku, Inc. All rights reserved. + * Copyright 2012-2021 Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -33,8 +33,7 @@ public: }; -extern DebugUART8250 *arch_get_uart_8250(addr_t base, int64 clock); -extern DebugUART8250 *arch_get_uart_8250_omap(addr_t base, int64 clock); +DebugUART8250* arch_get_uart_8250(addr_t base, int64 clock); #endif /* _KERNEL_ARCH_DEBUG_UART_8250_H */ diff --git a/headers/private/kernel/arch/riscv64/arch_uart_sifive.h b/headers/private/kernel/arch/riscv64/arch_uart_sifive.h index 9c236a3502..96f78866b5 100644 --- a/headers/private/kernel/arch/riscv64/arch_uart_sifive.h +++ b/headers/private/kernel/arch/riscv64/arch_uart_sifive.h @@ -1,8 +1,7 @@ /* - * Copyright 2021, Haiku, Inc. + * Copyright 2021, Haiku, Inc. All rights reserved * Distributed under the terms of the MIT License. */ - #ifndef _ARCH_UART_SIFIVE_H_ #define _ARCH_UART_SIFIVE_H_ @@ -97,4 +96,7 @@ ArchUARTSifive::Regs() } +ArchUARTSifive* arch_get_uart_sifive(addr_t base, int64 clock); + + #endif // _ARCH_UART_SIFIVE_H_ diff --git a/src/system/boot/platform/efi/dtb.cpp b/src/system/boot/platform/efi/dtb.cpp index 0c9998d4ca..10ee045089 100644 --- a/src/system/boot/platform/efi/dtb.cpp +++ b/src/system/boot/platform/efi/dtb.cpp @@ -40,24 +40,6 @@ static addr_range sClint = {0}; static ArchUart sUart = {.kind = kUartKindNone}; -DebugUART8250* -arch_get_uart_8250(addr_t base, int64 clock) -{ - static char buffer[sizeof(DebugUART8250)]; - DebugUART8250* uart = new(buffer) DebugUART8250(base, clock); - return uart; -} - - -ArchUARTSifive* -arch_get_uart_sifive(addr_t base, int64 clock) -{ - static char buffer[sizeof(ArchUARTSifive)]; - ArchUARTSifive* uart = new(buffer) ArchUARTSifive(base, clock); - return uart; -} - - static void WriteString(const char *str) {dprintf("%s", str);} static void WriteLn() {dprintf("\n");} static void WriteHex(uint64_t val, int n) {dprintf("%08" B_PRIx64, val);} diff --git a/src/system/kernel/arch/arm/arch_uart_8250_omap.cpp b/src/system/kernel/arch/arm/arch_uart_8250_omap.cpp index 4f267eccc4..40dcbc32ff 100644 --- a/src/system/kernel/arch/arm/arch_uart_8250_omap.cpp +++ b/src/system/kernel/arch/arm/arch_uart_8250_omap.cpp @@ -8,24 +8,12 @@ #include -#include +#include #include #include #include -class ArchUART8250Omap : public DebugUART8250 { -public: - ArchUART8250Omap(addr_t base, int64 clock); - ~ArchUART8250Omap(); - void InitEarly(); - - // ARM MMIO: on ARM the UART regs are aligned on 32bit - virtual void Out8(int reg, uint8 value); - virtual uint8 In8(int reg); -}; - - ArchUART8250Omap::ArchUART8250Omap(addr_t base, int64 clock) : DebugUART8250(base, clock) @@ -70,9 +58,10 @@ ArchUART8250Omap::In8(int reg) } -DebugUART8250 *arch_get_uart_8250_omap(addr_t base, int64 clock) +DebugUART8250* +arch_get_uart_8250_omap(addr_t base, int64 clock) { static char buffer[sizeof(ArchUART8250Omap)]; - ArchUART8250Omap *uart = new(buffer) ArchUART8250Omap(base, clock); + ArchUART8250Omap* uart = new(buffer) ArchUART8250Omap(base, clock); return uart; } diff --git a/src/system/kernel/arch/arm/arch_uart_pl011.cpp b/src/system/kernel/arch/arm/arch_uart_pl011.cpp index b95ed0dccf..b2f23886e2 100644 --- a/src/system/kernel/arch/arm/arch_uart_pl011.cpp +++ b/src/system/kernel/arch/arm/arch_uart_pl011.cpp @@ -319,7 +319,8 @@ ArchUARTPL011::FlushRx() } -ArchUARTPL011 *arch_get_uart_pl011(addr_t base, int64 clock) +ArchUARTPL011* +arch_get_uart_pl011(addr_t base, int64 clock) { static char buffer[sizeof(ArchUARTPL011)]; ArchUARTPL011 *uart = new(buffer) ArchUARTPL011(base, clock); diff --git a/src/system/kernel/arch/generic/debug_uart_8250.cpp b/src/system/kernel/arch/generic/debug_uart_8250.cpp index 4c78e63e04..7de1ad4703 100644 --- a/src/system/kernel/arch/generic/debug_uart_8250.cpp +++ b/src/system/kernel/arch/generic/debug_uart_8250.cpp @@ -22,8 +22,9 @@ */ -#include #include +#include +#include DebugUART8250::DebugUART8250(addr_t base, int64 clock) @@ -174,3 +175,13 @@ DebugUART8250::FlushRx() (void)c; } } + + +DebugUART8250* +arch_get_uart_8250(addr_t base, int64 clock) +{ + static char buffer[sizeof(DebugUART8250)]; + DebugUART8250* uart = new(buffer) DebugUART8250(base, clock); + return uart; +} + diff --git a/src/system/kernel/arch/riscv64/arch_debug_console.cpp b/src/system/kernel/arch/riscv64/arch_debug_console.cpp index 6c7cd293c0..656e348cf4 100644 --- a/src/system/kernel/arch/riscv64/arch_debug_console.cpp +++ b/src/system/kernel/arch/riscv64/arch_debug_console.cpp @@ -22,24 +22,6 @@ static DebugUART* sArchDebugUART = NULL; -DebugUART8250* -arch_get_uart_8250(addr_t base, int64 clock) -{ - static char buffer[sizeof(DebugUART8250)]; - DebugUART8250* uart = new(buffer) DebugUART8250(base, clock); - return uart; -} - - -ArchUARTSifive* -arch_get_uart_sifive(addr_t base, int64 clock) -{ - static char buffer[sizeof(ArchUARTSifive)]; - ArchUARTSifive* uart = new(buffer) ArchUARTSifive(base, clock); - return uart; -} - - void arch_debug_remove_interrupt_handler(uint32 line) { diff --git a/src/system/kernel/arch/riscv64/arch_uart_sifive.cpp b/src/system/kernel/arch/riscv64/arch_uart_sifive.cpp index f8a22a5591..35dbb8bdd8 100644 --- a/src/system/kernel/arch/riscv64/arch_uart_sifive.cpp +++ b/src/system/kernel/arch/riscv64/arch_uart_sifive.cpp @@ -3,7 +3,9 @@ * Distributed under the terms of the MIT License. */ + #include +#include ArchUARTSifive::ArchUARTSifive(addr_t base, int64 clock) @@ -104,3 +106,12 @@ ArchUARTSifive::Barrier() { asm volatile ("" : : : "memory"); } + + +ArchUARTSifive* +arch_get_uart_sifive(addr_t base, int64 clock) +{ + static char buffer[sizeof(ArchUARTSifive)]; + ArchUARTSifive* uart = new(buffer) ArchUARTSifive(base, clock); + return uart; +}