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;
236 state = ddi_get_soft_state(xsvc_statep, instance);
237 if (state == NULL) {
241 state->xs_dip = dip;
242 state->xs_instance = instance;
245 mutex_init(&state->xs_mutex, NULL, MUTEX_DRIVER, NULL);
246 state->xs_currently_alloced = 0;
248 mutex_init(&state->xs_cookie_mutex, NULL, MUTEX_DRIVER, NULL);
261 maxallocmem = ddi_prop_get_int(DDI_DEV_T_ANY, state->xs_dip,
268 mutex_init(&state->xs_mlist.ml_mutex, NULL, MUTEX_DRIVER, NULL);
269 avl_create(&state->xs_mlist.ml_avl, xsvc_mnode_key_compare,
278 mutex_destroy(&state->xs_cookie_mutex);
279 mutex_destroy(&state->xs_mutex);
293 xsvc_state_t *state;
300 state = ddi_get_soft_state(xsvc_statep, instance);
301 if (state == NULL) {
319 while ((mnode = avl_first(&state->xs_mlist.ml_avl)) != NULL) {
321 xsvc_mem_free(state, mp);
325 avl_destroy(&state->xs_mlist.ml_avl);
326 mutex_destroy(&state->xs_mlist.ml_mutex);
328 mutex_destroy(&state->xs_cookie_mutex);
329 mutex_destroy(&state->xs_mutex);
330 (void) ddi_soft_state_free(xsvc_statep, state->xs_instance);
342 xsvc_state_t *state;
353 state = ddi_get_soft_state(xsvc_statep, instance);
354 if (state == NULL) {
357 *result = (void *)state->xs_dip;
383 xsvc_state_t *state;
387 state = ddi_get_soft_state(xsvc_statep, instance);
388 if (state == NULL) {
414 xsvc_state_t *state;
427 state = ddi_get_soft_state(xsvc_statep, instance);
428 if (state == NULL) {
434 err = xsvc_ioctl_alloc_memory(state, (void *)arg, mode);
438 err = xsvc_ioctl_free_memory(state, (void *)arg, mode);
442 err = xsvc_ioctl_flush_memory(state, (void *)arg, mode);
457 xsvc_ioctl_alloc_memory(xsvc_state_t *state, void *arg, int mode)
495 mutex_enter(&state->xs_mutex);
496 if ((state->xs_currently_alloced + size) > xsvc_max_memory) {
497 mutex_exit(&state->xs_mutex);
500 state->xs_currently_alloced += size;
501 mutex_exit(&state->xs_mutex);
503 /* get state to track this memory */
504 err = xsvc_mem_alloc(state, key, &mp);
539 err = ddi_dma_alloc_handle(state->xs_dip, &mp->xm_dma_attr,
617 xsvc_mem_free(state, mp);
619 mutex_enter(&state->xs_mutex);
620 state->xs_currently_alloced = state->xs_currently_alloced - size;
621 mutex_exit(&state->xs_mutex);
631 xsvc_ioctl_flush_memory(xsvc_state_t *state, void *arg, int mode)
656 mp = xsvc_mem_lookup(state, key);
672 xsvc_ioctl_free_memory(xsvc_state_t *state, void *arg, int mode)
697 mp = xsvc_mem_lookup(state, key);
702 xsvc_mem_free(state, mp);
712 xsvc_mem_alloc(xsvc_state_t *state, uint64_t key, xsvc_mem_t **mp)
716 mem = xsvc_mem_lookup(state, key);
718 xsvc_mem_free(state, mem);
725 mutex_enter(&state->xs_mlist.ml_mutex);
726 avl_add(&state->xs_mlist.ml_avl, &(*mp)->xm_mnode);
727 mutex_exit(&state->xs_mlist.ml_mutex);
737 xsvc_mem_free(xsvc_state_t *state, xsvc_mem_t *mp)
744 mutex_enter(&state->xs_mutex);
745 state->xs_currently_alloced = state->xs_currently_alloced -
747 mutex_exit(&state->xs_mutex);
750 mutex_enter(&state->xs_mlist.ml_mutex);
751 avl_remove(&state->xs_mlist.ml_avl, &mp->xm_mnode);
752 mutex_exit(&state->xs_mlist.ml_mutex);
762 xsvc_mem_lookup(xsvc_state_t *state, uint64_t key)
770 mutex_enter(&state->xs_mlist.ml_mutex);
771 mnp = avl_find(&state->xs_mlist.ml_avl, &mnode, &where);
772 mutex_exit(&state->xs_mlist.ml_mutex);
815 xsvc_state_t *state;
828 state = ddi_get_soft_state(xsvc_statep, instance);
829 if (state == NULL) {
903 if ((err = devmap_umem_setup(dhp, state->xs_dip, &xsvc_callbk,
914 if ((err = devmap_devmem_setup(dhp, state->xs_dip, NULL, 0,
987 xsvc_state_t *state;
992 state = ddi_get_soft_state(xsvc_statep, instance);
993 if (state == NULL) {
1007 *pvtp = state;
1025 xsvc_state_t *state;
1028 state = (xsvc_state_t *)pvtp;
1031 mutex_enter(&state->xs_cookie_mutex);
1034 mutex_exit(&state->xs_cookie_mutex);
1039 mutex_exit(&state->xs_cookie_mutex);
1041 *new_pvtp = state;
1065 xsvc_state_t *state;
1073 state = (xsvc_state_t *)pvtp;
1074 mutex_enter(&state->xs_cookie_mutex);
1085 *new_pvtp1 = state;
1091 *new_pvtp2 = state;
1114 mutex_exit(&state->xs_cookie_mutex);