11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This file is subject to the terms and conditions of the GNU General Public
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * License.  See the file "COPYING" in the main directory of this archive
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * for more details.
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1996 David S. Miller (dm@sgi.com)
725985edcedea6396277003854657b5f3cb31a628Lucas De Marchi * Compatibility with board caches, Ulf Carlsson
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/kernel.h>
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/sgialib.h>
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/bcache.h>
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
147034228792cc561e79ff8600f02884bd4c80e287Ralf Baechle * IP22 boardcache is not compatible with board caches.	 Thus we disable it
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * during romvec action.  Since r4xx0.c is always compiled and linked with your
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * kernel, this shouldn't cause any harm regardless what MIPS processor you
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * have.
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The ARC write and read functions seem to interfere with the serial lines
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * in some way. You should be careful with them.
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid prom_putchar(char c)
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ULONG cnt;
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	CHAR it = c;
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bc_disable();
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ArcWrite(1, &it, 1, &cnt);
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bc_enable();
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldschar prom_getchar(void)
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ULONG cnt;
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	CHAR c;
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bc_disable();
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ArcRead(0, &c, 1, &cnt);
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bc_enable();
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return c;
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
44