#ifndef _MAC_H_
#define _MAC_H_
-#include <stdio.h>
-
-/* header include files (.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 "cm_tkns.h" /* Common Token Defines */
-#include "cm_llist.h" /* Common Link List Defines */
-#include "cm_hash.h" /* Common Hash List Defines */
-#include "cm_lte.h" /* Common LTE Defines */
-#include "cm_mblk.h" /* Common LTE Defines */
-#include "tfu.h" /* RGU Interface defines */
-#include "lrg.h"
-#include "du_app_mac_inf.h"
-#include "mac_sch_interface.h"
-
-/* header/extern include files (.x) */
-#include "gen.x" /* general */
-#include "ssi.x" /* system services */
-#include "cm_tkns.x" /* Common Token Definitions */
-#include "cm_llist.x" /* Common Link List Definitions */
-#include "cm_lib.x" /* Common Library Definitions */
-#include "cm_hash.x" /* Common Hash List Definitions */
-#include "cm_lte.x" /* Common LTE Defines */
-#include "cm_mblk.x" /* Common LTE Defines */
-#include "tfu.x" /* RGU Interface includes */
-#include "lrg.x"
-
+/* MAX values */
+#define MAX_MAC_CE 6
+#define MAX_CRI_SIZE 6
+#define MAX_MAC_DL_PDU 10
+#define MAX_NUM_HARQ_PROC 16
#define MAX_SLOT_SUPPORTED 10 /* numerology 0 15Khz */
#define MAX_ZERO_CORR_CFG_IDX 16 /* max zero correlation config index */
+
+#define DEFAULT_CELLS 1
#define SI_RNTI 0xFFFF
#define P_RNTI 0xFFFE
#define MAC_LCID_CCCH 0
-#define MAC_DEDLC_MIN_LCID 1
-#define MAC_DEDLC_MAX_LCID 32
+#define MAC_LCID_MIN 1
+#define MAC_LCID_MAX 32
#define MAC_LCID_RESERVED_MIN 33
#define MAC_LCID_RESERVED_MAX 51
#define MAC_LCID_CCCH_48BIT 52
#define MAC_LCID_LONG_TRUNC_BSR 60
#define MAC_LCID_SHORT_BSR 61
#define MAC_LCID_LONG_BSR 62
+#define MAC_LCID_CRI 62
#define MAC_LCID_PADDING 63
+typedef struct macCellCb MacCellCb;
+
+typedef enum
+{
+ UE_STATE_INACTIVE,
+ UE_STATE_ACTIVE
+}UeState;
+
+typedef enum
+{
+ MAC_LC_STATE_INACTIVE,
+ MAC_LC_STATE_ACTIVE
+}MacLcState;
+
typedef struct macDlSlot
{
- DlAlloc dlInfo;
+ DlSchedInfo dlInfo;
}MacDlSlot;
typedef struct macUlSlot
{
- UlSchInfo ulCellInfo;
+ UlSchedInfo ulInfo;
}MacUlSlot;
-typedef struct macCellCb
+typedef struct macCbInfo
+{
+ uint16_t cellId;
+ uint16_t crnti;
+ uint8_t msg3Pdu[6]; /* used as CRI value during muxing */
+ uint8_t *msg4Pdu; /* storing DL-CCCH Ind Pdu */
+ uint16_t msg4PduLen; /* storing DL-CCCH Ind Pdu Len */
+ uint8_t *msg4TxPdu; /* muxed Pdu used for re-transmission */
+ uint16_t msg4TbSize; /* size required for msg4TxPdu */
+}MacRaCbInfo;
+
+typedef struct macCe
{
- uint16_t cellId;
- RachIndInfo raCb;
- MacDlSlot dlSlot[MAX_SLOT_SUPPORTED];
- MacUlSlot ulSlot[MAX_SLOT_SUPPORTED];
-}MacCellCb;
+ uint16_t macCeLcid;
+ uint8_t macCeValue[6];
+}MacCe;
+
+typedef struct macCeInfo
+{
+ uint16_t numCes;
+ MacCe macCe[MAX_MAC_CE];
+}MacCeInfo;
+
+typedef struct macDlInfo
+{
+ uint16_t lcId;
+ uint16_t pduLen;
+ uint8_t *dlPdu;
+}MacDlInfo;
+
+typedef struct macDlData
+{
+ uint16_t numPdu;
+ MacDlInfo pduInfo[MAX_MAC_DL_PDU];
+}MacDlData;
+
+/* HARQ Process Info */
+typedef struct dlHarqProcCb
+{
+ uint8_t procId; /* HARQ Process Id */
+}DlHarqProcCb;
+
+/* DL HARQ entity */
+typedef struct dlHarqEnt
+{
+ uint8_t maxReTx; /* MAX HARQ retransmission */
+ uint8_t numHarqProcs; /* Number of HARQ procs */
+ DlHarqProcCb harqProcCb[MAX_NUM_HARQ_PROC];
+}DlHarqEnt;
+
+/* Uplink deidcated logical channel info */
+typedef struct ulLcCb
+{
+ uint8_t lcId; /* Logical Channel Id */
+ uint8_t lcGrpId; /* Logical Channel group */
+ MacLcState lcActive; /* Is LC active ? */
+}UlLcCb;
+
+/* Downlink dedicated logical channel info */
+typedef struct dlLcCb
+{
+ uint8_t lcId; /* Logical channel Id */
+ MacLcState lcState; /* Is LC active ? */
+}DlLcCb;
+
+/* BSR Information */
+typedef struct macBsrTmrCfg
+{
+ uint16_t periodicTimer;
+ uint16_t retxTimer;
+ uint16_t srDelayTimer;
+}MacBsrTmrCfg;
+
+/* UE specific UL info */
+typedef struct ueUlCb
+{
+ uint8_t maxReTx; /* MAX HARQ retransmission */
+ uint8_t numUlLc; /* Number of uplink logical channels */
+ UlLcCb lcCb[MAX_NUM_LC]; /* Uplink dedicated logocal channels */
+}UeUlCb;
+
+/* UE specific DL Info */
+typedef struct ueDlCb
+{
+ DlHarqEnt dlHarqEnt; /* DL HARQ entity */
+ uint8_t numDlLc; /* Number of downlink logical channels */
+ DlLcCb lcCb[MAX_NUM_LC]; /* Downlink dedicated logical channels */
+}UeDlCb;
+
+/* UE Cb */
+typedef struct macUeCb
+{
+ uint16_t ueIdx; /* UE Idx assigned by DU APP */
+ uint16_t crnti; /* UE CRNTI */
+ MacCellCb *cellCb; /* Pointer to cellCb to whihc this UE belongs */
+ UeState state; /* Is UE active ? */
+ MacRaCbInfo *raCb; /* RA info */
+ MacBsrTmrCfg bsrTmrCfg; /* BSR Timer Info */
+ UeUlCb ulInfo; /* UE specific UL info */
+ UeDlCb dlInfo; /* UE specific DL info */
+}MacUeCb;
+
+struct macCellCb
+{
+ uint16_t cellId;
+ uint8_t crntiMap;
+ MacRaCbInfo macRaCb[MAX_NUM_UE];
+ MacDlSlot dlSlot[MAX_SLOT_SUPPORTED];
+ MacUlSlot ulSlot[MAX_SLOT_SUPPORTED];
+ uint16_t numActvUe;
+ MacUeCfg *ueCfgTmpData[MAX_NUM_UE];
+ MacUeCb ueCb[MAX_NUM_UE];
+ MacCellCfg macCellCfg;
+ SlotIndInfo currTime;
+};
typedef struct macCb
{
Inst macInst;
- MacCellCb *macCell;
+ ProcId procId;
+ MacCellCb *macCell[MAX_NUM_CELL];
}MacCb;
/* global variable */
-EXTERN MacCb macCb;
-void fillMacToSchPst(Pst *pst);
-void fillRarPdu(RarInfo *rarInfo);
-int unpackRxData(SlotIndInfo timingInfo, RxDataIndPdu *rxDataIndPdu);
+MacCb macCb;
+/* Function declarations */
+void fillRarPdu(RarInfo *rarInfo);
+void createMacRaCb(RachIndInfo *rachIndInfo);
+void fillMsg4DlData(MacDlData *dlData, uint16_t msg4PduLen, uint8_t *msg4Pdu);
+void fillMacCe(MacCeInfo *macCeData, uint8_t *msg3Pdu);
+void macMuxPdu(MacDlData *dlData, MacCeInfo *macCeData, uint8_t *msg4TxPdu, uint16_t tbSize);
+uint8_t unpackRxData(uint16_t cellId, SlotIndInfo slotInfo, RxDataIndPdu *rxDataIndPdu);
+void fillMg4Pdu(DlMsgAlloc *msg4Alloc);
+void buildAndSendMuxPdu(SlotIndInfo currTimingInfo);
+uint8_t macProcUlCcchInd(uint16_t cellId, uint16_t crnti, uint16_t rrcContSize, uint8_t *rrcContainer);
+uint8_t macProcShortBsr(uint16_t cellId, uint16_t crnti, uint8_t lcgId, uint32_t bufferSize);
+uint8_t macProcUlData(uint16_t cellId, uint16_t rnti, SlotIndInfo slotInfo, \
+ uint8_t lcId, uint16_t pduLen, uint8_t *pdu);
+uint8_t sendSchedRptToRlc(DlSchedInfo dlInfo, SlotIndInfo slotInfo);
#endif
/**********************************************************************
End of file