/* This file contains message handling functionality for DU cell management */
#ifndef __DU_MGR_H__
#define __DU_MGR_H__
-
-#include "stdio.h"
-#include "ctype.h"
-#include "envopt.h" /* Environment options */
-#include "envdep.h" /* Environment dependent */
-#include "envind.h" /* Environment independent */
-#include "gen.h" /* General */
-#include "ssi.h" /* System services */
-#include "cm5.h" /* Common timer defines */
-#include "cm_tkns.h" /* Common tokens defines */
-#include "cm_mblk.h" /* Common memory allocation library defines */
-#include "cm_llist.h" /* Common link list defines */
-#include "cm_hash.h" /* Common hashlist defines */
-#include "cm_lte.h"
-#include "cm_inet.h"
-#include "lkw.h"
-#include "lrg.h"
-#include "legtp.h"
-
-/*#include "du_cfg_hdl.h"*/
-
-#include "gen.x" /* General */
-#include "ssi.x" /* System services */
-
-#include "cm5.x" /* Common timer library */
-#include "cm_tkns.x" /* Common tokens */
-#include "cm_mblk.x" /* Common memory allocation */
-#include "cm_llist.x" /* Common link list */
-#include "cm_hash.x" /* Common hashlist */
-#include "cm_lte.x"
-#include "cm_inet.x"
-#include "cm_lib.x"
-#include "lkw.x"
-#include "lrg.x"
-
#define DU_PROC 0
+
/* Memory related configs */
#define DU_APP_MEM_REGION 0
-#define RLC_UL_MEM_REGION 1
-#define RLC_DL_MEM_REGION 4
-#define RG_MEM_REGION 4
+#define RLC_UL_MEM_REGION 1
+#define RLC_DL_MEM_REGION 4
+#define MAC_MEM_REGION 4
#define DU_POOL 1
#define RLC_POOL 1
/* Events */
#define EVTCFG 0
#define EVTSCTPSTRT 1
-#define EVTSCTPDATA 2
-#define EVTSCTPNTFY 3
+#define EVENT_CU_DATA 2
+#define EVENT_SCTP_NTFY 3
#define EVTSRVOPENREQ 4
#define EVTSRVOPENCFM 5
#define EVTTNLMGMTREQ 6
#define EVTTNLMGMTCFM 7
-#define EVTTTIIND 8
+#define EVTSLOTIND 8
+#define EVTSTARTPOLL 9
+#define EVENT_RIC_DATA 10
-/* Selector */
-#define DU_SELECTOR_LC 0
-#define DU_SELECTOR_TC 1
-#define DU_SELECTOR_LWLC 2
/* SAP IDs */
#define DU_MAC_SUID 0
#define DU_ZERO_VAL 0
/* Macros */
-#define DEFAULT_CELLS 1
-#define NR_RANAC 150
-
#define ADD 0
#define DEL 1
SPutSBuf(DU_APP_MEM_REGION, DU_POOL, \
(Data *)_datPtr, _size);
+/* Allocate shared memory to be used for LWLC
+ * during inter-layer communication */
+#define DU_ALLOC_SHRABL_BUF(_buf, _size) \
+{ \
+ if(SGetStaticBuffer(DU_APP_MEM_REGION, DU_POOL, \
+ (Data **)&_buf, (Size) _size, 0) == ROK) \
+ { \
+ cmMemset((U8 *)(_buf), 0, _size); \
+ } \
+ else \
+ { \
+ (_buf) = NULLP; \
+ } \
+}
+
+/* Free shared memory, received through LWLC */
+#define DU_FREE_SHRABL_BUF(_region, _pool,_buf, _size) \
+{ \
+ if (_buf != NULLP) \
+ { \
+ (Void) SPutStaticBuffer(_region, _pool, \
+ (Data *) _buf, (Size) _size, 0); \
+ _buf = NULLP; \
+ } \
+}
+
+
typedef enum
{
- OOS,
+ CELL_OUT_OF_SERVICE,
ACTIVATION_IN_PROGRESS,
ACTIVATED,
DELETION_IN_PROGRESS
}CellStatus;
-#if 0
+typedef enum
+{
+ UE_INACTIVE,
+ UE_ACTIVE
+}UeState;
+
+typedef struct cellCfgParams
+{
+ NrEcgi nrEcgi; /* ECGI */
+ U16 nrPci; /* PCI */
+ U16 fiveGsTac; /* 5gSTac */
+ Plmn plmn[MAX_PLMN]; /* List of serving PLMN IDs */
+ U32 maxUe; /* max UE per slot */
+}CellCfgParams;
+
+typedef struct duUeCb
+{
+ uint32_t gnbDuUeF1apId; /* GNB DU UE F1AP ID */
+ uint32_t gnbCuUeF1apId; /* GNB CU UE F1AP ID */
+ UeState ueState;
+ MacUeCfg macUeCfg;
+}DuUeCb;
+
typedef struct duCellCb
{
- U32 cellId; /* Internal cell Id */
- CellCfgParams cellInfo; /* Cell info */
- CellStatus cellStatus; /*Cell status */
+ uint16_t cellId; /* Internal cell Id */
+ CellCfgParams cellInfo; /* Cell info */
+ Bool firstSlotIndRcvd;
+ CellStatus cellStatus; /* Cell status */
+ uint32_t numActvUes; /* Total Active UEs */
+ DuUeCb ueCb[DU_MAX_UE]; /* UE CONTEXT */
}DuCellCb;
-#endif
typedef struct duLSapCb
{
State sapState;
Mem mem;
CmTimer timer;
- U8 bndRetryCnt;
- U8 maxBndRetry;
- TmrCfg bndTmr;
+ U8 bndRetryCnt;
+ U8 maxBndRetry;
+ TmrCfg bndTmr;
}DuLSapCb;
+typedef struct ueCcchCtxt
+{
+ uint32_t gnbDuUeF1apId; /* GNB DU UE F1AP ID */
+ uint16_t crnti; /* CRNTI */
+ uint16_t cellId; /* Cell Id */
+}UeCcchCtxt;
+
+
/* DU APP DB */
typedef struct duCb
{
TskInit init; /* DU Init */
//DuLSapCb **macSap; /* MAC SAP */
Bool f1Status; /* Status of F1 connection */
- CmHashListCp cellLst; /* List of cells at DU APP of type DuCellCb */
- CmHashListCp actvCellLst; /* List of cells activated/to be activated of type DuCellCb */
+ Bool e2Status; /* Status of E2 connection */
+ DuCellCb* cfgCellLst[DU_MAX_CELLS]; /* List of cells at DU APP of type DuCellCb */
+ DuCellCb* actvCellLst[DU_MAX_CELLS]; /* List of cells activated/to be activated of type DuCellCb */
+ /* pointer to store the address of macCellCfg params used to send du-app to MAC */
+ MacCellCfg *duMacCellCfg; /* pointer to store params while sending DU-APP to MAC */
+ uint32_t numUe; /* current number of UEs */
+ UeCcchCtxt ueCcchCtxt[DU_MAX_UE]; /* mapping of gnbDuUeF1apId to CRNTI required for CCCH processing*/
}DuCb;
S16 duHdlEgtpSrvOpenComplete(CmStatus cfm);
S16 duSendEgtpTnlMgmtReq(U8 action, U32 lclTeid, U32 remTeid);
S16 duHdlEgtpTnlMgmtCfm(EgtpTnlEvt tnlEvtCfm);
-S16 duSendEgtpDatInd();
+S16 duSendEgtpTestData();
+S16 duSendEgtpDatInd(Buffer *mBuf);
S16 duHdlSchCfgComplete(Pst *pst, RgMngmt *cfm);
+uint16_t duBuildAndSendMacCellStartReq();
+uint16_t duBuildAndSendMacCellStopReq();
#endif