X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrsch%2Fsch_ue_mgr.c;h=0d84ba58a5abc2e2080c1701d3ad8b4d822a03d1;hb=fa6899dae4aee415bbcfd00760b6e2b312ddceec;hp=0923f9558b780c331c603d0f9742fcb26254f66a;hpb=c98e69a3cfa10b1b47dafe94062dc68817cae6a1;p=o-du%2Fl2.git diff --git a/src/5gnrsch/sch_ue_mgr.c b/src/5gnrsch/sch_ue_mgr.c index 0923f9558..0d84ba58a 100644 --- a/src/5gnrsch/sch_ue_mgr.c +++ b/src/5gnrsch/sch_ue_mgr.c @@ -32,35 +32,6 @@ #include "sch_drx.h" #endif -/* local defines */ -SchUeCfgRspFunc SchUeCfgRspOpts[] = -{ - packSchUeCfgRsp, /* LC */ - MacProcSchUeCfgRsp, /* TC */ - packSchUeCfgRsp /* LWLC */ -}; - -SchUeRecfgRspFunc SchUeRecfgRspOpts[] = -{ - packSchUeRecfgRsp, /* LC */ - MacProcSchUeRecfgRsp, /* TC */ - packSchUeRecfgRsp /* LWLC */ -}; - -SchUeDeleteRspFunc SchUeDeleteRspOpts[] = -{ - packSchUeDeleteRsp, /* LC */ - MacProcSchUeDeleteRsp, /* TC */ - packSchUeDeleteRsp /* LWLC */ -}; - -SchCellDeleteRspFunc SchCellDeleteRspOpts[]= -{ - packSchCellDeleteRsp, /* LC */ - MacProcSchCellDeleteRsp, /* TC */ - packSchCellDeleteRsp /* LWLC */ -}; - /******************************************************************* * * @brief Fill and send UE cfg response to MAC @@ -91,7 +62,7 @@ void SchSendUeCfgRspToMac(SchUeCfgReq *ueCfg, Inst inst,\ FILL_PST_SCH_TO_MAC(rspPst, inst); rspPst.event = EVENT_UE_CONFIG_RSP_TO_MAC; DU_LOG("\nINFO --> SCH : Sending UE Config response to MAC"); - SchUeCfgRspOpts[rspPst.selector](&rspPst, cfgRsp); + MacMessageRouter(&rspPst, (void *)cfgRsp); } /******************************************************************* @@ -124,7 +95,7 @@ void SchSendUeRecfgRspToMac(SchUeRecfgReq *ueRecfgReq, Inst inst,\ FILL_PST_SCH_TO_MAC(rspPst, inst); rspPst.event = EVENT_UE_RECONFIG_RSP_TO_MAC; DU_LOG("\nINFO --> SCH : Sending UE Reconfig response to MAC"); - SchUeRecfgRspOpts[rspPst.selector](&rspPst, reCfgRsp); + MacMessageRouter(&rspPst, (void *)reCfgRsp); } /******************************************************************* @@ -762,7 +733,7 @@ SchCellCb *getSchCellCb(uint16_t srcEvent, Inst inst, uint16_t cellId) * * @details * - * Function : MacSchAddUeConfigReq + * Function : SchAddUeConfigReq * * Functionality: Function to Add Ue config request from MAC * @@ -771,7 +742,7 @@ SchCellCb *getSchCellCb(uint16_t srcEvent, Inst inst, uint16_t cellId) * RFAILED - failure * * ****************************************************************/ -uint8_t MacSchAddUeConfigReq(Pst *pst, SchUeCfgReq *ueCfg) +uint8_t SchAddUeConfigReq(Pst *pst, SchUeCfgReq *ueCfg) { uint8_t lcIdx = 0, ret = ROK, idx = 0; SchCellCb *cellCb = NULLP; @@ -780,13 +751,9 @@ uint8_t MacSchAddUeConfigReq(Pst *pst, SchUeCfgReq *ueCfg) Inst inst = pst->dstInst - SCH_INST_START; memset(&cfgRsp, 0, sizeof(SchUeCfgRsp)); -#ifdef CALL_FLOW_DEBUG_LOG - DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_ADD_UE_CONFIG_REQ_TO_SCH\n"); -#endif - if(!ueCfg) { - DU_LOG("\nERROR --> SCH : Adding UE Config Request failed at MacSchAddUeConfigReq()"); + DU_LOG("\nERROR --> SCH : Adding UE Config Request failed at SchAddUeConfigReq()"); return RFAILED; } DU_LOG("\nDEBUG --> SCH : Adding UE Config Request for CRNTI[%d]", ueCfg->crnti); @@ -862,6 +829,8 @@ uint8_t MacSchAddUeConfigReq(Pst *pst, SchUeCfgReq *ueCfg) SchSendUeCfgRspToMac(ueCfg, inst, RSP_OK, &cfgRsp); } + + cellCb->api->SchAddUeConfigReq(ueCb); return ret; } @@ -1176,7 +1145,7 @@ uint8_t schFillUlDci(SchUeCb *ueCb, SchPuschInfo *puschInfo, DciInfo *dciInfo, b * * @details * - * Function : MacSchModUeConfigReq + * Function : SchModUeConfigReq * * Functionality: Function to modify Ue Config request from MAC * @@ -1185,7 +1154,7 @@ uint8_t schFillUlDci(SchUeCb *ueCb, SchPuschInfo *puschInfo, DciInfo *dciInfo, b * RFAILED - failure * * ****************************************************************/ -uint8_t MacSchModUeConfigReq(Pst *pst, SchUeRecfgReq *ueRecfg) +uint8_t SchModUeConfigReq(Pst *pst, SchUeRecfgReq *ueRecfg) { uint8_t ueId, lcIdx, ret = ROK; SchCellCb *cellCb = NULLP; @@ -1194,13 +1163,9 @@ uint8_t MacSchModUeConfigReq(Pst *pst, SchUeRecfgReq *ueRecfg) Inst inst = pst->dstInst - SCH_INST_START; memset(&recfgRsp, 0, sizeof(SchUeRecfgRsp)); -#ifdef CALL_FLOW_DEBUG_LOG - DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_MODIFY_UE_CONFIG_REQ_TO_SCH\n"); -#endif - if(!ueRecfg) { - DU_LOG("\nERROR --> SCH : Modifying Ue Config request failed at MacSchModUeConfigReq()"); + DU_LOG("\nERROR --> SCH : Modifying Ue Config request failed at SchModUeConfigReq()"); return RFAILED; } DU_LOG("\nDEBUG --> SCH : Modifying Ue Config Request for CRNTI[%d]", ueRecfg->crnti); @@ -1218,7 +1183,7 @@ uint8_t MacSchModUeConfigReq(Pst *pst, SchUeRecfgReq *ueRecfg) if(!ueCb) { - DU_LOG("\nERROR --> SCH : SchUeCb not found at MacSchModUeConfigReq() "); + DU_LOG("\nERROR --> SCH : SchUeCb not found at SchModUeConfigReq() "); SchSendUeRecfgRspToMac(ueRecfg, inst, RSP_NOK, &recfgRsp); return RFAILED; } @@ -1240,39 +1205,6 @@ uint8_t MacSchModUeConfigReq(Pst *pst, SchUeRecfgReq *ueRecfg) return ret; } -/******************************************************************* -* -* @brief Fill and send UE delete response to MAC -* -* @details -* -* Function : SchSendUeDeleteRspToMac -* -* Functionality: Fill and send UE delete response to MAC -* -* @params[in] Inst inst, SchUeDelete *ueDelete, SchMacRsp result, -* ErrorCause cause -* @return ROK - success -* RFAILED - failure -* -* ****************************************************************/ -void SchSendUeDeleteRspToMac(Inst inst, SchUeDelete *ueDelete, SchMacRsp result, ErrorCause cause) -{ - Pst rspPst; - SchUeDeleteRsp delRsp; - - memset(&delRsp, 0, sizeof(SchUeDeleteRsp)); - delRsp.cellId = ueDelete->cellId; - delRsp.crnti = ueDelete->crnti; - delRsp.rsp = result; - delRsp.cause = cause; - - /* Filling response post */ - memset(&rspPst, 0, sizeof(Pst)); - FILL_PST_SCH_TO_MAC(rspPst, inst); - rspPst.event = EVENT_UE_DELETE_RSP_TO_MAC; - SchUeDeleteRspOpts[rspPst.selector](&rspPst, &delRsp); -} /******************************************************************* * @@ -1402,6 +1334,9 @@ void deleteSchUeCb(SchUeCb *ueCb) SCH_FREE(ueCb->hqUlmap, sizeof(SchHqUlMap*)*(ueCb->cellCb->numSlots)); } + schDlHqEntDelete(ueCb); + schUlHqEntDelete(ueCb); + SCH_FREE(ueCb->ueCfg.ambrCfg, sizeof(SchAmbrCfg)); if(ueCb->ueCfg.spCellCfgPres) { @@ -1452,13 +1387,47 @@ void deleteSchUeCb(SchUeCb *ueCb) } } +/******************************************************************* +* +* @brief Fill and send UE delete response to MAC +* +* @details +* +* Function : SchSendUeDeleteRspToMac +* +* Functionality: Fill and send UE delete response to MAC +* +* @params[in] Inst inst, SchUeDelete *ueDelete, SchMacRsp result, +* ErrorCause cause +* @return ROK - success +* RFAILED - failure +* +* ****************************************************************/ +void SchSendUeDeleteRspToMac(Inst inst, SchUeDelete *ueDelete, SchMacRsp result, ErrorCause cause) +{ + Pst rspPst; + SchUeDeleteRsp delRsp; + + memset(&delRsp, 0, sizeof(SchUeDeleteRsp)); + delRsp.cellId = ueDelete->cellId; + delRsp.crnti = ueDelete->crnti; + delRsp.rsp = result; + delRsp.cause = cause; + + /* Filling response post */ + memset(&rspPst, 0, sizeof(Pst)); + FILL_PST_SCH_TO_MAC(rspPst, inst); + rspPst.event = EVENT_UE_DELETE_RSP_TO_MAC; + MacMessageRouter(&rspPst, (void *)&delRsp); +} + /******************************************************************* * * @brief Function for Ue Delete request from MAC to SCH * * @details * -* Function : MacSchUeDeleteReq +* Function : SchProcUeDeleteReq * * Functionality: Function for Ue Delete request from MAC to SCH * @@ -1467,21 +1436,16 @@ void deleteSchUeCb(SchUeCb *ueCb) * RFAILED - failure * * ****************************************************************/ -uint8_t MacSchUeDeleteReq(Pst *pst, SchUeDelete *ueDelete) +uint8_t SchProcUeDeleteReq(Pst *pst, SchUeDelete *ueDelete) { - uint8_t idx=0, ueId=0, ueIdToDel=0, ret=ROK; + uint8_t idx=0, ueId=0, ret=ROK; ErrorCause result; SchCellCb *cellCb = NULLP; Inst inst = pst->dstInst - SCH_INST_START; - CmLList *node = NULL, *next = NULL; -#ifdef CALL_FLOW_DEBUG_LOG - DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_UE_DELETE_REQ_TO_SCH\n"); -#endif - if(!ueDelete) { - DU_LOG("\nERROR --> SCH : MacSchUeDeleteReq(): Ue Delete request failed"); + DU_LOG("\nERROR --> SCH : SchProcUeDeleteReq(): Ue Delete request failed"); ret = RFAILED; } DU_LOG("\nDEBUG --> SCH : Ue Delete request received for crnti[%d]", ueDelete->crnti); @@ -1490,7 +1454,7 @@ uint8_t MacSchUeDeleteReq(Pst *pst, SchUeDelete *ueDelete) if(cellCb->cellId != ueDelete->cellId) { - DU_LOG("\nERROR --> SCH : MacSchUeDeleteReq(): cell Id is not available"); + DU_LOG("\nERROR --> SCH : SchProcUeDeleteReq(): cell Id is not available"); result = INVALID_CELLID; } else @@ -1498,28 +1462,15 @@ uint8_t MacSchUeDeleteReq(Pst *pst, SchUeDelete *ueDelete) GET_UE_ID(ueDelete->crnti, ueId); if(( cellCb->ueCb[ueId-1].crnti == ueDelete->crnti) && ( cellCb->ueCb[ueId-1].state == SCH_UE_STATE_ACTIVE)) { - deleteSchUeCb(&cellCb->ueCb[ueId-1]); - ueIdToDel = ueId; /* Remove UE from ueToBeScheduled list */ - node = cellCb->ueToBeScheduled.first; - while(node) - { - next = node->next; - ueId = *(uint8_t *)node->node; - if(ueId == ueIdToDel) - { - SCH_FREE(node->node, sizeof(uint8_t)); - deleteNodeFromLList(&cellCb->ueToBeScheduled, node); - break; - } - node = next; - } + cellCb->api->SchUeDeleteReq(&cellCb->ueCb[ueId-1]); + deleteSchUeCb(&cellCb->ueCb[ueId-1]); cellCb->numActvUe--; result = NOT_APPLICABLE; } else { - DU_LOG("\nERROR --> SCH : MacSchUeDeleteReq(): SchUeCb not found"); + DU_LOG("\nERROR --> SCH : SchProcUeDeleteReq(): SchUeCb not found"); result = INVALID_UEID; } } @@ -1536,209 +1487,6 @@ uint8_t MacSchUeDeleteReq(Pst *pst, SchUeDelete *ueDelete) return ret; } -/******************************************************************* - * - * @brief Fill and send Cell delete response to MAC - * - * @details - * - * Function : SchSendCellDeleteRspToMac - * - * Functionality: Fill and send Cell delete response to MAC - * - * @params[in] SchCellDelete *ueDelete, Inst inst, SchMacRsp result - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ -uint8_t SchSendCellDeleteRspToMac(SchCellDeleteReq *ueDelete, Inst inst, SchMacRsp result) -{ - Pst rspPst; - uint8_t ret=0; - - SchCellDeleteRsp delRsp; - - DU_LOG("\nINFO --> SCH : Filling Cell Delete response"); - memset(&delRsp, 0, sizeof(SchCellDeleteRsp)); - delRsp.cellId = ueDelete->cellId; - delRsp.rsp = result; - - /* Filling response post */ - memset(&rspPst, 0, sizeof(Pst)); - FILL_PST_SCH_TO_MAC(rspPst, inst); - rspPst.event = EVENT_CELL_DELETE_RSP_TO_MAC; - ret = SchCellDeleteRspOpts[rspPst.selector](&rspPst, &delRsp); - if(ret == RFAILED) - { - DU_LOG("\nERROR --> SCH : SchSendCellDeleteRspToMac(): failed to send the Cell Delete response"); - return ret; - } - return ret; -} - -/******************************************************************* - * - * @brief Function for cellCb Deletion - * - * @details - * - * Function : deleteSchCellCb - * - * Functionality: Function for cellCb Deletion - * - * @params[in] SchCellDelete *cellDelete - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ -void deleteSchCellCb(SchCellCb *cellCb) -{ - uint8_t sliceIdx=0, slotIdx=0; - CmLListCp *list=NULL; - CmLList *node=NULL, *next=NULL; - SchPageInfo *tempNode = NULLP; - - if(cellCb->schDlSlotInfo) - { - for(slotIdx=0; slotIdxnumSlots; slotIdx++) - { - list = &cellCb->schDlSlotInfo[slotIdx]->prbAlloc.freePrbBlockList; - node = list->first; - while(node) - { - next = node->next; - SCH_FREE(node->node, sizeof(FreePrbBlock)); - deleteNodeFromLList(list, node); - node = next; - } - SCH_FREE(cellCb->schDlSlotInfo[slotIdx], sizeof(SchDlSlotInfo)); - } - SCH_FREE(cellCb->schDlSlotInfo, cellCb->numSlots *sizeof(SchDlSlotInfo*)); - } - - if(cellCb->schUlSlotInfo) - { - for(slotIdx=0; slotIdxnumSlots; slotIdx++) - { - list = &cellCb->schUlSlotInfo[slotIdx]->prbAlloc.freePrbBlockList; - node = list->first; - while(node) - { - next = node->next; - SCH_FREE(node->node, sizeof(FreePrbBlock)); - deleteNodeFromLList(list, node); - node = next; - } - SCH_FREE(cellCb->schUlSlotInfo[slotIdx], sizeof(SchUlSlotInfo)); - } - SCH_FREE(cellCb->schUlSlotInfo, cellCb->numSlots * sizeof(SchUlSlotInfo*)); - } - - if(cellCb->cellCfg.plmnInfoList.snssai) - { - for(sliceIdx=0; sliceIdxcellCfg.plmnInfoList.numSliceSupport; sliceIdx++) - { - SCH_FREE(cellCb->cellCfg.plmnInfoList.snssai[sliceIdx], sizeof(Snssai)); - } - SCH_FREE(cellCb->cellCfg.plmnInfoList.snssai, cellCb->cellCfg.plmnInfoList.numSliceSupport*sizeof(Snssai*)); - } - - for(uint16_t idx =0; idxpageCb.pageIndInfoRecord[idx]; - node = list->first; - while(node) - { - next = node->next; - if(node->node) - { - tempNode = (SchPageInfo*)(node->node); - SCH_FREE(tempNode->pagePdu, tempNode->msgLen); - SCH_FREE(node->node, sizeof(SchPageInfo)); - } - deleteNodeFromLList(list, node); - node = next; - } - } - - /* Remove all UE from ueToBeScheduled list and deallocate */ - node = cellCb->ueToBeScheduled.first; - while(node) - { - next = node->next; - SCH_FREE(node->node, sizeof(uint8_t)); - cmLListDelFrm(&cellCb->ueToBeScheduled, node); - SCH_FREE(node, sizeof(CmLList)); - node = next; - } - - memset(cellCb, 0, sizeof(SchCellCb)); - -} - -/******************************************************************* - * - * @brief Function for cell Delete request from MAC to SCH - * - * @details - * - * Function : MacSchCellDeleteReq - * - * Functionality: Function for cell Delete request from MAC to SCH - * - * @params[in] Pst *pst, SchCellDelete *cellDelete - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ - -uint8_t MacSchCellDeleteReq(Pst *pst, SchCellDeleteReq *cellDelete) -{ - uint8_t cellIdx=0, ret = RFAILED; - Inst inst = pst->dstInst - SCH_INST_START; - SchMacRsp result= RSP_OK; - -#ifdef CALL_FLOW_DEBUG_LOG - DU_LOG("\nCall Flow: ENTMAC -> ENTSCH : EVENT_CELL_DELETE_REQ_TO_SCH\n"); -#endif - - if(!cellDelete) - { - DU_LOG("\nERROR --> SCH : MacSchCellDeleteReq(): Ue Delete request failed"); - } - else - { - GET_CELL_IDX(cellDelete->cellId, cellIdx); - if(schCb[inst].cells[cellIdx] == NULLP) - { - DU_LOG("\nERROR --> SCH : MacSchCellDeleteReq(): cell Id[%d] is not available", cellDelete->cellId); - result = RSP_NOK; - } - else - { - if(schCb[inst].cells[cellIdx]->cellId == cellDelete->cellId) - { - deleteSchCellCb(schCb[inst].cells[cellIdx]); - result = RSP_OK; - ret = ROK; - SCH_FREE(schCb[inst].cells[cellIdx], sizeof(SchCellCb)); - DU_LOG("\nINFO --> SCH : Sending Cell Delete response to MAC"); - } - else - { - DU_LOG("\nERROR --> SCH : MacSchCellDeleteReq(): cell Id[%d] is not available",cellDelete->cellId); - result = RSP_NOK; - } - } - - if(SchSendCellDeleteRspToMac(cellDelete, inst, result)!=ROK) - { - DU_LOG("\nERROR --> SCH : MacSchCellDeleteReq(): failed to send Cell Delete response"); - ret = RFAILED; - } - } - return ret; -} /******************************************************************* * * @brief Function updates DL HARQ Feedback