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