# HG changeset patch # User Jerone Young <[EMAIL PROTECTED]> # Date 1193849564 18000 # Node ID 054af67e39314b79bbee8e4cc92a7354aff92fc2 # Parent 8bb1470e4e5d442f0b46abedc9402a05e00119b6 Move handle_io_abi_10 to kvmctl-x86.c
Signed-off-by: Jerone Young <[EMAIL PROTECTED]> diff --git a/libkvm/libkvm-x86.c b/libkvm/libkvm-x86.c --- a/libkvm/libkvm-x86.c +++ b/libkvm/libkvm-x86.c @@ -1,4 +1,5 @@ #include "libkvm.h" +#include "kvm-abi-10.h" #include <unistd.h> #include <stropts.h> #include <sys/mman.h> @@ -403,4 +404,59 @@ int kvm_set_lapic(kvm_context_t kvm, int #endif - +static int handle_io_abi10(kvm_context_t kvm, struct kvm_run_abi10 *run, + int vcpu) +{ + uint16_t addr = run->io.port; + int r; + int i; + void *p = (void *)run + run->io.data_offset; + + for (i = 0; i < run->io.count; ++i) { + switch (run->io.direction) { + case KVM_EXIT_IO_IN: + switch (run->io.size) { + case 1: + r = kvm->callbacks->inb(kvm->opaque, addr, p); + break; + case 2: + r = kvm->callbacks->inw(kvm->opaque, addr, p); + break; + case 4: + r = kvm->callbacks->inl(kvm->opaque, addr, p); + break; + default: + fprintf(stderr, "bad I/O size %d\n", run->io.size); + return -EMSGSIZE; + } + break; + case KVM_EXIT_IO_OUT: + switch (run->io.size) { + case 1: + r = kvm->callbacks->outb(kvm->opaque, addr, + *(uint8_t *)p); + break; + case 2: + r = kvm->callbacks->outw(kvm->opaque, addr, + *(uint16_t *)p); + break; + case 4: + r = kvm->callbacks->outl(kvm->opaque, addr, + *(uint32_t *)p); + break; + default: + fprintf(stderr, "bad I/O size %d\n", run->io.size); + return -EMSGSIZE; + } + break; + default: + fprintf(stderr, "bad I/O direction %d\n", run->io.direction); + return -EPROTO; + } + + p += run->io.size; + } + run->io_completed = 1; + + return 0; +} diff --git a/libkvm/libkvm.c b/libkvm/libkvm.c --- a/libkvm/libkvm.c +++ b/libkvm/libkvm.c @@ -538,8 +538,7 @@ int kvm_set_irqchip(kvm_context_t kvm, s #endif -static int handle_io_abi10(kvm_context_t kvm, struct kvm_run_abi10 *run, - int vcpu) +static int handle_io(kvm_context_t kvm, struct kvm_run *run, int vcpu) { uint16_t addr = run->io.port; int r; @@ -590,62 +589,6 @@ static int handle_io_abi10(kvm_context_t p += run->io.size; } - run->io_completed = 1; - - return 0; -} - -static int handle_io(kvm_context_t kvm, struct kvm_run *run, int vcpu) -{ - uint16_t addr = run->io.port; - int r; - int i; - void *p = (void *)run + run->io.data_offset; - - for (i = 0; i < run->io.count; ++i) { - switch (run->io.direction) { - case KVM_EXIT_IO_IN: - switch (run->io.size) { - case 1: - r = kvm->callbacks->inb(kvm->opaque, addr, p); - break; - case 2: - r = kvm->callbacks->inw(kvm->opaque, addr, p); - break; - case 4: - r = kvm->callbacks->inl(kvm->opaque, addr, p); - break; - default: - fprintf(stderr, "bad I/O size %d\n", run->io.size); - return -EMSGSIZE; - } - break; - case KVM_EXIT_IO_OUT: - switch (run->io.size) { - case 1: - r = kvm->callbacks->outb(kvm->opaque, addr, - *(uint8_t *)p); - break; - case 2: - r = kvm->callbacks->outw(kvm->opaque, addr, - *(uint16_t *)p); - break; - case 4: - r = kvm->callbacks->outl(kvm->opaque, addr, - *(uint32_t *)p); - break; - default: - fprintf(stderr, "bad I/O size %d\n", run->io.size); - return -EMSGSIZE; - } - break; - default: - fprintf(stderr, "bad I/O direction %d\n", run->io.direction); - return -EPROTO; - } - - p += run->io.size; - } return 0; } @@ -1224,3 +1167,4 @@ int kvm_irqchip_in_kernel(kvm_context_t { return kvm->irqchip_in_kernel; } + ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel