Lines Matching refs:domain
79 static boolean_t dvma_map(domain_t *domain, uint64_t sdvma,
188 domain_t *domain; in bdf_domain_lookup() local
198 domain = NULL; in bdf_domain_lookup()
200 (void *)bdf, (void *)&domain) == 0) { in bdf_domain_lookup()
201 ASSERT(domain); in bdf_domain_lookup()
202 ASSERT(domain->dom_did > 0); in bdf_domain_lookup()
203 return (domain); in bdf_domain_lookup()
210 bdf_domain_insert(immu_devi_t *immu_devi, domain_t *domain) in bdf_domain_insert() argument
221 (void) mod_hash_insert(bdf_domain_hash, (void *)bdf, (void *)domain); in bdf_domain_insert()
776 domain_t *domain; in immu_devi_domain() local
787 domain = immu_devi->imd_domain; in immu_devi_domain()
791 if (domain) in immu_devi_domain()
794 return (domain); in immu_devi_domain()
829 domain_t *domain; in get_branch_domain() local
886 domain = immu_devi->imd_domain; in get_branch_domain()
890 if (domain && ddip) { in get_branch_domain()
893 ASSERT(domain == dvp->dva_domain); in get_branch_domain()
895 dvp->dva_domain = domain; in get_branch_domain()
906 domain = bdf_domain_lookup(immu_devi); in get_branch_domain()
907 if (domain == NULL) { in get_branch_domain()
916 dvp->dva_domain = domain; in get_branch_domain()
918 dvp->dva_domain = domain; in get_branch_domain()
930 map_unity_domain(domain_t *domain) in map_unity_domain() argument
950 (void) dvma_map(domain, 0, 1, dcookies, dcount, NULL, in map_unity_domain()
969 (void) dvma_map(domain, start, npages, dcookies, in map_unity_domain()
972 ddi_err(DER_LOG, domain->dom_dip, "iommu: mapping PHYS span [0x%" PRIx64 in map_unity_domain()
977 ddi_err(DER_LOG, domain->dom_dip, in map_unity_domain()
987 (void) dvma_map(domain, start, npages, in map_unity_domain()
994 ddi_err(DER_LOG, domain->dom_dip, in map_unity_domain()
1004 (void) dvma_map(domain, start, npages, in map_unity_domain()
1019 create_xlate_arena(immu_t *immu, domain_t *domain, in create_xlate_arena() argument
1031 arena_name = domain->dom_dvma_arena_name; in create_xlate_arena()
1035 sizeof (domain->dom_dvma_arena_name), in create_xlate_arena()
1037 domain->dom_did); in create_xlate_arena()
1072 domain->dom_dvma_arena = vmem_create(arena_name, in create_xlate_arena()
1082 if (domain->dom_dvma_arena == NULL) { in create_xlate_arena()
1085 "for domain ID (%d)", arena_name, domain->dom_did); in create_xlate_arena()
1107 vmem_ret = vmem_add(domain->dom_dvma_arena, in create_xlate_arena()
1114 arena_name, domain->dom_did); in create_xlate_arena()
1131 domain_t *domain) in set_domain() argument
1150 ASSERT(fdomain == domain); in set_domain()
1152 immu_devi->imd_domain = domain; in set_domain()
1175 domain_t *domain; in device_domain() local
1186 domain = immu_devi_domain(rdip, &ddip); in device_domain()
1187 if (domain) { in device_domain()
1189 return (domain); in device_domain()
1222 domain = dvarg.dva_domain; /* may be NULL */ in device_domain()
1241 if (domain) { in device_domain()
1246 domain = domain_create(immu, ddip, rdip, immu_flags); in device_domain()
1247 if (domain == NULL) { in device_domain()
1258 set_domain(ddip, ddip, domain); in device_domain()
1259 set_domain(rdip, ddip, domain); in device_domain()
1262 return (domain); in device_domain()
1268 domain_t *domain; in create_unity_domain() local
1271 domain = kmem_zalloc(sizeof (domain_t), KM_SLEEP); in create_unity_domain()
1273 rw_init(&(domain->dom_pgtable_rwlock), NULL, RW_DEFAULT, NULL); in create_unity_domain()
1275 domain->dom_did = IMMU_UNITY_DID; in create_unity_domain()
1276 domain->dom_maptype = IMMU_MAPTYPE_UNITY; in create_unity_domain()
1278 domain->dom_immu = immu; in create_unity_domain()
1279 immu->immu_unity_domain = domain; in create_unity_domain()
1285 domain->dom_pgtable_root = pgtable_alloc(immu, IMMU_FLAGS_SLEEP); in create_unity_domain()
1286 pgtable_zero(domain->dom_pgtable_root); in create_unity_domain()
1294 map_unity_domain(domain); in create_unity_domain()
1301 list_insert_tail(&immu_unity_domain_list, domain); in create_unity_domain()
1316 domain_t *domain; in domain_create() local
1338 domain = kmem_zalloc(sizeof (domain_t), kmflags); in domain_create()
1339 if (domain == NULL) { in domain_create()
1345 rw_init(&(domain->dom_pgtable_rwlock), NULL, RW_DEFAULT, NULL); in domain_create()
1350 domain->dom_did = did; in domain_create()
1351 domain->dom_immu = immu; in domain_create()
1352 domain->dom_maptype = IMMU_MAPTYPE_XLATE; in domain_create()
1353 domain->dom_dip = ddip; in domain_create()
1358 create_xlate_arena(immu, domain, rdip, immu_flags); in domain_create()
1363 domain->dom_pgtable_root = pgtable_alloc(immu, immu_flags); in domain_create()
1364 if (domain->dom_pgtable_root == NULL) { in domain_create()
1367 domain->dom_did, immu->immu_name); in domain_create()
1370 pgtable_zero(domain->dom_pgtable_root); in domain_create()
1377 list_insert_head(&immu->immu_domain_list, domain); in domain_create()
1384 list_insert_head(&immu_xlate_domain_list, domain); in domain_create()
1387 bdf_domain_insert(immu_devi, domain); in domain_create()
1396 (void) dvma_map(domain, 0, 1, dcookies, dcount, NULL, in domain_create()
1399 return (domain); in domain_create()
1449 context_set(immu_t *immu, domain_t *domain, pgtable_t *root_table, in context_set() argument
1462 pgtable_root = domain->dom_pgtable_root; in context_set()
1512 immu_flush_context_fsi(immu, 0, sid, domain->dom_did, in context_set()
1516 CONT_SET_DID(hw_cent, domain->dom_did); in context_set()
1519 if (domain->dom_did == IMMU_UNITY_DID && in context_set()
1629 immu_context_update(immu_t *immu, domain_t *domain, dev_info_t *ddip, in immu_context_update() argument
1677 context_set(immu, domain, immu->immu_ctx_root, r_bus, in immu_context_update()
1686 context_set(immu, domain, immu->immu_ctx_root, r_bus, in immu_context_update()
1696 context_set(immu, domain, immu->immu_ctx_root, in immu_context_update()
1699 context_set(immu, domain, immu->immu_ctx_root, in immu_context_update()
1709 context_set(immu, domain, immu->immu_ctx_root, in immu_context_update()
1718 context_set(immu, domain, immu->immu_ctx_root, d_bus, in immu_context_update()
1725 context_set(immu, domain, immu->immu_ctx_root, d_bus, in immu_context_update()
1846 PTE_clear_all(immu_t *immu, domain_t *domain, xlate_t *xlate, in PTE_clear_all() argument
1908 PDE_lookup(domain_t *domain, xlate_t *xlate, int nlevels) in PDE_lookup() argument
1918 xlate->xlt_pgtable = domain->dom_pgtable_root; in PDE_lookup()
1970 domain_t *domain; in immu_print_fault_info() local
1975 (void *)(uintptr_t)sid, (void *)&domain) != 0) { in immu_print_fault_info()
1981 immu = domain->dom_immu; in immu_print_fault_info()
1984 vmem_walk(domain->dom_dvma_arena, VMEM_ALLOC, immu_fault_walk, in immu_print_fault_info()
1987 ddi_err(DER_WARN, domain->dom_dip, in immu_print_fault_info()
1993 if (!PDE_lookup(domain, xlate, nlevels)) { in immu_print_fault_info()
1994 ddi_err(DER_WARN, domain->dom_dip, in immu_print_fault_info()
1996 domain->dom_did, dvma); in immu_print_fault_info()
2004 ddi_err(DER_WARN, domain->dom_dip, in immu_print_fault_info()
2005 "domid %d pte: %" PRIx64 "(paddr %" PRIx64 ")", domain->dom_did, in immu_print_fault_info()
2094 PTE_set_all(immu_t *immu, domain_t *domain, xlate_t *xlate, in PTE_set_all() argument
2241 PDE_set_all(immu_t *immu, domain_t *domain, xlate_t *xlate, int nlevels, in PDE_set_all() argument
2257 xlate->xlt_pgtable = domain->dom_pgtable_root; in PDE_set_all()
2350 dvma_map(domain_t *domain, uint64_t sdvma, uint64_t snvpages, in dvma_map() argument
2356 immu_t *immu = domain->dom_immu; in dvma_map()
2368 if (PDE_set_all(immu, domain, xlate, nlevels, rdip, immu_flags) in dvma_map()
2374 PTE_set_all(immu, domain, &xlate[1], &dvma, &n, dcookies, in dvma_map()
2393 dvma_unmap(domain_t *domain, uint64_t sdvma, uint64_t snpages, in dvma_unmap() argument
2396 immu_t *immu = domain->dom_immu; in dvma_unmap()
2410 if (!PDE_lookup(domain, xlate, nlevels)) in dvma_unmap()
2416 PTE_clear_all(immu, domain, &xlate[1], &dvma, &n, rdip); in dvma_unmap()
2423 dvma_alloc(domain_t *domain, ddi_dma_attr_t *dma_attr, uint_t npages, int kmf) in dvma_alloc() argument
2443 dvma = (uint64_t)(uintptr_t)vmem_xalloc(domain->dom_dvma_arena, in dvma_alloc()
2461 domain_t *domain; in dvma_prealloc() local
2464 domain = IMMU_DEVI(rdip)->imd_domain; in dvma_prealloc()
2465 immu = domain->dom_immu; in dvma_prealloc()
2479 dvma = (uint64_t)(uintptr_t)vmem_xalloc(domain->dom_dvma_arena, in dvma_prealloc()
2499 (void) PDE_set_all(immu, domain, xlate, nlevels, rdip, in dvma_prealloc()
2507 PTE_set_all(immu, domain, xlp, &dvma, &n, &immu_precookie, in dvma_prealloc()
2526 domain_t *domain; in dvma_prefree() local
2528 domain = IMMU_DEVI(rdip)->imd_domain; in dvma_prefree()
2531 dvma_unmap(domain, ihp->ihp_predvma, IMMU_NPREPTES, rdip); in dvma_prefree()
2532 vmem_free(domain->dom_dvma_arena, in dvma_prefree()
2539 dvma_free(domain_t *domain, uint64_t dvma, uint64_t npages) in dvma_free() argument
2543 if (domain->dom_maptype != IMMU_MAPTYPE_XLATE) in dvma_free()
2546 vmem_free(domain->dom_dvma_arena, (void *)(uintptr_t)dvma, size); in dvma_free()
2554 domain_t *domain; in immu_map_dvmaseg() local
2570 domain = IMMU_DEVI(rdip)->imd_domain; in immu_map_dvmaseg()
2571 immu = domain->dom_immu; in immu_map_dvmaseg()
2636 sdvma = dvma_alloc(domain, attrp, npgalloc, in immu_map_dvmaseg()
2682 if (dvma_map(domain, dvma, in immu_map_dvmaseg()
2710 if (dvma_map(domain, dvma, npages, dcookies, in immu_map_dvmaseg()
2716 immu_flush_iotlb_psi(immu, domain->dom_did, sdvma, npgalloc, in immu_map_dvmaseg()
2737 domain_t *domain; in immu_unmap_dvmaseg() local
2740 domain = IMMU_DEVI(rdip)->imd_domain; in immu_unmap_dvmaseg()
2748 dvma_unmap(domain, dvma, npages, rdip); in immu_unmap_dvmaseg()
2750 dvma_free(domain, dvma, npages); in immu_unmap_dvmaseg()
2761 immu_regs_wbf_flush(domain->dom_immu); in immu_unmap_dvmaseg()
2837 domain_t *domain; in immu_dvma_physmem_update() local
2846 domain = list_head(&immu_unity_domain_list); in immu_dvma_physmem_update()
2847 for (; domain; domain = list_next(&immu_unity_domain_list, domain)) { in immu_dvma_physmem_update()
2851 if (IMMU_ECAP_GET_PT(domain->dom_immu->immu_regs_excap)) in immu_dvma_physmem_update()
2855 ddi_err(DER_LOG, domain->dom_dip, in immu_dvma_physmem_update()
2865 (void) dvma_map(domain, start, npages, in immu_dvma_physmem_update()
2877 domain_t *domain; in immu_dvma_device_setup() local
2922 domain = device_domain(rdip, &ddip, immu_flags); in immu_dvma_device_setup()
2923 if (domain == NULL) { in immu_dvma_device_setup()
2928 immu = domain->dom_immu; in immu_dvma_device_setup()
2935 if (domain->dom_did == 0 || ddip == NULL) { in immu_dvma_device_setup()
2937 domain->dom_did, ddip); in immu_dvma_device_setup()
2942 set_domain(odip, ddip, domain); in immu_dvma_device_setup()
2947 if (immu_context_update(immu, domain, ddip, rdip, immu_flags) in immu_dvma_device_setup()
2962 domain_t *domain; in immu_map_memrange() local
2968 domain = IMMU_DEVI(rdip)->imd_domain; in immu_map_memrange()
2969 immu = domain->dom_immu; in immu_map_memrange()
2971 pde_set = dvma_map(domain, mrng->mrng_start, in immu_map_memrange()
2977 immu_flush_iotlb_psi(immu, domain->dom_did, mrng->mrng_start, in immu_map_memrange()