X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fcm%2Fmac_sch_interface.h;h=95801bb22b71384a544cb521fbb2e5f5a74eb86b;hb=1616921700a3c7541f1df6dd2678f9ee4d8e933b;hp=87ec6e3a41d1a6f66b3cd4bc6b16b7a5884deb5b;hpb=e4e50f696285e2554d237169091026bf9f1b6257;p=o-du%2Fl2.git diff --git a/src/cm/mac_sch_interface.h b/src/cm/mac_sch_interface.h index 87ec6e3a4..95801bb22 100644 --- a/src/cm/mac_sch_interface.h +++ b/src/cm/mac_sch_interface.h @@ -17,15 +17,20 @@ *******************************************************************************/ /* events */ -#define EVENT_SCH_CELL_CFG 1 -#define EVENT_SCH_CELL_CFG_CFM 2 -#define EVENT_DL_ALLOC 3 -#define EVENT_UL_SCH_INFO 4 +#define EVENT_SCH_CELL_CFG 1 +#define EVENT_SCH_CELL_CFG_CFM 2 +#define EVENT_DL_ALLOC 3 +#define EVENT_UL_SCH_INFO 4 #define EVENT_RACH_IND_TO_SCH 5 #define EVENT_CRC_IND_TO_SCH 6 #define EVENT_DL_RLC_BO_INFO_TO_SCH 7 #define EVENT_UE_CREATE_REQ_TO_SCH 8 #define EVENT_UE_CREATE_RSP_TO_MAC 9 +#define EVENT_SLOT_IND_TO_SCH 10 +#define EVENT_SHORT_BSR 11 +#define EVENT_UCI_IND_TO_SCH 12 +#define EVENT_UE_RECONFIG_REQ_TO_SCH 13 +#define EVENT_UE_RECONFIG_RSP_TO_MAC 14 /*macros*/ @@ -33,6 +38,7 @@ #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 @@ -52,7 +58,9 @@ #define SCH_DATATYPE_PRACH 16 #define MAX_NUMBER_OF_CRC_IND_BITS 1 -#define MAX_NUM_LOGICAL_CHANNELS 11 +#define MAX_NUMBER_OF_UCI_IND_BITS 1 +#define MAX_SR_BITS_IN_BYTES 1 +#define MAX_NUM_LOGICAL_CHANNEL_GROUPS 8 /* can we have a common numslot numscs between mac sch */ #define MAX_SLOTS 10 #define MAX_SFN 1024 @@ -67,7 +75,6 @@ #define MAX_NUM_UL_ALLOC 16 /* Max number of pusch time domain uplink allocation */ #define SD_SIZE 3 -#define CCCH_LCID 0 #define ADD_DELTA_TO_TIME(crntTime, toFill, incr) \ { \ @@ -86,7 +93,6 @@ } \ } -/*structures*/ typedef enum { UNSPECIFIED_CAUSE, @@ -227,13 +233,13 @@ typedef enum typedef enum { - INTERLEAVED_CCE_REG_MAPPING, + INTERLEAVED_CCE_REG_MAPPING = 1, NONINTERLEAVED_CCE_REG_MAPPING }SchREGMappingType; typedef enum { - SLOT_PERIODICITY_AND_OFFSET_SL_1, + SLOT_PERIODICITY_AND_OFFSET_SL_1 = 1, SLOT_PERIODICITY_AND_OFFSET_SL_2, SLOT_PERIODICITY_AND_OFFSET_SL_4, SLOT_PERIODICITY_AND_OFFSET_SL_5, @@ -258,10 +264,16 @@ typedef enum typedef enum { - SEARCH_SPACE_TYPE_COMMON, + SEARCH_SPACE_TYPE_COMMON = 1, SEARCH_SPACE_TYPE_UE_SPECIFIC }SchSearchSpaceType; +typedef enum +{ + SCH_QOS_NON_DYNAMIC = 1, + SCH_QOS_DYNAMIC +}SchQosType; + typedef enum { AGGREGATION_LEVEL_N0, @@ -288,16 +300,63 @@ typedef enum typedef enum { - STATIC_BUNDLING_TYPE, + STATIC_BUNDLING_TYPE = 1, DYNAMIC_BUNDLING_TYPE }SchBundlingType; +typedef enum +{ + SCH_SET1_SIZE_N4, + SCH_SET1_SIZE_WIDEBAND, + SCH_SET1_SIZE_N2_WIDEBAND, + SCH_SET1_SIZE_N4_WIDEBAND +}SchBundlingSizeSet1; + +typedef enum +{ + SCH_SET2_SIZE_N4, + SCH_SET2_SIZE_WIDEBAND +}SchBundlingSizeSet2; + +typedef enum +{ + DUPLEX_MODE_FDD, + DUPLEX_MODE_TDD +}SchDuplexMode; + +typedef enum +{ + SSB_PRDCTY_MS5, + SSB_PRDCTY_MS10, + SSB_PRDCTY_MS20, + SSB_PRDCTY_MS40, + SSB_PRDCTY_MS80, + SSB_PRDCTY_MS160 +}SchSSBPeriod; + typedef enum { RSP_OK, RSP_NOK }SchMacRsp; +typedef enum +{ + SHORT_BSR, + LONG_BSR, + SHORT_TRUNCATED_BSR, + LONG_TRUNCATED_BSR +}BsrType; + +typedef enum +{ + FORMAT0_0, + FORMAT0_1, + FORMAT1_0, + FORMAT1_1 +}FormatType; + +/*structures*/ typedef struct timeDomainAlloc { uint16_t startSymb; @@ -316,9 +375,9 @@ typedef struct uint32_t ssbPbchPwr; /* SSB block power */ uint8_t scsCommon; /* subcarrier spacing for common [0-3]*/ uint8_t ssbOffsetPointA; /* SSB sub carrier offset from point A */ - SSBPeriod ssbPeriod; /* SSB Periodicity in msec */ + SchSSBPeriod ssbPeriod; /* SSB Periodicity in msec */ uint8_t ssbSubcOffset; /* Subcarrier Offset(Kssb) */ - uint32_t nSSBMask[SSB_MASK_SIZE]; /* Bitmap for actually transmitted SSB. */ + uint32_t nSSBMask[SCH_SSB_MASK_SIZE]; /* Bitmap for actually transmitted SSB. */ }SchSsbCfg; typedef struct bwpCfg @@ -410,7 +469,7 @@ typedef struct pdschCfg typedef struct coresetCfg { - uint8_t coreSet0Size; + uint8_t coreSetSize; uint8_t startSymbolIndex; uint8_t durationSymbols; uint8_t freqDomainResource[6]; @@ -445,7 +504,7 @@ typedef struct dlDCI typedef struct pdcchCfg { /* coreset-0 configuration */ - CoresetCfg coreset0Cfg; + CoresetCfg coresetCfg; uint16_t numDlDci; DlDCI dci; /* as of now its only one DCI, later it will be numDlCi */ @@ -559,7 +618,7 @@ typedef struct schCellCfg uint16_t cellId; /* Cell Id */ uint16_t phyCellId; /* Physical cell id */ uint8_t bandwidth; /* Supported B/W */ - DuplexMode dupMode; /* Duplex type: TDD/FDD */ + SchDuplexMode dupMode; /* Duplex type: TDD/FDD */ SchSsbCfg ssbSchCfg; /* SSB config */ SchSib1Cfg sib1SchCfg; /* SIB1 config */ SchRachCfg schRachCfg; /* PRACH config */ @@ -570,7 +629,7 @@ typedef struct schCellCfg typedef struct schCellCfgCfm { - U16 cellId; /* Cell Id */ + uint16_t cellId; /* Cell Id */ SchMacRsp rsp; }SchCellCfgCfm; @@ -610,7 +669,7 @@ typedef struct dlBrdcstAlloc * 0 : No tranamission * 1 : SIB1 Transmission * 2 : SIB1 Repetition */ - U8 sib1Trans; + uint8_t sib1Trans; Sib1AllocInfo sib1Alloc; }DlBrdcstAlloc; @@ -633,7 +692,7 @@ typedef struct rarAlloc PdschCfg rarPdschCfg; }RarAlloc; -typedef struct msg4Info +typedef struct dlMsgInfo { uint16_t crnti; uint8_t ndi; @@ -643,27 +702,90 @@ typedef struct msg4Info uint8_t pucchResInd; uint8_t harqFeedbackInd; uint8_t dciFormatId; - uint8_t *msg4Pdu; - uint16_t msg4PduLen; -}Msg4Info; + bool isMsg4Pdu; + uint16_t dlMsgPduLen; + uint8_t *dlMsgPdu; +}DlMsgInfo; -typedef struct msg4Alloc +typedef struct lcSchInfo { - Msg4Info msg4Info; - BwpCfg bwp; - PdcchCfg msg4PdcchCfg; - PdschCfg msg4PdschCfg; -}Msg4Alloc; + uint8_t lcId; + uint16_t schBytes; /* Number of scheduled bytes */ +}LcSchInfo; + +typedef struct dlMsgAlloc +{ + uint16_t crnti; + uint8_t numLc; + LcSchInfo lcSchInfo[MAX_NUM_LC]; /* Scheduled LC info */ + BwpCfg bwp; + PdcchCfg dlMsgPdcchCfg; + PdschCfg dlMsgPdschCfg; + DlMsgInfo dlMsgInfo; +}DlMsgAlloc; typedef struct schSlotValue { SlotIndInfo currentTime; SlotIndInfo broadcastTime; SlotIndInfo rarTime; - SlotIndInfo msg4Time; SlotIndInfo dlMsgTime; + SlotIndInfo ulDciTime; }SchSlotValue; +typedef struct format0_0 +{ + uint8_t resourceAllocType; + /* since we are using type-1, hence rbBitmap excluded */ + FreqDomainAlloc freqAlloc; + TimeDomainAlloc timeAlloc; + uint16_t rowIndex; + uint8_t mcs; + uint8_t harqProcId; /* HARQ Process ID */ + bool puschHopFlag; + bool freqHopFlag; + uint8_t ndi; /* NDI */ + uint8_t rv; /* Redundancy Version */ + uint8_t tpcCmd; + bool sUlCfgd; +}Format0_0; + +typedef struct format0_1 +{ +/* TBD */ + +}Format0_1; + +typedef struct format1_0 +{ +/* TBD */ + +}Format1_0; + +typedef struct format1_1 +{ +/* TBD */ +}Format1_1; + +typedef struct dciInfo +{ + uint16_t cellId; + uint16_t crnti; /* CRNI */ + SlotIndInfo slotIndInfo; /* Slot Info: sfn, slot number */ + BwpCfg bwpCfg; /* BWP Cfg */ + CoresetCfg coresetCfg; /* Coreset1 Cfg */ + FormatType formatType; /* DCI Format */ + union + { + Format0_0 format0_0; /* Format 0_0 */ + Format0_1 format0_1; /* Format 0_1 */ + Format1_0 format1_0; /* Format 1_0 */ + Format1_1 format1_1; /* Format 1_1 */ + }format; + DlDCI dciInfo; +}DciInfo; + + typedef struct dlSchedInfo { uint16_t cellId; /* Cell Id */ @@ -678,7 +800,14 @@ typedef struct dlSchedInfo RarAlloc *rarAlloc; /* Allocation from MSG4 */ - Msg4Alloc *msg4Alloc; + //Msg4Alloc *msg4Alloc; + + /* UL grant in response to BSR */ + DciInfo *ulGrant; + + /* Allocation from dedicated DL msg */ + DlMsgAlloc *dlMsgAlloc; + }DlSchedInfo; typedef struct tbInfo @@ -691,6 +820,7 @@ typedef struct tbInfo typedef struct schPuschInfo { + uint16_t crnti; uint8_t harqProcId; /* HARQ Process ID */ uint8_t resAllocType; /* Resource allocation type */ FreqDomainAlloc fdAlloc; /* Freq domain allocation */ @@ -757,16 +887,16 @@ typedef struct dlRlcBOInfo { uint16_t cellId; uint16_t crnti; - uint16_t numLc; - BOInfo boInfo[MAX_NUM_LOGICAL_CHANNELS]; -}DlRlcBOInfo; + uint8_t lcId; + uint32_t dataVolume; +}DlRlcBoInfo; /* Info of Scheduling Request to Add/Modify */ typedef struct schSchedReqInfo { - uint8_t schedReqId; - SrProhibitTimer srProhibitTmr; - SrTransMax srTransMax; + uint8_t schedReqId; + SchSrProhibitTimer srProhibitTmr; + SchSrTransMax srTransMax; }SchSchedReqInfo; /* Scheduling Request Configuration */ @@ -869,6 +999,20 @@ typedef struct schPdschTimeDomRsrcAlloc uint8_t symbolLength; }SchPdschTimeDomRsrcAlloc; + +typedef struct schPdschBundling +{ + struct schStaticBundling + { + SchBundlingSizeSet2 size; + }SchStaticBundling; + struct schDynamicBundling + { + SchBundlingSizeSet1 sizeSet1; + SchBundlingSizeSet2 sizeSet2; + }SchDynamicBundling; +}SchPdschBundling; + /* DMRS downlink configuration */ typedef struct schDmrsDlCfg { @@ -885,6 +1029,7 @@ typedef struct schPdschConfig SchRBGSize rbgSize; SchCodeWordsSchedByDci numCodeWordsSchByDci; /* Number of code words scheduled by DCI */ SchBundlingType bundlingType; + SchPdschBundling bundlingInfo; }SchPdschConfig; /* Initial Downlink BWP */ @@ -948,6 +1093,7 @@ typedef struct schPuschTimeDomRsrcAlloc /* PUSCH Configuration */ typedef struct schPuschCfg { + uint8_t dataScramblingId; SchDmrsUlCfg dmrsUlCfgForPuschMapTypeA; SchResourceAllocType resourceAllocType; uint8_t numTimeDomRsrcAlloc; @@ -1024,7 +1170,7 @@ typedef struct schGrbQosFlowInfo /* DRB QoS */ typedef struct schDrbQos { - uint8_t fiveQiType; /* Dynamic or non-dynamic */ + SchQosType fiveQiType; /* Dynamic or non-dynamic */ union { SchNonDynFiveQi nonDyn5Qi; @@ -1068,11 +1214,12 @@ typedef struct schDlLcCfg /* Logical Channel configuration */ typedef struct schLcCfg { + ConfigType configType; uint8_t lcId; SchDrbQosInfo *drbQos; SchSnssai *snssai; SchDlLcCfg dlLcCfg; - SchUlLcCfg *ulLcCfg; + SchUlLcCfg ulLcCfg; }SchLcCfg; /* Aggregate max bit rate */ @@ -1091,8 +1238,8 @@ typedef struct schUeCfg SchPhyCellGrpCfg phyCellGrpCfg; SchSpCellCfg spCellCfg; SchAggrMaxBitRate *aggrMaxBitRate; - uint8_t numLc; - SchLcCfg lcCfgList[MAX_NUM_LOGICAL_CHANNELS]; + uint8_t numLcs; + SchLcCfg schLcCfg[MAX_NUM_LC]; }SchUeCfg; typedef struct schUeCfgRsp @@ -1104,39 +1251,63 @@ typedef struct schUeCfgRsp SchFailureCause cause; }SchUeCfgRsp; +typedef struct dataVolInfo +{ + uint8_t lcgId; + uint32_t dataVol; +}DataVolInfo; + +typedef struct ulBufferStatusRptInd +{ + uint16_t cellId; + uint16_t crnti; + BsrType bsrType; + uint8_t numLcg; + DataVolInfo dataVolInfo[MAX_NUM_LOGICAL_CHANNEL_GROUPS]; +}UlBufferStatusRptInd; + +typedef struct srUciIndInfo +{ + uint16_t cellId; + uint16_t crnti; + SlotIndInfo slotInd; + uint8_t numSrBits; + uint8_t srPayload[MAX_SR_BITS_IN_BYTES]; +}SrUciIndInfo; + /* function pointers */ -typedef int (*SchCellCfgCfmFunc) ARGS(( +typedef uint8_t (*SchCellCfgCfmFunc) ARGS(( Pst *pst, /* Post Structure */ SchCellCfgCfm *schCellCfgCfm /* Cell Cfg Cfm */ )); -typedef int (*SchCellCfgFunc) ARGS(( +typedef uint8_t (*SchCellCfgFunc) ARGS(( Pst *pst, /* Post Structure */ SchCellCfg *schCellCfg /* Cell Cfg */ )); -typedef int (*SchMacDlAllocFunc) ARGS(( +typedef uint8_t (*SchMacDlAllocFunc) ARGS(( Pst *pst, /* Post Structure */ DlSchedInfo *dlSchedInfo /* dl allocation Info */ )); -typedef int (*SchMacUlSchInfoFunc) ARGS(( +typedef uint8_t (*SchMacUlSchInfoFunc) ARGS(( Pst *pst, /* Post Structure */ UlSchedInfo *ulSchedInfo /* UL Alloc Sch Info */ )); -typedef int (*MacSchRachIndFunc) ARGS(( +typedef uint8_t (*MacSchRachIndFunc) ARGS(( Pst *pst, /* Post structure */ RachIndInfo *rachInd)); /* Rach Indication Info */ -typedef int (*MacSchCrcIndFunc) ARGS(( +typedef uint8_t (*MacSchCrcIndFunc) ARGS(( Pst *pst, /* Post structure */ CrcIndInfo *crcInd)); /* CRC Info */ typedef uint8_t (*MacSchDlRlcBoInfoFunc) ARGS(( Pst *pst, /* Post structure */ - DlRlcBOInfo *dlBoInfo)); /* DL BO Info */ + DlRlcBoInfo *dlBoInfo)); /* DL BO Info */ typedef uint8_t (*MacSchUeCreateReqFunc) ARGS(( Pst *pst, /* Post structure */ @@ -1146,31 +1317,61 @@ typedef uint8_t (*SchUeCfgRspFunc) ARGS(( Pst *pst, /* Post structure */ SchUeCfgRsp *cfgRsp)); /* Scheduler UE Cfg response */ +typedef uint8_t (*MacSchSlotIndFunc) ARGS(( + Pst *pst, /* Post structure */ + SlotIndInfo *slotInd)); /* Slot Info */ + +typedef uint8_t (*MacSchBsrFunc) ARGS(( + Pst *pst, + UlBufferStatusRptInd *bsrInd +)); + +typedef uint8_t (*MacSchSrUciIndFunc) ARGS(( + Pst *pst, /* Post structure */ + SrUciIndInfo *uciInd)); /* UCI IND Info */ + +typedef uint8_t (*MacSchUeReconfigReqFunc) ARGS(( + Pst *pst, /* Post structure */ + SchUeCfg *ueCfgToSch)); /* Scheduler UE Cfg */ + +typedef uint8_t (*SchUeReCfgRspFunc) ARGS(( + Pst *pst, /* Post structure */ + SchUeCfgRsp *cfgRsp)); /* Scheduler UE Cfg response */ + /* function declarations */ -int packMacSchSlotInd(Pst *pst, SlotIndInfo *slotInd); -int packSchMacDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo); -int packSchMacUlSchInfo(Pst *pst, UlSchedInfo *ulSchedInfo); -EXTERN int packSchCellCfg(Pst *pst, SchCellCfg *schCellCfg); -EXTERN int packSchCellCfgCfm(Pst *pst, SchCellCfgCfm *schCellCfgCfm); - -EXTERN int MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo); -EXTERN int MacProcSchCellCfg(Pst *pst, SchCellCfg *schCellCfg); -EXTERN int MacProcSchCellCfgCfm(Pst *pst, SchCellCfgCfm *schCellCfgCfm); -EXTERN int SchHdlCellCfgReq(Pst *pst, SchCellCfg *schCellCfg); -EXTERN int schActvInit(Ent entity, Inst instId, Region region, Reason reason); -EXTERN S16 SchSendCfgCfm(Pst *pst, RgMngmt *cfm); -EXTERN int MacProcUlSchInfo(Pst *pst, UlSchedInfo *ulSchedInfo); -int packMacSchRachInd(Pst *pst, RachIndInfo *rachInd); -int macSchRachInd(Pst *pst, RachIndInfo *rachInd); -int packMacSchCrcInd(Pst *pst, CrcIndInfo *crcInd); -int macSchCrcInd(Pst *pst, CrcIndInfo *crcInd); -uint8_t packMacSchDlRlcBoInfo(Pst *pst, DlRlcBOInfo *dlBoInfo); -uint8_t macSchDlRlcBoInfo(Pst *pst, DlRlcBOInfo *dlBoInfo); +uint8_t packMacSchSlotInd(Pst *pst, SlotIndInfo *slotInd); +uint8_t packSchMacDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo); +uint8_t packSchMacUlSchInfo(Pst *pst, UlSchedInfo *ulSchedInfo); +uint8_t packSchCellCfg(Pst *pst, SchCellCfg *schCellCfg); +uint8_t packSchCellCfgCfm(Pst *pst, SchCellCfgCfm *schCellCfgCfm); +uint8_t MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo); +uint8_t MacProcSchCellCfg(Pst *pst, SchCellCfg *schCellCfg); +uint8_t MacProcSchCellCfgCfm(Pst *pst, SchCellCfgCfm *schCellCfgCfm); +uint8_t SchHdlCellCfgReq(Pst *pst, SchCellCfg *schCellCfg); +uint8_t schActvInit(Ent entity, Inst instId, Region region, Reason reason); +uint8_t SchSendCfgCfm(Pst *pst, RgMngmt *cfm); +uint8_t MacProcUlSchInfo(Pst *pst, UlSchedInfo *ulSchedInfo); +uint8_t packMacSchRachInd(Pst *pst, RachIndInfo *rachInd); +uint8_t MacSchRachInd(Pst *pst, RachIndInfo *rachInd); +uint8_t packMacSchCrcInd(Pst *pst, CrcIndInfo *crcInd); +uint8_t MacSchCrcInd(Pst *pst, CrcIndInfo *crcInd); +uint8_t packMacSchDlRlcBoInfo(Pst *pst, DlRlcBoInfo *dlBoInfo); +uint8_t MacSchDlRlcBoInfo(Pst *pst, DlRlcBoInfo *dlBoInfo); uint8_t packMacSchUeCreateReq(Pst *pst, SchUeCfg *ueCfgToSch); -uint8_t macSchUeCreateReq(Pst *pst, SchUeCfg *ueCfgToSch); +uint8_t MacSchUeCreateReq(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 unpackMacSchSlotInd(MacSchSlotIndFunc func, Pst *pst, Buffer *mBuf); +uint8_t packMacSchBsr(Pst *pst, UlBufferStatusRptInd *bsrInd); +uint8_t MacSchBsr(Pst *pst, UlBufferStatusRptInd *bsrInd); +uint8_t packMacSchSrUciInd(Pst *pst, SrUciIndInfo *uciInd); +uint8_t MacSchSrUciInd(Pst *pst, SrUciIndInfo *uciInd); +uint8_t packMacSchUeReconfigReq(Pst *pst, SchUeCfg *ueCfgToSch); +uint8_t MacSchUeReconfigReq(Pst *pst, SchUeCfg *ueCfgToSch); +uint8_t packSchUeReconfigRsp(Pst *pst, SchUeCfgRsp *cfgRsp); +uint8_t MacProcSchUeReconfigRsp(Pst *pst, SchUeCfgRsp *cfgRsp); /********************************************************************** End of file