X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fphy_stub%2Fl1_bdy1.c;h=f357ddd3ad8a1f87a0270b29bcb3291e131a89cd;hb=105199ef642ffe9736ea24a01d4546578fa25e60;hp=2f3d27a5d002ea8f763098de8549491f4cdcd68c;hpb=b490cd1231cfcc837e8bfccc40c6bb106dceef7c;p=o-du%2Fl2.git diff --git a/src/phy_stub/l1_bdy1.c b/src/phy_stub/l1_bdy1.c index 2f3d27a5d..f357ddd3a 100644 --- a/src/phy_stub/l1_bdy1.c +++ b/src/phy_stub/l1_bdy1.c @@ -18,18 +18,10 @@ /*This file contains stub for PHY to handle messages to/from MAC CL */ -#include - -#include "envdep.h" -#include "gen.h" -#include "ssi.h" - -#include "gen.x" -#include "ssi.x" - +#include "common_def.h" #include "lwr_mac.h" #include "lwr_mac_phy.h" -#ifdef FAPI +#ifdef INTEL_FAPI #include "fapi.h" #endif #include "lphy_stub.h" @@ -46,7 +38,7 @@ uint16_t slotValue = 0; bool rachIndSent = false; EXTERN void phyToMac ARGS((uint16_t msgType, uint32_t msgLen,void *msg)); -#ifdef FAPI +#ifdef INTEL_FAPI EXTERN void fillTlvs ARGS((fapi_uint16_tlv_t *tlv, uint16_t tag, uint16_t length, uint16_t value, uint32_t *msgLen)); EXTERN void fillMsgHeader ARGS((fapi_msg_t *hdr, uint16_t msgType, uint16_t msgLen)); @@ -71,10 +63,17 @@ EXTERN void handlePhyMessages(uint16_t msgType, uint32_t msgSize, void *msg); * ****************************************************************/ S16 l1BldAndSndParamRsp(void *msg) { -#ifdef FAPI +#ifdef INTEL_FAPI uint8_t index = 0; uint32_t msgLen = 0; - fapi_param_resp_t *fapiParamRsp = (fapi_param_resp_t *)msg; + fapi_param_resp_t *fapiParamRsp; + + MAC_ALLOC(fapiParamRsp, sizeof(fapi_param_resp_t)); + if(!fapiParamRsp) + { + DU_LOG("PHY STUB: Memory allocation failed"); + return RFAILED; + } /* Cell Params */ fillTlvs(&fapiParamRsp->tlvs[index++], FAPI_RELEASE_CAPABILITY_TAG, sizeof(uint16_t), 1, &msgLen); @@ -147,12 +146,13 @@ S16 l1BldAndSndParamRsp(void *msg) fillTlvs(&fapiParamRsp->tlvs[index++], FAPI_RSSI_MEASUREMENT_SUPPORT_TAG, sizeof(uint8_t), 0, &msgLen); fapiParamRsp->number_of_tlvs = index; - msgLen = msgLen + sizeof(fapi_param_resp_t); - + msgLen += sizeof(fapi_param_resp_t) - sizeof(fapi_msg_t); fillMsgHeader(&fapiParamRsp->header, FAPI_PARAM_RESPONSE, msgLen); fapiParamRsp->error_code = MSG_OK; + DU_LOG("\nPHY_STUB: Sending Param Request to Lower Mac"); handlePhyMessages(fapiParamRsp->header.message_type_id, sizeof(fapi_param_resp_t), (void *)fapiParamRsp); + MAC_FREE(fapiParamRsp, sizeof(fapi_param_resp_t)); #endif return ROK; } @@ -176,25 +176,30 @@ S16 l1BldAndSndParamRsp(void *msg) S16 l1BldAndSndConfigRsp(void *msg) { -#ifdef FAPI +#ifdef INTEL_FAPI uint32_t msgLen = 0; - fapi_config_resp_t *fapiConfigRsp = (fapi_config_resp_t *)msg; + fapi_config_resp_t *fapiConfigRsp; - if(fapiConfigRsp != NULL) + MAC_ALLOC(fapiConfigRsp, sizeof(fapi_config_resp_t)); + if(!fapiConfigRsp) { - fapiConfigRsp->number_of_invalid_tlvs = NULLP; - fapiConfigRsp->number_of_inv_tlvs_idle_only = NULLP; - fapiConfigRsp->number_of_missing_tlvs = NULLP; - fapiConfigRsp->error_code = MSG_OK; - msgLen += sizeof(fapi_config_resp_t); - fillMsgHeader(&fapiConfigRsp->header, FAPI_CONFIG_RESPONSE, msgLen); - DU_LOG("\nPHY_STUB: Sending Config Response to Lower Mac"); - handlePhyMessages(fapiConfigRsp->header.message_type_id, sizeof(fapi_config_resp_t), (void *)fapiConfigRsp); - return ROK; + DU_LOG("PHY STUB: Memory allocation failed"); + return RFAILED; } -#else - return ROK; + + fapiConfigRsp->number_of_invalid_tlvs = NULLP; + fapiConfigRsp->number_of_inv_tlvs_idle_only = NULLP; + fapiConfigRsp->number_of_missing_tlvs = NULLP; + fapiConfigRsp->error_code = MSG_OK; + msgLen += sizeof(fapi_param_resp_t) - sizeof(fapi_msg_t); + fillMsgHeader(&fapiConfigRsp->header, FAPI_CONFIG_RESPONSE, msgLen); + + DU_LOG("\nPHY_STUB: Sending Config Response to Lower Mac"); + handlePhyMessages(fapiConfigRsp->header.message_type_id, \ + sizeof(fapi_config_resp_t), (void *)fapiConfigRsp); + MAC_FREE(fapiConfigRsp, sizeof(fapi_config_resp_t)); #endif + return ROK; } /******************************************************************* * @@ -216,12 +221,16 @@ S16 l1BldAndSndConfigRsp(void *msg) PUBLIC void l1HdlParamReq(uint32_t msgLen, void *msg) { +#ifdef INTEL_FAPI DU_LOG("\nPHY_STUB: Received Param Request in PHY"); - /* Handling PARAM RESPONSE */ + + /* Build and send PARAM RESPONSE */ if(l1BldAndSndParamRsp(msg)!= ROK) { DU_LOG("\nPHY_STUB: Failed Sending Param Response"); } + MAC_FREE(msg, sizeof(fapi_param_req_t)); +#endif } /******************************************************************* @@ -244,6 +253,9 @@ PUBLIC void l1HdlParamReq(uint32_t msgLen, void *msg) PUBLIC void l1HdlConfigReq(uint32_t msgLen, void *msg) { +#ifdef INTEL_FAPI + fapi_config_req_t *configReq = (fapi_config_req_t *)msg; + DU_LOG("\nPHY_STUB: Received Config Request in PHY"); /* Handling CONFIG RESPONSE */ @@ -251,8 +263,153 @@ PUBLIC void l1HdlConfigReq(uint32_t msgLen, void *msg) { printf("\nPHY_STUB: Failed Sending config Response"); } + + MAC_FREE(configReq, msgLen); +#endif + } +/******************************************************************* + * + * @brief Build and Send CRC Indication + * + * @details + * + * Function : l1BuildAndSendCrcInd + * + * Functionality: + * Build and Send CRC Indication + * + * @params[in] Slot + * SFN + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint16_t l1BuildAndSendCrcInd(uint16_t slot, uint16_t sfn) +{ +#ifdef INTEL_FAPI + uint8_t idx = 0; + fapi_crc_ind_t *crcInd; + + MAC_ALLOC(crcInd, sizeof(fapi_crc_ind_t)); + if(!crcInd) + { + printf("\nPHY_STUB: Memory allocation failed for CRC Indication Message"); + return RFAILED; + } + + /* TODO: Fill the required values. As of now only 1 CRC status PASS is filled */ + crcInd->sfn = sfn; + crcInd->slot = slot; + crcInd->numCrcs = 1; + + crcInd->crc[idx].handle = 0; + crcInd->crc[idx].rnti = 0; + crcInd->crc[idx].harqId = 0; + crcInd->crc[idx].tbCrcStatus = 0; + crcInd->crc[idx].numCb = 1; + crcInd->crc[idx].cbCrcStatus[0] = 0; + crcInd->crc[idx].ul_cqi = 0; + crcInd->crc[idx].timingAdvance = 0; + crcInd->crc[idx].rssi = 0; + + fillMsgHeader(&crcInd->header, FAPI_CRC_INDICATION, \ + sizeof(fapi_crc_ind_t)); + + /* Sending RACH indication to MAC */ + DU_LOG("\nPHY STUB: Sending CRC Indication to MAC"); + handlePhyMessages(crcInd->header.message_type_id, sizeof(fapi_crc_ind_t), (void *)crcInd); + MAC_FREE(crcInd, sizeof(fapi_crc_ind_t)); +#endif + return ROK; +} /* l1BuildAndSendCrcInd */ + +#ifdef INTEL_FAPI +/******************************************************************* + * + * @brief Build and send Rx data indication + * + * @details + * + * Function : l1BuildAndSendRxDataInd + * + * Functionality: + * Build and send Rx data indication + * + * @params[in] SFN + * Slot + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint16_t l1BuildAndSendRxDataInd(uint16_t slot, uint16_t sfn, fapi_ul_pusch_pdu_t puschPdu) +{ + uint8_t idx = 0; + fapi_rx_data_indication_t *rxDataInd; + fapi_pdu_ind_info_t *pduInfo; + uint8_t *pdu; + uint16_t byteIdx = 0; + + MAC_ALLOC(rxDataInd, sizeof(fapi_rx_data_indication_t)); + if(!rxDataInd) + { + printf("\nPHY_STUB: Memory allocation failed for Rx Data Indication"); + return RFAILED; + } + + /* TODO: Fill the required values */ + rxDataInd->sfn = sfn; + rxDataInd->slot = slot; + rxDataInd->numPdus = 1; + + pduInfo = &rxDataInd->pdus[idx]; + pduInfo->handle = puschPdu.handle; + pduInfo->rnti = puschPdu.rnti; + pduInfo->harqId = puschPdu.puschData.harqProcessId; + pduInfo->pduLength = puschPdu.puschData.tbSize; + 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->pduLength); + if(!pduInfo->pduData) + { + printf("\nPHY_STUB: Memory allocation failed for Rx Data Pdu"); + return RFAILED; + } + + /* Harcoded Initial RRC setup Request */ + pdu = (uint8_t *)pduInfo->pduData; + pdu[byteIdx++] = 0; + pdu[byteIdx++] = 181; + pdu[byteIdx++] = 99; + pdu[byteIdx++] = 20; + pdu[byteIdx++] = 170; + pdu[byteIdx++] = 132; + pdu[byteIdx++] = 96; + + /* Harcoding the pad bytes */ + pdu[byteIdx++] = 63; + + for(; byteIdx < pduInfo->pduLength; byteIdx++) + pdu[byteIdx] = 0; + + fillMsgHeader(&rxDataInd->header, FAPI_RX_DATA_INDICATION, \ + sizeof(fapi_rx_data_indication_t)); + + /* Sending Rx data indication to MAC */ + DU_LOG("\nPHY STUB: Sending Rx data Indication to MAC"); + handlePhyMessages(rxDataInd->header.message_type_id, sizeof(fapi_rx_data_indication_t), (void *)rxDataInd); + + if(pduInfo->pduLength) + MAC_FREE(pduInfo->pduData, pduInfo->pduLength); + MAC_FREE(rxDataInd, sizeof(fapi_rx_data_indication_t)); + return ROK; +} +#endif /******************************************************************* * @@ -273,14 +430,15 @@ PUBLIC void l1HdlConfigReq(uint32_t msgLen, void *msg) * ****************************************************************/ uint16_t l1BuildAndSendRachInd(uint16_t slot, uint16_t sfn) { -#ifdef FAPI +#ifdef INTEL_FAPI uint8_t rachPduIdx = 0; uint8_t preamIdx = 0; fapi_rach_pdu_t *rachPdu; fapi_rach_indication_t *rachInd; /* Building RACH indication */ - if(SGetSBuf(0, 0, (Data **)&rachInd, sizeof(fapi_rach_indication_t)) != ROK) + MAC_ALLOC(rachInd, sizeof(fapi_rach_indication_t)); + if(!rachInd) { printf("\nPHY_STUB: Memory allocation failed for Rach Indication Message"); return RFAILED; @@ -309,7 +467,7 @@ uint16_t l1BuildAndSendRachInd(uint16_t slot, uint16_t sfn) /* Sending RACH indication to MAC */ DU_LOG("\nPHY STUB: Sending RACH Indication to MAC"); handlePhyMessages(rachInd->header.message_type_id, sizeof(fapi_rach_indication_t), (void *)rachInd); - SPutSBuf(0, 0, (Data *)rachInd, sizeof(fapi_rach_indication_t)); + MAC_FREE(rachInd, sizeof(fapi_rach_indication_t)); #endif return ROK; } @@ -333,17 +491,24 @@ uint16_t l1BuildAndSendRachInd(uint16_t slot, uint16_t sfn) * ****************************************************************/ PUBLIC uint16_t l1BuildAndSendSlotIndication() { -#ifdef FAPI +#ifdef INTEL_FAPI fapi_slot_ind_t *slotIndMsg; - if(SGetSBuf(0, 0, (Data **)&slotIndMsg, sizeof(slotIndMsg)) != ROK) + + MAC_ALLOC(slotIndMsg, sizeof(fapi_slot_ind_t)); + if(!slotIndMsg) { DU_LOG("\nPHY_STUB: Memory allocation failed for slot Indication Message"); return RFAILED; } else { + slotIndMsg->sfn = sfnValue; + slotIndMsg->slot = slotValue; + DU_LOG("\n\nPHY_STUB: SLOT indication [%d:%d]",sfnValue,slotValue); + + /* increment for the next TTI */ slotValue++; - if(sfnValue > MAX_SFN_VALUE && slotValue > MAX_SLOT_VALUE) + if(sfnValue >= MAX_SFN_VALUE && slotValue > MAX_SLOT_VALUE) { sfnValue = 0; slotValue = 0; @@ -353,12 +518,9 @@ PUBLIC uint16_t l1BuildAndSendSlotIndication() sfnValue++; slotValue = 0; } - slotIndMsg->sfn = sfnValue; - slotIndMsg->slot = slotValue; fillMsgHeader(&slotIndMsg->header, FAPI_SLOT_INDICATION, sizeof(fapi_slot_ind_t)); - DU_LOG("\nPHY_STUB: [%d:%d] ",sfnValue,slotValue); handlePhyMessages(slotIndMsg->header.message_type_id, sizeof(fapi_slot_ind_t), (void*)slotIndMsg); - SPutSBuf(0, 0, (Data *)slotIndMsg, sizeof(slotIndMsg)); + MAC_FREE(slotIndMsg, sizeof(fapi_slot_ind_t)); } #endif return ROK; @@ -384,19 +546,21 @@ PUBLIC uint16_t l1BuildAndSendSlotIndication() PUBLIC S16 l1HdlStartReq(uint32_t msgLen, void *msg) { +#ifdef INTEL_FAPI + fapi_start_req_t *startReq = (fapi_start_req_t *)msg; + if(clGlobalCp.phyState == PHY_STATE_CONFIGURED) { - duStartSlotIndicaion(); -#ifdef FAPI - SPutSBuf(0, 0, (Data *)msg, sizeof(fapi_start_req_t)); -#endif - return ROK; + l1HdlSlotIndicaion(FALSE); + MAC_FREE(startReq, sizeof(fapi_start_req_t)); } else { DU_LOG("\nPHY_STUB: Received Start Req in PHY State %d", clGlobalCp.phyState); return RFAILED; } +#endif + return ROK; } /******************************************************************* @@ -419,11 +583,11 @@ PUBLIC S16 l1HdlStartReq(uint32_t msgLen, void *msg) PUBLIC S16 l1HdlDlTtiReq(uint16_t msgLen, void *msg) { -#ifdef FAPI +#ifdef INTEL_FAPI fapi_dl_tti_req_t *dlTtiReq; dlTtiReq = (fapi_dl_tti_req_t *)msg; - printf("\nPHY STUB: Received DL TTI Request"); + printf("\nPHY STUB: DL TTI Request at sfn=%d slot=%d",dlTtiReq->sfn,dlTtiReq->slot); #if 0 printf("\nPHY_STUB: SFN %d", dlTtiReq->sfn); printf("\nPHY_STUB: SLOT %d", dlTtiReq->slot); @@ -438,27 +602,58 @@ PUBLIC S16 l1HdlDlTtiReq(uint16_t msgLen, void *msg) printf("\nPHY_STUB: bchPayloadFlag %d", dlTtiReq->pdus->u.ssb_pdu.bchPayloadFlag); printf("\nPHY_STUB: bchPayload %x", dlTtiReq->pdus->u.ssb_pdu.bchPayload); #endif - uint8_t numPdus = dlTtiReq->nPdus; - if(numPdus == 0) + uint8_t pduCount = 0; + if(dlTtiReq->nPdus == 0) { DU_LOG("\nPHY_STUB: No PDU in DL TTI Request"); } - while(numPdus) + for(pduCount=0; pduCountnPdus; pduCount++) { - if(dlTtiReq->pdus->pduType == 3) //SSB_PDU_TYPE + if(dlTtiReq->pdus[pduCount].pduType == 3) //SSB_PDU_TYPE DU_LOG("\nPHY_STUB: SSB PDU"); - else if(dlTtiReq->pdus->pduType == 0) - DU_LOG("\nPHY_STUB: SIB1 PDCCH PDU"); - else if(dlTtiReq->pdus->pduType == 1) - DU_LOG("\nPHY_STUB: SIB1 PDSCH PDU"); - - numPdus--; + else if(dlTtiReq->pdus[pduCount].pduType == 0) + DU_LOG("\nPHY_STUB: PDCCH PDU"); + else if(dlTtiReq->pdus[pduCount].pduType == 1) + DU_LOG("\nPHY_STUB: PDSCH PDU"); } - MAC_FREE(dlTtiReq, sizeof(fapi_dl_tti_req_t)); + + /* Free FAPI message */ + MAC_FREE(dlTtiReq, msgLen); + #endif return ROK; } +/******************************************************************* +* +* @brief Handles tx_data request received from MAC +* +* @details +* +* Function : l1HdlTxDataReq +* +* Functionality: +* -Handles tx_data request received from MAC +* +* @params[in] Message length +* tx_data request message pointer +* +* @return void +* +* ****************************************************************/ + +PUBLIC S16 l1HdlTxDataReq(uint16_t msgLen, void *msg) +{ +#ifdef INTEL_FAPI + fapi_tx_data_req_t *txDataReq; + txDataReq = (fapi_tx_data_req_t *)msg; + + DU_LOG("\nPHY STUB: TX DATA Request at sfn=%d slot=%d",txDataReq->sfn,txDataReq->slot); + + MAC_FREE(txDataReq, msgLen); +#endif + return ROK; +} /******************************************************************* * * @brief Handles Ul Tti request received from MAC @@ -479,7 +674,7 @@ PUBLIC S16 l1HdlDlTtiReq(uint16_t msgLen, void *msg) PUBLIC S16 l1HdlUlTtiReq(uint16_t msgLen, void *msg) { -#ifdef FAPI +#ifdef INTEL_FAPI fapi_ul_tti_req_t *ulTtiReq; DU_LOG("\nPHY STUB: Received UL TTI Request"); @@ -493,17 +688,108 @@ PUBLIC S16 l1HdlUlTtiReq(uint16_t msgLen, void *msg) } while(numPdus) { - if(ulTtiReq->pdus->pduType == 0) + if(ulTtiReq->pdus[numPdus-1].pduType == 0) + { DU_LOG("\nPHY STUB: PRACH PDU"); + } + if(ulTtiReq->pdus[numPdus-1].pduType == 1) + { + DU_LOG("\nPHY STUB: PUSCH PDU"); + l1BuildAndSendRxDataInd(ulTtiReq->slot, ulTtiReq->sfn, \ + ulTtiReq->pdus[numPdus-1].u.pusch_pdu); + } + if(ulTtiReq->pdus[numPdus-1].pduType == 2) + { + DU_LOG("\nPHY STUB: PUCCH PDU"); + } numPdus--; } - if(rachIndSent == false && ulTtiReq->slot == 8) + + if(rachIndSent == false && ulTtiReq->sfn == 2 && ulTtiReq->slot == 6) { rachIndSent = true; l1BuildAndSendRachInd(ulTtiReq->slot, ulTtiReq->sfn); } + + MAC_FREE(ulTtiReq, msgLen); +#endif + return ROK; +} + +/******************************************************************* + * + * @brief Builds and Send the stop Indication message to MAC + * + * @details + * + * Function : l1BuildAndSendStopInd + * + * Functionality: + * -Send the Stop indication Message to MAC + * + * + * @return void + * + * ****************************************************************/ +PUBLIC uint16_t l1BuildAndSendStopInd() +{ +#ifdef INTEL_FAPI + fapi_stop_ind_t *stopIndMsg = NULLP; + uint32_t msgLen = 0; + + MAC_ALLOC(stopIndMsg, sizeof(fapi_stop_ind_t)); + if(!stopIndMsg) + { + DU_LOG("\nPHY_STUB: Memory allocation failed for stop Indication Message"); + return RFAILED; + } + else + { + fillMsgHeader(&stopIndMsg->header, FAPI_STOP_INDICATION, msgLen); + DU_LOG("\n\nPHY_STUB: Processing Stop indication to MAC"); + handlePhyMessages(stopIndMsg->header.message_type_id,\ + sizeof(fapi_stop_ind_t), (void*)stopIndMsg); + MAC_FREE(stopIndMsg, sizeof(fapi_stop_ind_t)); + } +#endif + return ROK; +} - MAC_FREE(ulTtiReq, sizeof(fapi_ul_tti_req_t)); +/******************************************************************* + * + * @brief Handles stop request received from MAC + * + * @details + * + * Function : l1HdlStopReq + * + * Functionality: + * -Handles stop request received from MAC + * + * @params[in] Message length + * stop request message pointer + * + * @return void + * + * ****************************************************************/ + +PUBLIC S16 l1HdlStopReq(uint32_t msgLen, void *msg) +{ +#ifdef INTEL_FAPI + fapi_stop_req_t *stopReq = (fapi_stop_req_t *)msg; + + if(clGlobalCp.phyState == PHY_STATE_RUNNING) + { + l1HdlSlotIndicaion(TRUE); + DU_LOG("\nPHY_STUB: Slot Indication is stopped successfully"); + l1BuildAndSendStopInd(); + MAC_FREE(stopReq, msgLen); + } + else + { + DU_LOG("\nPHY_STUB: Received Stop Req in PHY State %d", clGlobalCp.phyState); + return RFAILED; + } #endif return ROK; } @@ -531,7 +817,7 @@ void l1ProcessFapiRequest(uint8_t msgType, uint32_t msgLen, void *msg) { switch(msgType) { -#ifdef FAPI +#ifdef INTEL_FAPI case FAPI_PARAM_REQUEST: l1HdlParamReq(msgLen, msg); break; @@ -544,9 +830,15 @@ void l1ProcessFapiRequest(uint8_t msgType, uint32_t msgLen, void *msg) case FAPI_DL_TTI_REQUEST: l1HdlDlTtiReq(msgLen, msg); break; + case FAPI_TX_DATA_REQUEST: + l1HdlTxDataReq(msgLen, msg); + break; case FAPI_UL_TTI_REQUEST: l1HdlUlTtiReq(msgLen, msg); break; + case FAPI_STOP_REQUEST: + l1HdlStopReq(msgLen, msg); + break; default: DU_LOG("\nPHY_STUB: Invalid message type[%x] received at PHY", msgType); break;