Lines Matching refs:sc

92 	struct xdmatest_softc *sc;  in xdmatest_intr()  local
94 sc = arg; in xdmatest_intr()
96 sc->done = 1; in xdmatest_intr()
98 mtx_lock(&sc->mtx); in xdmatest_intr()
99 wakeup(sc); in xdmatest_intr()
100 mtx_unlock(&sc->mtx); in xdmatest_intr()
118 xdmatest_alloc_test_memory(struct xdmatest_softc *sc) in xdmatest_alloc_test_memory() argument
122 sc->len = (0x1000000 - 8); /* 16mb */ in xdmatest_alloc_test_memory()
123 sc->len = 8; in xdmatest_alloc_test_memory()
128 bus_get_dma_tag(sc->dev), in xdmatest_alloc_test_memory()
133 sc->len, 1, /* maxsize, nsegments*/ in xdmatest_alloc_test_memory()
134 sc->len, 0, /* maxsegsize, flags */ in xdmatest_alloc_test_memory()
136 &sc->src_dma_tag); in xdmatest_alloc_test_memory()
138 device_printf(sc->dev, in xdmatest_alloc_test_memory()
143 err = bus_dmamem_alloc(sc->src_dma_tag, (void **)&sc->src, in xdmatest_alloc_test_memory()
144 BUS_DMA_WAITOK | BUS_DMA_COHERENT, &sc->src_dma_map); in xdmatest_alloc_test_memory()
146 device_printf(sc->dev, in xdmatest_alloc_test_memory()
151 err = bus_dmamap_load(sc->src_dma_tag, sc->src_dma_map, sc->src, in xdmatest_alloc_test_memory()
152 sc->len, xdmatest_dmamap_cb, &sc->src_phys, BUS_DMA_WAITOK); in xdmatest_alloc_test_memory()
154 device_printf(sc->dev, in xdmatest_alloc_test_memory()
162 bus_get_dma_tag(sc->dev), in xdmatest_alloc_test_memory()
167 sc->len, 1, /* maxsize, nsegments*/ in xdmatest_alloc_test_memory()
168 sc->len, 0, /* maxsegsize, flags */ in xdmatest_alloc_test_memory()
170 &sc->dst_dma_tag); in xdmatest_alloc_test_memory()
172 device_printf(sc->dev, in xdmatest_alloc_test_memory()
177 err = bus_dmamem_alloc(sc->dst_dma_tag, (void **)&sc->dst, in xdmatest_alloc_test_memory()
178 BUS_DMA_WAITOK | BUS_DMA_COHERENT, &sc->dst_dma_map); in xdmatest_alloc_test_memory()
180 device_printf(sc->dev, in xdmatest_alloc_test_memory()
185 err = bus_dmamap_load(sc->dst_dma_tag, sc->dst_dma_map, sc->dst, in xdmatest_alloc_test_memory()
186 sc->len, xdmatest_dmamap_cb, &sc->dst_phys, BUS_DMA_WAITOK); in xdmatest_alloc_test_memory()
188 device_printf(sc->dev, in xdmatest_alloc_test_memory()
197 xdmatest_test(struct xdmatest_softc *sc) in xdmatest_test() argument
203 sc->xdma = xdma_ofw_get(sc->dev, "test"); in xdmatest_test()
204 if (sc->xdma == NULL) { in xdmatest_test()
205 device_printf(sc->dev, "Can't find xDMA controller.\n"); in xdmatest_test()
210 sc->xchan = xdma_channel_alloc(sc->xdma); in xdmatest_test()
211 if (sc->xchan == NULL) { in xdmatest_test()
212 device_printf(sc->dev, "Can't alloc virtual DMA channel.\n"); in xdmatest_test()
217 err = xdma_setup_intr(sc->xchan, 0, xdmatest_intr, sc, &sc->ih); in xdmatest_test()
219 device_printf(sc->dev, "Can't setup xDMA interrupt handler.\n"); in xdmatest_test()
224 bus_dmamap_sync(sc->src_dma_tag, sc->src_dma_map, BUS_DMASYNC_PREWRITE); in xdmatest_test()
225 bus_dmamap_sync(sc->dst_dma_tag, sc->dst_dma_map, BUS_DMASYNC_PREWRITE); in xdmatest_test()
228 for (i = 0; i < sc->len; i++) { in xdmatest_test()
229 sc->src[i] = (i & 0xff); in xdmatest_test()
230 sc->dst[i] = 0; in xdmatest_test()
233 sc->req.type = XR_TYPE_PHYS_ADDR; in xdmatest_test()
234 sc->req.direction = XDMA_MEM_TO_MEM; in xdmatest_test()
235 sc->req.src_addr = sc->src_phys; in xdmatest_test()
236 sc->req.dst_addr = sc->dst_phys; in xdmatest_test()
237 sc->req.src_width = 4; in xdmatest_test()
238 sc->req.dst_width = 4; in xdmatest_test()
239 sc->req.block_len = sc->len; in xdmatest_test()
240 sc->req.block_num = 1; in xdmatest_test()
242 err = xdma_request(sc->xchan, sc->src_phys, sc->dst_phys, sc->len); in xdmatest_test()
244 device_printf(sc->dev, "Can't configure virtual channel.\n"); in xdmatest_test()
249 xdma_begin(sc->xchan); in xdmatest_test()
255 xdmatest_verify(struct xdmatest_softc *sc) in xdmatest_verify() argument
261 bus_dmamap_sync(sc->src_dma_tag, sc->src_dma_map, BUS_DMASYNC_POSTREAD); in xdmatest_verify()
262 bus_dmamap_sync(sc->dst_dma_tag, sc->dst_dma_map, BUS_DMASYNC_POSTWRITE); in xdmatest_verify()
264 for (i = 0; i < sc->len; i++) { in xdmatest_verify()
265 if (sc->dst[i] != sc->src[i]) { in xdmatest_verify()
266 device_printf(sc->dev, in xdmatest_verify()
272 err = xdma_channel_free(sc->xchan); in xdmatest_verify()
274 device_printf(sc->dev, in xdmatest_verify()
279 err = xdma_put(sc->xdma); in xdmatest_verify()
281 device_printf(sc->dev, in xdmatest_verify()
292 struct xdmatest_softc *sc; in xdmatest_worker() local
296 sc = arg; in xdmatest_worker()
298 device_printf(sc->dev, "Worker %d started.\n", in xdmatest_worker()
299 device_get_unit(sc->dev)); in xdmatest_worker()
302 sc->done = 0; in xdmatest_worker()
304 mtx_lock(&sc->mtx); in xdmatest_worker()
306 if (xdmatest_test(sc) != 0) { in xdmatest_worker()
307 mtx_unlock(&sc->mtx); in xdmatest_worker()
308 device_printf(sc->dev, in xdmatest_worker()
316 mtx_sleep(sc, &sc->mtx, 0, "xdmatest_wait", hz); in xdmatest_worker()
317 } while (timeout-- && sc->done == 0); in xdmatest_worker()
320 err = xdmatest_verify(sc); in xdmatest_worker()
323 mtx_unlock(&sc->mtx); in xdmatest_worker()
328 mtx_unlock(&sc->mtx); in xdmatest_worker()
329 device_printf(sc->dev, in xdmatest_worker()
338 struct xdmatest_softc *sc; in xdmatest_delayed_attach() local
340 sc = arg; in xdmatest_delayed_attach()
342 if (kproc_create(xdmatest_worker, (void *)sc, &sc->newp, 0, 0, in xdmatest_delayed_attach()
344 device_printf(sc->dev, in xdmatest_delayed_attach()
348 config_intrhook_disestablish(&sc->config_intrhook); in xdmatest_delayed_attach()
369 struct xdmatest_softc *sc; in xdmatest_attach() local
372 sc = device_get_softc(dev); in xdmatest_attach()
373 sc->dev = dev; in xdmatest_attach()
375 mtx_init(&sc->mtx, device_get_nameunit(dev), "xdmatest", MTX_DEF); in xdmatest_attach()
378 err = xdmatest_alloc_test_memory(sc); in xdmatest_attach()
380 device_printf(sc->dev, "Can't allocate test memory.\n"); in xdmatest_attach()
385 sc->config_intrhook.ich_func = xdmatest_delayed_attach; in xdmatest_attach()
386 sc->config_intrhook.ich_arg = sc; in xdmatest_attach()
387 if (config_intrhook_establish(&sc->config_intrhook) != 0) in xdmatest_attach()
396 struct xdmatest_softc *sc; in xdmatest_detach() local
398 sc = device_get_softc(dev); in xdmatest_detach()
400 bus_dmamap_unload(sc->src_dma_tag, sc->src_dma_map); in xdmatest_detach()
401 bus_dmamem_free(sc->src_dma_tag, sc->src, sc->src_dma_map); in xdmatest_detach()
402 bus_dma_tag_destroy(sc->src_dma_tag); in xdmatest_detach()
404 bus_dmamap_unload(sc->dst_dma_tag, sc->dst_dma_map); in xdmatest_detach()
405 bus_dmamem_free(sc->dst_dma_tag, sc->dst, sc->dst_dma_map); in xdmatest_detach()
406 bus_dma_tag_destroy(sc->dst_dma_tag); in xdmatest_detach()