X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2F8259a.c;h=f13dc1da6dc334ca1d8fda93bb69c26572c349eb;hb=1eb4663834440ff09c48fe9c95a0cc7ad6bbf2bc;hp=b636ddc077f5cad99a6ee7880348d130dbf3ab7c;hpb=a95b3ca85c794d201a3a25cbfb09bbc236a0524e;p=palacios-OLD.git diff --git a/palacios/src/devices/8259a.c b/palacios/src/devices/8259a.c index b636ddc..f13dc1d 100644 --- a/palacios/src/devices/8259a.c +++ b/palacios/src/devices/8259a.c @@ -1,3 +1,23 @@ +/* + * 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 #include @@ -6,7 +26,6 @@ #ifndef DEBUG_PIC #undef PrintDebug #define PrintDebug(fmt, args...) -#define PrintPicTrace(_f, _a...) PrintTrace("\n8259a.c(%d) "_f, __LINE__, ## _a) #endif @@ -184,24 +203,22 @@ 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; - PrintPicTrace("[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) { - PrintPicTrace("\t\tFIXME: Master maybe should do sth\n"); + 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) { - PrintPicTrace("\t\tFIXME: Slave maybe should do sth\n"); + PrintDebug("\t\tFIXME: Slave maybe should do sth\n"); } } return 0; @@ -297,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) { @@ -329,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) { @@ -343,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) { @@ -362,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) { @@ -376,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; @@ -438,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; @@ -492,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; @@ -551,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; @@ -612,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_set_intr_controller(dev->vm, &intr_ops, state); state->master_irr = 0; state->master_isr = 0; @@ -641,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; } @@ -674,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; }