X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fsvm_io.c;h=5856b72b65293ef8fdbc6db640c3533cae04f3fc;hb=f662be2b6bac1f62c457b663598bfde135f48f50;hp=33022f02436fe9e9b725deb0d9508020e878136c;hpb=88a9fe78672db5f5672dc20a92253e508bd3b7e1;p=palacios.releases.git diff --git a/palacios/src/palacios/svm_io.c b/palacios/src/palacios/svm_io.c index 33022f0..5856b72 100644 --- a/palacios/src/palacios/svm_io.c +++ b/palacios/src/palacios/svm_io.c @@ -1,9 +1,18 @@ +/* (c) 2008, Jack Lange */ +/* (c) 2008 The V3VEE Project */ + + #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 +20,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 +42,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 +64,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 +84,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 +94,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 +134,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 +170,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 +199,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 +221,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 +242,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 +262,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 +305,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 +350,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; }