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 /********************************************************************20**
21 Name: RLC Layer Management interface
25 Desc: This file contains source code for RLC layer management
26 interface primitives. It includes the definition of the
27 following functions and their portable function
36 *********************************************************************21*/
39 /* header (.h) include files */
40 #include "common_def.h"
41 #include "lkw.h" /* LKW defines */
42 #include "ckw.h" /* CKW defines */
43 #include "kwu.h" /* KWU defines */
44 #include "rgu.h" /* RGU defines */
46 #include "kw_env.h" /* RLC environment options */
47 #include "kw.h" /* RLC defines */
49 /* extern (.x) include files */
50 #include "lkw.x" /* LKW */
51 #include "ckw.x" /* CKW */
52 #include "kwu.x" /* KWU */
53 #include "rgu.x" /* RGU */
58 #define MAXKWMI 2 /* max. layer management interfaces */
61 /*********************************************************************
62 * Primitives for LKW interface
63 ********************************************************************/
64 /* Configuration confirmation primitive */
66 PRIVATE RlcConfigCfm rlcMiRlcConfigCfmMt[MAXKWMI] =
69 packRlcConfigCfm, /* 0 - loosely coupled - fc */
70 #endif /* LCRLMILKW */
72 SmMiRlcConfigCfm, /* 1 - tightly coupled layer management*/
76 /* control confirmation primitives */
78 PRIVATE LkwCntrlCfm kwMiLkwCntrlCfmMt[MAXKWMI] =
81 cmPkLkwCntrlCfm, /* 0 - loosely coupled - fc */
82 #endif /* LCRLMILKW */
84 SmMiLkwCntrlCfm, /* 1 - tightly coupled layer management*/
88 /* Status Indication primitive */
90 PRIVATE LkwStaInd kwMiLkwStaIndMt[MAXKWMI] =
93 cmPkLkwStaInd, /* 0 - loosely coupled */
94 #endif /* LCKWMILKW */
96 SmMiLkwStaInd, /* 1 - tightly coupled, layer management */
100 /* Status confirm primitive */
102 PRIVATE LkwStaCfm kwMiLkwStaCfmMt[MAXKWMI] =
105 cmPkLkwStaCfm, /* 0 - loosely coupled */
106 #endif /* LCKWMILKW */
108 SmMiLkwStaCfm, /* 1 - tightly coupled, layer management */
112 /* Statistics confirm primitive */
114 PRIVATE LkwStsCfm kwMiLkwStsCfmMt[MAXKWMI] =
117 cmPkLkwStsCfm, /* 0 - loosely coupled */
118 #endif /* LCRLMILKW */
120 SmMiLkwStsCfm, /* 1 - tightly coupled, layer management */
124 /* Trace indication primitive */
126 PRIVATE LkwTrcInd kwMiLkwTrcIndMt[MAXKWMI] =
129 cmPkLkwTrcInd, /* 0 - loosely coupled */
130 #endif /* LCKWMILKW */
132 SmMiLkwTrcInd, /* 1 - tightly coupled, layer management */
136 /* kw005.201 added support for L2 Measurement */
138 PRIVATE CONSTANT LkwL2MeasCfm rlcMiLkwL2MeasCfmMt[] =
147 PRIVATE CONSTANT LkwL2MeasStopCfm RlcMiLkwL2MeasStopCfmMt[] =
150 cmPkLkwL2MeasStopCfm,
153 SmMiLkwL2MeasStopCfm,
156 #endif /* LTE_L2_MEAS */
158 /****************************************************************************
159 * LKW Interface Mt functions
160 ***************************************************************************/
163 This function is called by the RlcMiRlcConfigReq function for responding
164 to configuration requests.The cfm field in the RlcMngmt structure contains
167 - This function calls the mapping matrix for sending the configuration
169 - The actual function called depends on the coupling at the LKW interface.
170 - For a loosely coupled interface, a common packing function is called.
171 - The packing function packs the parameter in a message buffer and posts
172 the message to the target task.
173 - For a tightly coupled interface, the actual function called depends on
174 the layer manager API provided.
178 S16 RlcMiRlcConfigCfm
180 Pst *pst, /* post structure */
181 RlcMngmt *cfm /* Layer Management structure */
184 S16 RlcMiRlcConfigCfm(pst, cfm)
185 Pst *pst; /* post structure */
186 RlcMngmt *cfm; /* Layer Management structure */
189 TRC3(RlcMiRlcConfigCfm);
191 /* jump to specific primitive depending on configured selector */
192 (*rlcMiRlcConfigCfmMt[pst->selector])(pst, cfm);
200 This function is called by the RlcMiLkwCntrlReq function to send a control confirm to the layer management module.
202 - This function calls the mapping matrix for sending the control confirmation.
203 - Actual function called depends on the coupling of the LKW interface.
204 - For a loosely coupled interface, a common packing function is called.
205 - The packing function packs the parameter in a message buffer and posts the
206 message to the target task.
207 - For a tightly coupled interface, the actual function called depends on the
208 layer manager API provided.
214 Pst *pst, /* post structure */
215 RlcMngmt *cfm /* configure */
218 S16 RlcMiLkwCntrlCfm(pst, cfm)
219 Pst *pst; /* post structure */
220 RlcMngmt *cfm; /* confirm */
223 TRC3(RlcMiLkwCntrlCfm)
225 /* jump to specific primitive depending on configured selector */
226 (*kwMiLkwCntrlCfmMt[pst->selector])(pst, cfm);
230 } /* end of RlcMiLkwCntrlCfm */
235 - This function can be used by RLC to send unsolicited status information
236 to the layer manager, when the unsolicited status flag is enabled by the
237 layer manager through a previous control request.
239 - This function calls the mapping matrix for sending the unsolicited status
240 indication.The actual function called depends on the coupling of the
243 - For a loosely coupled interface, a common packing function is called. The
244 packing function packs the parameter in a message buffer and posts the
245 message to the target task.
247 - For a tightly coupled interface, the actual function called depends on
248 the layer manager API provided.
253 Pst *pst, /* post structure */
254 RlcMngmt *usta /* unsolicited status */
257 S16 RlcMiLkwStaInd(pst, usta)
258 Pst *pst; /* post structure */
259 RlcMngmt *usta; /* unsolicited status */
262 TRC3(RlcMiLkwStaInd);
264 /* jump to specific primitive depending on configured selector */
265 (*kwMiLkwStaIndMt[pst->selector])(pst, usta);
268 } /* end of RlcMiLkwStaInd */
273 - This function is called by the RlcMiLkwStaReq function to send
274 the requested status information to the layer manager.
276 - This function calls the mapping matrix for sending the status
277 confirmation. The actual function called depends on the coupling
278 of the LKW interface.
280 - For a loosely coupled interface, a common packing function is called.
281 The packing function packs the parameter in a message buffer and
282 posts the message to the target task.
284 - For a tightly coupled interface, the actual function called depends
285 on the layer manager API provided.
291 Pst *pst, /* post structure */
292 RlcMngmt *cfm /* solicited status confirmation */
295 S16 RlcMiLkwStaCfm(pst, cfm)
296 Pst *pst; /* post structure */
297 RlcMngmt *cfm; /* solicited status confirmation */
300 TRC3(RlcMiLkwStaCfm);
302 /* jump to specific primitive depending on configured selector */
303 (*kwMiLkwStaCfmMt[pst->selector])(pst, cfm);
307 } /* end of RlcMiLkwStaCfm */
312 - This function is called by the RlcMiLkwStsReq function for responding
313 to statistics requests.
315 - This function calls the mapping matrix for sending the statistics
316 confirmation. The actual function called depends on the coupling
317 of the LKW interface.
319 - For a loosely coupled interface, a common packing function is called.
320 The packing function packs the parameter in a message buffer and
321 posts the message to the target task.
323 - For a tightly coupled interface, the actual function called depends
324 on the layer manager API provided.
330 Pst *pst, /* post structure */
331 Action action, /* action */
332 RlcMngmt *cfm /* statistics confirmation */
335 S16 RlcMiLkwStsCfm(pst, action, cfm)
336 Pst *pst; /* post structure */
337 Action action; /* action */
338 RlcMngmt *cfm; /* statistics confirmation */
341 TRC3(RlcMiLkwStsCfm);
343 /* jump to specific primitive depending on configured selector */
344 (*kwMiLkwStsCfmMt[pst->selector])(pst, action, cfm);
348 } /* end of RlcMiLkwStsCfm */
352 - This function can be used by RLC module to send unsolicited trace
353 indications to the layer manager, when tracing is enabled by the
354 layer manager through a previous control request.
356 - This function calls the mapping matrix for sending the trace indication.
357 The actual function called depends on the coupling of the LKW interface.
359 - For a loosely coupled interface, a common packing function is called.
360 The packing function packs the parameter in a message buffer and posts
361 the message to the target task.
363 - For a tightly coupled interface, the actual function called depends on
364 the layer manager API provided.
370 Pst *pst, /* post structure */
371 RlcMngmt *trc, /* trace indication */
372 Buffer *mBuf /* message buffer */
375 S16 RlcMiLkwTrcInd(pst, trc, mBuf)
376 Pst *pst; /* post structure */
377 RlcMngmt *trc; /* trace indication */
378 Buffer *mBuf; /* message buffer */
381 TRC3(RlcMiLkwTrcInd);
383 /* jump to specific primitive depending on configured selector */
384 (*kwMiLkwTrcIndMt[pst->selector])(pst, trc, mBuf);
388 } /* end of RlcMiLkwTrcInd */
391 /* kw005.201 added support for L2 Measurement */
394 S16 RlcMiLkwL2MeasCfm
397 RlcL2MeasCfmEvt *measEvt
400 S16 RlcMiLkwL2MeasCfm(pst, measEvt)
402 RlcL2MeasCfmEvt *measEvt;
406 TRC3(RlcMiLkwL2MeasCfm)
408 (*rlcMiLkwL2MeasCfmMt[pst->selector])(pst, measEvt);
414 S16 RlcMiLkwL2MeasStopCfm
421 S16 RlcMiLkwL2MeasStopCfm(pst, measType,status)
428 TRC3(RlcMiLkwL2MeasStopCfm)
430 (*RlcMiLkwL2MeasStopCfmMt[pst->selector])(pst, measType,status);
435 #endif /* LTE_L2_MEAS */
437 /********************************************************************30**
440 **********************************************************************/