X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2F8254.c;h=7a81595a9d1bfdb6dff5ed36a5fa582dbf6ff61d;hb=0e1c2f1eb7e964848d43824328205d5557bc7639;hp=7c0de12cea197b03e84175c9689b9efb707f4de4;hpb=e397b873ec2c0d8ac311635f82b1c14191a4b391;p=palacios-OLD.git diff --git a/palacios/src/devices/8254.c b/palacios/src/devices/8254.c index 7c0de12..7a81595 100644 --- a/palacios/src/devices/8254.c +++ b/palacios/src/devices/8254.c @@ -1,3 +1,22 @@ +/* + * 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 +25,10 @@ - +#ifndef DEBUG_PIT +#undef PrintDebug +#define PrintDebug(fmt, args...) +#endif @@ -402,7 +424,7 @@ static int pit_read_channel(ushort_t port, void * dst, uint_t length, struct vm_ char * val = (char *)dst; if (length != 1) { - PrintDebug("8254 PIT: Invalid Read Write length \n"); + PrintError("8254 PIT: Invalid Read Write length \n"); return -1; } @@ -425,7 +447,7 @@ static int pit_read_channel(ushort_t port, void * dst, uint_t length, struct vm_ } break; default: - PrintDebug("8254 PIT: Read from invalid port (%d)\n", port); + PrintError("8254 PIT: Read from invalid port (%d)\n", port); return -1; } @@ -439,7 +461,7 @@ static int pit_write_channel(ushort_t port, void * src, uint_t length, struct vm char val = *(char *)src; if (length != 1) { - PrintDebug("8254 PIT: Invalid Write Length\n"); + PrintError("8254 PIT: Invalid Write Length\n"); return -1; } @@ -463,7 +485,7 @@ static int pit_write_channel(ushort_t port, void * src, uint_t length, struct vm } break; default: - PrintDebug("8254 PIT: Write to invalid port (%d)\n", port); + PrintError("8254 PIT: Write to invalid port (%d)\n", port); return -1; } @@ -480,7 +502,7 @@ static int pit_write_command(ushort_t port, void * src, uint_t length, struct vm PrintDebug("8254 PIT: Write to PIT Command port\n"); PrintDebug("8254 PIT: Writing to channel %d (access_mode = %d, op_mode = %d)\n", cmd->channel, cmd->access_mode, cmd->op_mode); if (length != 1) { - PrintDebug("8254 PIT: Write of Invalid length to command port\n"); + PrintError("8254 PIT: Write of Invalid length to command port\n"); return -1; } @@ -544,15 +566,16 @@ static int pit_init(struct vm_device * dev) { uint_t cpu_khz = V3_CPU_KHZ(); ullong_t reload_val = (ullong_t)cpu_khz * 1000; - dev_hook_io(dev, CHANNEL0_PORT, &pit_read_channel, &pit_write_channel); - dev_hook_io(dev, CHANNEL1_PORT, &pit_read_channel, &pit_write_channel); - dev_hook_io(dev, CHANNEL2_PORT, &pit_read_channel, &pit_write_channel); - dev_hook_io(dev, COMMAND_PORT, NULL, &pit_write_command); + v3_dev_hook_io(dev, CHANNEL0_PORT, &pit_read_channel, &pit_write_channel); + v3_dev_hook_io(dev, CHANNEL1_PORT, &pit_read_channel, &pit_write_channel); + v3_dev_hook_io(dev, CHANNEL2_PORT, &pit_read_channel, &pit_write_channel); + v3_dev_hook_io(dev, COMMAND_PORT, NULL, &pit_write_command); +#ifdef DEBUG_PIT PrintDebug("8254 PIT: OSC_HZ=%d, reload_val=", OSC_HZ); PrintTraceLL(reload_val); PrintDebug("\n"); - +#endif v3_add_timer(dev->vm, &timer_ops, dev); @@ -568,9 +591,11 @@ static int pit_init(struct vm_device * dev) { init_channel(&(state->ch_1)); init_channel(&(state->ch_2)); +#ifdef DEBUG_PIT PrintDebug("8254 PIT: CPU MHZ=%d -- pit count=", cpu_khz / 1000); PrintTraceLL(state->pit_counter); PrintDebug("\n"); +#endif return 0; } @@ -591,12 +616,12 @@ static struct vm_device_ops dev_ops = { }; -struct vm_device * create_pit() { +struct vm_device * v3_create_pit() { struct pit * pit_state = NULL; pit_state = (struct pit *)V3_Malloc(sizeof(struct pit)); V3_ASSERT(pit_state != NULL); - struct vm_device * dev = create_device("PIT", &dev_ops, pit_state); + struct vm_device * dev = v3_create_device("PIT", &dev_ops, pit_state); return dev; }