Tested with a BCM57412 OK?
diff --git a/sys/dev/pci/if_bnxt.c b/sys/dev/pci/if_bnxt.c --- a/sys/dev/pci/if_bnxt.c +++ b/sys/dev/pci/if_bnxt.c @@ -102,6 +102,7 @@ #define BNXT_FLAG_NPAR 0x0002 #define BNXT_FLAG_WOL_CAP 0x0004 #define BNXT_FLAG_SHORT_CMD 0x0008 +#define BNXT_FLAG_MSIX 0x0010 /* NVRam stuff has a five minute timeout */ #define BNXT_NVM_TIMEO (5 * 60 * 1000) @@ -507,7 +508,9 @@ bnxt_attach(struct device *parent, struct device *self, void *aux) * devices advertise msi support, but there's no way to tell a * completion queue to use msi mode, only legacy or msi-x. */ - if (/*pci_intr_map_msi(pa, &ih) != 0 && */ pci_intr_map(pa, &ih) != 0) { + if (pci_intr_map_msix(pa, 0, &ih) == 0) { + sc->sc_flags |= BNXT_FLAG_MSIX; + } else if (pci_intr_map(pa, &ih) != 0) { printf(": unable to map interrupt\n"); goto free_resp; } @@ -2658,7 +2661,9 @@ bnxt_hwrm_ring_alloc(struct bnxt_softc *softc, uint8_t type, req.logical_id = htole16(ring->id); req.cmpl_ring_id = htole16(cmpl_ring_id); req.queue_id = htole16(softc->sc_q_info[0].id); - req.int_mode = 0; + req.int_mode = (softc->sc_flags & BNXT_FLAG_MSIX) ? + HWRM_RING_ALLOC_INPUT_INT_MODE_MSIX : + HWRM_RING_ALLOC_INPUT_INT_MODE_LEGACY; BNXT_HWRM_LOCK(softc); rc = _hwrm_send_message(softc, &req, sizeof(req)); if (rc)