1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#include <linux/blkdev.h>
18#include <linux/pagemap.h>
19#include <linux/export.h>
20#include <linux/fs_parser.h>
21#include <linux/hid.h>
22#include <linux/mm.h>
23#include <linux/module.h>
24#include <linux/scatterlist.h>
25#include <linux/sched/signal.h>
26#include <linux/uio.h>
27#include <linux/vmalloc.h>
28#include <asm/unaligned.h>
29
30#include <linux/usb/ccid.h>
31#include <linux/usb/composite.h>
32#include <linux/usb/functionfs.h>
33
34#include <linux/aio.h>
35#include <linux/kthread.h>
36#include <linux/poll.h>
37#include <linux/eventfd.h>
38
39#include "u_fs.h"
40#include "u_f.h"
41#include "u_os_desc.h"
42#include "configfs.h"
43
44#define FUNCTIONFS_MAGIC 0xa647361
45
46
47static void ffs_data_get(struct ffs_data *ffs);
48static void ffs_data_put(struct ffs_data *ffs);
49
50static struct ffs_data *__must_check ffs_data_new(const char *dev_name)
51 __attribute__((malloc));
52
53
54static void ffs_data_opened(struct ffs_data *ffs);
55static void ffs_data_closed(struct ffs_data *ffs);
56
57
58static int __must_check
59__ffs_data_got_descs(struct ffs_data *ffs, char *data, size_t len);
60static int __must_check
61__ffs_data_got_strings(struct ffs_data *ffs, char *data, size_t len);
62
63
64
65
66struct ffs_ep;
67
68struct ffs_function {
69 struct usb_configuration *conf;
70 struct usb_gadget *gadget;
71 struct ffs_data *ffs;
72
73 struct ffs_ep *eps;
74 u8 eps_revmap[16];
75 short *interfaces_nums;
76
77 struct usb_function function;
78};
79
80
81static struct ffs_function *ffs_func_from_usb(struct usb_function *f)
82{
83 return container_of(f, struct ffs_function, function);
84}
85
86
87static inline enum ffs_setup_state
88ffs_setup_state_clear_cancelled(struct ffs_data *ffs)
89{
90 return (enum ffs_setup_state)
91 cmpxchg(&ffs->setup_state, FFS_SETUP_CANCELLED, FFS_NO_SETUP);
92}
93
94
95static void ffs_func_eps_disable(struct ffs_function *func);
96static int __must_check ffs_func_eps_enable(struct ffs_function *func);
97
98static int ffs_func_bind(struct usb_configuration *,
99 struct usb_function *);
100static int ffs_func_set_alt(struct usb_function *, unsigned, unsigned);
101static void ffs_func_disable(struct usb_function *);
102static int ffs_func_setup(struct usb_function *,
103 const struct usb_ctrlrequest *);
104static bool ffs_func_req_match(struct usb_function *,
105 const struct usb_ctrlrequest *,
106 bool config0);
107static void ffs_func_suspend(struct usb_function *);
108static void ffs_func_resume(struct usb_function *);
109
110
111static int ffs_func_revmap_ep(struct ffs_function *func, u8 num);
112static int ffs_func_revmap_intf(struct ffs_function *func, u8 intf);
113
114
115
116
117struct ffs_ep {
118 struct usb_ep *ep;
119 struct usb_request *req;
120
121
122 struct usb_endpoint_descriptor *descs[3];
123
124 u8 num;
125
126 int status;
127};
128
129struct ffs_epfile {
130
131 struct mutex mutex;
132
133 struct ffs_data *ffs;
134 struct ffs_ep *ep;
135
136 struct dentry *dentry;
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193 struct ffs_buffer *read_buffer;
194#define READ_BUFFER_DROP ((struct ffs_buffer *)ERR_PTR(-ESHUTDOWN))
195
196 char name[5];
197
198 unsigned char in;
199 unsigned char isoc;
200
201 unsigned char _pad;
202};
203
204struct ffs_buffer {
205 size_t length;
206 char *data;
207 char storage[];
208};
209
210
211
212struct ffs_io_data {
213 bool aio;
214 bool read;
215
216 struct kiocb *kiocb;
217 struct iov_iter data;
218 const void *to_free;
219 char *buf;
220
221 struct mm_struct *mm;
222 struct work_struct work;
223
224 struct usb_ep *ep;
225 struct usb_request *req;
226 struct sg_table sgt;
227 bool use_sg;
228
229 struct ffs_data *ffs;
230};
231
232struct ffs_desc_helper {
233 struct ffs_data *ffs;
234 unsigned interfaces_count;
235 unsigned eps_count;
236};
237
238static int __must_check ffs_epfiles_create(struct ffs_data *ffs);
239static void ffs_epfiles_destroy(struct ffs_epfile *epfiles, unsigned count);
240
241static struct dentry *
242ffs_sb_create_file(struct super_block *sb, const char *name, void *data,
243 const struct file_operations *fops);
244
245
246
247DEFINE_MUTEX(ffs_lock);
248EXPORT_SYMBOL_GPL(ffs_lock);
249
250static struct ffs_dev *_ffs_find_dev(const char *name);
251static struct ffs_dev *_ffs_alloc_dev(void);
252static void _ffs_free_dev(struct ffs_dev *dev);
253static void *ffs_acquire_dev(const char *dev_name);
254static void ffs_release_dev(struct ffs_data *ffs_data);
255static int ffs_ready(struct ffs_data *ffs);
256static void ffs_closed(struct ffs_data *ffs);
257
258
259
260static int ffs_mutex_lock(struct mutex *mutex, unsigned nonblock)
261 __attribute__((warn_unused_result, nonnull));
262static char *ffs_prepare_buffer(const char __user *buf, size_t len)
263 __attribute__((warn_unused_result, nonnull));
264
265
266
267
268static void ffs_ep0_complete(struct usb_ep *ep, struct usb_request *req)
269{
270 struct ffs_data *ffs = req->context;
271
272 complete(&ffs->ep0req_completion);
273}
274
275static int __ffs_ep0_queue_wait(struct ffs_data *ffs, char *data, size_t len)
276 __releases(&ffs->ev.waitq.lock)
277{
278 struct usb_request *req = ffs->ep0req;
279 int ret;
280
281 req->zero = len < le16_to_cpu(ffs->ev.setup.wLength);
282
283 spin_unlock_irq(&ffs->ev.waitq.lock);
284
285 req->buf = data;
286 req->length = len;
287
288
289
290
291
292
293 if (req->buf == NULL)
294 req->buf = (void *)0xDEADBABE;
295
296 reinit_completion(&ffs->ep0req_completion);
297
298 ret = usb_ep_queue(ffs->gadget->ep0, req, GFP_ATOMIC);
299 if (unlikely(ret < 0))
300 return ret;
301
302 ret = wait_for_completion_interruptible(&ffs->ep0req_completion);
303 if (unlikely(ret)) {
304 usb_ep_dequeue(ffs->gadget->ep0, req);
305 return -EINTR;
306 }
307
308 ffs->setup_state = FFS_NO_SETUP;
309 return req->status ? req->status : req->actual;
310}
311
312static int __ffs_ep0_stall(struct ffs_data *ffs)
313{
314 if (ffs->ev.can_stall) {
315 pr_vdebug("ep0 stall\n");
316 usb_ep_set_halt(ffs->gadget->ep0);
317 ffs->setup_state = FFS_NO_SETUP;
318 return -EL2HLT;
319 } else {
320 pr_debug("bogus ep0 stall!\n");
321 return -ESRCH;
322 }
323}
324
325static ssize_t ffs_ep0_write(struct file *file, const char __user *buf,
326 size_t len, loff_t *ptr)
327{
328 struct ffs_data *ffs = file->private_data;
329 ssize_t ret;
330 char *data;
331
332 ENTER();
333
334
335 if (ffs_setup_state_clear_cancelled(ffs) == FFS_SETUP_CANCELLED)
336 return -EIDRM;
337
338
339 ret = ffs_mutex_lock(&ffs->mutex, file->f_flags & O_NONBLOCK);
340 if (unlikely(ret < 0))
341 return ret;
342
343
344 switch (ffs->state) {
345 case FFS_READ_DESCRIPTORS:
346 case FFS_READ_STRINGS:
347
348 if (unlikely(len < 16)) {
349 ret = -EINVAL;
350 break;
351 }
352
353 data = ffs_prepare_buffer(buf, len);
354 if (IS_ERR(data)) {
355 ret = PTR_ERR(data);
356 break;
357 }
358
359
360 if (ffs->state == FFS_READ_DESCRIPTORS) {
361 pr_info("read descriptors\n");
362 ret = __ffs_data_got_descs(ffs, data, len);
363 if (unlikely(ret < 0))
364 break;
365
366 ffs->state = FFS_READ_STRINGS;
367 ret = len;
368 } else {
369 pr_info("read strings\n");
370 ret = __ffs_data_got_strings(ffs, data, len);
371 if (unlikely(ret < 0))
372 break;
373
374 ret = ffs_epfiles_create(ffs);
375 if (unlikely(ret)) {
376 ffs->state = FFS_CLOSING;
377 break;
378 }
379
380 ffs->state = FFS_ACTIVE;
381 mutex_unlock(&ffs->mutex);
382
383 ret = ffs_ready(ffs);
384 if (unlikely(ret < 0)) {
385 ffs->state = FFS_CLOSING;
386 return ret;
387 }
388
389 return len;
390 }
391 break;
392
393 case FFS_ACTIVE:
394 data = NULL;
395
396
397
398
399 spin_lock_irq(&ffs->ev.waitq.lock);
400 switch (ffs_setup_state_clear_cancelled(ffs)) {
401 case FFS_SETUP_CANCELLED:
402 ret = -EIDRM;
403 goto done_spin;
404
405 case FFS_NO_SETUP:
406 ret = -ESRCH;
407 goto done_spin;
408
409 case FFS_SETUP_PENDING:
410 break;
411 }
412
413
414 if (!(ffs->ev.setup.bRequestType & USB_DIR_IN)) {
415 spin_unlock_irq(&ffs->ev.waitq.lock);
416 ret = __ffs_ep0_stall(ffs);
417 break;
418 }
419
420
421 len = min(len, (size_t)le16_to_cpu(ffs->ev.setup.wLength));
422
423 spin_unlock_irq(&ffs->ev.waitq.lock);
424
425 data = ffs_prepare_buffer(buf, len);
426 if (IS_ERR(data)) {
427 ret = PTR_ERR(data);
428 break;
429 }
430
431 spin_lock_irq(&ffs->ev.waitq.lock);
432
433
434
435
436
437
438
439
440
441
442
443
444
445 if (ffs_setup_state_clear_cancelled(ffs) ==
446 FFS_SETUP_CANCELLED) {
447 ret = -EIDRM;
448done_spin:
449 spin_unlock_irq(&ffs->ev.waitq.lock);
450 } else {
451
452 ret = __ffs_ep0_queue_wait(ffs, data, len);
453 }
454 kfree(data);
455 break;
456
457 default:
458 ret = -EBADFD;
459 break;
460 }
461
462 mutex_unlock(&ffs->mutex);
463 return ret;
464}
465
466
467static ssize_t __ffs_ep0_read_events(struct ffs_data *ffs, char __user *buf,
468 size_t n)
469 __releases(&ffs->ev.waitq.lock)
470{
471
472
473
474
475
476 struct usb_functionfs_event events[ARRAY_SIZE(ffs->ev.types)];
477 const size_t size = n * sizeof *events;
478 unsigned i = 0;
479
480 memset(events, 0, size);
481
482 do {
483 events[i].type = ffs->ev.types[i];
484 if (events[i].type == FUNCTIONFS_SETUP) {
485 events[i].u.setup = ffs->ev.setup;
486 ffs->setup_state = FFS_SETUP_PENDING;
487 }
488 } while (++i < n);
489
490 ffs->ev.count -= n;
491 if (ffs->ev.count)
492 memmove(ffs->ev.types, ffs->ev.types + n,
493 ffs->ev.count * sizeof *ffs->ev.types);
494
495 spin_unlock_irq(&ffs->ev.waitq.lock);
496 mutex_unlock(&ffs->mutex);
497
498 return unlikely(copy_to_user(buf, events, size)) ? -EFAULT : size;
499}
500
501static ssize_t ffs_ep0_read(struct file *file, char __user *buf,
502 size_t len, loff_t *ptr)
503{
504 struct ffs_data *ffs = file->private_data;
505 char *data = NULL;
506 size_t n;
507 int ret;
508
509 ENTER();
510
511
512 if (ffs_setup_state_clear_cancelled(ffs) == FFS_SETUP_CANCELLED)
513 return -EIDRM;
514
515
516 ret = ffs_mutex_lock(&ffs->mutex, file->f_flags & O_NONBLOCK);
517 if (unlikely(ret < 0))
518 return ret;
519
520
521 if (ffs->state != FFS_ACTIVE) {
522 ret = -EBADFD;
523 goto done_mutex;
524 }
525
526
527
528
529
530 spin_lock_irq(&ffs->ev.waitq.lock);
531
532 switch (ffs_setup_state_clear_cancelled(ffs)) {
533 case FFS_SETUP_CANCELLED:
534 ret = -EIDRM;
535 break;
536
537 case FFS_NO_SETUP:
538 n = len / sizeof(struct usb_functionfs_event);
539 if (unlikely(!n)) {
540 ret = -EINVAL;
541 break;
542 }
543
544 if ((file->f_flags & O_NONBLOCK) && !ffs->ev.count) {
545 ret = -EAGAIN;
546 break;
547 }
548
549 if (wait_event_interruptible_exclusive_locked_irq(ffs->ev.waitq,
550 ffs->ev.count)) {
551 ret = -EINTR;
552 break;
553 }
554
555
556 return __ffs_ep0_read_events(ffs, buf,
557 min(n, (size_t)ffs->ev.count));
558
559 case FFS_SETUP_PENDING:
560 if (ffs->ev.setup.bRequestType & USB_DIR_IN) {
561 spin_unlock_irq(&ffs->ev.waitq.lock);
562 ret = __ffs_ep0_stall(ffs);
563 goto done_mutex;
564 }
565
566 len = min(len, (size_t)le16_to_cpu(ffs->ev.setup.wLength));
567
568 spin_unlock_irq(&ffs->ev.waitq.lock);
569
570 if (likely(len)) {
571 data = kmalloc(len, GFP_KERNEL);
572 if (unlikely(!data)) {
573 ret = -ENOMEM;
574 goto done_mutex;
575 }
576 }
577
578 spin_lock_irq(&ffs->ev.waitq.lock);
579
580
581 if (ffs_setup_state_clear_cancelled(ffs) ==
582 FFS_SETUP_CANCELLED) {
583 ret = -EIDRM;
584 break;
585 }
586
587
588 ret = __ffs_ep0_queue_wait(ffs, data, len);
589 if (likely(ret > 0) && unlikely(copy_to_user(buf, data, len)))
590 ret = -EFAULT;
591 goto done_mutex;
592
593 default:
594 ret = -EBADFD;
595 break;
596 }
597
598 spin_unlock_irq(&ffs->ev.waitq.lock);
599done_mutex:
600 mutex_unlock(&ffs->mutex);
601 kfree(data);
602 return ret;
603}
604
605static int ffs_ep0_open(struct inode *inode, struct file *file)
606{
607 struct ffs_data *ffs = inode->i_private;
608
609 ENTER();
610
611 if (unlikely(ffs->state == FFS_CLOSING))
612 return -EBUSY;
613
614 file->private_data = ffs;
615 ffs_data_opened(ffs);
616
617 return 0;
618}
619
620static int ffs_ep0_release(struct inode *inode, struct file *file)
621{
622 struct ffs_data *ffs = file->private_data;
623
624 ENTER();
625
626 ffs_data_closed(ffs);
627
628 return 0;
629}
630
631static long ffs_ep0_ioctl(struct file *file, unsigned code, unsigned long value)
632{
633 struct ffs_data *ffs = file->private_data;
634 struct usb_gadget *gadget = ffs->gadget;
635 long ret;
636
637 ENTER();
638
639 if (code == FUNCTIONFS_INTERFACE_REVMAP) {
640 struct ffs_function *func = ffs->func;
641 ret = func ? ffs_func_revmap_intf(func, value) : -ENODEV;
642 } else if (gadget && gadget->ops->ioctl) {
643 ret = gadget->ops->ioctl(gadget, code, value);
644 } else {
645 ret = -ENOTTY;
646 }
647
648 return ret;
649}
650
651static __poll_t ffs_ep0_poll(struct file *file, poll_table *wait)
652{
653 struct ffs_data *ffs = file->private_data;
654 __poll_t mask = EPOLLWRNORM;
655 int ret;
656
657 poll_wait(file, &ffs->ev.waitq, wait);
658
659 ret = ffs_mutex_lock(&ffs->mutex, file->f_flags & O_NONBLOCK);
660 if (unlikely(ret < 0))
661 return mask;
662
663 switch (ffs->state) {
664 case FFS_READ_DESCRIPTORS:
665 case FFS_READ_STRINGS:
666 mask |= EPOLLOUT;
667 break;
668
669 case FFS_ACTIVE:
670 switch (ffs->setup_state) {
671 case FFS_NO_SETUP:
672 if (ffs->ev.count)
673 mask |= EPOLLIN;
674 break;
675
676 case FFS_SETUP_PENDING:
677 case FFS_SETUP_CANCELLED:
678 mask |= (EPOLLIN | EPOLLOUT);
679 break;
680 }
681 case FFS_CLOSING:
682 break;
683 case FFS_DEACTIVATED:
684 break;
685 }
686
687 mutex_unlock(&ffs->mutex);
688
689 return mask;
690}
691
692static const struct file_operations ffs_ep0_operations = {
693 .llseek = no_llseek,
694
695 .open = ffs_ep0_open,
696 .write = ffs_ep0_write,
697 .read = ffs_ep0_read,
698 .release = ffs_ep0_release,
699 .unlocked_ioctl = ffs_ep0_ioctl,
700 .poll = ffs_ep0_poll,
701};
702
703
704
705
706static void ffs_epfile_io_complete(struct usb_ep *_ep, struct usb_request *req)
707{
708 ENTER();
709 if (likely(req->context)) {
710 struct ffs_ep *ep = _ep->driver_data;
711 ep->status = req->status ? req->status : req->actual;
712 complete(req->context);
713 }
714}
715
716static ssize_t ffs_copy_to_iter(void *data, int data_len, struct iov_iter *iter)
717{
718 ssize_t ret = copy_to_iter(data, data_len, iter);
719 if (likely(ret == data_len))
720 return ret;
721
722 if (unlikely(iov_iter_count(iter)))
723 return -EFAULT;
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752 pr_err("functionfs read size %d > requested size %zd, dropping excess data. "
753 "Align read buffer size to max packet size to avoid the problem.\n",
754 data_len, ret);
755
756 return ret;
757}
758
759
760
761
762
763
764static void *ffs_build_sg_list(struct sg_table *sgt, size_t sz)
765{
766 struct page **pages;
767 void *vaddr, *ptr;
768 unsigned int n_pages;
769 int i;
770
771 vaddr = vmalloc(sz);
772 if (!vaddr)
773 return NULL;
774
775 n_pages = PAGE_ALIGN(sz) >> PAGE_SHIFT;
776 pages = kvmalloc_array(n_pages, sizeof(struct page *), GFP_KERNEL);
777 if (!pages) {
778 vfree(vaddr);
779
780 return NULL;
781 }
782 for (i = 0, ptr = vaddr; i < n_pages; ++i, ptr += PAGE_SIZE)
783 pages[i] = vmalloc_to_page(ptr);
784
785 if (sg_alloc_table_from_pages(sgt, pages, n_pages, 0, sz, GFP_KERNEL)) {
786 kvfree(pages);
787 vfree(vaddr);
788
789 return NULL;
790 }
791 kvfree(pages);
792
793 return vaddr;
794}
795
796static inline void *ffs_alloc_buffer(struct ffs_io_data *io_data,
797 size_t data_len)
798{
799 if (io_data->use_sg)
800 return ffs_build_sg_list(&io_data->sgt, data_len);
801
802 return kmalloc(data_len, GFP_KERNEL);
803}
804
805static inline void ffs_free_buffer(struct ffs_io_data *io_data)
806{
807 if (!io_data->buf)
808 return;
809
810 if (io_data->use_sg) {
811 sg_free_table(&io_data->sgt);
812 vfree(io_data->buf);
813 } else {
814 kfree(io_data->buf);
815 }
816}
817
818static void ffs_user_copy_worker(struct work_struct *work)
819{
820 struct ffs_io_data *io_data = container_of(work, struct ffs_io_data,
821 work);
822 int ret = io_data->req->status ? io_data->req->status :
823 io_data->req->actual;
824 bool kiocb_has_eventfd = io_data->kiocb->ki_flags & IOCB_EVENTFD;
825
826 if (io_data->read && ret > 0) {
827 kthread_use_mm(io_data->mm);
828 ret = ffs_copy_to_iter(io_data->buf, ret, &io_data->data);
829 kthread_unuse_mm(io_data->mm);
830 }
831
832 io_data->kiocb->ki_complete(io_data->kiocb, ret, ret);
833
834 if (io_data->ffs->ffs_eventfd && !kiocb_has_eventfd)
835 eventfd_signal(io_data->ffs->ffs_eventfd, 1);
836
837 usb_ep_free_request(io_data->ep, io_data->req);
838
839 if (io_data->read)
840 kfree(io_data->to_free);
841 ffs_free_buffer(io_data);
842 kfree(io_data);
843}
844
845static void ffs_epfile_async_io_complete(struct usb_ep *_ep,
846 struct usb_request *req)
847{
848 struct ffs_io_data *io_data = req->context;
849 struct ffs_data *ffs = io_data->ffs;
850
851 ENTER();
852
853 INIT_WORK(&io_data->work, ffs_user_copy_worker);
854 queue_work(ffs->io_completion_wq, &io_data->work);
855}
856
857static void __ffs_epfile_read_buffer_free(struct ffs_epfile *epfile)
858{
859
860
861
862
863 struct ffs_buffer *buf = xchg(&epfile->read_buffer, READ_BUFFER_DROP);
864 if (buf && buf != READ_BUFFER_DROP)
865 kfree(buf);
866}
867
868
869static ssize_t __ffs_epfile_read_buffered(struct ffs_epfile *epfile,
870 struct iov_iter *iter)
871{
872
873
874
875
876
877 struct ffs_buffer *buf = xchg(&epfile->read_buffer, NULL);
878 ssize_t ret;
879 if (!buf || buf == READ_BUFFER_DROP)
880 return 0;
881
882 ret = copy_to_iter(buf->data, buf->length, iter);
883 if (buf->length == ret) {
884 kfree(buf);
885 return ret;
886 }
887
888 if (unlikely(iov_iter_count(iter))) {
889 ret = -EFAULT;
890 } else {
891 buf->length -= ret;
892 buf->data += ret;
893 }
894
895 if (cmpxchg(&epfile->read_buffer, NULL, buf))
896 kfree(buf);
897
898 return ret;
899}
900
901
902static ssize_t __ffs_epfile_read_data(struct ffs_epfile *epfile,
903 void *data, int data_len,
904 struct iov_iter *iter)
905{
906 struct ffs_buffer *buf;
907
908 ssize_t ret = copy_to_iter(data, data_len, iter);
909 if (likely(data_len == ret))
910 return ret;
911
912 if (unlikely(iov_iter_count(iter)))
913 return -EFAULT;
914
915
916 pr_warn("functionfs read size %d > requested size %zd, splitting request into multiple reads.",
917 data_len, ret);
918
919 data_len -= ret;
920 buf = kmalloc(sizeof(*buf) + data_len, GFP_KERNEL);
921 if (!buf)
922 return -ENOMEM;
923 buf->length = data_len;
924 buf->data = buf->storage;
925 memcpy(buf->storage, data + ret, data_len);
926
927
928
929
930
931
932
933 if (unlikely(cmpxchg(&epfile->read_buffer, NULL, buf)))
934 kfree(buf);
935
936 return ret;
937}
938
939static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data)
940{
941 struct ffs_epfile *epfile = file->private_data;
942 struct usb_request *req;
943 struct ffs_ep *ep;
944 char *data = NULL;
945 ssize_t ret, data_len = -EINVAL;
946 int halt;
947
948
949 if (WARN_ON(epfile->ffs->state != FFS_ACTIVE))
950 return -ENODEV;
951
952
953 ep = epfile->ep;
954 if (!ep) {
955 if (file->f_flags & O_NONBLOCK)
956 return -EAGAIN;
957
958 ret = wait_event_interruptible(
959 epfile->ffs->wait, (ep = epfile->ep));
960 if (ret)
961 return -EINTR;
962 }
963
964
965 halt = (!io_data->read == !epfile->in);
966 if (halt && epfile->isoc)
967 return -EINVAL;
968
969
970 ret = ffs_mutex_lock(&epfile->mutex, file->f_flags & O_NONBLOCK);
971 if (unlikely(ret))
972 goto error;
973
974
975 if (!halt) {
976 struct usb_gadget *gadget;
977
978
979
980
981
982
983
984
985 if (!io_data->aio && io_data->read) {
986 ret = __ffs_epfile_read_buffered(epfile, &io_data->data);
987 if (ret)
988 goto error_mutex;
989 }
990
991
992
993
994
995
996 gadget = epfile->ffs->gadget;
997
998 spin_lock_irq(&epfile->ffs->eps_lock);
999
1000 if (epfile->ep != ep) {
1001 ret = -ESHUTDOWN;
1002 goto error_lock;
1003 }
1004 data_len = iov_iter_count(&io_data->data);
1005
1006
1007
1008
1009 if (io_data->read)
1010 data_len = usb_ep_align_maybe(gadget, ep->ep, data_len);
1011
1012 io_data->use_sg = gadget->sg_supported && data_len > PAGE_SIZE;
1013 spin_unlock_irq(&epfile->ffs->eps_lock);
1014
1015 data = ffs_alloc_buffer(io_data, data_len);
1016 if (unlikely(!data)) {
1017 ret = -ENOMEM;
1018 goto error_mutex;
1019 }
1020 if (!io_data->read &&
1021 !copy_from_iter_full(data, data_len, &io_data->data)) {
1022 ret = -EFAULT;
1023 goto error_mutex;
1024 }
1025 }
1026
1027 spin_lock_irq(&epfile->ffs->eps_lock);
1028
1029 if (epfile->ep != ep) {
1030
1031 ret = -ESHUTDOWN;
1032 } else if (halt) {
1033 ret = usb_ep_set_halt(ep->ep);
1034 if (!ret)
1035 ret = -EBADMSG;
1036 } else if (unlikely(data_len == -EINVAL)) {
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048 WARN(1, "%s: data_len == -EINVAL\n", __func__);
1049 ret = -EINVAL;
1050 } else if (!io_data->aio) {
1051 DECLARE_COMPLETION_ONSTACK(done);
1052 bool interrupted = false;
1053
1054 req = ep->req;
1055 if (io_data->use_sg) {
1056 req->buf = NULL;
1057 req->sg = io_data->sgt.sgl;
1058 req->num_sgs = io_data->sgt.nents;
1059 } else {
1060 req->buf = data;
1061 req->num_sgs = 0;
1062 }
1063 req->length = data_len;
1064
1065 io_data->buf = data;
1066
1067 req->context = &done;
1068 req->complete = ffs_epfile_io_complete;
1069
1070 ret = usb_ep_queue(ep->ep, req, GFP_ATOMIC);
1071 if (unlikely(ret < 0))
1072 goto error_lock;
1073
1074 spin_unlock_irq(&epfile->ffs->eps_lock);
1075
1076 if (unlikely(wait_for_completion_interruptible(&done))) {
1077
1078
1079
1080
1081
1082
1083 usb_ep_dequeue(ep->ep, req);
1084 wait_for_completion(&done);
1085 interrupted = ep->status < 0;
1086 }
1087
1088 if (interrupted)
1089 ret = -EINTR;
1090 else if (io_data->read && ep->status > 0)
1091 ret = __ffs_epfile_read_data(epfile, data, ep->status,
1092 &io_data->data);
1093 else
1094 ret = ep->status;
1095 goto error_mutex;
1096 } else if (!(req = usb_ep_alloc_request(ep->ep, GFP_ATOMIC))) {
1097 ret = -ENOMEM;
1098 } else {
1099 if (io_data->use_sg) {
1100 req->buf = NULL;
1101 req->sg = io_data->sgt.sgl;
1102 req->num_sgs = io_data->sgt.nents;
1103 } else {
1104 req->buf = data;
1105 req->num_sgs = 0;
1106 }
1107 req->length = data_len;
1108
1109 io_data->buf = data;
1110 io_data->ep = ep->ep;
1111 io_data->req = req;
1112 io_data->ffs = epfile->ffs;
1113
1114 req->context = io_data;
1115 req->complete = ffs_epfile_async_io_complete;
1116
1117 ret = usb_ep_queue(ep->ep, req, GFP_ATOMIC);
1118 if (unlikely(ret)) {
1119 io_data->req = NULL;
1120 usb_ep_free_request(ep->ep, req);
1121 goto error_lock;
1122 }
1123
1124 ret = -EIOCBQUEUED;
1125
1126
1127
1128
1129 data = NULL;
1130 }
1131
1132error_lock:
1133 spin_unlock_irq(&epfile->ffs->eps_lock);
1134error_mutex:
1135 mutex_unlock(&epfile->mutex);
1136error:
1137 if (ret != -EIOCBQUEUED)
1138 ffs_free_buffer(io_data);
1139 return ret;
1140}
1141
1142static int
1143ffs_epfile_open(struct inode *inode, struct file *file)
1144{
1145 struct ffs_epfile *epfile = inode->i_private;
1146
1147 ENTER();
1148
1149 if (WARN_ON(epfile->ffs->state != FFS_ACTIVE))
1150 return -ENODEV;
1151
1152 file->private_data = epfile;
1153 ffs_data_opened(epfile->ffs);
1154
1155 return 0;
1156}
1157
1158static int ffs_aio_cancel(struct kiocb *kiocb)
1159{
1160 struct ffs_io_data *io_data = kiocb->private;
1161 struct ffs_epfile *epfile = kiocb->ki_filp->private_data;
1162 unsigned long flags;
1163 int value;
1164
1165 ENTER();
1166
1167 spin_lock_irqsave(&epfile->ffs->eps_lock, flags);
1168
1169 if (likely(io_data && io_data->ep && io_data->req))
1170 value = usb_ep_dequeue(io_data->ep, io_data->req);
1171 else
1172 value = -EINVAL;
1173
1174 spin_unlock_irqrestore(&epfile->ffs->eps_lock, flags);
1175
1176 return value;
1177}
1178
1179static ssize_t ffs_epfile_write_iter(struct kiocb *kiocb, struct iov_iter *from)
1180{
1181 struct ffs_io_data io_data, *p = &io_data;
1182 ssize_t res;
1183
1184 ENTER();
1185
1186 if (!is_sync_kiocb(kiocb)) {
1187 p = kzalloc(sizeof(io_data), GFP_KERNEL);
1188 if (unlikely(!p))
1189 return -ENOMEM;
1190 p->aio = true;
1191 } else {
1192 memset(p, 0, sizeof(*p));
1193 p->aio = false;
1194 }
1195
1196 p->read = false;
1197 p->kiocb = kiocb;
1198 p->data = *from;
1199 p->mm = current->mm;
1200
1201 kiocb->private = p;
1202
1203 if (p->aio)
1204 kiocb_set_cancel_fn(kiocb, ffs_aio_cancel);
1205
1206 res = ffs_epfile_io(kiocb->ki_filp, p);
1207 if (res == -EIOCBQUEUED)
1208 return res;
1209 if (p->aio)
1210 kfree(p);
1211 else
1212 *from = p->data;
1213 return res;
1214}
1215
1216static ssize_t ffs_epfile_read_iter(struct kiocb *kiocb, struct iov_iter *to)
1217{
1218 struct ffs_io_data io_data, *p = &io_data;
1219 ssize_t res;
1220
1221 ENTER();
1222
1223 if (!is_sync_kiocb(kiocb)) {
1224 p = kzalloc(sizeof(io_data), GFP_KERNEL);
1225 if (unlikely(!p))
1226 return -ENOMEM;
1227 p->aio = true;
1228 } else {
1229 memset(p, 0, sizeof(*p));
1230 p->aio = false;
1231 }
1232
1233 p->read = true;
1234 p->kiocb = kiocb;
1235 if (p->aio) {
1236 p->to_free = dup_iter(&p->data, to, GFP_KERNEL);
1237 if (!p->to_free) {
1238 kfree(p);
1239 return -ENOMEM;
1240 }
1241 } else {
1242 p->data = *to;
1243 p->to_free = NULL;
1244 }
1245 p->mm = current->mm;
1246
1247 kiocb->private = p;
1248
1249 if (p->aio)
1250 kiocb_set_cancel_fn(kiocb, ffs_aio_cancel);
1251
1252 res = ffs_epfile_io(kiocb->ki_filp, p);
1253 if (res == -EIOCBQUEUED)
1254 return res;
1255
1256 if (p->aio) {
1257 kfree(p->to_free);
1258 kfree(p);
1259 } else {
1260 *to = p->data;
1261 }
1262 return res;
1263}
1264
1265static int
1266ffs_epfile_release(struct inode *inode, struct file *file)
1267{
1268 struct ffs_epfile *epfile = inode->i_private;
1269
1270 ENTER();
1271
1272 __ffs_epfile_read_buffer_free(epfile);
1273 ffs_data_closed(epfile->ffs);
1274
1275 return 0;
1276}
1277
1278static long ffs_epfile_ioctl(struct file *file, unsigned code,
1279 unsigned long value)
1280{
1281 struct ffs_epfile *epfile = file->private_data;
1282 struct ffs_ep *ep;
1283 int ret;
1284
1285 ENTER();
1286
1287 if (WARN_ON(epfile->ffs->state != FFS_ACTIVE))
1288 return -ENODEV;
1289
1290
1291 ep = epfile->ep;
1292 if (!ep) {
1293 if (file->f_flags & O_NONBLOCK)
1294 return -EAGAIN;
1295
1296 ret = wait_event_interruptible(
1297 epfile->ffs->wait, (ep = epfile->ep));
1298 if (ret)
1299 return -EINTR;
1300 }
1301
1302 spin_lock_irq(&epfile->ffs->eps_lock);
1303
1304
1305 if (epfile->ep != ep) {
1306 spin_unlock_irq(&epfile->ffs->eps_lock);
1307 return -ESHUTDOWN;
1308 }
1309
1310 switch (code) {
1311 case FUNCTIONFS_FIFO_STATUS:
1312 ret = usb_ep_fifo_status(epfile->ep->ep);
1313 break;
1314 case FUNCTIONFS_FIFO_FLUSH:
1315 usb_ep_fifo_flush(epfile->ep->ep);
1316 ret = 0;
1317 break;
1318 case FUNCTIONFS_CLEAR_HALT:
1319 ret = usb_ep_clear_halt(epfile->ep->ep);
1320 break;
1321 case FUNCTIONFS_ENDPOINT_REVMAP:
1322 ret = epfile->ep->num;
1323 break;
1324 case FUNCTIONFS_ENDPOINT_DESC:
1325 {
1326 int desc_idx;
1327 struct usb_endpoint_descriptor *desc;
1328
1329 switch (epfile->ffs->gadget->speed) {
1330 case USB_SPEED_SUPER:
1331 desc_idx = 2;
1332 break;
1333 case USB_SPEED_HIGH:
1334 desc_idx = 1;
1335 break;
1336 default:
1337 desc_idx = 0;
1338 }
1339 desc = epfile->ep->descs[desc_idx];
1340
1341 spin_unlock_irq(&epfile->ffs->eps_lock);
1342 ret = copy_to_user((void __user *)value, desc, desc->bLength);
1343 if (ret)
1344 ret = -EFAULT;
1345 return ret;
1346 }
1347 default:
1348 ret = -ENOTTY;
1349 }
1350 spin_unlock_irq(&epfile->ffs->eps_lock);
1351
1352 return ret;
1353}
1354
1355static const struct file_operations ffs_epfile_operations = {
1356 .llseek = no_llseek,
1357
1358 .open = ffs_epfile_open,
1359 .write_iter = ffs_epfile_write_iter,
1360 .read_iter = ffs_epfile_read_iter,
1361 .release = ffs_epfile_release,
1362 .unlocked_ioctl = ffs_epfile_ioctl,
1363 .compat_ioctl = compat_ptr_ioctl,
1364};
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374static struct inode *__must_check
1375ffs_sb_make_inode(struct super_block *sb, void *data,
1376 const struct file_operations *fops,
1377 const struct inode_operations *iops,
1378 struct ffs_file_perms *perms)
1379{
1380 struct inode *inode;
1381
1382 ENTER();
1383
1384 inode = new_inode(sb);
1385
1386 if (likely(inode)) {
1387 struct timespec64 ts = current_time(inode);
1388
1389 inode->i_ino = get_next_ino();
1390 inode->i_mode = perms->mode;
1391 inode->i_uid = perms->uid;
1392 inode->i_gid = perms->gid;
1393 inode->i_atime = ts;
1394 inode->i_mtime = ts;
1395 inode->i_ctime = ts;
1396 inode->i_private = data;
1397 if (fops)
1398 inode->i_fop = fops;
1399 if (iops)
1400 inode->i_op = iops;
1401 }
1402
1403 return inode;
1404}
1405
1406
1407static struct dentry *ffs_sb_create_file(struct super_block *sb,
1408 const char *name, void *data,
1409 const struct file_operations *fops)
1410{
1411 struct ffs_data *ffs = sb->s_fs_info;
1412 struct dentry *dentry;
1413 struct inode *inode;
1414
1415 ENTER();
1416
1417 dentry = d_alloc_name(sb->s_root, name);
1418 if (unlikely(!dentry))
1419 return NULL;
1420
1421 inode = ffs_sb_make_inode(sb, data, fops, NULL, &ffs->file_perms);
1422 if (unlikely(!inode)) {
1423 dput(dentry);
1424 return NULL;
1425 }
1426
1427 d_add(dentry, inode);
1428 return dentry;
1429}
1430
1431
1432static const struct super_operations ffs_sb_operations = {
1433 .statfs = simple_statfs,
1434 .drop_inode = generic_delete_inode,
1435};
1436
1437struct ffs_sb_fill_data {
1438 struct ffs_file_perms perms;
1439 umode_t root_mode;
1440 const char *dev_name;
1441 bool no_disconnect;
1442 struct ffs_data *ffs_data;
1443};
1444
1445static int ffs_sb_fill(struct super_block *sb, struct fs_context *fc)
1446{
1447 struct ffs_sb_fill_data *data = fc->fs_private;
1448 struct inode *inode;
1449 struct ffs_data *ffs = data->ffs_data;
1450
1451 ENTER();
1452
1453 ffs->sb = sb;
1454 data->ffs_data = NULL;
1455 sb->s_fs_info = ffs;
1456 sb->s_blocksize = PAGE_SIZE;
1457 sb->s_blocksize_bits = PAGE_SHIFT;
1458 sb->s_magic = FUNCTIONFS_MAGIC;
1459 sb->s_op = &ffs_sb_operations;
1460 sb->s_time_gran = 1;
1461
1462
1463 data->perms.mode = data->root_mode;
1464 inode = ffs_sb_make_inode(sb, NULL,
1465 &simple_dir_operations,
1466 &simple_dir_inode_operations,
1467 &data->perms);
1468 sb->s_root = d_make_root(inode);
1469 if (unlikely(!sb->s_root))
1470 return -ENOMEM;
1471
1472
1473 if (unlikely(!ffs_sb_create_file(sb, "ep0", ffs,
1474 &ffs_ep0_operations)))
1475 return -ENOMEM;
1476
1477 return 0;
1478}
1479
1480enum {
1481 Opt_no_disconnect,
1482 Opt_rmode,
1483 Opt_fmode,
1484 Opt_mode,
1485 Opt_uid,
1486 Opt_gid,
1487};
1488
1489static const struct fs_parameter_spec ffs_fs_fs_parameters[] = {
1490 fsparam_bool ("no_disconnect", Opt_no_disconnect),
1491 fsparam_u32 ("rmode", Opt_rmode),
1492 fsparam_u32 ("fmode", Opt_fmode),
1493 fsparam_u32 ("mode", Opt_mode),
1494 fsparam_u32 ("uid", Opt_uid),
1495 fsparam_u32 ("gid", Opt_gid),
1496 {}
1497};
1498
1499static int ffs_fs_parse_param(struct fs_context *fc, struct fs_parameter *param)
1500{
1501 struct ffs_sb_fill_data *data = fc->fs_private;
1502 struct fs_parse_result result;
1503 int opt;
1504
1505 ENTER();
1506
1507 opt = fs_parse(fc, ffs_fs_fs_parameters, param, &result);
1508 if (opt < 0)
1509 return opt;
1510
1511 switch (opt) {
1512 case Opt_no_disconnect:
1513 data->no_disconnect = result.boolean;
1514 break;
1515 case Opt_rmode:
1516 data->root_mode = (result.uint_32 & 0555) | S_IFDIR;
1517 break;
1518 case Opt_fmode:
1519 data->perms.mode = (result.uint_32 & 0666) | S_IFREG;
1520 break;
1521 case Opt_mode:
1522 data->root_mode = (result.uint_32 & 0555) | S_IFDIR;
1523 data->perms.mode = (result.uint_32 & 0666) | S_IFREG;
1524 break;
1525
1526 case Opt_uid:
1527 data->perms.uid = make_kuid(current_user_ns(), result.uint_32);
1528 if (!uid_valid(data->perms.uid))
1529 goto unmapped_value;
1530 break;
1531 case Opt_gid:
1532 data->perms.gid = make_kgid(current_user_ns(), result.uint_32);
1533 if (!gid_valid(data->perms.gid))
1534 goto unmapped_value;
1535 break;
1536
1537 default:
1538 return -ENOPARAM;
1539 }
1540
1541 return 0;
1542
1543unmapped_value:
1544 return invalf(fc, "%s: unmapped value: %u", param->key, result.uint_32);
1545}
1546
1547
1548
1549
1550static int ffs_fs_get_tree(struct fs_context *fc)
1551{
1552 struct ffs_sb_fill_data *ctx = fc->fs_private;
1553 void *ffs_dev;
1554 struct ffs_data *ffs;
1555
1556 ENTER();
1557
1558 if (!fc->source)
1559 return invalf(fc, "No source specified");
1560
1561 ffs = ffs_data_new(fc->source);
1562 if (unlikely(!ffs))
1563 return -ENOMEM;
1564 ffs->file_perms = ctx->perms;
1565 ffs->no_disconnect = ctx->no_disconnect;
1566
1567 ffs->dev_name = kstrdup(fc->source, GFP_KERNEL);
1568 if (unlikely(!ffs->dev_name)) {
1569 ffs_data_put(ffs);
1570 return -ENOMEM;
1571 }
1572
1573 ffs_dev = ffs_acquire_dev(ffs->dev_name);
1574 if (IS_ERR(ffs_dev)) {
1575 ffs_data_put(ffs);
1576 return PTR_ERR(ffs_dev);
1577 }
1578
1579 ffs->private_data = ffs_dev;
1580 ctx->ffs_data = ffs;
1581 return get_tree_nodev(fc, ffs_sb_fill);
1582}
1583
1584static void ffs_fs_free_fc(struct fs_context *fc)
1585{
1586 struct ffs_sb_fill_data *ctx = fc->fs_private;
1587
1588 if (ctx) {
1589 if (ctx->ffs_data) {
1590 ffs_release_dev(ctx->ffs_data);
1591 ffs_data_put(ctx->ffs_data);
1592 }
1593
1594 kfree(ctx);
1595 }
1596}
1597
1598static const struct fs_context_operations ffs_fs_context_ops = {
1599 .free = ffs_fs_free_fc,
1600 .parse_param = ffs_fs_parse_param,
1601 .get_tree = ffs_fs_get_tree,
1602};
1603
1604static int ffs_fs_init_fs_context(struct fs_context *fc)
1605{
1606 struct ffs_sb_fill_data *ctx;
1607
1608 ctx = kzalloc(sizeof(struct ffs_sb_fill_data), GFP_KERNEL);
1609 if (!ctx)
1610 return -ENOMEM;
1611
1612 ctx->perms.mode = S_IFREG | 0600;
1613 ctx->perms.uid = GLOBAL_ROOT_UID;
1614 ctx->perms.gid = GLOBAL_ROOT_GID;
1615 ctx->root_mode = S_IFDIR | 0500;
1616 ctx->no_disconnect = false;
1617
1618 fc->fs_private = ctx;
1619 fc->ops = &ffs_fs_context_ops;
1620 return 0;
1621}
1622
1623static void
1624ffs_fs_kill_sb(struct super_block *sb)
1625{
1626 ENTER();
1627
1628 kill_litter_super(sb);
1629 if (sb->s_fs_info) {
1630 ffs_release_dev(sb->s_fs_info);
1631 ffs_data_closed(sb->s_fs_info);
1632 }
1633}
1634
1635static struct file_system_type ffs_fs_type = {
1636 .owner = THIS_MODULE,
1637 .name = "functionfs",
1638 .init_fs_context = ffs_fs_init_fs_context,
1639 .parameters = ffs_fs_fs_parameters,
1640 .kill_sb = ffs_fs_kill_sb,
1641};
1642MODULE_ALIAS_FS("functionfs");
1643
1644
1645
1646
1647static int functionfs_init(void)
1648{
1649 int ret;
1650
1651 ENTER();
1652
1653 ret = register_filesystem(&ffs_fs_type);
1654 if (likely(!ret))
1655 pr_info("file system registered\n");
1656 else
1657 pr_err("failed registering file system (%d)\n", ret);
1658
1659 return ret;
1660}
1661
1662static void functionfs_cleanup(void)
1663{
1664 ENTER();
1665
1666 pr_info("unloading\n");
1667 unregister_filesystem(&ffs_fs_type);
1668}
1669
1670
1671
1672
1673static void ffs_data_clear(struct ffs_data *ffs);
1674static void ffs_data_reset(struct ffs_data *ffs);
1675
1676static void ffs_data_get(struct ffs_data *ffs)
1677{
1678 ENTER();
1679
1680 refcount_inc(&ffs->ref);
1681}
1682
1683static void ffs_data_opened(struct ffs_data *ffs)
1684{
1685 ENTER();
1686
1687 refcount_inc(&ffs->ref);
1688 if (atomic_add_return(1, &ffs->opened) == 1 &&
1689 ffs->state == FFS_DEACTIVATED) {
1690 ffs->state = FFS_CLOSING;
1691 ffs_data_reset(ffs);
1692 }
1693}
1694
1695static void ffs_data_put(struct ffs_data *ffs)
1696{
1697 ENTER();
1698
1699 if (unlikely(refcount_dec_and_test(&ffs->ref))) {
1700 pr_info("%s(): freeing\n", __func__);
1701 ffs_data_clear(ffs);
1702 BUG_ON(waitqueue_active(&ffs->ev.waitq) ||
1703 swait_active(&ffs->ep0req_completion.wait) ||
1704 waitqueue_active(&ffs->wait));
1705 destroy_workqueue(ffs->io_completion_wq);
1706 kfree(ffs->dev_name);
1707 kfree(ffs);
1708 }
1709}
1710
1711static void ffs_data_closed(struct ffs_data *ffs)
1712{
1713 ENTER();
1714
1715 if (atomic_dec_and_test(&ffs->opened)) {
1716 if (ffs->no_disconnect) {
1717 ffs->state = FFS_DEACTIVATED;
1718 if (ffs->epfiles) {
1719 ffs_epfiles_destroy(ffs->epfiles,
1720 ffs->eps_count);
1721 ffs->epfiles = NULL;
1722 }
1723 if (ffs->setup_state == FFS_SETUP_PENDING)
1724 __ffs_ep0_stall(ffs);
1725 } else {
1726 ffs->state = FFS_CLOSING;
1727 ffs_data_reset(ffs);
1728 }
1729 }
1730 if (atomic_read(&ffs->opened) < 0) {
1731 ffs->state = FFS_CLOSING;
1732 ffs_data_reset(ffs);
1733 }
1734
1735 ffs_data_put(ffs);
1736}
1737
1738static struct ffs_data *ffs_data_new(const char *dev_name)
1739{
1740 struct ffs_data *ffs = kzalloc(sizeof *ffs, GFP_KERNEL);
1741 if (unlikely(!ffs))
1742 return NULL;
1743
1744 ENTER();
1745
1746 ffs->io_completion_wq = alloc_ordered_workqueue("%s", 0, dev_name);
1747 if (!ffs->io_completion_wq) {
1748 kfree(ffs);
1749 return NULL;
1750 }
1751
1752 refcount_set(&ffs->ref, 1);
1753 atomic_set(&ffs->opened, 0);
1754 ffs->state = FFS_READ_DESCRIPTORS;
1755 mutex_init(&ffs->mutex);
1756 spin_lock_init(&ffs->eps_lock);
1757 init_waitqueue_head(&ffs->ev.waitq);
1758 init_waitqueue_head(&ffs->wait);
1759 init_completion(&ffs->ep0req_completion);
1760
1761
1762 ffs->ev.can_stall = 1;
1763
1764 return ffs;
1765}
1766
1767static void ffs_data_clear(struct ffs_data *ffs)
1768{
1769 ENTER();
1770
1771 ffs_closed(ffs);
1772
1773 BUG_ON(ffs->gadget);
1774
1775 if (ffs->epfiles)
1776 ffs_epfiles_destroy(ffs->epfiles, ffs->eps_count);
1777
1778 if (ffs->ffs_eventfd)
1779 eventfd_ctx_put(ffs->ffs_eventfd);
1780
1781 kfree(ffs->raw_descs_data);
1782 kfree(ffs->raw_strings);
1783 kfree(ffs->stringtabs);
1784}
1785
1786static void ffs_data_reset(struct ffs_data *ffs)
1787{
1788 ENTER();
1789
1790 ffs_data_clear(ffs);
1791
1792 ffs->epfiles = NULL;
1793 ffs->raw_descs_data = NULL;
1794 ffs->raw_descs = NULL;
1795 ffs->raw_strings = NULL;
1796 ffs->stringtabs = NULL;
1797
1798 ffs->raw_descs_length = 0;
1799 ffs->fs_descs_count = 0;
1800 ffs->hs_descs_count = 0;
1801 ffs->ss_descs_count = 0;
1802
1803 ffs->strings_count = 0;
1804 ffs->interfaces_count = 0;
1805 ffs->eps_count = 0;
1806
1807 ffs->ev.count = 0;
1808
1809 ffs->state = FFS_READ_DESCRIPTORS;
1810 ffs->setup_state = FFS_NO_SETUP;
1811 ffs->flags = 0;
1812
1813 ffs->ms_os_descs_ext_prop_count = 0;
1814 ffs->ms_os_descs_ext_prop_name_len = 0;
1815 ffs->ms_os_descs_ext_prop_data_len = 0;
1816}
1817
1818
1819static int functionfs_bind(struct ffs_data *ffs, struct usb_composite_dev *cdev)
1820{
1821 struct usb_gadget_strings **lang;
1822 int first_id;
1823
1824 ENTER();
1825
1826 if (WARN_ON(ffs->state != FFS_ACTIVE
1827 || test_and_set_bit(FFS_FL_BOUND, &ffs->flags)))
1828 return -EBADFD;
1829
1830 first_id = usb_string_ids_n(cdev, ffs->strings_count);
1831 if (unlikely(first_id < 0))
1832 return first_id;
1833
1834 ffs->ep0req = usb_ep_alloc_request(cdev->gadget->ep0, GFP_KERNEL);
1835 if (unlikely(!ffs->ep0req))
1836 return -ENOMEM;
1837 ffs->ep0req->complete = ffs_ep0_complete;
1838 ffs->ep0req->context = ffs;
1839
1840 lang = ffs->stringtabs;
1841 if (lang) {
1842 for (; *lang; ++lang) {
1843 struct usb_string *str = (*lang)->strings;
1844 int id = first_id;
1845 for (; str->s; ++id, ++str)
1846 str->id = id;
1847 }
1848 }
1849
1850 ffs->gadget = cdev->gadget;
1851 ffs_data_get(ffs);
1852 return 0;
1853}
1854
1855static void functionfs_unbind(struct ffs_data *ffs)
1856{
1857 ENTER();
1858
1859 if (!WARN_ON(!ffs->gadget)) {
1860 usb_ep_free_request(ffs->gadget->ep0, ffs->ep0req);
1861 ffs->ep0req = NULL;
1862 ffs->gadget = NULL;
1863 clear_bit(FFS_FL_BOUND, &ffs->flags);
1864 ffs_data_put(ffs);
1865 }
1866}
1867
1868static int ffs_epfiles_create(struct ffs_data *ffs)
1869{
1870 struct ffs_epfile *epfile, *epfiles;
1871 unsigned i, count;
1872
1873 ENTER();
1874
1875 count = ffs->eps_count;
1876 epfiles = kcalloc(count, sizeof(*epfiles), GFP_KERNEL);
1877 if (!epfiles)
1878 return -ENOMEM;
1879
1880 epfile = epfiles;
1881 for (i = 1; i <= count; ++i, ++epfile) {
1882 epfile->ffs = ffs;
1883 mutex_init(&epfile->mutex);
1884 if (ffs->user_flags & FUNCTIONFS_VIRTUAL_ADDR)
1885 sprintf(epfile->name, "ep%02x", ffs->eps_addrmap[i]);
1886 else
1887 sprintf(epfile->name, "ep%u", i);
1888 epfile->dentry = ffs_sb_create_file(ffs->sb, epfile->name,
1889 epfile,
1890 &ffs_epfile_operations);
1891 if (unlikely(!epfile->dentry)) {
1892 ffs_epfiles_destroy(epfiles, i - 1);
1893 return -ENOMEM;
1894 }
1895 }
1896
1897 ffs->epfiles = epfiles;
1898 return 0;
1899}
1900
1901static void ffs_epfiles_destroy(struct ffs_epfile *epfiles, unsigned count)
1902{
1903 struct ffs_epfile *epfile = epfiles;
1904
1905 ENTER();
1906
1907 for (; count; --count, ++epfile) {
1908 BUG_ON(mutex_is_locked(&epfile->mutex));
1909 if (epfile->dentry) {
1910 d_delete(epfile->dentry);
1911 dput(epfile->dentry);
1912 epfile->dentry = NULL;
1913 }
1914 }
1915
1916 kfree(epfiles);
1917}
1918
1919static void ffs_func_eps_disable(struct ffs_function *func)
1920{
1921 struct ffs_ep *ep = func->eps;
1922 struct ffs_epfile *epfile = func->ffs->epfiles;
1923 unsigned count = func->ffs->eps_count;
1924 unsigned long flags;
1925
1926 spin_lock_irqsave(&func->ffs->eps_lock, flags);
1927 while (count--) {
1928
1929 if (likely(ep->ep))
1930 usb_ep_disable(ep->ep);
1931 ++ep;
1932
1933 if (epfile) {
1934 epfile->ep = NULL;
1935 __ffs_epfile_read_buffer_free(epfile);
1936 ++epfile;
1937 }
1938 }
1939 spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
1940}
1941
1942static int ffs_func_eps_enable(struct ffs_function *func)
1943{
1944 struct ffs_data *ffs = func->ffs;
1945 struct ffs_ep *ep = func->eps;
1946 struct ffs_epfile *epfile = ffs->epfiles;
1947 unsigned count = ffs->eps_count;
1948 unsigned long flags;
1949 int ret = 0;
1950
1951 spin_lock_irqsave(&func->ffs->eps_lock, flags);
1952 while(count--) {
1953 ep->ep->driver_data = ep;
1954
1955 ret = config_ep_by_speed(func->gadget, &func->function, ep->ep);
1956 if (ret) {
1957 pr_err("%s: config_ep_by_speed(%s) returned %d\n",
1958 __func__, ep->ep->name, ret);
1959 break;
1960 }
1961
1962 ret = usb_ep_enable(ep->ep);
1963 if (likely(!ret)) {
1964 epfile->ep = ep;
1965 epfile->in = usb_endpoint_dir_in(ep->ep->desc);
1966 epfile->isoc = usb_endpoint_xfer_isoc(ep->ep->desc);
1967 } else {
1968 break;
1969 }
1970
1971 ++ep;
1972 ++epfile;
1973 }
1974
1975 wake_up_interruptible(&ffs->wait);
1976 spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
1977
1978 return ret;
1979}
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991enum ffs_entity_type {
1992 FFS_DESCRIPTOR, FFS_INTERFACE, FFS_STRING, FFS_ENDPOINT
1993};
1994
1995enum ffs_os_desc_type {
1996 FFS_OS_DESC, FFS_OS_DESC_EXT_COMPAT, FFS_OS_DESC_EXT_PROP
1997};
1998
1999typedef int (*ffs_entity_callback)(enum ffs_entity_type entity,
2000 u8 *valuep,
2001 struct usb_descriptor_header *desc,
2002 void *priv);
2003
2004typedef int (*ffs_os_desc_callback)(enum ffs_os_desc_type entity,
2005 struct usb_os_desc_header *h, void *data,
2006 unsigned len, void *priv);
2007
2008static int __must_check ffs_do_single_desc(char *data, unsigned len,
2009 ffs_entity_callback entity,
2010 void *priv, int *current_class)
2011{
2012 struct usb_descriptor_header *_ds = (void *)data;
2013 u8 length;
2014 int ret;
2015
2016 ENTER();
2017
2018
2019 if (len < 2) {
2020 pr_vdebug("descriptor too short\n");
2021 return -EINVAL;
2022 }
2023
2024
2025 length = _ds->bLength;
2026 if (len < length) {
2027 pr_vdebug("descriptor longer then available data\n");
2028 return -EINVAL;
2029 }
2030
2031#define __entity_check_INTERFACE(val) 1
2032#define __entity_check_STRING(val) (val)
2033#define __entity_check_ENDPOINT(val) ((val) & USB_ENDPOINT_NUMBER_MASK)
2034#define __entity(type, val) do { \
2035 pr_vdebug("entity " #type "(%02x)\n", (val)); \
2036 if (unlikely(!__entity_check_ ##type(val))) { \
2037 pr_vdebug("invalid entity's value\n"); \
2038 return -EINVAL; \
2039 } \
2040 ret = entity(FFS_ ##type, &val, _ds, priv); \
2041 if (unlikely(ret < 0)) { \
2042 pr_debug("entity " #type "(%02x); ret = %d\n", \
2043 (val), ret); \
2044 return ret; \
2045 } \
2046 } while (0)
2047
2048
2049 switch (_ds->bDescriptorType) {
2050 case USB_DT_DEVICE:
2051 case USB_DT_CONFIG:
2052 case USB_DT_STRING:
2053 case USB_DT_DEVICE_QUALIFIER:
2054
2055 pr_vdebug("descriptor reserved for gadget: %d\n",
2056 _ds->bDescriptorType);
2057 return -EINVAL;
2058
2059 case USB_DT_INTERFACE: {
2060 struct usb_interface_descriptor *ds = (void *)_ds;
2061 pr_vdebug("interface descriptor\n");
2062 if (length != sizeof *ds)
2063 goto inv_length;
2064
2065 __entity(INTERFACE, ds->bInterfaceNumber);
2066 if (ds->iInterface)
2067 __entity(STRING, ds->iInterface);
2068 *current_class = ds->bInterfaceClass;
2069 }
2070 break;
2071
2072 case USB_DT_ENDPOINT: {
2073 struct usb_endpoint_descriptor *ds = (void *)_ds;
2074 pr_vdebug("endpoint descriptor\n");
2075 if (length != USB_DT_ENDPOINT_SIZE &&
2076 length != USB_DT_ENDPOINT_AUDIO_SIZE)
2077 goto inv_length;
2078 __entity(ENDPOINT, ds->bEndpointAddress);
2079 }
2080 break;
2081
2082 case USB_TYPE_CLASS | 0x01:
2083 if (*current_class == USB_INTERFACE_CLASS_HID) {
2084 pr_vdebug("hid descriptor\n");
2085 if (length != sizeof(struct hid_descriptor))
2086 goto inv_length;
2087 break;
2088 } else if (*current_class == USB_INTERFACE_CLASS_CCID) {
2089 pr_vdebug("ccid descriptor\n");
2090 if (length != sizeof(struct ccid_descriptor))
2091 goto inv_length;
2092 break;
2093 } else {
2094 pr_vdebug("unknown descriptor: %d for class %d\n",
2095 _ds->bDescriptorType, *current_class);
2096 return -EINVAL;
2097 }
2098
2099 case USB_DT_OTG:
2100 if (length != sizeof(struct usb_otg_descriptor))
2101 goto inv_length;
2102 break;
2103
2104 case USB_DT_INTERFACE_ASSOCIATION: {
2105 struct usb_interface_assoc_descriptor *ds = (void *)_ds;
2106 pr_vdebug("interface association descriptor\n");
2107 if (length != sizeof *ds)
2108 goto inv_length;
2109 if (ds->iFunction)
2110 __entity(STRING, ds->iFunction);
2111 }
2112 break;
2113
2114 case USB_DT_SS_ENDPOINT_COMP:
2115 pr_vdebug("EP SS companion descriptor\n");
2116 if (length != sizeof(struct usb_ss_ep_comp_descriptor))
2117 goto inv_length;
2118 break;
2119
2120 case USB_DT_OTHER_SPEED_CONFIG:
2121 case USB_DT_INTERFACE_POWER:
2122 case USB_DT_DEBUG:
2123 case USB_DT_SECURITY:
2124 case USB_DT_CS_RADIO_CONTROL:
2125
2126 pr_vdebug("unimplemented descriptor: %d\n", _ds->bDescriptorType);
2127 return -EINVAL;
2128
2129 default:
2130
2131 pr_vdebug("unknown descriptor: %d\n", _ds->bDescriptorType);
2132 return -EINVAL;
2133
2134inv_length:
2135 pr_vdebug("invalid length: %d (descriptor %d)\n",
2136 _ds->bLength, _ds->bDescriptorType);
2137 return -EINVAL;
2138 }
2139
2140#undef __entity
2141#undef __entity_check_DESCRIPTOR
2142#undef __entity_check_INTERFACE
2143#undef __entity_check_STRING
2144#undef __entity_check_ENDPOINT
2145
2146 return length;
2147}
2148
2149static int __must_check ffs_do_descs(unsigned count, char *data, unsigned len,
2150 ffs_entity_callback entity, void *priv)
2151{
2152 const unsigned _len = len;
2153 unsigned long num = 0;
2154 int current_class = -1;
2155
2156 ENTER();
2157
2158 for (;;) {
2159 int ret;
2160
2161 if (num == count)
2162 data = NULL;
2163
2164
2165 ret = entity(FFS_DESCRIPTOR, (u8 *)num, (void *)data, priv);
2166 if (unlikely(ret < 0)) {
2167 pr_debug("entity DESCRIPTOR(%02lx); ret = %d\n",
2168 num, ret);
2169 return ret;
2170 }
2171
2172 if (!data)
2173 return _len - len;
2174
2175 ret = ffs_do_single_desc(data, len, entity, priv,
2176 ¤t_class);
2177 if (unlikely(ret < 0)) {
2178 pr_debug("%s returns %d\n", __func__, ret);
2179 return ret;
2180 }
2181
2182 len -= ret;
2183 data += ret;
2184 ++num;
2185 }
2186}
2187
2188static int __ffs_data_do_entity(enum ffs_entity_type type,
2189 u8 *valuep, struct usb_descriptor_header *desc,
2190 void *priv)
2191{
2192 struct ffs_desc_helper *helper = priv;
2193 struct usb_endpoint_descriptor *d;
2194
2195 ENTER();
2196
2197 switch (type) {
2198 case FFS_DESCRIPTOR:
2199 break;
2200
2201 case FFS_INTERFACE:
2202
2203
2204
2205
2206
2207 if (*valuep >= helper->interfaces_count)
2208 helper->interfaces_count = *valuep + 1;
2209 break;
2210
2211 case FFS_STRING:
2212
2213
2214
2215
2216 if (*valuep > helper->ffs->strings_count)
2217 helper->ffs->strings_count = *valuep;
2218 break;
2219
2220 case FFS_ENDPOINT:
2221 d = (void *)desc;
2222 helper->eps_count++;
2223 if (helper->eps_count >= FFS_MAX_EPS_COUNT)
2224 return -EINVAL;
2225
2226 if (!helper->ffs->eps_count && !helper->ffs->interfaces_count)
2227 helper->ffs->eps_addrmap[helper->eps_count] =
2228 d->bEndpointAddress;
2229 else if (helper->ffs->eps_addrmap[helper->eps_count] !=
2230 d->bEndpointAddress)
2231 return -EINVAL;
2232 break;
2233 }
2234
2235 return 0;
2236}
2237
2238static int __ffs_do_os_desc_header(enum ffs_os_desc_type *next_type,
2239 struct usb_os_desc_header *desc)
2240{
2241 u16 bcd_version = le16_to_cpu(desc->bcdVersion);
2242 u16 w_index = le16_to_cpu(desc->wIndex);
2243
2244 if (bcd_version != 1) {
2245 pr_vdebug("unsupported os descriptors version: %d",
2246 bcd_version);
2247 return -EINVAL;
2248 }
2249 switch (w_index) {
2250 case 0x4:
2251 *next_type = FFS_OS_DESC_EXT_COMPAT;
2252 break;
2253 case 0x5:
2254 *next_type = FFS_OS_DESC_EXT_PROP;
2255 break;
2256 default:
2257 pr_vdebug("unsupported os descriptor type: %d", w_index);
2258 return -EINVAL;
2259 }
2260
2261 return sizeof(*desc);
2262}
2263
2264
2265
2266
2267
2268static int __must_check ffs_do_single_os_desc(char *data, unsigned len,
2269 enum ffs_os_desc_type type,
2270 u16 feature_count,
2271 ffs_os_desc_callback entity,
2272 void *priv,
2273 struct usb_os_desc_header *h)
2274{
2275 int ret;
2276 const unsigned _len = len;
2277
2278 ENTER();
2279
2280
2281 while (feature_count--) {
2282 ret = entity(type, h, data, len, priv);
2283 if (unlikely(ret < 0)) {
2284 pr_debug("bad OS descriptor, type: %d\n", type);
2285 return ret;
2286 }
2287 data += ret;
2288 len -= ret;
2289 }
2290 return _len - len;
2291}
2292
2293
2294static int __must_check ffs_do_os_descs(unsigned count,
2295 char *data, unsigned len,
2296 ffs_os_desc_callback entity, void *priv)
2297{
2298 const unsigned _len = len;
2299 unsigned long num = 0;
2300
2301 ENTER();
2302
2303 for (num = 0; num < count; ++num) {
2304 int ret;
2305 enum ffs_os_desc_type type;
2306 u16 feature_count;
2307 struct usb_os_desc_header *desc = (void *)data;
2308
2309 if (len < sizeof(*desc))
2310 return -EINVAL;
2311
2312
2313
2314
2315
2316
2317
2318
2319 if (le32_to_cpu(desc->dwLength) > len)
2320 return -EINVAL;
2321
2322 ret = __ffs_do_os_desc_header(&type, desc);
2323 if (unlikely(ret < 0)) {
2324 pr_debug("entity OS_DESCRIPTOR(%02lx); ret = %d\n",
2325 num, ret);
2326 return ret;
2327 }
2328
2329
2330
2331 feature_count = le16_to_cpu(desc->wCount);
2332 if (type == FFS_OS_DESC_EXT_COMPAT &&
2333 (feature_count > 255 || desc->Reserved))
2334 return -EINVAL;
2335 len -= ret;
2336 data += ret;
2337
2338
2339
2340
2341
2342 ret = ffs_do_single_os_desc(data, len, type,
2343 feature_count, entity, priv, desc);
2344 if (unlikely(ret < 0)) {
2345 pr_debug("%s returns %d\n", __func__, ret);
2346 return ret;
2347 }
2348
2349 len -= ret;
2350 data += ret;
2351 }
2352 return _len - len;
2353}
2354
2355
2356
2357
2358static int __ffs_data_do_os_desc(enum ffs_os_desc_type type,
2359 struct usb_os_desc_header *h, void *data,
2360 unsigned len, void *priv)
2361{
2362 struct ffs_data *ffs = priv;
2363 u8 length;
2364
2365 ENTER();
2366
2367 switch (type) {
2368 case FFS_OS_DESC_EXT_COMPAT: {
2369 struct usb_ext_compat_desc *d = data;
2370 int i;
2371
2372 if (len < sizeof(*d) ||
2373 d->bFirstInterfaceNumber >= ffs->interfaces_count)
2374 return -EINVAL;
2375 if (d->Reserved1 != 1) {
2376
2377
2378
2379
2380
2381
2382 pr_debug("usb_ext_compat_desc::Reserved1 forced to 1\n");
2383 d->Reserved1 = 1;
2384 }
2385 for (i = 0; i < ARRAY_SIZE(d->Reserved2); ++i)
2386 if (d->Reserved2[i])
2387 return -EINVAL;
2388
2389 length = sizeof(struct usb_ext_compat_desc);
2390 }
2391 break;
2392 case FFS_OS_DESC_EXT_PROP: {
2393 struct usb_ext_prop_desc *d = data;
2394 u32 type, pdl;
2395 u16 pnl;
2396
2397 if (len < sizeof(*d) || h->interface >= ffs->interfaces_count)
2398 return -EINVAL;
2399 length = le32_to_cpu(d->dwSize);
2400 if (len < length)
2401 return -EINVAL;
2402 type = le32_to_cpu(d->dwPropertyDataType);
2403 if (type < USB_EXT_PROP_UNICODE ||
2404 type > USB_EXT_PROP_UNICODE_MULTI) {
2405 pr_vdebug("unsupported os descriptor property type: %d",
2406 type);
2407 return -EINVAL;
2408 }
2409 pnl = le16_to_cpu(d->wPropertyNameLength);
2410 if (length < 14 + pnl) {
2411 pr_vdebug("invalid os descriptor length: %d pnl:%d (descriptor %d)\n",
2412 length, pnl, type);
2413 return -EINVAL;
2414 }
2415 pdl = le32_to_cpu(*(__le32 *)((u8 *)data + 10 + pnl));
2416 if (length != 14 + pnl + pdl) {
2417 pr_vdebug("invalid os descriptor length: %d pnl:%d pdl:%d (descriptor %d)\n",
2418 length, pnl, pdl, type);
2419 return -EINVAL;
2420 }
2421 ++ffs->ms_os_descs_ext_prop_count;
2422
2423 ffs->ms_os_descs_ext_prop_name_len += pnl * 2;
2424 ffs->ms_os_descs_ext_prop_data_len += pdl;
2425 }
2426 break;
2427 default:
2428 pr_vdebug("unknown descriptor: %d\n", type);
2429 return -EINVAL;
2430 }
2431 return length;
2432}
2433
2434static int __ffs_data_got_descs(struct ffs_data *ffs,
2435 char *const _data, size_t len)
2436{
2437 char *data = _data, *raw_descs;
2438 unsigned os_descs_count = 0, counts[3], flags;
2439 int ret = -EINVAL, i;
2440 struct ffs_desc_helper helper;
2441
2442 ENTER();
2443
2444 if (get_unaligned_le32(data + 4) != len)
2445 goto error;
2446
2447 switch (get_unaligned_le32(data)) {
2448 case FUNCTIONFS_DESCRIPTORS_MAGIC:
2449 flags = FUNCTIONFS_HAS_FS_DESC | FUNCTIONFS_HAS_HS_DESC;
2450 data += 8;
2451 len -= 8;
2452 break;
2453 case FUNCTIONFS_DESCRIPTORS_MAGIC_V2:
2454 flags = get_unaligned_le32(data + 8);
2455 ffs->user_flags = flags;
2456 if (flags & ~(FUNCTIONFS_HAS_FS_DESC |
2457 FUNCTIONFS_HAS_HS_DESC |
2458 FUNCTIONFS_HAS_SS_DESC |
2459 FUNCTIONFS_HAS_MS_OS_DESC |
2460 FUNCTIONFS_VIRTUAL_ADDR |
2461 FUNCTIONFS_EVENTFD |
2462 FUNCTIONFS_ALL_CTRL_RECIP |
2463 FUNCTIONFS_CONFIG0_SETUP)) {
2464 ret = -ENOSYS;
2465 goto error;
2466 }
2467 data += 12;
2468 len -= 12;
2469 break;
2470 default:
2471 goto error;
2472 }
2473
2474 if (flags & FUNCTIONFS_EVENTFD) {
2475 if (len < 4)
2476 goto error;
2477 ffs->ffs_eventfd =
2478 eventfd_ctx_fdget((int)get_unaligned_le32(data));
2479 if (IS_ERR(ffs->ffs_eventfd)) {
2480 ret = PTR_ERR(ffs->ffs_eventfd);
2481 ffs->ffs_eventfd = NULL;
2482 goto error;
2483 }
2484 data += 4;
2485 len -= 4;
2486 }
2487
2488
2489 for (i = 0; i < 3; ++i) {
2490 if (!(flags & (1 << i))) {
2491 counts[i] = 0;
2492 } else if (len < 4) {
2493 goto error;
2494 } else {
2495 counts[i] = get_unaligned_le32(data);
2496 data += 4;
2497 len -= 4;
2498 }
2499 }
2500 if (flags & (1 << i)) {
2501 if (len < 4) {
2502 goto error;
2503 }
2504 os_descs_count = get_unaligned_le32(data);
2505 data += 4;
2506 len -= 4;
2507 }
2508
2509
2510 raw_descs = data;
2511 helper.ffs = ffs;
2512 for (i = 0; i < 3; ++i) {
2513 if (!counts[i])
2514 continue;
2515 helper.interfaces_count = 0;
2516 helper.eps_count = 0;
2517 ret = ffs_do_descs(counts[i], data, len,
2518 __ffs_data_do_entity, &helper);
2519 if (ret < 0)
2520 goto error;
2521 if (!ffs->eps_count && !ffs->interfaces_count) {
2522 ffs->eps_count = helper.eps_count;
2523 ffs->interfaces_count = helper.interfaces_count;
2524 } else {
2525 if (ffs->eps_count != helper.eps_count) {
2526 ret = -EINVAL;
2527 goto error;
2528 }
2529 if (ffs->interfaces_count != helper.interfaces_count) {
2530 ret = -EINVAL;
2531 goto error;
2532 }
2533 }
2534 data += ret;
2535 len -= ret;
2536 }
2537 if (os_descs_count) {
2538 ret = ffs_do_os_descs(os_descs_count, data, len,
2539 __ffs_data_do_os_desc, ffs);
2540 if (ret < 0)
2541 goto error;
2542 data += ret;
2543 len -= ret;
2544 }
2545
2546 if (raw_descs == data || len) {
2547 ret = -EINVAL;
2548 goto error;
2549 }
2550
2551 ffs->raw_descs_data = _data;
2552 ffs->raw_descs = raw_descs;
2553 ffs->raw_descs_length = data - raw_descs;
2554 ffs->fs_descs_count = counts[0];
2555 ffs->hs_descs_count = counts[1];
2556 ffs->ss_descs_count = counts[2];
2557 ffs->ms_os_descs_count = os_descs_count;
2558
2559 return 0;
2560
2561error:
2562 kfree(_data);
2563 return ret;
2564}
2565
2566static int __ffs_data_got_strings(struct ffs_data *ffs,
2567 char *const _data, size_t len)
2568{
2569 u32 str_count, needed_count, lang_count;
2570 struct usb_gadget_strings **stringtabs, *t;
2571 const char *data = _data;
2572 struct usb_string *s;
2573
2574 ENTER();
2575
2576 if (unlikely(len < 16 ||
2577 get_unaligned_le32(data) != FUNCTIONFS_STRINGS_MAGIC ||
2578 get_unaligned_le32(data + 4) != len))
2579 goto error;
2580 str_count = get_unaligned_le32(data + 8);
2581 lang_count = get_unaligned_le32(data + 12);
2582
2583
2584 if (unlikely(!str_count != !lang_count))
2585 goto error;
2586
2587
2588 needed_count = ffs->strings_count;
2589 if (unlikely(str_count < needed_count))
2590 goto error;
2591
2592
2593
2594
2595
2596 if (!needed_count) {
2597 kfree(_data);
2598 return 0;
2599 }
2600
2601
2602 {
2603 unsigned i = 0;
2604 vla_group(d);
2605 vla_item(d, struct usb_gadget_strings *, stringtabs,
2606 lang_count + 1);
2607 vla_item(d, struct usb_gadget_strings, stringtab, lang_count);
2608 vla_item(d, struct usb_string, strings,
2609 lang_count*(needed_count+1));
2610
2611 char *vlabuf = kmalloc(vla_group_size(d), GFP_KERNEL);
2612
2613 if (unlikely(!vlabuf)) {
2614 kfree(_data);
2615 return -ENOMEM;
2616 }
2617
2618
2619 stringtabs = vla_ptr(vlabuf, d, stringtabs);
2620 t = vla_ptr(vlabuf, d, stringtab);
2621 i = lang_count;
2622 do {
2623 *stringtabs++ = t++;
2624 } while (--i);
2625 *stringtabs = NULL;
2626
2627
2628 stringtabs = vla_ptr(vlabuf, d, stringtabs);
2629 t = vla_ptr(vlabuf, d, stringtab);
2630 s = vla_ptr(vlabuf, d, strings);
2631 }
2632
2633
2634 data += 16;
2635 len -= 16;
2636
2637 do {
2638 unsigned needed = needed_count;
2639
2640 if (unlikely(len < 3))
2641 goto error_free;
2642 t->language = get_unaligned_le16(data);
2643 t->strings = s;
2644 ++t;
2645
2646 data += 2;
2647 len -= 2;
2648
2649
2650 do {
2651 size_t length = strnlen(data, len);
2652
2653 if (unlikely(length == len))
2654 goto error_free;
2655
2656
2657
2658
2659
2660
2661 if (likely(needed)) {
2662
2663
2664
2665
2666
2667 s->s = data;
2668 --needed;
2669 ++s;
2670 }
2671
2672 data += length + 1;
2673 len -= length + 1;
2674 } while (--str_count);
2675
2676 s->id = 0;
2677 s->s = NULL;
2678 ++s;
2679
2680 } while (--lang_count);
2681
2682
2683 if (unlikely(len))
2684 goto error_free;
2685
2686
2687 ffs->stringtabs = stringtabs;
2688 ffs->raw_strings = _data;
2689
2690 return 0;
2691
2692error_free:
2693 kfree(stringtabs);
2694error:
2695 kfree(_data);
2696 return -EINVAL;
2697}
2698
2699
2700
2701
2702static void __ffs_event_add(struct ffs_data *ffs,
2703 enum usb_functionfs_event_type type)
2704{
2705 enum usb_functionfs_event_type rem_type1, rem_type2 = type;
2706 int neg = 0;
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716 if (ffs->setup_state == FFS_SETUP_PENDING)
2717 ffs->setup_state = FFS_SETUP_CANCELLED;
2718
2719
2720
2721
2722
2723
2724
2725
2726 switch (type) {
2727 case FUNCTIONFS_RESUME:
2728 rem_type2 = FUNCTIONFS_SUSPEND;
2729
2730 case FUNCTIONFS_SUSPEND:
2731 case FUNCTIONFS_SETUP:
2732 rem_type1 = type;
2733
2734 break;
2735
2736 case FUNCTIONFS_BIND:
2737 case FUNCTIONFS_UNBIND:
2738 case FUNCTIONFS_DISABLE:
2739 case FUNCTIONFS_ENABLE:
2740
2741 rem_type1 = FUNCTIONFS_SUSPEND;
2742 rem_type2 = FUNCTIONFS_RESUME;
2743 neg = 1;
2744 break;
2745
2746 default:
2747 WARN(1, "%d: unknown event, this should not happen\n", type);
2748 return;
2749 }
2750
2751 {
2752 u8 *ev = ffs->ev.types, *out = ev;
2753 unsigned n = ffs->ev.count;
2754 for (; n; --n, ++ev)
2755 if ((*ev == rem_type1 || *ev == rem_type2) == neg)
2756 *out++ = *ev;
2757 else
2758 pr_vdebug("purging event %d\n", *ev);
2759 ffs->ev.count = out - ffs->ev.types;
2760 }
2761
2762 pr_vdebug("adding event %d\n", type);
2763 ffs->ev.types[ffs->ev.count++] = type;
2764 wake_up_locked(&ffs->ev.waitq);
2765 if (ffs->ffs_eventfd)
2766 eventfd_signal(ffs->ffs_eventfd, 1);
2767}
2768
2769static void ffs_event_add(struct ffs_data *ffs,
2770 enum usb_functionfs_event_type type)
2771{
2772 unsigned long flags;
2773 spin_lock_irqsave(&ffs->ev.waitq.lock, flags);
2774 __ffs_event_add(ffs, type);
2775 spin_unlock_irqrestore(&ffs->ev.waitq.lock, flags);
2776}
2777
2778
2779
2780static int ffs_ep_addr2idx(struct ffs_data *ffs, u8 endpoint_address)
2781{
2782 int i;
2783
2784 for (i = 1; i < ARRAY_SIZE(ffs->eps_addrmap); ++i)
2785 if (ffs->eps_addrmap[i] == endpoint_address)
2786 return i;
2787 return -ENOENT;
2788}
2789
2790static int __ffs_func_bind_do_descs(enum ffs_entity_type type, u8 *valuep,
2791 struct usb_descriptor_header *desc,
2792 void *priv)
2793{
2794 struct usb_endpoint_descriptor *ds = (void *)desc;
2795 struct ffs_function *func = priv;
2796 struct ffs_ep *ffs_ep;
2797 unsigned ep_desc_id;
2798 int idx;
2799 static const char *speed_names[] = { "full", "high", "super" };
2800
2801 if (type != FFS_DESCRIPTOR)
2802 return 0;
2803
2804
2805
2806
2807
2808
2809
2810 if (func->function.ss_descriptors) {
2811 ep_desc_id = 2;
2812 func->function.ss_descriptors[(long)valuep] = desc;
2813 } else if (func->function.hs_descriptors) {
2814 ep_desc_id = 1;
2815 func->function.hs_descriptors[(long)valuep] = desc;
2816 } else {
2817 ep_desc_id = 0;
2818 func->function.fs_descriptors[(long)valuep] = desc;
2819 }
2820
2821 if (!desc || desc->bDescriptorType != USB_DT_ENDPOINT)
2822 return 0;
2823
2824 idx = ffs_ep_addr2idx(func->ffs, ds->bEndpointAddress) - 1;
2825 if (idx < 0)
2826 return idx;
2827
2828 ffs_ep = func->eps + idx;
2829
2830 if (unlikely(ffs_ep->descs[ep_desc_id])) {
2831 pr_err("two %sspeed descriptors for EP %d\n",
2832 speed_names[ep_desc_id],
2833 ds->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
2834 return -EINVAL;
2835 }
2836 ffs_ep->descs[ep_desc_id] = ds;
2837
2838 ffs_dump_mem(": Original ep desc", ds, ds->bLength);
2839 if (ffs_ep->ep) {
2840 ds->bEndpointAddress = ffs_ep->descs[0]->bEndpointAddress;
2841 if (!ds->wMaxPacketSize)
2842 ds->wMaxPacketSize = ffs_ep->descs[0]->wMaxPacketSize;
2843 } else {
2844 struct usb_request *req;
2845 struct usb_ep *ep;
2846 u8 bEndpointAddress;
2847 u16 wMaxPacketSize;
2848
2849
2850
2851
2852
2853 bEndpointAddress = ds->bEndpointAddress;
2854
2855
2856
2857
2858 wMaxPacketSize = ds->wMaxPacketSize;
2859 pr_vdebug("autoconfig\n");
2860 ep = usb_ep_autoconfig(func->gadget, ds);
2861 if (unlikely(!ep))
2862 return -ENOTSUPP;
2863 ep->driver_data = func->eps + idx;
2864
2865 req = usb_ep_alloc_request(ep, GFP_KERNEL);
2866 if (unlikely(!req))
2867 return -ENOMEM;
2868
2869 ffs_ep->ep = ep;
2870 ffs_ep->req = req;
2871 func->eps_revmap[ds->bEndpointAddress &
2872 USB_ENDPOINT_NUMBER_MASK] = idx + 1;
2873
2874
2875
2876
2877 if (func->ffs->user_flags & FUNCTIONFS_VIRTUAL_ADDR)
2878 ds->bEndpointAddress = bEndpointAddress;
2879
2880
2881
2882
2883 ds->wMaxPacketSize = wMaxPacketSize;
2884 }
2885 ffs_dump_mem(": Rewritten ep desc", ds, ds->bLength);
2886
2887 return 0;
2888}
2889
2890static int __ffs_func_bind_do_nums(enum ffs_entity_type type, u8 *valuep,
2891 struct usb_descriptor_header *desc,
2892 void *priv)
2893{
2894 struct ffs_function *func = priv;
2895 unsigned idx;
2896 u8 newValue;
2897
2898 switch (type) {
2899 default:
2900 case FFS_DESCRIPTOR:
2901
2902 return 0;
2903
2904 case FFS_INTERFACE:
2905 idx = *valuep;
2906 if (func->interfaces_nums[idx] < 0) {
2907 int id = usb_interface_id(func->conf, &func->function);
2908 if (unlikely(id < 0))
2909 return id;
2910 func->interfaces_nums[idx] = id;
2911 }
2912 newValue = func->interfaces_nums[idx];
2913 break;
2914
2915 case FFS_STRING:
2916
2917 newValue = func->ffs->stringtabs[0]->strings[*valuep - 1].id;
2918 break;
2919
2920 case FFS_ENDPOINT:
2921
2922
2923
2924
2925 if (desc->bDescriptorType == USB_DT_ENDPOINT)
2926 return 0;
2927
2928 idx = (*valuep & USB_ENDPOINT_NUMBER_MASK) - 1;
2929 if (unlikely(!func->eps[idx].ep))
2930 return -EINVAL;
2931
2932 {
2933 struct usb_endpoint_descriptor **descs;
2934 descs = func->eps[idx].descs;
2935 newValue = descs[descs[0] ? 0 : 1]->bEndpointAddress;
2936 }
2937 break;
2938 }
2939
2940 pr_vdebug("%02x -> %02x\n", *valuep, newValue);
2941 *valuep = newValue;
2942 return 0;
2943}
2944
2945static int __ffs_func_bind_do_os_desc(enum ffs_os_desc_type type,
2946 struct usb_os_desc_header *h, void *data,
2947 unsigned len, void *priv)
2948{
2949 struct ffs_function *func = priv;
2950 u8 length = 0;
2951
2952 switch (type) {
2953 case FFS_OS_DESC_EXT_COMPAT: {
2954 struct usb_ext_compat_desc *desc = data;
2955 struct usb_os_desc_table *t;
2956
2957 t = &func->function.os_desc_table[desc->bFirstInterfaceNumber];
2958 t->if_id = func->interfaces_nums[desc->bFirstInterfaceNumber];
2959 memcpy(t->os_desc->ext_compat_id, &desc->CompatibleID,
2960 ARRAY_SIZE(desc->CompatibleID) +
2961 ARRAY_SIZE(desc->SubCompatibleID));
2962 length = sizeof(*desc);
2963 }
2964 break;
2965 case FFS_OS_DESC_EXT_PROP: {
2966 struct usb_ext_prop_desc *desc = data;
2967 struct usb_os_desc_table *t;
2968 struct usb_os_desc_ext_prop *ext_prop;
2969 char *ext_prop_name;
2970 char *ext_prop_data;
2971
2972 t = &func->function.os_desc_table[h->interface];
2973 t->if_id = func->interfaces_nums[h->interface];
2974
2975 ext_prop = func->ffs->ms_os_descs_ext_prop_avail;
2976 func->ffs->ms_os_descs_ext_prop_avail += sizeof(*ext_prop);
2977
2978 ext_prop->type = le32_to_cpu(desc->dwPropertyDataType);
2979 ext_prop->name_len = le16_to_cpu(desc->wPropertyNameLength);
2980 ext_prop->data_len = le32_to_cpu(*(__le32 *)
2981 usb_ext_prop_data_len_ptr(data, ext_prop->name_len));
2982 length = ext_prop->name_len + ext_prop->data_len + 14;
2983
2984 ext_prop_name = func->ffs->ms_os_descs_ext_prop_name_avail;
2985 func->ffs->ms_os_descs_ext_prop_name_avail +=
2986 ext_prop->name_len;
2987
2988 ext_prop_data = func->ffs->ms_os_descs_ext_prop_data_avail;
2989 func->ffs->ms_os_descs_ext_prop_data_avail +=
2990 ext_prop->data_len;
2991 memcpy(ext_prop_data,
2992 usb_ext_prop_data_ptr(data, ext_prop->name_len),
2993 ext_prop->data_len);
2994
2995 switch (ext_prop->type) {
2996 case USB_EXT_PROP_UNICODE:
2997 case USB_EXT_PROP_UNICODE_ENV:
2998 case USB_EXT_PROP_UNICODE_LINK:
2999 case USB_EXT_PROP_UNICODE_MULTI:
3000 ext_prop->data_len *= 2;
3001 break;
3002 }
3003 ext_prop->data = ext_prop_data;
3004
3005 memcpy(ext_prop_name, usb_ext_prop_name_ptr(data),
3006 ext_prop->name_len);
3007
3008 ext_prop->name_len *= 2;
3009 ext_prop->name = ext_prop_name;
3010
3011 t->os_desc->ext_prop_len +=
3012 ext_prop->name_len + ext_prop->data_len + 14;
3013 ++t->os_desc->ext_prop_count;
3014 list_add_tail(&ext_prop->entry, &t->os_desc->ext_prop);
3015 }
3016 break;
3017 default:
3018 pr_vdebug("unknown descriptor: %d\n", type);
3019 }
3020
3021 return length;
3022}
3023
3024static inline struct f_fs_opts *ffs_do_functionfs_bind(struct usb_function *f,
3025 struct usb_configuration *c)
3026{
3027 struct ffs_function *func = ffs_func_from_usb(f);
3028 struct f_fs_opts *ffs_opts =
3029 container_of(f->fi, struct f_fs_opts, func_inst);
3030 int ret;
3031
3032 ENTER();
3033
3034
3035
3036
3037
3038
3039
3040
3041 if (!ffs_opts->no_configfs)
3042 ffs_dev_lock();
3043 ret = ffs_opts->dev->desc_ready ? 0 : -ENODEV;
3044 func->ffs = ffs_opts->dev->ffs_data;
3045 if (!ffs_opts->no_configfs)
3046 ffs_dev_unlock();
3047 if (ret)
3048 return ERR_PTR(ret);
3049
3050 func->conf = c;
3051 func->gadget = c->cdev->gadget;
3052
3053
3054
3055
3056
3057
3058
3059
3060 if (!ffs_opts->refcnt) {
3061 ret = functionfs_bind(func->ffs, c->cdev);
3062 if (ret)
3063 return ERR_PTR(ret);
3064 }
3065 ffs_opts->refcnt++;
3066 func->function.strings = func->ffs->stringtabs;
3067
3068 return ffs_opts;
3069}
3070
3071static int _ffs_func_bind(struct usb_configuration *c,
3072 struct usb_function *f)
3073{
3074 struct ffs_function *func = ffs_func_from_usb(f);
3075 struct ffs_data *ffs = func->ffs;
3076
3077 const int full = !!func->ffs->fs_descs_count;
3078 const int high = !!func->ffs->hs_descs_count;
3079 const int super = !!func->ffs->ss_descs_count;
3080
3081 int fs_len, hs_len, ss_len, ret, i;
3082 struct ffs_ep *eps_ptr;
3083
3084
3085 vla_group(d);
3086 vla_item_with_sz(d, struct ffs_ep, eps, ffs->eps_count);
3087 vla_item_with_sz(d, struct usb_descriptor_header *, fs_descs,
3088 full ? ffs->fs_descs_count + 1 : 0);
3089 vla_item_with_sz(d, struct usb_descriptor_header *, hs_descs,
3090 high ? ffs->hs_descs_count + 1 : 0);
3091 vla_item_with_sz(d, struct usb_descriptor_header *, ss_descs,
3092 super ? ffs->ss_descs_count + 1 : 0);
3093 vla_item_with_sz(d, short, inums, ffs->interfaces_count);
3094 vla_item_with_sz(d, struct usb_os_desc_table, os_desc_table,
3095 c->cdev->use_os_string ? ffs->interfaces_count : 0);
3096 vla_item_with_sz(d, char[16], ext_compat,
3097 c->cdev->use_os_string ? ffs->interfaces_count : 0);
3098 vla_item_with_sz(d, struct usb_os_desc, os_desc,
3099 c->cdev->use_os_string ? ffs->interfaces_count : 0);
3100 vla_item_with_sz(d, struct usb_os_desc_ext_prop, ext_prop,
3101 ffs->ms_os_descs_ext_prop_count);
3102 vla_item_with_sz(d, char, ext_prop_name,
3103 ffs->ms_os_descs_ext_prop_name_len);
3104 vla_item_with_sz(d, char, ext_prop_data,
3105 ffs->ms_os_descs_ext_prop_data_len);
3106 vla_item_with_sz(d, char, raw_descs, ffs->raw_descs_length);
3107 char *vlabuf;
3108
3109 ENTER();
3110
3111
3112 if (unlikely(!(full | high | super)))
3113 return -ENOTSUPP;
3114
3115
3116 vlabuf = kzalloc(vla_group_size(d), GFP_KERNEL);
3117 if (unlikely(!vlabuf))
3118 return -ENOMEM;
3119
3120 ffs->ms_os_descs_ext_prop_avail = vla_ptr(vlabuf, d, ext_prop);
3121 ffs->ms_os_descs_ext_prop_name_avail =
3122 vla_ptr(vlabuf, d, ext_prop_name);
3123 ffs->ms_os_descs_ext_prop_data_avail =
3124 vla_ptr(vlabuf, d, ext_prop_data);
3125
3126
3127 memcpy(vla_ptr(vlabuf, d, raw_descs), ffs->raw_descs,
3128 ffs->raw_descs_length);
3129
3130 memset(vla_ptr(vlabuf, d, inums), 0xff, d_inums__sz);
3131 eps_ptr = vla_ptr(vlabuf, d, eps);
3132 for (i = 0; i < ffs->eps_count; i++)
3133 eps_ptr[i].num = -1;
3134
3135
3136
3137
3138 func->eps = vla_ptr(vlabuf, d, eps);
3139 func->interfaces_nums = vla_ptr(vlabuf, d, inums);
3140
3141
3142
3143
3144
3145
3146 if (likely(full)) {
3147 func->function.fs_descriptors = vla_ptr(vlabuf, d, fs_descs);
3148 fs_len = ffs_do_descs(ffs->fs_descs_count,
3149 vla_ptr(vlabuf, d, raw_descs),
3150 d_raw_descs__sz,
3151 __ffs_func_bind_do_descs, func);
3152 if (unlikely(fs_len < 0)) {
3153 ret = fs_len;
3154 goto error;
3155 }
3156 } else {
3157 fs_len = 0;
3158 }
3159
3160 if (likely(high)) {
3161 func->function.hs_descriptors = vla_ptr(vlabuf, d, hs_descs);
3162 hs_len = ffs_do_descs(ffs->hs_descs_count,
3163 vla_ptr(vlabuf, d, raw_descs) + fs_len,
3164 d_raw_descs__sz - fs_len,
3165 __ffs_func_bind_do_descs, func);
3166 if (unlikely(hs_len < 0)) {
3167 ret = hs_len;
3168 goto error;
3169 }
3170 } else {
3171 hs_len = 0;
3172 }
3173
3174 if (likely(super)) {
3175 func->function.ss_descriptors = vla_ptr(vlabuf, d, ss_descs);
3176 ss_len = ffs_do_descs(ffs->ss_descs_count,
3177 vla_ptr(vlabuf, d, raw_descs) + fs_len + hs_len,
3178 d_raw_descs__sz - fs_len - hs_len,
3179 __ffs_func_bind_do_descs, func);
3180 if (unlikely(ss_len < 0)) {
3181 ret = ss_len;
3182 goto error;
3183 }
3184 } else {
3185 ss_len = 0;
3186 }
3187
3188
3189
3190
3191
3192
3193 ret = ffs_do_descs(ffs->fs_descs_count +
3194 (high ? ffs->hs_descs_count : 0) +
3195 (super ? ffs->ss_descs_count : 0),
3196 vla_ptr(vlabuf, d, raw_descs), d_raw_descs__sz,
3197 __ffs_func_bind_do_nums, func);
3198 if (unlikely(ret < 0))
3199 goto error;
3200
3201 func->function.os_desc_table = vla_ptr(vlabuf, d, os_desc_table);
3202 if (c->cdev->use_os_string) {
3203 for (i = 0; i < ffs->interfaces_count; ++i) {
3204 struct usb_os_desc *desc;
3205
3206 desc = func->function.os_desc_table[i].os_desc =
3207 vla_ptr(vlabuf, d, os_desc) +
3208 i * sizeof(struct usb_os_desc);
3209 desc->ext_compat_id =
3210 vla_ptr(vlabuf, d, ext_compat) + i * 16;
3211 INIT_LIST_HEAD(&desc->ext_prop);
3212 }
3213 ret = ffs_do_os_descs(ffs->ms_os_descs_count,
3214 vla_ptr(vlabuf, d, raw_descs) +
3215 fs_len + hs_len + ss_len,
3216 d_raw_descs__sz - fs_len - hs_len -
3217 ss_len,
3218 __ffs_func_bind_do_os_desc, func);
3219 if (unlikely(ret < 0))
3220 goto error;
3221 }
3222 func->function.os_desc_n =
3223 c->cdev->use_os_string ? ffs->interfaces_count : 0;
3224
3225
3226 ffs_event_add(ffs, FUNCTIONFS_BIND);
3227 return 0;
3228
3229error:
3230
3231 return ret;
3232}
3233
3234static int ffs_func_bind(struct usb_configuration *c,
3235 struct usb_function *f)
3236{
3237 struct f_fs_opts *ffs_opts = ffs_do_functionfs_bind(f, c);
3238 struct ffs_function *func = ffs_func_from_usb(f);
3239 int ret;
3240
3241 if (IS_ERR(ffs_opts))
3242 return PTR_ERR(ffs_opts);
3243
3244 ret = _ffs_func_bind(c, f);
3245 if (ret && !--ffs_opts->refcnt)
3246 functionfs_unbind(func->ffs);
3247
3248 return ret;
3249}
3250
3251
3252
3253
3254static void ffs_reset_work(struct work_struct *work)
3255{
3256 struct ffs_data *ffs = container_of(work,
3257 struct ffs_data, reset_work);
3258 ffs_data_reset(ffs);
3259}
3260
3261static int ffs_func_set_alt(struct usb_function *f,
3262 unsigned interface, unsigned alt)
3263{
3264 struct ffs_function *func = ffs_func_from_usb(f);
3265 struct ffs_data *ffs = func->ffs;
3266 int ret = 0, intf;
3267
3268 if (alt != (unsigned)-1) {
3269 intf = ffs_func_revmap_intf(func, interface);
3270 if (unlikely(intf < 0))
3271 return intf;
3272 }
3273
3274 if (ffs->func)
3275 ffs_func_eps_disable(ffs->func);
3276
3277 if (ffs->state == FFS_DEACTIVATED) {
3278 ffs->state = FFS_CLOSING;
3279 INIT_WORK(&ffs->reset_work, ffs_reset_work);
3280 schedule_work(&ffs->reset_work);
3281 return -ENODEV;
3282 }
3283
3284 if (ffs->state != FFS_ACTIVE)
3285 return -ENODEV;
3286
3287 if (alt == (unsigned)-1) {
3288 ffs->func = NULL;
3289 ffs_event_add(ffs, FUNCTIONFS_DISABLE);
3290 return 0;
3291 }
3292
3293 ffs->func = func;
3294 ret = ffs_func_eps_enable(func);
3295 if (likely(ret >= 0))
3296 ffs_event_add(ffs, FUNCTIONFS_ENABLE);
3297 return ret;
3298}
3299
3300static void ffs_func_disable(struct usb_function *f)
3301{
3302 ffs_func_set_alt(f, 0, (unsigned)-1);
3303}
3304
3305static int ffs_func_setup(struct usb_function *f,
3306 const struct usb_ctrlrequest *creq)
3307{
3308 struct ffs_function *func = ffs_func_from_usb(f);
3309 struct ffs_data *ffs = func->ffs;
3310 unsigned long flags;
3311 int ret;
3312
3313 ENTER();
3314
3315 pr_vdebug("creq->bRequestType = %02x\n", creq->bRequestType);
3316 pr_vdebug("creq->bRequest = %02x\n", creq->bRequest);
3317 pr_vdebug("creq->wValue = %04x\n", le16_to_cpu(creq->wValue));
3318 pr_vdebug("creq->wIndex = %04x\n", le16_to_cpu(creq->wIndex));
3319 pr_vdebug("creq->wLength = %04x\n", le16_to_cpu(creq->wLength));
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331 if (ffs->state != FFS_ACTIVE)
3332 return -ENODEV;
3333
3334 switch (creq->bRequestType & USB_RECIP_MASK) {
3335 case USB_RECIP_INTERFACE:
3336 ret = ffs_func_revmap_intf(func, le16_to_cpu(creq->wIndex));
3337 if (unlikely(ret < 0))
3338 return ret;
3339 break;
3340
3341 case USB_RECIP_ENDPOINT:
3342 ret = ffs_func_revmap_ep(func, le16_to_cpu(creq->wIndex));
3343 if (unlikely(ret < 0))
3344 return ret;
3345 if (func->ffs->user_flags & FUNCTIONFS_VIRTUAL_ADDR)
3346 ret = func->ffs->eps_addrmap[ret];
3347 break;
3348
3349 default:
3350 if (func->ffs->user_flags & FUNCTIONFS_ALL_CTRL_RECIP)
3351 ret = le16_to_cpu(creq->wIndex);
3352 else
3353 return -EOPNOTSUPP;
3354 }
3355
3356 spin_lock_irqsave(&ffs->ev.waitq.lock, flags);
3357 ffs->ev.setup = *creq;
3358 ffs->ev.setup.wIndex = cpu_to_le16(ret);
3359 __ffs_event_add(ffs, FUNCTIONFS_SETUP);
3360 spin_unlock_irqrestore(&ffs->ev.waitq.lock, flags);
3361
3362 return creq->wLength == 0 ? USB_GADGET_DELAYED_STATUS : 0;
3363}
3364
3365static bool ffs_func_req_match(struct usb_function *f,
3366 const struct usb_ctrlrequest *creq,
3367 bool config0)
3368{
3369 struct ffs_function *func = ffs_func_from_usb(f);
3370
3371 if (config0 && !(func->ffs->user_flags & FUNCTIONFS_CONFIG0_SETUP))
3372 return false;
3373
3374 switch (creq->bRequestType & USB_RECIP_MASK) {
3375 case USB_RECIP_INTERFACE:
3376 return (ffs_func_revmap_intf(func,
3377 le16_to_cpu(creq->wIndex)) >= 0);
3378 case USB_RECIP_ENDPOINT:
3379 return (ffs_func_revmap_ep(func,
3380 le16_to_cpu(creq->wIndex)) >= 0);
3381 default:
3382 return (bool) (func->ffs->user_flags &
3383 FUNCTIONFS_ALL_CTRL_RECIP);
3384 }
3385}
3386
3387static void ffs_func_suspend(struct usb_function *f)
3388{
3389 ENTER();
3390 ffs_event_add(ffs_func_from_usb(f)->ffs, FUNCTIONFS_SUSPEND);
3391}
3392
3393static void ffs_func_resume(struct usb_function *f)
3394{
3395 ENTER();
3396 ffs_event_add(ffs_func_from_usb(f)->ffs, FUNCTIONFS_RESUME);
3397}
3398
3399
3400
3401
3402static int ffs_func_revmap_ep(struct ffs_function *func, u8 num)
3403{
3404 num = func->eps_revmap[num & USB_ENDPOINT_NUMBER_MASK];
3405 return num ? num : -EDOM;
3406}
3407
3408static int ffs_func_revmap_intf(struct ffs_function *func, u8 intf)
3409{
3410 short *nums = func->interfaces_nums;
3411 unsigned count = func->ffs->interfaces_count;
3412
3413 for (; count; --count, ++nums) {
3414 if (*nums >= 0 && *nums == intf)
3415 return nums - func->interfaces_nums;
3416 }
3417
3418 return -EDOM;
3419}
3420
3421
3422
3423
3424static LIST_HEAD(ffs_devices);
3425
3426static struct ffs_dev *_ffs_do_find_dev(const char *name)
3427{
3428 struct ffs_dev *dev;
3429
3430 if (!name)
3431 return NULL;
3432
3433 list_for_each_entry(dev, &ffs_devices, entry) {
3434 if (strcmp(dev->name, name) == 0)
3435 return dev;
3436 }
3437
3438 return NULL;
3439}
3440
3441
3442
3443
3444static struct ffs_dev *_ffs_get_single_dev(void)
3445{
3446 struct ffs_dev *dev;
3447
3448 if (list_is_singular(&ffs_devices)) {
3449 dev = list_first_entry(&ffs_devices, struct ffs_dev, entry);
3450 if (dev->single)
3451 return dev;
3452 }
3453
3454 return NULL;
3455}
3456
3457
3458
3459
3460static struct ffs_dev *_ffs_find_dev(const char *name)
3461{
3462 struct ffs_dev *dev;
3463
3464 dev = _ffs_get_single_dev();
3465 if (dev)
3466 return dev;
3467
3468 return _ffs_do_find_dev(name);
3469}
3470
3471
3472
3473static inline struct f_fs_opts *to_ffs_opts(struct config_item *item)
3474{
3475 return container_of(to_config_group(item), struct f_fs_opts,
3476 func_inst.group);
3477}
3478
3479static void ffs_attr_release(struct config_item *item)
3480{
3481 struct f_fs_opts *opts = to_ffs_opts(item);
3482
3483 usb_put_function_instance(&opts->func_inst);
3484}
3485
3486static struct configfs_item_operations ffs_item_ops = {
3487 .release = ffs_attr_release,
3488};
3489
3490static const struct config_item_type ffs_func_type = {
3491 .ct_item_ops = &ffs_item_ops,
3492 .ct_owner = THIS_MODULE,
3493};
3494
3495
3496
3497
3498static void ffs_free_inst(struct usb_function_instance *f)
3499{
3500 struct f_fs_opts *opts;
3501
3502 opts = to_f_fs_opts(f);
3503 ffs_dev_lock();
3504 _ffs_free_dev(opts->dev);
3505 ffs_dev_unlock();
3506 kfree(opts);
3507}
3508
3509static int ffs_set_inst_name(struct usb_function_instance *fi, const char *name)
3510{
3511 if (strlen(name) >= sizeof_field(struct ffs_dev, name))
3512 return -ENAMETOOLONG;
3513 return ffs_name_dev(to_f_fs_opts(fi)->dev, name);
3514}
3515
3516static struct usb_function_instance *ffs_alloc_inst(void)
3517{
3518 struct f_fs_opts *opts;
3519 struct ffs_dev *dev;
3520
3521 opts = kzalloc(sizeof(*opts), GFP_KERNEL);
3522 if (!opts)
3523 return ERR_PTR(-ENOMEM);
3524
3525 opts->func_inst.set_inst_name = ffs_set_inst_name;
3526 opts->func_inst.free_func_inst = ffs_free_inst;
3527 ffs_dev_lock();
3528 dev = _ffs_alloc_dev();
3529 ffs_dev_unlock();
3530 if (IS_ERR(dev)) {
3531 kfree(opts);
3532 return ERR_CAST(dev);
3533 }
3534 opts->dev = dev;
3535 dev->opts = opts;
3536
3537 config_group_init_type_name(&opts->func_inst.group, "",
3538 &ffs_func_type);
3539 return &opts->func_inst;
3540}
3541
3542static void ffs_free(struct usb_function *f)
3543{
3544 kfree(ffs_func_from_usb(f));
3545}
3546
3547static void ffs_func_unbind(struct usb_configuration *c,
3548 struct usb_function *f)
3549{
3550 struct ffs_function *func = ffs_func_from_usb(f);
3551 struct ffs_data *ffs = func->ffs;
3552 struct f_fs_opts *opts =
3553 container_of(f->fi, struct f_fs_opts, func_inst);
3554 struct ffs_ep *ep = func->eps;
3555 unsigned count = ffs->eps_count;
3556 unsigned long flags;
3557
3558 ENTER();
3559 if (ffs->func == func) {
3560 ffs_func_eps_disable(func);
3561 ffs->func = NULL;
3562 }
3563
3564 if (!--opts->refcnt)
3565 functionfs_unbind(ffs);
3566
3567
3568 spin_lock_irqsave(&func->ffs->eps_lock, flags);
3569 while (count--) {
3570 if (ep->ep && ep->req)
3571 usb_ep_free_request(ep->ep, ep->req);
3572 ep->req = NULL;
3573 ++ep;
3574 }
3575 spin_unlock_irqrestore(&func->ffs->eps_lock, flags);
3576 kfree(func->eps);
3577 func->eps = NULL;
3578
3579
3580
3581
3582 func->function.fs_descriptors = NULL;
3583 func->function.hs_descriptors = NULL;
3584 func->function.ss_descriptors = NULL;
3585 func->interfaces_nums = NULL;
3586
3587 ffs_event_add(ffs, FUNCTIONFS_UNBIND);
3588}
3589
3590static struct usb_function *ffs_alloc(struct usb_function_instance *fi)
3591{
3592 struct ffs_function *func;
3593
3594 ENTER();
3595
3596 func = kzalloc(sizeof(*func), GFP_KERNEL);
3597 if (unlikely(!func))
3598 return ERR_PTR(-ENOMEM);
3599
3600 func->function.name = "Function FS Gadget";
3601
3602 func->function.bind = ffs_func_bind;
3603 func->function.unbind = ffs_func_unbind;
3604 func->function.set_alt = ffs_func_set_alt;
3605 func->function.disable = ffs_func_disable;
3606 func->function.setup = ffs_func_setup;
3607 func->function.req_match = ffs_func_req_match;
3608 func->function.suspend = ffs_func_suspend;
3609 func->function.resume = ffs_func_resume;
3610 func->function.free_func = ffs_free;
3611
3612 return &func->function;
3613}
3614
3615
3616
3617
3618static struct ffs_dev *_ffs_alloc_dev(void)
3619{
3620 struct ffs_dev *dev;
3621 int ret;
3622
3623 if (_ffs_get_single_dev())
3624 return ERR_PTR(-EBUSY);
3625
3626 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
3627 if (!dev)
3628 return ERR_PTR(-ENOMEM);
3629
3630 if (list_empty(&ffs_devices)) {
3631 ret = functionfs_init();
3632 if (ret) {
3633 kfree(dev);
3634 return ERR_PTR(ret);
3635 }
3636 }
3637
3638 list_add(&dev->entry, &ffs_devices);
3639
3640 return dev;
3641}
3642
3643int ffs_name_dev(struct ffs_dev *dev, const char *name)
3644{
3645 struct ffs_dev *existing;
3646 int ret = 0;
3647
3648 ffs_dev_lock();
3649
3650 existing = _ffs_do_find_dev(name);
3651 if (!existing)
3652 strlcpy(dev->name, name, ARRAY_SIZE(dev->name));
3653 else if (existing != dev)
3654 ret = -EBUSY;
3655
3656 ffs_dev_unlock();
3657
3658 return ret;
3659}
3660EXPORT_SYMBOL_GPL(ffs_name_dev);
3661
3662int ffs_single_dev(struct ffs_dev *dev)
3663{
3664 int ret;
3665
3666 ret = 0;
3667 ffs_dev_lock();
3668
3669 if (!list_is_singular(&ffs_devices))
3670 ret = -EBUSY;
3671 else
3672 dev->single = true;
3673
3674 ffs_dev_unlock();
3675 return ret;
3676}
3677EXPORT_SYMBOL_GPL(ffs_single_dev);
3678
3679
3680
3681
3682static void _ffs_free_dev(struct ffs_dev *dev)
3683{
3684 list_del(&dev->entry);
3685
3686
3687 if (dev->ffs_data)
3688 dev->ffs_data->private_data = NULL;
3689
3690 kfree(dev);
3691 if (list_empty(&ffs_devices))
3692 functionfs_cleanup();
3693}
3694
3695static void *ffs_acquire_dev(const char *dev_name)
3696{
3697 struct ffs_dev *ffs_dev;
3698
3699 ENTER();
3700 ffs_dev_lock();
3701
3702 ffs_dev = _ffs_find_dev(dev_name);
3703 if (!ffs_dev)
3704 ffs_dev = ERR_PTR(-ENOENT);
3705 else if (ffs_dev->mounted)
3706 ffs_dev = ERR_PTR(-EBUSY);
3707 else if (ffs_dev->ffs_acquire_dev_callback &&
3708 ffs_dev->ffs_acquire_dev_callback(ffs_dev))
3709 ffs_dev = ERR_PTR(-ENOENT);
3710 else
3711 ffs_dev->mounted = true;
3712
3713 ffs_dev_unlock();
3714 return ffs_dev;
3715}
3716
3717static void ffs_release_dev(struct ffs_data *ffs_data)
3718{
3719 struct ffs_dev *ffs_dev;
3720
3721 ENTER();
3722 ffs_dev_lock();
3723
3724 ffs_dev = ffs_data->private_data;
3725 if (ffs_dev) {
3726 ffs_dev->mounted = false;
3727
3728 if (ffs_dev->ffs_release_dev_callback)
3729 ffs_dev->ffs_release_dev_callback(ffs_dev);
3730 }
3731
3732 ffs_dev_unlock();
3733}
3734
3735static int ffs_ready(struct ffs_data *ffs)
3736{
3737 struct ffs_dev *ffs_obj;
3738 int ret = 0;
3739
3740 ENTER();
3741 ffs_dev_lock();
3742
3743 ffs_obj = ffs->private_data;
3744 if (!ffs_obj) {
3745 ret = -EINVAL;
3746 goto done;
3747 }
3748 if (WARN_ON(ffs_obj->desc_ready)) {
3749 ret = -EBUSY;
3750 goto done;
3751 }
3752
3753 ffs_obj->desc_ready = true;
3754 ffs_obj->ffs_data = ffs;
3755
3756 if (ffs_obj->ffs_ready_callback) {
3757 ret = ffs_obj->ffs_ready_callback(ffs);
3758 if (ret)
3759 goto done;
3760 }
3761
3762 set_bit(FFS_FL_CALL_CLOSED_CALLBACK, &ffs->flags);
3763done:
3764 ffs_dev_unlock();
3765 return ret;
3766}
3767
3768static void ffs_closed(struct ffs_data *ffs)
3769{
3770 struct ffs_dev *ffs_obj;
3771 struct f_fs_opts *opts;
3772 struct config_item *ci;
3773
3774 ENTER();
3775 ffs_dev_lock();
3776
3777 ffs_obj = ffs->private_data;
3778 if (!ffs_obj)
3779 goto done;
3780
3781 ffs_obj->desc_ready = false;
3782 ffs_obj->ffs_data = NULL;
3783
3784 if (test_and_clear_bit(FFS_FL_CALL_CLOSED_CALLBACK, &ffs->flags) &&
3785 ffs_obj->ffs_closed_callback)
3786 ffs_obj->ffs_closed_callback(ffs);
3787
3788 if (ffs_obj->opts)
3789 opts = ffs_obj->opts;
3790 else
3791 goto done;
3792
3793 if (opts->no_configfs || !opts->func_inst.group.cg_item.ci_parent
3794 || !kref_read(&opts->func_inst.group.cg_item.ci_kref))
3795 goto done;
3796
3797 ci = opts->func_inst.group.cg_item.ci_parent->ci_parent;
3798 ffs_dev_unlock();
3799
3800 if (test_bit(FFS_FL_BOUND, &ffs->flags))
3801 unregister_gadget_item(ci);
3802 return;
3803done:
3804 ffs_dev_unlock();
3805}
3806
3807
3808
3809static int ffs_mutex_lock(struct mutex *mutex, unsigned nonblock)
3810{
3811 return nonblock
3812 ? likely(mutex_trylock(mutex)) ? 0 : -EAGAIN
3813 : mutex_lock_interruptible(mutex);
3814}
3815
3816static char *ffs_prepare_buffer(const char __user *buf, size_t len)
3817{
3818 char *data;
3819
3820 if (unlikely(!len))
3821 return NULL;
3822
3823 data = kmalloc(len, GFP_KERNEL);
3824 if (unlikely(!data))
3825 return ERR_PTR(-ENOMEM);
3826
3827 if (unlikely(copy_from_user(data, buf, len))) {
3828 kfree(data);
3829 return ERR_PTR(-EFAULT);
3830 }
3831
3832 pr_vdebug("Buffer from user space:\n");
3833 ffs_dump_mem("", data, len);
3834
3835 return data;
3836}
3837
3838DECLARE_USB_FUNCTION_INIT(ffs, ffs_alloc_inst, ffs_alloc);
3839MODULE_LICENSE("GPL");
3840MODULE_AUTHOR("Michal Nazarewicz");
3841