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 /**********************************************************************
21 Name: UDX Control Interface
25 Desc: This file Contains the Data structures for and prototypes
30 **********************************************************************/
32 #ifndef __RLC_DL_UL_INF_H__
33 #define __RLC_DL_UL_INF_H__
37 #endif /* __cplusplus */
40 /** @file rlc_dl_ul_inf.h
41 @brief UDX Interface File (ckw.h)
44 /* UDX Interface Hash Defines */
46 /* Loose Coupling define */
47 #define UDX_SEL_LC 0 /*!< Loose Coupling Option */
48 #define UDX_SEL_LWLC 1
52 /* CKW Interface defines */
53 #define UDX_MAX_ENT_CFG 24 /*!< Maximum number of entities to configure */
57 /* ckw_h_001.main_3 added support for L2 Measurement */
59 #define UDX_MAX_QCI 10
61 /* CKW Interface configuration type */
62 #define UDX_CFG_ADD 1 /*!< Add RLC Entity */
63 #define UDX_CFG_MODIFY 2 /*!< Modify RLC Entity */
64 #define UDX_CFG_DELETE 3 /*!< Delete RLC entity */
65 #define UDX_CFG_REESTABLISH 4 /*!< Re-establish RLC entity */
66 #define UDX_CFG_DELETE_UE 5 /*!< Release RLC entities per UE */
67 #define UDX_CFG_DELETE_CELL 6 /*!< Release RLC entities per Cell */
69 /* CKW RLC entity direction configuration */
70 #define UDX_CFG_DIR_UL 1 /*!< Unlink direction */
71 #define UDX_CFG_DIR_DL 2 /*!< Downlink direction */
72 #define UDX_CFG_DIR_BOTH 3 /*!< Both Downlink and Unlink */
74 /* CKW Configuration confirmations */
75 #define UDX_CFG_CFM_OK 1 /*!< Configuration confirmation success */
76 #define UDX_CFG_CFM_NOK 2 /*!< Configuration confirmation failed */
78 /***********************************************************************
79 Defines for CKW Interface Events
80 ***********************************************************************/
81 #define UDX_EVT_BND_REQ 0x01 /*!< Bind Request */
82 #define UDX_EVT_BND_CFM 0x02 /*!< Bind Confirm */
83 #define UDX_EVT_UBND_REQ 0x03 /*!< Unbind Request */
84 #define UDX_EVT_CFG_REQ 0x04 /*!< Config Request */
85 #define UDX_EVT_CFG_CFM 0x05 /*!< Config Confirm */
86 #define UDX_EVT_UEIDCHG_REQ 0x06 /*!< UE Id Change Request */
87 #define UDX_EVT_UEIDCHG_CFM 0x07 /*!< UE Id Change Confirm */
88 #define UDX_EVT_STA_UPD_REQ 0x08
89 #define UDX_EVT_STA_UPD_CFM 0x09
90 #define UDX_EVT_STA_PDU_REQ 0x0A
91 #define UDX_EVT_STA_PHBT_TMR_START 0x0B
92 #define UDX_EVT_DL_CLEANUP_MEM 0x10 /*!< To cleanup memory in DL inst */
94 /***********************************************************************
95 Defines for Measurements
96 ***********************************************************************/
97 #define UDX_EVT_L2MEAS_REQ 0x11
98 #define UDX_EVT_L2MEAS_SEND_REQ 0x12
99 #define UDX_EVT_L2MEAS_STOP_REQ 0x13
101 typedef struct rlcNackInfo
105 uint32_t sn; /*!< Nack Sn */
106 uint16_t soStart; /*!< Segment offset start */
107 uint16_t soEnd; /*!< Segment offset End */
110 typedef struct rlcUdxStaPdu
113 /* TODO : RLC_MAX_NACK_CNT should set to MAx SR delay
114 It is tradeoff to consider array based instead of dynamic
115 as there are chances where we might loose Status information
117 uint8_t nackCnt; /* Cnt of Nacks in the array*/
118 RlcNackInfo nackInfo[RLC_MAX_NACK_CNT];
121 typedef struct rlcUdxBufLst
123 CmLListCp rlsTxLst; /*!< Stores to be released Tx PDUs */
124 CmLListCp rlsRetxLst; /*!< Stores to be released Retx PDUs */
125 CmLListCp rlsSduLst; /*!< Stores to be released SDUs*/
128 typedef struct rlcStatusPdu
131 RlcNackInfo nackInfo[RLC_MAX_NACK_CNT];
141 typedef S16 (*UdxBndCfm) ARGS((Pst* pst, SuId suId,uint8_t status ));
143 typedef S16 (*UdxBndReq) ARGS((Pst* pst, SuId suId,SpId spId ));
145 typedef S16 (*UdxUbndReq) ARGS((Pst* pst, SuId suId,Reason reason));
147 typedef S16 (*UdxCfgReq) ARGS((Pst *pst, SpId spId, RlcCfgInfo *cfgInfo));
149 typedef S16 (*UdxCfgCfm) ARGS((Pst* pst,SuId suId,RlcCfgCfmInfo *cfmInfo));
151 typedef S16 (*UdxStaUpdReq) ARGS((Pst* pst,
154 RlcUdxStaPdu *pStaPdu ));
156 typedef S16 (*UdxUeIdChgReq) ARGS((Pst *pst,
160 CkwUeInfo *newUeInfo));
162 typedef S16 (*UdxUeIdChgCfm) ARGS((Pst *pst,
167 typedef S16 (*UdxStaUpdCfm) ARGS((Pst* pst,
170 RlcUdxBufLst *pBufLst));
172 typedef S16 (*UdxStaPduReq) ARGS((Pst* pst,
175 RlcUdxDlStaPdu *pStaPdu));
177 typedef S16 (*UdxStaProhTmrStart) ARGS((Pst* pst,
182 typedef S16 (*UdxL2MeasReq) ARGS((Pst* pst,
183 RlcL2MeasReqEvt *measReqEvt));
185 typedef S16 (*UdxL2MeasSendReq) ARGS((Pst* pst,
188 typedef S16 (*UdxL2MeasStopReq) ARGS((Pst* pst,
193 S16 cmPkUdxBndCfm ARGS((Pst* pst, SuId suId,uint8_t status ));
194 S16 cmPkUdxBndReq ARGS((Pst* pst, SuId suId,SpId spId ));
195 S16 cmPkUdxUbndReq ARGS((Pst* pst, SuId suId,Reason reason));
196 S16 cmPkUdxCfgReq ARGS((Pst *pst, SpId spId, RlcCfgInfo *cfgInfo));
197 S16 cmPkUdxCfgCfm ARGS(( Pst* pst,SuId suId,RlcCfgCfmInfo *cfmInfo));
198 S16 cmPkUdxStaUpdReq ARGS((Pst* pst,SpId spId,CmLteRlcId *rlcId,
199 RlcUdxStaPdu *pStaPdu ));
200 S16 cmPkUdxUeIdChgReq ARGS((Pst *pst, SpId spId, uint32_t transId,
201 CkwUeInfo *ueInfo, CkwUeInfo *newUeInfo));
202 S16 cmPkUdxUeIdChgCfm ARGS((Pst *pst, SuId suId, uint32_t transId,
206 S16 cmPkUdxStaUpdCfm ARGS((Pst* pst,SuId suId,CmLteRlcId *rlcId,
207 RlcUdxBufLst *pBufLst));
209 S16 cmPkUdxStaPduReq ARGS(( Pst* pst,SpId spId, CmLteRlcId *rlcId,
210 RlcUdxDlStaPdu *pStaPdu ));
211 S16 cmPkUdxStaProhTmrStart ARGS((Pst *pst,
216 S16 cmPkUdxL2MeasReq ARGS((Pst *pst, RlcL2MeasReqEvt *measReqEvt));
217 S16 cmPkUdxL2MeasSendReq ARGS((Pst *pst, uint8_t measType));
218 S16 cmPkUdxL2MeasStopReq ARGS((Pst *pst, uint8_t measType));
221 S16 cmUnpkUdxBndCfm ARGS((UdxBndCfm func,Pst* pst, Buffer *mBuf ));
222 S16 cmUnpkUdxBndReq ARGS((UdxBndReq func,Pst* pst, Buffer *mBuf ));
223 S16 cmUnpkUdxUbndReq ARGS((UdxUbndReq func,Pst* pst, Buffer *mBuf));
224 S16 cmUnpkUdxCfgReq ARGS((UdxCfgReq func,Pst *pst, Buffer *mBuf));
225 S16 cmUnpkUdxCfgCfm ARGS((UdxCfgCfm func , Pst* pst,Buffer *mBuf));
226 S16 cmUnpkUdxStaUpdReq ARGS((UdxStaUpdReq func,Pst* pst,Buffer *mBuf));
227 S16 cmUnpkUdxUeIdChgReq ARGS((UdxUeIdChgReq func,Pst *pst, Buffer *mBuf));
228 S16 cmUnpkUdxUeIdChgCfm ARGS((UdxUeIdChgCfm func,Pst *pst, Buffer *mBuf));
230 S16 cmUnpkUdxStaUpdCfm ARGS((UdxStaUpdCfm func,Pst* pst,Buffer *mBuf));
232 S16 cmUnpkUdxStaPduReq ARGS((UdxStaPduReq func, Pst* pst, Buffer *mBuf));
234 S16 cmUnpkUdxStaProhTmrStart ARGS((UdxStaProhTmrStart func,
239 S16 cmUnpkUdxL2MeasReq ARGS((UdxL2MeasReq func, Pst* pst, Buffer *mBuf));
240 S16 cmUnpkUdxL2MeasSendReq ARGS((UdxL2MeasSendReq func, Pst* pst, Buffer *mBuf));
241 S16 cmUnpkUdxL2MeasStopReq ARGS((UdxL2MeasStopReq func, Pst* pst, Buffer *mBuf));
246 S16 rlcUlUdxBndReq ARGS((Pst* pst, SuId suId, SpId spId));
248 S16 rlcDlUdxBndReq ARGS((Pst* pst, SuId suId, SpId spId));
250 S16 rlcDlUdxBndCfm ARGS((Pst* pst, SuId suId, uint8_t status));
252 S16 rlcUlUdxBndCfm ARGS((Pst* pst, SuId suId, uint8_t status));
254 S16 rlcDlUdxCfgCfm ARGS((Pst* pst, SuId suId, RlcCfgCfmInfo *cfmInfo));
256 S16 rlcUlUdxCfgCfm ARGS((Pst* pst, SuId suId, RlcCfgCfmInfo *cfmInfo));
258 S16 rlcDlUdxUeIdChgCfm ARGS((Pst *pst,
263 S16 rlcUlUdxUeIdChgCfm ARGS((Pst *pst,
268 S16 rlcUlUdxUbndReq ARGS((Pst* pst, SuId suId, Reason reason));
270 S16 rlcDlUdxUbndReq ARGS((Pst* pst, SuId suId, Reason reason));
272 S16 rlcUlUdxUeIdChgReq ARGS((Pst *pst,
276 CkwUeInfo *newUeInfo));
278 S16 rlcUlUdxCfgReq ARGS((Pst *pst, SpId spId, RlcCfgInfo *cfgInfo));
280 S16 rlcDlUdxCfgReq ARGS((Pst *pst, SpId spId, RlcCfgInfo *cfgInfo));
282 uint8_t rlcUlUdxStaUpdReq ARGS((Pst* pst,
285 RlcUdxStaPdu *pStaPdu));
287 S16 rlcDlUdxStaUpdReq ARGS((Pst* pst,
290 RlcUdxStaPdu *pStaPdu));
292 S16 rlcDlUdxStaUpdCfm ARGS((Pst* pst,
295 RlcUdxBufLst *pBufLst));
297 S16 rlcUlUdxStaUpdCfm ARGS((Pst* pst,
300 RlcUdxBufLst *pBufLst));
302 uint8_t rlcUlUdxStaPduReq ARGS((Pst *pst,
305 RlcUdxDlStaPdu *pStaPdu ));
307 S16 rlcDlUdxStaPduReq ARGS((Pst *pst,
310 RlcUdxDlStaPdu *pStaPdu));
312 S16 rlcDlUdxUeIdChgReq ARGS((Pst *pst,
316 CkwUeInfo *newUeInfo));
318 S16 rlcDlUdxCfgReq ARGS((Pst *pst, SpId spId, RlcCfgInfo *cfgInfo));
321 S16 rlcUlUdxStaUpdCfm ARGS((Pst* pst,
324 RlcUdxBufLst *pBufLst));
326 S16 rlcDlUdxStaPduReq ARGS((Pst *pst,
329 RlcUdxDlStaPdu *pStaPdu));
331 S16 rlcUlUdxStaProhTmrStart ARGS((Pst *pst,
333 CmLteRlcId *rlcId ));
335 uint8_t rlcDlUdxStaProhTmrStart ARGS((Pst *pst,
337 CmLteRlcId *rlcId ));
340 S16 rlcDlUdxL2MeasReq ARGS((Pst *pst, RlcL2MeasReqEvt *measReqEvt));
342 S16 rlcDlUdxL2MeasSendReq ARGS((Pst *pst, uint8_t status));
344 S16 rlcDlUdxL2MeasStopReq ARGS((Pst *pst, uint8_t status));
346 S16 rlcUlUdxL2MeasReq ARGS((Pst* pst, RlcL2MeasReqEvt *measReqEvt));
348 S16 rlcUlUdxL2MeasSendReq ARGS((Pst *pst, uint8_t status));
350 S16 rlcUlUdxL2MeasStopReq ARGS((Pst* pst, uint8_t measType));
360 #endif /* __cplusplus */
365 /********************************************************************30**
367 **********************************************************************/