18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Wrap-around code for a console using the
48c2ecf20Sopenharmony_ci * ARC io-routines.
58c2ecf20Sopenharmony_ci *
68c2ecf20Sopenharmony_ci * Copyright (c) 1998 Harald Koerfgen
78c2ecf20Sopenharmony_ci * Copyright (c) 2001 Ralf Baechle
88c2ecf20Sopenharmony_ci * Copyright (c) 2002 Thiemo Seufer
98c2ecf20Sopenharmony_ci */
108c2ecf20Sopenharmony_ci#include <linux/tty.h>
118c2ecf20Sopenharmony_ci#include <linux/major.h>
128c2ecf20Sopenharmony_ci#include <linux/init.h>
138c2ecf20Sopenharmony_ci#include <linux/console.h>
148c2ecf20Sopenharmony_ci#include <linux/fs.h>
158c2ecf20Sopenharmony_ci#include <asm/setup.h>
168c2ecf20Sopenharmony_ci#include <asm/sgialib.h>
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_cistatic void prom_console_write(struct console *co, const char *s,
198c2ecf20Sopenharmony_ci			       unsigned count)
208c2ecf20Sopenharmony_ci{
218c2ecf20Sopenharmony_ci	/* Do each character */
228c2ecf20Sopenharmony_ci	while (count--) {
238c2ecf20Sopenharmony_ci		if (*s == '\n')
248c2ecf20Sopenharmony_ci			prom_putchar('\r');
258c2ecf20Sopenharmony_ci		prom_putchar(*s++);
268c2ecf20Sopenharmony_ci	}
278c2ecf20Sopenharmony_ci}
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_cistatic int prom_console_setup(struct console *co, char *options)
308c2ecf20Sopenharmony_ci{
318c2ecf20Sopenharmony_ci	if (prom_flags & PROM_FLAG_USE_AS_CONSOLE)
328c2ecf20Sopenharmony_ci		return 0;
338c2ecf20Sopenharmony_ci	return -ENODEV;
348c2ecf20Sopenharmony_ci}
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_cistatic struct console arc_cons = {
378c2ecf20Sopenharmony_ci	.name		= "arc",
388c2ecf20Sopenharmony_ci	.write		= prom_console_write,
398c2ecf20Sopenharmony_ci	.setup		= prom_console_setup,
408c2ecf20Sopenharmony_ci	.flags		= CON_PRINTBUFFER,
418c2ecf20Sopenharmony_ci	.index		= -1,
428c2ecf20Sopenharmony_ci};
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci/*
458c2ecf20Sopenharmony_ci *    Register console.
468c2ecf20Sopenharmony_ci */
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_cistatic int __init arc_console_init(void)
498c2ecf20Sopenharmony_ci{
508c2ecf20Sopenharmony_ci	register_console(&arc_cons);
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci	return 0;
538c2ecf20Sopenharmony_ci}
548c2ecf20Sopenharmony_ciconsole_initcall(arc_console_init);
55