[Epic-ID: ODUHIGH-516][Task-ID: ODUHIGH-530] Implementation of Stats Modification...
[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 #define MAX_SI_MESSAGE 32 /* As per 138 331 V15.3, RRC Multiplicity and type constraint definitions maxSI-Message = 32 */ 
25 #define NUM_SIB 32         /* As per 138 331 V15.3, RRC Multiplicity and type constraint definitions  maxSIB = 32 */ 
26 #define NUM_SSB         1       /* max value is 64 */
27 #define SSB_MASK_SIZE   1       /* SSB mask size is 32bit for sub6 */
28 #define SIB1_REPETITION_PERIOD   20
29 #define CORESET_0_INDEX      0
30 #define CORESET_1_INDEX      1
31 #define CORESET_2_INDEX      2
32 #define CORESET_3_INDEX      3
33 #define CORESET_4_INDEX      4
34 #define SEARCHSPACE_0_INDEX   0
35 #define SEARCHSPACE_1_INDEX   1
36 #define SEARCHSPACE_2_INDEX   2
37 #define SEARCHSPACE_3_INDEX   3
38 #define SEARCHSPACE_4_INDEX   4
39 #define SS_MONITORING_SLOT_SL1   0 /* all slots */
40 #define SS_MONITORING_SYMBOL     0x2000; /* symbol-0, set 14th bit */
41
42 /* Macro for Ue Context */
43 #define MAX_NUM_SR_CFG_PER_CELL_GRP 8   /* Max number of scheduling request config per cell group */
44 #define MAC_NUM_TAGS 4                  /* Max number of timing advance groups */
45 #define MAX_NUM_BWP  4                  /* Max number of BWP per serving cell */
46 #define MAX_NUM_CRSET  3                /* Max number of control resource set in add/modify/release list */
47 #define MAX_NUM_SEARCH_SPC  10          /* Max number of search space in add/modify/release list */
48 #define MONITORING_SYMB_WITHIN_SLOT_SIZE 2  /* i.e. 2 bytes because size of monitoring symbols within slot is 14 bits */
49 #define MAX_NUM_DL_ALLOC 16             /* Max number of pdsch time domain downlink allocation */
50 #define MAX_NUM_UL_ALLOC 16             /* Max number of pusch time domain uplink allocation */
51 #define MAX_NUM_SCELL  32
52
53 /* PUCCH Configuration Macro */
54 #define MAX_NUM_PUCCH_RESRC 128
55 #define MAX_NUM_PUCCH_RESRC_SET 4
56 #define MAX_NUM_PUCCH_PER_RESRC_SET 32
57 #define MAX_NUM_SPATIAL_RELATIONS 8
58 #define MAX_NUM_PUCCH_P0_PER_SET 8
59 #define MAX_NUM_PATH_LOSS_REF_RS 4
60 #define MAX_NUM_DL_DATA_TO_UL_ACK 15
61
62 /* Event IDs */
63 #define EVENT_MAC_CELL_CONFIG_REQ    200
64 #define EVENT_MAC_CELL_CONFIG_CFM    201
65 #define EVENT_MAC_CELL_START         202
66 #define EVENT_MAC_CELL_STOP          203
67 #define EVENT_MAC_CELL_UP_IND        204
68 #define EVENT_MAC_STOP_IND           205
69 #define EVENT_MAC_UL_CCCH_IND        206
70 #define EVENT_MAC_DL_CCCH_IND        207
71 #define EVENT_MAC_UE_CREATE_REQ      208
72 #define EVENT_MAC_UE_CREATE_RSP      209
73 #define EVENT_MAC_UE_RECONFIG_REQ    210
74 #define EVENT_MAC_UE_RECONFIG_RSP    211
75 #define EVENT_MAC_UE_DELETE_REQ      212
76 #define EVENT_MAC_UE_DELETE_RSP      213
77 #define EVENT_MAC_CELL_DELETE_REQ    214
78 #define EVENT_MAC_CELL_DELETE_RSP    215
79 #define EVENT_MAC_SLICE_CFG_REQ      216
80 #define EVENT_MAC_SLICE_CFG_RSP      217
81 #define EVENT_MAC_SLICE_RECFG_REQ    218
82 #define EVENT_MAC_SLICE_RECFG_RSP    219
83 #define EVENT_MAC_SLOT_IND           220
84 #define EVENT_MAC_RACH_RESOURCE_REQ  221
85 #define EVENT_MAC_RACH_RESOURCE_RSP  222
86 #define EVENT_MAC_RACH_RESOURCE_REL  223
87 #define EVENT_MAC_DL_PCCH_IND        224
88 #define EVENT_MAC_UE_RESET_REQ       225
89 #define EVENT_MAC_UE_RESET_RSP       226
90 #define EVENT_MAC_UE_SYNC_STATUS_IND 227
91 #define EVENT_MAC_DL_BROADCAST_REQ   228
92 #define EVENT_MAC_STATISTICS_REQ     229
93 #define EVENT_MAC_STATISTICS_RSP     230
94 #define EVENT_MAC_STATISTICS_IND     231
95 #define EVENT_MAC_STATS_DELETE_REQ   232
96 #define EVENT_MAC_STATS_DELETE_RSP   233
97 #define EVENT_MAC_STATISTICS_MODIFY_REQ     234
98 #define EVENT_MAC_STATISTICS_MODIFY_RSP     235
99
100 #define BSR_PERIODIC_TIMER_SF_10 10
101 #define BSR_RETX_TIMER_SF_320 320
102 #define BSR_SR_DELAY_TMR_2560 2560
103
104 #define PAGING_SCHED_DELTA  4
105 #define MAX_PLMN 2
106
107 /********************* Global Variable ********************/
108 uint64_t ueBitMapPerCell[MAX_NUM_CELL]; /* Bit Map to store used/free UE-IDX per Cell */
109
110 /********************* Interface structure definition ********************/
111 typedef enum
112 {
113    SIB_TYPE2,
114    SIB_TYPE3,
115    SIB_TYPE4,
116    SIB_TYPE5,
117    SIB_TYPE6,
118    SIB_TYPE7,
119    SIB_TYPE8,
120    SIB_TYPE9,
121    SPARE
122 }SibType;
123
124 typedef enum
125 {
126    SSB_PER_RACH_OCCASION_ONE_EIGHTH,
127    SSB_PER_RACH_OCCASION_ONE_FOURTH,
128    SSB_PER_RACH_OCCASION_ONE_HALF,
129    SSB_PER_RACH_OCCASION_ONE,
130    SSB_PER_RACH_OCCASION_TWO,
131    SSB_PER_RACH_OCCASION_FOUR,
132    SSB_PER_RACH_OCCASION_EIGHT,
133    SSB_PER_RACH_OCCASION_SIXTEEN
134 }SsbPerRachOccasion;
135
136 typedef enum
137 {
138    BROADCASTING,
139    NOTBROADCASTING,
140 }SiBroadcastStatus;
141
142 typedef enum
143 {
144    RF8,
145    RF16,
146    RF32,
147    RF64,
148    RF128,
149    RF256,
150    RF512
151 }SiPeriodicity;
152
153 typedef enum
154 {
155    S5,
156    S10,
157    S20, 
158    S40, 
159    S80, 
160    S160, 
161    S320, 
162    S640, 
163    S1280
164 }SiWindowLength;
165
166 typedef enum
167 {
168    SI_REQ_PERIOD_1,
169    SI_REQ_PERIOD_2,
170    SI_REQ_PERIOD_4,
171    SI_REQ_PERIOD_6,
172    SI_REQ_PERIOD_8,
173    SI_REQ_PERIOD_10,
174    SI_REQ_PERIOD_12,
175    SI_REQ_PERIOD_16
176 }SiRequestPeriod;
177
178 typedef enum
179 {
180    MAC_DU_APP_RSP_NOK,
181    MAC_DU_APP_RSP_OK
182 }MacRsp;
183
184 typedef enum
185 {
186    IN_SYNC,
187    OUT_OF_SYNC,
188    OUT_OF_SUNC_MAX_RETRIES
189 }SyncStatus;
190
191 typedef enum
192 {
193    DUP_MODE_FDD,
194    DUP_MODE_TDD
195 }DuplexMode;
196
197 typedef enum
198 {
199    MAC_GEN_FULL_PBCH_PAYLD,   /* MAC generated the full PBCH Payload */
200    PHY_GEN_TIMING_PBCH_BIT,   /* PHY generates the timing PBCH bits */
201    PHY_GEN_FULL_PBCH_PAYLD    /* PHY generates full PBCH payload */
202 }BchPduOpt;
203
204 typedef enum
205 {
206    LONG_SEQUENCE,
207    SHORT_SEQUENCE
208 }PrachSeqLen;
209
210 typedef enum
211 {
212    UNRESTRICTED,
213    RESTRICTED_SET_TYPE_A,
214    RESTRICTED_SET_TYPE_B
215 }RstSetCfg;
216
217 typedef enum
218 {
219    DONT_REPORT_RSSI,
220    RSSI_UNIT_DBM,
221    RSSI_UNIT_DBFS
222 }RSSIMeasUnit;
223
224 typedef enum
225 {
226    BETA_PSS_0DB,
227    BETA_PSS_3DB
228 }BetaPss;
229
230 typedef enum 
231 {
232    SSB_PRDCTY_MS_5,
233    SSB_PRDCTY_MS_10,
234    SSB_PRDCTY_MS_20,
235    SSB_PRDCTY_MS_40,
236    SSB_PRDCTY_MS_80,
237    SSB_PRDCTY_MS_160
238 }SSBPeriod;
239
240 typedef enum
241 {
242    RRC_REJECT,
243    RRC_SETUP
244 }DlCcchMsgType;
245
246 /* Enums for Ue Create Request */
247
248 /* SR PROHIBIT TIMER */
249 typedef enum
250 {
251    SR_PROHIBIT_MS_1,
252    SR_PROHIBIT_MS_2,
253    SR_PROHIBIT_MS_4,
254    SR_PROHIBIT_MS_8,
255    SR_PROHIBIT_MS_16,
256    SR_PROHIBIT_MS_32,
257    SR_PROHIBIT_MS_64,
258    SR_PROHIBIT_MS_128
259 }SrProhibitTimer;
260
261 typedef enum
262 {
263    SR_TRANS_MAX_N_4,
264    SR_TRANS_MAX_N_8,
265    SR_TRANS_MAX_N_16,
266    SR_TRANS_MAX_N_32,
267    SR_TRANS_MAX_N_64,
268    SR_TRANS_MAX_spare3,
269    SR_TRANS_MAX_spare2,
270    SR_TRANS_MAX_spare1
271 }SrTransMax;
272
273 typedef enum
274 {
275    TIME_ALIGNMENT_TIMER_MS_500,
276    TIME_ALIGNMENT_TIMER_MS_750,
277    TIME_ALIGNMENT_TIMER_MS_1280,
278    TIME_ALIGNMENT_TIMER_MS_1920,
279    TIME_ALIGNMENT_TIMER_MS_2560,
280    TIME_ALIGNMENT_TIMER_MS_5120,
281    TIME_ALIGNMENT_TIMER_MS_10240,
282    TIME_ALIGNMENT_TIMER_INFINITY
283 }TimeAlignmentTimer;
284
285 typedef enum
286 {
287    PHR_PERIODIC_TIMER_SF_10,
288    PHR_PERIODIC_TIMER_SF_20,
289    PHR_PERIODIC_TIMER_SF_50,
290    PHR_PERIODIC_TIMER_SF_100,
291    PHR_PERIODIC_TIMER_SF_200,
292    PHR_PERIODIC_TIMER_SF_500,
293    PHR_PERIODIC_TIMER_SF_1000,
294    PHR_PERIODIC_TIMER_INFINITY
295 }PhrPeriodicTimer;
296
297 typedef enum
298 {
299    PHR_PROHIBIT_TIMER_SF_0,
300    PHR_PROHIBIT_TIMER_SF_10,
301    PHR_PROHIBIT_TIMER_SF_20,
302    PHR_PROHIBIT_TIMER_SF_50,
303    PHR_PROHIBIT_TIMER_SF_100,
304    PHR_PROHIBIT_TIMER_SF_200,
305    PHR_PROHIBIT_TIMER_SF_500,
306    PHR_PROHIBIT_TIMER_SF_1000
307 }PhrProhibitTimer;
308
309 typedef enum
310 {
311    PHR_TX_PWR_FACTOR_CHANGE_DB_1,
312    PHR_TX_PWR_FACTOR_CHANGE_DB_3,
313    PHR_TX_PWR_FACTOR_CHANGE_DB_6,
314    PHR_TX_PWR_FACTOR_CHANGE_INFINITY
315 }PhrTxPwrFactorChange;
316
317 typedef enum
318 {
319    PHR_MODE_OTHER_CG_REAL,
320    PHR_MODE_OTHER_CG_VIRTUAL
321 }PhrModeOtherCG;
322
323 typedef enum
324 {
325    PDSCH_HARQ_ACK_CODEBOOK_SEMISTATIC,
326    PDSCH_HARQ_ACK_CODEBOOK_DYNAMIC
327 }PdschHarqAckCodebook;
328
329 typedef enum
330 {
331    NUM_HARQ_PROC_FOR_PDSCH_N_2,
332    NUM_HARQ_PROC_FOR_PDSCH_N_4,
333    NUM_HARQ_PROC_FOR_PDSCH_N_6,
334    NUM_HARQ_PROC_FOR_PDSCH_N_10,
335    NUM_HARQ_PROC_FOR_PDSCH_N_16
336 }NumHarqProcForPdsch;
337
338 typedef enum
339 {
340    MAX_CODE_BLOCK_GROUP_PER_TB_N_2,
341    MAX_CODE_BLOCK_GROUP_PER_TB_N_4,
342    MAX_CODE_BLOCK_GROUP_PER_TB_N_6,
343    MAX_CODE_BLOCK_GROUP_PER_TB_N_8
344 }MaxCodeBlkGrpPerTB;
345
346 typedef enum
347 {
348    PDSCH_X_OVERHEAD_6,
349    PDSCH_X_OVERHEAD_12,
350    PDSCH_X_OVERHEAD_18
351 }PdschXOverhead;
352
353 typedef enum
354 {
355    TRANSFORM_PRECODER_ENABLED,
356    TRANSFORM_PRECODER_DISABLED
357 }TransformPrecoder;
358
359 typedef enum 
360 {
361    CCE_REG_MAPPINGTYPE_PR_INTERLEAVED = 1,
362    CCE_REG_MAPPINGTYPE_PR_NONINTERLEAVED
363 }REGMappingType;
364
365 typedef enum
366 {
367    SLOTPERIODICITYANDOFFSET_PR_SL1 = 1,
368    SLOTPERIODICITYANDOFFSET_PR_SL2,
369    SLOTPERIODICITYANDOFFSET_PR_SL4,
370    SLOTPERIODICITYANDOFFSET_PR_SL5,
371    SLOTPERIODICITYANDOFFSET_PR_SL8,
372    SLOTPERIODICITYANDOFFSET_PR_SL10,
373    SLOTPERIODICITYANDOFFSET_PR_SL16,
374    SLOTPERIODICITYANDOFFSET_PR_SL20,
375    SLOTPERIODICITYANDOFFSET_PR_SL40,
376    SLOTPERIODICITYANDOFFSET_PR_SL80,
377    SLOTPERIODICITYANDOFFSET_PR_SL160,
378    SLOTPERIODICITYANDOFFSET_PR_SL320,
379    SLOTPERIODICITYANDOFFSET_PR_SL640,
380    SLOTPERIODICITYANDOFFSET_PR_SL1280,
381    SLOTPERIODICITYANDOFFSET_PR_SL2560
382 }MSlotPeriodAndOffset;
383
384 typedef enum
385 {
386    SAMEASREG_BUNDLE,
387    ALL_CONTIGUOUS_RBS
388 }PrecoderGranul;
389
390 typedef enum
391 {
392    SEARCHSPACETYPE_PR_COMMON = 1,
393    SEARCHSPACETYPE_PR_UE_SPECIFIC
394 }SearchSpaceType;
395
396 typedef enum
397 {
398    QOS_NON_DYNAMIC = 1,
399    QOS_DYNAMIC
400 }QosType;
401
402 typedef enum
403 {
404    AGGREGATIONLEVEL_N0  = 0,  
405    AGGREGATIONLEVEL_N1  = 1,
406    AGGREGATIONLEVEL_N2  = 2,
407    AGGREGATIONLEVEL_N3  = 3,
408    AGGREGATIONLEVEL_N4  = 4,
409    AGGREGATIONLEVEL_N5  = 5,
410    AGGREGATIONLEVEL_N6  = 6,
411    AGGREGATIONLEVEL_N8  = 7
412 }AggrLevel;
413
414 typedef enum
415 {
416    ADDITIONALPOSITION_POS0,
417    ADDITIONALPOSITION_POS1,
418    ADDITIONALPOSITION_POS3
419 }AddPosType;
420
421 typedef enum
422 {
423    MAPPING_TYPEA,
424    MAPPING_TYPEB
425 }CommonMappingType;
426
427 typedef enum
428 {
429    RESOURCEALLOCATION_TYPE0,
430    RESOURCEALLOCATION_TYPE1,
431    RESOURCEALLOCATION_DYNAMICSWITCH
432 }ResAllocType;
433
434 typedef enum
435 {
436    RBG_SIZE_CONFIG1,
437    RBG_SIZE_CONFIG2
438 }RBGSize;
439
440 typedef enum
441 {
442    CODEWORDS_SCHED_BY_DCI_N1,
443    CODEWORDS_SCHED_BY_DCI_N2
444 }CodeWordsSchedDci;
445
446 typedef enum
447 {
448    TYPE_STATIC_BUNDLING = 1,
449    TYPE_DYNAMIC_BUNDLING
450 }BundlingType;
451
452 typedef enum
453 {
454    SET2_SIZE_N4,
455    SET2_SIZE_WIDEBAND
456 }BundlingSizeSet2;
457
458 typedef enum
459 {
460    SET1_SIZE_N4,
461    SET1_SIZE_WIDEBAND,
462    SET1_SIZE_N2_WIDEBAND,
463    SET1_SIZE_N4_WIDEBAND
464 }BundlingSizeSet1;
465
466 typedef enum
467 {
468    LC_PRIORITY_1 = 1,
469    LC_PRIORITY_2,
470    LC_PRIORITY_3
471 }LcPriority;
472
473 typedef enum
474 {
475   PBR_KBPS_0,
476   PBR_KBPS_8,
477   PBR_KBPS_16,
478   PBR_KBPS_32,
479   PBR_KBPS_64,
480   PBR_KBPS_128,
481   PBR_KBPS_256,
482   PBR_KBPS_512,
483   PBR_KBPS_1024,
484   PBR_KBPS_2048,
485   PBR_KBPS_4096,
486   PBR_KBPS_8192,
487   PBR_KBPS_16384,
488   PBR_KBPS_32768,
489   PBR_KBPS_65536,
490   PBR_KBPS_INFINITY
491 }PBitRate;
492
493 typedef enum
494 {
495    BSD_MS_5,
496    BSD_MS_10,
497    BSD_MS_20,
498    BSD_MS_50,
499    BSD_MS_100,
500    BSD_MS_150,
501    BSD_MS_300,
502    BSD_MS_500,
503    BSD_MS_1000,
504    BSD_SPARE_7,
505    BSD_SPARE_6,
506    BSD_SPARE_5,
507    BSD_SPARE_4,
508    BSD_SPARE_3,
509    BSD_SPARE_2,
510    BSD_SPARE_1
511
512 }BucketSizeDur;
513
514 typedef enum
515 {
516    RADIO_NW_LAYER_FAIL,
517    TRANSPORT_LAYER_FAIL,
518    PROTOCOL_FAIL,
519    MISCELLANEOUS
520 }CauseGrp;
521
522 typedef enum
523 {
524    UNSPECIFIED_RADIO_NW_CAUSE,
525    RL_FAIL_RLC,
526    UNKNOWN_GNB_CU_UE_F1AP_ID,
527    ALREADY_ALLOCATED_GNB_CU_UE_F1AP_ID,
528    UNKNOWN_GNB_DU_UE_F1AP_ID,
529    ALREADY_ALLOCATED_GNB_DU_UE_F1AP_ID,
530    UNKNOWN_UE_F1AP_ID_PAIR,
531    INCONSISTENT_UE_F1AP_ID_PAIR,
532    INTERACTION_WITH_OTHER_PROCEDURE,
533    UNSUPPORTED_QCI,
534    ACTION_REQUIRED_FOR_RADIO_REASONS,
535    RADIO_RESOURCES_UNAVAILABLE,
536    CANCELLED_PROCEDURE,
537    RELEASE_NORMAL,
538    CELL_UNAVAILABLE,
539    OTHER_RL_FAILURE,
540    UE_REJECTION,
541    RESOURCES_UNAVAILABLE_FOR_SLICE
542 }RadioNwLyrCause;
543
544 typedef enum
545 {
546    UNSPECIFIED_TRANSPORT_LAYER_CAUSE,
547    TRANSPORT_RESOURCE_UNAVAILABLE
548 }TransLyrCause;
549
550 typedef enum
551 {
552    TRANSFER_SYNTAX_ERROR,
553    ABSTRACT_SYNTAX_ERROR_REJECT,
554    ABSTRACT_SYNTAX_ERROR_IGNORE_AND_REJECT,
555    INCOMPATIBLE_MESSAGE_FOR_RECEIVER_STATE,
556    SEMANTIC_ERR,
557    ABSTRAXCT_SYNTAX_ERROR_FALSELY_CONSTRUCTED_MSG,
558    UNSPECIFIED_PROTOCOL_CAUSE
559 }ProtCause;
560
561 typedef enum
562 {
563    CONTROL_PROCESSING_OVERLOAD,
564    NOT_ENOUGH_USER,
565    PLANE_PROCESSING_RESOURCES,
566    HARDWARE_FAIL,
567    INTERVENTION_BY_O_AND_M,
568    UNSPECIFIED_MISC_CAUSE
569 }MiscFailCause;
570
571 typedef enum
572 {
573    MCS_TABLE_QAM64,
574    MCS_TABLE_QAM256,
575    MCS_TABLE_QAM64_LOW_SE
576 }McsTable;
577
578 typedef enum
579 {
580    RSRC_PRB,
581    RSRC_DRB,
582    RSRC_RRC_CONNECTED_USERS
583 }ResourceType;
584
585 typedef enum
586 {
587    TRANSMISSION_ALLOWED,
588    STOP_TRANSMISSION,
589    RESTART_TRANSMISSION
590 }DataTransmissionAction;
591
592 /* Performance measurements from 3GPP TS 28.552 Release 15 */
593 typedef enum
594 {
595    MAC_DL_TOTAL_PRB_USAGE,
596    MAC_UL_TOTAL_PRB_USAGE
597 }MacMeasurementType;
598
599 typedef struct failureCause 
600 {
601    CauseGrp   type;
602    union
603    {
604       RadioNwLyrCause   radioNwResult;
605       TransLyrCause     transportResult;
606       ProtCause         protcolResult;
607       MiscFailCause     miscResult;
608    }u;
609 }FailureCause;
610
611 typedef struct carrierCfg
612 {
613    uint32_t   dlBw;                   /* DL bandwidth */
614    uint32_t   arfcnDL;                 /* Absolute frequency Number of DL */
615    uint32_t   ulBw;                   /* UL bandwidth */
616    uint32_t   arfcnUL;                 /* Absolute frequency Number of UL */
617    uint16_t   numTxAnt;               /* Number of Tx antennas */
618    uint16_t   numRxAnt;               /* Number of Rx antennas */
619 }CarrierCfg;
620
621 typedef enum
622 {
623    OP_DISABLED,     
624    OP_ENABLED,     
625 }MacOpState;
626
627 typedef enum
628 {
629    ADMIN_LOCKED,     
630    ADMIN_UNLOCKED,  
631    ADMIN_SHUTTING_DOWN, 
632 }MacAdminState;
633
634 typedef enum
635 {
636    CELL_IDLE,
637    CELL_INACTIVE,
638    CELL_ACTIVE,
639 }MacCellState;
640
641 /*Spec Ref: 38.331: RadioLinkMonitoringConfig*/
642 typedef enum
643 {
644    BeamFailure,
645    Rlf,
646    Both
647 }PurposeOfFailureDet;
648
649 typedef struct plmnInfoList
650 {
651    Plmn           plmn;
652    uint8_t        numSupportedSlice; /* Total slice supporting */
653    Snssai         **snssai;         /* List of supporting snssai*/
654 }PlmnInfoList;
655
656 typedef struct schPageCfg
657 {
658   uint8_t  numPO;                    /*Derived from Ns*/
659   bool     poPresent;                /*Whether FirstPDCCH-MonitoringPO is present or not*/
660   uint16_t pagingOcc[MAX_PO_PER_PF]; /*FirstPDCCH-Monitoring Paging Occasion*/
661 }SchPageCfg;
662
663 typedef struct pdcchConfigSib1
664 {
665    uint8_t coresetZeroIndex;     /* derived from 4 LSB of pdcchSib1 present in MIB */
666    uint8_t searchSpaceZeroIndex; /* derived from 4 MSB of pdcchSib1 present in MIB */
667 }PdcchConfigSib1;
668
669 typedef struct sib1CellCfg
670 {
671    PdcchConfigSib1  pdcchCfgSib1;  /*Freq pos where UE may find SS/PBCH block with SIB1*/
672    uint8_t          *sib1Pdu;
673    uint16_t         sib1PduLen;
674    SchPageCfg       pagingCfg;
675 } Sib1CellCfg; 
676
677 typedef struct bwpParams
678 {
679    uint16_t firstPrb;
680    uint16_t numPrb;
681    uint8_t  scs;
682    uint8_t  cyclicPrefix;
683 }BwpParams;
684
685 typedef struct candidatesInfo
686 {
687    uint8_t aggLevel1;
688    uint8_t aggLevel2;
689    uint8_t aggLevel4;
690    uint8_t aggLevel8;
691    uint8_t aggLevel16;
692 }CandidatesInfo;
693
694 typedef struct searchSpaceCfg
695 {
696    uint8_t searchSpaceId;
697    uint8_t coresetId;
698    uint16_t monitoringSlot;
699    uint16_t duration;
700    uint16_t monitoringSymbol;
701    CandidatesInfo candidate;
702 }SearchSpaceCfg;
703
704 typedef struct pdcchConfigCommon
705 {
706    /* only one search space is configured during SIB1 */
707    SearchSpaceCfg commonSearchSpace;
708    uint8_t raSearchSpaceId;
709 }PdcchConfigCommon;
710
711 typedef struct pdschCfgCommTimeDomRsrcAlloc
712 {
713    uint8_t k0;
714    uint8_t mappingType;
715    uint8_t startSymbol;
716    uint8_t lengthSymbol;
717 }PdschCfgCommTimeDomRsrcAlloc;
718
719 typedef struct pdschConfigCommon
720 {
721    uint8_t  numTimeDomAlloc;
722    /* PDSCH time domain DL resource allocation list */
723    PdschCfgCommTimeDomRsrcAlloc   timeDomRsrcAllocList[MAX_NUM_DL_ALLOC]; 
724 }PdschConfigCommon;
725
726 typedef struct pucchConfigCommon
727 {
728    uint8_t pucchResourceCommon;
729    uint8_t pucchGroupHopping;
730 }PucchConfigCommon;
731
732 /* PUSCH Time Domain Resource Allocation */
733 typedef struct puschTimeDomRsrcAlloc
734 {
735    uint8_t             k2;
736    CommonMappingType   mappingType;
737    uint8_t             startSymbol;
738    uint8_t             symbolLength;
739    uint8_t             startSymbolAndLength;
740 }PuschTimeDomRsrcAlloc;
741
742 typedef struct puschConfigCommon
743 {
744    /* PUSCH-TimeDomainResourceAllocation info */
745    uint8_t                 numTimeDomRsrcAlloc;
746    PuschTimeDomRsrcAlloc   timeDomRsrcAllocList[MAX_NUM_UL_ALLOC]; /* PUSCH time domain UL resource allocation list */
747 }PuschConfigCommon;
748
749 typedef struct bwpDlConfig
750 {
751    BwpParams         bwp;
752    PdcchConfigCommon pdcchCommon;
753    PdschConfigCommon pdschCommon;
754 }BwpDlConfig;
755
756 typedef struct bwpUlConfig
757 {
758    BwpParams         bwp;
759    // rach config common sent in PrachCfg
760    PucchConfigCommon pucchCommon;
761    PuschConfigCommon puschCommon;
762 }BwpUlConfig;
763
764
765 typedef struct cellCfg
766 {
767    MacOpState      opState;
768    MacAdminState   adminState;
769    MacCellState    cellState;
770    PlmnInfoList plmnInfoList[MAX_PLMN];   /* Consits of PlmnId and Snssai list */
771    uint32_t     phyCellId;                /* Physical cell id */
772    uint32_t     tac;
773    uint32_t     ssbFreq;
774    uint16_t     subCarrSpacing;
775    DuplexMode   dupType;          /* Duplex type: TDD/FDD */
776    Sib1CellCfg  sib1Cfg;          /* SIB1 config */
777    BwpDlConfig  initialDlBwp;     /* Initial DL BWP */
778    BwpUlConfig  initialUlBwp;     /* Initial UL BWP */
779 }CellCfg;
780
781 typedef struct ssbCfg
782 {
783    uint32_t    ssbPbchPwr;       /* SSB block power */
784    uint8_t     scsCmn;           /* subcarrier spacing for common */
785    uint16_t    ssbOffsetPointA;  /* SSB subcarrier offset from point A */
786    SSBPeriod   ssbPeriod;        /* SSB Periodicity in msec */
787    uint8_t     ssbScOffset;       /* Subcarrier Offset */
788    uint32_t    ssbMask[SSB_MASK_SIZE];      /* Bitmap for actually transmitted SSB. */
789    uint8_t     beamId[NUM_SSB];
790    BetaPss     betaPss;
791    BchPduOpt   bchPayloadFlag;   /* Options for generation of payload */
792    uint8_t     mibPdu[3];           /* MIB payload */
793    uint8_t     dmrsTypeAPos;     /* DMRS Type A position */
794 }SsbCfg;
795
796 typedef struct fdmInfo
797 {
798    uint16_t   rootSeqIdx;        /* Root sequence index */
799    uint8_t    numRootSeq;        /* Number of root sequences required for FD */
800    uint16_t   k1;                /* Frequency Offset for each FD */
801    uint8_t    zeroCorrZoneCfg;   /* Zero correlation zone cofig */
802 }PrachFdmInfo;
803
804 typedef struct prachCfg
805 {
806    PrachSeqLen   prachSeqLen;         /* RACH Sequence length: Long/short */
807    uint8_t       prachSubcSpacing;    /* Subcarrier spacing of RACH */
808    uint8_t       msg1Fdm;             /* Number of RACH frequency domain occasions/ PRACH FDM (1,2,4,8) */
809    uint8_t       prachCfgIdx;         /* PRACH Cfg Index */
810    PrachFdmInfo  fdm[8];              /* FDM info */
811    RstSetCfg     prachRstSetCfg;      /* PRACH restricted set config */
812    uint8_t       ssbPerRach;          /* SSB per RACH occassion */
813    uint8_t       totalNumRaPreamble;  /* Total number of RA preambles */
814    uint8_t       numCbPreamblePerSsb; /* Number of CB preamble per SSB */
815    uint16_t      msg1FreqStart;       /* Msg1-FrequencyStart */
816    uint8_t       raContResTmr;        /* RA Contention Resoultion Timer */
817    uint8_t       rsrpThreshSsb;       /* RSRP Threshold SSB */
818    uint8_t       raRspWindow;         /* RA Response Window */
819 }PrachCfg;
820
821 #ifdef NR_DRX
822 /* The following list of structures is taken from the DRX-Config section of specification 33.331. */
823 typedef struct drxOnDurationTimer
824 {
825    bool  onDurationTimerValInMs;
826    union
827    {
828       uint8_t  subMilliSeconds;
829       uint16_t milliSeconds;
830    }onDurationtimerValue;
831 }DrxOnDurationTimer;
832
833 typedef struct drxLongCycleStartOffset
834 {
835    uint16_t drxLongCycleStartOffsetChoice;
836    uint16_t drxLongCycleStartOffsetVal;
837 }DrxLongCycleStartOffset;
838
839 typedef struct shortDrx
840 {
841    uint16_t   drxShortCycle;
842    uint8_t    drxShortCycleTimer;
843 }ShortDrx;
844
845 typedef struct drxCfg
846 {
847    DrxOnDurationTimer       drxOnDurationTimer;   
848    uint16_t                 drxInactivityTimer;
849    uint8_t                  drxHarqRttTimerDl;
850    uint8_t                  drxHarqRttTimerUl;
851    uint16_t                 drxRetransmissionTimerDl;
852    uint16_t                 drxRetransmissionTimerUl;
853    DrxLongCycleStartOffset  drxLongCycleStartOffset;
854    bool                     shortDrxPres;
855    ShortDrx                 shortDrx;
856    uint8_t                  drxSlotOffset;
857 }DrxCfg;
858 #endif
859
860 typedef struct precodingConf
861 {
862    uint16_t numLayers;
863    uint16_t numAntPorts;
864 }PrecodingConf;
865
866 typedef struct beamformingConf
867 {    
868    uint16_t numOfBeams;
869    uint16_t numTxRUs;
870    uint16_t beamIdx;
871    uint16_t beamType;
872    uint32_t beamAzimuth;
873    uint32_t beamTilt;
874    uint32_t beamHorizWidth;
875    uint32_t beamVertWidth;
876    uint32_t coverageShape;
877    uint32_t digitalTilt;
878    uint32_t digitalAzimuth;    
879 }BeamformingConf;
880
881 typedef struct csiRsCfg
882 {
883    uint8_t   *csiFreqDomainAlloc;
884    uint8_t    csiNrofPorts;
885    uint8_t    csirsfirstOFDMSymbolInTimeDomain;
886    uint8_t    csirsfirstOFDMSymbolInTimeDomain2;
887    uint8_t    csirscdmType;
888    uint8_t    csirsdensity;
889    uint8_t    csirsdensitydot5;
890    uint8_t    powerControlOffset;
891    uint8_t    powerControlOffsetSS;
892    uint16_t   periodicityAndOffset;
893 }CsiRsCfg;
894
895 typedef struct macCellCfg
896 {
897    uint16_t         cellId;           /* Cell Id */
898    CarrierCfg       carrCfg;          /* Carrier configuration */
899    CellCfg          cellCfg;          /* Cell Configuration*/
900    SsbCfg           ssbCfg;           /* SSB configuration */          
901    CsiRsCfg         csiRsCfg;         /*Reference: 38.331 CSI-MeasConfig*/
902    PrachCfg         prachCfg;         /* PRACH Configuration */
903 #ifdef NR_TDD
904    TDDCfg           tddCfg;           /* TDD periodicity and slot configuration */
905 #endif
906    PrecodingConf    precodingConf;
907    BeamformingConf  beamCfg;
908 }MacCellCfg;
909
910 typedef struct macCellCfgCfm
911 {
912    uint16_t       cellId;
913    uint8_t        rsp; 
914 }MacCellCfgCfm;
915
916 typedef struct ulCcchInd
917 {
918    uint16_t cellId;
919    uint16_t crnti;
920    uint16_t ulCcchMsgLen;
921    uint8_t  *ulCcchMsg;
922 }UlCcchIndInfo;
923
924 typedef struct dlCcchInd
925 {
926    uint16_t      cellId;
927    uint16_t      crnti;
928    DlCcchMsgType msgType;
929    uint16_t      dlCcchMsgLen;
930    uint8_t       *dlCcchMsg;
931 }DlCcchIndInfo;
932
933 typedef struct bsrTmrCfg
934 {
935    uint16_t     periodicTimer;
936    uint16_t     retxTimer;
937    uint16_t     srDelayTimer;
938 }BsrTmrCfg;
939
940
941 /* Info of Scheduling Request to Add/Modify */
942 typedef struct schedReqInfo
943 {
944    uint8_t         schedReqId;
945    SrProhibitTimer srProhibitTmr;
946    SrTransMax      srTransMax;
947 }SchedReqInfo;
948
949 /* Scheduling Request Configuration */
950 typedef struct schedReqCfg
951 {
952    uint8_t       addModListCount;
953    SchedReqInfo  addModList[MAX_NUM_SR_CFG_PER_CELL_GRP];   /* List of Scheduling req to be added/modified */
954    uint8_t       relListCount;
955    uint8_t       relList[MAX_NUM_SR_CFG_PER_CELL_GRP];      /* list of scheduling request Id to be deleted */
956 }SchedReqCfg;
957
958 typedef struct tagInfo
959 {
960    uint8_t tagId;
961    TimeAlignmentTimer timeAlignTimer;
962 }TagInfo;
963
964 typedef struct tagCfg
965 {
966    uint8_t      addModListCount;
967    TagInfo      addModList[MAC_NUM_TAGS];  /* List of Tag to Add/Modify */
968    uint8_t      relListCount;
969    uint8_t      relList[MAC_NUM_TAGS];     /* list of Tag Id to release */
970 }TagCfg;
971
972 typedef struct phrCfg
973 {
974    PhrPeriodicTimer periodicTimer;
975    PhrProhibitTimer prohibitTimer; 
976    PhrTxPwrFactorChange txPowerFactor;
977    bool     multiplePHR;       
978    bool     dummy;
979    bool     phrType2OtherCell;
980    PhrModeOtherCG phrOtherCG;
981 }PhrCfg;
982
983 typedef struct macCellGrpCfg
984 {
985    SchedReqCfg schReqCfg;
986    TagCfg      tagCfg;
987    BsrTmrCfg   bsrTmrCfg;
988    bool        phrCfgSetupPres;   /* true/false: phrCfgSetup/phrCfgRelease */
989    PhrCfg      phrCfg;
990 #ifdef NR_DRX
991    bool        drxCfgPresent;
992    DrxCfg      drxCfg;
993 #endif
994 }MacCellGrpCfg;
995
996 typedef struct phyCellGrpCfg
997 {
998    PdschHarqAckCodebook  pdschHarqAckCodebook;
999    uint8_t    pNrFr1;
1000 }PhyCellGrpCfg;
1001
1002 /* Control resource set info */
1003 typedef struct controlRsrcSet
1004 {
1005    uint8_t     cRSetId;                /* Control resource set id */
1006    uint8_t     freqDomainRsrc[FREQ_DOM_RSRC_SIZE];  /* Frequency domain resource */
1007    uint8_t     duration;
1008    REGMappingType cceRegMappingType;
1009    PrecoderGranul precoderGranularity;
1010    uint16_t    dmrsScramblingId;
1011 }ControlRsrcSet;
1012
1013 /* Search Space info */
1014 typedef struct searchSpace
1015 {
1016    uint8_t     searchSpaceId;
1017    uint8_t     cRSetId;
1018    MSlotPeriodAndOffset  mSlotPeriodicityAndOffset;
1019    uint8_t     mSymbolsWithinSlot[MONITORING_SYMB_WITHIN_SLOT_SIZE];
1020    AggrLevel   numCandidatesAggLevel1;      /* Number of candidates for aggregation level 1 */
1021    AggrLevel   numCandidatesAggLevel2;      /* Number of candidates for aggregation level 2 */
1022    AggrLevel   numCandidatesAggLevel4;      /* Number of candidates for aggregation level 4 */
1023    AggrLevel   numCandidatesAggLevel8;      /* Number of candidates for aggregation level 8 */
1024    AggrLevel   numCandidatesAggLevel16;     /* Number of candidates for aggregation level 16 */
1025    SearchSpaceType searchSpaceType;
1026    uint8_t     ueSpecificDciFormat;
1027 }SearchSpace;
1028
1029 /* PDCCH cofniguration */
1030 typedef struct pdcchConfig
1031 {
1032    uint8_t           numCRsetToAddMod;
1033    ControlRsrcSet    cRSetToAddModList[MAX_NUM_CRSET];           /* List of control resource set to add/modify */
1034    uint8_t           numCRsetToRel;
1035    uint8_t           cRSetToRelList[MAX_NUM_CRSET];              /* List of control resource set to release */
1036    uint8_t           numSearchSpcToAddMod;
1037    SearchSpace       searchSpcToAddModList[MAX_NUM_SEARCH_SPC];  /* List of search space to add/modify */
1038    uint8_t           numSearchSpcToRel;
1039    uint8_t           searchSpcToRelList[MAX_NUM_SEARCH_SPC];     /* List of search space to release */
1040 }PdcchConfig;
1041
1042 /* PDSCH time domain resource allocation */
1043 typedef struct pdschTimeDomRsrcAlloc
1044 {
1045    uint8_t           *k0;
1046    CommonMappingType mappingType;
1047    uint8_t           startSymbol;
1048    uint8_t           symbolLength;
1049    uint8_t           startSymbolAndLength;
1050 }PdschTimeDomRsrcAlloc;
1051
1052
1053 typedef struct pdschBundling
1054 {
1055    struct staticBundling
1056    {
1057      BundlingSizeSet2 size;
1058    }StaticBundling;
1059    struct dynamicBundling
1060    {
1061      BundlingSizeSet1 sizeSet1;
1062      BundlingSizeSet2 sizeSet2;
1063    }DynamicBundling;
1064 }PdschBundling;
1065
1066 /* DMRS downlink configuration */
1067 typedef struct dmrsDlCfg
1068 {
1069    AddPosType  addPos;       /* DMRS additional position */
1070 }DmrsDlCfg;
1071
1072 /* PDSCH Configuration */
1073 typedef struct pdschConfig
1074 {
1075    DmrsDlCfg               dmrsDlCfgForPdschMapTypeA;
1076    ResAllocType            resourceAllocType;
1077    uint8_t                 numTimeDomRsrcAlloc;
1078    PdschTimeDomRsrcAlloc   timeDomRsrcAllociList[MAX_NUM_DL_ALLOC]; /* PDSCH time domain DL resource allocation list */
1079    RBGSize                 rbgSize;
1080    CodeWordsSchedDci       numCodeWordsSchByDci;                    /* Number of code words scheduled by DCI */
1081    BundlingType            bundlingType;
1082    PdschBundling           bundlingInfo;
1083 }PdschConfig;
1084
1085 /* Initial Downlink BWP */
1086 typedef struct initialDlBwp
1087 {
1088    bool          pdcchPresent;
1089    PdcchConfig   pdcchCfg;
1090    bool          pdschPresent;
1091    PdschConfig   pdschCfg;
1092 }InitialDlBwp;
1093
1094 /*Spec 38.331 "SPS-Config'*/
1095 typedef struct spsConfig
1096 {
1097    uint16_t     periodicity;
1098    uint8_t      numOfHqProcess;
1099    uint8_t      n1PucchAN;
1100    McsTable     mcsTable;
1101 }SpsConfig;
1102
1103 typedef uint8_t RadioLinkMonitoringRsId;
1104
1105 typedef struct radioLinkMonRS
1106 {
1107    RadioLinkMonitoringRsId radioLinkMonitoringRsId;
1108    PurposeOfFailureDet      purpose; 
1109    union
1110    {
1111       uint8_t ssbIndx;
1112       uint8_t nzpCsiRsResId;
1113    }detectionRes;
1114 }RadioLinkMonRS;
1115
1116 typedef struct radioLinkConfig
1117 {
1118    RadioLinkMonRS             failurDetResAddModList[1];
1119    RadioLinkMonitoringRsId   failurDetResRelList[1];
1120    uint8_t                    beamFailureInstanceMaxCount;
1121    uint8_t                    beamFailureDetectionTimer;
1122 }RadioLinkConfig;
1123
1124 /* Spec 38.331, 'BWP-DownlinkDedicated'*/
1125 typedef struct bwpDlCfgDed
1126 {
1127   PdcchConfig     pdcchCfgDed;
1128   PdschConfig     pdschCfgDed;
1129   SpsConfig       spsCfgDed;
1130   RadioLinkConfig radioLnkMonCfgDed;
1131 }BwpDlCfgDed;
1132
1133 /* Downlink BWP information */
1134 typedef struct dlBwpInfo
1135 {
1136    uint8_t          bwpId;
1137    BwpDlConfig      bwpCommon;
1138    BwpDlCfgDed      bwpDedicated;
1139 }DlBwpInfo;
1140
1141 /* PDCCH Serving Cell configuration */
1142 typedef struct pdschServCellCfg
1143 {
1144    uint8_t              *maxMimoLayers;           
1145    NumHarqProcForPdsch  numHarqProcForPdsch;
1146    MaxCodeBlkGrpPerTB   *maxCodeBlkGrpPerTb;
1147    bool                 *codeBlkGrpFlushInd;
1148    PdschXOverhead       *xOverhead;
1149 }PdschServCellCfg;
1150
1151 /* PUCCH Configuration */
1152
1153 typedef struct pucchResrcSetInfo
1154 {
1155    uint8_t resrcSetId;
1156    uint8_t resrcListCount;
1157    uint8_t resrcList[MAX_NUM_PUCCH_PER_RESRC_SET];
1158    uint8_t maxPayLoadSize;
1159 }PucchResrcSetInfo;
1160
1161 typedef struct pucchResrcSetCfg
1162 {
1163    uint8_t resrcSetToAddModListCount;
1164    PucchResrcSetInfo resrcSetToAddModList[MAX_NUM_PUCCH_RESRC_SET];
1165    uint8_t resrcSetToRelListCount;
1166    uint8_t resrcSetToRelList[MAX_NUM_PUCCH_RESRC];
1167 }PucchResrcSetCfg;
1168
1169 typedef struct pucchFormat0
1170 {
1171    uint8_t initialCyclicShift;
1172    uint8_t numSymbols;
1173    uint8_t startSymbolIdx;
1174 }PucchFormat0;
1175
1176 typedef struct pucchFormat1
1177 {
1178    uint8_t initialCyclicShift;
1179    uint8_t numSymbols;
1180    uint8_t startSymbolIdx;
1181    uint8_t timeDomOCC;
1182 }PucchFormat1;
1183
1184 typedef struct pucchFormat2_3
1185 {
1186    uint8_t numPrbs;
1187    uint8_t numSymbols;
1188    uint8_t startSymbolIdx;
1189 }PucchFormat2_3;
1190
1191 typedef struct pucchFormat4
1192 {
1193    uint8_t numSymbols;
1194    uint8_t occLen;
1195    uint8_t occIdx;
1196    uint8_t startSymbolIdx;
1197 }PucchFormat4;
1198
1199 typedef struct pucchResrcInfo
1200 {
1201    uint8_t  resrcId;
1202    uint16_t startPrb;
1203    uint8_t  intraFreqHop;
1204    uint16_t secondPrbHop;
1205    uint8_t  pucchFormat;
1206    union
1207    {
1208       PucchFormat0   *format0; 
1209       PucchFormat1   *format1;
1210       PucchFormat2_3 *format2;
1211       PucchFormat2_3 *format3;
1212       PucchFormat4   *format4;
1213    }PucchFormat;
1214 }PucchResrcInfo;
1215
1216 typedef struct pucchResrcCfg
1217 {
1218    uint8_t resrcToAddModListCount;
1219    PucchResrcInfo resrcToAddModList[MAX_NUM_PUCCH_RESRC];
1220    uint8_t resrcToRelListCount;
1221    uint8_t resrcToRelList[MAX_NUM_PUCCH_RESRC];
1222 }PucchResrcCfg;
1223
1224 typedef struct pucchFormatCfg
1225 {
1226    bool interSlotFreqHop;
1227    bool addDmrs;
1228    uint8_t maxCodeRate;
1229    uint8_t numSlots;
1230    bool    pi2BPSK;
1231    bool    harqAckCSI;
1232 }PucchFormatCfg;
1233
1234 typedef struct schedReqResrcInfo
1235 {
1236    uint8_t resrcId;
1237    uint8_t requestId;
1238    uint8_t periodicity;
1239    uint16_t offset;
1240    uint8_t resrc;
1241 }SchedReqResrcInfo;
1242
1243 typedef struct pucchSchedReqCfg
1244 {
1245    uint8_t           schedAddModListCount;
1246    SchedReqResrcInfo schedAddModList[MAX_NUM_SR_CFG_PER_CELL_GRP];
1247    uint8_t           schedRelListCount;
1248    uint8_t           schedRelList[MAX_NUM_SR_CFG_PER_CELL_GRP];
1249 }PucchSchedReqCfg;
1250
1251 typedef struct spatialRelationInfo
1252 {
1253    uint8_t spatialRelationId;
1254    uint8_t servCellIdx;
1255    uint8_t pathLossRefRSId;
1256    uint8_t p0PucchId;
1257    uint8_t closeLoopIdx;
1258 }SpatialRelationInfo;
1259
1260 typedef struct pucchSpatialCfg
1261 {
1262    uint8_t spatialAddModListCount;
1263    SpatialRelationInfo spatialAddModList[MAX_NUM_SPATIAL_RELATIONS];
1264    uint8_t spatialRelListCount;
1265    uint8_t spatialRelList[MAX_NUM_SPATIAL_RELATIONS];
1266 }PucchSpatialCfg;
1267
1268 typedef struct p0PucchCfg
1269 {
1270    uint8_t p0PucchId;
1271    int     p0PucchVal;
1272 }P0PucchCfg;
1273
1274 typedef struct pathLossRefRSCfg
1275 {
1276    uint8_t pathLossRefRSId;
1277 }PathLossRefRSCfg;
1278
1279 typedef struct pucchMultiCsiCfg
1280 {
1281    uint8_t  multiCsiResrcListCount;
1282    uint8_t  multiCsiResrcList[MAX_NUM_PUCCH_RESRC-1];
1283 }PucchMultiCsiCfg;
1284
1285 typedef struct pucchDlDataToUlAck
1286 {
1287    uint8_t  dlDataToUlAckListCount;
1288    uint8_t  dlDataToUlAckList[MAX_NUM_DL_DATA_TO_UL_ACK];
1289 }PucchDlDataToUlAck;
1290
1291 typedef struct pucchPowerControl
1292 {
1293    int deltaF_Format0;
1294    int deltaF_Format1;
1295    int deltaF_Format2;
1296    int deltaF_Format3;
1297    int deltaF_Format4;
1298    uint8_t p0SetCount;
1299    P0PucchCfg p0Set[MAX_NUM_PUCCH_P0_PER_SET];
1300    uint8_t pathLossRefRSListCount;
1301    PathLossRefRSCfg pathLossRefRSList[MAX_NUM_PATH_LOSS_REF_RS];
1302 }PucchPowerControl;
1303
1304 typedef struct pucchCfg
1305 {
1306    PucchResrcSetCfg  *resrcSet;
1307    PucchResrcCfg     *resrc;
1308    PucchFormatCfg    *format1; 
1309    PucchFormatCfg    *format2; 
1310    PucchFormatCfg    *format3; 
1311    PucchFormatCfg    *format4;
1312    PucchSchedReqCfg  *schedReq;
1313    PucchMultiCsiCfg  *multiCsiCfg;
1314    PucchSpatialCfg   *spatialInfo;
1315    PucchDlDataToUlAck *dlDataToUlAck;
1316    PucchPowerControl *powerControl;
1317 }PucchCfg;
1318
1319 /* Transform precoding disabled */
1320 typedef struct transPrecodDisabled
1321 {
1322    uint16_t   scramblingId0;
1323 }TransPrecodDisabled;
1324
1325 /* DMRS Uplink configuration */
1326 typedef struct dmrsUlCfg
1327 {
1328    AddPosType            addPos;               /* DMRS additional position */
1329    TransPrecodDisabled   transPrecodDisabled;  /* Transform precoding disabled */
1330 }DmrsUlCfg;
1331
1332 /* PUSCH Configuration */
1333 typedef struct puschCfg
1334 {
1335    uint8_t                 dataScramblingId;
1336    DmrsUlCfg               dmrsUlCfgForPuschMapTypeA;
1337    ResAllocType            resourceAllocType;
1338    uint8_t                 numTimeDomRsrcAlloc;
1339    PuschTimeDomRsrcAlloc   timeDomRsrcAllocList[MAX_NUM_UL_ALLOC]; /* PUSCH time domain UL resource allocation list */
1340    TransformPrecoder       transformPrecoder;
1341 }PuschCfg;
1342
1343 /* Initial Uplink BWP */
1344 typedef struct initialUlBwp
1345 {
1346    bool       pucchPresent;
1347    PucchCfg   pucchCfg; 
1348    bool       puschPresent;
1349    PuschCfg   puschCfg;
1350 }InitialUlBwp;
1351
1352 typedef struct bwpUlCfgDed
1353 {
1354    PucchCfg   pucchCfg;
1355    PuschCfg   puschCfg;
1356 }BwpUlCfgDed;
1357
1358 /* Uplink BWP information */
1359 typedef struct ulBwpInfo
1360 {
1361    uint8_t          bwpId;
1362    BwpUlConfig      bwpCommon;
1363    BwpUlCfgDed      bwpDed;
1364 }UlBwpInfo;
1365
1366 typedef struct rachCfgGeneric
1367 {
1368    uint8_t      prachCfgIdx;       /* PRACH config idx */
1369    uint8_t      msg1Fdm;           /* PRACH FDM (1,2,4,8) */
1370    uint16_t     msg1FreqStart;     /* Msg1-FrequencyStart */
1371    uint8_t      zeroCorrZoneCfg;   /* Zero correlation zone cofig */
1372    int16_t      preambleRcvdTargetPower; /*Prach Target power received*/
1373    uint8_t      preambleTransMax;  /*Preamble Transmission Max power*/
1374    uint8_t      pwrRampingStep;    /*Power Ramping Step*/
1375    uint8_t      raRspWindow;       /* RA Response Window */
1376 }RachCfgGeneric;
1377
1378 typedef struct raPrioritization
1379 {
1380    uint8_t powerRampingStepHighPriority;
1381    uint8_t scalingFactorBI;
1382 }RaPrioritization;
1383
1384 typedef struct bfrCsiRsRes
1385 {
1386    uint8_t csrRsIndex;
1387    uint8_t raOccList;
1388    uint8_t raPreambleIndex;
1389 }BfrCsiRsRes;
1390
1391 typedef struct bfrSsbRes
1392 {
1393    uint16_t ssbIndex;
1394    uint8_t raPreambleIndex;
1395 }BfrSsbRes;
1396
1397 typedef struct prachResDedBfr
1398 {
1399    BfrSsbRes    ssb;
1400    BfrCsiRsRes  csiRs;
1401 }PrachResDedBfr;
1402
1403 /*Spec 38.331 'BeamFailureRecoveryConfig' */
1404 typedef struct beamFailRecoveryCfg
1405 {
1406    uint8_t             rootSeqIndexBfr;
1407    RachCfgGeneric      rachCfgBfr;
1408    uint8_t             rsrpThreshSsbBfr;
1409    PrachResDedBfr      candidteBeamRSList;
1410    uint8_t             ssbPerachBfr;
1411    uint8_t             raSsbOccMaskIndex;
1412    uint8_t             recoverySearchSpaceId;
1413    RaPrioritization    raPrioBfr;
1414    uint16_t            bfrTimer;
1415    uint8_t             msg1SubcSpacing;
1416 }BeamFailRecoveryCfg;
1417
1418 /* Serving cell configuration */
1419 typedef struct servCellCfgInfo
1420 {
1421    InitialDlBwp         initDlBwp;
1422    RadioLinkConfig      radioLinkMonConfig;
1423    uint8_t              numDlBwpToAdd;
1424    DlBwpInfo            dlBwpToAddList[MAX_NUM_BWP];
1425    uint8_t              firstActvDlBwpId;
1426    uint8_t              defaultDlBwpId;
1427    uint8_t              *bwpInactivityTmr;
1428    PdschServCellCfg     pdschServCellCfg;
1429    InitialUlBwp         initUlBwp;
1430    BeamFailRecoveryCfg  beamFailureRecoveryCfg;
1431    uint8_t              numUlBwpToAdd;
1432    UlBwpInfo            ulBwpToAddList[MAX_NUM_BWP];
1433    uint8_t              firstActvUlBwpId;
1434 }ServCellCfgInfo;
1435
1436 /* Special cell configuration */
1437 typedef struct spCellCfg
1438 {
1439    uint8_t           servCellIdx;
1440    ServCellCfgInfo   servCellCfg;
1441 }SpCellCfg;
1442
1443 typedef struct bwpRelInfo
1444 {
1445    uint8_t bwpId;
1446 }BwpRelInfo;
1447
1448 /* Serving cell Re-configuration */
1449 typedef struct servCellRecfgInfo
1450 {
1451    InitialDlBwp       initDlBwp;
1452    RadioLinkConfig    radioLinkMonConfig;
1453    uint8_t            numDlBwpToAddOrMod;
1454    DlBwpInfo          dlBwpToAddOrModList[MAX_NUM_BWP];
1455    uint8_t            numDlBwpToRel;
1456    BwpRelInfo         dlBwpToRelList[MAX_NUM_BWP];
1457    uint8_t            firstActvDlBwpId;
1458    uint8_t            defaultDlBwpId;
1459    uint8_t            *bwpInactivityTmr;
1460    PdschServCellCfg   pdschServCellCfg;
1461    InitialUlBwp       initUlBwp;
1462    uint8_t            numUlBwpToAddOrMod;
1463    UlBwpInfo          ulBwpToAddOrModList[MAX_NUM_BWP];
1464    uint8_t            numUlBwpToRel;
1465    BwpRelInfo         ulBwpToRelList[MAX_NUM_BWP];
1466    uint8_t            firstActvUlBwpId;
1467 }ServCellRecfgInfo;
1468
1469 /* Special cell Re-configuration */
1470 typedef struct spCellRecfg 
1471 {
1472    uint8_t             servCellIdx;
1473    ServCellRecfgInfo   servCellCfg;
1474 }SpCellRecfg;
1475
1476 typedef struct ambrCfg
1477 {
1478    uint32_t ulBr;   /* UL Bit rate */
1479 }AmbrCfg;
1480
1481 typedef struct nonDynFiveQi
1482 {
1483    uint16_t   fiveQi;
1484    uint8_t    priorLevel;
1485    uint16_t   avgWindow;
1486    uint16_t   maxDataBurstVol;
1487 }NonDynFiveQi;
1488
1489 typedef struct dynFiveQi
1490 {
1491    uint8_t    priorLevel;
1492    uint16_t   packetDelayBudget;
1493    uint8_t    packetErrRateScalar;
1494    uint8_t    packetErrRateExp;
1495    uint16_t   fiveQi;
1496    uint8_t    delayCritical;
1497    uint16_t   avgWindow;
1498    uint16_t   maxDataBurstVol;
1499 }DynFiveQi;
1500
1501 typedef struct ngRanAllocAndRetPri
1502 {
1503    uint8_t priorityLevel;
1504    uint8_t preEmptionCap;
1505    uint8_t preEmptionVul;
1506 }NgRanAllocAndRetPri;
1507
1508 typedef struct grbQosInfo
1509 {
1510    uint32_t maxFlowBitRateDl;
1511    uint32_t maxFlowBitRateUl;
1512    uint32_t guarFlowBitRateDl;
1513    uint32_t guarFlowBitRateUl;
1514 }GrbQosInfo;
1515
1516 typedef struct drbQos
1517 {
1518    QosType  fiveQiType;   /* Dynamic or non-dynamic */ 
1519    union
1520    {
1521       NonDynFiveQi   nonDyn5Qi;
1522       DynFiveQi      dyn5Qi;
1523    }u;
1524    NgRanAllocAndRetPri ngRanRetPri;
1525    GrbQosInfo grbQosInfo;
1526    uint16_t             pduSessionId;
1527    uint32_t             ulPduSessAggMaxBitRate;
1528 }DrbQosInfo;
1529
1530 typedef struct ulLcCfg
1531 {
1532    uint8_t priority;
1533    uint8_t lcGroup;
1534    uint8_t schReqId;
1535    PBitRate pbr;        // prioritisedBitRate
1536    BucketSizeDur bsd;        // bucketSizeDuration
1537 }UlLcCfg;
1538
1539 typedef struct dlLcCfg
1540 {
1541    LcPriority lcp;      // logical Channel Prioritization
1542 }DlLcCfg;
1543
1544 typedef struct lcCfg
1545 {
1546    uint8_t lcId;
1547    Snssai  *snssai;
1548    DrbQosInfo *drbQos; 
1549    bool ulLcCfgPres;
1550    UlLcCfg ulLcCfg;
1551    DlLcCfg dlLcCfg;
1552 }LcCfg;
1553
1554 typedef struct modulationInfo
1555 {
1556    uint8_t     modOrder;    /* Modulation order */
1557    uint8_t     mcsIndex;    /* MCS Index */
1558    McsTable    mcsTable;    /* MCS table */
1559 }ModulationInfo;
1560
1561 typedef struct macUeCreateReq
1562 {
1563    uint16_t               cellId;
1564    uint8_t                ueId;
1565    uint8_t                beamIdx;
1566    uint16_t               crnti;
1567    bool                   macCellGrpCfgPres;
1568    MacCellGrpCfg          macCellGrpCfg;
1569    bool                   phyCellGrpCfgPres;
1570    PhyCellGrpCfg          phyCellGrpCfg;
1571    bool                   spCellCfgPres;
1572    SpCellCfg              spCellCfg;
1573    AmbrCfg                *ambrCfg;
1574    ModulationInfo         dlModInfo;    /* DL modulation info */ 
1575    ModulationInfo         ulModInfo;    /* UL modulation info */
1576    uint8_t                numLcs;
1577    LcCfg                  lcCfgList[MAX_NUM_LC];
1578 }MacUeCreateReq;
1579
1580 /* UE Re-configuration */
1581 typedef struct macUeRecfg
1582 {
1583    uint16_t        cellId;
1584    uint8_t         ueId;
1585    uint8_t         beamIdx;
1586    uint16_t        crnti;
1587    bool            macCellGrpRecfgPres;
1588    MacCellGrpCfg   macCellGrpRecfg;
1589    bool            phyCellGrpRecfgPres;
1590    PhyCellGrpCfg   phyCellGrpRecfg;
1591    bool            spCellRecfgPres;
1592    SpCellRecfg     spCellRecfg;
1593    AmbrCfg         *ambrRecfg;
1594    ModulationInfo  dlModInfo;
1595    ModulationInfo  ulModInfo;
1596    uint8_t         numLcsToAdd;
1597    LcCfg           lcCfgAdd[MAX_NUM_LC];
1598    uint8_t         numLcsToDel;
1599    uint8_t         lcIdToDel[MAX_NUM_LC];
1600    uint8_t         numLcsToMod;
1601    LcCfg           lcCfgMod[MAX_NUM_LC];
1602    DataTransmissionAction transmissionAction;
1603 #ifdef NR_DRX   
1604    bool            drxConfigIndicatorRelease;
1605 #endif
1606 }MacUeRecfg;
1607
1608 typedef struct nrcgi
1609 {
1610    Plmn      plmn;
1611    uint16_t  cellId;
1612 }Nrcgi;
1613
1614 typedef struct srbFailInfo
1615 {
1616    uint8_t       srbId;
1617    FailureCause  cause;
1618 }SRBFailInfo;
1619
1620 typedef struct drbFailInfo
1621 {
1622    uint8_t       drbId;
1623    FailureCause  cause;
1624 }DRBFailInfo;
1625
1626 typedef struct sCellFailInfo
1627 {
1628    Nrcgi         nrcgi;
1629    FailureCause  cause;
1630 }SCellFailInfo;
1631
1632 typedef struct macUeCreateRsp
1633 {
1634    uint16_t       cellId;
1635    uint16_t       ueId;
1636    MacRsp         result;
1637    uint8_t        numSRBFailed;   /* valid values : 0 to MAX_NUM_SRB */ 
1638    SRBFailInfo    *failedSRBlisti;
1639    uint8_t        numDRBFailed;   /* valid values : 0 to MAX_NUM_DRB */
1640    DRBFailInfo    *failedDRBlist;
1641    uint8_t        numSCellFailed; /* valid values : 0 to MAX_NUM_SCELL */
1642    SCellFailInfo  *failedSCellList;
1643    uint8_t        numDRBModFailed;   /* valid values : 0 to MAX_NUM_DRB */
1644    DRBFailInfo    *failedDRBModlist;
1645 }MacUeCreateRsp;
1646
1647 typedef struct macUeCreateRsp MacUeRecfgRsp;
1648
1649 typedef struct rachRsrcReq
1650 {
1651    uint16_t cellId;
1652    uint16_t ueId;
1653    uint8_t  numSsb;
1654    uint8_t  ssbIdx[MAX_NUM_SSB];
1655 }MacRachRsrcReq;
1656
1657 typedef struct macCfraSsbResource
1658 {
1659    uint8_t  ssbIdx;
1660    uint8_t  raPreambleIdx;
1661 }MacCfraSsbResource;
1662
1663 typedef struct macCfraResource
1664 {
1665    uint8_t   numSsb;
1666    MacCfraSsbResource ssbResource[MAX_NUM_SSB];
1667 }MacCfraResource;
1668
1669 typedef struct macRachRsrcRsp
1670 {
1671    uint16_t   cellId;
1672    uint16_t   ueId;
1673    MacRsp     result;
1674    uint16_t   newCrnti;     /* This parameter maps to 3GPP TS 38.331 newUE-Identity */
1675    MacCfraResource  cfraResource;
1676 }MacRachRsrcRsp;
1677
1678 typedef struct macRachRsrcRel
1679 {
1680    uint16_t cellId;
1681    uint16_t ueId;
1682    uint16_t crnti;
1683 }MacRachRsrcRel;
1684
1685 typedef struct ueDelete
1686 {
1687     uint16_t cellId;
1688     uint8_t  ueId;
1689     uint16_t crnti;
1690 }MacUeDelete;
1691
1692 typedef struct ueDeleteRsp
1693 {
1694    uint16_t cellId;
1695    uint8_t  ueId;
1696    CauseOfResult  status;
1697 }MacUeDeleteRsp;
1698
1699 typedef struct macCellDeleteReq
1700 {
1701    uint16_t cellId;
1702 }MacCellDeleteReq;
1703
1704 typedef struct macCellDeleteRsp
1705 {
1706    uint16_t cellId;
1707    CauseOfResult  status;
1708 }MacCellDeleteRsp;
1709
1710 typedef struct macSliceCfgRsp 
1711 {
1712    Snssai     snssai;
1713    MacRsp     rsp;
1714    CauseOfResult  cause;  
1715 }MacSliceCfgRsp;
1716
1717 typedef struct rrmPolicyRatio
1718 {
1719    uint8_t maxRatio;
1720    uint8_t minRatio;
1721    uint8_t dedicatedRatio;
1722 }RrmPolicyRatio;
1723
1724 typedef struct rrmPolicyMemberList
1725 {
1726    Plmn    plmn;
1727    Snssai  snssai;
1728 }RrmPolicyMemberList;
1729
1730 typedef struct macSliceRrmPolicy
1731 {
1732    ResourceType        resourceType;
1733    uint8_t             numOfRrmPolicyMem;
1734    RrmPolicyMemberList **rRMPolicyMemberList;
1735    RrmPolicyRatio      policyRatio;
1736 }MacSliceRrmPolicy;
1737
1738 typedef struct macSliceCfgReq
1739 {
1740    uint8_t           numOfRrmPolicy;
1741    MacSliceRrmPolicy **listOfRrmPolicy;
1742 }MacSliceCfgReq;
1743
1744 /*As per ORAN-WG8, Slice Cfg and ReCfg are same structures*/
1745 typedef struct macSliceCfgReq MacSliceRecfgReq;
1746 typedef struct macSliceCfgRsp MacSliceRecfgRsp;
1747
1748 /*  Ref: ORAN_WG8.V7.0.0 Sec 1.1.1.17 DL PCCH Indication */
1749 typedef struct dlPcchInd
1750 {
1751    uint16_t  cellId;
1752    uint16_t  pf;
1753    uint8_t   i_s;
1754    uint16_t  pduLen;
1755    uint8_t  *pcchPdu;
1756 }DlPcchInd;
1757
1758
1759 /*  Ref: ORAN_WG8.V7.0.0 Sec 1.1.1.1 Cell Start */
1760 typedef struct cellInfo
1761 {
1762     SlotTimingInfo slotInfo;
1763     uint16_t       cellId;
1764 }CellInfo;
1765
1766 typedef struct cellInfo CellStartInfo;
1767 typedef struct cellInfo CellStopInfo;
1768
1769 /*  Ref: ORAN_WG8.V7.0.0 Sec 1.1.1.12 UE Reset Request */
1770 typedef struct ueReset
1771 {
1772     uint16_t cellId;
1773     uint8_t  ueId;
1774 }MacUeResetReq;
1775
1776 /*  Ref: ORAN_WG8.V7.0.0 Sec 1.1.1.13 UE Reset Response */
1777 typedef struct ueResetRsp
1778 {
1779    uint16_t cellId;
1780    uint8_t  ueId;
1781    CauseOfResult  status;
1782 }MacUeResetRsp;
1783
1784 /*  Ref: ORAN_WG8.V7.0.0 Sec 1.1.1.14 UE Sync Status Indication */
1785 typedef struct ueSyncStatusInd
1786 {
1787    uint16_t   cellId;
1788    uint8_t    ueId;
1789    SyncStatus status;
1790 }MacUeSyncStatusInd;
1791
1792 /* The following list of structures is taken from the SI-SchedulingInfo section of specification 33.331. */
1793 typedef struct sibTypeInfo
1794 {
1795    SibType sibType;
1796    uint8_t valueTag;
1797    bool    areaScope;
1798 }SibTypeInfo;
1799
1800 typedef struct sibMappingInfo
1801 {
1802    uint8_t      numSibTypeInfo;
1803    SibTypeInfo  sibTypeInfo[NUM_SIB];
1804 }SibMappingInfo;
1805
1806 typedef struct schedulingInfo 
1807 {
1808    SiBroadcastStatus siBroadcastStatus;
1809    SiPeriodicity     siPeriodicity;
1810    SibMappingInfo    sibMappingInfo;
1811 }SchedulingInfo;
1812
1813 typedef struct rachOccasionsSi
1814 {
1815    RachCfgGeneric     rachConfigSi;
1816    SsbPerRachOccasion ssbPerRachOccasion;
1817 }RachOccasionsSi;
1818
1819 typedef struct siReqRsrc 
1820 {
1821    uint8_t raPreambleStartIndex;
1822    uint8_t raAssociationPeriodIndex;
1823    uint8_t raSsbOccasionMaskIndex; 
1824 }SiReqRsrc;
1825
1826 typedef struct siRequestResource
1827 {
1828    uint8_t    numOfSiReqRsrc;
1829    SiReqRsrc  siReqRsrc[MAX_SI_MESSAGE];
1830 }SiRequestResource;
1831
1832 typedef struct siRequestConfig
1833 {
1834    RachOccasionsSi    rachOccasionsSi;
1835    SiRequestPeriod    siRequestPeriod;
1836    SiRequestResource  siRequestResource;
1837 }SiRequestConfig;
1838
1839 typedef struct schedulingInfoList
1840 {
1841    uint8_t        numSchInfo;
1842    SchedulingInfo schedulingInfo[MAX_SI_MESSAGE];
1843 }SchedulingInfoList;
1844
1845 typedef struct siSchedulingInfo
1846 {
1847    SchedulingInfoList schInfoList;
1848    SiWindowLength     siWindowLength;
1849    SiRequestConfig    siRequestConfig;
1850    SiRequestConfig    siRequestConfigSUL;
1851    uint8_t            *siAreaID;
1852 }SiSchedulingInfo;
1853
1854 /*  Ref: ORAN_WG8.V7.0.0 Sec 1.1.1.18 DL Broadcast Request  */
1855 typedef struct macDlBroadcastReq
1856 {
1857     uint16_t         cellId;
1858     uint8_t          numSiBlock;
1859     SiSchedulingInfo **siSchedulingInfo;
1860 }MacDlBroadcastReq;
1861
1862 typedef struct macStatsGrpInfo
1863 {
1864    uint8_t   groupId;
1865    uint16_t  periodicity;  /* In milliseconds */
1866    uint8_t   numStats;
1867    MacMeasurementType statsList[MAX_NUM_STATS];
1868 }MacStatsGrpInfo;
1869
1870 typedef struct macStatsReq
1871 {
1872    uint64_t          subscriptionId;
1873    uint8_t           numStatsGroup;
1874    MacStatsGrpInfo   statsGrpList[MAX_NUM_STATS_GRP];
1875 }MacStatsReq;
1876
1877 typedef struct macStatsGrpRejected
1878 {
1879    uint8_t  groupId;
1880    CauseOfResult cause;
1881 }MacStatsGrpRejected;
1882
1883 typedef struct macStatsRsp
1884 {
1885    uint64_t             subscriptionId;
1886    uint8_t              numGrpAccepted;
1887    uint8_t              statsGrpAcceptedList[MAX_NUM_STATS_GRP];
1888    uint8_t              numGrpRejected;
1889    MacStatsGrpRejected  statsGrpRejectedList[MAX_NUM_STATS_GRP];
1890 }MacStatsRsp;
1891
1892 typedef struct macStats
1893 {
1894    MacMeasurementType type;
1895    double value;
1896 }MacStats;
1897
1898 typedef struct macStatsInd
1899 {
1900    uint64_t    subscriptionId;
1901    uint8_t     groupId;
1902    uint8_t     numStats;
1903    MacStats    measuredStatsList[MAX_NUM_STATS];
1904 }MacStatsInd;
1905
1906 typedef struct macStatsDeleteReq
1907 {
1908    uint64_t    subscriptionId;
1909    uint8_t     numStatsGroupToBeDeleted;
1910    uint8_t     statsGrpIdToBeDelList[MAX_NUM_STATS_GRP];
1911 }MacStatsDeleteReq;
1912
1913 typedef struct macStatsDeleteInfo
1914 {
1915    uint8_t       groupId;
1916    MacRsp        statsGrpDelRsp;
1917    CauseOfResult statsGrpDelCause;
1918 }MacStatsDeleteInfo;
1919
1920 typedef struct macStatsDeleteRsp
1921 {
1922    uint64_t           subscriptionId; /* subscription Id */
1923    MacRsp             subsDelRsp;    /* deletion status of all statsGrp with given subscriptionId */
1924    CauseOfResult      subsDelCause;  /* cause of failure in deletion of all statsGrp with given subscriptionId */
1925    uint8_t            numStatsGroupDeleted; /* number of actions to deleted */ 
1926    MacStatsDeleteInfo statsGrpDelInfo[MAX_NUM_STATS_GRP]; /*list of the deletion statuses for specific actions */
1927 }MacStatsDeleteRsp;
1928
1929 typedef struct macStatsReq MacStatsModificationReq;
1930 typedef struct macStatsRsp MacStatsModificationRsp;
1931
1932 /****************** FUNCTION POINTERS ********************************/
1933
1934 /* DL broadcast req from DU APP to MAC*/
1935 typedef uint8_t (*DuMacDlBroadcastReq) ARGS((
1936          Pst           *pst,
1937          MacDlBroadcastReq *dlBroadcast));
1938
1939 /* Functions for CellUp Ind from MAC to DU APP*/
1940 typedef uint8_t (*DuMacCellUpInd) ARGS((
1941          Pst       *pst,
1942          OduCellId *cellId ));
1943
1944 /* Functions for slot Ind from MAC to DU APP*/
1945 typedef uint8_t (*DuMacSlotInd) ARGS((
1946          Pst       *pst,
1947          SlotTimingInfo *slotIndInfo));
1948
1949 /* Functions for stop Ind from MAC to DU APP*/
1950 typedef uint8_t (*DuMacStopInd) ARGS((
1951          Pst        *pst,
1952          OduCellId  *cellId ));
1953
1954 /* Functions for mac cell start req */
1955 typedef uint8_t (*DuMacCellStart) ARGS((
1956          Pst        *pst, 
1957          CellStartInfo  *cellId));
1958
1959 /* Functions for mac cell stop request */
1960 typedef uint8_t (*DuMacCellStop) ARGS((
1961          Pst        *pst,
1962          CellStopInfo  *cellId ));
1963
1964 /* Function pointers for packing macCellCfg Request and Confirm */
1965 typedef uint8_t (*packMacCellCfgReq) ARGS((
1966          Pst           *pst,
1967          MacCellCfg    *macCellCfg ));
1968
1969 typedef uint8_t (*packMacCellCfgConfirm) ARGS((
1970          Pst              *pst,
1971          MacCellCfgCfm    *macCellCfgCfm ));
1972
1973 typedef uint8_t (*DuMacCellCfgReq) ARGS((
1974          Pst        *pst,        
1975          MacCellCfg *macCellCfg));
1976
1977 typedef uint8_t (*DuMacCellCfgCfm) ARGS((
1978          Pst        *pst,        
1979          MacCellCfgCfm *macCellCfgCfm ));
1980
1981 /* Functions for UL CCCH Ind from MAC to DU APP*/
1982 typedef uint8_t (*DuMacUlCcchInd) ARGS((
1983          Pst           *pst,
1984          UlCcchIndInfo *ulCcchIndInfo ));
1985
1986 /* Functions for DL CCCH Ind from DU APP to MAC*/
1987 typedef uint8_t (*DuMacDlCcchInd) ARGS((
1988          Pst           *pst,
1989          DlCcchIndInfo *dlCcchIndInfo ));
1990
1991 /* UE create Request from DU APP to MAC*/
1992 typedef uint8_t (*DuMacUeCreateReq) ARGS((
1993          Pst           *pst,
1994          MacUeCreateReq      *ueCfg ));
1995
1996 /* UE create Response from MAC to DU APP */
1997 typedef uint8_t (*MacDuUeCreateRspFunc) ARGS((
1998          Pst           *pst, 
1999          MacUeCreateRsp   *cfgRsp));
2000
2001 /* UE Reconfig Request from DU APP to MAC */
2002 typedef uint8_t (*DuMacUeReconfigReq) ARGS((
2003          Pst           *pst,
2004          MacUeRecfg      *ueCfg ));
2005
2006 /* UE Reconfig Response from MAC to DU APP */
2007 typedef uint8_t (*MacDuUeRecfgRspFunc) ARGS((
2008          Pst           *pst, 
2009          MacUeRecfgRsp   *cfgRsp));
2010
2011 /* RACH Resource Request from DU APP to MAC */
2012 typedef uint8_t (*DuMacRachRsrcReq) ARGS((
2013     Pst            *pst,
2014     MacRachRsrcReq *rachRsrcReq));
2015
2016 /* RACH Resource Response from MAC to DU APP */
2017 typedef uint8_t (*MacDuRachRsrcRspFunc) ARGS((
2018     Pst            *pst,
2019     MacRachRsrcRsp *rachRsrcRsp));
2020
2021 /* RACH Resource Release from DU APP to MAC */
2022 typedef uint8_t (*DuMacRachRsrcRel) ARGS((
2023     Pst            *pst,
2024     MacRachRsrcRel *rachRsrcRel));
2025
2026 /* UE Delete Request from DU APP to MAC*/
2027 typedef uint8_t (*DuMacUeDeleteReq) ARGS((
2028      Pst           *pst,
2029      MacUeDelete   *ueDel ));
2030
2031 /* UE Delete Response from MAC to DU APP*/
2032 typedef uint8_t (*MacDuUeDeleteRspFunc) ARGS((
2033      Pst            *pst,
2034      MacUeDeleteRsp *deleteRsp));
2035
2036 /* Cell Delete Request from DU APP to MAC*/
2037 typedef uint8_t (*DuMacCellDeleteReq) ARGS((
2038      Pst           *pst,
2039      MacCellDeleteReq *cellDelete ));
2040
2041 /* Cell Delete Response from MAC to DU APP*/
2042 typedef uint8_t (*MacDuCellDeleteRspFunc) ARGS((
2043      Pst            *pst,
2044      MacCellDeleteRsp *cellDeleteRsp));
2045
2046 /* Slice Cfg Request from DU APP to MAC*/
2047 typedef uint8_t (*DuMacSliceCfgReq) ARGS((
2048      Pst           *pst,
2049      MacSliceCfgReq *CfgReq));
2050
2051 /* Slice Cfg Response from MAC to DU APP */
2052 typedef uint8_t (*MacDuSliceCfgRspFunc) ARGS((
2053          Pst           *pst, 
2054          MacSliceCfgRsp   *cfgRsp));
2055
2056 /* Slice ReReCfg Request from DU APP to MAC*/
2057 typedef uint8_t (*DuMacSliceRecfgReq) ARGS((
2058      Pst           *pst,
2059      MacSliceRecfgReq *CfgReq));
2060
2061 /* Slice ReReCfg Response from MAC to DU APP */
2062 typedef uint8_t (*MacDuSliceRecfgRspFunc) ARGS((
2063         Pst           *pst,
2064         MacSliceRecfgRsp   *cfgRsp));
2065
2066 /* Pcch indication from DU APP to MAC*/
2067 typedef uint8_t (*DuMacDlPcchInd) ARGS((
2068      Pst        *pst,
2069      DlPcchInd *pcchInd));
2070
2071 /* UE Reset Request from DU APP to MAC*/
2072 typedef uint8_t (*DuMacUeResetReq) ARGS((
2073      Pst           *pst,
2074      MacUeResetReq *ueReset ));
2075
2076 /* UE Reset Response from MAC to DU APP*/
2077 typedef uint8_t (*MacDuUeResetRspFunc) ARGS((
2078      Pst            *pst,
2079      MacUeResetRsp *resetRsp));
2080
2081 /* UE sync status indication from MAC to DU APP*/
2082 typedef uint8_t (*MacDuUeSyncStatusIndFunc) ARGS((
2083         Pst            *pst,
2084         MacUeSyncStatusInd *syncStatusInd));
2085
2086 /* Statitics Request from DU APP to MAC */
2087 typedef uint8_t (*DuMacStatsReqFunc) ARGS((
2088       Pst *pst,
2089       MacStatsReq *statsReq));
2090
2091 /* Statistics Response from MAC to DU APP */
2092 typedef uint8_t (*MacDuStatsRspFunc) ARGS((
2093       Pst *pst,
2094       MacStatsRsp *statsRsp));
2095
2096 /* Statistics Ind from MAC to DU APP */
2097 typedef uint8_t (*MacDuStatsIndFunc) ARGS((
2098       Pst *pst,
2099       MacStatsInd *statsInd));
2100
2101 /* Statitics Delete Request from DU APP to MAC */
2102 typedef uint8_t (*DuMacStatsDeleteReqFunc) ARGS((
2103          Pst *pst,
2104          MacStatsDeleteReq *statsDeleteReq));
2105
2106 /* Statistics Delete Response from MAC to DU APP */
2107 typedef uint8_t (*MacDuStatsDeleteRspFunc) ARGS((
2108          Pst *pst,
2109          MacStatsDeleteRsp *statsDeleteRsp));
2110
2111 /* Statitics Modification Request from DU APP to MAC */
2112 typedef uint8_t (*DuMacStatsModificationReqFunc) ARGS((
2113       Pst *pst,
2114       MacStatsModificationReq *statsModificationReq));
2115
2116 /* Statistics Modification Response from MAC to DU APP */
2117 typedef uint8_t (*MacDuStatsModificationRspFunc) ARGS((
2118       Pst *pst,
2119       MacStatsModificationRsp *statsModificationRsp));
2120
2121 /******************** FUNCTION DECLARATIONS ********************************/
2122 uint8_t packMacCellUpInd(Pst *pst, OduCellId *cellId);
2123 uint8_t unpackMacCellUpInd(DuMacCellUpInd func, Pst *pst, Buffer *mBuf);
2124 uint8_t duHandleCellUpInd(Pst *pst, OduCellId *cellId);
2125
2126 uint8_t packMacCellStart(Pst *pst, CellStartInfo *cellStartInfo);
2127 uint8_t unpackMacCellStart(DuMacCellStart func, Pst *pst, Buffer *mBuf);
2128 uint8_t MacProcCellStart(Pst *pst, CellStartInfo *cellStartInfo);
2129
2130 uint8_t packMacCellStop(Pst *pst, CellStopInfo *cellStopInfo);
2131 uint8_t unpackMacCellStop(DuMacCellStop func, Pst *pst, Buffer *mBuf);
2132 uint8_t MacProcCellStop(Pst *pst, CellStopInfo *cellStopInfo);
2133
2134 uint8_t packMacCellCfg(Pst *pst, MacCellCfg *macCellCfg);
2135 uint8_t unpackDuMacCellCfg(DuMacCellCfgReq func,  Pst *pst,  Buffer *mBuf);
2136 uint8_t MacProcCellCfgReq(Pst *pst, MacCellCfg *macCellCfg);
2137
2138 uint8_t packMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm);
2139 uint8_t unpackMacCellCfgCfm(DuMacCellCfgCfm func, Pst *pst, Buffer *mBuf);
2140 uint8_t duHandleMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm);
2141
2142 uint8_t packMacStopInd(Pst *pst, OduCellId *cellId);
2143 uint8_t unpackMacStopInd(DuMacStopInd func, Pst *pst, Buffer *mBuf);
2144 uint8_t duHandleStopInd(Pst *pst, OduCellId *cellId);
2145 uint8_t sendStopIndMacToDuApp(uint16_t cellId);
2146
2147 uint8_t packMacUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo);
2148 uint8_t unpackMacUlCcchInd(DuMacUlCcchInd func, Pst *pst, Buffer *mBuf);
2149 uint8_t duHandleUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo);
2150
2151 uint8_t packMacDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo);
2152 uint8_t unpackMacDlCcchInd(DuMacDlCcchInd func, Pst *pst, Buffer *mBuf);
2153 uint8_t MacProcDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo);
2154
2155 uint8_t packDuMacUeCreateReq(Pst *pst, MacUeCreateReq *ueCfg);
2156 uint8_t unpackMacUeCreateReq(DuMacUeCreateReq func, Pst *pst, Buffer *mBuf);
2157 uint8_t MacProcUeCreateReq(Pst *pst, MacUeCreateReq *ueCfg);
2158
2159 uint8_t packDuMacUeCreateRsp(Pst *pst, MacUeCreateRsp *cfgRsp);
2160 uint8_t unpackDuMacUeCreateRsp(MacDuUeCreateRspFunc func, Pst *pst, Buffer *mBuf);
2161 uint8_t DuProcMacUeCreateRsp(Pst *pst, MacUeCreateRsp *cfgRsp);
2162
2163 uint8_t packDuMacUeReconfigReq(Pst *pst, MacUeRecfg *ueRecfg);
2164 uint8_t unpackMacUeReconfigReq(DuMacUeReconfigReq func, Pst *pst, Buffer *mBuf);
2165 uint8_t MacProcUeReconfigReq(Pst *pst, MacUeRecfg *ueRecfg);
2166
2167 uint8_t packDuMacUeRecfgRsp(Pst *pst, MacUeRecfgRsp *recfgRsp);
2168 uint8_t unpackDuMacUeRecfgRsp(MacDuUeRecfgRspFunc func, Pst *pst, Buffer *mBuf);
2169 uint8_t DuProcMacUeRecfgRsp(Pst *pst, MacUeRecfgRsp *recfgRsp);
2170
2171 uint8_t packDuMacRachRsrcReq(Pst *pst, MacRachRsrcReq *rachRsrcReq);
2172 uint8_t unpackMacRachRsrcReq(DuMacRachRsrcReq func, Pst *pst, Buffer *mBuf);
2173 uint8_t MacProcRachRsrcReq(Pst *pst, MacRachRsrcReq *rachRsrcReq);
2174
2175 uint8_t packDuMacRachRsrcRsp(Pst *pst, MacRachRsrcRsp *rachRsrcRsp);
2176 uint8_t unpackDuMacRachRsrcRsp(MacDuRachRsrcRspFunc func, Pst *pst, Buffer *mBuf);
2177 uint8_t DuProcMacRachRsrcRsp(Pst *pst, MacRachRsrcRsp *rachRsrcRsp);
2178
2179 uint8_t packDuMacRachRsrcRel(Pst *pst, MacRachRsrcRel *rachRsrcRel);
2180 uint8_t unpackMacRachRsrcRel(DuMacRachRsrcRel func, Pst *pst, Buffer *mBuf);
2181 uint8_t MacProcRachRsrcRel(Pst *pst, MacRachRsrcRel *rachRsrcRel);
2182
2183 uint8_t packDuMacUeDeleteReq(Pst *pst, MacUeDelete *ueDelete);
2184 uint8_t MacProcUeDeleteReq(Pst *pst,  MacUeDelete *ueDelete);
2185 uint8_t unpackMacUeDeleteReq(DuMacUeDeleteReq func, Pst *pst, Buffer *mBuf);
2186
2187 uint8_t packDuMacUeDeleteRsp(Pst *pst, MacUeDeleteRsp *deleteRsp);
2188 uint8_t DuProcMacUeDeleteRsp(Pst *pst, MacUeDeleteRsp *deleteRsp);
2189 uint8_t unpackDuMacUeDeleteRsp(MacDuUeDeleteRspFunc func, Pst *pst, Buffer *mBuf);
2190
2191 uint8_t packDuMacCellDeleteReq(Pst *pst, MacCellDeleteReq *cellDelete);
2192 uint8_t MacProcCellDeleteReq(Pst *pst, MacCellDeleteReq *cellDelete);
2193 uint8_t unpackMacCellDeleteReq(DuMacCellDeleteReq func, Pst *pst, Buffer *mBuf);
2194
2195 uint8_t packDuMacCellDeleteRsp(Pst *pst, MacCellDeleteRsp *cellDeleteRsp);
2196 uint8_t DuProcMacCellDeleteRsp(Pst *pst, MacCellDeleteRsp *cellDeleteRsp);
2197 uint8_t unpackDuMacCellDeleteRsp(MacDuCellDeleteRspFunc func, Pst *pst, Buffer *mBuf);
2198
2199 uint8_t packDuMacSliceCfgReq(Pst *pst, MacSliceCfgReq *sliceCfgReq);
2200 uint8_t MacProcSliceCfgReq(Pst *pst, MacSliceCfgReq *sliceCfgReq);
2201 uint8_t unpackMacSliceCfgReq(DuMacSliceCfgReq func, Pst *pst, Buffer *mBuf);
2202
2203 uint8_t DuProcMacSliceCfgRsp(Pst *pst,  MacSliceCfgRsp *cfgRsp);
2204 uint8_t packDuMacSliceCfgRsp(Pst *pst, MacSliceCfgRsp *cfgRsp);
2205 uint8_t unpackDuMacSliceCfgRsp(MacDuSliceCfgRspFunc func, Pst *pst, Buffer *mBuf);
2206
2207 uint8_t packDuMacSliceRecfgReq(Pst *pst, MacSliceRecfgReq *sliceRecfgReq);
2208 uint8_t MacProcSliceRecfgReq(Pst *pst, MacSliceRecfgReq *sliceRecfgReq);
2209 uint8_t unpackMacSliceRecfgReq(DuMacSliceRecfgReq func, Pst *pst, Buffer *mBuf);
2210
2211 uint8_t DuProcMacSliceRecfgRsp(Pst *pst,  MacSliceRecfgRsp *sliceRecfgRsp);
2212 uint8_t packDuMacSliceRecfgRsp(Pst *pst, MacSliceRecfgRsp *sliceRecfgRsp);
2213 uint8_t unpackDuMacSliceRecfgRsp(MacDuSliceRecfgRspFunc func, Pst *pst, Buffer *mBuf);
2214
2215 uint8_t duHandleSlotInd(Pst *pst, SlotTimingInfo *slotIndInfo);
2216 uint8_t packMacSlotInd(Pst *pst, SlotTimingInfo *slotIndInfo);
2217 uint8_t unpackDuMacSlotInd(DuMacSlotInd func, Pst *pst, Buffer *mBuf);
2218
2219 uint8_t packDuMacDlPcchInd(Pst *pst, DlPcchInd *pcchInd);
2220 uint8_t MacProcDlPcchInd(Pst *pst, DlPcchInd *pcchInd);
2221 uint8_t unpackMacDlPcchInd(DuMacDlPcchInd func, Pst *pst, Buffer *mBuf);
2222
2223 int8_t getFreeBitFromUeBitMap(uint16_t cellId);
2224 void unsetBitInUeBitMap(uint16_t cellId, uint8_t bitPos);
2225
2226 uint8_t packDuMacUeResetReq(Pst *pst, MacUeResetReq *ueReset);
2227 uint8_t MacProcUeResetReq(Pst *pst,  MacUeResetReq *ueReset);
2228 uint8_t unpackMacUeResetReq(DuMacUeResetReq func, Pst *pst, Buffer *mBuf);
2229
2230 uint8_t packDuMacUeResetRsp(Pst *pst, MacUeResetRsp *resetRsp);
2231 uint8_t DuProcMacUeResetRsp(Pst *pst, MacUeResetRsp *resetRsp);
2232 uint8_t unpackDuMacUeResetRsp(MacDuUeResetRspFunc func, Pst *pst, Buffer *mBuf);
2233
2234 uint8_t packDuMacUeSyncStatusInd(Pst *pst, MacUeSyncStatusInd *ueSyncStatusInd);
2235 uint8_t DuProcMacUeSyncStatusInd(Pst *pst, MacUeSyncStatusInd *ueSyncStatusInd);
2236 uint8_t unpackDuMacUeSyncStatusInd(MacDuUeSyncStatusIndFunc func, Pst *pst, Buffer *mBuf);
2237
2238 uint8_t packDuMacDlBroadcastReq(Pst *pst, MacDlBroadcastReq *dlBroadcastReq);
2239 uint8_t MacProcDlBroadcastReq(Pst *pst,  MacDlBroadcastReq *dlBroadcastReq);
2240 uint8_t unpackMacDlBroadcastReq(DuMacDlBroadcastReq func, Pst *pst, Buffer *mBuf);
2241
2242 uint8_t packDuMacStatsReq(Pst *pst, MacStatsReq *statsReq);
2243 uint8_t MacProcStatsReq(Pst *pst, MacStatsReq *statsReq);
2244 uint8_t unpackMacStatsReq(DuMacStatsReqFunc func, Pst *pst, Buffer *mBuf);
2245
2246 uint8_t packDuMacStatsRsp(Pst *pst, MacStatsRsp *statsRsp);
2247 uint8_t DuProcMacStatsRsp(Pst *pst, MacStatsRsp *statsRsp);
2248 uint8_t unpackDuMacStatsRsp(MacDuStatsRspFunc func, Pst *pst, Buffer *mBuf);
2249
2250 uint8_t packDuMacStatsInd(Pst *pst, MacStatsInd *statsRsp);
2251 uint8_t DuProcMacStatsInd(Pst *pst, MacStatsInd *statsRsp);
2252 uint8_t unpackDuMacStatsInd(MacDuStatsIndFunc func, Pst *pst, Buffer *mBuf);
2253
2254 uint8_t packDuMacStatsDeleteReq(Pst *pst, MacStatsDeleteReq *statsDeleteReq);
2255 uint8_t MacProcStatsDeleteReq(Pst *pst, MacStatsDeleteReq *statsDeleteReq);
2256 uint8_t unpackMacStatsDeleteReq(DuMacStatsDeleteReqFunc func, Pst *pst, Buffer *mBuf);
2257
2258 uint8_t packDuMacStatsDeleteRsp(Pst *pst, MacStatsDeleteRsp *statsDeleteRsp);
2259 uint8_t DuProcMacStatsDeleteRsp(Pst *pst, MacStatsDeleteRsp *statsDeleteRsp);
2260 uint8_t unpackDuMacStatsDeleteRsp(MacDuStatsDeleteRspFunc func, Pst *pst, Buffer *mBuf);
2261
2262 uint8_t packDuMacStatsModificationReq(Pst *pst, MacStatsModificationReq *statsModificationReq);
2263 uint8_t MacProcStatsModificationReq(Pst *pst, MacStatsModificationReq *statsModificationReq);
2264 uint8_t unpackMacStatsModificationReq(DuMacStatsModificationReqFunc func, Pst *pst, Buffer *mBuf);
2265
2266 uint8_t packDuMacStatsModificationRsp(Pst *pst, MacStatsModificationRsp *statsModificationRsp);
2267 uint8_t DuProcMacStatsModificationRsp(Pst *pst, MacStatsModificationRsp *statsModificationRsp);
2268 uint8_t unpackDuMacStatsModificationRsp(MacDuStatsModificationRspFunc func, Pst *pst, Buffer *mBuf);
2269
2270
2271 #endif
2272
2273
2274 /**********************************************************************
2275   End of file
2276  **********************************************************************/