Initial commit for Bronze release
[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 "envdep.h"
22 #include "gen.h"
23 #include "ssi.h"
24
25 #include "gen.x"
26 #include "ssi.x"
27
28 #include "rg_cl_phy.h"
29 #include "lwr_mac.h"
30 #include "fapi.h"
31
32
33 EXTERN void phyToMac ARGS((U16 msgType, U32 msgLen,void *msg));
34 EXTERN void fillTlvs ARGS((fapi_uint16_tlv_t *tlv, U16 tag, U16 length, U16 value, U16 *msgLen));
35 EXTERN void fillMsgHeader ARGS((fapi_msg_t *hdr, U16 msgType, U16 msgLen));
36 EXTERN S16 sendToLowerMac ARGS((U16 msgType, U32 msgLen,void *msg));
37
38 /*******************************************************************
39  *
40  * @brief Builds and sends param response to MAC CL
41  *
42  * @details
43  *
44  *    Function : lwrMacBldAndSndParamRsp
45  *
46  *    Functionality:
47  *          - Builds and sends param response to MAC
48  *
49  * @params[in] Config request message pointer
50  * @return ROK     - success
51  *         RFAILED - failure
52  *
53  * ****************************************************************/
54 S16 lwrMacBldAndSndParamRsp(void *msg)
55 {
56    S16 index = 0;
57    U16 msgLen = 0;
58    fapi_param_resp_t *fapiParamRsp;
59    fapiParamRsp = (fapi_param_resp_t *)msg;
60 #if 0
61    if(SGetSBuf(0, 0, (Data **)&fapiParamRsp, sizeof(fapi_param_resp_t)) != ROK)
62    {
63        printf("\nMemory allocation failed for PHY Config Response");
64        RETVALUE(RFAILED);
65    }
66 #endif
67   /* Cell Params */
68   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_RELEASE_CAPABILITY_TAG,                          sizeof(U16), 1, &msgLen);
69   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PHY_STATE_TAG,                                   sizeof(U16), 0, &msgLen);
70   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_SKIP_BLANK_DL_CONFIG_TAG,                        sizeof(U8),  0, &msgLen);
71   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_SKIP_BLANK_UL_CONFIG_TAG,                        sizeof(U8),  0, &msgLen);
72   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_NUM_CONFIG_TLVS_TO_REPORT_TYPE_TAG,              sizeof(U8),  0, &msgLen);
73
74   /* Carrier Params */
75   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_CYCLIC_PREFIX_TAG,                               sizeof(U8),  1, &msgLen);
76   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_SUPPORTED_SUBCARRIER_SPACING_DL_TAG,             sizeof(U8),  1, &msgLen);
77   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_SUPPORTED_BANDWIDTH_DL_TAG,                      sizeof(U16), 1, &msgLen);
78   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_SUPPORTED_SUBCARRIER_SPACING_UL_TAG,             sizeof(U8),  0, &msgLen);
79   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_SUPPORTED_BANDWIDTH_UL_TAG,                      sizeof(U16), 0, &msgLen);
80
81   /* PDCCH Param*/
82   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_CCE_MAPPING_TYPE_TAG,                            sizeof(U8), 0, &msgLen);
83   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_CORESET_OUTSIDE_FIRST_3_OFDM_SYMS_OF_SLOT_TAG,   sizeof(U8), 0, &msgLen);
84   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PRECODER_GRANULARITY_CORESET_TAG,                sizeof(U8), 0, &msgLen);
85   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDCCH_MU_MIMO_TAG,                               sizeof(U8), 0, &msgLen);
86   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDCCH_PRECODER_CYCLING_TAG,                      sizeof(U8), 0, &msgLen);
87   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_PDCCHS_PER_SLOT_TAG,                         sizeof(U8), 0, &msgLen);
88
89   /* PUCCH Param */
90   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUCCH_FORMATS_TAG,                               sizeof(U8), 0, &msgLen);
91   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_PUCCHS_PER_SLOT_TAG,                         sizeof(U8), 0, &msgLen);
92
93   /* PDSCH Param */
94   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_MAPPING_TYPE_TAG,                          sizeof(U8), 0, &msgLen);
95   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_ALLOCATION_TYPES_TAG,                      sizeof(U8), 0, &msgLen);
96   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_VRB_TO_PRB_MAPPING_TAG,                    sizeof(U8), 0, &msgLen);
97   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_CBG_TAG,                                   sizeof(U8), 0, &msgLen);
98   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_DMRS_CONFIG_TYPES_TAG,                     sizeof(U8), 0, &msgLen);
99   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_DMRS_MAX_LENGTH_TAG,                       sizeof(U8), 0, &msgLen);
100   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_DMRS_ADDITIONAL_POS_TAG,                   sizeof(U8), 0, &msgLen);
101   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_PDSCHS_TBS_PER_SLOT_TAG,                     sizeof(U8), 0, &msgLen);
102   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_NUMBER_MIMO_LAYERS_PDSCH_TAG,                sizeof(U8), 0, &msgLen);
103   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_SUPPORTED_MAX_MODULATION_ORDER_DL_TAG,           sizeof(U8), 0, &msgLen);
104   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_MU_MIMO_USERS_DL_TAG,                        sizeof(U8), 0, &msgLen);
105   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_DATA_IN_DMRS_SYMBOLS_TAG,                  sizeof(U8), 0, &msgLen);
106   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PREMPTIONSUPPORT_TAG,                            sizeof(U8), 0, &msgLen);
107   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PDSCH_NON_SLOT_SUPPORT_TAG,                      sizeof(U8), 0, &msgLen);
108
109   /* PUSCH Param */
110   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_UCI_MUX_ULSCH_IN_PUSCH_TAG,                      sizeof(U8), 0, &msgLen);
111   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_UCI_ONLY_PUSCH_TAG,                              sizeof(U8), 0, &msgLen);
112   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_FREQUENCY_HOPPING_TAG,                     sizeof(U8), 0, &msgLen);
113   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_DMRS_CONFIG_TYPES_TAG,                     sizeof(U8), 0, &msgLen);
114   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_DMRS_MAX_LEN_TAG,                          sizeof(U8), 0, &msgLen);
115   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_DMRS_ADDITIONAL_POS_TAG,                   sizeof(U8), 0, &msgLen);
116   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_CBG_TAG,                                   sizeof(U8), 0, &msgLen);
117   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_MAPPING_TYPE_TAG,                          sizeof(U8), 0, &msgLen);
118   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_ALLOCATION_TYPES_TAG,                      sizeof(U8), 0, &msgLen);
119   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_VRB_TO_PRB_MAPPING_TAG,                    sizeof(U8), 0, &msgLen);
120   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_MAX_PTRS_PORTS_TAG,                        sizeof(U8), 0, &msgLen);
121   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_PDUSCHS_TBS_PER_SLOT_TAG,                    sizeof(U8), 0, &msgLen);
122   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_NUMBER_MIMO_LAYERS_NON_CB_PUSCH_TAG,         sizeof(U8), 0, &msgLen);
123   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_SUPPORTED_MODULATION_ORDER_UL_TAG,               sizeof(U8), 0, &msgLen);
124   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_MU_MIMO_USERS_UL_TAG,                        sizeof(U8), 0, &msgLen);
125   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_DFTS_OFDM_SUPPORT_TAG,                           sizeof(U8), 0, &msgLen);
126   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PUSCH_AGGREGATION_FACTOR_TAG,                    sizeof(U8), 0, &msgLen);
127
128   /* PRACH Params */
129   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PRACH_LONG_FORMATS_TAG,                          sizeof(U8), 0, &msgLen);
130   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PRACH_SHORT_FORMATS_TAG,                         sizeof(U8), 0, &msgLen);
131   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_PRACH_RESTRICTED_SETS_TAG,                       sizeof(U8), 0, &msgLen);
132   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_MAX_PRACH_FD_OCCASIONS_IN_A_SLOT_TAG,            sizeof(U8), 0, &msgLen);
133
134   /* MEASUREMENT TAG */
135   fillTlvs(&fapiParamRsp->tlvs[index++],  FAPI_RSSI_MEASUREMENT_SUPPORT_TAG,                    sizeof(U8), 0, &msgLen);
136
137   fapiParamRsp->number_of_tlvs = index;
138   msgLen = msgLen + sizeof(fapi_param_resp_t);
139
140   fillMsgHeader(&fapiParamRsp->header, FAPI_PARAM_RESPONSE, msgLen);
141   fapiParamRsp->error_code = MSG_OK;
142   if(sendToLowerMac(fapiParamRsp->header.message_type_id, sizeof(fapi_param_resp_t), (void *)fapiParamRsp) != ROK)
143   {
144      RETVALUE(RFAILED);
145   }
146   printf("\n Filled the Param Response successfully");
147   RETVALUE(ROK);
148 }
149
150 /*******************************************************************
151  *
152  * @brief Builds and sends config response to MAC CL
153  *
154  * @details
155  *
156  *    Function : l1BldAndSndCfgRsp
157  *
158  *    Functionality:
159  *          - Builds and sends config response to MAC
160  *
161  * @params[in] Config request message pointer
162  * @return ROK     - success
163  *         RFAILED - failure
164  *
165  * ****************************************************************/
166
167 S16 l1BldAndSndCfgRsp(void *msg)
168 {
169    L1L2ConfigReq *FAPIConfigReq;
170    L1L2ConfigRsp *FAPIConfigRsp;
171    U8 cci;
172
173    FAPIConfigReq = (L1L2ConfigReq *)msg;
174    cci = FAPIConfigReq->carrierId;
175    SPutSBuf(0, 0, (Data *)msg, FAPIConfigReq->hdr.msgLen);
176
177    if(SGetSBuf(0, 0, (Data **)&FAPIConfigRsp, sizeof(L1L2ConfigRsp)) != ROK)
178    {
179        printf("\nMemory allocation failed for PHY Config Response");
180        RETVALUE(RFAILED);
181    }
182
183    FAPIConfigRsp->hdr.nMsg = 1;
184    FAPIConfigRsp->hdr.msgType = MSG_TYPE_CONFIG_RSP;
185    FAPIConfigRsp->hdr.msgLen = sizeof(L1L2ConfigRsp);
186
187    FAPIConfigRsp->carrierId = cci;
188    FAPIConfigRsp->status = MSG_OK;
189    FAPIConfigRsp->numUnsuppTlv = 0;
190    FAPIConfigRsp->unsuppTlvLst = NULLP;
191    FAPIConfigRsp->numInvTlvForPhySta = 0;
192    FAPIConfigRsp->phyIdleCfgTlvLst = NULLP;
193    FAPIConfigRsp->phyRunCfgTlvLst = NULLP;
194    FAPIConfigRsp->numMissingTlv = 0;
195    FAPIConfigRsp->missingTlvLst = NULLP;
196
197    phyToMac(MSG_TYPE_CONFIG_RSP, sizeof(L1L2ConfigRsp), FAPIConfigRsp);
198
199    RETVALUE(ROK);
200 }
201
202 /*******************************************************************
203  *
204  * @brief Handles config request received from MAC
205  *
206  * @details
207  *
208  *    Function : l1HndlConfigReq
209  *
210  *    Functionality:
211  *          -Handles config request received from MAC
212  *
213  * @params[in]   Message length
214  *               Config request message pointer
215  *
216  * @return void
217  *
218  * ****************************************************************/
219
220 void l1HndlConfigReq(U16 msgLen, void *msg)
221 {
222     printf("\nReceived configuration request");
223
224     /* TO DO : validate all received TLVs and send back any unsupported/missing TLV */
225
226     if(l1BldAndSndCfgRsp(msg) != ROK)
227     {
228        printf("\nFailed Sending config response");
229     }
230 }
231
232 /*******************************************************************
233  *
234  * @brief Handles param request received from MAC
235  *
236  * @details
237  *
238  *    Function : lwrMacHdlParamReq
239  *
240  *    Functionality:
241  *          -Handles param request received from MAC
242  *
243  * @params[in]   Message length
244  *               Param request message pointer
245  *
246  * @return void
247  *
248  * ****************************************************************/
249
250 PUBLIC void lwrMacHdlParamReq(U16 msgLen, void *msg)
251 {
252    printf("\n Received Param Request in PHY");
253
254    /* Handling PARAM RESPONSE */
255    if(lwrMacBldAndSndParamRsp(msg)!= ROK)
256    {
257       printf("\n Failed Sending Param Response");
258    }
259
260
261 /*******************************************************************
262  *
263  * @brief Receives message from MAC
264  *
265  * @details
266  *
267  *    Function : macToPhy
268  *
269  *    Functionality:
270  *       - Receives message from MAC and calls handler
271  *
272  * @params[in] Message type
273  *             Message length
274  *             Message pointer
275  *
276  * @return void
277  *
278  * ****************************************************************/
279
280 void macToPhy(U16 msgType, U32 msgLen, void *msg)
281 {
282    switch(msgType)
283    {
284       case MSG_TYPE_CONFIG_REQ:
285          l1HndlConfigReq(msgLen, msg);
286          break;
287       default:
288          printf("\nInvalid message type[%x] received at PHY", msgType);
289    }
290 }
291
292 /*******************************************************************
293  *
294  * @brief Receives message from MAC
295  *
296  * @details
297  *
298  *    Function : processRequest
299  *
300  *    Functionality:
301  *       - Receives message from MAC and calls handler
302  *
303  * @params[in] Message type
304  *             Message length
305  *             Message pointer
306  *
307  * @return void
308  *
309  * ****************************************************************/
310
311 void processRequest(U16 msgType, U32 msgLen, void *msg)
312 {
313    switch(msgType)
314    {
315       case FAPI_PARAM_REQUEST:
316          lwrMacHdlParamReq(msgLen, msg);
317          break;
318       default:
319          printf("\n Invalid message type[%x] received at PHY", msgType);
320          break;
321    }
322 }
323 /**********************************************************************
324          End of file
325 **********************************************************************/