Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/vmm/vmm_dev.c
Context not available. | |||||
#include "vmm_lapic.h" | #include "vmm_lapic.h" | ||||
#include "vmm_stat.h" | #include "vmm_stat.h" | ||||
#include "vmm_mem.h" | #include "vmm_mem.h" | ||||
#include "io/acpi.h" | |||||
#include "io/ppt.h" | #include "io/ppt.h" | ||||
#include "io/vatpic.h" | #include "io/vatpic.h" | ||||
#include "io/vioapic.h" | #include "io/vioapic.h" | ||||
Context not available. | |||||
struct vm_capability *vmcap; | struct vm_capability *vmcap; | ||||
struct vm_pptdev *pptdev; | struct vm_pptdev *pptdev; | ||||
struct vm_pptdev_mmio *pptmmio; | struct vm_pptdev_mmio *pptmmio; | ||||
struct vm_memory_region_info *memory_region_info; | |||||
struct vm_slat_op *slat_op; | |||||
struct vm_pptdev_msi *pptmsi; | struct vm_pptdev_msi *pptmsi; | ||||
struct vm_pptdev_msix *pptmsix; | struct vm_pptdev_msix *pptmsix; | ||||
struct vm_nmi *vmnmi; | struct vm_nmi *vmnmi; | ||||
Context not available. | |||||
struct vm_memmap *mm; | struct vm_memmap *mm; | ||||
struct vm_munmap *mu; | struct vm_munmap *mu; | ||||
struct vm_cpu_topology *topology; | struct vm_cpu_topology *topology; | ||||
struct vm_acpi_device_info *acpi_device_info; | |||||
char acpi_device_path[NAME_MAX]; | |||||
struct vm_readwrite_kernemu_device *kernemu; | struct vm_readwrite_kernemu_device *kernemu; | ||||
uint64_t *regvals; | uint64_t *regvals; | ||||
int *regnums; | int *regnums; | ||||
Context not available. | |||||
case VM_MMAP_MEMSEG: | case VM_MMAP_MEMSEG: | ||||
case VM_MUNMAP_MEMSEG: | case VM_MUNMAP_MEMSEG: | ||||
case VM_REINIT: | case VM_REINIT: | ||||
case VM_MODIFY_SLAT: | |||||
/* | /* | ||||
* ioctls that operate on the entire virtual machine must | * ioctls that operate on the entire virtual machine must | ||||
* prevent all vcpus from running. | * prevent all vcpus from running. | ||||
Context not available. | |||||
error = ppt_unmap_mmio(sc->vm, pptmmio->bus, pptmmio->slot, | error = ppt_unmap_mmio(sc->vm, pptmmio->bus, pptmmio->slot, | ||||
pptmmio->func, pptmmio->gpa, pptmmio->len); | pptmmio->func, pptmmio->gpa, pptmmio->len); | ||||
break; | break; | ||||
case VM_GET_MEMORY_REGION_INFO: | |||||
memory_region_info = (struct vm_memory_region_info *)data; | |||||
switch (memory_region_info->type) { | |||||
case MEMORY_REGION_TPM_CONTROL_ADDRESS: | |||||
error = vmm_tpm2_get_control_address( | |||||
&memory_region_info->base, | |||||
&memory_region_info->size); | |||||
break; | |||||
default: | |||||
error = EINVAL; | |||||
break; | |||||
} | |||||
break; | |||||
case VM_MODIFY_SLAT: | |||||
slat_op = (struct vm_slat_op *)data; | |||||
switch (slat_op->type) { | |||||
case VM_MAP_MMIO: | |||||
error = vm_map_mmio(sc->vm, slat_op->gpa, slat_op->len, | |||||
slat_op->hpa); | |||||
break; | |||||
case VM_UNMAP_MMIO: | |||||
error = vm_unmap_mmio(sc->vm, slat_op->gpa, | |||||
slat_op->len); | |||||
break; | |||||
case VM_WIRE_GPA: | |||||
error = vm_wire_gpa(sc->vm, slat_op->gpa, slat_op->len); | |||||
break; | |||||
case VM_UNWIRE_GPA: | |||||
error = vm_unwire_gpa(sc->vm, slat_op->gpa, | |||||
slat_op->len); | |||||
break; | |||||
} | |||||
break; | |||||
case VM_BIND_PPTDEV: | case VM_BIND_PPTDEV: | ||||
pptdev = (struct vm_pptdev *)data; | pptdev = (struct vm_pptdev *)data; | ||||
error = vm_assign_pptdev(sc->vm, pptdev->bus, pptdev->slot, | error = vm_assign_pptdev(sc->vm, pptdev->bus, pptdev->slot, | ||||
Context not available. | |||||
&topology->threads, &topology->maxcpus); | &topology->threads, &topology->maxcpus); | ||||
error = 0; | error = 0; | ||||
break; | break; | ||||
case VM_GET_ACPI_DEVICE_INFO: | |||||
acpi_device_info = (struct vm_acpi_device_info *)data; | |||||
/* copy device name into kernel space */ | |||||
error = copyinstr(acpi_device_info->path, acpi_device_path, | |||||
sizeof(acpi_device_path), NULL); | |||||
if (error) { | |||||
break; | |||||
} | |||||
/* handle request */ | |||||
switch (acpi_device_info->type) { | |||||
case VM_ACPI_DEVICE_INFO_CRS: | |||||
error = vmm_acpi_get_crs(acpi_device_path, | |||||
acpi_device_info->buffer, | |||||
&acpi_device_info->buffer_length); | |||||
break; | |||||
} | |||||
break; | |||||
#ifdef BHYVE_SNAPSHOT | #ifdef BHYVE_SNAPSHOT | ||||
case VM_SNAPSHOT_REQ: | case VM_SNAPSHOT_REQ: | ||||
snapshot_meta = (struct vm_snapshot_meta *)data; | snapshot_meta = (struct vm_snapshot_meta *)data; | ||||
Context not available. |