/* events */
#define EVENT_SCH_CELL_CFG 1
#define EVENT_SCH_CELL_CFG_CFM 2
-#define EVENT_DL_ALLOC 3
+#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_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_LONG_BSR 19
+#define EVENT_SLICE_CFG_REQ_TO_SCH 20
+#define EVENT_SLICE_CFG_RSP_TO_MAC 21
+#define EVENT_SLICE_RECFG_REQ_TO_SCH 22
+#define EVENT_SLICE_RECFG_RSP_TO_MAC 23
/*macros*/
-#define NO_SSB 0
-#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
-#define SIB1_REPITITION 2
-
#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 MAX_NUM_PUCCH_P0_PER_SET 8
#define MAX_NUM_PATH_LOSS_REF_RS 4
#define MAX_NUM_DL_DATA_TO_UL_ACK 15
-#define SD_SIZE 3
+#define QPSK_MODULATION 2
+
+#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 MAX_NUM_K1_IDX 8 /* As per spec 38.213 section 9.2.3 Max number of PDSCH-to-HARQ resource indication */
+#define MIN_NUM_K1_IDX 4 /* Min K1 values */
+#define MAX_NUM_K2_IDX 16 /* PUSCH time domain UL resource allocation list */
+#define DEFAULT_K0_VALUE 0 /* As per 38.331, PDSCH-TimeDomainResourceAllocation field descriptions */
+/* As per 38.331, PUSCH-TimeDomainResourceAllocationList field descriptions */
+#define DEFAULT_K2_VALUE_FOR_SCS15 1
+#define DEFAULT_K2_VALUE_FOR_SCS30 1
+#define DEFAULT_K2_VALUE_FOR_SCS60 2
+#define DEFAULT_K2_VALUE_FOR_SCS120 3
#define ADD_DELTA_TO_TIME(crntTime, toFill, incr) \
{ \
} \
}
+typedef enum
+{
+ PRB_RSRC,
+ DRB_RSRC,
+ RRC_CONNECTED_USERS_RSRC
+}SchResourceType;
+
+typedef enum
+{
+ SLICE_FOUND,
+ SLICE_NOT_FOUND
+}RspCause;
+
+typedef enum
+{
+ NO_TRANSMISSION,
+ NEW_TRANSMISSION,
+ REPEATITION
+}PduTxOccsaion;
+
typedef enum
{
UNSPECIFIED_CAUSE,
SCH_MCS_TABLE_QAM_64_LOW_SE
}SchMcsTable;
+typedef enum
+{
+ NONE,
+ PDCCH_PDU,
+ PDSCH_PDU,
+ BOTH
+}DlPduType;
+
/*structures*/
typedef struct timeDomainAlloc
{
typedef struct schSearchSpaceCfg
{
- uint8_t searchSpaceId;
- uint8_t coresetId;
+ uint8_t searchSpaceId;
+ uint8_t coresetId;
+ uint8_t freqDomainRsrc[FREQ_DOM_RSRC_SIZE]; /* Frequency domain resource */
uint16_t monitoringSlot;
uint16_t duration;
uint16_t monitoringSymbol;
uint8_t raSearchSpaceId;
}SchPdcchCfgCmn;
-typedef struct schPdschCfgCmn
+typedef struct schPdschCfgCmnTimeDomRsrcAlloc
{
uint8_t k0;
uint8_t mappingType;
uint8_t startSymbol;
uint8_t lengthSymbol;
+}SchPdschCfgCmnTimeDomRsrcAlloc;
+
+typedef struct schPdschCfgCmn
+{
+ uint8_t numTimeDomAlloc;
+ SchPdschCfgCmnTimeDomRsrcAlloc timeDomRsrcAllocList[MAX_NUM_DL_ALLOC];
}SchPdschCfgCmn;
typedef struct schPucchCfgCmn
uint8_t pucchGroupHopping;
}SchPucchCfgCmn;
+/* PUSCH Time Domain Resource Allocation */
+typedef struct schPuschTimeDomRsrcAlloc
+{
+ uint8_t k2;
+ SchTimeDomRsrcAllocMappingType mappingType;
+ uint8_t startSymbol;
+ uint8_t symbolLength;
+}SchPuschTimeDomRsrcAlloc;
+
typedef struct schPuschCfgCmn
{
- uint8_t k2;
- uint8_t mappingType;
- uint8_t startSymbol;
- uint8_t lengthSymbol;
+ uint8_t numTimeDomRsrcAlloc;
+ SchPuschTimeDomRsrcAlloc timeDomRsrcAllocList[MAX_NUM_UL_ALLOC]; /* PUSCH time domain UL resource allocation list */
}SchPuschCfgCmn;
+typedef struct schK1TimingInfo
+{
+ uint8_t numK1;
+ uint8_t k1Indexes[MAX_NUM_K1_IDX];
+}SchK1TimingInfo;
+
+typedef struct schK0TimingInfo
+{
+ uint8_t k0Index;
+ SchK1TimingInfo k1TimingInfo;
+}SchK0TimingInfo;
+
+typedef struct schK0K1TimingInfo
+{
+ uint8_t numK0;
+ SchK0TimingInfo k0Indexes[MAX_NUM_K0_IDX];
+}SchK0K1TimingInfo;
+
+typedef struct schK0K1TimingInfoTbl
+{
+ uint16_t tblSize;
+ SchK0K1TimingInfo k0k1TimingInfo[MAX_NUM_CONFIG_SLOTS];
+}SchK0K1TimingInfoTbl;
+
typedef struct schBwpDlCfg
{
SchBwpParams bwp;
SchPdcchCfgCmn pdcchCommon;
SchPdschCfgCmn pdschCommon;
+ SchK0K1TimingInfoTbl k0K1InfoTbl;
}SchBwpDlCfg;
+typedef struct schK2TimingInfo
+{
+ uint8_t numK2;
+ uint8_t k2Indexes[MAX_NUM_K2_IDX];
+}SchK2TimingInfo;
+
+typedef struct schK2TimingInfoTbl
+{
+ uint16_t tblSize;
+ SchK2TimingInfo k2TimingInfo[MAX_NUM_CONFIG_SLOTS];
+}SchK2TimingInfoTbl;
+
typedef struct schBwpUlCfg
{
SchBwpParams bwp;
SchPucchCfgCmn pucchCommon;
SchPuschCfgCmn puschCommon;
+ SchK2TimingInfoTbl msg3K2InfoTbl;
+ SchK2TimingInfoTbl k2InfoTbl;
}SchBwpUlCfg;
+typedef struct schPlmnInfoList
+{
+ Plmn plmn;
+ uint8_t numSliceSupport; /* Total slice supporting */
+ Snssai **snssai; /* List of supporting snssai*/
+}SchPlmnInfoList;
+
typedef struct schCellCfg
{
uint16_t cellId; /* Cell Id */
SchRachCfg schRachCfg; /* PRACH config */
SchBwpDlCfg schInitialDlBwp; /* Initial DL BWP */
SchBwpUlCfg schInitialUlBwp; /* Initial UL BWP */
+ SchPlmnInfoList plmnInfoList; /* Consits of PlmnId and Snssai list */
#ifdef NR_TDD
TDDCfg tddCfg; /* TDD Cfg */
-#endif
+#endif
}SchCellCfg;
typedef struct schCellCfgCfm
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;
- FreqDomainAlloc msg3FreqAlloc;
+ Msg3UlGrant ulGrant;
uint16_t tcrnti;
- uint8_t rarPdu[8];
+ uint8_t rarPdu[RAR_PAYLOAD_SIZE];
uint8_t rarPduLen;
}RarInfo;
typedef struct rarAlloc
{
+ DlPduType pduPres;
+ uint8_t pdschSlot;
RarInfo rarInfo;
BwpCfg bwp;
PdcchCfg rarPdcchCfg;
uint32_t schBytes; /* Number of scheduled bytes */
}LcSchInfo;
-typedef struct dlMsgAlloc
+typedef struct dlMsgSchedInfo
{
- uint16_t crnti;
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
{
- SlotIndInfo currentTime;
- SlotIndInfo broadcastTime;
- SlotIndInfo rarTime;
- SlotIndInfo dlMsgTime;
- SlotIndInfo ulDciTime;
+ SlotTimingInfo currentTime;
+ SlotTimingInfo broadcastTime;
+ SlotTimingInfo rarTime;
+ SlotTimingInfo dlMsgTime;
+ SlotTimingInfo ulDciTime;
}SchSlotValue;
typedef struct format0_0
{
uint16_t cellId;
uint16_t crnti; /* CRNI */
- SlotIndInfo slotIndInfo; /* Slot Info: sfn, slot number */
+ SlotTimingInfo slotIndInfo; /* Slot Info: sfn, slot number */
BwpCfg bwpCfg; /* BWP Cfg */
CoresetCfg coresetCfg; /* Coreset1 Cfg */
FormatType formatType; /* DCI Format */
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;
{
uint16_t cellId; /* Cell Id */
uint16_t crnti; /* CRNI */
- SlotIndInfo slotIndInfo; /* Slot Info: sfn, slot number */
+ 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 */
{
uint16_t cellId;
uint16_t crnti;
- SlotIndInfo timingInfo;
+ SlotTimingInfo timingInfo;
uint8_t slotIdx;
uint8_t symbolIdx;
uint8_t freqIdx;
{
uint16_t cellId;
uint16_t crnti;
- SlotIndInfo timingInfo;
+ SlotTimingInfo timingInfo;
uint16_t numCrcInd;
uint8_t crcInd[MAX_NUMBER_OF_CRC_IND_BITS];
}CrcIndInfo;
/* PDSCH time domain resource allocation */
typedef struct schPdschTimeDomRsrcAlloc
{
+ uint8_t *k0;
SchTimeDomRsrcAllocMappingType mappingType;
uint8_t startSymbol;
uint8_t symbolLength;
SchPdcchConfig pdcchCfg;
bool pdschCfgPres;
SchPdschConfig pdschCfg;
+ bool k0K1TblPrsnt;
+ SchK0K1TimingInfoTbl k0K1InfoTbl;
}SchInitalDlBwp;
/* BWP Downlink common */
SchTransPrecodDisabled transPrecodDisabled; /* Transform precoding disabled */
}SchDmrsUlCfg;
-/* PUSCH Time Domain Resource Allocation */
-typedef struct schPuschTimeDomRsrcAlloc
-{
- uint8_t k2;
- SchTimeDomRsrcAllocMappingType mappingType;
- uint8_t startSymbol;
- uint8_t symbolLength;
-}SchPuschTimeDomRsrcAlloc;
-
/* PUSCH Configuration */
typedef struct schPuschCfg
{
SchPucchCfg pucchCfg;
bool puschCfgPres;
SchPuschCfg puschCfg;
+ bool k2TblPrsnt;
+ SchK2TimingInfoTbl k2InfoTbl;
}SchInitialUlBwp;
/* Uplink BWP information */
uint32_t ulPduSessAggMaxBitRate; /* UL PDU Session Aggregate max bit rate */
}SchDrbQosInfo;
-typedef struct schSnssai
-{
- uint8_t sst;
- uint8_t sd[SD_SIZE];
-}SchSnssai;
-
/* Special cell configuration */
typedef struct schSpCellCfg
{
ConfigType configType;
uint8_t lcId;
SchDrbQosInfo *drbQos;
- SchSnssai *snssai;
+ Snssai *snssai;
SchDlLcCfg dlLcCfg;
SchUlLcCfg ulLcCfg;
}SchLcCfg;
typedef struct schUeCfgRsp
{
- uint16_t ueIdx;
+ uint16_t ueId;
uint16_t cellId;
uint16_t crnti;
SchMacRsp rsp;
typedef struct schUeDeleteRsp
{
- uint16_t cellId;
- uint16_t crnti;
- SchMacRsp rsp;
- ErrorCause cause;
+ 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
{
{
uint16_t cellId;
uint16_t crnti;
- SlotIndInfo slotInd;
+ SlotTimingInfo slotInd;
uint8_t numSrBits;
uint8_t srPayload[MAX_SR_BITS_IN_BYTES];
}SrUciIndInfo;
-/* function pointers */
+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;
+
+/* function pointers */
typedef uint8_t (*SchCellCfgCfmFunc) ARGS((
Pst *pst, /* Post Structure */
SchCellCfgCfm *schCellCfgCfm /* Cell Cfg Cfm */
typedef uint8_t (*MacSchSlotIndFunc) ARGS((
Pst *pst, /* Post structure */
- SlotIndInfo *slotInd)); /* Slot Info */
+ SlotTimingInfo *slotInd)); /* Slot Info */
typedef uint8_t (*MacSchBsrFunc) ARGS((
Pst *pst,
typedef uint8_t (*SchUeReCfgRspFunc) ARGS((
Pst *pst, /* Post structure */
SchUeCfgRsp *cfgRsp)); /* Scheduler UE Cfg response */
+
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 */
+ 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 */
+ ));
/* function declarations */
-uint8_t packMacSchSlotInd(Pst *pst, SlotIndInfo *slotInd);
+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 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 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, SlotIndInfo * slotInd));
-uint8_t packMacSchSlotInd(Pst * pst, SlotIndInfo * slotInd);
+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 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);
/**********************************************************************
End of file
**********************************************************************/