Lines Matching refs:state

115 static int xsvc_ioctl_alloc_memory(xsvc_state_t *state, void *arg, int mode);
116 static int xsvc_ioctl_flush_memory(xsvc_state_t *state, void *arg, int mode);
117 static int xsvc_ioctl_free_memory(xsvc_state_t *state, void *arg, int mode);
118 static int xsvc_mem_alloc(xsvc_state_t *state, uint64_t key,
120 static void xsvc_mem_free(xsvc_state_t *state, xsvc_mem_t *mp);
121 static xsvc_mem_t *xsvc_mem_lookup(xsvc_state_t *state,
214 xsvc_state_t *state; in xsvc_attach() local
236 state = ddi_get_soft_state(xsvc_statep, instance); in xsvc_attach()
237 if (state == NULL) { in xsvc_attach()
241 state->xs_dip = dip; in xsvc_attach()
242 state->xs_instance = instance; in xsvc_attach()
245 mutex_init(&state->xs_mutex, NULL, MUTEX_DRIVER, NULL); in xsvc_attach()
246 state->xs_currently_alloced = 0; in xsvc_attach()
248 mutex_init(&state->xs_cookie_mutex, NULL, MUTEX_DRIVER, NULL); in xsvc_attach()
261 maxallocmem = ddi_prop_get_int(DDI_DEV_T_ANY, state->xs_dip, in xsvc_attach()
268 mutex_init(&state->xs_mlist.ml_mutex, NULL, MUTEX_DRIVER, NULL); in xsvc_attach()
269 avl_create(&state->xs_mlist.ml_avl, xsvc_mnode_key_compare, in xsvc_attach()
278 mutex_destroy(&state->xs_cookie_mutex); in xsvc_attach()
279 mutex_destroy(&state->xs_mutex); in xsvc_attach()
293 xsvc_state_t *state; in xsvc_detach() local
300 state = ddi_get_soft_state(xsvc_statep, instance); in xsvc_detach()
301 if (state == NULL) { in xsvc_detach()
319 while ((mnode = avl_first(&state->xs_mlist.ml_avl)) != NULL) { in xsvc_detach()
321 xsvc_mem_free(state, mp); in xsvc_detach()
325 avl_destroy(&state->xs_mlist.ml_avl); in xsvc_detach()
326 mutex_destroy(&state->xs_mlist.ml_mutex); in xsvc_detach()
328 mutex_destroy(&state->xs_cookie_mutex); in xsvc_detach()
329 mutex_destroy(&state->xs_mutex); in xsvc_detach()
330 (void) ddi_soft_state_free(xsvc_statep, state->xs_instance); in xsvc_detach()
342 xsvc_state_t *state; in xsvc_getinfo() local
353 state = ddi_get_soft_state(xsvc_statep, instance); in xsvc_getinfo()
354 if (state == NULL) { in xsvc_getinfo()
357 *result = (void *)state->xs_dip; in xsvc_getinfo()
383 xsvc_state_t *state; in xsvc_open() local
387 state = ddi_get_soft_state(xsvc_statep, instance); in xsvc_open()
388 if (state == NULL) { in xsvc_open()
414 xsvc_state_t *state; in xsvc_ioctl() local
427 state = ddi_get_soft_state(xsvc_statep, instance); in xsvc_ioctl()
428 if (state == NULL) { in xsvc_ioctl()
434 err = xsvc_ioctl_alloc_memory(state, (void *)arg, mode); in xsvc_ioctl()
438 err = xsvc_ioctl_free_memory(state, (void *)arg, mode); in xsvc_ioctl()
442 err = xsvc_ioctl_flush_memory(state, (void *)arg, mode); in xsvc_ioctl()
457 xsvc_ioctl_alloc_memory(xsvc_state_t *state, void *arg, int mode) in xsvc_ioctl_alloc_memory() argument
494 mutex_enter(&state->xs_mutex); in xsvc_ioctl_alloc_memory()
495 if ((state->xs_currently_alloced + size) > xsvc_max_memory) { in xsvc_ioctl_alloc_memory()
496 mutex_exit(&state->xs_mutex); in xsvc_ioctl_alloc_memory()
499 state->xs_currently_alloced += size; in xsvc_ioctl_alloc_memory()
500 mutex_exit(&state->xs_mutex); in xsvc_ioctl_alloc_memory()
503 err = xsvc_mem_alloc(state, key, &mp); in xsvc_ioctl_alloc_memory()
540 err = ddi_dma_alloc_handle(state->xs_dip, &mp->xm_dma_attr, in xsvc_ioctl_alloc_memory()
618 xsvc_mem_free(state, mp); in xsvc_ioctl_alloc_memory()
620 mutex_enter(&state->xs_mutex); in xsvc_ioctl_alloc_memory()
621 state->xs_currently_alloced = state->xs_currently_alloced - size; in xsvc_ioctl_alloc_memory()
622 mutex_exit(&state->xs_mutex); in xsvc_ioctl_alloc_memory()
632 xsvc_ioctl_flush_memory(xsvc_state_t *state, void *arg, int mode) in xsvc_ioctl_flush_memory() argument
657 mp = xsvc_mem_lookup(state, key); in xsvc_ioctl_flush_memory()
673 xsvc_ioctl_free_memory(xsvc_state_t *state, void *arg, int mode) in xsvc_ioctl_free_memory() argument
698 mp = xsvc_mem_lookup(state, key); in xsvc_ioctl_free_memory()
703 xsvc_mem_free(state, mp); in xsvc_ioctl_free_memory()
713 xsvc_mem_alloc(xsvc_state_t *state, uint64_t key, xsvc_mem_t **mp) in xsvc_mem_alloc() argument
717 mem = xsvc_mem_lookup(state, key); in xsvc_mem_alloc()
719 xsvc_mem_free(state, mem); in xsvc_mem_alloc()
726 mutex_enter(&state->xs_mlist.ml_mutex); in xsvc_mem_alloc()
727 avl_add(&state->xs_mlist.ml_avl, &(*mp)->xm_mnode); in xsvc_mem_alloc()
728 mutex_exit(&state->xs_mlist.ml_mutex); in xsvc_mem_alloc()
738 xsvc_mem_free(xsvc_state_t *state, xsvc_mem_t *mp) in xsvc_mem_free() argument
745 mutex_enter(&state->xs_mutex); in xsvc_mem_free()
746 state->xs_currently_alloced = state->xs_currently_alloced - in xsvc_mem_free()
748 mutex_exit(&state->xs_mutex); in xsvc_mem_free()
751 mutex_enter(&state->xs_mlist.ml_mutex); in xsvc_mem_free()
752 avl_remove(&state->xs_mlist.ml_avl, &mp->xm_mnode); in xsvc_mem_free()
753 mutex_exit(&state->xs_mlist.ml_mutex); in xsvc_mem_free()
763 xsvc_mem_lookup(xsvc_state_t *state, uint64_t key) in xsvc_mem_lookup() argument
771 mutex_enter(&state->xs_mlist.ml_mutex); in xsvc_mem_lookup()
772 mnp = avl_find(&state->xs_mlist.ml_avl, &mnode, &where); in xsvc_mem_lookup()
773 mutex_exit(&state->xs_mlist.ml_mutex); in xsvc_mem_lookup()
816 xsvc_state_t *state; in xsvc_devmap() local
829 state = ddi_get_soft_state(xsvc_statep, instance); in xsvc_devmap()
830 if (state == NULL) { in xsvc_devmap()
902 if ((err = devmap_umem_setup(dhp, state->xs_dip, &xsvc_callbk, in xsvc_devmap()
913 if ((err = devmap_devmem_setup(dhp, state->xs_dip, NULL, 0, in xsvc_devmap()
986 xsvc_state_t *state; in xsvc_devmap_map() local
991 state = ddi_get_soft_state(xsvc_statep, instance); in xsvc_devmap_map()
992 if (state == NULL) { in xsvc_devmap_map()
1006 *pvtp = state; in xsvc_devmap_map()
1024 xsvc_state_t *state; in xsvc_devmap_dup() local
1027 state = (xsvc_state_t *)pvtp; in xsvc_devmap_dup()
1030 mutex_enter(&state->xs_cookie_mutex); in xsvc_devmap_dup()
1033 mutex_exit(&state->xs_cookie_mutex); in xsvc_devmap_dup()
1038 mutex_exit(&state->xs_cookie_mutex); in xsvc_devmap_dup()
1040 *new_pvtp = state; in xsvc_devmap_dup()
1064 xsvc_state_t *state; in xsvc_devmap_unmap() local
1072 state = (xsvc_state_t *)pvtp; in xsvc_devmap_unmap()
1073 mutex_enter(&state->xs_cookie_mutex); in xsvc_devmap_unmap()
1084 *new_pvtp1 = state; in xsvc_devmap_unmap()
1090 *new_pvtp2 = state; in xsvc_devmap_unmap()
1113 mutex_exit(&state->xs_cookie_mutex); in xsvc_devmap_unmap()