Lines Matching defs:fu

48 static int bot_enqueue_cmd_cbw(struct f_uas *fu)
52 if (fu->flags & USBG_BOT_CMD_PEND)
55 ret = usb_ep_queue(fu->ep_out, fu->cmd.req, GFP_ATOMIC);
57 fu->flags |= USBG_BOT_CMD_PEND;
64 struct f_uas *fu = cmd->fu;
73 bot_enqueue_cmd_cbw(fu);
76 static void bot_enqueue_sense_code(struct f_uas *fu, struct usbg_cmd *cmd)
78 struct bulk_cs_wrap *csw = &fu->bot_status.csw;
94 fu->bot_status.req->context = cmd;
95 ret = usb_ep_queue(fu->ep_in, fu->bot_status.req, GFP_ATOMIC);
103 struct f_uas *fu = cmd->fu;
120 bot_enqueue_sense_code(fu, cmd);
125 struct f_uas *fu = cmd->fu;
126 struct bulk_cs_wrap *csw = &fu->bot_status.csw;
134 ep = fu->ep_in;
135 req = fu->bot_req_in;
137 ep = fu->ep_out;
138 req = fu->bot_req_out;
141 if (cmd->data_len > fu->ep_in->maxpacket) {
150 req->buf = fu->cmd.buf;
153 bot_enqueue_sense_code(fu, cmd);
159 struct f_uas *fu = cmd->fu;
160 struct bulk_cs_wrap *csw = &fu->bot_status.csw;
177 fu->bot_status.req->context = cmd;
179 ret = usb_ep_queue(fu->ep_in, fu->bot_status.req, GFP_KERNEL);
215 struct f_uas *fu = cmd->fu;
217 struct usb_gadget *gadget = fuas_to_gadget(fu);
236 fu->bot_req_in->buf = cmd->data_buf;
238 fu->bot_req_in->buf = NULL;
239 fu->bot_req_in->num_sgs = se_cmd->t_data_nents;
240 fu->bot_req_in->sg = se_cmd->t_data_sg;
243 fu->bot_req_in->complete = bot_read_compl;
244 fu->bot_req_in->length = se_cmd->data_length;
245 fu->bot_req_in->context = cmd;
246 ret = usb_ep_queue(fu->ep_in, fu->bot_req_in, GFP_ATOMIC);
257 struct f_uas *fu = cmd->fu;
259 struct usb_gadget *gadget = fuas_to_gadget(fu);
263 cmd->fu = fu;
275 fu->bot_req_out->buf = cmd->data_buf;
277 fu->bot_req_out->buf = NULL;
278 fu->bot_req_out->num_sgs = se_cmd->t_data_nents;
279 fu->bot_req_out->sg = se_cmd->t_data_sg;
282 fu->bot_req_out->complete = usbg_data_write_cmpl;
283 fu->bot_req_out->length = se_cmd->data_length;
284 fu->bot_req_out->context = cmd;
286 ret = usbg_prepare_w_request(cmd, fu->bot_req_out);
289 ret = usb_ep_queue(fu->ep_out, fu->bot_req_out, GFP_KERNEL);
303 struct f_uas *fu = req->context;
306 fu->flags &= ~USBG_BOT_CMD_PEND;
311 ret = bot_submit_command(fu, req->buf, req->actual);
316 static int bot_prepare_reqs(struct f_uas *fu)
320 fu->bot_req_in = usb_ep_alloc_request(fu->ep_in, GFP_KERNEL);
321 if (!fu->bot_req_in)
324 fu->bot_req_out = usb_ep_alloc_request(fu->ep_out, GFP_KERNEL);
325 if (!fu->bot_req_out)
328 fu->cmd.req = usb_ep_alloc_request(fu->ep_out, GFP_KERNEL);
329 if (!fu->cmd.req)
332 fu->bot_status.req = usb_ep_alloc_request(fu->ep_in, GFP_KERNEL);
333 if (!fu->bot_status.req)
336 fu->bot_status.req->buf = &fu->bot_status.csw;
337 fu->bot_status.req->length = US_BULK_CS_WRAP_LEN;
338 fu->bot_status.req->complete = bot_status_complete;
339 fu->bot_status.csw.Signature = cpu_to_le32(US_BULK_CS_SIGN);
341 fu->cmd.buf = kmalloc(fu->ep_out->maxpacket, GFP_KERNEL);
342 if (!fu->cmd.buf)
345 fu->cmd.req->complete = bot_cmd_complete;
346 fu->cmd.req->buf = fu->cmd.buf;
347 fu->cmd.req->length = fu->ep_out->maxpacket;
348 fu->cmd.req->context = fu;
350 ret = bot_enqueue_cmd_cbw(fu);
355 kfree(fu->cmd.buf);
356 fu->cmd.buf = NULL;
358 usb_ep_free_request(fu->ep_in, fu->bot_status.req);
360 usb_ep_free_request(fu->ep_out, fu->cmd.req);
361 fu->cmd.req = NULL;
363 usb_ep_free_request(fu->ep_out, fu->bot_req_out);
364 fu->bot_req_out = NULL;
366 usb_ep_free_request(fu->ep_in, fu->bot_req_in);
367 fu->bot_req_in = NULL;
373 static void bot_cleanup_old_alt(struct f_uas *fu)
375 if (!(fu->flags & USBG_ENABLED))
378 usb_ep_disable(fu->ep_in);
379 usb_ep_disable(fu->ep_out);
381 if (!fu->bot_req_in)
384 usb_ep_free_request(fu->ep_in, fu->bot_req_in);
385 usb_ep_free_request(fu->ep_out, fu->bot_req_out);
386 usb_ep_free_request(fu->ep_out, fu->cmd.req);
387 usb_ep_free_request(fu->ep_out, fu->bot_status.req);
389 kfree(fu->cmd.buf);
391 fu->bot_req_in = NULL;
392 fu->bot_req_out = NULL;
393 fu->cmd.req = NULL;
394 fu->bot_status.req = NULL;
395 fu->cmd.buf = NULL;
398 static void bot_set_alt(struct f_uas *fu)
400 struct usb_function *f = &fu->function;
404 fu->flags = USBG_IS_BOT;
406 config_ep_by_speed(gadget, f, fu->ep_in);
407 ret = usb_ep_enable(fu->ep_in);
411 config_ep_by_speed(gadget, f, fu->ep_out);
412 ret = usb_ep_enable(fu->ep_out);
416 ret = bot_prepare_reqs(fu);
419 fu->flags |= USBG_ENABLED;
423 usb_ep_disable(fu->ep_out);
425 usb_ep_disable(fu->ep_in);
427 fu->flags = USBG_IS_BOT;
433 struct f_uas *fu = to_f_uas(f);
450 luns = atomic_read(&fu->tpg->tpg_port_count);
472 bot_enqueue_cmd_cbw(fu);
481 static void uasp_cleanup_one_stream(struct f_uas *fu, struct uas_stream *stream)
487 usb_ep_free_request(fu->ep_in, stream->req_in);
488 usb_ep_free_request(fu->ep_out, stream->req_out);
489 usb_ep_free_request(fu->ep_status, stream->req_status);
496 static void uasp_free_cmdreq(struct f_uas *fu)
498 usb_ep_free_request(fu->ep_cmd, fu->cmd.req);
499 kfree(fu->cmd.buf);
500 fu->cmd.req = NULL;
501 fu->cmd.buf = NULL;
504 static void uasp_cleanup_old_alt(struct f_uas *fu)
508 if (!(fu->flags & USBG_ENABLED))
511 usb_ep_disable(fu->ep_in);
512 usb_ep_disable(fu->ep_out);
513 usb_ep_disable(fu->ep_status);
514 usb_ep_disable(fu->ep_cmd);
517 uasp_cleanup_one_stream(fu, &fu->stream[i]);
518 uasp_free_cmdreq(fu);
526 struct f_uas *fu = cmd->fu;
527 struct usb_gadget *gadget = fuas_to_gadget(fu);
580 struct f_uas *fu = cmd->fu;
591 ret = usb_ep_queue(fu->ep_in, stream->req_in, GFP_ATOMIC);
600 ret = usb_ep_queue(fu->ep_out, stream->req_out, GFP_ATOMIC);
607 ret = usb_ep_queue(fu->ep_status, stream->req_status,
615 usb_ep_queue(fu->ep_cmd, fu->cmd.req, GFP_ATOMIC);
629 struct f_uas *fu = cmd->fu;
636 cmd->fu = fu;
638 return usb_ep_queue(fu->ep_status, stream->req_status, GFP_ATOMIC);
643 struct f_uas *fu = cmd->fu;
648 cmd->fu = fu;
651 if (fu->flags & USBG_USE_STREAMS) {
656 ret = usb_ep_queue(fu->ep_in, stream->req_in, GFP_ATOMIC);
675 ret = usb_ep_queue(fu->ep_status, stream->req_status,
686 struct f_uas *fu = cmd->fu;
693 cmd->fu = fu;
697 if (fu->flags & USBG_USE_STREAMS) {
702 ret = usb_ep_queue(fu->ep_out, stream->req_out, GFP_ATOMIC);
718 ret = usb_ep_queue(fu->ep_status, stream->req_status,
734 struct f_uas *fu = req->context;
740 ret = usbg_submit_command(fu, req->buf, req->actual);
749 usb_ep_queue(fu->ep_cmd, fu->cmd.req, GFP_ATOMIC);
752 static int uasp_alloc_stream_res(struct f_uas *fu, struct uas_stream *stream)
754 stream->req_in = usb_ep_alloc_request(fu->ep_in, GFP_KERNEL);
758 stream->req_out = usb_ep_alloc_request(fu->ep_out, GFP_KERNEL);
762 stream->req_status = usb_ep_alloc_request(fu->ep_status, GFP_KERNEL);
768 usb_ep_free_request(fu->ep_status, stream->req_status);
771 usb_ep_free_request(fu->ep_out, stream->req_out);
777 static int uasp_alloc_cmd(struct f_uas *fu)
779 fu->cmd.req = usb_ep_alloc_request(fu->ep_cmd, GFP_KERNEL);
780 if (!fu->cmd.req)
783 fu->cmd.buf = kmalloc(fu->ep_cmd->maxpacket, GFP_KERNEL);
784 if (!fu->cmd.buf)
787 fu->cmd.req->complete = uasp_cmd_complete;
788 fu->cmd.req->buf = fu->cmd.buf;
789 fu->cmd.req->length = fu->ep_cmd->maxpacket;
790 fu->cmd.req->context = fu;
794 usb_ep_free_request(fu->ep_cmd, fu->cmd.req);
799 static void uasp_setup_stream_res(struct f_uas *fu, int max_streams)
804 struct uas_stream *s = &fu->stream[i];
812 static int uasp_prepare_reqs(struct f_uas *fu)
818 if (fu->flags & USBG_USE_STREAMS)
824 ret = uasp_alloc_stream_res(fu, &fu->stream[i]);
829 ret = uasp_alloc_cmd(fu);
832 uasp_setup_stream_res(fu, max_streams);
834 ret = usb_ep_queue(fu->ep_cmd, fu->cmd.req, GFP_ATOMIC);
841 uasp_free_cmdreq(fu);
846 uasp_cleanup_one_stream(fu, &fu->stream[i - 1]);
854 static void uasp_set_alt(struct f_uas *fu)
856 struct usb_function *f = &fu->function;
860 fu->flags = USBG_IS_UAS;
863 fu->flags |= USBG_USE_STREAMS;
865 config_ep_by_speed(gadget, f, fu->ep_in);
866 ret = usb_ep_enable(fu->ep_in);
870 config_ep_by_speed(gadget, f, fu->ep_out);
871 ret = usb_ep_enable(fu->ep_out);
875 config_ep_by_speed(gadget, f, fu->ep_cmd);
876 ret = usb_ep_enable(fu->ep_cmd);
879 config_ep_by_speed(gadget, f, fu->ep_status);
880 ret = usb_ep_enable(fu->ep_status);
884 ret = uasp_prepare_reqs(fu);
887 fu->flags |= USBG_ENABLED;
892 usb_ep_disable(fu->ep_status);
894 usb_ep_disable(fu->ep_cmd);
896 usb_ep_disable(fu->ep_out);
898 usb_ep_disable(fu->ep_in);
900 fu->flags = 0;
991 struct f_uas *fu = cmd->fu;
992 struct usb_gadget *gadget = fuas_to_gadget(fu);
1016 struct f_uas *fu = cmd->fu;
1018 if (fu->flags & USBG_IS_BOT)
1028 struct f_uas *fu = cmd->fu;
1030 if (fu->flags & USBG_IS_BOT)
1040 struct f_uas *fu = cmd->fu;
1042 if (fu->flags & USBG_IS_BOT)
1057 tpg = cmd->fu->tpg;
1081 static int usbg_submit_command(struct f_uas *fu,
1101 cmd->fu = fu;
1107 tpg = fu->tpg;
1115 if (fu->flags & USBG_USE_STREAMS) {
1119 cmd->stream = &fu->stream[0];
1121 cmd->stream = &fu->stream[cmd->tag - 1];
1123 cmd->stream = &fu->stream[0];
1173 tpg = cmd->fu->tpg;
1197 static int bot_submit_command(struct f_uas *fu,
1225 cmd->fu = fu;
1231 tpg = fu->tpg;
1455 struct f_uas *fu = cmd->fu;
1457 if (fu->flags & USBG_IS_BOT)
2237 struct f_uas *fu = to_f_uas(f);
2249 fu->iface = iface;
2255 ep->driver_data = fu;
2256 fu->ep_in = ep;
2262 ep->driver_data = fu;
2263 fu->ep_out = ep;
2269 ep->driver_data = fu;
2270 fu->ep_status = ep;
2276 ep->driver_data = fu;
2277 fu->ep_cmd = ep;
2301 give_back_ep(&fu->ep_in);
2302 give_back_ep(&fu->ep_out);
2303 give_back_ep(&fu->ep_status);
2304 give_back_ep(&fu->ep_cmd);
2310 struct f_uas *fu = to_f_uas(f);
2313 kfree(fu);
2318 struct f_uas *fu;
2326 struct f_uas *fu = work->fu;
2331 if (fu->flags & USBG_IS_BOT)
2332 bot_cleanup_old_alt(fu);
2333 if (fu->flags & USBG_IS_UAS)
2334 uasp_cleanup_old_alt(fu);
2337 bot_set_alt(fu);
2339 uasp_set_alt(fu);
2340 usb_composite_setup_continue(fu->function.config->cdev);
2345 struct f_uas *fu = to_f_uas(f);
2354 work->fu = fu;
2364 struct f_uas *fu = to_f_uas(f);
2366 if (fu->flags & USBG_IS_UAS)
2367 uasp_cleanup_old_alt(fu);
2368 else if (fu->flags & USBG_IS_BOT)
2369 bot_cleanup_old_alt(fu);
2370 fu->flags = 0;
2376 struct f_uas *fu = to_f_uas(f);
2378 if (!(fu->flags & USBG_IS_BOT))
2386 struct f_uas *fu;
2389 fu = kzalloc(sizeof(*fu), GFP_KERNEL);
2390 if (!fu)
2392 fu->function.name = "Target Function";
2393 fu->function.bind = usbg_bind;
2394 fu->function.unbind = usbg_unbind;
2395 fu->function.set_alt = usbg_set_alt;
2396 fu->function.setup = usbg_setup;
2397 fu->function.disable = usbg_disable;
2398 fu->tpg = the_only_tpg_I_currently_have;
2403 ret = usb_add_function(c, &fu->function);
2409 kfree(fu);