X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2F8259a.c;h=c65104999718e5923b067afb4ec94f0598e312a5;hb=7bb4a918835892e9071ffbdef1ea8e57f9a12950;hp=f695d5db943c8d29a0fef7979afc7595e94fa295;hpb=4f7c3b759e3889870c5b5e7d09b3ffcc168e5632;p=palacios.git diff --git a/palacios/src/devices/8259a.c b/palacios/src/devices/8259a.c index f695d5d..c651049 100644 --- a/palacios/src/devices/8259a.c +++ b/palacios/src/devices/8259a.c @@ -1,5 +1,22 @@ -/* Northwestern University */ -/* (c) 2008, Jack Lange */ +/* + * This file is part of the Palacios Virtual Machine Monitor developed + * by the V3VEE Project with funding from the United States National + * Science Foundation and the Department of Energy. + * + * The V3VEE Project is a joint project between Northwestern University + * and the University of New Mexico. You can find out more at + * http://www.v3vee.org + * + * Copyright (c) 2008, Jack Lange + * Copyright (c) 2008, The V3VEE Project + * All rights reserved. + * + * Author: Jack Lange + * + * This is free software. You are permitted to use, + * redistribute, and modify it as specified in the file "V3VEE_LICENSE". + */ + #include #include @@ -186,22 +203,20 @@ static int pic_raise_intr(void * private_data, int irq) { } -/*Zheng 07/30/2008*/ - -static int pic_lower_intr(void *private_data, int irq_no) { +static int pic_lower_intr(void *private_data, int irq) { struct pic_internal *state = (struct pic_internal*)private_data; - PrintDebug("[pic_lower_intr] IRQ line %d now low\n", (unsigned) irq_no); - if (irq_no <= 7) { + PrintDebug("[pic_lower_intr] IRQ line %d now low\n", irq); + if (irq <= 7) { - state->master_irr &= ~(1 << irq_no); + state->master_irr &= ~(1 << irq); if ((state->master_irr & ~(state->master_imr)) == 0) { PrintDebug("\t\tFIXME: Master maybe should do sth\n"); } - } else if ((irq_no > 7) && (irq_no <= 15)) { + } else if ((irq > 7) && (irq < 16)) { - state->slave_irr &= ~(1 << (irq_no - 8)); + state->slave_irr &= ~(1 << (irq - 8)); if ((state->slave_irr & (~(state->slave_imr))) == 0) { PrintDebug("\t\tFIXME: Slave maybe should do sth\n"); } @@ -227,8 +242,8 @@ static int pic_get_intr_number(void * private_data) { int i = 0; int irq = -1; - PrintDebug("8259 PIC: getnum: master_irr: 0x%x master_imr: 0x%x\n", i, state->master_irr, state->master_imr); - PrintDebug("8259 PIC: getnum: slave_irr: 0x%x slave_imr: 0x%x\n", i, state->slave_irr, state->slave_imr); + PrintDebug("8259 PIC: getnum: master_irr: 0x%x master_imr: 0x%x\n", state->master_irr, state->master_imr); + PrintDebug("8259 PIC: getnum: slave_irr: 0x%x slave_imr: 0x%x\n", state->slave_irr, state->slave_imr); for (i = 0; i < 16; i++) { if (i <= 7) { @@ -299,20 +314,20 @@ static int pic_end_irq(void * private_data, int irq) { */ -/*Zheng 07/30/2008*/ + static struct intr_ctrl_ops intr_ops = { .intr_pending = pic_intr_pending, .get_intr_number = pic_get_intr_number, .raise_intr = pic_raise_intr, .begin_irq = pic_begin_irq, - .lower_intr = pic_lower_intr, //Zheng added + .lower_intr = pic_lower_intr, }; -int read_master_port1(ushort_t port, void * dst, uint_t length, struct vm_device * dev) { +static int read_master_port1(ushort_t port, void * dst, uint_t length, struct vm_device * dev) { struct pic_internal * state = (struct pic_internal*)dev->private_data; if (length != 1) { @@ -331,7 +346,7 @@ int read_master_port1(ushort_t port, void * dst, uint_t length, struct vm_device return 1; } -int read_master_port2(ushort_t port, void * dst, uint_t length, struct vm_device * dev) { +static int read_master_port2(ushort_t port, void * dst, uint_t length, struct vm_device * dev) { struct pic_internal * state = (struct pic_internal*)dev->private_data; if (length != 1) { @@ -345,7 +360,7 @@ int read_master_port2(ushort_t port, void * dst, uint_t length, struct vm_device } -int read_slave_port1(ushort_t port, void * dst, uint_t length, struct vm_device * dev) { +static int read_slave_port1(ushort_t port, void * dst, uint_t length, struct vm_device * dev) { struct pic_internal * state = (struct pic_internal*)dev->private_data; if (length != 1) { @@ -364,7 +379,7 @@ int read_slave_port1(ushort_t port, void * dst, uint_t length, struct vm_device return 1; } -int read_slave_port2(ushort_t port, void * dst, uint_t length, struct vm_device * dev) { +static int read_slave_port2(ushort_t port, void * dst, uint_t length, struct vm_device * dev) { struct pic_internal * state = (struct pic_internal*)dev->private_data; if (length != 1) { @@ -378,7 +393,7 @@ int read_slave_port2(ushort_t port, void * dst, uint_t length, struct vm_device } -int write_master_port1(ushort_t port, void * src, uint_t length, struct vm_device * dev) { +static int write_master_port1(ushort_t port, void * src, uint_t length, struct vm_device * dev) { struct pic_internal * state = (struct pic_internal*)dev->private_data; uchar_t cw = *(uchar_t *)src; @@ -440,7 +455,7 @@ int write_master_port1(ushort_t port, void * src, uint_t length, struct vm_devic return 1; } -int write_master_port2(ushort_t port, void * src, uint_t length, struct vm_device * dev) { +static int write_master_port2(ushort_t port, void * src, uint_t length, struct vm_device * dev) { struct pic_internal * state = (struct pic_internal*)dev->private_data; uchar_t cw = *(uchar_t *)src; @@ -494,7 +509,7 @@ int write_master_port2(ushort_t port, void * src, uint_t length, struct vm_devic return 1; } -int write_slave_port1(ushort_t port, void * src, uint_t length, struct vm_device * dev) { +static int write_slave_port1(ushort_t port, void * src, uint_t length, struct vm_device * dev) { struct pic_internal * state = (struct pic_internal*)dev->private_data; uchar_t cw = *(uchar_t *)src; @@ -553,7 +568,7 @@ int write_slave_port1(ushort_t port, void * src, uint_t length, struct vm_device return 1; } -int write_slave_port2(ushort_t port, void * src, uint_t length, struct vm_device * dev) { +static int write_slave_port2(ushort_t port, void * src, uint_t length, struct vm_device * dev) { struct pic_internal * state = (struct pic_internal*)dev->private_data; uchar_t cw = *(uchar_t *)src; @@ -614,10 +629,10 @@ int write_slave_port2(ushort_t port, void * src, uint_t length, struct vm_device -int pic_init(struct vm_device * dev) { +static int pic_init(struct vm_device * dev) { struct pic_internal * state = (struct pic_internal*)dev->private_data; - set_intr_controller(dev->vm, &intr_ops, state); + v3_register_intr_controller(dev->vm, &intr_ops, state); state->master_irr = 0; state->master_isr = 0; @@ -643,20 +658,20 @@ int pic_init(struct vm_device * dev) { state->slave_state = ICW1; - dev_hook_io(dev, MASTER_PORT1, &read_master_port1, &write_master_port1); - dev_hook_io(dev, MASTER_PORT2, &read_master_port2, &write_master_port2); - dev_hook_io(dev, SLAVE_PORT1, &read_slave_port1, &write_slave_port1); - dev_hook_io(dev, SLAVE_PORT2, &read_slave_port2, &write_slave_port2); + v3_dev_hook_io(dev, MASTER_PORT1, &read_master_port1, &write_master_port1); + v3_dev_hook_io(dev, MASTER_PORT2, &read_master_port2, &write_master_port2); + v3_dev_hook_io(dev, SLAVE_PORT1, &read_slave_port1, &write_slave_port1); + v3_dev_hook_io(dev, SLAVE_PORT2, &read_slave_port2, &write_slave_port2); return 0; } -int pic_deinit(struct vm_device * dev) { - dev_unhook_io(dev, MASTER_PORT1); - dev_unhook_io(dev, MASTER_PORT2); - dev_unhook_io(dev, SLAVE_PORT1); - dev_unhook_io(dev, SLAVE_PORT2); +static int pic_deinit(struct vm_device * dev) { + v3_dev_unhook_io(dev, MASTER_PORT1); + v3_dev_unhook_io(dev, MASTER_PORT2); + v3_dev_unhook_io(dev, SLAVE_PORT1); + v3_dev_unhook_io(dev, SLAVE_PORT2); return 0; } @@ -676,12 +691,12 @@ static struct vm_device_ops dev_ops = { }; -struct vm_device * create_pic() { +struct vm_device * v3_create_pic() { struct pic_internal * state = NULL; state = (struct pic_internal *)V3_Malloc(sizeof(struct pic_internal)); V3_ASSERT(state != NULL); - struct vm_device *device = create_device("8259A", &dev_ops, state); + struct vm_device *device = v3_create_device("8259A", &dev_ops, state); return device; }