diff --git a/8250-serial.c b/8250-serial.c index 44dfd7f..7aea383 100644 --- a/8250-serial.c +++ b/8250-serial.c @@ -32,8 +32,10 @@ static struct serial8250_device devices[] = { .iobase = 0x3f8, .irq = 4, - .lsr = UART_LSR_TEMT | UART_LSR_THRE, .iir = UART_IIR_NO_INT, + .lsr = UART_LSR_TEMT | UART_LSR_THRE, + .msr = UART_MSR_DCD | UART_MSR_DSR | UART_MSR_CTS, + .mcr = UART_MCR_OUT2, }, /* ttyS1 */ [1] = { @@ -282,13 +284,19 @@ static struct ioport_operations serial8250_ops = { .io_out = serial8250_out, }; -void serial8250__init(void) +static void serial8250__device_init(struct kvm *kvm, struct serial8250_device *dev) +{ + ioport__register(dev->iobase, &serial8250_ops, 8); + kvm__irq_line(kvm, dev->irq, 0); +} + +void serial8250__init(struct kvm *kvm) { unsigned int i; for (i = 0; i < ARRAY_SIZE(devices); i++) { struct serial8250_device *dev = &devices[i]; - ioport__register(dev->iobase, &serial8250_ops, 8); + serial8250__device_init(kvm, dev); } } diff --git a/include/kvm/8250-serial.h b/include/kvm/8250-serial.h index d899f4f..05ee096 100644 --- a/include/kvm/8250-serial.h +++ b/include/kvm/8250-serial.h @@ -3,7 +3,7 @@ struct kvm; -void serial8250__init(void); -void serial8250__interrupt(struct kvm *self); +void serial8250__init(struct kvm *kvm); +void serial8250__interrupt(struct kvm *kvm); #endif /* KVM__8250_SERIAL_H */ diff --git a/main.c b/main.c index 643f6bd..cac8d30 100644 --- a/main.c +++ b/main.c @@ -164,7 +164,7 @@ int main(int argc, char *argv[]) if (single_step) kvm__enable_singlestep(kvm); - serial8250__init(); + serial8250__init(kvm); pci__init(); blk_virtio__init(kvm);