Print this page
13275 bhyve needs richer INIT/SIPI support
Reviewed by: Robert Mustacchi <rm@fingolfin.org>
Approved by: Gordon Ross <gordon.w.ross@gmail.com>


 287 /* Reset vcpu register state */
 288 int     vcpu_reset(struct vmctx *ctx, int vcpu);
 289 
 290 int     vm_active_cpus(struct vmctx *ctx, cpuset_t *cpus);
 291 int     vm_suspended_cpus(struct vmctx *ctx, cpuset_t *cpus);
 292 int     vm_debug_cpus(struct vmctx *ctx, cpuset_t *cpus);
 293 int     vm_activate_cpu(struct vmctx *ctx, int vcpu);
 294 int     vm_suspend_cpu(struct vmctx *ctx, int vcpu);
 295 int     vm_resume_cpu(struct vmctx *ctx, int vcpu);
 296 
 297 /* CPU topology */
 298 int     vm_set_topology(struct vmctx *ctx, uint16_t sockets, uint16_t cores,
 299             uint16_t threads, uint16_t maxcpus);
 300 int     vm_get_topology(struct vmctx *ctx, uint16_t *sockets, uint16_t *cores,
 301             uint16_t *threads, uint16_t *maxcpus);
 302 
 303 #ifndef __FreeBSD__
 304 /* illumos-specific APIs */
 305 int     vm_pmtmr_set_location(struct vmctx *ctx, uint16_t ioport);
 306 int     vm_wrlock_cycle(struct vmctx *ctx);




 307 #endif  /* __FreeBSD__ */
 308 
 309 #ifdef  __FreeBSD__
 310 /*
 311  * FreeBSD specific APIs
 312  */
 313 int     vm_setup_freebsd_registers(struct vmctx *ctx, int vcpu,
 314                                 uint64_t rip, uint64_t cr3, uint64_t gdtbase,
 315                                 uint64_t rsp);
 316 int     vm_setup_freebsd_registers_i386(struct vmctx *vmctx, int vcpu,
 317                                         uint32_t eip, uint32_t gdtbase,
 318                                         uint32_t esp);
 319 void    vm_setup_freebsd_gdt(uint64_t *gdtr);
 320 #endif
 321 #endif  /* _VMMAPI_H_ */


 287 /* Reset vcpu register state */
 288 int     vcpu_reset(struct vmctx *ctx, int vcpu);
 289 
 290 int     vm_active_cpus(struct vmctx *ctx, cpuset_t *cpus);
 291 int     vm_suspended_cpus(struct vmctx *ctx, cpuset_t *cpus);
 292 int     vm_debug_cpus(struct vmctx *ctx, cpuset_t *cpus);
 293 int     vm_activate_cpu(struct vmctx *ctx, int vcpu);
 294 int     vm_suspend_cpu(struct vmctx *ctx, int vcpu);
 295 int     vm_resume_cpu(struct vmctx *ctx, int vcpu);
 296 
 297 /* CPU topology */
 298 int     vm_set_topology(struct vmctx *ctx, uint16_t sockets, uint16_t cores,
 299             uint16_t threads, uint16_t maxcpus);
 300 int     vm_get_topology(struct vmctx *ctx, uint16_t *sockets, uint16_t *cores,
 301             uint16_t *threads, uint16_t *maxcpus);
 302 
 303 #ifndef __FreeBSD__
 304 /* illumos-specific APIs */
 305 int     vm_pmtmr_set_location(struct vmctx *ctx, uint16_t ioport);
 306 int     vm_wrlock_cycle(struct vmctx *ctx);
 307 int vm_get_run_state(struct vmctx *ctx, int vcpu, enum vcpu_run_state *state,
 308     uint8_t *sipi_vector);
 309 int vm_set_run_state(struct vmctx *ctx, int vcpu, enum vcpu_run_state state,
 310     uint8_t sipi_vector);
 311 #endif  /* __FreeBSD__ */
 312 
 313 #ifdef  __FreeBSD__
 314 /*
 315  * FreeBSD specific APIs
 316  */
 317 int     vm_setup_freebsd_registers(struct vmctx *ctx, int vcpu,
 318                                 uint64_t rip, uint64_t cr3, uint64_t gdtbase,
 319                                 uint64_t rsp);
 320 int     vm_setup_freebsd_registers_i386(struct vmctx *vmctx, int vcpu,
 321                                         uint32_t eip, uint32_t gdtbase,
 322                                         uint32_t esp);
 323 void    vm_setup_freebsd_gdt(uint64_t *gdtr);
 324 #endif
 325 #endif  /* _VMMAPI_H_ */