Commit 92d1635d authored by Vardan Mikayelyan's avatar Vardan Mikayelyan Committed by Felipe Balbi

usb: dwc2: gadget: Add dwc2_gadget_incr_frame_num()

Increases and checks targeted frame number of current ep
if overrun happened, sets flag and masks with DSTS_SOFFN_LIMIT

Added following fields to struct dwc2_hsotg_ep
-target_frame: Targeted frame num to setup next ISOC transfer
-frame_overrun: Indicates SOF number overrun in DSTS
Tested-by: default avatarJohn Keeping <john@metanate.com>
Signed-off-by: default avatarVardan Mikayelyan <mvardan@synopsys.com>
Signed-off-by: default avatarJohn Youn <johnyoun@synopsys.com>
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent 6b58cb07
...@@ -177,6 +177,8 @@ struct dwc2_hsotg_req; ...@@ -177,6 +177,8 @@ struct dwc2_hsotg_req;
* @fifo_load: The amount of data loaded into the FIFO (periodic IN) * @fifo_load: The amount of data loaded into the FIFO (periodic IN)
* @last_load: The offset of data for the last start of request. * @last_load: The offset of data for the last start of request.
* @size_loaded: The last loaded size for DxEPTSIZE for periodic IN * @size_loaded: The last loaded size for DxEPTSIZE for periodic IN
* @target_frame: Targeted frame num to setup next ISOC transfer
* @frame_overrun: Indicates SOF number overrun in DSTS
* *
* This is the driver's state for each registered enpoint, allowing it * This is the driver's state for each registered enpoint, allowing it
* to keep track of transactions that need doing. Each endpoint has a * to keep track of transactions that need doing. Each endpoint has a
...@@ -214,6 +216,9 @@ struct dwc2_hsotg_ep { ...@@ -214,6 +216,9 @@ struct dwc2_hsotg_ep {
unsigned int isochronous:1; unsigned int isochronous:1;
unsigned int send_zlp:1; unsigned int send_zlp:1;
unsigned int has_correct_parity:1; unsigned int has_correct_parity:1;
unsigned int target_frame;
#define TARGET_FRAME_INITIAL 0xFFFFFFFF
bool frame_overrun;
char name[10]; char name[10];
}; };
......
...@@ -96,6 +96,25 @@ static inline bool using_dma(struct dwc2_hsotg *hsotg) ...@@ -96,6 +96,25 @@ static inline bool using_dma(struct dwc2_hsotg *hsotg)
return hsotg->g_using_dma; return hsotg->g_using_dma;
} }
/**
* dwc2_gadget_incr_frame_num - Increments the targeted frame number.
* @hs_ep: The endpoint
* @increment: The value to increment by
*
* This function will also check if the frame number overruns DSTS_SOFFN_LIMIT.
* If an overrun occurs it will wrap the value and set the frame_overrun flag.
*/
static inline void dwc2_gadget_incr_frame_num(struct dwc2_hsotg_ep *hs_ep)
{
hs_ep->target_frame += hs_ep->interval;
if (hs_ep->target_frame > DSTS_SOFFN_LIMIT) {
hs_ep->frame_overrun = 1;
hs_ep->target_frame &= DSTS_SOFFN_LIMIT;
} else {
hs_ep->frame_overrun = 0;
}
}
/** /**
* dwc2_hsotg_en_gsint - enable one or more of the general interrupt * dwc2_hsotg_en_gsint - enable one or more of the general interrupt
* @hsotg: The device state * @hsotg: The device state
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment