162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public
362306a36Sopenharmony_ci * License.  See the file "COPYING" in the main directory of this archive
462306a36Sopenharmony_ci * for more details.
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright (C) 2001, 2002 Ralf Baechle
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <asm/page.h>
1062306a36Sopenharmony_ci#include <asm/setup.h>
1162306a36Sopenharmony_ci#include <asm/sn/addrs.h>
1262306a36Sopenharmony_ci#include <asm/sn/agent.h>
1362306a36Sopenharmony_ci#include <asm/sn/klconfig.h>
1462306a36Sopenharmony_ci#include <asm/sn/ioc3.h>
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#include <linux/serial.h>
1762306a36Sopenharmony_ci#include <linux/serial_core.h>
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#include "ip27-common.h"
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#define IOC3_CLK	(22000000 / 3)
2262306a36Sopenharmony_ci#define IOC3_FLAGS	(0)
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cistatic inline struct ioc3_uartregs *console_uart(void)
2562306a36Sopenharmony_ci{
2662306a36Sopenharmony_ci	struct ioc3 *ioc3;
2762306a36Sopenharmony_ci	nasid_t nasid;
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci	nasid = (master_nasid == INVALID_NASID) ? get_nasid() : master_nasid;
3062306a36Sopenharmony_ci	ioc3 = (struct ioc3 *)KL_CONFIG_CH_CONS_INFO(nasid)->memory_base;
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci	return &ioc3->sregs.uarta;
3362306a36Sopenharmony_ci}
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_civoid prom_putchar(char c)
3662306a36Sopenharmony_ci{
3762306a36Sopenharmony_ci	struct ioc3_uartregs *uart = console_uart();
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci	while ((readb(&uart->iu_lsr) & 0x20) == 0)
4062306a36Sopenharmony_ci		;
4162306a36Sopenharmony_ci	writeb(c, &uart->iu_thr);
4262306a36Sopenharmony_ci}
43