X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fcm%2Fdu_app_mac_inf.h;h=24738f6bd18d13cb8ee1648097f1035cf49eb711;hb=6dc8a4c17da24847b3a3aee91b37151f77a8a5bc;hp=40f2ab4e1bc68e9159b9f4baf0c849d1f22ef008;hpb=a42c1300602c311dd44fd1e5595dcf6f9f9e1e5d;p=o-du%2Fl2.git diff --git a/src/cm/du_app_mac_inf.h b/src/cm/du_app_mac_inf.h index 40f2ab4e1..30a11a300 100644 --- a/src/cm/du_app_mac_inf.h +++ b/src/cm/du_app_mac_inf.h @@ -14,35 +14,177 @@ # See the License for the specific language governing permissions and # # limitations under the License. # ################################################################################ -*******************************************************************************/ + *******************************************************************************/ /* Defines APIs exchanged between du_app and cl module of MAC */ #ifndef __MACINT_H__ #define __MACINT_H__ #define NUM_NUMEROLOGY 5 /* Number of numerology */ -#define MAXIMUM_TDD_PERIODICITY 5 -#define MAX_SYMB_PER_SLOT 14 - +#define MAX_SI_MESSAGE 32 /* As per 138 331 V15.3, RRC Multiplicity and type constraint definitions maxSI-Message = 32 */ +#define NUM_SIB 32 /* As per 138 331 V15.3, RRC Multiplicity and type constraint definitions maxSIB = 32 */ #define NUM_SSB 1 /* max value is 64 */ #define SSB_MASK_SIZE 1 /* SSB mask size is 32bit for sub6 */ -#define SIB1_NEW_TX_PERIOD 160 #define SIB1_REPETITION_PERIOD 20 #define CORESET_0_INDEX 0 +#define CORESET_1_INDEX 1 +#define CORESET_2_INDEX 2 +#define CORESET_3_INDEX 3 +#define CORESET_4_INDEX 4 #define SEARCHSPACE_0_INDEX 0 -#define SIB1_MCS 4 +#define SEARCHSPACE_1_INDEX 1 +#define SEARCHSPACE_2_INDEX 2 +#define SEARCHSPACE_3_INDEX 3 +#define SEARCHSPACE_4_INDEX 4 +#define SS_MONITORING_SLOT_SL1 0 /* all slots */ +#define SS_MONITORING_SYMBOL 0x2000; /* symbol-0, set 14th bit */ + +/* Macro for Ue Context */ +#define MAX_NUM_SR_CFG_PER_CELL_GRP 8 /* Max number of scheduling request config per cell group */ +#define MAC_NUM_TAGS 4 /* Max number of timing advance groups */ +#define MAX_NUM_BWP 4 /* Max number of BWP per serving cell */ +#define MAX_NUM_CRSET 3 /* Max number of control resource set in add/modify/release list */ +#define MAX_NUM_SEARCH_SPC 10 /* Max number of search space in add/modify/release list */ +#define MONITORING_SYMB_WITHIN_SLOT_SIZE 2 /* i.e. 2 bytes because size of monitoring symbols within slot is 14 bits */ +#define MAX_NUM_DL_ALLOC 16 /* Max number of pdsch time domain downlink allocation */ +#define MAX_NUM_UL_ALLOC 16 /* Max number of pusch time domain uplink allocation */ +#define MAX_NUM_SCELL 32 -/* Macros for coupling */ -#define DU_MAC_LC 0 -#define DU_MAC_TC 1 -#define DU_MAC_LWLC 2 +/* PUCCH Configuration Macro */ +#define MAX_NUM_PUCCH_RESRC 128 +#define MAX_NUM_PUCCH_RESRC_SET 4 +#define MAX_NUM_PUCCH_PER_RESRC_SET 32 +#define MAX_NUM_SPATIAL_RELATIONS 8 +#define MAX_NUM_PUCCH_P0_PER_SET 8 +#define MAX_NUM_PATH_LOSS_REF_RS 4 +#define MAX_NUM_DL_DATA_TO_UL_ACK 15 /* Event IDs */ #define EVENT_MAC_CELL_CONFIG_REQ 200 #define EVENT_MAC_CELL_CONFIG_CFM 201 -#define EVENT_MAC_CELL_START_REQ 202 -#define EVENT_MAC_CELL_STOP_REQ 203 -#define EVENT_MAC_SLOT_IND 204 +#define EVENT_MAC_CELL_START 202 +#define EVENT_MAC_CELL_STOP 203 +#define EVENT_MAC_CELL_UP_IND 204 +#define EVENT_MAC_STOP_IND 205 +#define EVENT_MAC_UL_CCCH_IND 206 +#define EVENT_MAC_DL_CCCH_IND 207 +#define EVENT_MAC_UE_CREATE_REQ 208 +#define EVENT_MAC_UE_CREATE_RSP 209 +#define EVENT_MAC_UE_RECONFIG_REQ 210 +#define EVENT_MAC_UE_RECONFIG_RSP 211 +#define EVENT_MAC_UE_DELETE_REQ 212 +#define EVENT_MAC_UE_DELETE_RSP 213 +#define EVENT_MAC_CELL_DELETE_REQ 214 +#define EVENT_MAC_CELL_DELETE_RSP 215 +#define EVENT_MAC_SLICE_CFG_REQ 216 +#define EVENT_MAC_SLICE_CFG_RSP 217 +#define EVENT_MAC_SLICE_RECFG_REQ 218 +#define EVENT_MAC_SLICE_RECFG_RSP 219 +#define EVENT_MAC_SLOT_IND 220 +#define EVENT_MAC_RACH_RESOURCE_REQ 221 +#define EVENT_MAC_RACH_RESOURCE_RSP 222 +#define EVENT_MAC_RACH_RESOURCE_REL 223 +#define EVENT_MAC_DL_PCCH_IND 224 +#define EVENT_MAC_UE_RESET_REQ 225 +#define EVENT_MAC_UE_RESET_RSP 226 +#define EVENT_MAC_UE_SYNC_STATUS_IND 227 +#define EVENT_MAC_DL_BROADCAST_REQ 228 +#define EVENT_MAC_STATISTICS_REQ 229 +#define EVENT_MAC_STATISTICS_RSP 230 +#define EVENT_MAC_STATISTICS_IND 231 +#define EVENT_MAC_STATS_DELETE_REQ 232 +#define EVENT_MAC_STATS_DELETE_RSP 233 + +#define BSR_PERIODIC_TIMER_SF_10 10 +#define BSR_RETX_TIMER_SF_320 320 +#define BSR_SR_DELAY_TMR_2560 2560 + +#define PAGING_SCHED_DELTA 4 +#define MAX_PLMN 2 + +/********************* Global Variable ********************/ +uint64_t ueBitMapPerCell[MAX_NUM_CELL]; /* Bit Map to store used/free UE-IDX per Cell */ + +/********************* Interface structure definition ********************/ +typedef enum +{ + SIB_TYPE2, + SIB_TYPE3, + SIB_TYPE4, + SIB_TYPE5, + SIB_TYPE6, + SIB_TYPE7, + SIB_TYPE8, + SIB_TYPE9, + SPARE +}SibType; + +typedef enum +{ + SSB_PER_RACH_OCCASION_ONE_EIGHTH, + SSB_PER_RACH_OCCASION_ONE_FOURTH, + SSB_PER_RACH_OCCASION_ONE_HALF, + SSB_PER_RACH_OCCASION_ONE, + SSB_PER_RACH_OCCASION_TWO, + SSB_PER_RACH_OCCASION_FOUR, + SSB_PER_RACH_OCCASION_EIGHT, + SSB_PER_RACH_OCCASION_SIXTEEN +}SsbPerRachOccasion; + +typedef enum +{ + BROADCASTING, + NOTBROADCASTING, +}SiBroadcastStatus; + +typedef enum +{ + RF8, + RF16, + RF32, + RF64, + RF128, + RF256, + RF512 +}SiPeriodicity; + +typedef enum +{ + S5, + S10, + S20, + S40, + S80, + S160, + S320, + S640, + S1280 +}SiWindowLength; + +typedef enum +{ + SI_REQ_PERIOD_1, + SI_REQ_PERIOD_2, + SI_REQ_PERIOD_4, + SI_REQ_PERIOD_6, + SI_REQ_PERIOD_8, + SI_REQ_PERIOD_10, + SI_REQ_PERIOD_12, + SI_REQ_PERIOD_16 +}SiRequestPeriod; + +typedef enum +{ + MAC_DU_APP_RSP_NOK, + MAC_DU_APP_RSP_OK +}MacRsp; + +typedef enum +{ + IN_SYNC, + OUT_OF_SYNC, + OUT_OF_SUNC_MAX_RETRIES +}SyncStatus; typedef enum { @@ -77,29 +219,10 @@ typedef enum RSSI_UNIT_DBFS }RSSIMeasUnit; -typedef enum -{ - DL_SLOT, - UL_SLOT, - GUARD_SLOT -}SlotConfig; - -typedef enum -{ - TX_PRDCTY_MS_0P5, - TX_PRDCTY_MS_0P625, - TX_PRDCTY_MS_1, - TX_PRDCTY_MS_1P25, - TX_PRDCTY_MS_2, - TX_PRDCTY_MS_2P5, - TX_PRDCTY_MS_5, - TX_PRDCTY_MS_10 -}DlUlTxPeriodicity; - typedef enum { BETA_PSS_0DB, - BETA_PSS_1DB + BETA_PSS_3DB }BetaPss; typedef enum @@ -112,170 +235,2007 @@ typedef enum SSB_PRDCTY_MS_160 }SSBPeriod; +typedef enum +{ + RRC_REJECT, + RRC_SETUP +}DlCcchMsgType; + +/* Enums for Ue Create Request */ + +/* SR PROHIBIT TIMER */ +typedef enum +{ + SR_PROHIBIT_MS_1, + SR_PROHIBIT_MS_2, + SR_PROHIBIT_MS_4, + SR_PROHIBIT_MS_8, + SR_PROHIBIT_MS_16, + SR_PROHIBIT_MS_32, + SR_PROHIBIT_MS_64, + SR_PROHIBIT_MS_128 +}SrProhibitTimer; + +typedef enum +{ + SR_TRANS_MAX_N_4, + SR_TRANS_MAX_N_8, + SR_TRANS_MAX_N_16, + SR_TRANS_MAX_N_32, + SR_TRANS_MAX_N_64, + SR_TRANS_MAX_spare3, + SR_TRANS_MAX_spare2, + SR_TRANS_MAX_spare1 +}SrTransMax; + +typedef enum +{ + TIME_ALIGNMENT_TIMER_MS_500, + TIME_ALIGNMENT_TIMER_MS_750, + TIME_ALIGNMENT_TIMER_MS_1280, + TIME_ALIGNMENT_TIMER_MS_1920, + TIME_ALIGNMENT_TIMER_MS_2560, + TIME_ALIGNMENT_TIMER_MS_5120, + TIME_ALIGNMENT_TIMER_MS_10240, + TIME_ALIGNMENT_TIMER_INFINITY +}TimeAlignmentTimer; + +typedef enum +{ + PHR_PERIODIC_TIMER_SF_10, + PHR_PERIODIC_TIMER_SF_20, + PHR_PERIODIC_TIMER_SF_50, + PHR_PERIODIC_TIMER_SF_100, + PHR_PERIODIC_TIMER_SF_200, + PHR_PERIODIC_TIMER_SF_500, + PHR_PERIODIC_TIMER_SF_1000, + PHR_PERIODIC_TIMER_INFINITY +}PhrPeriodicTimer; + +typedef enum +{ + PHR_PROHIBIT_TIMER_SF_0, + PHR_PROHIBIT_TIMER_SF_10, + PHR_PROHIBIT_TIMER_SF_20, + PHR_PROHIBIT_TIMER_SF_50, + PHR_PROHIBIT_TIMER_SF_100, + PHR_PROHIBIT_TIMER_SF_200, + PHR_PROHIBIT_TIMER_SF_500, + PHR_PROHIBIT_TIMER_SF_1000 +}PhrProhibitTimer; + +typedef enum +{ + PHR_TX_PWR_FACTOR_CHANGE_DB_1, + PHR_TX_PWR_FACTOR_CHANGE_DB_3, + PHR_TX_PWR_FACTOR_CHANGE_DB_6, + PHR_TX_PWR_FACTOR_CHANGE_INFINITY +}PhrTxPwrFactorChange; + +typedef enum +{ + PHR_MODE_OTHER_CG_REAL, + PHR_MODE_OTHER_CG_VIRTUAL +}PhrModeOtherCG; + +typedef enum +{ + PDSCH_HARQ_ACK_CODEBOOK_SEMISTATIC, + PDSCH_HARQ_ACK_CODEBOOK_DYNAMIC +}PdschHarqAckCodebook; + +typedef enum +{ + NUM_HARQ_PROC_FOR_PDSCH_N_2, + NUM_HARQ_PROC_FOR_PDSCH_N_4, + NUM_HARQ_PROC_FOR_PDSCH_N_6, + NUM_HARQ_PROC_FOR_PDSCH_N_10, + NUM_HARQ_PROC_FOR_PDSCH_N_16 +}NumHarqProcForPdsch; + +typedef enum +{ + MAX_CODE_BLOCK_GROUP_PER_TB_N_2, + MAX_CODE_BLOCK_GROUP_PER_TB_N_4, + MAX_CODE_BLOCK_GROUP_PER_TB_N_6, + MAX_CODE_BLOCK_GROUP_PER_TB_N_8 +}MaxCodeBlkGrpPerTB; + +typedef enum +{ + PDSCH_X_OVERHEAD_6, + PDSCH_X_OVERHEAD_12, + PDSCH_X_OVERHEAD_18 +}PdschXOverhead; + +typedef enum +{ + TRANSFORM_PRECODER_ENABLED, + TRANSFORM_PRECODER_DISABLED +}TransformPrecoder; + +typedef enum +{ + CCE_REG_MAPPINGTYPE_PR_INTERLEAVED = 1, + CCE_REG_MAPPINGTYPE_PR_NONINTERLEAVED +}REGMappingType; + +typedef enum +{ + SLOTPERIODICITYANDOFFSET_PR_SL1 = 1, + SLOTPERIODICITYANDOFFSET_PR_SL2, + SLOTPERIODICITYANDOFFSET_PR_SL4, + SLOTPERIODICITYANDOFFSET_PR_SL5, + SLOTPERIODICITYANDOFFSET_PR_SL8, + SLOTPERIODICITYANDOFFSET_PR_SL10, + SLOTPERIODICITYANDOFFSET_PR_SL16, + SLOTPERIODICITYANDOFFSET_PR_SL20, + SLOTPERIODICITYANDOFFSET_PR_SL40, + SLOTPERIODICITYANDOFFSET_PR_SL80, + SLOTPERIODICITYANDOFFSET_PR_SL160, + SLOTPERIODICITYANDOFFSET_PR_SL320, + SLOTPERIODICITYANDOFFSET_PR_SL640, + SLOTPERIODICITYANDOFFSET_PR_SL1280, + SLOTPERIODICITYANDOFFSET_PR_SL2560 +}MSlotPeriodAndOffset; + +typedef enum +{ + SAMEASREG_BUNDLE, + ALL_CONTIGUOUS_RBS +}PrecoderGranul; + +typedef enum +{ + SEARCHSPACETYPE_PR_COMMON = 1, + SEARCHSPACETYPE_PR_UE_SPECIFIC +}SearchSpaceType; + +typedef enum +{ + QOS_NON_DYNAMIC = 1, + QOS_DYNAMIC +}QosType; + +typedef enum +{ + AGGREGATIONLEVEL_N0 = 0, + AGGREGATIONLEVEL_N1 = 1, + AGGREGATIONLEVEL_N2 = 2, + AGGREGATIONLEVEL_N3 = 3, + AGGREGATIONLEVEL_N4 = 4, + AGGREGATIONLEVEL_N5 = 5, + AGGREGATIONLEVEL_N6 = 6, + AGGREGATIONLEVEL_N8 = 7 +}AggrLevel; + +typedef enum +{ + ADDITIONALPOSITION_POS0, + ADDITIONALPOSITION_POS1, + ADDITIONALPOSITION_POS3 +}AddPosType; + +typedef enum +{ + MAPPING_TYPEA, + MAPPING_TYPEB +}CommonMappingType; + +typedef enum +{ + RESOURCEALLOCATION_TYPE0, + RESOURCEALLOCATION_TYPE1, + RESOURCEALLOCATION_DYNAMICSWITCH +}ResAllocType; + +typedef enum +{ + RBG_SIZE_CONFIG1, + RBG_SIZE_CONFIG2 +}RBGSize; + +typedef enum +{ + CODEWORDS_SCHED_BY_DCI_N1, + CODEWORDS_SCHED_BY_DCI_N2 +}CodeWordsSchedDci; + +typedef enum +{ + TYPE_STATIC_BUNDLING = 1, + TYPE_DYNAMIC_BUNDLING +}BundlingType; + +typedef enum +{ + SET2_SIZE_N4, + SET2_SIZE_WIDEBAND +}BundlingSizeSet2; + +typedef enum +{ + SET1_SIZE_N4, + SET1_SIZE_WIDEBAND, + SET1_SIZE_N2_WIDEBAND, + SET1_SIZE_N4_WIDEBAND +}BundlingSizeSet1; + +typedef enum +{ + LC_PRIORITY_1 = 1, + LC_PRIORITY_2, + LC_PRIORITY_3 +}LcPriority; + +typedef enum +{ + PBR_KBPS_0, + PBR_KBPS_8, + PBR_KBPS_16, + PBR_KBPS_32, + PBR_KBPS_64, + PBR_KBPS_128, + PBR_KBPS_256, + PBR_KBPS_512, + PBR_KBPS_1024, + PBR_KBPS_2048, + PBR_KBPS_4096, + PBR_KBPS_8192, + PBR_KBPS_16384, + PBR_KBPS_32768, + PBR_KBPS_65536, + PBR_KBPS_INFINITY +}PBitRate; + +typedef enum +{ + BSD_MS_5, + BSD_MS_10, + BSD_MS_20, + BSD_MS_50, + BSD_MS_100, + BSD_MS_150, + BSD_MS_300, + BSD_MS_500, + BSD_MS_1000, + BSD_SPARE_7, + BSD_SPARE_6, + BSD_SPARE_5, + BSD_SPARE_4, + BSD_SPARE_3, + BSD_SPARE_2, + BSD_SPARE_1 + +}BucketSizeDur; + +typedef enum +{ + RADIO_NW_LAYER_FAIL, + TRANSPORT_LAYER_FAIL, + PROTOCOL_FAIL, + MISCELLANEOUS +}CauseGrp; + +typedef enum +{ + UNSPECIFIED_RADIO_NW_CAUSE, + RL_FAIL_RLC, + UNKNOWN_GNB_CU_UE_F1AP_ID, + ALREADY_ALLOCATED_GNB_CU_UE_F1AP_ID, + UNKNOWN_GNB_DU_UE_F1AP_ID, + ALREADY_ALLOCATED_GNB_DU_UE_F1AP_ID, + UNKNOWN_UE_F1AP_ID_PAIR, + INCONSISTENT_UE_F1AP_ID_PAIR, + INTERACTION_WITH_OTHER_PROCEDURE, + UNSUPPORTED_QCI, + ACTION_REQUIRED_FOR_RADIO_REASONS, + RADIO_RESOURCES_UNAVAILABLE, + CANCELLED_PROCEDURE, + RELEASE_NORMAL, + CELL_UNAVAILABLE, + OTHER_RL_FAILURE, + UE_REJECTION, + RESOURCES_UNAVAILABLE_FOR_SLICE +}RadioNwLyrCause; + +typedef enum +{ + UNSPECIFIED_TRANSPORT_LAYER_CAUSE, + TRANSPORT_RESOURCE_UNAVAILABLE +}TransLyrCause; + +typedef enum +{ + TRANSFER_SYNTAX_ERROR, + ABSTRACT_SYNTAX_ERROR_REJECT, + ABSTRACT_SYNTAX_ERROR_IGNORE_AND_REJECT, + INCOMPATIBLE_MESSAGE_FOR_RECEIVER_STATE, + SEMANTIC_ERR, + ABSTRAXCT_SYNTAX_ERROR_FALSELY_CONSTRUCTED_MSG, + UNSPECIFIED_PROTOCOL_CAUSE +}ProtCause; + +typedef enum +{ + CONTROL_PROCESSING_OVERLOAD, + NOT_ENOUGH_USER, + PLANE_PROCESSING_RESOURCES, + HARDWARE_FAIL, + INTERVENTION_BY_O_AND_M, + UNSPECIFIED_MISC_CAUSE +}MiscFailCause; + +typedef enum +{ + MCS_TABLE_QAM64, + MCS_TABLE_QAM256, + MCS_TABLE_QAM64_LOW_SE +}McsTable; + +typedef enum +{ + RSRC_PRB, + RSRC_DRB, + RSRC_RRC_CONNECTED_USERS +}ResourceType; + +typedef enum +{ + TRANSMISSION_ALLOWED, + STOP_TRANSMISSION, + RESTART_TRANSMISSION +}DataTransmissionAction; + +/* Performance measurements from 3GPP TS 28.552 Release 15 */ +typedef enum +{ + MAC_DL_TOTAL_PRB_USAGE, + MAC_UL_TOTAL_PRB_USAGE +}MacMeasurementType; + +typedef struct failureCause +{ + CauseGrp type; + union + { + RadioNwLyrCause radioNwResult; + TransLyrCause transportResult; + ProtCause protcolResult; + MiscFailCause miscResult; + }u; +}FailureCause; + typedef struct carrierCfg { - Bool pres; - U16 bw; /* DL/UL bandwidth */ - U32 freq; /* Absolute frequency of DL/UL point A in KHz */ - U16 k0[NUM_NUMEROLOGY]; /* K0 for DL/UL */ - U16 gridSize[NUM_NUMEROLOGY]; /* DL/UL Grid size for each numerologies */ - U16 numAnt; /* Number of Tx/Rx antennas */ + uint32_t dlBw; /* DL bandwidth */ + uint32_t arfcnDL; /* Absolute frequency Number of DL */ + uint32_t ulBw; /* UL bandwidth */ + uint32_t arfcnUL; /* Absolute frequency Number of UL */ + uint16_t numTxAnt; /* Number of Tx antennas */ + uint16_t numRxAnt; /* Number of Rx antennas */ }CarrierCfg; +typedef enum +{ + OP_DISABLED, + OP_ENABLED, +}MacOpState; + +typedef enum +{ + ADMIN_LOCKED, + ADMIN_UNLOCKED, + ADMIN_SHUTTING_DOWN, +}MacAdminState; + +typedef enum +{ + CELL_IDLE, + CELL_INACTIVE, + CELL_ACTIVE, +}MacCellState; + +/*Spec Ref: 38.331: RadioLinkMonitoringConfig*/ +typedef enum +{ + BeamFailure, + Rlf, + Both +}PurposeOfFailureDet; + +typedef struct plmnInfoList +{ + Plmn plmn; + uint8_t numSupportedSlice; /* Total slice supporting */ + Snssai **snssai; /* List of supporting snssai*/ +}PlmnInfoList; + +typedef struct schPageCfg +{ + uint8_t numPO; /*Derived from Ns*/ + bool poPresent; /*Whether FirstPDCCH-MonitoringPO is present or not*/ + uint16_t pagingOcc[MAX_PO_PER_PF]; /*FirstPDCCH-Monitoring Paging Occasion*/ +}SchPageCfg; + +typedef struct pdcchConfigSib1 +{ + uint8_t coresetZeroIndex; /* derived from 4 LSB of pdcchSib1 present in MIB */ + uint8_t searchSpaceZeroIndex; /* derived from 4 MSB of pdcchSib1 present in MIB */ +}PdcchConfigSib1; + +typedef struct sib1CellCfg +{ + PdcchConfigSib1 pdcchCfgSib1; /*Freq pos where UE may find SS/PBCH block with SIB1*/ + uint8_t *sib1Pdu; + uint16_t sib1PduLen; + SchPageCfg pagingCfg; +} Sib1CellCfg; + +typedef struct bwpParams +{ + uint16_t firstPrb; + uint16_t numPrb; + uint8_t scs; + uint8_t cyclicPrefix; +}BwpParams; + +typedef struct candidatesInfo +{ + uint8_t aggLevel1; + uint8_t aggLevel2; + uint8_t aggLevel4; + uint8_t aggLevel8; + uint8_t aggLevel16; +}CandidatesInfo; + +typedef struct searchSpaceCfg +{ + uint8_t searchSpaceId; + uint8_t coresetId; + uint16_t monitoringSlot; + uint16_t duration; + uint16_t monitoringSymbol; + CandidatesInfo candidate; +}SearchSpaceCfg; + +typedef struct pdcchConfigCommon +{ + /* only one search space is configured during SIB1 */ + SearchSpaceCfg commonSearchSpace; + uint8_t raSearchSpaceId; +}PdcchConfigCommon; + +typedef struct pdschCfgCommTimeDomRsrcAlloc +{ + uint8_t k0; + uint8_t mappingType; + uint8_t startSymbol; + uint8_t lengthSymbol; +}PdschCfgCommTimeDomRsrcAlloc; + +typedef struct pdschConfigCommon +{ + uint8_t numTimeDomAlloc; + /* PDSCH time domain DL resource allocation list */ + PdschCfgCommTimeDomRsrcAlloc timeDomRsrcAllocList[MAX_NUM_DL_ALLOC]; +}PdschConfigCommon; + +typedef struct pucchConfigCommon +{ + uint8_t pucchResourceCommon; + uint8_t pucchGroupHopping; +}PucchConfigCommon; + +/* PUSCH Time Domain Resource Allocation */ +typedef struct puschTimeDomRsrcAlloc +{ + uint8_t k2; + CommonMappingType mappingType; + uint8_t startSymbol; + uint8_t symbolLength; + uint8_t startSymbolAndLength; +}PuschTimeDomRsrcAlloc; + +typedef struct puschConfigCommon +{ + /* PUSCH-TimeDomainResourceAllocation info */ + uint8_t numTimeDomRsrcAlloc; + PuschTimeDomRsrcAlloc timeDomRsrcAllocList[MAX_NUM_UL_ALLOC]; /* PUSCH time domain UL resource allocation list */ +}PuschConfigCommon; + +typedef struct bwpDlConfig +{ + BwpParams bwp; + PdcchConfigCommon pdcchCommon; + PdschConfigCommon pdschCommon; +}BwpDlConfig; + +typedef struct bwpUlConfig +{ + BwpParams bwp; + // rach config common sent in PrachCfg + PucchConfigCommon pucchCommon; + PuschConfigCommon puschCommon; +}BwpUlConfig; + + +typedef struct cellCfg +{ + MacOpState opState; + MacAdminState adminState; + MacCellState cellState; + PlmnInfoList plmnInfoList[MAX_PLMN]; /* Consits of PlmnId and Snssai list */ + uint32_t phyCellId; /* Physical cell id */ + uint32_t tac; + uint32_t ssbFreq; + uint16_t subCarrSpacing; + DuplexMode dupType; /* Duplex type: TDD/FDD */ + Sib1CellCfg sib1Cfg; /* SIB1 config */ + BwpDlConfig initialDlBwp; /* Initial DL BWP */ + BwpUlConfig initialUlBwp; /* Initial UL BWP */ +}CellCfg; + typedef struct ssbCfg { uint32_t ssbPbchPwr; /* SSB block power */ - BchPduOpt bchPayloadFlag; /* Options for generation of payload */ uint8_t scsCmn; /* subcarrier spacing for common */ uint16_t ssbOffsetPointA; /* SSB subcarrier offset from point A */ - BetaPss betaPss; SSBPeriod ssbPeriod; /* SSB Periodicity in msec */ uint8_t ssbScOffset; /* Subcarrier Offset */ - uint8_t mibPdu[3]; /* MIB payload */ uint32_t ssbMask[SSB_MASK_SIZE]; /* Bitmap for actually transmitted SSB. */ uint8_t beamId[NUM_SSB]; - Bool multCarrBand; /* Multiple carriers in a band */ - Bool multCellCarr; /* Multiple cells in single carrier */ + BetaPss betaPss; + BchPduOpt bchPayloadFlag; /* Options for generation of payload */ + uint8_t mibPdu[3]; /* MIB payload */ + uint8_t dmrsTypeAPos; /* DMRS Type A position */ }SsbCfg; typedef struct fdmInfo { - U16 rootSeqIdx; /* Root sequence index */ - U8 numRootSeq; /* Number of root sequences required for FD */ - U16 k1; /* Frequency Offset for each FD */ - U8 zeroCorrZoneCfg; /* Zero correlation zone cofig */ - U8 numUnusedRootSeq; /* Number of unused root sequence */ - U8 *unsuedRootSeq; /* Unused root sequence per FD */ + uint16_t rootSeqIdx; /* Root sequence index */ + uint8_t numRootSeq; /* Number of root sequences required for FD */ + uint16_t k1; /* Frequency Offset for each FD */ + uint8_t zeroCorrZoneCfg; /* Zero correlation zone cofig */ }PrachFdmInfo; typedef struct prachCfg { - Bool pres; - uint8_t prachCfgIdx; /* PRACH Cfg Index */ PrachSeqLen prachSeqLen; /* RACH Sequence length: Long/short */ uint8_t prachSubcSpacing; /* Subcarrier spacing of RACH */ - RstSetCfg prachRstSetCfg; /* PRACH restricted set config */ - uint16_t msg1FreqStart; /* Msg1-FrequencyStart */ - uint8_t msg1Fdm; /* PRACH FDM (1,2,4,8) */ + uint8_t msg1Fdm; /* Number of RACH frequency domain occasions/ PRACH FDM (1,2,4,8) */ + uint8_t prachCfgIdx; /* PRACH Cfg Index */ PrachFdmInfo fdm[8]; /* FDM info */ + RstSetCfg prachRstSetCfg; /* PRACH restricted set config */ uint8_t ssbPerRach; /* SSB per RACH occassion */ - Bool prachMultCarrBand; /* Multiple carriers in Band */ - uint8_t prachRestrictedSet; /* Support for PRACH restricted set */ - uint8_t raContResTmr; /* RA Contention Resoultion Timer */ - uint8_t rsrpThreshSsb; /* RSRP Threshold SSB */ + uint8_t totalNumRaPreamble; /* Total number of RA preambles */ + uint8_t numCbPreamblePerSsb; /* Number of CB preamble per SSB */ + uint16_t msg1FreqStart; /* Msg1-FrequencyStart */ + uint8_t raContResTmr; /* RA Contention Resoultion Timer */ + uint8_t rsrpThreshSsb; /* RSRP Threshold SSB */ uint8_t raRspWindow; /* RA Response Window */ }PrachCfg; -typedef struct tddCfg +#ifdef NR_DRX +/* The following list of structures is taken from the DRX-Config section of specification 33.331. */ +typedef struct drxOnDurationTimer { - Bool pres; - DlUlTxPeriodicity tddPeriod; /* DL UL Transmission periodicity */ - SlotConfig slotCfg[MAXIMUM_TDD_PERIODICITY][MAX_SYMB_PER_SLOT]; -}TDDCfg; + bool onDurationTimerValInMs; + union + { + uint8_t subMilliSeconds; + uint16_t milliSeconds; + }onDurationtimerValue; +}DrxOnDurationTimer; -typedef struct sib1CellCfg +typedef struct drxLongCycleStartOffset { - uint8_t *sib1Pdu; - uint16_t sib1PduLen; - uint16_t sib1NewTxPeriod; - uint16_t sib1RepetitionPeriod; - uint8_t coresetZeroIndex; /* derived from 4 LSB of pdcchSib1 present in MIB */ - uint8_t searchSpaceZeroIndex; /* derived from 4 MSB of pdcchSib1 present in MIB */ - uint16_t sib1Mcs; -} Sib1CellCfg; + uint16_t drxLongCycleStartOffsetChoice; + uint16_t drxLongCycleStartOffsetVal; +}DrxLongCycleStartOffset; + +typedef struct shortDrx +{ + uint16_t drxShortCycle; + uint8_t drxShortCycleTimer; +}ShortDrx; + +typedef struct drxCfg +{ + DrxOnDurationTimer drxOnDurationTimer; + uint16_t drxInactivityTimer; + uint8_t drxHarqRttTimerDl; + uint8_t drxHarqRttTimerUl; + uint16_t drxRetransmissionTimerDl; + uint16_t drxRetransmissionTimerUl; + DrxLongCycleStartOffset drxLongCycleStartOffset; + bool shortDrxPres; + ShortDrx shortDrx; + uint8_t drxSlotOffset; +}DrxCfg; +#endif + +typedef struct precodingConf +{ + uint16_t numLayers; + uint16_t numAntPorts; +}PrecodingConf; + +typedef struct beamformingConf +{ + uint16_t numOfBeams; + uint16_t numTxRUs; + uint16_t beamIdx; + uint16_t beamType; + uint32_t beamAzimuth; + uint32_t beamTilt; + uint32_t beamHorizWidth; + uint32_t beamVertWidth; + uint32_t coverageShape; + uint32_t digitalTilt; + uint32_t digitalAzimuth; +}BeamformingConf; + +typedef struct csiRsCfg +{ + uint8_t *csiFreqDomainAlloc; + uint8_t csiNrofPorts; + uint8_t csirsfirstOFDMSymbolInTimeDomain; + uint8_t csirsfirstOFDMSymbolInTimeDomain2; + uint8_t csirscdmType; + uint8_t csirsdensity; + uint8_t csirsdensitydot5; + uint8_t powerControlOffset; + uint8_t powerControlOffsetSS; + uint16_t periodicityAndOffset; +}CsiRsCfg; typedef struct macCellCfg { - U16 transId; - U16 cellId; /* Cell Id */ - U8 numTlv; /* Number of configuration TLVs */ - U8 carrierId; /* Carrired Index */ - U16 phyCellId; /* Physical cell id */ - DuplexMode dupType; /* Duplex type: TDD/FDD */ - CarrierCfg dlCarrCfg; /* DL Carrier configuration */ - CarrierCfg ulCarrCfg; /* UL Carrier configuration */ - Bool freqShft; /* Indicates presence of 7.5kHz frequency shift */ - SsbCfg ssbCfg; /* SSB configuration */ - PrachCfg prachCfg; /* PRACH Configuration */ - TDDCfg tddCfg; /* TDD periodicity and slot configuration */ - RSSIMeasUnit rssiUnit; /* RSSI measurement unit */ - Sib1CellCfg sib1Cfg; + uint16_t cellId; /* Cell Id */ + CarrierCfg carrCfg; /* Carrier configuration */ + CellCfg cellCfg; /* Cell Configuration*/ + SsbCfg ssbCfg; /* SSB configuration */ + CsiRsCfg csiRsCfg; /*Reference: 38.331 CSI-MeasConfig*/ + PrachCfg prachCfg; /* PRACH Configuration */ +#ifdef NR_TDD + TDDCfg tddCfg; /* TDD periodicity and slot configuration */ +#endif + PrecodingConf precodingConf; + BeamformingConf beamCfg; }MacCellCfg; typedef struct macCellCfgCfm { - uint8_t rsp; - U16 transId; + uint16_t cellId; + uint8_t rsp; }MacCellCfgCfm; -typedef struct slotInfo +typedef struct ulCcchInd { uint16_t cellId; - uint16_t sfn; - uint16_t slot; -}SlotInfo; + uint16_t crnti; + uint16_t ulCcchMsgLen; + uint8_t *ulCcchMsg; +}UlCcchIndInfo; -typedef struct macCellStartInfo +typedef struct dlCcchInd { - uint16_t cellId; -}MacCellStartInfo; + uint16_t cellId; + uint16_t crnti; + DlCcchMsgType msgType; + uint16_t dlCcchMsgLen; + uint8_t *dlCcchMsg; +}DlCcchIndInfo; -typedef struct macCellStopInfo +typedef struct bsrTmrCfg { - uint16_t cellId; -}MacCellStopInfo; + uint16_t periodicTimer; + uint16_t retxTimer; + uint16_t srDelayTimer; +}BsrTmrCfg; -/* Functions for slot Ind from MAC to DU APP*/ -typedef uint16_t (*DuMacSlotInd) ARGS(( - Pst *pst, - SlotInfo *slotInfo )); -extern uint16_t packMacSlotInd(Pst *pst, SlotInfo *slotInfo ); -extern uint16_t unpackMacSlotInd(DuMacSlotInd func, Pst *pst, Buffer *mBuf); -extern uint16_t duHandleSlotInd(Pst *pst, SlotInfo *slotInfo); +/* Info of Scheduling Request to Add/Modify */ +typedef struct schedReqInfo +{ + uint8_t schedReqId; + SrProhibitTimer srProhibitTmr; + SrTransMax srTransMax; +}SchedReqInfo; + +/* Scheduling Request Configuration */ +typedef struct schedReqCfg +{ + uint8_t addModListCount; + SchedReqInfo addModList[MAX_NUM_SR_CFG_PER_CELL_GRP]; /* List of Scheduling req to be added/modified */ + uint8_t relListCount; + uint8_t relList[MAX_NUM_SR_CFG_PER_CELL_GRP]; /* list of scheduling request Id to be deleted */ +}SchedReqCfg; -/* Functions for mac cell start req */ -typedef uint16_t (*DuMacCellStartReq) ARGS(( - Pst *pst, - MacCellStartInfo *cellStartInfo )); +typedef struct tagInfo +{ + uint8_t tagId; + TimeAlignmentTimer timeAlignTimer; +}TagInfo; -extern uint16_t packMacCellStartReq(Pst *pst, MacCellStartInfo *cellStartInfo); -extern uint16_t unpackMacCellStartReq(DuMacCellStartReq func, Pst *pst, Buffer *mBuf); -extern uint16_t MacHdlCellStartReq(Pst *pst, MacCellStartInfo *cellStartInfo); +typedef struct tagCfg +{ + uint8_t addModListCount; + TagInfo addModList[MAC_NUM_TAGS]; /* List of Tag to Add/Modify */ + uint8_t relListCount; + uint8_t relList[MAC_NUM_TAGS]; /* list of Tag Id to release */ +}TagCfg; -/* Functions for mac cell stop request */ -typedef uint16_t (*DuMacCellStopReq) ARGS(( - Pst *pst, - MacCellStopInfo *cellStopInfo )); - -extern uint16_t packMacCellStopReq(Pst *pst, MacCellStopInfo *cellStopInfo); -extern uint16_t unpackMacCellStopReq(DuMacCellStopReq func, Pst *pst, Buffer *mBuf); -extern uint16_t MacHdlCellStopReq(Pst *pst, MacCellStopInfo *cellStopInfo); +typedef struct phrCfg +{ + PhrPeriodicTimer periodicTimer; + PhrProhibitTimer prohibitTimer; + PhrTxPwrFactorChange txPowerFactor; + bool multiplePHR; + bool dummy; + bool phrType2OtherCell; + PhrModeOtherCG phrOtherCG; +}PhrCfg; -/* Function pointers for packing macCellCfg Request and Confirm */ -typedef uint16_t (*packMacCellCfgReq) ARGS(( - Pst *pst, - MacCellCfg *macCellCfg )); +typedef struct macCellGrpCfg +{ + SchedReqCfg schReqCfg; + TagCfg tagCfg; + BsrTmrCfg bsrTmrCfg; + bool phrCfgSetupPres; /* true/false: phrCfgSetup/phrCfgRelease */ + PhrCfg phrCfg; +#ifdef NR_DRX + bool drxCfgPresent; + DrxCfg drxCfg; +#endif +}MacCellGrpCfg; -typedef uint16_t (*packMacCellCfgConfirm) ARGS(( - Pst *pst, - MacCellCfgCfm *macCellCfgCfm )); +typedef struct phyCellGrpCfg +{ + PdschHarqAckCodebook pdschHarqAckCodebook; + uint8_t pNrFr1; +}PhyCellGrpCfg; -typedef uint16_t (*DuMacCellCfgReq) ARGS(( - Pst *pst, - MacCellCfg *macCellCfg)); +/* Control resource set info */ +typedef struct controlRsrcSet +{ + uint8_t cRSetId; /* Control resource set id */ + uint8_t freqDomainRsrc[FREQ_DOM_RSRC_SIZE]; /* Frequency domain resource */ + uint8_t duration; + REGMappingType cceRegMappingType; + PrecoderGranul precoderGranularity; + uint16_t dmrsScramblingId; +}ControlRsrcSet; -typedef uint16_t (*DuMacCellCfgCfm) ARGS(( - MacCellCfgCfm *macCellCfgCfm )); +/* Search Space info */ +typedef struct searchSpace +{ + uint8_t searchSpaceId; + uint8_t cRSetId; + MSlotPeriodAndOffset mSlotPeriodicityAndOffset; + uint8_t mSymbolsWithinSlot[MONITORING_SYMB_WITHIN_SLOT_SIZE]; + AggrLevel numCandidatesAggLevel1; /* Number of candidates for aggregation level 1 */ + AggrLevel numCandidatesAggLevel2; /* Number of candidates for aggregation level 2 */ + AggrLevel numCandidatesAggLevel4; /* Number of candidates for aggregation level 4 */ + AggrLevel numCandidatesAggLevel8; /* Number of candidates for aggregation level 8 */ + AggrLevel numCandidatesAggLevel16; /* Number of candidates for aggregation level 16 */ + SearchSpaceType searchSpaceType; + uint8_t ueSpecificDciFormat; +}SearchSpace; -extern uint16_t packMacCellCfg(Pst *pst, MacCellCfg *macCellCfg); -extern int MacHdlCellCfgReq(Pst *pst, MacCellCfg *macCellCfg); -extern void cmUnpackLwLcMacCellCfg(DuMacCellCfgReq func, Pst *pst, Buffer *mBuf); -extern uint16_t unpackMacCellCfgCfm(DuMacCellCfgCfm func, Pst *pst, Buffer *mBuf); -extern uint16_t duHandleMacCellCfgCfm(MacCellCfgCfm *macCellCfgCfm); +/* PDCCH cofniguration */ +typedef struct pdcchConfig +{ + uint8_t numCRsetToAddMod; + ControlRsrcSet cRSetToAddModList[MAX_NUM_CRSET]; /* List of control resource set to add/modify */ + uint8_t numCRsetToRel; + uint8_t cRSetToRelList[MAX_NUM_CRSET]; /* List of control resource set to release */ + uint8_t numSearchSpcToAddMod; + SearchSpace searchSpcToAddModList[MAX_NUM_SEARCH_SPC]; /* List of search space to add/modify */ + uint8_t numSearchSpcToRel; + uint8_t searchSpcToRelList[MAX_NUM_SEARCH_SPC]; /* List of search space to release */ +}PdcchConfig; + +/* PDSCH time domain resource allocation */ +typedef struct pdschTimeDomRsrcAlloc +{ + uint8_t *k0; + CommonMappingType mappingType; + uint8_t startSymbol; + uint8_t symbolLength; + uint8_t startSymbolAndLength; +}PdschTimeDomRsrcAlloc; + + +typedef struct pdschBundling +{ + struct staticBundling + { + BundlingSizeSet2 size; + }StaticBundling; + struct dynamicBundling + { + BundlingSizeSet1 sizeSet1; + BundlingSizeSet2 sizeSet2; + }DynamicBundling; +}PdschBundling; + +/* DMRS downlink configuration */ +typedef struct dmrsDlCfg +{ + AddPosType addPos; /* DMRS additional position */ +}DmrsDlCfg; + +/* PDSCH Configuration */ +typedef struct pdschConfig +{ + DmrsDlCfg dmrsDlCfgForPdschMapTypeA; + ResAllocType resourceAllocType; + uint8_t numTimeDomRsrcAlloc; + PdschTimeDomRsrcAlloc timeDomRsrcAllociList[MAX_NUM_DL_ALLOC]; /* PDSCH time domain DL resource allocation list */ + RBGSize rbgSize; + CodeWordsSchedDci numCodeWordsSchByDci; /* Number of code words scheduled by DCI */ + BundlingType bundlingType; + PdschBundling bundlingInfo; +}PdschConfig; + +/* Initial Downlink BWP */ +typedef struct initialDlBwp +{ + bool pdcchPresent; + PdcchConfig pdcchCfg; + bool pdschPresent; + PdschConfig pdschCfg; +}InitialDlBwp; + +/*Spec 38.331 "SPS-Config'*/ +typedef struct spsConfig +{ + uint16_t periodicity; + uint8_t numOfHqProcess; + uint8_t n1PucchAN; + McsTable mcsTable; +}SpsConfig; + +typedef uint8_t RadioLinkMonitoringRsId; + +typedef struct radioLinkMonRS +{ + RadioLinkMonitoringRsId radioLinkMonitoringRsId; + PurposeOfFailureDet purpose; + union + { + uint8_t ssbIndx; + uint8_t nzpCsiRsResId; + }detectionRes; +}RadioLinkMonRS; + +typedef struct radioLinkConfig +{ + RadioLinkMonRS failurDetResAddModList[1]; + RadioLinkMonitoringRsId failurDetResRelList[1]; + uint8_t beamFailureInstanceMaxCount; + uint8_t beamFailureDetectionTimer; +}RadioLinkConfig; + +/* Spec 38.331, 'BWP-DownlinkDedicated'*/ +typedef struct bwpDlCfgDed +{ + PdcchConfig pdcchCfgDed; + PdschConfig pdschCfgDed; + SpsConfig spsCfgDed; + RadioLinkConfig radioLnkMonCfgDed; +}BwpDlCfgDed; + +/* Downlink BWP information */ +typedef struct dlBwpInfo +{ + uint8_t bwpId; + BwpDlConfig bwpCommon; + BwpDlCfgDed bwpDedicated; +}DlBwpInfo; + +/* PDCCH Serving Cell configuration */ +typedef struct pdschServCellCfg +{ + uint8_t *maxMimoLayers; + NumHarqProcForPdsch numHarqProcForPdsch; + MaxCodeBlkGrpPerTB *maxCodeBlkGrpPerTb; + bool *codeBlkGrpFlushInd; + PdschXOverhead *xOverhead; +}PdschServCellCfg; + +/* PUCCH Configuration */ + +typedef struct pucchResrcSetInfo +{ + uint8_t resrcSetId; + uint8_t resrcListCount; + uint8_t resrcList[MAX_NUM_PUCCH_PER_RESRC_SET]; + uint8_t maxPayLoadSize; +}PucchResrcSetInfo; + +typedef struct pucchResrcSetCfg +{ + uint8_t resrcSetToAddModListCount; + PucchResrcSetInfo resrcSetToAddModList[MAX_NUM_PUCCH_RESRC_SET]; + uint8_t resrcSetToRelListCount; + uint8_t resrcSetToRelList[MAX_NUM_PUCCH_RESRC]; +}PucchResrcSetCfg; + +typedef struct pucchFormat0 +{ + uint8_t initialCyclicShift; + uint8_t numSymbols; + uint8_t startSymbolIdx; +}PucchFormat0; + +typedef struct pucchFormat1 +{ + uint8_t initialCyclicShift; + uint8_t numSymbols; + uint8_t startSymbolIdx; + uint8_t timeDomOCC; +}PucchFormat1; + +typedef struct pucchFormat2_3 +{ + uint8_t numPrbs; + uint8_t numSymbols; + uint8_t startSymbolIdx; +}PucchFormat2_3; + +typedef struct pucchFormat4 +{ + uint8_t numSymbols; + uint8_t occLen; + uint8_t occIdx; + uint8_t startSymbolIdx; +}PucchFormat4; + +typedef struct pucchResrcInfo +{ + uint8_t resrcId; + uint16_t startPrb; + uint8_t intraFreqHop; + uint16_t secondPrbHop; + uint8_t pucchFormat; + union + { + PucchFormat0 *format0; + PucchFormat1 *format1; + PucchFormat2_3 *format2; + PucchFormat2_3 *format3; + PucchFormat4 *format4; + }PucchFormat; +}PucchResrcInfo; + +typedef struct pucchResrcCfg +{ + uint8_t resrcToAddModListCount; + PucchResrcInfo resrcToAddModList[MAX_NUM_PUCCH_RESRC]; + uint8_t resrcToRelListCount; + uint8_t resrcToRelList[MAX_NUM_PUCCH_RESRC]; +}PucchResrcCfg; + +typedef struct pucchFormatCfg +{ + bool interSlotFreqHop; + bool addDmrs; + uint8_t maxCodeRate; + uint8_t numSlots; + bool pi2BPSK; + bool harqAckCSI; +}PucchFormatCfg; + +typedef struct schedReqResrcInfo +{ + uint8_t resrcId; + uint8_t requestId; + uint8_t periodicity; + uint16_t offset; + uint8_t resrc; +}SchedReqResrcInfo; + +typedef struct pucchSchedReqCfg +{ + uint8_t schedAddModListCount; + SchedReqResrcInfo schedAddModList[MAX_NUM_SR_CFG_PER_CELL_GRP]; + uint8_t schedRelListCount; + uint8_t schedRelList[MAX_NUM_SR_CFG_PER_CELL_GRP]; +}PucchSchedReqCfg; + +typedef struct spatialRelationInfo +{ + uint8_t spatialRelationId; + uint8_t servCellIdx; + uint8_t pathLossRefRSId; + uint8_t p0PucchId; + uint8_t closeLoopIdx; +}SpatialRelationInfo; + +typedef struct pucchSpatialCfg +{ + uint8_t spatialAddModListCount; + SpatialRelationInfo spatialAddModList[MAX_NUM_SPATIAL_RELATIONS]; + uint8_t spatialRelListCount; + uint8_t spatialRelList[MAX_NUM_SPATIAL_RELATIONS]; +}PucchSpatialCfg; + +typedef struct p0PucchCfg +{ + uint8_t p0PucchId; + int p0PucchVal; +}P0PucchCfg; + +typedef struct pathLossRefRSCfg +{ + uint8_t pathLossRefRSId; +}PathLossRefRSCfg; + +typedef struct pucchMultiCsiCfg +{ + uint8_t multiCsiResrcListCount; + uint8_t multiCsiResrcList[MAX_NUM_PUCCH_RESRC-1]; +}PucchMultiCsiCfg; + +typedef struct pucchDlDataToUlAck +{ + uint8_t dlDataToUlAckListCount; + uint8_t dlDataToUlAckList[MAX_NUM_DL_DATA_TO_UL_ACK]; +}PucchDlDataToUlAck; + +typedef struct pucchPowerControl +{ + int deltaF_Format0; + int deltaF_Format1; + int deltaF_Format2; + int deltaF_Format3; + int deltaF_Format4; + uint8_t p0SetCount; + P0PucchCfg p0Set[MAX_NUM_PUCCH_P0_PER_SET]; + uint8_t pathLossRefRSListCount; + PathLossRefRSCfg pathLossRefRSList[MAX_NUM_PATH_LOSS_REF_RS]; +}PucchPowerControl; + +typedef struct pucchCfg +{ + PucchResrcSetCfg *resrcSet; + PucchResrcCfg *resrc; + PucchFormatCfg *format1; + PucchFormatCfg *format2; + PucchFormatCfg *format3; + PucchFormatCfg *format4; + PucchSchedReqCfg *schedReq; + PucchMultiCsiCfg *multiCsiCfg; + PucchSpatialCfg *spatialInfo; + PucchDlDataToUlAck *dlDataToUlAck; + PucchPowerControl *powerControl; +}PucchCfg; + +/* Transform precoding disabled */ +typedef struct transPrecodDisabled +{ + uint16_t scramblingId0; +}TransPrecodDisabled; + +/* DMRS Uplink configuration */ +typedef struct dmrsUlCfg +{ + AddPosType addPos; /* DMRS additional position */ + TransPrecodDisabled transPrecodDisabled; /* Transform precoding disabled */ +}DmrsUlCfg; + +/* PUSCH Configuration */ +typedef struct puschCfg +{ + uint8_t dataScramblingId; + DmrsUlCfg dmrsUlCfgForPuschMapTypeA; + ResAllocType resourceAllocType; + uint8_t numTimeDomRsrcAlloc; + PuschTimeDomRsrcAlloc timeDomRsrcAllocList[MAX_NUM_UL_ALLOC]; /* PUSCH time domain UL resource allocation list */ + TransformPrecoder transformPrecoder; +}PuschCfg; + +/* Initial Uplink BWP */ +typedef struct initialUlBwp +{ + bool pucchPresent; + PucchCfg pucchCfg; + bool puschPresent; + PuschCfg puschCfg; +}InitialUlBwp; + +typedef struct bwpUlCfgDed +{ + PucchCfg pucchCfg; + PuschCfg puschCfg; +}BwpUlCfgDed; + +/* Uplink BWP information */ +typedef struct ulBwpInfo +{ + uint8_t bwpId; + BwpUlConfig bwpCommon; + BwpUlCfgDed bwpDed; +}UlBwpInfo; + +typedef struct rachCfgGeneric +{ + uint8_t prachCfgIdx; /* PRACH config idx */ + uint8_t msg1Fdm; /* PRACH FDM (1,2,4,8) */ + uint16_t msg1FreqStart; /* Msg1-FrequencyStart */ + uint8_t zeroCorrZoneCfg; /* Zero correlation zone cofig */ + int16_t preambleRcvdTargetPower; /*Prach Target power received*/ + uint8_t preambleTransMax; /*Preamble Transmission Max power*/ + uint8_t pwrRampingStep; /*Power Ramping Step*/ + uint8_t raRspWindow; /* RA Response Window */ +}RachCfgGeneric; + +typedef struct raPrioritization +{ + uint8_t powerRampingStepHighPriority; + uint8_t scalingFactorBI; +}RaPrioritization; + +typedef struct bfrCsiRsRes +{ + uint8_t csrRsIndex; + uint8_t raOccList; + uint8_t raPreambleIndex; +}BfrCsiRsRes; + +typedef struct bfrSsbRes +{ + uint16_t ssbIndex; + uint8_t raPreambleIndex; +}BfrSsbRes; + +typedef struct prachResDedBfr +{ + BfrSsbRes ssb; + BfrCsiRsRes csiRs; +}PrachResDedBfr; + +/*Spec 38.331 'BeamFailureRecoveryConfig' */ +typedef struct beamFailRecoveryCfg +{ + uint8_t rootSeqIndexBfr; + RachCfgGeneric rachCfgBfr; + uint8_t rsrpThreshSsbBfr; + PrachResDedBfr candidteBeamRSList; + uint8_t ssbPerachBfr; + uint8_t raSsbOccMaskIndex; + uint8_t recoverySearchSpaceId; + RaPrioritization raPrioBfr; + uint16_t bfrTimer; + uint8_t msg1SubcSpacing; +}BeamFailRecoveryCfg; + +/* Serving cell configuration */ +typedef struct servCellCfgInfo +{ + InitialDlBwp initDlBwp; + RadioLinkConfig radioLinkMonConfig; + uint8_t numDlBwpToAdd; + DlBwpInfo dlBwpToAddList[MAX_NUM_BWP]; + uint8_t firstActvDlBwpId; + uint8_t defaultDlBwpId; + uint8_t *bwpInactivityTmr; + PdschServCellCfg pdschServCellCfg; + InitialUlBwp initUlBwp; + BeamFailRecoveryCfg beamFailureRecoveryCfg; + uint8_t numUlBwpToAdd; + UlBwpInfo ulBwpToAddList[MAX_NUM_BWP]; + uint8_t firstActvUlBwpId; +}ServCellCfgInfo; + +/* Special cell configuration */ +typedef struct spCellCfg +{ + uint8_t servCellIdx; + ServCellCfgInfo servCellCfg; +}SpCellCfg; + +typedef struct bwpRelInfo +{ + uint8_t bwpId; +}BwpRelInfo; + +/* Serving cell Re-configuration */ +typedef struct servCellRecfgInfo +{ + InitialDlBwp initDlBwp; + RadioLinkConfig radioLinkMonConfig; + uint8_t numDlBwpToAddOrMod; + DlBwpInfo dlBwpToAddOrModList[MAX_NUM_BWP]; + uint8_t numDlBwpToRel; + BwpRelInfo dlBwpToRelList[MAX_NUM_BWP]; + uint8_t firstActvDlBwpId; + uint8_t defaultDlBwpId; + uint8_t *bwpInactivityTmr; + PdschServCellCfg pdschServCellCfg; + InitialUlBwp initUlBwp; + uint8_t numUlBwpToAddOrMod; + UlBwpInfo ulBwpToAddOrModList[MAX_NUM_BWP]; + uint8_t numUlBwpToRel; + BwpRelInfo ulBwpToRelList[MAX_NUM_BWP]; + uint8_t firstActvUlBwpId; +}ServCellRecfgInfo; + +/* Special cell Re-configuration */ +typedef struct spCellRecfg +{ + uint8_t servCellIdx; + ServCellRecfgInfo servCellCfg; +}SpCellRecfg; + +typedef struct ambrCfg +{ + uint32_t ulBr; /* UL Bit rate */ +}AmbrCfg; + +typedef struct nonDynFiveQi +{ + uint16_t fiveQi; + uint8_t priorLevel; + uint16_t avgWindow; + uint16_t maxDataBurstVol; +}NonDynFiveQi; + +typedef struct dynFiveQi +{ + uint8_t priorLevel; + uint16_t packetDelayBudget; + uint8_t packetErrRateScalar; + uint8_t packetErrRateExp; + uint16_t fiveQi; + uint8_t delayCritical; + uint16_t avgWindow; + uint16_t maxDataBurstVol; +}DynFiveQi; + +typedef struct ngRanAllocAndRetPri +{ + uint8_t priorityLevel; + uint8_t preEmptionCap; + uint8_t preEmptionVul; +}NgRanAllocAndRetPri; + +typedef struct grbQosInfo +{ + uint32_t maxFlowBitRateDl; + uint32_t maxFlowBitRateUl; + uint32_t guarFlowBitRateDl; + uint32_t guarFlowBitRateUl; +}GrbQosInfo; + +typedef struct drbQos +{ + QosType fiveQiType; /* Dynamic or non-dynamic */ + union + { + NonDynFiveQi nonDyn5Qi; + DynFiveQi dyn5Qi; + }u; + NgRanAllocAndRetPri ngRanRetPri; + GrbQosInfo grbQosInfo; + uint16_t pduSessionId; + uint32_t ulPduSessAggMaxBitRate; +}DrbQosInfo; + +typedef struct ulLcCfg +{ + uint8_t priority; + uint8_t lcGroup; + uint8_t schReqId; + PBitRate pbr; // prioritisedBitRate + BucketSizeDur bsd; // bucketSizeDuration +}UlLcCfg; + +typedef struct dlLcCfg +{ + LcPriority lcp; // logical Channel Prioritization +}DlLcCfg; + +typedef struct lcCfg +{ + uint8_t lcId; + Snssai *snssai; + DrbQosInfo *drbQos; + bool ulLcCfgPres; + UlLcCfg ulLcCfg; + DlLcCfg dlLcCfg; +}LcCfg; + +typedef struct modulationInfo +{ + uint8_t modOrder; /* Modulation order */ + uint8_t mcsIndex; /* MCS Index */ + McsTable mcsTable; /* MCS table */ +}ModulationInfo; + +typedef struct macUeCreateReq +{ + uint16_t cellId; + uint8_t ueId; + uint8_t beamIdx; + uint16_t crnti; + bool macCellGrpCfgPres; + MacCellGrpCfg macCellGrpCfg; + bool phyCellGrpCfgPres; + PhyCellGrpCfg phyCellGrpCfg; + bool spCellCfgPres; + SpCellCfg spCellCfg; + AmbrCfg *ambrCfg; + ModulationInfo dlModInfo; /* DL modulation info */ + ModulationInfo ulModInfo; /* UL modulation info */ + uint8_t numLcs; + LcCfg lcCfgList[MAX_NUM_LC]; +}MacUeCreateReq; + +/* UE Re-configuration */ +typedef struct macUeRecfg +{ + uint16_t cellId; + uint8_t ueId; + uint8_t beamIdx; + uint16_t crnti; + bool macCellGrpRecfgPres; + MacCellGrpCfg macCellGrpRecfg; + bool phyCellGrpRecfgPres; + PhyCellGrpCfg phyCellGrpRecfg; + bool spCellRecfgPres; + SpCellRecfg spCellRecfg; + AmbrCfg *ambrRecfg; + ModulationInfo dlModInfo; + ModulationInfo ulModInfo; + uint8_t numLcsToAdd; + LcCfg lcCfgAdd[MAX_NUM_LC]; + uint8_t numLcsToDel; + uint8_t lcIdToDel[MAX_NUM_LC]; + uint8_t numLcsToMod; + LcCfg lcCfgMod[MAX_NUM_LC]; + DataTransmissionAction transmissionAction; +#ifdef NR_DRX + bool drxConfigIndicatorRelease; +#endif +}MacUeRecfg; + +typedef struct nrcgi +{ + Plmn plmn; + uint16_t cellId; +}Nrcgi; + +typedef struct srbFailInfo +{ + uint8_t srbId; + FailureCause cause; +}SRBFailInfo; + +typedef struct drbFailInfo +{ + uint8_t drbId; + FailureCause cause; +}DRBFailInfo; + +typedef struct sCellFailInfo +{ + Nrcgi nrcgi; + FailureCause cause; +}SCellFailInfo; + +typedef struct macUeCreateRsp +{ + uint16_t cellId; + uint16_t ueId; + MacRsp result; + uint8_t numSRBFailed; /* valid values : 0 to MAX_NUM_SRB */ + SRBFailInfo *failedSRBlisti; + uint8_t numDRBFailed; /* valid values : 0 to MAX_NUM_DRB */ + DRBFailInfo *failedDRBlist; + uint8_t numSCellFailed; /* valid values : 0 to MAX_NUM_SCELL */ + SCellFailInfo *failedSCellList; + uint8_t numDRBModFailed; /* valid values : 0 to MAX_NUM_DRB */ + DRBFailInfo *failedDRBModlist; +}MacUeCreateRsp; + +typedef struct macUeCreateRsp MacUeRecfgRsp; + +typedef struct rachRsrcReq +{ + uint16_t cellId; + uint16_t ueId; + uint8_t numSsb; + uint8_t ssbIdx[MAX_NUM_SSB]; +}MacRachRsrcReq; + +typedef struct macCfraSsbResource +{ + uint8_t ssbIdx; + uint8_t raPreambleIdx; +}MacCfraSsbResource; + +typedef struct macCfraResource +{ + uint8_t numSsb; + MacCfraSsbResource ssbResource[MAX_NUM_SSB]; +}MacCfraResource; + +typedef struct macRachRsrcRsp +{ + uint16_t cellId; + uint16_t ueId; + MacRsp result; + uint16_t newCrnti; /* This parameter maps to 3GPP TS 38.331 newUE-Identity */ + MacCfraResource cfraResource; +}MacRachRsrcRsp; + +typedef struct macRachRsrcRel +{ + uint16_t cellId; + uint16_t ueId; + uint16_t crnti; +}MacRachRsrcRel; + +typedef struct ueDelete +{ + uint16_t cellId; + uint8_t ueId; + uint16_t crnti; +}MacUeDelete; + +typedef struct ueDeleteRsp +{ + uint16_t cellId; + uint8_t ueId; + CauseOfResult status; +}MacUeDeleteRsp; + +typedef struct macCellDeleteReq +{ + uint16_t cellId; +}MacCellDeleteReq; + +typedef struct macCellDeleteRsp +{ + uint16_t cellId; + CauseOfResult status; +}MacCellDeleteRsp; + +typedef struct macSliceCfgRsp +{ + Snssai snssai; + MacRsp rsp; + CauseOfResult cause; +}MacSliceCfgRsp; + +typedef struct rrmPolicyRatio +{ + uint8_t maxRatio; + uint8_t minRatio; + uint8_t dedicatedRatio; +}RrmPolicyRatio; + +typedef struct rrmPolicyMemberList +{ + Plmn plmn; + Snssai snssai; +}RrmPolicyMemberList; + +typedef struct macSliceRrmPolicy +{ + ResourceType resourceType; + uint8_t numOfRrmPolicyMem; + RrmPolicyMemberList **rRMPolicyMemberList; + RrmPolicyRatio policyRatio; +}MacSliceRrmPolicy; + +typedef struct macSliceCfgReq +{ + uint8_t numOfRrmPolicy; + MacSliceRrmPolicy **listOfRrmPolicy; +}MacSliceCfgReq; + +/*As per ORAN-WG8, Slice Cfg and ReCfg are same structures*/ +typedef struct macSliceCfgReq MacSliceRecfgReq; +typedef struct macSliceCfgRsp MacSliceRecfgRsp; + +/* Ref: ORAN_WG8.V7.0.0 Sec 1.1.1.17 DL PCCH Indication */ +typedef struct dlPcchInd +{ + uint16_t cellId; + uint16_t pf; + uint8_t i_s; + uint16_t pduLen; + uint8_t *pcchPdu; +}DlPcchInd; + + +/* Ref: ORAN_WG8.V7.0.0 Sec 1.1.1.1 Cell Start */ +typedef struct cellInfo +{ + SlotTimingInfo slotInfo; + uint16_t cellId; +}CellInfo; + +typedef struct cellInfo CellStartInfo; +typedef struct cellInfo CellStopInfo; + +/* Ref: ORAN_WG8.V7.0.0 Sec 1.1.1.12 UE Reset Request */ +typedef struct ueReset +{ + uint16_t cellId; + uint8_t ueId; +}MacUeResetReq; + +/* Ref: ORAN_WG8.V7.0.0 Sec 1.1.1.13 UE Reset Response */ +typedef struct ueResetRsp +{ + uint16_t cellId; + uint8_t ueId; + CauseOfResult status; +}MacUeResetRsp; + +/* Ref: ORAN_WG8.V7.0.0 Sec 1.1.1.14 UE Sync Status Indication */ +typedef struct ueSyncStatusInd +{ + uint16_t cellId; + uint8_t ueId; + SyncStatus status; +}MacUeSyncStatusInd; + +/* The following list of structures is taken from the SI-SchedulingInfo section of specification 33.331. */ +typedef struct sibTypeInfo +{ + SibType sibType; + uint8_t valueTag; + bool areaScope; +}SibTypeInfo; + +typedef struct sibMappingInfo +{ + uint8_t numSibTypeInfo; + SibTypeInfo sibTypeInfo[NUM_SIB]; +}SibMappingInfo; + +typedef struct schedulingInfo +{ + SiBroadcastStatus siBroadcastStatus; + SiPeriodicity siPeriodicity; + SibMappingInfo sibMappingInfo; +}SchedulingInfo; + +typedef struct rachOccasionsSi +{ + RachCfgGeneric rachConfigSi; + SsbPerRachOccasion ssbPerRachOccasion; +}RachOccasionsSi; + +typedef struct siReqRsrc +{ + uint8_t raPreambleStartIndex; + uint8_t raAssociationPeriodIndex; + uint8_t raSsbOccasionMaskIndex; +}SiReqRsrc; + +typedef struct siRequestResource +{ + uint8_t numOfSiReqRsrc; + SiReqRsrc siReqRsrc[MAX_SI_MESSAGE]; +}SiRequestResource; + +typedef struct siRequestConfig +{ + RachOccasionsSi rachOccasionsSi; + SiRequestPeriod siRequestPeriod; + SiRequestResource siRequestResource; +}SiRequestConfig; + +typedef struct schedulingInfoList +{ + uint8_t numSchInfo; + SchedulingInfo schedulingInfo[MAX_SI_MESSAGE]; +}SchedulingInfoList; + +typedef struct siSchedulingInfo +{ + SchedulingInfoList schInfoList; + SiWindowLength siWindowLength; + SiRequestConfig siRequestConfig; + SiRequestConfig siRequestConfigSUL; + uint8_t *siAreaID; +}SiSchedulingInfo; + +/* Ref: ORAN_WG8.V7.0.0 Sec 1.1.1.18 DL Broadcast Request */ +typedef struct macDlBroadcastReq +{ + uint16_t cellId; + uint8_t numSiBlock; + SiSchedulingInfo **siSchedulingInfo; +}MacDlBroadcastReq; + +typedef struct macStatsGrpInfo +{ + uint8_t groupId; + uint16_t periodicity; /* In milliseconds */ + uint8_t numStats; + MacMeasurementType statsList[MAX_NUM_STATS]; +}MacStatsGrpInfo; + +typedef struct macStatsReq +{ + uint64_t subscriptionId; + uint8_t numStatsGroup; + MacStatsGrpInfo statsGrpList[MAX_NUM_STATS_GRP]; +}MacStatsReq; + +typedef struct macStatsGrpRejected +{ + uint8_t groupId; + CauseOfResult cause; +}MacStatsGrpRejected; + +typedef struct macStatsRsp +{ + uint64_t subscriptionId; + uint8_t numGrpAccepted; + uint8_t statsGrpAcceptedList[MAX_NUM_STATS_GRP]; + uint8_t numGrpRejected; + MacStatsGrpRejected statsGrpRejectedList[MAX_NUM_STATS_GRP]; +}MacStatsRsp; + +typedef struct macStats +{ + MacMeasurementType type; + double value; +}MacStats; + +typedef struct macStatsInd +{ + uint64_t subscriptionId; + uint8_t groupId; + uint8_t numStats; + MacStats measuredStatsList[MAX_NUM_STATS]; +}MacStatsInd; + +typedef struct macStatsDeleteReq +{ + uint64_t subscriptionId; +}MacStatsDeleteReq; + +typedef struct macStatsDeleteRsp +{ + uint64_t subscriptionId; + MacRsp result; + CauseOfResult status; +}MacStatsDeleteRsp; + +/****************** FUNCTION POINTERS ********************************/ + +/* DL broadcast req from DU APP to MAC*/ +typedef uint8_t (*DuMacDlBroadcastReq) ARGS(( + Pst *pst, + MacDlBroadcastReq *dlBroadcast)); + +/* Functions for CellUp Ind from MAC to DU APP*/ +typedef uint8_t (*DuMacCellUpInd) ARGS(( + Pst *pst, + OduCellId *cellId )); + +/* Functions for slot Ind from MAC to DU APP*/ +typedef uint8_t (*DuMacSlotInd) ARGS(( + Pst *pst, + SlotTimingInfo *slotIndInfo)); + +/* Functions for stop Ind from MAC to DU APP*/ +typedef uint8_t (*DuMacStopInd) ARGS(( + Pst *pst, + OduCellId *cellId )); + +/* Functions for mac cell start req */ +typedef uint8_t (*DuMacCellStart) ARGS(( + Pst *pst, + CellStartInfo *cellId)); + +/* Functions for mac cell stop request */ +typedef uint8_t (*DuMacCellStop) ARGS(( + Pst *pst, + CellStopInfo *cellId )); + +/* Function pointers for packing macCellCfg Request and Confirm */ +typedef uint8_t (*packMacCellCfgReq) ARGS(( + Pst *pst, + MacCellCfg *macCellCfg )); + +typedef uint8_t (*packMacCellCfgConfirm) ARGS(( + Pst *pst, + MacCellCfgCfm *macCellCfgCfm )); + +typedef uint8_t (*DuMacCellCfgReq) ARGS(( + Pst *pst, + MacCellCfg *macCellCfg)); + +typedef uint8_t (*DuMacCellCfgCfm) ARGS(( + Pst *pst, + MacCellCfgCfm *macCellCfgCfm )); + +/* Functions for UL CCCH Ind from MAC to DU APP*/ +typedef uint8_t (*DuMacUlCcchInd) ARGS(( + Pst *pst, + UlCcchIndInfo *ulCcchIndInfo )); + +/* Functions for DL CCCH Ind from DU APP to MAC*/ +typedef uint8_t (*DuMacDlCcchInd) ARGS(( + Pst *pst, + DlCcchIndInfo *dlCcchIndInfo )); + +/* UE create Request from DU APP to MAC*/ +typedef uint8_t (*DuMacUeCreateReq) ARGS(( + Pst *pst, + MacUeCreateReq *ueCfg )); + +/* UE create Response from MAC to DU APP */ +typedef uint8_t (*MacDuUeCreateRspFunc) ARGS(( + Pst *pst, + MacUeCreateRsp *cfgRsp)); + +/* UE Reconfig Request from DU APP to MAC */ +typedef uint8_t (*DuMacUeReconfigReq) ARGS(( + Pst *pst, + MacUeRecfg *ueCfg )); + +/* UE Reconfig Response from MAC to DU APP */ +typedef uint8_t (*MacDuUeRecfgRspFunc) ARGS(( + Pst *pst, + MacUeRecfgRsp *cfgRsp)); + +/* RACH Resource Request from DU APP to MAC */ +typedef uint8_t (*DuMacRachRsrcReq) ARGS(( + Pst *pst, + MacRachRsrcReq *rachRsrcReq)); + +/* RACH Resource Response from MAC to DU APP */ +typedef uint8_t (*MacDuRachRsrcRspFunc) ARGS(( + Pst *pst, + MacRachRsrcRsp *rachRsrcRsp)); + +/* RACH Resource Release from DU APP to MAC */ +typedef uint8_t (*DuMacRachRsrcRel) ARGS(( + Pst *pst, + MacRachRsrcRel *rachRsrcRel)); + +/* UE Delete Request from DU APP to MAC*/ +typedef uint8_t (*DuMacUeDeleteReq) ARGS(( + Pst *pst, + MacUeDelete *ueDel )); + +/* UE Delete Response from MAC to DU APP*/ +typedef uint8_t (*MacDuUeDeleteRspFunc) ARGS(( + Pst *pst, + MacUeDeleteRsp *deleteRsp)); + +/* Cell Delete Request from DU APP to MAC*/ +typedef uint8_t (*DuMacCellDeleteReq) ARGS(( + Pst *pst, + MacCellDeleteReq *cellDelete )); + +/* Cell Delete Response from MAC to DU APP*/ +typedef uint8_t (*MacDuCellDeleteRspFunc) ARGS(( + Pst *pst, + MacCellDeleteRsp *cellDeleteRsp)); + +/* Slice Cfg Request from DU APP to MAC*/ +typedef uint8_t (*DuMacSliceCfgReq) ARGS(( + Pst *pst, + MacSliceCfgReq *CfgReq)); + +/* Slice Cfg Response from MAC to DU APP */ +typedef uint8_t (*MacDuSliceCfgRspFunc) ARGS(( + Pst *pst, + MacSliceCfgRsp *cfgRsp)); + +/* Slice ReReCfg Request from DU APP to MAC*/ +typedef uint8_t (*DuMacSliceRecfgReq) ARGS(( + Pst *pst, + MacSliceRecfgReq *CfgReq)); + +/* Slice ReReCfg Response from MAC to DU APP */ +typedef uint8_t (*MacDuSliceRecfgRspFunc) ARGS(( + Pst *pst, + MacSliceRecfgRsp *cfgRsp)); + +/* Pcch indication from DU APP to MAC*/ +typedef uint8_t (*DuMacDlPcchInd) ARGS(( + Pst *pst, + DlPcchInd *pcchInd)); + +/* UE Reset Request from DU APP to MAC*/ +typedef uint8_t (*DuMacUeResetReq) ARGS(( + Pst *pst, + MacUeResetReq *ueReset )); + +/* UE Reset Response from MAC to DU APP*/ +typedef uint8_t (*MacDuUeResetRspFunc) ARGS(( + Pst *pst, + MacUeResetRsp *resetRsp)); + +/* UE sync status indication from MAC to DU APP*/ +typedef uint8_t (*MacDuUeSyncStatusIndFunc) ARGS(( + Pst *pst, + MacUeSyncStatusInd *syncStatusInd)); + +/* Statitics Request from DU APP to MAC */ +typedef uint8_t (*DuMacStatsReqFunc) ARGS(( + Pst *pst, + MacStatsReq *statsReq)); + +/* Statistics Response from MAC to DU APP */ +typedef uint8_t (*MacDuStatsRspFunc) ARGS(( + Pst *pst, + MacStatsRsp *statsRsp)); + +/* Statistics Ind from MAC to DU APP */ +typedef uint8_t (*MacDuStatsIndFunc) ARGS(( + Pst *pst, + MacStatsInd *statsInd)); + +/* Statitics Delete Request from DU APP to MAC */ +typedef uint8_t (*DuMacStatsDeleteReqFunc) ARGS(( + Pst *pst, + MacStatsDeleteReq *statsDeleteReq)); + +/* Statistics Delete Response from MAC to DU APP */ +typedef uint8_t (*MacDuStatsDeleteRspFunc) ARGS(( + Pst *pst, + MacStatsDeleteRsp *statsDeleteRsp)); + +/******************** FUNCTION DECLARATIONS ********************************/ +uint8_t packMacCellUpInd(Pst *pst, OduCellId *cellId); +uint8_t unpackMacCellUpInd(DuMacCellUpInd func, Pst *pst, Buffer *mBuf); +uint8_t duHandleCellUpInd(Pst *pst, OduCellId *cellId); + +uint8_t packMacCellStart(Pst *pst, CellStartInfo *cellStartInfo); +uint8_t unpackMacCellStart(DuMacCellStart func, Pst *pst, Buffer *mBuf); +uint8_t MacProcCellStart(Pst *pst, CellStartInfo *cellStartInfo); + +uint8_t packMacCellStop(Pst *pst, CellStopInfo *cellStopInfo); +uint8_t unpackMacCellStop(DuMacCellStop func, Pst *pst, Buffer *mBuf); +uint8_t MacProcCellStop(Pst *pst, CellStopInfo *cellStopInfo); + +uint8_t packMacCellCfg(Pst *pst, MacCellCfg *macCellCfg); +uint8_t unpackDuMacCellCfg(DuMacCellCfgReq func, Pst *pst, Buffer *mBuf); +uint8_t MacProcCellCfgReq(Pst *pst, MacCellCfg *macCellCfg); + +uint8_t packMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm); +uint8_t unpackMacCellCfgCfm(DuMacCellCfgCfm func, Pst *pst, Buffer *mBuf); +uint8_t duHandleMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm); + +uint8_t packMacStopInd(Pst *pst, OduCellId *cellId); +uint8_t unpackMacStopInd(DuMacStopInd func, Pst *pst, Buffer *mBuf); +uint8_t duHandleStopInd(Pst *pst, OduCellId *cellId); +uint8_t sendStopIndMacToDuApp(uint16_t cellId); + +uint8_t packMacUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo); +uint8_t unpackMacUlCcchInd(DuMacUlCcchInd func, Pst *pst, Buffer *mBuf); +uint8_t duHandleUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo); + +uint8_t packMacDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo); +uint8_t unpackMacDlCcchInd(DuMacDlCcchInd func, Pst *pst, Buffer *mBuf); +uint8_t MacProcDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo); + +uint8_t packDuMacUeCreateReq(Pst *pst, MacUeCreateReq *ueCfg); +uint8_t unpackMacUeCreateReq(DuMacUeCreateReq func, Pst *pst, Buffer *mBuf); +uint8_t MacProcUeCreateReq(Pst *pst, MacUeCreateReq *ueCfg); + +uint8_t packDuMacUeCreateRsp(Pst *pst, MacUeCreateRsp *cfgRsp); +uint8_t unpackDuMacUeCreateRsp(MacDuUeCreateRspFunc func, Pst *pst, Buffer *mBuf); +uint8_t DuProcMacUeCreateRsp(Pst *pst, MacUeCreateRsp *cfgRsp); + +uint8_t packDuMacUeReconfigReq(Pst *pst, MacUeRecfg *ueRecfg); +uint8_t unpackMacUeReconfigReq(DuMacUeReconfigReq func, Pst *pst, Buffer *mBuf); +uint8_t MacProcUeReconfigReq(Pst *pst, MacUeRecfg *ueRecfg); + +uint8_t packDuMacUeRecfgRsp(Pst *pst, MacUeRecfgRsp *recfgRsp); +uint8_t unpackDuMacUeRecfgRsp(MacDuUeRecfgRspFunc func, Pst *pst, Buffer *mBuf); +uint8_t DuProcMacUeRecfgRsp(Pst *pst, MacUeRecfgRsp *recfgRsp); + +uint8_t packDuMacRachRsrcReq(Pst *pst, MacRachRsrcReq *rachRsrcReq); +uint8_t unpackMacRachRsrcReq(DuMacRachRsrcReq func, Pst *pst, Buffer *mBuf); +uint8_t MacProcRachRsrcReq(Pst *pst, MacRachRsrcReq *rachRsrcReq); + +uint8_t packDuMacRachRsrcRsp(Pst *pst, MacRachRsrcRsp *rachRsrcRsp); +uint8_t unpackDuMacRachRsrcRsp(MacDuRachRsrcRspFunc func, Pst *pst, Buffer *mBuf); +uint8_t DuProcMacRachRsrcRsp(Pst *pst, MacRachRsrcRsp *rachRsrcRsp); + +uint8_t packDuMacRachRsrcRel(Pst *pst, MacRachRsrcRel *rachRsrcRel); +uint8_t unpackMacRachRsrcRel(DuMacRachRsrcRel func, Pst *pst, Buffer *mBuf); +uint8_t MacProcRachRsrcRel(Pst *pst, MacRachRsrcRel *rachRsrcRel); + +uint8_t packDuMacUeDeleteReq(Pst *pst, MacUeDelete *ueDelete); +uint8_t MacProcUeDeleteReq(Pst *pst, MacUeDelete *ueDelete); +uint8_t unpackMacUeDeleteReq(DuMacUeDeleteReq func, Pst *pst, Buffer *mBuf); + +uint8_t packDuMacUeDeleteRsp(Pst *pst, MacUeDeleteRsp *deleteRsp); +uint8_t DuProcMacUeDeleteRsp(Pst *pst, MacUeDeleteRsp *deleteRsp); +uint8_t unpackDuMacUeDeleteRsp(MacDuUeDeleteRspFunc func, Pst *pst, Buffer *mBuf); + +uint8_t packDuMacCellDeleteReq(Pst *pst, MacCellDeleteReq *cellDelete); +uint8_t MacProcCellDeleteReq(Pst *pst, MacCellDeleteReq *cellDelete); +uint8_t unpackMacCellDeleteReq(DuMacCellDeleteReq func, Pst *pst, Buffer *mBuf); + +uint8_t packDuMacCellDeleteRsp(Pst *pst, MacCellDeleteRsp *cellDeleteRsp); +uint8_t DuProcMacCellDeleteRsp(Pst *pst, MacCellDeleteRsp *cellDeleteRsp); +uint8_t unpackDuMacCellDeleteRsp(MacDuCellDeleteRspFunc func, Pst *pst, Buffer *mBuf); + +uint8_t packDuMacSliceCfgReq(Pst *pst, MacSliceCfgReq *sliceCfgReq); +uint8_t MacProcSliceCfgReq(Pst *pst, MacSliceCfgReq *sliceCfgReq); +uint8_t unpackMacSliceCfgReq(DuMacSliceCfgReq func, Pst *pst, Buffer *mBuf); + +uint8_t DuProcMacSliceCfgRsp(Pst *pst, MacSliceCfgRsp *cfgRsp); +uint8_t packDuMacSliceCfgRsp(Pst *pst, MacSliceCfgRsp *cfgRsp); +uint8_t unpackDuMacSliceCfgRsp(MacDuSliceCfgRspFunc func, Pst *pst, Buffer *mBuf); + +uint8_t packDuMacSliceRecfgReq(Pst *pst, MacSliceRecfgReq *sliceRecfgReq); +uint8_t MacProcSliceRecfgReq(Pst *pst, MacSliceRecfgReq *sliceRecfgReq); +uint8_t unpackMacSliceRecfgReq(DuMacSliceRecfgReq func, Pst *pst, Buffer *mBuf); + +uint8_t DuProcMacSliceRecfgRsp(Pst *pst, MacSliceRecfgRsp *sliceRecfgRsp); +uint8_t packDuMacSliceRecfgRsp(Pst *pst, MacSliceRecfgRsp *sliceRecfgRsp); +uint8_t unpackDuMacSliceRecfgRsp(MacDuSliceRecfgRspFunc func, Pst *pst, Buffer *mBuf); + +uint8_t duHandleSlotInd(Pst *pst, SlotTimingInfo *slotIndInfo); +uint8_t packMacSlotInd(Pst *pst, SlotTimingInfo *slotIndInfo); +uint8_t unpackDuMacSlotInd(DuMacSlotInd func, Pst *pst, Buffer *mBuf); + +uint8_t packDuMacDlPcchInd(Pst *pst, DlPcchInd *pcchInd); +uint8_t MacProcDlPcchInd(Pst *pst, DlPcchInd *pcchInd); +uint8_t unpackMacDlPcchInd(DuMacDlPcchInd func, Pst *pst, Buffer *mBuf); + +int8_t getFreeBitFromUeBitMap(uint16_t cellId); +void unsetBitInUeBitMap(uint16_t cellId, uint8_t bitPos); + +uint8_t packDuMacUeResetReq(Pst *pst, MacUeResetReq *ueReset); +uint8_t MacProcUeResetReq(Pst *pst, MacUeResetReq *ueReset); +uint8_t unpackMacUeResetReq(DuMacUeResetReq func, Pst *pst, Buffer *mBuf); + +uint8_t packDuMacUeResetRsp(Pst *pst, MacUeResetRsp *resetRsp); +uint8_t DuProcMacUeResetRsp(Pst *pst, MacUeResetRsp *resetRsp); +uint8_t unpackDuMacUeResetRsp(MacDuUeResetRspFunc func, Pst *pst, Buffer *mBuf); + +uint8_t packDuMacUeSyncStatusInd(Pst *pst, MacUeSyncStatusInd *ueSyncStatusInd); +uint8_t DuProcMacUeSyncStatusInd(Pst *pst, MacUeSyncStatusInd *ueSyncStatusInd); +uint8_t unpackDuMacUeSyncStatusInd(MacDuUeSyncStatusIndFunc func, Pst *pst, Buffer *mBuf); + +uint8_t packDuMacDlBroadcastReq(Pst *pst, MacDlBroadcastReq *dlBroadcastReq); +uint8_t MacProcDlBroadcastReq(Pst *pst, MacDlBroadcastReq *dlBroadcastReq); +uint8_t unpackMacDlBroadcastReq(DuMacDlBroadcastReq func, Pst *pst, Buffer *mBuf); + +uint8_t packDuMacStatsReq(Pst *pst, MacStatsReq *statsReq); +uint8_t MacProcStatsReq(Pst *pst, MacStatsReq *statsReq); +uint8_t unpackMacStatsReq(DuMacStatsReqFunc func, Pst *pst, Buffer *mBuf); + +uint8_t packDuMacStatsRsp(Pst *pst, MacStatsRsp *statsRsp); +uint8_t DuProcMacStatsRsp(Pst *pst, MacStatsRsp *statsRsp); +uint8_t unpackDuMacStatsRsp(MacDuStatsRspFunc func, Pst *pst, Buffer *mBuf); + +uint8_t packDuMacStatsInd(Pst *pst, MacStatsInd *statsRsp); +uint8_t DuProcMacStatsInd(Pst *pst, MacStatsInd *statsRsp); +uint8_t unpackDuMacStatsInd(MacDuStatsIndFunc func, Pst *pst, Buffer *mBuf); + +uint8_t packDuMacStatsDeleteReq(Pst *pst, MacStatsDeleteReq *statsDeleteReq); +uint8_t MacProcStatsDeleteReq(Pst *pst, MacStatsDeleteReq *statsDeleteReq); +uint8_t unpackMacStatsDeleteReq(DuMacStatsDeleteReqFunc func, Pst *pst, Buffer *mBuf); + +uint8_t packDuMacStatsDeleteRsp(Pst *pst, MacStatsDeleteRsp *statsDeleteRsp); +uint8_t DuProcMacStatsDeleteRsp(Pst *pst, MacStatsDeleteRsp *statsDeleteRsp); +uint8_t unpackDuMacStatsDeleteRsp(MacDuStatsDeleteRspFunc func, Pst *pst, Buffer *mBuf); + +#endif -#endif /********************************************************************** - End of file -**********************************************************************/ + End of file + **********************************************************************/