SchUeDeleteRspFunc SchUeDeleteRspOpts[] =
{
- packSchUeDeleteRsp, /* LC */
- MacProcSchUeDeleteRsp, /* TC */
- packSchUeDeleteRsp /* LWLC */
+ packSchUeDeleteRsp, /* LC */
+ MacProcSchUeDeleteRsp, /* TC */
+ packSchUeDeleteRsp /* LWLC */
};
+SchCellDeleteRspFunc SchCellDeleteRspOpts[]=
+{
+ packSchCellDeleteRsp, /* LC */
+ MacProcSchCellDeleteRsp, /* TC */
+ packSchCellDeleteRsp /* LWLC */
+};
/*******************************************************************
*
* @brief Fill and send UE cfg response to MAC
}
return ret;
}
+
/*******************************************************************
*
* @brief Fill and send UE delete response to MAC
rspPst.event = EVENT_UE_DELETE_RSP_TO_MAC;
SchUeDeleteRspOpts[rspPst.selector](&rspPst, &delRsp);
}
+
/*******************************************************************
*
* @brief Function to delete Sch Pucch ResrcCfg
}
}
}
+
/*******************************************************************
*
* @brief Function to delete SCH Pdsch ServCellCfg
SCH_FREE(pdschServCellCfg->codeBlkGrpFlushInd, sizeof(bool));
SCH_FREE(pdschServCellCfg->xOverhead, sizeof(SchPdschXOverhead));
}
+
/*******************************************************************
*
* @brief Function to delete SCH UeCb
memset(ueCb, 0, sizeof(SchUeCb));
}
}
+
/*******************************************************************
*
* @brief Function for Ue Delete request from MAC to SCH
uint8_t idx=0, ueIdx=0, ret=ROK;
ErrorCause result;
SchCellCb *cellCb = NULLP;
- SchUeCb ueCb ;
Inst inst = pst->dstInst - 1;
if(!ueDelete)
else
{
GET_UE_IDX(ueDelete->crnti, ueIdx);
- ueCb = cellCb->ueCb[ueIdx-1];
- if((ueCb.crnti == ueDelete->crnti) && (ueCb.state == SCH_UE_STATE_ACTIVE))
+ if(( cellCb->ueCb[ueIdx-1].crnti == ueDelete->crnti) && ( cellCb->ueCb[ueIdx-1].state == SCH_UE_STATE_ACTIVE))
{
- deleteSchUeCb(&ueCb);
+ deleteSchUeCb(&cellCb->ueCb[ueIdx-1]);
+ cellCb->numActvUe--;
result = NOT_APPLICABLE;
}
else
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(SchCellDelete *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 idx=0;
+ if(cellCb->schDlSlotInfo)
+ {
+ for(idx=0; idx<cellCb->numSlots; idx++)
+ {
+ if(cellCb->schDlSlotInfo[idx])
+ {
+ SCH_FREE(cellCb->schDlSlotInfo[idx]->rarInfo, sizeof(RarInfo));
+ if(cellCb->schDlSlotInfo[idx]->dlMsgInfo)
+ {
+ SCH_FREE(cellCb->schDlSlotInfo[idx]->dlMsgInfo->dlMsgPdu,\
+ cellCb->schDlSlotInfo[idx]->dlMsgInfo->dlMsgPduLen);
+ SCH_FREE(cellCb->schDlSlotInfo[idx]->dlMsgInfo, sizeof(DlMsgInfo));
+ }
+ SCH_FREE(cellCb->schDlSlotInfo[idx], sizeof(SchDlSlotInfo));
+ }
+ }
+ SCH_FREE(cellCb->schDlSlotInfo, sizeof(SchDlSlotInfo));
+ }
+ if(cellCb->schUlSlotInfo)
+ {
+ for(idx=0; idx<cellCb->numSlots; idx++)
+ {
+ if(cellCb->schUlSlotInfo[idx])
+ {
+ SCH_FREE(cellCb->schUlSlotInfo[idx]->schPuschInfo,sizeof(SchPuschInfo));
+ SCH_FREE(cellCb->schUlSlotInfo[idx], sizeof(SchUlSlotInfo));
+ }
+ }
+ SCH_FREE(cellCb->schUlSlotInfo, sizeof(SchUlSlotInfo));
+ }
+ SCH_FREE(cellCb->cellCfg.sib1SchCfg.sib1PdcchCfg.dci.pdschCfg, sizeof(PdschCfg));
+ 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, SchCellDelete *cellDelete)
+{
+ uint8_t cellIdx=0, ret = RFAILED;
+ Inst inst = pst->dstInst - 1;
+ SchMacRsp result= RSP_OK;
+
+ 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;
+}
+
/**********************************************************************
End of file
**********************************************************************/