*******************************************************************************/
/* events */
-#define EVENT_SCH_CELL_CFG 1
-#define EVENT_SCH_CELL_CFG_CFM 2
-#define EVENT_DL_SCH_INFO 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_ADD_UE_CONFIG_REQ_TO_SCH 8
-#define EVENT_UE_CONFIG_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_MODIFY_UE_CONFIG_REQ_TO_SCH 13
-#define EVENT_UE_RECONFIG_RSP_TO_MAC 14
-#define EVENT_UE_DELETE_REQ_TO_SCH 15
-#define EVENT_UE_DELETE_RSP_TO_MAC 16
-#define EVENT_CELL_DELETE_REQ_TO_SCH 17
-#define EVENT_CELL_DELETE_RSP_TO_MAC 18
-
-
+#define EVENT_SCH_GEN_CFG 1
+#define EVENT_SCH_CELL_CFG 2
+#define EVENT_SCH_CELL_CFG_CFM 3
+#define EVENT_DL_SCH_INFO 4
+#define EVENT_UL_SCH_INFO 5
+#define EVENT_RACH_IND_TO_SCH 6
+#define EVENT_CRC_IND_TO_SCH 7
+#define EVENT_DL_RLC_BO_INFO_TO_SCH 8
+#define EVENT_ADD_UE_CONFIG_REQ_TO_SCH 9
+#define EVENT_UE_CONFIG_RSP_TO_MAC 10
+#define EVENT_SLOT_IND_TO_SCH 11
+#define EVENT_SHORT_BSR 12
+#define EVENT_UCI_IND_TO_SCH 13
+#define EVENT_MODIFY_UE_CONFIG_REQ_TO_SCH 14
+#define EVENT_UE_RECONFIG_RSP_TO_MAC 15
+#define EVENT_UE_DELETE_REQ_TO_SCH 16
+#define EVENT_UE_DELETE_RSP_TO_MAC 17
+#define EVENT_CELL_DELETE_REQ_TO_SCH 18
+#define EVENT_CELL_DELETE_RSP_TO_MAC 19
+#define EVENT_LONG_BSR 20
+#define EVENT_SLICE_CFG_REQ_TO_SCH 21
+#define EVENT_SLICE_CFG_RSP_TO_MAC 22
+#define EVENT_SLICE_RECFG_REQ_TO_SCH 23
+#define EVENT_SLICE_RECFG_RSP_TO_MAC 24
+#define EVENT_RACH_RESOURCE_REQUEST_TO_SCH 25
+#define EVENT_RACH_RESOURCE_RESPONSE_TO_MAC 26
+#define EVENT_RACH_RESOURCE_RELEASE_TO_SCH 27
+#define EVENT_PAGING_IND_TO_SCH 28
+#define EVENT_DL_PAGING_ALLOC 29
+#define EVENT_DL_REL_HQ_PROC 30
+#define EVENT_DL_HARQ_IND_TO_SCH 31
/*macros*/
#define MAX_SSB_IDX 1 /* forcing it as 1 for now. Right value is 64 */
#define SCH_SSB_MASK_SIZE 1
#define MAX_NUMBER_OF_CRC_IND_BITS 1
#define MAX_NUMBER_OF_UCI_IND_BITS 1
#define MAX_SR_BITS_IN_BYTES 1
+#define MAX_HARQ_BITS_IN_BYTES 1
#define MAX_NUM_LOGICAL_CHANNEL_GROUPS 8
-/* can we have a common numslot numscs between mac sch */
-#ifdef NR_TDD
-#define MAX_SLOTS 20
-#else
-#define MAX_SLOTS 10
-#endif
-#define MAX_SFN 1024
#define MAX_NUM_SR_CFG_PER_CELL_GRP 8 /* Max number of scheduling request config per cell group */
#define MAX_NUM_TAGS 4 /* Max number of timing advance groups */
#define MAX_NUM_BWP 4 /* Max number of BWP per serving cell */
#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 UL_TX_BUFFER_SIZE 5
#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 DEFAULT_K2_VALUE_FOR_SCS60 2
#define DEFAULT_K2_VALUE_FOR_SCS120 3
-#define ADD_DELTA_TO_TIME(crntTime, toFill, incr) \
+#define ADD_DELTA_TO_TIME(crntTime, toFill, incr, numOfSlot) \
{ \
- if ((crntTime.slot + incr) > (MAX_SLOTS - 1)) \
+ if ((crntTime.slot + incr) > (numOfSlot - 1)) \
{ \
toFill.sfn = (crntTime.sfn + 1); \
} \
{ \
toFill.sfn = crntTime.sfn; \
} \
- toFill.slot = (crntTime.slot + incr) % MAX_SLOTS; \
+ toFill.slot = (crntTime.slot + incr) % numOfSlot; \
if (toFill.sfn >= MAX_SFN) \
{ \
toFill.sfn%=MAX_SFN; \
RRC_CONNECTED_USERS_RSRC
}SchResourceType;
+typedef enum
+{
+ SLICE_FOUND,
+ SLICE_NOT_FOUND
+}RspCause;
+
typedef enum
{
NO_TRANSMISSION,
{
NOT_APPLICABLE,
INVALID_CELLID,
- INVALID_UEIDX
+ INVALID_UEID
}ErrorCause;
typedef enum
BOTH
}DlPduType;
+typedef enum
+{
+ DATA_TRANSMISSION_ALLOWED,
+ STOP_DATA_TRANSMISSION,
+ RESTART_DATA_TRANSMISSION
+}SchDataTransmission;
+
/*structures*/
typedef struct timeDomainAlloc
{
uint16_t numSymb;
}TimeDomainAlloc;
-typedef struct freqDomainAlloc
+typedef struct resAllocType0
+{
+ uint8_t rbBitmap[36];
+}ResAllocType0;
+
+typedef struct resAllocType1
{
uint16_t startPrb;
uint16_t numPrb;
-}FreqDomainAlloc;
+}ResAllocType1;
+typedef struct resAllocType1 FreqDomainRsrc;
typedef struct
{
SchSSBPeriod ssbPeriod; /* SSB Periodicity in msec */
uint8_t ssbSubcOffset; /* Subcarrier Offset(Kssb) */
uint32_t nSSBMask[SCH_SSB_MASK_SIZE]; /* Bitmap for actually transmitted SSB. */
+
+ /*Ref:Spec 38.331 "ssb-PositionsInBurst", Value 0 in Bitmap => corresponding SS/PBCH block is not transmitted
+ *value 1 => corresponding SS/PBCH block is transmitted*/
+ uint8_t totNumSsb; /*S = Total Number of Actual SSB transmitted*/
}SchSsbCfg;
+/* Reference -> O-RAN.WG8.AAD.0-v07.00, Table 9-32 BWP Information */
typedef struct bwpCfg
{
uint8_t subcarrierSpacing;
uint8_t cyclicPrefix;
- FreqDomainAlloc freqAlloc;
+ FreqDomainRsrc freqAlloc;
}BwpCfg;
typedef struct prg
{
uint8_t resourceAllocType;
/* since we are using type-1, rbBitmap excluded */
- FreqDomainAlloc freqAlloc;
+ uint8_t rbBitmap[36];
+ uint16_t startPrb;
+ uint16_t numPrb;
uint8_t vrbPrbMapping;
-} PdschFreqAlloc;
+}PdschFreqAlloc;
typedef struct pdschTimeAlloc
{
- uint8_t rowIndex;
- TimeDomainAlloc timeAlloc;
+ uint8_t rowIndex;
+ uint16_t startSymb;
+ uint16_t numSymb;
} PdschTimeAlloc;
typedef struct txPowerPdschInfo
uint8_t powerControlOffsetSS;
} TxPowerPdschInfo;
+/* Reference -> O-RAN.WG8.AAD.0-v07.00, Table 9-43 PDSCH Configuration */
typedef struct pdschCfg
{
uint16_t pduBitmap;
/* SIB1 interface structure */
+/* Reference -> O-RAN.WG8.AAD.0-v07.00, Table 9-35 CORESET Configuration */
typedef struct coresetCfg
{
uint8_t coreSetSize;
uint8_t cceRegMappingType;
uint8_t regBundleSize;
uint8_t interleaverSize;
- uint8_t coreSetType;
uint16_t shiftIndex;
+ uint8_t coreSetType;
+ uint8_t coresetPoolIndex;
uint8_t precoderGranularity;
uint8_t cceIndex;
uint8_t aggregationLevel;
typedef struct txPowerPdcchInfo
{
- uint8_t powerValue;
+ uint8_t beta_pdcch_1_0;
uint8_t powerControlOffsetSS;
-} TxPowerPdcchInfo;
+}TxPowerPdcchInfo;
+/* Reference -> O-RAN.WG8.AAD.0-v07.00, Table 9-42 DL-DCI Configuration */
typedef struct dlDCI
{
uint16_t rnti;
BeamformingInfo beamPdcchInfo;
TxPowerPdcchInfo txPdcchPower;
PdschCfg *pdschCfg;
-} DlDCI;
+}DlDCI;
typedef struct pdcchCfg
{
/* coreset-0 configuration */
CoresetCfg coresetCfg;
-
- uint16_t numDlDci;
- DlDCI dci; /* as of now its only one DCI, later it will be numDlCi */
+ 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 pageCfg
+{
+ uint8_t numPO; /*Derived from Ns*/
+ bool poPresent; /*FirstPDCCH-MonitoringPO is present or not*/
+ uint16_t pagingOcc[MAX_PO_PER_PF]; /*FirstPDCCH-Monitoring Paging Occasion*/
+}PageCfg;
+
typedef struct
{
/* parameters recieved from DU-APP */
uint16_t sib1Mcs;
/* parameters derived in scheduler */
- uint8_t n0;
- BwpCfg bwp;
- PdcchCfg sib1PdcchCfg;
- PdschCfg sib1PdschCfg;
+ uint8_t n0;
+ BwpCfg bwp;
+ PdcchCfg sib1PdcchCfg;
+ PageCfg pageCfg; /*Config of Paging*/
}SchSib1Cfg;
typedef struct schRachCfg
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 totalNumRaPreamble; /* Total number of RA preambles */
uint8_t ssbPerRach; /* SSB per RACH occassion */
+ uint8_t numCbPreamblePerSsb; /* Number of CB preamble per SSB */
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 maxMsg3Tx; /* MAximum num of msg3 tx*/
}SchRachCfg;
typedef struct schBwpParams
{
- FreqDomainAlloc freqAlloc;
+ FreqDomainRsrc freqAlloc;
uint8_t scs;
uint8_t cyclicPrefix;
}SchBwpParams;
SchK2TimingInfoTbl k2InfoTbl;
}SchBwpUlCfg;
-typedef struct schPolicyMemberList
+typedef struct schPlmnInfoList
{
- Plmn plmn;
- Snssai snssai;
-}SchPolicyMemberList;
+ Plmn plmn;
+ uint8_t numSliceSupport; /* Total slice supporting */
+ Snssai **snssai; /* List of supporting snssai*/
+}SchPlmnInfoList;
-typedef struct schRrmPolicy
+typedef struct schHqCfgParam
{
- SchResourceType rsrcType;
- SchPolicyMemberList memberList;
- uint8_t policyMaxRatio;
- uint8_t policyMinRatio;
- uint8_t policyDedicatedRatio;
-}SchRrmPolicy;
+ uint8_t maxDlDataHqTx;
+ uint8_t maxMsg4HqTx;
+ uint8_t maxUlDataHqTx;
+}SchHqCfg;
+
+#ifdef NR_DRX
+/* The following list of structures is taken from the DRX-Config section of specification 33.331. */
+
+typedef struct schDrxOnDurationTimer
+{
+ bool onDurationTimerValInMs;
+ union
+ {
+ uint8_t subMilliSeconds;
+ uint16_t milliSeconds;
+ }onDurationtimerValue;
+}SchDrxOnDurationTimer;
+
+typedef struct schDrxLongCycleStartOffset
+{
+ uint16_t drxLongCycleStartOffsetChoice;
+ uint16_t drxLongCycleStartOffsetVal;
+}SchDrxLongCycleStartOffset;
+
+typedef struct schShortDrx
+{
+ uint16_t drxShortCycle;
+ uint8_t drxShortCycleTimer;
+}SchShortDrx;
+
+typedef struct schDrxCfg
+{
+ SchDrxOnDurationTimer drxOnDurationTimer;
+ uint16_t drxInactivityTimer;
+ uint8_t drxHarqRttTimerDl;
+ uint8_t drxHarqRttTimerUl;
+ uint16_t drxRetransmissionTimerDl;
+ uint16_t drxRetransmissionTimerUl;
+ SchDrxLongCycleStartOffset drxLongCycleStartOffset;
+ bool shortDrxPres;
+ SchShortDrx shortDrx;
+ uint8_t drxSlotOffset;
+}SchDrxCfg;
+#endif
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 */
+ SchPlmnInfoList plmnInfoList; /* Consits of PlmnId and Snssai list */
+ SchHqCfg schHqCfg;
#ifdef NR_TDD
TDDCfg tddCfg; /* TDD Cfg */
-#endif
+#endif
}SchCellCfg;
typedef struct schCellCfgCfm
{
uint16_t cellId; /* Cell Id */
- SchMacRsp rsp;
+ SchMacRsp rsp;
+ SchFailureCause cause;
}SchCellCfgCfm;
typedef struct ssbInfo
{
uint8_t ssbIdx; /* SSB Index */
- TimeDomainAlloc tdAlloc; /* Time domain allocation */
- FreqDomainAlloc fdAlloc; /* Freq domain allocation */
+ TimeDomainAlloc tdAlloc; /* Time domain allocation */
+ FreqDomainRsrc fdAlloc; /* Freq domain allocation */
}SsbInfo;
typedef struct sib1AllocInfo
{
BwpCfg bwp;
PdcchCfg sib1PdcchCfg;
- PdschCfg sib1PdschCfg;
-} Sib1AllocInfo;
+}Sib1AllocInfo;
typedef struct prachSchInfo
{
uint8_t prachFormat; /* PRACH Format */
uint8_t numRa; /* Freq domain ocassion */
uint8_t prachStartSymb; /* Freq domain ocassion */
-}PrachSchInfo;
+}SchPrachInfo;
/* Interface structure signifying DL broadcast allocation for SSB, SIB1 */
typedef struct dlBrdcstAlloc
{
+ uint16_t crnti; /* SI-RNTI */
/* Ssb transmission is determined as follows:
* 0 : No tranamission
* 1 : SSB Transmission
* 2 : SSB Repetition */
- uint8_t ssbTrans;
+ uint8_t ssbTransmissionMode;
uint8_t ssbIdxSupported;
SsbInfo ssbInfo[MAX_SSB_IDX];
+ bool systemInfoIndicator;
+ uint8_t *siContent;
/* Sib1 transmission is determined as follows:
* 0 : No tranamission
* 1 : SIB1 Transmission
* 2 : SIB1 Repetition */
- uint8_t sib1Trans;
+ uint8_t sib1TransmissionMode;
Sib1AllocInfo sib1Alloc;
}DlBrdcstAlloc;
{
uint8_t freqHopFlag;
uint16_t bwpSize;
- FreqDomainAlloc msg3FreqAlloc;
+ FreqDomainRsrc msg3FreqAlloc;
uint8_t k2Index;
uint8_t mcs;
uint8_t tpc;
uint32_t schBytes; /* Number of scheduled bytes */
}LcSchInfo;
-typedef struct dlMsgAlloc
+typedef struct dlMsgSchedInfo
{
- uint16_t crnti;
+ bool isRetx;
uint8_t numLc;
LcSchInfo lcSchInfo[MAX_NUM_LC]; /* Scheduled LC info */
BwpCfg bwp;
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 ulDciTime;
}SchSlotValue;
+typedef struct freqDomainAlloc
+{
+ uint8_t resAllocType; /* Resource allocation type */
+ union
+ {
+ ResAllocType0 type0;
+ ResAllocType1 type1;
+ }resAlloc;
+}FreqDomainAlloc;
+
+/* Reference -> O-RAN.WG8.AAD.0-v07.00, Table 9-36 DCI Format0_0 Configuration */
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;
+ uint8_t harqProcId;
bool freqHopFlag;
- uint8_t ndi; /* NDI */
- uint8_t rv; /* Redundancy Version */
+ uint8_t ndi;
+ uint8_t rvIndex;
uint8_t tpcCmd;
- bool sUlCfgd;
+ bool sulIndicator;
}Format0_0;
+/* Reference -> O-RAN.WG8.AAD.0-v07.00, Table 9-40 DCI Format 0_1 Configuration */
typedef struct format0_1
{
-/* TBD */
-
+ uint8_t carrierIndicator;
+ bool sulIndicator;
+ uint8_t bwpIndicator;
+ uint8_t resourceAlloc;
+ FreqDomainRsrc freqAlloc;
+ TimeDomainAlloc timeAlloc;
+ uint16_t rowIndex;
+ uint8_t mcs;
+ uint8_t harqProcId;
+ bool freqHopFlag;
+ uint8_t ndi;
+ uint8_t rvIndex;
+ uint8_t firstDownlinkAssignmentIndex;
+ uint8_t secondDownlinkAssignmentIndex;
+ uint8_t tpcCommand;
+ uint8_t srsResourceSetIndicator;
+ uint8_t srsResourceIndicator;
+ uint8_t tpmi;
+ uint8_t antennaPorts;
+ uint8_t srsRequest;
+ uint8_t csiRequest;
+ uint8_t cbgTransmissionInfo;
+ uint8_t ptrsDmrs;
+ uint8_t betaOffsetIndicator;
+ bool dmrsSequenceInitialization;
+ bool ulschIndicatior;
}Format0_1;
-typedef struct format1_0
-{
-/* TBD */
-
-}Format1_0;
-
-typedef struct format1_1
-{
-/* TBD */
-}Format1_1;
-
-typedef struct dciInfo
+typedef struct dciFormat
{
- 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 */
+ 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;
+}DciFormat;
+
+typedef struct dciInfo
+{
+ uint16_t crnti; /* CRNTI */
+ BwpCfg bwpCfg; /* BWP Cfg */
+ CoresetCfg coresetCfg; /* Coreset1 Cfg */
+ DciFormat dciFormatInfo; /* Dci Format */
+ DlDCI dciInfo; /* DlDCI */
}DciInfo;
+/* Reference -> O-RAN.WG8.AAD.0-v07.00, Section 11.2.4.3.8 DL Scheduling Information */
typedef struct dlSchedInfo
{
- uint16_t cellId; /* Cell Id */
+ uint16_t cellId; /* Cell Id */
SchSlotValue schSlotValue;
/* Allocation for broadcast messages */
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;
+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 */
+ uint8_t mcs; /* MCS */
+ uint8_t ndi; /* NDI */
+ uint8_t rv; /* Redundancy Version */
+ uint16_t tbSize; /* TB Size */
+ uint8_t qamOrder; /* Modulation Order */
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 */
+#ifdef INTEL_FAPI
uint8_t dmrsMappingType;
uint8_t nrOfDmrsSymbols;
uint8_t dmrsAddPos;
+#endif
}SchPuschInfo;
+typedef struct harqInfo
+{
+ uint16_t harqAckBitLength;
+ uint8_t betaOffsetHarqAck;
+}HarqInfo;
+
+typedef struct csiInfo
+{
+ uint16_t csiBits;
+ uint8_t betaOffsetCsi;
+}CsiInfo;
+
+typedef struct harqAckInfo
+{
+ uint16_t harqBitLength;
+}HarqFdbkInfo;
+
+typedef struct csiPartInfo
+{
+ uint16_t csiBits;
+}csiFdbkInfo;
+
typedef struct schPucchFormatCfg
{
uint8_t interSlotFreqHop;
typedef struct schPucchInfo
{
- uint16_t rnti;
- uint8_t pucchFormat;
- FreqDomainAlloc fdAlloc; /* Freq domain allocation */
- TimeDomainAlloc tdAlloc; /* Time domain allocation */
+ FreqDomainAlloc fdAlloc;
+ TimeDomainAlloc tdAlloc;
uint8_t srFlag;
- uint8_t harqFlag;
- uint8_t numHarqBits;
- uint8_t uciFlag;
- uint8_t numUciBits;
+ HarqFdbkInfo harqInfo;
+ csiFdbkInfo csiInfo;
+ BeamformingInfo beamPucchInfo;
+ uint8_t pucchFormat;
uint8_t intraFreqHop;
uint16_t secondPrbHop;
uint8_t initialCyclicShift;
uint8_t occLen;
uint8_t occIdx;
uint8_t timeDomOCC;
- SchPucchFormatCfg cmnFormatCfg;
+ uint8_t addDmrs;
+ bool pi2BPSK;
}SchPucchInfo;
+typedef struct schPuschUci
+{
+ uint8_t harqProcId; /* HARQ Process ID */
+ FreqDomainAlloc fdAlloc; /* Freq domain allocation */
+ TimeDomainAlloc tdAlloc; /* Time domain allocation */
+ TbInfo tbInfo; /* TB information */
+ HarqInfo harqInfo; /* Harq Information */
+ CsiInfo csiInfo; /* Csi information*/
+}SchPuschUci;
+
typedef struct ulSchedInfo
{
- uint16_t cellId; /* Cell Id */
- uint16_t crnti; /* CRNI */
+ 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 */
+ uint8_t dataType; /* Type of info being scheduled */
+ SchPrachInfo prachSchInfo; /* Prach scheduling info */
+ SchPuschInfo schPuschInfo; /* Pusch scheduling info */
+ SchPuschUci schPuschUci; /* Pusch Uci */
+ SchPucchInfo schPucchInfo; /* Pucch and Uci scheduling info */
}UlSchedInfo;
typedef struct rachIndInfo
SchSchedReqCfg schedReqCfg;
SchTagCfg tagCfg;
SchPhrCfg phrCfg; /* To be used only if phrCfgSetupPres is true */
+#ifdef NR_DRX
+ bool drxCfgPresent;
+ SchDrxCfg drxCfg; /* Drx configuration */
+#endif
}SchMacCellGrpCfg;
/* Physical Cell Group Configuration */
SchPdcchConfig pdcchCfg;
bool pdschCfgPres;
SchPdschConfig pdschCfg;
+ bool k0K1TblPrsnt;
SchK0K1TimingInfoTbl k0K1InfoTbl;
}SchInitalDlBwp;
SchPucchCfg pucchCfg;
bool puschCfgPres;
SchPuschCfg puschCfg;
+ bool k2TblPrsnt;
SchK2TimingInfoTbl k2InfoTbl;
}SchInitialUlBwp;
uint8_t bwpId;
}SchUlBwpInfo;
+/* Serving cell configuration */
+typedef struct schServCellRecfgInfo
+{
+ SchInitalDlBwp initDlBwp;
+ uint8_t numDlBwpToAddOrMod;
+ SchDlBwpInfo dlBwpToAddOrModList[MAX_NUM_BWP];
+ uint8_t numDlBwpToRel;
+ SchDlBwpInfo dlBwpToRelList[MAX_NUM_BWP];
+ uint8_t firstActvDlBwpId;
+ uint8_t defaultDlBwpId;
+ uint8_t *bwpInactivityTmr;
+ SchPdschServCellCfg pdschServCellCfg;
+ SchInitialUlBwp initUlBwp;
+ uint8_t numUlBwpToAddOrMod;
+ SchUlBwpInfo ulBwpToAddOrModList[MAX_NUM_BWP];
+ uint8_t numUlBwpToRel;
+ SchUlBwpInfo ulBwpToRelList[MAX_NUM_BWP];
+ uint8_t firstActvUlBwpId;
+}SchServCellRecfgInfo;
+
/* Serving cell configuration */
typedef struct schServCellCfgInfo
{
SchInitalDlBwp initDlBwp;
uint8_t numDlBwpToAdd;
- SchDlBwpInfo DlBwpToAddList[MAX_NUM_BWP];
+ 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];
+ SchUlBwpInfo ulBwpToAddList[MAX_NUM_BWP];
uint8_t firstActvUlBwpId;
}SchServCellCfgInfo;
SchServCellCfgInfo servCellCfg;
}SchSpCellCfg;
+/* Special cell Reconfiguration */
+typedef struct schSpCellRecfg
+{
+ uint8_t servCellIdx;
+ SchServCellRecfgInfo servCellRecfg;
+}SchSpCellRecfg;
+
/* Uplink logical channel configuration */
typedef struct SchUlLcCfg
{
/* Logical Channel configuration */
typedef struct schLcCfg
{
- ConfigType configType;
uint8_t lcId;
- SchDrbQosInfo *drbQos;
Snssai *snssai;
+ SchDrbQosInfo *drbQos;
SchDlLcCfg dlLcCfg;
SchUlLcCfg ulLcCfg;
}SchLcCfg;
}SchModulationInfo;
/* UE configuration */
-typedef struct schUeCfg
+typedef struct schUeCfgReq
{
uint16_t cellId;
+ uint8_t ueId;
+ uint8_t beamIdx;
uint16_t crnti;
bool macCellGrpCfgPres;
SchMacCellGrpCfg macCellGrpCfg;
SchAmbrCfg *ambrCfg;
SchModulationInfo dlModInfo;
SchModulationInfo ulModInfo;
- uint8_t numLcs;
+ uint8_t numLcsToAdd;
SchLcCfg schLcCfg[MAX_NUM_LC];
-}SchUeCfg;
+}SchUeCfgReq;
+
+/* UE Re-configuration */
+typedef struct schUeRecfgReq
+{
+ uint16_t cellId;
+ uint8_t ueId;
+ uint8_t beamIdx;
+ uint16_t crnti;
+ bool macCellGrpRecfgPres;
+ SchMacCellGrpCfg macCellGrpRecfg;
+ bool phyCellGrpRecfgPres;
+ SchPhyCellGrpCfg phyCellGrpRecfg;
+ bool spCellRecfgPres;
+ SchSpCellRecfg spCellRecfg;
+ SchAmbrCfg *ambrRecfg;
+ SchModulationInfo dlModInfo;
+ SchModulationInfo ulModInfo;
+ uint8_t numLcsToAdd;
+ SchLcCfg schLcCfgAdd[MAX_NUM_LC];
+ uint8_t numLcsToDel;
+ uint8_t lcIdToDel[MAX_NUM_LC];
+ uint8_t numLcsToMod;
+ SchLcCfg schLcCfgMod[MAX_NUM_LC];
+ SchDataTransmission dataTransmissionInfo;
+#ifdef NR_DRX
+ bool drxConfigIndicatorRelease;
+#endif
+}SchUeRecfgReq;
typedef struct schUeCfgRsp
{
- uint16_t ueIdx;
uint16_t cellId;
+ uint8_t beamIdx;
+ uint16_t ueId;
uint16_t crnti;
SchMacRsp rsp;
SchFailureCause cause;
}SchUeCfgRsp;
+/*As per WG8, UE ReCFG and UECFG have same structure definition*/
+typedef struct schUeCfgRsp SchUeRecfgRsp;
+
+typedef struct schRachRsrcReq
+{
+ SlotTimingInfo slotInd;
+ 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
+{
+ SlotTimingInfo slotInd;
+ uint16_t cellId;
+ uint16_t crnti;
+ SchCfraResource cfraResource;
+}SchRachRsrcRel;
+
typedef struct schUeDelete
{
uint16_t cellId;
ErrorCause cause;
}SchUeDeleteRsp;
-typedef struct schCellDelete
+typedef struct schCellDeleteReq
{
uint16_t cellId;
-}SchCellDelete;
+}SchCellDeleteReq;
typedef struct schCellDeleteRsp
{
- uint16_t cellId;
- SchMacRsp rsp;
+ uint16_t cellId;
+ SchMacRsp rsp;
+ SchFailureCause cause;
}SchCellDeleteRsp;
typedef struct dataVolInfo
uint8_t srPayload[MAX_SR_BITS_IN_BYTES];
}SrUciIndInfo;
-/* 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 (*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 struct dlHarqInd
+{
+ uint16_t cellId;
+ uint16_t crnti;
+ SlotTimingInfo slotInd;
+ uint8_t numHarq;
+ uint8_t harqPayload[MAX_HARQ_BITS_IN_BYTES];
+}DlHarqInd;
-typedef uint8_t (*MacSchSlotIndFunc) ARGS((
- Pst *pst, /* Post structure */
- SlotTimingInfo *slotInd)); /* Slot Info */
+typedef struct schRrmPolicyRatio
+{
+ uint8_t maxRatio;
+ uint8_t minRatio;
+ uint8_t dedicatedRatio;
+}SchRrmPolicyRatio;
-typedef uint8_t (*MacSchBsrFunc) ARGS((
- Pst *pst,
- UlBufferStatusRptInd *bsrInd
-));
+typedef struct schRrmPolicyOfSlice
+{
+ Snssai snssai;
+ SchRrmPolicyRatio rrmPolicyRatioInfo;
+}SchRrmPolicyOfSlice;
-typedef uint8_t (*MacSchSrUciIndFunc) ARGS((
- Pst *pst, /* Post structure */
- SrUciIndInfo *uciInd)); /* UCI IND Info */
+typedef struct schSliceCfgReq
+{
+ uint8_t numOfConfiguredSlice;
+ SchRrmPolicyOfSlice **listOfSlices;
+}SchSliceCfgReq;
-typedef uint8_t (*MacSchModUeConfigReqFunc) ARGS((
- Pst *pst, /* Post structure */
- SchUeCfg *ueCfgToSch)); /* Scheduler UE Cfg */
+typedef struct sliceRsp
+{
+ Snssai snssai;
+ SchMacRsp rsp;
+ RspCause cause;
+}SliceRsp;
-typedef uint8_t (*SchUeReCfgRspFunc) ARGS((
- Pst *pst, /* Post structure */
- SchUeCfgRsp *cfgRsp)); /* Scheduler UE Cfg response */
+typedef struct schSliceCfgRsp
+{
+ uint8_t numSliceCfgRsp;
+ SliceRsp **listOfSliceCfgRsp;
+}SchSliceCfgRsp;
-typedef uint8_t (*MacSchUeDeleteReqFunc) ARGS((
- Pst *pst, /* Post structure */
- SchUeDelete *schUeDel)); /*Scheduler UE Del*/
+/*As per ORAN-WG8, Slice Cfg and Recfg are same structures*/
+typedef struct schSliceCfgReq SchSliceRecfgReq;
+typedef struct schSliceCfgRsp SchSliceRecfgRsp;
-typedef uint8_t (*SchUeDeleteRspFunc) ARGS((
- Pst *pst, /* Post structure */
- SchUeDeleteRsp *delRsp)); /* Scheduler UE delete response */
+typedef struct schPageInd
+{
+ uint16_t cellId;
+ uint16_t pf;
+ uint8_t i_s;
+ uint16_t pduLen;
+ uint8_t *pagePdu;
+}SchPageInd;
-typedef uint8_t (*MacSchCellDeleteReqFunc) ARGS((
- Pst *pst, /* Post structure */
- SchCellDelete *schCellDelete)); /*Scheduler UE Del*/
+typedef struct schUeHqInfo
+{
+ uint16_t crnti;
+ uint8_t hqProcId;
+}SchUeHqInfo;
-typedef uint8_t (*SchCellDeleteRspFunc) ARGS((
- Pst *pst, /* Post structure */
- SchCellDeleteRsp *schCellDeleteRsp)); /* Scheduler UE delete response */
+typedef struct schRlsHqInfo
+{
+ uint16_t cellId;
+ uint8_t numUes;
+ SchUeHqInfo *ueHqInfo;
+}SchRlsHqInfo;
/* 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 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 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 MacMessageRouter(Pst *pst, void *msg);
+uint8_t SchMessageRouter(Pst *pst, void *msg);
/**********************************************************************
End of file