18c2ecf20Sopenharmony_ci/*
28c2ecf20Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public
38c2ecf20Sopenharmony_ci * License.  See the file "COPYING" in the main directory of this archive
48c2ecf20Sopenharmony_ci * for more details.
58c2ecf20Sopenharmony_ci *
68c2ecf20Sopenharmony_ci * Copyright (C) 2001, 2002 Ralf Baechle
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include <asm/page.h>
108c2ecf20Sopenharmony_ci#include <asm/setup.h>
118c2ecf20Sopenharmony_ci#include <asm/sn/addrs.h>
128c2ecf20Sopenharmony_ci#include <asm/sn/agent.h>
138c2ecf20Sopenharmony_ci#include <asm/sn/klconfig.h>
148c2ecf20Sopenharmony_ci#include <asm/sn/ioc3.h>
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci#include <linux/serial.h>
178c2ecf20Sopenharmony_ci#include <linux/serial_core.h>
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci#include "ip27-common.h"
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ci#define IOC3_CLK	(22000000 / 3)
228c2ecf20Sopenharmony_ci#define IOC3_FLAGS	(0)
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_cistatic inline struct ioc3_uartregs *console_uart(void)
258c2ecf20Sopenharmony_ci{
268c2ecf20Sopenharmony_ci	struct ioc3 *ioc3;
278c2ecf20Sopenharmony_ci	nasid_t nasid;
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci	nasid = (master_nasid == INVALID_NASID) ? get_nasid() : master_nasid;
308c2ecf20Sopenharmony_ci	ioc3 = (struct ioc3 *)KL_CONFIG_CH_CONS_INFO(nasid)->memory_base;
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ci	return &ioc3->sregs.uarta;
338c2ecf20Sopenharmony_ci}
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_civoid prom_putchar(char c)
368c2ecf20Sopenharmony_ci{
378c2ecf20Sopenharmony_ci	struct ioc3_uartregs *uart = console_uart();
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci	while ((readb(&uart->iu_lsr) & 0x20) == 0)
408c2ecf20Sopenharmony_ci		;
418c2ecf20Sopenharmony_ci	writeb(c, &uart->iu_thr);
428c2ecf20Sopenharmony_ci}
43