sib1_scheduler
[o-du/l2.git] / src / cm / mac_sch_interface.h
1 /*******************************************************************************
2 ################################################################################
3 #   Copyright (c) [2017-2019] [Radisys]                                        #
4 #                                                                              #
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                                    #
8 #                                                                              #
9 #       http://www.apache.org/licenses/LICENSE-2.0                             #
10 #                                                                              #
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 *******************************************************************************/
18
19 /* events */
20 #define EVENT_SCH_CELL_CFG 1
21 #define EVENT_SCH_CELL_CFG_CFM 2
22
23 /* selector */
24 #define MAC_SCH_LC_SELECTOR 0
25 #define MAC_SCH_TC_SELECTOR 1
26 #define MAC_SCH_LWLC_SELECTOR 2
27
28 /*macros*/
29 #define NO_SSB 0
30 #define SSB_TRANSMISSION 1
31 #define SSB_REPEAT 2
32 #define MAX_SSB_IDX 1 /* forcing it as 1 for now. Right value is 64 */
33
34 #define NO_SIB1 0
35 #define SIB1_TRANSMISSION 1
36 #define SIB1_REPITITION 2
37
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 */
41
42 /*structures*/
43
44
45 typedef enum
46 {
47         RSP_OK,
48         RSP_NOK
49 }schMacRsp;
50
51 typedef struct
52 {
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. */
59 } SsbSchCfg;
60
61 /* SIB1 interface structure */
62 typedef struct bwpCfg
63 {
64    uint16_t BWPSize;
65    uint16_t BWPStart;
66 }BwpCfg;
67
68 typedef struct coresetCfg
69 {
70    uint8_t startSymbolIndex;
71    uint8_t durationSymbols;
72    uint8_t freqDomainResource[6];
73    uint8_t cceRegMappingType;
74    uint8_t regBundleSize;
75    uint8_t interleaverSize;
76    uint8_t coreSetType;
77    uint16_t shiftIndex;
78    uint8_t precoderGranularity;
79    uint8_t cceIndex;
80    uint8_t aggregationLevel;
81 } CoresetCfg;
82
83 typedef struct prg
84 {
85    uint16_t pmIdx;
86    uint16_t beamIdx[MAX_DIG_BF_INTERFACES];
87 } Prg;
88
89 typedef struct beamformingInfo
90 {
91    uint16_t numPrgs;
92    uint16_t prgSize;
93    uint8_t  digBfInterfaces;
94    Prg  prg[MAX_NUM_PRG];
95 } BeamformingInfo;
96
97 typedef struct txPowerPdcchInfo
98 {
99    uint8_t powerValue;
100    uint8_t powerControlOffsetSS;
101 } TxPowerPdcchInfo;
102
103 typedef struct dlDCI
104 {
105    uint16_t rnti;
106    uint16_t scramblingId;
107    uint16_t scramblingRnti;
108    uint8_t cceIndex;
109    uint8_t aggregLevel;
110    BeamformingInfo beamPdcchInfo;
111    TxPowerPdcchInfo txPdcchPower;
112 } DlDCI;
113
114 typedef struct sib1PdcchCfg
115 {
116    BwpCfg sib1PdcchBwpCfg;
117
118    uint8_t subcarrierSpacing;
119    uint8_t cyclicPrefix;
120
121    /* coreset-0 configuration */
122    CoresetCfg sib1Coreset0Cfg;
123
124    uint16_t numDlDci;
125    DlDCI    sib1DlDci; /* as of now its only one DCI, later it will be numDlCi */
126 } Sib1PdcchCfg;
127 /* end of SIB1 PDCCH structures */
128
129 /* SIB1 PDSCH structures */
130
131 typedef struct codewordinfo
132 {
133    uint16_t targetCodeRate;
134    uint8_t  qamModOrder;
135    uint8_t  mcsIndex;
136    uint8_t  mcsTable;
137    uint8_t  rvIndex;
138    uint32_t tbSize;
139 } CodewordInfo;
140
141 typedef struct dmrsInfo
142 {
143    uint16_t dlDmrsSymbPos;
144    uint8_t  dmrsConfigType;
145    uint16_t dlDmrsScramblingId;
146    uint8_t  scid;
147    uint8_t  numDmrsCdmGrpsNoData;
148    uint16_t dmrsPorts;
149 } DmrsInfo;
150
151 typedef struct pdschFreqAlloc
152 {
153    uint8_t  resourceAlloc;
154    /* since we are using type-1, hence rbBitmap excluded */
155    uint16_t rbStart;
156    uint16_t rbSize;
157    uint8_t  vrbPrbMapping;
158 } PdschFreqAlloc;
159
160 typedef struct pdschTimeAlloc
161 {
162    uint8_t startSymbolIndex;
163    uint8_t numSymbols;
164 } PdschTimeAlloc;
165
166 typedef struct txPowerPdschInfo
167 {
168    uint8_t powerControlOffset;
169    uint8_t powerControlOffsetSS;
170 } TxPowerPdschInfo;
171
172 typedef struct sib1PdschCfg
173 {
174    uint16_t pduBitmap;
175    uint16_t rnti;
176    uint16_t pduIndex;
177    BwpCfg sib1PdschBwpCfg;
178    uint8_t numCodewords;
179    CodewordInfo codeword[MAX_CODEWORDS];
180    uint16_t dataScramblingId;
181    uint8_t  numLayers;
182    uint8_t  transmissionScheme;
183    uint8_t  refPoint;
184    DmrsInfo dmrs;
185    PdschFreqAlloc sib1FreqAlloc;
186    PdschTimeAlloc sib1TimeAlloc;
187    BeamformingInfo beamPdschInfo;
188    TxPowerPdschInfo txPdschPower;
189 } Sib1PdschCfg;
190 /* SIB1 PDSCH structures end */
191
192 typedef struct
193 {
194    /* parameters recieved from DU-APP */
195    uint16_t sib1PduLen;
196    uint16_t sib1NewTxPeriod;
197    uint16_t sib1RepetitionPeriod;
198    uint8_t  coresetZeroIndex;     /* derived from 4 LSB of pdcchSib1 present in MIB */
199    uint8_t  searchSpaceZeroIndex; /* derived from 4 MSB of pdcchSib1 present in MIB */
200    uint16_t sib1Mcs;
201         
202         /* parameters derived in scheduler */
203         uint8_t n0;
204    Sib1PdcchCfg sib1PdcchCfg;
205    Sib1PdschCfg sib1PdschCfg;
206 } Sib1SchCfg;
207
208 typedef struct schCellCfg
209 {
210    U16         cellId;     /* Cell Id */
211    U16         phyCellId;  /* Physical cell id */
212         U8          bandwidth;  /* Supported B/W */
213    DuplexMode  dupMode;    /* Duplex type: TDD/FDD */
214         SsbSchCfg   ssbSchCfg;
215         Sib1SchCfg  sib1SchCfg;
216 }SchCellCfg;
217
218 typedef struct schCellCfgCfm
219 {
220    U16         cellId;     /* Cell Id */
221    schMacRsp   rsp;   
222 }SchCellCfgCfm;
223
224 typedef struct timeDomainAlloc
225 {
226    uint16_t ssbStartSymbIdx;
227         uint16_t ssbSymbolDuration;
228 }TimeDomainAlloc;
229
230 typedef struct freqDomainAlloc
231 {
232    uint16_t ssbStartPrbIdx;
233    uint16_t ssbPrbDuration;
234 }FreqDomainAlloc;
235
236 typedef struct ssbInfo
237 {
238    uint8_t ssbIdx;          /* SSB Index */
239         TimeDomainAlloc tdAlloc; /* Time domain allocation */
240         FreqDomainAlloc fdAlloc; /* Freq domain allocation */
241 }SsbInfo;
242
243 typedef struct sib1AllocInfo
244 {
245    Sib1PdcchCfg sib1PdcchCfg;
246    Sib1PdschCfg sib1PdschCfg;
247 } Sib1AllocInfo;
248
249 /* Interface structure signifying DL broadcast allocation for SSB, SIB1 */
250 typedef struct dlBrdcstAlloc
251 {
252    uint16_t cellId;  /* Cell Id */
253         SlotIndInfo slotIndInfo; /* Slot Info: sfn, slot number */
254         /* Ssb transmission is determined as follows:
255          * 0 : No tranamission
256          * 1 : SSB Transmission
257          * 2 : SSB Repetition */
258         uint8_t ssbTrans;
259         uint8_t ssbIdxSupported;
260         SsbInfo ssbInfo[MAX_SSB_IDX];
261         /* Sib1 transmission is determined as follows:
262          * 0 : No tranamission
263          * 1 : SIB1 Transmission
264          * 2 : SIB1 Repetition */
265         U8 sib1Trans;
266         Sib1AllocInfo sib1Alloc;
267 }DlBrdcstAlloc;
268
269 /* function pointers */
270
271 typedef int (*SchMacDlBrdcstAllocFunc)     ARGS((                     
272    Pst            *pst,           /* Post Structure */                         
273    DlBrdcstAlloc  *dlBrdcstAlloc    /* slot ind Info */                      
274 ));
275
276 typedef int (*SchCellCfgCfmFunc)    ARGS((
277    Pst            *pst,           /* Post Structure */                         
278    SchCellCfgCfm  *schCellCfgCfm  /* Cell Cfg Cfm */
279 ));
280
281 typedef int (*SchCellCfgFunc)    ARGS((
282    Pst            *pst,           /* Post Structure */                         
283    SchCellCfg  *schCellCfg     /* Cell Cfg  */
284 ));
285 /* function declarations */
286 int packMacSchSlotInd(Pst *pst, SlotIndInfo *slotInd);
287 int packSchMacDlBrdcstAlloc(Pst *pst, DlBrdcstAlloc  *dlBrdcstAlloc);
288 EXTERN int packSchCellCfg(Pst *pst, SchCellCfg  *schCellCfg);
289 EXTERN int packSchCellCfgCfm(Pst *pst, SchCellCfgCfm  *schCellCfgCfm);
290
291 EXTERN int MacProcDlBrdcstAlloc(Pst *pst, DlBrdcstAlloc *dlBrdcstAlloc);
292 EXTERN int MacProcSchCellCfg(Pst *pst, SchCellCfg  *schCellCfg);
293 EXTERN int MacProcSchCellCfgCfm(Pst *pst, SchCellCfgCfm  *schCellCfgCfm);
294 EXTERN int SchHdlCellCfgReq(Pst *pst, SchCellCfg *schCellCfg);
295 EXTERN int schActvInit(Ent entity, Inst instId, Region region, Reason reason);
296 EXTERN S16 SchSendCfgCfm(Pst *pst, RgMngmt *cfm);
297
298 /**********************************************************************
299   End of file
300  **********************************************************************/
301