[Epic-ID: ODUHIGH-402][Task-ID: ODUHIGH-418] Harq feature changes
[o-du/l2.git] / src / 5gnrmac / mac.h
index b5dd425..6115c67 100644 (file)
 #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"
-
-#define MAX_SLOT_SUPPORTED    10 /* numerology 0 15Khz */
+/* MAX values */
+#define MAX_MAC_CE 6
+#define MAX_CRI_SIZE 6
+#define MAX_MAC_DL_PDU 16
+#define MAX_NUM_HARQ_PROC  16
 #define MAX_ZERO_CORR_CFG_IDX 16 /* max zero correlation config index */
+#define MAC_TQ_SIZE    10        /* Timing Queue Size */
+#define MAX_NUM_TIMER  1         /* MAX number of MAC timers */
+
+#define DEFAULT_CELLS 1
 #define SI_RNTI 0xFFFF
 #define P_RNTI 0xFFFE
 
-typedef struct macDlSlot
+#define MAC_LCID_CCCH              0
+#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_BIT_RATE_QUERY    53
+#define MAC_LCID_MULT_PHR_FOUR_OCT 54
+#define MAC_LCID_CFG_GRANT_CFM     55
+#define MAC_LCID_MULT_PHR_ONE_OCT  56
+#define MAC_LCID_SINGLE_PHR        57
+#define MAC_LCID_CRNTI             58
+#define MAC_LCID_SHORT_TRUNC_BSR   59
+#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
+
+/* Definitions for size of RAR PDU contents (in bits).
+ * Refer spec 38.321, sections 6.1.4, 6.2.2 and 6.2.3*/
+#define E_BIT_SIZE 1
+#define T_BIT_SIZE 1
+#define R_BIT_SIZE 1
+#define RAPID_SIZE 6
+#define LC_ID_SIZE 6
+#define TIMING_ADVANCE_SIZE 12
+#define T_CRNTI_SIZE 16
+/*  UL Grant is of size = 27 bits. Refer to Spec 38.213, Table 8.2-1 for
+ *  contents of UL grant in RAR */
+#define FREQ_HOP_FLAG_SIZE 1
+#define FREQ_RSRC_ALLOC_SIZE 14
+#define TIME_RSRC_ALLOC_SIZE 4
+#define MCS_SIZE 4
+#define TPC_COMMAND_SIZE 3
+#define CSI_REQUEST_SIZE 1
+
+typedef struct macCellCb MacCellCb;
+
+typedef enum
+{
+   CELL_STATE_UP,
+   CELL_TO_BE_STOPPED,
+   CELL_STOP_IN_PROGRESS,
+}CellState;       
+
+typedef enum
+{
+   UE_STATE_INACTIVE,
+   UE_STATE_ACTIVE,
+   UE_HANDIN_IN_PROGRESS
+}UeState;
+
+typedef enum
+{
+   MAC_LC_STATE_INACTIVE,
+   MAC_LC_STATE_ACTIVE
+}MacLcState;
+
+typedef struct dlTbInfo
+{
+   SlotTimingInfo  txTime;  
+   uint16_t        tbSize;
+   uint8_t         *tb;
+}DlTbInfo;
+
+/* DL HARQ Process Info */
+typedef struct dlHarqProcCb
 {
-   DlAlloc dlInfo;
+   uint8_t     procId;                 /* HARQ Process Id */
+   uint8_t     numTb;                  /* Number of TB */
+   DlTbInfo    tbInfo[MAX_NUM_TB_PER_UE];  /* TB information */
+}DlHarqProcCb;
 
+typedef struct macDlSlot
+{
+   DlSchedInfo dlInfo;
+   DlPageAlloc *pageAllocInfo;
 }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 */
+   DlHarqProcCb msg4HqInfo; /* HARQ process info for msg 4 */
+}MacRaCbInfo;
+
+typedef struct macCe
+{
+   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
+{
+   uint8_t  ueId;
+   uint16_t numPdu;
+   MacDlInfo  pduInfo[MAX_MAC_DL_PDU];
+}MacDlData;
+
+/* 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 ? */
+   /*Commenting as S-NSSAI and PDU session will be used in future scope*/
+   /*For eg: When we have to send these for AMBR cases*/
+   #if 0
+   uint16_t   pduSessionId; /*Pdu Session Id*/
+   Snssai     *snssai;      /*S-NSSAI assoc with LCID*/
+   #endif
+}UlLcCb;
+
+/* Downlink dedicated logical channel info */
+typedef struct dlLcCb
+{
+   uint8_t    lcId;        /* Logical channel Id */ 
+   MacLcState lcState;     /* Is LC active ? */
+   /*Commenting as S-NSSAI and PDU session will be used in future scope*/
+   /*For eg: When we have to send these info via FAPI to phy layer*/
+   #if 0
+   uint16_t   pduSessionId;/*Pdu Session Id*/
+   Snssai     *snssai;    /*S-NSSAI assoc with LCID*/
+   #endif
+}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         ueId;           /* UE Id from DU APP */
+   uint16_t         crnti;          /* UE CRNTI */
+   MacCellCb        *cellCb;        /* Pointer to cellCb to whihc this UE belongs */
+   UeState          state;          /* Is UE active ? */
+   MacCfraResource  cfraResource;   /* CF-RA resource */
+   MacRaCbInfo      *raCb;          /* RA info */
+   MacBsrTmrCfg     bsrTmrCfg;      /* BSR Timer Info */
+   UeUlCb           ulInfo;         /* UE specific UL info */
+   UeDlCb           dlInfo;         /* UE specific DL info */
+   DataTransmissionAction transmissionAction;
+}MacUeCb;
+
+struct macCellCb
 {
-   uint16_t   cellId;
-   RachIndInfo raCb;
-   MacDlSlot  dlSlot[MAX_SLOT_SUPPORTED];
-   MacUlSlot  ulSlot[MAX_SLOT_SUPPORTED];
-}MacCellCb;
+   uint16_t    cellId;
+   CellState   state;
+   uint16_t    crntiMap;
+   MacRaCbInfo macRaCb[MAX_NUM_UE];
+   MacDlSlot   dlSlot[MAX_SLOTS];
+   MacUlSlot   ulSlot[MAX_SLOTS];
+   uint16_t    numActvUe;
+   MacUeCfg    *ueCfgTmpData[MAX_NUM_UE];
+   MacUeCb     ueCb[MAX_NUM_UE];
+   MacCellCfg  macCellCfg;
+   SlotTimingInfo currTime;
+};
 
 typedef struct macCb
 {
-   Inst       macInst;
-   MacCellCb  *macCell;
+   Inst        macInst;
+   ProcId      procId;
+   uint8_t     tmrRes;                    /*!< Timer resolution */
+   CmTqCp      tmrTqCp;                   /*!< Timer Task Queue Cntrl Point */
+   CmTqType    tmrTq[MAC_TQ_SIZE];        /*!< Timer Task Queue */
+   CmTimer     tmrBlk[MAX_NUM_TIMER];     /*!< Timer Block */
+   MacCellCb   *macCell[MAX_NUM_CELL];
 }MacCb;
 
 /* global variable */
-EXTERN MacCb macCb;
-void fillMacToSchPst(Pst *pst);
+MacCb macCb;
 
+/* Function declarations */
+short int macActvTmr(Ent ent,Inst inst);
+void fillRarPdu(RarInfo *rarInfo);
+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, SlotTimingInfo slotInfo, RxDataIndPdu *rxDataIndPdu);
+void fillMg4Pdu(DlMsgAlloc *msg4Alloc);
+void buildAndSendMuxPdu(SlotTimingInfo 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, SlotTimingInfo slotInfo, \
+   uint8_t lcId, uint16_t pduLen, uint8_t *pdu);
+uint8_t sendSchedRptToRlc(DlSchedInfo dlInfo, SlotTimingInfo slotInfo, uint8_t ueIdx, uint8_t schInfoIdx);
+uint8_t macProcLongBsr(uint16_t cellId, uint16_t crnti,uint8_t numLcg,\
+                         DataVolInfo dataVolInfo[MAX_NUM_LOGICAL_CHANNEL_GROUPS]);
+void freeMacSliceCfgReq(MacSliceCfgReq *cfgReq,Pst *pst);
 #endif
 /**********************************************************************
   End of file