/* * $FreeBSD$ */ #ifndef _MACHINE_HYPERVISOR_API_H #define _MACHINE_HYPERVISOR_API_H #include #ifndef _ASM typedef uint64_t devhandle_t; typedef uint64_t pci_device_t; typedef uint32_t pci_config_offset_t; typedef uint8_t pci_config_size_t; typedef union pci_cfg_data { uint8_t b; uint16_t w; uint32_t dw; uint64_t qw; } pci_cfg_data_t; typedef uint64_t tsbid_t; typedef uint32_t pages_t; typedef enum io_attributes { PCI_MAP_ATTR_READ = (uint32_t)0x01, PCI_MAP_ATTR_WRITE = (uint32_t)0x02, } io_attributes_t; typedef enum io_sync_direction { IO_SYNC_DEVICE = (uint32_t)0x01, IO_SYNC_CPU = (uint32_t)0x02, } io_sync_direction_t; typedef uint64_t io_page_list_t; typedef uint64_t r_addr_t; typedef uint64_t io_addr_t; typedef struct trap_trace_entry { uint8_t tte_type; /* Hypervisor or guest entry. */ uint8_t tte_hpstat; /* Hyper-privileged state. */ uint8_t tte_tl; /* Trap level. */ uint8_t tte_gl; /* Global register level. */ uint16_t tte_tt; /* Trap type.*/ uint16_t tte_tag; /* Extended trap identifier. */ uint64_t tte_tstate; /* Trap state. */ uint64_t tte_tick; /* Tick. */ uint64_t tte_tpc; /* Trap PC. */ uint64_t tte_f1; /* Entry specific. */ uint64_t tte_f2; /* Entry specific. */ uint64_t tte_f3; /* Entry specific. */ uint64_t tte_f4; /* Entry specific. */ } trap_trace_entry_t; typedef struct ldc_state_info { uint64_t lsi_head_offset; uint64_t lsi_tail_offset; uint64_t lse_channel_state; } ldc_state_info_t; #define LDC_CHANNEL_DOWN 0 #define LDC_CHANNEL_UP 1 extern uint64_t hv_mmu_map_perm_addr(void *, int, uint64_t, int); extern uint64_t hv_mmu_unmap_perm_addr(void *, int, int); extern uint64_t hv_set_ctx0(uint64_t, uint64_t); extern uint64_t hv_set_ctxnon0(uint64_t, uint64_t); #ifdef SET_MMU_STATS extern uint64_t hv_mmu_set_stat_area(uint64_t, uint64_t); #endif /* SET_MMU_STATS */ extern uint64_t hv_cpu_qconf(int queue, uint64_t paddr, int size); extern uint64_t hv_cpu_mondo_send(int n, vm_paddr_t cpu_list_ra); extern uint64_t hv_cpu_yield(void); extern uint64_t hv_cpu_state(uint64_t cpuid, uint64_t *cpu_state); extern uint64_t hv_mem_scrub(uint64_t real_addr, uint64_t length, uint64_t *scrubbed_len); extern uint64_t hv_mem_sync(uint64_t real_addr, uint64_t length, uint64_t *flushed_len); extern uint64_t hv_service_recv(uint64_t s_id, uint64_t buf_pa, uint64_t size, uint64_t *recv_bytes); extern uint64_t hv_service_send(uint64_t s_id, uint64_t buf_pa, uint64_t size, uint64_t *send_bytes); extern uint64_t hv_service_getstatus(uint64_t s_id, uint64_t *vreg); extern uint64_t hv_service_setstatus(uint64_t s_id, uint64_t bits); extern uint64_t hv_service_clrstatus(uint64_t s_id, uint64_t bits); extern uint64_t hv_mach_desc(uint64_t buffer_ra, uint64_t *buffer_sizep); extern uint64_t hv_mach_watchdog(uint64_t timeout, uint64_t *time_remaining); extern uint64_t hv_ttrace_buf_info(uint64_t *, uint64_t *); extern uint64_t hv_ttrace_buf_conf(uint64_t, uint64_t, uint64_t *); extern uint64_t hv_ttrace_enable(uint64_t, uint64_t *); extern uint64_t hv_ttrace_freeze(uint64_t, uint64_t *); extern uint64_t hv_ttrace_addentry(uint64_t, uint64_t, uint64_t, uint64_t, uint64_t); extern uint64_t hv_dump_buf_update(uint64_t, uint64_t, uint64_t *); extern int64_t hv_cnputchar(uint8_t); extern int64_t hv_cngetchar(uint8_t *); extern int64_t hv_cnwrite(uint64_t buf_raddr, uint64_t size, uint64_t *nwritten); extern int64_t hv_cnread(uint64_t buf_raddr, uint64_t size, uint64_t *nread); extern void hv_cnputs(char *); extern uint64_t hv_tod_get(uint64_t *seconds); extern uint64_t hv_tod_set(uint64_t); extern uint64_t hvio_intr_devino_to_sysino(uint64_t dev_hdl, uint32_t devino, uint64_t *sysino); extern uint64_t hvio_intr_getvalid(uint64_t sysino, int *intr_valid_state); extern uint64_t hvio_intr_setvalid(uint64_t sysino, int intr_valid_state); extern uint64_t hvio_intr_getstate(uint64_t sysino, int *intr_state); extern uint64_t hvio_intr_setstate(uint64_t sysino, int intr_state); extern uint64_t hvio_intr_gettarget(uint64_t sysino, uint32_t *cpuid); extern uint64_t hvio_intr_settarget(uint64_t sysino, uint32_t cpuid); extern uint64_t hvio_peek(devhandle_t dev_hdl, uint64_t r_addr, uint64_t size, uint32_t *err_flag, uint64_t *data); extern uint64_t hvio_poke(devhandle_t dev_hdl, uint64_t r_addr, uint64_t size, uint64_t data, uint64_t pcidev, uint32_t *err_flag); extern uint64_t hvio_ldc_tx_qconf(uint64_t ldc_id, uint64_t base_raddr, uint64_t nentries); extern uint64_t hvio_ldc_tx_qinfo(uint64_t ldc_id, uint64_t *base_raddr, uint64_t *nentries); extern uint64_t hvio_ldc_tx_get_state(uint64_t ldc_id, ldc_state_info_t *info); extern uint64_t hvio_ldc_tx_set_qtail(uint64_t ldc_id, uint64_t tail_offset); extern uint64_t hvio_ldc_rx_get_state(uint64_t ldc_id, ldc_state_info_t *info); extern uint64_t hvio_ldc_rx_qconf(uint64_t ldc_id, uint64_t base_raddr, uint64_t nentries); extern uint64_t hvio_ldc_rx_qinfo(uint64_t ldc_id, uint64_t *base_raddr, uint64_t *nentries); extern uint64_t hvio_ldc_rx_set_qhead(uint64_t ldc_id, uint64_t head_offset); extern uint64_t hvio_config_get(devhandle_t dev_hdl, pci_device_t pci_device, pci_config_offset_t off, pci_config_size_t size, pci_cfg_data_t *data); extern uint64_t hvio_config_put(devhandle_t dev_hdl, pci_device_t pci_device, pci_config_offset_t off, pci_config_size_t size, pci_cfg_data_t data); extern uint64_t hvio_iommu_map(devhandle_t dev_hdl, tsbid_t tsbid, pages_t pages, io_attributes_t io_attributes, io_page_list_t *io_page_list_p, pages_t *pages_mapped); extern uint64_t hvio_iommu_demap(devhandle_t dev_hdl, tsbid_t tsbid, pages_t pages, pages_t *pages_demapped); extern uint64_t hvio_iommu_getmap(devhandle_t dev_hdl, tsbid_t tsbid, io_attributes_t *attributes_p, r_addr_t *r_addr_p); extern uint64_t hvio_iommu_getbypass(devhandle_t dev_hdl, r_addr_t ra, io_attributes_t io_attributes, io_addr_t *io_addr_p); extern uint64_t hvio_dma_sync(devhandle_t dev_hdl, r_addr_t ra, size_t num_bytes, uint64_t io_sync_direction, size_t *bytes_synched); extern void hv_magic_trap_on(void); extern void hv_magic_trap_off(void); extern int hv_sim_read(uint64_t offset, vm_paddr_t buffer_ra, uint64_t size); extern int hv_sim_write(uint64_t offset, vm_paddr_t buffer_ra, uint64_t size); #endif #endif /* _MACHINE_HYPERVISOR_API_H */