]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/usb/gadget/legacy/tcm_usb_gadget.c
Merge remote-tracking branch 'target-updates/for-next'
[karo-tx-linux.git] / drivers / usb / gadget / legacy / tcm_usb_gadget.c
1 /* Target based USB-Gadget
2  *
3  * UAS protocol handling, target callbacks, configfs handling,
4  * BBB (USB Mass Storage Class Bulk-Only (BBB) and Transport protocol handling.
5  *
6  * Author: Sebastian Andrzej Siewior <bigeasy at linutronix dot de>
7  * License: GPLv2 as published by FSF.
8  */
9 #include <linux/kernel.h>
10 #include <linux/module.h>
11 #include <linux/types.h>
12 #include <linux/string.h>
13 #include <linux/configfs.h>
14 #include <linux/ctype.h>
15 #include <linux/usb/ch9.h>
16 #include <linux/usb/composite.h>
17 #include <linux/usb/gadget.h>
18 #include <linux/usb/storage.h>
19 #include <scsi/scsi_tcq.h>
20 #include <target/target_core_base.h>
21 #include <target/target_core_fabric.h>
22 #include <asm/unaligned.h>
23
24 #include "tcm_usb_gadget.h"
25
26 USB_GADGET_COMPOSITE_OPTIONS();
27
28 static inline struct f_uas *to_f_uas(struct usb_function *f)
29 {
30         return container_of(f, struct f_uas, function);
31 }
32
33 static void usbg_cmd_release(struct kref *);
34
35 static inline void usbg_cleanup_cmd(struct usbg_cmd *cmd)
36 {
37         kref_put(&cmd->ref, usbg_cmd_release);
38 }
39
40 /* Start bot.c code */
41
42 static int bot_enqueue_cmd_cbw(struct f_uas *fu)
43 {
44         int ret;
45
46         if (fu->flags & USBG_BOT_CMD_PEND)
47                 return 0;
48
49         ret = usb_ep_queue(fu->ep_out, fu->cmd.req, GFP_ATOMIC);
50         if (!ret)
51                 fu->flags |= USBG_BOT_CMD_PEND;
52         return ret;
53 }
54
55 static void bot_status_complete(struct usb_ep *ep, struct usb_request *req)
56 {
57         struct usbg_cmd *cmd = req->context;
58         struct f_uas *fu = cmd->fu;
59
60         usbg_cleanup_cmd(cmd);
61         if (req->status < 0) {
62                 pr_err("ERR %s(%d)\n", __func__, __LINE__);
63                 return;
64         }
65
66         /* CSW completed, wait for next CBW */
67         bot_enqueue_cmd_cbw(fu);
68 }
69
70 static void bot_enqueue_sense_code(struct f_uas *fu, struct usbg_cmd *cmd)
71 {
72         struct bulk_cs_wrap *csw = &fu->bot_status.csw;
73         int ret;
74         u8 *sense;
75         unsigned int csw_stat;
76
77         csw_stat = cmd->csw_code;
78
79         /*
80          * We can't send SENSE as a response. So we take ASC & ASCQ from our
81          * sense buffer and queue it and hope the host sends a REQUEST_SENSE
82          * command where it learns why we failed.
83          */
84         sense = cmd->sense_iu.sense;
85
86         csw->Tag = cmd->bot_tag;
87         csw->Status = csw_stat;
88         fu->bot_status.req->context = cmd;
89         ret = usb_ep_queue(fu->ep_in, fu->bot_status.req, GFP_ATOMIC);
90         if (ret)
91                 pr_err("%s(%d) ERR: %d\n", __func__, __LINE__, ret);
92 }
93
94 static void bot_err_compl(struct usb_ep *ep, struct usb_request *req)
95 {
96         struct usbg_cmd *cmd = req->context;
97         struct f_uas *fu = cmd->fu;
98
99         if (req->status < 0)
100                 pr_err("ERR %s(%d)\n", __func__, __LINE__);
101
102         if (cmd->data_len) {
103                 if (cmd->data_len > ep->maxpacket) {
104                         req->length = ep->maxpacket;
105                         cmd->data_len -= ep->maxpacket;
106                 } else {
107                         req->length = cmd->data_len;
108                         cmd->data_len = 0;
109                 }
110
111                 usb_ep_queue(ep, req, GFP_ATOMIC);
112                 return ;
113         }
114         bot_enqueue_sense_code(fu, cmd);
115 }
116
117 static void bot_send_bad_status(struct usbg_cmd *cmd)
118 {
119         struct f_uas *fu = cmd->fu;
120         struct bulk_cs_wrap *csw = &fu->bot_status.csw;
121         struct usb_request *req;
122         struct usb_ep *ep;
123
124         csw->Residue = cpu_to_le32(cmd->data_len);
125
126         if (cmd->data_len) {
127                 if (cmd->is_read) {
128                         ep = fu->ep_in;
129                         req = fu->bot_req_in;
130                 } else {
131                         ep = fu->ep_out;
132                         req = fu->bot_req_out;
133                 }
134
135                 if (cmd->data_len > fu->ep_in->maxpacket) {
136                         req->length = ep->maxpacket;
137                         cmd->data_len -= ep->maxpacket;
138                 } else {
139                         req->length = cmd->data_len;
140                         cmd->data_len = 0;
141                 }
142                 req->complete = bot_err_compl;
143                 req->context = cmd;
144                 req->buf = fu->cmd.buf;
145                 usb_ep_queue(ep, req, GFP_KERNEL);
146         } else {
147                 bot_enqueue_sense_code(fu, cmd);
148         }
149 }
150
151 static int bot_send_status(struct usbg_cmd *cmd, bool moved_data)
152 {
153         struct f_uas *fu = cmd->fu;
154         struct bulk_cs_wrap *csw = &fu->bot_status.csw;
155         int ret;
156
157         if (cmd->se_cmd.scsi_status == SAM_STAT_GOOD) {
158                 if (!moved_data && cmd->data_len) {
159                         /*
160                          * the host wants to move data, we don't. Fill / empty
161                          * the pipe and then send the csw with reside set.
162                          */
163                         cmd->csw_code = US_BULK_STAT_OK;
164                         bot_send_bad_status(cmd);
165                         return 0;
166                 }
167
168                 csw->Tag = cmd->bot_tag;
169                 csw->Residue = cpu_to_le32(0);
170                 csw->Status = US_BULK_STAT_OK;
171                 fu->bot_status.req->context = cmd;
172
173                 ret = usb_ep_queue(fu->ep_in, fu->bot_status.req, GFP_KERNEL);
174                 if (ret)
175                         pr_err("%s(%d) ERR: %d\n", __func__, __LINE__, ret);
176         } else {
177                 cmd->csw_code = US_BULK_STAT_FAIL;
178                 bot_send_bad_status(cmd);
179         }
180         return 0;
181 }
182
183 /*
184  * Called after command (no data transfer) or after the write (to device)
185  * operation is completed
186  */
187 static int bot_send_status_response(struct usbg_cmd *cmd)
188 {
189         bool moved_data = false;
190
191         if (!cmd->is_read)
192                 moved_data = true;
193         return bot_send_status(cmd, moved_data);
194 }
195
196 /* Read request completed, now we have to send the CSW */
197 static void bot_read_compl(struct usb_ep *ep, struct usb_request *req)
198 {
199         struct usbg_cmd *cmd = req->context;
200
201         if (req->status < 0)
202                 pr_err("ERR %s(%d)\n", __func__, __LINE__);
203
204         bot_send_status(cmd, true);
205 }
206
207 static int bot_send_read_response(struct usbg_cmd *cmd)
208 {
209         struct f_uas *fu = cmd->fu;
210         struct se_cmd *se_cmd = &cmd->se_cmd;
211         struct usb_gadget *gadget = fuas_to_gadget(fu);
212         int ret;
213
214         if (!cmd->data_len) {
215                 cmd->csw_code = US_BULK_STAT_PHASE;
216                 bot_send_bad_status(cmd);
217                 return 0;
218         }
219
220         if (!gadget->sg_supported) {
221                 cmd->data_buf = kmalloc(se_cmd->data_length, GFP_ATOMIC);
222                 if (!cmd->data_buf)
223                         return -ENOMEM;
224
225                 sg_copy_to_buffer(se_cmd->t_data_sg,
226                                 se_cmd->t_data_nents,
227                                 cmd->data_buf,
228                                 se_cmd->data_length);
229
230                 fu->bot_req_in->buf = cmd->data_buf;
231         } else {
232                 fu->bot_req_in->buf = NULL;
233                 fu->bot_req_in->num_sgs = se_cmd->t_data_nents;
234                 fu->bot_req_in->sg = se_cmd->t_data_sg;
235         }
236
237         fu->bot_req_in->complete = bot_read_compl;
238         fu->bot_req_in->length = se_cmd->data_length;
239         fu->bot_req_in->context = cmd;
240         ret = usb_ep_queue(fu->ep_in, fu->bot_req_in, GFP_ATOMIC);
241         if (ret)
242                 pr_err("%s(%d)\n", __func__, __LINE__);
243         return 0;
244 }
245
246 static void usbg_data_write_cmpl(struct usb_ep *, struct usb_request *);
247 static int usbg_prepare_w_request(struct usbg_cmd *, struct usb_request *);
248
249 static int bot_send_write_request(struct usbg_cmd *cmd)
250 {
251         struct f_uas *fu = cmd->fu;
252         struct se_cmd *se_cmd = &cmd->se_cmd;
253         struct usb_gadget *gadget = fuas_to_gadget(fu);
254         int ret;
255
256         init_completion(&cmd->write_complete);
257         cmd->fu = fu;
258
259         if (!cmd->data_len) {
260                 cmd->csw_code = US_BULK_STAT_PHASE;
261                 return -EINVAL;
262         }
263
264         if (!gadget->sg_supported) {
265                 cmd->data_buf = kmalloc(se_cmd->data_length, GFP_KERNEL);
266                 if (!cmd->data_buf)
267                         return -ENOMEM;
268
269                 fu->bot_req_out->buf = cmd->data_buf;
270         } else {
271                 fu->bot_req_out->buf = NULL;
272                 fu->bot_req_out->num_sgs = se_cmd->t_data_nents;
273                 fu->bot_req_out->sg = se_cmd->t_data_sg;
274         }
275
276         fu->bot_req_out->complete = usbg_data_write_cmpl;
277         fu->bot_req_out->length = se_cmd->data_length;
278         fu->bot_req_out->context = cmd;
279
280         ret = usbg_prepare_w_request(cmd, fu->bot_req_out);
281         if (ret)
282                 goto cleanup;
283         ret = usb_ep_queue(fu->ep_out, fu->bot_req_out, GFP_KERNEL);
284         if (ret)
285                 pr_err("%s(%d)\n", __func__, __LINE__);
286
287         wait_for_completion(&cmd->write_complete);
288         target_execute_cmd(se_cmd);
289 cleanup:
290         return ret;
291 }
292
293 static int bot_submit_command(struct f_uas *, void *, unsigned int);
294
295 static void bot_cmd_complete(struct usb_ep *ep, struct usb_request *req)
296 {
297         struct f_uas *fu = req->context;
298         int ret;
299
300         fu->flags &= ~USBG_BOT_CMD_PEND;
301
302         if (req->status < 0)
303                 return;
304
305         ret = bot_submit_command(fu, req->buf, req->actual);
306         if (ret)
307                 pr_err("%s(%d): %d\n", __func__, __LINE__, ret);
308 }
309
310 static int bot_prepare_reqs(struct f_uas *fu)
311 {
312         int ret;
313
314         fu->bot_req_in = usb_ep_alloc_request(fu->ep_in, GFP_KERNEL);
315         if (!fu->bot_req_in)
316                 goto err;
317
318         fu->bot_req_out = usb_ep_alloc_request(fu->ep_out, GFP_KERNEL);
319         if (!fu->bot_req_out)
320                 goto err_out;
321
322         fu->cmd.req = usb_ep_alloc_request(fu->ep_out, GFP_KERNEL);
323         if (!fu->cmd.req)
324                 goto err_cmd;
325
326         fu->bot_status.req = usb_ep_alloc_request(fu->ep_in, GFP_KERNEL);
327         if (!fu->bot_status.req)
328                 goto err_sts;
329
330         fu->bot_status.req->buf = &fu->bot_status.csw;
331         fu->bot_status.req->length = US_BULK_CS_WRAP_LEN;
332         fu->bot_status.req->complete = bot_status_complete;
333         fu->bot_status.csw.Signature = cpu_to_le32(US_BULK_CS_SIGN);
334
335         fu->cmd.buf = kmalloc(fu->ep_out->maxpacket, GFP_KERNEL);
336         if (!fu->cmd.buf)
337                 goto err_buf;
338
339         fu->cmd.req->complete = bot_cmd_complete;
340         fu->cmd.req->buf = fu->cmd.buf;
341         fu->cmd.req->length = fu->ep_out->maxpacket;
342         fu->cmd.req->context = fu;
343
344         ret = bot_enqueue_cmd_cbw(fu);
345         if (ret)
346                 goto err_queue;
347         return 0;
348 err_queue:
349         kfree(fu->cmd.buf);
350         fu->cmd.buf = NULL;
351 err_buf:
352         usb_ep_free_request(fu->ep_in, fu->bot_status.req);
353 err_sts:
354         usb_ep_free_request(fu->ep_out, fu->cmd.req);
355         fu->cmd.req = NULL;
356 err_cmd:
357         usb_ep_free_request(fu->ep_out, fu->bot_req_out);
358         fu->bot_req_out = NULL;
359 err_out:
360         usb_ep_free_request(fu->ep_in, fu->bot_req_in);
361         fu->bot_req_in = NULL;
362 err:
363         pr_err("BOT: endpoint setup failed\n");
364         return -ENOMEM;
365 }
366
367 static void bot_cleanup_old_alt(struct f_uas *fu)
368 {
369         if (!(fu->flags & USBG_ENABLED))
370                 return;
371
372         usb_ep_disable(fu->ep_in);
373         usb_ep_disable(fu->ep_out);
374
375         if (!fu->bot_req_in)
376                 return;
377
378         usb_ep_free_request(fu->ep_in, fu->bot_req_in);
379         usb_ep_free_request(fu->ep_out, fu->bot_req_out);
380         usb_ep_free_request(fu->ep_out, fu->cmd.req);
381         usb_ep_free_request(fu->ep_out, fu->bot_status.req);
382
383         kfree(fu->cmd.buf);
384
385         fu->bot_req_in = NULL;
386         fu->bot_req_out = NULL;
387         fu->cmd.req = NULL;
388         fu->bot_status.req = NULL;
389         fu->cmd.buf = NULL;
390 }
391
392 static void bot_set_alt(struct f_uas *fu)
393 {
394         struct usb_function *f = &fu->function;
395         struct usb_gadget *gadget = f->config->cdev->gadget;
396         int ret;
397
398         fu->flags = USBG_IS_BOT;
399
400         config_ep_by_speed(gadget, f, fu->ep_in);
401         ret = usb_ep_enable(fu->ep_in);
402         if (ret)
403                 goto err_b_in;
404
405         config_ep_by_speed(gadget, f, fu->ep_out);
406         ret = usb_ep_enable(fu->ep_out);
407         if (ret)
408                 goto err_b_out;
409
410         ret = bot_prepare_reqs(fu);
411         if (ret)
412                 goto err_wq;
413         fu->flags |= USBG_ENABLED;
414         pr_info("Using the BOT protocol\n");
415         return;
416 err_wq:
417         usb_ep_disable(fu->ep_out);
418 err_b_out:
419         usb_ep_disable(fu->ep_in);
420 err_b_in:
421         fu->flags = USBG_IS_BOT;
422 }
423
424 static int usbg_bot_setup(struct usb_function *f,
425                 const struct usb_ctrlrequest *ctrl)
426 {
427         struct f_uas *fu = to_f_uas(f);
428         struct usb_composite_dev *cdev = f->config->cdev;
429         u16 w_value = le16_to_cpu(ctrl->wValue);
430         u16 w_length = le16_to_cpu(ctrl->wLength);
431         int luns;
432         u8 *ret_lun;
433
434         switch (ctrl->bRequest) {
435         case US_BULK_GET_MAX_LUN:
436                 if (ctrl->bRequestType != (USB_DIR_IN | USB_TYPE_CLASS |
437                                         USB_RECIP_INTERFACE))
438                         return -ENOTSUPP;
439
440                 if (w_length < 1)
441                         return -EINVAL;
442                 if (w_value != 0)
443                         return -EINVAL;
444                 luns = atomic_read(&fu->tpg->tpg_port_count);
445                 if (!luns) {
446                         pr_err("No LUNs configured?\n");
447                         return -EINVAL;
448                 }
449                 /*
450                  * If 4 LUNs are present we return 3 i.e. LUN 0..3 can be
451                  * accessed. The upper limit is 0xf
452                  */
453                 luns--;
454                 if (luns > 0xf) {
455                         pr_info_once("Limiting the number of luns to 16\n");
456                         luns = 0xf;
457                 }
458                 ret_lun = cdev->req->buf;
459                 *ret_lun = luns;
460                 cdev->req->length = 1;
461                 return usb_ep_queue(cdev->gadget->ep0, cdev->req, GFP_ATOMIC);
462                 break;
463
464         case US_BULK_RESET_REQUEST:
465                 /* XXX maybe we should remove previous requests for IN + OUT */
466                 bot_enqueue_cmd_cbw(fu);
467                 return 0;
468                 break;
469         }
470         return -ENOTSUPP;
471 }
472
473 /* Start uas.c code */
474
475 static void uasp_cleanup_one_stream(struct f_uas *fu, struct uas_stream *stream)
476 {
477         /* We have either all three allocated or none */
478         if (!stream->req_in)
479                 return;
480
481         usb_ep_free_request(fu->ep_in, stream->req_in);
482         usb_ep_free_request(fu->ep_out, stream->req_out);
483         usb_ep_free_request(fu->ep_status, stream->req_status);
484
485         stream->req_in = NULL;
486         stream->req_out = NULL;
487         stream->req_status = NULL;
488 }
489
490 static void uasp_free_cmdreq(struct f_uas *fu)
491 {
492         usb_ep_free_request(fu->ep_cmd, fu->cmd.req);
493         kfree(fu->cmd.buf);
494         fu->cmd.req = NULL;
495         fu->cmd.buf = NULL;
496 }
497
498 static void uasp_cleanup_old_alt(struct f_uas *fu)
499 {
500         int i;
501
502         if (!(fu->flags & USBG_ENABLED))
503                 return;
504
505         usb_ep_disable(fu->ep_in);
506         usb_ep_disable(fu->ep_out);
507         usb_ep_disable(fu->ep_status);
508         usb_ep_disable(fu->ep_cmd);
509
510         for (i = 0; i < UASP_SS_EP_COMP_NUM_STREAMS; i++)
511                 uasp_cleanup_one_stream(fu, &fu->stream[i]);
512         uasp_free_cmdreq(fu);
513 }
514
515 static void uasp_status_data_cmpl(struct usb_ep *ep, struct usb_request *req);
516
517 static int uasp_prepare_r_request(struct usbg_cmd *cmd)
518 {
519         struct se_cmd *se_cmd = &cmd->se_cmd;
520         struct f_uas *fu = cmd->fu;
521         struct usb_gadget *gadget = fuas_to_gadget(fu);
522         struct uas_stream *stream = cmd->stream;
523
524         if (!gadget->sg_supported) {
525                 cmd->data_buf = kmalloc(se_cmd->data_length, GFP_ATOMIC);
526                 if (!cmd->data_buf)
527                         return -ENOMEM;
528
529                 sg_copy_to_buffer(se_cmd->t_data_sg,
530                                 se_cmd->t_data_nents,
531                                 cmd->data_buf,
532                                 se_cmd->data_length);
533
534                 stream->req_in->buf = cmd->data_buf;
535         } else {
536                 stream->req_in->buf = NULL;
537                 stream->req_in->num_sgs = se_cmd->t_data_nents;
538                 stream->req_in->sg = se_cmd->t_data_sg;
539         }
540
541         stream->req_in->complete = uasp_status_data_cmpl;
542         stream->req_in->length = se_cmd->data_length;
543         stream->req_in->context = cmd;
544
545         cmd->state = UASP_SEND_STATUS;
546         return 0;
547 }
548
549 static void uasp_prepare_status(struct usbg_cmd *cmd)
550 {
551         struct se_cmd *se_cmd = &cmd->se_cmd;
552         struct sense_iu *iu = &cmd->sense_iu;
553         struct uas_stream *stream = cmd->stream;
554
555         cmd->state = UASP_QUEUE_COMMAND;
556         iu->iu_id = IU_ID_STATUS;
557         iu->tag = cpu_to_be16(cmd->tag);
558
559         /*
560          * iu->status_qual = cpu_to_be16(STATUS QUALIFIER SAM-4. Where R U?);
561          */
562         iu->len = cpu_to_be16(se_cmd->scsi_sense_length);
563         iu->status = se_cmd->scsi_status;
564         stream->req_status->context = cmd;
565         stream->req_status->length = se_cmd->scsi_sense_length + 16;
566         stream->req_status->buf = iu;
567         stream->req_status->complete = uasp_status_data_cmpl;
568 }
569
570 static void uasp_status_data_cmpl(struct usb_ep *ep, struct usb_request *req)
571 {
572         struct usbg_cmd *cmd = req->context;
573         struct uas_stream *stream = cmd->stream;
574         struct f_uas *fu = cmd->fu;
575         int ret;
576
577         if (req->status < 0)
578                 goto cleanup;
579
580         switch (cmd->state) {
581         case UASP_SEND_DATA:
582                 ret = uasp_prepare_r_request(cmd);
583                 if (ret)
584                         goto cleanup;
585                 ret = usb_ep_queue(fu->ep_in, stream->req_in, GFP_ATOMIC);
586                 if (ret)
587                         pr_err("%s(%d) => %d\n", __func__, __LINE__, ret);
588                 break;
589
590         case UASP_RECEIVE_DATA:
591                 ret = usbg_prepare_w_request(cmd, stream->req_out);
592                 if (ret)
593                         goto cleanup;
594                 ret = usb_ep_queue(fu->ep_out, stream->req_out, GFP_ATOMIC);
595                 if (ret)
596                         pr_err("%s(%d) => %d\n", __func__, __LINE__, ret);
597                 break;
598
599         case UASP_SEND_STATUS:
600                 uasp_prepare_status(cmd);
601                 ret = usb_ep_queue(fu->ep_status, stream->req_status,
602                                 GFP_ATOMIC);
603                 if (ret)
604                         pr_err("%s(%d) => %d\n", __func__, __LINE__, ret);
605                 break;
606
607         case UASP_QUEUE_COMMAND:
608                 usbg_cleanup_cmd(cmd);
609                 usb_ep_queue(fu->ep_cmd, fu->cmd.req, GFP_ATOMIC);
610                 break;
611
612         default:
613                 BUG();
614         }
615         return;
616
617 cleanup:
618         usbg_cleanup_cmd(cmd);
619 }
620
621 static int uasp_send_status_response(struct usbg_cmd *cmd)
622 {
623         struct f_uas *fu = cmd->fu;
624         struct uas_stream *stream = cmd->stream;
625         struct sense_iu *iu = &cmd->sense_iu;
626
627         iu->tag = cpu_to_be16(cmd->tag);
628         stream->req_status->complete = uasp_status_data_cmpl;
629         stream->req_status->context = cmd;
630         cmd->fu = fu;
631         uasp_prepare_status(cmd);
632         return usb_ep_queue(fu->ep_status, stream->req_status, GFP_ATOMIC);
633 }
634
635 static int uasp_send_read_response(struct usbg_cmd *cmd)
636 {
637         struct f_uas *fu = cmd->fu;
638         struct uas_stream *stream = cmd->stream;
639         struct sense_iu *iu = &cmd->sense_iu;
640         int ret;
641
642         cmd->fu = fu;
643
644         iu->tag = cpu_to_be16(cmd->tag);
645         if (fu->flags & USBG_USE_STREAMS) {
646
647                 ret = uasp_prepare_r_request(cmd);
648                 if (ret)
649                         goto out;
650                 ret = usb_ep_queue(fu->ep_in, stream->req_in, GFP_ATOMIC);
651                 if (ret) {
652                         pr_err("%s(%d) => %d\n", __func__, __LINE__, ret);
653                         kfree(cmd->data_buf);
654                         cmd->data_buf = NULL;
655                 }
656
657         } else {
658
659                 iu->iu_id = IU_ID_READ_READY;
660                 iu->tag = cpu_to_be16(cmd->tag);
661
662                 stream->req_status->complete = uasp_status_data_cmpl;
663                 stream->req_status->context = cmd;
664
665                 cmd->state = UASP_SEND_DATA;
666                 stream->req_status->buf = iu;
667                 stream->req_status->length = sizeof(struct iu);
668
669                 ret = usb_ep_queue(fu->ep_status, stream->req_status,
670                                 GFP_ATOMIC);
671                 if (ret)
672                         pr_err("%s(%d) => %d\n", __func__, __LINE__, ret);
673         }
674 out:
675         return ret;
676 }
677
678 static int uasp_send_write_request(struct usbg_cmd *cmd)
679 {
680         struct f_uas *fu = cmd->fu;
681         struct se_cmd *se_cmd = &cmd->se_cmd;
682         struct uas_stream *stream = cmd->stream;
683         struct sense_iu *iu = &cmd->sense_iu;
684         int ret;
685
686         init_completion(&cmd->write_complete);
687         cmd->fu = fu;
688
689         iu->tag = cpu_to_be16(cmd->tag);
690
691         if (fu->flags & USBG_USE_STREAMS) {
692
693                 ret = usbg_prepare_w_request(cmd, stream->req_out);
694                 if (ret)
695                         goto cleanup;
696                 ret = usb_ep_queue(fu->ep_out, stream->req_out, GFP_ATOMIC);
697                 if (ret)
698                         pr_err("%s(%d)\n", __func__, __LINE__);
699
700         } else {
701
702                 iu->iu_id = IU_ID_WRITE_READY;
703                 iu->tag = cpu_to_be16(cmd->tag);
704
705                 stream->req_status->complete = uasp_status_data_cmpl;
706                 stream->req_status->context = cmd;
707
708                 cmd->state = UASP_RECEIVE_DATA;
709                 stream->req_status->buf = iu;
710                 stream->req_status->length = sizeof(struct iu);
711
712                 ret = usb_ep_queue(fu->ep_status, stream->req_status,
713                                 GFP_ATOMIC);
714                 if (ret)
715                         pr_err("%s(%d)\n", __func__, __LINE__);
716         }
717
718         wait_for_completion(&cmd->write_complete);
719         target_execute_cmd(se_cmd);
720 cleanup:
721         return ret;
722 }
723
724 static int usbg_submit_command(struct f_uas *, void *, unsigned int);
725
726 static void uasp_cmd_complete(struct usb_ep *ep, struct usb_request *req)
727 {
728         struct f_uas *fu = req->context;
729         int ret;
730
731         if (req->status < 0)
732                 return;
733
734         ret = usbg_submit_command(fu, req->buf, req->actual);
735         /*
736          * Once we tune for performance enqueue the command req here again so
737          * we can receive a second command while we processing this one. Pay
738          * attention to properly sync STAUS endpoint with DATA IN + OUT so you
739          * don't break HS.
740          */
741         if (!ret)
742                 return;
743         usb_ep_queue(fu->ep_cmd, fu->cmd.req, GFP_ATOMIC);
744 }
745
746 static int uasp_alloc_stream_res(struct f_uas *fu, struct uas_stream *stream)
747 {
748         stream->req_in = usb_ep_alloc_request(fu->ep_in, GFP_KERNEL);
749         if (!stream->req_in)
750                 goto out;
751
752         stream->req_out = usb_ep_alloc_request(fu->ep_out, GFP_KERNEL);
753         if (!stream->req_out)
754                 goto err_out;
755
756         stream->req_status = usb_ep_alloc_request(fu->ep_status, GFP_KERNEL);
757         if (!stream->req_status)
758                 goto err_sts;
759
760         return 0;
761 err_sts:
762         usb_ep_free_request(fu->ep_status, stream->req_status);
763         stream->req_status = NULL;
764 err_out:
765         usb_ep_free_request(fu->ep_out, stream->req_out);
766         stream->req_out = NULL;
767 out:
768         return -ENOMEM;
769 }
770
771 static int uasp_alloc_cmd(struct f_uas *fu)
772 {
773         fu->cmd.req = usb_ep_alloc_request(fu->ep_cmd, GFP_KERNEL);
774         if (!fu->cmd.req)
775                 goto err;
776
777         fu->cmd.buf = kmalloc(fu->ep_cmd->maxpacket, GFP_KERNEL);
778         if (!fu->cmd.buf)
779                 goto err_buf;
780
781         fu->cmd.req->complete = uasp_cmd_complete;
782         fu->cmd.req->buf = fu->cmd.buf;
783         fu->cmd.req->length = fu->ep_cmd->maxpacket;
784         fu->cmd.req->context = fu;
785         return 0;
786
787 err_buf:
788         usb_ep_free_request(fu->ep_cmd, fu->cmd.req);
789 err:
790         return -ENOMEM;
791 }
792
793 static void uasp_setup_stream_res(struct f_uas *fu, int max_streams)
794 {
795         int i;
796
797         for (i = 0; i < max_streams; i++) {
798                 struct uas_stream *s = &fu->stream[i];
799
800                 s->req_in->stream_id = i + 1;
801                 s->req_out->stream_id = i + 1;
802                 s->req_status->stream_id = i + 1;
803         }
804 }
805
806 static int uasp_prepare_reqs(struct f_uas *fu)
807 {
808         int ret;
809         int i;
810         int max_streams;
811
812         if (fu->flags & USBG_USE_STREAMS)
813                 max_streams = UASP_SS_EP_COMP_NUM_STREAMS;
814         else
815                 max_streams = 1;
816
817         for (i = 0; i < max_streams; i++) {
818                 ret = uasp_alloc_stream_res(fu, &fu->stream[i]);
819                 if (ret)
820                         goto err_cleanup;
821         }
822
823         ret = uasp_alloc_cmd(fu);
824         if (ret)
825                 goto err_free_stream;
826         uasp_setup_stream_res(fu, max_streams);
827
828         ret = usb_ep_queue(fu->ep_cmd, fu->cmd.req, GFP_ATOMIC);
829         if (ret)
830                 goto err_free_stream;
831
832         return 0;
833
834 err_free_stream:
835         uasp_free_cmdreq(fu);
836
837 err_cleanup:
838         if (i) {
839                 do {
840                         uasp_cleanup_one_stream(fu, &fu->stream[i - 1]);
841                         i--;
842                 } while (i);
843         }
844         pr_err("UASP: endpoint setup failed\n");
845         return ret;
846 }
847
848 static void uasp_set_alt(struct f_uas *fu)
849 {
850         struct usb_function *f = &fu->function;
851         struct usb_gadget *gadget = f->config->cdev->gadget;
852         int ret;
853
854         fu->flags = USBG_IS_UAS;
855
856         if (gadget->speed == USB_SPEED_SUPER)
857                 fu->flags |= USBG_USE_STREAMS;
858
859         config_ep_by_speed(gadget, f, fu->ep_in);
860         ret = usb_ep_enable(fu->ep_in);
861         if (ret)
862                 goto err_b_in;
863
864         config_ep_by_speed(gadget, f, fu->ep_out);
865         ret = usb_ep_enable(fu->ep_out);
866         if (ret)
867                 goto err_b_out;
868
869         config_ep_by_speed(gadget, f, fu->ep_cmd);
870         ret = usb_ep_enable(fu->ep_cmd);
871         if (ret)
872                 goto err_cmd;
873         config_ep_by_speed(gadget, f, fu->ep_status);
874         ret = usb_ep_enable(fu->ep_status);
875         if (ret)
876                 goto err_status;
877
878         ret = uasp_prepare_reqs(fu);
879         if (ret)
880                 goto err_wq;
881         fu->flags |= USBG_ENABLED;
882
883         pr_info("Using the UAS protocol\n");
884         return;
885 err_wq:
886         usb_ep_disable(fu->ep_status);
887 err_status:
888         usb_ep_disable(fu->ep_cmd);
889 err_cmd:
890         usb_ep_disable(fu->ep_out);
891 err_b_out:
892         usb_ep_disable(fu->ep_in);
893 err_b_in:
894         fu->flags = 0;
895 }
896
897 static int get_cmd_dir(const unsigned char *cdb)
898 {
899         int ret;
900
901         switch (cdb[0]) {
902         case READ_6:
903         case READ_10:
904         case READ_12:
905         case READ_16:
906         case INQUIRY:
907         case MODE_SENSE:
908         case MODE_SENSE_10:
909         case SERVICE_ACTION_IN_16:
910         case MAINTENANCE_IN:
911         case PERSISTENT_RESERVE_IN:
912         case SECURITY_PROTOCOL_IN:
913         case ACCESS_CONTROL_IN:
914         case REPORT_LUNS:
915         case READ_BLOCK_LIMITS:
916         case READ_POSITION:
917         case READ_CAPACITY:
918         case READ_TOC:
919         case READ_FORMAT_CAPACITIES:
920         case REQUEST_SENSE:
921                 ret = DMA_FROM_DEVICE;
922                 break;
923
924         case WRITE_6:
925         case WRITE_10:
926         case WRITE_12:
927         case WRITE_16:
928         case MODE_SELECT:
929         case MODE_SELECT_10:
930         case WRITE_VERIFY:
931         case WRITE_VERIFY_12:
932         case PERSISTENT_RESERVE_OUT:
933         case MAINTENANCE_OUT:
934         case SECURITY_PROTOCOL_OUT:
935         case ACCESS_CONTROL_OUT:
936                 ret = DMA_TO_DEVICE;
937                 break;
938         case ALLOW_MEDIUM_REMOVAL:
939         case TEST_UNIT_READY:
940         case SYNCHRONIZE_CACHE:
941         case START_STOP:
942         case ERASE:
943         case REZERO_UNIT:
944         case SEEK_10:
945         case SPACE:
946         case VERIFY:
947         case WRITE_FILEMARKS:
948                 ret = DMA_NONE;
949                 break;
950         default:
951                 pr_warn("target: Unknown data direction for SCSI Opcode "
952                                 "0x%02x\n", cdb[0]);
953                 ret = -EINVAL;
954         }
955         return ret;
956 }
957
958 static void usbg_data_write_cmpl(struct usb_ep *ep, struct usb_request *req)
959 {
960         struct usbg_cmd *cmd = req->context;
961         struct se_cmd *se_cmd = &cmd->se_cmd;
962
963         if (req->status < 0) {
964                 pr_err("%s() state %d transfer failed\n", __func__, cmd->state);
965                 goto cleanup;
966         }
967
968         if (req->num_sgs == 0) {
969                 sg_copy_from_buffer(se_cmd->t_data_sg,
970                                 se_cmd->t_data_nents,
971                                 cmd->data_buf,
972                                 se_cmd->data_length);
973         }
974
975         complete(&cmd->write_complete);
976         return;
977
978 cleanup:
979         usbg_cleanup_cmd(cmd);
980 }
981
982 static int usbg_prepare_w_request(struct usbg_cmd *cmd, struct usb_request *req)
983 {
984         struct se_cmd *se_cmd = &cmd->se_cmd;
985         struct f_uas *fu = cmd->fu;
986         struct usb_gadget *gadget = fuas_to_gadget(fu);
987
988         if (!gadget->sg_supported) {
989                 cmd->data_buf = kmalloc(se_cmd->data_length, GFP_ATOMIC);
990                 if (!cmd->data_buf)
991                         return -ENOMEM;
992
993                 req->buf = cmd->data_buf;
994         } else {
995                 req->buf = NULL;
996                 req->num_sgs = se_cmd->t_data_nents;
997                 req->sg = se_cmd->t_data_sg;
998         }
999
1000         req->complete = usbg_data_write_cmpl;
1001         req->length = se_cmd->data_length;
1002         req->context = cmd;
1003         return 0;
1004 }
1005
1006 static int usbg_send_status_response(struct se_cmd *se_cmd)
1007 {
1008         struct usbg_cmd *cmd = container_of(se_cmd, struct usbg_cmd,
1009                         se_cmd);
1010         struct f_uas *fu = cmd->fu;
1011
1012         if (fu->flags & USBG_IS_BOT)
1013                 return bot_send_status_response(cmd);
1014         else
1015                 return uasp_send_status_response(cmd);
1016 }
1017
1018 static int usbg_send_write_request(struct se_cmd *se_cmd)
1019 {
1020         struct usbg_cmd *cmd = container_of(se_cmd, struct usbg_cmd,
1021                         se_cmd);
1022         struct f_uas *fu = cmd->fu;
1023
1024         if (fu->flags & USBG_IS_BOT)
1025                 return bot_send_write_request(cmd);
1026         else
1027                 return uasp_send_write_request(cmd);
1028 }
1029
1030 static int usbg_send_read_response(struct se_cmd *se_cmd)
1031 {
1032         struct usbg_cmd *cmd = container_of(se_cmd, struct usbg_cmd,
1033                         se_cmd);
1034         struct f_uas *fu = cmd->fu;
1035
1036         if (fu->flags & USBG_IS_BOT)
1037                 return bot_send_read_response(cmd);
1038         else
1039                 return uasp_send_read_response(cmd);
1040 }
1041
1042 static void usbg_cmd_work(struct work_struct *work)
1043 {
1044         struct usbg_cmd *cmd = container_of(work, struct usbg_cmd, work);
1045         struct se_cmd *se_cmd;
1046         struct tcm_usbg_nexus *tv_nexus;
1047         struct usbg_tpg *tpg;
1048         int dir;
1049
1050         se_cmd = &cmd->se_cmd;
1051         tpg = cmd->fu->tpg;
1052         tv_nexus = tpg->tpg_nexus;
1053         dir = get_cmd_dir(cmd->cmd_buf);
1054         if (dir < 0) {
1055                 transport_init_se_cmd(se_cmd,
1056                                 tv_nexus->tvn_se_sess->se_tpg->se_tpg_tfo,
1057                                 tv_nexus->tvn_se_sess, cmd->data_len, DMA_NONE,
1058                                 cmd->prio_attr, cmd->sense_iu.sense);
1059                 goto out;
1060         }
1061
1062         if (target_submit_cmd(se_cmd, tv_nexus->tvn_se_sess,
1063                         cmd->cmd_buf, cmd->sense_iu.sense, cmd->unpacked_lun,
1064                         0, cmd->prio_attr, dir, TARGET_SCF_UNKNOWN_SIZE) < 0)
1065                 goto out;
1066
1067         return;
1068
1069 out:
1070         transport_send_check_condition_and_sense(se_cmd,
1071                         TCM_UNSUPPORTED_SCSI_OPCODE, 1);
1072         usbg_cleanup_cmd(cmd);
1073 }
1074
1075 static int usbg_submit_command(struct f_uas *fu,
1076                 void *cmdbuf, unsigned int len)
1077 {
1078         struct command_iu *cmd_iu = cmdbuf;
1079         struct usbg_cmd *cmd;
1080         struct usbg_tpg *tpg;
1081         struct se_cmd *se_cmd;
1082         struct tcm_usbg_nexus *tv_nexus;
1083         u32 cmd_len;
1084         int ret;
1085
1086         if (cmd_iu->iu_id != IU_ID_COMMAND) {
1087                 pr_err("Unsupported type %d\n", cmd_iu->iu_id);
1088                 return -EINVAL;
1089         }
1090
1091         cmd = kzalloc(sizeof *cmd, GFP_ATOMIC);
1092         if (!cmd)
1093                 return -ENOMEM;
1094
1095         cmd->fu = fu;
1096
1097         /* XXX until I figure out why I can't free in on complete */
1098         kref_init(&cmd->ref);
1099         kref_get(&cmd->ref);
1100
1101         tpg = fu->tpg;
1102         cmd_len = (cmd_iu->len & ~0x3) + 16;
1103         if (cmd_len > USBG_MAX_CMD)
1104                 goto err;
1105
1106         memcpy(cmd->cmd_buf, cmd_iu->cdb, cmd_len);
1107
1108         cmd->tag = be16_to_cpup(&cmd_iu->tag);
1109         cmd->se_cmd.tag = cmd->tag;
1110         if (fu->flags & USBG_USE_STREAMS) {
1111                 if (cmd->tag > UASP_SS_EP_COMP_NUM_STREAMS)
1112                         goto err;
1113                 if (!cmd->tag)
1114                         cmd->stream = &fu->stream[0];
1115                 else
1116                         cmd->stream = &fu->stream[cmd->tag - 1];
1117         } else {
1118                 cmd->stream = &fu->stream[0];
1119         }
1120
1121         tv_nexus = tpg->tpg_nexus;
1122         if (!tv_nexus) {
1123                 pr_err("Missing nexus, ignoring command\n");
1124                 goto err;
1125         }
1126
1127         switch (cmd_iu->prio_attr & 0x7) {
1128         case UAS_HEAD_TAG:
1129                 cmd->prio_attr = TCM_HEAD_TAG;
1130                 break;
1131         case UAS_ORDERED_TAG:
1132                 cmd->prio_attr = TCM_ORDERED_TAG;
1133                 break;
1134         case UAS_ACA:
1135                 cmd->prio_attr = TCM_ACA_TAG;
1136                 break;
1137         default:
1138                 pr_debug_once("Unsupported prio_attr: %02x.\n",
1139                                 cmd_iu->prio_attr);
1140         case UAS_SIMPLE_TAG:
1141                 cmd->prio_attr = TCM_SIMPLE_TAG;
1142                 break;
1143         }
1144
1145         se_cmd = &cmd->se_cmd;
1146         cmd->unpacked_lun = scsilun_to_int(&cmd_iu->lun);
1147
1148         INIT_WORK(&cmd->work, usbg_cmd_work);
1149         ret = queue_work(tpg->workqueue, &cmd->work);
1150         if (ret < 0)
1151                 goto err;
1152
1153         return 0;
1154 err:
1155         kfree(cmd);
1156         return -EINVAL;
1157 }
1158
1159 static void bot_cmd_work(struct work_struct *work)
1160 {
1161         struct usbg_cmd *cmd = container_of(work, struct usbg_cmd, work);
1162         struct se_cmd *se_cmd;
1163         struct tcm_usbg_nexus *tv_nexus;
1164         struct usbg_tpg *tpg;
1165         int dir;
1166
1167         se_cmd = &cmd->se_cmd;
1168         tpg = cmd->fu->tpg;
1169         tv_nexus = tpg->tpg_nexus;
1170         dir = get_cmd_dir(cmd->cmd_buf);
1171         if (dir < 0) {
1172                 transport_init_se_cmd(se_cmd,
1173                                 tv_nexus->tvn_se_sess->se_tpg->se_tpg_tfo,
1174                                 tv_nexus->tvn_se_sess, cmd->data_len, DMA_NONE,
1175                                 cmd->prio_attr, cmd->sense_iu.sense);
1176                 goto out;
1177         }
1178
1179         if (target_submit_cmd(se_cmd, tv_nexus->tvn_se_sess,
1180                         cmd->cmd_buf, cmd->sense_iu.sense, cmd->unpacked_lun,
1181                         cmd->data_len, cmd->prio_attr, dir, 0) < 0)
1182                 goto out;
1183
1184         return;
1185
1186 out:
1187         transport_send_check_condition_and_sense(se_cmd,
1188                                 TCM_UNSUPPORTED_SCSI_OPCODE, 1);
1189         usbg_cleanup_cmd(cmd);
1190 }
1191
1192 static int bot_submit_command(struct f_uas *fu,
1193                 void *cmdbuf, unsigned int len)
1194 {
1195         struct bulk_cb_wrap *cbw = cmdbuf;
1196         struct usbg_cmd *cmd;
1197         struct usbg_tpg *tpg;
1198         struct se_cmd *se_cmd;
1199         struct tcm_usbg_nexus *tv_nexus;
1200         u32 cmd_len;
1201         int ret;
1202
1203         if (cbw->Signature != cpu_to_le32(US_BULK_CB_SIGN)) {
1204                 pr_err("Wrong signature on CBW\n");
1205                 return -EINVAL;
1206         }
1207         if (len != 31) {
1208                 pr_err("Wrong length for CBW\n");
1209                 return -EINVAL;
1210         }
1211
1212         cmd_len = cbw->Length;
1213         if (cmd_len < 1 || cmd_len > 16)
1214                 return -EINVAL;
1215
1216         cmd = kzalloc(sizeof *cmd, GFP_ATOMIC);
1217         if (!cmd)
1218                 return -ENOMEM;
1219
1220         cmd->fu = fu;
1221
1222         /* XXX until I figure out why I can't free in on complete */
1223         kref_init(&cmd->ref);
1224         kref_get(&cmd->ref);
1225
1226         tpg = fu->tpg;
1227
1228         memcpy(cmd->cmd_buf, cbw->CDB, cmd_len);
1229
1230         cmd->bot_tag = cbw->Tag;
1231
1232         tv_nexus = tpg->tpg_nexus;
1233         if (!tv_nexus) {
1234                 pr_err("Missing nexus, ignoring command\n");
1235                 goto err;
1236         }
1237
1238         cmd->prio_attr = TCM_SIMPLE_TAG;
1239         se_cmd = &cmd->se_cmd;
1240         cmd->unpacked_lun = cbw->Lun;
1241         cmd->is_read = cbw->Flags & US_BULK_FLAG_IN ? 1 : 0;
1242         cmd->data_len = le32_to_cpu(cbw->DataTransferLength);
1243         cmd->se_cmd.tag = le32_to_cpu(cmd->bot_tag);
1244
1245         INIT_WORK(&cmd->work, bot_cmd_work);
1246         ret = queue_work(tpg->workqueue, &cmd->work);
1247         if (ret < 0)
1248                 goto err;
1249
1250         return 0;
1251 err:
1252         kfree(cmd);
1253         return -EINVAL;
1254 }
1255
1256 /* Start fabric.c code */
1257
1258 static int usbg_check_true(struct se_portal_group *se_tpg)
1259 {
1260         return 1;
1261 }
1262
1263 static int usbg_check_false(struct se_portal_group *se_tpg)
1264 {
1265         return 0;
1266 }
1267
1268 static char *usbg_get_fabric_name(void)
1269 {
1270         return "usb_gadget";
1271 }
1272
1273 static char *usbg_get_fabric_wwn(struct se_portal_group *se_tpg)
1274 {
1275         struct usbg_tpg *tpg = container_of(se_tpg,
1276                                 struct usbg_tpg, se_tpg);
1277         struct usbg_tport *tport = tpg->tport;
1278
1279         return &tport->tport_name[0];
1280 }
1281
1282 static u16 usbg_get_tag(struct se_portal_group *se_tpg)
1283 {
1284         struct usbg_tpg *tpg = container_of(se_tpg,
1285                                 struct usbg_tpg, se_tpg);
1286         return tpg->tport_tpgt;
1287 }
1288
1289 static u32 usbg_tpg_get_inst_index(struct se_portal_group *se_tpg)
1290 {
1291         return 1;
1292 }
1293
1294 static void usbg_cmd_release(struct kref *ref)
1295 {
1296         struct usbg_cmd *cmd = container_of(ref, struct usbg_cmd,
1297                         ref);
1298
1299         transport_generic_free_cmd(&cmd->se_cmd, 0);
1300 }
1301
1302 static void usbg_release_cmd(struct se_cmd *se_cmd)
1303 {
1304         struct usbg_cmd *cmd = container_of(se_cmd, struct usbg_cmd,
1305                         se_cmd);
1306         kfree(cmd->data_buf);
1307         kfree(cmd);
1308         return;
1309 }
1310
1311 static int usbg_shutdown_session(struct se_session *se_sess)
1312 {
1313         return 0;
1314 }
1315
1316 static void usbg_close_session(struct se_session *se_sess)
1317 {
1318         return;
1319 }
1320
1321 static u32 usbg_sess_get_index(struct se_session *se_sess)
1322 {
1323         return 0;
1324 }
1325
1326 /*
1327  * XXX Error recovery: return != 0 if we expect writes. Dunno when that could be
1328  */
1329 static int usbg_write_pending_status(struct se_cmd *se_cmd)
1330 {
1331         return 0;
1332 }
1333
1334 static void usbg_set_default_node_attrs(struct se_node_acl *nacl)
1335 {
1336         return;
1337 }
1338
1339 static int usbg_get_cmd_state(struct se_cmd *se_cmd)
1340 {
1341         return 0;
1342 }
1343
1344 static void usbg_queue_tm_rsp(struct se_cmd *se_cmd)
1345 {
1346 }
1347
1348 static void usbg_aborted_task(struct se_cmd *se_cmd)
1349 {
1350         return;
1351 }
1352
1353 static const char *usbg_check_wwn(const char *name)
1354 {
1355         const char *n;
1356         unsigned int len;
1357
1358         n = strstr(name, "naa.");
1359         if (!n)
1360                 return NULL;
1361         n += 4;
1362         len = strlen(n);
1363         if (len == 0 || len > USBG_NAMELEN - 1)
1364                 return NULL;
1365         return n;
1366 }
1367
1368 static int usbg_init_nodeacl(struct se_node_acl *se_nacl, const char *name)
1369 {
1370         if (!usbg_check_wwn(name))
1371                 return -EINVAL;
1372         return 0;
1373 }
1374
1375 struct usbg_tpg *the_only_tpg_I_currently_have;
1376
1377 static struct se_portal_group *usbg_make_tpg(
1378         struct se_wwn *wwn,
1379         struct config_group *group,
1380         const char *name)
1381 {
1382         struct usbg_tport *tport = container_of(wwn, struct usbg_tport,
1383                         tport_wwn);
1384         struct usbg_tpg *tpg;
1385         unsigned long tpgt;
1386         int ret;
1387
1388         if (strstr(name, "tpgt_") != name)
1389                 return ERR_PTR(-EINVAL);
1390         if (kstrtoul(name + 5, 0, &tpgt) || tpgt > UINT_MAX)
1391                 return ERR_PTR(-EINVAL);
1392         if (the_only_tpg_I_currently_have) {
1393                 pr_err("Until the gadget framework can't handle multiple\n");
1394                 pr_err("gadgets, you can't do this here.\n");
1395                 return ERR_PTR(-EBUSY);
1396         }
1397
1398         tpg = kzalloc(sizeof(struct usbg_tpg), GFP_KERNEL);
1399         if (!tpg)
1400                 return ERR_PTR(-ENOMEM);
1401         mutex_init(&tpg->tpg_mutex);
1402         atomic_set(&tpg->tpg_port_count, 0);
1403         tpg->workqueue = alloc_workqueue("tcm_usb_gadget", 0, 1);
1404         if (!tpg->workqueue) {
1405                 kfree(tpg);
1406                 return NULL;
1407         }
1408
1409         tpg->tport = tport;
1410         tpg->tport_tpgt = tpgt;
1411
1412         /*
1413          * SPC doesn't assign a protocol identifier for USB-SCSI, so we
1414          * pretend to be SAS..
1415          */
1416         ret = core_tpg_register(wwn, &tpg->se_tpg, SCSI_PROTOCOL_SAS);
1417         if (ret < 0) {
1418                 destroy_workqueue(tpg->workqueue);
1419                 kfree(tpg);
1420                 return NULL;
1421         }
1422         the_only_tpg_I_currently_have = tpg;
1423         return &tpg->se_tpg;
1424 }
1425
1426 static void usbg_drop_tpg(struct se_portal_group *se_tpg)
1427 {
1428         struct usbg_tpg *tpg = container_of(se_tpg,
1429                                 struct usbg_tpg, se_tpg);
1430
1431         core_tpg_deregister(se_tpg);
1432         destroy_workqueue(tpg->workqueue);
1433         kfree(tpg);
1434         the_only_tpg_I_currently_have = NULL;
1435 }
1436
1437 static struct se_wwn *usbg_make_tport(
1438         struct target_fabric_configfs *tf,
1439         struct config_group *group,
1440         const char *name)
1441 {
1442         struct usbg_tport *tport;
1443         const char *wnn_name;
1444         u64 wwpn = 0;
1445
1446         wnn_name = usbg_check_wwn(name);
1447         if (!wnn_name)
1448                 return ERR_PTR(-EINVAL);
1449
1450         tport = kzalloc(sizeof(struct usbg_tport), GFP_KERNEL);
1451         if (!(tport))
1452                 return ERR_PTR(-ENOMEM);
1453         tport->tport_wwpn = wwpn;
1454         snprintf(tport->tport_name, sizeof(tport->tport_name), "%s", wnn_name);
1455         return &tport->tport_wwn;
1456 }
1457
1458 static void usbg_drop_tport(struct se_wwn *wwn)
1459 {
1460         struct usbg_tport *tport = container_of(wwn,
1461                                 struct usbg_tport, tport_wwn);
1462         kfree(tport);
1463 }
1464
1465 /*
1466  * If somebody feels like dropping the version property, go ahead.
1467  */
1468 static ssize_t usbg_wwn_version_show(struct config_item *item, char *page)
1469 {
1470         return sprintf(page, "usb-gadget fabric module\n");
1471 }
1472
1473 CONFIGFS_ATTR_RO(usbg_wwn_, version);
1474
1475 static struct configfs_attribute *usbg_wwn_attrs[] = {
1476         &usbg_wwn_attr_version,
1477         NULL,
1478 };
1479
1480 static ssize_t tcm_usbg_tpg_enable_show(struct config_item *item, char *page)
1481 {
1482         struct se_portal_group *se_tpg = to_tpg(item);
1483         struct usbg_tpg  *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
1484
1485         return snprintf(page, PAGE_SIZE, "%u\n", tpg->gadget_connect);
1486 }
1487
1488 static int usbg_attach(struct usbg_tpg *);
1489 static void usbg_detach(struct usbg_tpg *);
1490
1491 static ssize_t tcm_usbg_tpg_enable_store(struct config_item *item,
1492                 const char *page, size_t count)
1493 {
1494         struct se_portal_group *se_tpg = to_tpg(item);
1495         struct usbg_tpg  *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
1496         unsigned long op;
1497         ssize_t ret;
1498
1499         ret = kstrtoul(page, 0, &op);
1500         if (ret < 0)
1501                 return -EINVAL;
1502         if (op > 1)
1503                 return -EINVAL;
1504
1505         if (op && tpg->gadget_connect)
1506                 goto out;
1507         if (!op && !tpg->gadget_connect)
1508                 goto out;
1509
1510         if (op) {
1511                 ret = usbg_attach(tpg);
1512                 if (ret)
1513                         goto out;
1514         } else {
1515                 usbg_detach(tpg);
1516         }
1517         tpg->gadget_connect = op;
1518 out:
1519         return count;
1520 }
1521
1522 static ssize_t tcm_usbg_tpg_nexus_show(struct config_item *item, char *page)
1523 {
1524         struct se_portal_group *se_tpg = to_tpg(item);
1525         struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
1526         struct tcm_usbg_nexus *tv_nexus;
1527         ssize_t ret;
1528
1529         mutex_lock(&tpg->tpg_mutex);
1530         tv_nexus = tpg->tpg_nexus;
1531         if (!tv_nexus) {
1532                 ret = -ENODEV;
1533                 goto out;
1534         }
1535         ret = snprintf(page, PAGE_SIZE, "%s\n",
1536                         tv_nexus->tvn_se_sess->se_node_acl->initiatorname);
1537 out:
1538         mutex_unlock(&tpg->tpg_mutex);
1539         return ret;
1540 }
1541
1542 static int tcm_usbg_make_nexus(struct usbg_tpg *tpg, char *name)
1543 {
1544         struct se_portal_group *se_tpg;
1545         struct tcm_usbg_nexus *tv_nexus;
1546         int ret;
1547
1548         mutex_lock(&tpg->tpg_mutex);
1549         if (tpg->tpg_nexus) {
1550                 ret = -EEXIST;
1551                 pr_debug("tpg->tpg_nexus already exists\n");
1552                 goto err_unlock;
1553         }
1554         se_tpg = &tpg->se_tpg;
1555
1556         ret = -ENOMEM;
1557         tv_nexus = kzalloc(sizeof(*tv_nexus), GFP_KERNEL);
1558         if (!tv_nexus)
1559                 goto err_unlock;
1560         tv_nexus->tvn_se_sess = transport_init_session(TARGET_PROT_NORMAL);
1561         if (IS_ERR(tv_nexus->tvn_se_sess))
1562                 goto err_free;
1563
1564         /*
1565          * Since we are running in 'demo mode' this call with generate a
1566          * struct se_node_acl for the tcm_vhost struct se_portal_group with
1567          * the SCSI Initiator port name of the passed configfs group 'name'.
1568          */
1569         tv_nexus->tvn_se_sess->se_node_acl = core_tpg_check_initiator_node_acl(
1570                         se_tpg, name);
1571         if (!tv_nexus->tvn_se_sess->se_node_acl) {
1572                 pr_debug("core_tpg_check_initiator_node_acl() failed"
1573                                 " for %s\n", name);
1574                 goto err_session;
1575         }
1576         /*
1577          * Now register the TCM vHost virtual I_T Nexus as active.
1578          */
1579         transport_register_session(se_tpg, tv_nexus->tvn_se_sess->se_node_acl,
1580                         tv_nexus->tvn_se_sess, tv_nexus);
1581         tpg->tpg_nexus = tv_nexus;
1582         mutex_unlock(&tpg->tpg_mutex);
1583         return 0;
1584
1585 err_session:
1586         transport_free_session(tv_nexus->tvn_se_sess);
1587 err_free:
1588         kfree(tv_nexus);
1589 err_unlock:
1590         mutex_unlock(&tpg->tpg_mutex);
1591         return ret;
1592 }
1593
1594 static int tcm_usbg_drop_nexus(struct usbg_tpg *tpg)
1595 {
1596         struct se_session *se_sess;
1597         struct tcm_usbg_nexus *tv_nexus;
1598         int ret = -ENODEV;
1599
1600         mutex_lock(&tpg->tpg_mutex);
1601         tv_nexus = tpg->tpg_nexus;
1602         if (!tv_nexus)
1603                 goto out;
1604
1605         se_sess = tv_nexus->tvn_se_sess;
1606         if (!se_sess)
1607                 goto out;
1608
1609         if (atomic_read(&tpg->tpg_port_count)) {
1610                 ret = -EPERM;
1611                 pr_err("Unable to remove Host I_T Nexus with"
1612                                 " active TPG port count: %d\n",
1613                                 atomic_read(&tpg->tpg_port_count));
1614                 goto out;
1615         }
1616
1617         pr_debug("Removing I_T Nexus to Initiator Port: %s\n",
1618                         tv_nexus->tvn_se_sess->se_node_acl->initiatorname);
1619         /*
1620          * Release the SCSI I_T Nexus to the emulated vHost Target Port
1621          */
1622         transport_deregister_session(tv_nexus->tvn_se_sess);
1623         tpg->tpg_nexus = NULL;
1624
1625         kfree(tv_nexus);
1626         ret = 0;
1627 out:
1628         mutex_unlock(&tpg->tpg_mutex);
1629         return ret;
1630 }
1631
1632 static ssize_t tcm_usbg_tpg_nexus_store(struct config_item *item,
1633                 const char *page, size_t count)
1634 {
1635         struct se_portal_group *se_tpg = to_tpg(item);
1636         struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
1637         unsigned char i_port[USBG_NAMELEN], *ptr;
1638         int ret;
1639
1640         if (!strncmp(page, "NULL", 4)) {
1641                 ret = tcm_usbg_drop_nexus(tpg);
1642                 return (!ret) ? count : ret;
1643         }
1644         if (strlen(page) >= USBG_NAMELEN) {
1645                 pr_err("Emulated NAA Sas Address: %s, exceeds"
1646                                 " max: %d\n", page, USBG_NAMELEN);
1647                 return -EINVAL;
1648         }
1649         snprintf(i_port, USBG_NAMELEN, "%s", page);
1650
1651         ptr = strstr(i_port, "naa.");
1652         if (!ptr) {
1653                 pr_err("Missing 'naa.' prefix\n");
1654                 return -EINVAL;
1655         }
1656
1657         if (i_port[strlen(i_port) - 1] == '\n')
1658                 i_port[strlen(i_port) - 1] = '\0';
1659
1660         ret = tcm_usbg_make_nexus(tpg, &i_port[4]);
1661         if (ret < 0)
1662                 return ret;
1663         return count;
1664 }
1665
1666 CONFIGFS_ATTR(tcm_usbg_tpg_, enable);
1667 CONFIGFS_ATTR(tcm_usbg_tpg_, nexus);
1668
1669 static struct configfs_attribute *usbg_base_attrs[] = {
1670         &tcm_usbg_tpg_attr_enable,
1671         &tcm_usbg_tpg_attr_nexus,
1672         NULL,
1673 };
1674
1675 static int usbg_port_link(struct se_portal_group *se_tpg, struct se_lun *lun)
1676 {
1677         struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
1678
1679         atomic_inc(&tpg->tpg_port_count);
1680         smp_mb__after_atomic();
1681         return 0;
1682 }
1683
1684 static void usbg_port_unlink(struct se_portal_group *se_tpg,
1685                 struct se_lun *se_lun)
1686 {
1687         struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
1688
1689         atomic_dec(&tpg->tpg_port_count);
1690         smp_mb__after_atomic();
1691 }
1692
1693 static int usbg_check_stop_free(struct se_cmd *se_cmd)
1694 {
1695         struct usbg_cmd *cmd = container_of(se_cmd, struct usbg_cmd,
1696                         se_cmd);
1697
1698         kref_put(&cmd->ref, usbg_cmd_release);
1699         return 1;
1700 }
1701
1702 static const struct target_core_fabric_ops usbg_ops = {
1703         .module                         = THIS_MODULE,
1704         .name                           = "usb_gadget",
1705         .get_fabric_name                = usbg_get_fabric_name,
1706         .tpg_get_wwn                    = usbg_get_fabric_wwn,
1707         .tpg_get_tag                    = usbg_get_tag,
1708         .tpg_check_demo_mode            = usbg_check_true,
1709         .tpg_check_demo_mode_cache      = usbg_check_false,
1710         .tpg_check_demo_mode_write_protect = usbg_check_false,
1711         .tpg_check_prod_mode_write_protect = usbg_check_false,
1712         .tpg_get_inst_index             = usbg_tpg_get_inst_index,
1713         .release_cmd                    = usbg_release_cmd,
1714         .shutdown_session               = usbg_shutdown_session,
1715         .close_session                  = usbg_close_session,
1716         .sess_get_index                 = usbg_sess_get_index,
1717         .sess_get_initiator_sid         = NULL,
1718         .write_pending                  = usbg_send_write_request,
1719         .write_pending_status           = usbg_write_pending_status,
1720         .set_default_node_attributes    = usbg_set_default_node_attrs,
1721         .get_cmd_state                  = usbg_get_cmd_state,
1722         .queue_data_in                  = usbg_send_read_response,
1723         .queue_status                   = usbg_send_status_response,
1724         .queue_tm_rsp                   = usbg_queue_tm_rsp,
1725         .aborted_task                   = usbg_aborted_task,
1726         .check_stop_free                = usbg_check_stop_free,
1727
1728         .fabric_make_wwn                = usbg_make_tport,
1729         .fabric_drop_wwn                = usbg_drop_tport,
1730         .fabric_make_tpg                = usbg_make_tpg,
1731         .fabric_drop_tpg                = usbg_drop_tpg,
1732         .fabric_post_link               = usbg_port_link,
1733         .fabric_pre_unlink              = usbg_port_unlink,
1734         .fabric_init_nodeacl            = usbg_init_nodeacl,
1735
1736         .tfc_wwn_attrs                  = usbg_wwn_attrs,
1737         .tfc_tpg_base_attrs             = usbg_base_attrs,
1738 };
1739
1740 /* Start gadget.c code */
1741
1742 static struct usb_interface_descriptor bot_intf_desc = {
1743         .bLength =              sizeof(bot_intf_desc),
1744         .bDescriptorType =      USB_DT_INTERFACE,
1745         .bNumEndpoints =        2,
1746         .bAlternateSetting =    USB_G_ALT_INT_BBB,
1747         .bInterfaceClass =      USB_CLASS_MASS_STORAGE,
1748         .bInterfaceSubClass =   USB_SC_SCSI,
1749         .bInterfaceProtocol =   USB_PR_BULK,
1750 };
1751
1752 static struct usb_interface_descriptor uasp_intf_desc = {
1753         .bLength =              sizeof(uasp_intf_desc),
1754         .bDescriptorType =      USB_DT_INTERFACE,
1755         .bNumEndpoints =        4,
1756         .bAlternateSetting =    USB_G_ALT_INT_UAS,
1757         .bInterfaceClass =      USB_CLASS_MASS_STORAGE,
1758         .bInterfaceSubClass =   USB_SC_SCSI,
1759         .bInterfaceProtocol =   USB_PR_UAS,
1760 };
1761
1762 static struct usb_endpoint_descriptor uasp_bi_desc = {
1763         .bLength =              USB_DT_ENDPOINT_SIZE,
1764         .bDescriptorType =      USB_DT_ENDPOINT,
1765         .bEndpointAddress =     USB_DIR_IN,
1766         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1767         .wMaxPacketSize =       cpu_to_le16(512),
1768 };
1769
1770 static struct usb_endpoint_descriptor uasp_fs_bi_desc = {
1771         .bLength =              USB_DT_ENDPOINT_SIZE,
1772         .bDescriptorType =      USB_DT_ENDPOINT,
1773         .bEndpointAddress =     USB_DIR_IN,
1774         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1775 };
1776
1777 static struct usb_pipe_usage_descriptor uasp_bi_pipe_desc = {
1778         .bLength =              sizeof(uasp_bi_pipe_desc),
1779         .bDescriptorType =      USB_DT_PIPE_USAGE,
1780         .bPipeID =              DATA_IN_PIPE_ID,
1781 };
1782
1783 static struct usb_endpoint_descriptor uasp_ss_bi_desc = {
1784         .bLength =              USB_DT_ENDPOINT_SIZE,
1785         .bDescriptorType =      USB_DT_ENDPOINT,
1786         .bEndpointAddress =     USB_DIR_IN,
1787         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1788         .wMaxPacketSize =       cpu_to_le16(1024),
1789 };
1790
1791 static struct usb_ss_ep_comp_descriptor uasp_bi_ep_comp_desc = {
1792         .bLength =              sizeof(uasp_bi_ep_comp_desc),
1793         .bDescriptorType =      USB_DT_SS_ENDPOINT_COMP,
1794         .bMaxBurst =            0,
1795         .bmAttributes =         UASP_SS_EP_COMP_LOG_STREAMS,
1796         .wBytesPerInterval =    0,
1797 };
1798
1799 static struct usb_ss_ep_comp_descriptor bot_bi_ep_comp_desc = {
1800         .bLength =              sizeof(bot_bi_ep_comp_desc),
1801         .bDescriptorType =      USB_DT_SS_ENDPOINT_COMP,
1802         .bMaxBurst =            0,
1803 };
1804
1805 static struct usb_endpoint_descriptor uasp_bo_desc = {
1806         .bLength =              USB_DT_ENDPOINT_SIZE,
1807         .bDescriptorType =      USB_DT_ENDPOINT,
1808         .bEndpointAddress =     USB_DIR_OUT,
1809         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1810         .wMaxPacketSize =       cpu_to_le16(512),
1811 };
1812
1813 static struct usb_endpoint_descriptor uasp_fs_bo_desc = {
1814         .bLength =              USB_DT_ENDPOINT_SIZE,
1815         .bDescriptorType =      USB_DT_ENDPOINT,
1816         .bEndpointAddress =     USB_DIR_OUT,
1817         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1818 };
1819
1820 static struct usb_pipe_usage_descriptor uasp_bo_pipe_desc = {
1821         .bLength =              sizeof(uasp_bo_pipe_desc),
1822         .bDescriptorType =      USB_DT_PIPE_USAGE,
1823         .bPipeID =              DATA_OUT_PIPE_ID,
1824 };
1825
1826 static struct usb_endpoint_descriptor uasp_ss_bo_desc = {
1827         .bLength =              USB_DT_ENDPOINT_SIZE,
1828         .bDescriptorType =      USB_DT_ENDPOINT,
1829         .bEndpointAddress =     USB_DIR_OUT,
1830         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1831         .wMaxPacketSize =       cpu_to_le16(0x400),
1832 };
1833
1834 static struct usb_ss_ep_comp_descriptor uasp_bo_ep_comp_desc = {
1835         .bLength =              sizeof(uasp_bo_ep_comp_desc),
1836         .bDescriptorType =      USB_DT_SS_ENDPOINT_COMP,
1837         .bmAttributes =         UASP_SS_EP_COMP_LOG_STREAMS,
1838 };
1839
1840 static struct usb_ss_ep_comp_descriptor bot_bo_ep_comp_desc = {
1841         .bLength =              sizeof(bot_bo_ep_comp_desc),
1842         .bDescriptorType =      USB_DT_SS_ENDPOINT_COMP,
1843 };
1844
1845 static struct usb_endpoint_descriptor uasp_status_desc = {
1846         .bLength =              USB_DT_ENDPOINT_SIZE,
1847         .bDescriptorType =      USB_DT_ENDPOINT,
1848         .bEndpointAddress =     USB_DIR_IN,
1849         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1850         .wMaxPacketSize =       cpu_to_le16(512),
1851 };
1852
1853 static struct usb_endpoint_descriptor uasp_fs_status_desc = {
1854         .bLength =              USB_DT_ENDPOINT_SIZE,
1855         .bDescriptorType =      USB_DT_ENDPOINT,
1856         .bEndpointAddress =     USB_DIR_IN,
1857         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1858 };
1859
1860 static struct usb_pipe_usage_descriptor uasp_status_pipe_desc = {
1861         .bLength =              sizeof(uasp_status_pipe_desc),
1862         .bDescriptorType =      USB_DT_PIPE_USAGE,
1863         .bPipeID =              STATUS_PIPE_ID,
1864 };
1865
1866 static struct usb_endpoint_descriptor uasp_ss_status_desc = {
1867         .bLength =              USB_DT_ENDPOINT_SIZE,
1868         .bDescriptorType =      USB_DT_ENDPOINT,
1869         .bEndpointAddress =     USB_DIR_IN,
1870         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1871         .wMaxPacketSize =       cpu_to_le16(1024),
1872 };
1873
1874 static struct usb_ss_ep_comp_descriptor uasp_status_in_ep_comp_desc = {
1875         .bLength =              sizeof(uasp_status_in_ep_comp_desc),
1876         .bDescriptorType =      USB_DT_SS_ENDPOINT_COMP,
1877         .bmAttributes =         UASP_SS_EP_COMP_LOG_STREAMS,
1878 };
1879
1880 static struct usb_endpoint_descriptor uasp_cmd_desc = {
1881         .bLength =              USB_DT_ENDPOINT_SIZE,
1882         .bDescriptorType =      USB_DT_ENDPOINT,
1883         .bEndpointAddress =     USB_DIR_OUT,
1884         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1885         .wMaxPacketSize =       cpu_to_le16(512),
1886 };
1887
1888 static struct usb_endpoint_descriptor uasp_fs_cmd_desc = {
1889         .bLength =              USB_DT_ENDPOINT_SIZE,
1890         .bDescriptorType =      USB_DT_ENDPOINT,
1891         .bEndpointAddress =     USB_DIR_OUT,
1892         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1893 };
1894
1895 static struct usb_pipe_usage_descriptor uasp_cmd_pipe_desc = {
1896         .bLength =              sizeof(uasp_cmd_pipe_desc),
1897         .bDescriptorType =      USB_DT_PIPE_USAGE,
1898         .bPipeID =              CMD_PIPE_ID,
1899 };
1900
1901 static struct usb_endpoint_descriptor uasp_ss_cmd_desc = {
1902         .bLength =              USB_DT_ENDPOINT_SIZE,
1903         .bDescriptorType =      USB_DT_ENDPOINT,
1904         .bEndpointAddress =     USB_DIR_OUT,
1905         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1906         .wMaxPacketSize =       cpu_to_le16(1024),
1907 };
1908
1909 static struct usb_ss_ep_comp_descriptor uasp_cmd_comp_desc = {
1910         .bLength =              sizeof(uasp_cmd_comp_desc),
1911         .bDescriptorType =      USB_DT_SS_ENDPOINT_COMP,
1912 };
1913
1914 static struct usb_descriptor_header *uasp_fs_function_desc[] = {
1915         (struct usb_descriptor_header *) &bot_intf_desc,
1916         (struct usb_descriptor_header *) &uasp_fs_bi_desc,
1917         (struct usb_descriptor_header *) &uasp_fs_bo_desc,
1918
1919         (struct usb_descriptor_header *) &uasp_intf_desc,
1920         (struct usb_descriptor_header *) &uasp_fs_bi_desc,
1921         (struct usb_descriptor_header *) &uasp_bi_pipe_desc,
1922         (struct usb_descriptor_header *) &uasp_fs_bo_desc,
1923         (struct usb_descriptor_header *) &uasp_bo_pipe_desc,
1924         (struct usb_descriptor_header *) &uasp_fs_status_desc,
1925         (struct usb_descriptor_header *) &uasp_status_pipe_desc,
1926         (struct usb_descriptor_header *) &uasp_fs_cmd_desc,
1927         (struct usb_descriptor_header *) &uasp_cmd_pipe_desc,
1928         NULL,
1929 };
1930
1931 static struct usb_descriptor_header *uasp_hs_function_desc[] = {
1932         (struct usb_descriptor_header *) &bot_intf_desc,
1933         (struct usb_descriptor_header *) &uasp_bi_desc,
1934         (struct usb_descriptor_header *) &uasp_bo_desc,
1935
1936         (struct usb_descriptor_header *) &uasp_intf_desc,
1937         (struct usb_descriptor_header *) &uasp_bi_desc,
1938         (struct usb_descriptor_header *) &uasp_bi_pipe_desc,
1939         (struct usb_descriptor_header *) &uasp_bo_desc,
1940         (struct usb_descriptor_header *) &uasp_bo_pipe_desc,
1941         (struct usb_descriptor_header *) &uasp_status_desc,
1942         (struct usb_descriptor_header *) &uasp_status_pipe_desc,
1943         (struct usb_descriptor_header *) &uasp_cmd_desc,
1944         (struct usb_descriptor_header *) &uasp_cmd_pipe_desc,
1945         NULL,
1946 };
1947
1948 static struct usb_descriptor_header *uasp_ss_function_desc[] = {
1949         (struct usb_descriptor_header *) &bot_intf_desc,
1950         (struct usb_descriptor_header *) &uasp_ss_bi_desc,
1951         (struct usb_descriptor_header *) &bot_bi_ep_comp_desc,
1952         (struct usb_descriptor_header *) &uasp_ss_bo_desc,
1953         (struct usb_descriptor_header *) &bot_bo_ep_comp_desc,
1954
1955         (struct usb_descriptor_header *) &uasp_intf_desc,
1956         (struct usb_descriptor_header *) &uasp_ss_bi_desc,
1957         (struct usb_descriptor_header *) &uasp_bi_ep_comp_desc,
1958         (struct usb_descriptor_header *) &uasp_bi_pipe_desc,
1959         (struct usb_descriptor_header *) &uasp_ss_bo_desc,
1960         (struct usb_descriptor_header *) &uasp_bo_ep_comp_desc,
1961         (struct usb_descriptor_header *) &uasp_bo_pipe_desc,
1962         (struct usb_descriptor_header *) &uasp_ss_status_desc,
1963         (struct usb_descriptor_header *) &uasp_status_in_ep_comp_desc,
1964         (struct usb_descriptor_header *) &uasp_status_pipe_desc,
1965         (struct usb_descriptor_header *) &uasp_ss_cmd_desc,
1966         (struct usb_descriptor_header *) &uasp_cmd_comp_desc,
1967         (struct usb_descriptor_header *) &uasp_cmd_pipe_desc,
1968         NULL,
1969 };
1970
1971 #define UAS_VENDOR_ID   0x0525  /* NetChip */
1972 #define UAS_PRODUCT_ID  0xa4a5  /* Linux-USB File-backed Storage Gadget */
1973
1974 static struct usb_device_descriptor usbg_device_desc = {
1975         .bLength =              sizeof(usbg_device_desc),
1976         .bDescriptorType =      USB_DT_DEVICE,
1977         .bcdUSB =               cpu_to_le16(0x0200),
1978         .bDeviceClass =         USB_CLASS_PER_INTERFACE,
1979         .idVendor =             cpu_to_le16(UAS_VENDOR_ID),
1980         .idProduct =            cpu_to_le16(UAS_PRODUCT_ID),
1981         .bNumConfigurations =   1,
1982 };
1983
1984 static struct usb_string        usbg_us_strings[] = {
1985         [USB_GADGET_MANUFACTURER_IDX].s = "Target Manufactor",
1986         [USB_GADGET_PRODUCT_IDX].s      = "Target Product",
1987         [USB_GADGET_SERIAL_IDX].s       = "000000000001",
1988         [USB_G_STR_CONFIG].s            = "default config",
1989         [USB_G_STR_INT_UAS].s           = "USB Attached SCSI",
1990         [USB_G_STR_INT_BBB].s           = "Bulk Only Transport",
1991         { },
1992 };
1993
1994 static struct usb_gadget_strings usbg_stringtab = {
1995         .language = 0x0409,
1996         .strings = usbg_us_strings,
1997 };
1998
1999 static struct usb_gadget_strings *usbg_strings[] = {
2000         &usbg_stringtab,
2001         NULL,
2002 };
2003
2004 static int guas_unbind(struct usb_composite_dev *cdev)
2005 {
2006         return 0;
2007 }
2008
2009 static struct usb_configuration usbg_config_driver = {
2010         .label                  = "Linux Target",
2011         .bConfigurationValue    = 1,
2012         .bmAttributes           = USB_CONFIG_ATT_SELFPOWER,
2013 };
2014
2015 static int usbg_bind(struct usb_configuration *c, struct usb_function *f)
2016 {
2017         struct f_uas            *fu = to_f_uas(f);
2018         struct usb_gadget       *gadget = c->cdev->gadget;
2019         struct usb_ep           *ep;
2020         int                     iface;
2021         int                     ret;
2022
2023         iface = usb_interface_id(c, f);
2024         if (iface < 0)
2025                 return iface;
2026
2027         bot_intf_desc.bInterfaceNumber = iface;
2028         uasp_intf_desc.bInterfaceNumber = iface;
2029         fu->iface = iface;
2030         ep = usb_ep_autoconfig_ss(gadget, &uasp_ss_bi_desc,
2031                         &uasp_bi_ep_comp_desc);
2032         if (!ep)
2033                 goto ep_fail;
2034         fu->ep_in = ep;
2035
2036         ep = usb_ep_autoconfig_ss(gadget, &uasp_ss_bo_desc,
2037                         &uasp_bo_ep_comp_desc);
2038         if (!ep)
2039                 goto ep_fail;
2040         fu->ep_out = ep;
2041
2042         ep = usb_ep_autoconfig_ss(gadget, &uasp_ss_status_desc,
2043                         &uasp_status_in_ep_comp_desc);
2044         if (!ep)
2045                 goto ep_fail;
2046         fu->ep_status = ep;
2047
2048         ep = usb_ep_autoconfig_ss(gadget, &uasp_ss_cmd_desc,
2049                         &uasp_cmd_comp_desc);
2050         if (!ep)
2051                 goto ep_fail;
2052         fu->ep_cmd = ep;
2053
2054         /* Assume endpoint addresses are the same for both speeds */
2055         uasp_bi_desc.bEndpointAddress = uasp_ss_bi_desc.bEndpointAddress;
2056         uasp_bo_desc.bEndpointAddress = uasp_ss_bo_desc.bEndpointAddress;
2057         uasp_status_desc.bEndpointAddress =
2058                 uasp_ss_status_desc.bEndpointAddress;
2059         uasp_cmd_desc.bEndpointAddress = uasp_ss_cmd_desc.bEndpointAddress;
2060
2061         uasp_fs_bi_desc.bEndpointAddress = uasp_ss_bi_desc.bEndpointAddress;
2062         uasp_fs_bo_desc.bEndpointAddress = uasp_ss_bo_desc.bEndpointAddress;
2063         uasp_fs_status_desc.bEndpointAddress =
2064                 uasp_ss_status_desc.bEndpointAddress;
2065         uasp_fs_cmd_desc.bEndpointAddress = uasp_ss_cmd_desc.bEndpointAddress;
2066
2067         ret = usb_assign_descriptors(f, uasp_fs_function_desc,
2068                         uasp_hs_function_desc, uasp_ss_function_desc);
2069         if (ret)
2070                 goto ep_fail;
2071
2072         return 0;
2073 ep_fail:
2074         pr_err("Can't claim all required eps\n");
2075         return -ENOTSUPP;
2076 }
2077
2078 static void usbg_unbind(struct usb_configuration *c, struct usb_function *f)
2079 {
2080         struct f_uas *fu = to_f_uas(f);
2081
2082         usb_free_all_descriptors(f);
2083         kfree(fu);
2084 }
2085
2086 struct guas_setup_wq {
2087         struct work_struct work;
2088         struct f_uas *fu;
2089         unsigned int alt;
2090 };
2091
2092 static void usbg_delayed_set_alt(struct work_struct *wq)
2093 {
2094         struct guas_setup_wq *work = container_of(wq, struct guas_setup_wq,
2095                         work);
2096         struct f_uas *fu = work->fu;
2097         int alt = work->alt;
2098
2099         kfree(work);
2100
2101         if (fu->flags & USBG_IS_BOT)
2102                 bot_cleanup_old_alt(fu);
2103         if (fu->flags & USBG_IS_UAS)
2104                 uasp_cleanup_old_alt(fu);
2105
2106         if (alt == USB_G_ALT_INT_BBB)
2107                 bot_set_alt(fu);
2108         else if (alt == USB_G_ALT_INT_UAS)
2109                 uasp_set_alt(fu);
2110         usb_composite_setup_continue(fu->function.config->cdev);
2111 }
2112
2113 static int usbg_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
2114 {
2115         struct f_uas *fu = to_f_uas(f);
2116
2117         if ((alt == USB_G_ALT_INT_BBB) || (alt == USB_G_ALT_INT_UAS)) {
2118                 struct guas_setup_wq *work;
2119
2120                 work = kmalloc(sizeof(*work), GFP_ATOMIC);
2121                 if (!work)
2122                         return -ENOMEM;
2123                 INIT_WORK(&work->work, usbg_delayed_set_alt);
2124                 work->fu = fu;
2125                 work->alt = alt;
2126                 schedule_work(&work->work);
2127                 return USB_GADGET_DELAYED_STATUS;
2128         }
2129         return -EOPNOTSUPP;
2130 }
2131
2132 static void usbg_disable(struct usb_function *f)
2133 {
2134         struct f_uas *fu = to_f_uas(f);
2135
2136         if (fu->flags & USBG_IS_UAS)
2137                 uasp_cleanup_old_alt(fu);
2138         else if (fu->flags & USBG_IS_BOT)
2139                 bot_cleanup_old_alt(fu);
2140         fu->flags = 0;
2141 }
2142
2143 static int usbg_setup(struct usb_function *f,
2144                 const struct usb_ctrlrequest *ctrl)
2145 {
2146         struct f_uas *fu = to_f_uas(f);
2147
2148         if (!(fu->flags & USBG_IS_BOT))
2149                 return -EOPNOTSUPP;
2150
2151         return usbg_bot_setup(f, ctrl);
2152 }
2153
2154 static int usbg_cfg_bind(struct usb_configuration *c)
2155 {
2156         struct f_uas *fu;
2157         int ret;
2158
2159         fu = kzalloc(sizeof(*fu), GFP_KERNEL);
2160         if (!fu)
2161                 return -ENOMEM;
2162         fu->function.name = "Target Function";
2163         fu->function.bind = usbg_bind;
2164         fu->function.unbind = usbg_unbind;
2165         fu->function.set_alt = usbg_set_alt;
2166         fu->function.setup = usbg_setup;
2167         fu->function.disable = usbg_disable;
2168         fu->tpg = the_only_tpg_I_currently_have;
2169
2170         bot_intf_desc.iInterface = usbg_us_strings[USB_G_STR_INT_BBB].id;
2171         uasp_intf_desc.iInterface = usbg_us_strings[USB_G_STR_INT_UAS].id;
2172
2173         ret = usb_add_function(c, &fu->function);
2174         if (ret)
2175                 goto err;
2176
2177         return 0;
2178 err:
2179         kfree(fu);
2180         return ret;
2181 }
2182
2183 static int usb_target_bind(struct usb_composite_dev *cdev)
2184 {
2185         int ret;
2186
2187         ret = usb_string_ids_tab(cdev, usbg_us_strings);
2188         if (ret)
2189                 return ret;
2190
2191         usbg_device_desc.iManufacturer =
2192                 usbg_us_strings[USB_GADGET_MANUFACTURER_IDX].id;
2193         usbg_device_desc.iProduct = usbg_us_strings[USB_GADGET_PRODUCT_IDX].id;
2194         usbg_device_desc.iSerialNumber =
2195                 usbg_us_strings[USB_GADGET_SERIAL_IDX].id;
2196         usbg_config_driver.iConfiguration =
2197                 usbg_us_strings[USB_G_STR_CONFIG].id;
2198
2199         ret = usb_add_config(cdev, &usbg_config_driver,
2200                         usbg_cfg_bind);
2201         if (ret)
2202                 return ret;
2203         usb_composite_overwrite_options(cdev, &coverwrite);
2204         return 0;
2205 }
2206
2207 static struct usb_composite_driver usbg_driver = {
2208         .name           = "g_target",
2209         .dev            = &usbg_device_desc,
2210         .strings        = usbg_strings,
2211         .max_speed      = USB_SPEED_SUPER,
2212         .bind           = usb_target_bind,
2213         .unbind         = guas_unbind,
2214 };
2215
2216 static int usbg_attach(struct usbg_tpg *tpg)
2217 {
2218         return usb_composite_probe(&usbg_driver);
2219 }
2220
2221 static void usbg_detach(struct usbg_tpg *tpg)
2222 {
2223         usb_composite_unregister(&usbg_driver);
2224 }
2225
2226 static int __init usb_target_gadget_init(void)
2227 {
2228         return target_register_template(&usbg_ops);
2229 }
2230 module_init(usb_target_gadget_init);
2231
2232 static void __exit usb_target_gadget_exit(void)
2233 {
2234         target_unregister_template(&usbg_ops);
2235 }
2236 module_exit(usb_target_gadget_exit);
2237
2238 MODULE_AUTHOR("Sebastian Andrzej Siewior <bigeasy@linutronix.de>");
2239 MODULE_DESCRIPTION("usb-gadget fabric");
2240 MODULE_LICENSE("GPL v2");