Lines Matching refs:uapi

11 static void *uapi_add_elm(struct uverbs_api *uapi, u32 key, size_t alloc_size)  in uapi_add_elm()  argument
20 rc = radix_tree_insert(&uapi->radix, key, elm); in uapi_add_elm()
29 static int uapi_merge_method(struct uverbs_api *uapi, in uapi_merge_method() argument
41 method_elm = uapi_add_elm(uapi, method_key, sizeof(*method_elm)); in uapi_merge_method()
51 method_elm = radix_tree_lookup(&uapi->radix, method_key); in uapi_merge_method()
77 uapi_add_elm(uapi, method_key | uapi_key_attr(attr->id), in uapi_merge_method()
89 static int uapi_merge_tree(struct uverbs_api *uapi, in uapi_merge_tree() argument
108 obj_elm = uapi_add_elm(uapi, obj_key, sizeof(*obj_elm)); in uapi_merge_tree()
116 obj_elm = radix_tree_lookup(&uapi->radix, obj_key); in uapi_merge_tree()
147 rc = uapi_merge_method(uapi, obj_elm, obj_key, method, in uapi_merge_tree()
158 uapi_finalize_ioctl_method(struct uverbs_api *uapi, in uapi_finalize_ioctl_method() argument
169 radix_tree_for_each_slot (slot, &uapi->radix, &iter, in uapi_finalize_ioctl_method()
218 static int uapi_finalize(struct uverbs_api *uapi) in uapi_finalize() argument
224 radix_tree_for_each_slot (slot, &uapi->radix, &iter, 0) { in uapi_finalize()
229 rc = uapi_finalize_ioctl_method(uapi, method_elm, in uapi_finalize()
239 void uverbs_destroy_api(struct uverbs_api *uapi) in uverbs_destroy_api() argument
244 if (!uapi) in uverbs_destroy_api()
247 radix_tree_for_each_slot (slot, &uapi->radix, &iter, 0) { in uverbs_destroy_api()
249 radix_tree_iter_delete(&uapi->radix, &iter, slot); in uverbs_destroy_api()
251 kfree(uapi); in uverbs_destroy_api()
258 struct uverbs_api *uapi; in uverbs_alloc_api() local
261 uapi = kzalloc(sizeof(*uapi), GFP_KERNEL); in uverbs_alloc_api()
262 if (!uapi) in uverbs_alloc_api()
265 INIT_RADIX_TREE(&uapi->radix, GFP_KERNEL); in uverbs_alloc_api()
266 uapi->driver_id = driver_id; in uverbs_alloc_api()
268 rc = uapi_merge_tree(uapi, uverbs_default_get_objects(), false); in uverbs_alloc_api()
273 rc = uapi_merge_tree(uapi, *driver_specs, true); in uverbs_alloc_api()
278 rc = uapi_finalize(uapi); in uverbs_alloc_api()
282 return uapi; in uverbs_alloc_api()
288 uverbs_destroy_api(uapi); in uverbs_alloc_api()
299 struct uverbs_api *uapi = uverbs_dev->uapi; in uverbs_disassociate_api_pre() local
305 radix_tree_for_each_slot (slot, &uapi->radix, &iter, 0) { in uverbs_disassociate_api_pre()
323 void uverbs_disassociate_api(struct uverbs_api *uapi) in uverbs_disassociate_api() argument
328 radix_tree_for_each_slot (slot, &uapi->radix, &iter, 0) { in uverbs_disassociate_api()