Lines Matching defs:func
71 static void ffs_func_eps_disable(struct ffs_function *func);
72 static int __must_check ffs_func_eps_enable(struct ffs_function *func);
86 static int ffs_func_revmap_ep(struct ffs_function *func, u8 num);
87 static int ffs_func_revmap_intf(struct ffs_function *func, u8 intf);
1823 static void ffs_func_eps_disable(struct ffs_function *func)
1825 struct ffs_ep *ep = func->eps;
1826 struct ffs_epfile *epfile = func->ffs->epfiles;
1827 unsigned count = func->ffs->eps_count;
1830 spin_lock_irqsave(&func->ffs->eps_lock, flags);
1842 spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
1845 static int ffs_func_eps_enable(struct ffs_function *func)
1847 struct ffs_data *ffs = func->ffs;
1848 struct ffs_ep *ep = func->eps;
1854 spin_lock_irqsave(&func->ffs->eps_lock, flags);
1858 ret = config_ep_by_speed(func->gadget, &func->function, ep->ep);
1879 spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
2676 struct ffs_function *func = priv;
2691 if (func->function.ss_descriptors) {
2693 func->function.ss_descriptors[(uintptr_t)valuep] = desc;
2694 } else if (func->function.hs_descriptors) {
2696 func->function.hs_descriptors[(uintptr_t)valuep] = desc;
2699 func->function.fs_descriptors[(uintptr_t)valuep] = desc;
2705 idx = ffs_ep_addr2idx(func->ffs, ds->bEndpointAddress) - 1;
2709 ffs_ep = func->eps + idx;
2735 ep = usb_ep_autoconfig(func->gadget, ds);
2738 ep->driver_data = func->eps + idx;
2747 func->eps_revmap[ds->bEndpointAddress &
2753 if (func->ffs->user_flags & FUNCTIONFS_VIRTUAL_ADDR)
2765 struct ffs_function *func = priv;
2777 if (func->interfaces_nums[idx] < 0) {
2778 int id = usb_interface_id(func->conf, &func->function);
2781 func->interfaces_nums[idx] = id;
2783 newValue = func->interfaces_nums[idx];
2788 newValue = func->ffs->stringtabs[0]->strings[*valuep - 1].id;
2800 if (unlikely(!func->eps[idx].ep))
2805 descs = func->eps[idx].descs;
2820 struct ffs_function *func = priv;
2828 t = &func->function.os_desc_table[desc->bFirstInterfaceNumber];
2829 t->if_id = func->interfaces_nums[desc->bFirstInterfaceNumber];
2842 t = &func->function.os_desc_table[h->interface];
2843 t->if_id = func->interfaces_nums[h->interface];
2845 ext_prop = func->ffs->ms_os_descs_ext_prop_avail;
2846 func->ffs->ms_os_descs_ext_prop_avail += sizeof(*ext_prop);
2854 ext_prop_name = func->ffs->ms_os_descs_ext_prop_name_avail;
2855 func->ffs->ms_os_descs_ext_prop_name_avail +=
2858 ext_prop_data = func->ffs->ms_os_descs_ext_prop_data_avail;
2859 func->ffs->ms_os_descs_ext_prop_data_avail +=
2896 struct ffs_function *func = ffs_func_from_usb(f);
2913 func->ffs = ffs_opts->dev->ffs_data;
2919 func->conf = c;
2920 func->gadget = c->cdev->gadget;
2930 ret = functionfs_bind(func->ffs, c->cdev);
2935 func->function.strings = func->ffs->stringtabs;
2942 struct ffs_function *func = ffs_func_from_usb(f);
2943 struct ffs_data *ffs = func->ffs;
2945 const int full = !!func->ffs->fs_descs_count;
2946 const int high = !!func->ffs->hs_descs_count;
2947 const int super = !!func->ffs->ss_descs_count;
3006 * d_eps == vlabuf, func->eps used to kfree vlabuf later
3008 func->eps = vla_ptr(vlabuf, d, eps);
3009 func->interfaces_nums = vla_ptr(vlabuf, d, inums);
3017 func->function.fs_descriptors = vla_ptr(vlabuf, d, fs_descs);
3021 __ffs_func_bind_do_descs, func);
3030 func->function.hs_descriptors = vla_ptr(vlabuf, d, hs_descs);
3034 __ffs_func_bind_do_descs, func);
3043 func->function.ss_descriptors = vla_ptr(vlabuf, d, ss_descs);
3047 __ffs_func_bind_do_descs, func);
3064 __ffs_func_bind_do_nums, func);
3068 func->function.os_desc_table = vla_ptr(vlabuf, d, os_desc_table);
3073 desc = func->function.os_desc_table[i].os_desc =
3085 __ffs_func_bind_do_os_desc, func);
3089 func->function.os_desc_n =
3092 for (i = 0; i< func->ffs->fs_descs_count; i++) {
3093 des_head = func->function.fs_descriptors[i];
3106 for (i = 0; i< func->ffs->fs_descs_count; i++) {
3107 des_head = func->function.fs_descriptors[i];
3126 for (i = 0; i< func->ffs->hs_descs_count; i++) {
3127 des_head = func->function.hs_descriptors[i];
3146 for (i = 0; i< func->ffs->ss_descs_count; i++) {
3147 des_head = func->function.ss_descriptors[i];
3167 ffs->eps = func->eps;
3179 struct ffs_function *func = ffs_func_from_usb(f);
3187 functionfs_unbind(func->ffs);
3203 struct ffs_function *func = ffs_func_from_usb(f);
3204 struct ffs_data *ffs = func->ffs;
3208 intf = ffs_func_revmap_intf(func, interface);
3213 if (ffs->func)
3214 ffs_func_eps_disable(ffs->func);
3227 ffs->func = NULL;
3232 ffs->func = func;
3233 ret = ffs_func_eps_enable(func);
3246 struct ffs_function *func = ffs_func_from_usb(f);
3247 struct ffs_data *ffs = func->ffs;
3274 ret = ffs_func_revmap_intf(func, le16_to_cpu(creq->wIndex));
3280 ret = ffs_func_revmap_ep(func, le16_to_cpu(creq->wIndex));
3283 if (func->ffs->user_flags & FUNCTIONFS_VIRTUAL_ADDR)
3284 ret = func->ffs->eps_addrmap[ret];
3288 if (func->ffs->user_flags & FUNCTIONFS_ALL_CTRL_RECIP)
3307 struct ffs_function *func = ffs_func_from_usb(f);
3309 if (config0 && !(func->ffs->user_flags & FUNCTIONFS_CONFIG0_SETUP))
3314 return (ffs_func_revmap_intf(func,
3317 return (ffs_func_revmap_ep(func,
3320 return (bool) (func->ffs->user_flags &
3338 static int ffs_func_revmap_ep(struct ffs_function *func, u8 num)
3340 num = func->eps_revmap[num & USB_ENDPOINT_NUMBER_MASK];
3344 static int ffs_func_revmap_intf(struct ffs_function *func, u8 intf)
3346 short *nums = func->interfaces_nums;
3347 unsigned count = func->ffs->interfaces_count;
3351 return nums - func->interfaces_nums;
3487 struct ffs_function *func = ffs_func_from_usb(f);
3488 struct ffs_data *ffs = func->ffs;
3491 struct ffs_ep *ep = func->eps;
3496 if (ffs->func == func) {
3497 ffs_func_eps_disable(func);
3498 ffs->func = NULL;
3505 spin_lock_irqsave(&func->ffs->eps_lock, flags);
3512 spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
3513 kfree(func->eps);
3514 func->eps = NULL;
3519 func->function.fs_descriptors = NULL;
3520 func->function.hs_descriptors = NULL;
3521 func->function.ss_descriptors = NULL;
3522 func->interfaces_nums = NULL;
3536 struct ffs_function *func = NULL;
3540 func = kzalloc(sizeof(*func), GFP_KERNEL);
3541 if (unlikely(!func))
3544 func->function.name = "FunctionFS Adapter";
3546 func->function.bind = ffs_func_bind;
3547 func->function.unbind = ffs_func_unbind;
3548 func->function.set_alt = ffs_func_set_alt;
3549 func->function.get_alt = ffs_func_get_alt;
3550 func->function.disable = ffs_func_disable;
3551 func->function.setup = ffs_func_setup;
3552 func->function.req_match = ffs_func_req_match;
3553 func->function.suspend = ffs_func_suspend;
3554 func->function.resume = ffs_func_resume;
3555 func->function.free_func = ffs_free;
3557 return &func->function;