X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrmac%2Flwr_mac_handle_phy.c;h=28a0ea27219acdad264d60d6b9427d13d7cbf31c;hb=ba2574ac618b40905509604da8d3a2b1b9e39664;hp=1df5ead78baa20716658f15c57c4514c6d331c85;hpb=45d134510deb6902b870b4a0fb574b6075fba601;p=o-du%2Fl2.git diff --git a/src/5gnrmac/lwr_mac_handle_phy.c b/src/5gnrmac/lwr_mac_handle_phy.c index 1df5ead78..28a0ea272 100644 --- a/src/5gnrmac/lwr_mac_handle_phy.c +++ b/src/5gnrmac/lwr_mac_handle_phy.c @@ -21,6 +21,7 @@ #include "lrg.h" #ifdef INTEL_FAPI #include "fapi.h" +#include "fapi_vendor_extension.h" #endif /* header/extern include files (.x) */ @@ -33,18 +34,19 @@ #include "lwr_mac_upr_inf.h" #include "mac.h" #include "mac_utils.h" +#include "lwr_mac_utils.h" #ifdef INTEL_FAPI /* Function pointer for slot indication from lower mac to mac */ -packSlotIndMsg packSlotIndOpts[] = +SlotIndFunc sendSlotIndOpts[] = { - packLcSlotInd, /* packing for loosely coupled */ + packSlotInd, /* packing for loosely coupled */ fapiMacSlotInd, /* packing for tightly coupled */ - packLwlcSlotInd /* packing for light weight loosly coupled */ + packSlotInd /* packing for light weight loosly coupled */ }; /* Function pointer for rach indication from lower mac to mac */ -packRachIndMsg sendRachIndOpts[] = +RachIndFunc sendRachIndOpts[] = { packRachInd, fapiMacRachInd, @@ -52,7 +54,7 @@ packRachIndMsg sendRachIndOpts[] = }; /* Function pointer for crc indication from lower mac to mac */ -packCrcIndMsg sendCrcIndOpts[] = +CrcIndFunc sendCrcIndOpts[] = { packCrcInd, fapiMacCrcInd, @@ -60,7 +62,7 @@ packCrcIndMsg sendCrcIndOpts[] = }; /* Function pointer for Rx Data indication from lower mac to mac */ -packRxDataIndMsg sendRxDataIndOpts[] = +RxDataIndFunc sendRxDataIndOpts[] = { packRxDataInd, fapiMacRxDataInd, @@ -68,41 +70,20 @@ packRxDataIndMsg sendRxDataIndOpts[] = }; /* Function pointer for stop indication from lower mac to mac */ -packStopIndMsg sendStopIndOpts[] = +StopIndFunc sendStopIndOpts[] = { packStopInd, fapiMacStopInd, packStopInd }; -/******************************************************************* - * - * @brief Fills post structure - * - * @details - * - * Function : fillLwrMacToMacPst - * - * Functionality: - * Fills post structure used to send message from lower MAC - * to MAC - * - * @params[in] Pst pointer - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ -void fillLwrMacToMacPst(Pst *pst) + +/* Function pointer for Uci indication from lower mac to mac */ +UciIndFunc sendUciIndOpts[] = { - pst->srcProcId = 0; - pst->dstProcId = 0; - pst->srcEnt = ENTTF; - pst->dstEnt = ENTRG; - pst->srcInst = 0; - pst->dstInst = 0; - pst->region = 0; - pst->pool = 0; - pst->selector = ODU_SELECTOR_TC; -} + packUciInd, + FapiMacUciInd, + packUciInd +}; /******************************************************************* * @@ -124,19 +105,26 @@ uint8_t procSlotInd(fapi_slot_ind_t *fapiSlotInd) { /* fill Pst structure to send to lwr_mac to MAC */ Pst pst; - uint16_t ret; - SlotIndInfo slotInd; - - fillLwrMacToMacPst(&pst); - pst.event = EVENT_SLOT_IND_TO_MAC; + uint16_t ret = 0; + SlotIndInfo *slotInd = {0}; - slotInd.cellId = lwrMacCb.cellCb[0].cellId; - slotInd.sfn = fapiSlotInd->sfn; - slotInd.slot = fapiSlotInd->slot; + MAC_ALLOC_SHRABL_BUF(slotInd, sizeof(SlotIndInfo)); + if(slotInd) + { + slotInd->cellId = lwrMacCb.cellCb[0].cellId; + slotInd->sfn = fapiSlotInd->sfn; + slotInd->slot = fapiSlotInd->slot; - ret = (*packSlotIndOpts[pst.selector])(&pst, &slotInd); + FILL_PST_LWR_MAC_TO_MAC(pst, EVENT_SLOT_IND_TO_MAC); + ret = (*sendSlotIndOpts[pst.selector])(&pst, slotInd); + } + else + { + printf("\nLWR_MAC: Memory allocation failed in procSlotInd"); + ret = RFAILED; + } -#ifdef INTEL_WLS +#ifdef INTEL_WLS_MEM slotIndIdx++; if(slotIndIdx > WLS_MEM_FREE_PRD) { @@ -144,7 +132,6 @@ uint8_t procSlotInd(fapi_slot_ind_t *fapiSlotInd) } freeWlsBlockList(slotIndIdx - 1); #endif - return ret; } @@ -165,20 +152,25 @@ uint8_t procSlotInd(fapi_slot_ind_t *fapiSlotInd) * ****************************************************************/ uint8_t procStopInd() { - uint8_t ret; Pst pst; + uint16_t *cellId = NULLP; + MAC_ALLOC_SHRABL_BUF(cellId, sizeof(uint16_t)); + if(!cellId) + { + printf("\nLWR_MAC: Memory Allocation failed in procStopInd"); + return RFAILED; + } + + *cellId = lwrMacCb.cellCb[0].cellId; lwrMacCb.phyState = PHY_STATE_CONFIGURED; lwrMacCb.cellCb[0].state = PHY_STATE_CONFIGURED; DU_LOG("\nLWR_MAC: PHY has moved to configured state"); - fillLwrMacToMacPst(&pst); - pst.event = EVENT_STOP_IND_TO_MAC; - - ret = (*sendStopIndOpts[pst.selector])(&pst, \ - lwrMacCb.cellCb[0].cellId); - return ret; + FILL_PST_LWR_MAC_TO_MAC(pst, EVENT_STOP_IND_TO_MAC); + return (*sendStopIndOpts[pst.selector])(&pst, cellId); } + /******************************************************************* * * @brief Processes Rach Indication from PHY and sends to MAC @@ -200,16 +192,23 @@ uint8_t procRachInd(fapi_rach_indication_t *fapiRachInd) Pst pst; uint8_t pduIdx; uint8_t prmbleIdx; - RachPduInfo *rachPdu; - RachInd rachInd; - - rachInd.cellId = lwrMacCb.cellCb[0].cellId; - rachInd.timingInfo.sfn = fapiRachInd->sfn; - rachInd.timingInfo.slot = fapiRachInd->slot; - rachInd.numPdu = fapiRachInd->numPdus; - for(pduIdx=0; pduIdx < rachInd.numPdu; pduIdx++) + RachPduInfo *rachPdu = NULLP; + RachInd *rachInd = NULLP; + + MAC_ALLOC_SHRABL_BUF(rachInd, sizeof(RachInd)); + if(!rachInd) + { + printf("\nLWR_MAC: Memory Allocation failed in procRachInd"); + return RFAILED; + } + + rachInd->cellId = lwrMacCb.cellCb[0].cellId; + rachInd->timingInfo.sfn = fapiRachInd->sfn; + rachInd->timingInfo.slot = fapiRachInd->slot; + rachInd->numPdu = fapiRachInd->numPdus; + for(pduIdx=0; pduIdx < rachInd->numPdu; pduIdx++) { - rachPdu = &rachInd.rachPdu[pduIdx]; + rachPdu = &rachInd->rachPdu[pduIdx]; rachPdu->pci = fapiRachInd->rachPdu[pduIdx].phyCellId; rachPdu->symbolIdx = fapiRachInd->rachPdu[pduIdx].symbolIndex; rachPdu->slotIdx = fapiRachInd->rachPdu[pduIdx].slotIndex; @@ -223,11 +222,10 @@ uint8_t procRachInd(fapi_rach_indication_t *fapiRachInd) fapiRachInd->rachPdu[pduIdx].preambleInfo[prmbleIdx].timingAdvance; } } - fillLwrMacToMacPst(&pst); - pst.event = EVENT_RACH_IND_TO_MAC; - (*sendRachIndOpts[pst.selector])(&pst, &rachInd); - return ROK; + /* Fill post and sent to MAC */ + FILL_PST_LWR_MAC_TO_MAC(pst, EVENT_RACH_IND_TO_MAC); + return (*sendRachIndOpts[pst.selector])(&pst, rachInd); }/* handleRachInd */ @@ -253,17 +251,24 @@ uint8_t procCrcInd(fapi_crc_ind_t *fapiCrcInd) Pst pst; uint8_t crcInfoIdx; uint8_t crcStatusIdx; - CrcInfo *crcIndInfo; - CrcInd crcInd; + CrcInfo *crcIndInfo = NULLP; + CrcInd *crcInd = NULLP; + + MAC_ALLOC_SHRABL_BUF(crcInd, sizeof(CrcInd)); + if(!crcInd) + { + printf("\nLWR_MAC: Memory Allocation failed in procCrcInd"); + return RFAILED; + } - crcInd.cellId = lwrMacCb.cellCb[0].cellId; - crcInd.timingInfo.sfn = fapiCrcInd->sfn; - crcInd.timingInfo.slot = fapiCrcInd->slot; - crcInd.numCrc = fapiCrcInd->numCrcs; + crcInd->cellId = lwrMacCb.cellCb[0].cellId; + crcInd->timingInfo.sfn = fapiCrcInd->sfn; + crcInd->timingInfo.slot = fapiCrcInd->slot; + crcInd->numCrc = fapiCrcInd->numCrcs; - for(crcInfoIdx = 0; crcInfoIdx < crcInd.numCrc; crcInfoIdx++) + for(crcInfoIdx = 0; crcInfoIdx < crcInd->numCrc; crcInfoIdx++) { - crcIndInfo = &crcInd.crcInfo[crcInfoIdx]; + crcIndInfo = &crcInd->crcInfo[crcInfoIdx]; crcIndInfo->handle = fapiCrcInd->crc[crcInfoIdx].handle; crcIndInfo->rnti = fapiCrcInd->crc[crcInfoIdx].rnti; crcIndInfo->harqId = fapiCrcInd->crc[crcInfoIdx].harqId; @@ -279,12 +284,9 @@ uint8_t procCrcInd(fapi_crc_ind_t *fapiCrcInd) crcIndInfo->rssi = fapiCrcInd->crc[crcInfoIdx].rssi; } - fillLwrMacToMacPst(&pst); - pst.event = EVENT_CRC_IND_TO_MAC; - - (*sendCrcIndOpts[pst.selector])(&pst, &crcInd); - return ROK; - + /* Fill post and sent to MAC */ + FILL_PST_LWR_MAC_TO_MAC(pst, EVENT_CRC_IND_TO_MAC); + return (*sendCrcIndOpts[pst.selector])(&pst, crcInd); } /* handleCrcInd */ /******************************************************************* @@ -307,18 +309,25 @@ uint8_t procCrcInd(fapi_crc_ind_t *fapiCrcInd) uint8_t procRxDataInd(fapi_rx_data_indication_t *fapiRxDataInd) { Pst pst; - uint8_t pduIdx; - RxDataInd rxDataInd; - RxDataIndPdu *pdu; + uint8_t pduIdx =0; + RxDataInd *rxDataInd = NULLP; + RxDataIndPdu *pdu = NULLP; - rxDataInd.cellId = lwrMacCb.cellCb[0].cellId; - rxDataInd.timingInfo.sfn = fapiRxDataInd->sfn; - rxDataInd.timingInfo.slot = fapiRxDataInd->slot; - rxDataInd.numPdus = fapiRxDataInd->numPdus; + MAC_ALLOC_SHRABL_BUF(rxDataInd, sizeof(RxDataInd)); + if(!rxDataInd) + { + printf("\nLWR_MAC: Memory Allocation failed in procRxDataInd"); + return RFAILED; + } - for(pduIdx = 0; pduIdx < rxDataInd.numPdus; pduIdx++) + rxDataInd->cellId = lwrMacCb.cellCb[0].cellId; + rxDataInd->timingInfo.sfn = fapiRxDataInd->sfn; + rxDataInd->timingInfo.slot = fapiRxDataInd->slot; + rxDataInd->numPdus = fapiRxDataInd->numPdus; + + for(pduIdx = 0; pduIdx < rxDataInd->numPdus; pduIdx++) { - pdu = &rxDataInd.pdus[pduIdx]; + pdu = &rxDataInd->pdus[pduIdx]; pdu->handle = fapiRxDataInd->pdus[pduIdx].handle; pdu->rnti = fapiRxDataInd->pdus[pduIdx].rnti; pdu->harqId = fapiRxDataInd->pdus[pduIdx].harqId; @@ -327,32 +336,181 @@ uint8_t procRxDataInd(fapi_rx_data_indication_t *fapiRxDataInd) pdu->timingAdvance = fapiRxDataInd->pdus[pduIdx].timingAdvance; pdu->rssi = fapiRxDataInd->pdus[pduIdx].rssi; - MAC_ALLOC(pdu->pduData, pdu->pduLength); + MAC_ALLOC_SHRABL_BUF(pdu->pduData, pdu->pduLength); memcpy(pdu->pduData, fapiRxDataInd->pdus[pduIdx].pduData, pdu->pduLength); +#ifdef INTEL_WLS_MEM + /* Free WLS memory allocated for Rx PDU */ + WLS_MEM_FREE(fapiRxDataInd->pdus[pduIdx].pduData, LWR_MAC_WLS_BUF_SIZE); +#endif } - fillLwrMacToMacPst(&pst); - pst.event = EVENT_RX_DATA_IND_TO_MAC; + /* Fill post and sent to MAC */ + FILL_PST_LWR_MAC_TO_MAC(pst, EVENT_RX_DATA_IND_TO_MAC); + return (*sendRxDataIndOpts[pst.selector])(&pst, rxDataInd); +} - (*sendRxDataIndOpts[pst.selector])(&pst, &rxDataInd); - return ROK; +/******************************************************************* + * + * @brief Fills Uci Ind Pdu Info carried on Pucch Format 0/Format 1 + * + * @details + * + * Function : fillUciIndPucchF0F1 + * + * Functionality: + * Fills Uci Ind Pdu Info carried on Pucch Format 0/Format 1 + * + *@params[in] UciPucchF0F1 * + * fapi_uci_o_pucch_f0f1_t * + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t fillUciIndPucchF0F1(UciPucchF0F1 *pduInfo, fapi_uci_o_pucch_f0f1_t *fapiPduInfo) +{ + + uint8_t harqIdx; + uint8_t ret = ROK; + + pduInfo->handle = fapiPduInfo->handle; + pduInfo->pduBitmap = fapiPduInfo->pduBitmap; + pduInfo->pucchFormat = fapiPduInfo->pucchFormat; + pduInfo->ul_cqi = fapiPduInfo->ul_cqi; + pduInfo->crnti = fapiPduInfo->rnti; + pduInfo->timingAdvance = fapiPduInfo->timingAdvance; + pduInfo->rssi = fapiPduInfo->rssi; + if(fapiPduInfo->srInfo.srIndication) + { + pduInfo->srInfo.srIndPres = fapiPduInfo->srInfo.srIndication; + pduInfo->srInfo.srConfdcLevel = fapiPduInfo->srInfo.srConfidenceLevel; + } + if(fapiPduInfo->harqInfo.numHarq) + { + pduInfo->harqInfo.numHarq = fapiPduInfo->harqInfo.numHarq; + pduInfo->harqInfo.harqConfdcLevel = fapiPduInfo->harqInfo.harqConfidenceLevel; + for(harqIdx = 0; harqIdx < pduInfo->harqInfo.numHarq; harqIdx++) + { + pduInfo->harqInfo.harqValue[harqIdx] = fapiPduInfo->harqInfo.harqValue[harqIdx]; + } + } + return ret; } +/******************************************************************* + * + * @brief Handles Uci indication from PHY and sends to MAC + * + * @details + * + * Function : procUciInd + * + * Functionality: + * Handles Uci indication from PHY and sends to MAC + * + * @params[in] fapi_uci_indication_t message pointer + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ + +uint8_t procUciInd(fapi_uci_indication_t *fapiUciInd) +{ + uint8_t pduIdx; + uint8_t ret = ROK; + Pst pst; + UciInd *macUciInd = NULLP; + + MAC_ALLOC_SHRABL_BUF(macUciInd, sizeof(UciInd)); + if(!macUciInd) + { + printf("\nLWR_MAC: Memory Allocation failed in procUciInd"); + return RFAILED; + } + + memset(macUciInd, 0, sizeof(UciInd)); + macUciInd->cellId = lwrMacCb.cellCb[0].cellId; + macUciInd->slotInd.sfn = fapiUciInd->sfn; + macUciInd->slotInd.slot = fapiUciInd->slot; + macUciInd->numUcis = fapiUciInd->numUcis; + + for(pduIdx = 0; pduIdx < macUciInd->numUcis; pduIdx++) + { + macUciInd->pdus[pduIdx].pduType = fapiUciInd->uciPdu[pduIdx].pduType; + switch(macUciInd->pdus[pduIdx].pduType) + { + case UCI_IND_PUSCH: + break; + case UCI_IND_PUCCH_F0F1: + { + UciPucchF0F1 *pduInfo = NULLP; + macUciInd->pdus[pduIdx].pduSize = fapiUciInd->uciPdu[pduIdx].pduSize; + pduInfo = &macUciInd->pdus[pduIdx].uci.uciPucchF0F1; + ret = fillUciIndPucchF0F1(pduInfo, &fapiUciInd->uciPdu[pduIdx].uci.uciPucchF0F1); + } + break; + case UCI_IND_PUCCH_F2F3F4: + break; + default: + DU_LOG("\nLWR_MAC: Invalid Pdu Type %d at procmacUciInd()", macUciInd->pdus[pduIdx].pduType); + ret = RFAILED; + break; + } + } + if(!ret) + { + FILL_PST_LWR_MAC_TO_MAC(pst, EVENT_UCI_IND_TO_MAC); + ret = (*sendUciIndOpts[pst.selector])(&pst, macUciInd); + } + else + { + DU_LOG("\nLWR_MAC: Failed sending UCI Ind to MAC"); + } + return ret; +} #endif /* FAPI */ +/******************************************************************* + * + * @brief Processes message from PHY + * + * @details + * + * Function : procPhyMessages + * + * Functionality: Processes message from PHY + * + * @params[in] + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ void procPhyMessages(uint16_t msgType, uint32_t msgSize, void *msg) { #ifdef INTEL_FAPI /* extract the header */ - fapi_msg_t *header; + fapi_msg_t *header = NULLP; header = (fapi_msg_t *)msg; switch(header->msg_id) { +#ifdef INTEL_TIMER_MODE + case FAPI_VENDOR_EXT_UL_IQ_SAMPLES: + { + printf("\nLWR_MAC: Received FAPI_VENDOR_EXT_UL_IQ_SAMPLES"); + //send config req + uint16_t cellId = 1; + sendToLowerMac(CONFIG_REQUEST, 0, (void *)&cellId); + break; + } +#endif case FAPI_PARAM_RESPONSE: + { + sendToLowerMac(PARAM_RESPONSE, msgSize, msg); + break; + } case FAPI_CONFIG_RESPONSE: { - sendToLowerMac(msgType, msgSize, msg); + sendToLowerMac(CONFIG_RESPONSE, msgSize, msg); break; } case FAPI_SLOT_INDICATION: @@ -364,7 +522,7 @@ void procPhyMessages(uint16_t msgType, uint32_t msgSize, void *msg) lwrMacCb.cellCb[0].state = PHY_STATE_RUNNING; } - fapi_slot_ind_t *slotInd; + fapi_slot_ind_t *slotInd = NULLP; slotInd = (fapi_slot_ind_t *)msg; procSlotInd(slotInd); break; @@ -389,6 +547,9 @@ void procPhyMessages(uint16_t msgType, uint32_t msgSize, void *msg) } case FAPI_UCI_INDICATION: { + fapi_uci_indication_t *phyUciInd = NULLP; + phyUciInd = (fapi_uci_indication_t*)msg; + procUciInd(phyUciInd); break; } case FAPI_SRS_INDICATION: @@ -409,9 +570,6 @@ void procPhyMessages(uint16_t msgType, uint32_t msgSize, void *msg) break; } } -#ifdef INTEL_WLS - WLS_MEM_FREE(msg, LWR_MAC_WLS_BUF_SIZE); -#endif #endif }