Lines Matching refs:opts
2109 static ssize_t f_midi2_opts_uint_show(struct f_midi2_opts *opts, in f_midi2_opts_uint_show() argument
2114 mutex_lock(&opts->lock); in f_midi2_opts_uint_show()
2116 mutex_unlock(&opts->lock); in f_midi2_opts_uint_show()
2120 static ssize_t f_midi2_opts_uint_store(struct f_midi2_opts *opts, in f_midi2_opts_uint_store() argument
2127 mutex_lock(&opts->lock); in f_midi2_opts_uint_store()
2128 if (opts->refcnt) { in f_midi2_opts_uint_store()
2145 mutex_unlock(&opts->lock); in f_midi2_opts_uint_store()
2150 static ssize_t f_midi2_opts_bool_store(struct f_midi2_opts *opts, in f_midi2_opts_bool_store() argument
2156 mutex_lock(&opts->lock); in f_midi2_opts_bool_store()
2157 if (opts->refcnt) { in f_midi2_opts_bool_store()
2169 mutex_unlock(&opts->lock); in f_midi2_opts_bool_store()
2174 static ssize_t f_midi2_opts_str_show(struct f_midi2_opts *opts, in f_midi2_opts_str_show() argument
2179 mutex_lock(&opts->lock); in f_midi2_opts_str_show()
2182 mutex_unlock(&opts->lock); in f_midi2_opts_str_show()
2186 static ssize_t f_midi2_opts_str_store(struct f_midi2_opts *opts, in f_midi2_opts_str_store() argument
2193 mutex_lock(&opts->lock); in f_midi2_opts_str_store()
2194 if (opts->refcnt) { in f_midi2_opts_str_store()
2211 mutex_unlock(&opts->lock); in f_midi2_opts_str_store()
2224 struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item); \
2225 return f_midi2_opts_uint_show(opts->ep->opts, opts->info.name, \
2232 struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item); \
2233 return f_midi2_opts_uint_store(opts->ep->opts, &opts->info.name,\
2244 struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item); \
2245 return f_midi2_opts_uint_show(opts->ep->opts, opts->info.name, \
2252 struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item); \
2253 return f_midi2_opts_bool_store(opts->ep->opts, &opts->info.name,\
2273 struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item); in f_midi2_block_opts_name_show() local
2275 return f_midi2_opts_str_show(opts->ep->opts, opts->info.name, page); in f_midi2_block_opts_name_show()
2281 struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item); in f_midi2_block_opts_name_store() local
2283 return f_midi2_opts_str_store(opts->ep->opts, &opts->info.name, 128, in f_midi2_block_opts_name_store()
2306 struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item); in f_midi2_block_opts_release() local
2308 kfree(opts->info.name); in f_midi2_block_opts_release()
2309 kfree(opts); in f_midi2_block_opts_release()
2330 mutex_lock(&ep_opts->opts->lock); in f_midi2_block_opts_create()
2331 if (ep_opts->opts->refcnt || ep_opts->blks[blk]) { in f_midi2_block_opts_create()
2356 mutex_unlock(&ep_opts->opts->lock); in f_midi2_block_opts_create()
2396 mutex_lock(&block_opts->ep->opts->lock); in f_midi2_opts_block_drop()
2398 mutex_unlock(&block_opts->ep->opts->lock); in f_midi2_opts_block_drop()
2411 struct f_midi2_ep_opts *opts = to_f_midi2_ep_opts(item); \
2412 return f_midi2_opts_uint_show(opts->opts, opts->info.name, \
2419 struct f_midi2_ep_opts *opts = to_f_midi2_ep_opts(item); \
2420 return f_midi2_opts_uint_store(opts->opts, &opts->info.name, \
2431 struct f_midi2_ep_opts *opts = to_f_midi2_ep_opts(item); \
2432 return f_midi2_opts_str_show(opts->opts, opts->info.name, page);\
2438 struct f_midi2_ep_opts *opts = to_f_midi2_ep_opts(item); \
2439 return f_midi2_opts_str_store(opts->opts, &opts->info.name, maxlen,\
2468 struct f_midi2_ep_opts *opts = to_f_midi2_ep_opts(item); in f_midi2_ep_opts_release() local
2470 kfree(opts->info.ep_name); in f_midi2_ep_opts_release()
2471 kfree(opts->info.product_id); in f_midi2_ep_opts_release()
2472 kfree(opts); in f_midi2_ep_opts_release()
2492 static int f_midi2_ep_opts_create(struct f_midi2_opts *opts, in f_midi2_ep_opts_create() argument
2502 ep_opts->opts = opts; in f_midi2_ep_opts_create()
2509 opts->eps[index] = ep_opts; in f_midi2_ep_opts_create()
2518 struct f_midi2_opts *opts; in f_midi2_opts_ep_make() local
2529 opts = to_f_midi2_opts(&group->cg_item); in f_midi2_opts_ep_make()
2532 if (opts->eps[index]) in f_midi2_opts_ep_make()
2534 ret = f_midi2_ep_opts_create(opts, index, &ep_opts); in f_midi2_opts_ep_make()
2548 mutex_lock(&ep_opts->opts->lock); in f_midi2_opts_ep_drop()
2549 ep_opts->opts->eps[ep_opts->index] = NULL; in f_midi2_opts_ep_drop()
2550 mutex_unlock(&ep_opts->opts->lock); in f_midi2_opts_ep_drop()
2563 struct f_midi2_opts *opts = to_f_midi2_opts(item); \
2564 return f_midi2_opts_uint_show(opts, opts->info.name, \
2571 struct f_midi2_opts *opts = to_f_midi2_opts(item); \
2572 return f_midi2_opts_bool_store(opts, &opts->info.name, \
2584 struct f_midi2_opts *opts = to_f_midi2_opts(item); in f_midi2_opts_iface_name_show() local
2586 return f_midi2_opts_str_show(opts, opts->info.iface_name, page); in f_midi2_opts_iface_name_show()
2592 struct f_midi2_opts *opts = to_f_midi2_opts(item); in f_midi2_opts_iface_name_store() local
2594 return f_midi2_opts_str_store(opts, &opts->info.iface_name, 128, in f_midi2_opts_iface_name_store()
2609 struct f_midi2_opts *opts = to_f_midi2_opts(item); in f_midi2_opts_release() local
2611 usb_put_function_instance(&opts->func_inst); in f_midi2_opts_release()
2632 struct f_midi2_opts *opts; in f_midi2_free_inst() local
2634 opts = container_of(f, struct f_midi2_opts, func_inst); in f_midi2_free_inst()
2636 kfree(opts->info.iface_name); in f_midi2_free_inst()
2637 kfree(opts); in f_midi2_free_inst()
2643 struct f_midi2_opts *opts; in f_midi2_alloc_inst() local
2648 opts = kzalloc(sizeof(*opts), GFP_KERNEL); in f_midi2_alloc_inst()
2649 if (!opts) in f_midi2_alloc_inst()
2652 mutex_init(&opts->lock); in f_midi2_alloc_inst()
2653 opts->func_inst.free_func_inst = f_midi2_free_inst; in f_midi2_alloc_inst()
2654 opts->info.process_ump = true; in f_midi2_alloc_inst()
2655 opts->info.static_block = true; in f_midi2_alloc_inst()
2656 opts->info.num_reqs = 32; in f_midi2_alloc_inst()
2657 opts->info.req_buf_size = 512; in f_midi2_alloc_inst()
2660 ret = f_midi2_ep_opts_create(opts, 0, &ep_opts); in f_midi2_alloc_inst()
2662 kfree(opts); in f_midi2_alloc_inst()
2670 kfree(opts); in f_midi2_alloc_inst()
2677 config_group_init_type_name(&opts->func_inst.group, "", in f_midi2_alloc_inst()
2682 configfs_add_default_group(&ep_opts->group, &opts->func_inst.group); in f_midi2_alloc_inst()
2688 return &opts->func_inst; in f_midi2_alloc_inst()
2691 static void do_f_midi2_free(struct f_midi2 *midi2, struct f_midi2_opts *opts) in do_f_midi2_free() argument
2693 mutex_lock(&opts->lock); in do_f_midi2_free()
2694 --opts->refcnt; in do_f_midi2_free()
2695 mutex_unlock(&opts->lock); in do_f_midi2_free()
2709 static int verify_parameters(struct f_midi2_opts *opts) in verify_parameters() argument
2715 for (num_eps = 0; num_eps < MAX_UMP_EPS && opts->eps[num_eps]; in verify_parameters()
2725 ep = &opts->eps[i]->info; in verify_parameters()
2732 for (j = 0; j < SNDRV_UMP_MAX_BLOCKS && opts->eps[i]->blks[j]; in verify_parameters()
2734 bp = &opts->eps[i]->blks[j]->info; in verify_parameters()
2804 struct f_midi2_opts *opts; in f_midi2_alloc() local
2813 opts = container_of(fi, struct f_midi2_opts, func_inst); in f_midi2_alloc()
2814 mutex_lock(&opts->lock); in f_midi2_alloc()
2815 num_eps = verify_parameters(opts); in f_midi2_alloc()
2817 mutex_unlock(&opts->lock); in f_midi2_alloc()
2821 ++opts->refcnt; in f_midi2_alloc()
2822 mutex_unlock(&opts->lock); in f_midi2_alloc()
2835 midi2->info = opts->info; in f_midi2_alloc()
2840 ep->info = opts->eps[i]->info; in f_midi2_alloc()
2843 opts->eps[i]->blks[blk]; blk++) { in f_midi2_alloc()
2846 bp->info = opts->eps[i]->blks[blk]->info; in f_midi2_alloc()
2854 do_f_midi2_free(midi2, opts); in f_midi2_alloc()
2858 if (opts->info.iface_name && *opts->info.iface_name) in f_midi2_alloc()
2859 midi2->string_defs[STR_IFACE].s = opts->info.iface_name; in f_midi2_alloc()
2876 do_f_midi2_free(midi2, opts); in f_midi2_alloc()