X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fphy_stub%2Fphy_stub_msg_hdl.c;h=56b85be9399a297a8fc883101000bdecfc31918a;hb=f191979f3454e08cc049af12d6323819730260ef;hp=b5fb1ac5a8b4fdee5e4be7044c342cfb8d926d73;hpb=0bdf00d1edf579ee8b5841e1a80d48d9bb91c7e8;p=o-du%2Fl2.git diff --git a/src/phy_stub/phy_stub_msg_hdl.c b/src/phy_stub/phy_stub_msg_hdl.c index b5fb1ac5a..56b85be93 100644 --- a/src/phy_stub/phy_stub_msg_hdl.c +++ b/src/phy_stub/phy_stub_msg_hdl.c @@ -24,15 +24,17 @@ #include "du_app_mac_inf.h" #include "mac_sch_interface.h" #include "lwr_mac.h" +#include "lwr_mac_fsm.h" #include "lwr_mac_phy.h" #ifdef INTEL_FAPI #include "fapi.h" #include "fapi_vendor_extension.h" #endif -#include "lphy_stub.h" #include "lwr_mac_upr_inf.h" #include "mac_utils.h" #include "phy_stub.h" +#include "phy_stub_utils.h" +#include "lwr_mac_phy_stub_inf.h" /******************************************************************* * @@ -243,6 +245,15 @@ void l1HdlParamReq(uint32_t msgLen, void *msg) void l1HdlConfigReq(uint32_t msgLen, void *msg) { + rachIndSent = false; + msg3Sent = false; + msg5ShortBsrSent = false; + msg5Sent = false; + dlDedMsg = false; + msgSecurityModeComp = false; + msgRrcReconfiguration = false; + msgRegistrationComp = false; + #ifdef INTEL_FAPI p_fapi_api_queue_elem_t configReqElem = (p_fapi_api_queue_elem_t)msg; fapi_config_req_t *configReq = (fapi_config_req_t *)(configReqElem +1); @@ -638,10 +649,13 @@ uint16_t l1BuildAndSendRachInd(uint16_t slot, uint16_t sfn) * ****************************************************************/ uint16_t l1BuildAndSendSlotIndication() { + Pst pst; + Buffer *mBuf; + #ifdef INTEL_FAPI fapi_slot_ind_t *slotIndMsg; - MAC_ALLOC(slotIndMsg, sizeof(fapi_slot_ind_t)); + MAC_ALLOC_SHRABL_BUF(slotIndMsg, sizeof(fapi_slot_ind_t)); if(!slotIndMsg) { DU_LOG("\nERROR --> PHY_STUB: Memory allocation failed for slot Indication Message"); @@ -654,24 +668,36 @@ uint16_t l1BuildAndSendSlotIndication() slotIndMsg->slot = slotValue; #ifdef ODU_SLOT_IND_DEBUG_LOG - DU_LOG("\n\nDEBUG --> PHY_STUB: SLOT indication [%d:%d]",sfnValue,slotValue); + DU_LOG("\n\nDEBUG --> PHY_STUB: Sending Slot Indication [%d : %d] to MAC", sfnValue, slotValue); #endif + /* increment for the next TTI */ slotValue++; if(sfnValue >= MAX_SFN_VALUE && slotValue > MAX_SLOT_VALUE) { - sfnValue = 0; - slotValue = 0; + sfnValue = 0; + slotValue = 0; } else if(slotValue > MAX_SLOT_VALUE) { - sfnValue++; - slotValue = 0; + sfnValue++; + slotValue = 0; } fillMsgHeader(&slotIndMsg->header, FAPI_SLOT_INDICATION, \ - sizeof(fapi_slot_ind_t) - sizeof(fapi_msg_t)); - procPhyMessages(slotIndMsg->header.msg_id, sizeof(fapi_slot_ind_t), (void*)slotIndMsg); - MAC_FREE(slotIndMsg, sizeof(fapi_slot_ind_t)); + sizeof(fapi_slot_ind_t) - sizeof(fapi_msg_t)); + + memset(&pst, 0, sizeof(Pst)); + FILL_PST_PHY_STUB_TO_LWR_MAC(pst, EVT_PHY_STUB_SLOT_IND); + + ODU_GET_MSG_BUF(pst.region, pst.pool, &mBuf); + if(!mBuf) + { + DU_LOG("\nERROR --> PHY_STUB: Failed to allocate memory for slot indication buffer"); + MAC_FREE_SHRABL_BUF(pst.region, pst.pool, slotIndMsg, sizeof(fapi_slot_ind_t)); + return RFAILED; + } + CMCHKPK(oduPackPointer, (PTR)slotIndMsg, mBuf); + ODU_POST_TASK(&pst, mBuf); } #endif return ROK; @@ -1023,7 +1049,7 @@ S16 l1HdlUlTtiReq(uint16_t msgLen, void *msg) numPdus--; } - if(rachIndSent == false && ulTtiReq->sfn == 2 && ulTtiReq->slot == 6) + if(rachIndSent == false && ulTtiReq->sfn == 16 && ulTtiReq->slot == 6) { rachIndSent = true; l1BuildAndSendRachInd(ulTtiReq->slot, ulTtiReq->sfn); @@ -1052,10 +1078,12 @@ S16 l1HdlUlTtiReq(uint16_t msgLen, void *msg) uint16_t l1BuildAndSendStopInd() { #ifdef INTEL_FAPI + Pst pst; + Buffer *mBuf = NULLP; fapi_stop_ind_t *stopIndMsg = NULLP; uint32_t msgLen = 0; - MAC_ALLOC(stopIndMsg, sizeof(fapi_stop_ind_t)); + MAC_ALLOC_SHRABL_BUF(stopIndMsg, sizeof(fapi_stop_ind_t)); if(!stopIndMsg) { DU_LOG("\nERROR --> PHY_STUB: Memory allocation failed for stop Indication Message"); @@ -1065,9 +1093,18 @@ uint16_t l1BuildAndSendStopInd() { fillMsgHeader(&stopIndMsg->header, FAPI_STOP_INDICATION, msgLen); DU_LOG("\n\nINFO --> PHY_STUB: Processing Stop indication to MAC"); - procPhyMessages(stopIndMsg->header.msg_id,\ - sizeof(fapi_stop_ind_t), (void*)stopIndMsg); - MAC_FREE(stopIndMsg, sizeof(fapi_stop_ind_t)); + + memset(&pst, 0, sizeof(Pst)); + FILL_PST_PHY_STUB_TO_LWR_MAC(pst, EVT_PHY_STUB_STOP_IND); + ODU_GET_MSG_BUF(pst.region, pst.pool, &mBuf); + if(!mBuf) + { + DU_LOG("\nERROR --> PHY_STUB: Failed to allocate memory for slot indication buffer"); + MAC_FREE_SHRABL_BUF(pst.region, pst.pool, stopIndMsg, sizeof(fapi_stop_ind_t)); + return RFAILED; + } + CMCHKPK(oduPackPointer, (PTR)stopIndMsg, mBuf); + ODU_POST_TASK(&pst, mBuf); } #endif return ROK; @@ -1098,7 +1135,6 @@ S16 l1HdlStopReq(uint32_t msgLen, void *msg) { l1HdlSlotIndicaion(TRUE); DU_LOG("\nINFO --> PHY_STUB: Slot Indication is stopped successfully"); - l1BuildAndSendStopInd(); MAC_FREE(msg, msgLen); } else @@ -1317,20 +1353,23 @@ uint8_t l1SendUlUserData() /* Filling PDU */ pdu = (uint8_t *)pduInfo->pduData; - msgLen = 51; + msgLen = 52; /* For UL User data MAC subheader format is R/F/LCId/L (2/3 bytes) LCId is 4 for DRB1 L is length of PDU i.e 50 bytes From 38.321 section 6.1.1 + From 38.322 section 6.2.2.4, 6.2.2.3 for AM, UM Header */ - uint8_t ulMsg[] = {4, msgLen, 0, 69, 0, 0, 50, 0, 0, 0, 0, 0, 1, 0, 0, 192, 168, 130, 81, 192, 168, 130, 82, 84, 104, - 105, 115, 32, 105, 115, 32, 69, 71, 84, 80, 32, 100, 97, 116, 97, 32, 102, 114, 111, 109, 32, 68, 85, 0, 0, 0, 0, 0}; - msgLen += 2; /* 2bytes of header */ - memcpy(pdu, &ulMsg, msgLen); - byteIdx += msgLen; /* 2 bytes of header */ + /* Below ulMsg supports 12bit SN for UM mode */ + /* SI SN */ + uint8_t ulMsg[] = {4, msgLen, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 1, 0, 0, 192, 168, 130, 81, 192, 168, 130, 82, 84, 104, + 105, 115, 32, 105, 115, 32, 69, 71, 84, 80, 32, 100, 97, 116, 97, 32, 102, 114, 111, 109, 32, 68, 85, 0, 0, 0, 0, 0}; + msgLen += 2; /* 2bytes of header */ + memcpy(pdu, &ulMsg, msgLen); + byteIdx += msgLen; /* 2 bytes of header */ /* Filling MAC SDU for Padding bytes*/ if(byteIdx < pduInfo->pdu_length) @@ -1350,7 +1389,7 @@ uint8_t l1SendUlUserData() fillMsgHeader(&rxDataInd->header, FAPI_RX_DATA_INDICATION, msgLen); /* Send Message to peer */ - while(cnt < 200) + while(cnt < 2) { DU_LOG("\nDEBUG --> PHY STUB : Sending UL User Data[%d] at sfn %d slot %d", cnt+1, sfnValue, slotValue); /* Sending Rx data indication to MAC */ @@ -1366,6 +1405,110 @@ uint8_t l1SendUlUserData() return ROK; } +/******************************************************************* + * + * @brief Sends RLC Status PDU to DU + * + * @details + * + * Function : l1SendStatusPdu + * + * Functionality: Send RLC Status PDU to DU + * + * @params[in] + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t l1SendStatusPdu() +{ + fapi_rx_data_indication_t *rxDataInd; + fapi_pdu_ind_info_t *pduInfo; + uint8_t *pdu = NULLP; + uint16_t byteIdx = 0; + uint32_t msgLen = 0; + uint8_t idx = 0; + + MAC_ALLOC(rxDataInd, sizeof(fapi_rx_data_indication_t)); + if(!rxDataInd) + { + printf("\nERROR --> PHY_STUB: Memory allocation failed for Rx Data Indication"); + return RFAILED; + } + memset(rxDataInd, 0, sizeof(fapi_rx_data_indication_t)); + + msgLen = sizeof(fapi_rx_data_indication_t) - sizeof(fapi_msg_t); + rxDataInd->sfn = 0; + rxDataInd->slot = 0; + rxDataInd->numPdus = 1; + + /* TODO : Fill pduInfo using PUSCH PDU. Currently hardcoding */ + pduInfo = &rxDataInd->pdus[idx]; + pduInfo->handle = 100; + pduInfo->rnti = 100; + pduInfo->harqId = 1; + /* Since status pdu size = 3bytes and 2 bytes of MAC header, + * setting tbsize = 24 from Table 5.1.3.2-1 spec 38.214 */ + pduInfo->pdu_length = 24; + pduInfo->ul_cqi = 0; + pduInfo->timingAdvance = 0; + pduInfo->rssi = 0; + + /* Filling pdu with random values for testing */ + pduInfo->pduData = NULL; + MAC_ALLOC(pduInfo->pduData, pduInfo->pdu_length); + if(!pduInfo->pduData) + { + printf("\nERROR --> PHY_STUB: Memory allocation failed for Rx Data Pdu"); + return RFAILED; + } + + /* Filling PDU */ + pdu = (uint8_t *)pduInfo->pduData; + msgLen = 3; + + /* For RLC Status PDU + MAC subheader format is R/F/LCId/L (2/3 bytes) + LCId is 4 for DRB1 + L is length of Status PDU i.e 3 bytes + From 38.321 section 6.1.1 + */ + uint8_t statusPdu[] = {4, msgLen, 0, 0, 0}; + msgLen += 2; /* 2bytes of header */ + memcpy(pdu, &statusPdu, msgLen); + byteIdx += msgLen; /* 2 bytes of header */ + + + /* Filling MAC SDU for Padding bytes*/ + if(byteIdx < pduInfo->pdu_length) + { + /* For Padding + MAC subheader format is R/R/LCId (1byte) + LCId is 63 for padding + From 38.321 section 6.1.1 + */ + pdu[byteIdx++] = 63; + + for(; byteIdx < pduInfo->pdu_length; byteIdx++) + pdu[byteIdx] = 0; + } + msgLen += pduInfo->pdu_length; + + fillMsgHeader(&rxDataInd->header, FAPI_RX_DATA_INDICATION, msgLen); + + /* Send Message to peer */ + DU_LOG("\nDEBUG --> PHY STUB : Sending RLC status pdu at sfn %d slot %d", sfnValue, slotValue); + /* Sending Rx data indication to MAC */ + rxDataInd->sfn = sfnValue; + rxDataInd->slot = slotValue; + procPhyMessages(rxDataInd->header.msg_id, sizeof(fapi_rx_data_indication_t), (void *)rxDataInd); + + if(pduInfo->pdu_length) + MAC_FREE(pduInfo->pduData, pduInfo->pdu_length); + MAC_FREE(rxDataInd, sizeof(fapi_rx_data_indication_t)); + return ROK; +} + /******************************************************************* * * @brief Receives message from MAC