DL Resource allocation for msg4
[o-du/l2.git] / src / 5gnrmac / mac_slot_ind.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 /* header include files (.h) */
19 #include "envopt.h"        /* environment options */
20 #include "envdep.h"        /* environment dependent */
21 #include "envind.h"        /* environment independent */
22 #include "gen.h"           /* general */
23 #include "ssi.h"           /* system services */
24 #include "cm_tkns.h"       /* Common Token Defines */
25 #include "cm_llist.h"      /* Common Link List Defines */
26 #include "cm_hash.h"       /* Common Hash List Defines */
27 #include "cm_mblk.h"       /* common memory link list library */
28 #include "cm_lte.h"        /* Common LTE Defines */
29 #include "rgu.h"
30 #include "tfu.h"           /* RGU Interface includes */
31 #include "lrg.h"
32 #include "crg.h"           /* layer management defines for LTE-MAC */
33 #include "rg_sch_inf.h"           /* layer management defines for LTE-MAC */
34 #include "rg_env.h"   
35 #include "rg.h"
36
37 #include "gen.x"           /* general */
38 #include "ssi.x"           /* system services */
39 #include "cm5.x"           /* system services */
40 #include "cm_tkns.x"       /* Common Token Definitions */
41 #include "cm_llist.x"      /* Common Link List Definitions */
42 #include "cm_lib.x"        /* Common Library Definitions */
43 #include "cm_hash.x"       /* Common Hash List Definitions */
44 #include "cm_mblk.x"       /* common memory link list library */
45 #include "cm_lte.x"        /* Common LTE Defines */
46 #include "rgu.x"
47 #include "tfu.x"           /* RGU Interface includes */
48 #include "lrg.x"
49 #include "crg.x"           /* layer management typedefs for MAC */
50 #include "rg_sch_inf.x"    /* SCH interface typedefs */
51 #include "rg_prg.x"
52 #include "du_app_mac_inf.h"
53 #include "mac.h"
54 #include "du_log.h"
55 #include "rg.x"
56 #include "mac_upr_inf_api.h"
57
58 /* function pointers for packing slot ind from mac to sch */
59 MacSchSlotIndFunc macSchSlotIndOpts[] =
60 {
61    packMacSchSlotInd,
62    macSchSlotInd,
63    packMacSchSlotInd
64 };
65
66 /**
67  * @brief process DL allocation from scheduler
68  *
69  * @details
70  *
71  *     Function : MacProcDlAlloc 
72  *      
73  *      This function copied dl sch info in the mac slot info
74  *           
75  *  @param[in]  Pst            *pst
76  *  @param[in]  DL allocation from scheduler
77  *  @return  S16
78  *      -# ROK 
79  *      -# RFAILED 
80  **/
81 int MacProcDlAlloc(Pst *pst, DlAlloc *dlAlloc)
82 {
83    if(dlAlloc != NULLP)
84    {
85                 MacDlSlot *currDlSlot =
86                 &macCb.macCell->dlSlot[dlAlloc->slotIndInfo.slot % MAX_SLOT_SUPPORTED];
87       memcpy(&currDlSlot->dlInfo, dlAlloc, sizeof(DlAlloc)); 
88
89       if(currDlSlot->dlInfo.msg4Alloc)
90       {
91          /* TODO: 
92           * Step1 : Fetch msg4 from raCb that was filled in MacHdlDlCcchInd() 
93           * Step2 : Mux msg4
94           * Step3 : Store the pdu in raCb
95           */
96       }
97    }
98    return ROK;
99 }
100
101 /**
102  * @brief Transmission time interval indication from PHY.
103  *
104  * @details
105  *
106  *     Function : sendSlotIndMacToSch
107  * 
108  *      This API is invoked by MAC to send slot ind to scheduler.
109  *           
110  *  @param[in]  SlotIndInfo    *slotInd
111  *  @return  S16
112  *      -# ROK 
113  *      -# RFAILED 
114  **/
115 int sendSlotIndMacToSch(SlotIndInfo *slotInd)
116 {
117    /* fill Pst structure to send to lwr_mac to MAC */
118    Pst pst;
119
120    fillMacToSchPst(&pst);
121    pst.event = EVENT_SLOT_IND_TO_SCH;
122
123    return(*macSchSlotIndOpts[pst.selector])(&pst,slotInd);
124 }
125
126 /*******************************************************************
127  *
128  * @brief Send slot indication to DU APP
129  *
130  * @details
131  *
132  *    Function : sendSlotIndMacToDuApp
133  *
134  *    Functionality:
135  *       Send slot indication to DU APP
136  *
137  * @params[in] Slot indication info 
138  * @return ROK     - success
139  *         RFAILED - failure
140  *
141  * ****************************************************************/
142 int sendSlotIndMacToDuApp(SlotIndInfo *slotInd)
143 {
144    Pst pst;
145    uint16_t ret;
146    SlotInfo  *slotInfo;
147  
148    /*  Allocate sharable memory */
149    MAC_ALLOC_SHRABL_BUF(slotInfo, sizeof(SlotInfo));
150    if(!slotInfo)
151    {
152       DU_LOG("\nMAC : Slot Indication memory allocation failed");
153       return RFAILED;
154   }
155  
156   slotInfo->cellId = macCb.macCell->cellId;
157   slotInfo->sfn = slotInd->sfn;
158   slotInfo->slot = slotInd->slot;
159  
160   /* Fill Pst */
161   pst.selector  = DU_MAC_LWLC;
162   pst.srcEnt    = ENTRG;
163   pst.dstEnt    = ENTDUAPP;
164   pst.dstInst   = 0;
165   pst.srcInst   = macCb.macInst;
166   pst.dstProcId = rgCb[pst.srcInst].rgInit.procId;
167   pst.srcProcId = rgCb[pst.srcInst].rgInit.procId;
168   pst.region = MAC_MEM_REGION;
169   pst.pool = MAC_POOL;
170   pst.event = EVENT_MAC_SLOT_IND;
171   pst.route = 0;
172   pst.prior = 0;
173   pst.intfVer = 0;
174  
175   ret = MacDuAppSlotInd(&pst, slotInfo);
176   if(ret != ROK)
177   {
178      DU_LOG("\nMAC: Failed to send slot indication to DU APP");
179      MAC_FREE_SHRABL_BUF(MAC_MEM_REGION, MAC_POOL, slotInfo, sizeof(SlotInfo));
180   }
181  
182   return ret;
183 } /* sendSlotIndMacToDuApp */
184
185
186 /**
187  * @brief Transmission time interval indication from PHY.
188  *
189  * @details
190  *
191  *     Function : fapiMacSlotInd 
192  *      
193  *      This API is invoked by PHY to indicate TTI indication to MAC for a cell.
194  *           
195  *  @param[in]  Pst            *pst
196  *  @param[in]  SuId           suId 
197  *  @param[in]  SlotIndInfo    *slotInd
198  *  @return  S16
199  *      -# ROK 
200  *      -# RFAILED 
201  **/
202 PUBLIC S16 fapiMacSlotInd 
203 (
204 Pst                 *pst, 
205 SlotIndInfo         *slotInd
206 )
207 {
208    S16              ret;
209    VOLATILE U32     startTime=0;
210    Inst             inst;
211
212    DU_LOG("\nMAC : Slot Indication received");
213    
214    inst = pst->dstInst;
215    /*starting Task*/
216    SStartTask(&startTime, PID_MAC_TTI_IND);
217
218    /* send slot indication to scheduler */
219    ret = sendSlotIndMacToSch(slotInd);
220    if(ret != ROK)
221    {
222       DU_LOG("\nMAC : Sending of slot ind msg from MAC to SCH failed");
223       RETVALUE(ret);
224    }
225
226    ret = macProcessSlotInd(inst,*slotInd);
227    if(ret != ROK)
228    {
229       DU_LOG("\nMAC : macProcessSlotInd failed");
230       RETVALUE(ret);
231    }
232
233    /* send slot indication to du app */
234    ret = sendSlotIndMacToDuApp(slotInd);
235    if(ret != ROK)
236    {
237       DU_LOG("\nMAC :Sending of slot ind msg from MAC to DU APP failed");
238       RETVALUE(ret);
239    }
240
241    /*stoping Task*/
242    SStopTask(startTime, PID_MAC_TTI_IND);
243
244    RETVALUE(ret);
245 }  /* fapiMacSlotInd */
246
247 /**********************************************************************
248   End of file
249  **********************************************************************/
250