xref: /kvm-unit-tests/lib/x86/io.c (revision 7d36db351752e29ad27eaafe3f102de7064e429b)
1*7d36db35SAvi Kivity #include "libcflat.h"
2*7d36db35SAvi Kivity #include "smp.h"
3*7d36db35SAvi Kivity 
4*7d36db35SAvi Kivity static struct spinlock lock;
5*7d36db35SAvi Kivity 
6*7d36db35SAvi Kivity static void print_serial(const char *buf)
7*7d36db35SAvi Kivity {
8*7d36db35SAvi Kivity 	unsigned long len = strlen(buf);
9*7d36db35SAvi Kivity 
10*7d36db35SAvi Kivity 	asm volatile ("rep/outsb" : "+S"(buf), "+c"(len) : "d"(0xf1));
11*7d36db35SAvi Kivity }
12*7d36db35SAvi Kivity 
13*7d36db35SAvi Kivity void puts(const char *s)
14*7d36db35SAvi Kivity {
15*7d36db35SAvi Kivity 	spin_lock(&lock);
16*7d36db35SAvi Kivity 	print_serial(s);
17*7d36db35SAvi Kivity 	spin_unlock(&lock);
18*7d36db35SAvi Kivity }
19*7d36db35SAvi Kivity 
20*7d36db35SAvi Kivity void exit(int code)
21*7d36db35SAvi Kivity {
22*7d36db35SAvi Kivity         asm volatile("out %0, %1" : : "a"(code), "d"((short)0xf4));
23*7d36db35SAvi Kivity }
24