X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fcm%2Fmac_sch_interface.h;h=650dca2362bd3497766303d0da1c0b6988f52312;hb=1931d49496d91723b7c54c63db50ff4ee8ff03b6;hp=decd330dc57c188ab632e8e7d1900d6f31913150;hpb=694d8fa8539d4b69710b61d01d5a0535bb98716e;p=o-du%2Fl2.git diff --git a/src/cm/mac_sch_interface.h b/src/cm/mac_sch_interface.h index decd330dc..650dca236 100644 --- a/src/cm/mac_sch_interface.h +++ b/src/cm/mac_sch_interface.h @@ -17,8 +17,13 @@ *******************************************************************************/ /* events */ -#define EVENT_SCH_CELL_CFG 1 -#define EVENT_SCH_CELL_CFG_CFM 2 +#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 /* selector */ #define MAC_SCH_LC_SELECTOR 0 @@ -38,6 +43,32 @@ #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 SCH_HARQ_PROC_ID 1 /* harq proc id */ +#define SCH_ALLOC_TYPE_1 1 /*sch res alloc type */ + +/* Datatype in UL SCH Info */ +#define SCH_DATATYPE_PUSCH 1 +#define SCH_DATATYPE_PUSCH_UCI 2 +#define SCH_DATATYPE_UCI 4 +#define SCH_DATATYPE_SRS 8 +#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*/ @@ -48,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 */ @@ -56,32 +100,15 @@ typedef struct SSBPeriod ssbPeriod; /* SSB Periodicity in msec */ uint8_t ssbSubcOffset; /* Subcarrier Offset(Kssb) */ uint32_t nSSBMask[SSB_MASK_SIZE]; /* Bitmap for actually transmitted SSB. */ -} SsbSchCfg; +}SchSsbCfg; -/* SIB1 interface structure */ 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 coresetCfg -{ - uint8_t startSymbolIndex; - uint8_t durationSymbols; - uint8_t freqDomainResource[6]; - uint8_t cceRegMappingType; - uint8_t regBundleSize; - uint8_t interleaverSize; - uint8_t coreSetType; - uint16_t shiftIndex; - uint8_t precoderGranularity; - uint8_t cceIndex; - uint8_t aggregationLevel; -} CoresetCfg; - typedef struct prg { uint16_t pmIdx; @@ -96,34 +123,6 @@ typedef struct beamformingInfo Prg prg[MAX_NUM_PRG]; } BeamformingInfo; -typedef struct txPowerPdcchInfo -{ - uint8_t powerValue; - uint8_t powerControlOffsetSS; -} TxPowerPdcchInfo; - -typedef struct dlDCI -{ - uint16_t rnti; - uint16_t scramblingId; - uint16_t scramblingRnti; - uint8_t cceIndex; - uint8_t aggregLevel; - BeamformingInfo beamPdcchInfo; - TxPowerPdcchInfo txPdcchPower; -} DlDCI; - -typedef struct sib1PdcchCfg -{ - BwpCfg sib1PdcchBwpCfg; - /* coreset-0 configuration */ - CoresetCfg sib1Coreset0Cfg; - - uint16_t numDlDci; - DlDCI sib1DlDci; /* as of now its only one DCI, later it will be numDlCi */ -} Sib1PdcchCfg; -/* end of SIB1 PDCCH structures */ - /* SIB1 PDSCH structures */ typedef struct codewordinfo @@ -148,17 +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 startSymbolIndex; - uint8_t numSymbols; + uint8_t rowIndex; + TimeDomainAlloc timeAlloc; } PdschTimeAlloc; typedef struct txPowerPdschInfo @@ -167,26 +165,71 @@ typedef struct txPowerPdschInfo uint8_t powerControlOffsetSS; } TxPowerPdschInfo; -typedef struct sib1PdschCfg +typedef struct pdschCfg { - uint16_t pduBitmap; - uint16_t rnti; - uint16_t pduIndex; - BwpCfg sib1PdschBwpCfg; - uint8_t numCodewords; - CodewordInfo codeword[MAX_CODEWORDS]; - uint16_t dataScramblingId; - uint8_t numLayers; - uint8_t transmissionScheme; - uint8_t refPoint; - DmrsInfo dmrs; - PdschFreqAlloc sib1FreqAlloc; - PdschTimeAlloc sib1TimeAlloc; - 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; -} Sib1PdschCfg; +} PdschCfg; /* SIB1 PDSCH structures end */ +/* SIB1 interface structure */ + +typedef struct coresetCfg +{ + uint8_t coreSet0Size; + uint8_t startSymbolIndex; + uint8_t durationSymbols; + uint8_t freqDomainResource[6]; + uint8_t cceRegMappingType; + uint8_t regBundleSize; + uint8_t interleaverSize; + uint8_t coreSetType; + uint16_t shiftIndex; + uint8_t precoderGranularity; + uint8_t cceIndex; + uint8_t aggregationLevel; +} CoresetCfg; + +typedef struct txPowerPdcchInfo +{ + uint8_t powerValue; + uint8_t powerControlOffsetSS; +} TxPowerPdcchInfo; + +typedef struct dlDCI +{ + uint16_t rnti; + uint16_t scramblingId; + uint16_t scramblingRnti; + uint8_t cceIndex; + uint8_t aggregLevel; + BeamformingInfo beamPdcchInfo; + TxPowerPdcchInfo txPdcchPower; + PdschCfg *pdschCfg; +} DlDCI; + +typedef struct pdcchCfg +{ + /* coreset-0 configuration */ + CoresetCfg coreset0Cfg; + + uint16_t numDlDci; + DlDCI dci; /* as of now its only one DCI, later it will be numDlCi */ +} PdcchCfg; +/* end of SIB1 PDCCH structures */ + typedef struct { /* parameters recieved from DU-APP */ @@ -199,18 +242,108 @@ typedef struct /* parameters derived in scheduler */ uint8_t n0; - Sib1PdcchCfg sib1PdcchCfg; - Sib1PdschCfg sib1PdschCfg; -} Sib1SchCfg; + BwpCfg bwp; + PdcchCfg sib1PdcchCfg; + PdschCfg sib1PdschCfg; +}SchSib1Cfg; + +typedef struct schRachCfg +{ + 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 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 */ +}SchRachCfg; + +typedef struct schBwpParams +{ + FreqDomainAlloc freqAlloc; + uint8_t scs; + uint8_t cyclicPrefix; +}SchBwpParams; + +typedef struct schCandidatesInfo +{ + uint8_t aggLevel1; + uint8_t aggLevel2; + uint8_t aggLevel4; + uint8_t aggLevel8; + uint8_t aggLevel16; +}SchCandidatesInfo; + +typedef struct schSearchSpaceCfg +{ + uint8_t searchSpaceId; + uint8_t coresetId; + uint16_t monitoringSlot; + uint16_t duration; + uint16_t monitoringSymbol; + SchCandidatesInfo candidate; +}SchSearchSpaceCfg; + +typedef struct schPdcchCfgCmn +{ + SchSearchSpaceCfg commonSearchSpace; + uint8_t raSearchSpaceId; +}SchPdcchCfgCmn; + +typedef struct schPdschCfgCmn +{ + uint8_t k0; + uint8_t mappingType; + uint8_t startSymbol; + uint8_t lengthSymbol; +}SchPdschCfgCmn; + +typedef struct schPucchCfgCmn +{ + uint8_t pucchResourceCommon; + uint8_t pucchGroupHopping; +}SchPucchCfgCmn; + +typedef struct schPuschCfgCmn +{ + uint8_t k2; + uint8_t mappingType; + uint8_t startSymbol; + uint8_t lengthSymbol; +}SchPuschCfgCmn; + +typedef struct schBwpDlCfg +{ + SchBwpParams bwp; + SchPdcchCfgCmn pdcchCommon; + SchPdschCfgCmn pdschCommon; +}SchBwpDlCfg; + +typedef struct schBwpUlCfg +{ + SchBwpParams bwp; + SchPucchCfgCmn pucchCommon; + SchPuschCfgCmn puschCommon; +}SchBwpUlCfg; typedef struct schCellCfg { - U16 cellId; /* Cell Id */ - U16 phyCellId; /* Physical cell id */ - U8 bandwidth; /* Supported B/W */ - DuplexMode dupMode; /* Duplex type: TDD/FDD */ - SsbSchCfg ssbSchCfg; - Sib1SchCfg sib1SchCfg; + 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 @@ -219,36 +352,31 @@ typedef struct schCellCfgCfm schMacRsp rsp; }SchCellCfgCfm; -typedef struct timeDomainAlloc -{ - uint16_t ssbStartSymbIdx; - uint16_t ssbSymbolDuration; -}TimeDomainAlloc; - -typedef struct freqDomainAlloc -{ - uint16_t ssbStartPrbIdx; - uint16_t ssbPrbDuration; -}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 { - Sib1PdcchCfg sib1PdcchCfg; - Sib1PdschCfg sib1PdschCfg; + BwpCfg bwp; + PdcchCfg sib1PdcchCfg; + PdschCfg sib1PdschCfg; } Sib1AllocInfo; +typedef struct prachSchInfo +{ + uint8_t numPrachOcas; /* Num Prach Ocassions */ + uint8_t prachFormat; /* PRACH Format */ + uint8_t numRa; /* Freq domain ocassion */ + uint8_t prachStartSymb; /* Freq domain ocassion */ +}PrachSchInfo; + /* Interface structure signifying DL broadcast allocation for SSB, SIB1 */ typedef struct dlBrdcstAlloc { - uint16_t cellId; /* Cell Id */ - SlotIndInfo slotIndInfo; /* Slot Info: sfn, slot number */ /* Ssb transmission is determined as follows: * 0 : No tranamission * 1 : SSB Transmission @@ -264,12 +392,152 @@ typedef struct dlBrdcstAlloc Sib1AllocInfo sib1Alloc; }DlBrdcstAlloc; -/* function pointers */ +typedef struct rarInfo +{ + 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 int (*SchMacDlBrdcstAllocFunc) ARGS(( - Pst *pst, /* Post Structure */ - DlBrdcstAlloc *dlBrdcstAlloc /* slot ind Info */ -)); +typedef struct msg4Info +{ + uint16_t crnti; + uint8_t ndi; + uint8_t harqProcNum; + uint8_t dlAssignIdx; + uint8_t pucchTpc; + uint8_t pucchResInd; + uint8_t harqFeedbackInd; + uint8_t dciFormatId; + uint8_t *msg4Pdu; + uint16_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 */ + SchSlotValue schSlotValue; + + /* Allocation for broadcast messages */ + bool isBroadcastPres; + DlBrdcstAlloc brdcstAlloc; + + /* Allocation for RAR message */ + //uint8_t isRarPres; + RarAlloc *rarAlloc; + + /* Allocation from MSG4 */ + Msg4Alloc *msg4Alloc; +}DlSchedInfo; + +typedef struct tbInfo +{ + uint8_t mcs; /* MCS */ + uint8_t ndi; /* NDI */ + uint8_t rv; /* Redundancy Version */ + uint16_t tbSize; /* TB Size */ +}TbInfo; + +typedef struct schPuschInfo +{ + uint8_t harqProcId; /* HARQ Process ID */ + uint8_t resAllocType; /* Resource allocation type */ + FreqDomainAlloc fdAlloc; /* Freq domain allocation */ + TimeDomainAlloc tdAlloc; /* Time domain allocation */ + TbInfo tbInfo; /* TB info */ +}SchPuschInfo; + +typedef struct schPucchInfo +{ + uint16_t rnti; + uint8_t pucchFormat; + FreqDomainAlloc fdAlloc; /* Freq domain allocation */ + TimeDomainAlloc tdAlloc; /* Time domain allocation */ + uint8_t srFlag; + uint8_t harqFlag; + uint8_t numHarqBits; + uint8_t uciFlag; + uint8_t numUciBits; +}SchPucchInfo; + +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 */ + SchPucchInfo schPucchInfo; /* Pusch scheduling info */ +}UlSchedInfo; + +typedef struct rachIndInfo +{ + uint16_t cellId; + uint16_t crnti; + SlotIndInfo timingInfo; + uint8_t slotIdx; + uint8_t symbolIdx; + uint8_t freqIdx; + uint8_t preambleIdx; + uint16_t timingAdv; +}RachIndInfo; + + +typedef struct crcIndInfo +{ + uint16_t cellId; + uint16_t crnti; + SlotIndInfo timingInfo; + uint16_t numCrcInd; + 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 */ typedef int (*SchCellCfgCfmFunc) ARGS(( Pst *pst, /* Post Structure */ @@ -280,18 +548,41 @@ typedef int (*SchCellCfgFunc) ARGS(( Pst *pst, /* Post Structure */ SchCellCfg *schCellCfg /* Cell Cfg */ )); + +typedef int (*SchMacDlAllocFunc) ARGS(( + Pst *pst, /* Post Structure */ + DlSchedInfo *dlSchedInfo /* dl allocation Info */ +)); + +typedef int (*SchMacUlSchInfoFunc) ARGS(( + Pst *pst, /* Post Structure */ + UlSchedInfo *ulSchedInfo /* UL Alloc Sch Info */ +)); + /* function declarations */ int packMacSchSlotInd(Pst *pst, SlotIndInfo *slotInd); -int packSchMacDlBrdcstAlloc(Pst *pst, DlBrdcstAlloc *dlBrdcstAlloc); +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 MacProcDlBrdcstAlloc(Pst *pst, DlBrdcstAlloc *dlBrdcstAlloc); +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); +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