Lines Matching +full:a +full:- +full:facing

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
122 pci, nhi, nhi_identifiers, nitems(nhi_identifiers) - 1);
129 for (n = nhi_identifiers; n->vendor != 0; n++) { in nhi_find_ident()
130 if (n->vendor != pci_get_vendor(dev)) in nhi_find_ident()
132 if (n->device != pci_get_device(dev)) in nhi_find_ident()
134 if ((n->subvendor != 0xffff) && in nhi_find_ident()
135 (n->subvendor != pci_get_subvendor(dev))) in nhi_find_ident()
137 if ((n->subdevice != 0xffff) && in nhi_find_ident()
138 (n->subdevice != pci_get_subdevice(dev))) in nhi_find_ident()
154 device_set_desc(dev, n->desc); in nhi_pci_probe()
171 sc->dev = dev; in nhi_pci_attach()
173 sc->hwflags = n->flags; in nhi_pci_attach()
181 sc->ufp = NULL; in nhi_pci_attach()
182 if ((TB_FIND_UFP(dev, &sc->ufp) != 0) || (sc->ufp == NULL)) { in nhi_pci_attach()
185 sc->ufp = devclass_get_device(dc, device_get_unit(dev)); in nhi_pci_attach()
187 if (sc->ufp == NULL) in nhi_pci_attach()
188 tb_printf(sc, "Cannot find Upstream Facing Port\n"); in nhi_pci_attach()
190 tb_printf(sc, "Upstream Facing Port is %s\n", in nhi_pci_attach()
191 device_get_nameunit(sc->ufp)); in nhi_pci_attach()
200 sc->regs_rid = PCIR_BAR(0); in nhi_pci_attach()
201 if ((sc->regs_resource = bus_alloc_resource_any(dev, in nhi_pci_attach()
202 SYS_RES_MEMORY, &sc->regs_rid, RF_ACTIVE)) == NULL) { in nhi_pci_attach()
206 sc->regs_btag = rman_get_bustag(sc->regs_resource); in nhi_pci_attach()
207 sc->regs_bhandle = rman_get_bushandle(sc->regs_resource); in nhi_pci_attach()
211 if (bus_dma_template_tag(&t, &sc->parent_dmat) != 0) { in nhi_pci_attach()
221 nhi_pci_detach(sc->dev); in nhi_pci_attach()
258 if (sc->parent_dmat != NULL) { in nhi_pci_free()
259 bus_dma_tag_destroy(sc->parent_dmat); in nhi_pci_free()
260 sc->parent_dmat = NULL; in nhi_pci_free()
263 if (sc->regs_resource != NULL) { in nhi_pci_free()
264 bus_release_resource(sc->dev, SYS_RES_MEMORY, in nhi_pci_free()
265 sc->regs_rid, sc->regs_resource); in nhi_pci_free()
266 sc->regs_resource = NULL; in nhi_pci_free()
277 /* Map the Pending Bit Array and Vector Table BARs for MSI-X */ in nhi_pci_allocate_interrupts()
278 sc->irq_pba_rid = pci_msix_pba_bar(sc->dev); in nhi_pci_allocate_interrupts()
279 sc->irq_table_rid = pci_msix_table_bar(sc->dev); in nhi_pci_allocate_interrupts()
281 if (sc->irq_pba_rid != -1) in nhi_pci_allocate_interrupts()
282 sc->irq_pba = bus_alloc_resource_any(sc->dev, SYS_RES_MEMORY, in nhi_pci_allocate_interrupts()
283 &sc->irq_pba_rid, RF_ACTIVE); in nhi_pci_allocate_interrupts()
284 if (sc->irq_table_rid != -1) in nhi_pci_allocate_interrupts()
285 sc->irq_table = bus_alloc_resource_any(sc->dev, SYS_RES_MEMORY, in nhi_pci_allocate_interrupts()
286 &sc->irq_table_rid, RF_ACTIVE); in nhi_pci_allocate_interrupts()
288 msgs = pci_msix_count(sc->dev); in nhi_pci_allocate_interrupts()
290 "Counted %d MSI-X messages\n", msgs); in nhi_pci_allocate_interrupts()
295 "MSI-X interrupts\n", msgs); in nhi_pci_allocate_interrupts()
296 error = pci_alloc_msix(sc->dev, &msgs); in nhi_pci_allocate_interrupts()
306 sc->msix_count = msgs; in nhi_pci_allocate_interrupts()
315 for (i = 0; i < sc->msix_count; i++) { in nhi_pci_free_interrupts()
316 bus_teardown_intr(sc->dev, sc->irqs[i], sc->intrhand[i]); in nhi_pci_free_interrupts()
317 bus_release_resource(sc->dev, SYS_RES_IRQ, sc->irq_rid[i], in nhi_pci_free_interrupts()
318 sc->irqs[i]); in nhi_pci_free_interrupts()
321 pci_release_msi(sc->dev); in nhi_pci_free_interrupts()
323 if (sc->irq_table != NULL) { in nhi_pci_free_interrupts()
324 bus_release_resource(sc->dev, SYS_RES_MEMORY, in nhi_pci_free_interrupts()
325 sc->irq_table_rid, sc->irq_table); in nhi_pci_free_interrupts()
326 sc->irq_table = NULL; in nhi_pci_free_interrupts()
329 if (sc->irq_pba != NULL) { in nhi_pci_free_interrupts()
330 bus_release_resource(sc->dev, SYS_RES_MEMORY, in nhi_pci_free_interrupts()
331 sc->irq_pba_rid, sc->irq_pba); in nhi_pci_free_interrupts()
332 sc->irq_pba = NULL; in nhi_pci_free_interrupts()
335 if (sc->intr_trackers != NULL) in nhi_pci_free_interrupts()
336 free(sc->intr_trackers, M_NHI); in nhi_pci_free_interrupts()
348 sc->intr_trackers = malloc(sizeof(struct nhi_intr_tracker) * in nhi_pci_configure_interrupts()
349 sc->msix_count, M_NHI, M_ZERO | M_NOWAIT); in nhi_pci_configure_interrupts()
350 if (sc->intr_trackers == NULL) { in nhi_pci_configure_interrupts()
355 for (i = 0; i < sc->msix_count; i++) { in nhi_pci_configure_interrupts()
357 trkr = &sc->intr_trackers[i]; in nhi_pci_configure_interrupts()
358 trkr->sc = sc; in nhi_pci_configure_interrupts()
359 trkr->ring = NULL; in nhi_pci_configure_interrupts()
360 trkr->vector = i; in nhi_pci_configure_interrupts()
362 sc->irq_rid[i] = rid; in nhi_pci_configure_interrupts()
363 sc->irqs[i] = bus_alloc_resource_any(sc->dev, SYS_RES_IRQ, in nhi_pci_configure_interrupts()
364 &sc->irq_rid[i], RF_ACTIVE); in nhi_pci_configure_interrupts()
365 if (sc->irqs[i] == NULL) { in nhi_pci_configure_interrupts()
368 sc->irq_rid[i]); in nhi_pci_configure_interrupts()
371 error = bus_setup_intr(sc->dev, sc->irqs[i], INTR_TYPE_BIO | in nhi_pci_configure_interrupts()
372 INTR_MPSAFE, NULL, nhi_intr, trkr, &sc->intrhand[i]); in nhi_pci_configure_interrupts()
375 "cannot setup interrupt RID %d\n", sc->irq_rid[i]); in nhi_pci_configure_interrupts()
380 tb_debug(sc, DBG_INIT, "Set up %d interrupts\n", sc->msix_count); in nhi_pci_configure_interrupts()
400 struct nhi_softc *sc = r->sc; in nhi_pci_enable_interrupt()
405 r->ring_num); in nhi_pci_enable_interrupt()
407 * Compute the routing between event type and MSI-X vector. in nhi_pci_enable_interrupt()
417 offset = (r->ring_num + IVR_TX_OFFSET) * 4; in nhi_pci_enable_interrupt()
418 NHI_SET_INTERRUPT(offset, 0x0f, r->ring_num); in nhi_pci_enable_interrupt()
421 offset = (r->ring_num + IVR_RX_OFFSET) * 4; in nhi_pci_enable_interrupt()
422 NHI_SET_INTERRUPT(offset, 0x0f, r->ring_num); in nhi_pci_enable_interrupt()
425 offset = (r->ring_num + IVR_NE_OFFSET) * 4; in nhi_pci_enable_interrupt()
443 offset = r->ring_num + IMR_TX_OFFSET; in nhi_pci_enable_interrupt()
447 offset = r->ring_num + IMR_RX_OFFSET; in nhi_pci_enable_interrupt()
451 offset = r->ring_num + IMR_NE_OFFSET; in nhi_pci_enable_interrupt()
479 * Icelake controllers need to be notified of power-on
488 dev = sc->dev; in nhi_pci_icl_poweron()
521 dev = sc->dev; in nhi_pci_get_uuid()
527 bcopy(val, &sc->uuid, 16); in nhi_pci_get_uuid()