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 /* Defines APIs exchanged between du_app and cl module of RLC */
24 #define EVENT_RLC_UE_CREATE_REQ 210
25 #define EVENT_RLC_UE_CREATE_RSP 211 /*!< Config Confirm */
26 #define EVENT_UL_RRC_MSG_TRANS_TO_DU 212
27 #define EVENT_DL_RRC_MSG_TRANS_TO_RLC 213
28 #define EVENT_RRC_DELIVERY_MSG_TRANS_TO_DU 214
29 #define EVENT_RLC_UE_RECONFIG_REQ 215
30 #define EVENT_RLC_UE_RECONFIG_RSP 216
31 #define EVENT_DL_RRC_MSG_RSP_TO_DU 217
32 #define EVENT_DL_USER_DATA_TRANS_TO_RLC 218
33 #define EVENT_UL_USER_DATA_TRANS_TO_DU 219
34 #define EVENT_RLC_UE_DELETE_REQ 220
35 #define EVENT_RLC_UE_DELETE_RSP 221
40 #define RB_TYPE_SRB 0 /* Signalling Radio Bearer */
41 #define RB_TYPE_DRB 1 /* Data Radio Bearer */
43 /* RLC Direction Config */
44 #define RLC_CFG_DIR_UL 1 /*!< Uplink direction */
45 #define RLC_CFG_DIR_DL 2 /*!< Downlink direction */
46 #define RLC_CFG_DIR_BOTH 3 /*!< Both Downlink and Uplink Direction*/
49 /* Logical Channel Type */
50 #define LCH_BCCH 1 /*!< BCCH Logical Channel */
51 #define LCH_PCCH 2 /*!< PCCH Logical Channel */
52 #define LCH_CCCH 3 /*!< CCCH Logical Channel */
53 #define LCH_DTCH 4 /*!< DTCH Logical Channel */
54 #define LCH_DCCH 5 /*!< DCCH Logical Channel */
58 TRANSMISSION_IN_PROGRESS,
59 TRANSMISSION_COMPLETE,
65 RLC_CFG_REAS_NONE , /*!< No Failure */
66 RLC_CFG_REAS_RB_CREAT_FAIL , /*!< RB CB creation Failure */
67 RLC_CFG_REAS_UE_CREAT_FAIL , /*!< UE CB creation Failure */
68 RLC_CFG_REAS_CELL_CREAT_FAIL , /*!< CELL CB creation Failure */
69 RLC_CFG_REAS_RB_PRSNT , /*!< RB CB already present */
70 RLC_CFG_REAS_LCHTYPE_MIS , /*!< Logical channel type mismatch */
71 RLC_CFG_REAS_RB_UNKWN , /*!< RB Cb unknown */
72 RLC_CFG_REAS_UE_UNKWN , /*!< UE Cb unknown */
73 RLC_CFG_REAS_CELL_UNKWN , /*!< Cell Cb unknown */
74 RLC_CFG_REAS_RB_DEL_FAIL , /*!< RB Cb Deletion Failure */
75 RLC_CFG_REAS_UE_DEL_FAIL , /*!< UE Cb Deletion Failure */
76 RLC_CFG_REAS_RB_REEST_FAIL , /*!< RB Cb Re establish Failure */
77 RLC_CFG_REAS_RB_MODE_MIS , /*!< RB Cb Mode mismatch */
78 RLC_CFG_REAS_REEST_FAIL , /*!< RB Cb Re-establishment Failed */
79 RLC_CFG_REAS_RECFG_FAIL , /*!< RB Cb Re-configuration Failed */
80 RLC_CFG_REAS_INVALID_CFG , /*!< Invalid Configuration Type */
81 RLC_CFG_REAS_SAME_UEID , /*!< UE Ids match in ChngUeId Request */
82 RLC_CFG_REAS_CELL_DEL_FAIL , /*!< Cell Cb Deletion Failure */
83 RLC_CFG_REAS_INVALID_LCHID , /*!< Invalid LChId */
84 RLC_CFG_REAS_INVALID_DIR , /*!< Invalid Direction */
85 RLC_CFG_REAS_UE_EXISTS , /*!< UE ID already exists */
86 RLC_CFG_REAS_INVALID_SNLEN , /*!< Invalid SN Length */
87 RLC_CFG_REAS_SNLEN_MIS , /*!< SN Length mismatch */
88 RLC_CFG_REAS_INVALID_RGUSAP /*!< Invalid RGU SAP ID */
93 SUCCESSFUL , /*!< No Failure */
94 INVALID_CELLID , /*!< CellId not present */
95 INVALID_UEID , /*!< UEId not present */
100 RLC_AM, //Acknowledged Mode
101 RLC_UM_BI_DIRECTIONAL, //UnAcknowledged Mode
102 RLC_UM_UNI_DIRECTIONAL_UL,
103 RLC_UM_UNI_DIRECTIONAL_DL
120 RLC_DU_APP_RSP_OK = 1,
124 typedef struct ulAmCfg
126 SnLenAm snLenUl; /* Sequence Number length in bits. Allowed values are 12 and 18 */
127 int8_t reAssemTmr; /* T_reassembling Timer in msec*/
128 int16_t statProhTmr; /* T_status_prohibit Timer in msec*/
132 typedef struct dlAmCfg
134 SnLenAm snLenDl; /* Sequence Number length in bits. Allowed values are 12 and 18 */
135 uint16_t pollRetxTmr; /* T_poll_retransmit Timer in msec */
136 int16_t pollPdu; /* Used to trigger a poll for every pollPdu.*/
137 int32_t pollByte; /* Poll_Byte in bytes. */
138 uint8_t maxRetxTh; /* Max_Retx_Threshold */
142 typedef struct dlUmCfg
144 SnLenUm snLenDlUm; /* Sequence Number length in bits. Allowed values are 6 and 12 */
148 typedef struct ulUmCfg
150 SnLenUm snLenUlUm; /* Sequence Number length in bits. Allowed values are 6 and 12 */
151 int8_t reAssemTmr; /* T_reassembling Timer in msec*/
155 typedef struct amBearerCfg
161 typedef struct umBiDirBearerCfg
167 typedef struct umUniDirUlBearerCfg
170 }UmUniDirUlBearerCfg;
172 typedef struct umUniDirDlBearerCfg
175 }UmUniDirDlBearerCfg;
177 /* Spec Ref: 38.331, 6.3.2 RLC-BearerConfig */
178 typedef struct rlcBearerCfg
180 ConfigType configType;
190 UmBiDirBearerCfg *umBiDirCfg;
191 UmUniDirUlBearerCfg *umUniDirUlCfg;
192 UmUniDirDlBearerCfg *umUniDirDlCfg;
196 typedef struct rlcUeCfg
201 RlcBearerCfg rlcLcCfg[MAX_NUM_LC];
202 UeCfgState rlcUeCfgState; /* InActive / Completed */
205 typedef struct rlcUeCfgRsp
210 FailureReason reason;
213 typedef struct rlcUeDelete
219 typedef struct rlcUeDeleteRsp
223 UeDeleteResult result;
226 /* UL RRC Message from RLC to DU APP */
227 typedef struct ulRrcMsgInfo
229 uint16_t cellId; /* Cell Id */
230 uint16_t ueIdx; /* UE Index */
231 uint8_t lcId; /* Logical channel Id */
232 uint16_t msgLen; /* RRC message length (in bytes) */
233 uint8_t *rrcMsg; /* RRC Message (UL-DCCH Message) */
236 /* UL User Data from RLC to DU APP */
237 typedef struct ulUserDatInfo
239 uint16_t cellId; /* Cell Id */
240 uint16_t ueIdx; /* UE Index */
242 uint16_t msgLen; /* User data length (in bytes) */
243 uint8_t *userData; /* User data (UL-DTCH Message) */
246 /* DL RRC Message from DU APP to RLC */
247 typedef struct dlRrcMsgInfo
249 uint16_t cellId; /* Cell Id */
250 uint16_t ueIdx; /* UE index */
251 uint8_t rbType; /* Radio Bearer Type */
252 uint8_t rbId; /* Radio Bearer Id */
253 uint8_t lcType; /* Logical channel type */
254 uint8_t lcId; /* Logical channel Id */
255 bool execDup; /* Execution duplication enabled */
256 bool deliveryStaRpt; /* Reporting of delivery status by RLC to DU-APP enabled */
257 uint16_t msgLen; /* RRC Message length */
258 uint8_t *rrcMsg; /* RRC Message (DL-DCCH Message) */
261 /* DL RRC Message Rsp From RLC to DU APP */
262 typedef struct dlRrcMsgRsp
264 uint16_t cellId; /* Cell Id */
265 uint16_t crnti; /* UE index */
266 DlMsgState state; /* Dl RRC Msg State */
269 /* RRC delivery message from RLC to DU APP */
270 typedef struct rrcDeliveryStatus
272 uint16_t deliveryStatus;
273 uint16_t triggeringMessage;
276 typedef struct rrcDeliveryReportInfo
281 RrcDeliveryStatus rrcDeliveryStatus;
284 /* DL Data Message from DU APP to RLC */
285 typedef struct dlDataMsgInfo
287 uint16_t cellId; /* Cell Id */
288 uint16_t ueIdx; /* UE index */
289 uint8_t rbId; /* Radio Bearer Id */
290 uint16_t msgLen; /* Message length */
291 Buffer *dlMsg; /* DL Data */
294 /* Function Pointers */
295 /* UE create Request from DU APP to RLC*/
296 typedef uint8_t (*DuRlcUeCreateReq) ARGS((
300 /* UE Cfg Response from RLC to DU APP*/
301 typedef uint8_t (*RlcDuUeCfgRsp) ARGS((
303 RlcUeCfgRsp *ueCfgRsp));
305 /* UE Delete Response from RLC to DU APP*/
306 typedef uint8_t (*RlcDuUeDeleteRsp) ARGS((
308 RlcUeDeleteRsp *ueDelRsp));
310 /* UL RRC Message from RLC to DU APP */
311 typedef uint8_t (*RlcUlRrcMsgToDuFunc) ARGS((
313 RlcUlRrcMsgInfo *ulRrcMsgInfo));
315 /* DL RRC Message from DU APP to RLC */
316 typedef uint8_t (*DuDlRrcMsgToRlcFunc) ARGS((
318 RlcDlRrcMsgInfo *dlRrcMsgInfo));
320 /* RRC delivery message from RLC to DU APP */
321 typedef uint8_t (*RlcRrcDeliveryReportToDuFunc) ARGS((
323 RrcDeliveryReport *rrcDeliveryReport));
325 /* UE Reconfig Request from DU APP to RLC */
326 typedef uint8_t (*DuRlcUeReconfigReq) ARGS((
330 /* UE Delete Request from DU APP to RLC */
331 typedef uint8_t (*DuRlcUeDeleteReq) ARGS((
333 RlcUeDelete *ueDelete));
335 /* DL RRC Message from RLC to DU APP */
336 typedef uint8_t (*RlcDlRrcMsgRspToDuFunc) ARGS((
338 RlcDlRrcMsgRsp *dlRrcMsgRsp));
340 /* UL User data from RLC to DU APP */
341 typedef uint8_t (*RlcUlUserDataToDuFunc) ARGS((
343 RlcUlUserDatInfo *ulUserData));
345 /* DL User Data from DU APP to RLC */
346 typedef uint8_t (*DuRlcDlUserDataToRlcFunc) ARGS((
348 RlcDlUserDataInfo *dlDataMsg));
350 /* Pack/Unpack function declarations */
351 uint8_t packDuRlcUeCreateReq(Pst *pst, RlcUeCfg *ueCfg);
352 uint8_t unpackRlcUeCreateReq(DuRlcUeCreateReq func, Pst *pst, Buffer *mBuf);
353 uint8_t packRlcDuUeCfgRsp(Pst *pst, RlcUeCfgRsp *ueCfgRsp);
354 uint8_t unpackRlcUeCfgRsp(RlcDuUeCfgRsp func, Pst *pst, Buffer *mBuf);
355 uint8_t packRlcUlRrcMsgToDu(Pst *pst, RlcUlRrcMsgInfo *ulRrcMsgInfo);
356 uint8_t unpackRlcUlRrcMsgToDu(RlcUlRrcMsgToDuFunc func, Pst *pst, Buffer *mBuf);
357 uint8_t packDlRrcMsgToRlc(Pst *pst, RlcDlRrcMsgInfo *dlRrcMsgInfo);
358 uint8_t unpackDlRrcMsgToRlc(DuDlRrcMsgToRlcFunc func, Pst *pst, Buffer *mBuf);
359 uint8_t packRrcDeliveryReportToDu(Pst *pst, RrcDeliveryReport *rrcDeliveryReport);
360 uint8_t unpackRrcDeliveryReportToDu(RlcRrcDeliveryReportToDuFunc func,Pst *pst, Buffer *mBuf);
361 uint8_t packDuRlcUeReconfigReq(Pst *pst, RlcUeCfg *ueCfg);
362 uint8_t unpackRlcUeReconfigReq(DuRlcUeReconfigReq func, Pst *pst, Buffer *mBuf);
363 uint8_t packRlcDlRrcMsgRspToDu(Pst *pst, RlcDlRrcMsgRsp *dlRrcMsgRsp);
364 uint8_t unpackRlcDlRrcMsgRspToDu(RlcDlRrcMsgRspToDuFunc func, Pst *pst, Buffer *mBuf);
365 uint8_t packRlcUlUserDataToDu(Pst *pst, RlcUlUserDatInfo *ulUserData);
366 uint8_t unpackRlcUlUserDataToDu(RlcUlUserDataToDuFunc func, Pst *pst, Buffer *mBuf);
367 uint8_t packRlcDlUserDataToRlc(Pst *pst, RlcDlUserDataInfo *dlDataMsg);
368 uint8_t unpackRlcDlUserDataToRlc(DuRlcDlUserDataToRlcFunc func, Pst *pst, Buffer *mBuf);
369 uint8_t packDuRlcUeDeleteReq(Pst *pst, RlcUeDelete *ueDelete);
370 uint8_t unpackRlcUeDeleteReq(DuRlcUeDeleteReq func, Pst *pst, Buffer *mBuf);
371 uint8_t packRlcDuUeDeleteRsp(Pst *pst, RlcUeDeleteRsp *ueDeleteRsp);
372 uint8_t unpackRlcUeDeleteRsp(RlcDuUeDeleteRsp func, Pst *pst, Buffer *mBuf);
374 /* Event Handler function declarations */
375 uint8_t RlcProcUeCreateReq(Pst *pst, RlcUeCfg *ueCfg);
376 uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp);
377 uint8_t DuProcRlcUlRrcMsgTrans(Pst *pst, RlcUlRrcMsgInfo *ulRrcMsgInfo);
378 uint8_t RlcProcDlRrcMsgTransfer(Pst *pst, RlcDlRrcMsgInfo *dlRrcMsgInfo);
379 uint8_t DuProcRlcRrcDeliveryReport(Pst *pst, RrcDeliveryReport *rrcDeliveryReport);
380 uint8_t RlcProcUeReconfigReq(Pst *pst, RlcUeCfg *ueCfg);
381 uint8_t DuProcRlcDlRrcMsgRsp(Pst *pst, RlcDlRrcMsgRsp *dlRrcMsg);
382 uint8_t DuProcRlcUlUserDataTrans(Pst *pst, RlcUlUserDatInfo *ulUserData);
383 uint8_t RlcProcDlUserDataTransfer(Pst *pst, RlcDlUserDataInfo *dlDataMsgInfo);
384 uint8_t RlcProcUeDeleteReq(Pst *pst, RlcUeDelete *ueDelete);
385 uint8_t DuProcRlcUeDeleteRsp(Pst *pst, RlcUeDeleteRsp *delRsp);
386 #endif /* RLC_INF_H */
388 /**********************************************************************
390 **********************************************************************/