Lines Matching refs:opts

2095 static ssize_t f_midi2_opts_uint_show(struct f_midi2_opts *opts,
2100 mutex_lock(&opts->lock);
2102 mutex_unlock(&opts->lock);
2106 static ssize_t f_midi2_opts_uint_store(struct f_midi2_opts *opts,
2113 mutex_lock(&opts->lock);
2114 if (opts->refcnt) {
2131 mutex_unlock(&opts->lock);
2136 static ssize_t f_midi2_opts_bool_store(struct f_midi2_opts *opts,
2142 mutex_lock(&opts->lock);
2143 if (opts->refcnt) {
2155 mutex_unlock(&opts->lock);
2160 static ssize_t f_midi2_opts_str_show(struct f_midi2_opts *opts,
2165 mutex_lock(&opts->lock);
2168 mutex_unlock(&opts->lock);
2172 static ssize_t f_midi2_opts_str_store(struct f_midi2_opts *opts,
2179 mutex_lock(&opts->lock);
2180 if (opts->refcnt) {
2197 mutex_unlock(&opts->lock);
2210 struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item); \
2211 return f_midi2_opts_uint_show(opts->ep->opts, opts->info.name, \
2218 struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item); \
2219 return f_midi2_opts_uint_store(opts->ep->opts, &opts->info.name,\
2230 struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item); \
2231 return f_midi2_opts_uint_show(opts->ep->opts, opts->info.name, \
2238 struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item); \
2239 return f_midi2_opts_bool_store(opts->ep->opts, &opts->info.name,\
2259 struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item);
2261 return f_midi2_opts_str_show(opts->ep->opts, opts->info.name, page);
2267 struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item);
2269 return f_midi2_opts_str_store(opts->ep->opts, &opts->info.name, 128,
2292 struct f_midi2_block_opts *opts = to_f_midi2_block_opts(item);
2294 kfree(opts->info.name);
2295 kfree(opts);
2316 mutex_lock(&ep_opts->opts->lock);
2317 if (ep_opts->opts->refcnt || ep_opts->blks[blk]) {
2342 mutex_unlock(&ep_opts->opts->lock);
2382 mutex_lock(&block_opts->ep->opts->lock);
2384 mutex_unlock(&block_opts->ep->opts->lock);
2397 struct f_midi2_ep_opts *opts = to_f_midi2_ep_opts(item); \
2398 return f_midi2_opts_uint_show(opts->opts, opts->info.name, \
2405 struct f_midi2_ep_opts *opts = to_f_midi2_ep_opts(item); \
2406 return f_midi2_opts_uint_store(opts->opts, &opts->info.name, \
2417 struct f_midi2_ep_opts *opts = to_f_midi2_ep_opts(item); \
2418 return f_midi2_opts_str_show(opts->opts, opts->info.name, page);\
2424 struct f_midi2_ep_opts *opts = to_f_midi2_ep_opts(item); \
2425 return f_midi2_opts_str_store(opts->opts, &opts->info.name, maxlen,\
2454 struct f_midi2_ep_opts *opts = to_f_midi2_ep_opts(item);
2456 kfree(opts->info.ep_name);
2457 kfree(opts->info.product_id);
2458 kfree(opts);
2478 static int f_midi2_ep_opts_create(struct f_midi2_opts *opts,
2488 ep_opts->opts = opts;
2495 opts->eps[index] = ep_opts;
2504 struct f_midi2_opts *opts;
2515 opts = to_f_midi2_opts(&group->cg_item);
2518 if (opts->eps[index])
2520 ret = f_midi2_ep_opts_create(opts, index, &ep_opts);
2534 mutex_lock(&ep_opts->opts->lock);
2535 ep_opts->opts->eps[ep_opts->index] = NULL;
2536 mutex_unlock(&ep_opts->opts->lock);
2549 struct f_midi2_opts *opts = to_f_midi2_opts(item); \
2550 return f_midi2_opts_uint_show(opts, opts->info.name, \
2557 struct f_midi2_opts *opts = to_f_midi2_opts(item); \
2558 return f_midi2_opts_bool_store(opts, &opts->info.name, \
2570 struct f_midi2_opts *opts = to_f_midi2_opts(item);
2572 return f_midi2_opts_str_show(opts, opts->info.iface_name, page);
2578 struct f_midi2_opts *opts = to_f_midi2_opts(item);
2580 return f_midi2_opts_str_store(opts, &opts->info.iface_name, 128,
2595 struct f_midi2_opts *opts = to_f_midi2_opts(item);
2597 usb_put_function_instance(&opts->func_inst);
2618 struct f_midi2_opts *opts;
2620 opts = container_of(f, struct f_midi2_opts, func_inst);
2622 kfree(opts->info.iface_name);
2623 kfree(opts);
2629 struct f_midi2_opts *opts;
2634 opts = kzalloc(sizeof(*opts), GFP_KERNEL);
2635 if (!opts)
2638 mutex_init(&opts->lock);
2639 opts->func_inst.free_func_inst = f_midi2_free_inst;
2640 opts->info.process_ump = true;
2641 opts->info.static_block = true;
2642 opts->info.num_reqs = 32;
2643 opts->info.req_buf_size = 512;
2646 ret = f_midi2_ep_opts_create(opts, 0, &ep_opts);
2648 kfree(opts);
2656 kfree(opts);
2663 config_group_init_type_name(&opts->func_inst.group, "",
2668 configfs_add_default_group(&ep_opts->group, &opts->func_inst.group);
2674 return &opts->func_inst;
2677 static void do_f_midi2_free(struct f_midi2 *midi2, struct f_midi2_opts *opts)
2679 mutex_lock(&opts->lock);
2680 --opts->refcnt;
2681 mutex_unlock(&opts->lock);
2695 static int verify_parameters(struct f_midi2_opts *opts)
2701 for (num_eps = 0; num_eps < MAX_UMP_EPS && opts->eps[num_eps];
2711 ep = &opts->eps[i]->info;
2718 for (j = 0; j < SNDRV_UMP_MAX_BLOCKS && opts->eps[i]->blks[j];
2720 bp = &opts->eps[i]->blks[j]->info;
2790 struct f_midi2_opts *opts;
2799 opts = container_of(fi, struct f_midi2_opts, func_inst);
2800 mutex_lock(&opts->lock);
2801 num_eps = verify_parameters(opts);
2803 mutex_unlock(&opts->lock);
2807 ++opts->refcnt;
2808 mutex_unlock(&opts->lock);
2821 midi2->info = opts->info;
2826 ep->info = opts->eps[i]->info;
2829 opts->eps[i]->blks[blk]; blk++) {
2832 bp->info = opts->eps[i]->blks[blk]->info;
2840 do_f_midi2_free(midi2, opts);
2844 if (opts->info.iface_name && *opts->info.iface_name)
2845 midi2->string_defs[STR_IFACE].s = opts->info.iface_name;
2862 do_f_midi2_free(midi2, opts);