Ue Create Request from DU_APP to MAC
[o-du/l2.git] / src / du_app / du_mgr.h
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 message handling functionality for DU cell management */
20 #ifndef __DU_MGR_H__
21 #define __DU_MGR_H__
22
23 #include "stdio.h"
24 #include "ctype.h"
25 #include "envopt.h"        /* Environment options */
26 #include "envdep.h"        /* Environment dependent */
27 #include "envind.h"        /* Environment independent */
28 #include "gen.h"           /* General */
29 #include "ssi.h"           /* System services */
30 #include "cm5.h"           /* Common timer defines */
31 #include "cm_tkns.h"       /* Common tokens defines */
32 #include "cm_mblk.h"       /* Common memory allocation library defines */
33 #include "cm_llist.h"      /* Common link list  defines  */
34 #include "cm_hash.h"       /* Common hashlist  defines */
35 #include "cm_lte.h"
36 #include "cm_inet.h"
37 #include "lkw.h"
38 #include "lrg.h"
39 #include "legtp.h"
40 #include "du_app_mac_inf.h"
41
42 #include "gen.x"           /* General */
43 #include "ssi.x"           /* System services */
44
45 #include "cm5.x"           /* Common timer library */
46 #include "cm_tkns.x"       /* Common tokens */
47 #include "cm_mblk.x"       /* Common memory allocation */
48 #include "cm_llist.x"      /* Common link list */
49 #include "cm_hash.x"       /* Common hashlist */
50 #include "cm_lte.x"
51 #include "cm_inet.x"
52 #include "cm_lib.x"
53 #include "lkw.x"
54 #include "lrg.x"
55
56 #include "du_cfg.h"
57
58 #define DU_PROC  0
59 /* Memory related configs */
60 #define DU_APP_MEM_REGION    0
61 #define RLC_UL_MEM_REGION    1
62 #define RLC_DL_MEM_REGION    4
63 #define MAC_MEM_REGION       4
64
65 #define DU_POOL  1
66 #define RLC_POOL  1
67 #define RG_POOL 1
68
69 /* Events */
70 #define EVTCFG 0
71 #define EVTSCTPSTRT  1
72 #define EVENT_CU_DATA  2
73 #define EVENT_SCTP_NTFY  3
74 #define EVTSRVOPENREQ  4
75 #define EVTSRVOPENCFM  5
76 #define EVTTNLMGMTREQ  6
77 #define EVTTNLMGMTCFM  7
78 #define EVTSLOTIND    8
79 #define EVTSTARTPOLL  9
80 #define EVENT_RIC_DATA  10
81
82 /* Selector */
83 #define DU_SELECTOR_LC   0
84 #define DU_SELECTOR_TC   1
85 #define DU_SELECTOR_LWLC 2
86
87 /* SAP IDs */
88 #define DU_MAC_SUID 0
89 #define DU_MAC_SPID 0
90
91 /* Instance */
92 #define RLC_UL_INST 0
93 #define RLC_DL_INST 1
94
95 /* SAP state */
96 #define DU_SAP_UNBOUND 1
97 #define DU_SAP_BINDING 2
98 #define DU_SAP_BOUND   3
99
100 #define DU_ZERO_VAL 0
101
102 #define DU_UE_START_CRNTI 100
103
104 /* Macros */
105 #define ADD 0
106 #define DEL 1
107
108 #define RLC_GEN_CFG      1
109 #define RLC_MAC_SAP_CFG  2
110 #define RLC_UDX_SAP_CFG  4
111
112 #define MAC_GEN_CFG   1
113 #define MAC_SAP_CFG   2
114 #define MAX_MAC_SAP   2
115
116 #define DU_RLC_UL_CONFIGURED  (RLC_GEN_CFG |  \
117       RLC_MAC_SAP_CFG | RLC_UDX_SAP_CFG)
118 #define DU_RLC_DL_CONFIGURED DU_RLC_UL_CONFIGURED
119
120 #define MAC_CONFIGURED (MAC_GEN_CFG | MAC_SAP_CFG)
121
122 #define DU_SET_ZERO(_buf, _size)   \
123    cmMemset((U8 *)(_buf), 0, _size);
124
125 /* allocate and zero out a static buffer */
126 #define DU_ALLOC(_datPtr, _size)                                \
127 {                                                               \
128    S16 _ret;                                                    \
129    _ret = SGetSBuf(DU_APP_MEM_REGION, DU_POOL,                  \
130                     (Data **)&_datPtr, _size);                  \
131    if(_ret == ROK)                                              \
132       cmMemset((U8*)_datPtr, 0, _size);                         \
133    else                                                         \
134       _datPtr = NULLP;                                          \
135 }
136
137 /* free a static buffer */
138 #define DU_FREE(_datPtr, _size)                                 \
139    if(_datPtr)                                                  \
140       SPutSBuf(DU_APP_MEM_REGION, DU_POOL,                      \
141          (Data *)_datPtr, _size);
142
143 /* Allocate shared memory to be used for LWLC 
144  * during inter-layer communication */
145 #define DU_ALLOC_SHRABL_BUF(_buf, _size)                     \
146 {                                                            \
147    if(SGetStaticBuffer(DU_APP_MEM_REGION, DU_POOL,           \
148       (Data **)&_buf, (Size) _size, 0) == ROK)               \
149    {                                                         \
150       cmMemset((U8 *)(_buf), 0, _size);                      \
151    }                                                         \
152    else                                                      \
153    {                                                         \
154       (_buf) = NULLP;                                        \
155    }                                                         \
156 }
157
158 /* Free shared memory, received through LWLC */
159 #define DU_FREE_SHRABL_BUF(_region, _pool,_buf, _size)          \
160 {                                                               \
161    if (_buf != NULLP)                                           \
162    {                                                            \
163       (Void) SPutStaticBuffer(_region, _pool,                   \
164            (Data *) _buf, (Size) _size, 0);                     \
165        _buf = NULLP;                                            \
166    }                                                            \
167 }
168
169
170 typedef enum
171 {
172    CELL_OUT_OF_SERVICE,
173    ACTIVATION_IN_PROGRESS,
174    ACTIVATED,
175    DELETION_IN_PROGRESS
176 }CellStatus;
177
178 typedef enum
179 {
180    UE_INACTIVE,
181         UE_ACTIVE
182 }UeState;
183
184 typedef struct cellCfgParams
185 {
186    NrEcgi      nrEcgi;         /* ECGI */
187    U16         nrPci;          /* PCI */
188    U16         fiveGsTac;         /* 5gSTac */
189    Plmn      plmn[MAX_PLMN]; /* List of serving PLMN IDs */
190    U32         maxUe;          /* max UE per slot */
191 }CellCfgParams;
192
193 typedef struct duUeCb
194 {
195    uint32_t gnbDuUeF1apId; /* GNB DU UE F1AP ID */
196    uint32_t gnbCuUeF1apId; /* GNB CU UE F1AP ID */
197    UeState  ueState;
198    MacUeCfg macUeCfg;
199 }DuUeCb;
200
201 typedef struct duCellCb
202 {
203    uint16_t       cellId;           /* Internal cell Id */
204    CellCfgParams  cellInfo;         /* Cell info */
205    Bool           firstSlotIndRcvd;
206    CellStatus     cellStatus;       /* Cell status */
207         uint32_t       numActvUes;       /* Total Active UEs */
208    DuUeCb         ueCb[DU_MAX_UE];  /* UE CONTEXT */
209 }DuCellCb;
210
211 typedef struct duLSapCb
212 {
213    Pst pst;
214    SuId        suId;
215    SpId        spId;
216    State       sapState;
217    Mem         mem;
218    CmTimer     timer;
219    U8          bndRetryCnt;
220    U8          maxBndRetry;
221    TmrCfg      bndTmr;
222 }DuLSapCb;
223
224 typedef struct ueCcchCtxt
225 {
226    uint32_t gnbDuUeF1apId; /* GNB DU UE F1AP ID */
227    uint16_t crnti;         /* CRNTI */
228    uint16_t cellId;        /* Cell Id */
229 }UeCcchCtxt;
230
231
232 /* DU APP DB */
233 typedef struct duCb
234 {
235    Mem           mem;    /* Memory configs */
236    TskInit       init;   /* DU Init */
237    //DuLSapCb      **macSap;  /* MAC SAP */
238    Bool          f1Status; /* Status of F1 connection */
239    Bool          e2Status; /* Status of E2 connection */
240    DuCellCb*     cfgCellLst[DU_MAX_CELLS];     /* List of cells at DU APP of type DuCellCb */
241    DuCellCb*     actvCellLst[DU_MAX_CELLS];    /* List of cells activated/to be activated of type DuCellCb */
242    /* pointer to store the address of macCellCfg params used to send du-app to MAC */
243    MacCellCfg    *duMacCellCfg;         /* pointer to store params while sending DU-APP to MAC */
244    uint32_t       numUe;            /* current number of UEs */
245    UeCcchCtxt     ueCcchCtxt[DU_MAX_UE]; /* mapping of gnbDuUeF1apId to CRNTI required for CCCH processing*/
246 }DuCb;
247
248
249 typedef struct duLSapCfg
250 {
251    SuId        suId;
252    SpId        spId;
253    Ent         srcEnt;
254    Inst        srcInst;
255    ProcId      dstProcId;
256    Ent         dstEnt;
257    Inst        dstInst;
258    Priority    dstPrior;
259    Route       dstRoute;
260    Selector    dstSel;
261    Mem         mem;
262    U8          maxBndRetry;
263    TmrCfg      bndTmr;
264    TmrCfg      connTmr;
265 }DuLSapCfg;
266
267 /* global variables */
268 DuCb duCb;
269 //DuCfgParams duCfgParam;
270
271 /* DU Cell Functions */
272 S16 duActvInit(Ent entity, Inst inst, Region region, Reason reason);
273 S16 duActvTsk(Pst *pst, Buffer *mBuf);
274 S16 duSendRlcUlCfg();
275 S16 duSendRlcDlCfg();
276 S16 duBuildRlcCfg(Inst inst);
277 S16 duBuildRlcLsapCfg(Ent ent, Inst inst, U8 lsapInst);
278 S16 duBuildRlcUsapCfg(U8 elemId, Ent ent, Inst inst);
279 S16 duHdlRlcCfgComplete(Pst *pst, KwMngmt *cfm);
280 S16 duHdlRlcCntrlCfgComplete(Pst *pst, KwMngmt *cfm);
281 S16 duProcRlcUlCfgComplete(Pst *pst, KwMngmt *cfm);
282 S16 duProcRlcDlCfgComplete(Pst *pst, KwMngmt *cfm);
283 S16 duSendMacCfg();
284 S16 duBuildMacGenCfg();
285 S16 duBuildMacUsapCfg(SpId sapId);
286 S16 duHdlMacCfgComplete(Pst *pst, RgMngmt *cfm);
287 S16 duBindUnbindRlcToMacSap(U8 inst, U8 action);
288 S16 duProcCfgComplete();
289 S16 duSendSchCfg();
290 S16 duSctpStartReq();
291 S16 duSctpNtfyHdl(Buffer *mBuf, CmInetSctpNotification *ntfy);
292
293 S16 duBuildEgtpCfgReq();
294 S16 duHdlEgtpCfgComplete(CmStatus cfm);
295 S16 duSendEgtpSrvOpenReq();
296 S16 duHdlEgtpSrvOpenComplete(CmStatus cfm);
297 S16 duSendEgtpTnlMgmtReq(U8 action, U32 lclTeid, U32 remTeid);
298 S16 duHdlEgtpTnlMgmtCfm(EgtpTnlEvt tnlEvtCfm);
299 S16 duSendEgtpTestData();
300 S16 duSendEgtpDatInd(Buffer *mBuf);
301 S16 duHdlSchCfgComplete(Pst *pst, RgMngmt *cfm);
302 uint16_t duBuildAndSendMacCellStartReq();
303 uint16_t duBuildAndSendMacCellStopReq();
304
305 #endif
306
307 /**********************************************************************
308          End of file
309 **********************************************************************/