intrmap
alloc_tbl_entry(intrmap_t *intrmap)
mutex_enter(&intrmap->intrmap_lock);
idx = intrmap->intrmap_free;
bitset_add(&intrmap->intrmap_map, idx);
intrmap->intrmap_free =
bitset_find_free(&intrmap->intrmap_map, idx + 1);
mutex_exit(&intrmap->intrmap_lock);
mutex_exit(&intrmap->intrmap_lock);
alloc_tbl_multi_entries(intrmap_t *intrmap, uint_t cnt)
mutex_enter(&intrmap->intrmap_lock);
pos = intrmap->intrmap_free;
idx = bitset_find_multi_free(&intrmap->intrmap_map, pos, cnt);
intrmap->intrmap_free = bitset_find_free(
&intrmap->intrmap_map, idx + cnt);
bitset_add(&intrmap->intrmap_map, idx + i);
mutex_exit(&intrmap->intrmap_lock);
mutex_exit(&intrmap->intrmap_lock);
intrmap_t *intrmap;
intrmap = kmem_zalloc(sizeof (intrmap_t), KM_SLEEP);
&(intrmap->intrmap_dma_hdl)) != DDI_SUCCESS) {
kmem_free(intrmap, sizeof (intrmap_t));
intrmap->intrmap_size = 1 << (intrmap_irta_s + 1);
size = intrmap->intrmap_size * INTRMAP_RTE_SIZE;
if (ddi_dma_mem_alloc(intrmap->intrmap_dma_hdl,
&(intrmap->intrmap_vaddr),
&(intrmap->intrmap_acc_hdl)) != DDI_SUCCESS) {
ddi_dma_free_handle(&(intrmap->intrmap_dma_hdl));
kmem_free(intrmap, sizeof (intrmap_t));
ASSERT(!((uintptr_t)intrmap->intrmap_vaddr & MMU_PAGEOFFSET));
bzero(intrmap->intrmap_vaddr, size);
intrmap->intrmap_paddr = pfn_to_pa(
hat_getpfnum(kas.a_hat, intrmap->intrmap_vaddr));
mutex_init(&(intrmap->intrmap_lock), NULL, MUTEX_DRIVER, NULL);
bitset_init(&intrmap->intrmap_map);
bitset_resize(&intrmap->intrmap_map, intrmap->intrmap_size);
intrmap->intrmap_free = 0;
immu->immu_intrmap = intrmap;
#define INTRMAP_PRIVATE(intrmap) ((intrmap_private_t *)intrmap)
intrmap_t *intrmap;
intrmap = immu->immu_intrmap;
irta_reg = intrmap->intrmap_paddr | intrmap_irta_s;
intrmap_t *intrmap;
intrmap = immu->immu_intrmap;
idx = alloc_tbl_entry(intrmap);
idx = alloc_tbl_multi_entries(intrmap, count);
intrmap_t *intrmap;
intrmap = immu->immu_intrmap;
bcopy(&irte, intrmap->intrmap_vaddr +
bcopy(&irte, intrmap->intrmap_vaddr +
intrmap_t *intrmap;
intrmap = immu->immu_intrmap;
bzero(intrmap->intrmap_vaddr + idx * INTRMAP_RTE_SIZE,
mutex_enter(&intrmap->intrmap_lock);
bitset_del(&intrmap->intrmap_map, idx);
if (intrmap->intrmap_free == INTRMAP_IDX_FULL) {
intrmap->intrmap_free = idx;
mutex_exit(&intrmap->intrmap_lock);