#ifndef __RLC_INF_H__
#define __RLC_INF_H__
-/* Macro for Ue Context */
-#define MAX_NUM_LOGICAL_CHANNELS 11
-#define EVENT_RLC_UL_UE_CREATE_REQ 210
-#define EVENT_RLC_UL_UE_CREATE_RSP 211 /*!< Config Confirm */
+/* Events */
+#define EVENT_RLC_UE_CREATE_REQ 210
+#define EVENT_RLC_UE_CREATE_RSP 211 /*!< Config Confirm */
#define EVENT_UL_RRC_MSG_TRANS_TO_DU 212
+#define EVENT_DL_RRC_MSG_TRANS_TO_RLC 213
+#define EVENT_RRC_DELIVERY_MSG_TRANS_TO_DU 214
+#define EVENT_RLC_UE_RECONFIG_REQ 215
+#define EVENT_RLC_UE_RECONFIG_RSP 216
+#define EVENT_DL_RRC_MSG_RSP_TO_DU 217
+#define EVENT_DL_USER_DATA_TRANS_TO_DU 218
+#define EVENT_UL_USER_DATA_TRANS_TO_DU 219
#define RB_ID_SRB 0
#define RB_ID_DRB 1
#define LCH_DTCH 4 /*!< DTCH Logical Channel */
#define LCH_DCCH 5 /*!< DCCH Logical Channel */
+typedef enum
+{
+ TRANSMISSION_IN_PROGRESS,
+ TRANSMISSION_COMPLETE,
+ TRANSMISSION_FAILED
+}DlMsgState;
typedef enum
{
/* Spec Ref: 38.331, 6.3.2 RLC-BearerConfig */
typedef struct rlcBearerCfg
{
+ ConfigType configType;
uint8_t rbId;
uint8_t rbType;
uint8_t lcId;
RlcMode rlcMode;
union
{
- AmBearerCfg amCfg;
- UmBiDirBearerCfg umBiDirCfg;
- UmUniDirUlBearerCfg umUniDirUlCfg;
- UmUniDirDlBearerCfg umUniDirDlCfg;
+ AmBearerCfg *amCfg;
+ UmBiDirBearerCfg *umBiDirCfg;
+ UmUniDirUlBearerCfg *umUniDirUlCfg;
+ UmUniDirDlBearerCfg *umUniDirDlCfg;
}u;
}RlcBearerCfg;
uint16_t cellId;
uint8_t ueIdx;
uint8_t numLcs;
- RlcBearerCfg rlcBearerCfg[MAX_NUM_LOGICAL_CHANNELS];
+ RlcBearerCfg rlcLcCfg[MAX_NUM_LC];
+ UeCfgState rlcUeCfgState; /* InActive / Completed */
}RlcUeCfg;
typedef struct rlcUeCfgRsp
uint8_t *rrcMsg; /* RRC Message (UL-DCCH Message) */
}RlcUlRrcMsgInfo;
+/* UL User Data from RLC to DU APP */
+typedef struct ulUserDatInfo
+{
+ uint16_t cellId; /* Cell Id */
+ uint16_t ueIdx; /* UE Index */
+ uint8_t rbId;
+ uint16_t msgLen; /* User data length (in bytes) */
+ uint8_t *userData; /* User data (UL-DTCH Message) */
+}RlcUlUserDatInfo;
+
+/* DL RRC Message from DU APP to RLC */
+typedef struct dlRrcMsgInfo
+{
+ uint16_t cellId; /* Cell Id */
+ uint16_t ueIdx; /* UE index */
+ uint8_t rbType; /* Radio Bearer Type */
+ uint8_t rbId; /* Radio Bearer Id */
+ uint8_t lcType; /* Logical channel type */
+ uint8_t lcId; /* Logical channel Id */
+ bool execDup; /* Execution duplication enabled */
+ bool deliveryStaRpt; /* Reporting of delivery status by RLC to DU-APP enabled */
+ uint16_t msgLen; /* RRC Message length */
+ uint8_t *rrcMsg; /* RRC Message (DL-DCCH Message) */
+}RlcDlRrcMsgInfo;
+
+/* DL RRC Message Rsp From RLC to DU APP */
+typedef struct dlRrcMsgRsp
+{
+ uint16_t cellId; /* Cell Id */
+ uint16_t crnti; /* UE index */
+ DlMsgState state; /* Dl RRC Msg State */
+}RlcDlRrcMsgRsp;
+
+/* RRC delivery message from RLC to DU APP */
+typedef struct rrcDeliveryStatus
+{
+ uint16_t deliveryStatus;
+ uint16_t triggeringMessage;
+}RrcDeliveryStatus;
+
+typedef struct rrcDeliveryReportInfo
+{
+ uint16_t cellId;
+ uint16_t ueIdx;
+ uint8_t srbId;
+ RrcDeliveryStatus rrcDeliveryStatus;
+}RrcDeliveryReport;
+
/* Function Pointers */
/* UE create Request from DU APP to RLC*/
-typedef uint8_t (*DuRlcUlUeCreateReq) ARGS((
+typedef uint8_t (*DuRlcUeCreateReq) ARGS((
Pst *pst,
RlcUeCfg *ueCfg ));
-/* UE create Response from RLC to DU APP*/
-typedef uint8_t (*RlcUlDuUeCreateRsp) ARGS((
+/* UE Cfg Response from RLC to DU APP*/
+typedef uint8_t (*RlcDuUeCfgRsp) ARGS((
Pst *pst,
RlcUeCfgRsp *ueCfgRsp));
Pst *pst,
RlcUlRrcMsgInfo *ulRrcMsgInfo));
-/* Function Declarations */
-uint8_t packDuRlcUlUeCreateReq(Pst *pst, RlcUeCfg *ueCfg);
-uint8_t unpackRlcUlUeCreateReq(DuRlcUlUeCreateReq func, Pst *pst, Buffer *mBuf);
-uint8_t RlcUlProcUeCreateReq(Pst *pst, RlcUeCfg *ueCfg);
-uint8_t packRlcUlDuUeCreateRsp(Pst *pst, RlcUeCfgRsp *ueCfgRsp);
-uint8_t unpackRlcUlUeCreateRsp(RlcUlDuUeCreateRsp func, Pst *pst, Buffer *mBuf);
-uint8_t DuProcRlcUlUeCreateRsp(Pst *pst, RlcUeCfgRsp *cfgRsp);
+/* DL RRC Message from DU APP to RLC */
+typedef uint8_t (*DuDlRrcMsgToRlcFunc) ARGS((
+ Pst *pst,
+ RlcDlRrcMsgInfo *dlRrcMsgInfo));
+
+/* RRC delivery message from RLC to DU APP */
+typedef uint8_t (*RlcRrcDeliveryReportToDuFunc) ARGS((
+ Pst *pst,
+ RrcDeliveryReport *rrcDeliveryReport));
+
+typedef uint8_t (*DuRlcUeReconfigReq) ARGS((
+ Pst *pst,
+ RlcUeCfg *ueCfg ));
+
+/* DL RRC Message from RLC to DU APP */
+typedef uint8_t (*RlcDlRrcMsgRspToDuFunc) ARGS((
+ Pst *pst,
+ RlcDlRrcMsgRsp *dlRrcMsgRsp));
+
+/* UL User data from RLC to DU APP */
+typedef uint8_t (*RlcUlUserDataToDuFunc) ARGS((
+ Pst *pst,
+ RlcUlUserDatInfo *ulUserData));
+
+/* Pack/Unpack function declarations */
+uint8_t packDuRlcUeCreateReq(Pst *pst, RlcUeCfg *ueCfg);
+uint8_t unpackRlcUeCreateReq(DuRlcUeCreateReq func, Pst *pst, Buffer *mBuf);
+uint8_t packRlcDuUeCfgRsp(Pst *pst, RlcUeCfgRsp *ueCfgRsp);
+uint8_t unpackRlcUeCfgRsp(RlcDuUeCfgRsp func, Pst *pst, Buffer *mBuf);
uint8_t packRlcUlRrcMsgToDu(Pst *pst, RlcUlRrcMsgInfo *ulRrcMsgInfo);
-uint8_t DuProcRlcUlRrcMsgTrans(Pst *pst, RlcUlRrcMsgInfo *ulRrcMsgInfo);
uint8_t unpackRlcUlRrcMsgToDu(RlcUlRrcMsgToDuFunc func, Pst *pst, Buffer *mBuf);
+uint8_t packDlRrcMsgToRlc(Pst *pst, RlcDlRrcMsgInfo *dlRrcMsgInfo);
+uint8_t unpackDlRrcMsgToRlc(DuDlRrcMsgToRlcFunc func, Pst *pst, Buffer *mBuf);
+uint8_t packRrcDeliveryReportToDu(Pst *pst, RrcDeliveryReport *rrcDeliveryReport);
+uint8_t unpackRrcDeliveryReportToDu(RlcRrcDeliveryReportToDuFunc func,Pst *pst, Buffer *mBuf);
+uint8_t packDuRlcUeReconfigReq(Pst *pst, RlcUeCfg *ueCfg);
+uint8_t unpackRlcUeReconfigReq(DuRlcUeReconfigReq func, Pst *pst, Buffer *mBuf);
+uint8_t packRlcDlRrcMsgRspToDu(Pst *pst, RlcDlRrcMsgRsp *dlRrcMsgRsp);
+uint8_t unpackRlcDlRrcMsgRspToDu(RlcDlRrcMsgRspToDuFunc func, Pst *pst, Buffer *mBuf);
+uint8_t packRlcUlUserDataToDu(Pst *pst, RlcUlUserDatInfo *ulUserData);
+uint8_t unpackRlcUlUserDataToDu(RlcUlUserDataToDuFunc func, Pst *pst, Buffer *mBuf);
+
+/* Event Handler function declarations */
+uint8_t RlcProcUeCreateReq(Pst *pst, RlcUeCfg *ueCfg);
+uint8_t DuProcRlcUeCfgRsp(Pst *pst, RlcUeCfgRsp *cfgRsp);
+uint8_t DuProcRlcUlRrcMsgTrans(Pst *pst, RlcUlRrcMsgInfo *ulRrcMsgInfo);
+uint8_t RlcProcDlRrcMsgTransfer(Pst *pst, RlcDlRrcMsgInfo *dlRrcMsgInfo);
+uint8_t DuProcRlcRrcDeliveryReport(Pst *pst, RrcDeliveryReport *rrcDeliveryReport);
+uint8_t RlcProcUeReconfigReq(Pst *pst, RlcUeCfg *ueCfg);
+uint8_t DuProcRlcDlRrcMsgRsp(Pst *pst, RlcDlRrcMsgRsp *dlRrcMsg);
+uint8_t DuProcRlcUlUserDataTrans(Pst *pst, RlcUlUserDatInfo *ulUserData);
#endif /* RLC_INF_H */