Lines Matching refs:sc

70 static int	mpr_alloc_msix(struct mpr_softc *sc, int msgs);
71 static int mpr_alloc_msi(struct mpr_softc *sc, int msgs);
72 static int mpr_pci_alloc_interrupts(struct mpr_softc *sc);
194 struct mpr_softc *sc;
198 sc = device_get_softc(dev);
199 bzero(sc, sizeof(*sc));
200 sc->mpr_dev = dev;
202 sc->mpr_flags = m->flags;
204 mpr_get_tunables(sc);
210 sc->mpr_regs_rid = PCIR_BAR(i);
212 if ((sc->mpr_regs_resource = bus_alloc_resource_any(dev,
213 SYS_RES_MEMORY, &sc->mpr_regs_rid, RF_ACTIVE)) != NULL)
217 if (sc->mpr_regs_resource == NULL) {
218 mpr_printf(sc, "Cannot allocate PCI registers\n");
222 sc->mpr_btag = rman_get_bustag(sc->mpr_regs_resource);
223 sc->mpr_bhandle = rman_get_bushandle(sc->mpr_regs_resource);
236 &sc->mpr_parent_dmat)) {
237 mpr_printf(sc, "Cannot allocate parent DMA tag\n");
238 mpr_pci_free(sc);
242 if (((error = mpr_pci_alloc_interrupts(sc)) != 0) ||
243 ((error = mpr_attach(sc)) != 0))
244 mpr_pci_free(sc);
256 mpr_pci_alloc_interrupts(struct mpr_softc *sc)
261 dev = sc->mpr_dev;
265 if (sc->disable_msix == 0) {
268 error = mpr_alloc_msix(sc, MPR_MSI_COUNT);
270 if (((error != 0) || (msgs == 0)) && (sc->disable_msi == 0)) {
273 error = mpr_alloc_msi(sc, MPR_MSI_COUNT);
278 sc->msi_msgs = msgs;
283 mpr_pci_setup_interrupts(struct mpr_softc *sc)
288 dev = sc->mpr_dev;
291 if (sc->msi_msgs == 0) {
292 sc->mpr_flags |= MPR_FLAGS_INTX;
293 sc->mpr_irq_rid[0] = 0;
294 sc->mpr_irq[0] = bus_alloc_resource_any(dev, SYS_RES_IRQ,
295 &sc->mpr_irq_rid[0], RF_SHAREABLE | RF_ACTIVE);
296 if (sc->mpr_irq[0] == NULL) {
297 mpr_printf(sc, "Cannot allocate INTx interrupt\n");
300 error = bus_setup_intr(dev, sc->mpr_irq[0],
301 INTR_TYPE_BIO | INTR_MPSAFE, NULL, mpr_intr, sc,
302 &sc->mpr_intrhand[0]);
304 mpr_printf(sc, "Cannot setup INTx interrupt\n");
306 sc->mpr_flags |= MPR_FLAGS_MSI;
308 sc->mpr_irq_rid[i] = i + 1;
309 sc->mpr_irq[i] = bus_alloc_resource_any(dev,
310 SYS_RES_IRQ, &sc->mpr_irq_rid[i], RF_ACTIVE);
311 if (sc->mpr_irq[i] == NULL) {
312 mpr_printf(sc,
316 error = bus_setup_intr(dev, sc->mpr_irq[i],
318 sc, &sc->mpr_intrhand[i]);
320 mpr_printf(sc,
333 struct mpr_softc *sc;
336 sc = device_get_softc(dev);
338 if ((error = mpr_free(sc)) != 0)
341 mpr_pci_free(sc);
346 mpr_pci_free(struct mpr_softc *sc)
350 if (sc->mpr_parent_dmat != NULL) {
351 bus_dma_tag_destroy(sc->mpr_parent_dmat);
354 if (sc->mpr_flags & MPR_FLAGS_MSI) {
356 if (sc->mpr_irq[i] != NULL) {
357 bus_teardown_intr(sc->mpr_dev, sc->mpr_irq[i],
358 sc->mpr_intrhand[i]);
359 bus_release_resource(sc->mpr_dev, SYS_RES_IRQ,
360 sc->mpr_irq_rid[i], sc->mpr_irq[i]);
363 pci_release_msi(sc->mpr_dev);
366 if (sc->mpr_flags & MPR_FLAGS_INTX) {
367 bus_teardown_intr(sc->mpr_dev, sc->mpr_irq[0],
368 sc->mpr_intrhand[0]);
369 bus_release_resource(sc->mpr_dev, SYS_RES_IRQ,
370 sc->mpr_irq_rid[0], sc->mpr_irq[0]);
373 if (sc->mpr_regs_resource != NULL) {
374 bus_release_resource(sc->mpr_dev, SYS_RES_MEMORY,
375 sc->mpr_regs_rid, sc->mpr_regs_resource);
394 mpr_alloc_msix(struct mpr_softc *sc, int msgs)
398 error = pci_alloc_msix(sc->mpr_dev, &msgs);
403 mpr_alloc_msi(struct mpr_softc *sc, int msgs)
407 error = pci_alloc_msi(sc->mpr_dev, &msgs);
412 mpr_pci_restore(struct mpr_softc *sc)
416 mpr_dprint(sc, MPR_TRACE, "%s\n", __func__);
418 dinfo = device_get_ivars(sc->mpr_dev);
420 mpr_dprint(sc, MPR_FAULT, "%s: NULL dinfo\n", __func__);
424 pci_cfg_restore(sc->mpr_dev, dinfo);