<JIRA ID: ODUHIGH-389: DL Thproughput Per SNSSAI>
[o-du/l2.git] / src / cm / mac_sch_interface.h
index 85da85c..4111dcc 100644 (file)
 
 
 /*macros*/
-#define NO_SSB 0
-#define SSB_TRANSMISSION 1
-#define SSB_REPEAT 2
 #define MAX_SSB_IDX 1 /* forcing it as 1 for now. Right value is 64 */
 #define SCH_SSB_MASK_SIZE   1
 
-#define NO_SIB1 0
-#define SIB1_TRANSMISSION 1
-#define SIB1_REPITITION 2
-
 #define MAX_NUM_PRG     1 /* max value should be later 275 */
 #define MAX_DIG_BF_INTERFACES 0 /* max value should be later 255 */
 #define MAX_CODEWORDS  1  /* max should be 2 */
 #define MAX_NUM_PUCCH_P0_PER_SET 8
 #define MAX_NUM_PATH_LOSS_REF_RS 4
 #define MAX_NUM_DL_DATA_TO_UL_ACK 15
-#define SD_SIZE   3
+#define QPSK_MODULATION 2
 
 #define RAR_PAYLOAD_SIZE 10             /* As per spec 38.321, sections 6.1.5 and 6.2.3, RAR PDU is 8 bytes long and 2 bytes of padding */
 #define TX_PAYLOAD_HDR_LEN 32           /* Intel L1 requires adding a 32 byte header to transmitted payload */
 
+#define MAX_NUM_CONFIG_SLOTS 160  /*Max number of slots as per the numerology*/
+#define MAX_NUM_K0_IDX 16 /* Max number of pdsch time domain downlink allocation */
+#define MAX_NUM_K1_IDX 8  /* As per spec 38.213 section 9.2.3 Max number of PDSCH-to-HARQ resource indication */
+#define MIN_NUM_K1_IDX 4  /* Min K1 values */
+#define MAX_NUM_K2_IDX 16 /* PUSCH time domain UL resource allocation list */
+#define DEFAULT_K0_VALUE 0 /* As per 38.331, PDSCH-TimeDomainResourceAllocation field descriptions */
+/* As per 38.331, PUSCH-TimeDomainResourceAllocationList field descriptions */
+#define DEFAULT_K2_VALUE_FOR_SCS15  1 
+#define DEFAULT_K2_VALUE_FOR_SCS30  1 
+#define DEFAULT_K2_VALUE_FOR_SCS60  2
+#define DEFAULT_K2_VALUE_FOR_SCS120 3 
 
 #define ADD_DELTA_TO_TIME(crntTime, toFill, incr)          \
 {                                                          \
    }                                                       \
 }
 
+typedef enum
+{
+   PRB_RSRC,
+   DRB_RSRC,
+   RRC_CONNECTED_USERS_RSRC
+}SchResourceType;
+
+typedef enum
+{
+   NO_TRANSMISSION,
+   NEW_TRANSMISSION,
+   REPEATITION 
+}PduTxOccsaion;
+
 typedef enum
 {
    UNSPECIFIED_CAUSE,
@@ -390,6 +408,14 @@ typedef enum
    SCH_MCS_TABLE_QAM_64_LOW_SE
 }SchMcsTable;
 
+typedef enum
+{
+   NONE,
+   PDCCH_PDU,
+   PDSCH_PDU,
+   BOTH
+}DlPduType;
+
 /*structures*/
 typedef struct timeDomainAlloc
 {
@@ -596,8 +622,9 @@ typedef struct schCandidatesInfo
 
 typedef struct schSearchSpaceCfg
 {
-   uint8_t searchSpaceId;
-   uint8_t coresetId;
+   uint8_t  searchSpaceId;
+   uint8_t  coresetId;
+   uint8_t  freqDomainRsrc[FREQ_DOM_RSRC_SIZE];  /* Frequency domain resource */
    uint16_t monitoringSlot;
    uint16_t duration;
    uint16_t monitoringSymbol;
@@ -645,20 +672,74 @@ typedef struct schPuschCfgCmn
    SchPuschTimeDomRsrcAlloc   timeDomRsrcAllocList[MAX_NUM_UL_ALLOC]; /* PUSCH time domain UL resource allocation list */
 }SchPuschCfgCmn;
 
+typedef struct schK1TimingInfo
+{
+   uint8_t numK1;
+   uint8_t k1Indexes[MAX_NUM_K1_IDX];
+}SchK1TimingInfo;
+
+typedef struct schK0TimingInfo
+{
+   uint8_t k0Index;
+   SchK1TimingInfo k1TimingInfo;
+}SchK0TimingInfo;
+
+typedef struct schK0K1TimingInfo
+{
+   uint8_t numK0;
+   SchK0TimingInfo k0Indexes[MAX_NUM_K0_IDX];
+}SchK0K1TimingInfo;
+
+typedef struct schK0K1TimingInfoTbl
+{
+   uint16_t tblSize;
+   SchK0K1TimingInfo k0k1TimingInfo[MAX_NUM_CONFIG_SLOTS];
+}SchK0K1TimingInfoTbl;
+
 typedef struct schBwpDlCfg
 {
    SchBwpParams   bwp;
    SchPdcchCfgCmn pdcchCommon;
    SchPdschCfgCmn pdschCommon;
+   SchK0K1TimingInfoTbl k0K1InfoTbl;
 }SchBwpDlCfg;
 
+typedef struct schK2TimingInfo
+{
+   uint8_t numK2; 
+   uint8_t k2Indexes[MAX_NUM_K2_IDX]; 
+}SchK2TimingInfo;
+
+typedef struct schK2TimingInfoTbl
+{
+   uint16_t tblSize; 
+   SchK2TimingInfo k2TimingInfo[MAX_NUM_CONFIG_SLOTS]; 
+}SchK2TimingInfoTbl;
+
 typedef struct schBwpUlCfg
 {
    SchBwpParams   bwp;
    SchPucchCfgCmn pucchCommon;
    SchPuschCfgCmn puschCommon;
+   SchK2TimingInfoTbl msg3K2InfoTbl;
+   SchK2TimingInfoTbl k2InfoTbl;
 }SchBwpUlCfg;
 
+typedef struct schPolicyMemberList
+{
+   Plmn   plmn;
+   Snssai snssai;
+}SchPolicyMemberList;
+
+typedef struct schRrmPolicy
+{
+   SchResourceType     rsrcType;
+   SchPolicyMemberList memberList;
+   uint8_t             policyMaxRatio;
+   uint8_t             policyMinRatio;
+   uint8_t             policyDedicatedRatio;
+}SchRrmPolicy;
+
 typedef struct schCellCfg
 {
    uint16_t       cellId;           /* Cell Id */
@@ -673,9 +754,12 @@ typedef struct schCellCfg
    SchRachCfg     schRachCfg;       /* PRACH config */
    SchBwpDlCfg    schInitialDlBwp;  /* Initial DL BWP */
    SchBwpUlCfg    schInitialUlBwp;  /* Initial UL BWP */
+   uint8_t        numSliceSupport;  /* Total num of slice support */
+   Snssai         **snssai;         /* List of supporting snssai*/
+   SchRrmPolicy   *rrmPolicy;       /* RRM policy */
 #ifdef NR_TDD
    TDDCfg         tddCfg;           /* TDD Cfg */ 
-#endif
+#endif   
 }SchCellCfg;
 
 typedef struct schCellCfgCfm
@@ -724,12 +808,23 @@ typedef struct dlBrdcstAlloc
    Sib1AllocInfo sib1Alloc;
 }DlBrdcstAlloc;
 
+typedef struct msg3UlGrant
+{
+   uint8_t         freqHopFlag;
+   uint16_t        bwpSize;
+   FreqDomainAlloc msg3FreqAlloc;
+   uint8_t         k2Index;
+   uint8_t         mcs;
+   uint8_t         tpc;
+   uint8_t         csiReq;
+}Msg3UlGrant;
+
 typedef struct rarInfo
 {
    uint16_t        raRnti;
    uint8_t         RAPID;
    uint16_t        ta;
-   FreqDomainAlloc msg3FreqAlloc;
+   Msg3UlGrant     ulGrant;
    uint16_t        tcrnti;
    uint8_t         rarPdu[RAR_PAYLOAD_SIZE];
    uint8_t         rarPduLen;
@@ -737,6 +832,8 @@ typedef struct rarInfo
 
 typedef struct rarAlloc
 {
+   DlPduType  pduPres;
+   uint8_t    pdschSlot;
    RarInfo rarInfo;
    BwpCfg  bwp;
    PdcchCfg rarPdcchCfg;
@@ -772,16 +869,18 @@ typedef struct dlMsgAlloc
    BwpCfg     bwp;
    PdcchCfg   dlMsgPdcchCfg;
    PdschCfg   dlMsgPdschCfg;
+   DlPduType  pduPres;
+   uint8_t    pdschSlot;
    DlMsgInfo  dlMsgInfo;
 }DlMsgAlloc;
 
 typedef struct schSlotValue
 {
-   SlotIndInfo currentTime;
-   SlotIndInfo broadcastTime;
-   SlotIndInfo rarTime;
-   SlotIndInfo dlMsgTime;
-   SlotIndInfo ulDciTime;
+   SlotTimingInfo currentTime;
+   SlotTimingInfo broadcastTime;
+   SlotTimingInfo rarTime;
+   SlotTimingInfo dlMsgTime;
+   SlotTimingInfo ulDciTime;
 }SchSlotValue;
 
 typedef struct format0_0
@@ -822,7 +921,7 @@ typedef struct dciInfo
 {
    uint16_t      cellId;   
    uint16_t      crnti;          /* CRNI */
-   SlotIndInfo   slotIndInfo;    /* Slot Info: sfn, slot number */
+   SlotTimingInfo   slotIndInfo;    /* Slot Info: sfn, slot number */
    BwpCfg        bwpCfg;         /* BWP Cfg */
    CoresetCfg    coresetCfg;     /* Coreset1 Cfg */
    FormatType    formatType;     /* DCI Format */
@@ -847,17 +946,13 @@ typedef struct dlSchedInfo
    DlBrdcstAlloc brdcstAlloc;
 
    /* Allocation for RAR message */
-   //uint8_t isRarPres;
-   RarAlloc *rarAlloc;
-
-   /* Allocation from MSG4 */
-   //Msg4Alloc *msg4Alloc;
+   RarAlloc *rarAlloc[MAX_NUM_UE];
 
    /* UL grant in response to BSR */
    DciInfo    *ulGrant;
 
    /* Allocation from dedicated DL msg */
-   DlMsgAlloc *dlMsgAlloc;
+   DlMsgAlloc *dlMsgAlloc[MAX_NUM_UE];
 
 }DlSchedInfo;
 
@@ -918,7 +1013,7 @@ typedef struct ulSchedInfo
 {
    uint16_t      cellId;         /* Cell Id */
    uint16_t      crnti;          /* CRNI */
-   SlotIndInfo   slotIndInfo;    /* Slot Info: sfn, slot number */
+   SlotTimingInfo   slotIndInfo;    /* Slot Info: sfn, slot number */
    uint8_t       dataType;       /* Type of info being scheduled */
    PrachSchInfo  prachSchInfo;   /* Prach scheduling info */
    SchPuschInfo  schPuschInfo;   /* Pusch scheduling info */
@@ -929,7 +1024,7 @@ typedef struct rachIndInfo
 {
    uint16_t    cellId;
    uint16_t    crnti;
-   SlotIndInfo timingInfo;
+   SlotTimingInfo timingInfo;
    uint8_t     slotIdx;
    uint8_t     symbolIdx;
    uint8_t     freqIdx;
@@ -942,7 +1037,7 @@ typedef struct crcIndInfo
 {
    uint16_t    cellId;
    uint16_t    crnti;
-   SlotIndInfo timingInfo;
+   SlotTimingInfo timingInfo;
    uint16_t    numCrcInd;
    uint8_t     crcInd[MAX_NUMBER_OF_CRC_IND_BITS];
 }CrcIndInfo;
@@ -1110,6 +1205,7 @@ typedef struct schInitalDlBwp
    SchPdcchConfig   pdcchCfg;
    bool             pdschCfgPres;
    SchPdschConfig   pdschCfg;
+   SchK0K1TimingInfoTbl k0K1InfoTbl;
 }SchInitalDlBwp;
 
 /* BWP Downlink common */
@@ -1321,6 +1417,7 @@ typedef struct schInitialUlBwp
    SchPucchCfg   pucchCfg;
    bool          puschCfgPres;
    SchPuschCfg   puschCfg;
+   SchK2TimingInfoTbl k2InfoTbl;
 }SchInitialUlBwp;
 
 /* Uplink BWP information */
@@ -1395,12 +1492,6 @@ typedef struct schDrbQos
    uint32_t                ulPduSessAggMaxBitRate;   /* UL PDU Session Aggregate max bit rate */
 }SchDrbQosInfo;
 
-typedef struct schSnssai
-{
-   uint8_t   sst;
-   uint8_t   sd[SD_SIZE];
-}SchSnssai;
-
 /* Special cell configuration */
 typedef struct schSpCellCfg
 {
@@ -1430,7 +1521,7 @@ typedef struct schLcCfg
    ConfigType     configType;
    uint8_t        lcId;
    SchDrbQosInfo  *drbQos;
-   SchSnssai      *snssai;
+   Snssai         *snssai;
    SchDlLcCfg     dlLcCfg;
    SchUlLcCfg     ulLcCfg;
 }SchLcCfg;
@@ -1520,7 +1611,7 @@ typedef struct srUciIndInfo
 {
    uint16_t    cellId;
    uint16_t    crnti;
-   SlotIndInfo slotInd;
+   SlotTimingInfo slotInd;
    uint8_t     numSrBits;
    uint8_t     srPayload[MAX_SR_BITS_IN_BYTES];
 }SrUciIndInfo;
@@ -1569,7 +1660,7 @@ typedef uint8_t (*SchUeCfgRspFunc) ARGS((
 
 typedef uint8_t (*MacSchSlotIndFunc) ARGS((
          Pst         *pst,          /* Post structure */
-        SlotIndInfo *slotInd));    /* Slot Info */
+        SlotTimingInfo *slotInd));    /* Slot Info */
 
 typedef uint8_t (*MacSchBsrFunc)       ARGS((
    Pst                  *pst,
@@ -1605,7 +1696,7 @@ typedef uint8_t (*SchCellDeleteRspFunc) ARGS((
    SchCellDeleteRsp *schCellDeleteRsp));       /* Scheduler UE delete response */
 
 /* function declarations */
-uint8_t packMacSchSlotInd(Pst *pst, SlotIndInfo *slotInd);
+uint8_t packMacSchSlotInd(Pst *pst, SlotTimingInfo *slotInd);
 uint8_t packSchMacDlAlloc(Pst *pst, DlSchedInfo  *dlSchedInfo);
 uint8_t packSchMacUlSchInfo(Pst *pst, UlSchedInfo *ulSchedInfo);
 uint8_t packSchCellCfg(Pst *pst, SchCellCfg  *schCellCfg);
@@ -1626,8 +1717,8 @@ uint8_t packMacSchAddUeConfigReq(Pst *pst, SchUeCfg *ueCfgToSch);
 uint8_t MacSchAddUeConfigReq(Pst *pst, SchUeCfg *ueCfgToSch);
 uint8_t packSchUeCfgRsp(Pst *pst, SchUeCfgRsp *cfgRsp);
 uint8_t MacProcSchUeCfgRsp(Pst *pst, SchUeCfgRsp *cfgRsp);
-uint8_t MacSchSlotInd ARGS((Pst * pst, SlotIndInfo * slotInd));
-uint8_t packMacSchSlotInd(Pst * pst, SlotIndInfo * slotInd);
+uint8_t MacSchSlotInd ARGS((Pst * pst, SlotTimingInfo * slotInd));
+uint8_t packMacSchSlotInd(Pst * pst, SlotTimingInfo * slotInd);
 uint8_t unpackMacSchSlotInd(MacSchSlotIndFunc func, Pst *pst, Buffer  *mBuf);
 uint8_t packMacSchBsr(Pst *pst, UlBufferStatusRptInd *bsrInd);
 uint8_t MacSchBsr(Pst *pst, UlBufferStatusRptInd *bsrInd);