X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fsvm_io.c;h=2bffb452019c3e56616972333fc998f6adfb3281;hb=4f7c3b759e3889870c5b5e7d09b3ffcc168e5632;hp=33022f02436fe9e9b725deb0d9508020e878136c;hpb=88a9fe78672db5f5672dc20a92253e508bd3b7e1;p=palacios.git diff --git a/palacios/src/palacios/svm_io.c b/palacios/src/palacios/svm_io.c index 33022f0..2bffb45 100644 --- a/palacios/src/palacios/svm_io.c +++ b/palacios/src/palacios/svm_io.c @@ -1,9 +1,16 @@ +/* Northwestern University */ +/* (c) 2008, Jack Lange */ #include #include #include #include #include +#ifndef DEBUG_IO +#undef PrintDebug +#define PrintDebug(fmt, args...) +#endif + // This should package up an IO request and call vmm_handle_io int handle_svm_io_in(struct guest_info * info) { @@ -11,11 +18,11 @@ int handle_svm_io_in(struct guest_info * info) { // vmcb_saved_state_t * guest_state = GET_VMCB_SAVE_STATE_AREA((vmcb_t*)(info->vmm_data)); struct svm_io_info * io_info = (struct svm_io_info *)&(ctrl_area->exit_info1); - vmm_io_hook_t * hook = get_io_hook(&(info->io_map), io_info->port); + struct vmm_io_hook * hook = v3_get_io_hook(&(info->io_map), io_info->port); uint_t read_size = 0; if (hook == NULL) { - PrintDebug("Hook Not present for in on port %x\n", io_info->port); + PrintError("Hook Not present for in on port %x\n", io_info->port); // error, we should not have exited on this port return -1; } @@ -33,7 +40,7 @@ int handle_svm_io_in(struct guest_info * info) { if (hook->read(io_info->port, &(info->vm_regs.rax), read_size, hook->priv_data) != read_size) { // not sure how we handle errors..... - PrintDebug("Read Failure for in on port %x\n", io_info->port); + PrintError("Read Failure for in on port %x\n", io_info->port); return -1; } @@ -55,7 +62,7 @@ int handle_svm_io_ins(struct guest_info * info) { struct svm_io_info * io_info = (struct svm_io_info *)&(ctrl_area->exit_info1); - vmm_io_hook_t * hook = get_io_hook(&(info->io_map), io_info->port); + struct vmm_io_hook * hook = v3_get_io_hook(&(info->io_map), io_info->port); uint_t read_size = 0; addr_t dst_addr = 0; @@ -75,7 +82,7 @@ int handle_svm_io_ins(struct guest_info * info) { if (hook == NULL) { - PrintDebug("Hook Not present for ins on port %x\n", io_info->port); + PrintError("Hook Not present for ins on port %x\n", io_info->port); // error, we should not have exited on this port return -1; } @@ -85,7 +92,7 @@ int handle_svm_io_ins(struct guest_info * info) { addr_t inst_ptr; if (guest_va_to_host_pa(info,get_addr_linear(info,info->rip,&(info->segments.cs)),&inst_ptr)==-1) { - PrintDebug("Can't access instruction\n"); + PrintError("Can't access instruction\n"); return -1; } @@ -125,7 +132,7 @@ int handle_svm_io_ins(struct guest_info * info) { } else if (io_info->sz32) { read_size = 4; } else { - PrintDebug("io_info Invalid Size\n"); + PrintError("io_info Invalid Size\n"); return -1; } @@ -161,13 +168,13 @@ int handle_svm_io_ins(struct guest_info * info) { if (guest_va_to_host_va(info, dst_addr, &host_addr) == -1) { // either page fault or gpf... - PrintDebug("Could not convert Guest VA to host VA\n"); + PrintError("Could not convert Guest VA to host VA\n"); return -1; } if (hook->read(io_info->port, (char*)host_addr, read_size, hook->priv_data) != read_size) { // not sure how we handle errors..... - PrintDebug("Read Failure for ins on port %x\n", io_info->port); + PrintError("Read Failure for ins on port %x\n", io_info->port); return -1; } @@ -190,11 +197,11 @@ int handle_svm_io_out(struct guest_info * info) { // vmcb_saved_state_t * guest_state = GET_VMCB_SAVE_STATE_AREA((vmcb_t*)(info->vmm_data)); struct svm_io_info * io_info = (struct svm_io_info *)&(ctrl_area->exit_info1); - vmm_io_hook_t * hook = get_io_hook(&(info->io_map), io_info->port); + struct vmm_io_hook * hook = v3_get_io_hook(&(info->io_map), io_info->port); uint_t write_size = 0; if (hook == NULL) { - PrintDebug("Hook Not present for out on port %x\n", io_info->port); + PrintError("Hook Not present for out on port %x\n", io_info->port); // error, we should not have exited on this port return -1; } @@ -212,7 +219,7 @@ int handle_svm_io_out(struct guest_info * info) { if (hook->write(io_info->port, &(info->vm_regs.rax), write_size, hook->priv_data) != write_size) { // not sure how we handle errors..... - PrintDebug("Write Failure for out on port %x\n", io_info->port); + PrintError("Write Failure for out on port %x\n", io_info->port); return -1; } @@ -233,7 +240,7 @@ int handle_svm_io_outs(struct guest_info * info) { struct svm_io_info * io_info = (struct svm_io_info *)&(ctrl_area->exit_info1); - vmm_io_hook_t * hook = get_io_hook(&(info->io_map), io_info->port); + struct vmm_io_hook * hook = v3_get_io_hook(&(info->io_map), io_info->port); uint_t write_size = 0; addr_t dst_addr = 0; @@ -253,7 +260,7 @@ int handle_svm_io_outs(struct guest_info * info) { if (hook == NULL) { - PrintDebug("Hook Not present for outs on port %x\n", io_info->port); + PrintError("Hook Not present for outs on port %x\n", io_info->port); // error, we should not have exited on this port return -1; } @@ -296,7 +303,7 @@ int handle_svm_io_outs(struct guest_info * info) { addr_t inst_ptr; if (guest_va_to_host_pa(info,get_addr_linear(info,info->rip,&(info->segments.cs)),&inst_ptr)==-1) { - PrintDebug("Can't access instruction\n"); + PrintError("Can't access instruction\n"); return -1; } @@ -341,7 +348,7 @@ int handle_svm_io_outs(struct guest_info * info) { if (hook->write(io_info->port, (char*)host_addr, write_size, hook->priv_data) != write_size) { // not sure how we handle errors..... - PrintDebug("Write Failure for outs on port %x\n", io_info->port); + PrintError("Write Failure for outs on port %x\n", io_info->port); return -1; }