diff options
author | John Baldwin <jhb@FreeBSD.org> | 2023-03-24 18:49:06 +0000 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2023-03-24 18:49:06 +0000 |
commit | 7d9ef309bd09c061e9cad8ace6f7bb4c60f087e6 (patch) | |
tree | 74c8ceb34ba3fb1bb5dc13fb9026726b280ca182 /usr.sbin/bhyve/vga.c | |
parent | 047ce3db97769968f6777be456cbf196c65eb455 (diff) | |
download | src-7d9ef309bd09c061e9cad8ace6f7bb4c60f087e6.tar.gz src-7d9ef309bd09c061e9cad8ace6f7bb4c60f087e6.zip |
libvmmapi: Add a struct vcpu and use it in most APIs.
This replaces the 'struct vm, int vcpuid' tuple passed to most API
calls and is similar to the changes recently made in vmm(4) in the
kernel.
struct vcpu is an opaque type managed by libvmmapi. For now it stores
a pointer to the VM context and an integer id.
As an immediate effect this removes the divergence between the kernel
and userland for the instruction emulation code introduced by the
recent vmm(4) changes.
Since this is a major change to the vmmapi API, bump VMMAPI_VERSION to
0x200 (2.0) and the shared library major version.
While here (and since the major version is bumped), remove unused
vcpu argument from vm_setup_pptdev_msi*().
Add new functions vm_suspend_all_cpus() and vm_resume_all_cpus() for
use by the debug server. The underyling ioctl (which uses a vcpuid of
-1) remains unchanged, but the userlevel API now uses separate
functions for global CPU suspend/resume.
Reviewed by: corvink, markj
Differential Revision: https://reviews.freebsd.org/D38124
Diffstat (limited to 'usr.sbin/bhyve/vga.c')
-rw-r--r-- | usr.sbin/bhyve/vga.c | 69 |
1 files changed, 34 insertions, 35 deletions
diff --git a/usr.sbin/bhyve/vga.c b/usr.sbin/bhyve/vga.c index f139dc38937b..a63943efe486 100644 --- a/usr.sbin/bhyve/vga.c +++ b/usr.sbin/bhyve/vga.c @@ -339,7 +339,7 @@ vga_render(struct bhyvegc *gc, void *arg) } static uint64_t -vga_mem_rd_handler(struct vmctx *ctx __unused, uint64_t addr, void *arg1) +vga_mem_rd_handler(uint64_t addr, void *arg1) { struct vga_softc *sc = arg1; uint8_t map_sel; @@ -399,8 +399,7 @@ vga_mem_rd_handler(struct vmctx *ctx __unused, uint64_t addr, void *arg1) } static void -vga_mem_wr_handler(struct vmctx *ctx __unused, uint64_t addr, uint8_t val, - void *arg1) +vga_mem_wr_handler(uint64_t addr, uint8_t val, void *arg1) { struct vga_softc *sc = arg1; uint8_t c0, c1, c2, c3; @@ -654,59 +653,59 @@ vga_mem_wr_handler(struct vmctx *ctx __unused, uint64_t addr, uint8_t val, } static int -vga_mem_handler(struct vmctx *ctx, int vcpu __unused, int dir, uint64_t addr, - int size, uint64_t *val, void *arg1, long arg2 __unused) +vga_mem_handler(struct vcpu *vcpu __unused, int dir, uint64_t addr, int size, + uint64_t *val, void *arg1, long arg2 __unused) { if (dir == MEM_F_WRITE) { switch (size) { case 1: - vga_mem_wr_handler(ctx, addr, *val, arg1); + vga_mem_wr_handler(addr, *val, arg1); break; case 2: - vga_mem_wr_handler(ctx, addr, *val, arg1); - vga_mem_wr_handler(ctx, addr + 1, *val >> 8, arg1); + vga_mem_wr_handler(addr, *val, arg1); + vga_mem_wr_handler(addr + 1, *val >> 8, arg1); break; case 4: - vga_mem_wr_handler(ctx, addr, *val, arg1); - vga_mem_wr_handler(ctx, addr + 1, *val >> 8, arg1); - vga_mem_wr_handler(ctx, addr + 2, *val >> 16, arg1); - vga_mem_wr_handler(ctx, addr + 3, *val >> 24, arg1); + vga_mem_wr_handler(addr, *val, arg1); + vga_mem_wr_handler(addr + 1, *val >> 8, arg1); + vga_mem_wr_handler(addr + 2, *val >> 16, arg1); + vga_mem_wr_handler(addr + 3, *val >> 24, arg1); break; case 8: - vga_mem_wr_handler(ctx, addr, *val, arg1); - vga_mem_wr_handler(ctx, addr + 1, *val >> 8, arg1); - vga_mem_wr_handler(ctx, addr + 2, *val >> 16, arg1); - vga_mem_wr_handler(ctx, addr + 3, *val >> 24, arg1); - vga_mem_wr_handler(ctx, addr + 4, *val >> 32, arg1); - vga_mem_wr_handler(ctx, addr + 5, *val >> 40, arg1); - vga_mem_wr_handler(ctx, addr + 6, *val >> 48, arg1); - vga_mem_wr_handler(ctx, addr + 7, *val >> 56, arg1); + vga_mem_wr_handler(addr, *val, arg1); + vga_mem_wr_handler(addr + 1, *val >> 8, arg1); + vga_mem_wr_handler(addr + 2, *val >> 16, arg1); + vga_mem_wr_handler(addr + 3, *val >> 24, arg1); + vga_mem_wr_handler(addr + 4, *val >> 32, arg1); + vga_mem_wr_handler(addr + 5, *val >> 40, arg1); + vga_mem_wr_handler(addr + 6, *val >> 48, arg1); + vga_mem_wr_handler(addr + 7, *val >> 56, arg1); break; } } else { switch (size) { case 1: - *val = vga_mem_rd_handler(ctx, addr, arg1); + *val = vga_mem_rd_handler(addr, arg1); break; case 2: - *val = vga_mem_rd_handler(ctx, addr, arg1); - *val |= vga_mem_rd_handler(ctx, addr + 1, arg1) << 8; + *val = vga_mem_rd_handler(addr, arg1); + *val |= vga_mem_rd_handler(addr + 1, arg1) << 8; break; case 4: - *val = vga_mem_rd_handler(ctx, addr, arg1); - *val |= vga_mem_rd_handler(ctx, addr + 1, arg1) << 8; - *val |= vga_mem_rd_handler(ctx, addr + 2, arg1) << 16; - *val |= vga_mem_rd_handler(ctx, addr + 3, arg1) << 24; + *val = vga_mem_rd_handler(addr, arg1); + *val |= vga_mem_rd_handler(addr + 1, arg1) << 8; + *val |= vga_mem_rd_handler(addr + 2, arg1) << 16; + *val |= vga_mem_rd_handler(addr + 3, arg1) << 24; break; case 8: - *val = vga_mem_rd_handler(ctx, addr, arg1); - *val |= vga_mem_rd_handler(ctx, addr + 1, arg1) << 8; - *val |= vga_mem_rd_handler(ctx, addr + 2, arg1) << 16; - *val |= vga_mem_rd_handler(ctx, addr + 3, arg1) << 24; - *val |= vga_mem_rd_handler(ctx, addr + 4, arg1) << 32; - *val |= vga_mem_rd_handler(ctx, addr + 5, arg1) << 40; - *val |= vga_mem_rd_handler(ctx, addr + 6, arg1) << 48; - *val |= vga_mem_rd_handler(ctx, addr + 7, arg1) << 56; + *val = vga_mem_rd_handler(addr, arg1); + *val |= vga_mem_rd_handler(addr + 1, arg1) << 8; + *val |= vga_mem_rd_handler(addr + 2, arg1) << 16; + *val |= vga_mem_rd_handler(addr + 3, arg1) << 24; + *val |= vga_mem_rd_handler(addr + 4, arg1) << 32; + *val |= vga_mem_rd_handler(addr + 5, arg1) << 40; + *val |= vga_mem_rd_handler(addr + 6, arg1) << 48; + *val |= vga_mem_rd_handler(addr + 7, arg1) << 56; break; } } |