Lines Matching defs:func

102 static void ffs_func_eps_disable(struct ffs_function *func);
103 static int __must_check ffs_func_eps_enable(struct ffs_function *func);
118 static int ffs_func_revmap_ep(struct ffs_function *func, u8 num);
119 static int ffs_func_revmap_intf(struct ffs_function *func, u8 intf);
667 struct ffs_function *func = ffs->func;
668 ret = func ? ffs_func_revmap_intf(func, value) : -ENODEV;
2380 static void ffs_func_eps_disable(struct ffs_function *func)
2387 spin_lock_irqsave(&func->ffs->eps_lock, flags);
2388 count = func->ffs->eps_count;
2389 epfile = func->ffs->epfiles;
2390 ep = func->eps;
2403 spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
2406 static int ffs_func_eps_enable(struct ffs_function *func)
2415 spin_lock_irqsave(&func->ffs->eps_lock, flags);
2416 ffs = func->ffs;
2417 ep = func->eps;
2423 ret = config_ep_by_speed(func->gadget, &func->function, ep->ep);
2444 spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
3251 struct ffs_function *func = priv;
3266 if (func->function.ss_descriptors) {
3268 func->function.ss_descriptors[(long)valuep] = desc;
3269 } else if (func->function.hs_descriptors) {
3271 func->function.hs_descriptors[(long)valuep] = desc;
3274 func->function.fs_descriptors[(long)valuep] = desc;
3280 idx = ffs_ep_addr2idx(func->ffs, ds->bEndpointAddress) - 1;
3284 ffs_ep = func->eps + idx;
3316 ep = usb_ep_autoconfig(func->gadget, ds);
3319 ep->driver_data = func->eps + idx;
3327 func->eps_revmap[ds->bEndpointAddress &
3333 if (func->ffs->user_flags & FUNCTIONFS_VIRTUAL_ADDR)
3350 struct ffs_function *func = priv;
3362 if (func->interfaces_nums[idx] < 0) {
3363 int id = usb_interface_id(func->conf, &func->function);
3366 func->interfaces_nums[idx] = id;
3368 newValue = func->interfaces_nums[idx];
3373 newValue = func->ffs->stringtabs[0]->strings[*valuep - 1].id;
3385 if (!func->eps[idx].ep)
3390 descs = func->eps[idx].descs;
3405 struct ffs_function *func = priv;
3413 t = &func->function.os_desc_table[desc->bFirstInterfaceNumber];
3414 t->if_id = func->interfaces_nums[desc->bFirstInterfaceNumber];
3427 t = &func->function.os_desc_table[h->interface];
3428 t->if_id = func->interfaces_nums[h->interface];
3430 ext_prop = func->ffs->ms_os_descs_ext_prop_avail;
3431 func->ffs->ms_os_descs_ext_prop_avail += sizeof(*ext_prop);
3439 ext_prop_name = func->ffs->ms_os_descs_ext_prop_name_avail;
3440 func->ffs->ms_os_descs_ext_prop_name_avail +=
3443 ext_prop_data = func->ffs->ms_os_descs_ext_prop_data_avail;
3444 func->ffs->ms_os_descs_ext_prop_data_avail +=
3482 struct ffs_function *func = ffs_func_from_usb(f);
3504 func->ffs = ffs_data;
3505 func->conf = c;
3506 func->gadget = c->cdev->gadget;
3516 ret = functionfs_bind(func->ffs, c->cdev);
3521 func->function.strings = func->ffs->stringtabs;
3529 struct ffs_function *func = ffs_func_from_usb(f);
3530 struct ffs_data *ffs = func->ffs;
3532 const int full = !!func->ffs->fs_descs_count;
3533 const int high = !!func->ffs->hs_descs_count;
3534 const int super = !!func->ffs->ss_descs_count;
3589 * d_eps == vlabuf, func->eps used to kfree vlabuf later
3591 func->eps = vla_ptr(vlabuf, d, eps);
3592 func->interfaces_nums = vla_ptr(vlabuf, d, inums);
3600 func->function.fs_descriptors = vla_ptr(vlabuf, d, fs_descs);
3604 __ffs_func_bind_do_descs, func);
3614 func->function.hs_descriptors = vla_ptr(vlabuf, d, hs_descs);
3618 __ffs_func_bind_do_descs, func);
3628 func->function.ss_descriptors = func->function.ssp_descriptors =
3633 __ffs_func_bind_do_descs, func);
3651 __ffs_func_bind_do_nums, func);
3655 func->function.os_desc_table = vla_ptr(vlabuf, d, os_desc_table);
3660 desc = func->function.os_desc_table[i].os_desc =
3672 __ffs_func_bind_do_os_desc, func);
3676 func->function.os_desc_n =
3692 struct ffs_function *func = ffs_func_from_usb(f);
3700 functionfs_unbind(func->ffs);
3718 struct ffs_function *func = ffs_func_from_usb(f);
3719 struct ffs_data *ffs = func->ffs;
3723 intf = ffs_func_revmap_intf(func, interface);
3728 if (ffs->func)
3729 ffs_func_eps_disable(ffs->func);
3742 ffs->func = NULL;
3747 ffs->func = func;
3748 ret = ffs_func_eps_enable(func);
3762 struct ffs_function *func = ffs_func_from_usb(f);
3763 struct ffs_data *ffs = func->ffs;
3788 ret = ffs_func_revmap_intf(func, le16_to_cpu(creq->wIndex));
3794 ret = ffs_func_revmap_ep(func, le16_to_cpu(creq->wIndex));
3797 if (func->ffs->user_flags & FUNCTIONFS_VIRTUAL_ADDR)
3798 ret = func->ffs->eps_addrmap[ret];
3802 if (func->ffs->user_flags & FUNCTIONFS_ALL_CTRL_RECIP)
3821 struct ffs_function *func = ffs_func_from_usb(f);
3823 if (config0 && !(func->ffs->user_flags & FUNCTIONFS_CONFIG0_SETUP))
3828 return (ffs_func_revmap_intf(func,
3831 return (ffs_func_revmap_ep(func,
3834 return (bool) (func->ffs->user_flags &
3852 static int ffs_func_revmap_ep(struct ffs_function *func, u8 num)
3854 num = func->eps_revmap[num & USB_ENDPOINT_NUMBER_MASK];
3858 static int ffs_func_revmap_intf(struct ffs_function *func, u8 intf)
3860 short *nums = func->interfaces_nums;
3861 unsigned count = func->ffs->interfaces_count;
3865 return nums - func->interfaces_nums;
4021 struct ffs_function *func = ffs_func_from_usb(f);
4022 struct ffs_data *ffs = func->ffs;
4025 struct ffs_ep *ep = func->eps;
4029 if (ffs->func == func) {
4030 ffs_func_eps_disable(func);
4031 ffs->func = NULL;
4042 spin_lock_irqsave(&func->ffs->eps_lock, flags);
4049 spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
4050 kfree(func->eps);
4051 func->eps = NULL;
4056 func->function.fs_descriptors = NULL;
4057 func->function.hs_descriptors = NULL;
4058 func->function.ss_descriptors = NULL;
4059 func->function.ssp_descriptors = NULL;
4060 func->interfaces_nums = NULL;
4066 struct ffs_function *func;
4068 func = kzalloc(sizeof(*func), GFP_KERNEL);
4069 if (!func)
4072 func->function.name = "Function FS Gadget";
4074 func->function.bind = ffs_func_bind;
4075 func->function.unbind = ffs_func_unbind;
4076 func->function.set_alt = ffs_func_set_alt;
4077 func->function.disable = ffs_func_disable;
4078 func->function.setup = ffs_func_setup;
4079 func->function.req_match = ffs_func_req_match;
4080 func->function.suspend = ffs_func_suspend;
4081 func->function.resume = ffs_func_resume;
4082 func->function.free_func = ffs_free;
4084 return &func->function;