**/
uint8_t SchProcCrcInd(Pst *pst, CrcIndInfo *crcInd)
{
- uint16_t count=0;
+ uint16_t crcCnt=0;
uint8_t ueId=0;
SchUlHqProcCb *hqP = NULLP;
Inst schInst = pst->dstInst - SCH_INST_START;
SchCellCb *cell = schCb[schInst].cells[schInst];
- while(count <crcInd->numCrcInd)
+ while(crcCnt < crcInd->numCrcInd)
{
GET_UE_ID(crcInd->crnti, ueId);
if (cell->raCb[ueId-1].raState == SCH_RA_STATE_MSG3_PENDING)
{
- if (crcInd->crcInd[count])
+ if (crcInd->crcInd[crcCnt])
{
/* failure case*/
if (cell->raCb[ueId-1].msg3HqProc.tbInfo.txCntr < cell->maxMsg3Tx)
if (cell->ueCb[ueId-1].hqUlmap[crcInd->timingInfo.slot]->hqList.count == 0)
{
DU_LOG("\n ERROR no harq stored in ul hq map at slot %d ue id %d\n",crcInd->timingInfo.slot, ueId);
+ crcCnt++;
continue;
}
if (cell->ueCb[ueId-1].hqUlmap[crcInd->timingInfo.slot]->hqList.first == 0)
{
DU_LOG("\n ERROR NULL harq stored in ul hq map at slot %d ue id %d\n",crcInd->timingInfo.slot, ueId);
+ crcCnt++;
continue;
}
hqP = (SchUlHqProcCb*) cell->ueCb[ueId-1].hqUlmap[crcInd->timingInfo.slot]->hqList.first->node;
if(hqP == NULLP)
{
+ crcCnt++;
continue;
}
else
{
- if (crcInd->crcInd[count])
+ if (crcInd->crcInd[crcCnt])
{
/* failure case*/
schUlHqProcessNack(hqP);
}
cmLListDelFrm(&(cell->ueCb[ueId-1].hqUlmap[crcInd->timingInfo.slot]->hqList), &hqP->ulSlotLnk);
}
- count++;
+ crcCnt++;
}
return ROK;
}
SchUlHqProcCb *ulHqP = NULLP;
CmLList *pendingUeNode;
CmLList *node;
- uint8_t ueId;
+ uint8_t ueId, ueCount = 0;
bool isRarPending = false, isRarScheduled = false;
bool isMsg4Pending = false, isMsg4Scheduled = false;
bool isDlMsgPending = false, isDlMsgScheduled = false;
bool isUlGrantPending = false, isUlGrantScheduled = false;
- bool isNodeFreed = false;
fcfsCell = (SchFcfsCellCb *)cell->schSpcCell;
-
+
/* Select first UE in the linked list to be scheduled next */
pendingUeNode = fcfsCell->ueToBeScheduled.first;
- while(pendingUeNode)
+ ueCount = fcfsCell->ueToBeScheduled.count;
+
+ while(pendingUeNode && ueCount > 0)
{
+ /*Since Multi-UE perTTI is not supported, re-init following parameters.*/
+ isRarPending = false; isRarScheduled = false;
+ isMsg4Pending = false; isMsg4Scheduled = false;
+ isDlMsgPending = false; isDlMsgScheduled = false;
+ isUlGrantPending = false; isUlGrantScheduled = false;
if(pendingUeNode->node)
{
ueId = *(uint8_t *)(pendingUeNode->node);
if(isRarScheduled || isMsg4Scheduled)
{
schFcfsRemoveUeFrmScheduleLst(cell, pendingUeNode);
- isNodeFreed = true;
}
/* If RAR/MSG4 is pending but couldnt be scheduled then,
* put this UE at the end of linked list to be scheduled later */
}
}
- if(!isUlGrantPending && !isDlMsgPending)
- {
- /* No action required */
- }
- else if((isUlGrantPending && !isUlGrantScheduled) || (isDlMsgPending && !isDlMsgScheduled))
+ if(isUlGrantPending || isDlMsgPending)
{
- cmLListAdd2Tail(&fcfsCell->ueToBeScheduled, cmLListDelFrm(&fcfsCell->ueToBeScheduled, pendingUeNode));
- }
- else
- {
- schFcfsRemoveUeFrmScheduleLst(cell, pendingUeNode);
- isNodeFreed = true;
+ if((isUlGrantPending && !isUlGrantScheduled) || (isDlMsgPending && !isDlMsgScheduled))
+ {
+ cmLListAdd2Tail(&fcfsCell->ueToBeScheduled, cmLListDelFrm(&fcfsCell->ueToBeScheduled, pendingUeNode));
+ }
+ else
+ {
+ schFcfsRemoveUeFrmScheduleLst(cell, pendingUeNode);
+ }
}
}
}
- if(cell->schDlSlotInfo[slotInd->slot]->prbAlloc.numPrbAlloc >= MAX_NUM_RB)
+ if(!isUlGrantPending && !isDlMsgPending && !isRarPending && !isMsg4Pending)
{
- DU_LOG("\nINFO --> SCH: No PRB available to proceed with next UE");
- return;
+ DU_LOG("\nERROR --> SCH: In SchFcfsScheduleSlot, UE:%d is wrongly queued\
+ in Pending UE List without any actions, Removing the UE from the list",ueId);
+ schFcfsRemoveUeFrmScheduleLst(cell, pendingUeNode);
}
- if(isNodeFreed == false)
- {
- pendingUeNode= pendingUeNode->next;
- }
- else
+ if(cell->schDlSlotInfo[slotInd->slot]->prbAlloc.numPrbAlloc >= MAX_NUM_RB)
{
- pendingUeNode = fcfsCell->ueToBeScheduled.first;
+ DU_LOG("\nINFO --> SCH: No PRB available to proceed with next UE");
+ return;
}
+ pendingUeNode = fcfsCell->ueToBeScheduled.first;
+ ueCount--;
}
}
*
* ****************************************************************/
-S16 l1HdlDlTtiReq(uint16_t msgLen, void *msg)
+S16 l1HdlDlTtiReq(uint32_t msgLen, void *msg)
{
#ifdef INTEL_FAPI
p_fapi_api_queue_elem_t dlTtiElem = (p_fapi_api_queue_elem_t)msg;
*
* ****************************************************************/
-S16 l1HdlTxDataReq(uint16_t msgLen, void *msg)
+S16 l1HdlTxDataReq(uint32_t msgLen, void *msg)
{
#ifdef INTEL_FAPI
p_fapi_api_queue_elem_t txDataElem = (p_fapi_api_queue_elem_t)msg;
*
* ****************************************************************/
-S16 l1HdlUlTtiReq(uint16_t msgLen, void *msg)
+S16 l1HdlUlTtiReq(uint32_t msgLen, void *msg)
{
#ifdef INTEL_FAPI
p_fapi_api_queue_elem_t ulTtiElem = (p_fapi_api_queue_elem_t)msg;
*
* ****************************************************************/
-S16 l1HdlUlDciReq(uint16_t msgLen, void *msg)
+S16 l1HdlUlDciReq(uint32_t msgLen, void *msg)
{
#ifdef INTEL_FAPI
p_fapi_api_queue_elem_t ulDciElem = (p_fapi_api_queue_elem_t)msg;