Lines Matching refs:sc

88 #define DEVCFG_SC_LOCK(sc)		mtx_lock(&(sc)->sc_mtx)
89 #define DEVCFG_SC_UNLOCK(sc) mtx_unlock(&(sc)->sc_mtx)
90 #define DEVCFG_SC_LOCK_INIT(sc) \
91 mtx_init(&(sc)->sc_mtx, device_get_nameunit((sc)->dev), \
93 #define DEVCFG_SC_LOCK_DESTROY(sc) mtx_destroy(&(sc)->sc_mtx);
94 #define DEVCFG_SC_ASSERT_LOCKED(sc) mtx_assert(&(sc)->sc_mtx, MA_OWNED);
96 #define RD4(sc, off) (bus_read_4((sc)->mem_res, (off)))
97 #define WR4(sc, off, val) (bus_write_4((sc)->mem_res, (off), (val)))
351 zy7_devcfg_init_fclk_sysctl(struct zy7_devcfg_softc *sc)
357 sysctl_ctx_init(&sc->sysctl_tree);
358 sc->sysctl_tree_top = SYSCTL_ADD_NODE(&sc->sysctl_tree,
361 if (sc->sysctl_tree_top == NULL) {
362 sysctl_ctx_free(&sc->sysctl_tree);
368 fclk_node = SYSCTL_ADD_NODE(&sc->sysctl_tree,
369 SYSCTL_CHILDREN(sc->sysctl_tree_top), OID_AUTO, fclk_num,
372 SYSCTL_ADD_INT(&sc->sysctl_tree,
377 SYSCTL_ADD_PROC(&sc->sysctl_tree,
383 SYSCTL_ADD_PROC(&sc->sysctl_tree,
396 zy7_devcfg_init_hw(struct zy7_devcfg_softc *sc)
399 DEVCFG_SC_ASSERT_LOCKED(sc);
402 WR4(sc, ZY7_DEVCFG_CTRL,
415 WR4(sc, ZY7_DEVCFG_MCTRL, RD4(sc, ZY7_DEVCFG_MCTRL) &
421 zy7_devcfg_reset_pl(struct zy7_devcfg_softc *sc)
426 DEVCFG_SC_ASSERT_LOCKED(sc);
428 devcfg_ctl = RD4(sc, ZY7_DEVCFG_CTRL);
431 WR4(sc, ZY7_DEVCFG_INT_STATUS, ZY7_DEVCFG_INT_ALL);
432 WR4(sc, ZY7_DEVCFG_INT_MASK, ~ZY7_DEVCFG_INT_PCFG_INIT_PE);
436 WR4(sc, ZY7_DEVCFG_CTRL, devcfg_ctl);
442 if ((RD4(sc, ZY7_DEVCFG_STATUS) &
445 WR4(sc, ZY7_DEVCFG_INT_MASK, ~0);
449 err = mtx_sleep(sc, &sc->sc_mtx, PCATCH, "zy7i1", hz);
456 WR4(sc, ZY7_DEVCFG_CTRL, devcfg_ctl);
460 while ((RD4(sc, ZY7_DEVCFG_STATUS) &
468 WR4(sc, ZY7_DEVCFG_INT_STATUS, ZY7_DEVCFG_INT_ALL);
469 WR4(sc, ZY7_DEVCFG_INT_MASK, ~ZY7_DEVCFG_INT_PCFG_INIT_PE);
473 WR4(sc, ZY7_DEVCFG_CTRL, devcfg_ctl);
479 err = mtx_sleep(sc, &sc->sc_mtx, PCATCH, "zy7i2", hz);
484 WR4(sc, ZY7_DEVCFG_INT_STATUS, ZY7_DEVCFG_INT_ALL);
500 struct zy7_devcfg_softc *sc = dev->si_drv1;
503 DEVCFG_SC_LOCK(sc);
504 if (sc->is_open) {
505 DEVCFG_SC_UNLOCK(sc);
509 sc->dma_map = NULL;
510 err = bus_dma_tag_create(bus_get_dma_tag(sc->dev), 4, 0,
519 &sc->sc_mtx,
520 &sc->dma_tag);
522 DEVCFG_SC_UNLOCK(sc);
526 sc->is_open = 1;
527 DEVCFG_SC_UNLOCK(sc);
534 struct zy7_devcfg_softc *sc = dev->si_drv1;
539 DEVCFG_SC_LOCK(sc);
543 zy7_devcfg_init_hw(sc);
545 err = zy7_devcfg_reset_pl(sc);
547 DEVCFG_SC_UNLOCK(sc);
553 err = bus_dmamem_alloc(sc->dma_tag, &dma_mem, BUS_DMA_NOWAIT,
554 &sc->dma_map);
556 DEVCFG_SC_UNLOCK(sc);
559 err = bus_dmamap_load(sc->dma_tag, sc->dma_map, dma_mem, PAGE_SIZE,
562 bus_dmamem_free(sc->dma_tag, dma_mem, sc->dma_map);
563 DEVCFG_SC_UNLOCK(sc);
569 if ((RD4(sc, ZY7_DEVCFG_INT_STATUS) &
577 DEVCFG_SC_UNLOCK(sc);
579 DEVCFG_SC_LOCK(sc);
584 bus_dmamap_sync(sc->dma_tag, sc->dma_map,
591 WR4(sc, ZY7_DEVCFG_DMA_SRC_ADDR,
594 WR4(sc, ZY7_DEVCFG_DMA_SRC_ADDR,
597 WR4(sc, ZY7_DEVCFG_DMA_DST_ADDR, ZY7_DEVCFG_DMA_ADDR_ILLEGAL);
598 WR4(sc, ZY7_DEVCFG_DMA_SRC_LEN, (segsz+3)/4);
599 WR4(sc, ZY7_DEVCFG_DMA_DST_LEN, 0);
602 WR4(sc, ZY7_DEVCFG_INT_STATUS, ZY7_DEVCFG_INT_ALL);
603 WR4(sc, ZY7_DEVCFG_INT_MASK, ~ZY7_DEVCFG_INT_DMA_DONE);
606 err = mtx_sleep(sc->dma_map, &sc->sc_mtx, PCATCH,
611 bus_dmamap_sync(sc->dma_tag, sc->dma_map,
615 if ((RD4(sc, ZY7_DEVCFG_INT_STATUS) &
620 bus_dmamap_unload(sc->dma_tag, sc->dma_map);
621 bus_dmamem_free(sc->dma_tag, dma_mem, sc->dma_map);
622 DEVCFG_SC_UNLOCK(sc);
629 struct zy7_devcfg_softc *sc = dev->si_drv1;
631 DEVCFG_SC_LOCK(sc);
632 sc->is_open = 0;
633 bus_dma_tag_destroy(sc->dma_tag);
634 DEVCFG_SC_UNLOCK(sc);
644 struct zy7_devcfg_softc *sc = (struct zy7_devcfg_softc *)arg;
647 DEVCFG_SC_LOCK(sc);
649 istatus = RD4(sc, ZY7_DEVCFG_INT_STATUS);
650 imask = ~RD4(sc, ZY7_DEVCFG_INT_MASK);
653 WR4(sc, ZY7_DEVCFG_INT_MASK, ~0);
656 DEVCFG_SC_UNLOCK(sc);
662 wakeup(sc->dma_map);
666 wakeup(sc);
668 DEVCFG_SC_UNLOCK(sc);
676 struct zy7_devcfg_softc *sc = zy7_devcfg_softc_p;
679 if (sc) {
680 DEVCFG_SC_LOCK(sc);
683 WR4(sc, ZY7_DEVCFG_INT_STATUS, ZY7_DEVCFG_INT_PCFG_DONE);
684 pl_done = ((RD4(sc, ZY7_DEVCFG_INT_STATUS) &
687 DEVCFG_SC_UNLOCK(sc);
711 struct zy7_devcfg_softc *sc = device_get_softc(dev);
719 sc->dev = dev;
721 DEVCFG_SC_LOCK_INIT(sc);
725 sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
727 if (sc->mem_res == NULL) {
735 sc->irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
737 if (sc->irq_res == NULL) {
744 err = bus_setup_intr(dev, sc->irq_res, INTR_TYPE_MISC | INTR_MPSAFE,
745 NULL, zy7_devcfg_intr, sc, &sc->intrhandle);
753 sc->sc_ctl_dev = make_dev(&zy7_devcfg_cdevsw, 0,
755 if (sc->sc_ctl_dev == NULL) {
760 sc->sc_ctl_dev->si_drv1 = sc;
762 zy7_devcfg_softc_p = sc;
765 WR4(sc, ZY7_DEVCFG_UNLOCK, ZY7_DEVCFG_UNLOCK_MAGIC);
768 WR4(sc, ZY7_DEVCFG_INT_STATUS, ZY7_DEVCFG_INT_ALL);
769 WR4(sc, ZY7_DEVCFG_INT_MASK, 0xffffffff);
772 zy7_ps_vers = (RD4(sc, ZY7_DEVCFG_MCTRL) &
784 if (zy7_devcfg_init_fclk_sysctl(sc) < 0)
793 struct zy7_devcfg_softc *sc = device_get_softc(dev);
795 if (sc->sysctl_tree_top != NULL) {
796 sysctl_ctx_free(&sc->sysctl_tree);
797 sc->sysctl_tree_top = NULL;
804 if (sc->sc_ctl_dev != NULL)
805 destroy_dev(sc->sc_ctl_dev);
808 if (sc->irq_res != NULL) {
809 if (sc->intrhandle)
810 bus_teardown_intr(dev, sc->irq_res, sc->intrhandle);
812 rman_get_rid(sc->irq_res), sc->irq_res);
816 if (sc->mem_res != NULL)
818 rman_get_rid(sc->mem_res), sc->mem_res);
822 DEVCFG_SC_LOCK_DESTROY(sc);