123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- /*
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 2010 Gabor Juhos <juhosg@openwrt.org>
- */
- #include <linux/mm.h>
- #include <linux/io.h>
- #include <linux/serial_reg.h>
- #include "devices.h"
- #include "ar2315_regs.h"
- #include "ar5312_regs.h"
- static inline void prom_uart_wr(void __iomem *base, unsigned reg,
- unsigned char ch)
- {
- __raw_writel(ch, base + 4 * reg);
- }
- static inline unsigned char prom_uart_rr(void __iomem *base, unsigned reg)
- {
- return __raw_readl(base + 4 * reg);
- }
- void prom_putchar(unsigned char ch)
- {
- static void __iomem *base;
- if (unlikely(base == NULL)) {
- if (is_ar2315())
- base = (void __iomem *)(KSEG1ADDR(AR2315_UART0_BASE));
- else
- base = (void __iomem *)(KSEG1ADDR(AR5312_UART0_BASE));
- }
- while ((prom_uart_rr(base, UART_LSR) & UART_LSR_THRE) == 0)
- ;
- prom_uart_wr(base, UART_TX, ch);
- while ((prom_uart_rr(base, UART_LSR) & UART_LSR_THRE) == 0)
- ;
- }
|