Lines Matching refs:immu
796 immu_t *immu; in immu_state_alloc() local
806 immu = kmem_zalloc(sizeof (immu_t), KM_SLEEP); in immu_state_alloc()
808 mutex_init(&(immu->immu_lock), NULL, MUTEX_DRIVER, NULL); in immu_state_alloc()
810 mutex_enter(&(immu->immu_lock)); in immu_state_alloc()
812 immu->immu_dmar_unit = dmar_unit; in immu_state_alloc()
813 immu->immu_dip = immu_dmar_unit_dip(dmar_unit); in immu_state_alloc()
815 nodename = ddi_node_name(immu->immu_dip); in immu_state_alloc()
816 instance = ddi_get_instance(immu->immu_dip); in immu_state_alloc()
818 immu->immu_name = immu_alloc_name(nodename, instance); in immu_state_alloc()
819 if (immu->immu_name == NULL) in immu_state_alloc()
827 mutex_init(&(immu->immu_intr_lock), NULL, MUTEX_DRIVER, in immu_state_alloc()
831 mutex_init(&(immu->immu_regs_lock), NULL, MUTEX_DEFAULT, NULL); in immu_state_alloc()
832 cv_init(&(immu->immu_regs_cv), NULL, CV_DEFAULT, NULL); in immu_state_alloc()
833 immu->immu_regs_busy = B_FALSE; in immu_state_alloc()
836 immu->immu_dvma_coherent = B_FALSE; in immu_state_alloc()
839 rw_init(&(immu->immu_ctx_rwlock), NULL, RW_DEFAULT, NULL); in immu_state_alloc()
842 list_create(&(immu->immu_domain_list), sizeof (domain_t), in immu_state_alloc()
846 immu->immu_dvma_gfx_only = B_FALSE; in immu_state_alloc()
847 list_create(&(immu->immu_dvma_lpc_list), sizeof (immu_devi_t), in immu_state_alloc()
849 list_create(&(immu->immu_dvma_gfx_list), sizeof (immu_devi_t), in immu_state_alloc()
853 mutex_init(&(immu->immu_intrmap_lock), NULL, MUTEX_DEFAULT, NULL); in immu_state_alloc()
856 mutex_init(&(immu->immu_qinv_lock), NULL, MUTEX_DEFAULT, NULL); in immu_state_alloc()
861 list_insert_tail(&immu_list, immu); in immu_state_alloc()
871 immu->immu_pgtable_cache = kmem_cache_create(pcachename, in immu_state_alloc()
872 sizeof (pgtable_t), 0, pgtable_ctor, pgtable_dtor, NULL, immu, in immu_state_alloc()
874 immu->immu_hdl_cache = kmem_cache_create(hcachename, in immu_state_alloc()
876 NULL, NULL, immu, NULL, 0); in immu_state_alloc()
878 mutex_exit(&(immu->immu_lock)); in immu_state_alloc()
880 ddi_err(DER_LOG, immu->immu_dip, "unit setup"); in immu_state_alloc()
882 immu_dmar_set_immu(dmar_unit, immu); in immu_state_alloc()
925 immu_t *immu; in immu_subsystems_startup() local
932 immu = list_head(&immu_list); in immu_subsystems_startup()
933 for (; immu; immu = list_next(&immu_list, immu)) { in immu_subsystems_startup()
935 mutex_enter(&(immu->immu_lock)); in immu_subsystems_startup()
937 immu_intr_register(immu); in immu_subsystems_startup()
938 immu_dvma_startup(immu); in immu_subsystems_startup()
939 immu_intrmap_startup(immu); in immu_subsystems_startup()
940 immu_qinv_startup(immu); in immu_subsystems_startup()
949 immu_regs_startup(immu); in immu_subsystems_startup()
951 mutex_exit(&(immu->immu_lock)); in immu_subsystems_startup()
955 iommulib_ops->ilops_data = (void *)immu; in immu_subsystems_startup()
956 (void) iommulib_iommu_register(immu->immu_dip, iommulib_ops, in immu_subsystems_startup()
957 &immu->immu_iommulib_handle); in immu_subsystems_startup()
1213 immu_t *immu; in immu_quiesce() local
1223 immu = list_head(&immu_list); in immu_quiesce()
1224 for (; immu; immu = list_next(&immu_list, immu)) { in immu_quiesce()
1227 if (immu->immu_regs_running == B_FALSE) in immu_quiesce()
1231 rw_enter(&(immu->immu_ctx_rwlock), RW_WRITER); in immu_quiesce()
1232 immu_flush_context_gbl(immu, &immu->immu_ctx_inv_wait); in immu_quiesce()
1233 immu_flush_iotlb_gbl(immu, &immu->immu_ctx_inv_wait); in immu_quiesce()
1234 rw_exit(&(immu->immu_ctx_rwlock)); in immu_quiesce()
1235 immu_regs_wbf_flush(immu); in immu_quiesce()
1237 mutex_enter(&(immu->immu_lock)); in immu_quiesce()
1243 immu_regs_shutdown(immu); in immu_quiesce()
1244 immu_regs_suspend(immu); in immu_quiesce()
1247 if (immu->immu_regs_running == B_TRUE) in immu_quiesce()
1250 immu->immu_regs_quiesced = B_TRUE; in immu_quiesce()
1252 mutex_exit(&(immu->immu_lock)); in immu_quiesce()
1271 immu_t *immu; in immu_unquiesce() local
1281 immu = list_head(&immu_list); in immu_unquiesce()
1282 for (; immu; immu = list_next(&immu_list, immu)) { in immu_unquiesce()
1284 mutex_enter(&(immu->immu_lock)); in immu_unquiesce()
1287 if (immu->immu_regs_quiesced == B_FALSE) { in immu_unquiesce()
1288 mutex_exit(&(immu->immu_lock)); in immu_unquiesce()
1292 if (immu_regs_resume(immu) != DDI_SUCCESS) { in immu_unquiesce()
1294 mutex_exit(&(immu->immu_lock)); in immu_unquiesce()
1299 rw_enter(&(immu->immu_ctx_rwlock), RW_WRITER); in immu_unquiesce()
1300 immu_flush_context_gbl(immu, &immu->immu_ctx_inv_wait); in immu_unquiesce()
1301 immu_flush_iotlb_gbl(immu, &immu->immu_ctx_inv_wait); in immu_unquiesce()
1302 rw_exit(&(immu->immu_ctx_rwlock)); in immu_unquiesce()
1311 immu_regs_startup(immu); in immu_unquiesce()
1313 if (immu->immu_regs_running == B_FALSE) { in immu_unquiesce()
1318 immu->immu_regs_quiesced = B_FALSE; in immu_unquiesce()
1321 mutex_exit(&(immu->immu_lock)); in immu_unquiesce()