Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

usb: gadget: add usb_endpoint_descriptor to struct usb_ep

Change usb_ep_enable() prototype to use endpoint
descriptor from usb_ep.

This optimization spares the FDs from saving the
endpoint chosen descriptor. This optimization is
not full though. To fully exploit this change, one
needs to update all the UDCs as well since in the
current implementation each of them saves the
endpoint descriptor in it's internal (and extended)
endpoint structure.

Signed-off-by: Tatyana Brokhman <tlinder@codeaurora.org>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Tatyana Brokhman and committed by
Greg Kroah-Hartman
72c973dd 0f91349b

+111 -117
+5 -3
drivers/usb/gadget/dbgp.c
··· 173 173 174 174 static int __enable_ep(struct usb_ep *ep, struct usb_endpoint_descriptor *desc) 175 175 { 176 - int err = usb_ep_enable(ep, desc); 176 + int err; 177 + ep->desc = desc; 178 + err = usb_ep_enable(ep); 177 179 ep->driver_data = dbgp.gadget; 178 180 return err; 179 181 } ··· 270 268 dbgp.serial->in = dbgp.i_ep; 271 269 dbgp.serial->out = dbgp.o_ep; 272 270 273 - dbgp.serial->in_desc = &i_desc; 274 - dbgp.serial->out_desc = &o_desc; 271 + dbgp.serial->in->desc = &i_desc; 272 + dbgp.serial->out->desc = &o_desc; 275 273 276 274 if (gserial_setup(gadget, 1) < 0) { 277 275 stp = 3;
+4 -5
drivers/usb/gadget/f_acm.c
··· 62 62 struct acm_ep_descs hs; 63 63 64 64 struct usb_ep *notify; 65 - struct usb_endpoint_descriptor *notify_desc; 66 65 struct usb_request *notify_req; 67 66 68 67 struct usb_cdc_line_coding port_line_coding; /* 8-N-1 etc */ ··· 404 405 usb_ep_disable(acm->notify); 405 406 } else { 406 407 VDBG(cdev, "init acm ctrl interface %d\n", intf); 407 - acm->notify_desc = ep_choose(cdev->gadget, 408 + acm->notify->desc = ep_choose(cdev->gadget, 408 409 acm->hs.notify, 409 410 acm->fs.notify); 410 411 } 411 - usb_ep_enable(acm->notify, acm->notify_desc); 412 + usb_ep_enable(acm->notify); 412 413 acm->notify->driver_data = acm; 413 414 414 415 } else if (intf == acm->data_id) { ··· 417 418 gserial_disconnect(&acm->port); 418 419 } else { 419 420 DBG(cdev, "activate acm ttyGS%d\n", acm->port_num); 420 - acm->port.in_desc = ep_choose(cdev->gadget, 421 + acm->port.in->desc = ep_choose(cdev->gadget, 421 422 acm->hs.in, acm->fs.in); 422 - acm->port.out_desc = ep_choose(cdev->gadget, 423 + acm->port.out->desc = ep_choose(cdev->gadget, 423 424 acm->hs.out, acm->fs.out); 424 425 } 425 426 gserial_connect(&acm->port, acm->port_num);
+2 -3
drivers/usb/gadget/f_audio.c
··· 279 279 280 280 /* endpoints handle full and/or high speeds */ 281 281 struct usb_ep *out_ep; 282 - struct usb_endpoint_descriptor *out_desc; 283 282 284 283 spinlock_t lock; 285 284 struct f_audio_buf *copy_buf; ··· 574 575 575 576 if (intf == 1) { 576 577 if (alt == 1) { 577 - usb_ep_enable(out_ep, audio->out_desc); 578 + usb_ep_enable(out_ep); 578 579 out_ep->driver_data = audio; 579 580 audio->copy_buf = f_audio_buffer_alloc(audio_buf_size); 580 581 if (IS_ERR(audio->copy_buf)) ··· 676 677 if (!ep) 677 678 goto fail; 678 679 audio->out_ep = ep; 680 + audio->out_ep->desc = &as_out_ep_desc; 679 681 ep->driver_data = cdev; /* claim */ 680 682 681 683 status = -ENOMEM; ··· 776 776 audio->card.func.set_alt = f_audio_set_alt; 777 777 audio->card.func.setup = f_audio_setup; 778 778 audio->card.func.disable = f_audio_disable; 779 - audio->out_desc = &as_out_ep_desc; 780 779 781 780 control_selector_init(audio); 782 781
+8 -9
drivers/usb/gadget/f_ecm.c
··· 68 68 struct ecm_ep_descs hs; 69 69 70 70 struct usb_ep *notify; 71 - struct usb_endpoint_descriptor *notify_desc; 72 71 struct usb_request *notify_req; 73 72 u8 notify_state; 74 73 bool is_open; ··· 465 466 usb_ep_disable(ecm->notify); 466 467 } else { 467 468 VDBG(cdev, "init ecm ctrl %d\n", intf); 468 - ecm->notify_desc = ep_choose(cdev->gadget, 469 + ecm->notify->desc = ep_choose(cdev->gadget, 469 470 ecm->hs.notify, 470 471 ecm->fs.notify); 471 472 } 472 - usb_ep_enable(ecm->notify, ecm->notify_desc); 473 + usb_ep_enable(ecm->notify); 473 474 ecm->notify->driver_data = ecm; 474 475 475 476 /* Data interface has two altsettings, 0 and 1 */ ··· 482 483 gether_disconnect(&ecm->port); 483 484 } 484 485 485 - if (!ecm->port.in) { 486 + if (!ecm->port.in_ep->desc) { 486 487 DBG(cdev, "init ecm\n"); 487 - ecm->port.in = ep_choose(cdev->gadget, 488 + ecm->port.in_ep->desc = ep_choose(cdev->gadget, 488 489 ecm->hs.in, ecm->fs.in); 489 - ecm->port.out = ep_choose(cdev->gadget, 490 + ecm->port.out_ep->desc = ep_choose(cdev->gadget, 490 491 ecm->hs.out, ecm->fs.out); 491 492 } 492 493 ··· 548 549 if (ecm->notify->driver_data) { 549 550 usb_ep_disable(ecm->notify); 550 551 ecm->notify->driver_data = NULL; 551 - ecm->notify_desc = NULL; 552 + ecm->notify->desc = NULL; 552 553 } 553 554 } 554 555 ··· 722 723 /* we might as well release our claims on endpoints */ 723 724 if (ecm->notify) 724 725 ecm->notify->driver_data = NULL; 725 - if (ecm->port.out) 726 + if (ecm->port.out_ep->desc) 726 727 ecm->port.out_ep->driver_data = NULL; 727 - if (ecm->port.in) 728 + if (ecm->port.in_ep->desc) 728 729 ecm->port.in_ep->driver_data = NULL; 729 730 730 731 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
+5 -5
drivers/usb/gadget/f_eem.c
··· 176 176 gether_disconnect(&eem->port); 177 177 } 178 178 179 - if (!eem->port.in) { 179 + if (!eem->port.in_ep->desc) { 180 180 DBG(cdev, "init eem\n"); 181 - eem->port.in = ep_choose(cdev->gadget, 181 + eem->port.in_ep->desc = ep_choose(cdev->gadget, 182 182 eem->hs.in, eem->fs.in); 183 - eem->port.out = ep_choose(cdev->gadget, 183 + eem->port.out_ep->desc = ep_choose(cdev->gadget, 184 184 eem->hs.out, eem->fs.out); 185 185 } 186 186 ··· 289 289 usb_free_descriptors(f->descriptors); 290 290 291 291 /* we might as well release our claims on endpoints */ 292 - if (eem->port.out) 292 + if (eem->port.out_ep->desc) 293 293 eem->port.out_ep->driver_data = NULL; 294 - if (eem->port.in) 294 + if (eem->port.in_ep->desc) 295 295 eem->port.in_ep->driver_data = NULL; 296 296 297 297 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
+2 -1
drivers/usb/gadget/f_fs.c
··· 1544 1544 ds = ep->descs[ep->descs[1] ? 1 : 0]; 1545 1545 1546 1546 ep->ep->driver_data = ep; 1547 - ret = usb_ep_enable(ep->ep, ds); 1547 + ep->ep->desc = ds; 1548 + ret = usb_ep_enable(ep->ep); 1548 1549 if (likely(!ret)) { 1549 1550 epfile->ep = ep; 1550 1551 epfile->in = usb_endpoint_dir_in(ds);
+2 -3
drivers/usb/gadget/f_hid.c
··· 416 416 { 417 417 struct usb_composite_dev *cdev = f->config->cdev; 418 418 struct f_hidg *hidg = func_to_hidg(f); 419 - const struct usb_endpoint_descriptor *ep_desc; 420 419 int status = 0; 421 420 422 421 VDBG(cdev, "hidg_set_alt intf:%d alt:%d\n", intf, alt); ··· 425 426 if (hidg->in_ep->driver_data != NULL) 426 427 usb_ep_disable(hidg->in_ep); 427 428 428 - ep_desc = ep_choose(f->config->cdev->gadget, 429 + hidg->in_ep->desc = ep_choose(f->config->cdev->gadget, 429 430 hidg->hs_in_ep_desc, hidg->fs_in_ep_desc); 430 - status = usb_ep_enable(hidg->in_ep, ep_desc); 431 + status = usb_ep_enable(hidg->in_ep); 431 432 if (status < 0) { 432 433 ERROR(cdev, "Enable endpoint FAILED!\n"); 433 434 goto fail;
+6 -8
drivers/usb/gadget/f_loopback.c
··· 250 250 enable_loopback(struct usb_composite_dev *cdev, struct f_loopback *loop) 251 251 { 252 252 int result = 0; 253 - const struct usb_endpoint_descriptor *src, *sink; 254 253 struct usb_ep *ep; 255 254 struct usb_request *req; 256 255 unsigned i; 257 256 258 - src = ep_choose(cdev->gadget, 259 - &hs_loop_source_desc, &fs_loop_source_desc); 260 - sink = ep_choose(cdev->gadget, 261 - &hs_loop_sink_desc, &fs_loop_sink_desc); 262 - 263 257 /* one endpoint writes data back IN to the host */ 264 258 ep = loop->in_ep; 265 - result = usb_ep_enable(ep, src); 259 + ep->desc = ep_choose(cdev->gadget, 260 + &hs_loop_source_desc, &fs_loop_source_desc); 261 + result = usb_ep_enable(ep); 266 262 if (result < 0) 267 263 return result; 268 264 ep->driver_data = loop; 269 265 270 266 /* one endpoint just reads OUT packets */ 271 267 ep = loop->out_ep; 272 - result = usb_ep_enable(ep, sink); 268 + ep->desc = ep_choose(cdev->gadget, 269 + &hs_loop_sink_desc, &fs_loop_sink_desc); 270 + result = usb_ep_enable(ep); 273 271 if (result < 0) { 274 272 fail0: 275 273 ep = loop->in_ep;
+2 -1
drivers/usb/gadget/f_mass_storage.c
··· 2330 2330 int rc; 2331 2331 2332 2332 ep->driver_data = common; 2333 - rc = usb_ep_enable(ep, d); 2333 + ep->desc = (struct usb_endpoint_descriptor *)d; 2334 + rc = usb_ep_enable(ep); 2334 2335 if (rc) 2335 2336 ERROR(common, "can't enable %s, result %d\n", ep->name, rc); 2336 2337 return rc;
+8 -9
drivers/usb/gadget/f_ncm.c
··· 70 70 struct ncm_ep_descs hs; 71 71 72 72 struct usb_ep *notify; 73 - struct usb_endpoint_descriptor *notify_desc; 74 73 struct usb_request *notify_req; 75 74 u8 notify_state; 76 75 bool is_open; ··· 803 804 usb_ep_disable(ncm->notify); 804 805 } else { 805 806 DBG(cdev, "init ncm ctrl %d\n", intf); 806 - ncm->notify_desc = ep_choose(cdev->gadget, 807 + ncm->notify->desc = ep_choose(cdev->gadget, 807 808 ncm->hs.notify, 808 809 ncm->fs.notify); 809 810 } 810 - usb_ep_enable(ncm->notify, ncm->notify_desc); 811 + usb_ep_enable(ncm->notify); 811 812 ncm->notify->driver_data = ncm; 812 813 813 814 /* Data interface has two altsettings, 0 and 1 */ ··· 828 829 if (alt == 1) { 829 830 struct net_device *net; 830 831 831 - if (!ncm->port.in) { 832 + if (!ncm->port.in_ep->desc) { 832 833 DBG(cdev, "init ncm\n"); 833 - ncm->port.in = ep_choose(cdev->gadget, 834 + ncm->port.in_ep->desc = ep_choose(cdev->gadget, 834 835 ncm->hs.in, 835 836 ncm->fs.in); 836 - ncm->port.out = ep_choose(cdev->gadget, 837 + ncm->port.out_ep->desc = ep_choose(cdev->gadget, 837 838 ncm->hs.out, 838 839 ncm->fs.out); 839 840 } ··· 1110 1111 if (ncm->notify->driver_data) { 1111 1112 usb_ep_disable(ncm->notify); 1112 1113 ncm->notify->driver_data = NULL; 1113 - ncm->notify_desc = NULL; 1114 + ncm->notify->desc = NULL; 1114 1115 } 1115 1116 } 1116 1117 ··· 1287 1288 /* we might as well release our claims on endpoints */ 1288 1289 if (ncm->notify) 1289 1290 ncm->notify->driver_data = NULL; 1290 - if (ncm->port.out) 1291 + if (ncm->port.out_ep->desc) 1291 1292 ncm->port.out_ep->driver_data = NULL; 1292 - if (ncm->port.in) 1293 + if (ncm->port.in_ep->desc) 1293 1294 ncm->port.in_ep->driver_data = NULL; 1294 1295 1295 1296 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
+3 -3
drivers/usb/gadget/f_obex.c
··· 227 227 gserial_disconnect(&obex->port); 228 228 } 229 229 230 - if (!obex->port.in_desc) { 230 + if (!obex->port.in->desc) { 231 231 DBG(cdev, "init obex ttyGS%d\n", obex->port_num); 232 - obex->port.in_desc = ep_choose(cdev->gadget, 232 + obex->port.in->desc = ep_choose(cdev->gadget, 233 233 obex->hs.obex_in, obex->fs.obex_in); 234 - obex->port.out_desc = ep_choose(cdev->gadget, 234 + obex->port.out->desc = ep_choose(cdev->gadget, 235 235 obex->hs.obex_out, obex->fs.obex_out); 236 236 } 237 237
+4 -5
drivers/usb/gadget/f_phonet.c
··· 427 427 spin_lock(&port->lock); 428 428 __pn_reset(f); 429 429 if (alt == 1) { 430 - struct usb_endpoint_descriptor *out, *in; 431 430 int i; 432 431 433 - out = ep_choose(gadget, 432 + fp->out_ep->desc = ep_choose(gadget, 434 433 &pn_hs_sink_desc, 435 434 &pn_fs_sink_desc); 436 - in = ep_choose(gadget, 435 + fp->in_ep->desc = ep_choose(gadget, 437 436 &pn_hs_source_desc, 438 437 &pn_fs_source_desc); 439 - usb_ep_enable(fp->out_ep, out); 440 - usb_ep_enable(fp->in_ep, in); 438 + usb_ep_enable(fp->out_ep); 439 + usb_ep_enable(fp->in_ep); 441 440 442 441 port->usb = fp; 443 442 fp->out_ep->driver_data = fp;
+7 -8
drivers/usb/gadget/f_rndis.c
··· 92 92 struct rndis_ep_descs hs; 93 93 94 94 struct usb_ep *notify; 95 - struct usb_endpoint_descriptor *notify_desc; 96 95 struct usb_request *notify_req; 97 96 atomic_t notify_count; 98 97 }; ··· 485 486 usb_ep_disable(rndis->notify); 486 487 } else { 487 488 VDBG(cdev, "init rndis ctrl %d\n", intf); 488 - rndis->notify_desc = ep_choose(cdev->gadget, 489 + rndis->notify->desc = ep_choose(cdev->gadget, 489 490 rndis->hs.notify, 490 491 rndis->fs.notify); 491 492 } 492 - usb_ep_enable(rndis->notify, rndis->notify_desc); 493 + usb_ep_enable(rndis->notify); 493 494 rndis->notify->driver_data = rndis; 494 495 495 496 } else if (intf == rndis->data_id) { ··· 500 501 gether_disconnect(&rndis->port); 501 502 } 502 503 503 - if (!rndis->port.in) { 504 + if (!rndis->port.in_ep->desc) { 504 505 DBG(cdev, "init rndis\n"); 505 - rndis->port.in = ep_choose(cdev->gadget, 506 + rndis->port.in_ep->desc = ep_choose(cdev->gadget, 506 507 rndis->hs.in, rndis->fs.in); 507 - rndis->port.out = ep_choose(cdev->gadget, 508 + rndis->port.out_ep->desc = ep_choose(cdev->gadget, 508 509 rndis->hs.out, rndis->fs.out); 509 510 } 510 511 ··· 737 738 /* we might as well release our claims on endpoints */ 738 739 if (rndis->notify) 739 740 rndis->notify->driver_data = NULL; 740 - if (rndis->port.out) 741 + if (rndis->port.out_ep->desc) 741 742 rndis->port.out_ep->driver_data = NULL; 742 - if (rndis->port.in) 743 + if (rndis->port.in_ep->desc) 743 744 rndis->port.in_ep->driver_data = NULL; 744 745 745 746 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
+2 -2
drivers/usb/gadget/f_serial.c
··· 138 138 gserial_disconnect(&gser->port); 139 139 } else { 140 140 DBG(cdev, "activate generic ttyGS%d\n", gser->port_num); 141 - gser->port.in_desc = ep_choose(cdev->gadget, 141 + gser->port.in->desc = ep_choose(cdev->gadget, 142 142 gser->hs.in, gser->fs.in); 143 - gser->port.out_desc = ep_choose(cdev->gadget, 143 + gser->port.out->desc = ep_choose(cdev->gadget, 144 144 gser->hs.out, gser->fs.out); 145 145 } 146 146 gserial_connect(&gser->port, gser->port_num);
+4 -6
drivers/usb/gadget/f_sourcesink.c
··· 343 343 enable_source_sink(struct usb_composite_dev *cdev, struct f_sourcesink *ss) 344 344 { 345 345 int result = 0; 346 - const struct usb_endpoint_descriptor *src, *sink; 347 346 struct usb_ep *ep; 348 - 349 - src = ep_choose(cdev->gadget, &hs_source_desc, &fs_source_desc); 350 - sink = ep_choose(cdev->gadget, &hs_sink_desc, &fs_sink_desc); 351 347 352 348 /* one endpoint writes (sources) zeroes IN (to the host) */ 353 349 ep = ss->in_ep; 354 - result = usb_ep_enable(ep, src); 350 + ep->desc = ep_choose(cdev->gadget, &hs_source_desc, &fs_source_desc); 351 + result = usb_ep_enable(ep); 355 352 if (result < 0) 356 353 return result; 357 354 ep->driver_data = ss; ··· 364 367 365 368 /* one endpoint reads (sinks) anything OUT (from the host) */ 366 369 ep = ss->out_ep; 367 - result = usb_ep_enable(ep, sink); 370 + ep->desc = ep_choose(cdev->gadget, &hs_sink_desc, &fs_sink_desc); 371 + result = usb_ep_enable(ep); 368 372 if (result < 0) 369 373 goto fail; 370 374 ep->driver_data = ss;
+4 -4
drivers/usb/gadget/f_subset.c
··· 243 243 } 244 244 245 245 DBG(cdev, "init + activate cdc subset\n"); 246 - geth->port.in = ep_choose(cdev->gadget, 246 + geth->port.in_ep->desc = ep_choose(cdev->gadget, 247 247 geth->hs.in, geth->fs.in); 248 - geth->port.out = ep_choose(cdev->gadget, 248 + geth->port.out_ep->desc = ep_choose(cdev->gadget, 249 249 geth->hs.out, geth->fs.out); 250 250 251 251 net = gether_connect(&geth->port); ··· 334 334 335 335 fail: 336 336 /* we might as well release our claims on endpoints */ 337 - if (geth->port.out) 337 + if (geth->port.out_ep->desc) 338 338 geth->port.out_ep->driver_data = NULL; 339 - if (geth->port.in) 339 + if (geth->port.in_ep->desc) 340 340 geth->port.in_ep->driver_data = NULL; 341 341 342 342 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
+4 -2
drivers/usb/gadget/f_uvc.c
··· 262 262 if (uvc->state != UVC_STATE_CONNECTED) 263 263 return 0; 264 264 265 - if (uvc->video.ep) 266 - usb_ep_enable(uvc->video.ep, &uvc_streaming_ep); 265 + if (uvc->video.ep) { 266 + uvc->video.ep->desc = &uvc_streaming_ep; 267 + usb_ep_enable(uvc->video.ep); 268 + } 267 269 268 270 memset(&v4l2_event, 0, sizeof(v4l2_event)); 269 271 v4l2_event.type = UVC_EVENT_STREAMON;
+2 -1
drivers/usb/gadget/file_storage.c
··· 2713 2713 int rc; 2714 2714 2715 2715 ep->driver_data = fsg; 2716 - rc = usb_ep_enable(ep, d); 2716 + ep->desc = d; 2717 + rc = usb_ep_enable(ep); 2717 2718 if (rc) 2718 2719 ERROR(fsg, "can't enable %s, result %d\n", ep->name, rc); 2719 2720 return rc;
+4 -2
drivers/usb/gadget/gmidi.c
··· 537 537 struct usb_ep *ep; 538 538 unsigned i; 539 539 540 - err = usb_ep_enable(dev->in_ep, &bulk_in_desc); 540 + dev->in_ep->desc = &bulk_in_desc; 541 + err = usb_ep_enable(dev->in_ep); 541 542 if (err) { 542 543 ERROR(dev, "can't start %s: %d\n", dev->in_ep->name, err); 543 544 goto fail; 544 545 } 545 546 dev->in_ep->driver_data = dev; 546 547 547 - err = usb_ep_enable(dev->out_ep, &bulk_out_desc); 548 + dev->out_ep->desc = &bulk_out_desc; 549 + err = usb_ep_enable(dev->out_ep); 548 550 if (err) { 549 551 ERROR(dev, "can't start %s: %d\n", dev->out_ep->name, err); 550 552 goto fail;
+4 -2
drivers/usb/gadget/inode.c
··· 832 832 switch (data->dev->gadget->speed) { 833 833 case USB_SPEED_LOW: 834 834 case USB_SPEED_FULL: 835 - value = usb_ep_enable (ep, &data->desc); 835 + ep->desc = &data->desc; 836 + value = usb_ep_enable(ep); 836 837 if (value == 0) 837 838 data->state = STATE_EP_ENABLED; 838 839 break; 839 840 #ifdef CONFIG_USB_GADGET_DUALSPEED 840 841 case USB_SPEED_HIGH: 841 842 /* fails if caller didn't provide that descriptor... */ 842 - value = usb_ep_enable (ep, &data->hs_desc); 843 + ep->desc = &data->hs_desc; 844 + value = usb_ep_enable(ep); 843 845 if (value == 0) 844 846 data->state = STATE_EP_ENABLED; 845 847 break;
+14 -12
drivers/usb/gadget/printer.c
··· 89 89 u8 config; 90 90 s8 interface; 91 91 struct usb_ep *in_ep, *out_ep; 92 - const struct usb_endpoint_descriptor 93 - *in, *out; 92 + 94 93 struct list_head rx_reqs; /* List of free RX structs */ 95 94 struct list_head rx_reqs_active; /* List of Active RX xfers */ 96 95 struct list_head rx_buffers; /* List of completed xfers */ ··· 894 895 { 895 896 int result = 0; 896 897 897 - dev->in = ep_desc(dev->gadget, &hs_ep_in_desc, &fs_ep_in_desc); 898 + dev->in_ep->desc = ep_desc(dev->gadget, &hs_ep_in_desc, &fs_ep_in_desc); 898 899 dev->in_ep->driver_data = dev; 899 900 900 - dev->out = ep_desc(dev->gadget, &hs_ep_out_desc, &fs_ep_out_desc); 901 + dev->out_ep->desc = ep_desc(dev->gadget, &hs_ep_out_desc, 902 + &fs_ep_out_desc); 901 903 dev->out_ep->driver_data = dev; 902 904 903 - result = usb_ep_enable(dev->in_ep, dev->in); 905 + result = usb_ep_enable(dev->in_ep); 904 906 if (result != 0) { 905 907 DBG(dev, "enable %s --> %d\n", dev->in_ep->name, result); 906 908 goto done; 907 909 } 908 910 909 - result = usb_ep_enable(dev->out_ep, dev->out); 911 + result = usb_ep_enable(dev->out_ep); 910 912 if (result != 0) { 911 913 DBG(dev, "enable %s --> %d\n", dev->in_ep->name, result); 912 914 goto done; ··· 918 918 if (result != 0) { 919 919 (void) usb_ep_disable(dev->in_ep); 920 920 (void) usb_ep_disable(dev->out_ep); 921 - dev->in = NULL; 922 - dev->out = NULL; 921 + dev->in_ep->desc = NULL; 922 + dev->out_ep->desc = NULL; 923 923 } 924 924 925 925 /* caller is responsible for cleanup on error */ ··· 933 933 934 934 DBG(dev, "%s\n", __func__); 935 935 936 - if (dev->in) 936 + if (dev->in_ep->desc) 937 937 usb_ep_disable(dev->in_ep); 938 938 939 - if (dev->out) 939 + if (dev->out_ep->desc) 940 940 usb_ep_disable(dev->out_ep); 941 941 942 + dev->in_ep->desc = NULL; 943 + dev->out_ep->desc = NULL; 942 944 dev->interface = -1; 943 945 } 944 946 ··· 1106 1104 list_add(&req->list, &dev->tx_reqs); 1107 1105 } 1108 1106 1109 - if (usb_ep_enable(dev->in_ep, dev->in)) 1107 + if (usb_ep_enable(dev->in_ep)) 1110 1108 DBG(dev, "Failed to enable USB in_ep\n"); 1111 - if (usb_ep_enable(dev->out_ep, dev->out)) 1109 + if (usb_ep_enable(dev->out_ep)) 1112 1110 DBG(dev, "Failed to enable USB out_ep\n"); 1113 1111 1114 1112 wake_up_interruptible(&dev->rx_wait);
+6 -6
drivers/usb/gadget/u_ether.c
··· 693 693 usb_ep_disable(link->out_ep); 694 694 if (netif_carrier_ok(net)) { 695 695 DBG(dev, "host still using in/out endpoints\n"); 696 - usb_ep_enable(link->in_ep, link->in); 697 - usb_ep_enable(link->out_ep, link->out); 696 + usb_ep_enable(link->in_ep); 697 + usb_ep_enable(link->out_ep); 698 698 } 699 699 } 700 700 spin_unlock_irqrestore(&dev->lock, flags); ··· 871 871 return ERR_PTR(-EINVAL); 872 872 873 873 link->in_ep->driver_data = dev; 874 - result = usb_ep_enable(link->in_ep, link->in); 874 + result = usb_ep_enable(link->in_ep); 875 875 if (result != 0) { 876 876 DBG(dev, "enable %s --> %d\n", 877 877 link->in_ep->name, result); ··· 879 879 } 880 880 881 881 link->out_ep->driver_data = dev; 882 - result = usb_ep_enable(link->out_ep, link->out); 882 + result = usb_ep_enable(link->out_ep); 883 883 if (result != 0) { 884 884 DBG(dev, "enable %s --> %d\n", 885 885 link->out_ep->name, result); ··· 969 969 } 970 970 spin_unlock(&dev->req_lock); 971 971 link->in_ep->driver_data = NULL; 972 - link->in = NULL; 972 + link->in_ep->desc = NULL; 973 973 974 974 usb_ep_disable(link->out_ep); 975 975 spin_lock(&dev->req_lock); ··· 984 984 } 985 985 spin_unlock(&dev->req_lock); 986 986 link->out_ep->driver_data = NULL; 987 - link->out = NULL; 987 + link->out_ep->desc = NULL; 988 988 989 989 /* finish forgetting about this USB link episode */ 990 990 dev->header_len = 0;
-4
drivers/usb/gadget/u_ether.h
··· 52 52 struct usb_ep *in_ep; 53 53 struct usb_ep *out_ep; 54 54 55 - /* descriptors match device speed at gether_connect() time */ 56 - struct usb_endpoint_descriptor *in; 57 - struct usb_endpoint_descriptor *out; 58 - 59 55 bool is_zlp_ok; 60 56 61 57 u16 cdc_filter;
+2 -2
drivers/usb/gadget/u_serial.c
··· 1247 1247 port = ports[port_num].port; 1248 1248 1249 1249 /* activate the endpoints */ 1250 - status = usb_ep_enable(gser->in, gser->in_desc); 1250 + status = usb_ep_enable(gser->in); 1251 1251 if (status < 0) 1252 1252 return status; 1253 1253 gser->in->driver_data = port; 1254 1254 1255 - status = usb_ep_enable(gser->out, gser->out_desc); 1255 + status = usb_ep_enable(gser->out); 1256 1256 if (status < 0) 1257 1257 goto fail_out; 1258 1258 gser->out->driver_data = port;
-2
drivers/usb/gadget/u_serial.h
··· 35 35 36 36 struct usb_ep *in; 37 37 struct usb_ep *out; 38 - struct usb_endpoint_descriptor *in_desc; 39 - struct usb_endpoint_descriptor *out_desc; 40 38 41 39 /* REVISIT avoid this CDC-ACM support harder ... */ 42 40 struct usb_cdc_line_coding port_line_coding; /* 9600-8-N-1 etc */
+7 -9
include/linux/usb/gadget.h
··· 132 132 * @maxpacket:The maximum packet size used on this endpoint. The initial 133 133 * value can sometimes be reduced (hardware allowing), according to 134 134 * the endpoint descriptor used to configure the endpoint. 135 - * @driver_data:for use by the gadget driver. all other fields are 136 - * read-only to gadget drivers. 135 + * @driver_data:for use by the gadget driver. 136 + * @desc: endpoint descriptor. This pointer is set before the endpoint is 137 + * enabled and remains valid until the endpoint is disabled. 137 138 * 138 139 * the bus controller driver lists all the general purpose endpoints in 139 140 * gadget->ep_list. the control endpoint (gadget->ep0) is not in that list, ··· 147 146 const struct usb_ep_ops *ops; 148 147 struct list_head ep_list; 149 148 unsigned maxpacket:16; 149 + const struct usb_endpoint_descriptor *desc; 150 150 }; 151 151 152 152 /*-------------------------------------------------------------------------*/ ··· 156 154 * usb_ep_enable - configure endpoint, making it usable 157 155 * @ep:the endpoint being configured. may not be the endpoint named "ep0". 158 156 * drivers discover endpoints through the ep_list of a usb_gadget. 159 - * @desc:descriptor for desired behavior. caller guarantees this pointer 160 - * remains valid until the endpoint is disabled; the data byte order 161 - * is little-endian (usb-standard). 162 157 * 163 - * when configurations are set, or when interface settings change, the driver 158 + * When configurations are set, or when interface settings change, the driver 164 159 * will enable or disable the relevant endpoints. while it is enabled, an 165 160 * endpoint may be used for i/o until the driver receives a disconnect() from 166 161 * the host or until the endpoint is disabled. ··· 172 173 * 173 174 * returns zero, or a negative error code. 174 175 */ 175 - static inline int usb_ep_enable(struct usb_ep *ep, 176 - const struct usb_endpoint_descriptor *desc) 176 + static inline int usb_ep_enable(struct usb_ep *ep) 177 177 { 178 - return ep->ops->enable(ep, desc); 178 + return ep->ops->enable(ep, ep->desc); 179 179 } 180 180 181 181 /**