Changeset View
Changeset View
Standalone View
Standalone View
usr.sbin/bhyve/pci_emul.h
Show First 20 Lines • Show All 79 Lines • ▼ Show 20 Lines | |||||
}; | }; | ||||
#define PCI_EMUL_SET(x) DATA_SET(pci_devemu_set, x); | #define PCI_EMUL_SET(x) DATA_SET(pci_devemu_set, x); | ||||
enum pcibar_type { | enum pcibar_type { | ||||
PCIBAR_NONE, | PCIBAR_NONE, | ||||
PCIBAR_IO, | PCIBAR_IO, | ||||
PCIBAR_MEM32, | PCIBAR_MEM32, | ||||
PCIBAR_MEM64, | PCIBAR_MEM64, | ||||
PCIBAR_MEMHI64 | PCIBAR_MEMHI64, | ||||
PCIBAR_ROM, | |||||
}; | }; | ||||
struct pcibar { | struct pcibar { | ||||
enum pcibar_type type; /* io or memory */ | enum pcibar_type type; /* io or memory */ | ||||
uint64_t size; | uint64_t size; | ||||
uint64_t addr; | uint64_t addr; | ||||
}; | }; | ||||
Show All 14 Lines | |||||
#define PBA_SIZE(msgnum) (roundup2((msgnum), 64) / 8) | #define PBA_SIZE(msgnum) (roundup2((msgnum), 64) / 8) | ||||
enum lintr_stat { | enum lintr_stat { | ||||
IDLE, | IDLE, | ||||
ASSERTED, | ASSERTED, | ||||
PENDING | PENDING | ||||
}; | }; | ||||
struct pci_vbiosemu { | |||||
uint64_t hpa; | |||||
uint64_t len; | |||||
uint64_t gpa; | |||||
}; | |||||
struct pci_devinst { | struct pci_devinst { | ||||
struct pci_devemu *pi_d; | struct pci_devemu *pi_d; | ||||
struct vmctx *pi_vmctx; | struct vmctx *pi_vmctx; | ||||
uint8_t pi_bus, pi_slot, pi_func; | uint8_t pi_bus, pi_slot, pi_func; | ||||
char pi_name[PI_NAMESZ]; | char pi_name[PI_NAMESZ]; | ||||
int pi_bar_getsize; | int pi_bar_getsize; | ||||
int pi_prevcap; | int pi_prevcap; | ||||
int pi_capend; | int pi_capend; | ||||
Show All 26 Lines | struct { | ||||
void *pba_page; | void *pba_page; | ||||
int pba_page_offset; | int pba_page_offset; | ||||
} pi_msix; | } pi_msix; | ||||
void *pi_arg; /* devemu-private data */ | void *pi_arg; /* devemu-private data */ | ||||
u_char pi_cfgdata[PCI_REGMAX + 1]; | u_char pi_cfgdata[PCI_REGMAX + 1]; | ||||
struct pcibar pi_bar[PCI_BARMAX + 1]; | struct pcibar pi_bar[PCI_BARMAX + 1]; | ||||
struct pcibar pi_rom_bar; | |||||
int pi_rom_segment; | |||||
int pi_rom_enabled; | |||||
struct pci_vbiosemu pi_vbios; | |||||
}; | }; | ||||
struct msicap { | struct msicap { | ||||
uint8_t capid; | uint8_t capid; | ||||
uint8_t nextptr; | uint8_t nextptr; | ||||
uint16_t msgctrl; | uint16_t msgctrl; | ||||
uint32_t addrlo; | uint32_t addrlo; | ||||
uint32_t addrhi; | uint32_t addrhi; | ||||
▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | typedef void (*pci_lintr_cb)(int b, int s, int pin, int pirq_pin, | ||||
int ioapic_irq, void *arg); | int ioapic_irq, void *arg); | ||||
int init_pci(struct vmctx *ctx); | int init_pci(struct vmctx *ctx); | ||||
void pci_callback(void); | void pci_callback(void); | ||||
int pci_emul_alloc_bar(struct pci_devinst *pdi, int idx, | int pci_emul_alloc_bar(struct pci_devinst *pdi, int idx, | ||||
enum pcibar_type type, uint64_t size); | enum pcibar_type type, uint64_t size); | ||||
int pci_emul_alloc_pbar(struct pci_devinst *pdi, int idx, | int pci_emul_alloc_pbar(struct pci_devinst *pdi, int idx, | ||||
uint64_t hostbase, enum pcibar_type type, uint64_t size); | uint64_t hostbase, enum pcibar_type type, uint64_t size); | ||||
int pci_emul_alloc_rom(struct pci_devinst *pdi, int segid, | |||||
uint32_t addr, uint32_t size); | |||||
int pci_emul_add_msicap(struct pci_devinst *pi, int msgnum); | int pci_emul_add_msicap(struct pci_devinst *pi, int msgnum); | ||||
int pci_emul_add_pciecap(struct pci_devinst *pi, int pcie_device_type); | int pci_emul_add_pciecap(struct pci_devinst *pi, int pcie_device_type); | ||||
void pci_emul_capwrite(struct pci_devinst *pi, int offset, int bytes, | void pci_emul_capwrite(struct pci_devinst *pi, int offset, int bytes, | ||||
uint32_t val, uint8_t capoff, int capid); | uint32_t val, uint8_t capoff, int capid); | ||||
void pci_emul_cmd_changed(struct pci_devinst *pi, uint16_t old); | void pci_emul_cmd_changed(struct pci_devinst *pi, uint16_t old); | ||||
void pci_generate_msi(struct pci_devinst *pi, int msgnum); | void pci_generate_msi(struct pci_devinst *pi, int msgnum); | ||||
void pci_generate_msix(struct pci_devinst *pi, int msgnum); | void pci_generate_msix(struct pci_devinst *pi, int msgnum); | ||||
void pci_lintr_assert(struct pci_devinst *pi); | void pci_lintr_assert(struct pci_devinst *pi); | ||||
▲ Show 20 Lines • Show All 68 Lines • Show Last 20 Lines |