/* Minimal NS16550A UART helpers for the QEMU virt machine. */ #ifndef GE_UART_H #define GE_UART_H typedef unsigned char u8; typedef unsigned int u32; typedef unsigned long u64; typedef long i64; #define UART0_BASE 0x10000000UL #define UART_THR (UART0_BASE + 0x00) #define UART_LSR (UART0_BASE + 0x05) static inline void uart_putc(char c) { volatile u8 *lsr = (volatile u8 *)UART_LSR; while ((*lsr & 0x20) == 0) { /* wait for THR empty */ } *(volatile u8 *)UART_THR = (u8)c; } static inline void uart_puts(const char *s) { while (*s) { uart_putc(*s++); } } static inline void uart_hex(u64 value, int digits) { static const char hex[] = "0123456789abcdef"; for (int i = (digits - 1) * 4; i >= 0; i -= 4) { uart_putc(hex[(value >> i) & 0xf]); } } #endif /* GE_UART_H */