xref: /kvm-unit-tests/lib/powerpc/io.c (revision 2f9ce69e911e000aef74bae10921da1d066979cc)
11e95c7ccSAndrew Jones /*
21e95c7ccSAndrew Jones  * Each architecture must implement puts() and exit().
31e95c7ccSAndrew Jones  *
41e95c7ccSAndrew Jones  * Copyright (C) 2016, Red Hat Inc, Andrew Jones <drjones@redhat.com>
51e95c7ccSAndrew Jones  *
61e95c7ccSAndrew Jones  * This work is licensed under the terms of the GNU LGPL, version 2.
71e95c7ccSAndrew Jones  */
81e95c7ccSAndrew Jones #include <libcflat.h>
9e65bcc62SAndrew Jones #include <asm/spinlock.h>
10*2f9ce69eSAndrew Jones #include <asm/rtas.h>
11e65bcc62SAndrew Jones 
12e65bcc62SAndrew Jones extern void halt(int code);
13e65bcc62SAndrew Jones extern void putchar(int c);
14e65bcc62SAndrew Jones 
15e65bcc62SAndrew Jones static struct spinlock print_lock;
161e95c7ccSAndrew Jones 
171e95c7ccSAndrew Jones void io_init(void)
181e95c7ccSAndrew Jones {
19*2f9ce69eSAndrew Jones 	rtas_init();
201e95c7ccSAndrew Jones }
211e95c7ccSAndrew Jones 
22e65bcc62SAndrew Jones void puts(const char *s)
231e95c7ccSAndrew Jones {
24e65bcc62SAndrew Jones 	spin_lock(&print_lock);
25e65bcc62SAndrew Jones 	while (*s)
26e65bcc62SAndrew Jones 		putchar(*s++);
27e65bcc62SAndrew Jones 	spin_unlock(&print_lock);
281e95c7ccSAndrew Jones }
291e95c7ccSAndrew Jones 
30e65bcc62SAndrew Jones void exit(int code)
311e95c7ccSAndrew Jones {
32e65bcc62SAndrew Jones 	halt(code);
331e95c7ccSAndrew Jones }
34