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,
 
 |