1*13a7760fSPekka Enberg #include "kvm/early_printk.h" 2*13a7760fSPekka Enberg 3*13a7760fSPekka Enberg #include "kvm/ioport.h" 4*13a7760fSPekka Enberg 5*13a7760fSPekka Enberg #include <stdio.h> 6*13a7760fSPekka Enberg 7*13a7760fSPekka Enberg static bool early_serial_txr_out(struct kvm *self, uint16_t port, void *data, int size, uint32_t count) 8*13a7760fSPekka Enberg { 9*13a7760fSPekka Enberg char *p = data; 10*13a7760fSPekka Enberg 11*13a7760fSPekka Enberg printf("%c", *p); 12*13a7760fSPekka Enberg 13*13a7760fSPekka Enberg return true; 14*13a7760fSPekka Enberg } 15*13a7760fSPekka Enberg 16*13a7760fSPekka Enberg static struct ioport_operations early_serial_txr_ops = { 17*13a7760fSPekka Enberg .io_out = early_serial_txr_out, 18*13a7760fSPekka Enberg }; 19*13a7760fSPekka Enberg 20*13a7760fSPekka Enberg static bool early_serial_lsr_in(struct kvm *self, uint16_t port, void *data, int size, uint32_t count) 21*13a7760fSPekka Enberg { 22*13a7760fSPekka Enberg uint8_t *p = data; 23*13a7760fSPekka Enberg 24*13a7760fSPekka Enberg *p = 0x20; /* xmtrdy */ 25*13a7760fSPekka Enberg 26*13a7760fSPekka Enberg return true; 27*13a7760fSPekka Enberg } 28*13a7760fSPekka Enberg 29*13a7760fSPekka Enberg static struct ioport_operations early_serial_lsr_ops = { 30*13a7760fSPekka Enberg .io_in = early_serial_lsr_in, 31*13a7760fSPekka Enberg }; 32*13a7760fSPekka Enberg 33*13a7760fSPekka Enberg void early_printk__init(void) 34*13a7760fSPekka Enberg { 35*13a7760fSPekka Enberg ioport__register(0x03F8, &early_serial_txr_ops); 36*13a7760fSPekka Enberg ioport__register(0x03FD, &early_serial_lsr_ops); 37*13a7760fSPekka Enberg } 38