aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin
diff options
context:
space:
mode:
authorTycho Nightingale <tychon@FreeBSD.org>2014-04-22 16:13:56 +0000
committerTycho Nightingale <tychon@FreeBSD.org>2014-04-22 16:13:56 +0000
commit82c2c89084e27f2b8e39423f55741b43406c47bb (patch)
tree9fb7228ca6f2fc25f7f8cafc59fa33927451f0b4 /usr.sbin
parent186ddf96313f7bc66599d6d16c6c12bc1c377971 (diff)
downloadsrc-82c2c89084e27f2b8e39423f55741b43406c47bb.tar.gz
src-82c2c89084e27f2b8e39423f55741b43406c47bb.zip
Factor out common ioport handler code for better hygiene -- pointed
out by neel@. Approved by: neel (co-mentor)
Notes
Notes: svn path=/head/; revision=264768
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/bhyve/inout.c34
1 files changed, 12 insertions, 22 deletions
diff --git a/usr.sbin/bhyve/inout.c b/usr.sbin/bhyve/inout.c
index 9fec70a333a1..5fbe99ba0256 100644
--- a/usr.sbin/bhyve/inout.c
+++ b/usr.sbin/bhyve/inout.c
@@ -107,18 +107,19 @@ emulate_inout(struct vmctx *ctx, int vcpu, int in, int port, int bytes,
if (strict && handler == default_inout)
return (-1);
+ switch (bytes) {
+ case 1:
+ mask = 0xff;
+ break;
+ case 2:
+ mask = 0xffff;
+ break;
+ default:
+ mask = 0xffffffff;
+ break;
+ }
+
if (!in) {
- switch (bytes) {
- case 1:
- mask = 0xff;
- break;
- case 2:
- mask = 0xffff;
- break;
- default:
- mask = 0xffffffff;
- break;
- }
val = *eax & mask;
}
@@ -131,17 +132,6 @@ emulate_inout(struct vmctx *ctx, int vcpu, int in, int port, int bytes,
error = -1;
if (!error && in) {
- switch (bytes) {
- case 1:
- mask = 0xff;
- break;
- case 2:
- mask = 0xffff;
- break;
- default:
- mask = 0xffffffff;
- break;
- }
*eax &= ~mask;
*eax |= val & mask;
}