UL data path changes at Phy stub, RLC UL UM and DU APP [Issue-ID: ODUHIGH-262]
[o-du/l2.git] / src / cm / du_app_rlc_inf.h
index 367c78f..0644420 100644 (file)
 #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
 {
@@ -459,6 +472,7 @@ typedef struct umUniDirDlBearerCfg
 /* Spec Ref: 38.331, 6.3.2 RLC-BearerConfig */
 typedef struct rlcBearerCfg
 {
+   ConfigType   configType;
    uint8_t      rbId;
    uint8_t      rbType;
    uint8_t      lcId;
@@ -466,10 +480,10 @@ typedef struct rlcBearerCfg
    RlcMode      rlcMode;
    union
    {
-      AmBearerCfg         amCfg;
-      UmBiDirBearerCfg    umBiDirCfg;
-      UmUniDirUlBearerCfg umUniDirUlCfg;
-      UmUniDirDlBearerCfg umUniDirDlCfg;
+      AmBearerCfg         *amCfg;
+      UmBiDirBearerCfg    *umBiDirCfg;
+      UmUniDirUlBearerCfg *umUniDirUlCfg;
+      UmUniDirDlBearerCfg *umUniDirDlCfg;
    }u;
 }RlcBearerCfg;
 
@@ -478,7 +492,8 @@ typedef struct rlcUeCfg
    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
@@ -489,24 +504,131 @@ typedef struct rlcUeCfgRsp
    FailureReason  reason;
 }RlcUeCfgRsp;
 
+/* UL RRC Message from RLC to DU APP */
+typedef struct ulRrcMsgInfo
+{
+   uint16_t   cellId;       /* Cell Id */
+   uint16_t   ueIdx;        /* UE Index */
+   uint8_t    lcId;         /* Logical channel Id */
+   uint16_t   msgLen;       /* RRC message length (in bytes) */
+   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));
 
-/* 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);
+/* UL RRC Message from RLC to DU APP */
+typedef uint8_t (*RlcUlRrcMsgToDuFunc) ARGS((
+   Pst           *pst,
+   RlcUlRrcMsgInfo *ulRrcMsgInfo));
+
+/* 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 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 */