diff options
Diffstat (limited to 'lume-legacy/include/drivers/uart.h')
| -rw-r--r-- | lume-legacy/include/drivers/uart.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lume-legacy/include/drivers/uart.h b/lume-legacy/include/drivers/uart.h new file mode 100644 index 0000000..a56624c --- /dev/null +++ b/lume-legacy/include/drivers/uart.h @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (C) 2026 Richard Qin + */ + +#pragma once +#include "common/types.h" +#include "drivers/uart_color.h" +#include "kernel/fdt.h" + +// UART register offsets (NS16550A) +#define RHR 0 // Receive Holding Register (read mode) +#define THR 0 // Transmit Holding Register (write mode) +#define IER 1 // Interrupt Enable Register +#define FCR 2 // FIFO Control Register +#define ISR 2 // Interrupt Status Register +#define LCR 3 // Line Control Register +#define LSR 5 // Line Status Register + +#define LSR_RX_READY 0x01 // input is waiting to be read from RHR +#define LSR_TX_IDLE 0x20 // THR can accept another character to send + +#define UART_RX_BUF_SIZE 128 + +// UART base address from FDT (use inline function to avoid macro issues) +static inline uint64 uart_base() { return g_devices.uart.base_addr; } + +namespace Drivers +{ + void uart_init(); + void uart_intr(); + int console_read(uint64 target, int len); + + void uart_putc(char c); + void uart_puts(const char *s); + void uart_put_int(int value); + void print_hex(uint64 value); +}
\ No newline at end of file |
