Lines Matching refs:zdev

75 #define	ZULUVM_LOCK   mutex_enter(&(zdev->dev_lck))
76 #define ZULUVM_UNLOCK mutex_exit(&(zdev->dev_lck))
93 static int zuluvm_proc_release(zuluvm_state_t *zdev, zuluvm_proc_t *proc);
94 static int zuluvm_get_intr_props(zuluvm_state_t *zdev, dev_info_t *devi);
98 static void zuluvm_do_retarget(zuluvm_state_t *zdev);
171 zuluvm_write_tte(zuluvm_state_t *zdev, void *arg, caddr_t addr, in zuluvm_write_tte() argument
179 ZULUVM_STATS_MISS(zdev, t_size); in zuluvm_write_tte()
182 int state = ZULUVM_SET_STATE(zdev, ZULUVM_STATE_WRITE_TTE, in zuluvm_write_tte()
185 zuluvm_stop(zdev, state, "zuluvm_write_tte"); in zuluvm_write_tte()
206 error = zulud_write_tte(zdev, arg, t_size, tag, t_pfn, in zuluvm_write_tte()
213 zuluvm_stop(zuluvm_state_t *zdev, int state, char *tag) in zuluvm_stop() argument
217 state = ZULUVM_SET_STATE(zdev, in zuluvm_stop()
228 ZULUVM_STATS_CANCEL(zdev); in zuluvm_stop()
252 zuluvm_state_t *zdev = (zuluvm_state_t *)data; in zuluvm_tlb_handler() local
267 error = ZULUVM_GET_TLB_ERRCODE(zdev); in zuluvm_tlb_handler()
268 addr = (caddr_t)ZULUVM_GET_TLB_ADDR(zdev); in zuluvm_tlb_handler()
269 tlbtype = ZULUVM_GET_TLB_TYPE(zdev); in zuluvm_tlb_handler()
270 arg = zdev->zvm.arg; in zuluvm_tlb_handler()
279 proc = zdev->zvm.proc1; in zuluvm_tlb_handler()
285 proc = zdev->zvm.proc2; in zuluvm_tlb_handler()
291 state = ZULUVM_SET_STATE(zdev, ZULUVM_STATE_INTR_PENDING, in zuluvm_tlb_handler()
293 newstate = ZULUVM_GET_STATE(zdev); in zuluvm_tlb_handler()
306 zuluvm_stop(zdev, state, "softintr1"); in zuluvm_tlb_handler()
307 zulud_tlb_done(zdev, arg, tlbtype, ZULUVM_MISS_CANCELED); in zuluvm_tlb_handler()
314 zdev->intr_flags |= flag; in zuluvm_tlb_handler()
317 mutex_enter(&zdev->proc_lck); in zuluvm_tlb_handler()
322 mutex_exit(&zdev->proc_lck); in zuluvm_tlb_handler()
328 zdev->intr_flags &= ~flag; in zuluvm_tlb_handler()
329 if (zdev->intr_flags | wait) in zuluvm_tlb_handler()
330 cv_broadcast(&zdev->intr_wait); in zuluvm_tlb_handler()
332 state = ZULUVM_SET_STATE(zdev, ZULUVM_STATE_IDLE, in zuluvm_tlb_handler()
335 zuluvm_stop(zdev, state, "softintr3"); in zuluvm_tlb_handler()
337 zulud_tlb_done(zdev, arg, tlbtype, ZULUVM_NO_HAT); in zuluvm_tlb_handler()
341 mutex_exit(&zdev->proc_lck); in zuluvm_tlb_handler()
369 mutex_enter(&zdev->load_lck); in zuluvm_tlb_handler()
370 zdev->in_intr = 1; in zuluvm_tlb_handler()
373 zdev->in_intr = 0; in zuluvm_tlb_handler()
374 mutex_exit(&zdev->load_lck); in zuluvm_tlb_handler()
393 state = ZULUVM_SET_STATE(zdev, ZULUVM_STATE_IDLE, in zuluvm_tlb_handler()
395 newstate = ZULUVM_GET_STATE(zdev); in zuluvm_tlb_handler()
400 zuluvm_stop(zdev, state, "softintr4"); in zuluvm_tlb_handler()
409 zdev->intr_flags &= ~flag; in zuluvm_tlb_handler()
410 if (zdev->intr_flags | wait) in zuluvm_tlb_handler()
411 cv_broadcast(&zdev->intr_wait); in zuluvm_tlb_handler()
417 zulud_tlb_done(zdev, arg, tlbtype, error); in zuluvm_tlb_handler()
427 zuluvm_state_t *zdev = zhat->zdev; in zuluvm_load_tte() local
428 int tlbtype = ZULUVM_GET_TLB_TYPE(zdev); in zuluvm_load_tte()
430 ASSERT(MUTEX_HELD(&zdev->load_lck)); in zuluvm_load_tte()
433 if (zdev->in_intr) { in zuluvm_load_tte()
438 error = zuluvm_write_tte(zdev, zdev->zvm.arg, addr, pfn, in zuluvm_load_tte()
444 state = ZULUVM_SET_STATE(zdev, ZULUVM_STATE_IDLE, in zuluvm_load_tte()
446 newstate = ZULUVM_GET_STATE(zdev); in zuluvm_load_tte()
451 zuluvm_stop(zdev, state, "softintr4"); in zuluvm_load_tte()
473 zdev->intr_flags &= ~flag; in zuluvm_load_tte()
474 if (zdev->intr_flags | wait) in zuluvm_load_tte()
475 cv_broadcast(&zdev->intr_wait); in zuluvm_load_tte()
478 zulud_tlb_done(zdev, zdev->zvm.arg, tlbtype, error); in zuluvm_load_tte()
480 (void) zuluvm_write_tte(zdev, zdev->zvm.arg, addr, pfn, in zuluvm_load_tte()
500 zuluvm_state_t *zdev = (zuluvm_state_t *)devp; in zuluvm_park() local
501 mutex_enter(&zdev->park_lck); in zuluvm_park()
502 zdev->parking = 1; in zuluvm_park()
504 rval = cv_wait_sig(&zdev->park_cv, &zdev->park_lck); in zuluvm_park()
509 zdev->parking = 0; in zuluvm_park()
510 mutex_exit(&zdev->park_lck); in zuluvm_park()
524 zuluvm_state_t *zdev = (zuluvm_state_t *)devp; in zuluvm_softintr() local
525 mutex_enter(&zdev->park_lck); in zuluvm_softintr()
526 if (zdev->parking) { in zuluvm_softintr()
527 cv_signal(&zdev->park_cv); in zuluvm_softintr()
528 mutex_exit(&zdev->park_lck); in zuluvm_softintr()
532 mutex_exit(&zdev->park_lck); in zuluvm_softintr()
535 tlbtype = ZULUVM_GET_TLB_TYPE(zdev); in zuluvm_softintr()
536 arg = zdev->zvm.arg; in zuluvm_softintr()
539 zuluvm_stop(zdev, ZULUVM_STATE_INTR_QUEUED, "fast_intr"); in zuluvm_softintr()
540 zulud_tlb_done(zdev, arg, tlbtype, ZULUVM_NO_TTE); in zuluvm_softintr()
558 zuluvm_state_t *zdev = (zuluvm_state_t *)arg; in zuluvm_demap_page() local
563 ZULUVM_STATS_DEMAP_PAGE(zdev); in zuluvm_demap_page()
565 ddarg = zdev->zvm.arg; in zuluvm_demap_page()
581 zulud_demap_page(zdev, ddarg, in zuluvm_demap_page()
585 zulud_demap_page(zdev, ddarg, vaddr, ctx); in zuluvm_demap_page()
600 zuluvm_state_t *zdev = (zuluvm_state_t *)arg; in zuluvm_demap_ctx() local
605 ZULUVM_STATS_DEMAP_CTX(zdev); in zuluvm_demap_ctx()
609 ddarg = zdev->zvm.arg; in zuluvm_demap_ctx()
612 zulud_demap_ctx(zdev, ddarg, ctx); in zuluvm_demap_ctx()
616 zuluvm_driver_attach(zuluvm_state_t *zdev) in zuluvm_driver_attach() argument
622 zuluvm_devtab[i] = zdev; in zuluvm_driver_attach()
623 ZULUVM_SET_IDLE(zdev); in zuluvm_driver_attach()
631 if (zulu_hat_attach((void *)zdev) != 0) { in zuluvm_driver_attach()
635 mutex_init(&zdev->dev_lck, NULL, MUTEX_DEFAULT, NULL); in zuluvm_driver_attach()
636 mutex_init(&zdev->load_lck, NULL, MUTEX_DEFAULT, NULL); in zuluvm_driver_attach()
637 mutex_init(&zdev->proc_lck, NULL, MUTEX_DEFAULT, NULL); in zuluvm_driver_attach()
638 mutex_init(&zdev->park_lck, NULL, MUTEX_DEFAULT, NULL); in zuluvm_driver_attach()
639 cv_init(&zdev->park_cv, NULL, CV_DEFAULT, NULL); in zuluvm_driver_attach()
640 cv_init(&zdev->intr_wait, NULL, CV_DEFAULT, NULL); in zuluvm_driver_attach()
641 zdev->parking = 0; in zuluvm_driver_attach()
644 zdev->zvm.cancel = 0; in zuluvm_driver_attach()
645 zdev->zvm.pagefault = 0; in zuluvm_driver_attach()
646 zdev->zvm.no_mapping = 0; in zuluvm_driver_attach()
647 zdev->zvm.preload = 0; in zuluvm_driver_attach()
648 zdev->zvm.migrate = 0; in zuluvm_driver_attach()
649 zdev->zvm.pagesize = 0; in zuluvm_driver_attach()
650 zdev->zvm.tlb_miss[0] = 0; in zuluvm_driver_attach()
651 zdev->zvm.tlb_miss[1] = 0; in zuluvm_driver_attach()
652 zdev->zvm.tlb_miss[2] = 0; in zuluvm_driver_attach()
653 zdev->zvm.tlb_miss[3] = 0; in zuluvm_driver_attach()
654 zdev->zvm.itlb1miss = 0; in zuluvm_driver_attach()
655 zdev->zvm.dtlb1miss = 0; in zuluvm_driver_attach()
656 zdev->zvm.itlb2miss = 0; in zuluvm_driver_attach()
657 zdev->zvm.dtlb2miss = 0; in zuluvm_driver_attach()
659 zdev->zvm.pfncnt = 0; in zuluvm_driver_attach()
661 zdev->zvm.pfnbuf[i] = 0; in zuluvm_driver_attach()
663 zdev->zvm.mmu_pa = NULL; in zuluvm_driver_attach()
664 zdev->zvm.proc1 = NULL; in zuluvm_driver_attach()
665 zdev->zvm.proc2 = NULL; in zuluvm_driver_attach()
666 zdev->procs = NULL; in zuluvm_driver_attach()
671 zuluvm_driver_detach(zuluvm_state_t *zdev) in zuluvm_driver_detach() argument
674 cv_destroy(&zdev->intr_wait); in zuluvm_driver_detach()
675 cv_destroy(&zdev->park_cv); in zuluvm_driver_detach()
676 mutex_destroy(&zdev->park_lck); in zuluvm_driver_detach()
677 mutex_destroy(&zdev->proc_lck); in zuluvm_driver_detach()
678 mutex_destroy(&zdev->dev_lck); in zuluvm_driver_detach()
679 mutex_destroy(&zdev->load_lck); in zuluvm_driver_detach()
680 zdev->dops = NULL; in zuluvm_driver_detach()
684 if (zuluvm_devtab[i] == zdev) { in zuluvm_driver_detach()
691 if (zulu_hat_detach((void *)zdev) == 0) { in zuluvm_driver_detach()
741 zuluvm_state_t *zdev; in zuluvm_alloc_device() local
749 zdev = kmem_zalloc(sizeof (zuluvm_state_t), KM_SLEEP); in zuluvm_alloc_device()
750 zdev->dip = devi; in zuluvm_alloc_device()
751 zdev->dops = zuluvm_dops; in zuluvm_alloc_device()
752 error = zuluvm_driver_attach(zdev); in zuluvm_alloc_device()
754 kmem_free(zdev, sizeof (zuluvm_state_t)); in zuluvm_alloc_device()
759 error = zuluvm_get_intr_props(zdev, devi); in zuluvm_alloc_device()
762 error = zuluvm_driver_detach(zdev); in zuluvm_alloc_device()
765 kmem_free(zdev, sizeof (zuluvm_state_t)); in zuluvm_alloc_device()
768 zdev->zvm.arg = arg; in zuluvm_alloc_device()
769 zdev->zvm.mmu_pa = (uint64_t)va_to_pa((void *)mmu); in zuluvm_alloc_device()
770 zdev->imr = (uint64_t *)imr; in zuluvm_alloc_device()
771 zdev->zvm.dmv_intr = dmv_add_softintr(zuluvm_dmv_tlbmiss_tl1, in zuluvm_alloc_device()
772 (void *)zdev); in zuluvm_alloc_device()
773 zulud_set_itlb_pc(zdev, arg, DMV_MAKE_DMV(zdev->zvm.dmv_intr, in zuluvm_alloc_device()
774 (void *)zdev)); in zuluvm_alloc_device()
775 zulud_set_dtlb_pc(zdev, arg, DMV_MAKE_DMV(zdev->zvm.dmv_intr, in zuluvm_alloc_device()
776 (void *)zdev)); in zuluvm_alloc_device()
777 intr_dist_add(zuluvm_retarget_intr, (void *)zdev); in zuluvm_alloc_device()
778 zuluvm_do_retarget(zdev); in zuluvm_alloc_device()
780 (caddr_t)zdev, SOFTINT_ST); in zuluvm_alloc_device()
781 zdev->zvm.intr_num = intr_num; in zuluvm_alloc_device()
782 *devp = (caddr_t)zdev; in zuluvm_alloc_device()
796 zuluvm_state_t *zdev = (zuluvm_state_t *)devp; in zuluvm_free_device() local
799 tnf_opaque, zdev, zdev); in zuluvm_free_device()
801 if (zdev == NULL) in zuluvm_free_device()
804 if (zdev->zvm.arg == NULL) { in zuluvm_free_device()
810 (void) dmv_rem_intr(zdev->zvm.dmv_intr); in zuluvm_free_device()
811 (void) rem_softintr(zdev->zvm.intr_num); in zuluvm_free_device()
812 intr_dist_rem(zuluvm_retarget_intr, (void *)zdev); in zuluvm_free_device()
813 zdev->zvm.arg = NULL; in zuluvm_free_device()
815 error = zuluvm_driver_detach(zdev); in zuluvm_free_device()
818 zdev->dops = NULL; in zuluvm_free_device()
819 kmem_free(zdev, sizeof (zuluvm_state_t)); in zuluvm_free_device()
830 zuluvm_find_proc(zuluvm_state_t *zdev, struct as *asp) in zuluvm_find_proc() argument
834 tnf_opaque, zdev, zdev, in zuluvm_find_proc()
836 for (p = zdev->procs; p != NULL; p = p->next) { in zuluvm_find_proc()
851 zuluvm_state_t *zdev = proc->zdev; in zuluvm_as_free() local
866 mutex_enter(&zdev->proc_lck); in zuluvm_as_free()
869 mutex_exit(&zdev->proc_lck); in zuluvm_as_free()
873 if (proc == zdev->zvm.proc1) { in zuluvm_as_free()
877 if (proc == zdev->zvm.proc2) { in zuluvm_as_free()
882 zdev->intr_flags |= flag; in zuluvm_as_free()
886 while (zdev->intr_flags & wait) { in zuluvm_as_free()
887 cv_wait(&zdev->intr_wait, &zdev->dev_lck); in zuluvm_as_free()
889 zdev->intr_flags &= ~flag; in zuluvm_as_free()
905 mutex_enter(&zdev->proc_lck); in zuluvm_as_free()
906 (void) zuluvm_proc_release(zdev, proc); in zuluvm_as_free()
907 mutex_exit(&zdev->proc_lck); in zuluvm_as_free()
920 zuluvm_state_t *zdev = (zuluvm_state_t *)devp; in zuluvm_dma_add_proc() local
923 tnf_opaque, zdev, zdev); in zuluvm_dma_add_proc()
924 mutex_enter(&zdev->proc_lck); in zuluvm_dma_add_proc()
925 proc = zuluvm_find_proc(zdev, asp); in zuluvm_dma_add_proc()
928 proc->zhat = zulu_hat_proc_attach(asp, zdev); in zuluvm_dma_add_proc()
930 mutex_exit(&zdev->proc_lck); in zuluvm_dma_add_proc()
937 proc->zdev = zdev; in zuluvm_dma_add_proc()
940 proc->next = zdev->procs; in zuluvm_dma_add_proc()
941 if (zdev->procs) in zuluvm_dma_add_proc()
942 zdev->procs->prev = proc; in zuluvm_dma_add_proc()
944 zdev->procs = proc; in zuluvm_dma_add_proc()
950 mutex_exit(&zdev->proc_lck); in zuluvm_dma_add_proc()
959 mutex_exit(&zdev->proc_lck); in zuluvm_dma_add_proc()
968 zuluvm_proc_hold(zuluvm_state_t *zdev, zuluvm_proc_t *proc) in zuluvm_proc_hold() argument
970 mutex_enter(&zdev->proc_lck); in zuluvm_proc_hold()
972 mutex_exit(&zdev->proc_lck); in zuluvm_proc_hold()
979 zuluvm_proc_release(zuluvm_state_t *zdev, zuluvm_proc_t *proc) in zuluvm_proc_release() argument
982 ASSERT(MUTEX_HELD(&zdev->proc_lck)); in zuluvm_proc_release()
985 tnf_opaque, zdev, zdev, in zuluvm_proc_release()
994 zdev->procs = proc->next; in zuluvm_proc_release()
1009 zuluvm_state_t *zdev = (zuluvm_state_t *)devp; in zuluvm_dma_delete_proc() local
1012 tnf_opaque, zdev, zdev, in zuluvm_dma_delete_proc()
1014 mutex_enter(&zdev->proc_lck); in zuluvm_dma_delete_proc()
1022 refcnt = zuluvm_proc_release(zdev, proc); in zuluvm_dma_delete_proc()
1024 mutex_exit(&zdev->proc_lck); in zuluvm_dma_delete_proc()
1040 zuluvm_state_t *zdev = (zuluvm_state_t *)devp; in zuluvm_fast_tlb_wait() local
1044 state = ZULUVM_GET_STATE(zdev); in zuluvm_fast_tlb_wait()
1060 zuluvm_state_t *zdev = (zuluvm_state_t *)devp; in zuluvm_dma_alloc_ctx() local
1070 state = ZULUVM_SET_STATE(zdev, ZULUVM_STATE_IDLE, in zuluvm_dma_alloc_ctx()
1072 newstate = ZULUVM_GET_STATE(zdev); in zuluvm_dma_alloc_ctx()
1084 state = ZULUVM_SET_STATE(zdev, ZULUVM_STATE_IDLE, in zuluvm_dma_alloc_ctx()
1096 if (zdev->zvm.arg != NULL) { in zuluvm_dma_alloc_ctx()
1100 mutex_enter(&zdev->proc_lck); in zuluvm_dma_alloc_ctx()
1101 proc = zuluvm_find_proc(zdev, asp); in zuluvm_dma_alloc_ctx()
1106 mutex_exit(&zdev->proc_lck); in zuluvm_dma_alloc_ctx()
1111 zdev->zvm.proc1 = proc; in zuluvm_dma_alloc_ctx()
1117 zdev->zvm.proc2 = proc; in zuluvm_dma_alloc_ctx()
1122 mutex_enter(&zdev->proc_lck); in zuluvm_dma_alloc_ctx()
1123 (void) zuluvm_proc_release(zdev, proc); in zuluvm_dma_alloc_ctx()
1124 mutex_exit(&zdev->proc_lck); in zuluvm_dma_alloc_ctx()
1135 mutex_enter(&zdev->proc_lck); in zuluvm_dma_alloc_ctx()
1136 (void) zuluvm_proc_release(zdev, proc); in zuluvm_dma_alloc_ctx()
1137 mutex_exit(&zdev->proc_lck); in zuluvm_dma_alloc_ctx()
1164 zuluvm_state_t *zdev = (zuluvm_state_t *)devp; in zuluvm_dma_preload() local
1174 proc = zdev->zvm.proc1; in zuluvm_dma_preload()
1177 proc = zdev->zvm.proc2; in zuluvm_dma_preload()
1181 mutex_enter(&zdev->proc_lck); in zuluvm_dma_preload()
1183 mutex_exit(&zdev->proc_lck); in zuluvm_dma_preload()
1187 mutex_exit(&zdev->proc_lck); in zuluvm_dma_preload()
1196 mutex_enter(&zdev->load_lck); in zuluvm_dma_preload()
1215 ZULUVM_STATS_PRELOAD(zdev); in zuluvm_dma_preload()
1229 mutex_exit(&zdev->load_lck); in zuluvm_dma_preload()
1242 zuluvm_state_t *zdev = (zuluvm_state_t *)devp; in zuluvm_dma_free_ctx() local
1245 state = ZULUVM_SET_STATE(zdev, ZULUVM_STATE_STOPPED, in zuluvm_dma_free_ctx()
1247 newstate = ZULUVM_GET_STATE(zdev); in zuluvm_dma_free_ctx()
1266 state = ZULUVM_SET_STATE(zdev, in zuluvm_dma_free_ctx()
1271 state = ZULUVM_SET_STATE(zdev, in zuluvm_dma_free_ctx()
1288 state = ZULUVM_GET_STATE(zdev); in zuluvm_dma_free_ctx()
1298 if (zdev->zvm.arg != NULL) { in zuluvm_dma_free_ctx()
1302 proc = zdev->zvm.proc1; in zuluvm_dma_free_ctx()
1303 zdev->zvm.proc1 = NULL; in zuluvm_dma_free_ctx()
1306 proc = zdev->zvm.proc2; in zuluvm_dma_free_ctx()
1307 zdev->zvm.proc2 = NULL; in zuluvm_dma_free_ctx()
1314 mutex_enter(&zdev->proc_lck); in zuluvm_dma_free_ctx()
1315 (void) zuluvm_proc_release(zdev, proc); in zuluvm_dma_free_ctx()
1316 mutex_exit(&zdev->proc_lck); in zuluvm_dma_free_ctx()
1328 zuluvm_do_retarget(zuluvm_state_t *zdev) in zuluvm_do_retarget() argument
1333 if (zdev->interrupts[i].ino != -1) { in zuluvm_do_retarget()
1335 idx = zdev->interrupts[i].offset; in zuluvm_do_retarget()
1336 if (zdev->imr[idx] & ZULUVM_IMR_V_MASK) in zuluvm_do_retarget()
1337 zdev->imr[idx] = ZULUVM_IMR_V_MASK | in zuluvm_do_retarget()
1340 zdev->imr[idx] = in zuluvm_do_retarget()
1349 zuluvm_state_t *zdev = (zuluvm_state_t *)arg; in zuluvm_retarget_intr() local
1351 zuluvm_do_retarget(zdev); in zuluvm_retarget_intr()
1359 zuluvm_state_t *zdev = (zuluvm_state_t *)devp; in zuluvm_add_intr() local
1365 if (ddi_add_intr(zdev->dip, ino, NULL, NULL, handler, arg) in zuluvm_add_intr()
1377 zuluvm_state_t *zdev = (zuluvm_state_t *)devp; in zuluvm_rem_intr() local
1385 zdev->imr[zdev->interrupts[ino].offset] &= ~ZULUVM_IMR_V_MASK; in zuluvm_rem_intr()
1387 ddi_remove_intr(zdev->dip, ino, NULL); in zuluvm_rem_intr()
1394 zuluvm_state_t *zdev = (zuluvm_state_t *)devp; in zuluvm_enable_intr() local
1410 zdev->imr[num] |= ZULUVM_IMR_V_MASK; in zuluvm_enable_intr()
1420 zuluvm_state_t *zdev = (zuluvm_state_t *)devp; in zuluvm_disable_intr() local
1436 zdev->imr[num] &= ~ZULUVM_IMR_V_MASK; in zuluvm_disable_intr()
1444 zuluvm_get_intr_props(zuluvm_state_t *zdev, in zuluvm_get_intr_props() argument
1451 zdev->agentid = ddi_getprop(DDI_DEV_T_ANY, devi, DDI_PROP_DONTPASS, in zuluvm_get_intr_props()
1453 if (zdev->agentid == -1) { in zuluvm_get_intr_props()
1461 zdev->interrupts[i].offset = 0; in zuluvm_get_intr_props()
1462 zdev->interrupts[i].ino = -1; in zuluvm_get_intr_props()
1483 zdev->interrupts[i].offset = intr[i]; in zuluvm_get_intr_props()
1484 zdev->interrupts[i].ino = i; in zuluvm_get_intr_props()