1 /*******************************************************************************
2 ################################################################################
3 # Copyright (c) [2017-2019] [Radisys] #
5 # Licensed under the Apache License, Version 2.0 (the "License"); #
6 # you may not use this file except in compliance with the License. #
7 # You may obtain a copy of the License at #
9 # http://www.apache.org/licenses/LICENSE-2.0 #
11 # Unless required by applicable law or agreed to in writing, software #
12 # distributed under the License is distributed on an "AS IS" BASIS, #
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
14 # See the License for the specific language governing permissions and #
15 # limitations under the License. #
16 ################################################################################
17 *******************************************************************************/
20 #define EVENT_SCH_CELL_CFG 1
21 #define EVENT_SCH_CELL_CFG_CFM 2
24 #define MAC_SCH_LC_SELECTOR 0
25 #define MAC_SCH_TC_SELECTOR 1
26 #define MAC_SCH_LWLC_SELECTOR 2
30 #define SSB_TRANSMISSION 1
32 #define MAX_SSB_IDX 1 /* forcing it as 1 for now. Right value is 64 */
35 #define SIB1_TRANSMISSION 1
36 #define SIB1_REPITITION 2
38 #define MAX_NUM_PRG 1 /* max value should be later 275 */
39 #define MAX_DIG_BF_INTERFACES 0 /* max value should be later 255 */
40 #define MAX_CODEWORDS 1 /* max should be 2 */
53 uint32_t ssbPbchPwr; /* SSB block power */
54 uint8_t scsCommon; /* subcarrier spacing for common [0-3]*/
55 uint8_t ssbOffsetPointA; /* SSB sub carrier offset from point A */
56 SSBPeriod ssbPeriod; /* SSB Periodicity in msec */
57 uint8_t ssbSubcOffset; /* Subcarrier Offset(Kssb) */
58 uint32_t nSSBMask[SSB_MASK_SIZE]; /* Bitmap for actually transmitted SSB. */
63 uint8_t subcarrierSpacing;
72 uint16_t beamIdx[MAX_DIG_BF_INTERFACES];
75 typedef struct beamformingInfo
79 uint8_t digBfInterfaces;
83 /* SIB1 PDSCH structures */
85 typedef struct codewordinfo
87 uint16_t targetCodeRate;
95 typedef struct dmrsInfo
97 uint16_t dlDmrsSymbPos;
98 uint8_t dmrsConfigType;
99 uint16_t dlDmrsScramblingId;
101 uint8_t numDmrsCdmGrpsNoData;
105 typedef struct pdschFreqAlloc
107 uint8_t resourceAlloc;
108 /* since we are using type-1, hence rbBitmap excluded */
111 uint8_t vrbPrbMapping;
114 typedef struct pdschTimeAlloc
117 uint8_t startSymbolIndex;
121 typedef struct txPowerPdschInfo
123 uint8_t powerControlOffset;
124 uint8_t powerControlOffsetSS;
127 typedef struct sib1PdschCfg
132 BwpCfg sib1PdschBwpCfg;
133 uint8_t numCodewords;
134 CodewordInfo codeword[MAX_CODEWORDS];
135 uint16_t dataScramblingId;
137 uint8_t transmissionScheme;
140 PdschFreqAlloc sib1FreqAlloc;
141 PdschTimeAlloc sib1TimeAlloc;
142 BeamformingInfo beamPdschInfo;
143 TxPowerPdschInfo txPdschPower;
145 /* SIB1 PDSCH structures end */
147 /* SIB1 interface structure */
149 typedef struct coresetCfg
151 uint8_t coreSet0Size;
152 uint8_t startSymbolIndex;
153 uint8_t durationSymbols;
154 uint8_t freqDomainResource[6];
155 uint8_t cceRegMappingType;
156 uint8_t regBundleSize;
157 uint8_t interleaverSize;
160 uint8_t precoderGranularity;
162 uint8_t aggregationLevel;
165 typedef struct txPowerPdcchInfo
168 uint8_t powerControlOffsetSS;
174 uint16_t scramblingId;
175 uint16_t scramblingRnti;
178 BeamformingInfo beamPdcchInfo;
179 TxPowerPdcchInfo txPdcchPower;
180 Sib1PdschCfg *pdschCfg;
183 typedef struct sib1PdcchCfg
185 BwpCfg sib1PdcchBwpCfg;
186 /* coreset-0 configuration */
187 CoresetCfg sib1Coreset0Cfg;
190 DlDCI sib1DlDci; /* as of now its only one DCI, later it will be numDlCi */
192 /* end of SIB1 PDCCH structures */
196 /* parameters recieved from DU-APP */
198 uint16_t sib1NewTxPeriod;
199 uint16_t sib1RepetitionPeriod;
200 uint8_t coresetZeroIndex; /* derived from 4 LSB of pdcchSib1 present in MIB */
201 uint8_t searchSpaceZeroIndex; /* derived from 4 MSB of pdcchSib1 present in MIB */
204 /* parameters derived in scheduler */
206 Sib1PdcchCfg sib1PdcchCfg;
207 Sib1PdschCfg sib1PdschCfg;
210 typedef struct schRachCfg
212 uint8_t prachCfgIdx; /* PRACH config idx */
213 uint8_t prachSubcSpacing; /* Subcarrier spacing of RACH */
214 uint8_t prachSeqLen; /* Support for PRACH long/short format */
215 uint16_t msg1FreqStart; /* Msg1-FrequencyStart */
216 uint8_t msg1Fdm; /* PRACH FDM (1,2,4,8) */
217 uint8_t maxPrachOcassionsInSlot; /* Number of PRACH ocassions per slot */
218 uint8_t numPrachFdOccasions; /*Number of PRACH ocassions in freq domain */
219 uint16_t rootSeqIdx; /* Root sequence index */
220 uint8_t numRootSeq; /* Number of root sequences required for FD */
221 uint16_t k1; /* Frequency Offset for each FD */
222 uint8_t ssbPerRach; /* SSB per RACH occassion */
223 uint8_t prachMultCarrBand; /* Presence of Multiple carriers in Band */
224 uint8_t raContResTmr; /* RA Contention Resoultion Timer */
225 uint8_t rsrpThreshSsb; /* RSRP Threshold SSB */
226 uint8_t raRspWindow; /* RA Response Window */
229 typedef struct schCellCfg
231 uint16_t cellId; /* Cell Id */
232 uint16_t phyCellId; /* Physical cell id */
233 uint8_t bandwidth; /* Supported B/W */
234 DuplexMode dupMode; /* Duplex type: TDD/FDD */
235 SchSsbCfg ssbSchCfg; /* SSB config */
236 SchSib1Cfg sib1SchCfg; /* SIB1 config */
237 SchRachCfg schRachCfg; /* PRACH config */
240 typedef struct schCellCfgCfm
242 U16 cellId; /* Cell Id */
246 typedef struct timeDomainAlloc
248 uint16_t ssbStartSymbIdx;
249 uint16_t ssbSymbolDuration;
252 typedef struct freqDomainAlloc
254 uint16_t ssbStartPrbIdx;
255 uint16_t ssbPrbDuration;
258 typedef struct ssbInfo
260 uint8_t ssbIdx; /* SSB Index */
261 TimeDomainAlloc tdAlloc; /* Time domain allocation */
262 FreqDomainAlloc fdAlloc; /* Freq domain allocation */
265 typedef struct sib1AllocInfo
267 Sib1PdcchCfg sib1PdcchCfg;
268 Sib1PdschCfg sib1PdschCfg;
271 /* Interface structure signifying DL broadcast allocation for SSB, SIB1 */
272 typedef struct dlBrdcstAlloc
274 uint16_t cellId; /* Cell Id */
275 SlotIndInfo slotIndInfo; /* Slot Info: sfn, slot number */
276 /* Ssb transmission is determined as follows:
277 * 0 : No tranamission
278 * 1 : SSB Transmission
279 * 2 : SSB Repetition */
281 uint8_t ssbIdxSupported;
282 SsbInfo ssbInfo[MAX_SSB_IDX];
283 /* Sib1 transmission is determined as follows:
284 * 0 : No tranamission
285 * 1 : SIB1 Transmission
286 * 2 : SIB1 Repetition */
288 Sib1AllocInfo sib1Alloc;
291 /* function pointers */
293 typedef int (*SchMacDlBrdcstAllocFunc) ARGS((
294 Pst *pst, /* Post Structure */
295 DlBrdcstAlloc *dlBrdcstAlloc /* slot ind Info */
298 typedef int (*SchCellCfgCfmFunc) ARGS((
299 Pst *pst, /* Post Structure */
300 SchCellCfgCfm *schCellCfgCfm /* Cell Cfg Cfm */
303 typedef int (*SchCellCfgFunc) ARGS((
304 Pst *pst, /* Post Structure */
305 SchCellCfg *schCellCfg /* Cell Cfg */
307 /* function declarations */
308 int packMacSchSlotInd(Pst *pst, SlotIndInfo *slotInd);
309 int packSchMacDlBrdcstAlloc(Pst *pst, DlBrdcstAlloc *dlBrdcstAlloc);
310 EXTERN int packSchCellCfg(Pst *pst, SchCellCfg *schCellCfg);
311 EXTERN int packSchCellCfgCfm(Pst *pst, SchCellCfgCfm *schCellCfgCfm);
313 EXTERN int MacProcDlBrdcstAlloc(Pst *pst, DlBrdcstAlloc *dlBrdcstAlloc);
314 EXTERN int MacProcSchCellCfg(Pst *pst, SchCellCfg *schCellCfg);
315 EXTERN int MacProcSchCellCfgCfm(Pst *pst, SchCellCfgCfm *schCellCfgCfm);
316 EXTERN int SchHdlCellCfgReq(Pst *pst, SchCellCfg *schCellCfg);
317 EXTERN int schActvInit(Ent entity, Inst instId, Region region, Reason reason);
318 EXTERN S16 SchSendCfgCfm(Pst *pst, RgMngmt *cfm);
320 /**********************************************************************
322 **********************************************************************/