1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * This file is subject to the terms and conditions of the GNU General Public 3*4882a593Smuzhiyun * License. See the file "COPYING" in the main directory of this archive 4*4882a593Smuzhiyun * for more details. 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Copyright (C) 2001, 2002 Ralf Baechle 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <asm/page.h> 10*4882a593Smuzhiyun #include <asm/setup.h> 11*4882a593Smuzhiyun #include <asm/sn/addrs.h> 12*4882a593Smuzhiyun #include <asm/sn/agent.h> 13*4882a593Smuzhiyun #include <asm/sn/klconfig.h> 14*4882a593Smuzhiyun #include <asm/sn/ioc3.h> 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #include <linux/serial.h> 17*4882a593Smuzhiyun #include <linux/serial_core.h> 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #include "ip27-common.h" 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #define IOC3_CLK (22000000 / 3) 22*4882a593Smuzhiyun #define IOC3_FLAGS (0) 23*4882a593Smuzhiyun console_uart(void)24*4882a593Smuzhiyunstatic inline struct ioc3_uartregs *console_uart(void) 25*4882a593Smuzhiyun { 26*4882a593Smuzhiyun struct ioc3 *ioc3; 27*4882a593Smuzhiyun nasid_t nasid; 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun nasid = (master_nasid == INVALID_NASID) ? get_nasid() : master_nasid; 30*4882a593Smuzhiyun ioc3 = (struct ioc3 *)KL_CONFIG_CH_CONS_INFO(nasid)->memory_base; 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun return &ioc3->sregs.uarta; 33*4882a593Smuzhiyun } 34*4882a593Smuzhiyun prom_putchar(char c)35*4882a593Smuzhiyunvoid prom_putchar(char c) 36*4882a593Smuzhiyun { 37*4882a593Smuzhiyun struct ioc3_uartregs *uart = console_uart(); 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun while ((readb(&uart->iu_lsr) & 0x20) == 0) 40*4882a593Smuzhiyun ; 41*4882a593Smuzhiyun writeb(c, &uart->iu_thr); 42*4882a593Smuzhiyun } 43