]> asedeno.scripts.mit.edu Git - linux.git/blob - drivers/usb/gadget/legacy/tcm_usb_gadget.c
usb: gadget: tcm: split string definitions into function and device
[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 int tcm_usbg_drop_nexus(struct usbg_tpg *);
1427
1428 static void usbg_drop_tpg(struct se_portal_group *se_tpg)
1429 {
1430         struct usbg_tpg *tpg = container_of(se_tpg,
1431                                 struct usbg_tpg, se_tpg);
1432
1433         tcm_usbg_drop_nexus(tpg);
1434         core_tpg_deregister(se_tpg);
1435         destroy_workqueue(tpg->workqueue);
1436         kfree(tpg);
1437         the_only_tpg_I_currently_have = NULL;
1438 }
1439
1440 static struct se_wwn *usbg_make_tport(
1441         struct target_fabric_configfs *tf,
1442         struct config_group *group,
1443         const char *name)
1444 {
1445         struct usbg_tport *tport;
1446         const char *wnn_name;
1447         u64 wwpn = 0;
1448
1449         wnn_name = usbg_check_wwn(name);
1450         if (!wnn_name)
1451                 return ERR_PTR(-EINVAL);
1452
1453         tport = kzalloc(sizeof(struct usbg_tport), GFP_KERNEL);
1454         if (!(tport))
1455                 return ERR_PTR(-ENOMEM);
1456         tport->tport_wwpn = wwpn;
1457         snprintf(tport->tport_name, sizeof(tport->tport_name), "%s", wnn_name);
1458         return &tport->tport_wwn;
1459 }
1460
1461 static void usbg_drop_tport(struct se_wwn *wwn)
1462 {
1463         struct usbg_tport *tport = container_of(wwn,
1464                                 struct usbg_tport, tport_wwn);
1465         kfree(tport);
1466 }
1467
1468 /*
1469  * If somebody feels like dropping the version property, go ahead.
1470  */
1471 static ssize_t usbg_wwn_version_show(struct config_item *item, char *page)
1472 {
1473         return sprintf(page, "usb-gadget fabric module\n");
1474 }
1475
1476 CONFIGFS_ATTR_RO(usbg_wwn_, version);
1477
1478 static struct configfs_attribute *usbg_wwn_attrs[] = {
1479         &usbg_wwn_attr_version,
1480         NULL,
1481 };
1482
1483 static ssize_t tcm_usbg_tpg_enable_show(struct config_item *item, char *page)
1484 {
1485         struct se_portal_group *se_tpg = to_tpg(item);
1486         struct usbg_tpg  *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
1487
1488         return snprintf(page, PAGE_SIZE, "%u\n", tpg->gadget_connect);
1489 }
1490
1491 static int usbg_attach(struct usbg_tpg *);
1492 static void usbg_detach(struct usbg_tpg *);
1493
1494 static ssize_t tcm_usbg_tpg_enable_store(struct config_item *item,
1495                 const char *page, size_t count)
1496 {
1497         struct se_portal_group *se_tpg = to_tpg(item);
1498         struct usbg_tpg  *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
1499         unsigned long op;
1500         ssize_t ret;
1501
1502         ret = kstrtoul(page, 0, &op);
1503         if (ret < 0)
1504                 return -EINVAL;
1505         if (op > 1)
1506                 return -EINVAL;
1507
1508         if (op && tpg->gadget_connect) {
1509                 ret = -EINVAL;
1510                 goto out;
1511         }
1512         if (!op && !tpg->gadget_connect) {
1513                 ret = -EINVAL;
1514                 goto out;
1515         }
1516
1517         if (op) {
1518                 ret = usbg_attach(tpg);
1519                 if (ret)
1520                         goto out;
1521         } else {
1522                 usbg_detach(tpg);
1523         }
1524         tpg->gadget_connect = op;
1525
1526         return count;
1527 out:
1528         return ret;
1529 }
1530
1531 static ssize_t tcm_usbg_tpg_nexus_show(struct config_item *item, char *page)
1532 {
1533         struct se_portal_group *se_tpg = to_tpg(item);
1534         struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
1535         struct tcm_usbg_nexus *tv_nexus;
1536         ssize_t ret;
1537
1538         mutex_lock(&tpg->tpg_mutex);
1539         tv_nexus = tpg->tpg_nexus;
1540         if (!tv_nexus) {
1541                 ret = -ENODEV;
1542                 goto out;
1543         }
1544         ret = snprintf(page, PAGE_SIZE, "%s\n",
1545                         tv_nexus->tvn_se_sess->se_node_acl->initiatorname);
1546 out:
1547         mutex_unlock(&tpg->tpg_mutex);
1548         return ret;
1549 }
1550
1551 static int tcm_usbg_make_nexus(struct usbg_tpg *tpg, char *name)
1552 {
1553         struct se_portal_group *se_tpg;
1554         struct tcm_usbg_nexus *tv_nexus;
1555         int ret;
1556
1557         mutex_lock(&tpg->tpg_mutex);
1558         if (tpg->tpg_nexus) {
1559                 ret = -EEXIST;
1560                 pr_debug("tpg->tpg_nexus already exists\n");
1561                 goto err_unlock;
1562         }
1563         se_tpg = &tpg->se_tpg;
1564
1565         ret = -ENOMEM;
1566         tv_nexus = kzalloc(sizeof(*tv_nexus), GFP_KERNEL);
1567         if (!tv_nexus)
1568                 goto err_unlock;
1569         tv_nexus->tvn_se_sess = transport_init_session(TARGET_PROT_NORMAL);
1570         if (IS_ERR(tv_nexus->tvn_se_sess))
1571                 goto err_free;
1572
1573         /*
1574          * Since we are running in 'demo mode' this call with generate a
1575          * struct se_node_acl for the tcm_vhost struct se_portal_group with
1576          * the SCSI Initiator port name of the passed configfs group 'name'.
1577          */
1578         tv_nexus->tvn_se_sess->se_node_acl = core_tpg_check_initiator_node_acl(
1579                         se_tpg, name);
1580         if (!tv_nexus->tvn_se_sess->se_node_acl) {
1581                 pr_debug("core_tpg_check_initiator_node_acl() failed"
1582                                 " for %s\n", name);
1583                 goto err_session;
1584         }
1585         /*
1586          * Now register the TCM vHost virtual I_T Nexus as active.
1587          */
1588         transport_register_session(se_tpg, tv_nexus->tvn_se_sess->se_node_acl,
1589                         tv_nexus->tvn_se_sess, tv_nexus);
1590         tpg->tpg_nexus = tv_nexus;
1591         mutex_unlock(&tpg->tpg_mutex);
1592         return 0;
1593
1594 err_session:
1595         transport_free_session(tv_nexus->tvn_se_sess);
1596 err_free:
1597         kfree(tv_nexus);
1598 err_unlock:
1599         mutex_unlock(&tpg->tpg_mutex);
1600         return ret;
1601 }
1602
1603 static int tcm_usbg_drop_nexus(struct usbg_tpg *tpg)
1604 {
1605         struct se_session *se_sess;
1606         struct tcm_usbg_nexus *tv_nexus;
1607         int ret = -ENODEV;
1608
1609         mutex_lock(&tpg->tpg_mutex);
1610         tv_nexus = tpg->tpg_nexus;
1611         if (!tv_nexus)
1612                 goto out;
1613
1614         se_sess = tv_nexus->tvn_se_sess;
1615         if (!se_sess)
1616                 goto out;
1617
1618         if (atomic_read(&tpg->tpg_port_count)) {
1619                 ret = -EPERM;
1620                 pr_err("Unable to remove Host I_T Nexus with"
1621                                 " active TPG port count: %d\n",
1622                                 atomic_read(&tpg->tpg_port_count));
1623                 goto out;
1624         }
1625
1626         pr_debug("Removing I_T Nexus to Initiator Port: %s\n",
1627                         tv_nexus->tvn_se_sess->se_node_acl->initiatorname);
1628         /*
1629          * Release the SCSI I_T Nexus to the emulated vHost Target Port
1630          */
1631         transport_deregister_session(tv_nexus->tvn_se_sess);
1632         tpg->tpg_nexus = NULL;
1633
1634         kfree(tv_nexus);
1635         ret = 0;
1636 out:
1637         mutex_unlock(&tpg->tpg_mutex);
1638         return ret;
1639 }
1640
1641 static ssize_t tcm_usbg_tpg_nexus_store(struct config_item *item,
1642                 const char *page, size_t count)
1643 {
1644         struct se_portal_group *se_tpg = to_tpg(item);
1645         struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
1646         unsigned char i_port[USBG_NAMELEN], *ptr;
1647         int ret;
1648
1649         if (!strncmp(page, "NULL", 4)) {
1650                 ret = tcm_usbg_drop_nexus(tpg);
1651                 return (!ret) ? count : ret;
1652         }
1653         if (strlen(page) >= USBG_NAMELEN) {
1654                 pr_err("Emulated NAA Sas Address: %s, exceeds"
1655                                 " max: %d\n", page, USBG_NAMELEN);
1656                 return -EINVAL;
1657         }
1658         snprintf(i_port, USBG_NAMELEN, "%s", page);
1659
1660         ptr = strstr(i_port, "naa.");
1661         if (!ptr) {
1662                 pr_err("Missing 'naa.' prefix\n");
1663                 return -EINVAL;
1664         }
1665
1666         if (i_port[strlen(i_port) - 1] == '\n')
1667                 i_port[strlen(i_port) - 1] = '\0';
1668
1669         ret = tcm_usbg_make_nexus(tpg, &i_port[0]);
1670         if (ret < 0)
1671                 return ret;
1672         return count;
1673 }
1674
1675 CONFIGFS_ATTR(tcm_usbg_tpg_, enable);
1676 CONFIGFS_ATTR(tcm_usbg_tpg_, nexus);
1677
1678 static struct configfs_attribute *usbg_base_attrs[] = {
1679         &tcm_usbg_tpg_attr_enable,
1680         &tcm_usbg_tpg_attr_nexus,
1681         NULL,
1682 };
1683
1684 static int usbg_port_link(struct se_portal_group *se_tpg, struct se_lun *lun)
1685 {
1686         struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
1687
1688         atomic_inc(&tpg->tpg_port_count);
1689         smp_mb__after_atomic();
1690         return 0;
1691 }
1692
1693 static void usbg_port_unlink(struct se_portal_group *se_tpg,
1694                 struct se_lun *se_lun)
1695 {
1696         struct usbg_tpg *tpg = container_of(se_tpg, struct usbg_tpg, se_tpg);
1697
1698         atomic_dec(&tpg->tpg_port_count);
1699         smp_mb__after_atomic();
1700 }
1701
1702 static int usbg_check_stop_free(struct se_cmd *se_cmd)
1703 {
1704         struct usbg_cmd *cmd = container_of(se_cmd, struct usbg_cmd,
1705                         se_cmd);
1706
1707         kref_put(&cmd->ref, usbg_cmd_release);
1708         return 1;
1709 }
1710
1711 static const struct target_core_fabric_ops usbg_ops = {
1712         .module                         = THIS_MODULE,
1713         .name                           = "usb_gadget",
1714         .get_fabric_name                = usbg_get_fabric_name,
1715         .tpg_get_wwn                    = usbg_get_fabric_wwn,
1716         .tpg_get_tag                    = usbg_get_tag,
1717         .tpg_check_demo_mode            = usbg_check_true,
1718         .tpg_check_demo_mode_cache      = usbg_check_false,
1719         .tpg_check_demo_mode_write_protect = usbg_check_false,
1720         .tpg_check_prod_mode_write_protect = usbg_check_false,
1721         .tpg_get_inst_index             = usbg_tpg_get_inst_index,
1722         .release_cmd                    = usbg_release_cmd,
1723         .shutdown_session               = usbg_shutdown_session,
1724         .close_session                  = usbg_close_session,
1725         .sess_get_index                 = usbg_sess_get_index,
1726         .sess_get_initiator_sid         = NULL,
1727         .write_pending                  = usbg_send_write_request,
1728         .write_pending_status           = usbg_write_pending_status,
1729         .set_default_node_attributes    = usbg_set_default_node_attrs,
1730         .get_cmd_state                  = usbg_get_cmd_state,
1731         .queue_data_in                  = usbg_send_read_response,
1732         .queue_status                   = usbg_send_status_response,
1733         .queue_tm_rsp                   = usbg_queue_tm_rsp,
1734         .aborted_task                   = usbg_aborted_task,
1735         .check_stop_free                = usbg_check_stop_free,
1736
1737         .fabric_make_wwn                = usbg_make_tport,
1738         .fabric_drop_wwn                = usbg_drop_tport,
1739         .fabric_make_tpg                = usbg_make_tpg,
1740         .fabric_drop_tpg                = usbg_drop_tpg,
1741         .fabric_post_link               = usbg_port_link,
1742         .fabric_pre_unlink              = usbg_port_unlink,
1743         .fabric_init_nodeacl            = usbg_init_nodeacl,
1744
1745         .tfc_wwn_attrs                  = usbg_wwn_attrs,
1746         .tfc_tpg_base_attrs             = usbg_base_attrs,
1747 };
1748
1749 /* Start gadget.c code */
1750
1751 static struct usb_interface_descriptor bot_intf_desc = {
1752         .bLength =              sizeof(bot_intf_desc),
1753         .bDescriptorType =      USB_DT_INTERFACE,
1754         .bNumEndpoints =        2,
1755         .bAlternateSetting =    USB_G_ALT_INT_BBB,
1756         .bInterfaceClass =      USB_CLASS_MASS_STORAGE,
1757         .bInterfaceSubClass =   USB_SC_SCSI,
1758         .bInterfaceProtocol =   USB_PR_BULK,
1759 };
1760
1761 static struct usb_interface_descriptor uasp_intf_desc = {
1762         .bLength =              sizeof(uasp_intf_desc),
1763         .bDescriptorType =      USB_DT_INTERFACE,
1764         .bNumEndpoints =        4,
1765         .bAlternateSetting =    USB_G_ALT_INT_UAS,
1766         .bInterfaceClass =      USB_CLASS_MASS_STORAGE,
1767         .bInterfaceSubClass =   USB_SC_SCSI,
1768         .bInterfaceProtocol =   USB_PR_UAS,
1769 };
1770
1771 static struct usb_endpoint_descriptor uasp_bi_desc = {
1772         .bLength =              USB_DT_ENDPOINT_SIZE,
1773         .bDescriptorType =      USB_DT_ENDPOINT,
1774         .bEndpointAddress =     USB_DIR_IN,
1775         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1776         .wMaxPacketSize =       cpu_to_le16(512),
1777 };
1778
1779 static struct usb_endpoint_descriptor uasp_fs_bi_desc = {
1780         .bLength =              USB_DT_ENDPOINT_SIZE,
1781         .bDescriptorType =      USB_DT_ENDPOINT,
1782         .bEndpointAddress =     USB_DIR_IN,
1783         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1784 };
1785
1786 static struct usb_pipe_usage_descriptor uasp_bi_pipe_desc = {
1787         .bLength =              sizeof(uasp_bi_pipe_desc),
1788         .bDescriptorType =      USB_DT_PIPE_USAGE,
1789         .bPipeID =              DATA_IN_PIPE_ID,
1790 };
1791
1792 static struct usb_endpoint_descriptor uasp_ss_bi_desc = {
1793         .bLength =              USB_DT_ENDPOINT_SIZE,
1794         .bDescriptorType =      USB_DT_ENDPOINT,
1795         .bEndpointAddress =     USB_DIR_IN,
1796         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1797         .wMaxPacketSize =       cpu_to_le16(1024),
1798 };
1799
1800 static struct usb_ss_ep_comp_descriptor uasp_bi_ep_comp_desc = {
1801         .bLength =              sizeof(uasp_bi_ep_comp_desc),
1802         .bDescriptorType =      USB_DT_SS_ENDPOINT_COMP,
1803         .bMaxBurst =            0,
1804         .bmAttributes =         UASP_SS_EP_COMP_LOG_STREAMS,
1805         .wBytesPerInterval =    0,
1806 };
1807
1808 static struct usb_ss_ep_comp_descriptor bot_bi_ep_comp_desc = {
1809         .bLength =              sizeof(bot_bi_ep_comp_desc),
1810         .bDescriptorType =      USB_DT_SS_ENDPOINT_COMP,
1811         .bMaxBurst =            0,
1812 };
1813
1814 static struct usb_endpoint_descriptor uasp_bo_desc = {
1815         .bLength =              USB_DT_ENDPOINT_SIZE,
1816         .bDescriptorType =      USB_DT_ENDPOINT,
1817         .bEndpointAddress =     USB_DIR_OUT,
1818         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1819         .wMaxPacketSize =       cpu_to_le16(512),
1820 };
1821
1822 static struct usb_endpoint_descriptor uasp_fs_bo_desc = {
1823         .bLength =              USB_DT_ENDPOINT_SIZE,
1824         .bDescriptorType =      USB_DT_ENDPOINT,
1825         .bEndpointAddress =     USB_DIR_OUT,
1826         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1827 };
1828
1829 static struct usb_pipe_usage_descriptor uasp_bo_pipe_desc = {
1830         .bLength =              sizeof(uasp_bo_pipe_desc),
1831         .bDescriptorType =      USB_DT_PIPE_USAGE,
1832         .bPipeID =              DATA_OUT_PIPE_ID,
1833 };
1834
1835 static struct usb_endpoint_descriptor uasp_ss_bo_desc = {
1836         .bLength =              USB_DT_ENDPOINT_SIZE,
1837         .bDescriptorType =      USB_DT_ENDPOINT,
1838         .bEndpointAddress =     USB_DIR_OUT,
1839         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1840         .wMaxPacketSize =       cpu_to_le16(0x400),
1841 };
1842
1843 static struct usb_ss_ep_comp_descriptor uasp_bo_ep_comp_desc = {
1844         .bLength =              sizeof(uasp_bo_ep_comp_desc),
1845         .bDescriptorType =      USB_DT_SS_ENDPOINT_COMP,
1846         .bmAttributes =         UASP_SS_EP_COMP_LOG_STREAMS,
1847 };
1848
1849 static struct usb_ss_ep_comp_descriptor bot_bo_ep_comp_desc = {
1850         .bLength =              sizeof(bot_bo_ep_comp_desc),
1851         .bDescriptorType =      USB_DT_SS_ENDPOINT_COMP,
1852 };
1853
1854 static struct usb_endpoint_descriptor uasp_status_desc = {
1855         .bLength =              USB_DT_ENDPOINT_SIZE,
1856         .bDescriptorType =      USB_DT_ENDPOINT,
1857         .bEndpointAddress =     USB_DIR_IN,
1858         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1859         .wMaxPacketSize =       cpu_to_le16(512),
1860 };
1861
1862 static struct usb_endpoint_descriptor uasp_fs_status_desc = {
1863         .bLength =              USB_DT_ENDPOINT_SIZE,
1864         .bDescriptorType =      USB_DT_ENDPOINT,
1865         .bEndpointAddress =     USB_DIR_IN,
1866         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1867 };
1868
1869 static struct usb_pipe_usage_descriptor uasp_status_pipe_desc = {
1870         .bLength =              sizeof(uasp_status_pipe_desc),
1871         .bDescriptorType =      USB_DT_PIPE_USAGE,
1872         .bPipeID =              STATUS_PIPE_ID,
1873 };
1874
1875 static struct usb_endpoint_descriptor uasp_ss_status_desc = {
1876         .bLength =              USB_DT_ENDPOINT_SIZE,
1877         .bDescriptorType =      USB_DT_ENDPOINT,
1878         .bEndpointAddress =     USB_DIR_IN,
1879         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1880         .wMaxPacketSize =       cpu_to_le16(1024),
1881 };
1882
1883 static struct usb_ss_ep_comp_descriptor uasp_status_in_ep_comp_desc = {
1884         .bLength =              sizeof(uasp_status_in_ep_comp_desc),
1885         .bDescriptorType =      USB_DT_SS_ENDPOINT_COMP,
1886         .bmAttributes =         UASP_SS_EP_COMP_LOG_STREAMS,
1887 };
1888
1889 static struct usb_endpoint_descriptor uasp_cmd_desc = {
1890         .bLength =              USB_DT_ENDPOINT_SIZE,
1891         .bDescriptorType =      USB_DT_ENDPOINT,
1892         .bEndpointAddress =     USB_DIR_OUT,
1893         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1894         .wMaxPacketSize =       cpu_to_le16(512),
1895 };
1896
1897 static struct usb_endpoint_descriptor uasp_fs_cmd_desc = {
1898         .bLength =              USB_DT_ENDPOINT_SIZE,
1899         .bDescriptorType =      USB_DT_ENDPOINT,
1900         .bEndpointAddress =     USB_DIR_OUT,
1901         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1902 };
1903
1904 static struct usb_pipe_usage_descriptor uasp_cmd_pipe_desc = {
1905         .bLength =              sizeof(uasp_cmd_pipe_desc),
1906         .bDescriptorType =      USB_DT_PIPE_USAGE,
1907         .bPipeID =              CMD_PIPE_ID,
1908 };
1909
1910 static struct usb_endpoint_descriptor uasp_ss_cmd_desc = {
1911         .bLength =              USB_DT_ENDPOINT_SIZE,
1912         .bDescriptorType =      USB_DT_ENDPOINT,
1913         .bEndpointAddress =     USB_DIR_OUT,
1914         .bmAttributes =         USB_ENDPOINT_XFER_BULK,
1915         .wMaxPacketSize =       cpu_to_le16(1024),
1916 };
1917
1918 static struct usb_ss_ep_comp_descriptor uasp_cmd_comp_desc = {
1919         .bLength =              sizeof(uasp_cmd_comp_desc),
1920         .bDescriptorType =      USB_DT_SS_ENDPOINT_COMP,
1921 };
1922
1923 static struct usb_descriptor_header *uasp_fs_function_desc[] = {
1924         (struct usb_descriptor_header *) &bot_intf_desc,
1925         (struct usb_descriptor_header *) &uasp_fs_bi_desc,
1926         (struct usb_descriptor_header *) &uasp_fs_bo_desc,
1927
1928         (struct usb_descriptor_header *) &uasp_intf_desc,
1929         (struct usb_descriptor_header *) &uasp_fs_bi_desc,
1930         (struct usb_descriptor_header *) &uasp_bi_pipe_desc,
1931         (struct usb_descriptor_header *) &uasp_fs_bo_desc,
1932         (struct usb_descriptor_header *) &uasp_bo_pipe_desc,
1933         (struct usb_descriptor_header *) &uasp_fs_status_desc,
1934         (struct usb_descriptor_header *) &uasp_status_pipe_desc,
1935         (struct usb_descriptor_header *) &uasp_fs_cmd_desc,
1936         (struct usb_descriptor_header *) &uasp_cmd_pipe_desc,
1937         NULL,
1938 };
1939
1940 static struct usb_descriptor_header *uasp_hs_function_desc[] = {
1941         (struct usb_descriptor_header *) &bot_intf_desc,
1942         (struct usb_descriptor_header *) &uasp_bi_desc,
1943         (struct usb_descriptor_header *) &uasp_bo_desc,
1944
1945         (struct usb_descriptor_header *) &uasp_intf_desc,
1946         (struct usb_descriptor_header *) &uasp_bi_desc,
1947         (struct usb_descriptor_header *) &uasp_bi_pipe_desc,
1948         (struct usb_descriptor_header *) &uasp_bo_desc,
1949         (struct usb_descriptor_header *) &uasp_bo_pipe_desc,
1950         (struct usb_descriptor_header *) &uasp_status_desc,
1951         (struct usb_descriptor_header *) &uasp_status_pipe_desc,
1952         (struct usb_descriptor_header *) &uasp_cmd_desc,
1953         (struct usb_descriptor_header *) &uasp_cmd_pipe_desc,
1954         NULL,
1955 };
1956
1957 static struct usb_descriptor_header *uasp_ss_function_desc[] = {
1958         (struct usb_descriptor_header *) &bot_intf_desc,
1959         (struct usb_descriptor_header *) &uasp_ss_bi_desc,
1960         (struct usb_descriptor_header *) &bot_bi_ep_comp_desc,
1961         (struct usb_descriptor_header *) &uasp_ss_bo_desc,
1962         (struct usb_descriptor_header *) &bot_bo_ep_comp_desc,
1963
1964         (struct usb_descriptor_header *) &uasp_intf_desc,
1965         (struct usb_descriptor_header *) &uasp_ss_bi_desc,
1966         (struct usb_descriptor_header *) &uasp_bi_ep_comp_desc,
1967         (struct usb_descriptor_header *) &uasp_bi_pipe_desc,
1968         (struct usb_descriptor_header *) &uasp_ss_bo_desc,
1969         (struct usb_descriptor_header *) &uasp_bo_ep_comp_desc,
1970         (struct usb_descriptor_header *) &uasp_bo_pipe_desc,
1971         (struct usb_descriptor_header *) &uasp_ss_status_desc,
1972         (struct usb_descriptor_header *) &uasp_status_in_ep_comp_desc,
1973         (struct usb_descriptor_header *) &uasp_status_pipe_desc,
1974         (struct usb_descriptor_header *) &uasp_ss_cmd_desc,
1975         (struct usb_descriptor_header *) &uasp_cmd_comp_desc,
1976         (struct usb_descriptor_header *) &uasp_cmd_pipe_desc,
1977         NULL,
1978 };
1979
1980 #define UAS_VENDOR_ID   0x0525  /* NetChip */
1981 #define UAS_PRODUCT_ID  0xa4a5  /* Linux-USB File-backed Storage Gadget */
1982
1983 static struct usb_device_descriptor usbg_device_desc = {
1984         .bLength =              sizeof(usbg_device_desc),
1985         .bDescriptorType =      USB_DT_DEVICE,
1986         .bcdUSB =               cpu_to_le16(0x0200),
1987         .bDeviceClass =         USB_CLASS_PER_INTERFACE,
1988         .idVendor =             cpu_to_le16(UAS_VENDOR_ID),
1989         .idProduct =            cpu_to_le16(UAS_PRODUCT_ID),
1990         .bNumConfigurations =   1,
1991 };
1992
1993 #define USB_G_STR_CONFIG USB_GADGET_FIRST_AVAIL_IDX
1994
1995 static struct usb_string        usbg_us_strings[] = {
1996         [USB_GADGET_MANUFACTURER_IDX].s = "Target Manufactor",
1997         [USB_GADGET_PRODUCT_IDX].s      = "Target Product",
1998         [USB_GADGET_SERIAL_IDX].s       = "000000000001",
1999         [USB_G_STR_CONFIG].s            = "default config",
2000         { },
2001 };
2002
2003 static struct usb_gadget_strings usbg_stringtab = {
2004         .language = 0x0409,
2005         .strings = usbg_us_strings,
2006 };
2007
2008 static struct usb_gadget_strings *usbg_strings[] = {
2009         &usbg_stringtab,
2010         NULL,
2011 };
2012
2013 static struct usb_string        tcm_us_strings[] = {
2014         [USB_G_STR_INT_UAS].s           = "USB Attached SCSI",
2015         [USB_G_STR_INT_BBB].s           = "Bulk Only Transport",
2016         { },
2017 };
2018
2019 static struct usb_gadget_strings tcm_stringtab = {
2020         .language = 0x0409,
2021         .strings = tcm_us_strings,
2022 };
2023
2024 static struct usb_gadget_strings *tcm_strings[] = {
2025         &tcm_stringtab,
2026         NULL,
2027 };
2028
2029 static int guas_unbind(struct usb_composite_dev *cdev)
2030 {
2031         return 0;
2032 }
2033
2034 static struct usb_configuration usbg_config_driver = {
2035         .label                  = "Linux Target",
2036         .bConfigurationValue    = 1,
2037         .bmAttributes           = USB_CONFIG_ATT_SELFPOWER,
2038 };
2039
2040 static int usbg_bind(struct usb_configuration *c, struct usb_function *f)
2041 {
2042         struct f_uas            *fu = to_f_uas(f);
2043         struct usb_gadget       *gadget = c->cdev->gadget;
2044         struct usb_ep           *ep;
2045         int                     iface;
2046         int                     ret;
2047
2048         iface = usb_interface_id(c, f);
2049         if (iface < 0)
2050                 return iface;
2051
2052         bot_intf_desc.bInterfaceNumber = iface;
2053         uasp_intf_desc.bInterfaceNumber = iface;
2054         fu->iface = iface;
2055         ep = usb_ep_autoconfig_ss(gadget, &uasp_ss_bi_desc,
2056                         &uasp_bi_ep_comp_desc);
2057         if (!ep)
2058                 goto ep_fail;
2059         fu->ep_in = ep;
2060
2061         ep = usb_ep_autoconfig_ss(gadget, &uasp_ss_bo_desc,
2062                         &uasp_bo_ep_comp_desc);
2063         if (!ep)
2064                 goto ep_fail;
2065         fu->ep_out = ep;
2066
2067         ep = usb_ep_autoconfig_ss(gadget, &uasp_ss_status_desc,
2068                         &uasp_status_in_ep_comp_desc);
2069         if (!ep)
2070                 goto ep_fail;
2071         fu->ep_status = ep;
2072
2073         ep = usb_ep_autoconfig_ss(gadget, &uasp_ss_cmd_desc,
2074                         &uasp_cmd_comp_desc);
2075         if (!ep)
2076                 goto ep_fail;
2077         fu->ep_cmd = ep;
2078
2079         /* Assume endpoint addresses are the same for both speeds */
2080         uasp_bi_desc.bEndpointAddress = uasp_ss_bi_desc.bEndpointAddress;
2081         uasp_bo_desc.bEndpointAddress = uasp_ss_bo_desc.bEndpointAddress;
2082         uasp_status_desc.bEndpointAddress =
2083                 uasp_ss_status_desc.bEndpointAddress;
2084         uasp_cmd_desc.bEndpointAddress = uasp_ss_cmd_desc.bEndpointAddress;
2085
2086         uasp_fs_bi_desc.bEndpointAddress = uasp_ss_bi_desc.bEndpointAddress;
2087         uasp_fs_bo_desc.bEndpointAddress = uasp_ss_bo_desc.bEndpointAddress;
2088         uasp_fs_status_desc.bEndpointAddress =
2089                 uasp_ss_status_desc.bEndpointAddress;
2090         uasp_fs_cmd_desc.bEndpointAddress = uasp_ss_cmd_desc.bEndpointAddress;
2091
2092         ret = usb_assign_descriptors(f, uasp_fs_function_desc,
2093                         uasp_hs_function_desc, uasp_ss_function_desc);
2094         if (ret)
2095                 goto ep_fail;
2096
2097         return 0;
2098 ep_fail:
2099         pr_err("Can't claim all required eps\n");
2100         return -ENOTSUPP;
2101 }
2102
2103 static void usbg_unbind(struct usb_configuration *c, struct usb_function *f)
2104 {
2105         struct f_uas *fu = to_f_uas(f);
2106
2107         usb_free_all_descriptors(f);
2108         kfree(fu);
2109 }
2110
2111 struct guas_setup_wq {
2112         struct work_struct work;
2113         struct f_uas *fu;
2114         unsigned int alt;
2115 };
2116
2117 static void usbg_delayed_set_alt(struct work_struct *wq)
2118 {
2119         struct guas_setup_wq *work = container_of(wq, struct guas_setup_wq,
2120                         work);
2121         struct f_uas *fu = work->fu;
2122         int alt = work->alt;
2123
2124         kfree(work);
2125
2126         if (fu->flags & USBG_IS_BOT)
2127                 bot_cleanup_old_alt(fu);
2128         if (fu->flags & USBG_IS_UAS)
2129                 uasp_cleanup_old_alt(fu);
2130
2131         if (alt == USB_G_ALT_INT_BBB)
2132                 bot_set_alt(fu);
2133         else if (alt == USB_G_ALT_INT_UAS)
2134                 uasp_set_alt(fu);
2135         usb_composite_setup_continue(fu->function.config->cdev);
2136 }
2137
2138 static int usbg_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
2139 {
2140         struct f_uas *fu = to_f_uas(f);
2141
2142         if ((alt == USB_G_ALT_INT_BBB) || (alt == USB_G_ALT_INT_UAS)) {
2143                 struct guas_setup_wq *work;
2144
2145                 work = kmalloc(sizeof(*work), GFP_ATOMIC);
2146                 if (!work)
2147                         return -ENOMEM;
2148                 INIT_WORK(&work->work, usbg_delayed_set_alt);
2149                 work->fu = fu;
2150                 work->alt = alt;
2151                 schedule_work(&work->work);
2152                 return USB_GADGET_DELAYED_STATUS;
2153         }
2154         return -EOPNOTSUPP;
2155 }
2156
2157 static void usbg_disable(struct usb_function *f)
2158 {
2159         struct f_uas *fu = to_f_uas(f);
2160
2161         if (fu->flags & USBG_IS_UAS)
2162                 uasp_cleanup_old_alt(fu);
2163         else if (fu->flags & USBG_IS_BOT)
2164                 bot_cleanup_old_alt(fu);
2165         fu->flags = 0;
2166 }
2167
2168 static int usbg_setup(struct usb_function *f,
2169                 const struct usb_ctrlrequest *ctrl)
2170 {
2171         struct f_uas *fu = to_f_uas(f);
2172
2173         if (!(fu->flags & USBG_IS_BOT))
2174                 return -EOPNOTSUPP;
2175
2176         return usbg_bot_setup(f, ctrl);
2177 }
2178
2179 static int usbg_cfg_bind(struct usb_configuration *c)
2180 {
2181         struct f_uas *fu;
2182         int ret;
2183
2184         fu = kzalloc(sizeof(*fu), GFP_KERNEL);
2185         if (!fu)
2186                 return -ENOMEM;
2187         fu->function.name = "Target Function";
2188         fu->function.bind = usbg_bind;
2189         fu->function.unbind = usbg_unbind;
2190         fu->function.set_alt = usbg_set_alt;
2191         fu->function.setup = usbg_setup;
2192         fu->function.disable = usbg_disable;
2193         fu->function.strings = tcm_strings;
2194         fu->tpg = the_only_tpg_I_currently_have;
2195
2196         bot_intf_desc.iInterface = tcm_us_strings[USB_G_STR_INT_BBB].id;
2197         uasp_intf_desc.iInterface = tcm_us_strings[USB_G_STR_INT_UAS].id;
2198
2199         ret = usb_add_function(c, &fu->function);
2200         if (ret)
2201                 goto err;
2202
2203         return 0;
2204 err:
2205         kfree(fu);
2206         return ret;
2207 }
2208
2209 static int usb_target_bind(struct usb_composite_dev *cdev)
2210 {
2211         int ret;
2212
2213         ret = usb_string_ids_tab(cdev, usbg_us_strings);
2214         if (ret)
2215                 return ret;
2216
2217         usbg_device_desc.iManufacturer =
2218                 usbg_us_strings[USB_GADGET_MANUFACTURER_IDX].id;
2219         usbg_device_desc.iProduct = usbg_us_strings[USB_GADGET_PRODUCT_IDX].id;
2220         usbg_device_desc.iSerialNumber =
2221                 usbg_us_strings[USB_GADGET_SERIAL_IDX].id;
2222         usbg_config_driver.iConfiguration =
2223                 usbg_us_strings[USB_G_STR_CONFIG].id;
2224
2225         ret = usb_add_config(cdev, &usbg_config_driver,
2226                         usbg_cfg_bind);
2227         if (ret)
2228                 return ret;
2229         usb_composite_overwrite_options(cdev, &coverwrite);
2230         return 0;
2231 }
2232
2233 static struct usb_composite_driver usbg_driver = {
2234         .name           = "g_target",
2235         .dev            = &usbg_device_desc,
2236         .strings        = usbg_strings,
2237         .max_speed      = USB_SPEED_SUPER,
2238         .bind           = usb_target_bind,
2239         .unbind         = guas_unbind,
2240 };
2241
2242 static int usbg_attach(struct usbg_tpg *tpg)
2243 {
2244         return usb_composite_probe(&usbg_driver);
2245 }
2246
2247 static void usbg_detach(struct usbg_tpg *tpg)
2248 {
2249         usb_composite_unregister(&usbg_driver);
2250 }
2251
2252 static int __init usb_target_gadget_init(void)
2253 {
2254         return target_register_template(&usbg_ops);
2255 }
2256 module_init(usb_target_gadget_init);
2257
2258 static void __exit usb_target_gadget_exit(void)
2259 {
2260         target_unregister_template(&usbg_ops);
2261 }
2262 module_exit(usb_target_gadget_exit);
2263
2264 MODULE_AUTHOR("Sebastian Andrzej Siewior <bigeasy@linutronix.de>");
2265 MODULE_DESCRIPTION("usb-gadget fabric");
2266 MODULE_LICENSE("GPL v2");