Lines Matching defs:func
95 static void ffs_func_eps_disable(struct ffs_function *func);
96 static int __must_check ffs_func_eps_enable(struct ffs_function *func);
111 static int ffs_func_revmap_ep(struct ffs_function *func, u8 num);
112 static int ffs_func_revmap_intf(struct ffs_function *func, u8 intf);
645 struct ffs_function *func = ffs->func;
646 ret = func ? ffs_func_revmap_intf(func, value) : -ENODEV;
1956 static void ffs_func_eps_disable(struct ffs_function *func)
1963 spin_lock_irqsave(&func->ffs->eps_lock, flags);
1964 count = func->ffs->eps_count;
1965 epfile = func->ffs->epfiles;
1966 ep = func->eps;
1979 spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
1982 static int ffs_func_eps_enable(struct ffs_function *func)
1991 spin_lock_irqsave(&func->ffs->eps_lock, flags);
1992 ffs = func->ffs;
1993 ep = func->eps;
1999 ret = config_ep_by_speed(func->gadget, &func->function, ep->ep);
2020 spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
2840 struct ffs_function *func = priv;
2855 if (func->function.ss_descriptors) {
2857 func->function.ss_descriptors[(long)valuep] = desc;
2858 } else if (func->function.hs_descriptors) {
2860 func->function.hs_descriptors[(long)valuep] = desc;
2863 func->function.fs_descriptors[(long)valuep] = desc;
2869 idx = ffs_ep_addr2idx(func->ffs, ds->bEndpointAddress) - 1;
2873 ffs_ep = func->eps + idx;
2905 ep = usb_ep_autoconfig(func->gadget, ds);
2908 ep->driver_data = func->eps + idx;
2916 func->eps_revmap[ds->bEndpointAddress &
2922 if (func->ffs->user_flags & FUNCTIONFS_VIRTUAL_ADDR)
2939 struct ffs_function *func = priv;
2951 if (func->interfaces_nums[idx] < 0) {
2952 int id = usb_interface_id(func->conf, &func->function);
2955 func->interfaces_nums[idx] = id;
2957 newValue = func->interfaces_nums[idx];
2962 newValue = func->ffs->stringtabs[0]->strings[*valuep - 1].id;
2974 if (unlikely(!func->eps[idx].ep))
2979 descs = func->eps[idx].descs;
2994 struct ffs_function *func = priv;
3002 t = &func->function.os_desc_table[desc->bFirstInterfaceNumber];
3003 t->if_id = func->interfaces_nums[desc->bFirstInterfaceNumber];
3017 t = &func->function.os_desc_table[h->interface];
3018 t->if_id = func->interfaces_nums[h->interface];
3020 ext_prop = func->ffs->ms_os_descs_ext_prop_avail;
3021 func->ffs->ms_os_descs_ext_prop_avail += sizeof(*ext_prop);
3029 ext_prop_name = func->ffs->ms_os_descs_ext_prop_name_avail;
3030 func->ffs->ms_os_descs_ext_prop_name_avail +=
3033 ext_prop_data = func->ffs->ms_os_descs_ext_prop_data_avail;
3034 func->ffs->ms_os_descs_ext_prop_data_avail +=
3072 struct ffs_function *func = ffs_func_from_usb(f);
3096 func->ffs = ffs_data;
3097 func->conf = c;
3098 func->gadget = c->cdev->gadget;
3108 ret = functionfs_bind(func->ffs, c->cdev);
3113 func->function.strings = func->ffs->stringtabs;
3121 struct ffs_function *func = ffs_func_from_usb(f);
3122 struct ffs_data *ffs = func->ffs;
3124 const int full = !!func->ffs->fs_descs_count;
3125 const int high = !!func->ffs->hs_descs_count;
3126 const int super = !!func->ffs->ss_descs_count;
3183 * d_eps == vlabuf, func->eps used to kfree vlabuf later
3185 func->eps = vla_ptr(vlabuf, d, eps);
3186 func->interfaces_nums = vla_ptr(vlabuf, d, inums);
3194 func->function.fs_descriptors = vla_ptr(vlabuf, d, fs_descs);
3198 __ffs_func_bind_do_descs, func);
3208 func->function.hs_descriptors = vla_ptr(vlabuf, d, hs_descs);
3212 __ffs_func_bind_do_descs, func);
3222 func->function.ss_descriptors = func->function.ssp_descriptors =
3227 __ffs_func_bind_do_descs, func);
3245 __ffs_func_bind_do_nums, func);
3249 func->function.os_desc_table = vla_ptr(vlabuf, d, os_desc_table);
3254 desc = func->function.os_desc_table[i].os_desc =
3266 __ffs_func_bind_do_os_desc, func);
3270 func->function.os_desc_n =
3286 struct ffs_function *func = ffs_func_from_usb(f);
3294 functionfs_unbind(func->ffs);
3312 struct ffs_function *func = ffs_func_from_usb(f);
3313 struct ffs_data *ffs = func->ffs;
3317 intf = ffs_func_revmap_intf(func, interface);
3322 if (ffs->func)
3323 ffs_func_eps_disable(ffs->func);
3336 ffs->func = NULL;
3341 ffs->func = func;
3342 ret = ffs_func_eps_enable(func);
3356 struct ffs_function *func = ffs_func_from_usb(f);
3357 struct ffs_data *ffs = func->ffs;
3384 ret = ffs_func_revmap_intf(func, le16_to_cpu(creq->wIndex));
3390 ret = ffs_func_revmap_ep(func, le16_to_cpu(creq->wIndex));
3393 if (func->ffs->user_flags & FUNCTIONFS_VIRTUAL_ADDR)
3394 ret = func->ffs->eps_addrmap[ret];
3398 if (func->ffs->user_flags & FUNCTIONFS_ALL_CTRL_RECIP)
3417 struct ffs_function *func = ffs_func_from_usb(f);
3419 if (config0 && !(func->ffs->user_flags & FUNCTIONFS_CONFIG0_SETUP))
3424 return (ffs_func_revmap_intf(func,
3427 return (ffs_func_revmap_ep(func,
3430 return (bool) (func->ffs->user_flags &
3450 static int ffs_func_revmap_ep(struct ffs_function *func, u8 num)
3452 num = func->eps_revmap[num & USB_ENDPOINT_NUMBER_MASK];
3456 static int ffs_func_revmap_intf(struct ffs_function *func, u8 intf)
3458 short *nums = func->interfaces_nums;
3459 unsigned count = func->ffs->interfaces_count;
3463 return nums - func->interfaces_nums;
3599 struct ffs_function *func = ffs_func_from_usb(f);
3600 struct ffs_data *ffs = func->ffs;
3603 struct ffs_ep *ep = func->eps;
3608 if (ffs->func == func) {
3609 ffs_func_eps_disable(func);
3610 ffs->func = NULL;
3621 spin_lock_irqsave(&func->ffs->eps_lock, flags);
3628 spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
3629 kfree(func->eps);
3630 func->eps = NULL;
3635 func->function.fs_descriptors = NULL;
3636 func->function.hs_descriptors = NULL;
3637 func->function.ss_descriptors = NULL;
3638 func->function.ssp_descriptors = NULL;
3639 func->interfaces_nums = NULL;
3645 struct ffs_function *func;
3649 func = kzalloc(sizeof(*func), GFP_KERNEL);
3650 if (unlikely(!func))
3653 func->function.name = "Function FS Gadget";
3655 func->function.bind = ffs_func_bind;
3656 func->function.unbind = ffs_func_unbind;
3657 func->function.set_alt = ffs_func_set_alt;
3658 func->function.disable = ffs_func_disable;
3659 func->function.setup = ffs_func_setup;
3660 func->function.req_match = ffs_func_req_match;
3661 func->function.suspend = ffs_func_suspend;
3662 func->function.resume = ffs_func_resume;
3663 func->function.free_func = ffs_free;
3665 return &func->function;