+typedef struct schPlmnInfoList
+{
+ Plmn plmn;
+ uint8_t numSliceSupport; /* Total slice supporting */
+ Snssai **snssai; /* List of supporting snssai*/
+}SchPlmnInfoList;
+
+typedef struct schHqCfgParam
+{
+ uint8_t maxDlDataHqTx;
+ uint8_t maxMsg4HqTx;
+ uint8_t maxUlDataHqTx;
+}SchHqCfg;
+
+typedef struct schCellCfg
+{
+ uint16_t cellId; /* Cell Id */
+ uint16_t phyCellId; /* Physical cell id */
+ uint8_t numerology; /* Supported numerology */
+ SchDuplexMode dupMode; /* Duplex type: TDD/FDD */
+ uint8_t bandwidth; /* Supported B/W */
+ uint32_t dlFreq; /* DL Frequency */
+ uint32_t ulFreq; /* UL Frequency */
+ SchSsbCfg ssbSchCfg; /* SSB config */
+ SchSib1Cfg sib1SchCfg; /* SIB1 config */
+ SchRachCfg schRachCfg; /* PRACH config */
+ SchBwpDlCfg schInitialDlBwp; /* Initial DL BWP */
+ SchBwpUlCfg schInitialUlBwp; /* Initial UL BWP */
+ SchPlmnInfoList plmnInfoList; /* Consits of PlmnId and Snssai list */
+ SchHqCfg schHqCfg;
+#ifdef NR_TDD
+ TDDCfg tddCfg; /* TDD Cfg */
+#endif
+}SchCellCfg;
+
+typedef struct schCellCfgCfm
+{
+ uint16_t cellId; /* Cell Id */
+ SchMacRsp rsp;
+}SchCellCfgCfm;
+
+typedef struct ssbInfo
+{
+ 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;
+
+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
+{
+ /* Ssb transmission is determined as follows:
+ * 0 : No tranamission
+ * 1 : SSB Transmission
+ * 2 : SSB Repetition */
+ uint8_t ssbTrans;
+ uint8_t ssbIdxSupported;
+ SsbInfo ssbInfo[MAX_SSB_IDX];
+ /* Sib1 transmission is determined as follows:
+ * 0 : No tranamission
+ * 1 : SIB1 Transmission
+ * 2 : SIB1 Repetition */
+ uint8_t sib1Trans;
+ 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;
+ Msg3UlGrant ulGrant;
+ uint16_t tcrnti;
+ uint8_t rarPdu[RAR_PAYLOAD_SIZE];
+ uint8_t rarPduLen;
+}RarInfo;
+
+typedef struct rarAlloc
+{
+ DlPduType pduPres;
+ uint8_t pdschSlot;
+ RarInfo rarInfo;
+ BwpCfg bwp;
+ PdcchCfg rarPdcchCfg;
+ PdschCfg rarPdschCfg;
+}RarAlloc;
+
+typedef struct dlMsgInfo
+{
+ uint16_t crnti;
+ uint8_t ndi;
+ uint8_t harqProcNum;
+ uint8_t dlAssignIdx;
+ uint8_t pucchTpc;
+ uint8_t pucchResInd;
+ uint8_t harqFeedbackInd;
+ uint8_t dciFormatId;
+ bool isMsg4Pdu;
+ uint16_t dlMsgPduLen;
+ uint8_t *dlMsgPdu;
+}DlMsgInfo;
+
+typedef struct lcSchInfo
+{
+ uint8_t lcId;
+ uint32_t schBytes; /* Number of scheduled bytes */
+}LcSchInfo;
+
+typedef struct dlMsgSchedInfo
+{
+ bool isRetx;
+ uint8_t numLc;
+ LcSchInfo lcSchInfo[MAX_NUM_LC]; /* Scheduled LC info */
+ BwpCfg bwp;
+ PdcchCfg dlMsgPdcchCfg;
+ PdschCfg dlMsgPdschCfg;
+ DlPduType pduPres;
+ uint8_t pdschSlot;
+ DlMsgInfo dlMsgInfo;
+}DlMsgSchInfo;
+
+typedef struct dlMsgAlloc
+{
+ uint16_t crnti;
+ uint8_t numSchedInfo;
+ DlMsgSchInfo dlMsgSchedInfo[2];
+}DlMsgAlloc;
+
+typedef struct schSlotValue
+{
+ SlotTimingInfo currentTime;
+ SlotTimingInfo broadcastTime;
+ SlotTimingInfo rarTime;
+ SlotTimingInfo dlMsgTime;
+ SlotTimingInfo 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 */
+ SlotTimingInfo 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 */
+ SchSlotValue schSlotValue;
+
+ /* Allocation for broadcast messages */
+ bool isBroadcastPres;
+ DlBrdcstAlloc brdcstAlloc;
+
+ /* Allocation for RAR message */
+ RarAlloc *rarAlloc[MAX_NUM_UE];
+
+ /* UL grant in response to BSR */
+ DciInfo *ulGrant;
+
+ /* Allocation from dedicated DL msg */
+ DlMsgAlloc *dlMsgAlloc[MAX_NUM_UE];
+
+}DlSchedInfo;
+
+typedef struct dlPageAlloc
+{
+ uint16_t cellId;
+ SlotTimingInfo dlPageTime;
+ uint8_t ssbIdx;
+ bool shortMsgInd;
+ uint8_t shortMsg;
+ BwpCfg bwp;
+ PdcchCfg pagePdcchCfg;
+ PdschCfg pagePdschCfg;
+ uint16_t dlPagePduLen;
+ uint8_t *dlPagePdu;
+}DlPageAlloc;
+
+typedef struct tbInfo
+{
+ uint8_t qamOrder; /* Modulation Order */
+ uint8_t mcs; /* MCS */
+ SchMcsTable mcsTable; /* MCS Table */
+ uint8_t ndi; /* NDI */
+ uint8_t rv; /* Redundancy Version */
+ uint16_t tbSize; /* TB Size */
+}TbInfo;
+
+typedef struct schPuschInfo
+{
+ uint16_t crnti;
+ 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 */
+ uint8_t dmrsMappingType;
+ uint8_t nrOfDmrsSymbols;
+ uint8_t dmrsAddPos;
+}SchPuschInfo;
+
+typedef struct schPucchFormatCfg
+{
+ uint8_t interSlotFreqHop;
+ uint8_t addDmrs;
+ uint8_t maxCodeRate;
+ uint8_t numSlots;
+ bool pi2BPSK;
+ bool harqAckCSI;
+}SchPucchFormatCfg;
+
+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;
+ uint8_t intraFreqHop;
+ uint16_t secondPrbHop;
+ uint8_t initialCyclicShift;
+ uint8_t occLen;
+ uint8_t occIdx;
+ uint8_t timeDomOCC;
+ SchPucchFormatCfg cmnFormatCfg;
+}SchPucchInfo;
+
+typedef struct ulSchedInfo
+{
+ uint16_t cellId; /* Cell Id */
+ uint16_t crnti; /* CRNI */
+ 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 */
+ SchPucchInfo schPucchInfo; /* Pusch scheduling info */
+}UlSchedInfo;
+
+typedef struct rachIndInfo
+{
+ uint16_t cellId;
+ uint16_t crnti;
+ SlotTimingInfo 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;
+ SlotTimingInfo 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;
+ uint8_t lcId;
+ uint32_t dataVolume;
+}DlRlcBoInfo;
+
+/* Info of Scheduling Request to Add/Modify */
+typedef struct schSchedReqInfo
+{
+ uint8_t schedReqId;
+ SchSrProhibitTimer srProhibitTmr;
+ SchSrTransMax srTransMax;
+}SchSchedReqInfo;
+
+/* Scheduling Request Configuration */
+typedef struct schSchedReqCfg
+{
+ uint8_t addModListCount;
+ SchSchedReqInfo addModList[MAX_NUM_SR_CFG_PER_CELL_GRP]; /* List of Scheduling req to be added/modified */
+ uint8_t relListCount;
+ uint8_t relList[MAX_NUM_SR_CFG_PER_CELL_GRP]; /* list of scheduling request Id to be deleted */
+}SchSchedReqCfg;
+
+/* Info of Tag to Add/Modify */
+typedef struct schTagInfo
+{
+ uint8_t tagId;
+ SchTimeAlignmentTimer timeAlignmentTmr;
+}SchTagInfo;
+
+/* Timing Advance Group Configuration */
+typedef struct schTagCfg
+{
+ uint8_t addModListCount;
+ SchTagInfo addModList[MAX_NUM_TAGS]; /* List of Tag to Add/Modify */
+ uint8_t relListCount;
+ uint8_t relList[MAX_NUM_TAGS]; /* list of Tag Id to release */
+}SchTagCfg;
+
+/* Configuration for Power headroom reporting */
+typedef struct schPhrCfg
+{
+ SchPhrPeriodicTimer periodicTmr;
+ SchPhrProhibitTimer prohibitTmr;
+ SchPhrTxPwrFactorChange txpowerFactorChange;
+ bool multiplePhr;
+ bool dummy;
+ bool type2OtherCell;
+ SchPhrModeOtherCG modeOtherCG;
+}SchPhrCfg;
+
+/* MAC cell Group configuration */
+typedef struct schMacCellGrpCfg
+{
+ SchSchedReqCfg schedReqCfg;
+ SchTagCfg tagCfg;
+ SchPhrCfg phrCfg; /* To be used only if phrCfgSetupPres is true */
+}SchMacCellGrpCfg;
+
+/* Physical Cell Group Configuration */
+typedef struct schPhyCellGrpCfg
+{
+ SchPdschHarqAckCodebook pdschHarqAckCodebook;
+ int8_t pNrFr1;
+}SchPhyCellGrpCfg;
+
+/* Control resource set info */
+typedef struct schControlRsrcSet
+{
+ uint8_t cRSetId; /* Control resource set id */
+ uint8_t freqDomainRsrc[FREQ_DOM_RSRC_SIZE]; /* Frequency domain resource */
+ uint8_t duration;
+ SchREGMappingType cceRegMappingType;
+ SchPrecoderGranul precoderGranularity;
+ uint16_t dmrsScramblingId;
+}SchControlRsrcSet;
+
+/* Search Space info */
+typedef struct schSearchSpace
+{
+ uint8_t searchSpaceId;
+ uint8_t cRSetId;
+ SchMSlotPeriodAndOffset mSlotPeriodicityAndOffset;
+ uint8_t mSymbolsWithinSlot[MONITORING_SYMB_WITHIN_SLOT_SIZE];
+ SchAggrLevel numCandidatesAggLevel1; /* Number of candidates for aggregation level 1 */
+ SchAggrLevel numCandidatesAggLevel2; /* Number of candidates for aggregation level 2 */
+ SchAggrLevel numCandidatesAggLevel4; /* Number of candidates for aggregation level 4 */
+ SchAggrLevel numCandidatesAggLevel8; /* Number of candidates for aggregation level 8 */
+ SchAggrLevel numCandidatesAggLevel16; /* Number of candidates for aggregation level 16 */
+ SchSearchSpaceType searchSpaceType;
+ uint8_t ueSpecificDciFormat;
+}SchSearchSpace;
+
+/* PDCCH cofniguration */
+typedef struct schPdcchConfig
+{
+ uint8_t numCRsetToAddMod;
+ SchControlRsrcSet cRSetToAddModList[MAX_NUM_CRSET]; /* List of control resource set to add/modify */
+ uint8_t numCRsetToRel;
+ uint8_t cRSetToRelList[MAX_NUM_CRSET]; /* List of control resource set to release */
+ uint8_t numSearchSpcToAddMod;
+ SchSearchSpace searchSpcToAddModList[MAX_NUM_SEARCH_SPC]; /* List of search space to add/modify */
+ uint8_t numSearchSpcToRel;
+ uint8_t searchSpcToRelList[MAX_NUM_SEARCH_SPC]; /* List of search space to release */
+}SchPdcchConfig;
+
+/* PDSCH time domain resource allocation */
+typedef struct schPdschTimeDomRsrcAlloc
+{
+ uint8_t *k0;
+ SchTimeDomRsrcAllocMappingType mappingType;
+ uint8_t startSymbol;
+ 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
+{
+ SchDmrsAdditionPosition addPos; /* DMRS additional position */
+}SchDmrsDlCfg;
+
+/* PDSCH Configuration */
+typedef struct schPdschConfig
+{
+ SchDmrsDlCfg dmrsDlCfgForPdschMapTypeA;
+ SchResourceAllocType resourceAllocType;
+ uint8_t numTimeDomRsrcAlloc;
+ SchPdschTimeDomRsrcAlloc timeDomRsrcAllociList[MAX_NUM_DL_ALLOC]; /* PDSCH time domain DL resource allocation list */
+ SchRBGSize rbgSize;
+ SchCodeWordsSchedByDci numCodeWordsSchByDci; /* Number of code words scheduled by DCI */
+ SchBundlingType bundlingType;
+ SchPdschBundling bundlingInfo;
+}SchPdschConfig;
+
+/* Initial Downlink BWP */
+typedef struct schInitalDlBwp
+{
+ bool pdcchCfgPres;
+ SchPdcchConfig pdcchCfg;
+ bool pdschCfgPres;
+ SchPdschConfig pdschCfg;
+ bool k0K1TblPrsnt;
+ SchK0K1TimingInfoTbl k0K1InfoTbl;
+}SchInitalDlBwp;
+
+/* BWP Downlink common */
+typedef struct schBwpDlCommon
+{
+}SchBwpDlCommon;
+
+/* Downlink BWP information */
+typedef struct schDlBwpInfo
+{
+ uint8_t bwpId;
+}SchDlBwpInfo;
+
+/* PDCCH Serving Cell configuration */
+typedef struct schPdschServCellCfg
+{
+ uint8_t *maxMimoLayers;
+ SchNumHarqProcForPdsch numHarqProcForPdsch;
+ SchMaxCodeBlkGrpPerTB *maxCodeBlkGrpPerTb;
+ bool *codeBlkGrpFlushInd;
+ SchPdschXOverhead *xOverhead;
+}SchPdschServCellCfg;
+
+/* PUCCH Configuration */
+typedef struct schPucchResrcSetInfo
+{
+ uint8_t resrcSetId;
+ uint8_t resrcListCount;
+ uint8_t resrcList[MAX_NUM_PUCCH_PER_RESRC_SET];
+ uint8_t maxPayLoadSize;
+}SchPucchResrcSetInfo;
+
+typedef struct schPucchResrcSetCfg
+{
+ uint8_t resrcSetToAddModListCount;
+ SchPucchResrcSetInfo resrcSetToAddModList[MAX_NUM_PUCCH_RESRC_SET];
+ uint8_t resrcSetToRelListCount;
+ uint8_t resrcSetToRelList[MAX_NUM_PUCCH_RESRC];
+}SchPucchResrcSetCfg;
+
+typedef struct schPucchFormat0
+{
+ uint8_t initialCyclicShift;
+ uint8_t numSymbols;
+ uint8_t startSymbolIdx;
+}SchPucchFormat0;
+
+typedef struct schPucchFormat1
+{
+ uint8_t initialCyclicShift;
+ uint8_t numSymbols;
+ uint8_t startSymbolIdx;
+ uint8_t timeDomOCC;
+}SchPucchFormat1;
+
+typedef struct schPucchFormat2_3
+{
+ uint8_t numPrbs;
+ uint8_t numSymbols;
+ uint8_t startSymbolIdx;
+}SchPucchFormat2_3;
+
+typedef struct schPucchFormat4
+{
+ uint8_t numSymbols;
+ uint8_t occLen;
+ uint8_t occIdx;
+ uint8_t startSymbolIdx;
+}SchPucchFormat4;
+
+typedef struct schPucchResrcInfo
+{
+ uint8_t resrcId;
+ uint16_t startPrb;
+ uint8_t intraFreqHop;
+ uint16_t secondPrbHop;
+ uint8_t pucchFormat;
+ union{
+ SchPucchFormat0 *format0;
+ SchPucchFormat1 *format1;
+ SchPucchFormat2_3 *format2;
+ SchPucchFormat2_3 *format3;
+ SchPucchFormat4 *format4;
+ }SchPucchFormat;
+}SchPucchResrcInfo;
+
+typedef struct schPucchResrcCfg
+{
+ uint8_t resrcToAddModListCount;
+ SchPucchResrcInfo resrcToAddModList[MAX_NUM_PUCCH_RESRC];
+ uint8_t resrcToRelListCount;
+ uint8_t resrcToRelList[MAX_NUM_PUCCH_RESRC];
+}SchPucchResrcCfg;
+
+
+typedef struct schSchedReqResrcInfo
+{
+ uint8_t resrcId;
+ uint8_t requestId;
+ uint8_t periodicity;
+ uint16_t offset;
+ uint8_t resrc;
+}SchSchedReqResrcInfo;
+
+typedef struct schPucchSchedReqCfg
+{
+ uint8_t schedAddModListCount;
+ SchSchedReqResrcInfo schedAddModList[MAX_NUM_SR_CFG_PER_CELL_GRP];
+ uint8_t schedRelListCount;
+ uint8_t schedRelList[MAX_NUM_SR_CFG_PER_CELL_GRP];
+}SchPucchSchedReqCfg;
+
+typedef struct schSpatialRelationInfo
+{
+ uint8_t spatialRelationId;
+ uint8_t servCellIdx;
+ uint8_t pathLossRefRSId;
+ uint8_t p0PucchId;
+ uint8_t closeLoopIdx;
+}SchSpatialRelationInfo;
+
+typedef struct schPucchSpatialCfg
+{
+ uint8_t spatialAddModListCount;
+ SchSpatialRelationInfo spatialAddModList[MAX_NUM_SPATIAL_RELATIONS];
+ uint8_t spatialRelListCount;
+ uint8_t spatialRelList[MAX_NUM_SPATIAL_RELATIONS];
+}SchPucchSpatialCfg;
+
+typedef struct schP0PucchCfg
+{
+ uint8_t p0PucchId;
+ int p0PucchVal;
+}SchP0PucchCfg;
+
+typedef struct schPathLossRefRSCfg
+{
+ uint8_t pathLossRefRSId;
+}SchPathLossRefRSCfg;
+
+typedef struct schPucchMultiCsiCfg
+{
+ uint8_t multiCsiResrcListCount;
+ uint8_t multiCsiResrcList[MAX_NUM_PUCCH_RESRC-1];
+}SchPucchMultiCsiCfg;
+
+typedef struct schPucchDlDataToUlAck
+{
+ uint8_t dlDataToUlAckListCount;
+ uint8_t dlDataToUlAckList[MAX_NUM_DL_DATA_TO_UL_ACK];
+}SchPucchDlDataToUlAck;
+
+typedef struct schPucchPowerControl
+{
+ int deltaF_Format0;
+ int deltaF_Format1;
+ int deltaF_Format2;
+ int deltaF_Format3;
+ int deltaF_Format4;
+ uint8_t p0SetCount;
+ SchP0PucchCfg p0Set[MAX_NUM_PUCCH_P0_PER_SET];
+ uint8_t pathLossRefRSListCount;
+ SchPathLossRefRSCfg pathLossRefRSList[MAX_NUM_PATH_LOSS_REF_RS];
+}SchPucchPowerControl;
+
+typedef struct schPucchCfg
+{
+ SchPucchResrcSetCfg *resrcSet;
+ SchPucchResrcCfg *resrc;
+ SchPucchFormatCfg *format1;
+ SchPucchFormatCfg *format2;
+ SchPucchFormatCfg *format3;
+ SchPucchFormatCfg *format4;
+ SchPucchSchedReqCfg *schedReq;
+ SchPucchMultiCsiCfg *multiCsiCfg;
+ SchPucchSpatialCfg *spatialInfo;
+ SchPucchDlDataToUlAck *dlDataToUlAck;
+ SchPucchPowerControl *powerControl;
+}SchPucchCfg;
+
+/* Transform precoding disabled */
+typedef struct schTransPrecodDisabled
+{
+ uint16_t scramblingId0;
+}SchTransPrecodDisabled;
+
+/* DMRS Uplink configuration */
+typedef struct SchDmrsUlCfg
+{
+ SchDmrsAdditionPosition addPos; /* DMRS additional position */
+ SchTransPrecodDisabled transPrecodDisabled; /* Transform precoding disabled */
+}SchDmrsUlCfg;
+
+/* PUSCH Configuration */
+typedef struct schPuschCfg
+{
+ uint8_t dataScramblingId;
+ SchDmrsUlCfg dmrsUlCfgForPuschMapTypeA;
+ SchResourceAllocType resourceAllocType;
+ uint8_t numTimeDomRsrcAlloc;
+ SchPuschTimeDomRsrcAlloc timeDomRsrcAllocList[MAX_NUM_UL_ALLOC]; /* PUSCH time domain UL resource allocation list */
+ SchTransformPrecoder transformPrecoder;
+}SchPuschCfg;
+
+/* Initial Uplink BWP */
+typedef struct schInitialUlBwp
+{
+ bool pucchCfgPres;
+ SchPucchCfg pucchCfg;
+ bool puschCfgPres;
+ SchPuschCfg puschCfg;
+ bool k2TblPrsnt;
+ SchK2TimingInfoTbl k2InfoTbl;
+}SchInitialUlBwp;
+
+/* Uplink BWP information */
+typedef struct schUlBwpInfo
+{
+ uint8_t bwpId;
+}SchUlBwpInfo;
+
+/* Serving cell configuration */
+typedef struct schServCellCfgInfo
+{
+ SchInitalDlBwp initDlBwp;
+ uint8_t numDlBwpToAdd;
+ SchDlBwpInfo DlBwpToAddList[MAX_NUM_BWP];
+ uint8_t firstActvDlBwpId;
+ uint8_t defaultDlBwpId;
+ uint8_t *bwpInactivityTmr;
+ SchPdschServCellCfg pdschServCellCfg;
+ SchInitialUlBwp initUlBwp;
+ uint8_t numUlBwpToAdd;
+ SchUlBwpInfo UlBwpToAddList[MAX_NUM_BWP];
+ uint8_t firstActvUlBwpId;
+}SchServCellCfgInfo;
+
+typedef struct schNonDynFiveQi
+{
+ uint16_t fiveQi;
+ uint8_t priorLevel;
+ uint16_t avgWindow;
+ uint16_t maxDataBurstVol;
+}SchNonDynFiveQi;
+
+typedef struct schDynFiveQi
+{
+ uint8_t priorLevel;
+ uint16_t packetDelayBudget;
+ uint8_t packetErrRateScalar;
+ uint8_t packetErrRateExp;
+ uint16_t fiveQi;
+ uint8_t delayCritical;
+ uint16_t avgWindow;
+ uint16_t maxDataBurstVol;
+}SchDynFiveQi;
+
+typedef struct schNgRanAllocAndRetPri
+{
+ uint8_t priorityLevel;
+ uint8_t preEmptionCap;
+ uint8_t preEmptionVul;
+}SchNgRanAllocAndRetPri;
+
+typedef struct schGrbQosFlowInfo
+{
+ uint32_t maxFlowBitRateDl;
+ uint32_t maxFlowBitRateUl;
+ uint32_t guarFlowBitRateDl;
+ uint32_t guarFlowBitRateUl;
+}SchGrbQosFlowInfo;
+
+/* DRB QoS */
+typedef struct schDrbQos
+{
+ SchQosType fiveQiType; /* Dynamic or non-dynamic */
+ union
+ {
+ SchNonDynFiveQi nonDyn5Qi;
+ SchDynFiveQi dyn5Qi;
+ }u;
+ SchNgRanAllocAndRetPri ngRanRetPri;
+ SchGrbQosFlowInfo grbQosFlowInfo;
+ uint16_t pduSessionId;
+ uint32_t ulPduSessAggMaxBitRate; /* UL PDU Session Aggregate max bit rate */
+}SchDrbQosInfo;
+
+/* Special cell configuration */
+typedef struct schSpCellCfg
+{
+ uint8_t servCellIdx;
+ SchServCellCfgInfo servCellCfg;
+}SchSpCellCfg;
+
+/* Uplink logical channel configuration */
+typedef struct SchUlLcCfg
+{
+ uint8_t priority;
+ uint8_t lcGroup;
+ uint8_t schReqId;
+ uint8_t pbr; // prioritisedBitRate
+ uint8_t bsd; // bucketSizeDuration
+}SchUlLcCfg;
+
+/* Downlink logical channel configuration */
+typedef struct schDlLcCfg
+{
+ uint8_t lcp; // logical Channel Prioritization
+}SchDlLcCfg;
+
+/* Logical Channel configuration */
+typedef struct schLcCfg
+{
+ ConfigType configType;
+ uint8_t lcId;
+ SchDrbQosInfo *drbQos;
+ Snssai *snssai;
+ SchDlLcCfg dlLcCfg;
+ SchUlLcCfg ulLcCfg;
+}SchLcCfg;
+
+/* Aggregate max bit rate */
+typedef struct schAmbrCfg
+{
+ uint32_t ulBr; /* Ul BitRate */
+}SchAmbrCfg;
+
+typedef struct schModulationInfo
+{
+ uint8_t modOrder;
+ uint8_t mcsIndex;
+ SchMcsTable mcsTable;
+}SchModulationInfo;
+
+/* UE configuration */
+typedef struct schUeCfg
+{
+ uint16_t cellId;
+ uint8_t ueId;
+ uint16_t crnti;
+ bool macCellGrpCfgPres;
+ SchMacCellGrpCfg macCellGrpCfg;
+ bool phyCellGrpCfgPres;
+ SchPhyCellGrpCfg phyCellGrpCfg;
+ bool spCellCfgPres;
+ SchSpCellCfg spCellCfg;
+ SchAmbrCfg *ambrCfg;
+ SchModulationInfo dlModInfo;
+ SchModulationInfo ulModInfo;
+ uint8_t numLcs;
+ SchLcCfg schLcCfg[MAX_NUM_LC];
+ SchDataTransmission dataTransmissionInfo;
+}SchUeCfg;
+
+typedef struct schUeCfgRsp
+{
+ uint16_t cellId;
+ uint16_t ueId;
+ uint16_t crnti;
+ SchMacRsp rsp;
+ SchFailureCause cause;
+}SchUeCfgRsp;
+
+typedef struct schRachRsrcReq
+{
+ uint16_t cellId;
+ uint16_t crnti;
+ uint8_t numSsb;
+ uint8_t ssbIdx[MAX_NUM_SSB];
+}SchRachRsrcReq;
+
+typedef struct schCfraSsbResource
+{
+ uint8_t ssbIdx;
+ uint8_t raPreambleIdx;
+}SchCfraSsbResource;
+
+typedef struct schCfraRsrc
+{
+ uint8_t numSsb;
+ SchCfraSsbResource ssbResource[MAX_NUM_SSB];
+}SchCfraResource;
+
+typedef struct schRachRsrcRsp
+{
+ uint16_t cellId;
+ uint16_t crnti;
+ SchMacRsp result;
+ SchCfraResource cfraResource;
+}SchRachRsrcRsp;
+
+typedef struct schRachRsrcRel
+{
+ uint16_t cellId;
+ uint16_t crnti;
+ SchCfraResource cfraResource;
+}SchRachRsrcRel;
+
+typedef struct schUeDelete
+{
+ uint16_t cellId;
+ uint16_t crnti;
+}SchUeDelete;
+
+typedef struct schUeDeleteRsp
+{
+ uint16_t cellId;
+ uint16_t crnti;
+ SchMacRsp rsp;
+ ErrorCause cause;
+}SchUeDeleteRsp;
+
+typedef struct schCellDelete
+{
+ uint16_t cellId;
+}SchCellDelete;
+
+
+typedef struct schCellDeleteRsp
+{
+ uint16_t cellId;
+ SchMacRsp rsp;
+}SchCellDeleteRsp;
+
+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;
+ SlotTimingInfo slotInd;
+ uint8_t numSrBits;
+ uint8_t srPayload[MAX_SR_BITS_IN_BYTES];
+}SrUciIndInfo;
+
+typedef struct harqUciIndInfo
+{
+ uint16_t cellId;
+ uint16_t crnti;
+ SlotTimingInfo slotInd;
+ uint8_t numHarq;
+ uint8_t harqPayload[MAX_HARQ_BITS_IN_BYTES];
+}HarqUciIndInfo;
+
+typedef struct schRrmPolicyRatio
+{
+ uint8_t policyMaxRatio;
+ uint8_t policyMinRatio;
+ uint8_t policyDedicatedRatio;
+}SchRrmPolicyRatio;
+
+typedef struct schRrmPolicyOfSlice
+{
+ Snssai snssai;
+ SchRrmPolicyRatio *rrmPolicyRatioInfo;
+}SchRrmPolicyOfSlice;
+
+typedef struct schSliceCfgReq
+{
+ uint8_t numOfConfiguredSlice;
+ SchRrmPolicyOfSlice **listOfConfirguration;
+}SchSliceCfgReq;
+
+typedef struct sliceRsp
+{
+ Snssai snssai;
+ SchMacRsp rsp;
+ RspCause cause;
+}SliceRsp;
+
+typedef struct schSliceRsp
+{
+ uint8_t numSliceCfgRsp;
+ SliceRsp **listOfSliceCfgRsp;
+}SchSliceCfgRsp;
+
+typedef struct schPageInd
+{
+ uint16_t cellId;
+ uint16_t pf;
+ uint8_t i_s;
+ uint16_t pduLen;
+ uint8_t *pagePdu;
+}SchPageInd;
+
+typedef struct schUeHqInfo
+{
+ uint16_t crnti;
+ uint8_t hqProcId;
+}SchUeHqInfo;
+
+typedef struct schRlsHqInfo
+{
+ uint16_t cellId;
+ uint8_t numUes;
+ SchUeHqInfo *ueHqInfo;
+}SchRlsHqInfo;
+
+/* function pointers */
+typedef uint8_t (*SchCellCfgCfmFunc) ARGS((
+ Pst *pst, /* Post Structure */
+ SchCellCfgCfm *schCellCfgCfm /* Cell Cfg Cfm */
+ ));
+
+typedef uint8_t (*SchCellCfgFunc) ARGS((
+ Pst *pst, /* Post Structure */
+ SchCellCfg *schCellCfg /* Cell Cfg */
+ ));
+
+typedef uint8_t (*SchMacDlAllocFunc) ARGS((
+ Pst *pst, /* Post Structure */
+ DlSchedInfo *dlSchedInfo /* dl allocation Info */
+ ));
+
+typedef uint8_t (*SchMacDlPageAllocFunc) ARGS((
+ Pst *pst, /* Post Structure */
+ DlPageAlloc *dlPageAlloc /* dl Page allocation Info */
+ ));
+
+typedef uint8_t (*SchMacUlSchInfoFunc) ARGS((
+ Pst *pst, /* Post Structure */
+ UlSchedInfo *ulSchedInfo /* UL Alloc Sch Info */
+ ));
+
+typedef uint8_t (*MacSchRachIndFunc) ARGS((
+ Pst *pst, /* Post structure */
+ RachIndInfo *rachInd)); /* Rach Indication Info */
+
+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 */
+
+typedef uint8_t (*MacSchAddUeConfigReqFunc) ARGS((
+ Pst *pst, /* Post structure */
+ SchUeCfg *ueCfgToSch)); /* Scheduler UE Cfg */
+
+typedef uint8_t (*SchUeCfgRspFunc) ARGS((
+ Pst *pst, /* Post structure */
+ SchUeCfgRsp *cfgRsp)); /* Scheduler UE Cfg response */
+
+typedef uint8_t (*MacSchSlotIndFunc) ARGS((
+ Pst *pst, /* Post structure */
+ SlotTimingInfo *slotInd)); /* Slot Info */
+
+typedef uint8_t (*MacSchBsrFunc) ARGS((
+ Pst *pst,
+ UlBufferStatusRptInd *bsrInd
+));
+
+typedef uint8_t (*MacSchHarqUciIndFunc) ARGS((
+ Pst *pst, /* Post structure */
+ HarqUciIndInfo *uciInd)); /* UCI IND Info */
+
+typedef uint8_t (*MacSchSrUciIndFunc) ARGS((
+ Pst *pst, /* Post structure */
+ SrUciIndInfo *uciInd)); /* UCI IND Info */
+
+typedef uint8_t (*MacSchModUeConfigReqFunc) 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 */
+
+typedef uint8_t (*MacSchRachRsrcReqFunc) ARGS((
+ Pst *pst, /* Post structure */
+ SchRachRsrcReq *schRachRsrcReq)); /* RACH resource request to SCH */
+
+typedef uint8_t (*SchRachRsrcRspFunc) ARGS((
+ Pst *pst, /* Post structure */
+ SchRachRsrcRsp *schRachRsrcRsp)); /* RACH resource request to MAC */
+
+typedef uint8_t (*MacSchRachRsrcRelFunc) ARGS((
+ Pst *pst, /* Post structure */
+ SchRachRsrcRel *schRachRsrcRel)); /* RACH resource release to SCH */
+
+typedef uint8_t (*MacSchUeDeleteReqFunc) ARGS((
+ Pst *pst, /* Post structure */
+ SchUeDelete *schUeDel)); /*Scheduler UE Del*/
+
+typedef uint8_t (*SchUeDeleteRspFunc) ARGS((
+ Pst *pst, /* Post structure */
+ SchUeDeleteRsp *delRsp)); /* Scheduler UE delete response */
+
+typedef uint8_t (*MacSchCellDeleteReqFunc) ARGS((
+ Pst *pst, /* Post structure */
+ SchCellDelete *schCellDelete)); /*Scheduler UE Del*/
+
+typedef uint8_t (*SchCellDeleteRspFunc) ARGS((
+ Pst *pst, /* Post structure */
+ SchCellDeleteRsp *schCellDeleteRsp)); /* Scheduler UE delete response */
+
+typedef uint8_t (*MacSchSliceCfgReqFunc) ARGS((
+ Pst *pst, /* Post structure */
+ SchSliceCfgReq *schSliceCfgReq)); /* Scheduler Slice Cfg Req */
+
+typedef uint8_t (*SchSliceCfgRspFunc) ARGS((
+ Pst *pst, /* Post Structure */
+ SchSliceCfgRsp *schSliceCfgRsp /* Cell Cfg Cfm */
+ ));
+
+typedef uint8_t (*MacSchSliceReCfgReqFunc) ARGS((
+ Pst *pst, /* Post structure */
+ SchSliceCfgReq *schSliceReCfgReq)); /* Scheduler Slice ReCfg Req */
+
+typedef uint8_t (*SchSliceReCfgRspFunc) ARGS((
+ Pst *pst, /* Post Structure */
+ SchSliceCfgRsp *schSliceReCfgRsp /* Cell ReCfg Cfm */
+ ));
+
+typedef uint8_t (*MacSchPagingIndFunc) ARGS((
+ Pst *pst, /* Post structure */
+ SchPageInd *schPagingInd)); /* Paging Indication */
+
+typedef uint8_t (*SchMacDlReleaseHarqFunc) ARGS((
+ Pst *pst, /* Post structure */
+ SchRlsHqInfo *rlsHqInfo)); /* Release Harq proc */
+
+/* function declarations */
+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);
+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 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 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, 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);
+uint8_t packMacSchSrUciInd(Pst *pst, SrUciIndInfo *uciInd);
+uint8_t packMacSchHarqUciInd(Pst *pst, HarqUciIndInfo *uciInd);
+uint8_t MacSchHarqUciInd(Pst *pst, HarqUciIndInfo *uciInd);
+uint8_t MacSchSrUciInd(Pst *pst, SrUciIndInfo *uciInd);
+uint8_t packMacSchModUeConfigReq(Pst *pst, SchUeCfg *ueCfgToSch);
+uint8_t MacSchModUeConfigReq(Pst *pst, SchUeCfg *ueCfgToSch);
+uint8_t packSchUeReconfigRsp(Pst *pst, SchUeCfgRsp *cfgRsp);
+uint8_t MacProcSchUeReconfigRsp(Pst *pst, SchUeCfgRsp *cfgRsp);
+uint8_t packMacSchRachRsrcReq(Pst *pst, SchRachRsrcReq *schRachRsrcReq);
+uint8_t MacSchRachRsrcReq(Pst *pst, SchRachRsrcReq *schRachRsrcReq);
+uint8_t packSchRachRsrcRsp(Pst *pst, SchRachRsrcRsp *schRachRsrcRsp);
+uint8_t MacProcSchRachRsrcRsp(Pst *pst, SchRachRsrcRsp *schRachRsrcRsp);
+uint8_t packMacSchRachRsrcRel(Pst *pst, SchRachRsrcRel *schRachRsrcRel);
+uint8_t MacSchRachRsrcRel(Pst *pst, SchRachRsrcRel *schRachRsrcRel);
+uint8_t packMacSchUeDeleteReq(Pst *pst, SchUeDelete *schUeDel);
+uint8_t MacSchUeDeleteReq(Pst *pst, SchUeDelete *ueDelete);
+uint8_t packSchUeDeleteRsp(Pst *pst, SchUeDeleteRsp *delRsp);
+uint8_t MacProcSchUeDeleteRsp(Pst *pst, SchUeDeleteRsp *schUeDelRsp);
+uint8_t packMacSchCellDeleteReq(Pst *pst, SchCellDelete *schCellDelete);
+uint8_t MacSchCellDeleteReq(Pst *pst, SchCellDelete *schCellDelete);
+uint8_t packSchCellDeleteRsp(Pst *pst, SchCellDeleteRsp *schCellDeleteRsp);
+uint8_t MacProcSchCellDeleteRsp(Pst *pst, SchCellDeleteRsp *schCellDeleteRsp);
+uint8_t packMacSchSliceCfgReq(Pst *pst, SchSliceCfgReq *cfgReq);
+uint8_t MacSchSliceCfgReq(Pst *pst, SchSliceCfgReq *schSliceCfgReq);
+uint8_t packSchSliceCfgRsp(Pst *pst, SchSliceCfgRsp *cfgRsp);
+uint8_t MacProcSchSliceCfgRsp(Pst *pst, SchSliceCfgRsp *cfgRsp);
+uint8_t packMacSchSliceReCfgReq(Pst *pst, SchSliceCfgReq *cfgReq);
+uint8_t MacSchSliceReCfgReq(Pst *pst, SchSliceCfgReq *schSliceCfgReq);
+uint8_t packSchSliceReCfgRsp(Pst *pst, SchSliceCfgRsp *cfgRsp);
+uint8_t MacProcSchSliceReCfgRsp(Pst *pst, SchSliceCfgRsp *sliceReCfgrsp);
+uint8_t packMacSchPagingInd(Pst *pst, SchPageInd *pageInd);
+uint8_t MacSchPagingInd(Pst *pst, SchPageInd *pageInd);
+uint8_t packSchMacDlPageAlloc(Pst *pst, DlPageAlloc *dlPageAlloc);
+uint8_t MacProcDlPageAlloc(Pst *pst, DlPageAlloc *dlPageAlloc);
+uint8_t packSchMacDlReleaseHarq(Pst *pst, SchRlsHqInfo *rlsHqInfo);
+uint8_t MacSchReleaseDlHarqProc(Pst *pst, SchRlsHqInfo *rlsHqInfo);