Lines Matching refs:sc

92 #define DEVCFG_SC_LOCK(sc)		mtx_lock(&(sc)->sc_mtx)
93 #define DEVCFG_SC_UNLOCK(sc) mtx_unlock(&(sc)->sc_mtx)
94 #define DEVCFG_SC_LOCK_INIT(sc) \
95 mtx_init(&(sc)->sc_mtx, device_get_nameunit((sc)->dev), \
97 #define DEVCFG_SC_LOCK_DESTROY(sc) mtx_destroy(&(sc)->sc_mtx);
98 #define DEVCFG_SC_ASSERT_LOCKED(sc) mtx_assert(&(sc)->sc_mtx, MA_OWNED);
100 #define RD4(sc, off) (bus_read_4((sc)->mem_res, (off)))
101 #define WR4(sc, off, val) (bus_write_4((sc)->mem_res, (off), (val)))
353 zy7_devcfg_init_fclk_sysctl(struct zy7_devcfg_softc *sc)
359 sysctl_ctx_init(&sc->sysctl_tree);
360 sc->sysctl_tree_top = SYSCTL_ADD_NODE(&sc->sysctl_tree,
363 if (sc->sysctl_tree_top == NULL) {
364 sysctl_ctx_free(&sc->sysctl_tree);
370 fclk_node = SYSCTL_ADD_NODE(&sc->sysctl_tree,
371 SYSCTL_CHILDREN(sc->sysctl_tree_top), OID_AUTO, fclk_num,
374 SYSCTL_ADD_INT(&sc->sysctl_tree,
379 SYSCTL_ADD_PROC(&sc->sysctl_tree,
385 SYSCTL_ADD_PROC(&sc->sysctl_tree,
398 zy7_devcfg_init_hw(struct zy7_devcfg_softc *sc)
401 DEVCFG_SC_ASSERT_LOCKED(sc);
404 WR4(sc, ZY7_DEVCFG_CTRL,
417 WR4(sc, ZY7_DEVCFG_MCTRL, RD4(sc, ZY7_DEVCFG_MCTRL) &
423 zy7_devcfg_reset_pl(struct zy7_devcfg_softc *sc)
428 DEVCFG_SC_ASSERT_LOCKED(sc);
430 devcfg_ctl = RD4(sc, ZY7_DEVCFG_CTRL);
433 WR4(sc, ZY7_DEVCFG_INT_STATUS, ZY7_DEVCFG_INT_ALL);
434 WR4(sc, ZY7_DEVCFG_INT_MASK, ~ZY7_DEVCFG_INT_PCFG_INIT_PE);
438 WR4(sc, ZY7_DEVCFG_CTRL, devcfg_ctl);
444 if ((RD4(sc, ZY7_DEVCFG_STATUS) &
447 WR4(sc, ZY7_DEVCFG_INT_MASK, ~0);
451 err = mtx_sleep(sc, &sc->sc_mtx, PCATCH, "zy7i1", hz);
458 WR4(sc, ZY7_DEVCFG_CTRL, devcfg_ctl);
462 while ((RD4(sc, ZY7_DEVCFG_STATUS) &
470 WR4(sc, ZY7_DEVCFG_INT_STATUS, ZY7_DEVCFG_INT_ALL);
471 WR4(sc, ZY7_DEVCFG_INT_MASK, ~ZY7_DEVCFG_INT_PCFG_INIT_PE);
475 WR4(sc, ZY7_DEVCFG_CTRL, devcfg_ctl);
481 err = mtx_sleep(sc, &sc->sc_mtx, PCATCH, "zy7i2", hz);
486 WR4(sc, ZY7_DEVCFG_INT_STATUS, ZY7_DEVCFG_INT_ALL);
502 struct zy7_devcfg_softc *sc = dev->si_drv1;
505 DEVCFG_SC_LOCK(sc);
506 if (sc->is_open) {
507 DEVCFG_SC_UNLOCK(sc);
511 sc->dma_map = NULL;
512 err = bus_dma_tag_create(bus_get_dma_tag(sc->dev), 4, 0,
521 &sc->sc_mtx,
522 &sc->dma_tag);
524 DEVCFG_SC_UNLOCK(sc);
528 sc->is_open = 1;
529 DEVCFG_SC_UNLOCK(sc);
536 struct zy7_devcfg_softc *sc = dev->si_drv1;
541 DEVCFG_SC_LOCK(sc);
545 zy7_devcfg_init_hw(sc);
547 err = zy7_devcfg_reset_pl(sc);
549 DEVCFG_SC_UNLOCK(sc);
555 err = bus_dmamem_alloc(sc->dma_tag, &dma_mem, BUS_DMA_NOWAIT,
556 &sc->dma_map);
558 DEVCFG_SC_UNLOCK(sc);
561 err = bus_dmamap_load(sc->dma_tag, sc->dma_map, dma_mem, PAGE_SIZE,
564 bus_dmamem_free(sc->dma_tag, dma_mem, sc->dma_map);
565 DEVCFG_SC_UNLOCK(sc);
571 if ((RD4(sc, ZY7_DEVCFG_INT_STATUS) &
579 DEVCFG_SC_UNLOCK(sc);
581 DEVCFG_SC_LOCK(sc);
586 bus_dmamap_sync(sc->dma_tag, sc->dma_map,
593 WR4(sc, ZY7_DEVCFG_DMA_SRC_ADDR,
596 WR4(sc, ZY7_DEVCFG_DMA_SRC_ADDR,
599 WR4(sc, ZY7_DEVCFG_DMA_DST_ADDR, ZY7_DEVCFG_DMA_ADDR_ILLEGAL);
600 WR4(sc, ZY7_DEVCFG_DMA_SRC_LEN, (segsz+3)/4);
601 WR4(sc, ZY7_DEVCFG_DMA_DST_LEN, 0);
604 WR4(sc, ZY7_DEVCFG_INT_STATUS, ZY7_DEVCFG_INT_ALL);
605 WR4(sc, ZY7_DEVCFG_INT_MASK, ~ZY7_DEVCFG_INT_DMA_DONE);
608 err = mtx_sleep(sc->dma_map, &sc->sc_mtx, PCATCH,
613 bus_dmamap_sync(sc->dma_tag, sc->dma_map,
617 if ((RD4(sc, ZY7_DEVCFG_INT_STATUS) &
622 bus_dmamap_unload(sc->dma_tag, sc->dma_map);
623 bus_dmamem_free(sc->dma_tag, dma_mem, sc->dma_map);
624 DEVCFG_SC_UNLOCK(sc);
631 struct zy7_devcfg_softc *sc = dev->si_drv1;
633 DEVCFG_SC_LOCK(sc);
634 sc->is_open = 0;
635 bus_dma_tag_destroy(sc->dma_tag);
636 DEVCFG_SC_UNLOCK(sc);
646 struct zy7_devcfg_softc *sc = (struct zy7_devcfg_softc *)arg;
649 DEVCFG_SC_LOCK(sc);
651 istatus = RD4(sc, ZY7_DEVCFG_INT_STATUS);
652 imask = ~RD4(sc, ZY7_DEVCFG_INT_MASK);
655 WR4(sc, ZY7_DEVCFG_INT_MASK, ~0);
658 DEVCFG_SC_UNLOCK(sc);
664 wakeup(sc->dma_map);
668 wakeup(sc);
670 DEVCFG_SC_UNLOCK(sc);
678 struct zy7_devcfg_softc *sc = zy7_devcfg_softc_p;
681 if (sc) {
682 DEVCFG_SC_LOCK(sc);
685 WR4(sc, ZY7_DEVCFG_INT_STATUS, ZY7_DEVCFG_INT_PCFG_DONE);
686 pl_done = ((RD4(sc, ZY7_DEVCFG_INT_STATUS) &
689 DEVCFG_SC_UNLOCK(sc);
713 struct zy7_devcfg_softc *sc = device_get_softc(dev);
721 sc->dev = dev;
723 DEVCFG_SC_LOCK_INIT(sc);
727 sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
729 if (sc->mem_res == NULL) {
737 sc->irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
739 if (sc->irq_res == NULL) {
746 err = bus_setup_intr(dev, sc->irq_res, INTR_TYPE_MISC | INTR_MPSAFE,
747 NULL, zy7_devcfg_intr, sc, &sc->intrhandle);
755 sc->sc_ctl_dev = make_dev(&zy7_devcfg_cdevsw, 0,
757 if (sc->sc_ctl_dev == NULL) {
762 sc->sc_ctl_dev->si_drv1 = sc;
764 zy7_devcfg_softc_p = sc;
767 WR4(sc, ZY7_DEVCFG_UNLOCK, ZY7_DEVCFG_UNLOCK_MAGIC);
770 WR4(sc, ZY7_DEVCFG_INT_STATUS, ZY7_DEVCFG_INT_ALL);
771 WR4(sc, ZY7_DEVCFG_INT_MASK, 0xffffffff);
774 zy7_ps_vers = (RD4(sc, ZY7_DEVCFG_MCTRL) &
786 if (zy7_devcfg_init_fclk_sysctl(sc) < 0)
795 struct zy7_devcfg_softc *sc = device_get_softc(dev);
797 if (sc->sysctl_tree_top != NULL) {
798 sysctl_ctx_free(&sc->sysctl_tree);
799 sc->sysctl_tree_top = NULL;
806 if (sc->sc_ctl_dev != NULL)
807 destroy_dev(sc->sc_ctl_dev);
810 if (sc->irq_res != NULL) {
811 if (sc->intrhandle)
812 bus_teardown_intr(dev, sc->irq_res, sc->intrhandle);
814 rman_get_rid(sc->irq_res), sc->irq_res);
818 if (sc->mem_res != NULL)
820 rman_get_rid(sc->mem_res), sc->mem_res);
824 DEVCFG_SC_LOCK_DESTROY(sc);