@@ -1544,7 +1544,6 @@ static int dwc3_prepare_trbs_sg(struct dwc3_ep *dep,
1544
1544
if (!last_sg )
1545
1545
req -> start_sg = sg_next (s );
1546
1546
1547
- req -> num_queued_sgs ++ ;
1548
1547
req -> num_pending_sgs -- ;
1549
1548
1550
1549
/*
@@ -1625,9 +1624,7 @@ static int dwc3_prepare_trbs(struct dwc3_ep *dep)
1625
1624
if (ret )
1626
1625
return ret ;
1627
1626
1628
- req -> sg = req -> request .sg ;
1629
- req -> start_sg = req -> sg ;
1630
- req -> num_queued_sgs = 0 ;
1627
+ req -> start_sg = req -> request .sg ;
1631
1628
req -> num_pending_sgs = req -> request .num_mapped_sgs ;
1632
1629
1633
1630
if (req -> num_pending_sgs > 0 ) {
@@ -3472,40 +3469,26 @@ static int dwc3_gadget_ep_reclaim_trb_sg(struct dwc3_ep *dep,
3472
3469
int status )
3473
3470
{
3474
3471
struct dwc3_trb * trb ;
3475
- struct scatterlist * sg = req -> sg ;
3476
- struct scatterlist * s ;
3477
- unsigned int num_queued = req -> num_queued_sgs ;
3472
+ unsigned int num_completed_trbs = req -> num_trbs ;
3478
3473
unsigned int i ;
3479
3474
int ret = 0 ;
3480
3475
3481
- for_each_sg ( sg , s , num_queued , i ) {
3476
+ for ( i = 0 ; i < num_completed_trbs ; i ++ ) {
3482
3477
trb = & dep -> trb_pool [dep -> trb_dequeue ];
3483
3478
3484
- req -> sg = sg_next (s );
3485
- req -> num_queued_sgs -- ;
3486
-
3487
3479
ret = dwc3_gadget_ep_reclaim_completed_trb (dep , req ,
3488
- trb , event , status , true);
3480
+ trb , event , status ,
3481
+ !!(trb -> ctrl & DWC3_TRB_CTRL_CHN ));
3489
3482
if (ret )
3490
3483
break ;
3491
3484
}
3492
3485
3493
3486
return ret ;
3494
3487
}
3495
3488
3496
- static int dwc3_gadget_ep_reclaim_trb_linear (struct dwc3_ep * dep ,
3497
- struct dwc3_request * req , const struct dwc3_event_depevt * event ,
3498
- int status )
3499
- {
3500
- struct dwc3_trb * trb = & dep -> trb_pool [dep -> trb_dequeue ];
3501
-
3502
- return dwc3_gadget_ep_reclaim_completed_trb (dep , req , trb ,
3503
- event , status , false);
3504
- }
3505
-
3506
3489
static bool dwc3_gadget_ep_request_completed (struct dwc3_request * req )
3507
3490
{
3508
- return req -> num_pending_sgs == 0 && req -> num_queued_sgs == 0 ;
3491
+ return req -> num_pending_sgs == 0 && req -> num_trbs == 0 ;
3509
3492
}
3510
3493
3511
3494
static int dwc3_gadget_ep_cleanup_completed_request (struct dwc3_ep * dep ,
@@ -3515,24 +3498,13 @@ static int dwc3_gadget_ep_cleanup_completed_request(struct dwc3_ep *dep,
3515
3498
int request_status ;
3516
3499
int ret ;
3517
3500
3518
- if (req -> request .num_mapped_sgs )
3519
- ret = dwc3_gadget_ep_reclaim_trb_sg (dep , req , event ,
3520
- status );
3521
- else
3522
- ret = dwc3_gadget_ep_reclaim_trb_linear (dep , req , event ,
3523
- status );
3501
+ ret = dwc3_gadget_ep_reclaim_trb_sg (dep , req , event , status );
3524
3502
3525
3503
req -> request .actual = req -> request .length - req -> remaining ;
3526
3504
3527
3505
if (!dwc3_gadget_ep_request_completed (req ))
3528
3506
goto out ;
3529
3507
3530
- if (req -> needs_extra_trb ) {
3531
- ret = dwc3_gadget_ep_reclaim_trb_linear (dep , req , event ,
3532
- status );
3533
- req -> needs_extra_trb = false;
3534
- }
3535
-
3536
3508
/*
3537
3509
* The event status only reflects the status of the TRB with IOC set.
3538
3510
* For the requests that don't set interrupt on completion, the driver
0 commit comments