[Epic-ID: ODUHIGH-406][Task-ID: ODUHIGH-440] Sending and Handling of PAGE REQ at MAC
[o-du/l2.git] / src / cm / du_app_mac_inf.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 /* Defines APIs exchanged between du_app and cl module of MAC */
20 #ifndef __MACINT_H__
21 #define __MACINT_H__
22
23 #define NUM_NUMEROLOGY 5  /* Number of numerology */
24
25 #define NUM_SSB         1       /* max value is 64 */
26 #define SSB_MASK_SIZE   1       /* SSB mask size is 32bit for sub6 */
27 #define SIB1_REPETITION_PERIOD   20
28 #define CORESET_0_INDEX      0
29 #define CORESET_1_INDEX      1
30 #define CORESET_2_INDEX      2
31 #define CORESET_3_INDEX      3
32 #define CORESET_4_INDEX      4
33 #define SEARCHSPACE_0_INDEX   0
34 #define SEARCHSPACE_1_INDEX   1
35 #define SEARCHSPACE_2_INDEX   2
36 #define SEARCHSPACE_3_INDEX   3
37 #define SEARCHSPACE_4_INDEX   4
38 #define SS_MONITORING_SLOT_SL1   0 /* all slots */
39 #define SS_MONITORING_SYMBOL     0x2000; /* symbol-0, set 14th bit */
40
41 /* Macro for Ue Context */
42 #define MAX_NUM_SR_CFG_PER_CELL_GRP 8   /* Max number of scheduling request config per cell group */
43 #define MAC_NUM_TAGS 4                  /* Max number of timing advance groups */
44 #define MAX_NUM_BWP  4                  /* Max number of BWP per serving cell */
45 #define MAX_NUM_CRSET  3                /* Max number of control resource set in add/modify/release list */
46 #define MAX_NUM_SEARCH_SPC  10          /* Max number of search space in add/modify/release list */
47 #define MONITORING_SYMB_WITHIN_SLOT_SIZE 2  /* i.e. 2 bytes because size of monitoring symbols within slot is 14 bits */
48 #define MAX_NUM_DL_ALLOC 16             /* Max number of pdsch time domain downlink allocation */
49 #define MAX_NUM_UL_ALLOC 16             /* Max number of pusch time domain uplink allocation */
50 #define MAX_NUM_SCELL  32
51
52 /* PUCCH Configuration Macro */
53 #define MAX_NUM_PUCCH_RESRC 128
54 #define MAX_NUM_PUCCH_RESRC_SET 4
55 #define MAX_NUM_PUCCH_PER_RESRC_SET 32
56 #define MAX_NUM_SPATIAL_RELATIONS 8
57 #define MAX_NUM_PUCCH_P0_PER_SET 8
58 #define MAX_NUM_PATH_LOSS_REF_RS 4
59 #define MAX_NUM_DL_DATA_TO_UL_ACK 15
60
61 /* Event IDs */
62 #define EVENT_MAC_CELL_CONFIG_REQ    200
63 #define EVENT_MAC_CELL_CONFIG_CFM    201
64 #define EVENT_MAC_CELL_START         202
65 #define EVENT_MAC_CELL_STOP          203
66 #define EVENT_MAC_CELL_UP_IND        204
67 #define EVENT_MAC_STOP_IND           205
68 #define EVENT_MAC_UL_CCCH_IND        206
69 #define EVENT_MAC_DL_CCCH_IND        207
70 #define EVENT_MAC_UE_CREATE_REQ      208
71 #define EVENT_MAC_UE_CREATE_RSP      209
72 #define EVENT_MAC_UE_RECONFIG_REQ    210
73 #define EVENT_MAC_UE_RECONFIG_RSP    211
74 #define EVENT_MAC_UE_DELETE_REQ      212
75 #define EVENT_MAC_UE_DELETE_RSP      213
76 #define EVENT_MAC_CELL_DELETE_REQ    214
77 #define EVENT_MAC_CELL_DELETE_RSP    215
78 #define EVENT_MAC_SLICE_CFG_REQ      216
79 #define EVENT_MAC_SLICE_CFG_RSP      217
80 #define EVENT_MAC_SLICE_RECFG_REQ    218
81 #define EVENT_MAC_SLICE_RECFG_RSP    219
82 #define EVENT_MAC_SLOT_IND           220
83 #define EVENT_MAC_RACH_RESOURCE_REQ  221
84 #define EVENT_MAC_RACH_RESOURCE_RSP  222
85 #define EVENT_MAC_DL_PCCH_IND        223
86
87 #define BSR_PERIODIC_TIMER_SF_10 10
88 #define BSR_RETX_TIMER_SF_320 320
89 #define BSR_SR_DELAY_TMR_2560 2560
90
91 #define PAGING_SCHED_DELTA  4
92
93 typedef enum
94 {
95    MAC_DU_APP_RSP_NOK,
96    MAC_DU_APP_RSP_OK
97 }MacRsp;
98
99 typedef enum
100 {
101    SLICE_PRESENT,
102    SLICE_NOT_PRESENT
103 }RspReason;
104
105 typedef enum
106 {
107    SUCCESS,
108    CELLID_INVALID,
109    UEID_INVALID
110 }UeDeleteStatus;
111
112 typedef enum
113 {
114    SUCCESSFUL_RSP,
115    CELL_ID_INVALID
116 }CellDeleteStatus;
117
118 typedef enum
119 {
120    DUP_MODE_FDD,
121    DUP_MODE_TDD
122 }DuplexMode;
123
124 typedef enum
125 {
126    MAC_GEN_FULL_PBCH_PAYLD,   /* MAC generated the full PBCH Payload */
127    PHY_GEN_TIMING_PBCH_BIT,   /* PHY generates the timing PBCH bits */
128    PHY_GEN_FULL_PBCH_PAYLD    /* PHY generates full PBCH payload */
129 }BchPduOpt;
130
131 typedef enum
132 {
133    LONG_SEQUENCE,
134    SHORT_SEQUENCE
135 }PrachSeqLen;
136
137 typedef enum
138 {
139    UNRESTRICTED,
140    RESTRICTED_SET_TYPE_A,
141    RESTRICTED_SET_TYPE_B
142 }RstSetCfg;
143
144 typedef enum
145 {
146    DONT_REPORT_RSSI,
147    RSSI_UNIT_DBM,
148    RSSI_UNIT_DBFS
149 }RSSIMeasUnit;
150
151 typedef enum
152 {
153    BETA_PSS_0DB,
154    BETA_PSS_1DB
155 }BetaPss;
156
157 typedef enum 
158 {
159    SSB_PRDCTY_MS_5,
160    SSB_PRDCTY_MS_10,
161    SSB_PRDCTY_MS_20,
162    SSB_PRDCTY_MS_40,
163    SSB_PRDCTY_MS_80,
164    SSB_PRDCTY_MS_160
165 }SSBPeriod;
166
167 typedef enum
168 {
169    RRC_REJECT,
170    RRC_SETUP
171 }DlCcchMsgType;
172
173 /* Enums for Ue Create Request */
174
175 /* SR PROHIBIT TIMER */
176 typedef enum
177 {
178    SR_PROHIBIT_MS_1,
179    SR_PROHIBIT_MS_2,
180    SR_PROHIBIT_MS_4,
181    SR_PROHIBIT_MS_8,
182    SR_PROHIBIT_MS_16,
183    SR_PROHIBIT_MS_32,
184    SR_PROHIBIT_MS_64,
185    SR_PROHIBIT_MS_128
186 }SrProhibitTimer;
187
188 typedef enum
189 {
190    SR_TRANS_MAX_N_4,
191    SR_TRANS_MAX_N_8,
192    SR_TRANS_MAX_N_16,
193    SR_TRANS_MAX_N_32,
194    SR_TRANS_MAX_N_64,
195    SR_TRANS_MAX_spare3,
196    SR_TRANS_MAX_spare2,
197    SR_TRANS_MAX_spare1
198 }SrTransMax;
199
200 typedef enum
201 {
202    TIME_ALIGNMENT_TIMER_MS_500,
203    TIME_ALIGNMENT_TIMER_MS_750,
204    TIME_ALIGNMENT_TIMER_MS_1280,
205    TIME_ALIGNMENT_TIMER_MS_1920,
206    TIME_ALIGNMENT_TIMER_MS_2560,
207    TIME_ALIGNMENT_TIMER_MS_5120,
208    TIME_ALIGNMENT_TIMER_MS_10240,
209    TIME_ALIGNMENT_TIMER_INFINITY
210 }TimeAlignmentTimer;
211
212 typedef enum
213 {
214    PHR_PERIODIC_TIMER_SF_10,
215    PHR_PERIODIC_TIMER_SF_20,
216    PHR_PERIODIC_TIMER_SF_50,
217    PHR_PERIODIC_TIMER_SF_100,
218    PHR_PERIODIC_TIMER_SF_200,
219    PHR_PERIODIC_TIMER_SF_500,
220    PHR_PERIODIC_TIMER_SF_1000,
221    PHR_PERIODIC_TIMER_INFINITY
222 }PhrPeriodicTimer;
223
224 typedef enum
225 {
226    PHR_PROHIBIT_TIMER_SF_0,
227    PHR_PROHIBIT_TIMER_SF_10,
228    PHR_PROHIBIT_TIMER_SF_20,
229    PHR_PROHIBIT_TIMER_SF_50,
230    PHR_PROHIBIT_TIMER_SF_100,
231    PHR_PROHIBIT_TIMER_SF_200,
232    PHR_PROHIBIT_TIMER_SF_500,
233    PHR_PROHIBIT_TIMER_SF_1000
234 }PhrProhibitTimer;
235
236 typedef enum
237 {
238    PHR_TX_PWR_FACTOR_CHANGE_DB_1,
239    PHR_TX_PWR_FACTOR_CHANGE_DB_3,
240    PHR_TX_PWR_FACTOR_CHANGE_DB_6,
241    PHR_TX_PWR_FACTOR_CHANGE_INFINITY
242 }PhrTxPwrFactorChange;
243
244 typedef enum
245 {
246    PHR_MODE_OTHER_CG_REAL,
247    PHR_MODE_OTHER_CG_VIRTUAL
248 }PhrModeOtherCG;
249
250 typedef enum
251 {
252    PDSCH_HARQ_ACK_CODEBOOK_SEMISTATIC,
253    PDSCH_HARQ_ACK_CODEBOOK_DYNAMIC
254 }PdschHarqAckCodebook;
255
256 typedef enum
257 {
258    NUM_HARQ_PROC_FOR_PDSCH_N_2,
259    NUM_HARQ_PROC_FOR_PDSCH_N_4,
260    NUM_HARQ_PROC_FOR_PDSCH_N_6,
261    NUM_HARQ_PROC_FOR_PDSCH_N_10,
262    NUM_HARQ_PROC_FOR_PDSCH_N_16
263 }NumHarqProcForPdsch;
264
265 typedef enum
266 {
267    MAX_CODE_BLOCK_GROUP_PER_TB_N_2,
268    MAX_CODE_BLOCK_GROUP_PER_TB_N_4,
269    MAX_CODE_BLOCK_GROUP_PER_TB_N_6,
270    MAX_CODE_BLOCK_GROUP_PER_TB_N_8
271 }MaxCodeBlkGrpPerTB;
272
273 typedef enum
274 {
275    PDSCH_X_OVERHEAD_6,
276    PDSCH_X_OVERHEAD_12,
277    PDSCH_X_OVERHEAD_18
278 }PdschXOverhead;
279
280 typedef enum
281 {
282    TRANSFORM_PRECODER_ENABLED,
283    TRANSFORM_PRECODER_DISABLED
284 }TransformPrecoder;
285
286 typedef enum 
287 {
288    CCE_REG_MAPPINGTYPE_PR_INTERLEAVED = 1,
289    CCE_REG_MAPPINGTYPE_PR_NONINTERLEAVED
290 }REGMappingType;
291
292 typedef enum
293 {
294    SLOTPERIODICITYANDOFFSET_PR_SL1 = 1,
295    SLOTPERIODICITYANDOFFSET_PR_SL2,
296    SLOTPERIODICITYANDOFFSET_PR_SL4,
297    SLOTPERIODICITYANDOFFSET_PR_SL5,
298    SLOTPERIODICITYANDOFFSET_PR_SL8,
299    SLOTPERIODICITYANDOFFSET_PR_SL10,
300    SLOTPERIODICITYANDOFFSET_PR_SL16,
301    SLOTPERIODICITYANDOFFSET_PR_SL20,
302    SLOTPERIODICITYANDOFFSET_PR_SL40,
303    SLOTPERIODICITYANDOFFSET_PR_SL80,
304    SLOTPERIODICITYANDOFFSET_PR_SL160,
305    SLOTPERIODICITYANDOFFSET_PR_SL320,
306    SLOTPERIODICITYANDOFFSET_PR_SL640,
307    SLOTPERIODICITYANDOFFSET_PR_SL1280,
308    SLOTPERIODICITYANDOFFSET_PR_SL2560
309 }MSlotPeriodAndOffset;
310
311 typedef enum
312 {
313    SAMEASREG_BUNDLE,
314    ALL_CONTIGUOUS_RBS
315 }PrecoderGranul;
316
317 typedef enum
318 {
319    SEARCHSPACETYPE_PR_COMMON = 1,
320    SEARCHSPACETYPE_PR_UE_SPECIFIC
321 }SearchSpaceType;
322
323 typedef enum
324 {
325    QOS_NON_DYNAMIC = 1,
326    QOS_DYNAMIC
327 }QosType;
328
329 typedef enum
330 {
331    AGGREGATIONLEVEL_N0  = 0,  
332    AGGREGATIONLEVEL_N1  = 1,
333    AGGREGATIONLEVEL_N2  = 2,
334    AGGREGATIONLEVEL_N3  = 3,
335    AGGREGATIONLEVEL_N4  = 4,
336    AGGREGATIONLEVEL_N5  = 5,
337    AGGREGATIONLEVEL_N6  = 6,
338    AGGREGATIONLEVEL_N8  = 7
339 }AggrLevel;
340
341 typedef enum
342 {
343    ADDITIONALPOSITION_POS0,
344    ADDITIONALPOSITION_POS1,
345    ADDITIONALPOSITION_POS3
346 }AddPosType;
347
348 typedef enum
349 {
350    MAPPING_TYPEA,
351    MAPPING_TYPEB
352 }CommonMappingType;
353
354 typedef enum
355 {
356    RESOURCEALLOCATION_TYPE0,
357    RESOURCEALLOCATION_TYPE1,
358    RESOURCEALLOCATION_DYNAMICSWITCH
359 }ResAllocType;
360
361 typedef enum
362 {
363    RBG_SIZE_CONFIG1,
364    RBG_SIZE_CONFIG2
365 }RBGSize;
366
367 typedef enum
368 {
369    CODEWORDS_SCHED_BY_DCI_N1,
370    CODEWORDS_SCHED_BY_DCI_N2
371 }CodeWordsSchedDci;
372
373 typedef enum
374 {
375    TYPE_STATIC_BUNDLING = 1,
376    TYPE_DYNAMIC_BUNDLING
377 }BundlingType;
378
379 typedef enum
380 {
381    SET2_SIZE_N4,
382    SET2_SIZE_WIDEBAND
383 }BundlingSizeSet2;
384
385 typedef enum
386 {
387    SET1_SIZE_N4,
388    SET1_SIZE_WIDEBAND,
389    SET1_SIZE_N2_WIDEBAND,
390    SET1_SIZE_N4_WIDEBAND
391 }BundlingSizeSet1;
392
393 typedef enum
394 {
395    LC_PRIORITY_1 = 1,
396    LC_PRIORITY_2,
397    LC_PRIORITY_3
398 }LcPriority;
399
400 typedef enum
401 {
402   PBR_KBPS_0,
403   PBR_KBPS_8,
404   PBR_KBPS_16,
405   PBR_KBPS_32,
406   PBR_KBPS_64,
407   PBR_KBPS_128,
408   PBR_KBPS_256,
409   PBR_KBPS_512,
410   PBR_KBPS_1024,
411   PBR_KBPS_2048,
412   PBR_KBPS_4096,
413   PBR_KBPS_8192,
414   PBR_KBPS_16384,
415   PBR_KBPS_32768,
416   PBR_KBPS_65536,
417   PBR_KBPS_INFINITY
418 }PBitRate;
419
420 typedef enum
421 {
422    BSD_MS_5,
423    BSD_MS_10,
424    BSD_MS_20,
425    BSD_MS_50,
426    BSD_MS_100,
427    BSD_MS_150,
428    BSD_MS_300,
429    BSD_MS_500,
430    BSD_MS_1000,
431    BSD_SPARE_7,
432    BSD_SPARE_6,
433    BSD_SPARE_5,
434    BSD_SPARE_4,
435    BSD_SPARE_3,
436    BSD_SPARE_2,
437    BSD_SPARE_1
438
439 }BucketSizeDur;
440
441 typedef enum
442 {
443    RADIO_NW_LAYER_FAIL,
444    TRANSPORT_LAYER_FAIL,
445    PROTOCOL_FAIL,
446    MISCELLANEOUS
447 }CauseGrp;
448
449 typedef enum
450 {
451    UNSPECIFIED_RADIO_NW_CAUSE,
452    RL_FAIL_RLC,
453    UNKNOWN_GNB_CU_UE_F1AP_ID,
454    ALREADY_ALLOCATED_GNB_CU_UE_F1AP_ID,
455    UNKNOWN_GNB_DU_UE_F1AP_ID,
456    ALREADY_ALLOCATED_GNB_DU_UE_F1AP_ID,
457    UNKNOWN_UE_F1AP_ID_PAIR,
458    INCONSISTENT_UE_F1AP_ID_PAIR,
459    INTERACTION_WITH_OTHER_PROCEDURE,
460    UNSUPPORTED_QCI,
461    ACTION_REQUIRED_FOR_RADIO_REASONS,
462    RADIO_RESOURCES_UNAVAILABLE,
463    CANCELLED_PROCEDURE,
464    RELEASE_NORMAL,
465    CELL_UNAVAILABLE,
466    OTHER_RL_FAILURE,
467    UE_REJECTION,
468    RESOURCES_UNAVAILABLE_FOR_SLICE
469 }RadioNwLyrCause;
470
471 typedef enum
472 {
473    UNSPECIFIED_TRANSPORT_LAYER_CAUSE,
474    TRANSPORT_RESOURCE_UNAVAILABLE
475 }TransLyrCause;
476
477 typedef enum
478 {
479    TRANSFER_SYNTAX_ERROR,
480    ABSTRACT_SYNTAX_ERROR_REJECT,
481    ABSTRACT_SYNTAX_ERROR_IGNORE_AND_REJECT,
482    INCOMPATIBLE_MESSAGE_FOR_RECEIVER_STATE,
483    SEMANTIC_ERR,
484    ABSTRAXCT_SYNTAX_ERROR_FALSELY_CONSTRUCTED_MSG,
485    UNSPECIFIED_PROTOCOL_CAUSE
486 }ProtCause;
487
488 typedef enum
489 {
490    CONTROL_PROCESSING_OVERLOAD,
491    NOT_ENOUGH_USER,
492    PLANE_PROCESSING_RESOURCES,
493    HARDWARE_FAIL,
494    INTERVENTION_BY_O_AND_M,
495    UNSPECIFIED_MISC_CAUSE
496 }MiscFailCause;
497
498 typedef enum
499 {
500    MCS_TABLE_QAM64,
501    MCS_TABLE_QAM256,
502    MCS_TABLE_QAM64_LOW_SE
503 }McsTable;
504
505 typedef enum
506 {
507    RSRC_PRB,
508    RSRC_DRB,
509    RSRC_RRC_CONNECTED_USERS
510 }ResourceType;
511
512 typedef enum
513 {
514    TRANSMISSION_ALLOWED,
515    STOP_TRANSMISSION,
516    RESTART_TRANSMISSION
517 }DataTransmissionAction;
518
519 typedef struct failureCause
520 {
521    CauseGrp   type;
522    union
523    {
524       RadioNwLyrCause   radioNwCause;
525       TransLyrCause     transportCause;
526       ProtCause         protcolCause;
527       MiscFailCause     miscCause;
528    }u;
529 }FailureCause;
530
531 typedef struct carrierCfg
532 {
533    bool  pres;
534    uint32_t   bw;             /* DL/UL bandwidth */
535    uint32_t   freq;           /* Absolute frequency of DL/UL point A in KHz */
536    uint16_t   k0[NUM_NUMEROLOGY];          /* K0 for DL/UL */
537    uint16_t   gridSize[NUM_NUMEROLOGY];    /* DL/UL Grid size for each numerologies */
538    uint16_t   numAnt;         /* Number of Tx/Rx antennas */
539 }CarrierCfg;
540
541 typedef struct ssbCfg
542 {
543    uint32_t    ssbPbchPwr;       /* SSB block power */
544    BchPduOpt   bchPayloadFlag;   /* Options for generation of payload */
545    uint8_t     scsCmn;           /* subcarrier spacing for common */
546    uint16_t    ssbOffsetPointA;  /* SSB subcarrier offset from point A */
547    BetaPss     betaPss;
548    SSBPeriod   ssbPeriod;        /* SSB Periodicity in msec */
549    uint8_t     ssbScOffset;       /* Subcarrier Offset */
550    uint8_t     mibPdu[3];           /* MIB payload */
551    uint32_t    ssbMask[SSB_MASK_SIZE];      /* Bitmap for actually transmitted SSB. */
552    uint8_t     beamId[NUM_SSB];
553    bool        multCarrBand;     /* Multiple carriers in a band */
554    bool        multCellCarr;     /* Multiple cells in single carrier */
555 }SsbCfg;
556
557 typedef struct fdmInfo
558 {
559    uint16_t   rootSeqIdx;        /* Root sequence index */
560    uint8_t    numRootSeq;        /* Number of root sequences required for FD */
561    uint16_t   k1;                /* Frequency Offset for each FD */
562    uint8_t    zeroCorrZoneCfg;   /* Zero correlation zone cofig */
563    uint8_t    numUnusedRootSeq;  /* Number of unused root sequence */
564    uint8_t    *unsuedRootSeq;     /* Unused root sequence per FD */
565 }PrachFdmInfo;
566
567 typedef struct prachCfg
568 {
569    bool          pres;
570    uint8_t       prachCfgIdx;         /* PRACH Cfg Index */
571    PrachSeqLen   prachSeqLen;         /* RACH Sequence length: Long/short */
572    uint8_t       prachSubcSpacing;    /* Subcarrier spacing of RACH */
573    RstSetCfg     prachRstSetCfg;      /* PRACH restricted set config */
574    uint16_t      msg1FreqStart;       /* Msg1-FrequencyStart */
575    uint8_t       msg1Fdm;             /* PRACH FDM (1,2,4,8) */
576    uint8_t       rootSeqLen;          /* Root sequence length */
577    PrachFdmInfo  fdm[8];              /* FDM info */
578    uint8_t       totalNumRaPreamble;  /* Total number of RA preambles */
579    uint8_t       ssbPerRach;          /* SSB per RACH occassion */
580    uint8_t       numCbPreamblePerSsb; /* Number of CB preamble per SSB */
581    bool          prachMultCarrBand;   /* Multiple carriers in Band */
582    uint8_t       prachRestrictedSet; /* Support for PRACH restricted set */
583    uint8_t       raContResTmr;        /* RA Contention Resoultion Timer */
584    uint8_t       rsrpThreshSsb;       /* RSRP Threshold SSB */
585    uint8_t       raRspWindow;         /* RA Response Window */
586 }PrachCfg;
587
588 typedef struct schPageCfg
589 {
590   uint8_t  numPO;                    /*Derived from Ns*/
591   bool     poPresent;                /*Whether FirstPDCCH-MonitoringPO is present or not*/
592   uint16_t pagingOcc[MAX_PO_PER_PF]; /*FirstPDCCH-Monitoring Paging Occasion*/
593 }SchPageCfg;
594
595 typedef struct sib1CellCfg
596 {
597    uint8_t  *sib1Pdu;
598    uint16_t sib1PduLen;
599    uint16_t sib1RepetitionPeriod;
600    uint8_t coresetZeroIndex;     /* derived from 4 LSB of pdcchSib1 present in MIB */
601    uint8_t searchSpaceZeroIndex; /* derived from 4 MSB of pdcchSib1 present in MIB */
602    uint16_t sib1Mcs;
603    SchPageCfg  pagingCfg;
604 } Sib1CellCfg; 
605
606 typedef struct bwpParams
607 {
608    uint16_t firstPrb;
609    uint16_t numPrb;
610    uint8_t  scs;
611    uint8_t  cyclicPrefix;
612 }BwpParams;
613
614 typedef struct candidatesInfo
615 {
616    uint8_t aggLevel1;
617    uint8_t aggLevel2;
618    uint8_t aggLevel4;
619    uint8_t aggLevel8;
620    uint8_t aggLevel16;
621 }CandidatesInfo;
622
623 typedef struct searchSpaceCfg
624 {
625    uint8_t searchSpaceId;
626    uint8_t coresetId;
627    uint16_t monitoringSlot;
628    uint16_t duration;
629    uint16_t monitoringSymbol;
630    CandidatesInfo candidate;
631 }SearchSpaceCfg;
632
633 typedef struct pdcchConfigCommon
634 {
635    /* only one search space is configured during SIB1 */
636    SearchSpaceCfg commonSearchSpace;
637    uint8_t raSearchSpaceId;
638 }PdcchConfigCommon;
639
640 typedef struct pdschCfgCommTimeDomRsrcAlloc
641 {
642    uint8_t k0;
643    uint8_t mappingType;
644    uint8_t startSymbol;
645    uint8_t lengthSymbol;
646 }PdschCfgCommTimeDomRsrcAlloc;
647
648 typedef struct pdschConfigCommon
649 {
650    uint8_t  numTimeDomAlloc;
651    /* PDSCH time domain DL resource allocation list */
652    PdschCfgCommTimeDomRsrcAlloc   timeDomRsrcAllocList[MAX_NUM_DL_ALLOC]; 
653 }PdschConfigCommon;
654
655 typedef struct pucchConfigCommon
656 {
657    uint8_t pucchResourceCommon;
658    uint8_t pucchGroupHopping;
659 }PucchConfigCommon;
660
661 /* PUSCH Time Domain Resource Allocation */
662 typedef struct puschTimeDomRsrcAlloc
663 {
664    uint8_t   k2;
665    CommonMappingType   mappingType;
666    uint8_t           startSymbol;
667    uint8_t           symbolLength;
668    uint8_t   startSymbolAndLength;
669 }PuschTimeDomRsrcAlloc;
670
671
672 typedef struct puschConfigCommon
673 {
674    /* PUSCH-TimeDomainResourceAllocation info */
675    uint8_t                 numTimeDomRsrcAlloc;
676    PuschTimeDomRsrcAlloc   timeDomRsrcAllocList[MAX_NUM_UL_ALLOC]; /* PUSCH time domain UL resource allocation list */
677 }PuschConfigCommon;
678
679 typedef struct bwpDlConfig
680 {
681    BwpParams      bwp;
682    PdcchConfigCommon pdcchCommon;
683    PdschConfigCommon pdschCommon;
684 }BwpDlConfig;
685
686 typedef struct bwpUlConfig
687 {
688    BwpParams      bwp;
689    // rach config common sent in PrachCfg
690    PucchConfigCommon pucchCommon;
691    PuschConfigCommon puschCommon;
692 }BwpUlConfig;
693
694 typedef struct plmnInfoList
695 {
696    Plmn           plmn;
697    uint8_t        numSupportedSlice; /* Total slice supporting */
698    Snssai         **snssai;         /* List of supporting snssai*/
699 }PlmnInfoList;
700
701 typedef struct macCellCfg
702 {
703    uint16_t       cellId;           /* Cell Id */
704    uint8_t        carrierId;        /* Carrired Index */
705    uint16_t       phyCellId;        /* Physical cell id */
706    uint8_t        numerology;       /* Supported numerology */
707    DuplexMode     dupType;          /* Duplex type: TDD/FDD */
708    CarrierCfg     dlCarrCfg;        /* DL Carrier configuration */
709    CarrierCfg     ulCarrCfg;        /* UL Carrier configuration */
710    bool           freqShft;         /* Indicates presence of 7.5kHz frequency shift */
711    SsbCfg         ssbCfg;           /* SSB configuration */          
712    PrachCfg       prachCfg;         /* PRACH Configuration */
713 #ifdef NR_TDD
714    TDDCfg         tddCfg;           /* TDD periodicity and slot configuration */
715 #endif
716    RSSIMeasUnit   rssiUnit;         /* RSSI measurement unit */
717    Sib1CellCfg    sib1Cfg;          /* SIB1 config */
718    BwpDlConfig    initialDlBwp;     /* Initial DL BWP */
719    BwpUlConfig    initialUlBwp;     /* Initial UL BWP */
720    uint8_t        dmrsTypeAPos;     /* DMRS Type A position */
721    PlmnInfoList   plmnInfoList;     /* Consits of PlmnId and Snssai list */
722    //RrmPolicy      *rrmPolicy;       /* RRM policy details */ 
723 }MacCellCfg;
724
725 typedef struct macCellCfgCfm
726 {
727    uint16_t       cellId;
728    uint8_t        rsp; 
729 }MacCellCfgCfm;
730
731 typedef struct ulCcchInd
732 {
733    uint16_t cellId;
734    uint16_t crnti;
735    uint16_t ulCcchMsgLen;
736    uint8_t  *ulCcchMsg;
737 }UlCcchIndInfo;
738
739 typedef struct dlCcchInd
740 {
741    uint16_t      cellId;
742    uint16_t      crnti;
743    DlCcchMsgType msgType;
744    uint16_t      dlCcchMsgLen;
745    uint8_t       *dlCcchMsg;
746 }DlCcchIndInfo;
747
748 typedef struct bsrTmrCfg
749 {
750    uint16_t     periodicTimer;
751    uint16_t     retxTimer;
752    uint16_t     srDelayTimer;
753 }BsrTmrCfg;
754
755
756 /* Info of Scheduling Request to Add/Modify */
757 typedef struct schedReqInfo
758 {
759    uint8_t         schedReqId;
760    SrProhibitTimer srProhibitTmr;
761    SrTransMax      srTransMax;
762 }SchedReqInfo;
763
764 /* Scheduling Request Configuration */
765 typedef struct schedReqCfg
766 {
767    uint8_t       addModListCount;
768    SchedReqInfo  addModList[MAX_NUM_SR_CFG_PER_CELL_GRP];   /* List of Scheduling req to be added/modified */
769    uint8_t       relListCount;
770    uint8_t       relList[MAX_NUM_SR_CFG_PER_CELL_GRP];      /* list of scheduling request Id to be deleted */
771 }SchedReqCfg;
772
773 typedef struct tagInfo
774 {
775    uint8_t tagId;
776    TimeAlignmentTimer timeAlignTimer;
777 }TagInfo;
778
779 typedef struct tagCfg
780 {
781    uint8_t      addModListCount;
782    TagInfo      addModList[MAC_NUM_TAGS];  /* List of Tag to Add/Modify */
783    uint8_t      relListCount;
784    uint8_t      relList[MAC_NUM_TAGS];     /* list of Tag Id to release */
785 }TagCfg;
786
787 typedef struct phrCfg
788 {
789    PhrPeriodicTimer periodicTimer;
790    PhrProhibitTimer prohibitTimer; 
791    PhrTxPwrFactorChange txPowerFactor;
792    bool     multiplePHR;       
793    bool     dummy;
794    bool     phrType2OtherCell;
795    PhrModeOtherCG phrOtherCG;
796 }PhrCfg;
797
798 typedef struct macCellGrpCfg
799 {
800    SchedReqCfg schReqCfg;
801    TagCfg      tagCfg;
802    BsrTmrCfg   bsrTmrCfg;
803    bool        phrCfgSetupPres;   /* true/false: phrCfgSetup/phrCfgRelease */
804    PhrCfg      phrCfg;
805 }MacCellGrpCfg;
806
807 typedef struct phyCellGrpCfg
808 {
809    PdschHarqAckCodebook  pdschHarqAckCodebook;
810    uint8_t    pNrFr1;
811 }PhyCellGrpCfg;
812
813 /* Control resource set info */
814 typedef struct controlRsrcSet
815 {
816    uint8_t     cRSetId;                /* Control resource set id */
817    uint8_t     freqDomainRsrc[FREQ_DOM_RSRC_SIZE];  /* Frequency domain resource */
818    uint8_t     duration;
819    REGMappingType cceRegMappingType;
820    PrecoderGranul precoderGranularity;
821    uint16_t    dmrsScramblingId;
822 }ControlRsrcSet;
823
824 /* Search Space info */
825 typedef struct searchSpace
826 {
827    uint8_t     searchSpaceId;
828    uint8_t     cRSetId;
829    MSlotPeriodAndOffset  mSlotPeriodicityAndOffset;
830    uint8_t     mSymbolsWithinSlot[MONITORING_SYMB_WITHIN_SLOT_SIZE];
831    AggrLevel   numCandidatesAggLevel1;      /* Number of candidates for aggregation level 1 */
832    AggrLevel   numCandidatesAggLevel2;      /* Number of candidates for aggregation level 2 */
833    AggrLevel   numCandidatesAggLevel4;      /* Number of candidates for aggregation level 4 */
834    AggrLevel   numCandidatesAggLevel8;      /* Number of candidates for aggregation level 8 */
835    AggrLevel   numCandidatesAggLevel16;     /* Number of candidates for aggregation level 16 */
836    SearchSpaceType searchSpaceType;
837    uint8_t     ueSpecificDciFormat;
838 }SearchSpace;
839
840 /* PDCCH cofniguration */
841 typedef struct pdcchConfig
842 {
843    uint8_t           numCRsetToAddMod;
844    ControlRsrcSet    cRSetToAddModList[MAX_NUM_CRSET];           /* List of control resource set to add/modify */
845    uint8_t           numCRsetToRel;
846    uint8_t           cRSetToRelList[MAX_NUM_CRSET];              /* List of control resource set to release */
847    uint8_t           numSearchSpcToAddMod;
848    SearchSpace       searchSpcToAddModList[MAX_NUM_SEARCH_SPC];  /* List of search space to add/modify */
849    uint8_t           numSearchSpcToRel;
850    uint8_t           searchSpcToRelList[MAX_NUM_SEARCH_SPC];     /* List of search space to release */
851 }PdcchConfig;
852
853 /* PDSCH time domain resource allocation */
854 typedef struct pdschTimeDomRsrcAlloc
855 {
856    uint8_t           *k0;
857    CommonMappingType mappingType;
858    uint8_t           startSymbol;
859    uint8_t           symbolLength;
860    uint8_t           startSymbolAndLength;
861 }PdschTimeDomRsrcAlloc;
862
863
864 typedef struct pdschBundling
865 {
866    struct staticBundling
867    {
868      BundlingSizeSet2 size;
869    }StaticBundling;
870    struct dynamicBundling
871    {
872      BundlingSizeSet1 sizeSet1;
873      BundlingSizeSet2 sizeSet2;
874    }DynamicBundling;
875 }PdschBundling;
876
877 /* DMRS downlink configuration */
878 typedef struct dmrsDlCfg
879 {
880    AddPosType  addPos;       /* DMRS additional position */
881 }DmrsDlCfg;
882
883 /* PDSCH Configuration */
884 typedef struct pdschConfig
885 {
886    DmrsDlCfg               dmrsDlCfgForPdschMapTypeA;
887    ResAllocType            resourceAllocType;
888    uint8_t                 numTimeDomRsrcAlloc;
889    PdschTimeDomRsrcAlloc   timeDomRsrcAllociList[MAX_NUM_DL_ALLOC]; /* PDSCH time domain DL resource allocation list */
890    RBGSize                 rbgSize;
891    CodeWordsSchedDci       numCodeWordsSchByDci;                    /* Number of code words scheduled by DCI */
892    BundlingType            bundlingType;
893    PdschBundling           bundlingInfo;
894 }PdschConfig;
895
896 /* Initial Downlink BWP */
897 typedef struct initialDlBwp
898 {
899    bool          pdcchPresent;
900    PdcchConfig   pdcchCfg;
901    bool          pdschPresent;
902    PdschConfig   pdschCfg;
903 }InitialDlBwp;
904
905 /* BWP Downlink common */
906 typedef struct bwpDlCommon
907 {
908 }BwpDlCommon;
909
910 /* Downlink BWP information */
911 typedef struct dlBwpInfo
912 {
913    uint8_t          bwpId;
914 }DlBwpInfo;
915
916 /* PDCCH Serving Cell configuration */
917 typedef struct pdschServCellCfg
918 {
919    uint8_t              *maxMimoLayers;           
920    NumHarqProcForPdsch  numHarqProcForPdsch;
921    MaxCodeBlkGrpPerTB   *maxCodeBlkGrpPerTb;
922    bool                 *codeBlkGrpFlushInd;
923    PdschXOverhead       *xOverhead;
924 }PdschServCellCfg;
925
926 /* PUCCH Configuration */
927
928 typedef struct pucchResrcSetInfo
929 {
930    uint8_t resrcSetId;
931    uint8_t resrcListCount;
932    uint8_t resrcList[MAX_NUM_PUCCH_PER_RESRC_SET];
933    uint8_t maxPayLoadSize;
934 }PucchResrcSetInfo;
935
936 typedef struct pucchResrcSetCfg
937 {
938    uint8_t resrcSetToAddModListCount;
939    PucchResrcSetInfo resrcSetToAddModList[MAX_NUM_PUCCH_RESRC_SET];
940    uint8_t resrcSetToRelListCount;
941    uint8_t resrcSetToRelList[MAX_NUM_PUCCH_RESRC];
942 }PucchResrcSetCfg;
943
944 typedef struct pucchFormat0
945 {
946    uint8_t initialCyclicShift;
947    uint8_t numSymbols;
948    uint8_t startSymbolIdx;
949 }PucchFormat0;
950
951 typedef struct pucchFormat1
952 {
953    uint8_t initialCyclicShift;
954    uint8_t numSymbols;
955    uint8_t startSymbolIdx;
956    uint8_t timeDomOCC;
957 }PucchFormat1;
958
959 typedef struct pucchFormat2_3
960 {
961    uint8_t numPrbs;
962    uint8_t numSymbols;
963    uint8_t startSymbolIdx;
964 }PucchFormat2_3;
965
966 typedef struct pucchFormat4
967 {
968    uint8_t numSymbols;
969    uint8_t occLen;
970    uint8_t occIdx;
971    uint8_t startSymbolIdx;
972 }PucchFormat4;
973
974 typedef struct pucchResrcInfo
975 {
976    uint8_t  resrcId;
977    uint16_t startPrb;
978    uint8_t  intraFreqHop;
979    uint16_t secondPrbHop;
980    uint8_t  pucchFormat;
981    union
982    {
983       PucchFormat0   *format0; 
984       PucchFormat1   *format1;
985       PucchFormat2_3 *format2;
986       PucchFormat2_3 *format3;
987       PucchFormat4   *format4;
988    }PucchFormat;
989 }PucchResrcInfo;
990
991 typedef struct pucchResrcCfg
992 {
993    uint8_t resrcToAddModListCount;
994    PucchResrcInfo resrcToAddModList[MAX_NUM_PUCCH_RESRC];
995    uint8_t resrcToRelListCount;
996    uint8_t resrcToRelList[MAX_NUM_PUCCH_RESRC];
997 }PucchResrcCfg;
998
999 typedef struct pucchFormatCfg
1000 {
1001    bool interSlotFreqHop;
1002    bool addDmrs;
1003    uint8_t maxCodeRate;
1004    uint8_t numSlots;
1005    bool    pi2BPSK;
1006    bool    harqAckCSI;
1007 }PucchFormatCfg;
1008
1009 typedef struct schedReqResrcInfo
1010 {
1011    uint8_t resrcId;
1012    uint8_t requestId;
1013    uint8_t periodicity;
1014    uint16_t offset;
1015    uint8_t resrc;
1016 }SchedReqResrcInfo;
1017
1018 typedef struct pucchSchedReqCfg
1019 {
1020    uint8_t           schedAddModListCount;
1021    SchedReqResrcInfo schedAddModList[MAX_NUM_SR_CFG_PER_CELL_GRP];
1022    uint8_t           schedRelListCount;
1023    uint8_t           schedRelList[MAX_NUM_SR_CFG_PER_CELL_GRP];
1024 }PucchSchedReqCfg;
1025
1026 typedef struct spatialRelationInfo
1027 {
1028    uint8_t spatialRelationId;
1029    uint8_t servCellIdx;
1030    uint8_t pathLossRefRSId;
1031    uint8_t p0PucchId;
1032    uint8_t closeLoopIdx;
1033 }SpatialRelationInfo;
1034
1035 typedef struct pucchSpatialCfg
1036 {
1037    uint8_t spatialAddModListCount;
1038    SpatialRelationInfo spatialAddModList[MAX_NUM_SPATIAL_RELATIONS];
1039    uint8_t spatialRelListCount;
1040    uint8_t spatialRelList[MAX_NUM_SPATIAL_RELATIONS];
1041 }PucchSpatialCfg;
1042
1043 typedef struct p0PucchCfg
1044 {
1045    uint8_t p0PucchId;
1046    int     p0PucchVal;
1047 }P0PucchCfg;
1048
1049 typedef struct pathLossRefRSCfg
1050 {
1051    uint8_t pathLossRefRSId;
1052 }PathLossRefRSCfg;
1053
1054 typedef struct pucchMultiCsiCfg
1055 {
1056    uint8_t  multiCsiResrcListCount;
1057    uint8_t  multiCsiResrcList[MAX_NUM_PUCCH_RESRC-1];
1058 }PucchMultiCsiCfg;
1059
1060 typedef struct pucchDlDataToUlAck
1061 {
1062    uint8_t  dlDataToUlAckListCount;
1063    uint8_t  dlDataToUlAckList[MAX_NUM_DL_DATA_TO_UL_ACK];
1064 }PucchDlDataToUlAck;
1065
1066 typedef struct pucchPowerControl
1067 {
1068    int deltaF_Format0;
1069    int deltaF_Format1;
1070    int deltaF_Format2;
1071    int deltaF_Format3;
1072    int deltaF_Format4;
1073    uint8_t p0SetCount;
1074    P0PucchCfg p0Set[MAX_NUM_PUCCH_P0_PER_SET];
1075    uint8_t pathLossRefRSListCount;
1076    PathLossRefRSCfg pathLossRefRSList[MAX_NUM_PATH_LOSS_REF_RS];
1077 }PucchPowerControl;
1078
1079 typedef struct pucchCfg
1080 {
1081    PucchResrcSetCfg  *resrcSet;
1082    PucchResrcCfg     *resrc;
1083    PucchFormatCfg    *format1; 
1084    PucchFormatCfg    *format2; 
1085    PucchFormatCfg    *format3; 
1086    PucchFormatCfg    *format4;
1087    PucchSchedReqCfg  *schedReq;
1088    PucchMultiCsiCfg  *multiCsiCfg;
1089    PucchSpatialCfg   *spatialInfo;
1090    PucchDlDataToUlAck *dlDataToUlAck;
1091    PucchPowerControl *powerControl;
1092 }PucchCfg;
1093
1094 /* Transform precoding disabled */
1095 typedef struct transPrecodDisabled
1096 {
1097    uint16_t   scramblingId0;
1098 }TransPrecodDisabled;
1099
1100 /* DMRS Uplink configuration */
1101 typedef struct dmrsUlCfg
1102 {
1103    AddPosType            addPos;               /* DMRS additional position */
1104    TransPrecodDisabled   transPrecodDisabled;  /* Transform precoding disabled */
1105 }DmrsUlCfg;
1106
1107 /* PUSCH Configuration */
1108 typedef struct puschCfg
1109 {
1110    uint8_t                 dataScramblingId;
1111    DmrsUlCfg               dmrsUlCfgForPuschMapTypeA;
1112    ResAllocType            resourceAllocType;
1113    uint8_t                 numTimeDomRsrcAlloc;
1114    PuschTimeDomRsrcAlloc   timeDomRsrcAllocList[MAX_NUM_UL_ALLOC]; /* PUSCH time domain UL resource allocation list */
1115    TransformPrecoder       transformPrecoder;
1116 }PuschCfg;
1117
1118 /* Initial Uplink BWP */
1119 typedef struct initialUlBwp
1120 {
1121    bool       pucchPresent;
1122    PucchCfg   pucchCfg; 
1123    bool       puschPresent;
1124    PuschCfg   puschCfg;
1125 }InitialUlBwp;
1126
1127 /* Uplink BWP information */
1128 typedef struct ulBwpInfo
1129 {
1130    uint8_t        bwpId;
1131 }UlBwpInfo;
1132
1133 /* Serving cell configuration */
1134 typedef struct servCellCfgInfo
1135 {
1136    InitialDlBwp       initDlBwp;
1137    uint8_t            numDlBwpToAdd;
1138    DlBwpInfo          DlBwpToAddList[MAX_NUM_BWP];
1139    uint8_t            firstActvDlBwpId;
1140    uint8_t            defaultDlBwpId;
1141    uint8_t            *bwpInactivityTmr;
1142    PdschServCellCfg   pdschServCellCfg;
1143    InitialUlBwp       initUlBwp;
1144    uint8_t            numUlBwpToAdd;
1145    UlBwpInfo          UlBwpToAddList[MAX_NUM_BWP];
1146    uint8_t            firstActvUlBwpId;
1147 }ServCellCfgInfo;
1148
1149 /* Special cell configuration */
1150 typedef struct spCellCfg
1151 {
1152    uint8_t           servCellIdx;
1153    ServCellCfgInfo   servCellCfg;
1154 }SpCellCfg;
1155
1156 typedef struct ambrCfg
1157 {
1158    uint32_t ulBr;   /* UL Bit rate */
1159 }AmbrCfg;
1160
1161 typedef struct nonDynFiveQi
1162 {
1163    uint16_t   fiveQi;
1164    uint8_t    priorLevel;
1165    uint16_t   avgWindow;
1166    uint16_t   maxDataBurstVol;
1167 }NonDynFiveQi;
1168
1169 typedef struct dynFiveQi
1170 {
1171    uint8_t    priorLevel;
1172    uint16_t   packetDelayBudget;
1173    uint8_t    packetErrRateScalar;
1174    uint8_t    packetErrRateExp;
1175    uint16_t   fiveQi;
1176    uint8_t    delayCritical;
1177    uint16_t   avgWindow;
1178    uint16_t   maxDataBurstVol;
1179 }DynFiveQi;
1180
1181 typedef struct ngRanAllocAndRetPri
1182 {
1183    uint8_t priorityLevel;
1184    uint8_t preEmptionCap;
1185    uint8_t preEmptionVul;
1186 }NgRanAllocAndRetPri;
1187
1188 typedef struct grbQosInfo
1189 {
1190    uint32_t maxFlowBitRateDl;
1191    uint32_t maxFlowBitRateUl;
1192    uint32_t guarFlowBitRateDl;
1193    uint32_t guarFlowBitRateUl;
1194 }GrbQosInfo;
1195
1196 typedef struct drbQos
1197 {
1198    QosType  fiveQiType;   /* Dynamic or non-dynamic */ 
1199    union
1200    {
1201       NonDynFiveQi   nonDyn5Qi;
1202       DynFiveQi      dyn5Qi;
1203    }u;
1204    NgRanAllocAndRetPri ngRanRetPri;
1205    GrbQosInfo grbQosInfo;
1206    uint16_t             pduSessionId;
1207    uint32_t             ulPduSessAggMaxBitRate;
1208 }DrbQosInfo;
1209
1210 typedef struct ulLcCfg
1211 {
1212    uint8_t priority;
1213    uint8_t lcGroup;
1214    uint8_t schReqId;
1215    PBitRate pbr;        // prioritisedBitRate
1216    BucketSizeDur bsd;        // bucketSizeDuration
1217 }UlLcCfg;
1218
1219 typedef struct duLcCfg
1220 {
1221    LcPriority lcp;      // logical Channel Prioritization
1222 }DlLcCfg;
1223
1224 typedef struct lcCfg
1225 {
1226    ConfigType configType;
1227    uint8_t lcId;
1228    DrbQosInfo *drbQos; 
1229    Snssai  *snssai;
1230    bool ulLcCfgPres;
1231    UlLcCfg ulLcCfg;
1232    DlLcCfg dlLcCfg;
1233 }LcCfg;
1234
1235 typedef struct modulationInfo
1236 {
1237    uint8_t     modOrder;    /* Modulation order */
1238    uint8_t     mcsIndex;    /* MCS Index */
1239    McsTable    mcsTable;    /* MCS table */
1240 }ModulationInfo;
1241
1242 typedef struct macUeCfg
1243 {
1244    uint16_t cellId;
1245    uint8_t  ueId;
1246    uint16_t crnti;
1247    bool macCellGrpCfgPres;
1248    MacCellGrpCfg macCellGrpCfg;
1249    bool phyCellGrpCfgPres;
1250    PhyCellGrpCfg phyCellGrpCfg;
1251    bool spCellCfgPres;
1252    SpCellCfg spCellCfg;
1253    AmbrCfg   *ambrCfg;
1254    ModulationInfo dlModInfo;    /* DL modulation info */
1255    ModulationInfo ulModInfo;    /* UL modulation info */
1256    uint8_t numLcs;
1257    LcCfg lcCfgList[MAX_NUM_LC];
1258    UeCfgState macUeCfgState;    /* InActive / Completed */
1259    DataTransmissionAction transmissionAction;
1260 }MacUeCfg;
1261
1262 typedef struct nrcgi
1263 {
1264    Plmn      plmn;
1265    uint16_t  cellId;
1266 }Nrcgi;
1267
1268 typedef struct srbFailInfo
1269 {
1270    uint8_t       srbId;
1271    FailureCause  cause;
1272 }SRBFailInfo;
1273
1274 typedef struct drbFailInfo
1275 {
1276    uint8_t       drbId;
1277    FailureCause  cause;
1278 }DRBFailInfo;
1279
1280 typedef struct sCellFailInfo
1281 {
1282    Nrcgi         nrcgi;
1283    FailureCause  cause;
1284 }SCellFailInfo;
1285
1286 typedef struct ueCfgRsp
1287 {
1288    uint16_t       cellId;
1289    uint16_t       ueId;
1290    MacRsp         result;
1291    uint8_t        numSRBFailed;   /* valid values : 0 to MAX_NUM_SRB */ 
1292    SRBFailInfo    *failedSRBlisti;
1293    uint8_t        numDRBFailed;   /* valid values : 0 to MAX_NUM_DRB */
1294    DRBFailInfo    *failedDRBlist;
1295    uint8_t        numSCellFailed; /* valid values : 0 to MAX_NUM_SCELL */
1296    SCellFailInfo  *failedSCellList;
1297 }MacUeCfgRsp;
1298
1299 typedef struct rachRsrcReq
1300 {
1301    uint16_t cellId;
1302    uint16_t ueId;
1303    uint8_t  numSsb;
1304    uint8_t  ssbIdx[MAX_NUM_SSB];
1305 }MacRachRsrcReq;
1306
1307 typedef struct macCfraSsbResource
1308 {
1309    uint8_t  ssbIdx;
1310    uint8_t  raPreambleIdx;
1311 }MacCfraSsbResource;
1312
1313 typedef struct macCfraResource
1314 {
1315    uint8_t   numSsb;
1316    MacCfraSsbResource ssbResource[MAX_NUM_SSB];
1317 }MacCfraResource;
1318
1319 typedef struct macRachRsrcRsp
1320 {
1321    uint16_t   cellId;
1322    uint16_t   ueId;
1323    MacRsp     result;
1324    uint16_t   newCrnti;     /* This parameter maps to 3GPP TS 38.331 newUE-Identity */
1325    MacCfraResource  cfraResource;
1326 }MacRachRsrcRsp;
1327
1328 typedef struct ueDelete
1329 {
1330     uint16_t cellId;
1331     uint8_t  ueId;
1332     uint16_t crnti;
1333 }MacUeDelete;
1334
1335 typedef struct ueDeleteRsp
1336 {
1337    uint16_t cellId;
1338    uint8_t  ueId;
1339    UeDeleteStatus result;
1340 }MacUeDeleteRsp;
1341
1342 typedef struct macCellDelete
1343 {
1344    uint16_t cellId;
1345 }MacCellDelete;
1346
1347 typedef struct macCellDeleteRsp
1348 {
1349    uint16_t cellId;
1350    CellDeleteStatus result;
1351 }MacCellDeleteRsp;
1352
1353 typedef struct macSliceRsp
1354 {
1355    Snssai     snssai;
1356    MacRsp     rsp;
1357    RspReason  cause;  
1358 }MacSliceRsp;
1359
1360 typedef struct rrmPolicyRatio
1361 {
1362    uint8_t policyMaxRatio;
1363    uint8_t policyMinRatio;
1364    uint8_t policyDedicatedRatio;
1365 }RrmPolicyRatio;
1366
1367 typedef struct macSliceRrmPolicy
1368 {
1369    Snssai  snssai;
1370    RrmPolicyRatio *rrmPolicyRatio;
1371 }MacSliceRrmPolicy;
1372
1373 typedef struct macSliceCfgReq
1374 {
1375    uint8_t  numOfConfiguredSlice;
1376    MacSliceRrmPolicy **listOfSliceCfg;
1377 }MacSliceCfgReq;
1378
1379 typedef struct macSliceCfgRsp
1380 {
1381    uint8_t  numSliceCfgRsp;
1382    MacSliceRsp  **listOfSliceCfgRsp;
1383 }MacSliceCfgRsp;
1384
1385 typedef struct macPcchInd
1386 {
1387    uint16_t  cellId;
1388    uint16_t  pf;
1389    uint8_t   i_s;
1390    uint16_t  pduLen;
1391    uint8_t  *pcchPdu;
1392 }MacPcchInd;
1393
1394 /* Functions for CellUp Ind from MAC to DU APP*/
1395 typedef uint8_t (*DuMacCellUpInd) ARGS((
1396          Pst       *pst,
1397          OduCellId *cellId ));
1398
1399 /* Functions for slot Ind from MAC to DU APP*/
1400 typedef uint8_t (*DuMacSlotInd) ARGS((
1401          Pst       *pst,
1402          SlotTimingInfo *slotIndInfo));
1403
1404 /* Functions for stop Ind from MAC to DU APP*/
1405 typedef uint8_t (*DuMacStopInd) ARGS((
1406          Pst        *pst,
1407          OduCellId  *cellId ));
1408
1409 /* Functions for mac cell start req */
1410 typedef uint8_t (*DuMacCellStart) ARGS((
1411          Pst        *pst, 
1412          OduCellId  *cellId));
1413
1414 /* Functions for mac cell stop request */
1415 typedef uint8_t (*DuMacCellStop) ARGS((
1416          Pst        *pst,
1417          OduCellId  *cellId ));
1418
1419 /* Function pointers for packing macCellCfg Request and Confirm */
1420 typedef uint8_t (*packMacCellCfgReq) ARGS((
1421          Pst           *pst,
1422          MacCellCfg    *macCellCfg ));
1423
1424 typedef uint8_t (*packMacCellCfgConfirm) ARGS((
1425          Pst              *pst,
1426          MacCellCfgCfm    *macCellCfgCfm ));
1427
1428 typedef uint8_t (*DuMacCellCfgReq) ARGS((
1429          Pst        *pst,        
1430          MacCellCfg *macCellCfg));
1431
1432 typedef uint8_t (*DuMacCellCfgCfm) ARGS((
1433          Pst        *pst,        
1434          MacCellCfgCfm *macCellCfgCfm ));
1435
1436 /* Functions for UL CCCH Ind from MAC to DU APP*/
1437 typedef uint8_t (*DuMacUlCcchInd) ARGS((
1438          Pst           *pst,
1439          UlCcchIndInfo *ulCcchIndInfo ));
1440
1441 /* Functions for DL CCCH Ind from DU APP to MAC*/
1442 typedef uint8_t (*DuMacDlCcchInd) ARGS((
1443          Pst           *pst,
1444          DlCcchIndInfo *dlCcchIndInfo ));
1445
1446 /* UE create Request from DU APP to MAC*/
1447 typedef uint8_t (*DuMacUeCreateReq) ARGS((
1448          Pst           *pst,
1449          MacUeCfg      *ueCfg ));
1450
1451 /* UE create Response from MAC to DU APP */
1452 typedef uint8_t (*MacDuUeCfgRspFunc) ARGS((
1453          Pst           *pst, 
1454          MacUeCfgRsp   *cfgRsp));
1455
1456 /* UE Reconfig Request from DU APP to MAC*/
1457 typedef uint8_t (*DuMacUeReconfigReq) ARGS((
1458          Pst           *pst,
1459          MacUeCfg      *ueCfg ));
1460
1461 /* RACH Resource Request from DU APP to MAC*/
1462 typedef uint8_t (*DuMacRachRsrcReq) ARGS((
1463     Pst            *pst,
1464     MacRachRsrcReq *rachRsrcReq));
1465
1466 /* RACH Resource Response from MAC to DU APP*/
1467 typedef uint8_t (*MacDuRachRsrcRspFunc) ARGS((
1468     Pst            *pst,
1469     MacRachRsrcRsp *rachRsrcRsp));
1470
1471 /* UE Delete Request from DU APP to MAC*/
1472 typedef uint8_t (*DuMacUeDeleteReq) ARGS((
1473      Pst           *pst,
1474      MacUeDelete   *ueDel ));
1475
1476 /* UE Delete Response from MAC to DU APP*/
1477 typedef uint8_t (*MacDuUeDeleteRspFunc) ARGS((
1478      Pst            *pst,
1479      MacUeDeleteRsp *deleteRsp));
1480
1481 /* Cell Delete Request from DU APP to MAC*/
1482 typedef uint8_t (*DuMacCellDeleteReq) ARGS((
1483      Pst           *pst,
1484      MacCellDelete *cellDelete ));
1485
1486 /* Cell Delete Response from MAC to DU APP*/
1487 typedef uint8_t (*MacDuCellDeleteRspFunc) ARGS((
1488      Pst            *pst,
1489      MacCellDeleteRsp *cellDeleteRsp));
1490
1491 /* Slice Cfg Request from DU APP to MAC*/
1492 typedef uint8_t (*DuMacSliceCfgReq) ARGS((
1493      Pst           *pst,
1494      MacSliceCfgReq *CfgReq));
1495
1496 /* Slice Cfg Response from MAC to DU APP */
1497 typedef uint8_t (*MacDuSliceCfgRspFunc) ARGS((
1498          Pst           *pst, 
1499          MacSliceCfgRsp   *cfgRsp));
1500
1501 /* Slice ReReCfg Request from DU APP to MAC*/
1502 typedef uint8_t (*DuMacSliceRecfgReq) ARGS((
1503      Pst           *pst,
1504      MacSliceCfgReq *CfgReq));
1505
1506 /* Slice ReReCfg Response from MAC to DU APP */
1507 typedef uint8_t (*MacDuSliceReCfgRspFunc) ARGS((
1508         Pst           *pst,
1509         MacSliceCfgRsp   *cfgRsp));
1510
1511 /* Pcch indication from DU APP to MAC*/
1512 typedef uint8_t (*DuMacDlPcchInd) ARGS((
1513      Pst        *pst,
1514      MacPcchInd *pcchInd));
1515
1516 uint64_t ueBitMapPerCell[MAX_NUM_CELL]; /* Bit Map to store used/free UE-IDX per Cell */
1517
1518 uint8_t packMacCellUpInd(Pst *pst, OduCellId *cellId);
1519 uint8_t unpackMacCellUpInd(DuMacCellUpInd func, Pst *pst, Buffer *mBuf);
1520 uint8_t duHandleCellUpInd(Pst *pst, OduCellId *cellId);
1521 uint8_t packMacCellStart(Pst *pst, OduCellId *cellId);
1522 uint8_t unpackMacCellStart(DuMacCellStart func, Pst *pst, Buffer *mBuf);
1523 uint8_t MacProcCellStart(Pst *pst, OduCellId *cellId);
1524 uint8_t packMacCellStop(Pst *pst, OduCellId *cellId);
1525 uint8_t unpackMacCellStop(DuMacCellStop func, Pst *pst, Buffer *mBuf);
1526 uint8_t MacProcCellStop(Pst *pst, OduCellId *cellId);
1527 uint8_t packMacCellCfg(Pst *pst, MacCellCfg *macCellCfg);
1528 uint8_t unpackDuMacCellCfg(DuMacCellCfgReq func,  Pst *pst,  Buffer *mBuf);
1529 uint8_t MacProcCellCfgReq(Pst *pst, MacCellCfg *macCellCfg);
1530 uint8_t packMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm);
1531 uint8_t unpackMacCellCfgCfm(DuMacCellCfgCfm func, Pst *pst, Buffer *mBuf);
1532 uint8_t duHandleMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm);
1533 uint8_t packMacStopInd(Pst *pst, OduCellId *cellId);
1534 uint8_t unpackMacStopInd(DuMacStopInd func, Pst *pst, Buffer *mBuf);
1535 uint8_t duHandleStopInd(Pst *pst, OduCellId *cellId);
1536 uint8_t packMacUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo);
1537 uint8_t unpackMacUlCcchInd(DuMacUlCcchInd func, Pst *pst, Buffer *mBuf);
1538 uint8_t duHandleUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo);
1539 uint8_t packMacDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo);
1540 uint8_t unpackMacDlCcchInd(DuMacDlCcchInd func, Pst *pst, Buffer *mBuf);
1541 uint8_t MacProcDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo);
1542 uint8_t packDuMacUeCreateReq(Pst *pst, MacUeCfg *ueCfg);
1543 uint8_t unpackMacUeCreateReq(DuMacUeCreateReq func, Pst *pst, Buffer *mBuf);
1544 uint8_t MacProcUeCreateReq(Pst *pst, MacUeCfg *ueCfg);
1545 uint8_t sendStopIndMacToDuApp(uint16_t cellId);
1546 uint8_t packDuMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp);
1547 uint8_t unpackDuMacUeCfgRsp(MacDuUeCfgRspFunc func, Pst *pst, Buffer *mBuf);
1548 uint8_t DuProcMacUeCfgRsp(Pst *pst, MacUeCfgRsp *cfgRsp);
1549 uint8_t packDuMacUeReconfigReq(Pst *pst, MacUeCfg *ueCfg);
1550 uint8_t unpackMacUeReconfigReq(DuMacUeReconfigReq func, Pst *pst, Buffer *mBuf);
1551 uint8_t MacProcUeReconfigReq(Pst *pst, MacUeCfg *ueCfg);
1552 uint8_t packDuMacRachRsrcReq(Pst *pst, MacRachRsrcReq *rachRsrcReq);
1553 uint8_t unpackMacRachRsrcReq(DuMacRachRsrcReq func, Pst *pst, Buffer *mBuf);
1554 uint8_t MacProcRachRsrcReq(Pst *pst, MacRachRsrcReq *rachRsrcReq);
1555 uint8_t packDuMacRachRsrcRsp(Pst *pst, MacRachRsrcRsp *rachRsrcRsp);
1556 uint8_t unpackDuMacRachRsrcRsp(MacDuRachRsrcRspFunc func, Pst *pst, Buffer *mBuf);
1557 uint8_t DuProcMacRachRsrcRsp(Pst *pst, MacRachRsrcRsp *rachRsrcRsp);
1558 uint8_t packDuMacUeDeleteReq(Pst *pst, MacUeDelete *ueDelete);
1559 uint8_t MacProcUeDeleteReq(Pst *pst,  MacUeDelete *ueDelete);
1560 uint8_t unpackMacUeDeleteReq(DuMacUeDeleteReq func, Pst *pst, Buffer *mBuf);
1561 uint8_t packDuMacUeDeleteRsp(Pst *pst, MacUeDeleteRsp *deleteRsp);
1562 uint8_t DuProcMacUeDeleteRsp(Pst *pst, MacUeDeleteRsp *deleteRsp);
1563 uint8_t unpackDuMacUeDeleteRsp(MacDuUeDeleteRspFunc func, Pst *pst, Buffer *mBuf);
1564 uint8_t packDuMacCellDeleteReq(Pst *pst, MacCellDelete *cellDelete);
1565 uint8_t MacProcCellDeleteReq(Pst *pst, MacCellDelete *cellDelete);
1566 uint8_t unpackMacCellDeleteReq(DuMacCellDeleteReq func, Pst *pst, Buffer *mBuf);
1567 uint8_t packDuMacCellDeleteRsp(Pst *pst, MacCellDeleteRsp *cellDeleteRsp);
1568 uint8_t DuProcMacCellDeleteRsp(Pst *pst, MacCellDeleteRsp *cellDeleteRsp);
1569 uint8_t unpackDuMacCellDeleteRsp(MacDuCellDeleteRspFunc func, Pst *pst, Buffer *mBuf);
1570 uint8_t packDuMacSliceCfgReq(Pst *pst, MacSliceCfgReq *sliceCfgReq);
1571 uint8_t MacProcSliceCfgReq(Pst *pst, MacSliceCfgReq *sliceCfgReq);
1572 uint8_t unpackMacSliceCfgReq(DuMacSliceCfgReq func, Pst *pst, Buffer *mBuf);
1573 uint8_t DuProcMacSliceCfgRsp(Pst *pst,  MacSliceCfgRsp *cfgRsp);
1574 uint8_t packDuMacSliceCfgRsp(Pst *pst, MacSliceCfgRsp *cfgRsp);
1575 uint8_t unpackDuMacSliceCfgRsp(MacDuSliceCfgRspFunc func, Pst *pst, Buffer *mBuf);
1576 uint8_t packDuMacSliceRecfgReq(Pst *pst, MacSliceCfgReq *sliceReCfgReq);
1577 uint8_t MacProcSliceReCfgReq(Pst *pst, MacSliceCfgReq *sliceReCfgReq);
1578 uint8_t unpackMacSliceReCfgReq(DuMacSliceRecfgReq func, Pst *pst, Buffer *mBuf);
1579 uint8_t DuProcMacSliceReCfgRsp(Pst *pst,  MacSliceCfgRsp *cfgRsp);
1580 uint8_t packDuMacSliceReCfgRsp(Pst *pst, MacSliceCfgRsp *cfgRsp);
1581 uint8_t unpackDuMacSliceReCfgRsp(MacDuSliceReCfgRspFunc func, Pst *pst, Buffer *mBuf);
1582 uint8_t duHandleSlotInd(Pst *pst, SlotTimingInfo *slotIndInfo);
1583 uint8_t packMacSlotInd(Pst *pst, SlotTimingInfo *slotIndInfo);
1584 uint8_t unpackDuMacSlotInd(DuMacSlotInd func, Pst *pst, Buffer *mBuf);
1585 uint8_t packDuMacDlPcchInd(Pst *pst, MacPcchInd *pcchInd);
1586 uint8_t MacProcDlPcchInd(Pst *pst, MacPcchInd *pcchInd);
1587 uint8_t unpackMacDlPcchInd(DuMacDlPcchInd func, Pst *pst, Buffer *mBuf);
1588 int8_t getFreeBitFromUeBitMap(uint16_t cellId);
1589 void unsetBitInUeBitMap(uint16_t cellId, uint8_t bitPos);
1590 #endif
1591
1592
1593 /**********************************************************************
1594   End of file
1595  **********************************************************************/