msixcap
pci_populate_msixcap(struct msixcap *msixcap, int msgnum, int barnum,
bzero(msixcap, sizeof(struct msixcap));
msixcap->capid = PCIY_MSIX;
msixcap->msgctrl = msgnum - 1;
msixcap->table_info = barnum & PCIM_MSIX_BIR_MASK;
msixcap->pba_info = msix_tab_size | (barnum & PCIM_MSIX_BIR_MASK);
struct msixcap msixcap;
pci_populate_msixcap(&msixcap, msgnum, barnum, tab_size);
return (pci_emul_add_capability(pi, (u_char *)&msixcap,
sizeof(msixcap), NULL));
static_assert(sizeof(struct msixcap) == 12, "compile-time assertion failed");
passthru_intr_limit(struct passthru_softc *sc, struct msixcap *msixcap)
if (MSIX_TABLE_COUNT(msixcap->msgctrl) > sc->msix_limit) {
msixcap->msgctrl &= ~PCIM_MSIXCTRL_TABLE_SIZE;
msixcap->msgctrl |= sc->msix_limit - 1;
pci_set_cfgdata16(pi, off + 2, msixcap->msgctrl);
struct msixcap msixcap;
msixcap_ptr = (char *)&msixcap;
passthru_intr_limit(sc, &msixcap);
msixcap.pba_info & PCIM_MSIX_BIR_MASK;
msixcap.pba_info & ~PCIM_MSIX_BIR_MASK;
msixcap.table_info & PCIM_MSIX_BIR_MASK;
msixcap.table_info & ~PCIM_MSIX_BIR_MASK;
pi->pi_msix.table_count = MSIX_TABLE_COUNT(msixcap.msgctrl);