struct irq_id_reg iid;
struct fifo_ctrl_reg fcr;
struct line_ctrl_reg lcr;
- struct model_ctrl_reg mcr;
+ struct modem_ctrl_reg mcr;
struct line_status_reg lsr;
- struct model_status_reg msr;
+ struct modem_status_reg msr;
char tx_buffer[256];
-void serial_init(struct vm_device * dev) {
+int serial_init(struct vm_device * dev) {
struct serial_state * state = (struct serial_state *)dev->private_data;
state->com1.ier.rsvd = 0;
- state->com1.iir.rsvd = 0;
+ state->com1.iid.rsvd = 0;
state->com1.fcr.rsvd = 0;
state->com1.mcr.rsvd = 0;
- state->com1.iir.pending = 1;
+ state->com1.iid.pending = 1;
state->com2.ier.rsvd = 0;
- state->com2.iir.rsvd = 0;
+ state->com2.iid.rsvd = 0;
state->com2.fcr.rsvd = 0;
state->com2.mcr.rsvd = 0;
- state->com2.iir.pending = 1;
+ state->com2.iid.pending = 1;
state->com3.ier.rsvd = 0;
- state->com3.iir.rsvd = 0;
+ state->com3.iid.rsvd = 0;
state->com3.fcr.rsvd = 0;
state->com3.mcr.rsvd = 0;
- state->com3.iir.pending = 1;
+ state->com3.iid.pending = 1;
state->com4.ier.rsvd = 0;
- state->com4.iir.rsvd = 0;
+ state->com4.iid.rsvd = 0;
state->com4.fcr.rsvd = 0;
state->com4.mcr.rsvd = 0;
- state->com4.iir.pending = 1;
+ state->com4.iid.pending = 1;
dev_hook_io(dev, COM1_DATA_PORT, &read_data_port, &write_data_port);
dev_hook_io(dev, COM1_IRQ_ENABLE_PORT, &read_ctrl_port, &write_ctrl_port);
dev_hook_io(dev, COM1_FIFO_CTRL_PORT, &read_ctrl_port, &write_ctrl_port);
dev_hook_io(dev, COM1_LINE_CTRL_PORT, &read_ctrl_port, &write_ctrl_port);
- dev_hook_io(dev, COM1_MODEL_CTRL_PORT, &read_ctrl_port, &write_ctrl_port);
+ dev_hook_io(dev, COM1_MODEM_CTRL_PORT, &read_ctrl_port, &write_ctrl_port);
dev_hook_io(dev, COM1_LINE_STATUS_PORT, &read_status_port, &write_status_port);
- dev_hook_io(dev, COM1_MODEL_STATUS_PORT, &read_status_port, &write_status_port);
+ dev_hook_io(dev, COM1_MODEM_STATUS_PORT, &read_status_port, &write_status_port);
dev_hook_io(dev, COM1_SCRATCH_PORT, &read_ctrl_port, &write_ctrl_port);
dev_hook_io(dev, COM2_DATA_PORT, &read_data_port, &write_data_port);
dev_hook_io(dev, COM2_IRQ_ENABLE_PORT, &read_ctrl_port, &write_ctrl_port);
dev_hook_io(dev, COM2_FIFO_CTRL_PORT, &read_ctrl_port, &write_ctrl_port);
dev_hook_io(dev, COM2_LINE_CTRL_PORT, &read_ctrl_port, &write_ctrl_port);
- dev_hook_io(dev, COM2_MODEL_CTRL_PORT, &read_ctrl_port, &write_ctrl_port);
+ dev_hook_io(dev, COM2_MODEM_CTRL_PORT, &read_ctrl_port, &write_ctrl_port);
dev_hook_io(dev, COM2_LINE_STATUS_PORT, &read_status_port, &write_status_port);
- dev_hook_io(dev, COM2_MODEL_STATUS_PORT, &read_status_port, &write_status_port);
+ dev_hook_io(dev, COM2_MODEM_STATUS_PORT, &read_status_port, &write_status_port);
dev_hook_io(dev, COM2_SCRATCH_PORT, &read_ctrl_port, &write_ctrl_port);
dev_hook_io(dev, COM3_DATA_PORT, &read_data_port, &write_data_port);
dev_hook_io(dev, COM3_IRQ_ENABLE_PORT, &read_ctrl_port, &write_ctrl_port);
dev_hook_io(dev, COM3_FIFO_CTRL_PORT, &read_ctrl_port, &write_ctrl_port);
dev_hook_io(dev, COM3_LINE_CTRL_PORT, &read_ctrl_port, &write_ctrl_port);
- dev_hook_io(dev, COM3_MODEL_CTRL_PORT, &read_ctrl_port, &write_ctrl_port);
+ dev_hook_io(dev, COM3_MODEM_CTRL_PORT, &read_ctrl_port, &write_ctrl_port);
dev_hook_io(dev, COM3_LINE_STATUS_PORT, &read_status_port, &write_status_port);
- dev_hook_io(dev, COM3_MODEL_STATUS_PORT, &read_status_port, &write_status_port);
+ dev_hook_io(dev, COM3_MODEM_STATUS_PORT, &read_status_port, &write_status_port);
dev_hook_io(dev, COM3_SCRATCH_PORT, &read_ctrl_port, &write_ctrl_port);
dev_hook_io(dev, COM4_DATA_PORT, &read_data_port, &write_data_port);
dev_hook_io(dev, COM4_IRQ_ENABLE_PORT, &read_ctrl_port, &write_ctrl_port);
dev_hook_io(dev, COM4_FIFO_CTRL_PORT, &read_ctrl_port, &write_ctrl_port);
dev_hook_io(dev, COM4_LINE_CTRL_PORT, &read_ctrl_port, &write_ctrl_port);
- dev_hook_io(dev, COM4_MODEL_CTRL_PORT, &read_ctrl_port, &write_ctrl_port);
+ dev_hook_io(dev, COM4_MODEM_CTRL_PORT, &read_ctrl_port, &write_ctrl_port);
dev_hook_io(dev, COM4_LINE_STATUS_PORT, &read_status_port, &write_status_port);
- dev_hook_io(dev, COM4_MODEL_STATUS_PORT, &read_status_port, &write_status_port);
+ dev_hook_io(dev, COM4_MODEM_STATUS_PORT, &read_status_port, &write_status_port);
dev_hook_io(dev, COM4_SCRATCH_PORT, &read_ctrl_port, &write_ctrl_port);
+ return 0;
}
-void serial_deinit(struct vm_device * dev) {
+int serial_deinit(struct vm_device * dev) {
dev_unhook_io(dev, COM1_DATA_PORT);
dev_unhook_io(dev, COM1_IRQ_ENABLE_PORT);
dev_unhook_io(dev, COM1_FIFO_CTRL_PORT);
dev_unhook_io(dev, COM1_LINE_CTRL_PORT);
- dev_unhook_io(dev, COM1_MODEL_CTRL_PORT);
+ dev_unhook_io(dev, COM1_MODEM_CTRL_PORT);
dev_unhook_io(dev, COM1_LINE_STATUS_PORT);
- dev_unhook_io(dev, COM1_MODEL_STATUS_PORT);
+ dev_unhook_io(dev, COM1_MODEM_STATUS_PORT);
dev_unhook_io(dev, COM1_SCRATCH_PORT);
dev_unhook_io(dev, COM2_DATA_PORT);
dev_unhook_io(dev, COM2_IRQ_ENABLE_PORT);
dev_unhook_io(dev, COM2_FIFO_CTRL_PORT);
dev_unhook_io(dev, COM2_LINE_CTRL_PORT);
- dev_unhook_io(dev, COM2_MODEL_CTRL_PORT);
+ dev_unhook_io(dev, COM2_MODEM_CTRL_PORT);
dev_unhook_io(dev, COM2_LINE_STATUS_PORT);
- dev_unhook_io(dev, COM2_MODEL_STATUS_PORT);
+ dev_unhook_io(dev, COM2_MODEM_STATUS_PORT);
dev_unhook_io(dev, COM2_SCRATCH_PORT);
dev_unhook_io(dev, COM3_DATA_PORT);
dev_unhook_io(dev, COM3_IRQ_ENABLE_PORT);
dev_unhook_io(dev, COM3_FIFO_CTRL_PORT);
dev_unhook_io(dev, COM3_LINE_CTRL_PORT);
- dev_unhook_io(dev, COM3_MODEL_CTRL_PORT);
+ dev_unhook_io(dev, COM3_MODEM_CTRL_PORT);
dev_unhook_io(dev, COM3_LINE_STATUS_PORT);
- dev_unhook_io(dev, COM3_MODEL_STATUS_PORT);
+ dev_unhook_io(dev, COM3_MODEM_STATUS_PORT);
dev_unhook_io(dev, COM3_SCRATCH_PORT);
dev_unhook_io(dev, COM4_DATA_PORT);
dev_unhook_io(dev, COM4_IRQ_ENABLE_PORT);
dev_unhook_io(dev, COM4_FIFO_CTRL_PORT);
dev_unhook_io(dev, COM4_LINE_CTRL_PORT);
- dev_unhook_io(dev, COM4_MODEL_CTRL_PORT);
+ dev_unhook_io(dev, COM4_MODEM_CTRL_PORT);
dev_unhook_io(dev, COM4_LINE_STATUS_PORT);
- dev_unhook_io(dev, COM4_MODEL_STATUS_PORT);
+ dev_unhook_io(dev, COM4_MODEM_STATUS_PORT);
dev_unhook_io(dev, COM4_SCRATCH_PORT);
+ return 0;
}
static struct vm_device_ops dev_ops = {
.init = serial_init,
- .deinit = serial_deini,
+ .deinit = serial_deinit,
.reset = NULL,
.start = NULL,
.stop = NULL,
#include <devices/8259a.h>
#include <devices/8254.h>
#include <devices/keyboard.h>
+#include <devices/serial.h>
#include <palacios/vmm_intr.h>
#include <palacios/vmm_dev_mgr.h>
struct vm_device * pic = create_pic();
struct vm_device * keyboard = create_keyboard();
struct vm_device * pit = create_pit();
+ struct vm_device * serial = create_serial();
#define GENERIC 1
{0xd0, 0xde, GENERIC_PRINT_AND_IGNORE}, // DMA 2 misc registers
#endif
- {0x3f8, 0x3f8+7, GENERIC_PRINT_AND_IGNORE}, // COM 1
- {0x2f8, 0x2f8+7, GENERIC_PRINT_AND_IGNORE}, // COM 2
- {0x3e8, 0x3e8+7, GENERIC_PRINT_AND_IGNORE}, // COM 2
- {0x2e8, 0x2e8+7, GENERIC_PRINT_AND_IGNORE}, // COM 2
+ /*
+ {0x3f8, 0x3f8+7, GENERIC_PRINT_AND_IGNORE}, // COM 1
+ {0x2f8, 0x2f8+7, GENERIC_PRINT_AND_IGNORE}, // COM 2
+ {0x3e8, 0x3e8+7, GENERIC_PRINT_AND_IGNORE}, // COM 2
+ {0x2e8, 0x2e8+7, GENERIC_PRINT_AND_IGNORE}, // COM 2
+ */
/*
{0x170, 0x178, GENERIC_PRINT_AND_PASSTHROUGH}, // IDE 1
{0x376, 0x377, GENERIC_PRINT_AND_PASSTHROUGH}, // IDE 1
};
- struct vm_device * generic = create_generic(range,10, // THIS NUMBER IS CRITICAL
+ struct vm_device * generic = create_generic(range,6, // THIS NUMBER IS CRITICAL
NULL,0,NULL,0);
#endif
attach_device(&(vm_info), pic);
attach_device(&(vm_info), pit);
attach_device(&(vm_info), keyboard);
+ attach_device(&(vm_info), serial);
#if GENERIC