Lines Matching refs:uapi

16 static void *uapi_add_elm(struct uverbs_api *uapi, u32 key, size_t alloc_size)  in uapi_add_elm()  argument
27 rc = radix_tree_insert(&uapi->radix, key, elm); in uapi_add_elm()
36 static void *uapi_add_get_elm(struct uverbs_api *uapi, u32 key, in uapi_add_get_elm() argument
41 elm = uapi_add_elm(uapi, key, alloc_size); in uapi_add_get_elm()
50 elm = radix_tree_lookup(&uapi->radix, key); in uapi_add_get_elm()
57 static int uapi_create_write(struct uverbs_api *uapi, in uapi_create_write() argument
72 method_elm = uapi_add_get_elm(uapi, method_key, sizeof(*method_elm), in uapi_create_write()
97 static int uapi_merge_method(struct uverbs_api *uapi, in uapi_merge_method() argument
110 method_elm = uapi_add_get_elm(uapi, method_key, sizeof(*method_elm), in uapi_merge_method()
155 uapi_add_elm(uapi, method_key | uapi_key_attr(attr->id), in uapi_merge_method()
167 static int uapi_merge_obj_tree(struct uverbs_api *uapi, in uapi_merge_obj_tree() argument
178 obj_elm = uapi_add_get_elm(uapi, obj_key, sizeof(*obj_elm), &exists); in uapi_merge_obj_tree()
214 rc = uapi_merge_method(uapi, obj_elm, obj_key, method, in uapi_merge_obj_tree()
223 static int uapi_disable_elm(struct uverbs_api *uapi, in uapi_disable_elm() argument
234 uapi, obj_key, sizeof(*obj_elm), &exists); in uapi_disable_elm()
245 method_elm = uapi_add_get_elm(uapi, method_key, in uapi_disable_elm()
258 write_elm = uapi_add_get_elm(uapi, method_key, in uapi_disable_elm()
270 static int uapi_merge_def(struct uverbs_api *uapi, struct ib_device *ibdev, in uapi_merge_def() argument
286 rc = uapi_merge_def(uapi, ibdev, def->chain, is_driver); in uapi_merge_def()
297 rc = uapi_merge_obj_tree(uapi, def->chain_obj_tree, in uapi_merge_def()
313 uapi, def, cur_obj_key, cur_method_key); in uapi_merge_def()
323 uapi, def, cur_obj_key, cur_method_key); in uapi_merge_def()
332 obj_elm = uapi_add_get_elm(uapi, cur_obj_key, in uapi_merge_def()
341 uapi, ibdev, def, cur_obj_key, &cur_method_key); in uapi_merge_def()
352 uapi_finalize_ioctl_method(struct uverbs_api *uapi, in uapi_finalize_ioctl_method() argument
363 radix_tree_for_each_slot (slot, &uapi->radix, &iter, in uapi_finalize_ioctl_method()
415 static int uapi_finalize(struct uverbs_api *uapi) in uapi_finalize() argument
425 radix_tree_for_each_slot (slot, &uapi->radix, &iter, 0) { in uapi_finalize()
430 rc = uapi_finalize_ioctl_method(uapi, method_elm, in uapi_finalize()
445 uapi->notsupp_method.handler = ib_uverbs_notsupp; in uapi_finalize()
446 uapi->num_write = max_write + 1; in uapi_finalize()
447 uapi->num_write_ex = max_write_ex + 1; in uapi_finalize()
448 data = kmalloc_array(uapi->num_write + uapi->num_write_ex, in uapi_finalize()
449 sizeof(*uapi->write_methods), GFP_KERNEL); in uapi_finalize()
453 for (i = 0; i != uapi->num_write + uapi->num_write_ex; i++) in uapi_finalize()
454 data[i] = &uapi->notsupp_method; in uapi_finalize()
455 uapi->write_methods = data; in uapi_finalize()
456 uapi->write_ex_methods = data + uapi->num_write; in uapi_finalize()
458 radix_tree_for_each_slot (slot, &uapi->radix, &iter, 0) { in uapi_finalize()
460 uapi->write_methods[iter.index & in uapi_finalize()
464 uapi->write_ex_methods[iter.index & in uapi_finalize()
472 static void uapi_remove_range(struct uverbs_api *uapi, u32 start, u32 last) in uapi_remove_range() argument
477 radix_tree_for_each_slot (slot, &uapi->radix, &iter, start) { in uapi_remove_range()
481 radix_tree_iter_delete(&uapi->radix, &iter, slot); in uapi_remove_range()
485 static void uapi_remove_object(struct uverbs_api *uapi, u32 obj_key) in uapi_remove_object() argument
487 uapi_remove_range(uapi, obj_key, in uapi_remove_object()
492 static void uapi_remove_method(struct uverbs_api *uapi, u32 method_key) in uapi_remove_method() argument
494 uapi_remove_range(uapi, method_key, in uapi_remove_method()
526 static void uapi_finalize_disable(struct uverbs_api *uapi) in uapi_finalize_disable() argument
534 radix_tree_for_each_slot (slot, &uapi->radix, &iter, starting_key) { in uapi_finalize_disable()
545 uapi_remove_object(uapi, iter.index); in uapi_finalize_disable()
557 uapi_remove_method(uapi, iter.index); in uapi_finalize_disable()
570 radix_tree_iter_delete(&uapi->radix, &iter, slot); in uapi_finalize_disable()
591 tmp_obj = uapi_get_object(uapi, obj_key); in uapi_finalize_disable()
602 uapi, in uapi_finalize_disable()
618 void uverbs_destroy_api(struct uverbs_api *uapi) in uverbs_destroy_api() argument
620 if (!uapi) in uverbs_destroy_api()
623 uapi_remove_range(uapi, 0, U32_MAX); in uverbs_destroy_api()
624 kfree(uapi->write_methods); in uverbs_destroy_api()
625 kfree(uapi); in uverbs_destroy_api()
646 struct uverbs_api *uapi; in uverbs_alloc_api() local
649 uapi = kzalloc(sizeof(*uapi), GFP_KERNEL); in uverbs_alloc_api()
650 if (!uapi) in uverbs_alloc_api()
653 INIT_RADIX_TREE(&uapi->radix, GFP_KERNEL); in uverbs_alloc_api()
654 uapi->driver_id = ibdev->ops.driver_id; in uverbs_alloc_api()
656 rc = uapi_merge_def(uapi, ibdev, uverbs_core_api, false); in uverbs_alloc_api()
659 rc = uapi_merge_def(uapi, ibdev, ibdev->driver_def, true); in uverbs_alloc_api()
663 uapi_finalize_disable(uapi); in uverbs_alloc_api()
664 rc = uapi_finalize(uapi); in uverbs_alloc_api()
668 return uapi; in uverbs_alloc_api()
675 uverbs_destroy_api(uapi); in uverbs_alloc_api()
686 struct uverbs_api *uapi = uverbs_dev->uapi; in uverbs_disassociate_api_pre() local
692 radix_tree_for_each_slot (slot, &uapi->radix, &iter, 0) { in uverbs_disassociate_api_pre()
710 void uverbs_disassociate_api(struct uverbs_api *uapi) in uverbs_disassociate_api() argument
715 radix_tree_for_each_slot (slot, &uapi->radix, &iter, 0) { in uverbs_disassociate_api()