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: CKW RRC Control Interface
25 Desc: This file Contains the Data structures for and prototypes
30 *********************************************************************21*/
37 #endif /*for extern "C"*/
40 @brief CKW Interface File (ckw.x)
43 /***********************************************************************
44 CKW typedefs and data structures
45 ***********************************************************************/
48 Logical Channel Information */
49 typedef struct ckwLChInfo
51 uint8_t lChId; /*!< Logical Channel ID.
52 The allowed values are [1..10] */
53 uint8_t type; /*!< Logical Channel Type -
54 BCCH/PCCH/CCCH/DTCH/DCCH */
58 Un-acknowledge Mode Information */
59 typedef struct rlcUmInfo
63 uint8_t snLen; /*!< Sequence Number length in bits. Allowed values are 6 and 12*/
67 uint8_t snLen; /*!< Sequence Number length in bits.*/
68 /*!< Allowed values are 6 and 12*/
69 uint8_t reAsmblTmr; /*!< T_reassembly Timer in msec */
74 Acknowledge Mode Information */
75 typedef struct rlcAmInfo
79 uint8_t snLen; /*!< Sequence Number length in
80 bits. Allowed values are 12 and 18 */
81 uint16_t pollRetxTmr; /*!< T_poll_retransmit Timer in msec */
82 S16 pollPdu; /*!< Used to trigger a poll for every pollPdu.*/
83 /*!< This field indicates the number of PDUs */
84 /* Patch ckw_x_001.main_5 */
85 /* !<For Infinite, RLC expects value 0xFFFF */
86 S32 pollByte; /*!< Poll_Byte in bytes. */
87 /*!<For Infinite RLC expects value 0xFFFFFFFF */
88 uint8_t maxRetx; /*!< Max_Retx_Threshold */
89 }dl; /*!< Down link */
92 uint8_t snLen; /*!< Sequence Number length in
93 bits. Allowed values are 12 and 18 */
94 uint16_t staProhTmr; /*!< T_status_prohibit Timer in msec*/
95 uint8_t reAsmblTmr; /*!< T_reordering Timer in msec*/
100 Transparent Mode Information */
101 typedef union rlcTmInfo
105 uint32_t buffSize; /*!< Buffer Size in bytes */
106 }dl; /*!< Down link */
110 Entity Configuration Information */
111 typedef struct rlcEntCfgInfo
113 uint8_t cfgType; /*!< Type of Configuration -
114 ADD/MODIFY/DELETE/RE-ESTABLISH/
116 uint8_t rbId; /* RB ID. The allowed
117 Values are [0..255] */
118 uint8_t rbType; /* Type of the RB - can be SRB or DRB */
119 uint8_t qci; /*!< qCI value Associated with that RB */
120 Snssai *snssai; /* Snssai Associated with logical channel */
121 CkwLChInfo lCh[CM_LTE_MAX_LOGCH_PER_RB]; /*!< Logical channel
124 idx = 0 implies DL and
126 In case of TM/UM idx 0 is only
128 CmLteRlcMode entMode; /*!< Entity mode: AM, UM or TM */
129 uint8_t dir; /*!< Direction: It can be either
131 UL / DL or BOTH for UM mode
132 and for AM its always for both UL
134 /* Supported by SPLIT Architecture */
135 S16 discardTmr; /*!< Discard timer. @n The value for this parameter is
136 expected in milli seconds. @n Value of infinity is also
137 allowed and -1 must be passed for the same. */
139 /* Supported by SPLIT Architecture ends */
142 RlcUmInfo umInfo; /*!< Un-acknowledged Mode Information */
143 RlcAmInfo amInfo; /*!< Acknowledged Mode Information */
144 RlcTmInfo tmInfo; /*!< Transparent Mode Information */
149 Configuration Information from RRC to RLC */
150 typedef struct rlcCfgInfo
152 uint32_t transId; /*!< Transaction Id */
153 CmLteRnti ueId; /*!< UE ID */
154 CmLteCellId cellId; /*!< Cell ID */
155 uint8_t numEnt; /*!< Number of entities to configure */
156 RlcEntCfgInfo entCfg[CKW_MAX_ENT_CFG]; /*!< Array of Entities to be configure */
160 Entity Configuration Confirmation Information */
161 typedef struct rlcEntCfgCfmInfo
163 uint8_t rbId; /*!< rb ID */
164 uint8_t rbType; /*!< RB type - can be SRB or DRB */
165 CmStatus status; /*!< Status of the confirmation */
169 Configuration Confirmation Informatin RLC to RRC */
170 typedef struct rlcCfgCfmInfo
172 uint32_t transId; /*!< Transaction Id */
173 CmLteRnti ueId; /*!< UE ID */
174 CmLteCellId cellId; /*!< Cell ID */
175 uint8_t numEnt; /*!< Number of entities configured */
176 RlcEntCfgCfmInfo entCfgCfm[CKW_MAX_ENT_CFG]; /*!< Array of Entity cfg
182 typedef struct ckwUeInfo
184 CmLteRnti ueId; /*!< UE ID */
185 CmLteCellId cellId; /*!< Cell ID */
187 /* Control primitives towards LTE RRC */
189 /* Pointer functiones for Pack/Unpack */
190 typedef S16 (*RlcCfgReq) ARGS((Pst *pst, RlcCfgInfo *cfgInfo));
191 typedef S16 (*RlcCfgCfm) ARGS((Pst *pst, SuId suId, RlcCfgCfmInfo *cfmInfo));
193 typedef S16 (*CkwUeIdChgReq) ARGS((Pst *pst, SpId spId, uint32_t transId,
194 CkwUeInfo *ueInfo, CkwUeInfo *newUeInfo));
195 typedef S16 (*CkwUeIdChgCfm) ARGS((Pst *pst, SuId suId, uint32_t transId,
196 CkwUeInfo *ueInfo, CmStatus status));
198 typedef S16 (*CkwBndReq) ARGS((Pst *pst, SuId suId, SpId spId));
199 typedef S16 (*CkwBndCfm) ARGS((Pst *pst, SuId suId, uint8_t status));
200 typedef S16 (*CkwUbndReq) ARGS((Pst *pst, SpId spId, Reason reason));
203 * @details The primitive binds the RLC service user entity to the RLC product.
204 * The RLC service user must bind each CKW SAP individually before sending any
205 * other request. RLC acknowledges the receipt of the bind request by sending
206 * a RlcUiCkwBndCfm primitive.
208 * @param[in] pst - For the bind request, the event field in the Pst
209 * structure is set to EVTCKWBNDREQ
210 * @param[in] suId - The ID of the service user SAP associated with the
211 * SAP in the RLC layer. The SSAP in the RLC layer is
212 * specified by the spId parameter.\n
213 * Allowable values: 0 to 32767.
214 * @param[in] spId - The ID of the service provider SAP in the RLC layer.\n
215 * Allowable values: 0 to 32767.
218 S16 RlcUiCkwBndReq ARGS((Pst *pst, SuId suId, SpId spId));
221 * @details RLC invokes the bind confirm primitive to acknowledge the receipt
222 * of the RlcUiCkwBndReq primitive from the service user. The status field
223 * indicates whether the bind request succeeded or failed. The bind request
224 * may fail due to invalid parameters in the bind request from the
225 * service user (for example, an invalid spId).
227 * @param[in] pst - For the bind confirm, the event field in the Pst
228 * structure is set to EVTCKWBNDCFM
229 * @param[in] suId - The ID of the service user SAP specified in the
230 * bind request. Allowable
232 * @param[in] status - Indicates the status of the bind request.\n
233 CM_BND_OK: Bind request succeeded\n
234 CM_BND_NOK: Error encountered during the processing of the bind request.
237 S16 RlcUiCkwBndCfm ARGS((Pst *pst, SuId suId, uint8_t status));
240 * @details The RLC service user initiates this primitive for performing
241 * an unbind operation.This primitive brings the link down if it is already up,
242 * and releases all the resources associated for this SAP at RLC.
244 * @param[in] pst - For the unbind request, the event field in the Pst
245 * structure is set to EVTCKWUBNDREQ
246 * @param[in] spId - The ID of the service provider SAP in the RLC layer
247 * that is to be disassociated from its service
249 * Allowable values: 0 to 32767.
250 * @param[in] reason - Reason for the unbind.\n
251 * Allowable value: CKW_UBND_REQ.
254 S16 RlcUiCkwUbndReq ARGS((Pst *pst, SpId spId, Reason reason));
256 /* Layer interface Control Primitives */
258 *@details This primitive is used by RRC to configure the multiple RLC entities. RRC
259 sends this primitive for the control of the RLC entity.
261 * The different configuration allowed by RRC to RLC are:\n
262 CKW_CFG_ADD - Configures the new RLC entity\n
263 CKW_CFG_MODIFY - Modifies the RLC entity\n
264 CKW_CFG_DELETE - Deletes the RLC entity\n
265 CKW_CFG_REESTABLISH - Re-establilsh the RLC entity\n
266 CKW_CFG_DELETE_UE - Deletes the RLC entities per UE\n
269 * @param[in] pst - Point to the pst structure
270 * @param[in] transId - Transaction ID. This field will uniquily identifies
271 * transaction between RRC and RLC.
272 * @param[in] cfgInfo - This structure contains the configuration information
275 S16 RlcProcCfgReq ARGS((Pst *pst, RlcCfgInfo *cfgInfo));
278 *@details This primitive is used by RLC to confirm the configuration requested
281 * The different values for status are:\n
282 * CKW_CFG_CFM_OK - Success\n
283 * CKW_CFG_CFM_NOK - Failure\n
285 * The different reasons for the failure are:\n
286 * CKW_CFG_REAS_TYPE_MIS - Logical channel type mismatch with mode\n
287 * CKW_CFG_REAS_ENT_UNKWN - Reconfigure request for an unknown RLC entity\n
289 * @param[in] pst - Point to the pst structure.
290 * @param[in] transId - Transaction ID. This field will uniquily identifies
291 * transaction between RRC and RLC.
292 * @param[in] cfmInfo - This structure contains the configuration confirm
296 S16 RlcUiRlcCfgCfm ARGS((Pst *pst, SuId suId, RlcCfgCfmInfo *cfmInfo));
299 *@details This primitive is used by RRC to change the UeId for the existing UE
302 * @param[in] pst - Point to the pst structure
303 * @param[in] spId - The ID of the service provider SAP in the RLC layer.
304 * @param[in] transId - Transaction ID. This field uniquily identifies
305 * transaction between RRC and RLC.
306 * @param[in] ueInfo - Old UE Id Info for which the change request has come.
307 * @param[in] newUeInfo - New UE Id Info for existing UE context.
310 S16 RlcUiCkwUeIdChgReq ARGS((Pst *pst, SpId spId, uint32_t transId,
311 CkwUeInfo *ueInfo, CkwUeInfo *newUeInfo));
314 *@details This primitive is used by RLC to confirm the UeId change requested
317 * The different values for status are:\n
318 * CKW_CFG_CFM_OK - Success\n
319 * CKW_CFG_CFM_NOK - Failure\n
321 * The different reasons for the failure are:\n
322 * CKW_CFG_REAS_UE_CREAT_FAIL - UE Cb update failure \n
323 * CKW_CFG_REAS_UE_UNKWN - Request received for an unknown UE Id
325 * @param[in] pst - Point to the pst structure.
326 * @param[in] suId - The ID of the service user SAP associated with RLC
327 * @param[in] transId - Transaction ID. This field uniquily identifies
328 * transaction between RRC and RLC.
329 * @param[in] ueInfo - UE Identity which is changed with the new Id for the same
331 * @param[in] CmStatus - Confirmation status with appropriate reason.
335 S16 RlcUiCkwUeIdChgCfm ARGS((Pst *pst, SuId suId, uint32_t transId,
336 CkwUeInfo *ueInfo, CmStatus status));
338 /* RRC Extern declarations */
340 S16 NhLiCkwBndReq ARGS((
345 S16 NhLiCkwUbndReq ARGS((
350 S16 NhLiCkwBndCfm ARGS((Pst *pst,
354 S16 NhLiRlcCfgReq ARGS((
357 RlcCfgInfo *cfgInfo));
359 S16 NhLiRlcCfgCfm ARGS((Pst *pst,
361 RlcCfgCfmInfo* cfmInfo));
363 S16 NhLiCkwUeIdChgReq ARGS((Pst *pst,
364 SpId spId, uint32_t transId,
365 CkwUeInfo *ueInfo, CkwUeInfo *newUeInfo));
367 S16 NhLiCkwUeIdChgCfm ARGS((Pst *pst,
368 SuId suId, uint32_t transId,
369 CkwUeInfo *ueInfo, CmStatus status));
373 /* Dummy RRC Interface primitives */
375 S16 DmUiCkwBndReq ARGS((
380 S16 DmUiCkwUbndReq ARGS((
385 S16 DmUiCkwBndCfm ARGS((Pst *pst,
389 S16 DmUiRlcCfgReq ARGS((
392 RlcCfgInfo *cfgInfo));
394 S16 DmUiRlcCfgCfm ARGS((Pst *pst,
396 RlcCfgCfmInfo* cfmInfo));
398 S16 DmUiCkwUeIdChgReq ARGS((Pst *pst,
399 SpId spId, uint32_t transId,
400 CkwUeInfo *ueInfo, CkwUeInfo *newUeInfo));
402 S16 DmUiCkwUeIdChgCfm ARGS((Pst *pst,
403 SuId suId, uint32_t transId,
404 CkwUeInfo *ueInfo, CmStatus status));
408 /*****************************************************************************
409 * PACK/UNPACK FUNCTIONS
410 ****************************************************************************/
412 /* Packing functions */
413 S16 cmPkRlcTmInfo ARGS ((
418 S16 cmPkRlcUmInfo ARGS ((
419 RlcEntCfgInfo *param,
423 S16 cmPkRlcAmInfo ARGS ((
428 S16 cmPkCkwLChInfo ARGS ((
433 S16 cmPkRlcEntCfgInfo ARGS ((
434 RlcEntCfgInfo *param,
438 S16 cmPkRlcCfgInfo ARGS ((
444 S16 cmPkRlcEntCfgCfmInfo ARGS ((
445 RlcEntCfgCfmInfo *param,
449 S16 cmPkRlcCfgCfmInfo ARGS ((
450 RlcCfgCfmInfo *param,
455 S16 cmPkCkwUeInfo ARGS ((
460 S16 cmPkCkwBndReq ARGS ((
466 S16 cmPkCkwUbndReq ARGS ((
472 S16 cmPkCkwBndCfm ARGS ((
478 S16 packUeCreateReq ARGS ((
483 S16 cmPkRlcCfgCfm ARGS ((
486 RlcCfgCfmInfo *cfgCfmInfo
489 S16 cmPkCkwUeIdChgReq ARGS ((
497 S16 cmPkCkwUeIdChgCfm ARGS ((
505 /* Unpacking functions */
506 S16 cmUnpkRlcTmInfo ARGS ((
511 S16 cmUnpkRlcUmInfo ARGS ((
512 RlcEntCfgInfo *param,
516 S16 cmUnpkRlcAmInfo ARGS ((
521 S16 cmUnpkCkwLInfo ARGS ((
526 S16 cmUnpkRlcCfgCfmInfo ARGS ((
527 RlcCfgCfmInfo *param,
532 S16 cmUnpkCkwBndReq ARGS ((
538 S16 cmUnpkCkwLChInfo ARGS ((
543 S16 cmUnpkRlcEntCfgInfo ARGS ((
544 RlcEntCfgInfo *param,
548 S16 cmUnpkRlcCfgInfo ARGS ((
554 S16 cmUnpkCkwUeInfo ARGS ((
559 S16 cmUnpkRlcCfgCfm ARGS ((
565 S16 cmUnpkCkwUbndReq ARGS ((
571 S16 cmUnpkCkwBndCfm ARGS ((
577 S16 unpackUeCreateReq ARGS ((
583 S16 cmUnpkRlcEntCfgCfmInfo ARGS ((
584 RlcEntCfgCfmInfo *param,
588 S16 cmUnpkCkwUeIdChgReq ARGS ((
594 S16 cmUnpkCkwUeIdChgCfm ARGS ((
602 #endif /* __cplusplus */
603 #endif /* __CKW_X__ */
607 /********************************************************************30**
609 **********************************************************************/