1925 *sipi_vector = data.sipi_vector;
1926 return (0);
1927 }
1928
1929 int
1930 vm_set_run_state(struct vmctx *ctx, int vcpu, enum vcpu_run_state state,
1931 uint8_t sipi_vector)
1932 {
1933 struct vm_run_state data;
1934
1935 data.vcpuid = vcpu;
1936 data.state = state;
1937 data.sipi_vector = sipi_vector;
1938 if (ioctl(ctx->fd, VM_SET_RUN_STATE, &data) != 0) {
1939 return (errno);
1940 }
1941
1942 return (0);
1943 }
1944
1945 int
1946 vm_arc_resv(struct vmctx *ctx, size_t len)
1947 {
1948 if (ioctl(ctx->fd, VM_ARC_RESV, (uint64_t)len) != 0) {
1949 return (errno);
1950 }
1951 return (0);
1952 }
1953 #endif /* __FreeBSD__ */
1954
1955 #ifdef __FreeBSD__
1956 const cap_ioctl_t *
1957 vm_get_ioctls(size_t *len)
1958 {
1959 cap_ioctl_t *cmds;
1960 /* keep in sync with machine/vmm_dev.h */
1961 static const cap_ioctl_t vm_ioctl_cmds[] = { VM_RUN, VM_SUSPEND, VM_REINIT,
1962 VM_ALLOC_MEMSEG, VM_GET_MEMSEG, VM_MMAP_MEMSEG, VM_MMAP_MEMSEG,
1963 VM_MMAP_GETNEXT, VM_MUNMAP_MEMSEG, VM_SET_REGISTER, VM_GET_REGISTER,
1964 VM_SET_SEGMENT_DESCRIPTOR, VM_GET_SEGMENT_DESCRIPTOR,
1965 VM_SET_REGISTER_SET, VM_GET_REGISTER_SET,
1966 VM_SET_KERNEMU_DEV, VM_GET_KERNEMU_DEV,
1967 VM_INJECT_EXCEPTION, VM_LAPIC_IRQ, VM_LAPIC_LOCAL_IRQ,
1968 VM_LAPIC_MSI, VM_IOAPIC_ASSERT_IRQ, VM_IOAPIC_DEASSERT_IRQ,
1969 VM_IOAPIC_PULSE_IRQ, VM_IOAPIC_PINCOUNT, VM_ISA_ASSERT_IRQ,
1970 VM_ISA_DEASSERT_IRQ, VM_ISA_PULSE_IRQ, VM_ISA_SET_IRQ_TRIGGER,
1971 VM_SET_CAPABILITY, VM_GET_CAPABILITY, VM_BIND_PPTDEV,
1972 VM_UNBIND_PPTDEV, VM_MAP_PPTDEV_MMIO, VM_PPTDEV_MSI,
|
1925 *sipi_vector = data.sipi_vector;
1926 return (0);
1927 }
1928
1929 int
1930 vm_set_run_state(struct vmctx *ctx, int vcpu, enum vcpu_run_state state,
1931 uint8_t sipi_vector)
1932 {
1933 struct vm_run_state data;
1934
1935 data.vcpuid = vcpu;
1936 data.state = state;
1937 data.sipi_vector = sipi_vector;
1938 if (ioctl(ctx->fd, VM_SET_RUN_STATE, &data) != 0) {
1939 return (errno);
1940 }
1941
1942 return (0);
1943 }
1944
1945 #endif /* __FreeBSD__ */
1946
1947 #ifdef __FreeBSD__
1948 const cap_ioctl_t *
1949 vm_get_ioctls(size_t *len)
1950 {
1951 cap_ioctl_t *cmds;
1952 /* keep in sync with machine/vmm_dev.h */
1953 static const cap_ioctl_t vm_ioctl_cmds[] = { VM_RUN, VM_SUSPEND, VM_REINIT,
1954 VM_ALLOC_MEMSEG, VM_GET_MEMSEG, VM_MMAP_MEMSEG, VM_MMAP_MEMSEG,
1955 VM_MMAP_GETNEXT, VM_MUNMAP_MEMSEG, VM_SET_REGISTER, VM_GET_REGISTER,
1956 VM_SET_SEGMENT_DESCRIPTOR, VM_GET_SEGMENT_DESCRIPTOR,
1957 VM_SET_REGISTER_SET, VM_GET_REGISTER_SET,
1958 VM_SET_KERNEMU_DEV, VM_GET_KERNEMU_DEV,
1959 VM_INJECT_EXCEPTION, VM_LAPIC_IRQ, VM_LAPIC_LOCAL_IRQ,
1960 VM_LAPIC_MSI, VM_IOAPIC_ASSERT_IRQ, VM_IOAPIC_DEASSERT_IRQ,
1961 VM_IOAPIC_PULSE_IRQ, VM_IOAPIC_PINCOUNT, VM_ISA_ASSERT_IRQ,
1962 VM_ISA_DEASSERT_IRQ, VM_ISA_PULSE_IRQ, VM_ISA_SET_IRQ_TRIGGER,
1963 VM_SET_CAPABILITY, VM_GET_CAPABILITY, VM_BIND_PPTDEV,
1964 VM_UNBIND_PPTDEV, VM_MAP_PPTDEV_MMIO, VM_PPTDEV_MSI,
|