Lines Matching refs:intrmap

46 #define	INTRMAP_PRIVATE(intrmap) ((intrmap_private_t *)intrmap)  argument
232 alloc_tbl_entry(intrmap_t *intrmap) in alloc_tbl_entry() argument
237 mutex_enter(&intrmap->intrmap_lock); in alloc_tbl_entry()
238 idx = intrmap->intrmap_free; in alloc_tbl_entry()
240 bitset_add(&intrmap->intrmap_map, idx); in alloc_tbl_entry()
241 intrmap->intrmap_free = in alloc_tbl_entry()
242 bitset_find_free(&intrmap->intrmap_map, idx + 1); in alloc_tbl_entry()
243 mutex_exit(&intrmap->intrmap_lock); in alloc_tbl_entry()
248 mutex_exit(&intrmap->intrmap_lock); in alloc_tbl_entry()
266 alloc_tbl_multi_entries(intrmap_t *intrmap, uint_t cnt) in alloc_tbl_multi_entries() argument
271 mutex_enter(&intrmap->intrmap_lock); in alloc_tbl_multi_entries()
272 pos = intrmap->intrmap_free; in alloc_tbl_multi_entries()
273 idx = bitset_find_multi_free(&intrmap->intrmap_map, pos, cnt); in alloc_tbl_multi_entries()
277 intrmap->intrmap_free = bitset_find_free( in alloc_tbl_multi_entries()
278 &intrmap->intrmap_map, idx + cnt); in alloc_tbl_multi_entries()
281 bitset_add(&intrmap->intrmap_map, idx + i); in alloc_tbl_multi_entries()
283 mutex_exit(&intrmap->intrmap_lock); in alloc_tbl_multi_entries()
287 mutex_exit(&intrmap->intrmap_lock); in alloc_tbl_multi_entries()
304 intrmap_t *intrmap; in init_unit() local
346 intrmap = kmem_zalloc(sizeof (intrmap_t), KM_SLEEP); in init_unit()
352 &(intrmap->intrmap_dma_hdl)) != DDI_SUCCESS) { in init_unit()
353 kmem_free(intrmap, sizeof (intrmap_t)); in init_unit()
357 intrmap->intrmap_size = 1 << (intrmap_irta_s + 1); in init_unit()
358 size = intrmap->intrmap_size * INTRMAP_RTE_SIZE; in init_unit()
359 if (ddi_dma_mem_alloc(intrmap->intrmap_dma_hdl, in init_unit()
365 &(intrmap->intrmap_vaddr), in init_unit()
367 &(intrmap->intrmap_acc_hdl)) != DDI_SUCCESS) { in init_unit()
368 ddi_dma_free_handle(&(intrmap->intrmap_dma_hdl)); in init_unit()
369 kmem_free(intrmap, sizeof (intrmap_t)); in init_unit()
373 ASSERT(!((uintptr_t)intrmap->intrmap_vaddr & MMU_PAGEOFFSET)); in init_unit()
374 bzero(intrmap->intrmap_vaddr, size); in init_unit()
375 intrmap->intrmap_paddr = pfn_to_pa( in init_unit()
376 hat_getpfnum(kas.a_hat, intrmap->intrmap_vaddr)); in init_unit()
378 mutex_init(&(intrmap->intrmap_lock), NULL, MUTEX_DRIVER, NULL); in init_unit()
379 bitset_init(&intrmap->intrmap_map); in init_unit()
380 bitset_resize(&intrmap->intrmap_map, intrmap->intrmap_size); in init_unit()
381 intrmap->intrmap_free = 0; in init_unit()
383 immu->immu_intrmap = intrmap; in init_unit()
481 intrmap_t *intrmap; in intrmap_enable() local
484 intrmap = immu->immu_intrmap; in intrmap_enable()
486 irta_reg = intrmap->intrmap_paddr | intrmap_irta_s; in intrmap_enable()
671 intrmap_t *intrmap; in immu_intrmap_alloc() local
693 intrmap = immu->immu_intrmap; in immu_intrmap_alloc()
696 idx = alloc_tbl_entry(intrmap); in immu_intrmap_alloc()
698 idx = alloc_tbl_multi_entries(intrmap, count); in immu_intrmap_alloc()
752 intrmap_t *intrmap; in immu_intrmap_map() local
766 intrmap = immu->immu_intrmap; in immu_intrmap_map()
802 bcopy(&irte, intrmap->intrmap_vaddr + in immu_intrmap_map()
814 bcopy(&irte, intrmap->intrmap_vaddr + in immu_intrmap_map()
831 intrmap_t *intrmap; in immu_intrmap_free() local
841 intrmap = immu->immu_intrmap; in immu_intrmap_free()
844 bzero(intrmap->intrmap_vaddr + idx * INTRMAP_RTE_SIZE, in immu_intrmap_free()
849 mutex_enter(&intrmap->intrmap_lock); in immu_intrmap_free()
850 bitset_del(&intrmap->intrmap_map, idx); in immu_intrmap_free()
851 if (intrmap->intrmap_free == INTRMAP_IDX_FULL) { in immu_intrmap_free()
852 intrmap->intrmap_free = idx; in immu_intrmap_free()
854 mutex_exit(&intrmap->intrmap_lock); in immu_intrmap_free()