Lines Matching defs:uapi

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