Lines Matching refs:isadmap

222 	isadma_devstate_t *isadmap;	/* per isadma state pointer */  in isadma_attach()  local
241 isadmap = ddi_get_soft_state(per_isadma_state, instance); in isadma_attach()
242 isadmap->isadma_dip = dip; in isadma_attach()
246 "reg", (caddr_t)&isadmap->isadma_regp, in isadma_attach()
247 &isadmap->isadma_reglen) != DDI_SUCCESS) { in isadma_attach()
253 mutex_init(&isadmap->isadma_access_lock, NULL, MUTEX_DRIVER, in isadma_attach()
257 cv_init(&isadmap->isadma_access_cv, NULL, CV_DRIVER, NULL); in isadma_attach()
282 isadma_devstate_t *isadmap = in isadma_detach() local
287 cv_destroy(&isadmap->isadma_access_cv); in isadma_detach()
289 mutex_destroy(&isadmap->isadma_access_lock); in isadma_detach()
292 kmem_free(isadmap->isadma_regp, isadmap->isadma_reglen); in isadma_detach()
306 isadma_check_waiters(isadma_devstate_t *isadmap) in isadma_check_waiters() argument
308 if (isadmap->isadma_want > isadma_max_waiter) in isadma_check_waiters()
309 isadma_max_waiter = isadmap->isadma_want; in isadma_check_waiters()
311 if (isadmap->isadma_want < isadma_min_waiter) in isadma_check_waiters()
312 isadma_min_waiter = isadmap->isadma_want; in isadma_check_waiters()
317 isadma_dmawait(isadma_devstate_t *isadmap) in isadma_dmawait() argument
320 ASSERT(mutex_owned(&isadmap->isadma_access_lock)); in isadma_dmawait()
323 while (isadmap->isadma_ldip != NULL) { in isadma_dmawait()
325 isadmap->isadma_want++; in isadma_dmawait()
326 cv_wait(&isadmap->isadma_access_cv, in isadma_dmawait()
327 &isadmap->isadma_access_lock); in isadma_dmawait()
328 isadmap->isadma_want--; in isadma_dmawait()
334 isadma_wakeup(isadma_devstate_t *isadmap) in isadma_wakeup() argument
337 ASSERT(mutex_owned(&isadmap->isadma_access_lock)); in isadma_wakeup()
343 if (isadmap->isadma_want > 0 && isadmap->isadma_ldip == NULL) { in isadma_wakeup()
344 cv_signal(&isadmap->isadma_access_cv); in isadma_wakeup()
415 isadma_devstate_t *isadmap = hdlp->ahi_common.ah_bus_private; in isadma_get8() local
426 isadma_check_waiters(isadmap); in isadma_get8()
428 mutex_enter(&isadmap->isadma_access_lock); in isadma_get8()
429 isadma_dmawait(isadmap); /* wait until on-going dma completes */ in isadma_get8()
441 isadma_wakeup(isadmap); in isadma_get8()
442 mutex_exit(&isadmap->isadma_access_lock); in isadma_get8()
456 isadma_devstate_t *isadmap = hdlp->ahi_common.ah_bus_private; in isadma_get16() local
467 isadma_check_waiters(isadmap); in isadma_get16()
469 mutex_enter(&isadmap->isadma_access_lock); in isadma_get16()
470 isadma_dmawait(isadmap); /* wait until on-going dma completes */ in isadma_get16()
483 isadma_wakeup(isadmap); in isadma_get16()
484 mutex_exit(&isadmap->isadma_access_lock); in isadma_get16()
515 isadma_devstate_t *isadmap = hdlp->ahi_common.ah_bus_private; in isadma_put8() local
526 isadma_check_waiters(isadmap); in isadma_put8()
528 mutex_enter(&isadmap->isadma_access_lock); in isadma_put8()
530 if (isadmap->isadma_ldip == hdlp->ahi_common.ah_dip) { /* owned lock? */ in isadma_put8()
532 isadmap->isadma_ldip = NULL; /* reset lock owner */ in isadma_put8()
539 isadma_dmawait(isadmap); in isadma_put8()
542 isadmap->isadma_ldip = hdlp->ahi_common.ah_dip; in isadma_put8()
559 isadma_wakeup(isadmap); in isadma_put8()
560 mutex_exit(&isadmap->isadma_access_lock); in isadma_put8()
573 isadma_devstate_t *isadmap = hdlp->ahi_common.ah_bus_private; in isadma_put16() local
584 isadma_check_waiters(isadmap); in isadma_put16()
586 mutex_enter(&isadmap->isadma_access_lock); in isadma_put16()
587 isadma_dmawait(isadmap); /* wait until on-going dma completes */ in isadma_put16()
600 isadma_wakeup(isadmap); in isadma_put16()
601 mutex_exit(&isadmap->isadma_access_lock); in isadma_put16()
624 isadma_devstate_t *isadmap = ddi_get_soft_state(per_isadma_state, in isadma_map() local
645 (void *)isadmap->isadma_regp, (void *)regp)); in isadma_map()
655 !IS_SAME_REG(child_regp, isadmap->isadma_regp)) in isadma_map()
664 hp->ahi_common.ah_bus_private = isadmap; in isadma_map()
684 if (IS_SAME_REG(child_regp, isadmap->isadma_regp)) { in isadma_map()