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 *******************************************************************************/
19 /* Defines APIs exchanged between du_app and cl module of MAC */
23 #define NUM_NUMEROLOGY 5 /* Number of numerology */
24 #define MAXIMUM_TDD_PERIODICITY 5
25 #define MAX_SYMB_PER_SLOT 14
27 #define NUM_SSB 1 /* max value is 64 */
28 #define SSB_MASK_SIZE 1 /* SSB mask size is 32bit for sub6 */
29 #define SIB1_NEW_TX_PERIOD 160
30 #define SIB1_REPETITION_PERIOD 20
31 #define CORESET_0_INDEX 0
32 #define CORESET_1_INDEX 1
33 #define CORESET_2_INDEX 2
34 #define CORESET_3_INDEX 3
35 #define CORESET_4_INDEX 4
36 #define SEARCHSPACE_0_INDEX 0
37 #define SEARCHSPACE_1_INDEX 1
38 #define SEARCHSPACE_2_INDEX 2
39 #define SEARCHSPACE_3_INDEX 3
40 #define SEARCHSPACE_4_INDEX 4
41 #define SS_MONITORING_SLOT_SL1 0 /* all slots */
42 #define SS_MONITORING_SYMBOL 0x2000; /* symbol-0, set 14th bit */
47 /* Macros for coupling */
53 #define EVENT_MAC_CELL_CONFIG_REQ 200
54 #define EVENT_MAC_CELL_CONFIG_CFM 201
55 #define EVENT_MAC_CELL_START_REQ 202
56 #define EVENT_MAC_CELL_STOP_REQ 203
57 #define EVENT_MAC_SLOT_IND 204
58 #define EVENT_MAC_STOP_IND 205
59 #define EVENT_MAC_UL_CCCH_IND 206
60 #define EVENT_MAC_DL_CCCH_IND 207
70 MAC_GEN_FULL_PBCH_PAYLD, /* MAC generated the full PBCH Payload */
71 PHY_GEN_TIMING_PBCH_BIT, /* PHY generates the timing PBCH bits */
72 PHY_GEN_FULL_PBCH_PAYLD /* PHY generates full PBCH payload */
84 RESTRICTED_SET_TYPE_A,
136 typedef struct carrierCfg
139 U16 bw; /* DL/UL bandwidth */
140 U32 freq; /* Absolute frequency of DL/UL point A in KHz */
141 U16 k0[NUM_NUMEROLOGY]; /* K0 for DL/UL */
142 U16 gridSize[NUM_NUMEROLOGY]; /* DL/UL Grid size for each numerologies */
143 U16 numAnt; /* Number of Tx/Rx antennas */
146 typedef struct ssbCfg
148 uint32_t ssbPbchPwr; /* SSB block power */
149 BchPduOpt bchPayloadFlag; /* Options for generation of payload */
150 uint8_t scsCmn; /* subcarrier spacing for common */
151 uint16_t ssbOffsetPointA; /* SSB subcarrier offset from point A */
153 SSBPeriod ssbPeriod; /* SSB Periodicity in msec */
154 uint8_t ssbScOffset; /* Subcarrier Offset */
155 uint8_t mibPdu[3]; /* MIB payload */
156 uint32_t ssbMask[SSB_MASK_SIZE]; /* Bitmap for actually transmitted SSB. */
157 uint8_t beamId[NUM_SSB];
158 Bool multCarrBand; /* Multiple carriers in a band */
159 Bool multCellCarr; /* Multiple cells in single carrier */
162 typedef struct fdmInfo
164 U16 rootSeqIdx; /* Root sequence index */
165 U8 numRootSeq; /* Number of root sequences required for FD */
166 U16 k1; /* Frequency Offset for each FD */
167 U8 zeroCorrZoneCfg; /* Zero correlation zone cofig */
168 U8 numUnusedRootSeq; /* Number of unused root sequence */
169 U8 *unsuedRootSeq; /* Unused root sequence per FD */
172 typedef struct prachCfg
175 uint8_t prachCfgIdx; /* PRACH Cfg Index */
176 PrachSeqLen prachSeqLen; /* RACH Sequence length: Long/short */
177 uint8_t prachSubcSpacing; /* Subcarrier spacing of RACH */
178 RstSetCfg prachRstSetCfg; /* PRACH restricted set config */
179 uint16_t msg1FreqStart; /* Msg1-FrequencyStart */
180 uint8_t msg1Fdm; /* PRACH FDM (1,2,4,8) */
181 uint8_t rootSeqLen; /* Root sequence length */
182 PrachFdmInfo fdm[8]; /* FDM info */
183 uint8_t ssbPerRach; /* SSB per RACH occassion */
184 Bool prachMultCarrBand; /* Multiple carriers in Band */
185 uint8_t prachRestrictedSet; /* Support for PRACH restricted set */
186 uint8_t raContResTmr; /* RA Contention Resoultion Timer */
187 uint8_t rsrpThreshSsb; /* RSRP Threshold SSB */
188 uint8_t raRspWindow; /* RA Response Window */
191 typedef struct tddCfg
194 DlUlTxPeriodicity tddPeriod; /* DL UL Transmission periodicity */
195 SlotConfig slotCfg[MAXIMUM_TDD_PERIODICITY][MAX_SYMB_PER_SLOT];
198 typedef struct sib1CellCfg
202 uint16_t sib1NewTxPeriod;
203 uint16_t sib1RepetitionPeriod;
204 uint8_t coresetZeroIndex; /* derived from 4 LSB of pdcchSib1 present in MIB */
205 uint8_t searchSpaceZeroIndex; /* derived from 4 MSB of pdcchSib1 present in MIB */
209 typedef struct bwpParams
214 uint8_t cyclicPrefix;
217 typedef struct candidatesInfo
226 typedef struct searchSpaceCfg
228 uint8_t searchSpaceId;
230 uint16_t monitoringSlot;
232 uint16_t monitoringSymbol;
233 CandidatesInfo candidate;
236 typedef struct pdcchConfigCommon
238 /* only one search space is configured during SIB1 */
239 SearchSpaceCfg commonSearchSpace;
240 uint8_t raSearchSpaceId;
243 typedef struct pdschConfigCommon
248 uint8_t lengthSymbol;
251 typedef struct puschConfigCommon
253 /* PUSCH-TimeDomainResourceAllocation info */
257 uint8_t lengthSymbol;
260 typedef struct bwpDlConfig
263 PdcchConfigCommon pdcchCommon;
264 PdschConfigCommon pdschCommon;
267 typedef struct bwpUlConfig
270 // rach config common sent in PrachCfg
271 // pucch info not required
272 PuschConfigCommon puschCommon;
275 typedef struct macCellCfg
277 U16 transId; /* Trans Id */
278 U16 cellId; /* Cell Id */
279 U8 numTlv; /* Number of configuration TLVs */
280 U8 carrierId; /* Carrired Index */
281 U16 phyCellId; /* Physical cell id */
282 DuplexMode dupType; /* Duplex type: TDD/FDD */
283 CarrierCfg dlCarrCfg; /* DL Carrier configuration */
284 CarrierCfg ulCarrCfg; /* UL Carrier configuration */
285 Bool freqShft; /* Indicates presence of 7.5kHz frequency shift */
286 SsbCfg ssbCfg; /* SSB configuration */
287 PrachCfg prachCfg; /* PRACH Configuration */
288 TDDCfg tddCfg; /* TDD periodicity and slot configuration */
289 RSSIMeasUnit rssiUnit; /* RSSI measurement unit */
290 Sib1CellCfg sib1Cfg; /* SIB1 config */
291 BwpDlConfig initialDlBwp; /* Initial DL BWP */
292 BwpUlConfig initialUlBwp; /* Initial UL BWP */
293 uint8_t dmrsTypeAPos; /* DMRS Type A position */
296 typedef struct macCellCfgCfm
302 typedef struct slotInfo
309 typedef struct macCellStartInfo
314 typedef struct macCellStopInfo
319 typedef struct ulCcchInd
326 typedef struct dlCcchInd
330 DlCcchMsgType msgType;
331 uint16_t dlCcchMsgLen;
336 /* Functions for slot Ind from MAC to DU APP*/
337 typedef uint16_t (*DuMacSlotInd) ARGS((
339 SlotInfo *slotInfo ));
341 /* Functions for stop Ind from MAC to DU APP*/
342 typedef uint16_t (*DuMacStopInd) ARGS((
344 MacCellStopInfo *cellId ));
346 /* Functions for mac cell start req */
347 typedef uint16_t (*DuMacCellStartReq) ARGS((
349 MacCellStartInfo *cellStartInfo ));
351 /* Functions for mac cell stop request */
352 typedef uint16_t (*DuMacCellStopReq) ARGS((
354 MacCellStopInfo *cellStopInfo ));
356 /* Function pointers for packing macCellCfg Request and Confirm */
357 typedef int (*packMacCellCfgReq) ARGS((
359 MacCellCfg *macCellCfg ));
361 typedef int (*packMacCellCfgConfirm) ARGS((
363 MacCellCfgCfm *macCellCfgCfm ));
365 typedef int (*DuMacCellCfgReq) ARGS((
367 MacCellCfg *macCellCfg));
369 typedef int (*DuMacCellCfgCfm) ARGS((
371 MacCellCfgCfm *macCellCfgCfm ));
373 /* Functions for UL CCCH Ind from MAC to DU APP*/
374 typedef uint16_t (*DuMacUlCcchInd) ARGS((
376 UlCcchIndInfo *ulCcchIndInfo ));
378 /* Functions for DL CCCH Ind from DU APP to MAC*/
379 typedef uint16_t (*DuMacDlCcchInd) ARGS((
381 DlCcchIndInfo *dlCcchIndInfo ));
383 extern uint16_t packMacSlotInd(Pst *pst, SlotInfo *slotInfo );
384 extern uint16_t unpackMacSlotInd(DuMacSlotInd func, Pst *pst, Buffer *mBuf);
385 extern uint16_t duHandleSlotInd(Pst *pst, SlotInfo *slotInfo);
386 extern uint16_t packMacCellStartReq(Pst *pst, MacCellStartInfo *cellStartInfo);
387 extern uint16_t unpackMacCellStartReq(DuMacCellStartReq func, Pst *pst, Buffer *mBuf);
388 extern uint16_t MacHdlCellStartReq(Pst *pst, MacCellStartInfo *cellStartInfo);
389 extern uint16_t packMacCellStopReq(Pst *pst, MacCellStopInfo *cellStopInfo);
390 extern uint16_t unpackMacCellStopReq(DuMacCellStopReq func, Pst *pst, Buffer *mBuf);
391 extern uint16_t MacHdlCellStopReq(Pst *pst, MacCellStopInfo *cellStopInfo);
392 extern int packMacCellCfg(Pst *pst, MacCellCfg *macCellCfg);
393 extern int MacHdlCellCfgReq(Pst *pst, MacCellCfg *macCellCfg);
394 extern void cmUnpackLwLcMacCellCfg(DuMacCellCfgReq func, Pst *pst, Buffer *mBuf);
395 extern int unpackMacCellCfgCfm(DuMacCellCfgCfm func, Pst *pst, Buffer *mBuf);
396 extern int duHandleMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm);
397 extern uint16_t packMacStopInd(Pst *pst, MacCellStopInfo *cellId);
398 extern uint16_t unpackMacStopInd(DuMacStopInd func, Pst *pst, Buffer *mBuf);
399 extern uint16_t duHandleStopInd(Pst *pst, MacCellStopInfo *cellId);
400 extern uint16_t packMacUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo);
401 extern uint16_t unpackMacUlCcchInd(DuMacUlCcchInd func, Pst *pst, Buffer *mBuf);
402 extern uint16_t duHandleUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo);
403 extern uint16_t packMacDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo);
404 extern uint16_t unpackMacDlCcchInd(DuMacDlCcchInd func, Pst *pst, Buffer *mBuf);
405 extern uint16_t MacHdlDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo);
406 uint8_t sendStopIndMacToDuApp();
409 /**********************************************************************
411 **********************************************************************/