1 /*******************************************************************************
2 ################################################################################
3 # Copyright (c) [2017-2019] [Radisys] #
5 # Licensed under the Apache License, Version 2.0 (the "License"); #
6 # you may not use this file except in compliance with the License. #
7 # You may obtain a copy of the License at #
9 # http://www.apache.org/licenses/LICENSE-2.0 #
11 # Unless required by applicable law or agreed to in writing, software #
12 # distributed under the License is distributed on an "AS IS" BASIS, #
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
14 # See the License for the specific language governing permissions and #
15 # limitations under the License. #
16 ################################################################################
17 *******************************************************************************/
19 #include "lwr_mac_fsm.h"
21 EXTERN void sendToPhy ARGS((U16 msgType, U32 msgLen, void *msg));
23 /*******************************************************************
25 * @brief Handles Invalid Request Event
29 * Function : lwr_mac_handleInvalidEvt
32 * - Displays the PHY state when the invalid event occurs
35 * @return ROK - success
38 * ****************************************************************/
39 S16 lwr_mac_handleInvalidEvt(void *msg)
41 printf("\n Error Indication Event[%d] received in state [%d]", clGlobalCp.event, clGlobalCp.phyState);
45 /*******************************************************************
47 * @brief Fills FAPI message header
51 * Function : fillMsgHeader
54 * -Fills FAPI message header
56 * @params[in] Pointer to header
62 * ****************************************************************/
63 PUBLIC void fillMsgHeader(fapi_msg_t *hdr, U16 msgType, U16 msgLen)
65 hdr->message_type_id = msgType;
69 /*******************************************************************
71 * @brief Fills FAPI Config Request message header
78 * -Fills FAPI Config Request message header
80 * @params[in] Pointer to TLV
87 * ****************************************************************/
88 PUBLIC void fillTlvs(fapi_uint16_tlv_t *tlv, U16 tag, U16 length, U16 value, U16 *msgLen)
91 tlv->tl.length = length;
93 *msgLen = *msgLen + sizeof(tag) + sizeof(length) + length;
95 /*******************************************************************
97 * @brief fills the cyclic prefix by comparing the bitmask
101 * Function : fillCyclicPrefix
104 * -checks the value with the bitmask and
105 * fills the cellPtr's cyclic prefix.
107 * @params[in] Pointer to ClCellParam
108 * Value to be compared
111 ********************************************************************/
112 PUBLIC void fillCyclicPrefix(U8 value, ClCellParam **cellPtr)
114 if((value & FAPI_NORMAL_CYCLIC_PREFIX_MASK) == FAPI_NORMAL_CYCLIC_PREFIX_MASK)
116 (*cellPtr)->cyclicPrefix = NORMAL_CYCLIC_PREFIX_MASK;
118 else if((value & FAPI_EXTENDED_CYCLIC_PREFIX_MASK) == FAPI_EXTENDED_CYCLIC_PREFIX_MASK)
120 (*cellPtr)->cyclicPrefix = EXTENDED_CYCLIC_PREFIX_MASK;
124 (*cellPtr)->cyclicPrefix = INVALID_VALUE;
128 /*******************************************************************
130 * @brief fills the subcarrier spacing of Downlink by comparing the bitmask
134 * Function : fillSubcarrierSpaceDl
137 * -checks the value with the bitmask and
138 * fills the cellPtr's subcarrier spacing in DL
140 * @params[in] Pointer to ClCellParam
141 * Value to be compared
144 * ****************************************************************/
146 PUBLIC void fillSubcarrierSpaceDl(U8 value, ClCellParam **cellPtr)
148 if((value & FAPI_15KHZ_MASK) == FAPI_15KHZ_MASK)
150 (*cellPtr)->supportedSubcarrierSpacingDl = SPACING_15_KHZ;
152 else if((value & FAPI_30KHZ_MASK) == FAPI_30KHZ_MASK)
154 (*cellPtr)->supportedSubcarrierSpacingDl = SPACING_30_KHZ;
156 else if((value & FAPI_60KHZ_MASK) == FAPI_60KHZ_MASK)
158 (*cellPtr)->supportedSubcarrierSpacingDl = SPACING_60_KHZ;
160 else if((value & FAPI_120KHZ_MASK) == FAPI_120KHZ_MASK)
162 (*cellPtr)->supportedSubcarrierSpacingDl = SPACING_120_KHZ;
166 (*cellPtr)->supportedSubcarrierSpacingDl = INVALID_VALUE;
170 /*******************************************************************
172 * @brief fills the downlink bandwidth by comparing the bitmask
176 * Function : fillBandwidthDl
179 * -checks the value with the bitmask and
180 * -fills the cellPtr's DL Bandwidth
182 * @params[in] Pointer to ClCellParam
183 * Value to be compared
186 * ****************************************************************/
188 PUBLIC void fillBandwidthDl(U16 value, ClCellParam **cellPtr)
190 if((value & FAPI_5MHZ_BW_MASK) == FAPI_5MHZ_BW_MASK)
192 (*cellPtr)->supportedBandwidthDl = BW_5MHZ;
194 else if((value & FAPI_10MHZ_BW_MASK) == FAPI_10MHZ_BW_MASK)
196 (*cellPtr)->supportedBandwidthDl = BW_10MHZ;
198 else if((value & FAPI_15MHZ_BW_MASK) == FAPI_15MHZ_BW_MASK)
200 (*cellPtr)->supportedBandwidthDl = BW_15MHZ;
202 else if((value & FAPI_20MHZ_BW_MASK) == FAPI_20MHZ_BW_MASK)
204 (*cellPtr)->supportedBandwidthDl = BW_20MHZ;
206 else if((value & FAPI_40MHZ_BW_MASK) == FAPI_40MHZ_BW_MASK)
208 (*cellPtr)->supportedBandwidthDl = BW_40MHZ;
210 else if((value & FAPI_50MHZ_BW_MASK) == FAPI_50MHZ_BW_MASK)
212 (*cellPtr)->supportedBandwidthDl = BW_50MHZ;
214 else if((value & FAPI_60MHZ_BW_MASK) == FAPI_60MHZ_BW_MASK)
216 (*cellPtr)->supportedBandwidthDl = BW_60MHZ;
218 else if((value & FAPI_70MHZ_BW_MASK) == FAPI_70MHZ_BW_MASK)
220 (*cellPtr)->supportedBandwidthDl = BW_70MHZ;
222 else if((value & FAPI_80MHZ_BW_MASK) == FAPI_80MHZ_BW_MASK)
224 (*cellPtr)->supportedBandwidthDl = BW_80MHZ;
226 else if((value & FAPI_90MHZ_BW_MASK) == FAPI_90MHZ_BW_MASK)
228 (*cellPtr)->supportedBandwidthDl = BW_90MHZ;
230 else if((value & FAPI_100MHZ_BW_MASK) == FAPI_100MHZ_BW_MASK)
232 (*cellPtr)->supportedBandwidthDl = BW_100MHZ;
234 else if((value & FAPI_200MHZ_BW_MASK) == FAPI_200MHZ_BW_MASK)
236 (*cellPtr)->supportedBandwidthDl = BW_200MHZ;
238 else if((value & FAPI_400MHZ_BW_MASK) == FAPI_400MHZ_BW_MASK)
240 (*cellPtr)->supportedBandwidthDl = BW_400MHZ;
244 (*cellPtr)->supportedBandwidthDl = INVALID_VALUE;
248 /*******************************************************************
250 * @brief fills the subcarrier spacing of Uplink by comparing the bitmask
254 * Function : fillSubcarrierSpaceUl
257 * -checks the value with the bitmask and
258 * -fills cellPtr's subcarrier spacing in UL
260 * @params[in] Pointer to ClCellParam
261 * Value to be compared
264 * ****************************************************************/
266 PUBLIC void fillSubcarrierSpaceUl(U8 value, ClCellParam **cellPtr)
268 if((value & FAPI_15KHZ_MASK) == FAPI_15KHZ_MASK)
270 (*cellPtr)->supportedSubcarrierSpacingsUl = SPACING_15_KHZ;
272 else if((value & FAPI_30KHZ_MASK) == FAPI_30KHZ_MASK)
274 (*cellPtr)->supportedSubcarrierSpacingsUl = SPACING_30_KHZ;
276 else if((value & FAPI_60KHZ_MASK) == FAPI_60KHZ_MASK)
278 (*cellPtr)->supportedSubcarrierSpacingsUl = SPACING_60_KHZ;
280 else if((value & FAPI_120KHZ_MASK) == FAPI_120KHZ_MASK)
282 (*cellPtr)->supportedSubcarrierSpacingsUl = SPACING_120_KHZ;
286 (*cellPtr)->supportedSubcarrierSpacingsUl = INVALID_VALUE;
290 /*******************************************************************
292 * @brief fills the uplink bandwidth by comparing the bitmask
296 * Function : fillBandwidthUl
299 * -checks the value with the bitmask and
300 * fills the cellPtr's UL Bandwidth
304 * @params[in] Pointer to ClCellParam
305 * Value to be compared
309 * ****************************************************************/
311 PUBLIC void fillBandwidthUl(U16 value, ClCellParam **cellPtr)
313 if((value & FAPI_5MHZ_BW_MASK) == FAPI_5MHZ_BW_MASK)
315 (*cellPtr)->supportedBandwidthUl = BW_5MHZ;
317 else if((value & FAPI_10MHZ_BW_MASK) == FAPI_10MHZ_BW_MASK)
319 (*cellPtr)->supportedBandwidthUl = BW_10MHZ;
321 else if((value & FAPI_15MHZ_BW_MASK) == FAPI_15MHZ_BW_MASK)
323 (*cellPtr)->supportedBandwidthUl = BW_15MHZ;
325 else if((value & FAPI_20MHZ_BW_MASK) == FAPI_20MHZ_BW_MASK)
327 (*cellPtr)->supportedBandwidthUl = BW_20MHZ;
329 else if((value & FAPI_40MHZ_BW_MASK) == FAPI_40MHZ_BW_MASK)
331 (*cellPtr)->supportedBandwidthUl = BW_40MHZ;
333 else if((value & FAPI_50MHZ_BW_MASK) == FAPI_50MHZ_BW_MASK)
335 (*cellPtr)->supportedBandwidthUl = BW_50MHZ;
337 else if((value & FAPI_60MHZ_BW_MASK) == FAPI_60MHZ_BW_MASK)
339 (*cellPtr)->supportedBandwidthUl = BW_60MHZ;
341 else if((value & FAPI_70MHZ_BW_MASK) == FAPI_70MHZ_BW_MASK)
343 (*cellPtr)->supportedBandwidthUl = BW_70MHZ;
345 else if((value & FAPI_80MHZ_BW_MASK) == FAPI_80MHZ_BW_MASK)
347 (*cellPtr)->supportedBandwidthUl = BW_80MHZ;
349 else if((value & FAPI_90MHZ_BW_MASK) == FAPI_90MHZ_BW_MASK)
351 (*cellPtr)->supportedBandwidthUl = BW_90MHZ;
353 else if((value & FAPI_100MHZ_BW_MASK) == FAPI_100MHZ_BW_MASK)
355 (*cellPtr)->supportedBandwidthUl = BW_100MHZ;
357 else if((value & FAPI_200MHZ_BW_MASK) == FAPI_200MHZ_BW_MASK)
359 (*cellPtr)->supportedBandwidthUl = BW_200MHZ;
361 else if((value & FAPI_400MHZ_BW_MASK) == FAPI_400MHZ_BW_MASK)
363 (*cellPtr)->supportedBandwidthUl = BW_400MHZ;
367 (*cellPtr)->supportedBandwidthUl = INVALID_VALUE;
370 /*******************************************************************
372 * @brief fills the CCE maping by comparing the bitmask
376 * Function : fillCCEmaping
379 * -checks the value with the bitmask and
380 * fills the cellPtr's CCE Mapping Type
383 * @params[in] Pointer to ClCellParam
384 * Value to be compared
387 * ****************************************************************/
389 PUBLIC void fillCCEmaping(U8 value, ClCellParam **cellPtr)
391 if ((value & FAPI_CCE_MAPPING_INTERLEAVED_MASK) == FAPI_CCE_MAPPING_INTERLEAVED_MASK)
393 (*cellPtr)->cceMappingType = CCE_MAPPING_INTERLEAVED_MASK;
395 else if((value & FAPI_CCE_MAPPING_INTERLEAVED_MASK) == FAPI_CCE_MAPPING_NONINTERLVD_MASK)
397 (*cellPtr)->cceMappingType = CCE_MAPPING_NONINTERLVD_MASK;
401 (*cellPtr)->cceMappingType = INVALID_VALUE;
405 /*******************************************************************
407 * @brief fills the PUCCH format by comparing the bitmask
411 * Function : fillPucchFormat
414 * -checks the value with the bitmask and
415 * fills the cellPtr's pucch format
418 * @params[in] Pointer to ClCellParam
419 * Value to be compared
422 * ****************************************************************/
424 PUBLIC void fillPucchFormat(U8 value, ClCellParam **cellPtr)
426 if((value & FAPI_FORMAT_0_MASK) == FAPI_FORMAT_0_MASK)
428 (*cellPtr)->pucchFormats = FORMAT_0;
430 else if((value & FAPI_FORMAT_1_MASK) == FAPI_FORMAT_1_MASK)
432 (*cellPtr)->pucchFormats = FORMAT_1;
434 else if((value & FAPI_FORMAT_2_MASK) == FAPI_FORMAT_2_MASK)
436 (*cellPtr)->pucchFormats = FORMAT_2;
438 else if((value & FAPI_FORMAT_3_MASK) == FAPI_FORMAT_3_MASK)
440 (*cellPtr)->pucchFormats = FORMAT_3;
442 else if((value & FAPI_FORMAT_4_MASK) == FAPI_FORMAT_4_MASK)
444 (*cellPtr)->pucchFormats = FORMAT_4;
448 (*cellPtr)->pucchFormats = INVALID_VALUE;
452 /*******************************************************************
454 * @brief fills the PDSCH Mapping Type by comparing the bitmask
458 * Function : fillPdschMappingType
461 * -checks the value with the bitmask and
462 * fills the cellPtr's PDSCH MappingType
464 * @params[in] Pointer to ClCellParam
465 * Value to be compared
468 * ****************************************************************/
470 PUBLIC void fillPdschMappingType(U8 value, ClCellParam **cellPtr)
472 if((value & FAPI_PDSCH_MAPPING_TYPE_A_MASK) == FAPI_PDSCH_MAPPING_TYPE_A_MASK)
474 (*cellPtr)->pdschMappingType = MAPPING_TYPE_A;
476 else if((value & FAPI_PDSCH_MAPPING_TYPE_B_MASK) == FAPI_PDSCH_MAPPING_TYPE_B_MASK)
478 (*cellPtr)->pdschMappingType = MAPPING_TYPE_B;
482 (*cellPtr)->pdschMappingType = INVALID_VALUE;
486 /*******************************************************************
488 * @brief fills the PDSCH Allocation Type by comparing the bitmask
492 * Function : fillPdschAllocationType
495 * -checks the value with the bitmask and
496 * fills the cellPtr's PDSCH AllocationType
498 * @params[in] Pointer to ClCellParam
499 * Value to be compared
502 * ****************************************************************/
504 PUBLIC void fillPdschAllocationType(U8 value, ClCellParam **cellPtr)
506 if((value & FAPI_PDSCH_ALLOC_TYPE_0_MASK) == FAPI_PDSCH_ALLOC_TYPE_0_MASK)
508 (*cellPtr)->pdschAllocationTypes = ALLOCATION_TYPE_0;
510 else if((value & FAPI_PDSCH_ALLOC_TYPE_1_MASK) == FAPI_PDSCH_ALLOC_TYPE_1_MASK)
512 (*cellPtr)->pdschAllocationTypes = ALLOCATION_TYPE_1;
516 (*cellPtr)->pdschAllocationTypes = INVALID_VALUE;
520 /*******************************************************************
522 * @brief fills the PDSCH PRB Mapping Type by comparing the bitmask
526 * Function : fillPrbMappingType
529 * -checks the value with the bitmask and
530 * fills the cellPtr's PRB Mapping Type
532 * @params[in] Pointer to ClCellParam
533 * Value to be compared
536 ******************************************************************/
537 PUBLIC void fillPrbMappingType(U8 value, ClCellParam **cellPtr)
539 if((value & FAPI_PDSCH_VRB_TO_PRB_MAP_NON_INTLV_MASK) == FAPI_PDSCH_VRB_TO_PRB_MAP_NON_INTLV_MASK)
541 (*cellPtr)->pdschVrbToPrbMapping = VRB_TO_PRB_MAP_NON_INTLV;
543 else if((value & FAPI_PDSCH_VRB_TO_PRB_MAP_INTLVD_MASK) == FAPI_PDSCH_VRB_TO_PRB_MAP_INTLVD_MASK)
545 (*cellPtr)->pdschVrbToPrbMapping = VRB_TO_PRB_MAP_INTLVD;
549 (*cellPtr)->pdschVrbToPrbMapping = INVALID_VALUE;
553 /*******************************************************************
555 * @brief fills the PDSCH DmrsConfig Type by comparing the bitmask
559 * Function : fillPdschDmrsConfigType
562 * -checks the value with the bitmask and
563 * fills the cellPtr's DmrsConfig Type
565 * @params[in] Pointer to ClCellParam
566 * Value to be compared
569 ******************************************************************/
571 PUBLIC void fillPdschDmrsConfigType(U8 value, ClCellParam **cellPtr)
573 if((value & FAPI_PDSCH_DMRS_CONFIG_TYPE_1_MASK) == FAPI_PDSCH_DMRS_CONFIG_TYPE_1_MASK)
575 (*cellPtr)->pdschDmrsConfigTypes = DMRS_CONFIG_TYPE_1;
577 else if((value & FAPI_PDSCH_DMRS_CONFIG_TYPE_2_MASK) == FAPI_PDSCH_DMRS_CONFIG_TYPE_2_MASK)
579 (*cellPtr)->pdschDmrsConfigTypes = DMRS_CONFIG_TYPE_2;
583 (*cellPtr)->pdschDmrsConfigTypes = INVALID_VALUE;
587 /*******************************************************************
589 * @brief fills the PDSCH DmrsLength by comparing the bitmask
593 * Function : fillPdschDmrsLength
596 * -checks the value with the bitmask and
597 * fills the cellPtr's PdschDmrsLength
599 * @params[in] Pointer to ClCellParam
600 * Value to be compared
603 ******************************************************************/
604 PUBLIC void fillPdschDmrsLength(U8 value, ClCellParam **cellPtr)
606 if(value == FAPI_PDSCH_DMRS_MAX_LENGTH_1)
608 (*cellPtr)->pdschDmrsMaxLength = DMRS_MAX_LENGTH_1;
610 else if(value == FAPI_PDSCH_DMRS_MAX_LENGTH_2)
612 (*cellPtr)->pdschDmrsMaxLength = DMRS_MAX_LENGTH_2;
616 (*cellPtr)->pdschDmrsMaxLength = INVALID_VALUE;
620 /*******************************************************************
622 * @brief fills the PDSCH Dmrs Additional Pos by comparing the bitmask
626 * Function : fillPdschDmrsAddPos
629 * -checks the value with the bitmask and
630 * fills the cellPtr's Pdsch DmrsAddPos
632 * @params[in] Pointer to ClCellParam
633 * Value to be compared
636 ******************************************************************/
638 PUBLIC void fillPdschDmrsAddPos(U8 value, ClCellParam **cellPtr)
640 if((value & FAPI_DMRS_ADDITIONAL_POS_0_MASK) == FAPI_DMRS_ADDITIONAL_POS_0_MASK)
642 (*cellPtr)->pdschDmrsAdditionalPos = DMRS_ADDITIONAL_POS_0;
644 else if((value & FAPI_DMRS_ADDITIONAL_POS_1_MASK) == FAPI_DMRS_ADDITIONAL_POS_1_MASK)
646 (*cellPtr)->pdschDmrsAdditionalPos = DMRS_ADDITIONAL_POS_1;
648 else if((value & FAPI_DMRS_ADDITIONAL_POS_2_MASK) == FAPI_DMRS_ADDITIONAL_POS_2_MASK)
650 (*cellPtr)->pdschDmrsAdditionalPos = DMRS_ADDITIONAL_POS_2;
652 else if((value & FAPI_DMRS_ADDITIONAL_POS_3_MASK) == FAPI_DMRS_ADDITIONAL_POS_3_MASK)
654 (*cellPtr)->pdschDmrsAdditionalPos = DMRS_ADDITIONAL_POS_3;
658 (*cellPtr)->pdschDmrsAdditionalPos = INVALID_VALUE;
662 /*******************************************************************
664 * @brief fills the Modulation Order in DL by comparing the bitmask
668 * Function : fillModulationOrderDl
671 * -checks the value with the bitmask and
672 * fills the cellPtr's ModulationOrder in DL.
674 * @params[in] Pointer to ClCellParam
675 * Value to be compared
678 ******************************************************************/
679 PUBLIC void fillModulationOrderDl(U8 value, ClCellParam **cellPtr)
683 (*cellPtr)->supportedMaxModulationOrderDl = MOD_QPSK;
687 (*cellPtr)->supportedMaxModulationOrderDl = MOD_16QAM;
691 (*cellPtr)->supportedMaxModulationOrderDl = MOD_64QAM;
695 (*cellPtr)->supportedMaxModulationOrderDl = MOD_256QAM;
699 (*cellPtr)->supportedMaxModulationOrderDl = INVALID_VALUE;
703 /*******************************************************************
705 * @brief fills the PUSCH DmrsConfig Type by comparing the bitmask
709 * Function : fillPuschDmrsConfigType
712 * -checks the value with the bitmask and
713 * fills the cellPtr's PUSCH DmrsConfigType
715 * @params[in] Pointer to ClCellParam
716 * Value to be compared
719 ******************************************************************/
721 PUBLIC void fillPuschDmrsConfig(U8 value, ClCellParam **cellPtr)
723 if((value & FAPI_PUSCH_DMRS_CONFIG_TYPE_1_MASK) == FAPI_PUSCH_DMRS_CONFIG_TYPE_1_MASK)
725 (*cellPtr)->puschDmrsConfigTypes = DMRS_CONFIG_TYPE_1;
727 else if((value & FAPI_PUSCH_DMRS_CONFIG_TYPE_2_MASK) == FAPI_PUSCH_DMRS_CONFIG_TYPE_2_MASK)
729 (*cellPtr)->puschDmrsConfigTypes = DMRS_CONFIG_TYPE_2;
733 (*cellPtr)->puschDmrsConfigTypes = INVALID_VALUE;
737 /*******************************************************************
739 * @brief fills the PUSCH DmrsLength by comparing the bitmask
743 * Function : fillPuschDmrsLength
746 * -checks the value with the bitmask and
747 * fills the cellPtr's PUSCH DmrsLength
749 * @params[in] Pointer to ClCellParam
750 * Value to be compared
753 ******************************************************************/
755 PUBLIC void fillPuschDmrsLength(U8 value, ClCellParam **cellPtr)
757 if(value == FAPI_PUSCH_DMRS_MAX_LENGTH_1)
759 (*cellPtr)->puschDmrsMaxLength = DMRS_MAX_LENGTH_1;
761 else if(value == FAPI_PUSCH_DMRS_MAX_LENGTH_2)
763 (*cellPtr)->puschDmrsMaxLength = DMRS_MAX_LENGTH_2;
767 (*cellPtr)->puschDmrsMaxLength = INVALID_VALUE;
771 /*******************************************************************
773 * @brief fills the PUSCH Dmrs Additional position by comparing the bitmask
777 * Function : fillPuschDmrsAddPos
780 * -checks the value with the bitmask and
781 * fills the cellPtr's PUSCH DmrsAddPos
783 * @params[in] Pointer to ClCellParam
784 * Value to be compared
787 ******************************************************************/
789 PUBLIC void fillPuschDmrsAddPos(U8 value, ClCellParam **cellPtr)
791 if((value & FAPI_DMRS_ADDITIONAL_POS_0_MASK) == FAPI_DMRS_ADDITIONAL_POS_0_MASK)
793 (*cellPtr)->puschDmrsAdditionalPos = DMRS_ADDITIONAL_POS_0;
795 else if((value & FAPI_DMRS_ADDITIONAL_POS_1_MASK) == FAPI_DMRS_ADDITIONAL_POS_1_MASK)
797 (*cellPtr)->puschDmrsAdditionalPos = DMRS_ADDITIONAL_POS_1;
799 else if((value & FAPI_DMRS_ADDITIONAL_POS_2_MASK) == FAPI_DMRS_ADDITIONAL_POS_2_MASK)
801 (*cellPtr)->puschDmrsAdditionalPos = DMRS_ADDITIONAL_POS_2;
803 else if((value & FAPI_DMRS_ADDITIONAL_POS_3_MASK) == FAPI_DMRS_ADDITIONAL_POS_3_MASK)
805 (*cellPtr)->puschDmrsAdditionalPos = DMRS_ADDITIONAL_POS_3;
809 (*cellPtr)->puschDmrsAdditionalPos = INVALID_VALUE;
813 /*******************************************************************
815 * @brief fills the PUSCH Mapping Type by comparing the bitmask
819 * Function : fillPuschMappingType
822 * -checks the value with the bitmask and
823 * fills the cellPtr's PUSCH MappingType
825 * @params[in] Pointer to ClCellParam
826 * Value to be compared
829 ******************************************************************/
831 PUBLIC void fillPuschMappingType(U8 value, ClCellParam **cellPtr)
833 if((value & FAPI_PUSCH_MAPPING_TYPE_A_MASK) == FAPI_PUSCH_MAPPING_TYPE_A_MASK)
835 (*cellPtr)->puschMappingType = MAPPING_TYPE_A;
837 else if((value & FAPI_PUSCH_MAPPING_TYPE_B_MASK) == FAPI_PUSCH_MAPPING_TYPE_B_MASK)
839 (*cellPtr)->puschMappingType = MAPPING_TYPE_B;
843 (*cellPtr)->puschMappingType = INVALID_VALUE;
847 /*******************************************************************
849 * @brief fills the PUSCH Allocation Type by comparing the bitmask
853 * Function : fillPuschAllocationType
856 * -checks the value with the bitmask and
857 * fills the cellPtr's PUSCH AllocationType
859 * @params[in] Pointer to ClCellParam
860 * Value to be compared
863 ******************************************************************/
865 PUBLIC void fillPuschAllocationType(U8 value, ClCellParam **cellPtr)
867 if((value & FAPI_PUSCH_ALLOC_TYPE_0_MASK) == FAPI_PUSCH_ALLOC_TYPE_0_MASK)
869 (*cellPtr)->puschAllocationTypes = ALLOCATION_TYPE_0;
871 else if((value & FAPI_PUSCH_ALLOC_TYPE_0_MASK) == FAPI_PUSCH_ALLOC_TYPE_0_MASK)
873 (*cellPtr)->puschAllocationTypes = ALLOCATION_TYPE_1;
877 (*cellPtr)->puschAllocationTypes = INVALID_VALUE;
881 /*******************************************************************
883 * @brief fills the PUSCH PRB Mapping Type by comparing the bitmask
887 * Function : fillPuschPrbMappingType
890 * -checks the value with the bitmask and
891 * fills the cellPtr's PUSCH PRB MApping Type
893 * @params[in] Pointer to ClCellParam
894 * Value to be compared
897 ******************************************************************/
899 PUBLIC void fillPuschPrbMappingType(U8 value, ClCellParam **cellPtr)
901 if((value & FAPI_PUSCH_VRB_TO_PRB_MAP_NON_INTLV_MASK) == FAPI_PUSCH_VRB_TO_PRB_MAP_NON_INTLV_MASK)
903 (*cellPtr)->puschVrbToPrbMapping = VRB_TO_PRB_MAP_NON_INTLV;
905 else if((value & FAPI_PUSCH_VRB_TO_PRB_MAP_INTLVD_MASK) == FAPI_PUSCH_VRB_TO_PRB_MAP_INTLVD_MASK)
907 (*cellPtr)->puschVrbToPrbMapping = VRB_TO_PRB_MAP_INTLVD;
911 (*cellPtr)->puschVrbToPrbMapping = INVALID_VALUE;
915 /*******************************************************************
917 * @brief fills the Modulation Order in Ul by comparing the bitmask
921 * Function : fillModulationOrderUl
924 * -checks the value with the bitmask and
925 * fills the cellPtr's Modualtsion Order in UL.
927 * @params[in] Pointer to ClCellParam
928 * Value to be compared
931 ******************************************************************/
933 PUBLIC void fillModulationOrderUl(U8 value, ClCellParam **cellPtr)
937 (*cellPtr)->supportedModulationOrderUl = MOD_QPSK;
941 (*cellPtr)->supportedModulationOrderUl = MOD_16QAM;
945 (*cellPtr)->supportedModulationOrderUl = MOD_64QAM;
949 (*cellPtr)->supportedModulationOrderUl = MOD_256QAM;
953 (*cellPtr)->supportedModulationOrderUl = INVALID_VALUE;
957 /*******************************************************************
959 * @brief fills the PUSCH Aggregation Factor by comparing the bitmask
963 * Function : fillPuschAggregationFactor
966 * -checks the value with the bitmask and
967 * fills the cellPtr's PUSCH Aggregation Factor
969 * @params[in] Pointer to ClCellParam
970 * Value to be compared
973 ******************************************************************/
975 PUBLIC void fillPuschAggregationFactor(U8 value, ClCellParam **cellPtr)
977 if((value & FAPI_FORMAT_0_MASK) == FAPI_FORMAT_0_MASK)
979 (*cellPtr)->puschAggregationFactor = AGG_FACTOR_1;
981 else if((value & FAPI_FORMAT_1_MASK) == FAPI_FORMAT_1_MASK)
983 (*cellPtr)->puschAggregationFactor = AGG_FACTOR_2;
985 else if((value & FAPI_FORMAT_2_MASK) == FAPI_FORMAT_2_MASK)
987 (*cellPtr)->puschAggregationFactor = AGG_FACTOR_4;
989 else if((value & FAPI_FORMAT_3_MASK) == FAPI_FORMAT_3_MASK)
991 (*cellPtr)->puschAggregationFactor = AGG_FACTOR_8;
995 (*cellPtr)->puschAggregationFactor = INVALID_VALUE;
999 /*******************************************************************
1001 * @brief fills the PRACH Long Format by comparing the bitmask
1005 * Function : fillPrachLongFormat
1008 * -checks the value with the bitmask and
1009 * fills the cellPtr's PRACH Long Format
1011 * @params[in] Pointer to ClCellParam
1012 * Value to be compared
1015 ******************************************************************/
1017 PUBLIC void fillPrachLongFormat(U8 value, ClCellParam **cellPtr)
1019 if((value & FAPI_PRACH_LF_FORMAT_0_MASK) == FAPI_PRACH_LF_FORMAT_0_MASK)
1021 (*cellPtr)->prachLongFormats = FORMAT_0;
1023 else if((value & FAPI_PRACH_LF_FORMAT_1_MASK) == FAPI_PRACH_LF_FORMAT_1_MASK)
1025 (*cellPtr)->prachLongFormats = FORMAT_1;
1027 else if((value & FAPI_PRACH_LF_FORMAT_2_MASK) == FAPI_PRACH_LF_FORMAT_2_MASK)
1029 (*cellPtr)->prachLongFormats = FORMAT_2;
1031 else if((value & FAPI_PRACH_LF_FORMAT_3_MASK) == FAPI_PRACH_LF_FORMAT_3_MASK)
1033 (*cellPtr)->prachLongFormats = FORMAT_3;
1037 (*cellPtr)->prachLongFormats = INVALID_VALUE;
1041 /*******************************************************************
1043 * @brief fills the PRACH Short Format by comparing the bitmask
1047 * Function : fillPrachShortFormat
1050 * -checks the value with the bitmask and
1051 * fills the cellPtr's PRACH ShortFormat
1053 * @params[in] Pointer to ClCellParam
1054 * Value to be compared
1057 ******************************************************************/
1059 PUBLIC void fillPrachShortFormat(U8 value, ClCellParam **cellPtr)
1061 if((value & FAPI_PRACH_SF_FORMAT_A1_MASK) == FAPI_PRACH_SF_FORMAT_A1_MASK)
1063 (*cellPtr)->prachShortFormats = SF_FORMAT_A1;
1065 else if((value & FAPI_PRACH_SF_FORMAT_A2_MASK) == FAPI_PRACH_SF_FORMAT_A2_MASK)
1067 (*cellPtr)->prachShortFormats = SF_FORMAT_A2;
1069 else if((value & FAPI_PRACH_SF_FORMAT_A3_MASK) == FAPI_PRACH_SF_FORMAT_A3_MASK)
1071 (*cellPtr)->prachShortFormats = SF_FORMAT_A3;
1073 else if((value & FAPI_PRACH_SF_FORMAT_B1_MASK) == FAPI_PRACH_SF_FORMAT_B1_MASK)
1075 (*cellPtr)->prachShortFormats = SF_FORMAT_B1;
1077 else if((value & FAPI_PRACH_SF_FORMAT_B2_MASK) == FAPI_PRACH_SF_FORMAT_B2_MASK)
1079 (*cellPtr)->prachShortFormats = SF_FORMAT_B2;
1081 else if((value & FAPI_PRACH_SF_FORMAT_B3_MASK) == FAPI_PRACH_SF_FORMAT_B3_MASK)
1083 (*cellPtr)->prachShortFormats = SF_FORMAT_B3;
1085 else if((value & FAPI_PRACH_SF_FORMAT_B4_MASK) == FAPI_PRACH_SF_FORMAT_B4_MASK)
1087 (*cellPtr)->prachShortFormats = SF_FORMAT_B4;
1089 else if((value & FAPI_PRACH_SF_FORMAT_C0_MASK) == FAPI_PRACH_SF_FORMAT_C0_MASK)
1091 (*cellPtr)->prachShortFormats = SF_FORMAT_C0;
1093 else if((value & FAPI_PRACH_SF_FORMAT_C2_MASK) == FAPI_PRACH_SF_FORMAT_C2_MASK)
1095 (*cellPtr)->prachShortFormats = SF_FORMAT_C2;
1099 (*cellPtr)->prachShortFormats = INVALID_VALUE;
1103 /*******************************************************************
1105 * @brief fills the Fd Occasions Type by comparing the bitmask
1109 * Function : fillFdOccasions
1112 * -checks the value with the bitmask and
1113 * fills the cellPtr's Fd Occasions
1115 * @params[in] Pointer to ClCellParam
1116 * Value to be compared
1119 ******************************************************************/
1121 PUBLIC void fillFdOccasions(U8 value, ClCellParam **cellPtr)
1125 (*cellPtr)->maxPrachFdOccasionsInASlot = PRACH_FD_OCC_IN_A_SLOT_1;
1129 (*cellPtr)->maxPrachFdOccasionsInASlot = PRACH_FD_OCC_IN_A_SLOT_2;
1133 (*cellPtr)->maxPrachFdOccasionsInASlot = PRACH_FD_OCC_IN_A_SLOT_4;
1137 (*cellPtr)->maxPrachFdOccasionsInASlot = PRACH_FD_OCC_IN_A_SLOT_8;
1141 (*cellPtr)->maxPrachFdOccasionsInASlot = INVALID_VALUE;
1145 /*******************************************************************
1147 * @brief fills the RSSI Measurement by comparing the bitmask
1151 * Function : fillRssiMeas
1154 * -checks the value with the bitmask and
1155 * fills the cellPtr's RSSI Measurement report
1157 * @params[in] Pointer to ClCellParam
1158 * Value to be compared
1161 ******************************************************************/
1163 PUBLIC void fillRssiMeas(U8 value, ClCellParam **cellPtr)
1165 if((value & FAPI_RSSI_REPORT_IN_DBM_MASK) == FAPI_RSSI_REPORT_IN_DBM_MASK)
1167 (*cellPtr)->rssiMeasurementSupport = RSSI_REPORT_DBM;
1169 else if((value & FAPI_RSSI_REPORT_IN_DBFS_MASK) == FAPI_RSSI_REPORT_IN_DBFS_MASK)
1171 (*cellPtr)->rssiMeasurementSupport = RSSI_REPORT_DBFS;
1175 (*cellPtr)->rssiMeasurementSupport = INVALID_VALUE;
1179 /*******************************************************************
1181 * @brief Returns the TLVs value
1185 * Function : getParamValue
1188 * -return TLVs value
1191 * @return ROK - temp
1194 * ****************************************************************/
1196 S16 getParamValue(fapi_uint16_tlv_t *tlv, U16 type)
1199 void *temp, *posPtr;
1200 valueLen = tlv->tl.length;
1201 posPtr = &tlv->tl.tag;
1202 posPtr += sizeof(tlv->tl.tag);
1203 posPtr += sizeof(tlv->tl.length);
1204 /*TO DO: malloc to SSI memory */
1205 if(type == FAPI_UINT_8)
1207 temp = (U8 *)malloc(valueLen * sizeof(U8));
1208 memcpy(temp, posPtr, valueLen);
1209 return(*(U8 *)temp);
1211 else if(type == FAPI_UINT_16)
1213 temp = (U16 *)malloc(valueLen * sizeof(U16));
1214 memcpy(temp, posPtr, valueLen);
1215 return(*(U16 *)temp);
1217 else if(type == FAPI_UINT_32)
1219 temp = (U32 *)malloc(valueLen * sizeof(U32));
1220 memcpy(temp, posPtr, valueLen);
1221 return(*(U32 *)temp);
1225 printf("\n Value Extraction failed" );
1229 /*******************************************************************
1231 * @brief Sends FAPI Param req to PHY
1235 * Function : lwr_mac_handleParamReqEvt
1238 * -Sends FAPI Param req to PHY
1241 * @return ROK - success
1244 * ****************************************************************/
1246 S16 lwr_mac_handleParamReqEvt(void *msg)
1248 /* startGuardTimer(); */
1249 fapi_param_req_t *paramReq = (fapi_param_req_t *)msg;
1250 if(SGetSBuf(0, 0, (Data **)¶mReq, sizeof(fapi_param_req_t)) != ROK)
1252 printf("\nFailed to allocate memory for Param Request");
1253 RETVALUE(LCM_REASON_MEM_NOAVAIL);
1257 fillMsgHeader(¶mReq->header, FAPI_PARAM_REQUEST, 0);
1258 sendToPhy(paramReq->header.message_type_id, sizeof(fapi_param_req_t), (void *)paramReq);
1263 /*******************************************************************
1265 * @brief Sends FAPI Param rsp to MAC via PHY
1269 * Function : lwr_mac_handleParamRspEvt
1272 * -Sends FAPI Param rsp to MAC via PHY
1275 * @return ROK - success
1278 * ****************************************************************/
1280 S16 lwr_mac_handleParamRspEvt(fapi_param_resp_t *paramRsp)
1282 /* stopGuardTimer(); */
1285 ClCellParam *cellParam = NULLP;
1286 if(paramRsp == NULLP)
1288 printf("\n Param Request for State [%d] is unsuccessfull", clGlobalCp.phyState);
1291 printf("\n Received EVENT[%d] at STATE[%d]", clGlobalCp.event, clGlobalCp.phyState);
1292 SPutSBuf(0, 0, (Data *)paramRsp, paramRsp->header.length);
1293 if(SGetSBuf(0, 0, (Data **)&cellParam, sizeof(ClCellParam)) != ROK)
1295 printf("\nFailed to allocate memory for new cell");
1296 RETVALUE(LCM_REASON_MEM_NOAVAIL);
1299 printf("\n Filling TLVS into MAC API");
1300 if(paramRsp->error_code == MSG_OK)
1302 for(index = 0; index < paramRsp->number_of_tlvs; index++)
1304 switch(paramRsp->tlvs[index].tl.tag)
1306 case FAPI_RELEASE_CAPABILITY_TAG:
1307 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_16);
1308 if(encodedVal != RFAILED && (encodedVal & RELEASE_15) == RELEASE_15)
1310 cellParam->releaseCapability = RELEASE_15;
1314 case FAPI_PHY_STATE_TAG:
1315 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1316 if(encodedVal != RFAILED && encodedVal != clGlobalCp.phyState)
1318 printf("\n PhyState mismatch [%d][%d]", clGlobalCp.phyState, clGlobalCp.event);
1323 case FAPI_SKIP_BLANK_DL_CONFIG_TAG:
1324 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1325 if(encodedVal != RFAILED && encodedVal != 0)
1327 cellParam->skipBlankDlConfig = SUPPORTED;
1331 cellParam->skipBlankDlConfig = NOT_SUPPORTED;
1335 case FAPI_SKIP_BLANK_UL_CONFIG_TAG:
1336 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1337 if(encodedVal != RFAILED && encodedVal != 0)
1339 cellParam->skipBlankUlConfig = SUPPORTED;
1343 cellParam->skipBlankUlConfig = NOT_SUPPORTED;
1347 case FAPI_NUM_CONFIG_TLVS_TO_REPORT_TYPE_TAG:
1348 cellParam->numTlvsToReport = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_16);
1351 case FAPI_CYCLIC_PREFIX_TAG:
1352 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1353 if(encodedVal != RFAILED)
1355 fillCyclicPrefix(encodedVal, &cellParam);
1359 case FAPI_SUPPORTED_SUBCARRIER_SPACING_DL_TAG:
1360 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1361 if(encodedVal != RFAILED)
1363 fillSubcarrierSpaceDl(encodedVal, &cellParam);
1367 case FAPI_SUPPORTED_BANDWIDTH_DL_TAG:
1368 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_16);
1369 if(encodedVal != RFAILED)
1371 fillBandwidthDl(encodedVal, &cellParam);
1375 case FAPI_SUPPORTED_SUBCARRIER_SPACING_UL_TAG:
1376 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1377 if(encodedVal != RFAILED)
1379 fillSubcarrierSpaceUl(encodedVal, &cellParam);
1383 case FAPI_SUPPORTED_BANDWIDTH_UL_TAG:
1384 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_16);
1385 if(encodedVal != RFAILED)
1387 fillBandwidthUl(encodedVal, &cellParam);
1391 case FAPI_CCE_MAPPING_TYPE_TAG:
1392 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1393 if(encodedVal != RFAILED)
1395 fillCCEmaping(encodedVal, &cellParam);
1399 case FAPI_CORESET_OUTSIDE_FIRST_3_OFDM_SYMS_OF_SLOT_TAG:
1400 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1401 if(encodedVal != RFAILED && encodedVal != 0)
1403 cellParam->coresetOutsideFirst3OfdmSymsOfSlot = SUPPORTED;
1407 cellParam->coresetOutsideFirst3OfdmSymsOfSlot = NOT_SUPPORTED;
1411 case FAPI_PRECODER_GRANULARITY_CORESET_TAG:
1412 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1413 if(encodedVal != RFAILED && encodedVal != 0)
1415 cellParam->precoderGranularityCoreset = SUPPORTED;
1419 cellParam->precoderGranularityCoreset = NOT_SUPPORTED;
1423 case FAPI_PDCCH_MU_MIMO_TAG:
1424 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1425 if(encodedVal != RFAILED && encodedVal != 0)
1427 cellParam->pdcchMuMimo = SUPPORTED;
1431 cellParam->pdcchMuMimo = NOT_SUPPORTED;
1435 case FAPI_PDCCH_PRECODER_CYCLING_TAG:
1436 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1437 if(encodedVal != RFAILED && encodedVal != 0)
1439 cellParam->pdcchPrecoderCycling = SUPPORTED;
1443 cellParam->pdcchPrecoderCycling = NOT_SUPPORTED;
1447 case FAPI_MAX_PDCCHS_PER_SLOT_TAG:
1448 cellParam->maxPdcchsPerSlot = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1451 case FAPI_PUCCH_FORMATS_TAG:
1452 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1453 if(encodedVal != RFAILED)
1455 fillPucchFormat(encodedVal, &cellParam);
1459 case FAPI_MAX_PUCCHS_PER_SLOT_TAG:
1460 cellParam->maxPucchsPerSlot = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1463 case FAPI_PDSCH_MAPPING_TYPE_TAG:
1464 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1465 if(encodedVal != RFAILED)
1467 fillPdschMappingType(encodedVal, &cellParam);
1471 case FAPI_PDSCH_ALLOCATION_TYPES_TAG:
1472 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1473 if(encodedVal != RFAILED)
1475 fillPdschAllocationType(encodedVal, &cellParam);
1479 case FAPI_PDSCH_VRB_TO_PRB_MAPPING_TAG:
1480 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1481 if(encodedVal != RFAILED)
1483 fillPrbMappingType(encodedVal, &cellParam);
1487 case FAPI_PDSCH_CBG_TAG:
1488 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1489 if(encodedVal != RFAILED && encodedVal != 0)
1491 cellParam->pdschCbg = SUPPORTED;
1495 cellParam->pdschCbg = NOT_SUPPORTED;
1499 case FAPI_PDSCH_DMRS_CONFIG_TYPES_TAG:
1500 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1501 if(encodedVal != RFAILED)
1503 fillPdschDmrsConfigType(encodedVal, &cellParam);
1507 case FAPI_PDSCH_DMRS_MAX_LENGTH_TAG:
1508 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1509 if(encodedVal != RFAILED)
1511 fillPdschDmrsLength(encodedVal, &cellParam);
1515 case FAPI_PDSCH_DMRS_ADDITIONAL_POS_TAG:
1516 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1517 if(encodedVal != RFAILED)
1519 fillPdschDmrsAddPos(encodedVal, &cellParam);
1523 case FAPI_MAX_PDSCHS_TBS_PER_SLOT_TAG:
1524 cellParam->maxPdschsTBsPerSlot = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1527 case FAPI_MAX_NUMBER_MIMO_LAYERS_PDSCH_TAG:
1528 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1529 if(encodedVal != RFAILED && encodedVal < FAPI_MAX_NUMBERMIMO_LAYERS_PDSCH)
1531 cellParam->maxNumberMimoLayersPdsch = encodedVal;
1535 case FAPI_SUPPORTED_MAX_MODULATION_ORDER_DL_TAG:
1536 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1537 if(encodedVal != RFAILED)
1539 fillModulationOrderDl(encodedVal, &cellParam);
1543 case FAPI_MAX_MU_MIMO_USERS_DL_TAG:
1544 cellParam->maxMuMimoUsersDl = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1547 case FAPI_PDSCH_DATA_IN_DMRS_SYMBOLS_TAG:
1548 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1549 if(encodedVal != RFAILED && encodedVal != 0)
1551 cellParam->pdschDataInDmrsSymbols = SUPPORTED;
1555 cellParam->pdschDataInDmrsSymbols = NOT_SUPPORTED;
1559 case FAPI_PREMPTIONSUPPORT_TAG:
1560 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1561 if(encodedVal != RFAILED && encodedVal != 0)
1563 cellParam->premptionSupport = SUPPORTED;
1567 cellParam->premptionSupport = NOT_SUPPORTED;
1571 case FAPI_PDSCH_NON_SLOT_SUPPORT_TAG:
1572 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1573 if(encodedVal != RFAILED && encodedVal != 0)
1575 cellParam->pdschNonSlotSupport = SUPPORTED;
1579 cellParam->pdschNonSlotSupport = NOT_SUPPORTED;
1583 case FAPI_UCI_MUX_ULSCH_IN_PUSCH_TAG:
1584 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1585 if(encodedVal != RFAILED && encodedVal != 0)
1587 cellParam->uciMuxUlschInPusch = SUPPORTED;
1591 cellParam->uciMuxUlschInPusch = NOT_SUPPORTED;
1595 case FAPI_UCI_ONLY_PUSCH_TAG:
1596 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1597 if(encodedVal != RFAILED && encodedVal != 0)
1599 cellParam->uciOnlyPusch = SUPPORTED;
1603 cellParam->uciOnlyPusch = NOT_SUPPORTED;
1607 case FAPI_PUSCH_FREQUENCY_HOPPING_TAG:
1608 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1609 if(encodedVal != RFAILED && encodedVal != 0)
1611 cellParam->puschFrequencyHopping = SUPPORTED;
1615 cellParam->puschFrequencyHopping = NOT_SUPPORTED;
1619 case FAPI_PUSCH_DMRS_CONFIG_TYPES_TAG:
1620 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1621 if(encodedVal != RFAILED)
1623 fillPuschDmrsConfig(encodedVal, &cellParam);
1627 case FAPI_PUSCH_DMRS_MAX_LEN_TAG:
1628 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1629 if(encodedVal != RFAILED)
1631 fillPuschDmrsLength(encodedVal, &cellParam);
1635 case FAPI_PUSCH_DMRS_ADDITIONAL_POS_TAG:
1636 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1637 if(encodedVal != RFAILED)
1639 fillPuschDmrsAddPos(encodedVal, &cellParam);
1643 case FAPI_PUSCH_CBG_TAG:
1644 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1645 if(encodedVal != RFAILED && encodedVal != 0)
1647 cellParam->puschCbg = SUPPORTED;
1651 cellParam->puschCbg = NOT_SUPPORTED;
1655 case FAPI_PUSCH_MAPPING_TYPE_TAG:
1656 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1657 if(encodedVal != RFAILED)
1659 fillPuschMappingType(encodedVal, &cellParam);
1663 case FAPI_PUSCH_ALLOCATION_TYPES_TAG:
1664 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1665 if(encodedVal != RFAILED)
1667 fillPuschAllocationType(encodedVal, &cellParam);
1671 case FAPI_PUSCH_VRB_TO_PRB_MAPPING_TAG:
1672 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1673 if(encodedVal != RFAILED)
1675 fillPuschPrbMappingType(encodedVal, &cellParam);
1679 case FAPI_PUSCH_MAX_PTRS_PORTS_TAG:
1680 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1681 if(encodedVal != RFAILED && encodedVal < FAPI_PUSCH_MAX_PTRS_PORTS_UB)
1683 cellParam->puschMaxPtrsPorts = encodedVal;
1687 case FAPI_MAX_PDUSCHS_TBS_PER_SLOT_TAG:
1688 cellParam->maxPduschsTBsPerSlot = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1691 case FAPI_MAX_NUMBER_MIMO_LAYERS_NON_CB_PUSCH_TAG:
1692 cellParam->maxNumberMimoLayersNonCbPusch = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1695 case FAPI_SUPPORTED_MODULATION_ORDER_UL_TAG:
1696 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1697 if(encodedVal != RFAILED)
1699 fillModulationOrderUl(encodedVal, &cellParam);
1703 case FAPI_MAX_MU_MIMO_USERS_UL_TAG:
1704 cellParam->maxMuMimoUsersUl = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1707 case FAPI_DFTS_OFDM_SUPPORT_TAG:
1708 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1709 if(encodedVal != RFAILED && encodedVal != 0)
1711 cellParam->dftsOfdmSupport = SUPPORTED;
1715 cellParam->dftsOfdmSupport = NOT_SUPPORTED;
1719 case FAPI_PUSCH_AGGREGATION_FACTOR_TAG:
1720 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1721 if(encodedVal != RFAILED)
1723 fillPuschAggregationFactor(encodedVal, &cellParam);
1727 case FAPI_PRACH_LONG_FORMATS_TAG:
1728 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1729 if(encodedVal != RFAILED)
1731 fillPrachLongFormat(encodedVal, &cellParam);
1735 case FAPI_PRACH_SHORT_FORMATS_TAG:
1736 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1737 if(encodedVal != RFAILED)
1739 fillPrachShortFormat(encodedVal, &cellParam);
1743 case FAPI_PRACH_RESTRICTED_SETS_TAG:
1744 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1745 if(encodedVal != RFAILED && encodedVal != 0)
1747 cellParam->prachRestrictedSets = SUPPORTED;
1751 cellParam->prachRestrictedSets = NOT_SUPPORTED;
1755 case FAPI_MAX_PRACH_FD_OCCASIONS_IN_A_SLOT_TAG:
1756 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1757 if(encodedVal != RFAILED)
1759 fillFdOccasions(encodedVal, &cellParam);
1763 case FAPI_RSSI_MEASUREMENT_SUPPORT_TAG:
1764 encodedVal = getParamValue(¶mRsp->tlvs[index], FAPI_UINT_8);
1765 if(encodedVal != RFAILED)
1767 fillRssiMeas(encodedVal, &cellParam);
1772 printf("\n Invalid value for TLV[%d]", paramRsp->tlvs[index].tl.tag);
1779 printf("\n Error Indication Evnt received in state[%d] event[%d]", clGlobalCp.phyState, clGlobalCp.event);
1785 /*******************************************************************
1787 * @brief Sends FAPI Config req to PHY
1791 * Function : lwr_mac_handleConfigReqEvt
1794 * -Sends FAPI Config Req to PHY
1797 * @return ROK - success
1800 * ****************************************************************/
1802 S16 lwr_mac_handleConfigReqEvt(void *msg)
1807 S16 lwr_mac_handleConfigRspEvt(fapi_config_resp_t *configRsp)
1812 S16 lwr_mac_handleStartReqEvt(void *msg)
1814 /*fapi_slot_ind_t *slotInd;
1815 slotInd->header.message_type_id = FAPI_SLOT_INDICATION;
1818 phyToMac(slotInd->header.message_type_id, sizeof(fapi_slot_ind_t), (void *)slotInd);
1823 S16 lwr_mac_handleStopReqEvt(void *msg)
1825 /* stop TX and RX operation return PHy to configured State
1826 send stop.indication to l2/l3 */
1830 lwrMacFsmHdlr fapiEvtHdlr[MAX_STATE][MAX_EVENT] =
1833 /* PHY_STATE_IDLE */
1834 lwr_mac_handleParamReqEvt,
1835 lwr_mac_handleParamRspEvt,
1836 lwr_mac_handleConfigReqEvt,
1837 lwr_mac_handleConfigRspEvt,
1838 lwr_mac_handleInvalidEvt,
1839 lwr_mac_handleInvalidEvt
1842 /* PHY_STATE_CONFIGURED */
1843 lwr_mac_handleParamReqEvt,
1844 lwr_mac_handleParamRspEvt,
1845 lwr_mac_handleConfigReqEvt,
1846 lwr_mac_handleConfigRspEvt,
1847 lwr_mac_handleStartReqEvt,
1848 lwr_mac_handleInvalidEvt
1851 /* PHY_STATE_RUNNING */
1852 lwr_mac_handleInvalidEvt,
1853 lwr_mac_handleInvalidEvt,
1854 lwr_mac_handleConfigReqEvt,
1855 lwr_mac_handleConfigRspEvt,
1856 lwr_mac_handleInvalidEvt,
1857 lwr_mac_handleStopReqEvt
1861 /*******************************************************************
1863 * @brief Sends message to Lower Mac Fsm Event Handler
1867 * Function : sendToLowerMac
1870 * -Sends message to LowerMac
1872 * @params[in] Message Type
1878 ******************************************************************/
1879 S16 sendToLowerMac(U16 msgType, U32 msgLen, void *msg)
1881 clGlobalCp.event = msgType;
1882 fapiEvtHdlr[clGlobalCp.phyState][msgType](msg);
1885 /**********************************************************************
1887 **********************************************************************/