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