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