diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-01-12 11:13:57 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-01-12 11:13:57 +0000 |
commit | bc6c5510dbaa5b3be862d28ee62e3acf6c35f0bb (patch) | |
tree | 7ebd131f56422eaf67302fcad0dfe2e46f843883 /xen/arch/x86/hvm/stdvga.c | |
parent | 3790d2ab9b967c9c3dfdedb56c22bc01b07ffbc2 (diff) | |
download | xen-bc6c5510dbaa5b3be862d28ee62e3acf6c35f0bb.tar.gz xen-bc6c5510dbaa5b3be862d28ee62e3acf6c35f0bb.tar.bz2 xen-bc6c5510dbaa5b3be862d28ee62e3acf6c35f0bb.zip |
hvm: Improve in-Xen PIO emulation to better handle string PIO
instructions.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'xen/arch/x86/hvm/stdvga.c')
-rw-r--r-- | xen/arch/x86/hvm/stdvga.c | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/xen/arch/x86/hvm/stdvga.c b/xen/arch/x86/hvm/stdvga.c index 8891999334..86a036c4fc 100644 --- a/xen/arch/x86/hvm/stdvga.c +++ b/xen/arch/x86/hvm/stdvga.c @@ -148,42 +148,37 @@ static int stdvga_outb(uint64_t addr, uint8_t val) return rc; } -static int stdvga_out(ioreq_t *p) +static void stdvga_out(uint32_t port, uint32_t bytes, uint32_t val) { - int rc = 1; - - switch ( p->size ) + switch ( bytes ) { case 1: - rc &= stdvga_outb(p->addr, p->data); + stdvga_outb(port, val); break; case 2: - rc &= stdvga_outb(p->addr + 0, p->data >> 0); - rc &= stdvga_outb(p->addr + 1, p->data >> 8); + stdvga_outb(port + 0, val >> 0); + stdvga_outb(port + 1, val >> 8); break; default: - rc = 0; break; } - - return rc; } -int stdvga_intercept_pio(ioreq_t *p) +int stdvga_intercept_pio( + int dir, uint32_t port, uint32_t bytes, uint32_t *val) { struct hvm_hw_stdvga *s = ¤t->domain->arch.hvm_domain.stdvga; - int rc; - if ( p->data_is_ptr || (p->dir == IOREQ_READ) ) + if ( dir == IOREQ_READ ) return 0; spin_lock(&s->lock); - rc = (stdvga_out(p) && hvm_buffered_io_send(p)); + stdvga_out(port, bytes, *val); spin_unlock(&s->lock); - return rc; + return 0; /* propagate to external ioemu */ } #define GET_PLANE(data, p) (((data) >> ((p) * 8)) & 0xff) |