X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrmac%2Fmac.h;h=54a5438901abe2e78782536456cc7db61ed71f74;hb=1616921700a3c7541f1df6dd2678f9ee4d8e933b;hp=800b49dc2ddefdc9b4db0b17abc799bba6c6dd56;hpb=29b5f01d779caab32dbc5b3686a5d917e4c818ec;p=o-du%2Fl2.git diff --git a/src/5gnrmac/mac.h b/src/5gnrmac/mac.h index 800b49dc2..54a543890 100644 --- a/src/5gnrmac/mac.h +++ b/src/5gnrmac/mac.h @@ -18,50 +18,21 @@ #ifndef _MAC_H_ #define _MAC_H_ -#include - -/* 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 "rgu.h" /* RGU interface includes*/ -#include "tfu.h" /* TFU 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 "rgu.x" -#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 MAX_MAC_CE 6 -#define MAX_UE 1 -#define MAX_CRI_SIZE 6 -#define MAX_MAC_DL_PDU 10 #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 @@ -78,6 +49,20 @@ #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 { DlSchedInfo dlInfo; @@ -124,33 +109,110 @@ typedef struct macDlData MacDlInfo pduInfo[MAX_MAC_DL_PDU]; }MacDlData; -typedef struct macCellCb +/* 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; - MacRaCbInfo macRaCb[MAX_UE]; + uint8_t crntiMap; + MacRaCbInfo macRaCb[MAX_NUM_UE]; MacDlSlot dlSlot[MAX_SLOT_SUPPORTED]; MacUlSlot ulSlot[MAX_SLOT_SUPPORTED]; -}MacCellCb; + 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 */ MacCb macCb; -void fillMacToSchPst(Pst *pst); + +/* Function declarations */ void fillRarPdu(RarInfo *rarInfo); -void createMacRaCb(uint16_t cellId, uint16_t crnti); -void fillMsg4DlData(MacDlData *dlData, uint8_t *msg4Pdu); +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); -int unpackRxData(RxDataIndPdu *rxDataIndPdu); -uint16_t macSendUlCcchInd(uint8_t *rrcContainer, uint16_t cellId, uint16_t crnti); -void fillMg4Pdu(Msg4Alloc *msg4Alloc); +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