warning set 4
[o-du/l2.git] / src / phy_stub / l1_bdy1.c
1 /*******************************************************************************
2 ################################################################################
3 #   Copyright (c) [2017-2019] [Radisys]                                        #
4 #                                                                              #
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                                    #
8 #                                                                              #
9 #       http://www.apache.org/licenses/LICENSE-2.0                             #
10 #                                                                              #
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 *******************************************************************************/
18
19 /*This file contains stub for PHY to handle messages to/from MAC CL */
20
21 #include <stdint.h>
22
23 #include "envdep.h"
24 #include "gen.h"
25 #include "ssi.h"
26
27 #include "gen.x"
28 #include "ssi.x"
29
30 #include "lwr_mac.h"
31 #include "lwr_mac_phy.h"
32 #ifdef FAPI
33 #include "fapi.h"
34 #endif
35 #include "lphy_stub.h"
36 #include "stdbool.h"
37 #include "du_log.h"
38 #include "rg.h"
39
40 #define MAX_SLOT_VALUE   9
41 #define MAX_SFN_VALUE    1023
42 #define NR_PCI            1
43
44 uint16_t sfnValue = 0;
45 uint16_t slotValue = 0;
46 bool     rachIndSent = false;
47
48 EXTERN void phyToMac ARGS((uint16_t msgType, uint32_t msgLen,void *msg));
49 #ifdef FAPI
50 EXTERN void fillTlvs ARGS((fapi_uint16_tlv_t *tlv, uint16_t tag, uint16_t
51 length, uint16_t value, uint32_t *msgLen));
52 EXTERN void fillMsgHeader ARGS((fapi_msg_t *hdr, uint16_t msgType, uint16_t msgLen));
53 #endif
54 EXTERN void handlePhyMessages(uint16_t msgType, uint32_t msgSize, void *msg);
55
56 /*******************************************************************
57  *
58  * @brief Builds and sends param response to MAC CL
59  *
60  * @details
61  *
62  *    Function : l1BldAndSndParamRsp
63  *
64  *    Functionality:
65  *          - Builds and sends param response to MAC
66  *
67  * @params[in] Config request message pointer
68  * @return ROK     - success
69  *         RFAILED - failure
70  *
71  * ****************************************************************/
72 S16 l1BldAndSndParamRsp(void *msg)
73 {
74 #ifdef FAPI
75    uint8_t index = 0;
76    uint32_t msgLen = 0;
77         fapi_param_resp_t *fapiParamRsp = (fapi_param_resp_t *)msg;
78
79   /* Cell Params */
80   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_RELEASE_CAPABILITY_TAG,                          sizeof(uint16_t), 1, &msgLen);
81   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PHY_STATE_TAG,                                   sizeof(uint16_t), 0, &msgLen);
82   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_SKIP_BLANK_DL_CONFIG_TAG,                        sizeof(uint8_t),  0, &msgLen);
83   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_SKIP_BLANK_UL_CONFIG_TAG,                        sizeof(uint8_t),  0, &msgLen);
84   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_NUM_CONFIG_TLVS_TO_REPORT_TYPE_TAG,              sizeof(uint8_t),  0, &msgLen);
85
86   /* Carrier Params */
87   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_CYCLIC_PREFIX_TAG,                               sizeof(uint8_t),  1, &msgLen);
88   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_SUPPORTED_SUBCARRIER_SPACING_DL_TAG,             sizeof(uint8_t),  1, &msgLen);
89   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_SUPPORTED_BANDWIDTH_DL_TAG,                      sizeof(uint16_t), 1, &msgLen);
90   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_SUPPORTED_SUBCARRIER_SPACING_UL_TAG,             sizeof(uint8_t),  0, &msgLen);
91   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_SUPPORTED_BANDWIDTH_UL_TAG,                      sizeof(uint16_t), 0, &msgLen);
92
93   /* PDCCH Param*/
94   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_CCE_MAPPING_TYPE_TAG,                            sizeof(uint8_t), 0, &msgLen);
95   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_CORESET_OUTSIDE_FIRST_3_OFDM_SYMS_OF_SLOT_TAG,   sizeof(uint8_t), 0, &msgLen);
96   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PRECODER_GRANULARITY_CORESET_TAG,                sizeof(uint8_t), 0, &msgLen);
97   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDCCH_MU_MIMO_TAG,                               sizeof(uint8_t), 0, &msgLen);
98   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDCCH_PRECODER_CYCLING_TAG,                      sizeof(uint8_t), 0, &msgLen);
99   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_PDCCHS_PER_SLOT_TAG,                         sizeof(uint8_t), 0, &msgLen);
100
101   /* PUCCH Param */
102   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUCCH_FORMATS_TAG,                               sizeof(uint8_t), 0, &msgLen);
103   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_PUCCHS_PER_SLOT_TAG,                         sizeof(uint8_t), 0, &msgLen);
104
105   /* PDSCH Param */
106   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_MAPPING_TYPE_TAG,                          sizeof(uint8_t), 0, &msgLen);
107   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_ALLOCATION_TYPES_TAG,                      sizeof(uint8_t), 0, &msgLen);
108   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_VRB_TO_PRB_MAPPING_TAG,                    sizeof(uint8_t), 0, &msgLen);
109   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_CBG_TAG,                                   sizeof(uint8_t), 0, &msgLen);
110   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_DMRS_CONFIG_TYPES_TAG,                     sizeof(uint8_t), 0, &msgLen);
111   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_DMRS_MAX_LENGTH_TAG,                       sizeof(uint8_t), 0, &msgLen);
112   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_DMRS_ADDITIONAL_POS_TAG,                   sizeof(uint8_t), 0, &msgLen);
113   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_PDSCHS_TBS_PER_SLOT_TAG,                     sizeof(uint8_t), 0, &msgLen);
114   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_NUMBER_MIMO_LAYERS_PDSCH_TAG,                sizeof(uint8_t), 0, &msgLen);
115   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_SUPPORTED_MAX_MODULATION_ORDER_DL_TAG,           sizeof(uint8_t), 0, &msgLen);
116   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_MU_MIMO_USERS_DL_TAG,                        sizeof(uint8_t), 0, &msgLen);
117   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_DATA_IN_DMRS_SYMBOLS_TAG,                  sizeof(uint8_t), 0, &msgLen);
118   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PREMPTIONSUPPORT_TAG,                            sizeof(uint8_t), 0, &msgLen);
119   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_NON_SLOT_SUPPORT_TAG,                      sizeof(uint8_t), 0, &msgLen);
120
121   /* PUSCH Param */
122   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_UCI_MUX_ULSCH_IN_PUSCH_TAG,                      sizeof(uint8_t), 0, &msgLen);
123   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_UCI_ONLY_PUSCH_TAG,                              sizeof(uint8_t), 0, &msgLen);
124   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_FREQUENCY_HOPPING_TAG,                     sizeof(uint8_t), 0, &msgLen);
125   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_DMRS_CONFIG_TYPES_TAG,                     sizeof(uint8_t), 0, &msgLen);
126   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_DMRS_MAX_LEN_TAG,                          sizeof(uint8_t), 0, &msgLen);
127   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_DMRS_ADDITIONAL_POS_TAG,                   sizeof(uint8_t), 0, &msgLen);
128   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_CBG_TAG,                                   sizeof(uint8_t), 0, &msgLen);
129   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_MAPPING_TYPE_TAG,                          sizeof(uint8_t), 0, &msgLen);
130   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_ALLOCATION_TYPES_TAG,                      sizeof(uint8_t), 0, &msgLen);
131   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_VRB_TO_PRB_MAPPING_TAG,                    sizeof(uint8_t), 0, &msgLen);
132   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_MAX_PTRS_PORTS_TAG,                        sizeof(uint8_t), 0, &msgLen);
133   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_PDUSCHS_TBS_PER_SLOT_TAG,                    sizeof(uint8_t), 0, &msgLen);
134   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_NUMBER_MIMO_LAYERS_NON_CB_PUSCH_TAG,         sizeof(uint8_t), 0, &msgLen);
135   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_SUPPORTED_MODULATION_ORDER_UL_TAG,               sizeof(uint8_t), 0, &msgLen);
136   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_MU_MIMO_USERS_UL_TAG,                        sizeof(uint8_t), 0, &msgLen);
137   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_DFTS_OFDM_SUPPORT_TAG,                           sizeof(uint8_t), 0, &msgLen);
138   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_AGGREGATION_FACTOR_TAG,                    sizeof(uint8_t), 0, &msgLen);
139
140   /* PRACH Params */
141   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PRACH_LONG_FORMATS_TAG,                          sizeof(uint8_t), 0, &msgLen);
142   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PRACH_SHORT_FORMATS_TAG,                         sizeof(uint8_t), 0, &msgLen);
143   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PRACH_RESTRICTED_SETS_TAG,                       sizeof(uint8_t), 0, &msgLen);
144   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_PRACH_FD_OCCASIONS_IN_A_SLOT_TAG,            sizeof(uint8_t), 0, &msgLen);
145
146   /* MEASUREMENT TAG */
147   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_RSSI_MEASUREMENT_SUPPORT_TAG,                    sizeof(uint8_t), 0, &msgLen);
148
149   fapiParamRsp->number_of_tlvs = index;
150   msgLen = msgLen + sizeof(fapi_param_resp_t);
151
152   fillMsgHeader(&fapiParamRsp->header, FAPI_PARAM_RESPONSE, msgLen);
153   fapiParamRsp->error_code = MSG_OK;
154   DU_LOG("\nPHY_STUB: Sending Param Request to Lower Mac");
155   handlePhyMessages(fapiParamRsp->header.message_type_id, sizeof(fapi_param_resp_t), (void *)fapiParamRsp);
156 #endif
157   return ROK;
158 }
159
160 /*******************************************************************
161  *
162  * @brief Builds and sends config response to lower mac
163  *
164  * @details
165  *
166  *    Function : l1BldAndSndConfigRsp
167  *
168  *    Functionality:
169  *          - Builds and sends config response to MAC
170  *
171  * @params[in] Config request message pointer
172  * @return ROK     - success
173  *         RFAILED - failure
174  *
175  * ****************************************************************/
176
177 S16 l1BldAndSndConfigRsp(void *msg)
178 {
179 #ifdef FAPI
180    uint32_t msgLen = 0;
181    fapi_config_resp_t *fapiConfigRsp = (fapi_config_resp_t *)msg;
182
183    if(fapiConfigRsp != NULL)
184    {
185       fapiConfigRsp->number_of_invalid_tlvs = NULLP;
186       fapiConfigRsp->number_of_inv_tlvs_idle_only = NULLP;
187       fapiConfigRsp->number_of_missing_tlvs = NULLP;
188       fapiConfigRsp->error_code = MSG_OK;
189       msgLen += sizeof(fapi_config_resp_t);
190       fillMsgHeader(&fapiConfigRsp->header, FAPI_CONFIG_RESPONSE, msgLen);
191       DU_LOG("\nPHY_STUB: Sending Config Response to Lower Mac");
192       handlePhyMessages(fapiConfigRsp->header.message_type_id, sizeof(fapi_config_resp_t), (void *)fapiConfigRsp);
193       return ROK;
194    }
195 #endif
196    return ROK;
197 }
198 /*******************************************************************
199  *
200  * @brief Handles param request received from MAC
201  *
202  * @details
203  *
204  *    Function : l1HdlParamReq
205  *
206  *    Functionality:
207  *          -Handles param request received from MAC
208  *
209  * @params[in]   Message length
210  *               Param request message pointer
211  *
212  * @return void
213  *
214  * ****************************************************************/
215
216 PUBLIC void l1HdlParamReq(uint32_t msgLen, void *msg)
217 {
218    DU_LOG("\nPHY_STUB: Received Param Request in PHY");
219    /* Handling PARAM RESPONSE */
220    if(l1BldAndSndParamRsp(msg)!= ROK)
221    {
222       DU_LOG("\nPHY_STUB: Failed Sending Param Response");
223    }
224
225
226 /*******************************************************************
227  *
228  * @brief Handles config request received from MAC
229  *
230  * @details
231  *
232  *    Function : l1HdlConfigReq
233  *
234  *    Functionality:
235  *          -Handles config request received from MAC
236  *
237  * @params[in]   Message length
238  *               config request message pointer
239  *
240  * @return void
241  *
242  * ****************************************************************/
243
244 PUBLIC void l1HdlConfigReq(uint32_t msgLen, void *msg)
245 {
246    DU_LOG("\nPHY_STUB: Received Config Request in PHY");
247
248    /* Handling CONFIG RESPONSE */
249    if(l1BldAndSndConfigRsp(msg)!= ROK)
250    {
251       printf("\nPHY_STUB: Failed Sending config Response");
252    }
253 }
254
255
256 /*******************************************************************
257  *
258  * @brief Builds and Sends RACH indication to MAC 
259  *
260  * @details
261  *
262  *    Function : l1BuildAndSendRachInd 
263  *
264  *    Functionality:
265  *      Builds and Sends RACH indication to MAC
266  *
267  * @params[in] SFN value 
268  *             slot value
269  * @return ROK     - success
270  *         RFAILED - failure
271  *
272  * ****************************************************************/
273 uint16_t l1BuildAndSendRachInd(uint16_t slot, uint16_t sfn)
274 {
275 #ifdef FAPI
276    uint8_t   rachPduIdx = 0; 
277    uint8_t   preamIdx = 0;
278    fapi_rach_pdu_t  *rachPdu;
279    fapi_rach_indication_t  *rachInd;
280
281    /* Building RACH indication */
282    if(SGetSBuf(0, 0, (Data **)&rachInd, sizeof(fapi_rach_indication_t)) != ROK)
283    {
284       printf("\nPHY_STUB: Memory allocation failed for Rach Indication Message");
285       return RFAILED;
286    }
287    
288    rachInd->sfn = sfn;
289    rachInd->slot = slot;
290    rachInd->numPdus = 1;
291
292    rachPdu = &rachInd->rachPdu[rachPduIdx];
293    rachPdu->physCellId = NR_PCI;
294    rachPdu->symbolIndex = 0;
295    rachPdu->slotIndex = slot;
296    rachPdu->freqIndex = 0;
297    rachPdu->avgRssi = 0;
298    rachPdu->avgSnr = 0;
299    rachPdu->numPreamble = 1;
300
301    rachPdu->preambleInfo[preamIdx].preambleIndex = 3;
302    rachPdu->preambleInfo[preamIdx].timingAdvance = 0;
303    rachPdu->preambleInfo[preamIdx].premblePwr = 0;
304    
305    fillMsgHeader(&rachInd->header, FAPI_RACH_INDICATION, \
306       sizeof(fapi_rach_indication_t));
307
308    /* Sending RACH indication to MAC */
309    DU_LOG("\nPHY STUB: Sending RACH Indication to MAC");
310    handlePhyMessages(rachInd->header.message_type_id, sizeof(fapi_rach_indication_t), (void *)rachInd);
311    SPutSBuf(0, 0, (Data *)rachInd, sizeof(fapi_rach_indication_t));
312 #endif
313    return ROK;
314 }
315
316 /*******************************************************************
317  *
318  * @brief Builds and Send the Slot Indication message to MAC
319  *
320  * @details
321  *
322  *    Function : l1BuildAndSendSlotIndication
323  *
324  *    Functionality:
325  *          -Send the Slot indication Message to MAC
326  *
327  * @params[in]   Message length
328  *               config request message pointer
329  *
330  * @return void
331  *
332  * ****************************************************************/
333 PUBLIC uint16_t l1BuildAndSendSlotIndication()
334 {
335 #ifdef FAPI
336    fapi_slot_ind_t *slotIndMsg;
337    if(SGetSBuf(0, 0, (Data **)&slotIndMsg, sizeof(slotIndMsg)) != ROK)
338    {
339        DU_LOG("\nPHY_STUB: Memory allocation failed for slot Indication Message");
340        return RFAILED;
341    }
342    else
343    {
344       slotValue++;
345       if(sfnValue > MAX_SFN_VALUE && slotValue > MAX_SLOT_VALUE)
346       {
347          sfnValue = 0;
348          slotValue = 0;
349       }
350       else if(slotValue > MAX_SLOT_VALUE)
351       {
352          sfnValue++;
353          slotValue = 0;
354       }
355       slotIndMsg->sfn = sfnValue;
356       slotIndMsg->slot = slotValue;
357       fillMsgHeader(&slotIndMsg->header, FAPI_SLOT_INDICATION, sizeof(fapi_slot_ind_t));
358       DU_LOG("\n\nPHY_STUB: SLOT indication [%d:%d]",sfnValue,slotValue);
359       handlePhyMessages(slotIndMsg->header.message_type_id, sizeof(fapi_slot_ind_t), (void*)slotIndMsg);
360       SPutSBuf(0, 0, (Data *)slotIndMsg, sizeof(slotIndMsg));
361    }
362 #endif
363    return ROK;
364 }
365
366 /*******************************************************************
367  *
368  * @brief Handles start request received from MAC
369  *
370  * @details
371  *
372  *    Function : l1HdlStartReq
373  *
374  *    Functionality:
375  *          -Handles start request received from MAC
376  *
377  * @params[in]   Message length
378  *               config request message pointer
379  *
380  * @return void
381  *
382  * ****************************************************************/
383
384 PUBLIC S16 l1HdlStartReq(uint32_t msgLen, void *msg)
385 {
386    if(clGlobalCp.phyState == PHY_STATE_CONFIGURED)
387    {
388       duStartSlotIndicaion();
389 #ifdef FAPI
390       SPutSBuf(0, 0, (Data *)msg, sizeof(fapi_start_req_t));
391 #endif
392       return ROK;
393    }
394    else
395    {
396       DU_LOG("\nPHY_STUB: Received Start Req in PHY State %d", clGlobalCp.phyState);
397       return RFAILED;
398    }
399 }
400
401 /*******************************************************************
402 *
403 * @brief Handles Dl Tti request received from MAC
404 *
405 * @details
406 *
407 *    Function : l1HdlDlTtiReq
408 *
409 *    Functionality:
410 *          -Handles Dl Tti request received from MAC
411 *
412 * @params[in]   Message length
413 *               Dl Tti request message pointer
414 *
415 * @return void
416 *
417 * ****************************************************************/
418
419 PUBLIC S16 l1HdlDlTtiReq(uint16_t msgLen, void *msg)
420 {
421 #ifdef FAPI
422    fapi_dl_tti_req_t *dlTtiReq;
423    dlTtiReq = (fapi_dl_tti_req_t *)msg;
424
425    printf("\nPHY STUB: Received DL TTI Request");
426 #if 0
427    printf("\nPHY_STUB:  SFN     %d", dlTtiReq->sfn);
428    printf("\nPHY_STUB:  SLOT    %d", dlTtiReq->slot);
429    printf("\nPHY_STUB:  nPdus   %d", dlTtiReq->nPdus);
430    printf("\nPHY_STUB:  nGroup  %d", dlTtiReq->nGroup);
431    /* Printing SSB CONFIGURED VALUES */
432    printf("\nPHY_STUB: physCellId   %d", dlTtiReq->pdus->u.ssb_pdu.physCellId);
433    printf("\nPHY_STUB: betaPss      %d", dlTtiReq->pdus->u.ssb_pdu.betaPss);
434    printf("\nPHY_STUB: ssbBlockIndex %d",       dlTtiReq->pdus->u.ssb_pdu.ssbBlockIndex);
435    printf("\nPHY_STUB: ssbSubCarrierOffset %d", dlTtiReq->pdus->u.ssb_pdu.ssbSubCarrierOffset);
436    printf("\nPHY_STUB: ssbOffsetPointA     %d", dlTtiReq->pdus->u.ssb_pdu.ssbOffsetPointA);
437    printf("\nPHY_STUB: bchPayloadFlag      %d", dlTtiReq->pdus->u.ssb_pdu.bchPayloadFlag);
438    printf("\nPHY_STUB: bchPayload          %x", dlTtiReq->pdus->u.ssb_pdu.bchPayload);
439 #endif
440         uint8_t pduCount = 0;
441         if(dlTtiReq->nPdus == 0)
442         {
443                 DU_LOG("\nPHY_STUB: No PDU in DL TTI Request");
444    }
445         for(pduCount=0; pduCount<dlTtiReq->nPdus; pduCount++)
446         {
447                 if(dlTtiReq->pdus[pduCount].pduType == 3) //SSB_PDU_TYPE
448                         DU_LOG("\nPHY_STUB: SSB PDU");
449                 else if(dlTtiReq->pdus[pduCount].pduType == 0)
450                         DU_LOG("\nPHY_STUB: PDCCH PDU");
451                 else if(dlTtiReq->pdus[pduCount].pduType == 1)
452                    DU_LOG("\nPHY_STUB: PDSCH PDU");
453         }
454 #endif
455    return ROK;
456 }
457
458 /*******************************************************************
459 *
460 * @brief Handles tx_data request received from MAC
461 *
462 * @details
463 *
464 *    Function : l1HdlTxDataReq
465 *
466 *    Functionality:
467 *          -Handles tx_data request received from MAC
468 *
469 * @params[in]   Message length
470 *               tx_data request message pointer
471 *
472 * @return void
473 *
474 * ****************************************************************/
475
476 PUBLIC S16 l1HdlTxDataReq(uint16_t msgLen, void *msg)
477 {
478 #ifdef FAPI
479    DU_LOG("\nPHY STUB: Received TX DATA Request");
480
481    fapi_tx_data_req_t *txDataReq;
482    txDataReq = (fapi_dl_tti_req_t *)msg;
483 #endif
484    return ROK;
485 }
486 /*******************************************************************
487 *
488 * @brief Handles Ul Tti request received from MAC
489 *
490 * @details
491 *
492 *    Function : l1HdlUlTtiReq
493 *
494 *    Functionality:
495 *          -Handles Ul Tti request received from MAC
496 *
497 * @params[in]   Message length
498 *               Ul Tti request message pointer
499 *
500 * @return void
501 *
502 * ****************************************************************/
503
504 PUBLIC S16 l1HdlUlTtiReq(uint16_t msgLen, void *msg)
505 {
506 #ifdef FAPI
507    fapi_ul_tti_req_t *ulTtiReq;
508
509    DU_LOG("\nPHY STUB: Received UL TTI Request");
510
511    ulTtiReq = (fapi_ul_tti_req_t *)msg;
512    uint8_t numPdus = ulTtiReq->nPdus;
513     
514         if(numPdus == 0)
515         {
516                 DU_LOG("\nPHY STUB: No PDU in UL TTI");
517    }
518         while(numPdus)
519         {
520                 if(ulTtiReq->pdus->pduType == 0)
521                         DU_LOG("\nPHY STUB: PRACH PDU");
522                 numPdus--;
523         }
524    if(rachIndSent == false && ulTtiReq->slot == 8)
525    {
526       rachIndSent = true;
527       l1BuildAndSendRachInd(ulTtiReq->slot, ulTtiReq->sfn);
528    }
529
530 #endif
531    return ROK;
532 }
533
534 /*******************************************************************
535  *
536  * @brief Receives message from MAC
537  *
538  * @details
539  *
540  *    Function :  l1ProcessFapiRequest
541  *
542  *    Functionality:
543  *       - Receives message from MAC and calls handler
544  *
545  * @params[in] Message type
546  *             Message length
547  *             Message pointer
548  *
549  * @return void
550  *
551  * ****************************************************************/
552
553 void l1ProcessFapiRequest(uint8_t msgType, uint32_t msgLen, void *msg)
554 {
555    switch(msgType)
556    {
557 #ifdef FAPI
558       case FAPI_PARAM_REQUEST:
559          l1HdlParamReq(msgLen, msg);
560          break;
561       case FAPI_CONFIG_REQUEST:
562          l1HdlConfigReq(msgLen, msg);
563          break;
564       case FAPI_START_REQUEST:
565          l1HdlStartReq(msgLen, msg);
566          break;
567       case FAPI_DL_TTI_REQUEST:
568          l1HdlDlTtiReq(msgLen, msg);
569          break;
570       case FAPI_TX_DATA_REQUEST:
571          l1HdlTxDataReq(msgLen, msg);
572          break;
573       case FAPI_UL_TTI_REQUEST:
574          l1HdlUlTtiReq(msgLen, msg);
575          break;
576       default:
577          DU_LOG("\nPHY_STUB: Invalid message type[%x] received at PHY", msgType);
578          break;
579 #endif
580    }
581 }
582 /**********************************************************************
583          End of file
584 **********************************************************************/