X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fcm%2Fmac_sch_interface.h;h=677e846efeddcf9b2689d6bfbcbcfc953c1cc5cf;hb=49dec2270f1b3c03b36a801e153bf0786edffc24;hp=0c599ee9a13a47e8ee58185edb1533ba6741e91e;hpb=f56e7aa2f07c03f3b30eda22a2260d038e0214e9;p=o-du%2Fl2.git diff --git a/src/cm/mac_sch_interface.h b/src/cm/mac_sch_interface.h index 0c599ee9a..677e846ef 100644 --- a/src/cm/mac_sch_interface.h +++ b/src/cm/mac_sch_interface.h @@ -19,8 +19,11 @@ /* events */ #define EVENT_SCH_CELL_CFG 1 #define EVENT_SCH_CELL_CFG_CFM 2 -#define EVENT_DL_ALLOC 3 +#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 /* selector */ #define MAC_SCH_LC_SELECTOR 0 @@ -51,6 +54,21 @@ #define SCH_DATATYPE_PRACH 16 #define MAX_NUMBER_OF_CRC_IND_BITS 1 +#define MAX_NUM_LOGICAL_CHANNELS 11 +/* can we have a common numslot numscs between mac sch */ +#define MAX_SLOTS 10 +#define MAX_SFN 1024 +#define CCCH_LCID 0 +#define ADD_DELTA_TO_TIME(crntTime, toFill, incr) \ + if ((crntTime.slot + incr) > (MAX_SLOTS - 1)) \ + toFill.sfn = (crntTime.sfn + 1); \ + else \ + toFill.sfn = crntTime.sfn; \ + toFill.slot = (crntTime.slot + incr) % MAX_SLOTS; \ + if (toFill.sfn >= MAX_SFN) \ + { \ + toFill.sfn%=MAX_SFN; \ + } \ /*structures*/ @@ -61,6 +79,19 @@ typedef enum RSP_NOK }schMacRsp; +typedef struct timeDomainAlloc +{ + uint16_t startSymb; + uint16_t numSymb; +}TimeDomainAlloc; + +typedef struct freqDomainAlloc +{ + uint16_t startPrb; + uint16_t numPrb; +}FreqDomainAlloc; + + typedef struct { uint32_t ssbPbchPwr; /* SSB block power */ @@ -73,10 +104,9 @@ typedef struct typedef struct bwpCfg { - uint8_t subcarrierSpacing; - uint8_t cyclicPrefix; - uint16_t BWPSize; - uint16_t BWPStart; + uint8_t subcarrierSpacing; + uint8_t cyclicPrefix; + FreqDomainAlloc freqAlloc; }BwpCfg; typedef struct prg @@ -117,18 +147,16 @@ typedef struct dmrsInfo typedef struct pdschFreqAlloc { - uint8_t resourceAlloc; + uint8_t resourceAllocType; /* since we are using type-1, hence rbBitmap excluded */ - uint16_t rbStart; - uint16_t rbSize; + FreqDomainAlloc freqAlloc; uint8_t vrbPrbMapping; } PdschFreqAlloc; typedef struct pdschTimeAlloc { - uint8_t rowIndex; - uint8_t startSymbolIndex; - uint8_t numSymbols; + uint8_t rowIndex; + TimeDomainAlloc timeAlloc; } PdschTimeAlloc; typedef struct txPowerPdschInfo @@ -139,20 +167,19 @@ typedef struct txPowerPdschInfo typedef struct pdschCfg { - uint16_t pduBitmap; - uint16_t rnti; - uint16_t pduIndex; - BwpCfg pdschBwpCfg; - uint8_t numCodewords; - CodewordInfo codeword[MAX_CODEWORDS]; - uint16_t dataScramblingId; - uint8_t numLayers; - uint8_t transmissionScheme; - uint8_t refPoint; - DmrsInfo dmrs; - PdschFreqAlloc freqAlloc; - PdschTimeAlloc timeAlloc; - BeamformingInfo beamPdschInfo; + uint16_t pduBitmap; + uint16_t rnti; + uint16_t pduIndex; + uint8_t numCodewords; + CodewordInfo codeword[MAX_CODEWORDS]; + uint16_t dataScramblingId; + uint8_t numLayers; + uint8_t transmissionScheme; + uint8_t refPoint; + DmrsInfo dmrs; + PdschFreqAlloc pdschFreqAlloc; + PdschTimeAlloc pdschTimeAlloc; + BeamformingInfo beamPdschInfo; TxPowerPdschInfo txPdschPower; } PdschCfg; /* SIB1 PDSCH structures end */ @@ -195,7 +222,6 @@ typedef struct dlDCI typedef struct pdcchCfg { - BwpCfg pdcchBwpCfg; /* coreset-0 configuration */ CoresetCfg coreset0Cfg; @@ -216,32 +242,33 @@ typedef struct /* parameters derived in scheduler */ uint8_t n0; + BwpCfg bwp; PdcchCfg sib1PdcchCfg; PdschCfg sib1PdschCfg; }SchSib1Cfg; typedef struct schRachCfg { - uint8_t prachCfgIdx; /* PRACH config idx */ - uint8_t prachSubcSpacing; /* Subcarrier spacing of RACH */ + uint8_t prachCfgIdx; /* PRACH config idx */ + uint8_t prachSubcSpacing; /* Subcarrier spacing of RACH */ uint16_t msg1FreqStart; /* Msg1-FrequencyStart */ - uint8_t msg1Fdm; /* PRACH FDM (1,2,4,8) */ + uint8_t msg1Fdm; /* PRACH FDM (1,2,4,8) */ + uint8_t rootSeqLen; /* root sequence length */ uint16_t rootSeqIdx; /* Root sequence index */ uint8_t numRootSeq; /* Number of root sequences required for FD */ uint16_t k1; /* Frequency Offset for each FD */ - uint8_t ssbPerRach; /* SSB per RACH occassion */ - uint8_t prachMultCarrBand; /* Presence of Multiple carriers in Band */ - uint8_t raContResTmr; /* RA Contention Resoultion Timer */ - uint8_t rsrpThreshSsb; /* RSRP Threshold SSB */ - uint8_t raRspWindow; /* RA Response Window */ + uint8_t ssbPerRach; /* SSB per RACH occassion */ + uint8_t prachMultCarrBand; /* Presence of Multiple carriers in Band */ + uint8_t raContResTmr; /* RA Contention Resoultion Timer */ + uint8_t rsrpThreshSsb; /* RSRP Threshold SSB */ + uint8_t raRspWindow; /* RA Response Window */ }SchRachCfg; typedef struct schBwpParams { - uint16_t firstPrb; - uint16_t numPrb; - uint8_t scs; - uint8_t cyclicPrefix; + FreqDomainAlloc freqAlloc; + uint8_t scs; + uint8_t cyclicPrefix; }SchBwpParams; typedef struct schCandidatesInfo @@ -265,7 +292,8 @@ typedef struct schSearchSpaceCfg typedef struct schPdcchCfgCmn { - SchSearchSpaceCfg raSearchSpace; + SchSearchSpaceCfg commonSearchSpace; + uint8_t raSearchSpaceId; }SchPdcchCfgCmn; typedef struct schPdschCfgCmn @@ -299,16 +327,16 @@ typedef struct schBwpUlCfg 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 */ - SchSsbCfg ssbSchCfg; /* SSB config */ - SchSib1Cfg sib1SchCfg; /* SIB1 config */ - SchRachCfg schRachCfg; /* PRACH config */ - SchBwpDlCfg schInitialDlBwp; /* Initial DL BWP */ - SchBwpUlCfg schInitialUlBwp; /* Initial UL BWP */ - uint8_t puschMu; /* PUSCH MU */ + uint16_t cellId; /* Cell Id */ + uint16_t phyCellId; /* Physical cell id */ + uint8_t bandwidth; /* Supported B/W */ + DuplexMode dupMode; /* Duplex type: TDD/FDD */ + SchSsbCfg ssbSchCfg; /* SSB config */ + SchSib1Cfg sib1SchCfg; /* SIB1 config */ + SchRachCfg schRachCfg; /* PRACH config */ + SchBwpDlCfg schInitialDlBwp; /* Initial DL BWP */ + SchBwpUlCfg schInitialUlBwp; /* Initial UL BWP */ + uint8_t puschMu; /* PUSCH MU */ }SchCellCfg; typedef struct schCellCfgCfm @@ -317,27 +345,16 @@ typedef struct schCellCfgCfm schMacRsp rsp; }SchCellCfgCfm; -typedef struct timeDomainAlloc -{ - uint16_t startSymb; - uint16_t numSymb; -}TimeDomainAlloc; - -typedef struct freqDomainAlloc -{ - uint16_t startPrb; - uint16_t numPrb; -}FreqDomainAlloc; - typedef struct ssbInfo { - uint8_t ssbIdx; /* SSB Index */ + uint8_t ssbIdx; /* SSB Index */ TimeDomainAlloc tdAlloc; /* Time domain allocation */ FreqDomainAlloc fdAlloc; /* Freq domain allocation */ }SsbInfo; typedef struct sib1AllocInfo { + BwpCfg bwp; PdcchCfg sib1PdcchCfg; PdschCfg sib1PdschCfg; } Sib1AllocInfo; @@ -370,36 +387,70 @@ typedef struct dlBrdcstAlloc typedef struct rarInfo { - uint16_t raRnti; - uint8_t RAPID; - uint16_t ta; - uint16_t msg3StartRb; - uint8_t msg3NumRb; - uint16_t tcrnti; - uint8_t rarPdu[8]; - uint8_t rarPduLen; + uint16_t raRnti; + uint8_t RAPID; + uint16_t ta; + FreqDomainAlloc msg3FreqAlloc; + uint16_t tcrnti; + uint8_t rarPdu[8]; + uint8_t rarPduLen; }RarInfo; typedef struct rarAlloc { RarInfo rarInfo; + BwpCfg bwp; PdcchCfg rarPdcchCfg; PdschCfg rarPdschCfg; }RarAlloc; -typedef struct dlAlloc +typedef struct msg4Info +{ + uint8_t ndi; + uint8_t harqProcNum; + uint8_t dlAssignIdx; + uint8_t pucchTpc; + uint8_t pucchResInd; + uint8_t harqFeedbackInd; + uint8_t dciFormatId; + uint16_t crnti; + uint8_t *msg4Pdu; + uint8_t msg4PduLen; +}Msg4Info; + +typedef struct msg4Alloc +{ + Msg4Info msg4Info; + BwpCfg bwp; + PdcchCfg msg4PdcchCfg; + PdschCfg msg4PdschCfg; +}Msg4Alloc; + +typedef struct schSlotValue +{ + SlotIndInfo currentTime; + SlotIndInfo broadcastTime; + SlotIndInfo rarTime; + SlotIndInfo msg4Time; + SlotIndInfo dlMsgTime; +}SchSlotValue; + +typedef struct dlSchedInfo { uint16_t cellId; /* Cell Id */ - SlotIndInfo slotIndInfo; /* Slot Info: sfn, slot number */ + SchSlotValue schSlotValue; /* Allocation for broadcast messages */ - uint8_t isBroadcastPres; + bool isBroadcastPres; DlBrdcstAlloc brdcstAlloc; /* Allocation for RAR message */ - uint8_t isRarPres; - RarAlloc rarAlloc; -}DlAlloc; + //uint8_t isRarPres; + RarAlloc *rarAlloc; + + /* Allocation from MSG4 */ + Msg4Alloc *msg4Alloc; +}DlSchedInfo; typedef struct tbInfo { @@ -419,14 +470,15 @@ typedef struct schPuschInfo }SchPuschInfo; -typedef struct ulSchInfo +typedef struct ulSchedInfo { uint16_t cellId; /* Cell Id */ + uint16_t crnti; /* CRNI */ SlotIndInfo slotIndInfo; /* Slot Info: sfn, slot number */ uint8_t dataType; /* Type of info being scheduled */ PrachSchInfo prachSchInfo; /* Prach scheduling info */ SchPuschInfo schPuschInfo; /* Pusch scheduling info */ -}UlSchInfo; +}UlSchedInfo; typedef struct rachIndInfo { @@ -450,6 +502,20 @@ typedef struct crcIndInfo uint8_t crcInd[MAX_NUMBER_OF_CRC_IND_BITS]; }CrcIndInfo; +typedef struct boInfo +{ + uint8_t lcId; + uint32_t dataVolume; +}BOInfo; + +typedef struct dlRlcBOInfo +{ + uint16_t cellId; + uint16_t crnti; + uint16_t numLc; + BOInfo boInfo[MAX_NUM_LOGICAL_CHANNELS]; +}DlRlcBOInfo; + /* function pointers */ @@ -465,34 +531,38 @@ typedef int (*SchCellCfgFunc) ARGS(( typedef int (*SchMacDlAllocFunc) ARGS(( Pst *pst, /* Post Structure */ - DlAlloc *dlAlloc /* dl allocation Info */ + DlSchedInfo *dlSchedInfo /* dl allocation Info */ )); typedef int (*SchMacUlSchInfoFunc) ARGS(( - Pst *pst, /* Post Structure */ - UlSchInfo *ulSchInfo /* UL Sch Info */ + Pst *pst, /* Post Structure */ + UlSchedInfo *ulSchedInfo /* UL Alloc Sch Info */ )); /* function declarations */ int packMacSchSlotInd(Pst *pst, SlotIndInfo *slotInd); -int packSchMacDlAlloc(Pst *pst, DlAlloc *dlAlloc); -int packSchMacUlSchInfo(Pst *pst, UlSchInfo *ulSchInfo); +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, DlAlloc *dlAlloc); +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, UlSchInfo *ulSchInfo); +EXTERN int MacProcUlSchInfo(Pst *pst, UlSchedInfo *ulSchedInfo); typedef int (*MacSchRachIndFunc)(Pst *pst, RachIndInfo *rachInd); int packMacSchRachInd(Pst *pst, RachIndInfo *rachInd); int macSchRachInd(Pst *pst, RachIndInfo *rachInd); typedef int (*MacSchCrcIndFunc)(Pst *pst, CrcIndInfo *crcInd); int packMacSchCrcInd(Pst *pst, CrcIndInfo *crcInd); int macSchCrcInd(Pst *pst, CrcIndInfo *crcInd); +typedef uint8_t (*MacSchDlRlcBoInfoFunc)(Pst *pst, DlRlcBOInfo *dlBoInfo); +uint8_t packMacSchDlRlcBoInfo(Pst *pst, DlRlcBOInfo *dlBoInfo); +uint8_t macSchDlRlcBoInfo(Pst *pst, DlRlcBOInfo *dlBoInfo); + /********************************************************************** End of file