From 8f621c3ed7536b91cfbac20f7bf7142915876807 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Sat, 4 Nov 2017 07:09:10 +0100 Subject: [PATCH 01/19] bugfixes for TDD in RRU (IF4p5) and timing statistics of fronthaul and compression. --- openair1/PHY/LTE_TRANSPORT/if4_tools.c | 62 +++++++++++++------ openair1/PHY/LTE_TRANSPORT/if4_tools.h | 10 +-- openair1/PHY/defs.h | 4 ++ targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c | 3 +- targets/RT/USER/lte-ru.c | 21 +++++-- 5 files changed, 71 insertions(+), 29 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/if4_tools.c b/openair1/PHY/LTE_TRANSPORT/if4_tools.c index 4528766676..38ced5d717 100644 --- a/openair1/PHY/LTE_TRANSPORT/if4_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/if4_tools.c @@ -58,7 +58,7 @@ void send_IF4p5(RU_t *ru, int frame, int subframe, uint16_t packet_type) { uint16_t db_fulllength, db_halflength; int slotoffsetF=0, blockoffsetF=0; - uint16_t *data_block=NULL, *i=NULL; + uint16_t *data_block=NULL, *i=NULL, *d=NULL; IF4p5_header_t *packet_header=NULL; eth_state_t *eth = (eth_state_t*) (ru->ifdevice.priv); @@ -138,23 +138,48 @@ void send_IF4p5(RU_t *ru, int frame, int subframe, uint16_t packet_type) { if (packet_type == IF4p5_PULFFT) { + uint16_t *rx0 = (uint16_t*) &rxdataF[0][blockoffsetF]; + uint16_t *rx1 = (uint16_t*) &rxdataF[0][slotoffsetF]; + + for (symbol_id=fp->symbols_per_tti-nsym; symbol_idsymbols_per_tti; symbol_id++) { VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SEND_IF4_SYMBOL, symbol_id ); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_COMPR_IF, 1 ); - for (element_id=0; element_idframe_status &= ~(0x000f<<26); - packet_header->frame_status |= (symbol_id&0x000f)<<26; + + start_meas(&ru->compression); + + for (element_id=0; element_idcompression); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_COMPR_IF, 0 ); + packet_header->frame_status &= ~(0x000f<<26); + packet_header->frame_status |= (symbol_id&0x000f)<<26; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE_IF, 1 ); + start_meas(&ru->transport); if ((ru->ifdevice.trx_write_func(&ru->ifdevice, symbol_id, &tx_buffer, @@ -163,6 +188,7 @@ void send_IF4p5(RU_t *ru, int frame, int subframe, uint16_t packet_type) { IF4p5_PULFFT)) < 0) { perror("ETHERNET write for IF4p5_PULFFT\n"); } + stop_meas(&ru->transport); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE_IF, 0 ); slotoffsetF += fp->ofdm_symbol_size; blockoffsetF += fp->ofdm_symbol_size; @@ -181,7 +207,7 @@ void send_IF4p5(RU_t *ru, int frame, int subframe, uint16_t packet_type) { } else if (packet_type >= IF4p5_PRACH && packet_type <= IF4p5_PRACH+4) { // FIX: hard coded prach samples length - LOG_D(PHY,"IF4p5_PRACH: frame %d, subframe %d\n",frame,subframe); + LOG_D(PHY,"IF4p5_PRACH: frame %d, subframe %d,packet type %x\n",frame,subframe,packet_type); db_fulllength = PRACH_NUM_SAMPLES; if (eth->flags == ETH_RAW_IF4p5_MODE) { @@ -222,6 +248,7 @@ void send_IF4p5(RU_t *ru, int frame, int subframe, uint16_t packet_type) { packet_type)) < 0) { perror("ETHERNET write for IF4p5_PRACH\n"); } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE_IF, 0 ); } else { AssertFatal(1==0, "send_IF4p5 - Unknown packet_type %x", packet_type); @@ -283,7 +310,7 @@ void recv_IF4p5(RU_t *ru, int *frame, int *subframe, uint16_t *packet_type, uint *subframe = ((packet_header->frame_status)>>22)&0x000f; *packet_type = packet_header->sub_type; - + LOG_D(PHY,"recv_IF4p5: Frame %d, Subframe %d: packet_type %x\n",*frame,*subframe,*packet_type); if (*packet_type == IF4p5_PDLFFT) { *symbol_number = ((packet_header->frame_status)>>26)&0x000f; VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_RECV_IF4_SYMBOL, *symbol_number ); @@ -313,7 +340,6 @@ void recv_IF4p5(RU_t *ru, int *frame, int *subframe, uint16_t *packet_type, uint slotoffsetF = (*symbol_number)*(fp->ofdm_symbol_size); blockoffsetF = slotoffsetF + fp->ofdm_symbol_size - db_halflength; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_DECOMPR_IF, 1 ); - if (ru->idx==0) LOG_D(PHY,"UL_IF4p5: CC_id %d : frame %d, subframe %d, symbol %d\n",ru->idx,*frame,*subframe,*symbol_number); for (element_id=0; element_id %d dB\n",ru->idx,*frame,*subframe, - // dB_fixed(signal_energy((int*)&prach_rxsigF[0][0],839))); + LOG_D(PHY,"PRACH_IF4p5: CC_id %d : frame %d, subframe %d => %d dB\n",ru->idx,*frame,*subframe, + dB_fixed(signal_energy((int*)&prach_rxsigF[0][0],839))); for (idx=0;idxnum_eNB;idx++) ru->wakeup_prach_eNB(ru->eNB_list[idx],ru,*frame,*subframe); } else if (*packet_type == IF4p5_PULTICK) { diff --git a/openair1/PHY/LTE_TRANSPORT/if4_tools.h b/openair1/PHY/LTE_TRANSPORT/if4_tools.h index a251c62d0d..0a95e60ead 100644 --- a/openair1/PHY/LTE_TRANSPORT/if4_tools.h +++ b/openair1/PHY/LTE_TRANSPORT/if4_tools.h @@ -39,11 +39,11 @@ #define IF4p5_PULFFT 0x0019 #define IF4p5_PDLFFT 0x0020 #define IF4p5_PRACH 0x0021 -#define IF4p5_PRACH_BR_CE0 0x0021 -#define IF4p5_PRACH_BR_CE1 0x0022 -#define IF4p5_PRACH_BR_CE2 0x0023 -#define IF4p5_PRACH_BR_CE3 0x0024 -#define IF4p5_PULTICK 0x0025 +#define IF4p5_PRACH_BR_CE0 0x0022 +#define IF4p5_PRACH_BR_CE1 0x0023 +#define IF4p5_PRACH_BR_CE2 0x0024 +#define IF4p5_PRACH_BR_CE3 0x0025 +#define IF4p5_PULTICK 0x0026 struct IF4p5_header { /// Type diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index 24ea961b0e..0e44a7f8bd 100644 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -756,6 +756,10 @@ typedef struct RU_t_s{ time_stats_t rx_fhaul; /// Timing statistics (TX Fronthaul + Compression) time_stats_t tx_fhaul; + /// Timong statistics (Compression) + time_stats_t compression; + /// Timing statistics (Fronthaul transport) + time_stats_t transport; /// RX and TX buffers for precoder output RU_COMMON common; /// beamforming weight vectors per eNB diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c index e323a9d5bc..ad5bbda3fe 100644 --- a/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c +++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_udp.c @@ -235,7 +235,8 @@ int trx_eth_write_udp_IF4p5(openair0_device *device, openair0_timestamp timestam packet_size = UDP_IF4p5_PULFFT_SIZE_BYTES(nblocks); } else if (flags == IF4p5_PULTICK) { packet_size = UDP_IF4p5_PULTICK_SIZE_BYTES; - } else if (flags == IF4p5_PRACH) { + } else if ((flags >= IF4p5_PRACH)&& + (flags <= (IF4p5_PRACH+4))) { packet_size = UDP_IF4p5_PRACH_SIZE_BYTES; } else { printf("trx_eth_write_udp_IF4p5: unknown flags %d\n",flags); diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index 45f69ca414..54693f43c8 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -596,13 +596,14 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) { symbol_mask_full = ((subframe_select(fp,*subframe) == SF_S) ? (1<dl_symbols_in_S_subframe) : (1<symbols_per_tti))-1; do { recv_IF4p5(ru, &frame_tx, &subframe_tx, &packet_type, &symbol_number); - if ((subframe_select(fp,*subframe) == SF_DL) && (symbol_number == 0)) start_meas(&ru->rx_fhaul); + if ((subframe_select(fp,subframe_tx) == SF_DL) && (symbol_number == 0)) start_meas(&ru->rx_fhaul); LOG_D(PHY,"subframe %d (%d): frame %d, subframe %d, symbol %d\n", *subframe,subframe_select(fp,*subframe),frame_tx,subframe_tx,symbol_number); if (proc->first_tx != 0) { *frame = frame_tx; *subframe = subframe_tx; proc->first_tx = 0; + symbol_mask_full = ((subframe_select(fp,*subframe) == SF_S) ? (1<dl_symbols_in_S_subframe) : (1<symbols_per_tti))-1; } else { AssertFatal(frame_tx == *frame, @@ -616,7 +617,7 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) { else AssertFatal(1==0,"Illegal IF4p5 packet type (should only be IF4p5_PDLFFT%d\n",packet_type); } while (symbol_mask != symbol_mask_full); - if (subframe_select(fp,*subframe) == SF_DL) stop_meas(&ru->rx_fhaul); + if (subframe_select(fp,subframe_tx) == SF_DL) stop_meas(&ru->rx_fhaul); proc->subframe_tx = subframe_tx; proc->frame_tx = frame_tx; @@ -871,7 +872,10 @@ static void* ru_thread_asynch_rxtx( void* param ) { // asynchronous receive from south (Mobipass) if (ru->fh_south_asynch_in) ru->fh_south_asynch_in(ru,&frame,&subframe); // asynchronous receive from north (RRU IF4/IF5) - else if (ru->fh_north_asynch_in) ru->fh_north_asynch_in(ru,&frame,&subframe); + else if (ru->fh_north_asynch_in) { + if (subframe_select(&ru->frame_parms,subframe)!=SF_UL) + ru->fh_north_asynch_in(ru,&frame,&subframe); + } else AssertFatal(1==0,"Unknown function in ru_thread_asynch_rxtx\n"); } @@ -1322,8 +1326,11 @@ static void* ru_stats_thread(void* param) { if (ru->feprx) print_meas(&ru->ofdm_demod_stats,"feprx",NULL,NULL); if (ru->feptx_ofdm) print_meas(&ru->ofdm_mod_stats,"feptx_ofdm",NULL,NULL); if (ru->fh_north_asynch_in) print_meas(&ru->rx_fhaul,"rx_fhaul",NULL,NULL); - if (ru->fh_north_out) print_meas(&ru->tx_fhaul,"tx_fhaul",NULL,NULL); - + if (ru->fh_north_out) { + print_meas(&ru->tx_fhaul,"tx_fhaul",NULL,NULL); + print_meas(&ru->compression,"compression",NULL,NULL); + print_meas(&ru->transport,"transport",NULL,NULL); + } } } return(NULL); @@ -1911,6 +1918,8 @@ void init_RU(char *rf_config_file) { ru->ifdevice.eth_params = &ru->eth_params; reset_meas(&ru->rx_fhaul); reset_meas(&ru->tx_fhaul); + reset_meas(&ru->compression); + reset_meas(&ru->transport); ret = openair0_transport_load(&ru->ifdevice,&ru->openair0_cfg,&ru->eth_params); printf("openair0_transport_init returns %d for ru_id %d\n",ret,ru_id); @@ -1934,6 +1943,8 @@ void init_RU(char *rf_config_file) { ru->ifdevice.eth_params = &ru->eth_params; reset_meas(&ru->rx_fhaul); reset_meas(&ru->tx_fhaul); + reset_meas(&ru->compression); + reset_meas(&ru->transport); ret = openair0_transport_load(&ru->ifdevice,&ru->openair0_cfg,&ru->eth_params); printf("openair0_transport_init returns %d for ru_id %d\n",ret,ru_id); From d01aa2d08a8c32e53711fcdf4ee8b37f333d7df2 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Sat, 4 Nov 2017 09:55:11 -0700 Subject: [PATCH 02/19] changing of notation for Random-Access procedure to match documentation. Function remains the same. Indentation (-kr) run on all files in LAYER2/MAC --- openair2/LAYER2/MAC/config.c | 2024 +++-- openair2/LAYER2/MAC/defs.h | 1781 +++-- openair2/LAYER2/MAC/eNB_scheduler.c | 1018 ++- openair2/LAYER2/MAC/eNB_scheduler_RA.c | 2721 ++++--- openair2/LAYER2/MAC/eNB_scheduler_bch.c | 1458 ++-- openair2/LAYER2/MAC/eNB_scheduler_dlsch.c | 2651 ++++--- openair2/LAYER2/MAC/eNB_scheduler_mch.c | 1271 +-- .../LAYER2/MAC/eNB_scheduler_primitives.c | 6806 +++++++++-------- openair2/LAYER2/MAC/eNB_scheduler_ulsch.c | 2420 +++--- openair2/LAYER2/MAC/extern.h | 34 +- openair2/LAYER2/MAC/flexran_agent_mac_proto.h | 212 +- .../MAC/flexran_agent_scheduler_dataplane.c | 937 +-- .../MAC/flexran_agent_scheduler_dlsch_ue.c | 3192 ++++---- .../flexran_agent_scheduler_dlsch_ue_remote.c | 282 +- .../flexran_agent_scheduler_dlsch_ue_remote.h | 11 +- openair2/LAYER2/MAC/flexran_dci_conversions.h | 4 +- openair2/LAYER2/MAC/l1_helpers.c | 36 +- openair2/LAYER2/MAC/lte_transport_init.c | 176 +- openair2/LAYER2/MAC/main.c | 405 +- openair2/LAYER2/MAC/openair2_proc.c | 405 - openair2/LAYER2/MAC/pre_processor.c | 2640 ++++--- openair2/LAYER2/MAC/proto.h | 771 +- openair2/LAYER2/MAC/ra_procedures.c | 974 +-- openair2/LAYER2/MAC/rar_tools.c | 399 +- openair2/LAYER2/MAC/ue_procedures.c | 4743 ++++++------ openair2/LAYER2/MAC/vars.h | 113 +- 26 files changed, 20388 insertions(+), 17096 deletions(-) delete mode 100644 openair2/LAYER2/MAC/openair2_proc.c diff --git a/openair2/LAYER2/MAC/config.c b/openair2/LAYER2/MAC/config.c index 6d5ebae7d4..764c762f6a 100644 --- a/openair2/LAYER2/MAC/config.c +++ b/openair2/LAYER2/MAC/config.c @@ -60,37 +60,37 @@ extern RAN_CONTEXT_t RC; /* sec 5.9, 36.321: MAC Reset Procedure */ -void ue_mac_reset(module_id_t module_idP,uint8_t eNB_index) +void ue_mac_reset(module_id_t module_idP, uint8_t eNB_index) { - //Resetting Bj - UE_mac_inst[module_idP].scheduling_info.Bj[0] = 0; - UE_mac_inst[module_idP].scheduling_info.Bj[1] = 0; - UE_mac_inst[module_idP].scheduling_info.Bj[2] = 0; + //Resetting Bj + UE_mac_inst[module_idP].scheduling_info.Bj[0] = 0; + UE_mac_inst[module_idP].scheduling_info.Bj[1] = 0; + UE_mac_inst[module_idP].scheduling_info.Bj[2] = 0; - //Stopping all timers + //Stopping all timers - //timeAlignmentTimer expires + //timeAlignmentTimer expires - // PHY changes for UE MAC reset - phy_reset_ue(module_idP,0,eNB_index); + // PHY changes for UE MAC reset + phy_reset_ue(module_idP, 0, eNB_index); - // notify RRC to relase PUCCH/SRS - // cancel all pending SRs - UE_mac_inst[module_idP].scheduling_info.SR_pending=0; - UE_mac_inst[module_idP].scheduling_info.SR_COUNTER=0; + // notify RRC to relase PUCCH/SRS + // cancel all pending SRs + UE_mac_inst[module_idP].scheduling_info.SR_pending = 0; + UE_mac_inst[module_idP].scheduling_info.SR_COUNTER = 0; //Set BSR Trigger Bmp and remove timer flags - UE_mac_inst[module_idP].BSR_reporting_active = BSR_TRIGGER_NONE; + UE_mac_inst[module_idP].BSR_reporting_active = BSR_TRIGGER_NONE; - // stop ongoing RACH procedure + // stop ongoing RACH procedure - // discard explicitly signaled ra_PreambleIndex and ra_RACH_MaskIndex, if any - UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = 0; // check! - UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0; + // discard explicitly signaled ra_PreambleIndex and ra_RACH_MaskIndex, if any + UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = 0; // check! + UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0; - ue_init_mac(module_idP); //This will hopefully do the rest of the MAC reset procedure + ue_init_mac(module_idP); //This will hopefully do the rest of the MAC reset procedure } @@ -115,912 +115,1236 @@ typedef struct band_info_s { static const eutra_bandentry_t eutra_bandtable[] = { - { 1, 19200, 19800, 21100, 21700, 0}, - { 2, 18500, 19100, 19300, 19900, 6000}, - { 3, 17100, 17850, 18050, 18800, 12000}, - { 4, 17100, 17550, 21100, 21550, 19500}, - { 5, 8240, 8490, 8690, 8940, 24000}, - { 6, 8300, 8400, 8750, 8850, 26500}, - { 7, 25000, 25700, 26200, 26900, 27500}, - { 8, 8800, 9150 , 9250, 9600, 34500}, - { 9, 17499, 17849, 18449, 18799, 38000}, - {10, 17100, 17700, 21100, 21700, 41500}, - {11, 14279, 14529, 14759, 15009, 47500}, - {12, 6980, 7160, 7280, 7460, 50100}, - {13, 7770, 7870, 7460, 7560, 51800}, - {14, 7880, 7980, 7580, 7680, 52800}, - {17, 7040, 7160, 7340, 7460, 57300}, - {18, 8150, 9650, 8600, 10100, 58500}, - {19, 8300, 8450, 8750, 8900, 60000}, - {20, 8320, 8620, 7910, 8210, 61500}, - {21, 14479, 14629, 14959, 15109, 64500}, - {22, 34100, 34900, 35100, 35900, 66000}, - {23, 20000, 20200, 21800, 22000, 75000}, - {24, 16126, 16605, 15250, 15590, 77000}, - {25, 18500, 19150, 19300, 19950, 80400}, - {26, 8140 , 8490, 8590, 8940, 86900}, - {27, 8070 , 8240, 8520, 8690, 90400}, - {28, 7030 , 7580, 7580, 8130, 92100}, - {29, 0 , 0 , 7170, 7280, 96600}, - {30, 23050, 23250, 23500, 23600, 97700}, - {31, 45250, 34900, 46250, 35900, 98700}, - {32, 0 , 0 , 14520, 14960, 99200}, - {33, 19000, 19200, 19000, 19200, 36000}, - {34, 20100, 20250, 20100, 20250, 36200}, - {35, 18500, 19100, 18500, 19100, 36350}, - {36, 19300, 19900, 19300, 19900, 36950}, - {37, 19100, 19300, 19100, 19300, 37550}, - {38, 25700, 26200, 25700, 26300, 37750}, - {39, 18800, 19200, 18800, 19200, 38250}, - {40, 23000, 24000, 23000, 24000, 38650}, - {41, 24960, 26900, 24960, 26900, 39650}, - {42, 34000, 36000, 34000, 36000, 41590}, - {43, 36000, 38000, 36000, 38000, 43590}, - {44, 7030 , 8030, 7030, 8030, 45590}, - {45, 14470, 14670, 14470, 14670, 46590}, - {46, 51500, 59250, 51500, 59250, 46790}, - {65, 19200, 20100, 21100, 22000, 65536}, - {66, 17100, 18000, 21100, 22000, 66436}, - {67, 0 , 0 , 7380, 7580, 67336}, - {68, 6980 , 7280 , 7530, 7830, 67536}}; + {1, 19200, 19800, 21100, 21700, 0}, + {2, 18500, 19100, 19300, 19900, 6000}, + {3, 17100, 17850, 18050, 18800, 12000}, + {4, 17100, 17550, 21100, 21550, 19500}, + {5, 8240, 8490, 8690, 8940, 24000}, + {6, 8300, 8400, 8750, 8850, 26500}, + {7, 25000, 25700, 26200, 26900, 27500}, + {8, 8800, 9150, 9250, 9600, 34500}, + {9, 17499, 17849, 18449, 18799, 38000}, + {10, 17100, 17700, 21100, 21700, 41500}, + {11, 14279, 14529, 14759, 15009, 47500}, + {12, 6980, 7160, 7280, 7460, 50100}, + {13, 7770, 7870, 7460, 7560, 51800}, + {14, 7880, 7980, 7580, 7680, 52800}, + {17, 7040, 7160, 7340, 7460, 57300}, + {18, 8150, 9650, 8600, 10100, 58500}, + {19, 8300, 8450, 8750, 8900, 60000}, + {20, 8320, 8620, 7910, 8210, 61500}, + {21, 14479, 14629, 14959, 15109, 64500}, + {22, 34100, 34900, 35100, 35900, 66000}, + {23, 20000, 20200, 21800, 22000, 75000}, + {24, 16126, 16605, 15250, 15590, 77000}, + {25, 18500, 19150, 19300, 19950, 80400}, + {26, 8140, 8490, 8590, 8940, 86900}, + {27, 8070, 8240, 8520, 8690, 90400}, + {28, 7030, 7580, 7580, 8130, 92100}, + {29, 0, 0, 7170, 7280, 96600}, + {30, 23050, 23250, 23500, 23600, 97700}, + {31, 45250, 34900, 46250, 35900, 98700}, + {32, 0, 0, 14520, 14960, 99200}, + {33, 19000, 19200, 19000, 19200, 36000}, + {34, 20100, 20250, 20100, 20250, 36200}, + {35, 18500, 19100, 18500, 19100, 36350}, + {36, 19300, 19900, 19300, 19900, 36950}, + {37, 19100, 19300, 19100, 19300, 37550}, + {38, 25700, 26200, 25700, 26300, 37750}, + {39, 18800, 19200, 18800, 19200, 38250}, + {40, 23000, 24000, 23000, 24000, 38650}, + {41, 24960, 26900, 24960, 26900, 39650}, + {42, 34000, 36000, 34000, 36000, 41590}, + {43, 36000, 38000, 36000, 38000, 43590}, + {44, 7030, 8030, 7030, 8030, 45590}, + {45, 14470, 14670, 14470, 14670, 46590}, + {46, 51500, 59250, 51500, 59250, 46790}, + {65, 19200, 20100, 21100, 22000, 65536}, + {66, 17100, 18000, 21100, 22000, 66436}, + {67, 0, 0, 7380, 7580, 67336}, + {68, 6980, 7280, 7530, 7830, 67536} +}; -uint32_t to_earfcn(int eutra_bandP,uint32_t dl_CarrierFreq,uint32_t bw) { +uint32_t to_earfcn(int eutra_bandP, uint32_t dl_CarrierFreq, uint32_t bw) +{ - uint32_t dl_CarrierFreq_by_100k = dl_CarrierFreq/100000; - int bw_by_100 = bw/100; + uint32_t dl_CarrierFreq_by_100k = dl_CarrierFreq / 100000; + int bw_by_100 = bw / 100; - int i; + int i; - AssertFatal(eutra_bandP < 69,"eutra_band %d > 68\n",eutra_bandP); - for (i=0;i<69 && eutra_bandtable[i].band!=eutra_bandP;i++); + AssertFatal(eutra_bandP < 69, "eutra_band %d > 68\n", eutra_bandP); + for (i = 0; i < 69 && eutra_bandtable[i].band != eutra_bandP; i++); - AssertFatal(dl_CarrierFreq_by_100k>=eutra_bandtable[i].dl_min, - "Band %d, bw %u : DL carrier frequency %u Hz < %u\n", - eutra_bandP,bw,dl_CarrierFreq,eutra_bandtable[i].dl_min); - AssertFatal(dl_CarrierFreq_by_100k<=(eutra_bandtable[i].dl_max-bw_by_100), - "Band %d, bw %u: DL carrier frequency %u Hz > %d\n", - eutra_bandP,bw,dl_CarrierFreq,eutra_bandtable[i].dl_max-bw_by_100); + AssertFatal(dl_CarrierFreq_by_100k >= eutra_bandtable[i].dl_min, + "Band %d, bw %u : DL carrier frequency %u Hz < %u\n", + eutra_bandP, bw, dl_CarrierFreq, + eutra_bandtable[i].dl_min); + AssertFatal(dl_CarrierFreq_by_100k <= + (eutra_bandtable[i].dl_max - bw_by_100), + "Band %d, bw %u: DL carrier frequency %u Hz > %d\n", + eutra_bandP, bw, dl_CarrierFreq, + eutra_bandtable[i].dl_max - bw_by_100); - return(dl_CarrierFreq_by_100k - eutra_bandtable[i].dl_min + (eutra_bandtable[i].N_OFFs_DL/10)); + return (dl_CarrierFreq_by_100k - eutra_bandtable[i].dl_min + + (eutra_bandtable[i].N_OFFs_DL / 10)); } -uint32_t from_earfcn(int eutra_bandP,uint32_t dl_earfcn) { +uint32_t from_earfcn(int eutra_bandP, uint32_t dl_earfcn) +{ - int i; + int i; - AssertFatal(eutra_bandP < 69,"eutra_band %d > 68\n",eutra_bandP); - for (i=0;i<69 && eutra_bandtable[i].band!=eutra_bandP;i++); + AssertFatal(eutra_bandP < 69, "eutra_band %d > 68\n", eutra_bandP); + for (i = 0; i < 69 && eutra_bandtable[i].band != eutra_bandP; i++); - return(eutra_bandtable[i].dl_min + (dl_earfcn-(eutra_bandtable[i].N_OFFs_DL/10)))*100000; + return (eutra_bandtable[i].dl_min + + (dl_earfcn - (eutra_bandtable[i].N_OFFs_DL / 10))) * 100000; } -int32_t get_uldl_offset(int eutra_bandP) { - int i; +int32_t get_uldl_offset(int eutra_bandP) +{ + int i; - for (i=0;i<69 && eutra_bandtable[i].band!=eutra_bandP;i++); - return(eutra_bandtable[i].dl_min - eutra_bandtable[i].ul_min); + for (i = 0; i < 69 && eutra_bandtable[i].band != eutra_bandP; i++); + return (eutra_bandtable[i].dl_min - eutra_bandtable[i].ul_min); } -uint32_t bw_table[6] = {6*180,15*180,25*180,50*180,75*180,100*180}; +uint32_t bw_table[6] = + { 6 * 180, 15 * 180, 25 * 180, 50 * 180, 75 * 180, 100 * 180 }; -void config_mib(int Mod_idP, - int CC_idP, - int eutra_bandP, - int dl_BandwidthP, - PHICH_Config_t *phich_configP, - int Nid_cellP, - int NcpP, - int p_eNBP, - uint32_t dl_CarrierFreqP, - uint32_t ul_CarrierFreqP, - uint32_t pbch_repetitionP) { +void +config_mib(int Mod_idP, + int CC_idP, + int eutra_bandP, + int dl_BandwidthP, + PHICH_Config_t * phich_configP, + int Nid_cellP, + int NcpP, + int p_eNBP, + uint32_t dl_CarrierFreqP, + uint32_t ul_CarrierFreqP, uint32_t pbch_repetitionP) +{ - nfapi_config_request_t *cfg = &RC.mac[Mod_idP]->config[CC_idP]; - - cfg->subframe_config.pcfich_power_offset.value = 6000; // 0dB - cfg->subframe_config.dl_cyclic_prefix_type.value = NcpP; - cfg->subframe_config.ul_cyclic_prefix_type.value = NcpP; - - LOG_I(MAC,"Ncp %d,p_eNB %d\n",NcpP,p_eNBP); + nfapi_config_request_t *cfg = &RC.mac[Mod_idP]->config[CC_idP]; - cfg->rf_config.dl_channel_bandwidth.value = dl_BandwidthP; - cfg->rf_config.ul_channel_bandwidth.value = dl_BandwidthP; - cfg->rf_config.tx_antenna_ports.value = p_eNBP; - cfg->rf_config.rx_antenna_ports.value = 2; + cfg->subframe_config.pcfich_power_offset.value = 6000; // 0dB + cfg->subframe_config.dl_cyclic_prefix_type.value = NcpP; + cfg->subframe_config.ul_cyclic_prefix_type.value = NcpP; - cfg->nfapi_config.earfcn.value = to_earfcn(eutra_bandP,dl_CarrierFreqP,bw_table[dl_BandwidthP]/100); - cfg->nfapi_config.rf_bands.number_rf_bands = 1; - cfg->nfapi_config.rf_bands.rf_band[0] = eutra_bandP; - cfg->phich_config.phich_resource.value = phich_configP->phich_Resource; - cfg->phich_config.phich_duration.value = phich_configP->phich_Duration; - cfg->phich_config.phich_power_offset.value = 6000; // 0dB + LOG_I(MAC, "Ncp %d,p_eNB %d\n", NcpP, p_eNBP); - cfg->sch_config.primary_synchronization_signal_epre_eprers.value = 6000; // 0dB - cfg->sch_config.secondary_synchronization_signal_epre_eprers.value = 6000; // 0dB - cfg->sch_config.physical_cell_id.value = Nid_cellP; + cfg->rf_config.dl_channel_bandwidth.value = dl_BandwidthP; + cfg->rf_config.ul_channel_bandwidth.value = dl_BandwidthP; + cfg->rf_config.tx_antenna_ports.value = p_eNBP; + cfg->rf_config.rx_antenna_ports.value = 2; + + cfg->nfapi_config.earfcn.value = + to_earfcn(eutra_bandP, dl_CarrierFreqP, + bw_table[dl_BandwidthP] / 100); + cfg->nfapi_config.rf_bands.number_rf_bands = 1; + cfg->nfapi_config.rf_bands.rf_band[0] = eutra_bandP; + cfg->phich_config.phich_resource.value = phich_configP->phich_Resource; + cfg->phich_config.phich_duration.value = phich_configP->phich_Duration; + cfg->phich_config.phich_power_offset.value = 6000; // 0dB + + cfg->sch_config.primary_synchronization_signal_epre_eprers.value = 6000; // 0dB + cfg->sch_config.secondary_synchronization_signal_epre_eprers.value = 6000; // 0dB + cfg->sch_config.physical_cell_id.value = Nid_cellP; #ifdef Rel14 - cfg->emtc_config.pbch_repetitions_enable_r13.value = pbch_repetitionP; -#endif + cfg->emtc_config.pbch_repetitions_enable_r13.value = pbch_repetitionP; +#endif } -void config_sib1(int Mod_idP, +void config_sib1(int Mod_idP, int CC_idP, TDD_Config_t * tdd_ConfigP) +{ + + nfapi_config_request_t *cfg = &RC.mac[Mod_idP]->config[CC_idP]; + + if (tdd_ConfigP) { //TDD + cfg->subframe_config.duplex_mode.value = 0; + cfg->tdd_frame_structure_config.subframe_assignment.value = + tdd_ConfigP->subframeAssignment; + cfg->tdd_frame_structure_config.special_subframe_patterns.value = + tdd_ConfigP->specialSubframePatterns; + } else { // FDD + cfg->subframe_config.duplex_mode.value = 1; + // Note no half-duplex here + } + + +} + +int power_off_dB[6] = { 78, 118, 140, 170, 188, 200 }; + +void +config_sib2(int Mod_idP, + int CC_idP, + RadioResourceConfigCommonSIB_t * radioResourceConfigCommonP, +#ifdef Rel14 + RadioResourceConfigCommonSIB_t * radioResourceConfigCommon_BRP, +#endif + ARFCN_ValueEUTRA_t * ul_CArrierFreqP, + long *ul_BandwidthP, + AdditionalSpectrumEmission_t * + additionalSpectrumEmissionP, + struct MBSFN_SubframeConfigList *mbsfn_SubframeConfigListP) +{ + + nfapi_config_request_t *cfg = &RC.mac[Mod_idP]->config[CC_idP]; + + cfg->subframe_config.pb.value = + radioResourceConfigCommonP->pdsch_ConfigCommon.p_b; + cfg->rf_config.reference_signal_power.value = + radioResourceConfigCommonP->pdsch_ConfigCommon. + referenceSignalPower; + cfg->nfapi_config.max_transmit_power.value = + cfg->rf_config.reference_signal_power.value + + power_off_dB[cfg->rf_config.dl_channel_bandwidth.value]; + + cfg->prach_config.configuration_index.value = + radioResourceConfigCommonP->prach_Config. + prach_ConfigInfo.prach_ConfigIndex; + cfg->prach_config.root_sequence_index.value = + radioResourceConfigCommonP->prach_Config.rootSequenceIndex; + cfg->prach_config.zero_correlation_zone_configuration.value = + radioResourceConfigCommonP->prach_Config. + prach_ConfigInfo.zeroCorrelationZoneConfig; + cfg->prach_config.high_speed_flag.value = + radioResourceConfigCommonP->prach_Config.prach_ConfigInfo. + highSpeedFlag; + cfg->prach_config.frequency_offset.value = + radioResourceConfigCommonP->prach_Config. + prach_ConfigInfo.prach_FreqOffset; + + cfg->pusch_config.hopping_mode.value = + radioResourceConfigCommonP->pusch_ConfigCommon. + pusch_ConfigBasic.hoppingMode; + cfg->pusch_config.number_of_subbands.value = + radioResourceConfigCommonP->pusch_ConfigCommon.pusch_ConfigBasic. + n_SB; + cfg->pusch_config.hopping_offset.value = + radioResourceConfigCommonP->pusch_ConfigCommon. + pusch_ConfigBasic.pusch_HoppingOffset; + + + + cfg->pucch_config.delta_pucch_shift.value = + radioResourceConfigCommonP->pucch_ConfigCommon.deltaPUCCH_Shift; + cfg->pucch_config.n_cqi_rb.value = + radioResourceConfigCommonP->pucch_ConfigCommon.nRB_CQI; + cfg->pucch_config.n_an_cs.value = + radioResourceConfigCommonP->pucch_ConfigCommon.nCS_AN; + cfg->pucch_config.n1_pucch_an.value = + radioResourceConfigCommonP->pucch_ConfigCommon.n1PUCCH_AN; + + if (radioResourceConfigCommonP-> + pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled == + true) + cfg->uplink_reference_signal_config.uplink_rs_hopping.value = 1; + else if (radioResourceConfigCommonP-> + pusch_ConfigCommon.ul_ReferenceSignalsPUSCH. + sequenceHoppingEnabled == true) + cfg->uplink_reference_signal_config.uplink_rs_hopping.value = 2; + else // No hopping + cfg->uplink_reference_signal_config.uplink_rs_hopping.value = 0; + + cfg->uplink_reference_signal_config.group_assignment.value = + radioResourceConfigCommonP-> + pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH; + cfg->uplink_reference_signal_config.cyclic_shift_1_for_drms.value = + radioResourceConfigCommonP-> + pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift; + + // how to enable/disable SRS? + if (radioResourceConfigCommonP->soundingRS_UL_ConfigCommon.present == + SoundingRS_UL_ConfigCommon_PR_setup) { + cfg->srs_config.bandwidth_configuration.value = + radioResourceConfigCommonP->soundingRS_UL_ConfigCommon. + choice.setup.srs_BandwidthConfig; + cfg->srs_config.srs_subframe_configuration.value = + radioResourceConfigCommonP->soundingRS_UL_ConfigCommon. + choice.setup.srs_SubframeConfig; + cfg->srs_config.srs_acknack_srs_simultaneous_transmission.value = + radioResourceConfigCommonP->soundingRS_UL_ConfigCommon. + choice.setup.ackNackSRS_SimultaneousTransmission; + + if (radioResourceConfigCommonP->soundingRS_UL_ConfigCommon. + choice.setup.srs_MaxUpPts) + cfg->srs_config.max_up_pts.value = 1; + else + cfg->srs_config.max_up_pts.value = 0; + } +#ifdef Rel14 + if (RC.mac[Mod_idP]->common_channels[CC_idP].mib-> + message.schedulingInfoSIB1_BR_r13 > 0) { + AssertFatal(radioResourceConfigCommon_BRP != NULL, + "radioResource rou is missing\n"); + AssertFatal(radioResourceConfigCommon_BRP->ext4 != NULL, + "ext4 is missing\n"); + cfg->emtc_config.prach_catm_root_sequence_index.value = + radioResourceConfigCommon_BRP->prach_Config.rootSequenceIndex; + cfg->emtc_config.prach_catm_zero_correlation_zone_configuration. + value = + radioResourceConfigCommon_BRP->prach_Config. + prach_ConfigInfo.zeroCorrelationZoneConfig; + cfg->emtc_config.prach_catm_high_speed_flag.value = + radioResourceConfigCommon_BRP->prach_Config. + prach_ConfigInfo.highSpeedFlag; + + struct PRACH_ConfigSIB_v1310 *ext4_prach = + radioResourceConfigCommon_BRP->ext4->prach_ConfigCommon_v1310; + + PRACH_ParametersListCE_r13_t *prach_ParametersListCE_r13 = + &ext4_prach->prach_ParametersListCE_r13; + + PRACH_ParametersCE_r13_t *p; + cfg->emtc_config.prach_ce_level_0_enable.value = 0; + cfg->emtc_config.prach_ce_level_1_enable.value = 0; + cfg->emtc_config.prach_ce_level_2_enable.value = 0; + cfg->emtc_config.prach_ce_level_3_enable.value = 0; + switch (prach_ParametersListCE_r13->list.count) { + case 4: + p = prach_ParametersListCE_r13->list.array[3]; + cfg->emtc_config.prach_ce_level_3_enable.value = 1; + cfg->emtc_config.prach_ce_level_3_configuration_index.value = + p->prach_ConfigIndex_r13; + cfg->emtc_config.prach_ce_level_3_frequency_offset.value = + p->prach_FreqOffset_r13; + cfg-> + emtc_config.prach_ce_level_3_number_of_repetitions_per_attempt. + value = p->numRepetitionPerPreambleAttempt_r13; + if (p->prach_StartingSubframe_r13) + cfg-> + emtc_config.prach_ce_level_3_starting_subframe_periodicity. + value = *p->prach_StartingSubframe_r13; + cfg->emtc_config.prach_ce_level_3_hopping_enable.value = + p->prach_HoppingConfig_r13; + cfg->emtc_config.prach_ce_level_3_hopping_offset.value = + cfg->rf_config.ul_channel_bandwidth.value - 6; + case 3: + p = prach_ParametersListCE_r13->list.array[2]; + cfg->emtc_config.prach_ce_level_2_enable.value = 1; + cfg->emtc_config.prach_ce_level_2_configuration_index.value = + p->prach_ConfigIndex_r13; + cfg->emtc_config.prach_ce_level_2_frequency_offset.value = + p->prach_FreqOffset_r13; + cfg-> + emtc_config.prach_ce_level_2_number_of_repetitions_per_attempt. + value = p->numRepetitionPerPreambleAttempt_r13; + if (p->prach_StartingSubframe_r13) + cfg-> + emtc_config.prach_ce_level_2_starting_subframe_periodicity. + value = *p->prach_StartingSubframe_r13; + cfg->emtc_config.prach_ce_level_2_hopping_enable.value = + p->prach_HoppingConfig_r13; + cfg->emtc_config.prach_ce_level_2_hopping_offset.value = + cfg->rf_config.ul_channel_bandwidth.value - 6; + case 2: + p = prach_ParametersListCE_r13->list.array[1]; + cfg->emtc_config.prach_ce_level_1_enable.value = 1; + cfg->emtc_config.prach_ce_level_1_configuration_index.value = + p->prach_ConfigIndex_r13; + cfg->emtc_config.prach_ce_level_1_frequency_offset.value = + p->prach_FreqOffset_r13; + cfg-> + emtc_config.prach_ce_level_1_number_of_repetitions_per_attempt. + value = p->numRepetitionPerPreambleAttempt_r13; + if (p->prach_StartingSubframe_r13) + cfg-> + emtc_config.prach_ce_level_1_starting_subframe_periodicity. + value = *p->prach_StartingSubframe_r13; + cfg->emtc_config.prach_ce_level_1_hopping_enable.value = + p->prach_HoppingConfig_r13; + cfg->emtc_config.prach_ce_level_1_hopping_offset.value = + cfg->rf_config.ul_channel_bandwidth.value - 6; + case 1: + p = prach_ParametersListCE_r13->list.array[0]; + cfg->emtc_config.prach_ce_level_0_enable.value = 1; + cfg->emtc_config.prach_ce_level_0_configuration_index.value = + p->prach_ConfigIndex_r13; + cfg->emtc_config.prach_ce_level_0_frequency_offset.value = + p->prach_FreqOffset_r13; + cfg-> + emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt. + value = p->numRepetitionPerPreambleAttempt_r13; + if (p->prach_StartingSubframe_r13) + cfg-> + emtc_config.prach_ce_level_0_starting_subframe_periodicity. + value = *p->prach_StartingSubframe_r13; + cfg->emtc_config.prach_ce_level_0_hopping_enable.value = + p->prach_HoppingConfig_r13; + cfg->emtc_config.prach_ce_level_0_hopping_offset.value = + cfg->rf_config.ul_channel_bandwidth.value - 6; + } + + struct FreqHoppingParameters_r13 *ext4_freqHoppingParameters = + radioResourceConfigCommonP->ext4->freqHoppingParameters_r13; + if ((ext4_freqHoppingParameters) + && + (ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeA_r13)) + { + switch + (ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeA_r13-> + present) { + case FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeA_r13_PR_NOTHING: /* No components present */ + break; + case FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeA_r13_PR_interval_FDD_r13: + cfg->emtc_config. + pucch_interval_ulhoppingconfigcommonmodea.value = + ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeA_r13-> + choice.interval_FDD_r13; + break; + case FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeA_r13_PR_interval_TDD_r13: + cfg->emtc_config. + pucch_interval_ulhoppingconfigcommonmodea.value = + ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeA_r13-> + choice.interval_TDD_r13; + break; + } + } + if ((ext4_freqHoppingParameters) && + (ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeB_r13)) + { + switch + (ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeB_r13-> + present) { + case FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeB_r13_PR_NOTHING: /* No components present */ + break; + case FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeB_r13_PR_interval_FDD_r13: + cfg->emtc_config. + pucch_interval_ulhoppingconfigcommonmodeb.value = + ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeB_r13-> + choice.interval_FDD_r13; + break; + case FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeB_r13_PR_interval_TDD_r13: + cfg->emtc_config. + pucch_interval_ulhoppingconfigcommonmodeb.value = + ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeB_r13-> + choice.interval_TDD_r13; + break; + } + } + } +#endif + +} + +void +config_dedicated(int Mod_idP, int CC_idP, - TDD_Config_t *tdd_ConfigP) { - - nfapi_config_request_t *cfg = &RC.mac[Mod_idP]->config[CC_idP]; - - if (tdd_ConfigP) { //TDD - cfg->subframe_config.duplex_mode.value = 0; - cfg->tdd_frame_structure_config.subframe_assignment.value = tdd_ConfigP->subframeAssignment; - cfg->tdd_frame_structure_config.special_subframe_patterns.value = tdd_ConfigP->specialSubframePatterns; - } - else { // FDD - cfg->subframe_config.duplex_mode.value = 1; - // Note no half-duplex here - } - - -} - -int power_off_dB[6] = {78,118,140,170,188,200}; - -void config_sib2(int Mod_idP, - int CC_idP, - RadioResourceConfigCommonSIB_t *radioResourceConfigCommonP, -#ifdef Rel14 - RadioResourceConfigCommonSIB_t *radioResourceConfigCommon_BRP, -#endif - ARFCN_ValueEUTRA_t *ul_CArrierFreqP, - long *ul_BandwidthP, - AdditionalSpectrumEmission_t *additionalSpectrumEmissionP, - struct MBSFN_SubframeConfigList *mbsfn_SubframeConfigListP) { - - nfapi_config_request_t *cfg = &RC.mac[Mod_idP]->config[CC_idP]; - - cfg->subframe_config.pb.value = radioResourceConfigCommonP->pdsch_ConfigCommon.p_b; - cfg->rf_config.reference_signal_power.value = radioResourceConfigCommonP->pdsch_ConfigCommon.referenceSignalPower; - cfg->nfapi_config.max_transmit_power.value = cfg->rf_config.reference_signal_power.value + power_off_dB[cfg->rf_config.dl_channel_bandwidth.value]; - - cfg->prach_config.configuration_index.value = radioResourceConfigCommonP->prach_Config.prach_ConfigInfo.prach_ConfigIndex; - cfg->prach_config.root_sequence_index.value = radioResourceConfigCommonP->prach_Config.rootSequenceIndex; - cfg->prach_config.zero_correlation_zone_configuration.value = radioResourceConfigCommonP->prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig; - cfg->prach_config.high_speed_flag.value = radioResourceConfigCommonP->prach_Config.prach_ConfigInfo.highSpeedFlag; - cfg->prach_config.frequency_offset.value = radioResourceConfigCommonP->prach_Config.prach_ConfigInfo.prach_FreqOffset; - - cfg->pusch_config.hopping_mode.value = radioResourceConfigCommonP->pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode; - cfg->pusch_config.number_of_subbands.value = radioResourceConfigCommonP->pusch_ConfigCommon.pusch_ConfigBasic.n_SB; - cfg->pusch_config.hopping_offset.value = radioResourceConfigCommonP->pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset; - - - - cfg->pucch_config.delta_pucch_shift.value = radioResourceConfigCommonP->pucch_ConfigCommon.deltaPUCCH_Shift; - cfg->pucch_config.n_cqi_rb.value = radioResourceConfigCommonP->pucch_ConfigCommon.nRB_CQI; - cfg->pucch_config.n_an_cs.value = radioResourceConfigCommonP->pucch_ConfigCommon.nCS_AN; - cfg->pucch_config.n1_pucch_an.value = radioResourceConfigCommonP->pucch_ConfigCommon.n1PUCCH_AN; - - if (radioResourceConfigCommonP->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled == true) - cfg->uplink_reference_signal_config.uplink_rs_hopping.value = 1; - else if (radioResourceConfigCommonP->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled == true) - cfg->uplink_reference_signal_config.uplink_rs_hopping.value = 2; - else // No hopping - cfg->uplink_reference_signal_config.uplink_rs_hopping.value = 0; - - cfg->uplink_reference_signal_config.group_assignment.value = radioResourceConfigCommonP->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH; - cfg->uplink_reference_signal_config.cyclic_shift_1_for_drms.value = radioResourceConfigCommonP->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift; - - // how to enable/disable SRS? - if (radioResourceConfigCommonP->soundingRS_UL_ConfigCommon.present==SoundingRS_UL_ConfigCommon_PR_setup) { - cfg->srs_config.bandwidth_configuration.value = radioResourceConfigCommonP->soundingRS_UL_ConfigCommon.choice.setup.srs_BandwidthConfig; - cfg->srs_config.srs_subframe_configuration.value = radioResourceConfigCommonP->soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig; - cfg->srs_config.srs_acknack_srs_simultaneous_transmission.value = radioResourceConfigCommonP->soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission; - - if (radioResourceConfigCommonP->soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts) - cfg->srs_config.max_up_pts.value = 1; - else - cfg->srs_config.max_up_pts.value = 0; - } - -#ifdef Rel14 - if (RC.mac[Mod_idP]->common_channels[CC_idP].mib->message.schedulingInfoSIB1_BR_r13>0) { - AssertFatal(radioResourceConfigCommon_BRP!=NULL,"radioResource rou is missing\n"); - AssertFatal(radioResourceConfigCommon_BRP->ext4!=NULL,"ext4 is missing\n"); - cfg->emtc_config.prach_catm_root_sequence_index.value = radioResourceConfigCommon_BRP->prach_Config.rootSequenceIndex; - cfg->emtc_config.prach_catm_zero_correlation_zone_configuration.value = radioResourceConfigCommon_BRP->prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig; - cfg->emtc_config.prach_catm_high_speed_flag.value = radioResourceConfigCommon_BRP->prach_Config.prach_ConfigInfo.highSpeedFlag; - - struct PRACH_ConfigSIB_v1310 *ext4_prach=radioResourceConfigCommon_BRP->ext4->prach_ConfigCommon_v1310; - - PRACH_ParametersListCE_r13_t *prach_ParametersListCE_r13 = &ext4_prach->prach_ParametersListCE_r13; - - PRACH_ParametersCE_r13_t *p; - cfg->emtc_config.prach_ce_level_0_enable.value=0; - cfg->emtc_config.prach_ce_level_1_enable.value=0; - cfg->emtc_config.prach_ce_level_2_enable.value=0; - cfg->emtc_config.prach_ce_level_3_enable.value=0; - switch (prach_ParametersListCE_r13->list.count) { - case 4: - p=prach_ParametersListCE_r13->list.array[3]; - cfg->emtc_config.prach_ce_level_3_enable.value = 1; - cfg->emtc_config.prach_ce_level_3_configuration_index.value = p->prach_ConfigIndex_r13; - cfg->emtc_config.prach_ce_level_3_frequency_offset.value = p->prach_FreqOffset_r13; - cfg->emtc_config.prach_ce_level_3_number_of_repetitions_per_attempt.value = p->numRepetitionPerPreambleAttempt_r13; - if (p->prach_StartingSubframe_r13) - cfg->emtc_config.prach_ce_level_3_starting_subframe_periodicity.value = *p->prach_StartingSubframe_r13; - cfg->emtc_config.prach_ce_level_3_hopping_enable.value = p->prach_HoppingConfig_r13; - cfg->emtc_config.prach_ce_level_3_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6; - case 3: - p=prach_ParametersListCE_r13->list.array[2]; - cfg->emtc_config.prach_ce_level_2_enable.value = 1; - cfg->emtc_config.prach_ce_level_2_configuration_index.value = p->prach_ConfigIndex_r13; - cfg->emtc_config.prach_ce_level_2_frequency_offset.value = p->prach_FreqOffset_r13; - cfg->emtc_config.prach_ce_level_2_number_of_repetitions_per_attempt.value = p->numRepetitionPerPreambleAttempt_r13; - if (p->prach_StartingSubframe_r13) - cfg->emtc_config.prach_ce_level_2_starting_subframe_periodicity.value = *p->prach_StartingSubframe_r13; - cfg->emtc_config.prach_ce_level_2_hopping_enable.value = p->prach_HoppingConfig_r13; - cfg->emtc_config.prach_ce_level_2_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6; - case 2: - p=prach_ParametersListCE_r13->list.array[1]; - cfg->emtc_config.prach_ce_level_1_enable.value = 1; - cfg->emtc_config.prach_ce_level_1_configuration_index.value = p->prach_ConfigIndex_r13; - cfg->emtc_config.prach_ce_level_1_frequency_offset.value = p->prach_FreqOffset_r13; - cfg->emtc_config.prach_ce_level_1_number_of_repetitions_per_attempt.value = p->numRepetitionPerPreambleAttempt_r13; - if (p->prach_StartingSubframe_r13) - cfg->emtc_config.prach_ce_level_1_starting_subframe_periodicity.value = *p->prach_StartingSubframe_r13; - cfg->emtc_config.prach_ce_level_1_hopping_enable.value = p->prach_HoppingConfig_r13; - cfg->emtc_config.prach_ce_level_1_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6; - case 1: - p=prach_ParametersListCE_r13->list.array[0]; - cfg->emtc_config.prach_ce_level_0_enable.value = 1; - cfg->emtc_config.prach_ce_level_0_configuration_index.value = p->prach_ConfigIndex_r13; - cfg->emtc_config.prach_ce_level_0_frequency_offset.value = p->prach_FreqOffset_r13; - cfg->emtc_config.prach_ce_level_0_number_of_repetitions_per_attempt.value = p->numRepetitionPerPreambleAttempt_r13; - if (p->prach_StartingSubframe_r13) - cfg->emtc_config.prach_ce_level_0_starting_subframe_periodicity.value = *p->prach_StartingSubframe_r13; - cfg->emtc_config.prach_ce_level_0_hopping_enable.value = p->prach_HoppingConfig_r13; - cfg->emtc_config.prach_ce_level_0_hopping_offset.value = cfg->rf_config.ul_channel_bandwidth.value-6; - } - - struct FreqHoppingParameters_r13 *ext4_freqHoppingParameters = radioResourceConfigCommonP->ext4->freqHoppingParameters_r13; - if ((ext4_freqHoppingParameters) && - (ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeA_r13)){ - switch(ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeA_r13->present) { - case FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeA_r13_PR_NOTHING: /* No components present */ - break; - case FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeA_r13_PR_interval_FDD_r13: - cfg->emtc_config.pucch_interval_ulhoppingconfigcommonmodea.value = ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeA_r13->choice.interval_FDD_r13; - break; - case FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeA_r13_PR_interval_TDD_r13: - cfg->emtc_config.pucch_interval_ulhoppingconfigcommonmodea.value = ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeA_r13->choice.interval_TDD_r13; - break; - } - } - if ((ext4_freqHoppingParameters) && - (ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeB_r13)){ - switch(ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeB_r13->present) { - case FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeB_r13_PR_NOTHING: /* No components present */ - break; - case FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeB_r13_PR_interval_FDD_r13: - cfg->emtc_config.pucch_interval_ulhoppingconfigcommonmodeb.value = ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeB_r13->choice.interval_FDD_r13; - break; - case FreqHoppingParameters_r13__interval_ULHoppingConfigCommonModeB_r13_PR_interval_TDD_r13: - cfg->emtc_config.pucch_interval_ulhoppingconfigcommonmodeb.value = ext4_freqHoppingParameters->interval_ULHoppingConfigCommonModeB_r13->choice.interval_TDD_r13; - break; - } - } - } -#endif + uint16_t rnti, + struct PhysicalConfigDedicated *physicalConfigDedicated) +{ } -void config_dedicated(int Mod_idP, - int CC_idP, - uint16_t rnti, - struct PhysicalConfigDedicated *physicalConfigDedicated) { +void +config_dedicated_scell(int Mod_idP, + uint16_t rnti, + SCellToAddMod_r10_t * sCellToAddMod_r10) +{ } -void config_dedicated_scell(int Mod_idP, - uint16_t rnti, - SCellToAddMod_r10_t *sCellToAddMod_r10) { - -} - -int rrc_mac_config_req_eNB(module_id_t Mod_idP, - int CC_idP, - int physCellId, - int p_eNB, - int Ncp, - int eutra_band, - uint32_t dl_CarrierFreq, -#ifdef Rel14 - int pbch_repetition, -#endif - rnti_t rntiP, - BCCH_BCH_Message_t *mib, - RadioResourceConfigCommonSIB_t *radioResourceConfigCommon, -#ifdef Rel14 - RadioResourceConfigCommonSIB_t *radioResourceConfigCommon_BR, -#endif - struct PhysicalConfigDedicated *physicalConfigDedicated, -#if defined(Rel10) || defined(Rel14) - SCellToAddMod_r10_t *sCellToAddMod_r10, - //struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10, -#endif - MeasObjectToAddMod_t **measObj, - MAC_MainConfig_t *mac_MainConfig, - long logicalChannelIdentity, - LogicalChannelConfig_t *logicalChannelConfig, - MeasGapConfig_t *measGapConfig, - TDD_Config_t *tdd_Config, - MobilityControlInfo_t *mobilityControlInfo, - SchedulingInfoList_t *schedulingInfoList, - uint32_t ul_CarrierFreq, - long *ul_Bandwidth, - AdditionalSpectrumEmission_t *additionalSpectrumEmission, - struct MBSFN_SubframeConfigList *mbsfn_SubframeConfigList -#if defined(Rel10) || defined(Rel14) - ,uint8_t MBMS_Flag, - MBSFN_AreaInfoList_r9_t *mbsfn_AreaInfoList, - PMCH_InfoList_r9_t *pmch_InfoList -#endif -#ifdef Rel14 - , - SystemInformationBlockType1_v1310_IEs_t *sib1_v13ext -#endif - ) { - - int i; - - int UE_id = -1; - eNB_MAC_INST *eNB = RC.mac[Mod_idP]; - UE_list_t *UE_list= &eNB->UE_list; - - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_IN); - - - if (mib!=NULL) { - if (RC.mac == NULL) l2_init_eNB(); - - mac_top_init_eNB(); - - RC.mac[Mod_idP]->common_channels[CC_idP].mib = mib; - RC.mac[Mod_idP]->common_channels[CC_idP].physCellId = physCellId; - RC.mac[Mod_idP]->common_channels[CC_idP].p_eNB = p_eNB; - RC.mac[Mod_idP]->common_channels[CC_idP].Ncp = Ncp; - RC.mac[Mod_idP]->common_channels[CC_idP].eutra_band = eutra_band; - RC.mac[Mod_idP]->common_channels[CC_idP].dl_CarrierFreq = dl_CarrierFreq; - - LOG_I(MAC, - "Configuring MIB for instance %d, CCid %d : (band %d,N_RB_DL %d,Nid_cell %d,p %d,DL freq %u,phich_config.resource %d, phich_config.duration %d)\n", - Mod_idP, - CC_idP, - eutra_band, - to_prb((int)mib->message.dl_Bandwidth), - physCellId, - p_eNB, - dl_CarrierFreq, - (int)mib->message.phich_Config.phich_Resource, - (int)mib->message.phich_Config.phich_Duration); - - config_mib(Mod_idP,CC_idP, - eutra_band, - mib->message.dl_Bandwidth, - &mib->message.phich_Config, - physCellId, - Ncp, - p_eNB, - dl_CarrierFreq, - ul_CarrierFreq -#ifdef Rel14 - ,pbch_repetition -#endif - ); - - mac_init_cell_params(Mod_idP,CC_idP); - } - if (schedulingInfoList!=NULL) { - RC.mac[Mod_idP]->common_channels[CC_idP].tdd_Config = tdd_Config; - RC.mac[Mod_idP]->common_channels[CC_idP].schedulingInfoList = schedulingInfoList; - config_sib1(Mod_idP,CC_idP,tdd_Config); - } -#ifdef Rel14 - if (sib1_v13ext != NULL) { - RC.mac[Mod_idP]->common_channels[CC_idP].sib1_v13ext = sib1_v13ext; - } -#endif - if (radioResourceConfigCommon!=NULL) { - LOG_I(MAC,"[CONFIG]SIB2/3 Contents (partial)\n"); - LOG_I(MAC,"[CONFIG]pusch_config_common.n_SB = %ld\n",radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.n_SB); - LOG_I(MAC,"[CONFIG]pusch_config_common.hoppingMode = %ld\n",radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode); - LOG_I(MAC,"[CONFIG]pusch_config_common.pusch_HoppingOffset = %ld\n", radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset); - LOG_I(MAC,"[CONFIG]pusch_config_common.enable64QAM = %d\n",radioResourceConfigCommon->pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM); - LOG_I(MAC,"[CONFIG]pusch_config_common.groupHoppingEnabled = %d\n",radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled); - LOG_I(MAC,"[CONFIG]pusch_config_common.groupAssignmentPUSCH = %ld\n",radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH); - LOG_I(MAC,"[CONFIG]pusch_config_common.sequenceHoppingEnabled = %d\n",radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled); - LOG_I(MAC,"[CONFIG]pusch_config_common.cyclicShift = %ld\n",radioResourceConfigCommon->pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift); - - AssertFatal(radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx > 0, - "radioResourceconfigCommon %d == 0\n", - (int)radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx); - - RC.mac[Mod_idP]->common_channels[CC_idP].radioResourceConfigCommon = radioResourceConfigCommon; - if (ul_CarrierFreq>0) RC.mac[Mod_idP]->common_channels[CC_idP].ul_CarrierFreq = ul_CarrierFreq; - if (ul_Bandwidth) RC.mac[Mod_idP]->common_channels[CC_idP].ul_Bandwidth = *ul_Bandwidth; - else RC.mac[Mod_idP]->common_channels[CC_idP].ul_Bandwidth = RC.mac[Mod_idP]->common_channels[CC_idP].mib->message.dl_Bandwidth; - - config_sib2(Mod_idP, CC_idP, - radioResourceConfigCommon, -#ifdef Rel14 - radioResourceConfigCommon_BR, -#endif - NULL, ul_Bandwidth, additionalSpectrumEmission, mbsfn_SubframeConfigList); - - - } - - - // SRB2_lchan_config->choice.explicitValue.ul_SpecificParameters->logicalChannelGroup - if (logicalChannelConfig!= NULL) { // check for eMTC specific things - UE_id = find_UE_id(Mod_idP, rntiP); - - if (UE_id == -1) { - LOG_E(MAC,"%s:%d:%s: ERROR, UE_id == -1\n", __FILE__, __LINE__, __FUNCTION__); - } else { - if (logicalChannelConfig) - UE_list->UE_template[CC_idP][UE_id].lcgidmap[logicalChannelIdentity] = *logicalChannelConfig->ul_SpecificParameters->logicalChannelGroup; - else - UE_list->UE_template[CC_idP][UE_id].lcgidmap[logicalChannelIdentity] = 0; - } - } - - - if (physicalConfigDedicated != NULL) { - UE_id = find_UE_id(Mod_idP, rntiP); - - if (UE_id == -1) - LOG_E(MAC,"%s:%d:%s: ERROR, UE_id == -1\n", __FILE__, __LINE__, __FUNCTION__); - else - UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated=physicalConfigDedicated; - } - - - - -#if defined(Rel10) || defined(Rel14) - - if (sCellToAddMod_r10 != NULL) { - UE_id = find_UE_id(Mod_idP, rntiP); - if (UE_id == -1) - LOG_E(MAC,"%s:%d:%s: ERROR, UE_id == -1\n", __FILE__, __LINE__, __FUNCTION__); - else - config_dedicated_scell(Mod_idP,rntiP,sCellToAddMod_r10); - - } - -#endif - - - - - if (mbsfn_SubframeConfigList != NULL) { - LOG_I(MAC,"[eNB %d][CONFIG] Received %d subframe allocation pattern for MBSFN\n", Mod_idP, mbsfn_SubframeConfigList->list.count); - RC.mac[Mod_idP]->common_channels[0].num_sf_allocation_pattern= mbsfn_SubframeConfigList->list.count; - - for (i=0; ilist.count; i++) { - RC.mac[Mod_idP]->common_channels[0].mbsfn_SubframeConfig[i] = mbsfn_SubframeConfigList->list.array[i]; - LOG_I(MAC, "[eNB %d][CONFIG] MBSFN_SubframeConfig[%d] pattern is %x\n", Mod_idP, i, - RC.mac[Mod_idP]->common_channels[0].mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[0]); - } - -#ifdef Rel10 - RC.mac[Mod_idP]->common_channels[0].MBMS_flag = MBMS_Flag; -#endif - } - -#if defined(Rel10) || defined(Rel14) - - if (mbsfn_AreaInfoList != NULL) { - // One eNB could be part of multiple mbsfn syc area, this could change over time so reset each time - LOG_I(MAC,"[eNB %d][CONFIG] Received %d MBSFN Area Info\n", Mod_idP, mbsfn_AreaInfoList->list.count); - RC.mac[Mod_idP]->common_channels[0].num_active_mbsfn_area = mbsfn_AreaInfoList->list.count; - - for (i =0; i< mbsfn_AreaInfoList->list.count; i++) { - RC.mac[Mod_idP]->common_channels[0].mbsfn_AreaInfo[i] = mbsfn_AreaInfoList->list.array[i]; - LOG_I(MAC,"[eNB %d][CONFIG] MBSFN_AreaInfo[%d]: MCCH Repetition Period = %ld\n", Mod_idP,i, - RC.mac[Mod_idP]->common_channels[0].mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_RepetitionPeriod_r9); - // config_sib13(Mod_idP,0,i,RC.mac[Mod_idP]->common_channels[0].mbsfn_AreaInfo[i]->mbsfn_AreaId_r9); - } - } - - if (pmch_InfoList != NULL) { - - // LOG_I(MAC,"DUY: lcid when entering rrc_mac config_req is %02d\n",(pmch_InfoList->list.array[0]->mbms_SessionInfoList_r9.list.array[0]->logicalChannelIdentity_r9)); - - LOG_I(MAC, "[CONFIG] Number of PMCH in this MBSFN Area %d\n", pmch_InfoList->list.count); - - for (i =0; i< pmch_InfoList->list.count; i++) { - RC.mac[Mod_idP]->common_channels[0].pmch_Config[i] = &pmch_InfoList->list.array[i]->pmch_Config_r9; - - LOG_I(MAC, "[CONFIG] PMCH[%d]: This PMCH stop (sf_AllocEnd_r9) at subframe %ldth\n", i, - RC.mac[Mod_idP]->common_channels[0].pmch_Config[i]->sf_AllocEnd_r9); - LOG_I(MAC, "[CONFIG] PMCH[%d]: mch_Scheduling_Period = %ld\n", i, - RC.mac[Mod_idP]->common_channels[0].pmch_Config[i]->mch_SchedulingPeriod_r9); - LOG_I(MAC, "[CONFIG] PMCH[%d]: dataMCS = %ld\n", i, - RC.mac[Mod_idP]->common_channels[0].pmch_Config[i]->dataMCS_r9); - - // MBMS session info list in each MCH - RC.mac[Mod_idP]->common_channels[0].mbms_SessionList[i] = &pmch_InfoList->list.array[i]->mbms_SessionInfoList_r9; - LOG_I(MAC, "PMCH[%d] Number of session (MTCH) is: %d\n",i, RC.mac[Mod_idP]->common_channels[0].mbms_SessionList[i]->list.count); - } - } - -#endif - - if (radioResourceConfigCommon!=NULL) { - AssertFatal(RC.mac[Mod_idP]->if_inst->PHY_config_req != NULL,"if_inst->phy_config_request is null\n"); - PHY_Config_t phycfg; - phycfg.Mod_id = Mod_idP; - phycfg.CC_id = CC_idP; - phycfg.cfg = &RC.mac[Mod_idP]->config[CC_idP]; - - if (RC.mac[Mod_idP]->if_inst->PHY_config_req) RC.mac[Mod_idP]->if_inst->PHY_config_req(&phycfg); - } - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT); - - return(0); -} - int -rrc_mac_config_req_ue( - module_id_t Mod_idP, - int CC_idP, - uint8_t eNB_index, - RadioResourceConfigCommonSIB_t *radioResourceConfigCommon, - struct PhysicalConfigDedicated *physicalConfigDedicated, +rrc_mac_config_req_eNB(module_id_t Mod_idP, + int CC_idP, + int physCellId, + int p_eNB, + int Ncp, int eutra_band, uint32_t dl_CarrierFreq, +#ifdef Rel14 + int pbch_repetition, +#endif + rnti_t rntiP, + BCCH_BCH_Message_t * mib, + RadioResourceConfigCommonSIB_t * + radioResourceConfigCommon, +#ifdef Rel14 + RadioResourceConfigCommonSIB_t * + radioResourceConfigCommon_BR, +#endif + struct PhysicalConfigDedicated + *physicalConfigDedicated, #if defined(Rel10) || defined(Rel14) - SCellToAddMod_r10_t *sCellToAddMod_r10, - //struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10, + SCellToAddMod_r10_t * sCellToAddMod_r10, + //struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10, #endif - MeasObjectToAddMod_t **measObj, - MAC_MainConfig_t *mac_MainConfig, - long logicalChannelIdentity, - LogicalChannelConfig_t *logicalChannelConfig, - MeasGapConfig_t *measGapConfig, - TDD_Config_t *tdd_Config, - MobilityControlInfo_t *mobilityControlInfo, - uint8_t *SIwindowsize, - uint16_t *SIperiod, - ARFCN_ValueEUTRA_t *ul_CarrierFreq, - long *ul_Bandwidth, - AdditionalSpectrumEmission_t *additionalSpectrumEmission, - struct MBSFN_SubframeConfigList *mbsfn_SubframeConfigList + MeasObjectToAddMod_t ** measObj, + MAC_MainConfig_t * mac_MainConfig, + long logicalChannelIdentity, + LogicalChannelConfig_t * logicalChannelConfig, + MeasGapConfig_t * measGapConfig, + TDD_Config_t * tdd_Config, + MobilityControlInfo_t * mobilityControlInfo, + SchedulingInfoList_t * schedulingInfoList, + uint32_t ul_CarrierFreq, + long *ul_Bandwidth, + AdditionalSpectrumEmission_t * + additionalSpectrumEmission, + struct MBSFN_SubframeConfigList + *mbsfn_SubframeConfigList #if defined(Rel10) || defined(Rel14) - ,uint8_t MBMS_Flag, - MBSFN_AreaInfoList_r9_t *mbsfn_AreaInfoList, - PMCH_InfoList_r9_t *pmch_InfoList + , uint8_t MBMS_Flag, + MBSFN_AreaInfoList_r9_t * mbsfn_AreaInfoList, + PMCH_InfoList_r9_t * pmch_InfoList #endif -#ifdef CBA - ,uint8_t num_active_cba_groups, - uint16_t cba_rnti +#ifdef Rel14 + , + SystemInformationBlockType1_v1310_IEs_t * + sib1_v13ext #endif - ) + ) { - int i; + int i; - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_IN); + int UE_id = -1; + eNB_MAC_INST *eNB = RC.mac[Mod_idP]; + UE_list_t *UE_list = &eNB->UE_list; - LOG_I(MAC,"[CONFIG][UE %d] Configuring MAC/PHY from eNB %d\n",Mod_idP,eNB_index); - - if (tdd_Config != NULL) { - UE_mac_inst[Mod_idP].tdd_Config = tdd_Config; - } - + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_IN); - if (tdd_Config && SIwindowsize && SIperiod) { - phy_config_sib1_ue(Mod_idP,0,eNB_index,tdd_Config,*SIwindowsize,*SIperiod); - } - if (radioResourceConfigCommon!=NULL) { - UE_mac_inst[Mod_idP].radioResourceConfigCommon = radioResourceConfigCommon; - phy_config_sib2_ue(Mod_idP,0,eNB_index,radioResourceConfigCommon,ul_CarrierFreq,ul_Bandwidth,additionalSpectrumEmission,mbsfn_SubframeConfigList); - } + if (mib != NULL) { + if (RC.mac == NULL) + l2_init_eNB(); - // SRB2_lchan_config->choice.explicitValue.ul_SpecificParameters->logicalChannelGroup - if (logicalChannelConfig!= NULL) { - LOG_I(MAC,"[CONFIG][UE %d] Applying RRC logicalChannelConfig from eNB%d\n",Mod_idP,eNB_index); - UE_mac_inst[Mod_idP].logicalChannelConfig[logicalChannelIdentity]=logicalChannelConfig; - UE_mac_inst[Mod_idP].scheduling_info.Bj[logicalChannelIdentity]=0; // initilize the bucket for this lcid - - AssertFatal(logicalChannelConfig->ul_SpecificParameters!=NULL, - "[UE %d] LCID %ld NULL ul_SpecificParameters\n", - Mod_idP,logicalChannelIdentity); - UE_mac_inst[Mod_idP].scheduling_info.bucket_size[logicalChannelIdentity]=logicalChannelConfig->ul_SpecificParameters->prioritisedBitRate * - logicalChannelConfig->ul_SpecificParameters->bucketSizeDuration; // set the max bucket size - if (logicalChannelConfig->ul_SpecificParameters->logicalChannelGroup != NULL) { - UE_mac_inst[Mod_idP].scheduling_info.LCGID[logicalChannelIdentity]=*logicalChannelConfig->ul_SpecificParameters->logicalChannelGroup; - LOG_D(MAC,"[CONFIG][UE %d] LCID %ld is attached to the LCGID %ld\n",Mod_idP,logicalChannelIdentity,*logicalChannelConfig->ul_SpecificParameters->logicalChannelGroup); + mac_top_init_eNB(); + + RC.mac[Mod_idP]->common_channels[CC_idP].mib = mib; + RC.mac[Mod_idP]->common_channels[CC_idP].physCellId = physCellId; + RC.mac[Mod_idP]->common_channels[CC_idP].p_eNB = p_eNB; + RC.mac[Mod_idP]->common_channels[CC_idP].Ncp = Ncp; + RC.mac[Mod_idP]->common_channels[CC_idP].eutra_band = eutra_band; + RC.mac[Mod_idP]->common_channels[CC_idP].dl_CarrierFreq = + dl_CarrierFreq; + + LOG_I(MAC, + "Configuring MIB for instance %d, CCid %d : (band %d,N_RB_DL %d,Nid_cell %d,p %d,DL freq %u,phich_config.resource %d, phich_config.duration %d)\n", + Mod_idP, + CC_idP, + eutra_band, + to_prb((int) mib->message.dl_Bandwidth), + physCellId, + p_eNB, + dl_CarrierFreq, + (int) mib->message.phich_Config.phich_Resource, + (int) mib->message.phich_Config.phich_Duration); + + config_mib(Mod_idP, CC_idP, + eutra_band, + mib->message.dl_Bandwidth, + &mib->message.phich_Config, + physCellId, Ncp, p_eNB, dl_CarrierFreq, ul_CarrierFreq +#ifdef Rel14 + , pbch_repetition +#endif + ); + + mac_init_cell_params(Mod_idP, CC_idP); } - else { - UE_mac_inst[Mod_idP].scheduling_info.LCGID[logicalChannelIdentity] = MAX_NUM_LCGID; + if (schedulingInfoList != NULL) { + RC.mac[Mod_idP]->common_channels[CC_idP].tdd_Config = tdd_Config; + RC.mac[Mod_idP]->common_channels[CC_idP].schedulingInfoList = + schedulingInfoList; + config_sib1(Mod_idP, CC_idP, tdd_Config); } - UE_mac_inst[Mod_idP].scheduling_info.LCID_buffer_remain[logicalChannelIdentity] = 0; - } +#ifdef Rel14 + if (sib1_v13ext != NULL) { + RC.mac[Mod_idP]->common_channels[CC_idP].sib1_v13ext = sib1_v13ext; + } +#endif + if (radioResourceConfigCommon != NULL) { + LOG_I(MAC, "[CONFIG]SIB2/3 Contents (partial)\n"); + LOG_I(MAC, "[CONFIG]pusch_config_common.n_SB = %ld\n", + radioResourceConfigCommon-> + pusch_ConfigCommon.pusch_ConfigBasic.n_SB); + LOG_I(MAC, "[CONFIG]pusch_config_common.hoppingMode = %ld\n", + radioResourceConfigCommon-> + pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode); + LOG_I(MAC, + "[CONFIG]pusch_config_common.pusch_HoppingOffset = %ld\n", + radioResourceConfigCommon-> + pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset); + LOG_I(MAC, "[CONFIG]pusch_config_common.enable64QAM = %d\n", + radioResourceConfigCommon-> + pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM); + LOG_I(MAC, + "[CONFIG]pusch_config_common.groupHoppingEnabled = %d\n", + radioResourceConfigCommon-> + pusch_ConfigCommon.ul_ReferenceSignalsPUSCH. + groupHoppingEnabled); + LOG_I(MAC, + "[CONFIG]pusch_config_common.groupAssignmentPUSCH = %ld\n", + radioResourceConfigCommon-> + pusch_ConfigCommon.ul_ReferenceSignalsPUSCH. + groupAssignmentPUSCH); + LOG_I(MAC, + "[CONFIG]pusch_config_common.sequenceHoppingEnabled = %d\n", + radioResourceConfigCommon-> + pusch_ConfigCommon.ul_ReferenceSignalsPUSCH. + sequenceHoppingEnabled); + LOG_I(MAC, "[CONFIG]pusch_config_common.cyclicShift = %ld\n", + radioResourceConfigCommon-> + pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift); - if (mac_MainConfig != NULL) { - LOG_I(MAC,"[CONFIG][UE%d] Applying RRC macMainConfig from eNB%d\n",Mod_idP,eNB_index); - UE_mac_inst[Mod_idP].macConfig=mac_MainConfig; - UE_mac_inst[Mod_idP].measGapConfig=measGapConfig; - - if (mac_MainConfig->ul_SCH_Config) { - - if (mac_MainConfig->ul_SCH_Config->periodicBSR_Timer) { - UE_mac_inst[Mod_idP].scheduling_info.periodicBSR_Timer = (uint16_t) *mac_MainConfig->ul_SCH_Config->periodicBSR_Timer; - } else { - UE_mac_inst[Mod_idP].scheduling_info.periodicBSR_Timer = + AssertFatal(radioResourceConfigCommon-> + rach_ConfigCommon.maxHARQ_Msg3Tx > 0, + "radioResourceconfigCommon %d == 0\n", + (int) radioResourceConfigCommon-> + rach_ConfigCommon.maxHARQ_Msg3Tx); + + RC.mac[Mod_idP]->common_channels[CC_idP]. + radioResourceConfigCommon = radioResourceConfigCommon; + if (ul_CarrierFreq > 0) + RC.mac[Mod_idP]->common_channels[CC_idP].ul_CarrierFreq = + ul_CarrierFreq; + if (ul_Bandwidth) + RC.mac[Mod_idP]->common_channels[CC_idP].ul_Bandwidth = + *ul_Bandwidth; + else + RC.mac[Mod_idP]->common_channels[CC_idP].ul_Bandwidth = + RC.mac[Mod_idP]->common_channels[CC_idP].mib->message. + dl_Bandwidth; + + config_sib2(Mod_idP, CC_idP, radioResourceConfigCommon, +#ifdef Rel14 + radioResourceConfigCommon_BR, +#endif + NULL, ul_Bandwidth, additionalSpectrumEmission, + mbsfn_SubframeConfigList); + + + } + // SRB2_lchan_config->choice.explicitValue.ul_SpecificParameters->logicalChannelGroup + if (logicalChannelConfig != NULL) { // check for eMTC specific things + UE_id = find_UE_id(Mod_idP, rntiP); + + if (UE_id == -1) { + LOG_E(MAC, "%s:%d:%s: ERROR, UE_id == -1\n", __FILE__, + __LINE__, __FUNCTION__); + } else { + if (logicalChannelConfig) + UE_list-> + UE_template[CC_idP][UE_id].lcgidmap + [logicalChannelIdentity] = + *logicalChannelConfig-> + ul_SpecificParameters->logicalChannelGroup; + else + UE_list-> + UE_template[CC_idP][UE_id].lcgidmap + [logicalChannelIdentity] = 0; + } + } + + + if (physicalConfigDedicated != NULL) { + UE_id = find_UE_id(Mod_idP, rntiP); + + if (UE_id == -1) + LOG_E(MAC, "%s:%d:%s: ERROR, UE_id == -1\n", __FILE__, + __LINE__, __FUNCTION__); + else + UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated = + physicalConfigDedicated; + } + + +#if defined(Rel10) || defined(Rel14) + + if (sCellToAddMod_r10 != NULL) { + UE_id = find_UE_id(Mod_idP, rntiP); + if (UE_id == -1) + LOG_E(MAC, "%s:%d:%s: ERROR, UE_id == -1\n", __FILE__, + __LINE__, __FUNCTION__); + else + config_dedicated_scell(Mod_idP, rntiP, sCellToAddMod_r10); + + } +#endif + + + + + if (mbsfn_SubframeConfigList != NULL) { + LOG_I(MAC, + "[eNB %d][CONFIG] Received %d subframe allocation pattern for MBSFN\n", + Mod_idP, mbsfn_SubframeConfigList->list.count); + RC.mac[Mod_idP]->common_channels[0].num_sf_allocation_pattern = + mbsfn_SubframeConfigList->list.count; + + for (i = 0; i < mbsfn_SubframeConfigList->list.count; i++) { + RC.mac[Mod_idP]->common_channels[0].mbsfn_SubframeConfig[i] = + mbsfn_SubframeConfigList->list.array[i]; + LOG_I(MAC, + "[eNB %d][CONFIG] MBSFN_SubframeConfig[%d] pattern is %x\n", + Mod_idP, i, + RC.mac[Mod_idP]-> + common_channels[0].mbsfn_SubframeConfig[i]-> + subframeAllocation.choice.oneFrame.buf[0]); + } + +#ifdef Rel10 + RC.mac[Mod_idP]->common_channels[0].MBMS_flag = MBMS_Flag; +#endif + } +#if defined(Rel10) || defined(Rel14) + + if (mbsfn_AreaInfoList != NULL) { + // One eNB could be part of multiple mbsfn syc area, this could change over time so reset each time + LOG_I(MAC, "[eNB %d][CONFIG] Received %d MBSFN Area Info\n", + Mod_idP, mbsfn_AreaInfoList->list.count); + RC.mac[Mod_idP]->common_channels[0].num_active_mbsfn_area = + mbsfn_AreaInfoList->list.count; + + for (i = 0; i < mbsfn_AreaInfoList->list.count; i++) { + RC.mac[Mod_idP]->common_channels[0].mbsfn_AreaInfo[i] = + mbsfn_AreaInfoList->list.array[i]; + LOG_I(MAC, + "[eNB %d][CONFIG] MBSFN_AreaInfo[%d]: MCCH Repetition Period = %ld\n", + Mod_idP, i, + RC.mac[Mod_idP]->common_channels[0]. + mbsfn_AreaInfo[i]->mcch_Config_r9. + mcch_RepetitionPeriod_r9); + // config_sib13(Mod_idP,0,i,RC.mac[Mod_idP]->common_channels[0].mbsfn_AreaInfo[i]->mbsfn_AreaId_r9); + } + } + + if (pmch_InfoList != NULL) { + + // LOG_I(MAC,"DUY: lcid when entering rrc_mac config_req is %02d\n",(pmch_InfoList->list.array[0]->mbms_SessionInfoList_r9.list.array[0]->logicalChannelIdentity_r9)); + + LOG_I(MAC, "[CONFIG] Number of PMCH in this MBSFN Area %d\n", + pmch_InfoList->list.count); + + for (i = 0; i < pmch_InfoList->list.count; i++) { + RC.mac[Mod_idP]->common_channels[0].pmch_Config[i] = + &pmch_InfoList->list.array[i]->pmch_Config_r9; + + LOG_I(MAC, + "[CONFIG] PMCH[%d]: This PMCH stop (sf_AllocEnd_r9) at subframe %ldth\n", + i, + RC.mac[Mod_idP]->common_channels[0]. + pmch_Config[i]->sf_AllocEnd_r9); + LOG_I(MAC, "[CONFIG] PMCH[%d]: mch_Scheduling_Period = %ld\n", + i, + RC.mac[Mod_idP]->common_channels[0]. + pmch_Config[i]->mch_SchedulingPeriod_r9); + LOG_I(MAC, "[CONFIG] PMCH[%d]: dataMCS = %ld\n", i, + RC.mac[Mod_idP]->common_channels[0]. + pmch_Config[i]->dataMCS_r9); + + // MBMS session info list in each MCH + RC.mac[Mod_idP]->common_channels[0].mbms_SessionList[i] = + &pmch_InfoList->list.array[i]->mbms_SessionInfoList_r9; + LOG_I(MAC, "PMCH[%d] Number of session (MTCH) is: %d\n", i, + RC.mac[Mod_idP]->common_channels[0]. + mbms_SessionList[i]->list.count); + } + } +#endif + + if (radioResourceConfigCommon != NULL) { + AssertFatal(RC.mac[Mod_idP]->if_inst->PHY_config_req != NULL, + "if_inst->phy_config_request is null\n"); + PHY_Config_t phycfg; + phycfg.Mod_id = Mod_idP; + phycfg.CC_id = CC_idP; + phycfg.cfg = &RC.mac[Mod_idP]->config[CC_idP]; + + if (RC.mac[Mod_idP]->if_inst->PHY_config_req) + RC.mac[Mod_idP]->if_inst->PHY_config_req(&phycfg); + } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT); + + return (0); +} + +int +rrc_mac_config_req_ue(module_id_t Mod_idP, + int CC_idP, + uint8_t eNB_index, + RadioResourceConfigCommonSIB_t * + radioResourceConfigCommon, + struct PhysicalConfigDedicated + *physicalConfigDedicated, +#if defined(Rel10) || defined(Rel14) + SCellToAddMod_r10_t * sCellToAddMod_r10, + //struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10, +#endif + MeasObjectToAddMod_t ** measObj, + MAC_MainConfig_t * mac_MainConfig, + long logicalChannelIdentity, + LogicalChannelConfig_t * logicalChannelConfig, + MeasGapConfig_t * measGapConfig, + TDD_Config_t * tdd_Config, + MobilityControlInfo_t * mobilityControlInfo, + uint8_t * SIwindowsize, + uint16_t * SIperiod, + ARFCN_ValueEUTRA_t * ul_CarrierFreq, + long *ul_Bandwidth, + AdditionalSpectrumEmission_t * + additionalSpectrumEmission, + struct MBSFN_SubframeConfigList + *mbsfn_SubframeConfigList +#if defined(Rel10) || defined(Rel14) + , uint8_t MBMS_Flag, + MBSFN_AreaInfoList_r9_t * mbsfn_AreaInfoList, + PMCH_InfoList_r9_t * pmch_InfoList +#endif +#ifdef CBA + , uint8_t num_active_cba_groups, uint16_t cba_rnti +#endif + ) +{ + + int i; + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_IN); + + LOG_I(MAC, "[CONFIG][UE %d] Configuring MAC/PHY from eNB %d\n", + Mod_idP, eNB_index); + + if (tdd_Config != NULL) { + UE_mac_inst[Mod_idP].tdd_Config = tdd_Config; + } + + + if (tdd_Config && SIwindowsize && SIperiod) { + phy_config_sib1_ue(Mod_idP, 0, eNB_index, tdd_Config, + *SIwindowsize, *SIperiod); + } + + if (radioResourceConfigCommon != NULL) { + UE_mac_inst[Mod_idP].radioResourceConfigCommon = + radioResourceConfigCommon; + phy_config_sib2_ue(Mod_idP, 0, eNB_index, + radioResourceConfigCommon, ul_CarrierFreq, + ul_Bandwidth, additionalSpectrumEmission, + mbsfn_SubframeConfigList); + } + // SRB2_lchan_config->choice.explicitValue.ul_SpecificParameters->logicalChannelGroup + if (logicalChannelConfig != NULL) { + LOG_I(MAC, + "[CONFIG][UE %d] Applying RRC logicalChannelConfig from eNB%d\n", + Mod_idP, eNB_index); + UE_mac_inst[Mod_idP].logicalChannelConfig[logicalChannelIdentity] = + logicalChannelConfig; + UE_mac_inst[Mod_idP].scheduling_info.Bj[logicalChannelIdentity] = 0; // initilize the bucket for this lcid + + AssertFatal(logicalChannelConfig->ul_SpecificParameters != NULL, + "[UE %d] LCID %ld NULL ul_SpecificParameters\n", + Mod_idP, logicalChannelIdentity); + UE_mac_inst[Mod_idP].scheduling_info.bucket_size[logicalChannelIdentity] = logicalChannelConfig->ul_SpecificParameters->prioritisedBitRate * logicalChannelConfig->ul_SpecificParameters->bucketSizeDuration; // set the max bucket size + if (logicalChannelConfig->ul_SpecificParameters-> + logicalChannelGroup != NULL) { + UE_mac_inst[Mod_idP].scheduling_info. + LCGID[logicalChannelIdentity] = + *logicalChannelConfig->ul_SpecificParameters-> + logicalChannelGroup; + LOG_D(MAC, + "[CONFIG][UE %d] LCID %ld is attached to the LCGID %ld\n", + Mod_idP, logicalChannelIdentity, + *logicalChannelConfig-> + ul_SpecificParameters->logicalChannelGroup); + } else { + UE_mac_inst[Mod_idP].scheduling_info. + LCGID[logicalChannelIdentity] = MAX_NUM_LCGID; + } + UE_mac_inst[Mod_idP]. + scheduling_info.LCID_buffer_remain[logicalChannelIdentity] = 0; + } + + if (mac_MainConfig != NULL) { + LOG_I(MAC, + "[CONFIG][UE%d] Applying RRC macMainConfig from eNB%d\n", + Mod_idP, eNB_index); + UE_mac_inst[Mod_idP].macConfig = mac_MainConfig; + UE_mac_inst[Mod_idP].measGapConfig = measGapConfig; + + if (mac_MainConfig->ul_SCH_Config) { + + if (mac_MainConfig->ul_SCH_Config->periodicBSR_Timer) { + UE_mac_inst[Mod_idP].scheduling_info.periodicBSR_Timer = + (uint16_t) * + mac_MainConfig->ul_SCH_Config->periodicBSR_Timer; + } else { + UE_mac_inst[Mod_idP].scheduling_info.periodicBSR_Timer = #ifndef Rel14 - (uint16_t) MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_infinity + (uint16_t) + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_infinity #else - (uint16_t) PeriodicBSR_Timer_r12_infinity; + (uint16_t) PeriodicBSR_Timer_r12_infinity; #endif - ; - } - - if (mac_MainConfig->ul_SCH_Config->maxHARQ_Tx) { - UE_mac_inst[Mod_idP].scheduling_info.maxHARQ_Tx = (uint16_t) *mac_MainConfig->ul_SCH_Config->maxHARQ_Tx; - } else { - UE_mac_inst[Mod_idP].scheduling_info.maxHARQ_Tx = (uint16_t) MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n5; - } - phy_config_harq_ue(Mod_idP,0,eNB_index,UE_mac_inst[Mod_idP].scheduling_info.maxHARQ_Tx); - - if (mac_MainConfig->ul_SCH_Config->retxBSR_Timer) { - UE_mac_inst[Mod_idP].scheduling_info.retxBSR_Timer = (uint16_t) mac_MainConfig->ul_SCH_Config->retxBSR_Timer; - } else { + ; + } + + if (mac_MainConfig->ul_SCH_Config->maxHARQ_Tx) { + UE_mac_inst[Mod_idP].scheduling_info.maxHARQ_Tx = + (uint16_t) * mac_MainConfig->ul_SCH_Config->maxHARQ_Tx; + } else { + UE_mac_inst[Mod_idP].scheduling_info.maxHARQ_Tx = + (uint16_t) + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n5; + } + phy_config_harq_ue(Mod_idP, 0, eNB_index, + UE_mac_inst[Mod_idP]. + scheduling_info.maxHARQ_Tx); + + if (mac_MainConfig->ul_SCH_Config->retxBSR_Timer) { + UE_mac_inst[Mod_idP].scheduling_info.retxBSR_Timer = + (uint16_t) mac_MainConfig->ul_SCH_Config-> + retxBSR_Timer; + } else { #ifndef Rel14 - UE_mac_inst[Mod_idP].scheduling_info.retxBSR_Timer = (uint16_t)MAC_MainConfig__ul_SCH_Config__retxBSR_Timer_sf2560; + UE_mac_inst[Mod_idP].scheduling_info.retxBSR_Timer = + (uint16_t) + MAC_MainConfig__ul_SCH_Config__retxBSR_Timer_sf2560; #else - UE_mac_inst[Mod_idP].scheduling_info.retxBSR_Timer = (uint16_t)RetxBSR_Timer_r12_sf2560; + UE_mac_inst[Mod_idP].scheduling_info.retxBSR_Timer = + (uint16_t) RetxBSR_Timer_r12_sf2560; #endif - } - } - - -#if defined(Rel10) || defined(Rel14) - - if (mac_MainConfig->ext1 && mac_MainConfig->ext1->sr_ProhibitTimer_r9) { - UE_mac_inst[Mod_idP].scheduling_info.sr_ProhibitTimer = (uint16_t) *mac_MainConfig->ext1->sr_ProhibitTimer_r9; - } else { - UE_mac_inst[Mod_idP].scheduling_info.sr_ProhibitTimer = 0; - } - - if (mac_MainConfig->ext2 && mac_MainConfig->ext2->mac_MainConfig_v1020) { - if (mac_MainConfig->ext2->mac_MainConfig_v1020->extendedBSR_Sizes_r10) { - UE_mac_inst[Mod_idP].scheduling_info.extendedBSR_Sizes_r10 = (uint16_t) *mac_MainConfig->ext2->mac_MainConfig_v1020->extendedBSR_Sizes_r10; - } else { - UE_mac_inst[Mod_idP].scheduling_info.extendedBSR_Sizes_r10 = (uint16_t)0; - } - if (mac_MainConfig->ext2->mac_MainConfig_v1020->extendedPHR_r10) { - UE_mac_inst[Mod_idP].scheduling_info.extendedPHR_r10 = (uint16_t) *mac_MainConfig->ext2->mac_MainConfig_v1020->extendedPHR_r10; - } else { - UE_mac_inst[Mod_idP].scheduling_info.extendedPHR_r10 = (uint16_t)0; - } - } else { - UE_mac_inst[Mod_idP].scheduling_info.extendedBSR_Sizes_r10 = (uint16_t)0; - UE_mac_inst[Mod_idP].scheduling_info.extendedPHR_r10 = (uint16_t)0; - } -#endif - UE_mac_inst[Mod_idP].scheduling_info.periodicBSR_SF = MAC_UE_BSR_TIMER_NOT_RUNNING; - UE_mac_inst[Mod_idP].scheduling_info.retxBSR_SF = MAC_UE_BSR_TIMER_NOT_RUNNING; - - UE_mac_inst[Mod_idP].BSR_reporting_active = BSR_TRIGGER_NONE; - - LOG_D(MAC,"[UE %d]: periodic BSR %d (SF), retx BSR %d (SF)\n", - Mod_idP, - UE_mac_inst[Mod_idP].scheduling_info.periodicBSR_SF, - UE_mac_inst[Mod_idP].scheduling_info.retxBSR_SF); - - UE_mac_inst[Mod_idP].scheduling_info.drx_config = mac_MainConfig->drx_Config; - UE_mac_inst[Mod_idP].scheduling_info.phr_config = mac_MainConfig->phr_Config; - - if (mac_MainConfig->phr_Config) { - UE_mac_inst[Mod_idP].PHR_state = mac_MainConfig->phr_Config->present; - UE_mac_inst[Mod_idP].PHR_reconfigured = 1; - UE_mac_inst[Mod_idP].scheduling_info.periodicPHR_Timer = mac_MainConfig->phr_Config->choice.setup.periodicPHR_Timer; - UE_mac_inst[Mod_idP].scheduling_info.prohibitPHR_Timer = mac_MainConfig->phr_Config->choice.setup.prohibitPHR_Timer; - UE_mac_inst[Mod_idP].scheduling_info.PathlossChange = mac_MainConfig->phr_Config->choice.setup.dl_PathlossChange; - } else { - UE_mac_inst[Mod_idP].PHR_reconfigured = 0; - UE_mac_inst[Mod_idP].PHR_state = MAC_MainConfig__phr_Config_PR_setup; - UE_mac_inst[Mod_idP].scheduling_info.periodicPHR_Timer = MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf20; - UE_mac_inst[Mod_idP].scheduling_info.prohibitPHR_Timer = MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf20; - UE_mac_inst[Mod_idP].scheduling_info.PathlossChange = MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB1; - } - - UE_mac_inst[Mod_idP].scheduling_info.periodicPHR_SF = get_sf_perioidicPHR_Timer(UE_mac_inst[Mod_idP].scheduling_info.periodicPHR_Timer); - UE_mac_inst[Mod_idP].scheduling_info.prohibitPHR_SF = get_sf_prohibitPHR_Timer(UE_mac_inst[Mod_idP].scheduling_info.prohibitPHR_Timer); - UE_mac_inst[Mod_idP].scheduling_info.PathlossChange_db = get_db_dl_PathlossChange(UE_mac_inst[Mod_idP].scheduling_info.PathlossChange); - UE_mac_inst[Mod_idP].PHR_reporting_active = 0; - LOG_D(MAC,"[UE %d] config PHR (%d): periodic %d (SF) prohibit %d (SF) pathlosschange %d (db) \n", - Mod_idP, - (mac_MainConfig->phr_Config)?mac_MainConfig->phr_Config->present:-1, - UE_mac_inst[Mod_idP].scheduling_info.periodicPHR_SF, - UE_mac_inst[Mod_idP].scheduling_info.prohibitPHR_SF, - UE_mac_inst[Mod_idP].scheduling_info.PathlossChange_db); - } - - - if (physicalConfigDedicated != NULL) { - phy_config_dedicated_ue(Mod_idP,0,eNB_index,physicalConfigDedicated); - UE_mac_inst[Mod_idP].physicalConfigDedicated=physicalConfigDedicated; // for SR proc - } - + } + } #if defined(Rel10) || defined(Rel14) - if (sCellToAddMod_r10 != NULL) { - - - phy_config_dedicated_scell_ue(Mod_idP,eNB_index,sCellToAddMod_r10,1); - UE_mac_inst[Mod_idP].physicalConfigDedicatedSCell_r10 = sCellToAddMod_r10->radioResourceConfigDedicatedSCell_r10->physicalConfigDedicatedSCell_r10; // using SCell index 0 - } - + if (mac_MainConfig->ext1 + && mac_MainConfig->ext1->sr_ProhibitTimer_r9) { + UE_mac_inst[Mod_idP].scheduling_info.sr_ProhibitTimer = + (uint16_t) * mac_MainConfig->ext1->sr_ProhibitTimer_r9; + } else { + UE_mac_inst[Mod_idP].scheduling_info.sr_ProhibitTimer = 0; + } + if (mac_MainConfig->ext2 + && mac_MainConfig->ext2->mac_MainConfig_v1020) { + if (mac_MainConfig->ext2-> + mac_MainConfig_v1020->extendedBSR_Sizes_r10) { + UE_mac_inst[Mod_idP].scheduling_info. + extendedBSR_Sizes_r10 = + (uint16_t) * + mac_MainConfig->ext2-> + mac_MainConfig_v1020->extendedBSR_Sizes_r10; + } else { + UE_mac_inst[Mod_idP].scheduling_info. + extendedBSR_Sizes_r10 = (uint16_t) 0; + } + if (mac_MainConfig->ext2->mac_MainConfig_v1020-> + extendedPHR_r10) { + UE_mac_inst[Mod_idP].scheduling_info.extendedPHR_r10 = + (uint16_t) * + mac_MainConfig->ext2->mac_MainConfig_v1020-> + extendedPHR_r10; + } else { + UE_mac_inst[Mod_idP].scheduling_info.extendedPHR_r10 = + (uint16_t) 0; + } + } else { + UE_mac_inst[Mod_idP].scheduling_info.extendedBSR_Sizes_r10 = + (uint16_t) 0; + UE_mac_inst[Mod_idP].scheduling_info.extendedPHR_r10 = + (uint16_t) 0; + } #endif + UE_mac_inst[Mod_idP].scheduling_info.periodicBSR_SF = + MAC_UE_BSR_TIMER_NOT_RUNNING; + UE_mac_inst[Mod_idP].scheduling_info.retxBSR_SF = + MAC_UE_BSR_TIMER_NOT_RUNNING; - if (measObj!= NULL) { - if (measObj[0]!= NULL) { - UE_mac_inst[Mod_idP].n_adj_cells = measObj[0]->measObject.choice.measObjectEUTRA.cellsToAddModList->list.count; - LOG_I(MAC,"Number of adjacent cells %d\n",UE_mac_inst[Mod_idP].n_adj_cells); - - for (i=0; imeasObject.choice.measObjectEUTRA.cellsToAddModList->list.array[i]->physCellId; - LOG_I(MAC,"Cell %d : Nid_cell %d\n",i,UE_mac_inst[Mod_idP].adj_cell_id[i]); - } - - phy_config_meas_ue(Mod_idP,0,eNB_index,UE_mac_inst[Mod_idP].n_adj_cells,UE_mac_inst[Mod_idP].adj_cell_id); + UE_mac_inst[Mod_idP].BSR_reporting_active = BSR_TRIGGER_NONE; + + LOG_D(MAC, "[UE %d]: periodic BSR %d (SF), retx BSR %d (SF)\n", + Mod_idP, + UE_mac_inst[Mod_idP].scheduling_info.periodicBSR_SF, + UE_mac_inst[Mod_idP].scheduling_info.retxBSR_SF); + + UE_mac_inst[Mod_idP].scheduling_info.drx_config = + mac_MainConfig->drx_Config; + UE_mac_inst[Mod_idP].scheduling_info.phr_config = + mac_MainConfig->phr_Config; + + if (mac_MainConfig->phr_Config) { + UE_mac_inst[Mod_idP].PHR_state = + mac_MainConfig->phr_Config->present; + UE_mac_inst[Mod_idP].PHR_reconfigured = 1; + UE_mac_inst[Mod_idP].scheduling_info.periodicPHR_Timer = + mac_MainConfig->phr_Config->choice.setup.periodicPHR_Timer; + UE_mac_inst[Mod_idP].scheduling_info.prohibitPHR_Timer = + mac_MainConfig->phr_Config->choice.setup.prohibitPHR_Timer; + UE_mac_inst[Mod_idP].scheduling_info.PathlossChange = + mac_MainConfig->phr_Config->choice.setup.dl_PathlossChange; + } else { + UE_mac_inst[Mod_idP].PHR_reconfigured = 0; + UE_mac_inst[Mod_idP].PHR_state = + MAC_MainConfig__phr_Config_PR_setup; + UE_mac_inst[Mod_idP].scheduling_info.periodicPHR_Timer = + MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf20; + UE_mac_inst[Mod_idP].scheduling_info.prohibitPHR_Timer = + MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf20; + UE_mac_inst[Mod_idP].scheduling_info.PathlossChange = + MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB1; + } + + UE_mac_inst[Mod_idP].scheduling_info.periodicPHR_SF = + get_sf_perioidicPHR_Timer(UE_mac_inst[Mod_idP]. + scheduling_info.periodicPHR_Timer); + UE_mac_inst[Mod_idP].scheduling_info.prohibitPHR_SF = + get_sf_prohibitPHR_Timer(UE_mac_inst[Mod_idP]. + scheduling_info.prohibitPHR_Timer); + UE_mac_inst[Mod_idP].scheduling_info.PathlossChange_db = + get_db_dl_PathlossChange(UE_mac_inst[Mod_idP]. + scheduling_info.PathlossChange); + UE_mac_inst[Mod_idP].PHR_reporting_active = 0; + LOG_D(MAC, + "[UE %d] config PHR (%d): periodic %d (SF) prohibit %d (SF) pathlosschange %d (db) \n", + Mod_idP, + (mac_MainConfig->phr_Config) ? mac_MainConfig-> + phr_Config->present : -1, + UE_mac_inst[Mod_idP].scheduling_info.periodicPHR_SF, + UE_mac_inst[Mod_idP].scheduling_info.prohibitPHR_SF, + UE_mac_inst[Mod_idP].scheduling_info.PathlossChange_db); } - } - if(mobilityControlInfo != NULL) { - - LOG_D(MAC,"[UE%d] MAC Reset procedure triggered by RRC eNB %d \n",Mod_idP,eNB_index); - ue_mac_reset(Mod_idP,eNB_index); - - if(mobilityControlInfo->radioResourceConfigCommon.rach_ConfigCommon) { - memcpy((void *)&UE_mac_inst[Mod_idP].radioResourceConfigCommon->rach_ConfigCommon, - (void *)mobilityControlInfo->radioResourceConfigCommon.rach_ConfigCommon, - sizeof(RACH_ConfigCommon_t)); + if (physicalConfigDedicated != NULL) { + phy_config_dedicated_ue(Mod_idP, 0, eNB_index, + physicalConfigDedicated); + UE_mac_inst[Mod_idP].physicalConfigDedicated = physicalConfigDedicated; // for SR proc } - - memcpy((void *)&UE_mac_inst[Mod_idP].radioResourceConfigCommon->prach_Config.prach_ConfigInfo, - (void *)mobilityControlInfo->radioResourceConfigCommon.prach_Config.prach_ConfigInfo, - sizeof(PRACH_ConfigInfo_t)); - UE_mac_inst[Mod_idP].radioResourceConfigCommon->prach_Config.rootSequenceIndex = mobilityControlInfo->radioResourceConfigCommon.prach_Config.rootSequenceIndex; - - if(mobilityControlInfo->radioResourceConfigCommon.pdsch_ConfigCommon) { - memcpy((void *)&UE_mac_inst[Mod_idP].radioResourceConfigCommon->pdsch_ConfigCommon, - (void *)mobilityControlInfo->radioResourceConfigCommon.pdsch_ConfigCommon, - sizeof(PDSCH_ConfigCommon_t)); - } - - // not a pointer: mobilityControlInfo->radioResourceConfigCommon.pusch_ConfigCommon - memcpy((void *)&UE_mac_inst[Mod_idP].radioResourceConfigCommon->pusch_ConfigCommon, - (void *)&mobilityControlInfo->radioResourceConfigCommon.pusch_ConfigCommon, - sizeof(PUSCH_ConfigCommon_t)); - - if(mobilityControlInfo->radioResourceConfigCommon.phich_Config) { - /* memcpy((void *)&UE_mac_inst[Mod_idP].radioResourceConfigCommon->phich_Config, - (void *)mobilityControlInfo->radioResourceConfigCommon.phich_Config, - sizeof(PHICH_Config_t)); */ - } - - if(mobilityControlInfo->radioResourceConfigCommon.pucch_ConfigCommon) { - memcpy((void *)&UE_mac_inst[Mod_idP].radioResourceConfigCommon->pucch_ConfigCommon, - (void *)mobilityControlInfo->radioResourceConfigCommon.pucch_ConfigCommon, - sizeof(PUCCH_ConfigCommon_t)); - } - - if(mobilityControlInfo->radioResourceConfigCommon.soundingRS_UL_ConfigCommon) { - memcpy((void *)&UE_mac_inst[Mod_idP].radioResourceConfigCommon->soundingRS_UL_ConfigCommon, - (void *)mobilityControlInfo->radioResourceConfigCommon.soundingRS_UL_ConfigCommon, - sizeof(SoundingRS_UL_ConfigCommon_t)); - } - - if(mobilityControlInfo->radioResourceConfigCommon.uplinkPowerControlCommon) { - memcpy((void *)&UE_mac_inst[Mod_idP].radioResourceConfigCommon->uplinkPowerControlCommon, - (void *)mobilityControlInfo->radioResourceConfigCommon.uplinkPowerControlCommon, - sizeof(UplinkPowerControlCommon_t)); - } - - //configure antennaInfoCommon somewhere here.. - if(mobilityControlInfo->radioResourceConfigCommon.p_Max) { - //to be configured - } - - if(mobilityControlInfo->radioResourceConfigCommon.tdd_Config) { - UE_mac_inst[Mod_idP].tdd_Config = mobilityControlInfo->radioResourceConfigCommon.tdd_Config; - } - - if(mobilityControlInfo->radioResourceConfigCommon.ul_CyclicPrefixLength) { - memcpy((void *)&UE_mac_inst[Mod_idP].radioResourceConfigCommon->ul_CyclicPrefixLength, - (void *)mobilityControlInfo->radioResourceConfigCommon.ul_CyclicPrefixLength, - sizeof(UL_CyclicPrefixLength_t)); - } - - // store the previous rnti in case of failure, and set thenew rnti - UE_mac_inst[Mod_idP].crnti_before_ho = UE_mac_inst[Mod_idP].crnti; - UE_mac_inst[Mod_idP].crnti = ((mobilityControlInfo->newUE_Identity.buf[0])|(mobilityControlInfo->newUE_Identity.buf[1]<<8)); - LOG_I(MAC,"[UE %d] Received new identity %x from %d\n", Mod_idP, UE_mac_inst[Mod_idP].crnti, eNB_index); - UE_mac_inst[Mod_idP].rach_ConfigDedicated = malloc(sizeof(*mobilityControlInfo->rach_ConfigDedicated)); - - if (mobilityControlInfo->rach_ConfigDedicated) { - memcpy((void*)UE_mac_inst[Mod_idP].rach_ConfigDedicated, - (void*)mobilityControlInfo->rach_ConfigDedicated, - sizeof(*mobilityControlInfo->rach_ConfigDedicated)); - } - - phy_config_afterHO_ue(Mod_idP,0,eNB_index,mobilityControlInfo,0); - } - - - if (mbsfn_SubframeConfigList != NULL) { - LOG_I(MAC,"[UE %d][CONFIG] Received %d subframe allocation pattern for MBSFN\n", Mod_idP, mbsfn_SubframeConfigList->list.count); - UE_mac_inst[Mod_idP].num_sf_allocation_pattern= mbsfn_SubframeConfigList->list.count; - - for (i=0; ilist.count; i++) { - LOG_I(MAC, "[UE %d] Configuring MBSFN_SubframeConfig %d from received SIB2 \n", Mod_idP, i); - UE_mac_inst[Mod_idP].mbsfn_SubframeConfig[i] = mbsfn_SubframeConfigList->list.array[i]; - // LOG_I("[UE %d] MBSFN_SubframeConfig[%d] pattern is %ld\n", Mod_idP, - // UE_mac_inst[Mod_idP].mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[0]); - } - } - - #if defined(Rel10) || defined(Rel14) - if (mbsfn_AreaInfoList != NULL) { - LOG_I(MAC,"[UE %d][CONFIG] Received %d MBSFN Area Info\n", Mod_idP, mbsfn_AreaInfoList->list.count); - UE_mac_inst[Mod_idP].num_active_mbsfn_area = mbsfn_AreaInfoList->list.count; - - for (i =0; i< mbsfn_AreaInfoList->list.count; i++) { - UE_mac_inst[Mod_idP].mbsfn_AreaInfo[i] = mbsfn_AreaInfoList->list.array[i]; - LOG_I(MAC,"[UE %d] MBSFN_AreaInfo[%d]: MCCH Repetition Period = %ld\n",Mod_idP, i, - UE_mac_inst[Mod_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_RepetitionPeriod_r9); - phy_config_sib13_ue(Mod_idP,0,eNB_index,i,UE_mac_inst[Mod_idP].mbsfn_AreaInfo[i]->mbsfn_AreaId_r9); + if (sCellToAddMod_r10 != NULL) { + + + phy_config_dedicated_scell_ue(Mod_idP, eNB_index, + sCellToAddMod_r10, 1); + UE_mac_inst[Mod_idP].physicalConfigDedicatedSCell_r10 = sCellToAddMod_r10->radioResourceConfigDedicatedSCell_r10->physicalConfigDedicatedSCell_r10; // using SCell index 0 } - } - - if (pmch_InfoList != NULL) { - - // LOG_I(MAC,"DUY: lcid when entering rrc_mac config_req is %02d\n",(pmch_InfoList->list.array[0]->mbms_SessionInfoList_r9.list.array[0]->logicalChannelIdentity_r9)); +#endif - LOG_I(MAC, "[UE %d] Configuring PMCH_config from MCCH MESSAGE \n",Mod_idP); - - for (i =0; i< pmch_InfoList->list.count; i++) { - UE_mac_inst[Mod_idP].pmch_Config[i] = &pmch_InfoList->list.array[i]->pmch_Config_r9; - LOG_I(MAC, "[UE %d] PMCH[%d]: MCH_Scheduling_Period = %ld\n", Mod_idP, i, - UE_mac_inst[Mod_idP].pmch_Config[i]->mch_SchedulingPeriod_r9); + if (measObj != NULL) { + if (measObj[0] != NULL) { + UE_mac_inst[Mod_idP].n_adj_cells = + measObj[0]->measObject.choice. + measObjectEUTRA.cellsToAddModList->list.count; + LOG_I(MAC, "Number of adjacent cells %d\n", + UE_mac_inst[Mod_idP].n_adj_cells); + + for (i = 0; i < UE_mac_inst[Mod_idP].n_adj_cells; i++) { + UE_mac_inst[Mod_idP].adj_cell_id[i] = + measObj[0]->measObject.choice. + measObjectEUTRA.cellsToAddModList->list.array[i]-> + physCellId; + LOG_I(MAC, "Cell %d : Nid_cell %d\n", i, + UE_mac_inst[Mod_idP].adj_cell_id[i]); + } + + phy_config_meas_ue(Mod_idP, 0, eNB_index, + UE_mac_inst[Mod_idP].n_adj_cells, + UE_mac_inst[Mod_idP].adj_cell_id); + } } - - UE_mac_inst[Mod_idP].mcch_status = 1; - } + if (mobilityControlInfo != NULL) { + + LOG_D(MAC, "[UE%d] MAC Reset procedure triggered by RRC eNB %d \n", + Mod_idP, eNB_index); + ue_mac_reset(Mod_idP, eNB_index); + + if (mobilityControlInfo->radioResourceConfigCommon. + rach_ConfigCommon) { + memcpy((void *) + &UE_mac_inst[Mod_idP].radioResourceConfigCommon-> + rach_ConfigCommon, + (void *) mobilityControlInfo-> + radioResourceConfigCommon.rach_ConfigCommon, + sizeof(RACH_ConfigCommon_t)); + } + + memcpy((void *) &UE_mac_inst[Mod_idP]. + radioResourceConfigCommon->prach_Config.prach_ConfigInfo, + (void *) mobilityControlInfo-> + radioResourceConfigCommon.prach_Config.prach_ConfigInfo, + sizeof(PRACH_ConfigInfo_t)); + UE_mac_inst[Mod_idP].radioResourceConfigCommon-> + prach_Config.rootSequenceIndex = + mobilityControlInfo->radioResourceConfigCommon. + prach_Config.rootSequenceIndex; + + if (mobilityControlInfo->radioResourceConfigCommon. + pdsch_ConfigCommon) { + memcpy((void *) + &UE_mac_inst[Mod_idP].radioResourceConfigCommon-> + pdsch_ConfigCommon, + (void *) mobilityControlInfo-> + radioResourceConfigCommon.pdsch_ConfigCommon, + sizeof(PDSCH_ConfigCommon_t)); + } + // not a pointer: mobilityControlInfo->radioResourceConfigCommon.pusch_ConfigCommon + memcpy((void *) &UE_mac_inst[Mod_idP]. + radioResourceConfigCommon->pusch_ConfigCommon, + (void *) &mobilityControlInfo-> + radioResourceConfigCommon.pusch_ConfigCommon, + sizeof(PUSCH_ConfigCommon_t)); + + if (mobilityControlInfo->radioResourceConfigCommon.phich_Config) { + /* memcpy((void *)&UE_mac_inst[Mod_idP].radioResourceConfigCommon->phich_Config, + (void *)mobilityControlInfo->radioResourceConfigCommon.phich_Config, + sizeof(PHICH_Config_t)); */ + } + + if (mobilityControlInfo->radioResourceConfigCommon. + pucch_ConfigCommon) { + memcpy((void *) + &UE_mac_inst[Mod_idP].radioResourceConfigCommon-> + pucch_ConfigCommon, + (void *) mobilityControlInfo-> + radioResourceConfigCommon.pucch_ConfigCommon, + sizeof(PUCCH_ConfigCommon_t)); + } + + if (mobilityControlInfo-> + radioResourceConfigCommon.soundingRS_UL_ConfigCommon) { + memcpy((void *) + &UE_mac_inst[Mod_idP].radioResourceConfigCommon-> + soundingRS_UL_ConfigCommon, + (void *) mobilityControlInfo-> + radioResourceConfigCommon.soundingRS_UL_ConfigCommon, + sizeof(SoundingRS_UL_ConfigCommon_t)); + } + + if (mobilityControlInfo-> + radioResourceConfigCommon.uplinkPowerControlCommon) { + memcpy((void *) + &UE_mac_inst[Mod_idP].radioResourceConfigCommon-> + uplinkPowerControlCommon, + (void *) mobilityControlInfo-> + radioResourceConfigCommon.uplinkPowerControlCommon, + sizeof(UplinkPowerControlCommon_t)); + } + //configure antennaInfoCommon somewhere here.. + if (mobilityControlInfo->radioResourceConfigCommon.p_Max) { + //to be configured + } + + if (mobilityControlInfo->radioResourceConfigCommon.tdd_Config) { + UE_mac_inst[Mod_idP].tdd_Config = + mobilityControlInfo->radioResourceConfigCommon.tdd_Config; + } + + if (mobilityControlInfo-> + radioResourceConfigCommon.ul_CyclicPrefixLength) { + memcpy((void *) + &UE_mac_inst[Mod_idP].radioResourceConfigCommon-> + ul_CyclicPrefixLength, + (void *) mobilityControlInfo-> + radioResourceConfigCommon.ul_CyclicPrefixLength, + sizeof(UL_CyclicPrefixLength_t)); + } + // store the previous rnti in case of failure, and set thenew rnti + UE_mac_inst[Mod_idP].crnti_before_ho = UE_mac_inst[Mod_idP].crnti; + UE_mac_inst[Mod_idP].crnti = + ((mobilityControlInfo-> + newUE_Identity.buf[0]) | (mobilityControlInfo-> + newUE_Identity.buf[1] << 8)); + LOG_I(MAC, "[UE %d] Received new identity %x from %d\n", Mod_idP, + UE_mac_inst[Mod_idP].crnti, eNB_index); + UE_mac_inst[Mod_idP].rach_ConfigDedicated = + malloc(sizeof(*mobilityControlInfo->rach_ConfigDedicated)); + + if (mobilityControlInfo->rach_ConfigDedicated) { + memcpy((void *) UE_mac_inst[Mod_idP].rach_ConfigDedicated, + (void *) mobilityControlInfo->rach_ConfigDedicated, + sizeof(*mobilityControlInfo->rach_ConfigDedicated)); + } + + phy_config_afterHO_ue(Mod_idP, 0, eNB_index, mobilityControlInfo, + 0); + } + + + if (mbsfn_SubframeConfigList != NULL) { + LOG_I(MAC, + "[UE %d][CONFIG] Received %d subframe allocation pattern for MBSFN\n", + Mod_idP, mbsfn_SubframeConfigList->list.count); + UE_mac_inst[Mod_idP].num_sf_allocation_pattern = + mbsfn_SubframeConfigList->list.count; + + for (i = 0; i < mbsfn_SubframeConfigList->list.count; i++) { + LOG_I(MAC, + "[UE %d] Configuring MBSFN_SubframeConfig %d from received SIB2 \n", + Mod_idP, i); + UE_mac_inst[Mod_idP].mbsfn_SubframeConfig[i] = + mbsfn_SubframeConfigList->list.array[i]; + // LOG_I("[UE %d] MBSFN_SubframeConfig[%d] pattern is %ld\n", Mod_idP, + // UE_mac_inst[Mod_idP].mbsfn_SubframeConfig[i]->subframeAllocation.choice.oneFrame.buf[0]); + } + } +#if defined(Rel10) || defined(Rel14) + + if (mbsfn_AreaInfoList != NULL) { + LOG_I(MAC, "[UE %d][CONFIG] Received %d MBSFN Area Info\n", + Mod_idP, mbsfn_AreaInfoList->list.count); + UE_mac_inst[Mod_idP].num_active_mbsfn_area = + mbsfn_AreaInfoList->list.count; + + for (i = 0; i < mbsfn_AreaInfoList->list.count; i++) { + UE_mac_inst[Mod_idP].mbsfn_AreaInfo[i] = + mbsfn_AreaInfoList->list.array[i]; + LOG_I(MAC, + "[UE %d] MBSFN_AreaInfo[%d]: MCCH Repetition Period = %ld\n", + Mod_idP, i, + UE_mac_inst[Mod_idP].mbsfn_AreaInfo[i]-> + mcch_Config_r9.mcch_RepetitionPeriod_r9); + phy_config_sib13_ue(Mod_idP, 0, eNB_index, i, + UE_mac_inst[Mod_idP]. + mbsfn_AreaInfo[i]->mbsfn_AreaId_r9); + } + } + + if (pmch_InfoList != NULL) { + + // LOG_I(MAC,"DUY: lcid when entering rrc_mac config_req is %02d\n",(pmch_InfoList->list.array[0]->mbms_SessionInfoList_r9.list.array[0]->logicalChannelIdentity_r9)); + + LOG_I(MAC, "[UE %d] Configuring PMCH_config from MCCH MESSAGE \n", + Mod_idP); + + for (i = 0; i < pmch_InfoList->list.count; i++) { + UE_mac_inst[Mod_idP].pmch_Config[i] = + &pmch_InfoList->list.array[i]->pmch_Config_r9; + LOG_I(MAC, "[UE %d] PMCH[%d]: MCH_Scheduling_Period = %ld\n", + Mod_idP, i, + UE_mac_inst[Mod_idP]. + pmch_Config[i]->mch_SchedulingPeriod_r9); + } + + UE_mac_inst[Mod_idP].mcch_status = 1; + } #endif #ifdef CBA - if (cba_rnti) { - UE_mac_inst[Mod_idP].cba_rnti[num_active_cba_groups-1] = cba_rnti; - LOG_D(MAC,"[UE %d] configure CBA group %d RNTI %x for eNB %d (total active cba group %d)\n", - Mod_idP,Mod_idP%num_active_cba_groups, cba_rnti,eNB_index,num_active_cba_groups); - phy_config_cba_rnti(Mod_idP,CC_idP,eNB_flagP,eNB_index,cba_rnti,num_active_cba_groups-1, num_active_cba_groups); - } + if (cba_rnti) { + UE_mac_inst[Mod_idP].cba_rnti[num_active_cba_groups - 1] = + cba_rnti; + LOG_D(MAC, + "[UE %d] configure CBA group %d RNTI %x for eNB %d (total active cba group %d)\n", + Mod_idP, Mod_idP % num_active_cba_groups, cba_rnti, + eNB_index, num_active_cba_groups); + phy_config_cba_rnti(Mod_idP, CC_idP, eNB_flagP, eNB_index, + cba_rnti, num_active_cba_groups - 1, + num_active_cba_groups); + } #endif - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT); - return(0); + return (0); } - diff --git a/openair2/LAYER2/MAC/defs.h b/openair2/LAYER2/MAC/defs.h index ba02a35694..65e090e370 100644 --- a/openair2/LAYER2/MAC/defs.h +++ b/openair2/LAYER2/MAC/defs.h @@ -90,12 +90,12 @@ #if defined(Rel10) || defined(Rel14) // Mask for identifying subframe for MBMS -#define MBSFN_TDD_SF3 0x80// for TDD +#define MBSFN_TDD_SF3 0x80 // for TDD #define MBSFN_TDD_SF4 0x40 #define MBSFN_TDD_SF7 0x20 #define MBSFN_TDD_SF8 0x10 #define MBSFN_TDD_SF9 0x08 -#define MBSFN_FDD_SF1 0x80// for FDD +#define MBSFN_FDD_SF1 0x80 // for FDD #define MBSFN_FDD_SF2 0x40 #define MBSFN_FDD_SF3 0x20 #define MBSFN_FDD_SF6 0x10 @@ -111,7 +111,7 @@ #ifdef USER_MODE #define printk printf -#endif //USER_MODE +#endif //USER_MODE /*!\brief Maximum number of logical channl group IDs */ #define MAX_NUM_LCGID 4 @@ -132,17 +132,17 @@ /*!\brief size of buffer status report table */ #define BSR_TABLE_SIZE 64 /*!\brief The power headroom reporting range is from -23 ...+40 dB and beyond, with step 1 */ -#define PHR_MAPPING_OFFSET 23 // if ( x>= -23 ) val = floor (x + 23) +#define PHR_MAPPING_OFFSET 23 // if ( x>= -23 ) val = floor (x + 23) /*!\brief maximum number of resource block groups */ -#define N_RBG_MAX 25 // for 20MHz channel BW +#define N_RBG_MAX 25 // for 20MHz channel BW /*!\brief minimum value for channel quality indicator */ #define MIN_CQI_VALUE 0 /*!\brief maximum value for channel quality indicator */ #define MAX_CQI_VALUE 15 /*!\briefmaximum number of supported bandwidth (1.4, 5, 10, 20 MHz) */ -#define MAX_SUPPORTED_BW 4 +#define MAX_SUPPORTED_BW 4 /*!\brief CQI values range from 1 to 15 (4 bits) */ -#define CQI_VALUE_RANGE 16 +#define CQI_VALUE_RANGE 16 /*!\brief value for indicating BSR Timer is not running */ #define MAC_UE_BSR_TIMER_NOT_RUNNING (0xFFFF) @@ -157,30 +157,30 @@ #define MIN_MAC_HDR_RLC_SIZE (1 + MIN_RLC_PDU_SIZE) /*!\brief maximum number of slices / groups */ -#define MAX_NUM_SLICES 4 +#define MAX_NUM_SLICES 4 /* * eNB part - */ + */ /* * UE/ENB common part - */ + */ /*!\brief MAC header of Random Access Response for Random access preamble identifier (RAPID) */ typedef struct { - uint8_t RAPID:6; - uint8_t T:1; - uint8_t E:1; -} __attribute__((__packed__))RA_HEADER_RAPID; + uint8_t RAPID:6; + uint8_t T:1; + uint8_t E:1; +} __attribute__ ((__packed__)) RA_HEADER_RAPID; /*!\brief MAC header of Random Access Response for backoff indicator (BI)*/ typedef struct { - uint8_t BI:4; - uint8_t R:2; - uint8_t T:1; - uint8_t E:1; -} __attribute__((__packed__))RA_HEADER_BI; + uint8_t BI:4; + uint8_t R:2; + uint8_t T:1; + uint8_t E:1; +} __attribute__ ((__packed__)) RA_HEADER_BI; /* typedef struct { uint64_t padding:16; @@ -212,124 +212,124 @@ typedef struct { */ /*!\brief MAC subheader short with 7bit Length field */ typedef struct { - uint8_t LCID:5; // octet 1 LSB - uint8_t E:1; - uint8_t R:2; // octet 1 MSB - uint8_t L:7; // octet 2 LSB - uint8_t F:1; // octet 2 MSB -} __attribute__((__packed__))SCH_SUBHEADER_SHORT; + uint8_t LCID:5; // octet 1 LSB + uint8_t E:1; + uint8_t R:2; // octet 1 MSB + uint8_t L:7; // octet 2 LSB + uint8_t F:1; // octet 2 MSB +} __attribute__ ((__packed__)) SCH_SUBHEADER_SHORT; /*!\brief MAC subheader long with 15bit Length field */ typedef struct { - uint8_t LCID:5; // octet 1 LSB - uint8_t E:1; - uint8_t R:2; // octet 1 MSB - uint8_t L_MSB:7; - uint8_t F:1; // octet 2 MSB - uint8_t L_LSB:8; - uint8_t padding; -} __attribute__((__packed__))SCH_SUBHEADER_LONG; + uint8_t LCID:5; // octet 1 LSB + uint8_t E:1; + uint8_t R:2; // octet 1 MSB + uint8_t L_MSB:7; + uint8_t F:1; // octet 2 MSB + uint8_t L_LSB:8; + uint8_t padding; +} __attribute__ ((__packed__)) SCH_SUBHEADER_LONG; /*!\brief MAC subheader short without length field */ typedef struct { - uint8_t LCID:5; - uint8_t E:1; - uint8_t R:2; -} __attribute__((__packed__))SCH_SUBHEADER_FIXED; + uint8_t LCID:5; + uint8_t E:1; + uint8_t R:2; +} __attribute__ ((__packed__)) SCH_SUBHEADER_FIXED; /*!\brief mac control element: short buffer status report for a specific logical channel group ID*/ typedef struct { - uint8_t Buffer_size:6; // octet 1 LSB - uint8_t LCGID:2; // octet 1 MSB -} __attribute__((__packed__))BSR_SHORT; + uint8_t Buffer_size:6; // octet 1 LSB + uint8_t LCGID:2; // octet 1 MSB +} __attribute__ ((__packed__)) BSR_SHORT; typedef BSR_SHORT BSR_TRUNCATED; /*!\brief mac control element: long buffer status report for all logical channel group ID*/ typedef struct { - uint8_t Buffer_size3:6; - uint8_t Buffer_size2:6; - uint8_t Buffer_size1:6; - uint8_t Buffer_size0:6; -} __attribute__((__packed__))BSR_LONG; + uint8_t Buffer_size3:6; + uint8_t Buffer_size2:6; + uint8_t Buffer_size1:6; + uint8_t Buffer_size0:6; +} __attribute__ ((__packed__)) BSR_LONG; #define BSR_LONG_SIZE (sizeof(BSR_LONG)) /*!\brief mac control element: timing advance */ typedef struct { - uint8_t TA:6; - uint8_t R:2; -} __attribute__((__packed__))TIMING_ADVANCE_CMD; + uint8_t TA:6; + uint8_t R:2; +} __attribute__ ((__packed__)) TIMING_ADVANCE_CMD; /*!\brief mac control element: power headroom report */ typedef struct { - uint8_t PH:6; - uint8_t R:2; -} __attribute__((__packed__))POWER_HEADROOM_CMD; + uint8_t PH:6; + uint8_t R:2; +} __attribute__ ((__packed__)) POWER_HEADROOM_CMD; /*! \brief MIB payload */ typedef struct { - uint8_t payload[3] ; -} __attribute__((__packed__))MIB_PDU; + uint8_t payload[3]; +} __attribute__ ((__packed__)) MIB_PDU; /*! \brief CCCH payload */ typedef struct { - uint8_t payload[CCCH_PAYLOAD_SIZE_MAX] ; -} __attribute__((__packed__))CCCH_PDU; + uint8_t payload[CCCH_PAYLOAD_SIZE_MAX]; +} __attribute__ ((__packed__)) CCCH_PDU; /*! \brief BCCH payload */ typedef struct { - uint8_t payload[BCCH_PAYLOAD_SIZE_MAX] ; -} __attribute__((__packed__))BCCH_PDU; + uint8_t payload[BCCH_PAYLOAD_SIZE_MAX]; +} __attribute__ ((__packed__)) BCCH_PDU; /*! \brief RAR payload */ typedef struct { - uint8_t payload[RAR_PAYLOAD_SIZE_MAX]; + uint8_t payload[RAR_PAYLOAD_SIZE_MAX]; } __attribute__ ((__packed__)) RAR_PDU; /*! \brief BCCH payload */ typedef struct { - uint8_t payload[PCCH_PAYLOAD_SIZE_MAX] ; -} __attribute__((__packed__))PCCH_PDU; + uint8_t payload[PCCH_PAYLOAD_SIZE_MAX]; +} __attribute__ ((__packed__)) PCCH_PDU; #if defined(Rel10) || defined(Rel14) /*! \brief MCCH payload */ typedef struct { - uint8_t payload[MCCH_PAYLOAD_SIZE_MAX] ; -} __attribute__((__packed__))MCCH_PDU; + uint8_t payload[MCCH_PAYLOAD_SIZE_MAX]; +} __attribute__ ((__packed__)) MCCH_PDU; /*!< \brief MAC control element for activation and deactivation of component carriers */ typedef struct { - uint8_t C7:1;/*!< \brief Component carrier 7 */ - uint8_t C6:1;/*!< \brief Component carrier 6 */ - uint8_t C5:1;/*!< \brief Component carrier 5 */ - uint8_t C4:1;/*!< \brief Component carrier 4 */ - uint8_t C3:1;/*!< \brief Component carrier 3 */ - uint8_t C2:1;/*!< \brief Component carrier 2 */ - uint8_t C1:1;/*!< \brief Component carrier 1 */ - uint8_t R:1;/*!< \brief Reserved */ -} __attribute__((__packed__))CC_ELEMENT; + uint8_t C7:1; /*!< \brief Component carrier 7 */ + uint8_t C6:1; /*!< \brief Component carrier 6 */ + uint8_t C5:1; /*!< \brief Component carrier 5 */ + uint8_t C4:1; /*!< \brief Component carrier 4 */ + uint8_t C3:1; /*!< \brief Component carrier 3 */ + uint8_t C2:1; /*!< \brief Component carrier 2 */ + uint8_t C1:1; /*!< \brief Component carrier 1 */ + uint8_t R:1; /*!< \brief Reserved */ +} __attribute__ ((__packed__)) CC_ELEMENT; /*! \brief MAC control element: MCH Scheduling Information */ typedef struct { - uint8_t stop_sf_MSB:3; // octet 1 LSB - uint8_t lcid:5; // octet 2 MSB - uint8_t stop_sf_LSB:8; -} __attribute__((__packed__))MSI_ELEMENT; + uint8_t stop_sf_MSB:3; // octet 1 LSB + uint8_t lcid:5; // octet 2 MSB + uint8_t stop_sf_LSB:8; +} __attribute__ ((__packed__)) MSI_ELEMENT; #endif -/*! \brief Values of CCCH LCID for DLSCH */ +/*! \brief Values of CCCH LCID for DLSCH */ #define CCCH_LCHANID 0 /*!\brief Values of BCCH logical channel (fake)*/ -#define BCCH 3 // SI +#define BCCH 3 // SI /*!\brief Values of PCCH logical channel (fake)*/ -#define PCCH 4 // Paging +#define PCCH 4 // Paging /*!\brief Values of PCCH logical channel (fake) */ -#define MIBCH 5 // MIB +#define MIBCH 5 // MIB /*!\brief Values of BCCH SIB1_BR logical channel (fake) */ -#define BCCH_SIB1_BR 6 // SIB1_BR +#define BCCH_SIB1_BR 6 // SIB1_BR /*!\brief Values of BCCH SIB_BR logical channel (fake) */ -#define BCCH_SI_BR 7 // SI-BR +#define BCCH_SI_BR 7 // SI-BR /*!\brief Value of CCCH / SRB0 logical channel */ -#define CCCH 0 // srb0 +#define CCCH 0 // srb0 /*!\brief DCCH / SRB1 logical channel */ -#define DCCH 1 // srb1 +#define DCCH 1 // srb1 /*!\brief DCCH1 / SRB2 logical channel */ -#define DCCH1 2 // srb2 +#define DCCH1 2 // srb2 /*!\brief DTCH DRB1 logical channel */ -#define DTCH 3 // LCID +#define DTCH 3 // LCID /*!\brief MCCH logical channel */ -#define MCCH 4 +#define MCCH 4 /*!\brief MTCH logical channel */ -#define MTCH 1 +#define MTCH 1 // DLSCH LCHAN ID /*!\brief LCID of UE contention resolution identity for DLSCH*/ #define UE_CONT_RES 28 @@ -364,972 +364,963 @@ typedef struct { /*!\brief LCID of long BSR for ULSCH */ #define LONG_BSR 30 /*!\bitmaps for BSR Triggers */ -#define BSR_TRIGGER_NONE (0) /* No BSR Trigger */ -#define BSR_TRIGGER_REGULAR (1) /* For Regular and ReTxBSR Expiry Triggers */ -#define BSR_TRIGGER_PERIODIC (2) /* For BSR Periodic Timer Expiry Trigger */ -#define BSR_TRIGGER_PADDING (4) /* For Padding BSR Trigger */ +#define BSR_TRIGGER_NONE (0) /* No BSR Trigger */ +#define BSR_TRIGGER_REGULAR (1) /* For Regular and ReTxBSR Expiry Triggers */ +#define BSR_TRIGGER_PERIODIC (2) /* For BSR Periodic Timer Expiry Trigger */ +#define BSR_TRIGGER_PADDING (4) /* For Padding BSR Trigger */ /*! \brief Downlink SCH PDU Structure */ typedef struct { - uint8_t payload[8][SCH_PAYLOAD_SIZE_MAX]; - uint16_t Pdu_size[8]; + uint8_t payload[8][SCH_PAYLOAD_SIZE_MAX]; + uint16_t Pdu_size[8]; } __attribute__ ((__packed__)) DLSCH_PDU; /*! \brief MCH PDU Structure */ typedef struct { - int8_t payload[SCH_PAYLOAD_SIZE_MAX]; - uint16_t Pdu_size; - uint8_t mcs; - uint8_t sync_area; - uint8_t msi_active; - uint8_t mcch_active; - uint8_t mtch_active; + int8_t payload[SCH_PAYLOAD_SIZE_MAX]; + uint16_t Pdu_size; + uint8_t mcs; + uint8_t sync_area; + uint8_t msi_active; + uint8_t mcch_active; + uint8_t mtch_active; } __attribute__ ((__packed__)) MCH_PDU; /*! \brief Uplink SCH PDU Structure */ typedef struct { - int8_t payload[SCH_PAYLOAD_SIZE_MAX]; /*!< \brief SACH payload */ - uint16_t Pdu_size; + int8_t payload[SCH_PAYLOAD_SIZE_MAX]; /*!< \brief SACH payload */ + uint16_t Pdu_size; } __attribute__ ((__packed__)) ULSCH_PDU; #include "PHY/impl_defs_top.h" +/*!\brief RA process state*/ +typedef enum { + IDLE = 0, + MSG2, + WAITMSG3, + MSG4, + WAITMSG4ACK +} RA_state; + /*!\brief UE ULSCH scheduling states*/ typedef enum { - S_UL_NONE =0, - S_UL_WAITING, - S_UL_SCHEDULED, - S_UL_BUFFERED, - S_UL_NUM_STATUS + S_UL_NONE = 0, + S_UL_WAITING, + S_UL_SCHEDULED, + S_UL_BUFFERED, + S_UL_NUM_STATUS } UE_ULSCH_STATUS; /*!\brief UE DLSCH scheduling states*/ typedef enum { - S_DL_NONE =0, - S_DL_WAITING, - S_DL_SCHEDULED, - S_DL_BUFFERED, - S_DL_NUM_STATUS + S_DL_NONE = 0, + S_DL_WAITING, + S_DL_SCHEDULED, + S_DL_BUFFERED, + S_DL_NUM_STATUS } UE_DLSCH_STATUS; /*!\brief scheduling policy for the contention-based access */ typedef enum { - CBA_ES=0, /// equal share of RB among groups w - CBA_ES_S, /// equal share of RB among groups with small allocation - CBA_PF, /// proportional fair (kind of) - CBA_PF_S, /// proportional fair (kind of) with small RB allocation - CBA_RS /// random allocation + CBA_ES = 0, /// equal share of RB among groups w + CBA_ES_S, /// equal share of RB among groups with small allocation + CBA_PF, /// proportional fair (kind of) + CBA_PF_S, /// proportional fair (kind of) with small RB allocation + CBA_RS /// random allocation } CBA_POLICY; /*! \brief temporary struct for ULSCH sched */ typedef struct { - rnti_t rnti; - uint16_t subframe; - uint16_t serving_num; - UE_ULSCH_STATUS status; + rnti_t rnti; + uint16_t subframe; + uint16_t serving_num; + UE_ULSCH_STATUS status; } eNB_ULSCH_INFO; /*! \brief temp struct for DLSCH sched */ typedef struct { - rnti_t rnti; - uint16_t weight; - uint16_t subframe; - uint16_t serving_num; - UE_DLSCH_STATUS status; + rnti_t rnti; + uint16_t weight; + uint16_t subframe; + uint16_t serving_num; + UE_DLSCH_STATUS status; } eNB_DLSCH_INFO; /*! \brief eNB overall statistics */ typedef struct { - /// num BCCH PDU per CC - uint32_t total_num_bcch_pdu; - /// BCCH buffer size - uint32_t bcch_buffer; - /// total BCCH buffer size - uint32_t total_bcch_buffer; - /// BCCH MCS - uint32_t bcch_mcs; + /// num BCCH PDU per CC + uint32_t total_num_bcch_pdu; + /// BCCH buffer size + uint32_t bcch_buffer; + /// total BCCH buffer size + uint32_t total_bcch_buffer; + /// BCCH MCS + uint32_t bcch_mcs; - /// num CCCH PDU per CC - uint32_t total_num_ccch_pdu; - /// BCCH buffer size - uint32_t ccch_buffer; - /// total BCCH buffer size - uint32_t total_ccch_buffer; - /// BCCH MCS - uint32_t ccch_mcs; + /// num CCCH PDU per CC + uint32_t total_num_ccch_pdu; + /// BCCH buffer size + uint32_t ccch_buffer; + /// total BCCH buffer size + uint32_t total_ccch_buffer; + /// BCCH MCS + uint32_t ccch_mcs; /// num active users - uint16_t num_dlactive_UEs; - /// available number of PRBs for a give SF - uint16_t available_prbs; - /// total number of PRB available for the user plane - uint32_t total_available_prbs; - /// aggregation - /// total avilable nccc : num control channel element - uint16_t available_ncces; - // only for a new transmission, should be extended for retransmission - // current dlsch bit rate for all transport channels - uint32_t dlsch_bitrate; - // - uint32_t dlsch_bytes_tx; - // - uint32_t dlsch_pdus_tx; - // - uint32_t total_dlsch_bitrate; - // - uint32_t total_dlsch_bytes_tx; - // - uint32_t total_dlsch_pdus_tx; - - // here for RX - // - uint32_t ulsch_bitrate; - // - uint32_t ulsch_bytes_rx; - // - uint64_t ulsch_pdus_rx; + uint16_t num_dlactive_UEs; + /// available number of PRBs for a give SF + uint16_t available_prbs; + /// total number of PRB available for the user plane + uint32_t total_available_prbs; + /// aggregation + /// total avilable nccc : num control channel element + uint16_t available_ncces; + // only for a new transmission, should be extended for retransmission + // current dlsch bit rate for all transport channels + uint32_t dlsch_bitrate; + // + uint32_t dlsch_bytes_tx; + // + uint32_t dlsch_pdus_tx; + // + uint32_t total_dlsch_bitrate; + // + uint32_t total_dlsch_bytes_tx; + // + uint32_t total_dlsch_pdus_tx; - uint32_t total_ulsch_bitrate; - // - uint32_t total_ulsch_bytes_rx; - // - uint32_t total_ulsch_pdus_rx; - - - /// MAC agent-related stats - /// total number of scheduling decisions - int sched_decisions; - /// missed deadlines - int missed_deadlines; + // here for RX + // + uint32_t ulsch_bitrate; + // + uint32_t ulsch_bytes_rx; + // + uint64_t ulsch_pdus_rx; + + uint32_t total_ulsch_bitrate; + // + uint32_t total_ulsch_bytes_rx; + // + uint32_t total_ulsch_pdus_rx; + + + /// MAC agent-related stats + /// total number of scheduling decisions + int sched_decisions; + /// missed deadlines + int missed_deadlines; } eNB_STATS; /*! \brief eNB statistics for the connected UEs*/ typedef struct { - /// CRNTI of UE - rnti_t crnti; ///user id (rnti) of connected UEs - // rrc status - uint8_t rrc_status; - /// harq pid - uint8_t harq_pid; - /// harq rounf - uint8_t harq_round; - /// total available number of PRBs for a new transmission - uint16_t rbs_used; - /// total available number of PRBs for a retransmission - uint16_t rbs_used_retx; - /// total nccc used for a new transmission: num control channel element - uint16_t ncce_used; - /// total avilable nccc for a retransmission: num control channel element - uint16_t ncce_used_retx; + /// CRNTI of UE + rnti_t crnti; ///user id (rnti) of connected UEs + // rrc status + uint8_t rrc_status; + /// harq pid + uint8_t harq_pid; + /// harq rounf + uint8_t harq_round; + /// total available number of PRBs for a new transmission + uint16_t rbs_used; + /// total available number of PRBs for a retransmission + uint16_t rbs_used_retx; + /// total nccc used for a new transmission: num control channel element + uint16_t ncce_used; + /// total avilable nccc for a retransmission: num control channel element + uint16_t ncce_used_retx; - // mcs1 before the rate adaptaion - uint8_t dlsch_mcs1; - /// Target mcs2 after rate-adaptation - uint8_t dlsch_mcs2; - // current TBS with mcs2 - uint32_t TBS; - // total TBS with mcs2 - // uint32_t total_TBS; - // total rb used for a new transmission - uint32_t total_rbs_used; - // total rb used for retransmission - uint32_t total_rbs_used_retx; + // mcs1 before the rate adaptaion + uint8_t dlsch_mcs1; + /// Target mcs2 after rate-adaptation + uint8_t dlsch_mcs2; + // current TBS with mcs2 + uint32_t TBS; + // total TBS with mcs2 + // uint32_t total_TBS; + // total rb used for a new transmission + uint32_t total_rbs_used; + // total rb used for retransmission + uint32_t total_rbs_used_retx; - /// TX - /// Num pkt - uint32_t num_pdu_tx[NB_RB_MAX]; - /// num bytes - uint32_t num_bytes_tx[NB_RB_MAX]; - /// num retransmission / harq - uint32_t num_retransmission; - /// instantaneous tx throughput for each TTI - // uint32_t tti_throughput[NB_RB_MAX]; + /// TX + /// Num pkt + uint32_t num_pdu_tx[NB_RB_MAX]; + /// num bytes + uint32_t num_bytes_tx[NB_RB_MAX]; + /// num retransmission / harq + uint32_t num_retransmission; + /// instantaneous tx throughput for each TTI + // uint32_t tti_throughput[NB_RB_MAX]; - /// overall - // - uint32_t dlsch_bitrate; - //total - uint32_t total_dlsch_bitrate; - /// headers+ CE + padding bytes for a MAC PDU - uint64_t overhead_bytes; - /// headers+ CE + padding bytes for a MAC PDU - uint64_t total_overhead_bytes; - /// headers+ CE + padding bytes for a MAC PDU - uint64_t avg_overhead_bytes; - // MAC multiplexed payload - uint64_t total_sdu_bytes; - // total MAC pdu bytes - uint64_t total_pdu_bytes; + /// overall + // + uint32_t dlsch_bitrate; + //total + uint32_t total_dlsch_bitrate; + /// headers+ CE + padding bytes for a MAC PDU + uint64_t overhead_bytes; + /// headers+ CE + padding bytes for a MAC PDU + uint64_t total_overhead_bytes; + /// headers+ CE + padding bytes for a MAC PDU + uint64_t avg_overhead_bytes; + // MAC multiplexed payload + uint64_t total_sdu_bytes; + // total MAC pdu bytes + uint64_t total_pdu_bytes; - // total num pdu - uint32_t total_num_pdus; - // - // uint32_t avg_pdu_size; + // total num pdu + uint32_t total_num_pdus; + // + // uint32_t avg_pdu_size; - /// RX + /// RX - /// PUCCH1a/b power (dBm) - int32_t Po_PUCCH_dBm; - /// Indicator that Po_PUCCH has been updated by PHY - int32_t Po_PUCCH_update; - /// Uplink measured RSSI - int32_t UL_rssi; - /// preassigned mcs after rate adaptation - uint8_t ulsch_mcs1; - /// adjusted mcs - uint8_t ulsch_mcs2; + /// PUCCH1a/b power (dBm) + int32_t Po_PUCCH_dBm; + /// Indicator that Po_PUCCH has been updated by PHY + int32_t Po_PUCCH_update; + /// Uplink measured RSSI + int32_t UL_rssi; + /// preassigned mcs after rate adaptation + uint8_t ulsch_mcs1; + /// adjusted mcs + uint8_t ulsch_mcs2; - /// estimated average pdu inter-departure time - uint32_t avg_pdu_idt; - /// estimated average pdu size - uint32_t avg_pdu_ps; - /// - uint32_t aggregated_pdu_size; - uint32_t aggregated_pdu_arrival; + /// estimated average pdu inter-departure time + uint32_t avg_pdu_idt; + /// estimated average pdu size + uint32_t avg_pdu_ps; + /// + uint32_t aggregated_pdu_size; + uint32_t aggregated_pdu_arrival; - /// uplink transport block size - uint32_t ulsch_TBS; + /// uplink transport block size + uint32_t ulsch_TBS; - /// total rb used for a new uplink transmission - uint32_t num_retransmission_rx; - /// total rb used for a new uplink transmission - uint32_t rbs_used_rx; - /// total rb used for a new uplink retransmission - uint32_t rbs_used_retx_rx; - /// total rb used for a new uplink transmission - uint32_t total_rbs_used_rx; - /// normalized rx power - int32_t normalized_rx_power; - /// target rx power - int32_t target_rx_power; + /// total rb used for a new uplink transmission + uint32_t num_retransmission_rx; + /// total rb used for a new uplink transmission + uint32_t rbs_used_rx; + /// total rb used for a new uplink retransmission + uint32_t rbs_used_retx_rx; + /// total rb used for a new uplink transmission + uint32_t total_rbs_used_rx; + /// normalized rx power + int32_t normalized_rx_power; + /// target rx power + int32_t target_rx_power; - /// num rx pdu - uint32_t num_pdu_rx[NB_RB_MAX]; - /// num bytes rx - uint32_t num_bytes_rx[NB_RB_MAX]; - /// instantaneous rx throughput for each TTI - // uint32_t tti_goodput[NB_RB_MAX]; - /// errors - uint32_t num_errors_rx; - - uint64_t overhead_bytes_rx; - /// headers+ CE + padding bytes for a MAC PDU - uint64_t total_overhead_bytes_rx; - /// headers+ CE + padding bytes for a MAC PDU - uint64_t avg_overhead_bytes_rx; - // - uint32_t ulsch_bitrate; - //total - uint32_t total_ulsch_bitrate; - /// overall - /// MAC pdu bytes - uint64_t pdu_bytes_rx; - /// total MAC pdu bytes - uint64_t total_pdu_bytes_rx; - /// total num pdu - uint32_t total_num_pdus_rx; - /// num of error pdus - uint32_t total_num_errors_rx; + /// num rx pdu + uint32_t num_pdu_rx[NB_RB_MAX]; + /// num bytes rx + uint32_t num_bytes_rx[NB_RB_MAX]; + /// instantaneous rx throughput for each TTI + // uint32_t tti_goodput[NB_RB_MAX]; + /// errors + uint32_t num_errors_rx; + + uint64_t overhead_bytes_rx; + /// headers+ CE + padding bytes for a MAC PDU + uint64_t total_overhead_bytes_rx; + /// headers+ CE + padding bytes for a MAC PDU + uint64_t avg_overhead_bytes_rx; + // + uint32_t ulsch_bitrate; + //total + uint32_t total_ulsch_bitrate; + /// overall + /// MAC pdu bytes + uint64_t pdu_bytes_rx; + /// total MAC pdu bytes + uint64_t total_pdu_bytes_rx; + /// total num pdu + uint32_t total_num_pdus_rx; + /// num of error pdus + uint32_t total_num_errors_rx; } eNB_UE_STATS; /*! \brief eNB template for UE context information */ typedef struct { - /// C-RNTI of UE - rnti_t rnti; - /// NDI from last scheduling - uint8_t oldNDI[8]; - /// mcs1 from last scheduling - uint8_t oldmcs1[8]; - /// mcs2 from last scheduling - uint8_t oldmcs2[8]; - /// NDI from last UL scheduling - uint8_t oldNDI_UL[8]; - /// mcs from last UL scheduling - uint8_t mcs_UL[8]; - /// TBS from last UL scheduling - uint8_t TBS_UL[8]; - /// Flag to indicate UL has been scheduled at least once - boolean_t ul_active; - /// Flag to indicate UE has been configured (ACK from RRCConnectionSetup received) - boolean_t configured; + /// C-RNTI of UE + rnti_t rnti; + /// NDI from last scheduling + uint8_t oldNDI[8]; + /// mcs1 from last scheduling + uint8_t oldmcs1[8]; + /// mcs2 from last scheduling + uint8_t oldmcs2[8]; + /// NDI from last UL scheduling + uint8_t oldNDI_UL[8]; + /// mcs from last UL scheduling + uint8_t mcs_UL[8]; + /// TBS from last UL scheduling + uint8_t TBS_UL[8]; + /// Flag to indicate UL has been scheduled at least once + boolean_t ul_active; + /// Flag to indicate UE has been configured (ACK from RRCConnectionSetup received) + boolean_t configured; - /// MCS from last scheduling - uint8_t mcs[8]; + /// MCS from last scheduling + uint8_t mcs[8]; - /// TPC from last scheduling - uint8_t oldTPC[8]; + /// TPC from last scheduling + uint8_t oldTPC[8]; - // PHY interface info + // PHY interface info - /// Number of Allocated RBs for DL after scheduling (prior to frequency allocation) - uint16_t nb_rb[8]; // num_max_harq + /// Number of Allocated RBs for DL after scheduling (prior to frequency allocation) + uint16_t nb_rb[8]; // num_max_harq - /// Number of Allocated RBs for UL after scheduling - uint16_t nb_rb_ul[8]; // num_max_harq + /// Number of Allocated RBs for UL after scheduling + uint16_t nb_rb_ul[8]; // num_max_harq - /// Number of Allocated RBs for UL after scheduling - uint16_t first_rb_ul[8]; // num_max_harq + /// Number of Allocated RBs for UL after scheduling + uint16_t first_rb_ul[8]; // num_max_harq - /// Cyclic shift for DMRS after scheduling - uint16_t cshift[8]; // num_max_harq + /// Cyclic shift for DMRS after scheduling + uint16_t cshift[8]; // num_max_harq - /// Number of Allocated RBs by the ulsch preprocessor - uint8_t pre_allocated_nb_rb_ul; + /// Number of Allocated RBs by the ulsch preprocessor + uint8_t pre_allocated_nb_rb_ul; - /// index of Allocated RBs by the ulsch preprocessor - int8_t pre_allocated_rb_table_index_ul; + /// index of Allocated RBs by the ulsch preprocessor + int8_t pre_allocated_rb_table_index_ul; - /// total allocated RBs - int8_t total_allocated_rbs; + /// total allocated RBs + int8_t total_allocated_rbs; - /// pre-assigned MCS by the ulsch preprocessor - uint8_t pre_assigned_mcs_ul; + /// pre-assigned MCS by the ulsch preprocessor + uint8_t pre_assigned_mcs_ul; - /// assigned MCS by the ulsch scheduler - uint8_t assigned_mcs_ul; + /// assigned MCS by the ulsch scheduler + uint8_t assigned_mcs_ul; - /// DL DAI - uint8_t DAI; + /// DL DAI + uint8_t DAI; - /// UL DAI - uint8_t DAI_ul[10]; + /// UL DAI + uint8_t DAI_ul[10]; - /// UL Scheduling Request Received - uint8_t ul_SR; + /// UL Scheduling Request Received + uint8_t ul_SR; - ///Resource Block indication for each sub-band in MU-MIMO - uint8_t rballoc_subband[8][50]; + ///Resource Block indication for each sub-band in MU-MIMO + uint8_t rballoc_subband[8][50]; - // Logical channel info for link with RLC + // Logical channel info for link with RLC - /// Last received UE BSR info for each logical channel group id - uint8_t bsr_info[MAX_NUM_LCGID]; + /// Last received UE BSR info for each logical channel group id + uint8_t bsr_info[MAX_NUM_LCGID]; - /// LCGID mapping - long lcgidmap[11]; + /// LCGID mapping + long lcgidmap[11]; - /// phr information - int8_t phr_info; + /// phr information + int8_t phr_info; - /// phr information - int8_t phr_info_configured; + /// phr information + int8_t phr_info_configured; - ///dl buffer info - uint32_t dl_buffer_info[MAX_NUM_LCID]; - /// total downlink buffer info - uint32_t dl_buffer_total; - /// total downlink pdus - uint32_t dl_pdus_total; - /// downlink pdus for each LCID - uint32_t dl_pdus_in_buffer[MAX_NUM_LCID]; - /// creation time of the downlink buffer head for each LCID - uint32_t dl_buffer_head_sdu_creation_time[MAX_NUM_LCID]; - /// maximum creation time of the downlink buffer head across all LCID - uint32_t dl_buffer_head_sdu_creation_time_max; - /// a flag indicating that the downlink head SDU is segmented - uint8_t dl_buffer_head_sdu_is_segmented[MAX_NUM_LCID]; - /// size of remaining size to send for the downlink head SDU - uint32_t dl_buffer_head_sdu_remaining_size_to_send[MAX_NUM_LCID]; + ///dl buffer info + uint32_t dl_buffer_info[MAX_NUM_LCID]; + /// total downlink buffer info + uint32_t dl_buffer_total; + /// total downlink pdus + uint32_t dl_pdus_total; + /// downlink pdus for each LCID + uint32_t dl_pdus_in_buffer[MAX_NUM_LCID]; + /// creation time of the downlink buffer head for each LCID + uint32_t dl_buffer_head_sdu_creation_time[MAX_NUM_LCID]; + /// maximum creation time of the downlink buffer head across all LCID + uint32_t dl_buffer_head_sdu_creation_time_max; + /// a flag indicating that the downlink head SDU is segmented + uint8_t dl_buffer_head_sdu_is_segmented[MAX_NUM_LCID]; + /// size of remaining size to send for the downlink head SDU + uint32_t dl_buffer_head_sdu_remaining_size_to_send[MAX_NUM_LCID]; - /// total uplink buffer size - uint32_t ul_total_buffer; - /// uplink buffer creation time for each LCID - uint32_t ul_buffer_creation_time[MAX_NUM_LCGID]; - /// maximum uplink buffer creation time across all the LCIDs - uint32_t ul_buffer_creation_time_max; - /// uplink buffer size per LCID - uint32_t ul_buffer_info[MAX_NUM_LCGID]; + /// total uplink buffer size + uint32_t ul_total_buffer; + /// uplink buffer creation time for each LCID + uint32_t ul_buffer_creation_time[MAX_NUM_LCGID]; + /// maximum uplink buffer creation time across all the LCIDs + uint32_t ul_buffer_creation_time_max; + /// uplink buffer size per LCID + uint32_t ul_buffer_info[MAX_NUM_LCGID]; - /// UE tx power - int32_t ue_tx_power; + /// UE tx power + int32_t ue_tx_power; - /// stores the frame where the last TPC was transmitted - uint32_t pusch_tpc_tx_frame; - uint32_t pusch_tpc_tx_subframe; - uint32_t pucch_tpc_tx_frame; - uint32_t pucch_tpc_tx_subframe; + /// stores the frame where the last TPC was transmitted + uint32_t pusch_tpc_tx_frame; + uint32_t pusch_tpc_tx_subframe; + uint32_t pucch_tpc_tx_frame; + uint32_t pucch_tpc_tx_subframe; #ifdef LOCALIZATION - eNB_UE_estimated_distances distance; + eNB_UE_estimated_distances distance; #endif #ifdef Rel14 - uint8_t rach_resource_type; - uint16_t mpdcch_repetition_cnt; - frame_t Msg2_frame; + uint8_t rach_resource_type; + uint16_t mpdcch_repetition_cnt; + frame_t Msg2_frame; #endif - sub_frame_t Msg2_subframe; + sub_frame_t Msg2_subframe; - PhysicalConfigDedicated_t *physicalConfigDedicated; + PhysicalConfigDedicated_t *physicalConfigDedicated; } UE_TEMPLATE; /*! \brief scheduling control information set through an API (not used)*/ typedef struct { - ///UL transmission bandwidth in RBs - uint8_t ul_bandwidth[MAX_NUM_LCID]; - ///DL transmission bandwidth in RBs - uint8_t dl_bandwidth[MAX_NUM_LCID]; + ///UL transmission bandwidth in RBs + uint8_t ul_bandwidth[MAX_NUM_LCID]; + ///DL transmission bandwidth in RBs + uint8_t dl_bandwidth[MAX_NUM_LCID]; - //To do GBR bearer - uint8_t min_ul_bandwidth[MAX_NUM_LCID]; + //To do GBR bearer + uint8_t min_ul_bandwidth[MAX_NUM_LCID]; - uint8_t min_dl_bandwidth[MAX_NUM_LCID]; + uint8_t min_dl_bandwidth[MAX_NUM_LCID]; - ///aggregated bit rate of non-gbr bearer per UE - uint64_t ue_AggregatedMaximumBitrateDL; - ///aggregated bit rate of non-gbr bearer per UE - uint64_t ue_AggregatedMaximumBitrateUL; - ///CQI scheduling interval in subframes. - uint16_t cqiSchedInterval; - ///Contention resolution timer used during random access - uint8_t mac_ContentionResolutionTimer; + ///aggregated bit rate of non-gbr bearer per UE + uint64_t ue_AggregatedMaximumBitrateDL; + ///aggregated bit rate of non-gbr bearer per UE + uint64_t ue_AggregatedMaximumBitrateUL; + ///CQI scheduling interval in subframes. + uint16_t cqiSchedInterval; + ///Contention resolution timer used during random access + uint8_t mac_ContentionResolutionTimer; - uint16_t max_allowed_rbs[MAX_NUM_LCID]; + uint16_t max_allowed_rbs[MAX_NUM_LCID]; - uint8_t max_mcs[MAX_NUM_LCID]; + uint8_t max_mcs[MAX_NUM_LCID]; - uint16_t priority[MAX_NUM_LCID]; + uint16_t priority[MAX_NUM_LCID]; - // resource scheduling information - - /// Current DL harq round per harq_pid on each CC - uint8_t round[MAX_NUM_CCs][10]; - /// Current Active TBs per harq_pid on each CC - uint8_t tbcnt[MAX_NUM_CCs][10]; - /// Current UL harq round per harq_pid on each CC - uint8_t round_UL[MAX_NUM_CCs][8]; - uint8_t dl_pow_off[MAX_NUM_CCs]; - uint16_t pre_nb_available_rbs[MAX_NUM_CCs]; - unsigned char rballoc_sub_UE[MAX_NUM_CCs][N_RBG_MAX]; - uint16_t ta_timer; - int16_t ta_update; - uint16_t ul_consecutive_errors; - int32_t context_active_timer; - int32_t cqi_req_timer; - int32_t ul_inactivity_timer; - int32_t ul_failure_timer; - int32_t ul_scheduled; - int32_t ra_pdcch_order_sent; - int32_t ul_out_of_sync; - int32_t phr_received; - uint8_t periodic_ri_received[NFAPI_CC_MAX]; - uint8_t aperiodic_ri_received[NFAPI_CC_MAX]; - uint8_t pucch1_cqi_update[NFAPI_CC_MAX]; - uint8_t pucch1_snr[NFAPI_CC_MAX]; - uint8_t pucch2_cqi_update[NFAPI_CC_MAX]; - uint8_t pucch2_snr[NFAPI_CC_MAX]; - uint8_t pucch3_cqi_update[NFAPI_CC_MAX]; - uint8_t pucch3_snr[NFAPI_CC_MAX]; - uint8_t pusch_snr[NFAPI_CC_MAX]; - uint16_t feedback_cnt[NFAPI_CC_MAX]; - uint16_t timing_advance; - uint16_t timing_advance_r9; - uint8_t periodic_wideband_cqi[NFAPI_CC_MAX]; - uint8_t periodic_wideband_spatial_diffcqi[NFAPI_CC_MAX]; - uint8_t periodic_wideband_pmi[NFAPI_CC_MAX]; - uint8_t periodic_subband_cqi[NFAPI_CC_MAX][16]; - uint8_t periodic_subband_spatial_diffcqi[NFAPI_CC_MAX][16]; - uint8_t aperiodic_subband_cqi0[NFAPI_CC_MAX][25]; - uint8_t aperiodic_subband_pmi[NFAPI_CC_MAX][25]; - uint8_t aperiodic_subband_diffcqi0[NFAPI_CC_MAX][25]; - uint8_t aperiodic_subband_cqi1[NFAPI_CC_MAX][25]; - uint8_t aperiodic_subband_diffcqi1[NFAPI_CC_MAX][25]; - uint8_t aperiodic_wideband_cqi0[NFAPI_CC_MAX]; - uint8_t aperiodic_wideband_pmi[NFAPI_CC_MAX]; - uint8_t aperiodic_wideband_cqi1[NFAPI_CC_MAX]; - uint8_t aperiodic_wideband_pmi1[NFAPI_CC_MAX]; - uint8_t dl_cqi[NFAPI_CC_MAX]; + // resource scheduling information + + /// Current DL harq round per harq_pid on each CC + uint8_t round[MAX_NUM_CCs][10]; + /// Current Active TBs per harq_pid on each CC + uint8_t tbcnt[MAX_NUM_CCs][10]; + /// Current UL harq round per harq_pid on each CC + uint8_t round_UL[MAX_NUM_CCs][8]; + uint8_t dl_pow_off[MAX_NUM_CCs]; + uint16_t pre_nb_available_rbs[MAX_NUM_CCs]; + unsigned char rballoc_sub_UE[MAX_NUM_CCs][N_RBG_MAX]; + uint16_t ta_timer; + int16_t ta_update; + uint16_t ul_consecutive_errors; + int32_t context_active_timer; + int32_t cqi_req_timer; + int32_t ul_inactivity_timer; + int32_t ul_failure_timer; + int32_t ul_scheduled; + int32_t ra_pdcch_order_sent; + int32_t ul_out_of_sync; + int32_t phr_received; + uint8_t periodic_ri_received[NFAPI_CC_MAX]; + uint8_t aperiodic_ri_received[NFAPI_CC_MAX]; + uint8_t pucch1_cqi_update[NFAPI_CC_MAX]; + uint8_t pucch1_snr[NFAPI_CC_MAX]; + uint8_t pucch2_cqi_update[NFAPI_CC_MAX]; + uint8_t pucch2_snr[NFAPI_CC_MAX]; + uint8_t pucch3_cqi_update[NFAPI_CC_MAX]; + uint8_t pucch3_snr[NFAPI_CC_MAX]; + uint8_t pusch_snr[NFAPI_CC_MAX]; + uint16_t feedback_cnt[NFAPI_CC_MAX]; + uint16_t timing_advance; + uint16_t timing_advance_r9; + uint8_t periodic_wideband_cqi[NFAPI_CC_MAX]; + uint8_t periodic_wideband_spatial_diffcqi[NFAPI_CC_MAX]; + uint8_t periodic_wideband_pmi[NFAPI_CC_MAX]; + uint8_t periodic_subband_cqi[NFAPI_CC_MAX][16]; + uint8_t periodic_subband_spatial_diffcqi[NFAPI_CC_MAX][16]; + uint8_t aperiodic_subband_cqi0[NFAPI_CC_MAX][25]; + uint8_t aperiodic_subband_pmi[NFAPI_CC_MAX][25]; + uint8_t aperiodic_subband_diffcqi0[NFAPI_CC_MAX][25]; + uint8_t aperiodic_subband_cqi1[NFAPI_CC_MAX][25]; + uint8_t aperiodic_subband_diffcqi1[NFAPI_CC_MAX][25]; + uint8_t aperiodic_wideband_cqi0[NFAPI_CC_MAX]; + uint8_t aperiodic_wideband_pmi[NFAPI_CC_MAX]; + uint8_t aperiodic_wideband_cqi1[NFAPI_CC_MAX]; + uint8_t aperiodic_wideband_pmi1[NFAPI_CC_MAX]; + uint8_t dl_cqi[NFAPI_CC_MAX]; } UE_sched_ctrl; /*! \brief eNB template for the Random access information */ typedef struct { - /// Flag to indicate this process is active - boolean_t RA_active; - /// Size of DCI for RA-Response (bytes) - uint8_t RA_dci_size_bytes1; - /// Size of DCI for RA-Response (bits) - uint8_t RA_dci_size_bits1; - /// Actual DCI to transmit for RA-Response - uint8_t RA_alloc_pdu1[(MAX_DCI_SIZE_BITS>>3)+1]; - /// DCI format for RA-Response (should be 1A) - uint8_t RA_dci_fmt1; - /// Size of DCI for Msg4/ContRes (bytes) - uint8_t RA_dci_size_bytes2; - /// Size of DCI for Msg4/ContRes (bits) - uint8_t RA_dci_size_bits2; - /// Actual DCI to transmit for Msg4/ContRes - uint8_t RA_alloc_pdu2[(MAX_DCI_SIZE_BITS>>3)+1]; - /// DCI format for Msg4/ContRes (should be 1A) - uint8_t RA_dci_fmt2; - /// Flag to indicate the eNB should generate RAR. This is triggered by detection of PRACH - uint8_t generate_rar; - /// Subframe where preamble was received - uint8_t preamble_subframe; - /// Subframe where Msg2 is to be sent - uint8_t Msg2_subframe; - /// Frame where Msg2 is to be sent - frame_t Msg2_frame; - /// Subframe where Msg3 is to be sent - sub_frame_t Msg3_subframe; - /// Frame where Msg3 is to be sent - frame_t Msg3_frame; - /// Subframe where Msg4 is to be sent - sub_frame_t Msg4_subframe; - /// Frame where Msg4 is to be sent - frame_t Msg4_frame; - /// Flag to indicate the eNB should generate Msg4 upon reception of SDU from RRC. This is triggered by first ULSCH reception at eNB for new user. - uint8_t generate_Msg4; - /// Flag to indicate that eNB is waiting for ACK that UE has received Msg3. - uint8_t wait_ack_Msg4; - /// harq_pid used for Msg4 transmission - uint8_t harq_pid; - /// UE RNTI allocated during RAR - rnti_t rnti; - /// RA RNTI allocated from received PRACH - uint16_t RA_rnti; - /// Received preamble_index - uint8_t preamble_index; - /// Received UE Contention Resolution Identifier - uint8_t cont_res_id[6]; - /// Timing offset indicated by PHY - int16_t timing_offset; - /// Timeout for RRC connection - int16_t RRC_timer; - /// Msg3 first RB - uint8_t msg3_first_rb; - /// Msg3 number of RB - uint8_t msg3_nb_rb; - /// Msg3 MCS - uint8_t msg3_mcs; - /// Msg3 TPC command - uint8_t msg3_TPC; - /// Msg3 ULdelay command - uint8_t msg3_ULdelay; - /// Msg3 cqireq command - uint8_t msg3_cqireq; - /// Round of Msg3 HARQ - uint8_t msg3_round; - /// TBS used for Msg4 - int msg4_TBsize; - /// MCS used for Msg4 - int msg4_mcs; + /// Flag to indicate this process is active + RA_state state; + /// Subframe where preamble was received + uint8_t preamble_subframe; + /// Subframe where Msg2 is to be sent + uint8_t Msg2_subframe; + /// Frame where Msg2 is to be sent + frame_t Msg2_frame; + /// Subframe where Msg3 is to be sent + sub_frame_t Msg3_subframe; + /// Frame where Msg3 is to be sent + frame_t Msg3_frame; + /// Subframe where Msg4 is to be sent + sub_frame_t Msg4_subframe; + /// Frame where Msg4 is to be sent + frame_t Msg4_frame; + /// harq_pid used for Msg4 transmission + uint8_t harq_pid; + /// UE RNTI allocated during RAR + rnti_t rnti; + /// RA RNTI allocated from received PRACH + uint16_t RA_rnti; + /// Received preamble_index + uint8_t preamble_index; + /// Received UE Contention Resolution Identifier + uint8_t cont_res_id[6]; + /// Timing offset indicated by PHY + int16_t timing_offset; + /// Timeout for RRC connection + int16_t RRC_timer; + /// Msg3 first RB + uint8_t msg3_first_rb; + /// Msg3 number of RB + uint8_t msg3_nb_rb; + /// Msg3 MCS + uint8_t msg3_mcs; + /// Msg3 TPC command + uint8_t msg3_TPC; + /// Msg3 ULdelay command + uint8_t msg3_ULdelay; + /// Msg3 cqireq command + uint8_t msg3_cqireq; + /// Round of Msg3 HARQ + uint8_t msg3_round; + /// TBS used for Msg4 + int msg4_TBsize; + /// MCS used for Msg4 + int msg4_mcs; #ifdef Rel14 - uint8_t rach_resource_type; - uint8_t msg2_mpdcch_repetition_cnt; - uint8_t msg4_mpdcch_repetition_cnt; - uint8_t msg2_narrowband; - uint8_t msg34_narrowband; + uint8_t rach_resource_type; + uint8_t msg2_mpdcch_repetition_cnt; + uint8_t msg4_mpdcch_repetition_cnt; + uint8_t msg2_narrowband; + uint8_t msg34_narrowband; #endif -} RA_TEMPLATE; +} RA_t; /*! \brief subband bitmap confguration (for ALU icic algo purpose), in test phase */ typedef struct { - uint8_t sbmap[NUMBER_OF_SUBBANDS_MAX]; //13 = number of SB MAX for 100 PRB - uint8_t periodicity; - uint8_t first_subframe; - uint8_t sb_size; - uint8_t nb_active_sb; + uint8_t sbmap[NUMBER_OF_SUBBANDS_MAX]; //13 = number of SB MAX for 100 PRB + uint8_t periodicity; + uint8_t first_subframe; + uint8_t sb_size; + uint8_t nb_active_sb; } SBMAP_CONF; -/*! \brief UE list used by eNB to order UEs/CC for scheduling*/ +/*! \brief UE list used by eNB to order UEs/CC for scheduling*/ typedef struct { - /// Dedicated information for UEs - struct PhysicalConfigDedicated *physicalConfigDedicated[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; - /// DLSCH pdu - DLSCH_PDU DLSCH_pdu[MAX_NUM_CCs][2][NUMBER_OF_UE_MAX]; - /// DCI template and MAC connection parameters for UEs - UE_TEMPLATE UE_template[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; - /// DCI template and MAC connection for RA processes - int pCC_id[NUMBER_OF_UE_MAX]; - /// sorted downlink component carrier for the scheduler - int ordered_CCids[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; - /// number of downlink active component carrier - int numactiveCCs[NUMBER_OF_UE_MAX]; - /// sorted uplink component carrier for the scheduler - int ordered_ULCCids[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; - /// number of uplink active component carrier - int numactiveULCCs[NUMBER_OF_UE_MAX]; - /// number of downlink active component carrier - uint8_t dl_CC_bitmap[NUMBER_OF_UE_MAX]; - /// eNB to UE statistics - eNB_UE_STATS eNB_UE_stats[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; - /// scheduling control info - UE_sched_ctrl UE_sched_ctrl[NUMBER_OF_UE_MAX]; - int next[NUMBER_OF_UE_MAX]; - int head; - int next_ul[NUMBER_OF_UE_MAX]; - int head_ul; - int avail; - int num_UEs; - boolean_t active[NUMBER_OF_UE_MAX]; + /// Dedicated information for UEs + struct PhysicalConfigDedicated + *physicalConfigDedicated[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + /// DLSCH pdu + DLSCH_PDU DLSCH_pdu[MAX_NUM_CCs][2][NUMBER_OF_UE_MAX]; + /// DCI template and MAC connection parameters for UEs + UE_TEMPLATE UE_template[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + /// DCI template and MAC connection for RA processes + int pCC_id[NUMBER_OF_UE_MAX]; + /// sorted downlink component carrier for the scheduler + int ordered_CCids[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + /// number of downlink active component carrier + int numactiveCCs[NUMBER_OF_UE_MAX]; + /// sorted uplink component carrier for the scheduler + int ordered_ULCCids[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + /// number of uplink active component carrier + int numactiveULCCs[NUMBER_OF_UE_MAX]; + /// number of downlink active component carrier + uint8_t dl_CC_bitmap[NUMBER_OF_UE_MAX]; + /// eNB to UE statistics + eNB_UE_STATS eNB_UE_stats[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + /// scheduling control info + UE_sched_ctrl UE_sched_ctrl[NUMBER_OF_UE_MAX]; + int next[NUMBER_OF_UE_MAX]; + int head; + int next_ul[NUMBER_OF_UE_MAX]; + int head_ul; + int avail; + int num_UEs; + boolean_t active[NUMBER_OF_UE_MAX]; } UE_list_t; -/*! \brief eNB common channels */ +/*! \brief eNB common channels */ typedef struct { - int physCellId; - int p_eNB; - int Ncp; - int eutra_band; - uint32_t dl_CarrierFreq; - BCCH_BCH_Message_t *mib; - RadioResourceConfigCommonSIB_t *radioResourceConfigCommon; + int physCellId; + int p_eNB; + int Ncp; + int eutra_band; + uint32_t dl_CarrierFreq; + BCCH_BCH_Message_t *mib; + RadioResourceConfigCommonSIB_t *radioResourceConfigCommon; #ifdef Rel14 - RadioResourceConfigCommonSIB_t *radioResourceConfigCommon_BR; + RadioResourceConfigCommonSIB_t *radioResourceConfigCommon_BR; #endif - TDD_Config_t *tdd_Config; - SchedulingInfoList_t *schedulingInfoList; - ARFCN_ValueEUTRA_t ul_CarrierFreq; - long ul_Bandwidth; - /// Outgoing MIB PDU for PHY - MIB_PDU MIB_pdu; - /// Outgoing BCCH pdu for PHY - BCCH_PDU BCCH_pdu; - /// Outgoing BCCH DCI allocation - uint32_t BCCH_alloc_pdu; - /// Outgoing CCCH pdu for PHY - CCCH_PDU CCCH_pdu; - /// Outgoing RAR pdu for PHY - RAR_PDU RAR_pdu; - /// Template for RA computations - RA_TEMPLATE RA_template[NB_RA_PROC_MAX]; - /// VRB map for common channels - uint8_t vrb_map[100]; - /// VRB map for common channels and retransmissions by PHICH - uint8_t vrb_map_UL[100]; - /// MBSFN SubframeConfig - struct MBSFN_SubframeConfig *mbsfn_SubframeConfig[8]; - /// number of subframe allocation pattern available for MBSFN sync area - uint8_t num_sf_allocation_pattern; + TDD_Config_t *tdd_Config; + SchedulingInfoList_t *schedulingInfoList; + ARFCN_ValueEUTRA_t ul_CarrierFreq; + long ul_Bandwidth; + /// Outgoing MIB PDU for PHY + MIB_PDU MIB_pdu; + /// Outgoing BCCH pdu for PHY + BCCH_PDU BCCH_pdu; + /// Outgoing BCCH DCI allocation + uint32_t BCCH_alloc_pdu; + /// Outgoing CCCH pdu for PHY + CCCH_PDU CCCH_pdu; + /// Outgoing RAR pdu for PHY + RAR_PDU RAR_pdu; + /// Template for RA computations + RA_t ra[NB_RA_PROC_MAX]; + /// VRB map for common channels + uint8_t vrb_map[100]; + /// VRB map for common channels and retransmissions by PHICH + uint8_t vrb_map_UL[100]; + /// MBSFN SubframeConfig + struct MBSFN_SubframeConfig *mbsfn_SubframeConfig[8]; + /// number of subframe allocation pattern available for MBSFN sync area + uint8_t num_sf_allocation_pattern; #if defined(Rel10) || defined(Rel14) - /// MBMS Flag - uint8_t MBMS_flag; - /// Outgoing MCCH pdu for PHY - MCCH_PDU MCCH_pdu; - /// MCCH active flag - uint8_t msi_active; - /// MCCH active flag - uint8_t mcch_active; - /// MTCH active flag - uint8_t mtch_active; - /// number of active MBSFN area - uint8_t num_active_mbsfn_area; - /// MBSFN Area Info - struct MBSFN_AreaInfo_r9 *mbsfn_AreaInfo[MAX_MBSFN_AREA]; - /// PMCH Config - struct PMCH_Config_r9 *pmch_Config[MAX_PMCH_perMBSFN]; - /// MBMS session info list - struct MBMS_SessionInfoList_r9 *mbms_SessionList[MAX_PMCH_perMBSFN]; - /// Outgoing MCH pdu for PHY - MCH_PDU MCH_pdu; + /// MBMS Flag + uint8_t MBMS_flag; + /// Outgoing MCCH pdu for PHY + MCCH_PDU MCCH_pdu; + /// MCCH active flag + uint8_t msi_active; + /// MCCH active flag + uint8_t mcch_active; + /// MTCH active flag + uint8_t mtch_active; + /// number of active MBSFN area + uint8_t num_active_mbsfn_area; + /// MBSFN Area Info + struct MBSFN_AreaInfo_r9 *mbsfn_AreaInfo[MAX_MBSFN_AREA]; + /// PMCH Config + struct PMCH_Config_r9 *pmch_Config[MAX_PMCH_perMBSFN]; + /// MBMS session info list + struct MBMS_SessionInfoList_r9 *mbms_SessionList[MAX_PMCH_perMBSFN]; + /// Outgoing MCH pdu for PHY + MCH_PDU MCH_pdu; #endif #ifdef Rel14 - /// Rel13 parameters from SIB1 - SystemInformationBlockType1_v1310_IEs_t *sib1_v13ext; - /// Counter for SIB1-BR scheduling - int SIB1_BR_cnt; - /// Outgoing BCCH-BR pdu for PHY - BCCH_PDU BCCH_BR_pdu[20]; + /// Rel13 parameters from SIB1 + SystemInformationBlockType1_v1310_IEs_t *sib1_v13ext; + /// Counter for SIB1-BR scheduling + int SIB1_BR_cnt; + /// Outgoing BCCH-BR pdu for PHY + BCCH_PDU BCCH_BR_pdu[20]; #endif } COMMON_channels_t; -/*! \brief top level eNB MAC structure */ +/*! \brief top level eNB MAC structure */ typedef struct eNB_MAC_INST_s { - /// Ethernet parameters for northbound midhaul interface - eth_params_t eth_params_n; - /// Ethernet parameters for fronthaul interface - eth_params_t eth_params_s; - /// - module_id_t Mod_id; - /// frame counter - frame_t frame; - /// subframe counter - sub_frame_t subframe; - /// Pointer to IF module instance for PHY - IF_Module_t *if_inst; - /// Common cell resources - COMMON_channels_t common_channels[MAX_NUM_CCs]; - /// current PDU index (BCH,MCH,DLSCH) - uint16_t pdu_index[MAX_NUM_CCs]; + /// Ethernet parameters for northbound midhaul interface + eth_params_t eth_params_n; + /// Ethernet parameters for fronthaul interface + eth_params_t eth_params_s; + /// + module_id_t Mod_id; + /// frame counter + frame_t frame; + /// subframe counter + sub_frame_t subframe; + /// Pointer to IF module instance for PHY + IF_Module_t *if_inst; + /// Common cell resources + COMMON_channels_t common_channels[MAX_NUM_CCs]; + /// current PDU index (BCH,MCH,DLSCH) + uint16_t pdu_index[MAX_NUM_CCs]; - /// NFAPI Config Request Structure - nfapi_config_request_t config[MAX_NUM_CCs]; - /// Preallocated DL pdu list - nfapi_dl_config_request_pdu_t dl_config_pdu_list[MAX_NUM_CCs][MAX_NUM_DL_PDU]; - /// NFAPI DL Config Request Structure - nfapi_dl_config_request_t DL_req[MAX_NUM_CCs]; - /// Preallocated UL pdu list - nfapi_ul_config_request_pdu_t ul_config_pdu_list[MAX_NUM_CCs][MAX_NUM_UL_PDU]; - /// Preallocated UL pdu list for ULSCH (n+k delay) - nfapi_ul_config_request_pdu_t ul_config_pdu_list_tmp[MAX_NUM_CCs][10][MAX_NUM_UL_PDU]; - /// NFAPI UL Config Request Structure, send to L1 4 subframes before processing takes place - nfapi_ul_config_request_t UL_req[MAX_NUM_CCs]; - /// NFAPI "Temporary" UL Config Request Structure, holds future UL_config requests - nfapi_ul_config_request_t UL_req_tmp[MAX_NUM_CCs][10]; - /// Preallocated HI_DCI0 pdu list - nfapi_hi_dci0_request_pdu_t hi_dci0_pdu_list[MAX_NUM_CCs][MAX_NUM_HI_DCI0_PDU]; - /// NFAPI HI/DCI0 Config Request Structure - nfapi_hi_dci0_request_t HI_DCI0_req[MAX_NUM_CCs]; - /// Prealocated TX pdu list - nfapi_tx_request_pdu_t tx_request_pdu[MAX_NUM_CCs][MAX_NUM_TX_REQUEST_PDU]; - /// NFAPI DL PDU structure - nfapi_tx_request_t TX_req[MAX_NUM_CCs]; - /// UL handle - uint32_t ul_handle; - UE_list_t UE_list; + /// NFAPI Config Request Structure + nfapi_config_request_t config[MAX_NUM_CCs]; + /// Preallocated DL pdu list + nfapi_dl_config_request_pdu_t + dl_config_pdu_list[MAX_NUM_CCs][MAX_NUM_DL_PDU]; + /// NFAPI DL Config Request Structure + nfapi_dl_config_request_t DL_req[MAX_NUM_CCs]; + /// Preallocated UL pdu list + nfapi_ul_config_request_pdu_t + ul_config_pdu_list[MAX_NUM_CCs][MAX_NUM_UL_PDU]; + /// Preallocated UL pdu list for ULSCH (n+k delay) + nfapi_ul_config_request_pdu_t + ul_config_pdu_list_tmp[MAX_NUM_CCs][10][MAX_NUM_UL_PDU]; + /// NFAPI UL Config Request Structure, send to L1 4 subframes before processing takes place + nfapi_ul_config_request_t UL_req[MAX_NUM_CCs]; + /// NFAPI "Temporary" UL Config Request Structure, holds future UL_config requests + nfapi_ul_config_request_t UL_req_tmp[MAX_NUM_CCs][10]; + /// Preallocated HI_DCI0 pdu list + nfapi_hi_dci0_request_pdu_t + hi_dci0_pdu_list[MAX_NUM_CCs][MAX_NUM_HI_DCI0_PDU]; + /// NFAPI HI/DCI0 Config Request Structure + nfapi_hi_dci0_request_t HI_DCI0_req[MAX_NUM_CCs]; + /// Prealocated TX pdu list + nfapi_tx_request_pdu_t + tx_request_pdu[MAX_NUM_CCs][MAX_NUM_TX_REQUEST_PDU]; + /// NFAPI DL PDU structure + nfapi_tx_request_t TX_req[MAX_NUM_CCs]; + /// UL handle + uint32_t ul_handle; + UE_list_t UE_list; - ///subband bitmap configuration - SBMAP_CONF sbmap_conf; - /// CCE table used to build DCI scheduling information - int CCE_table[MAX_NUM_CCs][800]; - /// active flag for Other lcid - uint8_t lcid_active[NB_RB_MAX]; - /// eNB stats - eNB_STATS eNB_stats[MAX_NUM_CCs]; - // MAC function execution peformance profiler - /// processing time of eNB scheduler - time_stats_t eNB_scheduler; - /// processing time of eNB scheduler for SI - time_stats_t schedule_si; - /// processing time of eNB scheduler for Random access - time_stats_t schedule_ra; - /// processing time of eNB ULSCH scheduler - time_stats_t schedule_ulsch; - /// processing time of eNB DCI generation - time_stats_t fill_DLSCH_dci; - /// processing time of eNB MAC preprocessor - time_stats_t schedule_dlsch_preprocessor; - /// processing time of eNB DLSCH scheduler - time_stats_t schedule_dlsch; // include rlc_data_req + MAC header + preprocessor - /// processing time of eNB MCH scheduler - time_stats_t schedule_mch; - /// processing time of eNB ULSCH reception - time_stats_t rx_ulsch_sdu; // include rlc_data_ind + ///subband bitmap configuration + SBMAP_CONF sbmap_conf; + /// CCE table used to build DCI scheduling information + int CCE_table[MAX_NUM_CCs][800]; + /// active flag for Other lcid + uint8_t lcid_active[NB_RB_MAX]; + /// eNB stats + eNB_STATS eNB_stats[MAX_NUM_CCs]; + // MAC function execution peformance profiler + /// processing time of eNB scheduler + time_stats_t eNB_scheduler; + /// processing time of eNB scheduler for SI + time_stats_t schedule_si; + /// processing time of eNB scheduler for Random access + time_stats_t schedule_ra; + /// processing time of eNB ULSCH scheduler + time_stats_t schedule_ulsch; + /// processing time of eNB DCI generation + time_stats_t fill_DLSCH_dci; + /// processing time of eNB MAC preprocessor + time_stats_t schedule_dlsch_preprocessor; + /// processing time of eNB DLSCH scheduler + time_stats_t schedule_dlsch; // include rlc_data_req + MAC header + preprocessor + /// processing time of eNB MCH scheduler + time_stats_t schedule_mch; + /// processing time of eNB ULSCH reception + time_stats_t rx_ulsch_sdu; // include rlc_data_ind } eNB_MAC_INST; /* * UE part - */ + */ typedef enum { - TYPE0, - TYPE1, - TYPE1A, - TYPE2, - TYPE2A, - TYPEUESPEC + TYPE0, + TYPE1, + TYPE1A, + TYPE2, + TYPE2A, + TYPEUESPEC } MPDCCH_TYPES_t; /*!\brief UE layer 2 status */ typedef enum { - CONNECTION_OK=0, - CONNECTION_LOST, - PHY_RESYNCH, - PHY_HO_PRACH + CONNECTION_OK = 0, + CONNECTION_LOST, + PHY_RESYNCH, + PHY_HO_PRACH } UE_L2_STATE_t; /*!\brief UE scheduling info */ typedef struct { - /// buffer status for each lcgid - uint8_t BSR[MAX_NUM_LCGID]; // should be more for mesh topology - /// keep the number of bytes in rlc buffer for each lcgid - int32_t BSR_bytes[MAX_NUM_LCGID]; - /// after multiplexing buffer remain for each lcid - int32_t LCID_buffer_remain[MAX_NUM_LCID]; - /// sum of all lcid buffer size - uint16_t All_lcid_buffer_size_lastTTI; - /// buffer status for each lcid - uint8_t LCID_status[MAX_NUM_LCID]; - /// SR pending as defined in 36.321 - uint8_t SR_pending; - /// SR_COUNTER as defined in 36.321 - uint16_t SR_COUNTER; - /// logical channel group ide for each LCID - uint8_t LCGID[MAX_NUM_LCID]; - /// retxBSR-Timer, default value is sf2560 - uint16_t retxBSR_Timer; - /// retxBSR_SF, number of subframe before triggering a regular BSR - uint16_t retxBSR_SF; - /// periodicBSR-Timer, default to infinity - uint16_t periodicBSR_Timer; - /// periodicBSR_SF, number of subframe before triggering a periodic BSR - uint16_t periodicBSR_SF; - /// default value is 0: not configured - uint16_t sr_ProhibitTimer; - /// sr ProhibitTime running - uint8_t sr_ProhibitTimer_Running; - /// default value to n5 - uint16_t maxHARQ_Tx; - /// default value is false - uint16_t ttiBundling; - /// default value is release - struct DRX_Config *drx_config; - /// default value is release - struct MAC_MainConfig__phr_Config *phr_config; - ///timer before triggering a periodic PHR - uint16_t periodicPHR_Timer; - ///timer before triggering a prohibit PHR - uint16_t prohibitPHR_Timer; - ///DL Pathloss change value - uint16_t PathlossChange; - ///number of subframe before triggering a periodic PHR - int16_t periodicPHR_SF; - ///number of subframe before triggering a prohibit PHR - int16_t prohibitPHR_SF; - ///DL Pathloss Change in db - uint16_t PathlossChange_db; + /// buffer status for each lcgid + uint8_t BSR[MAX_NUM_LCGID]; // should be more for mesh topology + /// keep the number of bytes in rlc buffer for each lcgid + int32_t BSR_bytes[MAX_NUM_LCGID]; + /// after multiplexing buffer remain for each lcid + int32_t LCID_buffer_remain[MAX_NUM_LCID]; + /// sum of all lcid buffer size + uint16_t All_lcid_buffer_size_lastTTI; + /// buffer status for each lcid + uint8_t LCID_status[MAX_NUM_LCID]; + /// SR pending as defined in 36.321 + uint8_t SR_pending; + /// SR_COUNTER as defined in 36.321 + uint16_t SR_COUNTER; + /// logical channel group ide for each LCID + uint8_t LCGID[MAX_NUM_LCID]; + /// retxBSR-Timer, default value is sf2560 + uint16_t retxBSR_Timer; + /// retxBSR_SF, number of subframe before triggering a regular BSR + uint16_t retxBSR_SF; + /// periodicBSR-Timer, default to infinity + uint16_t periodicBSR_Timer; + /// periodicBSR_SF, number of subframe before triggering a periodic BSR + uint16_t periodicBSR_SF; + /// default value is 0: not configured + uint16_t sr_ProhibitTimer; + /// sr ProhibitTime running + uint8_t sr_ProhibitTimer_Running; + /// default value to n5 + uint16_t maxHARQ_Tx; + /// default value is false + uint16_t ttiBundling; + /// default value is release + struct DRX_Config *drx_config; + /// default value is release + struct MAC_MainConfig__phr_Config *phr_config; + ///timer before triggering a periodic PHR + uint16_t periodicPHR_Timer; + ///timer before triggering a prohibit PHR + uint16_t prohibitPHR_Timer; + ///DL Pathloss change value + uint16_t PathlossChange; + ///number of subframe before triggering a periodic PHR + int16_t periodicPHR_SF; + ///number of subframe before triggering a prohibit PHR + int16_t prohibitPHR_SF; + ///DL Pathloss Change in db + uint16_t PathlossChange_db; - /// default value is false - uint16_t extendedBSR_Sizes_r10; - /// default value is false - uint16_t extendedPHR_r10; + /// default value is false + uint16_t extendedBSR_Sizes_r10; + /// default value is false + uint16_t extendedPHR_r10; - //Bj bucket usage per lcid - int16_t Bj[MAX_NUM_LCID]; - // Bucket size per lcid - int16_t bucket_size[MAX_NUM_LCID]; + //Bj bucket usage per lcid + int16_t Bj[MAX_NUM_LCID]; + // Bucket size per lcid + int16_t bucket_size[MAX_NUM_LCID]; } UE_SCHEDULING_INFO; /*!\brief Top level UE MAC structure */ typedef struct { - uint16_t Node_id; - /// RX frame counter - frame_t rxFrame; - /// RX subframe counter - sub_frame_t rxSubframe; - /// TX frame counter - frame_t txFrame; - /// TX subframe counter - sub_frame_t txSubframe; - /// C-RNTI of UE - uint16_t crnti; - /// C-RNTI of UE before HO - rnti_t crnti_before_ho; ///user id (rnti) of connected UEs - /// uplink active flag - uint8_t ul_active; - /// pointer to RRC PHY configuration - RadioResourceConfigCommonSIB_t *radioResourceConfigCommon; - /// pointer to RACH_ConfigDedicated (NULL when not active, i.e. upon HO completion or T304 expiry) - struct RACH_ConfigDedicated *rach_ConfigDedicated; - /// pointer to RRC PHY configuration - struct PhysicalConfigDedicated *physicalConfigDedicated; + uint16_t Node_id; + /// RX frame counter + frame_t rxFrame; + /// RX subframe counter + sub_frame_t rxSubframe; + /// TX frame counter + frame_t txFrame; + /// TX subframe counter + sub_frame_t txSubframe; + /// C-RNTI of UE + uint16_t crnti; + /// C-RNTI of UE before HO + rnti_t crnti_before_ho; ///user id (rnti) of connected UEs + /// uplink active flag + uint8_t ul_active; + /// pointer to RRC PHY configuration + RadioResourceConfigCommonSIB_t *radioResourceConfigCommon; + /// pointer to RACH_ConfigDedicated (NULL when not active, i.e. upon HO completion or T304 expiry) + struct RACH_ConfigDedicated *rach_ConfigDedicated; + /// pointer to RRC PHY configuration + struct PhysicalConfigDedicated *physicalConfigDedicated; #if defined(Rel10) || defined(Rel14) - /// pointer to RRC PHY configuration SCEll - struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10; + /// pointer to RRC PHY configuration SCEll + struct PhysicalConfigDedicatedSCell_r10 + *physicalConfigDedicatedSCell_r10; #endif - /// pointer to TDD Configuration (NULL for FDD) - TDD_Config_t *tdd_Config; - /// Number of adjacent cells to measure - uint8_t n_adj_cells; - /// Array of adjacent physical cell ids - uint32_t adj_cell_id[6]; - /// Pointer to RRC MAC configuration - MAC_MainConfig_t *macConfig; - /// Pointer to RRC Measurement gap configuration - MeasGapConfig_t *measGapConfig; - /// Pointers to LogicalChannelConfig indexed by LogicalChannelIdentity. Note NULL means LCHAN is inactive. - LogicalChannelConfig_t *logicalChannelConfig[MAX_NUM_LCID]; - /// Scheduling Information - UE_SCHEDULING_INFO scheduling_info; - /// Outgoing CCCH pdu for PHY - CCCH_PDU CCCH_pdu; - /// Outgoing RAR pdu for PHY - RAR_PDU RAR_pdu; - /// Incoming DLSCH pdu for PHY - DLSCH_PDU DLSCH_pdu[NUMBER_OF_UE_MAX][2]; - /// number of attempt for rach - uint8_t RA_attempt_number; - /// Random-access procedure flag - uint8_t RA_active; - /// Random-access window counter - int8_t RA_window_cnt; - /// Random-access Msg3 size in bytes - uint8_t RA_Msg3_size; - /// Random-access prachMaskIndex - uint8_t RA_prachMaskIndex; - /// Flag indicating Preamble set (A,B) used for first Msg3 transmission - uint8_t RA_usedGroupA; - /// Random-access Resources - PRACH_RESOURCES_t RA_prach_resources; - /// Random-access PREAMBLE_TRANSMISSION_COUNTER - uint8_t RA_PREAMBLE_TRANSMISSION_COUNTER; - /// Random-access backoff counter - int16_t RA_backoff_cnt; - /// Random-access variable for window calculation (frame of last change in window counter) - uint32_t RA_tx_frame; - /// Random-access variable for window calculation (subframe of last change in window counter) - uint8_t RA_tx_subframe; - /// Random-access Group B maximum path-loss - /// Random-access variable for backoff (frame of last change in backoff counter) - uint32_t RA_backoff_frame; - /// Random-access variable for backoff (subframe of last change in backoff counter) - uint8_t RA_backoff_subframe; - /// Random-access Group B maximum path-loss - uint16_t RA_maxPL; - /// Random-access Contention Resolution Timer active flag - uint8_t RA_contention_resolution_timer_active; - /// Random-access Contention Resolution Timer count value - uint8_t RA_contention_resolution_cnt; - /// power headroom reporitng reconfigured - uint8_t PHR_reconfigured; - /// power headroom state as configured by the higher layers - uint8_t PHR_state; - /// power backoff due to power management (as allowed by P-MPRc) for this cell - uint8_t PHR_reporting_active; - /// power backoff due to power management (as allowed by P-MPRc) for this cell - uint8_t power_backoff_db[NUMBER_OF_eNB_MAX]; - /// BSR report falg management - uint8_t BSR_reporting_active; - /// retxBSR-Timer expires flag - uint8_t retxBSRTimer_expires_flag; - /// periodBSR-Timer expires flag - uint8_t periodBSRTimer_expires_flag; + /// pointer to TDD Configuration (NULL for FDD) + TDD_Config_t *tdd_Config; + /// Number of adjacent cells to measure + uint8_t n_adj_cells; + /// Array of adjacent physical cell ids + uint32_t adj_cell_id[6]; + /// Pointer to RRC MAC configuration + MAC_MainConfig_t *macConfig; + /// Pointer to RRC Measurement gap configuration + MeasGapConfig_t *measGapConfig; + /// Pointers to LogicalChannelConfig indexed by LogicalChannelIdentity. Note NULL means LCHAN is inactive. + LogicalChannelConfig_t *logicalChannelConfig[MAX_NUM_LCID]; + /// Scheduling Information + UE_SCHEDULING_INFO scheduling_info; + /// Outgoing CCCH pdu for PHY + CCCH_PDU CCCH_pdu; + /// Outgoing RAR pdu for PHY + RAR_PDU RAR_pdu; + /// Incoming DLSCH pdu for PHY + DLSCH_PDU DLSCH_pdu[NUMBER_OF_UE_MAX][2]; + /// number of attempt for rach + uint8_t RA_attempt_number; + /// Random-access procedure flag + uint8_t RA_active; + /// Random-access window counter + int8_t RA_window_cnt; + /// Random-access Msg3 size in bytes + uint8_t RA_Msg3_size; + /// Random-access prachMaskIndex + uint8_t RA_prachMaskIndex; + /// Flag indicating Preamble set (A,B) used for first Msg3 transmission + uint8_t RA_usedGroupA; + /// Random-access Resources + PRACH_RESOURCES_t RA_prach_resources; + /// Random-access PREAMBLE_TRANSMISSION_COUNTER + uint8_t RA_PREAMBLE_TRANSMISSION_COUNTER; + /// Random-access backoff counter + int16_t RA_backoff_cnt; + /// Random-access variable for window calculation (frame of last change in window counter) + uint32_t RA_tx_frame; + /// Random-access variable for window calculation (subframe of last change in window counter) + uint8_t RA_tx_subframe; + /// Random-access Group B maximum path-loss + /// Random-access variable for backoff (frame of last change in backoff counter) + uint32_t RA_backoff_frame; + /// Random-access variable for backoff (subframe of last change in backoff counter) + uint8_t RA_backoff_subframe; + /// Random-access Group B maximum path-loss + uint16_t RA_maxPL; + /// Random-access Contention Resolution Timer active flag + uint8_t RA_contention_resolution_timer_active; + /// Random-access Contention Resolution Timer count value + uint8_t RA_contention_resolution_cnt; + /// power headroom reporitng reconfigured + uint8_t PHR_reconfigured; + /// power headroom state as configured by the higher layers + uint8_t PHR_state; + /// power backoff due to power management (as allowed by P-MPRc) for this cell + uint8_t PHR_reporting_active; + /// power backoff due to power management (as allowed by P-MPRc) for this cell + uint8_t power_backoff_db[NUMBER_OF_eNB_MAX]; + /// BSR report falg management + uint8_t BSR_reporting_active; + /// retxBSR-Timer expires flag + uint8_t retxBSRTimer_expires_flag; + /// periodBSR-Timer expires flag + uint8_t periodBSRTimer_expires_flag; - /// MBSFN_Subframe Configuration - struct MBSFN_SubframeConfig *mbsfn_SubframeConfig[8]; // FIXME replace 8 by MAX_MBSFN_AREA? - /// number of subframe allocation pattern available for MBSFN sync area - uint8_t num_sf_allocation_pattern; + /// MBSFN_Subframe Configuration + struct MBSFN_SubframeConfig *mbsfn_SubframeConfig[8]; // FIXME replace 8 by MAX_MBSFN_AREA? + /// number of subframe allocation pattern available for MBSFN sync area + uint8_t num_sf_allocation_pattern; #if defined(Rel10) || defined(Rel14) - /// number of active MBSFN area - uint8_t num_active_mbsfn_area; - /// MBSFN Area Info - struct MBSFN_AreaInfo_r9 *mbsfn_AreaInfo[MAX_MBSFN_AREA]; - /// PMCH Config - struct PMCH_Config_r9 *pmch_Config[MAX_PMCH_perMBSFN]; - /// MCCH status - uint8_t mcch_status; - /// MSI status - uint8_t msi_status;// could be an array if there are >1 MCH in one MBSFN area + /// number of active MBSFN area + uint8_t num_active_mbsfn_area; + /// MBSFN Area Info + struct MBSFN_AreaInfo_r9 *mbsfn_AreaInfo[MAX_MBSFN_AREA]; + /// PMCH Config + struct PMCH_Config_r9 *pmch_Config[MAX_PMCH_perMBSFN]; + /// MCCH status + uint8_t mcch_status; + /// MSI status + uint8_t msi_status; // could be an array if there are >1 MCH in one MBSFN area #endif - //#ifdef CBA - /// CBA RNTI for each group - uint16_t cba_rnti[NUM_MAX_CBA_GROUP]; - /// last SFN for CBA channel access - uint8_t cba_last_access[NUM_MAX_CBA_GROUP]; - //#endif - /// total UE scheduler processing time - time_stats_t ue_scheduler; // total - /// UE ULSCH tx processing time inlcuding RLC interface (rlc_data_req) and mac header generation - time_stats_t tx_ulsch_sdu; - /// UE DLSCH rx processing time inlcuding RLC interface (mac_rrc_data_ind or mac_rlc_status_ind+mac_rlc_data_ind) and mac header parser - time_stats_t rx_dlsch_sdu ; - /// UE query for MCH subframe processing time - time_stats_t ue_query_mch; - /// UE MCH rx processing time - time_stats_t rx_mch_sdu; - /// UE BCCH rx processing time including RLC interface (mac_rrc_data_ind) - time_stats_t rx_si; - /// UE PCCH rx processing time including RLC interface (mac_rrc_data_ind) - time_stats_t rx_p; + //#ifdef CBA + /// CBA RNTI for each group + uint16_t cba_rnti[NUM_MAX_CBA_GROUP]; + /// last SFN for CBA channel access + uint8_t cba_last_access[NUM_MAX_CBA_GROUP]; + //#endif + /// total UE scheduler processing time + time_stats_t ue_scheduler; // total + /// UE ULSCH tx processing time inlcuding RLC interface (rlc_data_req) and mac header generation + time_stats_t tx_ulsch_sdu; + /// UE DLSCH rx processing time inlcuding RLC interface (mac_rrc_data_ind or mac_rlc_status_ind+mac_rlc_data_ind) and mac header parser + time_stats_t rx_dlsch_sdu; + /// UE query for MCH subframe processing time + time_stats_t ue_query_mch; + /// UE MCH rx processing time + time_stats_t rx_mch_sdu; + /// UE BCCH rx processing time including RLC interface (mac_rrc_data_ind) + time_stats_t rx_si; + /// UE PCCH rx processing time including RLC interface (mac_rrc_data_ind) + time_stats_t rx_p; } UE_MAC_INST; /*! \brief ID of the neighboring cells used for HO*/ typedef struct { - uint16_t cell_ids[6]; - uint8_t n_adj_cells; + uint16_t cell_ids[6]; + uint8_t n_adj_cells; } neigh_cell_id_t; #include "proto.h" /*@}*/ #endif /*__LAYER2_MAC_DEFS_H__ */ - - - diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c index 6bcbc13106..f7c3f5829d 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler.c +++ b/openair2/LAYER2/MAC/eNB_scheduler.c @@ -60,7 +60,7 @@ #endif #if defined(ENABLE_ITTI) -# include "intertask_interface.h" +#include "intertask_interface.h" #endif #define ENABLE_MAC_PAYLOAD_DEBUG @@ -68,481 +68,693 @@ extern RAN_CONTEXT_t RC; -uint16_t pdcch_order_table[6] = {31,31,511,2047,2047,8191}; +uint16_t pdcch_order_table[6] = { 31, 31, 511, 2047, 2047, 8191 }; -void schedule_SRS(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) +void +schedule_SRS(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP) { - eNB_MAC_INST *eNB = RC.mac[module_idP]; - UE_list_t *UE_list = &eNB->UE_list; - nfapi_ul_config_request_body_t *ul_req; - int CC_id,UE_id; - COMMON_channels_t *cc = RC.mac[module_idP]->common_channels; - SoundingRS_UL_ConfigCommon_t *soundingRS_UL_ConfigCommon; - struct SoundingRS_UL_ConfigDedicated *soundingRS_UL_ConfigDedicated; - uint8_t TSFC; - uint16_t deltaTSFC; // bitmap - uint8_t srs_SubframeConfig; + eNB_MAC_INST *eNB = RC.mac[module_idP]; + UE_list_t *UE_list = &eNB->UE_list; + nfapi_ul_config_request_body_t *ul_req; + int CC_id, UE_id; + COMMON_channels_t *cc = RC.mac[module_idP]->common_channels; + SoundingRS_UL_ConfigCommon_t *soundingRS_UL_ConfigCommon; + struct SoundingRS_UL_ConfigDedicated *soundingRS_UL_ConfigDedicated; + uint8_t TSFC; + uint16_t deltaTSFC; // bitmap + uint8_t srs_SubframeConfig; - // table for TSFC (Period) and deltaSFC (offset) - const uint16_t deltaTSFCTabType1[15][2] = { {1,1},{1,2},{2,2},{1,5},{2,5},{4,5},{8,5},{3,5},{12,5},{1,10},{2,10},{4,10},{8,10},{351,10},{383,10} }; // Table 5.5.3.3-2 3GPP 36.211 FDD - const uint16_t deltaTSFCTabType2[14][2] = { {2,5},{6,5},{10,5},{18,5},{14,5},{22,5},{26,5},{30,5},{70,10},{74,10},{194,10},{326,10},{586,10},{210,10} }; // Table 5.5.3.3-2 3GPP 36.211 TDD + // table for TSFC (Period) and deltaSFC (offset) + const uint16_t deltaTSFCTabType1[15][2] = { {1, 1}, {1, 2}, {2, 2}, {1, 5}, {2, 5}, {4, 5}, {8, 5}, {3, 5}, {12, 5}, {1, 10}, {2, 10}, {4, 10}, {8, 10}, {351, 10}, {383, 10} }; // Table 5.5.3.3-2 3GPP 36.211 FDD + const uint16_t deltaTSFCTabType2[14][2] = { {2, 5}, {6, 5}, {10, 5}, {18, 5}, {14, 5}, {22, 5}, {26, 5}, {30, 5}, {70, 10}, {74, 10}, {194, 10}, {326, 10}, {586, 10}, {210, 10} }; // Table 5.5.3.3-2 3GPP 36.211 TDD - uint16_t srsPeriodicity,srsOffset; + uint16_t srsPeriodicity, srsOffset; - for (CC_id=0;CC_idsoundingRS_UL_ConfigCommon; - // check if SRS is enabled in this frame/subframe - if (soundingRS_UL_ConfigCommon) { - srs_SubframeConfig = soundingRS_UL_ConfigCommon->choice.setup.srs_SubframeConfig; - if (cc[CC_id].tdd_Config == NULL) { // FDD - deltaTSFC = deltaTSFCTabType1[srs_SubframeConfig][0]; - TSFC = deltaTSFCTabType1[srs_SubframeConfig][1]; - } - else { // TDD - deltaTSFC = deltaTSFCTabType2[srs_SubframeConfig][0]; - TSFC = deltaTSFCTabType2[srs_SubframeConfig][1]; - } - // Sounding reference signal subframes are the subframes satisfying ns/2 mod TSFC (- deltaTSFC - uint16_t tmp = (subframeP % TSFC); + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + soundingRS_UL_ConfigCommon = + &cc[CC_id].radioResourceConfigCommon-> + soundingRS_UL_ConfigCommon; + // check if SRS is enabled in this frame/subframe + if (soundingRS_UL_ConfigCommon) { + srs_SubframeConfig = + soundingRS_UL_ConfigCommon->choice.setup. + srs_SubframeConfig; + if (cc[CC_id].tdd_Config == NULL) { // FDD + deltaTSFC = deltaTSFCTabType1[srs_SubframeConfig][0]; + TSFC = deltaTSFCTabType1[srs_SubframeConfig][1]; + } else { // TDD + deltaTSFC = deltaTSFCTabType2[srs_SubframeConfig][0]; + TSFC = deltaTSFCTabType2[srs_SubframeConfig][1]; + } + // Sounding reference signal subframes are the subframes satisfying ns/2 mod TSFC (- deltaTSFC + uint16_t tmp = (subframeP % TSFC); - if((1<UE_list.active[UE_id]!=TRUE) continue; - ul_req = &RC.mac[module_idP]->UL_req[CC_id].ul_config_request_body; + if ((1 << tmp) & deltaTSFC) { + // This is an SRS subframe, loop over UEs + for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) { + if (RC.mac[module_idP]->UE_list.active[UE_id] != TRUE) + continue; + ul_req = + &RC.mac[module_idP]->UL_req[CC_id]. + ul_config_request_body; - // drop the allocation if the UE hasn't send RRCConnectionSetupComplete yet - if (mac_eNB_get_rrc_status(module_idP,UE_RNTI(module_idP,UE_id)) < RRC_CONNECTED) continue; + // drop the allocation if the UE hasn't send RRCConnectionSetupComplete yet + if (mac_eNB_get_rrc_status + (module_idP, + UE_RNTI(module_idP, UE_id)) < RRC_CONNECTED) + continue; - AssertFatal(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated != NULL, "physicalConfigDedicated is null for UE %d\n",UE_id); + AssertFatal(UE_list->UE_template[CC_id] + [UE_id].physicalConfigDedicated != NULL, + "physicalConfigDedicated is null for UE %d\n", + UE_id); - if ((soundingRS_UL_ConfigDedicated = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->soundingRS_UL_ConfigDedicated)!=NULL) { - if (soundingRS_UL_ConfigDedicated->present == SoundingRS_UL_ConfigDedicated_PR_setup) { - get_srs_pos(&cc[CC_id], soundingRS_UL_ConfigDedicated->choice.setup.srs_ConfigIndex, &srsPeriodicity, &srsOffset); - if (((10*frameP+subframeP) % srsPeriodicity) == srsOffset) { - // Prorgram SRS - ul_req->srs_present = 1; - nfapi_ul_config_request_pdu_t* ul_config_pdu = &ul_req->ul_config_pdu_list[ul_req->number_of_pdus]; - memset((void*)ul_config_pdu,0,sizeof(nfapi_ul_config_request_pdu_t)); - ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_SRS_PDU_TYPE; - ul_config_pdu->pdu_size = 2+(uint8_t)(2+sizeof(nfapi_ul_config_srs_pdu)); - ul_config_pdu->srs_pdu.srs_pdu_rel8.size = (uint8_t)sizeof(nfapi_ul_config_srs_pdu);; - ul_config_pdu->srs_pdu.srs_pdu_rel8.rnti = UE_list->UE_template[CC_id][UE_id].rnti; - ul_config_pdu->srs_pdu.srs_pdu_rel8.srs_bandwidth = soundingRS_UL_ConfigDedicated->choice.setup.srs_Bandwidth; - ul_config_pdu->srs_pdu.srs_pdu_rel8.frequency_domain_position = soundingRS_UL_ConfigDedicated->choice.setup.freqDomainPosition; - ul_config_pdu->srs_pdu.srs_pdu_rel8.srs_hopping_bandwidth = soundingRS_UL_ConfigDedicated->choice.setup.srs_HoppingBandwidth;; - ul_config_pdu->srs_pdu.srs_pdu_rel8.transmission_comb = soundingRS_UL_ConfigDedicated->choice.setup.transmissionComb; - ul_config_pdu->srs_pdu.srs_pdu_rel8.i_srs = soundingRS_UL_ConfigDedicated->choice.setup.srs_ConfigIndex; - ul_config_pdu->srs_pdu.srs_pdu_rel8.sounding_reference_cyclic_shift = soundingRS_UL_ConfigDedicated->choice.setup.cyclicShift; - // ul_config_pdu->srs_pdu.srs_pdu_rel10.antenna_port = ;// - // ul_config_pdu->srs_pdu.srs_pdu_rel13.number_of_combs = ;// - RC.mac[module_idP]->UL_req[CC_id].sfn_sf = (frameP<<4)+subframeP; + if ((soundingRS_UL_ConfigDedicated = + UE_list->UE_template[CC_id] + [UE_id]. + physicalConfigDedicated->soundingRS_UL_ConfigDedicated) + != NULL) { + if (soundingRS_UL_ConfigDedicated->present == + SoundingRS_UL_ConfigDedicated_PR_setup) { + get_srs_pos(&cc[CC_id], + soundingRS_UL_ConfigDedicated->choice. + setup.srs_ConfigIndex, + &srsPeriodicity, &srsOffset); + if (((10 * frameP + + subframeP) % srsPeriodicity) == + srsOffset) { + // Prorgram SRS + ul_req->srs_present = 1; + nfapi_ul_config_request_pdu_t + * ul_config_pdu = + &ul_req-> + ul_config_pdu_list + [ul_req->number_of_pdus]; + memset((void *) ul_config_pdu, 0, + sizeof + (nfapi_ul_config_request_pdu_t)); + ul_config_pdu->pdu_type = + NFAPI_UL_CONFIG_SRS_PDU_TYPE; + ul_config_pdu->pdu_size = + 2 + (uint8_t) (2 + + sizeof + (nfapi_ul_config_srs_pdu)); + ul_config_pdu->srs_pdu.srs_pdu_rel8.size = + (uint8_t) + sizeof(nfapi_ul_config_srs_pdu);; + ul_config_pdu->srs_pdu.srs_pdu_rel8.rnti = + UE_list->UE_template[CC_id][UE_id]. + rnti; + ul_config_pdu->srs_pdu. + srs_pdu_rel8.srs_bandwidth = + soundingRS_UL_ConfigDedicated-> + choice.setup.srs_Bandwidth; + ul_config_pdu->srs_pdu. + srs_pdu_rel8.frequency_domain_position + = + soundingRS_UL_ConfigDedicated-> + choice.setup.freqDomainPosition; + ul_config_pdu->srs_pdu. + srs_pdu_rel8.srs_hopping_bandwidth = + soundingRS_UL_ConfigDedicated-> + choice.setup.srs_HoppingBandwidth;; + ul_config_pdu->srs_pdu. + srs_pdu_rel8.transmission_comb = + soundingRS_UL_ConfigDedicated-> + choice.setup.transmissionComb; + ul_config_pdu->srs_pdu.srs_pdu_rel8.i_srs = + soundingRS_UL_ConfigDedicated-> + choice.setup.srs_ConfigIndex; + ul_config_pdu->srs_pdu. + srs_pdu_rel8.sounding_reference_cyclic_shift + = + soundingRS_UL_ConfigDedicated-> + choice.setup.cyclicShift; + // ul_config_pdu->srs_pdu.srs_pdu_rel10.antenna_port = ;// + // ul_config_pdu->srs_pdu.srs_pdu_rel13.number_of_combs = ;// + RC.mac[module_idP]->UL_req[CC_id].sfn_sf = + (frameP << 4) + subframeP; + ul_req->number_of_pdus++; + } // if (((10*frameP+subframeP) % srsPeriodicity) == srsOffset) + } // if (soundingRS_UL_ConfigDedicated->present == SoundingRS_UL_ConfigDedicated_PR_setup) + } // if ((soundingRS_UL_ConfigDedicated = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->soundingRS_UL_ConfigDedicated)!=NULL) + } // for (UE_id ... + } // if((1<UE_list; + COMMON_channels_t *cc; + nfapi_ul_config_request_body_t *ul_req; + int CC_id, UE_id; + struct CQI_ReportPeriodic *cqi_ReportPeriodic; + uint16_t Npd, N_OFFSET_CQI; + int H; + + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + + cc = &eNB->common_channels[CC_id]; + for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) { + if (UE_list->active[UE_id] != TRUE) + continue; + + ul_req = + &RC.mac[module_idP]->UL_req[CC_id].ul_config_request_body; + + // drop the allocation if the UE hasn't send RRCConnectionSetupComplete yet + if (mac_eNB_get_rrc_status + (module_idP, UE_RNTI(module_idP, UE_id)) < RRC_CONNECTED) + continue; + + AssertFatal(UE_list-> + UE_template[CC_id][UE_id].physicalConfigDedicated + != NULL, + "physicalConfigDedicated is null for UE %d\n", + UE_id); + + if (UE_list-> + UE_template[CC_id][UE_id].physicalConfigDedicated-> + cqi_ReportConfig) { + if ((cqi_ReportPeriodic = + UE_list-> + UE_template[CC_id][UE_id].physicalConfigDedicated-> + cqi_ReportConfig->cqi_ReportPeriodic) != NULL + && (cqi_ReportPeriodic->present != + CQI_ReportPeriodic_PR_release)) { + //Rel8 Periodic CQI/PMI/RI reporting + + get_csi_params(cc, cqi_ReportPeriodic, &Npd, + &N_OFFSET_CQI, &H); + + if ((((frameP * 10) + subframeP) % Npd) == N_OFFSET_CQI) { // CQI opportunity + UE_list->UE_sched_ctrl[UE_id].feedback_cnt[CC_id] = + (((frameP * 10) + subframeP) / Npd) % H; + // Program CQI + nfapi_ul_config_request_pdu_t *ul_config_pdu = + &ul_req->ul_config_pdu_list[ul_req-> + number_of_pdus]; + memset((void *) ul_config_pdu, 0, + sizeof(nfapi_ul_config_request_pdu_t)); + ul_config_pdu->pdu_type = + NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE; + ul_config_pdu->pdu_size = + 2 + (uint8_t) (2 + + sizeof + (nfapi_ul_config_uci_cqi_pdu)); + ul_config_pdu->uci_cqi_pdu. + ue_information.ue_information_rel8.rnti = + UE_list->UE_template[CC_id][UE_id].rnti; + ul_config_pdu->uci_cqi_pdu. + cqi_information.cqi_information_rel8. + pucch_index = + cqi_ReportPeriodic->choice. + setup.cqi_PUCCH_ResourceIndex; + ul_config_pdu->uci_cqi_pdu. + cqi_information.cqi_information_rel8. + dl_cqi_pmi_size = + get_rel8_dl_cqi_pmi_size + (&UE_list->UE_sched_ctrl[UE_id], CC_id, cc, + get_tmode(module_idP, CC_id, UE_id), + cqi_ReportPeriodic); + ul_req->number_of_pdus++; + +#if defined(Rel10) || defined(Rel14) + // PUT rel10-13 UCI options here +#endif + } else + if ((cqi_ReportPeriodic->choice.setup. + ri_ConfigIndex) + && ((((frameP * 10) + subframeP) % ((H * Npd) << (*cqi_ReportPeriodic->choice.setup.ri_ConfigIndex / 161))) == N_OFFSET_CQI + (*cqi_ReportPeriodic->choice.setup.ri_ConfigIndex % 161))) { // RI opportunity + // Program RI + nfapi_ul_config_request_pdu_t *ul_config_pdu = + &ul_req->ul_config_pdu_list[ul_req-> + number_of_pdus]; + memset((void *) ul_config_pdu, 0, + sizeof(nfapi_ul_config_request_pdu_t)); + ul_config_pdu->pdu_type = + NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE; + ul_config_pdu->pdu_size = + 2 + (uint8_t) (2 + + sizeof + (nfapi_ul_config_uci_cqi_pdu)); + ul_config_pdu->uci_cqi_pdu. + ue_information.ue_information_rel8.rnti = + UE_list->UE_template[CC_id][UE_id].rnti; + ul_config_pdu->uci_cqi_pdu. + cqi_information.cqi_information_rel8. + pucch_index = + cqi_ReportPeriodic->choice. + setup.cqi_PUCCH_ResourceIndex; + ul_config_pdu->uci_cqi_pdu. + cqi_information.cqi_information_rel8. + dl_cqi_pmi_size = (cc->p_eNB == 2) ? 1 : 2; + RC.mac[module_idP]->UL_req[CC_id].sfn_sf = + (frameP << 4) + subframeP; + ul_req->number_of_pdus++; + } + + } // if ((cqi_ReportPeriodic = cqi_ReportConfig->cqi_ReportPeriodic)!=NULL) { + } // if (UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->cqi_ReportConfig) + } // for (UE_id=UE_list->head; UE_id>=0; UE_id=UE_list->next[UE_id]) { + } // for (CC_id=0; CC_idUE_list; + nfapi_ul_config_request_body_t *ul_req; + int CC_id; + int UE_id; + SchedulingRequestConfig_t *SRconfig; + int skip_ue; + int is_harq; + nfapi_ul_config_sr_information sr; + int i; + + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + RC.mac[module_idP]->UL_req[CC_id].sfn_sf = + (frameP << 4) + subframeP; + + for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) { + if (RC.mac[module_idP]->UE_list.active[UE_id] != TRUE) + continue; + + ul_req = + &RC.mac[module_idP]->UL_req[CC_id].ul_config_request_body; + + AssertFatal(UE_list-> + UE_template[CC_id][UE_id].physicalConfigDedicated + != NULL, + "physicalConfigDedicated is null for UE %d\n", + UE_id); + + // drop the allocation if the UE hasn't send RRCConnectionSetupComplete yet + if (mac_eNB_get_rrc_status + (module_idP, UE_RNTI(module_idP, UE_id)) < RRC_CONNECTED) + continue; + + if ((SRconfig = + UE_list-> + UE_template[CC_id][UE_id].physicalConfigDedicated-> + schedulingRequestConfig) != NULL) { + if (SRconfig->present == SchedulingRequestConfig_PR_setup) { + if (SRconfig->choice.setup.sr_ConfigIndex <= 4) { // 5 ms SR period + if ((subframeP % 5) != + SRconfig->choice.setup.sr_ConfigIndex) + continue; + } else if (SRconfig->choice.setup.sr_ConfigIndex <= 14) { // 10 ms SR period + if (subframeP != + (SRconfig->choice.setup.sr_ConfigIndex - 5)) + continue; + } else if (SRconfig->choice.setup.sr_ConfigIndex <= 34) { // 20 ms SR period + if ((10 * (frameP & 1) + subframeP) != + (SRconfig->choice.setup.sr_ConfigIndex - 15)) + continue; + } else if (SRconfig->choice.setup.sr_ConfigIndex <= 74) { // 40 ms SR period + if ((10 * (frameP & 3) + subframeP) != + (SRconfig->choice.setup.sr_ConfigIndex - 35)) + continue; + } else if (SRconfig->choice.setup.sr_ConfigIndex <= 154) { // 80 ms SR period + if ((10 * (frameP & 7) + subframeP) != + (SRconfig->choice.setup.sr_ConfigIndex - 75)) + continue; + } + } // SRconfig->present == SchedulingRequestConfig_PR_setup) + } // SRconfig = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->schedulingRequestConfig)!=NULL) + + // if we get here there is some PUCCH1 reception to schedule for SR + + skip_ue = 0; + is_harq = 0; + // check that there is no existing UL grant for ULSCH which overrides the SR + for (i = 0; i < ul_req->number_of_pdus; i++) { + if (((ul_req->ul_config_pdu_list[i].pdu_type == + NFAPI_UL_CONFIG_ULSCH_PDU_TYPE) + || (ul_req->ul_config_pdu_list[i].pdu_type == + NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE) + || (ul_req->ul_config_pdu_list[i].pdu_type == + NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE) + || (ul_req->ul_config_pdu_list[i].pdu_type == + NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE)) + && (ul_req->ul_config_pdu_list[i]. + ulsch_pdu.ulsch_pdu_rel8.rnti == + UE_list->UE_template[CC_id][UE_id].rnti)) { + skip_ue = 1; + break; + } + /* if there is already an HARQ pdu, convert to SR_HARQ */ + else if ((ul_req->ul_config_pdu_list[i].pdu_type == + NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE) + && (ul_req->ul_config_pdu_list[i]. + uci_harq_pdu.ue_information. + ue_information_rel8.rnti == + UE_list->UE_template[CC_id][UE_id].rnti)) { + is_harq = 1; + break; + } + } + + // drop the allocation because ULSCH with handle it with BSR + if (skip_ue == 1) + continue; + + LOG_D(MAC, + "Frame %d, Subframe %d : Scheduling SR for UE %d/%x\n", + frameP, subframeP, UE_id, + UE_list->UE_template[CC_id][UE_id].rnti); + + // check Rel10 or Rel8 SR +#if defined(Rel10) || defined(Rel14) + if ((UE_list-> + UE_template[CC_id][UE_id].physicalConfigDedicated->ext2) + && (UE_list-> + UE_template[CC_id][UE_id].physicalConfigDedicated-> + ext2->schedulingRequestConfig_v1020) + && (UE_list-> + UE_template[CC_id][UE_id].physicalConfigDedicated-> + ext2->schedulingRequestConfig_v1020)) { + sr.sr_information_rel10.number_of_pucch_resources = 1; + sr.sr_information_rel10.pucch_index_p1 = + *UE_list-> + UE_template[CC_id][UE_id].physicalConfigDedicated-> + ext2-> + schedulingRequestConfig_v1020->sr_PUCCH_ResourceIndexP1_r10; + } else +#endif + { + sr.sr_information_rel8.pucch_index = + UE_list-> + UE_template[CC_id][UE_id].physicalConfigDedicated-> + schedulingRequestConfig->choice.setup. + sr_PUCCH_ResourceIndex; + } + + /* if there is already an HARQ pdu, convert to SR_HARQ */ + if (is_harq) { + nfapi_ul_config_harq_information h = + ul_req->ul_config_pdu_list[i].uci_harq_pdu. + harq_information; + ul_req->ul_config_pdu_list[i].pdu_type = + NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE; + ul_req->ul_config_pdu_list[i].uci_sr_harq_pdu. + sr_information = sr; + ul_req->ul_config_pdu_list[i].uci_sr_harq_pdu. + harq_information = h; + } else { + ul_req->ul_config_pdu_list[ul_req->number_of_pdus]. + pdu_type = NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE; + ul_req->ul_config_pdu_list[ul_req-> + number_of_pdus].uci_sr_pdu. + ue_information.ue_information_rel8.rnti = + UE_list->UE_template[CC_id][UE_id].rnti; + ul_req->ul_config_pdu_list[ul_req-> + number_of_pdus].uci_sr_pdu. + sr_information = sr; ul_req->number_of_pdus++; - } // if (((10*frameP+subframeP) % srsPeriodicity) == srsOffset) - } // if (soundingRS_UL_ConfigDedicated->present == SoundingRS_UL_ConfigDedicated_PR_setup) - } // if ((soundingRS_UL_ConfigDedicated = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->soundingRS_UL_ConfigDedicated)!=NULL) - } // for (UE_id ... - } // if((1<head; UE_id>=0; UE_id=UE_list->next[UE_id]) + } // for (CC_id=0; CC_idUE_list; - COMMON_channels_t *cc; - nfapi_ul_config_request_body_t *ul_req; - int CC_id,UE_id; - struct CQI_ReportPeriodic *cqi_ReportPeriodic; - uint16_t Npd,N_OFFSET_CQI; - int H; + UE_list_t *UE_list = &RC.mac[module_idP]->UE_list; + nfapi_dl_config_request_t *DL_req = &RC.mac[module_idP]->DL_req[0]; + uint16_t rnti = UE_RNTI(module_idP, UE_id); + COMMON_channels_t *cc = RC.mac[module_idP]->common_channels; - for (CC_id=0; CC_idUE_sched_ctrl[UE_id].ul_failure_timer > 0) && + (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync == 0)) { + LOG_I(MAC, "UE %d rnti %x: UL Failure timer %d \n", UE_id, rnti, + UE_list->UE_sched_ctrl[UE_id].ul_failure_timer); + if (UE_list->UE_sched_ctrl[UE_id].ra_pdcch_order_sent == 0) { + UE_list->UE_sched_ctrl[UE_id].ra_pdcch_order_sent = 1; - cc = &eNB->common_channels[CC_id]; - for (UE_id=0; UE_id < NUMBER_OF_UE_MAX; UE_id++) { - if (UE_list->active[UE_id] != TRUE) continue; + // add a format 1A dci for this UE to request an RA procedure (only one UE per subframe) + nfapi_dl_config_request_pdu_t *dl_config_pdu = + &DL_req[CC_id]. + dl_config_request_body.dl_config_pdu_list[DL_req[CC_id]. + dl_config_request_body.number_pdu]; + memset((void *) dl_config_pdu, 0, + sizeof(nfapi_dl_config_request_pdu_t)); + dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; + dl_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu)); + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format = + NFAPI_DL_DCI_FORMAT_1A; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level = + get_aggregation(get_bw_index(module_idP, CC_id), + UE_list->UE_sched_ctrl[UE_id]. + dl_cqi[CC_id], format1A); + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = rnti; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = 1; // CRNTI : see Table 4-10 from SCF082 - nFAPI specifications + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000; // equal to RS power - ul_req = &RC.mac[module_idP]->UL_req[CC_id].ul_config_request_body; + AssertFatal((cc[CC_id].mib->message.dl_Bandwidth >= 0) + && (cc[CC_id].mib->message.dl_Bandwidth < 6), + "illegal dl_Bandwidth %d\n", + (int) cc[CC_id].mib->message.dl_Bandwidth); + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + resource_block_coding = + pdcch_order_table[cc[CC_id].mib->message.dl_Bandwidth]; + DL_req[CC_id].dl_config_request_body.number_dci++; + DL_req[CC_id].dl_config_request_body.number_pdu++; + LOG_I(MAC, + "UE %d rnti %x: sending PDCCH order for RAPROC (failure timer %d), resource_block_coding %d \n", + UE_id, rnti, + UE_list->UE_sched_ctrl[UE_id].ul_failure_timer, + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.resource_block_coding); + } else { // ra_pdcch_sent==1 + LOG_I(MAC, + "UE %d rnti %x: sent PDCCH order for RAPROC waiting (failure timer %d) \n", + UE_id, rnti, + UE_list->UE_sched_ctrl[UE_id].ul_failure_timer); + if ((UE_list->UE_sched_ctrl[UE_id].ul_failure_timer % 40) == 0) + UE_list->UE_sched_ctrl[UE_id].ra_pdcch_order_sent = 0; // resend every 4 frames + } - // drop the allocation if the UE hasn't send RRCConnectionSetupComplete yet - if (mac_eNB_get_rrc_status(module_idP,UE_RNTI(module_idP,UE_id)) < RRC_CONNECTED) continue; + UE_list->UE_sched_ctrl[UE_id].ul_failure_timer++; + // check threshold + if (UE_list->UE_sched_ctrl[UE_id].ul_failure_timer > 200) { + // inform RRC of failure and clear timer + LOG_I(MAC, + "UE %d rnti %x: UL Failure after repeated PDCCH orders: Triggering RRC \n", + UE_id, rnti); + mac_eNB_rrc_ul_failure(module_idP, CC_id, frameP, subframeP, + rnti); + UE_list->UE_sched_ctrl[UE_id].ul_failure_timer = 0; + UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync = 1; + } + } // ul_failure_timer>0 - AssertFatal(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated != NULL, "physicalConfigDedicated is null for UE %d\n",UE_id); - - if (UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->cqi_ReportConfig) { - if ((cqi_ReportPeriodic = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->cqi_ReportConfig->cqi_ReportPeriodic)!=NULL && - (cqi_ReportPeriodic->present!=CQI_ReportPeriodic_PR_release)) { - //Rel8 Periodic CQI/PMI/RI reporting - - get_csi_params(cc,cqi_ReportPeriodic,&Npd,&N_OFFSET_CQI,&H); - - if ((((frameP*10)+subframeP)%Npd) == N_OFFSET_CQI) { // CQI opportunity - UE_list->UE_sched_ctrl[UE_id].feedback_cnt[CC_id]=(((frameP*10)+subframeP)/Npd)%H; - // Program CQI - nfapi_ul_config_request_pdu_t* ul_config_pdu = &ul_req->ul_config_pdu_list[ul_req->number_of_pdus]; - memset((void*)ul_config_pdu,0,sizeof(nfapi_ul_config_request_pdu_t)); - ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE; - ul_config_pdu->pdu_size = 2+(uint8_t)(2+sizeof(nfapi_ul_config_uci_cqi_pdu)); - ul_config_pdu->uci_cqi_pdu.ue_information.ue_information_rel8.rnti = UE_list->UE_template[CC_id][UE_id].rnti; - ul_config_pdu->uci_cqi_pdu.cqi_information.cqi_information_rel8.pucch_index = cqi_ReportPeriodic->choice.setup.cqi_PUCCH_ResourceIndex; - ul_config_pdu->uci_cqi_pdu.cqi_information.cqi_information_rel8.dl_cqi_pmi_size = get_rel8_dl_cqi_pmi_size(&UE_list->UE_sched_ctrl[UE_id], - CC_id, - cc, - get_tmode(module_idP,CC_id,UE_id), - cqi_ReportPeriodic); - ul_req->number_of_pdus++; - -#if defined(Rel10) || defined(Rel14) - // PUT rel10-13 UCI options here -#endif - } - else if ((cqi_ReportPeriodic->choice.setup.ri_ConfigIndex) && - ((((frameP*10)+subframeP)%((H*Npd)<<(*cqi_ReportPeriodic->choice.setup.ri_ConfigIndex/161)))== - N_OFFSET_CQI + (*cqi_ReportPeriodic->choice.setup.ri_ConfigIndex%161))) { // RI opportunity - // Program RI - nfapi_ul_config_request_pdu_t* ul_config_pdu = &ul_req->ul_config_pdu_list[ul_req->number_of_pdus]; - memset((void*)ul_config_pdu,0,sizeof(nfapi_ul_config_request_pdu_t)); - ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE; - ul_config_pdu->pdu_size = 2+(uint8_t)(2+sizeof(nfapi_ul_config_uci_cqi_pdu)); - ul_config_pdu->uci_cqi_pdu.ue_information.ue_information_rel8.rnti = UE_list->UE_template[CC_id][UE_id].rnti; - ul_config_pdu->uci_cqi_pdu.cqi_information.cqi_information_rel8.pucch_index = cqi_ReportPeriodic->choice.setup.cqi_PUCCH_ResourceIndex; - ul_config_pdu->uci_cqi_pdu.cqi_information.cqi_information_rel8.dl_cqi_pmi_size = (cc->p_eNB==2)?1:2; - RC.mac[module_idP]->UL_req[CC_id].sfn_sf = (frameP<<4)+subframeP; - ul_req->number_of_pdus++; - } - - } // if ((cqi_ReportPeriodic = cqi_ReportConfig->cqi_ReportPeriodic)!=NULL) { - } // if (UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->cqi_ReportConfig) - } // for (UE_id=UE_list->head; UE_id>=0; UE_id=UE_list->next[UE_id]) { - } // for (CC_id=0; CC_idUE_list; - nfapi_ul_config_request_body_t *ul_req; - int CC_id; - int UE_id; - SchedulingRequestConfig_t *SRconfig; - int skip_ue; - int is_harq; - nfapi_ul_config_sr_information sr; - int i; + nfapi_dl_config_request_t *DL_req = &eNB->DL_req[0]; + nfapi_ul_config_request_t *UL_req = &eNB->UL_req[0]; + nfapi_hi_dci0_request_t *HI_DCI0_req = &eNB->HI_DCI0_req[0]; + nfapi_tx_request_t *TX_req = &eNB->TX_req[0]; - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - RC.mac[module_idP]->UL_req[CC_id].sfn_sf = (frameP << 4) + subframeP; - for (UE_id = 0; UE_idUE_list.active[UE_id]!=TRUE) continue; + eNB->pdu_index[CC_idP] = 0; + DL_req[CC_idP].dl_config_request_body.number_pdcch_ofdm_symbols = 1; + DL_req[CC_idP].dl_config_request_body.number_dci = 0; + DL_req[CC_idP].dl_config_request_body.number_pdu = 0; + DL_req[CC_idP].dl_config_request_body.number_pdsch_rnti = 0; + DL_req[CC_idP].dl_config_request_body.transmission_power_pcfich = 6000; - ul_req = &RC.mac[module_idP]->UL_req[CC_id].ul_config_request_body; + HI_DCI0_req[CC_idP].hi_dci0_request_body.sfnsf = + subframeP + (frameP << 4); + HI_DCI0_req[CC_idP].hi_dci0_request_body.number_of_dci = 0; - AssertFatal(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated != NULL, "physicalConfigDedicated is null for UE %d\n",UE_id); - // drop the allocation if the UE hasn't send RRCConnectionSetupComplete yet - if (mac_eNB_get_rrc_status(module_idP,UE_RNTI(module_idP,UE_id)) < RRC_CONNECTED) continue; + UL_req[CC_idP].ul_config_request_body.number_of_pdus = 0; + UL_req[CC_idP].ul_config_request_body.rach_prach_frequency_resources = 0; // ignored, handled by PHY for now + UL_req[CC_idP].ul_config_request_body.srs_present = 0; // ignored, handled by PHY for now - if ((SRconfig = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->schedulingRequestConfig)!=NULL) { - if (SRconfig->present == SchedulingRequestConfig_PR_setup) { - if (SRconfig->choice.setup.sr_ConfigIndex <= 4) { // 5 ms SR period - if ((subframeP%5) != SRconfig->choice.setup.sr_ConfigIndex) - continue; - } else if (SRconfig->choice.setup.sr_ConfigIndex <= 14) { // 10 ms SR period - if (subframeP!=(SRconfig->choice.setup.sr_ConfigIndex-5)) - continue; - } else if (SRconfig->choice.setup.sr_ConfigIndex <= 34) { // 20 ms SR period - if ((10*(frameP&1)+subframeP) != (SRconfig->choice.setup.sr_ConfigIndex-15)) - continue; - } else if (SRconfig->choice.setup.sr_ConfigIndex <= 74) { // 40 ms SR period - if ((10*(frameP&3)+subframeP) != (SRconfig->choice.setup.sr_ConfigIndex-35)) - continue; - } else if (SRconfig->choice.setup.sr_ConfigIndex <= 154) { // 80 ms SR period - if ((10*(frameP&7)+subframeP) != (SRconfig->choice.setup.sr_ConfigIndex-75)) - continue; - } - } // SRconfig->present == SchedulingRequestConfig_PR_setup) - } // SRconfig = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->schedulingRequestConfig)!=NULL) - // if we get here there is some PUCCH1 reception to schedule for SR + TX_req[CC_idP].tx_request_body.number_of_pdus = 0; - skip_ue=0; - is_harq = 0; - // check that there is no existing UL grant for ULSCH which overrides the SR - for (i = 0; i < ul_req->number_of_pdus; i++) { - if (((ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE)|| - (ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE)|| - (ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE)|| - (ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE))&& - (ul_req->ul_config_pdu_list[i].ulsch_pdu.ulsch_pdu_rel8.rnti == UE_list->UE_template[CC_id][UE_id].rnti)) { - skip_ue=1; - break; - } - /* if there is already an HARQ pdu, convert to SR_HARQ */ - else if ((ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE)&& - (ul_req->ul_config_pdu_list[i].uci_harq_pdu.ue_information.ue_information_rel8.rnti == UE_list->UE_template[CC_id][UE_id].rnti)) { - is_harq = 1; - break; - } - } - // drop the allocation because ULSCH with handle it with BSR - if (skip_ue==1) continue; - - LOG_D(MAC,"Frame %d, Subframe %d : Scheduling SR for UE %d/%x\n",frameP,subframeP,UE_id,UE_list->UE_template[CC_id][UE_id].rnti); - - // check Rel10 or Rel8 SR -#if defined(Rel10) || defined(Rel14) - if ((UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->ext2) && - (UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->ext2->schedulingRequestConfig_v1020)&& - (UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->ext2->schedulingRequestConfig_v1020)) { - sr.sr_information_rel10.number_of_pucch_resources = 1; - sr.sr_information_rel10.pucch_index_p1 = *UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->ext2->schedulingRequestConfig_v1020->sr_PUCCH_ResourceIndexP1_r10; - } else -#endif - { - sr.sr_information_rel8.pucch_index = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex; - } - - /* if there is already an HARQ pdu, convert to SR_HARQ */ - if (is_harq) { - nfapi_ul_config_harq_information h = ul_req->ul_config_pdu_list[i].uci_harq_pdu.harq_information; - ul_req->ul_config_pdu_list[i].pdu_type = NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE; - ul_req->ul_config_pdu_list[i].uci_sr_harq_pdu.sr_information = sr; - ul_req->ul_config_pdu_list[i].uci_sr_harq_pdu.harq_information = h; - } else { - ul_req->ul_config_pdu_list[ul_req->number_of_pdus].pdu_type = NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE; - ul_req->ul_config_pdu_list[ul_req->number_of_pdus].uci_sr_pdu.ue_information.ue_information_rel8.rnti = UE_list->UE_template[CC_id][UE_id].rnti; - ul_req->ul_config_pdu_list[ul_req->number_of_pdus].uci_sr_pdu.sr_information = sr; - ul_req->number_of_pdus++; - } /* if (is_harq) */ - } // for (UE_id=UE_list->head; UE_id>=0; UE_id=UE_list->next[UE_id]) - } // for (CC_id=0; CC_idUE_list; - nfapi_dl_config_request_t *DL_req = &RC.mac[module_idP]->DL_req[0]; - uint16_t rnti = UE_RNTI(module_idP,UE_id); - COMMON_channels_t *cc = RC.mac[module_idP]->common_channels; + int CC_id; + eNB_MAC_INST *eNB; + nfapi_ul_config_request_body_t *ul_req_tmp; + nfapi_ul_config_request_body_t *ul_req; - // check uplink failure - if ((UE_list->UE_sched_ctrl[UE_id].ul_failure_timer>0)&& - (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync==0)) { - LOG_I(MAC,"UE %d rnti %x: UL Failure timer %d \n",UE_id,rnti,UE_list->UE_sched_ctrl[UE_id].ul_failure_timer); - if (UE_list->UE_sched_ctrl[UE_id].ra_pdcch_order_sent==0) { - UE_list->UE_sched_ctrl[UE_id].ra_pdcch_order_sent=1; + eNB = RC.mac[module_idP]; - // add a format 1A dci for this UE to request an RA procedure (only one UE per subframe) - nfapi_dl_config_request_pdu_t* dl_config_pdu = &DL_req[CC_id].dl_config_request_body.dl_config_pdu_list[DL_req[CC_id].dl_config_request_body.number_pdu]; - memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; - dl_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_dl_config_dci_dl_pdu)); - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format = NFAPI_DL_DCI_FORMAT_1A; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level = get_aggregation(get_bw_index(module_idP,CC_id),UE_list->UE_sched_ctrl[UE_id].dl_cqi[CC_id],format1A); - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = rnti; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = 1; // CRNTI : see Table 4-10 from SCF082 - nFAPI specifications - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000; // equal to RS power + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + + ul_req_tmp = + &eNB->UL_req_tmp[CC_id][subframeP].ul_config_request_body; + ul_req = &eNB->UL_req[CC_id].ul_config_request_body; + + eNB->UL_req[CC_id].sfn_sf = (frameP << 4) + subframeP; + ul_req->number_of_pdus = ul_req_tmp->number_of_pdus; + ul_req_tmp->number_of_pdus = 0; + + memcpy((void *) ul_req->ul_config_pdu_list, + (void *) ul_req_tmp->ul_config_pdu_list, + ul_req->number_of_pdus * + sizeof(nfapi_ul_config_request_pdu_t)); - AssertFatal((cc[CC_id].mib->message.dl_Bandwidth >=0) && (cc[CC_id].mib->message.dl_Bandwidth<6), - "illegal dl_Bandwidth %d\n",(int)cc[CC_id].mib->message.dl_Bandwidth); - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = pdcch_order_table[cc[CC_id].mib->message.dl_Bandwidth]; - DL_req[CC_id].dl_config_request_body.number_dci++; - DL_req[CC_id].dl_config_request_body.number_pdu++; - LOG_I(MAC,"UE %d rnti %x: sending PDCCH order for RAPROC (failure timer %d), resource_block_coding %d \n",UE_id,rnti,UE_list->UE_sched_ctrl[UE_id].ul_failure_timer,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding); } - else { // ra_pdcch_sent==1 - LOG_I(MAC,"UE %d rnti %x: sent PDCCH order for RAPROC waiting (failure timer %d) \n",UE_id,rnti,UE_list->UE_sched_ctrl[UE_id].ul_failure_timer); - if ((UE_list->UE_sched_ctrl[UE_id].ul_failure_timer % 40) == 0) - UE_list->UE_sched_ctrl[UE_id].ra_pdcch_order_sent=0; // resend every 4 frames - } - - UE_list->UE_sched_ctrl[UE_id].ul_failure_timer++; - // check threshold - if (UE_list->UE_sched_ctrl[UE_id].ul_failure_timer > 200) { - // inform RRC of failure and clear timer - LOG_I(MAC,"UE %d rnti %x: UL Failure after repeated PDCCH orders: Triggering RRC \n",UE_id,rnti); - mac_eNB_rrc_ul_failure(module_idP,CC_id,frameP,subframeP,rnti); - UE_list->UE_sched_ctrl[UE_id].ul_failure_timer=0; - UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync=1; - } - } // ul_failure_timer>0 - } -void clear_nfapi_information(eNB_MAC_INST *eNB,int CC_idP,frame_t frameP,sub_frame_t subframeP) -{ - nfapi_dl_config_request_t *DL_req = &eNB->DL_req[0]; - nfapi_ul_config_request_t *UL_req = &eNB->UL_req[0]; - nfapi_hi_dci0_request_t *HI_DCI0_req = &eNB->HI_DCI0_req[0]; - nfapi_tx_request_t *TX_req = &eNB->TX_req[0]; - - - eNB->pdu_index[CC_idP] = 0; - DL_req[CC_idP].dl_config_request_body.number_pdcch_ofdm_symbols = 1; - DL_req[CC_idP].dl_config_request_body.number_dci = 0; - DL_req[CC_idP].dl_config_request_body.number_pdu = 0; - DL_req[CC_idP].dl_config_request_body.number_pdsch_rnti = 0; - DL_req[CC_idP].dl_config_request_body.transmission_power_pcfich = 6000; - - HI_DCI0_req[CC_idP].hi_dci0_request_body.sfnsf = subframeP + (frameP<<4); - HI_DCI0_req[CC_idP].hi_dci0_request_body.number_of_dci = 0; - - - UL_req[CC_idP].ul_config_request_body.number_of_pdus = 0; - UL_req[CC_idP].ul_config_request_body.rach_prach_frequency_resources = 0; // ignored, handled by PHY for now - UL_req[CC_idP].ul_config_request_body.srs_present = 0; // ignored, handled by PHY for now - - - TX_req[CC_idP].tx_request_body.number_of_pdus = 0; - - -} - -void copy_ulreq(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP) -{ - int CC_id; - eNB_MAC_INST *eNB; - nfapi_ul_config_request_body_t *ul_req_tmp; - nfapi_ul_config_request_body_t *ul_req; - - eNB = RC.mac[module_idP]; - - for (CC_id=0;CC_idUL_req_tmp[CC_id][subframeP].ul_config_request_body; - ul_req = &eNB->UL_req[CC_id].ul_config_request_body; - - eNB->UL_req[CC_id].sfn_sf = (frameP<<4) + subframeP; - ul_req->number_of_pdus = ul_req_tmp->number_of_pdus; - ul_req_tmp->number_of_pdus = 0; - - memcpy((void*)ul_req->ul_config_pdu_list, - (void*)ul_req_tmp->ul_config_pdu_list, - ul_req->number_of_pdus*sizeof(nfapi_ul_config_request_pdu_t)); - - } -} - -void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP) +void +eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, + sub_frame_t subframeP) { - int mbsfn_status[MAX_NUM_CCs]; - protocol_ctxt_t ctxt; + int mbsfn_status[MAX_NUM_CCs]; + protocol_ctxt_t ctxt; - int CC_id,i; //,next_i; - UE_list_t *UE_list=&RC.mac[module_idP]->UE_list; - rnti_t rnti; + int CC_id, i; //,next_i; + UE_list_t *UE_list = &RC.mac[module_idP]->UE_list; + rnti_t rnti; - COMMON_channels_t *cc = RC.mac[module_idP]->common_channels; + COMMON_channels_t *cc = RC.mac[module_idP]->common_channels; #if defined(FLEXRAN_AGENT_SB_IF) - Protocol__FlexranMessage *msg; + Protocol__FlexranMessage *msg; #endif - start_meas(&RC.mac[module_idP]->eNB_scheduler); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER,VCD_FUNCTION_IN); + start_meas(&RC.mac[module_idP]->eNB_scheduler); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER, + VCD_FUNCTION_IN); - for (CC_id=0; CC_idframe = frameP; - RC.mac[module_idP]->subframe = subframeP; + RC.mac[module_idP]->frame = frameP; + RC.mac[module_idP]->subframe = subframeP; - clear_nfapi_information(RC.mac[module_idP],CC_id,frameP,subframeP); - } - - // refresh UE list based on UEs dropped by PHY in previous subframe - for (i = 0; i < NUMBER_OF_UE_MAX; i++) { - if (UE_list->active[i] != TRUE) continue; - - rnti = UE_RNTI(module_idP, i); - CC_id = UE_PCCID(module_idP, i); - - if ((frameP==0)&&(subframeP==0)) { - LOG_I(MAC,"UE rnti %x : %s, PHR %d dB DL CQI %d PUSCH SNR %d PUCCH SNR %d\n", rnti, - UE_list->UE_sched_ctrl[i].ul_out_of_sync==0 ? "in synch" : "out of sync", - UE_list->UE_template[CC_id][i].phr_info, - UE_list->UE_sched_ctrl[i].dl_cqi[CC_id], - (UE_list->UE_sched_ctrl[i].pusch_snr[CC_id]-128)/2, - (UE_list->UE_sched_ctrl[i].pucch1_snr[CC_id]-128)/2); + clear_nfapi_information(RC.mac[module_idP], CC_id, frameP, + subframeP); } - RC.eNB[module_idP][CC_id]->pusch_stats_bsr[i][(frameP*10)+subframeP]=-63; - if (i==UE_list->head) - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_BSR,RC.eNB[module_idP][CC_id]->pusch_stats_bsr[i][(frameP*10)+subframeP]); - // increment this, it is cleared when we receive an sdu - RC.mac[module_idP]->UE_list.UE_sched_ctrl[i].ul_inactivity_timer++; + // refresh UE list based on UEs dropped by PHY in previous subframe + for (i = 0; i < NUMBER_OF_UE_MAX; i++) { + if (UE_list->active[i] != TRUE) + continue; - RC.mac[module_idP]->UE_list.UE_sched_ctrl[i].cqi_req_timer++; - LOG_D(MAC,"UE %d/%x : ul_inactivity %d, cqi_req %d\n",i,rnti, - RC.mac[module_idP]->UE_list.UE_sched_ctrl[i].ul_inactivity_timer, - RC.mac[module_idP]->UE_list.UE_sched_ctrl[i].cqi_req_timer); - check_ul_failure(module_idP,CC_id,i,frameP,subframeP); + rnti = UE_RNTI(module_idP, i); + CC_id = UE_PCCID(module_idP, i); - } + if ((frameP == 0) && (subframeP == 0)) { + LOG_I(MAC, + "UE rnti %x : %s, PHR %d dB DL CQI %d PUSCH SNR %d PUCCH SNR %d\n", + rnti, + UE_list->UE_sched_ctrl[i].ul_out_of_sync == + 0 ? "in synch" : "out of sync", + UE_list->UE_template[CC_id][i].phr_info, + UE_list->UE_sched_ctrl[i].dl_cqi[CC_id], + (UE_list->UE_sched_ctrl[i].pusch_snr[CC_id] - 128) / 2, + (UE_list->UE_sched_ctrl[i].pucch1_snr[CC_id] - 128) / 2); + } - PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, NOT_A_RNTI, frameP, subframeP,module_idP); - pdcp_run(&ctxt); + RC.eNB[module_idP][CC_id]->pusch_stats_bsr[i][(frameP * 10) + + subframeP] = -63; + if (i == UE_list->head) + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME + (VCD_SIGNAL_DUMPER_VARIABLES_UE0_BSR, + RC.eNB[module_idP][CC_id]-> + pusch_stats_bsr[i][(frameP * 10) + subframeP]); + // increment this, it is cleared when we receive an sdu + RC.mac[module_idP]->UE_list.UE_sched_ctrl[i].ul_inactivity_timer++; - rrc_rx_tx(&ctxt, - 0, // eNB index, unused in eNB - CC_id); + RC.mac[module_idP]->UE_list.UE_sched_ctrl[i].cqi_req_timer++; + LOG_D(MAC, "UE %d/%x : ul_inactivity %d, cqi_req %d\n", i, rnti, + RC.mac[module_idP]->UE_list.UE_sched_ctrl[i]. + ul_inactivity_timer, + RC.mac[module_idP]->UE_list.UE_sched_ctrl[i].cqi_req_timer); + check_ul_failure(module_idP, CC_id, i, frameP, subframeP); + + } + + PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, + NOT_A_RNTI, frameP, subframeP, + module_idP); + pdcp_run(&ctxt); + + rrc_rx_tx(&ctxt, 0, // eNB index, unused in eNB + CC_id); #if defined(Rel10) || defined(Rel14) - for (CC_id=0; CC_id0) { - start_meas(&RC.mac[module_idP]->schedule_mch); - mbsfn_status[CC_id] = schedule_MBMS(module_idP,CC_id,frameP,subframeP); - stop_meas(&RC.mac[module_idP]->schedule_mch); + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + if (cc[CC_id].MBMS_flag > 0) { + start_meas(&RC.mac[module_idP]->schedule_mch); + mbsfn_status[CC_id] = + schedule_MBMS(module_idP, CC_id, frameP, subframeP); + stop_meas(&RC.mac[module_idP]->schedule_mch); + } } - } #endif - // This schedules MIB - if ((subframeP==0) && (frameP&3) == 0) schedule_mib(module_idP,frameP,subframeP); - // This schedules SI for legacy LTE and eMTC starting in subframeP - schedule_SI(module_idP,frameP,subframeP); - // This schedules Random-Access for legacy LTE and eMTC starting in subframeP - schedule_RA(module_idP,frameP,subframeP); - // copy previously scheduled UL resources (ULSCH + HARQ) - copy_ulreq(module_idP,frameP,subframeP); - // This schedules SRS in subframeP - schedule_SRS(module_idP,frameP,subframeP); - // This schedules ULSCH in subframeP (dci0) - schedule_ulsch(module_idP,frameP,subframeP); - // This schedules UCI_SR in subframeP - schedule_SR(module_idP,frameP,subframeP); - // This schedules UCI_CSI in subframeP - schedule_CSI(module_idP, frameP, subframeP); + // This schedules MIB + if ((subframeP == 0) && (frameP & 3) == 0) + schedule_mib(module_idP, frameP, subframeP); + // This schedules SI for legacy LTE and eMTC starting in subframeP + schedule_SI(module_idP, frameP, subframeP); + // This schedules Random-Access for legacy LTE and eMTC starting in subframeP + schedule_RA(module_idP, frameP, subframeP); + // copy previously scheduled UL resources (ULSCH + HARQ) + copy_ulreq(module_idP, frameP, subframeP); + // This schedules SRS in subframeP + schedule_SRS(module_idP, frameP, subframeP); + // This schedules ULSCH in subframeP (dci0) + schedule_ulsch(module_idP, frameP, subframeP); + // This schedules UCI_SR in subframeP + schedule_SR(module_idP, frameP, subframeP); + // This schedules UCI_CSI in subframeP + schedule_CSI(module_idP, frameP, subframeP); - // This schedules DLSCH in subframeP - schedule_ue_spec(module_idP,frameP,subframeP,mbsfn_status); + // This schedules DLSCH in subframeP + schedule_ue_spec(module_idP, frameP, subframeP, mbsfn_status); - // Allocate CCEs for good after scheduling is done + // Allocate CCEs for good after scheduling is done - for (CC_id=0;CC_ideNB_scheduler); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER,VCD_FUNCTION_OUT); + stop_meas(&RC.mac[module_idP]->eNB_scheduler); + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER, + VCD_FUNCTION_OUT); } diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c index c6df031876..939f35f2eb 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c @@ -29,6 +29,9 @@ */ +/* indented with: indent -kr eNB_scheduler_RA.c */ + + #include "assertions.h" #include "platform_types.h" #include "PHY/defs.h" @@ -55,1240 +58,1578 @@ #include "pdcp.h" #if defined(ENABLE_ITTI) -# include "intertask_interface.h" +#include "intertask_interface.h" #endif -#include "SIMULATION/TOOLS/defs.h" // for taus +#include "SIMULATION/TOOLS/defs.h" // for taus #include "T.h" -void add_msg3(module_id_t module_idP,int CC_id, RA_TEMPLATE *RA_template, frame_t frameP, sub_frame_t subframeP) { +void +add_msg3(module_id_t module_idP, int CC_id, RA_t * ra, frame_t frameP, + sub_frame_t subframeP) +{ + eNB_MAC_INST *mac = RC.mac[module_idP]; + COMMON_channels_t *cc = &mac->common_channels[CC_id]; + uint8_t j; + nfapi_ul_config_request_t *ul_req; + nfapi_ul_config_request_pdu_t *ul_config_pdu; + nfapi_ul_config_request_body_t *ul_req_body; + nfapi_hi_dci0_request_body_t *hi_dci0_req; + nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu; - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc = &eNB->common_channels[CC_id]; - uint8_t j; - nfapi_ul_config_request_t *ul_req; - nfapi_ul_config_request_pdu_t *ul_config_pdu; - nfapi_ul_config_request_body_t *ul_req_body; - nfapi_hi_dci0_request_body_t *hi_dci0_req; - nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu; - - uint8_t rvseq[4] = {0,2,3,1}; + uint8_t rvseq[4] = { 0, 2, 3, 1 }; - hi_dci0_req = &eNB->HI_DCI0_req[CC_id].hi_dci0_request_body; - ul_req = &eNB->UL_req_tmp[CC_id][RA_template->Msg3_subframe]; - ul_req_body = &ul_req->ul_config_request_body; - AssertFatal(RA_template->RA_active == TRUE,"RA is not active for RA %X\n",RA_template->rnti); + hi_dci0_req = &mac->HI_DCI0_req[CC_id].hi_dci0_request_body; + ul_req = &mac->UL_req_tmp[CC_id][ra->Msg3_subframe]; + ul_req_body = &ul_req->ul_config_request_body; + AssertFatal(ra->state != IDLE, "RA is not active for RA %X\n", + ra->rnti); #ifdef Rel14 - if (RA_template->rach_resource_type>0) { - LOG_D(MAC,"[eNB %d][RAPROC] Frame %d, Subframe %d : CC_id %d CE level %d is active, Msg3 in (%d,%d)\n", - module_idP,frameP,subframeP,CC_id,RA_template->rach_resource_type-1, - RA_template->Msg3_frame,RA_template->Msg3_subframe); - LOG_D(MAC,"Frame %d, Subframe %d Adding Msg3 UL Config Request for (%d,%d) : (%d,%d)\n", - frameP,subframeP,RA_template->Msg3_frame,RA_template->Msg3_subframe,RA_template->msg3_nb_rb,RA_template->msg3_round); + if (ra->rach_resource_type > 0) { + LOG_D(MAC, + "[eNB %d][RAPROC] Frame %d, Subframe %d : CC_id %d CE level %d is active, Msg3 in (%d,%d)\n", + module_idP, frameP, subframeP, CC_id, + ra->rach_resource_type - 1, ra->Msg3_frame, + ra->Msg3_subframe); + LOG_D(MAC, + "Frame %d, Subframe %d Adding Msg3 UL Config Request for (%d,%d) : (%d,%d)\n", + frameP, subframeP, ra->Msg3_frame, ra->Msg3_subframe, + ra->msg3_nb_rb, ra->msg3_round); - ul_config_pdu = &ul_req_body->ul_config_pdu_list[ul_req_body->number_of_pdus]; - - memset((void*)ul_config_pdu,0,sizeof(nfapi_ul_config_request_pdu_t)); - ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_PDU_TYPE; - ul_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_ul_config_ulsch_pdu)); - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.handle = eNB->ul_handle++; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.rnti = RA_template->rnti; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.resource_block_start = narrowband_to_first_rb(cc,RA_template->msg34_narrowband)+RA_template->msg3_first_rb; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.number_of_resource_blocks = RA_template->msg3_nb_rb; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type = 2; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.cyclic_shift_2_for_drms = 0; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_enabled_flag = 0; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_bits = 0; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.new_data_indication = 0; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.redundancy_version = rvseq[RA_template->msg3_round]; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.harq_process_number = ((10*RA_template->Msg3_frame)+RA_template->Msg3_subframe)&7; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.ul_tx_mode = 0; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.current_tx_nb = 0; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.n_srs = 1; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.size = get_TBS_UL(RA_template->msg3_mcs, - RA_template->msg3_nb_rb); - // Re13 fields - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.ue_type = RA_template->rach_resource_type>2 ? 2 : 1; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions = 1; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.repetition_number = 1; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.initial_transmission_sf_io = (RA_template->Msg3_frame*10)+RA_template->Msg3_subframe; - ul_req_body->number_of_pdus++; - } // if (RA_template->rach_resource_type>0) { - else -#endif - { - LOG_D(MAC,"[eNB %d][RAPROC] Frame %d, Subframe %d : CC_id %d RA is active, Msg3 in (%d,%d)\n", - module_idP,frameP,subframeP,CC_id,RA_template->Msg3_frame,RA_template->Msg3_subframe); - - LOG_D(MAC,"Frame %d, Subframe %d Adding Msg3 UL Config Request for (%d,%d) : (%d,%d,%d)\n", - frameP,subframeP,RA_template->Msg3_frame,RA_template->Msg3_subframe, - RA_template->msg3_nb_rb,RA_template->msg3_first_rb,RA_template->msg3_round); - - ul_config_pdu = &ul_req_body->ul_config_pdu_list[ul_req_body->number_of_pdus]; - - memset((void*)ul_config_pdu,0,sizeof(nfapi_ul_config_request_pdu_t)); - ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_PDU_TYPE; - ul_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_ul_config_ulsch_pdu)); - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.handle = eNB->ul_handle++; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.rnti = RA_template->rnti; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.resource_block_start = RA_template->msg3_first_rb; - AssertFatal(RA_template->msg3_nb_rb > 0, "nb_rb = 0\n"); - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.number_of_resource_blocks = RA_template->msg3_nb_rb; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type = 2; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.cyclic_shift_2_for_drms = 0; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_enabled_flag = 0; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_bits = 0; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.new_data_indication = 0; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.redundancy_version = rvseq[RA_template->msg3_round]; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.harq_process_number = subframe2harqpid(cc,RA_template->Msg3_frame,RA_template->Msg3_subframe); - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.ul_tx_mode = 0; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.current_tx_nb = 0; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.n_srs = 1; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.size = get_TBS_UL(10,RA_template->msg3_nb_rb); - ul_req_body->number_of_pdus++; - // save UL scheduling information for preprocessor - for (j=0;jmsg3_nb_rb;j++) cc->vrb_map_UL[RA_template->msg3_first_rb+j]=1; - - - if (RA_template->msg3_round != 0) { // program HI too - hi_dci0_pdu = &hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req->number_of_dci+hi_dci0_req->number_of_hi]; - memset((void*)hi_dci0_pdu,0,sizeof(nfapi_hi_dci0_request_pdu_t)); - hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_HI_PDU_TYPE; - hi_dci0_pdu->pdu_size = 2+sizeof(nfapi_hi_dci0_hi_pdu); - hi_dci0_pdu->hi_pdu.hi_pdu_rel8.resource_block_start = RA_template->msg3_first_rb; - hi_dci0_pdu->hi_pdu.hi_pdu_rel8.cyclic_shift_2_for_drms = 0; - hi_dci0_pdu->hi_pdu.hi_pdu_rel8.hi_value = 0; - hi_dci0_req->number_of_hi++; - // save UL scheduling information for preprocessor - for (j=0;jmsg3_nb_rb;j++) cc->vrb_map_UL[RA_template->msg3_first_rb+j]=1; - - LOG_D(MAC,"[eNB %d][PUSCH-RA %x] CC_id %d Frame %d subframeP %d Scheduled (PHICH) RA (mcs %d, first rb %d, nb_rb %d,round %d)\n", - module_idP,RA_template->rnti,CC_id,frameP,subframeP,10, - 1,1, - RA_template->msg3_round-1); - } // if (RA_template->msg3_round != 0) { // program HI too - } // non-BL/CE UE case -} + ul_config_pdu = + &ul_req_body->ul_config_pdu_list[ul_req_body->number_of_pdus]; -void generate_Msg2(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t subframeP,RA_TEMPLATE *RA_template) { - - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc = eNB->common_channels; - - uint8_t *vrb_map; - int first_rb; - int N_RB_DL; - nfapi_dl_config_request_pdu_t *dl_config_pdu; - nfapi_tx_request_pdu_t *TX_req; - nfapi_dl_config_request_body_t *dl_req; - - vrb_map = cc[CC_idP].vrb_map; - dl_req = &eNB->DL_req[CC_idP].dl_config_request_body; - dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; - N_RB_DL = to_prb(cc[CC_idP].mib->message.dl_Bandwidth); - -#ifdef Rel14 - int rmax = 0; - int rep = 0; - int reps = 0; - int num_nb = 0; - - first_rb = 0; - struct PRACH_ConfigSIB_v1310 *ext4_prach; - PRACH_ParametersListCE_r13_t *prach_ParametersListCE_r13; - PRACH_ParametersCE_r13_t *p[4]={NULL,NULL,NULL,NULL}; - - uint16_t absSF = (10*frameP)+subframeP; - uint16_t absSF_Msg2 = (10*RA_template->Msg2_frame)+RA_template->Msg2_subframe; - - if (absSF>absSF_Msg2) return; // we're not ready yet, need to be to start == - - if (cc[CC_idP].radioResourceConfigCommon_BR) { - - ext4_prach = cc[CC_idP].radioResourceConfigCommon_BR->ext4->prach_ConfigCommon_v1310; - prach_ParametersListCE_r13 = &ext4_prach->prach_ParametersListCE_r13; - - switch (prach_ParametersListCE_r13->list.count) { - case 4: - p[3]=prach_ParametersListCE_r13->list.array[3]; - case 3: - p[2]=prach_ParametersListCE_r13->list.array[2]; - case 2: - p[1]=prach_ParametersListCE_r13->list.array[1]; - case 1: - p[0]=prach_ParametersListCE_r13->list.array[0]; - break; - default: - AssertFatal(1==0,"Illegal count for prach_ParametersListCE_r13 %d\n",(int)prach_ParametersListCE_r13->list.count); - break; - } - } - - if (RA_template->rach_resource_type > 0) { - - // This uses an MPDCCH Type 2 common allocation according to Section 9.1.5 36-213 - // Parameters: - // p=2+4 PRB set (number of PRB pairs 3) - // rmax = mpdcch-NumRepetition-RA-r13 => Table 9.1.5-3 - // if CELevel = 0,1 => Table 9.1.5-1b for MPDCCH candidates - // if CELevel = 2,3 => Table 9.1.5-2b for MPDCCH candidates - // distributed transmission - - // rmax from SIB2 information - AssertFatal(rmax<9,"rmax>8!\n"); - rmax = 1<rach_resource_type-1]->mpdcch_NumRepetition_RA_r13; - // choose r1 by default for RAR (Table 9.1.5-5) - rep = 0; - // get actual repetition count from Table 9.1.5-3 - reps = (rmax<=8)?(1<>(3-rep)); - // get narrowband according to higher-layer config - num_nb = p[RA_template->rach_resource_type-1]->mpdcch_NarrowbandsToMonitor_r13.list.count; - RA_template->msg2_narrowband = *p[RA_template->rach_resource_type-1]->mpdcch_NarrowbandsToMonitor_r13.list.array[RA_template->preamble_index%num_nb]; - first_rb = narrowband_to_first_rb(&cc[CC_idP],RA_template->msg2_narrowband); - - if ((RA_template->msg2_mpdcch_repetition_cnt == 0) && - (mpdcch_sf_condition(eNB,CC_idP,frameP,subframeP,rmax,TYPE2,-1)>0)){ - // MPDCCH configuration for RAR - LOG_D(MAC,"[eNB %d][RAPROC] Frame %d, Subframe %d : In generate_Msg2, Programming MPDCCH %d repetitions\n", - module_idP,frameP,subframeP,reps); - - - memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE; - dl_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_dl_config_mpdcch_pdu)); - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.dci_format = (RA_template->rach_resource_type > 1) ? 11 : 10; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.mpdcch_narrow_band = RA_template->msg2_narrowband; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.number_of_prb_pairs = 6; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.resource_block_assignment = 0; // Note: this can be dynamic - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.mpdcch_tansmission_type = 1; // imposed (9.1.5 in 213) for Type 2 Common search space - AssertFatal(cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13!=NULL, - "cc[CC_id].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13 is null\n"); - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.start_symbol = cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.ecce_index = 0; // Note: this should be dynamic - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.aggregation_level = 16; // OK for CEModeA r1-3 (9.1.5-1b) or CEModeB r1-4 - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.rnti_type = 2; // RA-RNTI - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.rnti = RA_template->RA_rnti; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.ce_mode = (RA_template->rach_resource_type < 3) ? 1 : 2; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.drms_scrambling_init = cc[CC_idP].physCellId; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.initial_transmission_sf_io = (frameP*10)+subframeP; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.transmission_power = 6000; // 0dB - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.resource_block_coding = getRIV(6,0,6); // Note: still to be checked if it should not be (getRIV(N_RB_DL,first_rb,6)) : Check nFAPI specifications and what is done L1 with this parameter - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.mcs = 4; // adjust according to size of RAR, 208 bits with N1A_PRB=3 - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.pdsch_reptition_levels = 4; // fix to 4 for now - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.redundancy_version = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.new_data_indicator = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.harq_process = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.tpmi_length = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.tpmi = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.pmi_flag = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.pmi = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.harq_resource_offset = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.dci_subframe_repetition_number = rep; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.tpc = 1;// N1A_PRB=3 (36.212); => 208 bits for mcs=4, choose mcs according t message size TBD - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.downlink_assignment_index_length = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.downlink_assignment_index = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.allocate_prach_flag = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.preamble_index = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.prach_mask_index = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.starting_ce_level = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.srs_request = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.antenna_ports_and_scrambling_identity_flag = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.antenna_ports_and_scrambling_identity = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.frequency_hopping_enabled_flag = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.paging_direct_indication_differentiation_flag = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.direct_indication = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.total_dci_length_including_padding = 0; // this is not needed by OAI L1, but should be filled in - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.number_of_tx_antenna_ports = 1; - RA_template->msg2_mpdcch_repetition_cnt++; - dl_req->number_pdu++; - RA_template->Msg2_subframe = (RA_template->Msg2_subframe+9)%10; - - } //repetition_count==0 && SF condition met - if (RA_template->msg2_mpdcch_repetition_cnt>0) { // we're in a stream of repetitions - LOG_D(MAC,"[eNB %d][RAPROC] Frame %d, Subframe %d : In generate_Msg2, MPDCCH repetition %d\n", - module_idP,frameP,subframeP,RA_template->msg2_mpdcch_repetition_cnt); - - if (RA_template->msg2_mpdcch_repetition_cnt==reps) { // this is the last mpdcch repetition - if (cc[CC_idP].tdd_Config==NULL) { // FDD case - // wait 2 subframes for PDSCH transmission - if (subframeP>7) RA_template->Msg2_frame = (frameP+1)&1023; - else RA_template->Msg2_frame = frameP; - RA_template->Msg2_subframe = (subframeP+2)%10; // +2 is the "n+x" from Section 7.1.11 in 36.213 - } - else { - AssertFatal(1==0,"TDD case not done yet\n"); - } - }// mpdcch_repetition_count == reps - RA_template->msg2_mpdcch_repetition_cnt++; - - if ((RA_template->Msg2_frame == frameP) && (RA_template->Msg2_subframe == subframeP)) { - // Program PDSCH - LOG_D(MAC,"[eNB %d][RAPROC] Frame %d, Subframe %d : In generate_Msg2, Programming PDSCH\n", - module_idP,frameP,subframeP); - RA_template->generate_rar = 0; - - dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; - memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; - dl_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_dl_config_dlsch_pdu)); - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_idP]; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = RA_template->RA_rnti; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL,first_rb,6); - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1;// first block - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB==1 ) ? 0 : 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1; - // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = ; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB==1 ) ? 1 : 2; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1; - // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ; - - // Rel10 fields - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13; - // Rel13 fields - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = (RA_template->rach_resource_type < 3) ? 1 : 2;; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 2; // not SI message - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = (10*frameP)+subframeP; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.drms_table_flag = 0; - dl_req->number_pdu++; - - // Program UL processing for Msg3, same as regular LTE - get_Msg3alloc(&cc[CC_idP],subframeP,frameP,&RA_template->Msg3_frame,&RA_template->Msg3_subframe); - add_msg3(module_idP,CC_idP, RA_template,frameP,subframeP); - fill_rar_br(eNB,CC_idP,RA_template,frameP,subframeP,cc[CC_idP].RAR_pdu.payload,RA_template->rach_resource_type-1); - // DL request - eNB->TX_req[CC_idP].sfn_sf = (frameP<<4)+subframeP; - TX_req = &eNB->TX_req[CC_idP].tx_request_body.tx_pdu_list[eNB->TX_req[CC_idP].tx_request_body.number_of_pdus]; - TX_req->pdu_length = 7; // This should be changed if we have more than 1 preamble - TX_req->pdu_index = eNB->pdu_index[CC_idP]++; - TX_req->num_segments = 1; - TX_req->segments[0].segment_length = 7; - TX_req->segments[0].segment_data = cc[CC_idP].RAR_pdu.payload; - eNB->TX_req[CC_idP].tx_request_body.number_of_pdus++; - } - } - - } - else -#endif - { - - if ((RA_template->Msg2_frame == frameP) && (RA_template->Msg2_subframe == subframeP)) { - LOG_D(MAC,"[eNB %d] CC_id %d Frame %d, subframeP %d: Generating RAR DCI, RA_active %d format 1A (%d,%d))\n", - module_idP, CC_idP, frameP, subframeP, - RA_template->RA_active, - - RA_template->RA_dci_fmt1, - RA_template->RA_dci_size_bits1); - - // Allocate 4 PRBS starting in RB 0 - first_rb = 0; - vrb_map[first_rb] = 1; - vrb_map[first_rb+1] = 1; - vrb_map[first_rb+2] = 1; - vrb_map[first_rb+3] = 1; - - memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; - dl_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_dl_config_dci_dl_pdu)); - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format = NFAPI_DL_DCI_FORMAT_1A; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level = 4; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = RA_template->RA_rnti; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = 2; // RA-RNTI : see Table 4-10 from SCF082 - nFAPI specifications - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000; // equal to RS power - - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process = 0; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc = 1; // no TPC - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1 = 1; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1 = 0; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1 = 0; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.virtual_resource_block_assignment_flag = 0; - - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(N_RB_DL,first_rb,4); - - // This checks if the above DCI allocation is feasible in current subframe - if (!CCE_allocation_infeasible(module_idP,CC_idP,0,subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level,RA_template->RA_rnti)) { - LOG_D(MAC,"Frame %d: Subframe %d : Adding common DCI for RA_RNTI %x\n", - frameP,subframeP,RA_template->RA_rnti); - dl_req->number_dci++; - dl_req->number_pdu++; - - dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; - memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; - dl_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_dl_config_dlsch_pdu)); - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_idP]; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = RA_template->RA_rnti; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL,first_rb,4); - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1;// first block - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB==1 ) ? 0 : 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1; - // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = ; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB==1 ) ? 1 : 2; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1; - // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ; - dl_req->number_pdu++; - - // Program UL processing for Msg3 - get_Msg3alloc(&cc[CC_idP],subframeP,frameP,&RA_template->Msg3_frame,&RA_template->Msg3_subframe); - - LOG_D(MAC,"Frame %d, Subframe %d: Setting Msg3 reception for Frame %d Subframe %d\n", - frameP,subframeP,RA_template->Msg3_frame,RA_template->Msg3_subframe); - - fill_rar(module_idP,CC_idP,frameP,cc[CC_idP].RAR_pdu.payload,N_RB_DL,7); - add_msg3(module_idP,CC_idP, RA_template,frameP,subframeP); - - // DL request - eNB->TX_req[CC_idP].sfn_sf = (frameP<<4)+subframeP; - TX_req = &eNB->TX_req[CC_idP].tx_request_body.tx_pdu_list[eNB->TX_req[CC_idP].tx_request_body.number_of_pdus]; - TX_req->pdu_length = 7; // This should be changed if we have more than 1 preamble - TX_req->pdu_index = eNB->pdu_index[CC_idP]++; - TX_req->num_segments = 1; - TX_req->segments[0].segment_length = 7; - TX_req->segments[0].segment_data = cc[CC_idP].RAR_pdu.payload; - eNB->TX_req[CC_idP].tx_request_body.number_of_pdus++; - } // PDCCH CCE allocation is feasible - } // Msg2 frame/subframe condition - } // else BL/CE -} - -void generate_Msg4(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t subframeP,RA_TEMPLATE *RA_template){ - - - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc = eNB->common_channels; - int16_t rrc_sdu_length; - int UE_id = -1; - uint16_t msg4_padding; - uint16_t msg4_post_padding; - uint16_t msg4_header; - - uint8_t *vrb_map; - int first_rb; - int N_RB_DL; - nfapi_dl_config_request_pdu_t *dl_config_pdu; - nfapi_ul_config_request_pdu_t *ul_config_pdu; - nfapi_tx_request_pdu_t *TX_req; - UE_list_t *UE_list=&eNB->UE_list; - nfapi_dl_config_request_body_t *dl_req; - nfapi_ul_config_request_body_t *ul_req; - uint8_t lcid; - uint8_t offset; - - -#ifdef Rel14 - int rmax = 0; - int rep = 0; - int reps = 0; - - - first_rb = 0; - struct PRACH_ConfigSIB_v1310 *ext4_prach; - struct PUCCH_ConfigCommon_v1310 *ext4_pucch; - PRACH_ParametersListCE_r13_t *prach_ParametersListCE_r13; - struct N1PUCCH_AN_InfoList_r13 *pucch_N1PUCCH_AN_InfoList_r13; - PRACH_ParametersCE_r13_t *p[4]={NULL,NULL,NULL,NULL}; - int pucchreps[4]={1,1,1,1}; - int n1pucchan[4]={0,0,0,0}; - - if (cc[CC_idP].radioResourceConfigCommon_BR) { - - ext4_prach = cc[CC_idP].radioResourceConfigCommon_BR->ext4->prach_ConfigCommon_v1310; - ext4_pucch = cc[CC_idP].radioResourceConfigCommon_BR->ext4->pucch_ConfigCommon_v1310; - prach_ParametersListCE_r13 = &ext4_prach->prach_ParametersListCE_r13; - pucch_N1PUCCH_AN_InfoList_r13 = ext4_pucch->n1PUCCH_AN_InfoList_r13; - AssertFatal(prach_ParametersListCE_r13!=NULL,"prach_ParametersListCE_r13 is null\n"); - AssertFatal(pucch_N1PUCCH_AN_InfoList_r13!=NULL,"pucch_N1PUCCH_AN_InfoList_r13 is null\n"); - // check to verify CE-Level compatibility in SIB2_BR - AssertFatal(prach_ParametersListCE_r13->list.count == pucch_N1PUCCH_AN_InfoList_r13->list.count, - "prach_ParametersListCE_r13->list.count!= pucch_N1PUCCH_AN_InfoList_r13->list.count\n"); - - switch (prach_ParametersListCE_r13->list.count) { - case 4: - p[3] = prach_ParametersListCE_r13->list.array[3]; - n1pucchan[3] = *pucch_N1PUCCH_AN_InfoList_r13->list.array[3]; - AssertFatal(ext4_pucch->pucch_NumRepetitionCE_Msg4_Level3_r13!=NULL,"pucch_NumRepetitionCE_Msg4_Level3 shouldn't be NULL\n"); - pucchreps[3] = (int)(4<<*ext4_pucch->pucch_NumRepetitionCE_Msg4_Level3_r13); - - case 3: - p[2] = prach_ParametersListCE_r13->list.array[2]; - n1pucchan[2] = *pucch_N1PUCCH_AN_InfoList_r13->list.array[2]; - AssertFatal(ext4_pucch->pucch_NumRepetitionCE_Msg4_Level2_r13!=NULL,"pucch_NumRepetitionCE_Msg4_Level2 shouldn't be NULL\n"); - pucchreps[2] = (int)(4<<*ext4_pucch->pucch_NumRepetitionCE_Msg4_Level2_r13); - case 2: - p[1] =prach_ParametersListCE_r13->list.array[1]; - n1pucchan[1] = *pucch_N1PUCCH_AN_InfoList_r13->list.array[1]; - AssertFatal(ext4_pucch->pucch_NumRepetitionCE_Msg4_Level2_r13!=NULL,"pucch_NumRepetitionCE_Msg4_Level1 shouldn't be NULL\n"); - pucchreps[1] = (int)(1<<*ext4_pucch->pucch_NumRepetitionCE_Msg4_Level1_r13); - case 1: - p[0] = prach_ParametersListCE_r13->list.array[0]; - n1pucchan[0] = *pucch_N1PUCCH_AN_InfoList_r13->list.array[0]; - AssertFatal(ext4_pucch->pucch_NumRepetitionCE_Msg4_Level2_r13!=NULL,"pucch_NumRepetitionCE_Msg4_Level0 shouldn't be NULL\n"); - pucchreps[0] = (int)(1<<*ext4_pucch->pucch_NumRepetitionCE_Msg4_Level0_r13); - default: - AssertFatal(1==0,"Illegal count for prach_ParametersListCE_r13 %d\n",prach_ParametersListCE_r13->list.count); - } - } -#endif - - vrb_map = cc[CC_idP].vrb_map; - - dl_req = &eNB->DL_req[CC_idP].dl_config_request_body; - dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; - N_RB_DL = to_prb(cc[CC_idP].mib->message.dl_Bandwidth); - - UE_id = find_UE_id(module_idP,RA_template->rnti); - AssertFatal(UE_id>=0,"Can't find UE for t-crnti\n"); - - // set HARQ process round to 0 for this UE - - if (cc->tdd_Config) RA_template->harq_pid = ((frameP*10)+subframeP)%10; - else RA_template->harq_pid = ((frameP*10)+subframeP)&7; - - - // Get RRCConnectionSetup for Piggyback - rrc_sdu_length = mac_rrc_data_req(module_idP, - CC_idP, - frameP, - CCCH, - 1, // 1 transport block - &cc[CC_idP].CCCH_pdu.payload[0], - ENB_FLAG_YES, - module_idP, - 0); // not used in this case - - AssertFatal(rrc_sdu_length>0, - "[MAC][eNB Scheduler] CCCH not allocated\n"); - - - LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: UE_id %d, rrc_sdu_length %d\n", - module_idP, CC_idP, frameP, subframeP,UE_id, rrc_sdu_length); - - -#ifdef Rel14 - if (RA_template->rach_resource_type>0) { - - // Generate DCI + repetitions first - // This uses an MPDCCH Type 2 allocation according to Section 9.1.5 36-213, Type2 common allocation according to Table 7.1-8 (36-213) - // Parameters: - // p=2+4 PRB set (number of PRB pairs 6) - // rmax = mpdcch-NumRepetition-RA-r13 => Table 9.1.5-3 - // if CELevel = 0,1 => Table 9.1.5-1b for MPDCCH candidates - // if CELevel = 2,3 => Table 9.1.5-2b for MPDCCH candidates - // distributed transmission - - // rmax from SIB2 information - rmax = p[RA_template->rach_resource_type-1]->mpdcch_NumRepetition_RA_r13; - AssertFatal(rmax>=4,"choose rmax>=4 for enough repeititions, or reduce rep to 1 or 2\n"); - - // choose r3 by default for Msg4 (this is ok from table 9.1.5-3 for rmax = >=4, if we choose rmax <4 it has to be less - rep = 2; - // get actual repetition count from Table 9.1.5-3 - reps = (rmax<=8)?(1<>(3-rep)); - // get first narrowband - first_rb = narrowband_to_first_rb(&cc[CC_idP],RA_template->msg34_narrowband); - - if ((RA_template->msg4_mpdcch_repetition_cnt == 0) && - (mpdcch_sf_condition(eNB,CC_idP,frameP,subframeP,rmax,TYPE2,-1)>0)){ - // MPDCCH configuration for RAR - - memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE; - dl_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_dl_config_mpdcch_pdu)); - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.dci_format = (RA_template->rach_resource_type > 1) ? 11 : 10; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.mpdcch_narrow_band = RA_template->msg34_narrowband; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.number_of_prb_pairs = 6; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.resource_block_assignment = 0; // Note: this can be dynamic - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.mpdcch_tansmission_type = 1; - AssertFatal(cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13!=NULL, - "cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13 is null\n"); - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.start_symbol = cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.ecce_index = 0; // Note: this should be dynamic - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.aggregation_level = 16; // OK for CEModeA r1-3 (9.1.5-1b) or CEModeB r1-4 - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.rnti_type = 0; // t-C-RNTI - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.rnti = RA_template->RA_rnti; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.ce_mode = (RA_template->rach_resource_type < 3) ? 1 : 2; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.drms_scrambling_init = cc[CC_idP].physCellId; /// Check this is still N_id_cell for type2 common - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.initial_transmission_sf_io = (frameP*10)+subframeP; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.transmission_power = 6000; // 0dB - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.resource_block_coding = getRIV(6,0,6);// check if not getRIV(N_RB_DL,first_rb,6); - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.mcs = 4; // adjust according to size of Msg4, 208 bits with N1A_PRB=3 - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.pdsch_reptition_levels = 4; // fix to 4 for now - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.redundancy_version = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.new_data_indicator = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.harq_process = RA_template->harq_pid; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.tpmi_length = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.tpmi = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.pmi_flag = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.pmi = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.harq_resource_offset = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.dci_subframe_repetition_number = rep; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.tpc = 1;// N1A_PRB=3; => 208 bits - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.downlink_assignment_index_length = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.downlink_assignment_index = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.allocate_prach_flag = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.preamble_index = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.prach_mask_index = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.starting_ce_level = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.srs_request = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.antenna_ports_and_scrambling_identity_flag = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.antenna_ports_and_scrambling_identity = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.frequency_hopping_enabled_flag = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.paging_direct_indication_differentiation_flag = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.direct_indication = 0; - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.total_dci_length_including_padding = 0; // this is not needed by OAI L1, but should be filled in - dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.number_of_tx_antenna_ports = 1; - RA_template->msg4_mpdcch_repetition_cnt++; - dl_req->number_pdu++; - - } //repetition_count==0 && SF condition met - else if (RA_template->msg4_mpdcch_repetition_cnt>0) { // we're in a stream of repetitions - RA_template->msg4_mpdcch_repetition_cnt++; - if (RA_template->msg4_mpdcch_repetition_cnt==reps) { // this is the last mpdcch repetition - if (cc[CC_idP].tdd_Config==NULL) { // FDD case - // wait 2 subframes for PDSCH transmission - if (subframeP>7) RA_template->Msg4_frame = (frameP+1)&1023; - else RA_template->Msg4_frame = frameP; - RA_template->Msg4_subframe = (subframeP+2)%10; - } - else { - AssertFatal(1==0,"TDD case not done yet\n"); - } - } // mpdcch_repetition_count == reps - if ((RA_template->Msg4_frame == frameP) && (RA_template->Msg4_subframe == subframeP)) { - - // Program PDSCH - - LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Generating Msg4 BR with RRC Piggyback (ce_level %d RNTI %x)\n", - module_idP, CC_idP, frameP, subframeP,RA_template->rach_resource_type-1,RA_template->rnti); - - AssertFatal(1==0,"Msg4 generation not finished for BL/CE UE\n"); - dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; - memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; - dl_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_dl_config_dlsch_pdu)); - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_idP]; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = RA_template->rnti; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL,first_rb,6); // check that this isn't getRIV(6,0,6) - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1;// first block - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB==1 ) ? 0 : 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1; - // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = ; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB==1 ) ? 1 : 2; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1; - // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ; - - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13; - - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = (RA_template->rach_resource_type < 3) ? 1 : 2; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 2; // not SI message - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = (10*frameP)+subframeP; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.drms_table_flag = 0; - dl_req->number_pdu++; - - RA_template->generate_Msg4=0; - RA_template->wait_ack_Msg4=1; - - lcid=0; - - UE_list->UE_sched_ctrl[UE_id].round[CC_idP][RA_template->harq_pid] = 0; - msg4_header = 1+6+1; // CR header, CR CE, SDU header - - if ((RA_template->msg4_TBsize - rrc_sdu_length - msg4_header) <= 2) { - msg4_padding = RA_template->msg4_TBsize - rrc_sdu_length - msg4_header; - msg4_post_padding = 0; - } else { - msg4_padding = 0; - msg4_post_padding = RA_template->msg4_TBsize - rrc_sdu_length - msg4_header -1; - } - - LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d subframeP %d Msg4 : TBS %d, sdu_len %d, msg4_header %d, msg4_padding %d, msg4_post_padding %d\n", - module_idP,CC_idP,frameP,subframeP,RA_template->msg4_TBsize,rrc_sdu_length,msg4_header,msg4_padding,msg4_post_padding); - DevAssert( UE_id != UE_INDEX_INVALID ); // FIXME not sure how to gracefully return - // CHECK THIS: &cc[CC_idP].CCCH_pdu.payload[0] - offset = generate_dlsch_header((unsigned char*)eNB->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0], - 1, //num_sdus - (unsigned short*)&rrc_sdu_length, // - &lcid, // sdu_lcid - 255, // no drx - 31, // no timing advance - RA_template->cont_res_id, // contention res id - msg4_padding, // no padding - msg4_post_padding); - - memcpy((void*)&eNB->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0][(unsigned char)offset], - &cc[CC_idP].CCCH_pdu.payload[0], - rrc_sdu_length); - - // DL request - eNB->TX_req[CC_idP].sfn_sf = (frameP<<4)+subframeP; - TX_req = &eNB->TX_req[CC_idP].tx_request_body.tx_pdu_list[eNB->TX_req[CC_idP].tx_request_body.number_of_pdus]; - TX_req->pdu_length = rrc_sdu_length; - TX_req->pdu_index = eNB->pdu_index[CC_idP]++; - TX_req->num_segments = 1; - TX_req->segments[0].segment_length = rrc_sdu_length; - TX_req->segments[0].segment_data = eNB->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0]; - eNB->TX_req[CC_idP].tx_request_body.number_of_pdus++; - - // Program ACK/NAK for Msg4 PDSCH - int absSF = (RA_template->Msg3_frame*10)+RA_template->Msg3_subframe; - // see Section 10.2 from 36.213 - int ackNAK_absSF = absSF + reps + 4; - AssertFatal(reps>2,"Have to handle programming of ACK when PDSCH repetitions is > 2\n"); - ul_req = &eNB->UL_req_tmp[CC_idP][ackNAK_absSF%10].ul_config_request_body; - ul_config_pdu = &ul_req->ul_config_pdu_list[ul_req->number_of_pdus]; - - ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE; - ul_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_ul_config_uci_harq_pdu)); - ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.handle = 0; // don't know how to use this - ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.rnti = RA_template->rnti; - ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel13.ue_type = (RA_template->rach_resource_type < 3) ? 1 : 2; - ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel13.empty_symbols = 0; - ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel13.total_number_of_repetitions = pucchreps[RA_template->rach_resource_type-1]; - ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel13.repetition_number = 0; - // Note need to keep sending this across reptitions!!!! Not really for PUCCH, to ask small-cell forum, we'll see for the other messages, maybe parameters change across repetitions and FAPI has to provide for that - if (cc[CC_idP].tdd_Config==NULL) { // FDD case - ul_config_pdu->uci_harq_pdu.harq_information.harq_information_rel8_fdd.n_pucch_1_0 = n1pucchan[RA_template->rach_resource_type-1]; - // NOTE: How to fill in the rest of the n_pucch_1_0 information 213 Section 10.1.2.1 in the general case - // = N_ECCE_q + Delta_ARO + n1pucchan[ce_level] - // higher in the MPDCCH configuration, N_ECCE_q is hard-coded to 0, and harq resource offset to 0 => - // Delta_ARO = 0 from Table 10.1.2.1-1 - ul_config_pdu->uci_harq_pdu.harq_information.harq_information_rel8_fdd.harq_size = 1; // 1-bit ACK/NAK - } - else { - AssertFatal(1==0,"PUCCH configuration for ACK/NAK not handled yet for TDD BL/CE case\n"); - } - ul_req->number_of_pdus++; - T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_idP), T_INT(RA_template->rnti), T_INT(frameP), T_INT(subframeP), - T_INT(0 /*harq_pid always 0?*/), T_BUFFER(&eNB->UE_list.DLSCH_pdu[CC_idP][0][UE_id].payload[0], RA_template->msg4_TBsize)); - - if (opt_enabled==1) { - trace_pdu(1, (uint8_t *)eNB->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0], - rrc_sdu_length, UE_id, 3, UE_RNTI(module_idP, UE_id), - eNB->frame, eNB->subframe,0,0); - LOG_D(OPT,"[eNB %d][DLSCH] CC_id %d Frame %d trace pdu for rnti %x with size %d\n", - module_idP, CC_idP, frameP, UE_RNTI(module_idP,UE_id), rrc_sdu_length); - } - } // Msg4 frame/subframe - } // msg4_mpdcch_repetition_count - } // rach_resource_type > 0 - else -#endif - { // This is normal LTE case - if ((RA_template->Msg4_frame == frameP) && (RA_template->Msg4_subframe == subframeP)) { - LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Generating Msg4 with RRC Piggyback (RNTI %x)\n", - module_idP, CC_idP, frameP, subframeP,RA_template->rnti); - - /// Choose first 4 RBs for Msg4, should really check that these are free! - first_rb=0; - - vrb_map[first_rb] = 1; - vrb_map[first_rb+1] = 1; - vrb_map[first_rb+2] = 1; - vrb_map[first_rb+3] = 1; - - - // Compute MCS/TBS for 3 PRB (coded on 4 vrb) - msg4_header = 1+6+1; // CR header, CR CE, SDU header - - if ((rrc_sdu_length+msg4_header) <= 22) { - RA_template->msg4_mcs = 4; - RA_template->msg4_TBsize = 22; - } else if ((rrc_sdu_length+msg4_header) <= 28) { - RA_template->msg4_mcs = 5; - RA_template->msg4_TBsize = 28; - } else if ((rrc_sdu_length+msg4_header) <= 32) { - RA_template->msg4_mcs = 6; - RA_template->msg4_TBsize = 32; - } else if ((rrc_sdu_length+msg4_header) <= 41) { - RA_template->msg4_mcs = 7; - RA_template->msg4_TBsize = 41; - } else if ((rrc_sdu_length+msg4_header) <= 49) { - RA_template->msg4_mcs = 8; - RA_template->msg4_TBsize = 49; - } else if ((rrc_sdu_length+msg4_header) <= 57) { - RA_template->msg4_mcs = 9; - RA_template->msg4_TBsize = 57; - } - - fill_nfapi_dl_dci_1A(dl_config_pdu, - 4, // aggregation_level - RA_template->rnti, // rnti - 1, // rnti_type, CRNTI - RA_template->harq_pid, // harq_process - 1, // tpc, none - getRIV(N_RB_DL,first_rb,4), // resource_block_coding - RA_template->msg4_mcs, // mcs - 1, // ndi - 0, // rv - 0); // vrb_flag - LOG_D(MAC,"Frame %d, subframe %d: Msg4 DCI pdu_num %d (rnti %x,rnti_type %d,harq_pid %d, resource_block_coding (%p) %d\n", - frameP, - subframeP, - dl_req->number_pdu, - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti, - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type, - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process, - &dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding, - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding); - AssertFatal(dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding < 8192, - "resource_block_coding %u < 8192\n", - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding); - if (!CCE_allocation_infeasible(module_idP,CC_idP,1, - subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, - RA_template->rnti)) { - dl_req->number_dci++; - dl_req->number_pdu++; - - RA_template->generate_Msg4=0; - RA_template->wait_ack_Msg4=1; - - // increment Absolute subframe by 8 for Msg4 retransmission - LOG_D(MAC,"Frame %d, Subframe %d: Preparing for Msg4 retransmission currently %d.%d\n", - frameP,subframeP,RA_template->Msg4_frame,RA_template->Msg4_subframe); - if (RA_template->Msg4_subframe > 1) RA_template->Msg4_frame++; - RA_template->Msg4_frame&=1023; - RA_template->Msg4_subframe = (RA_template->Msg4_subframe+8)%10; - LOG_D(MAC,"Frame %d, Subframe %d: Msg4 retransmission in %d.%d\n", - frameP,subframeP,RA_template->Msg4_frame,RA_template->Msg4_subframe); - lcid=0; - - // put HARQ process round to 0 - if (cc->tdd_Config) RA_template->harq_pid = ((frameP*10)+subframeP)%10; - else RA_template->harq_pid = ((frameP*10)+subframeP)&7; - UE_list->UE_sched_ctrl[UE_id].round[CC_idP][RA_template->harq_pid] = 0; - - if ((RA_template->msg4_TBsize - rrc_sdu_length - msg4_header) <= 2) { - msg4_padding = RA_template->msg4_TBsize - rrc_sdu_length - msg4_header; - msg4_post_padding = 0; - } else { - msg4_padding = 0; - msg4_post_padding = RA_template->msg4_TBsize - rrc_sdu_length - msg4_header -1; - } - - LOG_D(MAC,"[eNB %d][RAPROC] CC_idP %d Frame %d subframeP %d Msg4 : TBS %d, sdu_len %d, msg4_header %d, msg4_padding %d, msg4_post_padding %d\n", - module_idP,CC_idP,frameP,subframeP,RA_template->msg4_TBsize,rrc_sdu_length,msg4_header,msg4_padding,msg4_post_padding); - DevAssert( UE_id != UE_INDEX_INVALID ); // FIXME not sure how to gracefully return - // CHECK THIS: &cc[CC_idP].CCCH_pdu.payload[0] - offset = generate_dlsch_header((unsigned char*)eNB->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0], - 1, //num_sdus - (unsigned short*)&rrc_sdu_length, // - &lcid, // sdu_lcid - 255, // no drx - 31, // no timing advance - RA_template->cont_res_id, // contention res id - msg4_padding, // no padding - msg4_post_padding); - - memcpy((void*)&eNB->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0][(unsigned char)offset], - &cc[CC_idP].CCCH_pdu.payload[0], - rrc_sdu_length); - - // DLSCH Config - fill_nfapi_dlsch_config(eNB, - dl_req, - RA_template->msg4_TBsize, - eNB->pdu_index[CC_idP], - RA_template->rnti, - 2, // resource_allocation_type : format 1A/1B/1D - 0, // virtual_resource_block_assignment_flag : localized - getRIV(N_RB_DL,first_rb,4), // resource_block_coding : RIV, 4 PRB - 2, // modulation: QPSK - 0, // redundancy version - 1, // transport_blocks - 0, // transport_block_to_codeword_swap_flag (0) - (cc->p_eNB==1 ) ? 0 : 1, // transmission_scheme - 1, // number of layers - 1, // number of subbands - //0, // codebook index - 1, // ue_category_capacity - 4, // pa: 0 dB - 0, // delta_power_offset_index - 0, // ngap - 1, // NPRB = 3 like in DCI - (cc->p_eNB==1 ) ? 1 : 2, // transmission mode - 1, // num_bf_prb_per_subband - 1); // num_bf_vector - LOG_D(MAC,"Filled DLSCH config, pdu number %d, non-dci pdu_index %d\n",dl_req->number_pdu,eNB->pdu_index[CC_idP]); - - // DL request - eNB->TX_req[CC_idP].sfn_sf = fill_nfapi_tx_req(&eNB->TX_req[CC_idP].tx_request_body, - (frameP*10)+subframeP, - rrc_sdu_length, - eNB->pdu_index[CC_idP], - eNB->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0]); - eNB->pdu_index[CC_idP]++; - - LOG_D(MAC,"Filling UCI ACK/NAK information, cce_idx %d\n",dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.cce_idx); - // Program PUCCH1a for ACK/NAK - // Program ACK/NAK for Msg4 PDSCH - fill_nfapi_uci_acknak(module_idP, - CC_idP, - RA_template->rnti, - (frameP*10)+subframeP, - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.cce_idx); - - - T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_idP), T_INT(RA_template->rnti), T_INT(frameP), T_INT(subframeP), - T_INT(0 /*harq_pid always 0?*/), T_BUFFER(&eNB->UE_list.DLSCH_pdu[CC_idP][0][UE_id].payload[0], RA_template->msg4_TBsize)); - - if (opt_enabled==1) { - trace_pdu(1, (uint8_t *)eNB->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0], - rrc_sdu_length, UE_id, 3, UE_RNTI(module_idP, UE_id), - eNB->frame, eNB->subframe,0,0); - LOG_D(OPT,"[eNB %d][DLSCH] CC_id %d Frame %d trace pdu for rnti %x with size %d\n", - module_idP, CC_idP, frameP, UE_RNTI(module_idP,UE_id), rrc_sdu_length); - } - - } // CCE Allocation feasible - } // msg4 frame/subframe - } // else rach_resource_type -} - -void check_Msg4_retransmission(module_id_t module_idP,int CC_idP,frame_t frameP,sub_frame_t subframeP,RA_TEMPLATE *RA_template) { - - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc = eNB->common_channels; - int UE_id = -1; - uint8_t *vrb_map; - int first_rb; - int N_RB_DL; - nfapi_dl_config_request_pdu_t *dl_config_pdu; - UE_list_t *UE_list=&eNB->UE_list; - nfapi_dl_config_request_body_t *dl_req; - - int round; - /* -#ifdef Rel14 - COMMON_channels_t *cc = eNB->common_channels; - - int rmax = 0; - int rep = 0; - int reps = 0; - - first_rb = 0; - struct PRACH_ConfigSIB_v1310 *ext4_prach; - PRACH_ParametersListCE_r13_t *prach_ParametersListCE_r13; - PRACH_ParametersCE_r13_t *p[4]; - - if (cc[CC_idP].radioResourceConfigCommon_BR) { - - ext4_prach = cc[CC_idP].radioResourceConfigCommon_BR->ext4->prach_ConfigCommon_v1310; - prach_ParametersListCE_r13 = &ext4_prach->prach_ParametersListCE_r13; - - switch (prach_ParametersListCE_r13->list.count) { - case 4: - p[3]=prach_ParametersListCE_r13->list.array[3]; - case 3: - p[2]=prach_ParametersListCE_r13->list.array[2]; - case 2: - p[1]=prach_ParametersListCE_r13->list.array[1]; - case 1: - p[0]=prach_ParametersListCE_r13->list.array[0]; - default: - AssertFatal(1==0,"Illegal count for prach_ParametersListCE_r13 %d\n",prach_ParametersListCE_r13->list.count); - } - } -#endif - */ - - // check HARQ status and retransmit if necessary - - - UE_id = find_UE_id(module_idP,RA_template->rnti); - AssertFatal(UE_id>=0,"Can't find UE for t-crnti\n"); - - round = UE_list->UE_sched_ctrl[UE_id].round[CC_idP][RA_template->harq_pid]; - vrb_map = cc[CC_idP].vrb_map; - - dl_req = &eNB->DL_req[CC_idP].dl_config_request_body; - dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; - N_RB_DL = to_prb(cc[CC_idP].mib->message.dl_Bandwidth); - - LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Checking if Msg4 for harq_pid %d was acknowledged (round %d)\n", - module_idP,CC_idP,frameP,subframeP,RA_template->harq_pid,round); - - if (round!=8) { - -#ifdef Rel14 - if (RA_template->rach_resource_type>0) { - AssertFatal(1==0,"Msg4 Retransmissions not handled yet for BL/CE UEs\n"); - } + memset((void *) ul_config_pdu, 0, + sizeof(nfapi_ul_config_request_pdu_t)); + ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_PDU_TYPE; + ul_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_ul_config_ulsch_pdu)); + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.handle = mac->ul_handle++; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.rnti = ra->rnti; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.resource_block_start = + narrowband_to_first_rb(cc, + ra->msg34_narrowband) + + ra->msg3_first_rb; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.number_of_resource_blocks = + ra->msg3_nb_rb; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type = 2; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.cyclic_shift_2_for_drms = + 0; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8. + frequency_hopping_enabled_flag = 0; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_bits = 0; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.new_data_indication = 0; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.redundancy_version = + rvseq[ra->msg3_round]; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.harq_process_number = + ((10 * ra->Msg3_frame) + ra->Msg3_subframe) & 7; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.ul_tx_mode = 0; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.current_tx_nb = 0; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.n_srs = 1; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.size = + get_TBS_UL(ra->msg3_mcs, ra->msg3_nb_rb); + // Re13 fields + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.ue_type = + ra->rach_resource_type > 2 ? 2 : 1; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13. + total_number_of_repetitions = 1; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.repetition_number = 1; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13. + initial_transmission_sf_io = + (ra->Msg3_frame * 10) + ra->Msg3_subframe; + ul_req_body->number_of_pdus++; + } // if (ra->rach_resource_type>0) { else -#endif - { - if ( (RA_template->Msg4_frame == frameP) && (RA_template->Msg4_subframe == subframeP)) { - - //RA_template->wait_ack_Msg4++; - // we have to schedule a retransmission - - first_rb=0; - vrb_map[first_rb] = 1; - vrb_map[first_rb+1] = 1; - vrb_map[first_rb+2] = 1; - vrb_map[first_rb+3] = 1; - - fill_nfapi_dl_dci_1A(dl_config_pdu, - 4, // aggregation_level - RA_template->rnti, // rnti - 1, // rnti_type, CRNTI - RA_template->harq_pid, // harq_process - 1, // tpc, none - getRIV(N_RB_DL,first_rb,4), // resource_block_coding - RA_template->msg4_mcs, // mcs - 1, // ndi - round&3, // rv - 0); // vrb_flag - - if (!CCE_allocation_infeasible(module_idP,CC_idP,1,subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level,RA_template->rnti)) { - dl_req->number_dci++; - dl_req->number_pdu++; - - LOG_D(MAC,"msg4 retransmission for rnti %x (round %d) fsf %d/%d\n", RA_template->rnti, round, frameP, subframeP); - // DLSCH Config - fill_nfapi_dlsch_config(eNB, - dl_req, - RA_template->msg4_TBsize, - -1 /* retransmission, no pdu_index */, - RA_template->rnti, - 2, // resource_allocation_type : format 1A/1B/1D - 0, // virtual_resource_block_assignment_flag : localized - getRIV(N_RB_DL,first_rb,4), // resource_block_coding : RIV, 4 PRB - 2, // modulation: QPSK - round&3, // redundancy version - 1, // transport_blocks - 0, // transport_block_to_codeword_swap_flag (0) - (cc->p_eNB==1 ) ? 0 : 1, // transmission_scheme - 1, // number of layers - 1, // number of subbands - //0, // codebook index - 1, // ue_category_capacity - 4, // pa: 0 dB - 0, // delta_power_offset_index - 0, // ngap - 1, // NPRB = 3 like in DCI - (cc->p_eNB==1 ) ? 1 : 2, // transmission mode - 1, // num_bf_prb_per_subband - 1); // num_bf_vector - } - else - LOG_D(MAC,"msg4 retransmission for rnti %x (round %d) fsf %d/%d CCE allocation failed!\n", RA_template->rnti, round, frameP, subframeP); - - - // Program PUCCH1a for ACK/NAK - +#endif + { + LOG_D(MAC, + "[eNB %d][RAPROC] Frame %d, Subframe %d : CC_id %d RA is active, Msg3 in (%d,%d)\n", + module_idP, frameP, subframeP, CC_id, ra->Msg3_frame, + ra->Msg3_subframe); - fill_nfapi_uci_acknak(module_idP,CC_idP, - RA_template->rnti, - (frameP*10)+subframeP, - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.cce_idx); - - // prepare frame for retransmission - if (RA_template->Msg4_subframe>1) RA_template->Msg4_frame++; - RA_template->Msg4_frame&=1023; - RA_template->Msg4_subframe=(RA_template->Msg4_subframe+8)%10; + LOG_D(MAC, + "Frame %d, Subframe %d Adding Msg3 UL Config Request for (%d,%d) : (%d,%d,%d)\n", + frameP, subframeP, ra->Msg3_frame, ra->Msg3_subframe, + ra->msg3_nb_rb, ra->msg3_first_rb, ra->msg3_round); - LOG_W(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Msg4 not acknowledged, adding ue specific dci (rnti %x) for RA (Msg4 Retransmission round %d in %d.%d)\n", - module_idP,CC_idP,frameP,subframeP,RA_template->rnti,round,RA_template->Msg4_frame,RA_template->Msg4_subframe); + ul_config_pdu = + &ul_req_body->ul_config_pdu_list[ul_req_body->number_of_pdus]; - } // Msg4 frame/subframe - } // regular LTE case - } else { - LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d : Msg4 acknowledged\n",module_idP,CC_idP,frameP,subframeP); - RA_template->wait_ack_Msg4=0; - RA_template->RA_active=FALSE; - UE_id = find_UE_id(module_idP,RA_template->rnti); - DevAssert( UE_id != -1 ); - eNB->UE_list.UE_template[UE_PCCID(module_idP,UE_id)][UE_id].configured=TRUE; - } -} + memset((void *) ul_config_pdu, 0, + sizeof(nfapi_ul_config_request_pdu_t)); + ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_PDU_TYPE; + ul_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_ul_config_ulsch_pdu)); + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.handle = mac->ul_handle++; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.rnti = ra->rnti; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.resource_block_start = + ra->msg3_first_rb; + AssertFatal(ra->msg3_nb_rb > 0, "nb_rb = 0\n"); + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.number_of_resource_blocks = + ra->msg3_nb_rb; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type = 2; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.cyclic_shift_2_for_drms = + 0; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8. + frequency_hopping_enabled_flag = 0; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_bits = 0; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.new_data_indication = 0; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.redundancy_version = + rvseq[ra->msg3_round]; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.harq_process_number = + subframe2harqpid(cc, ra->Msg3_frame, ra->Msg3_subframe); + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.ul_tx_mode = 0; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.current_tx_nb = 0; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.n_srs = 1; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.size = + get_TBS_UL(10, ra->msg3_nb_rb); + ul_req_body->number_of_pdus++; + // save UL scheduling information for preprocessor + for (j = 0; j < ra->msg3_nb_rb; j++) + cc->vrb_map_UL[ra->msg3_first_rb + j] = 1; -void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP) + + if (ra->msg3_round != 0) { // program HI too + hi_dci0_pdu = + &hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req->number_of_dci + + hi_dci0_req->number_of_hi]; + memset((void *) hi_dci0_pdu, 0, + sizeof(nfapi_hi_dci0_request_pdu_t)); + hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_HI_PDU_TYPE; + hi_dci0_pdu->pdu_size = 2 + sizeof(nfapi_hi_dci0_hi_pdu); + hi_dci0_pdu->hi_pdu.hi_pdu_rel8.resource_block_start = + ra->msg3_first_rb; + hi_dci0_pdu->hi_pdu.hi_pdu_rel8.cyclic_shift_2_for_drms = 0; + hi_dci0_pdu->hi_pdu.hi_pdu_rel8.hi_value = 0; + hi_dci0_req->number_of_hi++; + // save UL scheduling information for preprocessor + for (j = 0; j < ra->msg3_nb_rb; j++) + cc->vrb_map_UL[ra->msg3_first_rb + j] = 1; + + LOG_D(MAC, + "[eNB %d][PUSCH-RA %x] CC_id %d Frame %d subframeP %d Scheduled (PHICH) RA (mcs %d, first rb %d, nb_rb %d,round %d)\n", + module_idP, ra->rnti, CC_id, frameP, subframeP, 10, 1, 1, + ra->msg3_round - 1); + } // if (ra->msg3_round != 0) { // program HI too + } // non-BL/CE UE case +} + +void +generate_Msg2(module_id_t module_idP, int CC_idP, frame_t frameP, + sub_frame_t subframeP, RA_t * ra) { - int CC_id; - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc = eNB->common_channels; - RA_TEMPLATE *RA_template; - uint8_t i; + eNB_MAC_INST *mac = RC.mac[module_idP]; + COMMON_channels_t *cc = mac->common_channels; - start_meas(&eNB->schedule_ra); + uint8_t *vrb_map; + int first_rb; + int N_RB_DL; + nfapi_dl_config_request_pdu_t *dl_config_pdu; + nfapi_tx_request_pdu_t *TX_req; + nfapi_dl_config_request_body_t *dl_req; + + vrb_map = cc[CC_idP].vrb_map; + dl_req = &mac->DL_req[CC_idP].dl_config_request_body; + dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; + N_RB_DL = to_prb(cc[CC_idP].mib->message.dl_Bandwidth); + +#ifdef Rel14 + int rmax = 0; + int rep = 0; + int reps = 0; + int num_nb = 0; + + first_rb = 0; + struct PRACH_ConfigSIB_v1310 *ext4_prach; + PRACH_ParametersListCE_r13_t *prach_ParametersListCE_r13; + PRACH_ParametersCE_r13_t *p[4] = { NULL, NULL, NULL, NULL }; + + uint16_t absSF = (10 * frameP) + subframeP; + uint16_t absSF_Msg2 = (10 * ra->Msg2_frame) + ra->Msg2_subframe; + + if (absSF > absSF_Msg2) + return; // we're not ready yet, need to be to start == + + if (cc[CC_idP].radioResourceConfigCommon_BR) { + + ext4_prach = + cc[CC_idP].radioResourceConfigCommon_BR->ext4-> + prach_ConfigCommon_v1310; + prach_ParametersListCE_r13 = + &ext4_prach->prach_ParametersListCE_r13; + + switch (prach_ParametersListCE_r13->list.count) { + case 4: + p[3] = prach_ParametersListCE_r13->list.array[3]; + case 3: + p[2] = prach_ParametersListCE_r13->list.array[2]; + case 2: + p[1] = prach_ParametersListCE_r13->list.array[1]; + case 1: + p[0] = prach_ParametersListCE_r13->list.array[0]; + break; + default: + AssertFatal(1 == 0, + "Illegal count for prach_ParametersListCE_r13 %d\n", + (int) prach_ParametersListCE_r13->list.count); + break; + } + } + + if (ra->rach_resource_type > 0) { + + // This uses an MPDCCH Type 2 common allocation according to Section 9.1.5 36-213 + // Parameters: + // p=2+4 PRB set (number of PRB pairs 3) + // rmax = mpdcch-NumRepetition-RA-r13 => Table 9.1.5-3 + // if CELevel = 0,1 => Table 9.1.5-1b for MPDCCH candidates + // if CELevel = 2,3 => Table 9.1.5-2b for MPDCCH candidates + // distributed transmission + + // rmax from SIB2 information + AssertFatal(rmax < 9, "rmax>8!\n"); + rmax = + 1 << p[ra->rach_resource_type - + 1]->mpdcch_NumRepetition_RA_r13; + // choose r1 by default for RAR (Table 9.1.5-5) + rep = 0; + // get actual repetition count from Table 9.1.5-3 + reps = (rmax <= 8) ? (1 << rep) : (rmax >> (3 - rep)); + // get narrowband according to higher-layer config + num_nb = + p[ra->rach_resource_type - + 1]->mpdcch_NarrowbandsToMonitor_r13.list.count; + ra->msg2_narrowband = + *p[ra->rach_resource_type - + 1]->mpdcch_NarrowbandsToMonitor_r13.list.array[ra-> + preamble_index + % num_nb]; + first_rb = + narrowband_to_first_rb(&cc[CC_idP], ra->msg2_narrowband); + + if ((ra->msg2_mpdcch_repetition_cnt == 0) && + (mpdcch_sf_condition + (mac, CC_idP, frameP, subframeP, rmax, TYPE2, -1) > 0)) { + // MPDCCH configuration for RAR + LOG_D(MAC, + "[eNB %d][RAPROC] Frame %d, Subframe %d : In generate_Msg2, Programming MPDCCH %d repetitions\n", + module_idP, frameP, subframeP, reps); - for (CC_id=0; CC_idpdu_type = NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE; + dl_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_dl_config_mpdcch_pdu)); + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.dci_format = + (ra->rach_resource_type > 1) ? 11 : 10; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.mpdcch_narrow_band = + ra->msg2_narrowband; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13. + number_of_prb_pairs = 6; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.resource_block_assignment = 0; // Note: this can be dynamic + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.mpdcch_tansmission_type = 1; // imposed (9.1.5 in 213) for Type 2 Common search space + AssertFatal(cc[CC_idP]. + sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13 + != NULL, + "cc[CC_id].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13 is null\n"); + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.start_symbol = + cc[CC_idP].sib1_v13ext-> + bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.ecce_index = 0; // Note: this should be dynamic + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.aggregation_level = 16; // OK for CEModeA r1-3 (9.1.5-1b) or CEModeB r1-4 + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.rnti_type = 2; // RA-RNTI + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.rnti = ra->RA_rnti; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.ce_mode = + (ra->rach_resource_type < 3) ? 1 : 2; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13. + drms_scrambling_init = cc[CC_idP].physCellId; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13. + initial_transmission_sf_io = (frameP * 10) + subframeP; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.transmission_power = 6000; // 0dB + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.resource_block_coding = getRIV(6, 0, 6); // Note: still to be checked if it should not be (getRIV(N_RB_DL,first_rb,6)) : Check nFAPI specifications and what is done L1 with this parameter + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.mcs = 4; // adjust according to size of RAR, 208 bits with N1A_PRB=3 + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.pdsch_reptition_levels = 4; // fix to 4 for now + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.redundancy_version = + 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.new_data_indicator = + 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.harq_process = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.tpmi_length = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.tpmi = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.pmi_flag = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.pmi = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13. + harq_resource_offset = 0; + dl_config_pdu->mpdcch_pdu. + mpdcch_pdu_rel13.dci_subframe_repetition_number = rep; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.tpc = 1; // N1A_PRB=3 (36.212); => 208 bits for mcs=4, choose mcs according t message size TBD + dl_config_pdu->mpdcch_pdu. + mpdcch_pdu_rel13.downlink_assignment_index_length = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13. + downlink_assignment_index = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13. + allocate_prach_flag = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.preamble_index = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.prach_mask_index = + 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.starting_ce_level = + 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.srs_request = 0; + dl_config_pdu->mpdcch_pdu. + mpdcch_pdu_rel13.antenna_ports_and_scrambling_identity_flag + = 0; + dl_config_pdu->mpdcch_pdu. + mpdcch_pdu_rel13.antenna_ports_and_scrambling_identity = 0; + dl_config_pdu->mpdcch_pdu. + mpdcch_pdu_rel13.frequency_hopping_enabled_flag = 0; + dl_config_pdu->mpdcch_pdu. + mpdcch_pdu_rel13.paging_direct_indication_differentiation_flag + = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.direct_indication = + 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.total_dci_length_including_padding = 0; // this is not needed by OAI L1, but should be filled in + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13. + number_of_tx_antenna_ports = 1; + ra->msg2_mpdcch_repetition_cnt++; + dl_req->number_pdu++; + ra->Msg2_subframe = (ra->Msg2_subframe + 9) % 10; + + } //repetition_count==0 && SF condition met + if (ra->msg2_mpdcch_repetition_cnt > 0) { // we're in a stream of repetitions + LOG_D(MAC, + "[eNB %d][RAPROC] Frame %d, Subframe %d : In generate_Msg2, MPDCCH repetition %d\n", + module_idP, frameP, subframeP, + ra->msg2_mpdcch_repetition_cnt); + + if (ra->msg2_mpdcch_repetition_cnt == reps) { // this is the last mpdcch repetition + if (cc[CC_idP].tdd_Config == NULL) { // FDD case + // wait 2 subframes for PDSCH transmission + if (subframeP > 7) + ra->Msg2_frame = (frameP + 1) & 1023; + else + ra->Msg2_frame = frameP; + ra->Msg2_subframe = (subframeP + 2) % 10; // +2 is the "n+x" from Section 7.1.11 in 36.213 + } else { + AssertFatal(1 == 0, "TDD case not done yet\n"); + } + } // mpdcch_repetition_count == reps + ra->msg2_mpdcch_repetition_cnt++; + + if ((ra->Msg2_frame == frameP) + && (ra->Msg2_subframe == subframeP)) { + // Program PDSCH + LOG_D(MAC, + "[eNB %d][RAPROC] Frame %d, Subframe %d : In generate_Msg2, Programming PDSCH\n", + module_idP, frameP, subframeP); + ra->state = WAITMSG3; + + dl_config_pdu = + &dl_req->dl_config_pdu_list[dl_req->number_pdu]; + memset((void *) dl_config_pdu, 0, + sizeof(nfapi_dl_config_request_pdu_t)); + dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; + dl_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu)); + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = + mac->pdu_index[CC_idP]; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = ra->RA_rnti; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + resource_allocation_type = 2; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + resource_block_coding = getRIV(N_RB_DL, first_rb, 6); + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + redundancy_version = 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1; // first block + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = + 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + transmission_scheme = (cc->p_eNB == 1) ? 0 : 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = + 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + number_of_subbands = 1; + // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = ; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + ue_category_capacity = 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + delta_power_offset_index = 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = + (cc->p_eNB == 1) ? 1 : 2; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + num_bf_prb_per_subband = 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1; + // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ; + + // Rel10 fields + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = + cc[CC_idP]. + sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13-> + startSymbolBR_r13; + // Rel13 fields + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = + (ra->rach_resource_type < 3) ? 1 : 2;; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 2; // not SI message + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13. + initial_transmission_sf_io = (10 * frameP) + subframeP; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.drms_table_flag = + 0; + dl_req->number_pdu++; + + // Program UL processing for Msg3, same as regular LTE + get_Msg3alloc(&cc[CC_idP], subframeP, frameP, + &ra->Msg3_frame, &ra->Msg3_subframe); + add_msg3(module_idP, CC_idP, ra, frameP, subframeP); + fill_rar_br(mac, CC_idP, ra, frameP, subframeP, + cc[CC_idP].RAR_pdu.payload, + ra->rach_resource_type - 1); + // DL request + mac->TX_req[CC_idP].sfn_sf = (frameP << 4) + subframeP; + TX_req = + &mac->TX_req[CC_idP].tx_request_body.tx_pdu_list[mac-> + TX_req + [CC_idP]. + tx_request_body.number_of_pdus]; + TX_req->pdu_length = 7; // This should be changed if we have more than 1 preamble + TX_req->pdu_index = mac->pdu_index[CC_idP]++; + TX_req->num_segments = 1; + TX_req->segments[0].segment_length = 7; + TX_req->segments[0].segment_data = + cc[CC_idP].RAR_pdu.payload; + mac->TX_req[CC_idP].tx_request_body.number_of_pdus++; + } + } + + } else +#endif + { + + if ((ra->Msg2_frame == frameP) && (ra->Msg2_subframe == subframeP)) { + LOG_D(MAC, + "[eNB %d] CC_id %d Frame %d, subframeP %d: Generating RAR DCI, state %d\n", + module_idP, CC_idP, frameP, subframeP, ra->state); + + // Allocate 4 PRBS starting in RB 0 + first_rb = 0; + vrb_map[first_rb] = 1; + vrb_map[first_rb + 1] = 1; + vrb_map[first_rb + 2] = 1; + vrb_map[first_rb + 3] = 1; + + memset((void *) dl_config_pdu, 0, + sizeof(nfapi_dl_config_request_pdu_t)); + dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; + dl_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu)); + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format = + NFAPI_DL_DCI_FORMAT_1A; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level = + 4; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = ra->RA_rnti; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = 2; // RA-RNTI : see Table 4-10 from SCF082 - nFAPI specifications + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000; // equal to RS power + + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process = 0; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc = 1; // no TPC + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + new_data_indicator_1 = 1; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1 = 0; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + redundancy_version_1 = 0; + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.virtual_resource_block_assignment_flag = 0; + + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + resource_block_coding = getRIV(N_RB_DL, first_rb, 4); + + // This checks if the above DCI allocation is feasible in current subframe + if (!CCE_allocation_infeasible + (module_idP, CC_idP, 0, subframeP, + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + aggregation_level, ra->RA_rnti)) { + LOG_D(MAC, + "Frame %d: Subframe %d : Adding common DCI for RA_RNTI %x\n", + frameP, subframeP, ra->RA_rnti); + dl_req->number_dci++; + dl_req->number_pdu++; + + dl_config_pdu = + &dl_req->dl_config_pdu_list[dl_req->number_pdu]; + memset((void *) dl_config_pdu, 0, + sizeof(nfapi_dl_config_request_pdu_t)); + dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; + dl_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu)); + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = + mac->pdu_index[CC_idP]; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = ra->RA_rnti; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + resource_block_coding = getRIV(N_RB_DL, first_rb, 4); + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + redundancy_version = 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1; // first block + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = + 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + transmission_scheme = (cc->p_eNB == 1) ? 0 : 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = + 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + number_of_subbands = 1; + // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = ; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + ue_category_capacity = 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + delta_power_offset_index = 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = + (cc->p_eNB == 1) ? 1 : 2; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + num_bf_prb_per_subband = 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1; + // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ; + dl_req->number_pdu++; + + // Program UL processing for Msg3 + get_Msg3alloc(&cc[CC_idP], subframeP, frameP, + &ra->Msg3_frame, &ra->Msg3_subframe); + + LOG_D(MAC, + "Frame %d, Subframe %d: Setting Msg3 reception for Frame %d Subframe %d\n", + frameP, subframeP, ra->Msg3_frame, + ra->Msg3_subframe); + + fill_rar(module_idP, CC_idP, ra, frameP, + cc[CC_idP].RAR_pdu.payload, N_RB_DL, 7); + add_msg3(module_idP, CC_idP, ra, frameP, subframeP); + ra->state = WAITMSG3; + + // DL request + mac->TX_req[CC_idP].sfn_sf = (frameP << 4) + subframeP; + TX_req = + &mac->TX_req[CC_idP].tx_request_body.tx_pdu_list[mac-> + TX_req + [CC_idP]. + tx_request_body.number_of_pdus]; + TX_req->pdu_length = 7; // This should be changed if we have more than 1 preamble + TX_req->pdu_index = mac->pdu_index[CC_idP]++; + TX_req->num_segments = 1; + TX_req->segments[0].segment_length = 7; + TX_req->segments[0].segment_data = + cc[CC_idP].RAR_pdu.payload; + mac->TX_req[CC_idP].tx_request_body.number_of_pdus++; + } // PDCCH CCE allocation is feasible + } // Msg2 frame/subframe condition + } // else BL/CE +} + +void +generate_Msg4(module_id_t module_idP, int CC_idP, frame_t frameP, + sub_frame_t subframeP, RA_t * ra) +{ - for (i=0; icommon_channels; + int16_t rrc_sdu_length; + int UE_id = -1; + uint16_t msg4_padding; + uint16_t msg4_post_padding; + uint16_t msg4_header; - RA_template = (RA_TEMPLATE *)&cc[CC_id].RA_template[i]; - - if (RA_template->RA_active == TRUE) { - - LOG_D(MAC,"[eNB %d][RAPROC] Frame %d, Subframe %d : CC_id %d RA %d is active (generate RAR %d, generate_Msg4 %d, wait_ack_Msg4 %d, rnti %x)\n", - module_idP,frameP,subframeP,CC_id,i,RA_template->generate_rar,RA_template->generate_Msg4,RA_template->wait_ack_Msg4, RA_template->rnti); - - if (RA_template->generate_rar == 1) generate_Msg2(module_idP,CC_id,frameP,subframeP,RA_template); - else if (RA_template->generate_Msg4 == 1) generate_Msg4(module_idP,CC_id,frameP,subframeP,RA_template); - else if (RA_template->wait_ack_Msg4==1) check_Msg4_retransmission(module_idP,CC_id,frameP,subframeP,RA_template); + uint8_t *vrb_map; + int first_rb; + int N_RB_DL; + nfapi_dl_config_request_pdu_t *dl_config_pdu; + nfapi_ul_config_request_pdu_t *ul_config_pdu; + nfapi_tx_request_pdu_t *TX_req; + UE_list_t *UE_list = &mac->UE_list; + nfapi_dl_config_request_body_t *dl_req; + nfapi_ul_config_request_body_t *ul_req; + uint8_t lcid; + uint8_t offset; - } // RA_active == TRUE - } // for i=0 .. N_RA_PROC-1 - } // CC_id - - stop_meas(&eNB->schedule_ra); +#ifdef Rel14 + int rmax = 0; + int rep = 0; + int reps = 0; + + + first_rb = 0; + struct PRACH_ConfigSIB_v1310 *ext4_prach; + struct PUCCH_ConfigCommon_v1310 *ext4_pucch; + PRACH_ParametersListCE_r13_t *prach_ParametersListCE_r13; + struct N1PUCCH_AN_InfoList_r13 *pucch_N1PUCCH_AN_InfoList_r13; + PRACH_ParametersCE_r13_t *p[4] = { NULL, NULL, NULL, NULL }; + int pucchreps[4] = { 1, 1, 1, 1 }; + int n1pucchan[4] = { 0, 0, 0, 0 }; + + if (cc[CC_idP].radioResourceConfigCommon_BR) { + + ext4_prach = + cc[CC_idP].radioResourceConfigCommon_BR->ext4-> + prach_ConfigCommon_v1310; + ext4_pucch = + cc[CC_idP].radioResourceConfigCommon_BR->ext4-> + pucch_ConfigCommon_v1310; + prach_ParametersListCE_r13 = + &ext4_prach->prach_ParametersListCE_r13; + pucch_N1PUCCH_AN_InfoList_r13 = + ext4_pucch->n1PUCCH_AN_InfoList_r13; + AssertFatal(prach_ParametersListCE_r13 != NULL, + "prach_ParametersListCE_r13 is null\n"); + AssertFatal(pucch_N1PUCCH_AN_InfoList_r13 != NULL, + "pucch_N1PUCCH_AN_InfoList_r13 is null\n"); + // check to verify CE-Level compatibility in SIB2_BR + AssertFatal(prach_ParametersListCE_r13->list.count == + pucch_N1PUCCH_AN_InfoList_r13->list.count, + "prach_ParametersListCE_r13->list.count!= pucch_N1PUCCH_AN_InfoList_r13->list.count\n"); + + switch (prach_ParametersListCE_r13->list.count) { + case 4: + p[3] = prach_ParametersListCE_r13->list.array[3]; + n1pucchan[3] = *pucch_N1PUCCH_AN_InfoList_r13->list.array[3]; + AssertFatal(ext4_pucch->pucch_NumRepetitionCE_Msg4_Level3_r13 + != NULL, + "pucch_NumRepetitionCE_Msg4_Level3 shouldn't be NULL\n"); + pucchreps[3] = + (int) (4 << *ext4_pucch-> + pucch_NumRepetitionCE_Msg4_Level3_r13); + + case 3: + p[2] = prach_ParametersListCE_r13->list.array[2]; + n1pucchan[2] = *pucch_N1PUCCH_AN_InfoList_r13->list.array[2]; + AssertFatal(ext4_pucch->pucch_NumRepetitionCE_Msg4_Level2_r13 + != NULL, + "pucch_NumRepetitionCE_Msg4_Level2 shouldn't be NULL\n"); + pucchreps[2] = + (int) (4 << *ext4_pucch-> + pucch_NumRepetitionCE_Msg4_Level2_r13); + case 2: + p[1] = prach_ParametersListCE_r13->list.array[1]; + n1pucchan[1] = *pucch_N1PUCCH_AN_InfoList_r13->list.array[1]; + AssertFatal(ext4_pucch->pucch_NumRepetitionCE_Msg4_Level2_r13 + != NULL, + "pucch_NumRepetitionCE_Msg4_Level1 shouldn't be NULL\n"); + pucchreps[1] = + (int) (1 << *ext4_pucch-> + pucch_NumRepetitionCE_Msg4_Level1_r13); + case 1: + p[0] = prach_ParametersListCE_r13->list.array[0]; + n1pucchan[0] = *pucch_N1PUCCH_AN_InfoList_r13->list.array[0]; + AssertFatal(ext4_pucch->pucch_NumRepetitionCE_Msg4_Level2_r13 + != NULL, + "pucch_NumRepetitionCE_Msg4_Level0 shouldn't be NULL\n"); + pucchreps[0] = + (int) (1 << *ext4_pucch-> + pucch_NumRepetitionCE_Msg4_Level0_r13); + default: + AssertFatal(1 == 0, + "Illegal count for prach_ParametersListCE_r13 %d\n", + prach_ParametersListCE_r13->list.count); + } + } +#endif + + vrb_map = cc[CC_idP].vrb_map; + + dl_req = &mac->DL_req[CC_idP].dl_config_request_body; + dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; + N_RB_DL = to_prb(cc[CC_idP].mib->message.dl_Bandwidth); + + UE_id = find_UE_id(module_idP, ra->rnti); + AssertFatal(UE_id >= 0, "Can't find UE for t-crnti\n"); + + // set HARQ process round to 0 for this UE + + if (cc->tdd_Config) + ra->harq_pid = ((frameP * 10) + subframeP) % 10; + else + ra->harq_pid = ((frameP * 10) + subframeP) & 7; + + + // Get RRCConnectionSetup for Piggyback + rrc_sdu_length = mac_rrc_data_req(module_idP, CC_idP, frameP, CCCH, 1, // 1 transport block + &cc[CC_idP].CCCH_pdu.payload[0], ENB_FLAG_YES, module_idP, 0); // not used in this case + + AssertFatal(rrc_sdu_length > 0, + "[MAC][eNB Scheduler] CCCH not allocated\n"); + + + LOG_D(MAC, + "[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: UE_id %d, rrc_sdu_length %d\n", + module_idP, CC_idP, frameP, subframeP, UE_id, rrc_sdu_length); + + +#ifdef Rel14 + if (ra->rach_resource_type > 0) { + + // Generate DCI + repetitions first + // This uses an MPDCCH Type 2 allocation according to Section 9.1.5 36-213, Type2 common allocation according to Table 7.1-8 (36-213) + // Parameters: + // p=2+4 PRB set (number of PRB pairs 6) + // rmax = mpdcch-NumRepetition-RA-r13 => Table 9.1.5-3 + // if CELevel = 0,1 => Table 9.1.5-1b for MPDCCH candidates + // if CELevel = 2,3 => Table 9.1.5-2b for MPDCCH candidates + // distributed transmission + + // rmax from SIB2 information + rmax = p[ra->rach_resource_type - 1]->mpdcch_NumRepetition_RA_r13; + AssertFatal(rmax >= 4, + "choose rmax>=4 for enough repeititions, or reduce rep to 1 or 2\n"); + + // choose r3 by default for Msg4 (this is ok from table 9.1.5-3 for rmax = >=4, if we choose rmax <4 it has to be less + rep = 2; + // get actual repetition count from Table 9.1.5-3 + reps = (rmax <= 8) ? (1 << rep) : (rmax >> (3 - rep)); + // get first narrowband + first_rb = + narrowband_to_first_rb(&cc[CC_idP], ra->msg34_narrowband); + + if ((ra->msg4_mpdcch_repetition_cnt == 0) && + (mpdcch_sf_condition + (mac, CC_idP, frameP, subframeP, rmax, TYPE2, -1) > 0)) { + // MPDCCH configuration for RAR + + memset((void *) dl_config_pdu, 0, + sizeof(nfapi_dl_config_request_pdu_t)); + dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE; + dl_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_dl_config_mpdcch_pdu)); + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.dci_format = + (ra->rach_resource_type > 1) ? 11 : 10; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.mpdcch_narrow_band = + ra->msg34_narrowband; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13. + number_of_prb_pairs = 6; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.resource_block_assignment = 0; // Note: this can be dynamic + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13. + mpdcch_tansmission_type = 1; + AssertFatal(cc[CC_idP]. + sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13 + != NULL, + "cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13 is null\n"); + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.start_symbol = + cc[CC_idP].sib1_v13ext-> + bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.ecce_index = 0; // Note: this should be dynamic + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.aggregation_level = 16; // OK for CEModeA r1-3 (9.1.5-1b) or CEModeB r1-4 + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.rnti_type = 0; // t-C-RNTI + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.rnti = ra->RA_rnti; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.ce_mode = + (ra->rach_resource_type < 3) ? 1 : 2; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.drms_scrambling_init = cc[CC_idP].physCellId; /// Check this is still N_id_cell for type2 common + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13. + initial_transmission_sf_io = (frameP * 10) + subframeP; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.transmission_power = 6000; // 0dB + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.resource_block_coding = getRIV(6, 0, 6); // check if not getRIV(N_RB_DL,first_rb,6); + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.mcs = 4; // adjust according to size of Msg4, 208 bits with N1A_PRB=3 + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.pdsch_reptition_levels = 4; // fix to 4 for now + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.redundancy_version = + 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.new_data_indicator = + 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.harq_process = + ra->harq_pid; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.tpmi_length = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.tpmi = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.pmi_flag = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.pmi = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13. + harq_resource_offset = 0; + dl_config_pdu->mpdcch_pdu. + mpdcch_pdu_rel13.dci_subframe_repetition_number = rep; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.tpc = 1; // N1A_PRB=3; => 208 bits + dl_config_pdu->mpdcch_pdu. + mpdcch_pdu_rel13.downlink_assignment_index_length = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13. + downlink_assignment_index = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13. + allocate_prach_flag = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.preamble_index = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.prach_mask_index = + 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.starting_ce_level = + 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.srs_request = 0; + dl_config_pdu->mpdcch_pdu. + mpdcch_pdu_rel13.antenna_ports_and_scrambling_identity_flag + = 0; + dl_config_pdu->mpdcch_pdu. + mpdcch_pdu_rel13.antenna_ports_and_scrambling_identity = 0; + dl_config_pdu->mpdcch_pdu. + mpdcch_pdu_rel13.frequency_hopping_enabled_flag = 0; + dl_config_pdu->mpdcch_pdu. + mpdcch_pdu_rel13.paging_direct_indication_differentiation_flag + = 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.direct_indication = + 0; + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.total_dci_length_including_padding = 0; // this is not needed by OAI L1, but should be filled in + dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13. + number_of_tx_antenna_ports = 1; + ra->msg4_mpdcch_repetition_cnt++; + dl_req->number_pdu++; + + } //repetition_count==0 && SF condition met + else if (ra->msg4_mpdcch_repetition_cnt > 0) { // we're in a stream of repetitions + ra->msg4_mpdcch_repetition_cnt++; + if (ra->msg4_mpdcch_repetition_cnt == reps) { // this is the last mpdcch repetition + if (cc[CC_idP].tdd_Config == NULL) { // FDD case + // wait 2 subframes for PDSCH transmission + if (subframeP > 7) + ra->Msg4_frame = (frameP + 1) & 1023; + else + ra->Msg4_frame = frameP; + ra->Msg4_subframe = (subframeP + 2) % 10; + } else { + AssertFatal(1 == 0, "TDD case not done yet\n"); + } + } // mpdcch_repetition_count == reps + if ((ra->Msg4_frame == frameP) + && (ra->Msg4_subframe == subframeP)) { + + // Program PDSCH + + LOG_D(MAC, + "[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Generating Msg4 BR with RRC Piggyback (ce_level %d RNTI %x)\n", + module_idP, CC_idP, frameP, subframeP, + ra->rach_resource_type - 1, ra->rnti); + + AssertFatal(1 == 0, + "Msg4 generation not finished for BL/CE UE\n"); + dl_config_pdu = + &dl_req->dl_config_pdu_list[dl_req->number_pdu]; + memset((void *) dl_config_pdu, 0, + sizeof(nfapi_dl_config_request_pdu_t)); + dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; + dl_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu)); + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = + mac->pdu_index[CC_idP]; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = ra->rnti; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 6); // check that this isn't getRIV(6,0,6) + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + redundancy_version = 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1; // first block + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = + 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + transmission_scheme = (cc->p_eNB == 1) ? 0 : 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = + 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + number_of_subbands = 1; + // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = ; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + ue_category_capacity = 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + delta_power_offset_index = 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = + (cc->p_eNB == 1) ? 1 : 2; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + num_bf_prb_per_subband = 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1; + // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ; + + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = + cc[CC_idP]. + sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13-> + startSymbolBR_r13; + + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = + (ra->rach_resource_type < 3) ? 1 : 2; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 2; // not SI message + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13. + initial_transmission_sf_io = (10 * frameP) + subframeP; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.drms_table_flag = + 0; + dl_req->number_pdu++; + + ra->state = WAITMSG4ACK; + + lcid = 0; + + UE_list->UE_sched_ctrl[UE_id].round[CC_idP][ra->harq_pid] = + 0; + msg4_header = 1 + 6 + 1; // CR header, CR CE, SDU header + + if ((ra->msg4_TBsize - rrc_sdu_length - msg4_header) <= 2) { + msg4_padding = + ra->msg4_TBsize - rrc_sdu_length - msg4_header; + msg4_post_padding = 0; + } else { + msg4_padding = 0; + msg4_post_padding = + ra->msg4_TBsize - rrc_sdu_length - msg4_header - 1; + } + + LOG_D(MAC, + "[eNB %d][RAPROC] CC_id %d Frame %d subframeP %d Msg4 : TBS %d, sdu_len %d, msg4_header %d, msg4_padding %d, msg4_post_padding %d\n", + module_idP, CC_idP, frameP, subframeP, + ra->msg4_TBsize, rrc_sdu_length, msg4_header, + msg4_padding, msg4_post_padding); + DevAssert(UE_id != UE_INDEX_INVALID); // FIXME not sure how to gracefully return + // CHECK THIS: &cc[CC_idP].CCCH_pdu.payload[0] + offset = generate_dlsch_header((unsigned char *) mac->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char) UE_id].payload[0], 1, //num_sdus + (unsigned short *) &rrc_sdu_length, // + &lcid, // sdu_lcid + 255, // no drx + 31, // no timing advance + ra->cont_res_id, // contention res id + msg4_padding, // no padding + msg4_post_padding); + + memcpy((void *) &mac->UE_list. + DLSCH_pdu[CC_idP][0][(unsigned char) + UE_id].payload[0][(unsigned + char) + offset], + &cc[CC_idP].CCCH_pdu.payload[0], rrc_sdu_length); + + // DL request + mac->TX_req[CC_idP].sfn_sf = (frameP << 4) + subframeP; + TX_req = + &mac->TX_req[CC_idP].tx_request_body.tx_pdu_list[mac-> + TX_req + [CC_idP]. + tx_request_body.number_of_pdus]; + TX_req->pdu_length = rrc_sdu_length; + TX_req->pdu_index = mac->pdu_index[CC_idP]++; + TX_req->num_segments = 1; + TX_req->segments[0].segment_length = rrc_sdu_length; + TX_req->segments[0].segment_data = + mac->UE_list. + DLSCH_pdu[CC_idP][0][(unsigned char) UE_id].payload[0]; + mac->TX_req[CC_idP].tx_request_body.number_of_pdus++; + + // Program ACK/NAK for Msg4 PDSCH + int absSF = (ra->Msg3_frame * 10) + ra->Msg3_subframe; + // see Section 10.2 from 36.213 + int ackNAK_absSF = absSF + reps + 4; + AssertFatal(reps > 2, + "Have to handle programming of ACK when PDSCH repetitions is > 2\n"); + ul_req = + &mac->UL_req_tmp[CC_idP][ackNAK_absSF % + 10].ul_config_request_body; + ul_config_pdu = + &ul_req->ul_config_pdu_list[ul_req->number_of_pdus]; + + ul_config_pdu->pdu_type = + NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE; + ul_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_ul_config_uci_harq_pdu)); + ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.handle = 0; // don't know how to use this + ul_config_pdu->uci_harq_pdu. + ue_information.ue_information_rel8.rnti = ra->rnti; + ul_config_pdu->uci_harq_pdu. + ue_information.ue_information_rel13.ue_type = + (ra->rach_resource_type < 3) ? 1 : 2; + ul_config_pdu->uci_harq_pdu. + ue_information.ue_information_rel13.empty_symbols = 0; + ul_config_pdu->uci_harq_pdu.ue_information. + ue_information_rel13.total_number_of_repetitions = + pucchreps[ra->rach_resource_type - 1]; + ul_config_pdu->uci_harq_pdu. + ue_information.ue_information_rel13.repetition_number = + 0; + // Note need to keep sending this across reptitions!!!! Not really for PUCCH, to ask small-cell forum, we'll see for the other messages, maybe parameters change across repetitions and FAPI has to provide for that + if (cc[CC_idP].tdd_Config == NULL) { // FDD case + ul_config_pdu->uci_harq_pdu. + harq_information.harq_information_rel8_fdd. + n_pucch_1_0 = + n1pucchan[ra->rach_resource_type - 1]; + // NOTE: How to fill in the rest of the n_pucch_1_0 information 213 Section 10.1.2.1 in the general case + // = N_ECCE_q + Delta_ARO + n1pucchan[ce_level] + // higher in the MPDCCH configuration, N_ECCE_q is hard-coded to 0, and harq resource offset to 0 => + // Delta_ARO = 0 from Table 10.1.2.1-1 + ul_config_pdu->uci_harq_pdu.harq_information.harq_information_rel8_fdd.harq_size = 1; // 1-bit ACK/NAK + } else { + AssertFatal(1 == 0, + "PUCCH configuration for ACK/NAK not handled yet for TDD BL/CE case\n"); + } + ul_req->number_of_pdus++; + T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), + T_INT(CC_idP), T_INT(ra->rnti), T_INT(frameP), + T_INT(subframeP), T_INT(0 /*harq_pid always 0? */ ), + T_BUFFER(&mac->UE_list.DLSCH_pdu[CC_idP][0][UE_id]. + payload[0], ra->msg4_TBsize)); + + if (opt_enabled == 1) { + trace_pdu(1, + (uint8_t *) mac-> + UE_list.DLSCH_pdu[CC_idP][0][(unsigned char) + UE_id].payload + [0], rrc_sdu_length, UE_id, 3, + UE_RNTI(module_idP, UE_id), mac->frame, + mac->subframe, 0, 0); + LOG_D(OPT, + "[eNB %d][DLSCH] CC_id %d Frame %d trace pdu for rnti %x with size %d\n", + module_idP, CC_idP, frameP, UE_RNTI(module_idP, + UE_id), + rrc_sdu_length); + } + } // Msg4 frame/subframe + } // msg4_mpdcch_repetition_count + } // rach_resource_type > 0 + else +#endif + { // This is normal LTE case + if ((ra->Msg4_frame == frameP) && (ra->Msg4_subframe == subframeP)) { + LOG_D(MAC, + "[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Generating Msg4 with RRC Piggyback (RNTI %x)\n", + module_idP, CC_idP, frameP, subframeP, ra->rnti); + + /// Choose first 4 RBs for Msg4, should really check that these are free! + first_rb = 0; + + vrb_map[first_rb] = 1; + vrb_map[first_rb + 1] = 1; + vrb_map[first_rb + 2] = 1; + vrb_map[first_rb + 3] = 1; + + + // Compute MCS/TBS for 3 PRB (coded on 4 vrb) + msg4_header = 1 + 6 + 1; // CR header, CR CE, SDU header + + if ((rrc_sdu_length + msg4_header) <= 22) { + ra->msg4_mcs = 4; + ra->msg4_TBsize = 22; + } else if ((rrc_sdu_length + msg4_header) <= 28) { + ra->msg4_mcs = 5; + ra->msg4_TBsize = 28; + } else if ((rrc_sdu_length + msg4_header) <= 32) { + ra->msg4_mcs = 6; + ra->msg4_TBsize = 32; + } else if ((rrc_sdu_length + msg4_header) <= 41) { + ra->msg4_mcs = 7; + ra->msg4_TBsize = 41; + } else if ((rrc_sdu_length + msg4_header) <= 49) { + ra->msg4_mcs = 8; + ra->msg4_TBsize = 49; + } else if ((rrc_sdu_length + msg4_header) <= 57) { + ra->msg4_mcs = 9; + ra->msg4_TBsize = 57; + } + + fill_nfapi_dl_dci_1A(dl_config_pdu, 4, // aggregation_level + ra->rnti, // rnti + 1, // rnti_type, CRNTI + ra->harq_pid, // harq_process + 1, // tpc, none + getRIV(N_RB_DL, first_rb, 4), // resource_block_coding + ra->msg4_mcs, // mcs + 1, // ndi + 0, // rv + 0); // vrb_flag + LOG_D(MAC, + "Frame %d, subframe %d: Msg4 DCI pdu_num %d (rnti %x,rnti_type %d,harq_pid %d, resource_block_coding (%p) %d\n", + frameP, subframeP, dl_req->number_pdu, + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti, + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type, + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process, + &dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + resource_block_coding, + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + resource_block_coding); + AssertFatal(dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.resource_block_coding < 8192, + "resource_block_coding %u < 8192\n", + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.resource_block_coding); + if (!CCE_allocation_infeasible + (module_idP, CC_idP, 1, subframeP, + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + aggregation_level, ra->rnti)) { + dl_req->number_dci++; + dl_req->number_pdu++; + + ra->state = WAITMSG4ACK; + + // increment Absolute subframe by 8 for Msg4 retransmission + LOG_D(MAC, + "Frame %d, Subframe %d: Preparing for Msg4 retransmission currently %d.%d\n", + frameP, subframeP, ra->Msg4_frame, + ra->Msg4_subframe); + if (ra->Msg4_subframe > 1) + ra->Msg4_frame++; + ra->Msg4_frame &= 1023; + ra->Msg4_subframe = (ra->Msg4_subframe + 8) % 10; + LOG_D(MAC, + "Frame %d, Subframe %d: Msg4 retransmission in %d.%d\n", + frameP, subframeP, ra->Msg4_frame, + ra->Msg4_subframe); + lcid = 0; + + // put HARQ process round to 0 + if (cc->tdd_Config) + ra->harq_pid = ((frameP * 10) + subframeP) % 10; + else + ra->harq_pid = ((frameP * 10) + subframeP) & 7; + UE_list->UE_sched_ctrl[UE_id].round[CC_idP][ra->harq_pid] = + 0; + + if ((ra->msg4_TBsize - rrc_sdu_length - msg4_header) <= 2) { + msg4_padding = + ra->msg4_TBsize - rrc_sdu_length - msg4_header; + msg4_post_padding = 0; + } else { + msg4_padding = 0; + msg4_post_padding = + ra->msg4_TBsize - rrc_sdu_length - msg4_header - 1; + } + + LOG_D(MAC, + "[eNB %d][RAPROC] CC_idP %d Frame %d subframeP %d Msg4 : TBS %d, sdu_len %d, msg4_header %d, msg4_padding %d, msg4_post_padding %d\n", + module_idP, CC_idP, frameP, subframeP, + ra->msg4_TBsize, rrc_sdu_length, msg4_header, + msg4_padding, msg4_post_padding); + DevAssert(UE_id != UE_INDEX_INVALID); // FIXME not sure how to gracefully return + // CHECK THIS: &cc[CC_idP].CCCH_pdu.payload[0] + offset = generate_dlsch_header((unsigned char *) mac->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char) UE_id].payload[0], 1, //num_sdus + (unsigned short *) &rrc_sdu_length, // + &lcid, // sdu_lcid + 255, // no drx + 31, // no timing advance + ra->cont_res_id, // contention res id + msg4_padding, // no padding + msg4_post_padding); + + memcpy((void *) &mac->UE_list. + DLSCH_pdu[CC_idP][0][(unsigned char) + UE_id].payload[0][(unsigned + char) + offset], + &cc[CC_idP].CCCH_pdu.payload[0], rrc_sdu_length); + + // DLSCH Config + fill_nfapi_dlsch_config(mac, dl_req, ra->msg4_TBsize, mac->pdu_index[CC_idP], ra->rnti, 2, // resource_allocation_type : format 1A/1B/1D + 0, // virtual_resource_block_assignment_flag : localized + getRIV(N_RB_DL, first_rb, 4), // resource_block_coding : RIV, 4 PRB + 2, // modulation: QPSK + 0, // redundancy version + 1, // transport_blocks + 0, // transport_block_to_codeword_swap_flag (0) + (cc->p_eNB == 1) ? 0 : 1, // transmission_scheme + 1, // number of layers + 1, // number of subbands + //0, // codebook index + 1, // ue_category_capacity + 4, // pa: 0 dB + 0, // delta_power_offset_index + 0, // ngap + 1, // NPRB = 3 like in DCI + (cc->p_eNB == 1) ? 1 : 2, // transmission mode + 1, // num_bf_prb_per_subband + 1); // num_bf_vector + LOG_D(MAC, + "Filled DLSCH config, pdu number %d, non-dci pdu_index %d\n", + dl_req->number_pdu, mac->pdu_index[CC_idP]); + + // DL request + mac->TX_req[CC_idP].sfn_sf = + fill_nfapi_tx_req(&mac->TX_req[CC_idP].tx_request_body, + (frameP * 10) + subframeP, + rrc_sdu_length, + mac->pdu_index[CC_idP], + mac->UE_list. + DLSCH_pdu[CC_idP][0][(unsigned char) + UE_id].payload + [0]); + mac->pdu_index[CC_idP]++; + + LOG_D(MAC, "Filling UCI ACK/NAK information, cce_idx %d\n", + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.cce_idx); + // Program PUCCH1a for ACK/NAK + // Program ACK/NAK for Msg4 PDSCH + fill_nfapi_uci_acknak(module_idP, + CC_idP, + ra->rnti, + (frameP * 10) + subframeP, + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.cce_idx); + + + T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), + T_INT(CC_idP), T_INT(ra->rnti), T_INT(frameP), + T_INT(subframeP), T_INT(0 /*harq_pid always 0? */ ), + T_BUFFER(&mac->UE_list.DLSCH_pdu[CC_idP][0][UE_id]. + payload[0], ra->msg4_TBsize)); + + if (opt_enabled == 1) { + trace_pdu(1, + (uint8_t *) mac-> + UE_list.DLSCH_pdu[CC_idP][0][(unsigned char) + UE_id].payload + [0], rrc_sdu_length, UE_id, 3, + UE_RNTI(module_idP, UE_id), mac->frame, + mac->subframe, 0, 0); + LOG_D(OPT, + "[eNB %d][DLSCH] CC_id %d Frame %d trace pdu for rnti %x with size %d\n", + module_idP, CC_idP, frameP, UE_RNTI(module_idP, + UE_id), + rrc_sdu_length); + } + + } // CCE Allocation feasible + } // msg4 frame/subframe + } // else rach_resource_type +} + +void +check_Msg4_retransmission(module_id_t module_idP, int CC_idP, + frame_t frameP, sub_frame_t subframeP, RA_t * ra) +{ + + eNB_MAC_INST *mac = RC.mac[module_idP]; + COMMON_channels_t *cc = mac->common_channels; + int UE_id = -1; + uint8_t *vrb_map; + int first_rb; + int N_RB_DL; + nfapi_dl_config_request_pdu_t *dl_config_pdu; + UE_list_t *UE_list = &mac->UE_list; + nfapi_dl_config_request_body_t *dl_req; + + int round; + /* + #ifdef Rel14 + COMMON_channels_t *cc = mac->common_channels; + + int rmax = 0; + int rep = 0; + int reps = 0; + + first_rb = 0; + struct PRACH_ConfigSIB_v1310 *ext4_prach; + PRACH_ParametersListCE_r13_t *prach_ParametersListCE_r13; + PRACH_ParametersCE_r13_t *p[4]; + + if (cc[CC_idP].radioResourceConfigCommon_BR) { + + ext4_prach = cc[CC_idP].radioResourceConfigCommon_BR->ext4->prach_ConfigCommon_v1310; + prach_ParametersListCE_r13 = &ext4_prach->prach_ParametersListCE_r13; + + switch (prach_ParametersListCE_r13->list.count) { + case 4: + p[3]=prach_ParametersListCE_r13->list.array[3]; + case 3: + p[2]=prach_ParametersListCE_r13->list.array[2]; + case 2: + p[1]=prach_ParametersListCE_r13->list.array[1]; + case 1: + p[0]=prach_ParametersListCE_r13->list.array[0]; + default: + AssertFatal(1==0,"Illegal count for prach_ParametersListCE_r13 %d\n",prach_ParametersListCE_r13->list.count); + } + } + #endif + */ + + // check HARQ status and retransmit if necessary + + + UE_id = find_UE_id(module_idP, ra->rnti); + AssertFatal(UE_id >= 0, "Can't find UE for t-crnti\n"); + + round = UE_list->UE_sched_ctrl[UE_id].round[CC_idP][ra->harq_pid]; + vrb_map = cc[CC_idP].vrb_map; + + dl_req = &mac->DL_req[CC_idP].dl_config_request_body; + dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; + N_RB_DL = to_prb(cc[CC_idP].mib->message.dl_Bandwidth); + + LOG_D(MAC, + "[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Checking if Msg4 for harq_pid %d was acknowledged (round %d)\n", + module_idP, CC_idP, frameP, subframeP, ra->harq_pid, round); + + if (round != 8) { + +#ifdef Rel14 + if (ra->rach_resource_type > 0) { + AssertFatal(1 == 0, + "Msg4 Retransmissions not handled yet for BL/CE UEs\n"); + } else +#endif + { + if ((ra->Msg4_frame == frameP) + && (ra->Msg4_subframe == subframeP)) { + + //ra->wait_ack_Msg4++; + // we have to schedule a retransmission + + first_rb = 0; + vrb_map[first_rb] = 1; + vrb_map[first_rb + 1] = 1; + vrb_map[first_rb + 2] = 1; + vrb_map[first_rb + 3] = 1; + + fill_nfapi_dl_dci_1A(dl_config_pdu, 4, // aggregation_level + ra->rnti, // rnti + 1, // rnti_type, CRNTI + ra->harq_pid, // harq_process + 1, // tpc, none + getRIV(N_RB_DL, first_rb, 4), // resource_block_coding + ra->msg4_mcs, // mcs + 1, // ndi + round & 3, // rv + 0); // vrb_flag + + if (!CCE_allocation_infeasible + (module_idP, CC_idP, 1, subframeP, + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + aggregation_level, ra->rnti)) { + dl_req->number_dci++; + dl_req->number_pdu++; + + LOG_D(MAC, + "msg4 retransmission for rnti %x (round %d) fsf %d/%d\n", + ra->rnti, round, frameP, subframeP); + // DLSCH Config + fill_nfapi_dlsch_config(mac, dl_req, ra->msg4_TBsize, + -1 + /* retransmission, no pdu_index */ + , ra->rnti, 2, // resource_allocation_type : format 1A/1B/1D + 0, // virtual_resource_block_assignment_flag : localized + getRIV(N_RB_DL, first_rb, 4), // resource_block_coding : RIV, 4 PRB + 2, // modulation: QPSK + round & 3, // redundancy version + 1, // transport_blocks + 0, // transport_block_to_codeword_swap_flag (0) + (cc->p_eNB == 1) ? 0 : 1, // transmission_scheme + 1, // number of layers + 1, // number of subbands + //0, // codebook index + 1, // ue_category_capacity + 4, // pa: 0 dB + 0, // delta_power_offset_index + 0, // ngap + 1, // NPRB = 3 like in DCI + (cc->p_eNB == 1) ? 1 : 2, // transmission mode + 1, // num_bf_prb_per_subband + 1); // num_bf_vector + } else + LOG_D(MAC, + "msg4 retransmission for rnti %x (round %d) fsf %d/%d CCE allocation failed!\n", + ra->rnti, round, frameP, subframeP); + + + // Program PUCCH1a for ACK/NAK + + + fill_nfapi_uci_acknak(module_idP, CC_idP, + ra->rnti, + (frameP * 10) + subframeP, + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.cce_idx); + + // prepare frame for retransmission + if (ra->Msg4_subframe > 1) + ra->Msg4_frame++; + ra->Msg4_frame &= 1023; + ra->Msg4_subframe = (ra->Msg4_subframe + 8) % 10; + + LOG_W(MAC, + "[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d: Msg4 not acknowledged, adding ue specific dci (rnti %x) for RA (Msg4 Retransmission round %d in %d.%d)\n", + module_idP, CC_idP, frameP, subframeP, ra->rnti, + round, ra->Msg4_frame, ra->Msg4_subframe); + + } // Msg4 frame/subframe + } // regular LTE case + } else { + LOG_D(MAC, + "[eNB %d][RAPROC] CC_id %d Frame %d, subframeP %d : Msg4 acknowledged\n", + module_idP, CC_idP, frameP, subframeP); + ra->state = IDLE; + UE_id = find_UE_id(module_idP, ra->rnti); + DevAssert(UE_id != -1); + mac->UE_list.UE_template[UE_PCCID(module_idP, UE_id)][UE_id]. + configured = TRUE; + } +} + +void +schedule_RA(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP) +{ + + int CC_id; + eNB_MAC_INST *mac = RC.mac[module_idP]; + COMMON_channels_t *cc = mac->common_channels; + RA_t *ra; + uint8_t i; + + start_meas(&mac->schedule_ra); + + + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + // skip UL component carriers if TDD + if (is_UL_sf(&cc[CC_id], subframeP) == 1) + continue; + + + for (i = 0; i < NB_RA_PROC_MAX; i++) { + + ra = (RA_t *) & cc[CC_id].ra[i]; + + if (ra->state == MSG2) + generate_Msg2(module_idP, CC_id, frameP, subframeP, ra); + else if (ra->state == MSG4) + generate_Msg4(module_idP, CC_id, frameP, subframeP, ra); + else if (ra->state == WAITMSG4ACK) + check_Msg4_retransmission(module_idP, CC_id, frameP, + subframeP, ra); + + } // for i=0 .. N_RA_PROC-1 + } // CC_id + + stop_meas(&mac->schedule_ra); } // handles the event of MSG1 reception -void initiate_ra_proc(module_id_t module_idP, - int CC_id, - frame_t frameP, - sub_frame_t subframeP, - uint16_t preamble_index, - int16_t timing_offset, - uint16_t ra_rnti +void +initiate_ra_proc(module_id_t module_idP, + int CC_id, + frame_t frameP, + sub_frame_t subframeP, + uint16_t preamble_index, + int16_t timing_offset, uint16_t ra_rnti #ifdef Rel14 - , - uint8_t rach_resource_type + , uint8_t rach_resource_type #endif - ) + ) { - uint8_t i; + uint8_t i; - COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_id]; - RA_TEMPLATE *RA_template = &cc->RA_template[0]; + COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_id]; + RA_t *ra = &cc->ra[0]; - struct PRACH_ConfigSIB_v1310 *ext4_prach = NULL; - PRACH_ParametersListCE_r13_t *prach_ParametersListCE_r13 = NULL; + struct PRACH_ConfigSIB_v1310 *ext4_prach = NULL; + PRACH_ParametersListCE_r13_t *prach_ParametersListCE_r13 = NULL; - if (cc->radioResourceConfigCommon_BR && cc->radioResourceConfigCommon_BR->ext4) { - ext4_prach=cc->radioResourceConfigCommon_BR->ext4->prach_ConfigCommon_v1310; - prach_ParametersListCE_r13= &ext4_prach->prach_ParametersListCE_r13; - } - LOG_I(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, Subframe %d Initiating RA procedure for preamble index %d\n",module_idP,CC_id,frameP,subframeP,preamble_index); -#ifdef Rel14 - LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, Subframe %d PRACH resource type %d\n",module_idP,CC_id,frameP,subframeP,rach_resource_type); -#endif - - if (prach_ParametersListCE_r13 && - prach_ParametersListCE_r13->list.countlist.count); - return; - } - - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_INITIATE_RA_PROC,1); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_INITIATE_RA_PROC,0); - - for (i=0; i5)?1:0); - RA_template[i].Msg2_subframe = (subframeP+4)%10; - /* TODO: find better procedure to allocate RNTI */ - do { - RA_template[i].rnti = taus(); - loop++; - } while (loop != 100 && - /* TODO: this is not correct, the rnti may be in use without - * being in the MAC yet. To be refined. - */ - !(find_UE_id(module_idP, RA_template[i].rnti) == -1 && - /* 1024 and 60000 arbirarily chosen, not coming from standard */ - RA_template[i].rnti >= 1024 && RA_template[i].rnti < 60000)); - if (loop == 100) { printf("%s:%d:%s: FATAL ERROR! contact the authors\n", __FILE__, __LINE__, __FUNCTION__); abort(); } - RA_template[i].RA_rnti = ra_rnti; - RA_template[i].preamble_index = preamble_index; - LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d Activating RAR generation in Frame %d, subframe %d for process %d, rnti %x, RA_active %d\n", - module_idP,CC_id,frameP, - RA_template[i].Msg2_frame, - RA_template[i].Msg2_subframe, - i,RA_template[i].rnti, - RA_template[i].RA_active); - - return; + if (cc->radioResourceConfigCommon_BR + && cc->radioResourceConfigCommon_BR->ext4) { + ext4_prach = + cc->radioResourceConfigCommon_BR->ext4-> + prach_ConfigCommon_v1310; + prach_ParametersListCE_r13 = + &ext4_prach->prach_ParametersListCE_r13; } - } + LOG_I(MAC, + "[eNB %d][RAPROC] CC_id %d Frame %d, Subframe %d Initiating RA procedure for preamble index %d\n", + module_idP, CC_id, frameP, subframeP, preamble_index); +#ifdef Rel14 + LOG_D(MAC, + "[eNB %d][RAPROC] CC_id %d Frame %d, Subframe %d PRACH resource type %d\n", + module_idP, CC_id, frameP, subframeP, rach_resource_type); +#endif - LOG_E(MAC,"[eNB %d][RAPROC] FAILURE: CC_id %d Frame %d Initiating RA procedure for preamble index %d\n",module_idP,CC_id,frameP,preamble_index); + if (prach_ParametersListCE_r13 && + prach_ParametersListCE_r13->list.count < rach_resource_type) { + LOG_E(MAC, + "[eNB %d][RAPROC] CC_id %d Received impossible PRACH resource type %d, only %d CE levels configured\n", + module_idP, CC_id, rach_resource_type, + (int) prach_ParametersListCE_r13->list.count); + return; + } + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_INITIATE_RA_PROC, 1); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_INITIATE_RA_PROC, 0); + + for (i = 0; i < NB_RA_PROC_MAX; i++) { + if (ra[i].state == IDLE) { + int loop = 0; + LOG_D(MAC, "Frame %d, Subframe %d: Activating RA process %d\n", + frameP, subframeP, i); + ra[i].state = MSG2; + ra[i].timing_offset = timing_offset; + ra[i].preamble_subframe = subframeP; +#ifdef Rel14 + ra[i].rach_resource_type = rach_resource_type; + ra[i].msg2_mpdcch_repetition_cnt = 0; + ra[i].msg4_mpdcch_repetition_cnt = 0; +#endif + ra[i].Msg2_frame = frameP + ((subframeP > 5) ? 1 : 0); + ra[i].Msg2_subframe = (subframeP + 4) % 10; + /* TODO: find better procedure to allocate RNTI */ + do { + ra[i].rnti = taus(); + loop++; + } + while (loop != 100 && + /* TODO: this is not correct, the rnti may be in use without + * being in the MAC yet. To be refined. + */ + !(find_UE_id(module_idP, ra[i].rnti) == -1 && + /* 1024 and 60000 arbirarily chosen, not coming from standard */ + ra[i].rnti >= 1024 && ra[i].rnti < 60000)); + if (loop == 100) { + printf("%s:%d:%s: FATAL ERROR! contact the authors\n", + __FILE__, __LINE__, __FUNCTION__); + abort(); + } + ra[i].RA_rnti = ra_rnti; + ra[i].preamble_index = preamble_index; + LOG_D(MAC, + "[eNB %d][RAPROC] CC_id %d Frame %d Activating RAR generation in Frame %d, subframe %d for process %d, rnti %x, state %d\n", + module_idP, CC_id, frameP, ra[i].Msg2_frame, + ra[i].Msg2_subframe, i, ra[i].rnti, ra[i].state); + + return; + } + } + + LOG_E(MAC, + "[eNB %d][RAPROC] FAILURE: CC_id %d Frame %d Initiating RA procedure for preamble index %d\n", + module_idP, CC_id, frameP, preamble_index); } -void cancel_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP, rnti_t rnti) +void +cancel_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP, + rnti_t rnti) { - unsigned char i; - RA_TEMPLATE *RA_template = (RA_TEMPLATE *)&RC.mac[module_idP]->common_channels[CC_id].RA_template[0]; + unsigned char i; + RA_t *ra = (RA_t *) & RC.mac[module_idP]->common_channels[CC_id].ra[0]; - MSC_LOG_EVENT(MSC_PHY_ENB, "RA Cancelling procedure ue %"PRIx16" ", rnti); - LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d Cancelling RA procedure for UE rnti %x\n",module_idP,CC_id,frameP,rnti); + MSC_LOG_EVENT(MSC_PHY_ENB, "RA Cancelling procedure ue %" PRIx16 " ", + rnti); + LOG_D(MAC, + "[eNB %d][RAPROC] CC_id %d Frame %d Cancelling RA procedure for UE rnti %x\n", + module_idP, CC_id, frameP, rnti); - for (i=0; icommon_channels[CC_id]; - vrb_map = (void*)&cc->vrb_map; - N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth); - dl_req = &eNB->DL_req[CC_id].dl_config_request_body; + cc = &eNB->common_channels[CC_id]; + vrb_map = (void *) &cc->vrb_map; + N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth); + dl_req = &eNB->DL_req[CC_id].dl_config_request_body; - int foffset = cc->physCellId&1; - int sfoffset = (cc->tdd_Config==NULL) ? 0 : 1; + int foffset = cc->physCellId & 1; + int sfoffset = (cc->tdd_Config == NULL) ? 0 : 1; - // Time-domain scheduling - if (cc->mib->message.schedulingInfoSIB1_BR_r13==0) continue; - else - switch ((cc->mib->message.schedulingInfoSIB1_BR_r13-1)%3) { - case 0: // repetition 4 - k = (frameP>>1)&3; - if ((subframeP!=(4+sfoffset)) || ((frameP&1)!=foffset)) continue; - break; - case 1: // repetition 8 - k = frameP&3; - AssertFatal(N_RB_DL>15,"SIB1-BR repetition 8 not allowed for N_RB_DL= %d\n",N_RB_DL); - if ((foffset==0) && (subframeP!=(4+sfoffset))) continue; - else if ((foffset==1) && (subframeP!=((9+sfoffset)%10))) continue; - break; - case 2: // repetition 16 - k = ((10*frameP) + subframeP)&3; - AssertFatal(N_RB_DL>15,"SIB1-BR repetition 16 not allowed for N_RB_DL= %d\n",N_RB_DL); - if ((sfoffset == 1) && ((subframeP!=0)||(subframeP!=5))) continue; - else if ((sfoffset == 0) && (foffset==0) && (subframeP!=4) && (subframeP!=9)) continue; - else if ((sfoffset == 0) && (foffset==1) && (subframeP!=0) && (subframeP!=9)) continue; - break; - } - // if we get here we have to schedule SIB1_BR in this frame/subframe - - // keep counter of SIB1_BR repetitions in 8 frame period to choose narrowband on which to transmit - if ((frameP&7) == 0) cc->SIB1_BR_cnt=0; - else cc->SIB1_BR_cnt++; - - // Frequency-domain scheduling - switch (N_RB_DL) { - case 6: - case 15: - default: - m=1; - n_NB=0; - N_S_NB=0; - Sj=NULL; - break; - case 25: - m=2; - N_S_NB = 2; - Sj = Sj25; - break; - case 50: - m=2; - N_S_NB = 6; - Sj = Sj50; - break; - case 75: - m=4; - N_S_NB = 10; - Sj = Sj75; - break; - case 100: - m=4; - N_S_NB = 14; - Sj = Sj100; - break; - } - // Note: definition of k above and rvidx from 36.321 section 5.3.1 - rvidx = (((3*k)>>1) + (k&1))&3; - - i = cc->SIB1_BR_cnt & (m-1); - - n_NB = Sj[((cc->physCellId % N_S_NB) + (i*N_S_NB/m))%N_S_NB]; - - - bcch_sdu_length = mac_rrc_data_req(module_idP, - CC_id, - frameP, - BCCH_SIB1_BR,1, - &cc->BCCH_BR_pdu[0].payload[0], - 1, - module_idP, - 0); // not used in this case - - AssertFatal(cc->mib->message.schedulingInfoSIB1_BR_r13<19,"schedulingInfoSIB1_BR_r13 %d > 18\n", - (int)cc->mib->message.schedulingInfoSIB1_BR_r13); - - AssertFatal(bcch_sdu_length>0,"RRC returned 0 bytes for SIB1-BR\n"); - - TBS = SIB1_BR_TBS_table[(cc->mib->message.schedulingInfoSIB1_BR_r13-1)/3]>>3; - - AssertFatal(bcch_sdu_length <= TBS, "length returned by RRC %d is not compatible with the TBS %d from MIB\n",bcch_sdu_length,TBS); - - if ((frameP&1023) < 200) LOG_D(MAC,"[eNB %d] Frame %d Subframe %d: SIB1_BR->DLSCH CC_id %d, Received %d bytes, scheduling on NB %d (i %d,m %d,N_S_NB %d) rvidx %d\n",module_idP,frameP,subframeP,CC_id,bcch_sdu_length,n_NB,i,m,N_S_NB,rvidx); - - // allocate all 6 PRBs in narrowband for SIB1_BR - - first_rb = narrowband_to_first_rb(cc,n_NB); - - vrb_map[first_rb] = 1; - vrb_map[first_rb+1] = 1; - vrb_map[first_rb+2] = 1; - vrb_map[first_rb+3] = 1; - vrb_map[first_rb+4] = 1; - vrb_map[first_rb+5] = 1; - - dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; - memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; - dl_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_dl_config_dlsch_pdu)); - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = TBS; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_id]; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL,first_rb,6); - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = rvidx; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1;// first block - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB==1 ) ? 0 : 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1; - // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = ; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB==1 ) ? 1 : 2; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1; - // Rel10 fields - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = 3; - // Rel13 fields - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 0; // SIB1-BR - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = 0xFFFF; // absolute SFx - - // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ; - dl_req->number_pdu++; - - // Program TX Request - TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus]; - TX_req->pdu_length = bcch_sdu_length; - TX_req->pdu_index = eNB->pdu_index[CC_id]++; - TX_req->num_segments = 1; - TX_req->segments[0].segment_length = bcch_sdu_length; - TX_req->segments[0].segment_data = cc->BCCH_BR_pdu[0].payload; - eNB->TX_req[CC_id].tx_request_body.number_of_pdus++; - - - - if (opt_enabled == 1) { - trace_pdu(1, - &cc->BCCH_BR_pdu[0].payload[0], - bcch_sdu_length, - 0xffff, - 4, - 0xffff, - eNB->frame, - eNB->subframe, - 0, - 0); - LOG_D(OPT,"[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n", - module_idP, frameP, CC_id, 0xffff, bcch_sdu_length); - } - if (cc->tdd_Config!=NULL) { //TDD - LOG_D(MAC,"[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (TDD) for CC_id %d SIB1-BR %d bytes\n", - frameP, - CC_id, - bcch_sdu_length); - } else { - LOG_D(MAC,"[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (FDD) for CC_id %d SIB1-BR %d bytes\n", - frameP, - CC_id, - bcch_sdu_length); - } - - } - - return; -} - -int si_WindowLength_BR_r13tab[SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_spare] = - {20,40,60,80,120,160,200}; -int si_TBS_r13tab[SchedulingInfo_BR_r13__si_TBS_r13_b936+1] = {152,208,256,328,408,504,600,712,808,936}; - -//------------------------------------------------------------------------------ -void -schedule_SI_BR( - module_id_t module_idP, - frame_t frameP, - sub_frame_t subframeP) - -//------------------------------------------------------------------------------ -{ - - int8_t bcch_sdu_length; - int CC_id; - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc; - uint8_t *vrb_map; - int first_rb = -1; - int N_RB_DL; - nfapi_dl_config_request_pdu_t *dl_config_pdu; - nfapi_tx_request_pdu_t *TX_req; - nfapi_dl_config_request_body_t *dl_req; - int i; - int rvidx; - int absSF = (frameP*10)+subframeP; - - - for (CC_id=0; CC_idcommon_channels[CC_id]; - vrb_map = (void*)&cc->vrb_map; - N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth); - dl_req = &eNB->DL_req[CC_id].dl_config_request_body; - - // Time-domain scheduling - if (cc->mib->message.schedulingInfoSIB1_BR_r13==0) continue; - else { - - - AssertFatal(cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13!=NULL, - "sib_v13ext->bandwidthReducedAccessRelatedInfo_r13 is null\n"); - - SchedulingInfoList_BR_r13_t *schedulingInfoList_BR_r13 = cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->schedulingInfoList_BR_r13; - AssertFatal(schedulingInfoList_BR_r13!=NULL, - "sib_v13ext->schedulingInfoList_BR_r13 is null\n"); - - SchedulingInfoList_t *schedulingInfoList = cc->schedulingInfoList; - AssertFatal(schedulingInfoList_BR_r13->list.count==schedulingInfoList->list.count, - "schedulingInfolist_BR.r13->list.count %d != schedulingInfoList.list.count %d\n", - schedulingInfoList_BR_r13->list.count,schedulingInfoList->list.count); - - AssertFatal(cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13<=SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_ms200, - "si_WindowLength_BR_r13 %d > %d\n", - (int)cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13, - SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_ms200); - - // check that SI frequency-hopping is disabled - AssertFatal(cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_HoppingConfigCommon_r13==SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_HoppingConfigCommon_r13_off, - "Deactivate SI_HoppingConfigCommon_r13 in configuration file, not supported for now\n"); - long si_WindowLength_BR_r13 = si_WindowLength_BR_r13tab[cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13]; - - long si_RepetitionPattern_r13 = cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_RepetitionPattern_r13; - AssertFatal(si_RepetitionPattern_r13<=SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_RepetitionPattern_r13_every8thRF, - "si_RepetitionPattern_r13 %d > %d\n", - (int)si_RepetitionPattern_r13, - SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_RepetitionPattern_r13_every8thRF); - // cycle through SIB list - - for (i=0;ilist.count;i++) { - long si_Periodicity = schedulingInfoList->list.array[i]->si_Periodicity; - long si_Narrowband_r13 = schedulingInfoList_BR_r13->list.array[i]->si_Narrowband_r13; - long si_TBS_r13 = si_TBS_r13tab[schedulingInfoList_BR_r13->list.array[i]->si_TBS_r13]; - - // check if the SI is to be scheduled now - int period_in_sf = 80<>1) + (k&1))&3; - - if ((sf_mod_period < si_WindowLength_BR_r13) && - ((frameP&(((1<BCCH_BR_pdu[i+1].payload[0], - 1, - module_idP, - 0); // not used in this case - - AssertFatal(bcch_sdu_length>0,"RRC returned 0 bytes for SI-BR %d\n",i); - - if (bcch_sdu_length > 0) { - AssertFatal(bcch_sdu_length <= (si_TBS_r13>>3), - "RRC provided bcch with length %d > %d (si_TBS_r13 %d)\n", - bcch_sdu_length,(int)(si_TBS_r13>>3),(int)schedulingInfoList_BR_r13->list.array[i]->si_TBS_r13); - - // allocate all 6 PRBs in narrowband for SIB1_BR - - // check that SIB1 didn't take this narrowband - if (vrb_map[first_rb] > 0) continue; - - first_rb = narrowband_to_first_rb(cc,si_Narrowband_r13-1); - vrb_map[first_rb] = 1; - vrb_map[first_rb+1] = 1; - vrb_map[first_rb+2] = 1; - vrb_map[first_rb+4] = 1; - vrb_map[first_rb+5] = 1; - - if ((frameP&1023) < 200) LOG_D(MAC,"[eNB %d] Frame %d Subframe %d: SI_BR->DLSCH CC_id %d, Narrowband %d rvidx %d (sf_mod_period %d : si_WindowLength_BR_r13 %d : si_RepetitionPattern_r13 %d) bcch_sdu_length %d\n", - module_idP,frameP,subframeP,CC_id,(int)si_Narrowband_r13-1,rvidx, - sf_mod_period,(int)si_WindowLength_BR_r13,(int)si_RepetitionPattern_r13, - bcch_sdu_length); - - - - - dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; - memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; - dl_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_dl_config_dlsch_pdu)); - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = si_TBS_r13>>3; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_id]; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL,first_rb,6); - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = rvidx; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1;// first block - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB==1 ) ? 0 : 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1; - // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = ; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB==1 ) ? 1 : 2; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1; - // Rel10 fields (for PDSCH starting symbol) - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = cc[CC_id].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13; - // Rel13 fields - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 1; // SI-BR - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = absSF - sf_mod_period; - - // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ; - dl_req->number_pdu++; - - // Program TX Request - TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus]; - TX_req->pdu_length = bcch_sdu_length; - TX_req->pdu_index = eNB->pdu_index[CC_id]++; - TX_req->num_segments = 1; - TX_req->segments[0].segment_length = bcch_sdu_length; - TX_req->segments[0].segment_data = cc->BCCH_BR_pdu[i+1].payload; - eNB->TX_req[CC_id].tx_request_body.number_of_pdus++; - - if (opt_enabled == 1) { - trace_pdu(1, - &cc->BCCH_BR_pdu[i+1].payload[0], - bcch_sdu_length, - 0xffff, - 4, - 0xffff, - eNB->frame, - eNB->subframe, - 0, - 0); - LOG_D(OPT,"[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n", - module_idP, frameP, CC_id, 0xffff, bcch_sdu_length); + // Time-domain scheduling + if (cc->mib->message.schedulingInfoSIB1_BR_r13 == 0) + continue; + else + switch ((cc->mib->message.schedulingInfoSIB1_BR_r13 - 1) % 3) { + case 0: // repetition 4 + k = (frameP >> 1) & 3; + if ((subframeP != (4 + sfoffset)) + || ((frameP & 1) != foffset)) + continue; + break; + case 1: // repetition 8 + k = frameP & 3; + AssertFatal(N_RB_DL > 15, + "SIB1-BR repetition 8 not allowed for N_RB_DL= %d\n", + N_RB_DL); + if ((foffset == 0) && (subframeP != (4 + sfoffset))) + continue; + else if ((foffset == 1) + && (subframeP != ((9 + sfoffset) % 10))) + continue; + break; + case 2: // repetition 16 + k = ((10 * frameP) + subframeP) & 3; + AssertFatal(N_RB_DL > 15, + "SIB1-BR repetition 16 not allowed for N_RB_DL= %d\n", + N_RB_DL); + if ((sfoffset == 1) + && ((subframeP != 0) || (subframeP != 5))) + continue; + else if ((sfoffset == 0) && (foffset == 0) + && (subframeP != 4) && (subframeP != 9)) + continue; + else if ((sfoffset == 0) && (foffset == 1) + && (subframeP != 0) && (subframeP != 9)) + continue; + break; } - if (cc->tdd_Config!=NULL) { //TDD - LOG_D(MAC,"[eNB] Frame %d : Scheduling BCCH-BR %d->DLSCH (TDD) for CC_id %d SI-BR %d bytes\n", - frameP,i, - CC_id, - bcch_sdu_length); - } else { - LOG_D(MAC,"[eNB] Frame %d : Scheduling BCCH-BR %d->DLSCH (FDD) for CC_id %d SI-BR %d bytes\n", - frameP,i, - CC_id, - bcch_sdu_length); - } - } - } // scheduling in current frame/subframe - } //for SI List - } // eMTC is activated - } // CC_id - return; -} -#endif + // if we get here we have to schedule SIB1_BR in this frame/subframe -void schedule_mib(module_id_t module_idP, - frame_t frameP, - sub_frame_t subframeP) { + // keep counter of SIB1_BR repetitions in 8 frame period to choose narrowband on which to transmit + if ((frameP & 7) == 0) + cc->SIB1_BR_cnt = 0; + else + cc->SIB1_BR_cnt++; - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc; - nfapi_dl_config_request_pdu_t *dl_config_pdu; - nfapi_tx_request_pdu_t *TX_req; - int mib_sdu_length; - int CC_id; - nfapi_dl_config_request_body_t *dl_req; - - AssertFatal(subframeP==0,"Subframe must be 0\n"); - AssertFatal((frameP&3)==0,"Frame must be a multiple of 4\n"); - - for (CC_id=0; CC_idDL_req[CC_id].dl_config_request_body; - cc = &eNB->common_channels[CC_id]; - - mib_sdu_length = mac_rrc_data_req(module_idP, - CC_id, - frameP, - MIBCH,1, - &cc->MIB_pdu.payload[0], - 1, - module_idP, - 0); // not used in this case - - LOG_D(MAC,"Frame %d, subframe %d: BCH PDU length %d\n", - frameP,subframeP,mib_sdu_length); - - if (mib_sdu_length > 0) { - - LOG_D(MAC,"Frame %d, subframe %d: Adding BCH PDU in position %d (length %d)\n", - frameP,subframeP,dl_req->number_pdu,mib_sdu_length); - - if ((frameP&1023) < 40) LOG_D(MAC,"[eNB %d] Frame %d : MIB->BCH CC_id %d, Received %d bytes (cc->mib->message.schedulingInfoSIB1_BR_r13 %d)\n",module_idP,frameP,CC_id,mib_sdu_length,(int)cc->mib->message.schedulingInfoSIB1_BR_r13); - - dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; - memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_BCH_PDU_TYPE, - dl_config_pdu->pdu_size = 2+sizeof(nfapi_dl_config_bch_pdu); - dl_config_pdu->bch_pdu.bch_pdu_rel8.length = mib_sdu_length; - dl_config_pdu->bch_pdu.bch_pdu_rel8.pdu_index = eNB->pdu_index[CC_id]; - dl_config_pdu->bch_pdu.bch_pdu_rel8.transmission_power = 6000; - dl_req->number_pdu++; - - LOG_D(MAC,"eNB->DL_req[0].number_pdu %d (%p)\n", - dl_req->number_pdu,&dl_req->number_pdu); - // DL request - - TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus]; - TX_req->pdu_length = 3; - TX_req->pdu_index = eNB->pdu_index[CC_id]++; - TX_req->num_segments = 1; - TX_req->segments[0].segment_length = 0; - TX_req->segments[0].segment_data = cc[CC_id].MIB_pdu.payload; - eNB->TX_req[CC_id].tx_request_body.number_of_pdus++; - } - } -} - - -//------------------------------------------------------------------------------ -void -schedule_SI( - module_id_t module_idP, - frame_t frameP, - sub_frame_t subframeP) - -//------------------------------------------------------------------------------ -{ - - int8_t bcch_sdu_length; - int mcs = -1; - int CC_id; - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc; - uint8_t *vrb_map; - int first_rb = -1; - int N_RB_DL; - nfapi_dl_config_request_pdu_t *dl_config_pdu; - nfapi_tx_request_pdu_t *TX_req; - nfapi_dl_config_request_body_t *dl_req; - - start_meas(&eNB->schedule_si); - - // Only schedule LTE System Information in subframe 5 - if (subframeP == 5) { - - for (CC_id=0; CC_idcommon_channels[CC_id]; - vrb_map = (void*)&cc->vrb_map; - N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth); - dl_req = &eNB->DL_req[CC_id].dl_config_request_body; - - - bcch_sdu_length = mac_rrc_data_req(module_idP, - CC_id, - frameP, - BCCH,1, - &cc->BCCH_pdu.payload[0], - 1, - module_idP, - 0); // not used in this case - - if (bcch_sdu_length > 0) { - LOG_D(MAC,"[eNB %d] Frame %d : BCCH->DLSCH CC_id %d, Received %d bytes \n",module_idP,frameP,CC_id,bcch_sdu_length); - - // Allocate 4 PRBs in a random location - /* - while (1) { - first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL-4)); - if ((vrb_map[first_rb] != 1) && - (vrb_map[first_rb+1] != 1) && - (vrb_map[first_rb+2] != 1) && - (vrb_map[first_rb+3] != 1)) - break; - } - */ + // Frequency-domain scheduling switch (N_RB_DL) { case 6: - first_rb = 0; - break; case 15: - first_rb = 6; - break; + default: + m = 1; + n_NB = 0; + N_S_NB = 0; + Sj = NULL; + break; case 25: - first_rb = 11; - break; + m = 2; + N_S_NB = 2; + Sj = Sj25; + break; case 50: - first_rb = 23; - break; + m = 2; + N_S_NB = 6; + Sj = Sj50; + break; + case 75: + m = 4; + N_S_NB = 10; + Sj = Sj75; + break; case 100: - first_rb = 48; - break; + m = 4; + N_S_NB = 14; + Sj = Sj100; + break; } - + // Note: definition of k above and rvidx from 36.321 section 5.3.1 + rvidx = (((3 * k) >> 1) + (k & 1)) & 3; + + i = cc->SIB1_BR_cnt & (m - 1); + + n_NB = Sj[((cc->physCellId % N_S_NB) + (i * N_S_NB / m)) % N_S_NB]; + + + bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SIB1_BR, 1, &cc->BCCH_BR_pdu[0].payload[0], 1, module_idP, 0); // not used in this case + + AssertFatal(cc->mib->message.schedulingInfoSIB1_BR_r13 < 19, + "schedulingInfoSIB1_BR_r13 %d > 18\n", + (int) cc->mib->message.schedulingInfoSIB1_BR_r13); + + AssertFatal(bcch_sdu_length > 0, + "RRC returned 0 bytes for SIB1-BR\n"); + + TBS = + SIB1_BR_TBS_table[(cc->mib->message.schedulingInfoSIB1_BR_r13 - + 1) / 3] >> 3; + + AssertFatal(bcch_sdu_length <= TBS, + "length returned by RRC %d is not compatible with the TBS %d from MIB\n", + bcch_sdu_length, TBS); + + if ((frameP & 1023) < 200) + LOG_D(MAC, + "[eNB %d] Frame %d Subframe %d: SIB1_BR->DLSCH CC_id %d, Received %d bytes, scheduling on NB %d (i %d,m %d,N_S_NB %d) rvidx %d\n", + module_idP, frameP, subframeP, CC_id, bcch_sdu_length, + n_NB, i, m, N_S_NB, rvidx); + + // allocate all 6 PRBs in narrowband for SIB1_BR + + first_rb = narrowband_to_first_rb(cc, n_NB); + vrb_map[first_rb] = 1; - vrb_map[first_rb+1] = 1; - vrb_map[first_rb+2] = 1; - vrb_map[first_rb+3] = 1; - - // Get MCS for length of SI, 3 PRBs - if (bcch_sdu_length <= 7) { - mcs=0; - } else if (bcch_sdu_length <= 11) { - mcs=1; - } else if (bcch_sdu_length <= 18) { - mcs=2; - } else if (bcch_sdu_length <= 22) { - mcs=3; - } else if (bcch_sdu_length <= 26) { - mcs=4; - } else if (bcch_sdu_length <= 28) { - mcs=5; - } else if (bcch_sdu_length <= 32) { - mcs=6; - } else if (bcch_sdu_length <= 41) { - mcs=7; - } else if (bcch_sdu_length <= 49) { - mcs=8; - } - - - dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; - memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; - dl_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_dl_config_dci_dl_pdu)); - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format = NFAPI_DL_DCI_FORMAT_1A; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level = 4; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = 0xFFFF; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = 2; // S-RNTI : see Table 4-10 from SCF082 - nFAPI specifications - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000; // equal to RS power - - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process = 0; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc = 1; // no TPC - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1 = 0; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1 = mcs; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1 = 0; - - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(N_RB_DL,first_rb,4); + vrb_map[first_rb + 1] = 1; + vrb_map[first_rb + 2] = 1; + vrb_map[first_rb + 3] = 1; + vrb_map[first_rb + 4] = 1; + vrb_map[first_rb + 5] = 1; + dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; + memset((void *) dl_config_pdu, 0, + sizeof(nfapi_dl_config_request_pdu_t)); + dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; + dl_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu)); + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = TBS; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = + eNB->pdu_index[CC_id]; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = + getRIV(N_RB_DL, first_rb, 6); + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = rvidx; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1; // first block + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = + (cc->p_eNB == 1) ? 0 : 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1; + // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = ; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = + 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = + (cc->p_eNB == 1) ? 1 : 2; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1; // Rel10 fields - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = 3; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = 3; // Rel13 fields - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 0; // regular UE - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 2; // not BR - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = 0xFFFF; // absolute SF + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 0; // SIB1-BR + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = 0xFFFF; // absolute SFx + + // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ; + dl_req->number_pdu++; + + // Program TX Request + TX_req = + &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB-> + TX_req + [CC_id].tx_request_body.number_of_pdus]; + TX_req->pdu_length = bcch_sdu_length; + TX_req->pdu_index = eNB->pdu_index[CC_id]++; + TX_req->num_segments = 1; + TX_req->segments[0].segment_length = bcch_sdu_length; + TX_req->segments[0].segment_data = cc->BCCH_BR_pdu[0].payload; + eNB->TX_req[CC_id].tx_request_body.number_of_pdus++; + + - if (!CCE_allocation_infeasible(module_idP,CC_id,0,subframeP, - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level,SI_RNTI)) { - LOG_D(MAC,"Frame %d: Subframe %d : Adding common DCI for S_RNTI\n", - frameP,subframeP); - dl_req->number_dci++; - dl_req->number_pdu++; - dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; - memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; - dl_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_dl_config_dlsch_pdu)); - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_id]; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL,first_rb,4); - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1;// first block - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB==1 ) ? 0 : 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1; - // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = ; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB==1 ) ? 1 : 2; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1; - // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ; - dl_req->number_pdu++; - - // Program TX Request - TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus]; - TX_req->pdu_length = bcch_sdu_length; - TX_req->pdu_index = eNB->pdu_index[CC_id]++; - TX_req->num_segments = 1; - TX_req->segments[0].segment_length = bcch_sdu_length; - TX_req->segments[0].segment_data = cc->BCCH_pdu.payload; - eNB->TX_req[CC_id].tx_request_body.number_of_pdus++; - - } - else { - LOG_E(MAC,"[eNB %d] CCid %d Frame %d, subframe %d : Cannot add DCI 1A for SI\n",module_idP, CC_id,frameP,subframeP); - } - if (opt_enabled == 1) { - trace_pdu(1, - &cc->BCCH_pdu.payload[0], - bcch_sdu_length, - 0xffff, - 4, - 0xffff, - eNB->frame, - eNB->subframe, - 0, - 0); - LOG_D(OPT,"[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n", - module_idP, frameP, CC_id, 0xffff, bcch_sdu_length); + trace_pdu(1, + &cc->BCCH_BR_pdu[0].payload[0], + bcch_sdu_length, + 0xffff, 4, 0xffff, eNB->frame, eNB->subframe, 0, 0); + LOG_D(OPT, + "[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n", + module_idP, frameP, CC_id, 0xffff, bcch_sdu_length); } - if (cc->tdd_Config!=NULL) { //TDD - LOG_D(MAC,"[eNB] Frame %d : Scheduling BCCH->DLSCH (TDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n", - frameP, - CC_id, - bcch_sdu_length, - mcs); + if (cc->tdd_Config != NULL) { //TDD + LOG_D(MAC, + "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (TDD) for CC_id %d SIB1-BR %d bytes\n", + frameP, CC_id, bcch_sdu_length); } else { - LOG_D(MAC,"[eNB] Frame %d : Scheduling BCCH->DLSCH (FDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n", - frameP, - CC_id, - bcch_sdu_length, - mcs); + LOG_D(MAC, + "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (FDD) for CC_id %d SIB1-BR %d bytes\n", + frameP, CC_id, bcch_sdu_length); } - - - eNB->eNB_stats[CC_id].total_num_bcch_pdu+=1; - eNB->eNB_stats[CC_id].bcch_buffer=bcch_sdu_length; - eNB->eNB_stats[CC_id].total_bcch_buffer+=bcch_sdu_length; - eNB->eNB_stats[CC_id].bcch_mcs=mcs; - } else { - - //LOG_D(MAC,"[eNB %d] Frame %d : BCCH not active \n",Mod_id,frame); - } - } - } -#ifdef Rel14 - schedule_SIB1_BR(module_idP,frameP,subframeP); - schedule_SI_BR(module_idP,frameP,subframeP); + } + + return; +} + +int si_WindowLength_BR_r13tab + [SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_spare] += { 20, 40, 60, 80, 120, 160, 200 }; +int si_TBS_r13tab[SchedulingInfo_BR_r13__si_TBS_r13_b936 + 1] = + { 152, 208, 256, 328, 408, 504, 600, 712, 808, 936 }; + +//------------------------------------------------------------------------------ +void +schedule_SI_BR(module_id_t module_idP, frame_t frameP, + sub_frame_t subframeP) +//------------------------------------------------------------------------------ +{ + + int8_t bcch_sdu_length; + int CC_id; + eNB_MAC_INST *eNB = RC.mac[module_idP]; + COMMON_channels_t *cc; + uint8_t *vrb_map; + int first_rb = -1; + int N_RB_DL; + nfapi_dl_config_request_pdu_t *dl_config_pdu; + nfapi_tx_request_pdu_t *TX_req; + nfapi_dl_config_request_body_t *dl_req; + int i; + int rvidx; + int absSF = (frameP * 10) + subframeP; + + + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + + cc = &eNB->common_channels[CC_id]; + vrb_map = (void *) &cc->vrb_map; + N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth); + dl_req = &eNB->DL_req[CC_id].dl_config_request_body; + + // Time-domain scheduling + if (cc->mib->message.schedulingInfoSIB1_BR_r13 == 0) + continue; + else { + + + AssertFatal(cc-> + sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13 + != NULL, + "sib_v13ext->bandwidthReducedAccessRelatedInfo_r13 is null\n"); + + SchedulingInfoList_BR_r13_t *schedulingInfoList_BR_r13 = + cc->sib1_v13ext-> + bandwidthReducedAccessRelatedInfo_r13->schedulingInfoList_BR_r13; + AssertFatal(schedulingInfoList_BR_r13 != NULL, + "sib_v13ext->schedulingInfoList_BR_r13 is null\n"); + + SchedulingInfoList_t *schedulingInfoList = + cc->schedulingInfoList; + AssertFatal(schedulingInfoList_BR_r13->list.count == + schedulingInfoList->list.count, + "schedulingInfolist_BR.r13->list.count %d != schedulingInfoList.list.count %d\n", + schedulingInfoList_BR_r13->list.count, + schedulingInfoList->list.count); + + AssertFatal(cc-> + sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13 + <= + SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_ms200, + "si_WindowLength_BR_r13 %d > %d\n", + (int) cc-> + sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13, + SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_ms200); + + // check that SI frequency-hopping is disabled + AssertFatal(cc-> + sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_HoppingConfigCommon_r13 + == + SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_HoppingConfigCommon_r13_off, + "Deactivate SI_HoppingConfigCommon_r13 in configuration file, not supported for now\n"); + long si_WindowLength_BR_r13 = + si_WindowLength_BR_r13tab[cc-> + sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13]; + + long si_RepetitionPattern_r13 = + cc->sib1_v13ext-> + bandwidthReducedAccessRelatedInfo_r13->si_RepetitionPattern_r13; + AssertFatal(si_RepetitionPattern_r13 <= + SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_RepetitionPattern_r13_every8thRF, + "si_RepetitionPattern_r13 %d > %d\n", + (int) si_RepetitionPattern_r13, + SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_RepetitionPattern_r13_every8thRF); + // cycle through SIB list + + for (i = 0; i < schedulingInfoList_BR_r13->list.count; i++) { + long si_Periodicity = + schedulingInfoList->list.array[i]->si_Periodicity; + long si_Narrowband_r13 = + schedulingInfoList_BR_r13->list.array[i]-> + si_Narrowband_r13; + long si_TBS_r13 = + si_TBS_r13tab[schedulingInfoList_BR_r13-> + list.array[i]->si_TBS_r13]; + + // check if the SI is to be scheduled now + int period_in_sf = 80 << si_Periodicity; // 2^i * 80 subframes, note: si_Periodicity is 2^i * 80ms + int sf_mod_period = absSF % period_in_sf; + int k = sf_mod_period & 3; + // Note: definition of k and rvidx from 36.321 section 5.3.1 + rvidx = (((3 * k) >> 1) + (k & 1)) & 3; + + if ((sf_mod_period < si_WindowLength_BR_r13) + && ((frameP & (((1 << si_RepetitionPattern_r13) - 1))) == 0)) { // this SIB is to be scheduled + + bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SI_BR + i, 1, &cc->BCCH_BR_pdu[i + 1].payload[0], 1, module_idP, 0); // not used in this case + + AssertFatal(bcch_sdu_length > 0, + "RRC returned 0 bytes for SI-BR %d\n", i); + + if (bcch_sdu_length > 0) { + AssertFatal(bcch_sdu_length <= (si_TBS_r13 >> 3), + "RRC provided bcch with length %d > %d (si_TBS_r13 %d)\n", + bcch_sdu_length, + (int) (si_TBS_r13 >> 3), + (int) schedulingInfoList_BR_r13-> + list.array[i]->si_TBS_r13); + + // allocate all 6 PRBs in narrowband for SIB1_BR + + // check that SIB1 didn't take this narrowband + if (vrb_map[first_rb] > 0) + continue; + + first_rb = + narrowband_to_first_rb(cc, + si_Narrowband_r13 - 1); + vrb_map[first_rb] = 1; + vrb_map[first_rb + 1] = 1; + vrb_map[first_rb + 2] = 1; + vrb_map[first_rb + 4] = 1; + vrb_map[first_rb + 5] = 1; + + if ((frameP & 1023) < 200) + LOG_D(MAC, + "[eNB %d] Frame %d Subframe %d: SI_BR->DLSCH CC_id %d, Narrowband %d rvidx %d (sf_mod_period %d : si_WindowLength_BR_r13 %d : si_RepetitionPattern_r13 %d) bcch_sdu_length %d\n", + module_idP, frameP, subframeP, CC_id, + (int) si_Narrowband_r13 - 1, rvidx, + sf_mod_period, + (int) si_WindowLength_BR_r13, + (int) si_RepetitionPattern_r13, + bcch_sdu_length); + + + + + dl_config_pdu = + &dl_req->dl_config_pdu_list[dl_req-> + number_pdu]; + memset((void *) dl_config_pdu, 0, + sizeof(nfapi_dl_config_request_pdu_t)); + dl_config_pdu->pdu_type = + NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; + dl_config_pdu->pdu_size = + (uint8_t) (2 + + sizeof(nfapi_dl_config_dlsch_pdu)); + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = + si_TBS_r13 >> 3; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = + eNB->pdu_index[CC_id]; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = + 0xFFFF; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.resource_block_coding = + getRIV(N_RB_DL, first_rb, 6); + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.redundancy_version = rvidx; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1; // first block + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.transport_block_to_codeword_swap_flag + = 0; + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.transmission_scheme = + (cc->p_eNB == 1) ? 0 : 1; + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.number_of_layers = 1; + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.number_of_subbands = 1; + // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = ; + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.ue_category_capacity = 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.delta_power_offset_index = 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.transmission_mode = + (cc->p_eNB == 1) ? 1 : 2; + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.num_bf_prb_per_subband = 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + num_bf_vector = 1; + // Rel10 fields (for PDSCH starting symbol) + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10. + pdsch_start = + cc[CC_id]. + sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13; + // Rel13 fields + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 1; // SI-BR + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel13.initial_transmission_sf_io = + absSF - sf_mod_period; + + // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ; + dl_req->number_pdu++; + + // Program TX Request + TX_req = + &eNB->TX_req[CC_id]. + tx_request_body.tx_pdu_list[eNB->TX_req[CC_id]. + tx_request_body.number_of_pdus]; + TX_req->pdu_length = bcch_sdu_length; + TX_req->pdu_index = eNB->pdu_index[CC_id]++; + TX_req->num_segments = 1; + TX_req->segments[0].segment_length = + bcch_sdu_length; + TX_req->segments[0].segment_data = + cc->BCCH_BR_pdu[i + 1].payload; + eNB->TX_req[CC_id].tx_request_body. + number_of_pdus++; + + if (opt_enabled == 1) { + trace_pdu(1, + &cc->BCCH_BR_pdu[i + 1].payload[0], + bcch_sdu_length, + 0xffff, + 4, + 0xffff, eNB->frame, eNB->subframe, 0, + 0); + LOG_D(OPT, + "[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n", + module_idP, frameP, CC_id, 0xffff, + bcch_sdu_length); + } + if (cc->tdd_Config != NULL) { //TDD + LOG_D(MAC, + "[eNB] Frame %d : Scheduling BCCH-BR %d->DLSCH (TDD) for CC_id %d SI-BR %d bytes\n", + frameP, i, CC_id, bcch_sdu_length); + } else { + LOG_D(MAC, + "[eNB] Frame %d : Scheduling BCCH-BR %d->DLSCH (FDD) for CC_id %d SI-BR %d bytes\n", + frameP, i, CC_id, bcch_sdu_length); + } + } + } // scheduling in current frame/subframe + } //for SI List + } // eMTC is activated + } // CC_id + return; +} #endif - stop_meas(&eNB->schedule_si); - return; +void +schedule_mib(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP) +{ + + eNB_MAC_INST *eNB = RC.mac[module_idP]; + COMMON_channels_t *cc; + nfapi_dl_config_request_pdu_t *dl_config_pdu; + nfapi_tx_request_pdu_t *TX_req; + int mib_sdu_length; + int CC_id; + nfapi_dl_config_request_body_t *dl_req; + + AssertFatal(subframeP == 0, "Subframe must be 0\n"); + AssertFatal((frameP & 3) == 0, "Frame must be a multiple of 4\n"); + + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + + dl_req = &eNB->DL_req[CC_id].dl_config_request_body; + cc = &eNB->common_channels[CC_id]; + + mib_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MIBCH, 1, &cc->MIB_pdu.payload[0], 1, module_idP, 0); // not used in this case + + LOG_D(MAC, "Frame %d, subframe %d: BCH PDU length %d\n", + frameP, subframeP, mib_sdu_length); + + if (mib_sdu_length > 0) { + + LOG_D(MAC, + "Frame %d, subframe %d: Adding BCH PDU in position %d (length %d)\n", + frameP, subframeP, dl_req->number_pdu, mib_sdu_length); + + if ((frameP & 1023) < 40) + LOG_D(MAC, + "[eNB %d] Frame %d : MIB->BCH CC_id %d, Received %d bytes (cc->mib->message.schedulingInfoSIB1_BR_r13 %d)\n", + module_idP, frameP, CC_id, mib_sdu_length, + (int) cc->mib->message.schedulingInfoSIB1_BR_r13); + + dl_config_pdu = + &dl_req->dl_config_pdu_list[dl_req->number_pdu]; + memset((void *) dl_config_pdu, 0, + sizeof(nfapi_dl_config_request_pdu_t)); + dl_config_pdu->pdu_type = + NFAPI_DL_CONFIG_BCH_PDU_TYPE, dl_config_pdu->pdu_size = + 2 + sizeof(nfapi_dl_config_bch_pdu); + dl_config_pdu->bch_pdu.bch_pdu_rel8.length = mib_sdu_length; + dl_config_pdu->bch_pdu.bch_pdu_rel8.pdu_index = + eNB->pdu_index[CC_id]; + dl_config_pdu->bch_pdu.bch_pdu_rel8.transmission_power = 6000; + dl_req->number_pdu++; + + LOG_D(MAC, "eNB->DL_req[0].number_pdu %d (%p)\n", + dl_req->number_pdu, &dl_req->number_pdu); + // DL request + + TX_req = + &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req + [CC_id].tx_request_body.number_of_pdus]; + TX_req->pdu_length = 3; + TX_req->pdu_index = eNB->pdu_index[CC_id]++; + TX_req->num_segments = 1; + TX_req->segments[0].segment_length = 0; + TX_req->segments[0].segment_data = cc[CC_id].MIB_pdu.payload; + eNB->TX_req[CC_id].tx_request_body.number_of_pdus++; + } + } +} + + +//------------------------------------------------------------------------------ +void +schedule_SI(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP) +//------------------------------------------------------------------------------ +{ + + int8_t bcch_sdu_length; + int mcs = -1; + int CC_id; + eNB_MAC_INST *eNB = RC.mac[module_idP]; + COMMON_channels_t *cc; + uint8_t *vrb_map; + int first_rb = -1; + int N_RB_DL; + nfapi_dl_config_request_pdu_t *dl_config_pdu; + nfapi_tx_request_pdu_t *TX_req; + nfapi_dl_config_request_body_t *dl_req; + + start_meas(&eNB->schedule_si); + + // Only schedule LTE System Information in subframe 5 + if (subframeP == 5) { + + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + + cc = &eNB->common_channels[CC_id]; + vrb_map = (void *) &cc->vrb_map; + N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth); + dl_req = &eNB->DL_req[CC_id].dl_config_request_body; + + + bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH, 1, &cc->BCCH_pdu.payload[0], 1, module_idP, 0); // not used in this case + + if (bcch_sdu_length > 0) { + LOG_D(MAC, + "[eNB %d] Frame %d : BCCH->DLSCH CC_id %d, Received %d bytes \n", + module_idP, frameP, CC_id, bcch_sdu_length); + + // Allocate 4 PRBs in a random location + /* + while (1) { + first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL-4)); + if ((vrb_map[first_rb] != 1) && + (vrb_map[first_rb+1] != 1) && + (vrb_map[first_rb+2] != 1) && + (vrb_map[first_rb+3] != 1)) + break; + } + */ + switch (N_RB_DL) { + case 6: + first_rb = 0; + break; + case 15: + first_rb = 6; + break; + case 25: + first_rb = 11; + break; + case 50: + first_rb = 23; + break; + case 100: + first_rb = 48; + break; + } + + vrb_map[first_rb] = 1; + vrb_map[first_rb + 1] = 1; + vrb_map[first_rb + 2] = 1; + vrb_map[first_rb + 3] = 1; + + // Get MCS for length of SI, 3 PRBs + if (bcch_sdu_length <= 7) { + mcs = 0; + } else if (bcch_sdu_length <= 11) { + mcs = 1; + } else if (bcch_sdu_length <= 18) { + mcs = 2; + } else if (bcch_sdu_length <= 22) { + mcs = 3; + } else if (bcch_sdu_length <= 26) { + mcs = 4; + } else if (bcch_sdu_length <= 28) { + mcs = 5; + } else if (bcch_sdu_length <= 32) { + mcs = 6; + } else if (bcch_sdu_length <= 41) { + mcs = 7; + } else if (bcch_sdu_length <= 49) { + mcs = 8; + } + + + dl_config_pdu = + &dl_req->dl_config_pdu_list[dl_req->number_pdu]; + memset((void *) dl_config_pdu, 0, + sizeof(nfapi_dl_config_request_pdu_t)); + dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; + dl_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu)); + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format = + NFAPI_DL_DCI_FORMAT_1A; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + aggregation_level = 4; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = 0xFFFF; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = 2; // S-RNTI : see Table 4-10 from SCF082 - nFAPI specifications + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000; // equal to RS power + + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process = 0; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc = 1; // no TPC + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + new_data_indicator_1 = 0; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1 = mcs; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + redundancy_version_1 = 0; + + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.resource_block_coding = + getRIV(N_RB_DL, first_rb, 4); + + // Rel10 fields + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = 3; + // Rel13 fields + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 0; // regular UE + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 2; // not BR + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = 0xFFFF; // absolute SF + + if (!CCE_allocation_infeasible + (module_idP, CC_id, 0, subframeP, + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.aggregation_level, SI_RNTI)) { + LOG_D(MAC, + "Frame %d: Subframe %d : Adding common DCI for S_RNTI\n", + frameP, subframeP); + dl_req->number_dci++; + dl_req->number_pdu++; + dl_config_pdu = + &dl_req->dl_config_pdu_list[dl_req->number_pdu]; + memset((void *) dl_config_pdu, 0, + sizeof(nfapi_dl_config_request_pdu_t)); + dl_config_pdu->pdu_type = + NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; + dl_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu)); + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = + eNB->pdu_index[CC_id]; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.resource_block_coding = + getRIV(N_RB_DL, first_rb, 4); + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + redundancy_version = 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1; // first block + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.transport_block_to_codeword_swap_flag + = 0; + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.transmission_scheme = + (cc->p_eNB == 1) ? 0 : 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + number_of_layers = 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + number_of_subbands = 1; + // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = ; + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.ue_category_capacity = 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.delta_power_offset_index = 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth); // ignored + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + transmission_mode = (cc->p_eNB == 1) ? 1 : 2; + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.num_bf_prb_per_subband = 1; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = + 1; + // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ; + dl_req->number_pdu++; + + // Program TX Request + TX_req = + &eNB->TX_req[CC_id]. + tx_request_body.tx_pdu_list[eNB->TX_req[CC_id]. + tx_request_body.number_of_pdus]; + TX_req->pdu_length = bcch_sdu_length; + TX_req->pdu_index = eNB->pdu_index[CC_id]++; + TX_req->num_segments = 1; + TX_req->segments[0].segment_length = bcch_sdu_length; + TX_req->segments[0].segment_data = + cc->BCCH_pdu.payload; + eNB->TX_req[CC_id].tx_request_body.number_of_pdus++; + + } else { + LOG_E(MAC, + "[eNB %d] CCid %d Frame %d, subframe %d : Cannot add DCI 1A for SI\n", + module_idP, CC_id, frameP, subframeP); + } + + if (opt_enabled == 1) { + trace_pdu(1, + &cc->BCCH_pdu.payload[0], + bcch_sdu_length, + 0xffff, + 4, 0xffff, eNB->frame, eNB->subframe, 0, 0); + LOG_D(OPT, + "[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n", + module_idP, frameP, CC_id, 0xffff, + bcch_sdu_length); + } + if (cc->tdd_Config != NULL) { //TDD + LOG_D(MAC, + "[eNB] Frame %d : Scheduling BCCH->DLSCH (TDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n", + frameP, CC_id, bcch_sdu_length, mcs); + } else { + LOG_D(MAC, + "[eNB] Frame %d : Scheduling BCCH->DLSCH (FDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n", + frameP, CC_id, bcch_sdu_length, mcs); + } + + + eNB->eNB_stats[CC_id].total_num_bcch_pdu += 1; + eNB->eNB_stats[CC_id].bcch_buffer = bcch_sdu_length; + eNB->eNB_stats[CC_id].total_bcch_buffer += bcch_sdu_length; + eNB->eNB_stats[CC_id].bcch_mcs = mcs; + } else { + + //LOG_D(MAC,"[eNB %d] Frame %d : BCCH not active \n",Mod_id,frame); + } + } + } +#ifdef Rel14 + schedule_SIB1_BR(module_idP, frameP, subframeP); + schedule_SI_BR(module_idP, frameP, subframeP); +#endif + + stop_meas(&eNB->schedule_si); + return; } - diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c index 3e767ec516..9dbbb39d03 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c @@ -51,10 +51,10 @@ //#include "LAYER2/MAC/pre_processor.c" #include "pdcp.h" -#include "SIMULATION/TOOLS/defs.h" // for taus +#include "SIMULATION/TOOLS/defs.h" // for taus #if defined(ENABLE_ITTI) -# include "intertask_interface.h" +#include "intertask_interface.h" #endif #include "T.h" @@ -66,347 +66,346 @@ extern RAN_CONTEXT_t RC; //------------------------------------------------------------------------------ void -add_ue_dlsch_info( - module_id_t module_idP, - int CC_id, - int UE_id, - sub_frame_t subframeP, - UE_DLSCH_STATUS status -) +add_ue_dlsch_info(module_id_t module_idP, + int CC_id, + int UE_id, sub_frame_t subframeP, UE_DLSCH_STATUS status) //------------------------------------------------------------------------------ { - eNB_dlsch_info[module_idP][CC_id][UE_id].rnti = UE_RNTI(module_idP,UE_id); - // eNB_dlsch_info[module_idP][CC_id][ue_mod_idP].weight = weight; - eNB_dlsch_info[module_idP][CC_id][UE_id].subframe = subframeP; - eNB_dlsch_info[module_idP][CC_id][UE_id].status = status; + eNB_dlsch_info[module_idP][CC_id][UE_id].rnti = + UE_RNTI(module_idP, UE_id); + // eNB_dlsch_info[module_idP][CC_id][ue_mod_idP].weight = weight; + eNB_dlsch_info[module_idP][CC_id][UE_id].subframe = subframeP; + eNB_dlsch_info[module_idP][CC_id][UE_id].status = status; - eNB_dlsch_info[module_idP][CC_id][UE_id].serving_num++; + eNB_dlsch_info[module_idP][CC_id][UE_id].serving_num++; } //------------------------------------------------------------------------------ int -schedule_next_dlue( - module_id_t module_idP, - int CC_id, - sub_frame_t subframeP -) +schedule_next_dlue(module_id_t module_idP, int CC_id, + sub_frame_t subframeP) //------------------------------------------------------------------------------ { - int next_ue; - UE_list_t *UE_list=&RC.mac[module_idP]->UE_list; + int next_ue; + UE_list_t *UE_list = &RC.mac[module_idP]->UE_list; - for (next_ue=UE_list->head; next_ue>=0; next_ue=UE_list->next[next_ue] ) { - if (eNB_dlsch_info[module_idP][CC_id][next_ue].status == S_DL_WAITING) { - return next_ue; + for (next_ue = UE_list->head; next_ue >= 0; + next_ue = UE_list->next[next_ue]) { + if (eNB_dlsch_info[module_idP][CC_id][next_ue].status == + S_DL_WAITING) { + return next_ue; + } } - } - for (next_ue=UE_list->head; next_ue>=0; next_ue=UE_list->next[next_ue] ) { - if (eNB_dlsch_info[module_idP][CC_id][next_ue].status == S_DL_BUFFERED) { - eNB_dlsch_info[module_idP][CC_id][next_ue].status = S_DL_WAITING; + for (next_ue = UE_list->head; next_ue >= 0; + next_ue = UE_list->next[next_ue]) { + if (eNB_dlsch_info[module_idP][CC_id][next_ue].status == + S_DL_BUFFERED) { + eNB_dlsch_info[module_idP][CC_id][next_ue].status = + S_DL_WAITING; + } } - } - return(-1);//next_ue; + return (-1); //next_ue; } //------------------------------------------------------------------------------ unsigned char -generate_dlsch_header( - unsigned char* mac_header, - unsigned char num_sdus, - unsigned short *sdu_lengths, - unsigned char *sdu_lcids, - unsigned char drx_cmd, - unsigned short timing_advance_cmd, - unsigned char *ue_cont_res_id, - unsigned char short_padding, - unsigned short post_padding -) +generate_dlsch_header(unsigned char *mac_header, + unsigned char num_sdus, + unsigned short *sdu_lengths, + unsigned char *sdu_lcids, + unsigned char drx_cmd, + unsigned short timing_advance_cmd, + unsigned char *ue_cont_res_id, + unsigned char short_padding, + unsigned short post_padding) //------------------------------------------------------------------------------ { - SCH_SUBHEADER_FIXED *mac_header_ptr = (SCH_SUBHEADER_FIXED *)mac_header; - uint8_t first_element=0,last_size=0,i; - uint8_t mac_header_control_elements[16],*ce_ptr; + SCH_SUBHEADER_FIXED *mac_header_ptr = + (SCH_SUBHEADER_FIXED *) mac_header; + uint8_t first_element = 0, last_size = 0, i; + uint8_t mac_header_control_elements[16], *ce_ptr; - ce_ptr = &mac_header_control_elements[0]; + ce_ptr = &mac_header_control_elements[0]; - // compute header components + // compute header components - if ((short_padding == 1) || (short_padding == 2)) { - mac_header_ptr->R = 0; - mac_header_ptr->E = 0; - mac_header_ptr->LCID = SHORT_PADDING; - first_element=1; - last_size=1; - } - - if (short_padding == 2) { - mac_header_ptr->E = 1; - mac_header_ptr++; - mac_header_ptr->R = 0; - mac_header_ptr->E = 0; - mac_header_ptr->LCID = SHORT_PADDING; - last_size=1; - } - - if (drx_cmd != 255) { - if (first_element>0) { - mac_header_ptr->E = 1; - mac_header_ptr++; - } else { - first_element=1; + if ((short_padding == 1) || (short_padding == 2)) { + mac_header_ptr->R = 0; + mac_header_ptr->E = 0; + mac_header_ptr->LCID = SHORT_PADDING; + first_element = 1; + last_size = 1; } - mac_header_ptr->R = 0; - mac_header_ptr->E = 0; - mac_header_ptr->LCID = DRX_CMD; - last_size=1; - } - - if (timing_advance_cmd != 31) { - if (first_element>0) { - mac_header_ptr->E = 1; - mac_header_ptr++; - } else { - first_element=1; + if (short_padding == 2) { + mac_header_ptr->E = 1; + mac_header_ptr++; + mac_header_ptr->R = 0; + mac_header_ptr->E = 0; + mac_header_ptr->LCID = SHORT_PADDING; + last_size = 1; } - mac_header_ptr->R = 0; - mac_header_ptr->E = 0; - mac_header_ptr->LCID = TIMING_ADV_CMD; - last_size=1; - // msg("last_size %d,mac_header_ptr %p\n",last_size,mac_header_ptr); - ((TIMING_ADVANCE_CMD *)ce_ptr)->R=0; - AssertFatal(timing_advance_cmd < 64,"timing_advance_cmd %d > 63\n",timing_advance_cmd); - ((TIMING_ADVANCE_CMD *)ce_ptr)->TA=timing_advance_cmd;//(timing_advance_cmd+31)&0x3f; - LOG_D(MAC,"timing advance =%d (%d)\n",timing_advance_cmd,((TIMING_ADVANCE_CMD *)ce_ptr)->TA); - ce_ptr+=sizeof(TIMING_ADVANCE_CMD); - //msg("offset %d\n",ce_ptr-mac_header_control_elements); - } + if (drx_cmd != 255) { + if (first_element > 0) { + mac_header_ptr->E = 1; + mac_header_ptr++; + } else { + first_element = 1; + } - if (ue_cont_res_id) { - if (first_element>0) { - mac_header_ptr->E = 1; - /* - printf("[eNB][MAC] last subheader : %x (R%d,E%d,LCID%d)\n",*(unsigned char*)mac_header_ptr, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->R, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->E, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID); - */ - mac_header_ptr++; - } else { - first_element=1; + mac_header_ptr->R = 0; + mac_header_ptr->E = 0; + mac_header_ptr->LCID = DRX_CMD; + last_size = 1; } - mac_header_ptr->R = 0; - mac_header_ptr->E = 0; - mac_header_ptr->LCID = UE_CONT_RES; - last_size=1; + if (timing_advance_cmd != 31) { + if (first_element > 0) { + mac_header_ptr->E = 1; + mac_header_ptr++; + } else { + first_element = 1; + } - LOG_T(MAC,"[eNB ][RAPROC] Generate contention resolution msg: %x.%x.%x.%x.%x.%x\n", - ue_cont_res_id[0], - ue_cont_res_id[1], - ue_cont_res_id[2], - ue_cont_res_id[3], - ue_cont_res_id[4], - ue_cont_res_id[5]); - - memcpy(ce_ptr,ue_cont_res_id,6); - ce_ptr+=6; - // msg("(cont_res) : offset %d\n",ce_ptr-mac_header_control_elements); - } - - //msg("last_size %d,mac_header_ptr %p\n",last_size,mac_header_ptr); - - for (i=0; i0) { - mac_header_ptr->E = 1; - /*msg("last subheader : %x (R%d,E%d,LCID%d)\n",*(unsigned char*)mac_header_ptr, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->R, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->E, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID); - */ - mac_header_ptr+=last_size; - //msg("last_size %d,mac_header_ptr %p\n",last_size,mac_header_ptr); - } else { - first_element=1; + mac_header_ptr->R = 0; + mac_header_ptr->E = 0; + mac_header_ptr->LCID = TIMING_ADV_CMD; + last_size = 1; + // msg("last_size %d,mac_header_ptr %p\n",last_size,mac_header_ptr); + ((TIMING_ADVANCE_CMD *) ce_ptr)->R = 0; + AssertFatal(timing_advance_cmd < 64, + "timing_advance_cmd %d > 63\n", timing_advance_cmd); + ((TIMING_ADVANCE_CMD *) ce_ptr)->TA = timing_advance_cmd; //(timing_advance_cmd+31)&0x3f; + LOG_D(MAC, "timing advance =%d (%d)\n", timing_advance_cmd, + ((TIMING_ADVANCE_CMD *) ce_ptr)->TA); + ce_ptr += sizeof(TIMING_ADVANCE_CMD); + //msg("offset %d\n",ce_ptr-mac_header_control_elements); } - if (sdu_lengths[i] < 128) { - ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->R = 0; - ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->E = 0; - ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->F = 0; - ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->LCID = sdu_lcids[i]; - ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->L = (unsigned char)sdu_lengths[i]; - last_size=2; - } else { - ((SCH_SUBHEADER_LONG *)mac_header_ptr)->R = 0; - ((SCH_SUBHEADER_LONG *)mac_header_ptr)->E = 0; - ((SCH_SUBHEADER_LONG *)mac_header_ptr)->F = 1; - ((SCH_SUBHEADER_LONG *)mac_header_ptr)->LCID = sdu_lcids[i]; - ((SCH_SUBHEADER_LONG *)mac_header_ptr)->L_MSB = ((unsigned short) sdu_lengths[i]>>8)&0x7f; - ((SCH_SUBHEADER_LONG *)mac_header_ptr)->L_LSB = (unsigned short) sdu_lengths[i]&0xff; - ((SCH_SUBHEADER_LONG *)mac_header_ptr)->padding = 0x00; - last_size=3; + if (ue_cont_res_id) { + if (first_element > 0) { + mac_header_ptr->E = 1; + /* + printf("[eNB][MAC] last subheader : %x (R%d,E%d,LCID%d)\n",*(unsigned char*)mac_header_ptr, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->R, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->E, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID); + */ + mac_header_ptr++; + } else { + first_element = 1; + } + + mac_header_ptr->R = 0; + mac_header_ptr->E = 0; + mac_header_ptr->LCID = UE_CONT_RES; + last_size = 1; + + LOG_T(MAC, + "[eNB ][RAPROC] Generate contention resolution msg: %x.%x.%x.%x.%x.%x\n", + ue_cont_res_id[0], ue_cont_res_id[1], ue_cont_res_id[2], + ue_cont_res_id[3], ue_cont_res_id[4], ue_cont_res_id[5]); + + memcpy(ce_ptr, ue_cont_res_id, 6); + ce_ptr += 6; + // msg("(cont_res) : offset %d\n",ce_ptr-mac_header_control_elements); + } + //msg("last_size %d,mac_header_ptr %p\n",last_size,mac_header_ptr); + + for (i = 0; i < num_sdus; i++) { + LOG_T(MAC, "[eNB] Generate DLSCH header num sdu %d len sdu %d\n", + num_sdus, sdu_lengths[i]); + + if (first_element > 0) { + mac_header_ptr->E = 1; + /*msg("last subheader : %x (R%d,E%d,LCID%d)\n",*(unsigned char*)mac_header_ptr, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->R, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->E, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID); + */ + mac_header_ptr += last_size; + //msg("last_size %d,mac_header_ptr %p\n",last_size,mac_header_ptr); + } else { + first_element = 1; + } + + if (sdu_lengths[i] < 128) { + ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->R = 0; + ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->E = 0; + ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->F = 0; + ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->LCID = sdu_lcids[i]; + ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->L = + (unsigned char) sdu_lengths[i]; + last_size = 2; + } else { + ((SCH_SUBHEADER_LONG *) mac_header_ptr)->R = 0; + ((SCH_SUBHEADER_LONG *) mac_header_ptr)->E = 0; + ((SCH_SUBHEADER_LONG *) mac_header_ptr)->F = 1; + ((SCH_SUBHEADER_LONG *) mac_header_ptr)->LCID = sdu_lcids[i]; + ((SCH_SUBHEADER_LONG *) mac_header_ptr)->L_MSB = + ((unsigned short) sdu_lengths[i] >> 8) & 0x7f; + ((SCH_SUBHEADER_LONG *) mac_header_ptr)->L_LSB = + (unsigned short) sdu_lengths[i] & 0xff; + ((SCH_SUBHEADER_LONG *) mac_header_ptr)->padding = 0x00; + last_size = 3; #ifdef DEBUG_HEADER_PARSING - LOG_D(MAC,"[eNB] generate long sdu, size %x (MSB %x, LSB %x)\n", - sdu_lengths[i], - ((SCH_SUBHEADER_LONG *)mac_header_ptr)->L_MSB, - ((SCH_SUBHEADER_LONG *)mac_header_ptr)->L_LSB); + LOG_D(MAC, + "[eNB] generate long sdu, size %x (MSB %x, LSB %x)\n", + sdu_lengths[i], + ((SCH_SUBHEADER_LONG *) mac_header_ptr)->L_MSB, + ((SCH_SUBHEADER_LONG *) mac_header_ptr)->L_LSB); #endif + } } - } - /* + /* - printf("last_size %d,mac_header_ptr %p\n",last_size,mac_header_ptr); + printf("last_size %d,mac_header_ptr %p\n",last_size,mac_header_ptr); - printf("last subheader : %x (R%d,E%d,LCID%d)\n",*(unsigned char*)mac_header_ptr, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->R, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->E, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID); + printf("last subheader : %x (R%d,E%d,LCID%d)\n",*(unsigned char*)mac_header_ptr, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->R, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->E, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID); - if (((SCH_SUBHEADER_FIXED*)mac_header_ptr)->LCID < UE_CONT_RES) { - if (((SCH_SUBHEADER_SHORT*)mac_header_ptr)->F == 0) - printf("F = 0, sdu len (L field) %d\n",(((SCH_SUBHEADER_SHORT*)mac_header_ptr)->L)); - else - printf("F = 1, sdu len (L field) %d\n",(((SCH_SUBHEADER_LONG*)mac_header_ptr)->L)); + if (((SCH_SUBHEADER_FIXED*)mac_header_ptr)->LCID < UE_CONT_RES) { + if (((SCH_SUBHEADER_SHORT*)mac_header_ptr)->F == 0) + printf("F = 0, sdu len (L field) %d\n",(((SCH_SUBHEADER_SHORT*)mac_header_ptr)->L)); + else + printf("F = 1, sdu len (L field) %d\n",(((SCH_SUBHEADER_LONG*)mac_header_ptr)->L)); + } + */ + if (post_padding > 0) { // we have lots of padding at the end of the packet + mac_header_ptr->E = 1; + mac_header_ptr += last_size; + // add a padding element + mac_header_ptr->R = 0; + mac_header_ptr->E = 0; + mac_header_ptr->LCID = SHORT_PADDING; + mac_header_ptr++; + } else { // no end of packet padding + // last SDU subhead is of fixed type (sdu length implicitly to be computed at UE) + mac_header_ptr++; } - */ - if (post_padding>0) {// we have lots of padding at the end of the packet - mac_header_ptr->E = 1; - mac_header_ptr+=last_size; - // add a padding element - mac_header_ptr->R = 0; - mac_header_ptr->E = 0; - mac_header_ptr->LCID = SHORT_PADDING; - mac_header_ptr++; - } else { // no end of packet padding - // last SDU subhead is of fixed type (sdu length implicitly to be computed at UE) - mac_header_ptr++; - } - //msg("After subheaders %d\n",(uint8_t*)mac_header_ptr - mac_header); + //msg("After subheaders %d\n",(uint8_t*)mac_header_ptr - mac_header); - if ((ce_ptr-mac_header_control_elements) > 0) { - // printf("Copying %d bytes for control elements\n",ce_ptr-mac_header_control_elements); - memcpy((void*)mac_header_ptr,mac_header_control_elements,ce_ptr-mac_header_control_elements); - mac_header_ptr+=(unsigned char)(ce_ptr-mac_header_control_elements); - } + if ((ce_ptr - mac_header_control_elements) > 0) { + // printf("Copying %d bytes for control elements\n",ce_ptr-mac_header_control_elements); + memcpy((void *) mac_header_ptr, mac_header_control_elements, + ce_ptr - mac_header_control_elements); + mac_header_ptr += + (unsigned char) (ce_ptr - mac_header_control_elements); + } + //msg("After CEs %d\n",(uint8_t*)mac_header_ptr - mac_header); - //msg("After CEs %d\n",(uint8_t*)mac_header_ptr - mac_header); - - return((unsigned char*)mac_header_ptr - mac_header); + return ((unsigned char *) mac_header_ptr - mac_header); } //------------------------------------------------------------------------------ void -set_ul_DAI( - int module_idP, - int UE_idP, - int CC_idP, - int frameP, - int subframeP -) +set_ul_DAI(int module_idP, int UE_idP, int CC_idP, int frameP, + int subframeP) //------------------------------------------------------------------------------ { - eNB_MAC_INST *eNB = RC.mac[module_idP]; - UE_list_t *UE_list = &eNB->UE_list; - unsigned char DAI; - COMMON_channels_t *cc = &eNB->common_channels[CC_idP]; - if (cc->tdd_Config != NULL) { //TDD - DAI = (UE_list->UE_template[CC_idP][UE_idP].DAI-1)&3; - LOG_D(MAC,"[eNB %d] CC_id %d Frame %d, subframe %d: DAI %d for UE %d\n",module_idP,CC_idP,frameP,subframeP,DAI,UE_idP); - // Save DAI for Format 0 DCI + eNB_MAC_INST *eNB = RC.mac[module_idP]; + UE_list_t *UE_list = &eNB->UE_list; + unsigned char DAI; + COMMON_channels_t *cc = &eNB->common_channels[CC_idP]; + if (cc->tdd_Config != NULL) { //TDD + DAI = (UE_list->UE_template[CC_idP][UE_idP].DAI - 1) & 3; + LOG_D(MAC, + "[eNB %d] CC_id %d Frame %d, subframe %d: DAI %d for UE %d\n", + module_idP, CC_idP, frameP, subframeP, DAI, UE_idP); + // Save DAI for Format 0 DCI - switch (cc->tdd_Config->subframeAssignment) { - case 0: - // if ((subframeP==0)||(subframeP==1)||(subframeP==5)||(subframeP==6)) - break; + switch (cc->tdd_Config->subframeAssignment) { + case 0: + // if ((subframeP==0)||(subframeP==1)||(subframeP==5)||(subframeP==6)) + break; - case 1: - switch (subframeP) { - case 1: - UE_list->UE_template[CC_idP][UE_idP].DAI_ul[7] = DAI; - break; + case 1: + switch (subframeP) { + case 1: + UE_list->UE_template[CC_idP][UE_idP].DAI_ul[7] = DAI; + break; - case 4: - UE_list->UE_template[CC_idP][UE_idP].DAI_ul[8] = DAI; - break; + case 4: + UE_list->UE_template[CC_idP][UE_idP].DAI_ul[8] = DAI; + break; - case 6: - UE_list->UE_template[CC_idP][UE_idP].DAI_ul[2] = DAI; - break; + case 6: + UE_list->UE_template[CC_idP][UE_idP].DAI_ul[2] = DAI; + break; - case 9: - UE_list->UE_template[CC_idP][UE_idP].DAI_ul[3] = DAI; - break; - } + case 9: + UE_list->UE_template[CC_idP][UE_idP].DAI_ul[3] = DAI; + break; + } - case 2: - // if ((subframeP==3)||(subframeP==8)) - // UE_list->UE_template[CC_idP][UE_idP].DAI_ul = DAI; - break; + case 2: + // if ((subframeP==3)||(subframeP==8)) + // UE_list->UE_template[CC_idP][UE_idP].DAI_ul = DAI; + break; - case 3: + case 3: - //if ((subframeP==6)||(subframeP==8)||(subframeP==0)) { - // LOG_D(MAC,"schedule_ue_spec: setting UL DAI to %d for subframeP %d => %d\n",DAI,subframeP, ((subframeP+8)%10)>>1); - // UE_list->UE_template[CC_idP][UE_idP].DAI_ul[((subframeP+8)%10)>>1] = DAI; - //} - switch (subframeP) { - case 5: - case 6: - case 1: - UE_list->UE_template[CC_idP][UE_idP].DAI_ul[2] = DAI; - break; + //if ((subframeP==6)||(subframeP==8)||(subframeP==0)) { + // LOG_D(MAC,"schedule_ue_spec: setting UL DAI to %d for subframeP %d => %d\n",DAI,subframeP, ((subframeP+8)%10)>>1); + // UE_list->UE_template[CC_idP][UE_idP].DAI_ul[((subframeP+8)%10)>>1] = DAI; + //} + switch (subframeP) { + case 5: + case 6: + case 1: + UE_list->UE_template[CC_idP][UE_idP].DAI_ul[2] = DAI; + break; - case 7: - case 8: - UE_list->UE_template[CC_idP][UE_idP].DAI_ul[3] = DAI; - break; + case 7: + case 8: + UE_list->UE_template[CC_idP][UE_idP].DAI_ul[3] = DAI; + break; - case 9: - case 0: - UE_list->UE_template[CC_idP][UE_idP].DAI_ul[4] = DAI; - break; + case 9: + case 0: + UE_list->UE_template[CC_idP][UE_idP].DAI_ul[4] = DAI; + break; - default: - break; - } + default: + break; + } - break; + break; - case 4: - // if ((subframeP==8)||(subframeP==9)) - // UE_list->UE_template[CC_idP][UE_idP].DAI_ul = DAI; - break; + case 4: + // if ((subframeP==8)||(subframeP==9)) + // UE_list->UE_template[CC_idP][UE_idP].DAI_ul = DAI; + break; - case 5: - // if (subframeP==8) - // UE_list->UE_template[CC_idP][UE_idP].DAI_ul = DAI; - break; + case 5: + // if (subframeP==8) + // UE_list->UE_template[CC_idP][UE_idP].DAI_ul = DAI; + break; - case 6: - // if ((subframeP==1)||(subframeP==4)||(subframeP==6)||(subframeP==9)) - // UE_list->UE_template[CC_idP][UE_idP].DAI_ul = DAI; - break; + case 6: + // if ((subframeP==1)||(subframeP==4)||(subframeP==6)||(subframeP==9)) + // UE_list->UE_template[CC_idP][UE_idP].DAI_ul = DAI; + break; - default: - break; + default: + break; + } } - } } @@ -414,1130 +413,1342 @@ set_ul_DAI( //------------------------------------------------------------------------------ void -schedule_ue_spec( - module_id_t module_idP, - frame_t frameP, - sub_frame_t subframeP, - int* mbsfn_flag -) +schedule_ue_spec(module_id_t module_idP, + frame_t frameP, sub_frame_t subframeP, int *mbsfn_flag) //------------------------------------------------------------------------------ { - uint8_t CC_id; - int UE_id; - unsigned char aggregation; - mac_rlc_status_resp_t rlc_status; - unsigned char header_len_dcch=0, header_len_dcch_tmp=0; - unsigned char header_len_dtch=0, header_len_dtch_tmp=0, header_len_dtch_last=0; - unsigned char ta_len=0; - unsigned char sdu_lcids[NB_RB_MAX],lcid,offset,num_sdus=0; - uint16_t nb_rb,nb_rb_temp,nb_available_rb; - uint16_t TBS,j,sdu_lengths[NB_RB_MAX],rnti,padding=0,post_padding=0; - unsigned char dlsch_buffer[MAX_DLSCH_PAYLOAD_BYTES]; - unsigned char round = 0; - unsigned char harq_pid = 0; - eNB_UE_STATS *eNB_UE_stats = NULL; - uint16_t sdu_length_total = 0; + uint8_t CC_id; + int UE_id; + unsigned char aggregation; + mac_rlc_status_resp_t rlc_status; + unsigned char header_len_dcch = 0, header_len_dcch_tmp = 0; + unsigned char header_len_dtch = 0, header_len_dtch_tmp = + 0, header_len_dtch_last = 0; + unsigned char ta_len = 0; + unsigned char sdu_lcids[NB_RB_MAX], lcid, offset, num_sdus = 0; + uint16_t nb_rb, nb_rb_temp, nb_available_rb; + uint16_t TBS, j, sdu_lengths[NB_RB_MAX], rnti, padding = + 0, post_padding = 0; + unsigned char dlsch_buffer[MAX_DLSCH_PAYLOAD_BYTES]; + unsigned char round = 0; + unsigned char harq_pid = 0; + eNB_UE_STATS *eNB_UE_stats = NULL; + uint16_t sdu_length_total = 0; - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc = eNB->common_channels; - UE_list_t *UE_list = &eNB->UE_list; - int continue_flag=0; - int32_t normalized_rx_power, target_rx_power; - int32_t tpc=1; - static int32_t tpc_accumulated=0; - UE_sched_ctrl *ue_sched_ctl; - int mcs; - int i; - int min_rb_unit[MAX_NUM_CCs]; - int N_RB_DL[MAX_NUM_CCs]; - int total_nb_available_rb[MAX_NUM_CCs]; - int N_RBG[MAX_NUM_CCs]; - nfapi_dl_config_request_body_t *dl_req; - nfapi_dl_config_request_pdu_t *dl_config_pdu; - int tdd_sfa; - int ta_update; + eNB_MAC_INST *eNB = RC.mac[module_idP]; + COMMON_channels_t *cc = eNB->common_channels; + UE_list_t *UE_list = &eNB->UE_list; + int continue_flag = 0; + int32_t normalized_rx_power, target_rx_power; + int32_t tpc = 1; + static int32_t tpc_accumulated = 0; + UE_sched_ctrl *ue_sched_ctl; + int mcs; + int i; + int min_rb_unit[MAX_NUM_CCs]; + int N_RB_DL[MAX_NUM_CCs]; + int total_nb_available_rb[MAX_NUM_CCs]; + int N_RBG[MAX_NUM_CCs]; + nfapi_dl_config_request_body_t *dl_req; + nfapi_dl_config_request_pdu_t *dl_config_pdu; + int tdd_sfa; + int ta_update; #if 0 - if (UE_list->head==-1) { - return; - } + if (UE_list->head == -1) { + return; + } #endif - start_meas(&eNB->schedule_dlsch); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SCHEDULE_DLSCH,VCD_FUNCTION_IN); + start_meas(&eNB->schedule_dlsch); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_SCHEDULE_DLSCH, VCD_FUNCTION_IN); - // for TDD: check that we have to act here, otherwise return - if (cc[0].tdd_Config) { - tdd_sfa = cc[0].tdd_Config->subframeAssignment; - switch (subframeP) { - case 0: - // always continue - break; - case 1: - return; - break; - case 2: - return; - break; - case 3: - if ((tdd_sfa!=2) && (tdd_sfa!=5)) return; - break; - case 4: - if ((tdd_sfa!=1)&&(tdd_sfa!=2)&&(tdd_sfa!=4)&&(tdd_sfa!=5)) return; - break; - case 5: - break; - case 6: - case 7: - if ((tdd_sfa!=1)&&(tdd_sfa!=2)&&(tdd_sfa!=4)&&(tdd_sfa!=5)) return; - break; - case 8: - if ((tdd_sfa!=2)&&(tdd_sfa!=3)&&(tdd_sfa!=4)&&(tdd_sfa!=5)) return; - break; - case 9: - if ((tdd_sfa!=1)&&(tdd_sfa!=3)&&(tdd_sfa!=4)&&(tdd_sfa!=6)) return; - break; - + // for TDD: check that we have to act here, otherwise return + if (cc[0].tdd_Config) { + tdd_sfa = cc[0].tdd_Config->subframeAssignment; + switch (subframeP) { + case 0: + // always continue + break; + case 1: + return; + break; + case 2: + return; + break; + case 3: + if ((tdd_sfa != 2) && (tdd_sfa != 5)) + return; + break; + case 4: + if ((tdd_sfa != 1) && (tdd_sfa != 2) && (tdd_sfa != 4) + && (tdd_sfa != 5)) + return; + break; + case 5: + break; + case 6: + case 7: + if ((tdd_sfa != 1) && (tdd_sfa != 2) && (tdd_sfa != 4) + && (tdd_sfa != 5)) + return; + break; + case 8: + if ((tdd_sfa != 2) && (tdd_sfa != 3) && (tdd_sfa != 4) + && (tdd_sfa != 5)) + return; + break; + case 9: + if ((tdd_sfa != 1) && (tdd_sfa != 3) && (tdd_sfa != 4) + && (tdd_sfa != 6)) + return; + break; + + } } - } + //weight = get_ue_weight(module_idP,UE_id); + aggregation = 2; + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + N_RB_DL[CC_id] = to_prb(cc[CC_id].mib->message.dl_Bandwidth); + min_rb_unit[CC_id] = get_min_rb_unit(module_idP, CC_id); + // get number of PRBs less those used by common channels + total_nb_available_rb[CC_id] = N_RB_DL[CC_id]; + for (i = 0; i < N_RB_DL[CC_id]; i++) + if (cc[CC_id].vrb_map[i] != 0) + total_nb_available_rb[CC_id]--; - //weight = get_ue_weight(module_idP,UE_id); - aggregation = 2; - for (CC_id=0; CC_idmessage.dl_Bandwidth); - min_rb_unit[CC_id]=get_min_rb_unit(module_idP,CC_id); - // get number of PRBs less those used by common channels - total_nb_available_rb[CC_id] = N_RB_DL[CC_id]; - for (i=0;imessage.dl_Bandwidth); - N_RBG[CC_id] = to_rbg(cc[CC_id].mib->message.dl_Bandwidth); + // store the global enb stats: + eNB->eNB_stats[CC_id].num_dlactive_UEs = UE_list->num_UEs; + eNB->eNB_stats[CC_id].available_prbs = + total_nb_available_rb[CC_id]; + eNB->eNB_stats[CC_id].total_available_prbs += + total_nb_available_rb[CC_id]; + eNB->eNB_stats[CC_id].dlsch_bytes_tx = 0; + eNB->eNB_stats[CC_id].dlsch_pdus_tx = 0; + } - // store the global enb stats: - eNB->eNB_stats[CC_id].num_dlactive_UEs = UE_list->num_UEs; - eNB->eNB_stats[CC_id].available_prbs = total_nb_available_rb[CC_id]; - eNB->eNB_stats[CC_id].total_available_prbs += total_nb_available_rb[CC_id]; - eNB->eNB_stats[CC_id].dlsch_bytes_tx = 0; - eNB->eNB_stats[CC_id].dlsch_pdus_tx = 0; - } + /// CALLING Pre_Processor for downlink scheduling (Returns estimation of RBs required by each UE and the allocation on sub-band) - /// CALLING Pre_Processor for downlink scheduling (Returns estimation of RBs required by each UE and the allocation on sub-band) + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PREPROCESSOR, VCD_FUNCTION_IN); + start_meas(&eNB->schedule_dlsch_preprocessor); + dlsch_scheduler_pre_processor(module_idP, + frameP, subframeP, N_RBG, mbsfn_flag); + stop_meas(&eNB->schedule_dlsch_preprocessor); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PREPROCESSOR, VCD_FUNCTION_OUT); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PREPROCESSOR,VCD_FUNCTION_IN); - start_meas(&eNB->schedule_dlsch_preprocessor); - dlsch_scheduler_pre_processor(module_idP, - frameP, - subframeP, - N_RBG, - mbsfn_flag); - stop_meas(&eNB->schedule_dlsch_preprocessor); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PREPROCESSOR,VCD_FUNCTION_OUT); + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + LOG_D(MAC, "doing schedule_ue_spec for CC_id %d\n", CC_id); - for (CC_id=0; CC_idDL_req[CC_id].dl_config_request_body; - dl_req = &eNB->DL_req[CC_id].dl_config_request_body; + if (mbsfn_flag[CC_id] > 0) + continue; - if (mbsfn_flag[CC_id]>0) - continue; - - for (UE_id=UE_list->head; UE_id>=0; UE_id=UE_list->next[UE_id]) { - continue_flag=0; // reset the flag to allow allocation for the remaining UEs - rnti = UE_RNTI(module_idP,UE_id); - eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id]; - ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + for (UE_id = UE_list->head; UE_id >= 0; + UE_id = UE_list->next[UE_id]) { + continue_flag = 0; // reset the flag to allow allocation for the remaining UEs + rnti = UE_RNTI(module_idP, UE_id); + eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id]; + ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - if (rnti==NOT_A_RNTI) { - LOG_D(MAC,"Cannot find rnti for UE_id %d (num_UEs %d)\n",UE_id,UE_list->num_UEs); - continue_flag=1; - } + if (rnti == NOT_A_RNTI) { + LOG_D(MAC, "Cannot find rnti for UE_id %d (num_UEs %d)\n", + UE_id, UE_list->num_UEs); + continue_flag = 1; + } - if (eNB_UE_stats==NULL) { - LOG_D(MAC,"[eNB] Cannot find eNB_UE_stats\n"); - continue_flag=1; - } + if (eNB_UE_stats == NULL) { + LOG_D(MAC, "[eNB] Cannot find eNB_UE_stats\n"); + continue_flag = 1; + } - if (continue_flag != 1){ - switch(get_tmode(module_idP,CC_id,UE_id)){ - case 1: - case 2: - case 7: - aggregation = get_aggregation(get_bw_index(module_idP,CC_id), + if (continue_flag != 1) { + switch (get_tmode(module_idP, CC_id, UE_id)) { + case 1: + case 2: + case 7: + aggregation = + get_aggregation(get_bw_index(module_idP, CC_id), ue_sched_ctl->dl_cqi[CC_id], format1); - break; - case 3: - aggregation = get_aggregation(get_bw_index(module_idP,CC_id), + break; + case 3: + aggregation = + get_aggregation(get_bw_index(module_idP, CC_id), ue_sched_ctl->dl_cqi[CC_id], format2A); - break; - default: - LOG_W(MAC,"Unsupported transmission mode %d\n", get_tmode(module_idP,CC_id,UE_id)); - aggregation = 2; - } - } /* if (continue_flag != 1 */ + break; + default: + LOG_W(MAC, "Unsupported transmission mode %d\n", + get_tmode(module_idP, CC_id, UE_id)); + aggregation = 2; + } + } + /* if (continue_flag != 1 */ + if ((ue_sched_ctl->pre_nb_available_rbs[CC_id] == 0) || // no RBs allocated + CCE_allocation_infeasible(module_idP, CC_id, 1, subframeP, + aggregation, rnti)) { + LOG_D(MAC, + "[eNB %d] Frame %d : no RB allocated for UE %d on CC_id %d: continue \n", + module_idP, frameP, UE_id, CC_id); + continue_flag = 1; //to next user (there might be rbs availiable for other UEs in TM5 + } - if ((ue_sched_ctl->pre_nb_available_rbs[CC_id] == 0) || // no RBs allocated - CCE_allocation_infeasible(module_idP,CC_id,1,subframeP,aggregation,rnti) - ) { - LOG_D(MAC,"[eNB %d] Frame %d : no RB allocated for UE %d on CC_id %d: continue \n", - module_idP, frameP, UE_id, CC_id); - continue_flag=1; //to next user (there might be rbs availiable for other UEs in TM5 - } - - if (cc[CC_id].tdd_Config != NULL) { //TDD - set_ue_dai (subframeP, - UE_id, - CC_id, - cc[CC_id].tdd_Config->subframeAssignment, - UE_list); - // update UL DAI after DLSCH scheduling - set_ul_DAI(module_idP,UE_id,CC_id,frameP,subframeP); - } - - if (continue_flag == 1 ) { - add_ue_dlsch_info(module_idP, - CC_id, - UE_id, - subframeP, - S_DL_NONE); - continue; - } + if (cc[CC_id].tdd_Config != NULL) { //TDD + set_ue_dai(subframeP, + UE_id, + CC_id, + cc[CC_id].tdd_Config->subframeAssignment, + UE_list); + // update UL DAI after DLSCH scheduling + set_ul_DAI(module_idP, UE_id, CC_id, frameP, subframeP); + } + if (continue_flag == 1) { + add_ue_dlsch_info(module_idP, + CC_id, UE_id, subframeP, S_DL_NONE); + continue; + } #warning RK->CR This old API call has to be revisited for FAPI, or logic must be changed #if 0 - /* add "fake" DCI to have CCE_allocation_infeasible work properly for next allocations */ - /* if we don't add it, next allocations may succeed but overall allocations may fail */ - /* will be removed at the end of this function */ - add_ue_spec_dci(&eNB->common_channels[CC_id].DCI_pdu, - &(char[]){0}, - rnti, - 1, - aggregation, - 1, - format1, - 0); + /* add "fake" DCI to have CCE_allocation_infeasible work properly for next allocations */ + /* if we don't add it, next allocations may succeed but overall allocations may fail */ + /* will be removed at the end of this function */ + add_ue_spec_dci(&eNB->common_channels[CC_id].DCI_pdu, &(char[]) { + 0}, rnti, 1, aggregation, 1, format1, 0); #endif - nb_available_rb = ue_sched_ctl->pre_nb_available_rbs[CC_id]; + nb_available_rb = ue_sched_ctl->pre_nb_available_rbs[CC_id]; - if (cc->tdd_Config) harq_pid = ((frameP*10)+subframeP)%10; - else harq_pid = ((frameP*10)+subframeP)&7; + if (cc->tdd_Config) + harq_pid = ((frameP * 10) + subframeP) % 10; + else + harq_pid = ((frameP * 10) + subframeP) & 7; - round = ue_sched_ctl->round[CC_id][harq_pid]; + round = ue_sched_ctl->round[CC_id][harq_pid]; - UE_list->eNB_UE_stats[CC_id][UE_id].crnti= rnti; - UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status=mac_eNB_get_rrc_status(module_idP,rnti); - UE_list->eNB_UE_stats[CC_id][UE_id].harq_pid = harq_pid; - UE_list->eNB_UE_stats[CC_id][UE_id].harq_round = round; + UE_list->eNB_UE_stats[CC_id][UE_id].crnti = rnti; + UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status = + mac_eNB_get_rrc_status(module_idP, rnti); + UE_list->eNB_UE_stats[CC_id][UE_id].harq_pid = harq_pid; + UE_list->eNB_UE_stats[CC_id][UE_id].harq_round = round; - if (UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status < RRC_CONNECTED) continue; + if (UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status < + RRC_CONNECTED) + continue; - sdu_length_total=0; - num_sdus=0; + sdu_length_total = 0; + num_sdus = 0; - /* - DevCheck(((eNB_UE_stats->dl_cqi < MIN_CQI_VALUE) || (eNB_UE_stats->dl_cqi > MAX_CQI_VALUE)), - eNB_UE_stats->dl_cqi, MIN_CQI_VALUE, MAX_CQI_VALUE); - */ - eNB_UE_stats->dlsch_mcs1 = cqi_to_mcs[ue_sched_ctl->dl_cqi[CC_id]]; - eNB_UE_stats->dlsch_mcs1 = eNB_UE_stats->dlsch_mcs1;//cmin(eNB_UE_stats->dlsch_mcs1, openair_daq_vars.target_ue_dl_mcs); + /* + DevCheck(((eNB_UE_stats->dl_cqi < MIN_CQI_VALUE) || (eNB_UE_stats->dl_cqi > MAX_CQI_VALUE)), + eNB_UE_stats->dl_cqi, MIN_CQI_VALUE, MAX_CQI_VALUE); + */ + eNB_UE_stats->dlsch_mcs1 = + cqi_to_mcs[ue_sched_ctl->dl_cqi[CC_id]]; + eNB_UE_stats->dlsch_mcs1 = eNB_UE_stats->dlsch_mcs1; //cmin(eNB_UE_stats->dlsch_mcs1, openair_daq_vars.target_ue_dl_mcs); - // store stats - //UE_list->eNB_UE_stats[CC_id][UE_id].dl_cqi= eNB_UE_stats->dl_cqi; + // store stats + //UE_list->eNB_UE_stats[CC_id][UE_id].dl_cqi= eNB_UE_stats->dl_cqi; - // initializing the rb allocation indicator for each UE - for(j=0; jUE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = 0; - } - - LOG_D(MAC,"[eNB %d] Frame %d: Scheduling UE %d on CC_id %d (rnti %x, harq_pid %d, round %d, rb %d, cqi %d, mcs %d, rrc %d)\n", - module_idP, frameP, UE_id,CC_id,rnti,harq_pid, round,nb_available_rb, - ue_sched_ctl->dl_cqi[CC_id], eNB_UE_stats->dlsch_mcs1, - UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status); - - - - /* process retransmission */ - - if (round != 8) { - - // get freq_allocation - nb_rb = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid]; - TBS = get_TBS_DL(UE_list->UE_template[CC_id][UE_id].oldmcs1[harq_pid],nb_rb); - - if (nb_rb <= nb_available_rb) { - if (cc[CC_id].tdd_Config != NULL) { - UE_list->UE_template[CC_id][UE_id].DAI++; - update_ul_dci(module_idP,CC_id,rnti,UE_list->UE_template[CC_id][UE_id].DAI); - LOG_D(MAC,"DAI update: CC_id %d subframeP %d: UE %d, DAI %d\n", CC_id,subframeP,UE_id,UE_list->UE_template[CC_id][UE_id].DAI); - } - - if(nb_rb == ue_sched_ctl->pre_nb_available_rbs[CC_id]) { - for(j=0; jUE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = ue_sched_ctl->rballoc_sub_UE[CC_id][j]; - } - } else { - nb_rb_temp = nb_rb; - j = 0; - - while((nb_rb_temp > 0) && (jrballoc_sub_UE[CC_id][j] == 1) { - if (UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j]) printf("WARN: rballoc_subband not free for retrans?\n"); - UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = ue_sched_ctl->rballoc_sub_UE[CC_id][j]; - - if((j == N_RBG[CC_id]-1) && - ((N_RB_DL[CC_id] == 25)|| - (N_RB_DL[CC_id] == 50))) { - nb_rb_temp = nb_rb_temp - min_rb_unit[CC_id]+1; - } else { - nb_rb_temp = nb_rb_temp - min_rb_unit[CC_id]; - } - } - - j = j+1; - } - } - - nb_available_rb -= nb_rb; - /* - eNB->mu_mimo_mode[UE_id].pre_nb_available_rbs = nb_rb; - eNB->mu_mimo_mode[UE_id].dl_pow_off = ue_sched_ctl->dl_pow_off[CC_id]; - - for(j=0; jmu_mimo_mode[UE_id].rballoc_sub[j] = UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j]; - } - */ - - switch (get_tmode(module_idP,CC_id,UE_id)) { - case 1: - case 2: - case 7: - default: - dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; - memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; - dl_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_dl_config_dci_dl_pdu)); - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format = NFAPI_DL_DCI_FORMAT_1; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level = get_aggregation(get_bw_index(module_idP,CC_id),ue_sched_ctl->dl_cqi[CC_id],format1); - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = rnti; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = 1; // CRNTI : see Table 4-10 from SCF082 - nFAPI specifications - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000; // equal to RS power - - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process = harq_pid; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc = 1; // dont adjust power when retransmitting - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1 = UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1 = UE_list->UE_template[CC_id][UE_id].oldmcs1[harq_pid]; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1 = round&3; - - if (cc[CC_id].tdd_Config != NULL) { //TDD - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.downlink_assignment_index = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; - LOG_D(MAC,"[eNB %d] Retransmission CC_id %d : harq_pid %d, round %d, dai %d, mcs %d\n", - module_idP,CC_id,harq_pid,round, - (UE_list->UE_template[CC_id][UE_id].DAI-1), - UE_list->UE_template[CC_id][UE_id].oldmcs1[harq_pid]); - } else { - LOG_D(MAC,"[eNB %d] Retransmission CC_id %d : harq_pid %d, round %d, mcs %d\n", - module_idP,CC_id,harq_pid,round, - UE_list->UE_template[CC_id][UE_id].oldmcs1[harq_pid]); - + // initializing the rb allocation indicator for each UE + for (j = 0; j < N_RBG[CC_id]; j++) { + UE_list-> + UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] + = 0; } - if (!CCE_allocation_infeasible(module_idP,CC_id,1,subframeP, - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, - rnti)) { - dl_req->number_dci++; - dl_req->number_pdu++; - fill_nfapi_dlsch_config(eNB,dl_req, - TBS, - -1 /* retransmission, no pdu_index */, - rnti, - 0, // type 0 allocation from 7.1.6 in 36.213 - 0, // virtual_resource_block_assignment_flag, unused here - 0, // resource_block_coding, to be filled in later - getQm(UE_list->UE_template[CC_id][UE_id].oldmcs1[harq_pid]), - round&3 , // redundancy version - 1, // transport blocks - 0, // transport block to codeword swap flag - cc[CC_id].p_eNB == 1 ? 0 : 1, // transmission_scheme - 1, // number of layers - 1, // number of subbands - // uint8_t codebook_index, - 4, // UE category capacity - UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->pdsch_ConfigDedicated->p_a, - 0, // delta_power_offset for TM5 - 0, // ngap - 0, // nprb - cc[CC_id].p_eNB == 1 ? 1 : 2, // transmission mode - 0, //number of PRBs treated as one subband, not used here - 0 // number of beamforming vectors, not used here - ); - - LOG_D(MAC,"Filled NFAPI configuration for DCI/DLSCH %d, retransmission round %d\n",eNB->pdu_index[CC_id],round); - - program_dlsch_acknak(module_idP,CC_id,UE_id,frameP,subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.cce_idx); - // No TX request for retransmission (check if null request for FAPI) - } - else { - LOG_W(MAC,"Frame %d, Subframe %d: Dropping DLSCH allocation for UE %d\%x, infeasible CCE allocation\n", - frameP,subframeP,UE_id,rnti); - } - } + LOG_D(MAC, + "[eNB %d] Frame %d: Scheduling UE %d on CC_id %d (rnti %x, harq_pid %d, round %d, rb %d, cqi %d, mcs %d, rrc %d)\n", + module_idP, frameP, UE_id, CC_id, rnti, harq_pid, round, + nb_available_rb, ue_sched_ctl->dl_cqi[CC_id], + eNB_UE_stats->dlsch_mcs1, + UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status); - add_ue_dlsch_info(module_idP, - CC_id, - UE_id, - subframeP, - S_DL_SCHEDULED); - - //eNB_UE_stats->dlsch_trials[round]++; - UE_list->eNB_UE_stats[CC_id][UE_id].num_retransmission+=1; - UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used_retx=nb_rb; - UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_retx+=nb_rb; - UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs1=eNB_UE_stats->dlsch_mcs1; - UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs2=eNB_UE_stats->dlsch_mcs1; - } else { - LOG_D(MAC,"[eNB %d] Frame %d CC_id %d : don't schedule UE %d, its retransmission takes more resources than we have\n", - module_idP, frameP, CC_id, UE_id); - } - } else { /* This is a potentially new SDU opportunity */ - - rlc_status.bytes_in_buffer = 0; - // Now check RLC information to compute number of required RBs - // get maximum TBS size for RLC request - TBS = get_TBS_DL(eNB_UE_stats->dlsch_mcs1,nb_available_rb); - // check first for RLC data on DCCH - // add the length for all the control elements (timing adv, drx, etc) : header + payload - if (ue_sched_ctl->ta_timer == 0) { - ta_update = ue_sched_ctl->ta_update; - /* if we send TA then set timer to not send it for a while */ - if (ta_update != 31) - ue_sched_ctl->ta_timer = 20; - /* reset ta_update */ - ue_sched_ctl->ta_update = 31; - } else { - ta_update = 31; - } + /* process retransmission */ - ta_len = (ta_update != 31) ? 2 : 0; + if (round != 8) { - header_len_dcch = 2; // 2 bytes DCCH SDU subheader + // get freq_allocation + nb_rb = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid]; + TBS = + get_TBS_DL(UE_list-> + UE_template[CC_id][UE_id].oldmcs1[harq_pid], + nb_rb); - if ( TBS-ta_len-header_len_dcch > 0 ) { - rlc_status = mac_rlc_status_ind( - module_idP, - rnti, - module_idP, - frameP, - subframeP, - ENB_FLAG_YES, - MBMS_FLAG_NO, - DCCH, - (TBS-ta_len-header_len_dcch)); // transport block set size + if (nb_rb <= nb_available_rb) { + if (cc[CC_id].tdd_Config != NULL) { + UE_list->UE_template[CC_id][UE_id].DAI++; + update_ul_dci(module_idP, CC_id, rnti, + UE_list->UE_template[CC_id][UE_id]. + DAI); + LOG_D(MAC, + "DAI update: CC_id %d subframeP %d: UE %d, DAI %d\n", + CC_id, subframeP, UE_id, + UE_list->UE_template[CC_id][UE_id].DAI); + } - sdu_lengths[0]=0; + if (nb_rb == ue_sched_ctl->pre_nb_available_rbs[CC_id]) { + for (j = 0; j < N_RBG[CC_id]; j++) { // for indicating the rballoc for each sub-band + UE_list->UE_template[CC_id][UE_id]. + rballoc_subband[harq_pid][j] = + ue_sched_ctl->rballoc_sub_UE[CC_id][j]; + } + } else { + nb_rb_temp = nb_rb; + j = 0; - if (rlc_status.bytes_in_buffer > 0) { // There is DCCH to transmit - LOG_D(MAC,"[eNB %d] Frame %d, DL-DCCH->DLSCH CC_id %d, Requesting %d bytes from RLC (RRC message)\n", - module_idP,frameP,CC_id,TBS-header_len_dcch); - sdu_lengths[0] = mac_rlc_data_req( - module_idP, - rnti, - module_idP, - frameP, - ENB_FLAG_YES, - MBMS_FLAG_NO, - DCCH, - TBS, //not used - (char *)&dlsch_buffer[0]); + while ((nb_rb_temp > 0) && (j < N_RBG[CC_id])) { + if (ue_sched_ctl->rballoc_sub_UE[CC_id][j] == + 1) { + if (UE_list-> + UE_template[CC_id] + [UE_id].rballoc_subband[harq_pid][j]) + printf + ("WARN: rballoc_subband not free for retrans?\n"); + UE_list-> + UE_template[CC_id] + [UE_id].rballoc_subband[harq_pid][j] = + ue_sched_ctl->rballoc_sub_UE[CC_id][j]; - T(T_ENB_MAC_UE_DL_SDU, T_INT(module_idP), T_INT(CC_id), T_INT(rnti), T_INT(frameP), T_INT(subframeP), - T_INT(harq_pid), T_INT(DCCH), T_INT(sdu_lengths[0])); + if ((j == N_RBG[CC_id] - 1) && + ((N_RB_DL[CC_id] == 25) || + (N_RB_DL[CC_id] == 50))) { + nb_rb_temp = + nb_rb_temp - min_rb_unit[CC_id] + + 1; + } else { + nb_rb_temp = + nb_rb_temp - min_rb_unit[CC_id]; + } + } - LOG_D(MAC,"[eNB %d][DCCH] CC_id %d Got %d bytes from RLC\n",module_idP,CC_id,sdu_lengths[0]); - sdu_length_total = sdu_lengths[0]; - sdu_lcids[0] = DCCH; - UE_list->eNB_UE_stats[CC_id][UE_id].num_pdu_tx[DCCH]+=1; - UE_list->eNB_UE_stats[CC_id][UE_id].num_bytes_tx[DCCH]+=sdu_lengths[0]; - num_sdus = 1; + j = j + 1; + } + } + + nb_available_rb -= nb_rb; + /* + eNB->mu_mimo_mode[UE_id].pre_nb_available_rbs = nb_rb; + eNB->mu_mimo_mode[UE_id].dl_pow_off = ue_sched_ctl->dl_pow_off[CC_id]; + + for(j=0; jmu_mimo_mode[UE_id].rballoc_sub[j] = UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j]; + } + */ + + switch (get_tmode(module_idP, CC_id, UE_id)) { + case 1: + case 2: + case 7: + default: + dl_config_pdu = + &dl_req->dl_config_pdu_list[dl_req-> + number_pdu]; + memset((void *) dl_config_pdu, 0, + sizeof(nfapi_dl_config_request_pdu_t)); + dl_config_pdu->pdu_type = + NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; + dl_config_pdu->pdu_size = + (uint8_t) (2 + + sizeof(nfapi_dl_config_dci_dl_pdu)); + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + dci_format = NFAPI_DL_DCI_FORMAT_1; + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.aggregation_level = + get_aggregation(get_bw_index + (module_idP, CC_id), + ue_sched_ctl->dl_cqi[CC_id], + format1); + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = + rnti; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = 1; // CRNTI : see Table 4-10 from SCF082 - nFAPI specifications + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000; // equal to RS power + + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + harq_process = harq_pid; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc = 1; // dont adjust power when retransmitting + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.new_data_indicator_1 = + UE_list->UE_template[CC_id][UE_id]. + oldNDI[harq_pid]; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1 = + UE_list->UE_template[CC_id][UE_id]. + oldmcs1[harq_pid]; + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.redundancy_version_1 = + round & 3; + + if (cc[CC_id].tdd_Config != NULL) { //TDD + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.downlink_assignment_index = + (UE_list->UE_template[CC_id][UE_id].DAI - + 1) & 3; + LOG_D(MAC, + "[eNB %d] Retransmission CC_id %d : harq_pid %d, round %d, dai %d, mcs %d\n", + module_idP, CC_id, harq_pid, round, + (UE_list->UE_template[CC_id][UE_id].DAI - + 1), + UE_list-> + UE_template[CC_id][UE_id].oldmcs1 + [harq_pid]); + } else { + LOG_D(MAC, + "[eNB %d] Retransmission CC_id %d : harq_pid %d, round %d, mcs %d\n", + module_idP, CC_id, harq_pid, round, + UE_list-> + UE_template[CC_id][UE_id].oldmcs1 + [harq_pid]); + + } + if (!CCE_allocation_infeasible + (module_idP, CC_id, 1, subframeP, + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.aggregation_level, rnti)) { + dl_req->number_dci++; + dl_req->number_pdu++; + + fill_nfapi_dlsch_config(eNB, dl_req, TBS, -1 + /* retransmission, no pdu_index */ + , rnti, 0, // type 0 allocation from 7.1.6 in 36.213 + 0, // virtual_resource_block_assignment_flag, unused here + 0, // resource_block_coding, to be filled in later + getQm(UE_list->UE_template[CC_id][UE_id].oldmcs1[harq_pid]), round & 3, // redundancy version + 1, // transport blocks + 0, // transport block to codeword swap flag + cc[CC_id].p_eNB == 1 ? 0 : 1, // transmission_scheme + 1, // number of layers + 1, // number of subbands + // uint8_t codebook_index, + 4, // UE category capacity + UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->pdsch_ConfigDedicated->p_a, 0, // delta_power_offset for TM5 + 0, // ngap + 0, // nprb + cc[CC_id].p_eNB == 1 ? 1 : 2, // transmission mode + 0, //number of PRBs treated as one subband, not used here + 0 // number of beamforming vectors, not used here + ); + + LOG_D(MAC, + "Filled NFAPI configuration for DCI/DLSCH %d, retransmission round %d\n", + eNB->pdu_index[CC_id], round); + + program_dlsch_acknak(module_idP, CC_id, UE_id, + frameP, subframeP, + dl_config_pdu-> + dci_dl_pdu.dci_dl_pdu_rel8. + cce_idx); + // No TX request for retransmission (check if null request for FAPI) + } else { + LOG_W(MAC, + "Frame %d, Subframe %d: Dropping DLSCH allocation for UE %d\%x, infeasible CCE allocation\n", + frameP, subframeP, UE_id, rnti); + } + } + + + add_ue_dlsch_info(module_idP, + CC_id, UE_id, subframeP, + S_DL_SCHEDULED); + + //eNB_UE_stats->dlsch_trials[round]++; + UE_list->eNB_UE_stats[CC_id][UE_id]. + num_retransmission += 1; + UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used_retx = + nb_rb; + UE_list->eNB_UE_stats[CC_id][UE_id]. + total_rbs_used_retx += nb_rb; + UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs1 = + eNB_UE_stats->dlsch_mcs1; + UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs2 = + eNB_UE_stats->dlsch_mcs1; + } else { + LOG_D(MAC, + "[eNB %d] Frame %d CC_id %d : don't schedule UE %d, its retransmission takes more resources than we have\n", + module_idP, frameP, CC_id, UE_id); + } + } else { /* This is a potentially new SDU opportunity */ + + rlc_status.bytes_in_buffer = 0; + // Now check RLC information to compute number of required RBs + // get maximum TBS size for RLC request + TBS = + get_TBS_DL(eNB_UE_stats->dlsch_mcs1, nb_available_rb); + // check first for RLC data on DCCH + // add the length for all the control elements (timing adv, drx, etc) : header + payload + + if (ue_sched_ctl->ta_timer == 0) { + ta_update = ue_sched_ctl->ta_update; + /* if we send TA then set timer to not send it for a while */ + if (ta_update != 31) + ue_sched_ctl->ta_timer = 20; + /* reset ta_update */ + ue_sched_ctl->ta_update = 31; + } else { + ta_update = 31; + } + + ta_len = (ta_update != 31) ? 2 : 0; + + header_len_dcch = 2; // 2 bytes DCCH SDU subheader + + if (TBS - ta_len - header_len_dcch > 0) { + rlc_status = mac_rlc_status_ind(module_idP, rnti, module_idP, frameP, subframeP, ENB_FLAG_YES, MBMS_FLAG_NO, DCCH, (TBS - ta_len - header_len_dcch)); // transport block set size + + sdu_lengths[0] = 0; + + if (rlc_status.bytes_in_buffer > 0) { // There is DCCH to transmit + LOG_D(MAC, + "[eNB %d] Frame %d, DL-DCCH->DLSCH CC_id %d, Requesting %d bytes from RLC (RRC message)\n", + module_idP, frameP, CC_id, + TBS - header_len_dcch); + sdu_lengths[0] = mac_rlc_data_req(module_idP, rnti, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_NO, DCCH, TBS, //not used + (char *) + &dlsch_buffer + [0]); + + T(T_ENB_MAC_UE_DL_SDU, T_INT(module_idP), + T_INT(CC_id), T_INT(rnti), T_INT(frameP), + T_INT(subframeP), T_INT(harq_pid), T_INT(DCCH), + T_INT(sdu_lengths[0])); + + LOG_D(MAC, + "[eNB %d][DCCH] CC_id %d Got %d bytes from RLC\n", + module_idP, CC_id, sdu_lengths[0]); + sdu_length_total = sdu_lengths[0]; + sdu_lcids[0] = DCCH; + UE_list->eNB_UE_stats[CC_id][UE_id]. + num_pdu_tx[DCCH] += 1; + UE_list-> + eNB_UE_stats[CC_id][UE_id].num_bytes_tx[DCCH] + += sdu_lengths[0]; + num_sdus = 1; #ifdef DEBUG_eNB_SCHEDULER - LOG_T(MAC,"[eNB %d][DCCH] CC_id %d Got %d bytes :",module_idP,CC_id,sdu_lengths[0]); + LOG_T(MAC, + "[eNB %d][DCCH] CC_id %d Got %d bytes :", + module_idP, CC_id, sdu_lengths[0]); - for (j=0; j 0 ) { - rlc_status = mac_rlc_status_ind( - module_idP, - rnti, - module_idP, - frameP, - subframeP, - ENB_FLAG_YES, - MBMS_FLAG_NO, - DCCH+1, - (TBS-ta_len-header_len_dcch-sdu_length_total)); // transport block set size less allocations for timing advance and - // DCCH SDU - sdu_lengths[num_sdus] = 0; + } else { + header_len_dcch = 0; + sdu_length_total = 0; + } + } + // check for DCCH1 and update header information (assume 2 byte sub-header) + if (TBS - ta_len - header_len_dcch - sdu_length_total > 0) { + rlc_status = mac_rlc_status_ind(module_idP, rnti, module_idP, frameP, subframeP, ENB_FLAG_YES, MBMS_FLAG_NO, DCCH + 1, (TBS - ta_len - header_len_dcch - sdu_length_total)); // transport block set size less allocations for timing advance and + // DCCH SDU + sdu_lengths[num_sdus] = 0; - if (rlc_status.bytes_in_buffer > 0) { - LOG_D(MAC,"[eNB %d], Frame %d, DCCH1->DLSCH, CC_id %d, Requesting %d bytes from RLC (RRC message)\n", - module_idP,frameP,CC_id,TBS-header_len_dcch-sdu_length_total); - sdu_lengths[num_sdus] += mac_rlc_data_req( - module_idP, - rnti, - module_idP, - frameP, - ENB_FLAG_YES, - MBMS_FLAG_NO, - DCCH+1, - TBS, //not used - (char *)&dlsch_buffer[sdu_length_total]); + if (rlc_status.bytes_in_buffer > 0) { + LOG_D(MAC, + "[eNB %d], Frame %d, DCCH1->DLSCH, CC_id %d, Requesting %d bytes from RLC (RRC message)\n", + module_idP, frameP, CC_id, + TBS - header_len_dcch - sdu_length_total); + sdu_lengths[num_sdus] += mac_rlc_data_req(module_idP, rnti, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_NO, DCCH + 1, TBS, //not used + (char *) + &dlsch_buffer + [sdu_length_total]); - T(T_ENB_MAC_UE_DL_SDU, T_INT(module_idP), T_INT(CC_id), T_INT(rnti), T_INT(frameP), T_INT(subframeP), - T_INT(harq_pid), T_INT(DCCH+1), T_INT(sdu_lengths[num_sdus])); + T(T_ENB_MAC_UE_DL_SDU, T_INT(module_idP), + T_INT(CC_id), T_INT(rnti), T_INT(frameP), + T_INT(subframeP), T_INT(harq_pid), + T_INT(DCCH + 1), T_INT(sdu_lengths[num_sdus])); - sdu_lcids[num_sdus] = DCCH1; - sdu_length_total += sdu_lengths[num_sdus]; - header_len_dcch += 2; - UE_list->eNB_UE_stats[CC_id][UE_id].num_pdu_tx[DCCH1]+=1; - UE_list->eNB_UE_stats[CC_id][UE_id].num_bytes_tx[DCCH1]+=sdu_lengths[num_sdus]; - num_sdus++; + sdu_lcids[num_sdus] = DCCH1; + sdu_length_total += sdu_lengths[num_sdus]; + header_len_dcch += 2; + UE_list->eNB_UE_stats[CC_id][UE_id]. + num_pdu_tx[DCCH1] += 1; + UE_list-> + eNB_UE_stats[CC_id][UE_id].num_bytes_tx[DCCH1] + += sdu_lengths[num_sdus]; + num_sdus++; #ifdef DEBUG_eNB_SCHEDULER - LOG_T(MAC,"[eNB %d][DCCH1] CC_id %d Got %d bytes :",module_idP,CC_id,sdu_lengths[num_sdus]); + LOG_T(MAC, + "[eNB %d][DCCH1] CC_id %d Got %d bytes :", + module_idP, CC_id, sdu_lengths[num_sdus]); - for (j=0; j= DTCH; lcid--) { + // TBD: check if the lcid is active - // assume the max dtch header size, and adjust it later - header_len_dtch=0; - header_len_dtch_last=0; // the header length of the last mac sdu - // lcid has to be sorted before the actual allocation (similar struct as ue_list). - for (lcid=NB_RB_MAX-1; lcid>=DTCH ; lcid--){ - // TBD: check if the lcid is active - - header_len_dtch+=3; - header_len_dtch_last=3; - LOG_D(MAC,"[eNB %d], Frame %d, DTCH%d->DLSCH, Checking RLC status (tbs %d, len %d)\n", - module_idP,frameP,lcid,TBS, - TBS-ta_len-header_len_dcch-sdu_length_total-header_len_dtch); - - if (TBS-ta_len-header_len_dcch-sdu_length_total-header_len_dtch > 0 ) { // NN: > 2 ? - rlc_status = mac_rlc_status_ind(module_idP, - rnti, - module_idP, - frameP, - subframeP, - ENB_FLAG_YES, - MBMS_FLAG_NO, - lcid, - TBS-ta_len-header_len_dcch-sdu_length_total-header_len_dtch); - + header_len_dtch += 3; + header_len_dtch_last = 3; + LOG_D(MAC, + "[eNB %d], Frame %d, DTCH%d->DLSCH, Checking RLC status (tbs %d, len %d)\n", + module_idP, frameP, lcid, TBS, + TBS - ta_len - header_len_dcch - + sdu_length_total - header_len_dtch); - if (rlc_status.bytes_in_buffer > 0) { - - LOG_D(MAC,"[eNB %d][USER-PLANE DEFAULT DRB] Frame %d : DTCH->DLSCH, Requesting %d bytes from RLC (lcid %d total hdr len %d)\n", - module_idP,frameP,TBS-header_len_dcch-sdu_length_total-header_len_dtch,lcid, header_len_dtch); - sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, - rnti, - module_idP, - frameP, - ENB_FLAG_YES, - MBMS_FLAG_NO, - lcid, - TBS, //not used - (char*)&dlsch_buffer[sdu_length_total]); - T(T_ENB_MAC_UE_DL_SDU, T_INT(module_idP), T_INT(CC_id), T_INT(rnti), T_INT(frameP), T_INT(subframeP), - T_INT(harq_pid), T_INT(lcid), T_INT(sdu_lengths[num_sdus])); + if (TBS - ta_len - header_len_dcch - sdu_length_total - header_len_dtch > 0) { // NN: > 2 ? + rlc_status = mac_rlc_status_ind(module_idP, + rnti, + module_idP, + frameP, + subframeP, + ENB_FLAG_YES, + MBMS_FLAG_NO, + lcid, + TBS - ta_len - + header_len_dcch - + sdu_length_total - + header_len_dtch); - LOG_D(MAC,"[eNB %d][USER-PLANE DEFAULT DRB] Got %d bytes for DTCH %d \n",module_idP,sdu_lengths[num_sdus],lcid); - sdu_lcids[num_sdus] = lcid; - sdu_length_total += sdu_lengths[num_sdus]; - UE_list->eNB_UE_stats[CC_id][UE_id].num_pdu_tx[lcid]+=1; - UE_list->eNB_UE_stats[CC_id][UE_id].num_bytes_tx[lcid]+=sdu_lengths[num_sdus]; - if (sdu_lengths[num_sdus] < 128) { - header_len_dtch--; - header_len_dtch_last--; - } - num_sdus++; - } // no data for this LCID - else { - header_len_dtch-=3; - } - } // no TBS left - else { - header_len_dtch-=3; - break; - } - } - if (header_len_dtch == 0 ) - header_len_dtch_last= 0; - // there is at least one SDU - // if (num_sdus > 0 ){ - if ((sdu_length_total + header_len_dcch + header_len_dtch )> 0) { - - // Now compute number of required RBs for total sdu length - // Assume RAH format 2 - // adjust header lengths - header_len_dcch_tmp = header_len_dcch; - header_len_dtch_tmp = header_len_dtch; - if (header_len_dtch==0) { - header_len_dcch = (header_len_dcch >0) ? 1 : 0;//header_len_dcch; // remove length field - } else { - header_len_dtch_last-=1; // now use it to find how many bytes has to be removed for the last MAC SDU - header_len_dtch = (header_len_dtch > 0) ? header_len_dtch - header_len_dtch_last :header_len_dtch; // remove length field for the last SDU - } - mcs = eNB_UE_stats->dlsch_mcs1; + if (rlc_status.bytes_in_buffer > 0) { - if (mcs==0) { - nb_rb = 4; // don't let the TBS get too small - } else { - nb_rb=min_rb_unit[CC_id]; - } + LOG_D(MAC, + "[eNB %d][USER-PLANE DEFAULT DRB] Frame %d : DTCH->DLSCH, Requesting %d bytes from RLC (lcid %d total hdr len %d)\n", + module_idP, frameP, + TBS - header_len_dcch - + sdu_length_total - header_len_dtch, lcid, + header_len_dtch); + sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, rnti, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_NO, lcid, TBS, //not used + (char + *) + &dlsch_buffer + [sdu_length_total]); + T(T_ENB_MAC_UE_DL_SDU, T_INT(module_idP), + T_INT(CC_id), T_INT(rnti), T_INT(frameP), + T_INT(subframeP), T_INT(harq_pid), + T_INT(lcid), T_INT(sdu_lengths[num_sdus])); - TBS = get_TBS_DL(mcs,nb_rb); + LOG_D(MAC, + "[eNB %d][USER-PLANE DEFAULT DRB] Got %d bytes for DTCH %d \n", + module_idP, sdu_lengths[num_sdus], lcid); + sdu_lcids[num_sdus] = lcid; + sdu_length_total += sdu_lengths[num_sdus]; + UE_list-> + eNB_UE_stats[CC_id][UE_id].num_pdu_tx[lcid] + += 1; + UE_list-> + eNB_UE_stats[CC_id][UE_id].num_bytes_tx + [lcid] += sdu_lengths[num_sdus]; + if (sdu_lengths[num_sdus] < 128) { + header_len_dtch--; + header_len_dtch_last--; + } + num_sdus++; + } // no data for this LCID + else { + header_len_dtch -= 3; + } + } // no TBS left + else { + header_len_dtch -= 3; + break; + } + } + if (header_len_dtch == 0) + header_len_dtch_last = 0; + // there is at least one SDU + // if (num_sdus > 0 ){ + if ((sdu_length_total + header_len_dcch + + header_len_dtch) > 0) { - while (TBS < (sdu_length_total + header_len_dcch + header_len_dtch + ta_len)) { - nb_rb += min_rb_unit[CC_id]; // + // Now compute number of required RBs for total sdu length + // Assume RAH format 2 + // adjust header lengths + header_len_dcch_tmp = header_len_dcch; + header_len_dtch_tmp = header_len_dtch; + if (header_len_dtch == 0) { + header_len_dcch = (header_len_dcch > 0) ? 1 : 0; //header_len_dcch; // remove length field + } else { + header_len_dtch_last -= 1; // now use it to find how many bytes has to be removed for the last MAC SDU + header_len_dtch = (header_len_dtch > 0) ? header_len_dtch - header_len_dtch_last : header_len_dtch; // remove length field for the last SDU + } - if (nb_rb>nb_available_rb) { // if we've gone beyond the maximum number of RBs - // (can happen if N_RB_DL is odd) - TBS = get_TBS_DL(eNB_UE_stats->dlsch_mcs1,nb_available_rb); - nb_rb = nb_available_rb; - break; - } + mcs = eNB_UE_stats->dlsch_mcs1; - TBS = get_TBS_DL(eNB_UE_stats->dlsch_mcs1,nb_rb); - } + if (mcs == 0) { + nb_rb = 4; // don't let the TBS get too small + } else { + nb_rb = min_rb_unit[CC_id]; + } - if(nb_rb == ue_sched_ctl->pre_nb_available_rbs[CC_id]) { - for(j=0; jUE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = ue_sched_ctl->rballoc_sub_UE[CC_id][j]; - } - } else { - nb_rb_temp = nb_rb; - j = 0; + TBS = get_TBS_DL(mcs, nb_rb); - while((nb_rb_temp > 0) && (jrballoc_sub_UE[CC_id][j] == 1) { - UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = ue_sched_ctl->rballoc_sub_UE[CC_id][j]; + while (TBS < + (sdu_length_total + header_len_dcch + + header_len_dtch + ta_len)) { + nb_rb += min_rb_unit[CC_id]; // - if ((j == N_RBG[CC_id]-1) && - ((N_RB_DL[CC_id] == 25)|| - (N_RB_DL[CC_id] == 50))) { - nb_rb_temp = nb_rb_temp - min_rb_unit[CC_id]+1; - } else { - nb_rb_temp = nb_rb_temp - min_rb_unit[CC_id]; - } - } + if (nb_rb > nb_available_rb) { // if we've gone beyond the maximum number of RBs + // (can happen if N_RB_DL is odd) + TBS = + get_TBS_DL(eNB_UE_stats->dlsch_mcs1, + nb_available_rb); + nb_rb = nb_available_rb; + break; + } - j = j+1; - } - } + TBS = get_TBS_DL(eNB_UE_stats->dlsch_mcs1, nb_rb); + } - // decrease mcs until TBS falls below required length - while ((TBS > (sdu_length_total + header_len_dcch + header_len_dtch + ta_len)) && (mcs>0)) { - mcs--; - TBS = get_TBS_DL(mcs,nb_rb); - } + if (nb_rb == ue_sched_ctl->pre_nb_available_rbs[CC_id]) { + for (j = 0; j < N_RBG[CC_id]; j++) { // for indicating the rballoc for each sub-band + UE_list->UE_template[CC_id][UE_id]. + rballoc_subband[harq_pid][j] = + ue_sched_ctl->rballoc_sub_UE[CC_id][j]; + } + } else { + nb_rb_temp = nb_rb; + j = 0; - // if we have decreased too much or we don't have enough RBs, increase MCS - while ((TBS < (sdu_length_total + header_len_dcch + header_len_dtch + ta_len)) && ((( ue_sched_ctl->dl_pow_off[CC_id]>0) && (mcs<28)) - || ( (ue_sched_ctl->dl_pow_off[CC_id]==0) && (mcs<=15)))) { - mcs++; - TBS = get_TBS_DL(mcs,nb_rb); - } + while ((nb_rb_temp > 0) && (j < N_RBG[CC_id])) { + if (ue_sched_ctl->rballoc_sub_UE[CC_id][j] == + 1) { + UE_list-> + UE_template[CC_id] + [UE_id].rballoc_subband[harq_pid][j] = + ue_sched_ctl->rballoc_sub_UE[CC_id][j]; - LOG_D(MAC,"dlsch_mcs before and after the rate matching = (%d, %d)\n",eNB_UE_stats->dlsch_mcs1, mcs); + if ((j == N_RBG[CC_id] - 1) && + ((N_RB_DL[CC_id] == 25) || + (N_RB_DL[CC_id] == 50))) { + nb_rb_temp = + nb_rb_temp - min_rb_unit[CC_id] + + 1; + } else { + nb_rb_temp = + nb_rb_temp - min_rb_unit[CC_id]; + } + } + + j = j + 1; + } + } + + // decrease mcs until TBS falls below required length + while ((TBS > + (sdu_length_total + header_len_dcch + + header_len_dtch + ta_len)) && (mcs > 0)) { + mcs--; + TBS = get_TBS_DL(mcs, nb_rb); + } + + // if we have decreased too much or we don't have enough RBs, increase MCS + while ((TBS < + (sdu_length_total + header_len_dcch + + header_len_dtch + ta_len)) + && (((ue_sched_ctl->dl_pow_off[CC_id] > 0) + && (mcs < 28)) + || ((ue_sched_ctl->dl_pow_off[CC_id] == 0) + && (mcs <= 15)))) { + mcs++; + TBS = get_TBS_DL(mcs, nb_rb); + } + + LOG_D(MAC, + "dlsch_mcs before and after the rate matching = (%d, %d)\n", + eNB_UE_stats->dlsch_mcs1, mcs); #ifdef DEBUG_eNB_SCHEDULER - LOG_D(MAC,"[eNB %d] CC_id %d Generated DLSCH header (mcs %d, TBS %d, nb_rb %d)\n", - module_idP,CC_id,mcs,TBS,nb_rb); - // msg("[MAC][eNB ] Reminder of DLSCH with random data %d %d %d %d \n", - // TBS, sdu_length_total, offset, TBS-sdu_length_total-offset); + LOG_D(MAC, + "[eNB %d] CC_id %d Generated DLSCH header (mcs %d, TBS %d, nb_rb %d)\n", + module_idP, CC_id, mcs, TBS, nb_rb); + // msg("[MAC][eNB ] Reminder of DLSCH with random data %d %d %d %d \n", + // TBS, sdu_length_total, offset, TBS-sdu_length_total-offset); #endif - if ((TBS - header_len_dcch - header_len_dtch - sdu_length_total - ta_len) <= 2) { - padding = (TBS - header_len_dcch - header_len_dtch - sdu_length_total - ta_len); - post_padding = 0; - } else { - padding = 0; + if ((TBS - header_len_dcch - header_len_dtch - + sdu_length_total - ta_len) <= 2) { + padding = + (TBS - header_len_dcch - header_len_dtch - + sdu_length_total - ta_len); + post_padding = 0; + } else { + padding = 0; - // adjust the header len - if (header_len_dtch==0) { - header_len_dcch = header_len_dcch_tmp; - } else { //if (( header_len_dcch==0)&&((header_len_dtch==1)||(header_len_dtch==2))) - header_len_dtch = header_len_dtch_tmp; - } + // adjust the header len + if (header_len_dtch == 0) { + header_len_dcch = header_len_dcch_tmp; + } else { //if (( header_len_dcch==0)&&((header_len_dtch==1)||(header_len_dtch==2))) + header_len_dtch = header_len_dtch_tmp; + } - post_padding = TBS - sdu_length_total - header_len_dcch - header_len_dtch - ta_len ; // 1 is for the postpadding header - } + post_padding = TBS - sdu_length_total - header_len_dcch - header_len_dtch - ta_len; // 1 is for the postpadding header + } - offset = generate_dlsch_header((unsigned char*)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0], - num_sdus, //num_sdus - sdu_lengths, // - sdu_lcids, - 255, // no drx - ta_update, // timing advance - NULL, // contention res id - padding, - post_padding); + offset = generate_dlsch_header((unsigned char *) UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0], num_sdus, //num_sdus + sdu_lengths, // + sdu_lcids, 255, // no drx + ta_update, // timing advance + NULL, // contention res id + padding, post_padding); - //#ifdef DEBUG_eNB_SCHEDULER - if (ta_update != 31) { - LOG_D(MAC, - "[eNB %d][DLSCH] Frame %d Generate header for UE_id %d on CC_id %d: sdu_length_total %d, num_sdus %d, sdu_lengths[0] %d, sdu_lcids[0] %d => payload offset %d,timing advance value : %d, padding %d,post_padding %d,(mcs %d, TBS %d, nb_rb %d),header_dcch %d, header_dtch %d\n", - module_idP,frameP, UE_id, CC_id, sdu_length_total,num_sdus,sdu_lengths[0],sdu_lcids[0],offset, - ta_update,padding,post_padding,mcs,TBS,nb_rb,header_len_dcch,header_len_dtch); - } - //#endif + //#ifdef DEBUG_eNB_SCHEDULER + if (ta_update != 31) { + LOG_D(MAC, + "[eNB %d][DLSCH] Frame %d Generate header for UE_id %d on CC_id %d: sdu_length_total %d, num_sdus %d, sdu_lengths[0] %d, sdu_lcids[0] %d => payload offset %d,timing advance value : %d, padding %d,post_padding %d,(mcs %d, TBS %d, nb_rb %d),header_dcch %d, header_dtch %d\n", + module_idP, frameP, UE_id, CC_id, + sdu_length_total, num_sdus, sdu_lengths[0], + sdu_lcids[0], offset, ta_update, padding, + post_padding, mcs, TBS, nb_rb, + header_len_dcch, header_len_dtch); + } + //#endif #ifdef DEBUG_eNB_SCHEDULER - LOG_T(MAC,"[eNB %d] First 16 bytes of DLSCH : \n"); + LOG_T(MAC, "[eNB %d] First 16 bytes of DLSCH : \n"); - for (i=0; i<16; i++) { - LOG_T(MAC,"%x.",dlsch_buffer[i]); - } + for (i = 0; i < 16; i++) { + LOG_T(MAC, "%x.", dlsch_buffer[i]); + } - LOG_T(MAC,"\n"); + LOG_T(MAC, "\n"); #endif - // cycle through SDUs and place in dlsch_buffer - memcpy(&UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset],dlsch_buffer,sdu_length_total); - // memcpy(RC.mac[0].DLSCH_pdu[0][0].payload[0][offset],dcch_buffer,sdu_lengths[0]); + // cycle through SDUs and place in dlsch_buffer + memcpy(&UE_list-> + DLSCH_pdu[CC_id][0][UE_id].payload[0][offset], + dlsch_buffer, sdu_length_total); + // memcpy(RC.mac[0].DLSCH_pdu[0][0].payload[0][offset],dcch_buffer,sdu_lengths[0]); - // fill remainder of DLSCH with random data - for (j=0; j<(TBS-sdu_length_total-offset); j++) { - UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset+sdu_length_total+j] = (char)(taus()&0xff); - } + // fill remainder of DLSCH with random data + for (j = 0; j < (TBS - sdu_length_total - offset); j++) { + UE_list->DLSCH_pdu[CC_id][0][UE_id]. + payload[0][offset + sdu_length_total + j] = + (char) (taus() & 0xff); + } - if (opt_enabled == 1) { - trace_pdu(1, (uint8_t *)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0], - TBS, module_idP, 3, UE_RNTI(module_idP,UE_id), - eNB->frame, eNB->subframe,0,0); - LOG_D(OPT,"[eNB %d][DLSCH] CC_id %d Frame %d rnti %x with size %d\n", - module_idP, CC_id, frameP, UE_RNTI(module_idP,UE_id), TBS); - } + if (opt_enabled == 1) { + trace_pdu(1, (uint8_t *) + UE_list->DLSCH_pdu[CC_id][0][UE_id]. + payload[0], TBS, module_idP, 3, + UE_RNTI(module_idP, UE_id), eNB->frame, + eNB->subframe, 0, 0); + LOG_D(OPT, + "[eNB %d][DLSCH] CC_id %d Frame %d rnti %x with size %d\n", + module_idP, CC_id, frameP, + UE_RNTI(module_idP, UE_id), TBS); + } - T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(rnti), T_INT(frameP), T_INT(subframeP), - T_INT(harq_pid), T_BUFFER(UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0], TBS)); + T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), + T_INT(CC_id), T_INT(rnti), T_INT(frameP), + T_INT(subframeP), T_INT(harq_pid), + T_BUFFER(UE_list->DLSCH_pdu[CC_id][0][UE_id]. + payload[0], TBS)); - UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid] = nb_rb; + UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid] = + nb_rb; - add_ue_dlsch_info(module_idP, - CC_id, - UE_id, - subframeP, - S_DL_SCHEDULED); - // store stats - eNB->eNB_stats[CC_id].dlsch_bytes_tx+=sdu_length_total; - eNB->eNB_stats[CC_id].dlsch_pdus_tx+=1; + add_ue_dlsch_info(module_idP, + CC_id, UE_id, subframeP, + S_DL_SCHEDULED); + // store stats + eNB->eNB_stats[CC_id].dlsch_bytes_tx += + sdu_length_total; + eNB->eNB_stats[CC_id].dlsch_pdus_tx += 1; - UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used = nb_rb; - UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used += nb_rb; - UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs1=eNB_UE_stats->dlsch_mcs1; - UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs2=mcs; - UE_list->eNB_UE_stats[CC_id][UE_id].TBS = TBS; + UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used = nb_rb; + UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used += + nb_rb; + UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs1 = + eNB_UE_stats->dlsch_mcs1; + UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs2 = mcs; + UE_list->eNB_UE_stats[CC_id][UE_id].TBS = TBS; - UE_list->eNB_UE_stats[CC_id][UE_id].overhead_bytes= TBS- sdu_length_total; - UE_list->eNB_UE_stats[CC_id][UE_id].total_sdu_bytes+= sdu_length_total; - UE_list->eNB_UE_stats[CC_id][UE_id].total_pdu_bytes+= TBS; - UE_list->eNB_UE_stats[CC_id][UE_id].total_num_pdus+=1; + UE_list->eNB_UE_stats[CC_id][UE_id].overhead_bytes = + TBS - sdu_length_total; + UE_list->eNB_UE_stats[CC_id][UE_id].total_sdu_bytes += + sdu_length_total; + UE_list->eNB_UE_stats[CC_id][UE_id].total_pdu_bytes += + TBS; + UE_list->eNB_UE_stats[CC_id][UE_id].total_num_pdus += + 1; - if (cc[CC_id].tdd_Config != NULL) { // TDD - UE_list->UE_template[CC_id][UE_id].DAI++; - update_ul_dci(module_idP,CC_id,rnti,UE_list->UE_template[CC_id][UE_id].DAI); - } + if (cc[CC_id].tdd_Config != NULL) { // TDD + UE_list->UE_template[CC_id][UE_id].DAI++; + update_ul_dci(module_idP, CC_id, rnti, + UE_list->UE_template[CC_id][UE_id]. + DAI); + } + // do PUCCH power control + // this is the normalized RX power + eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id]; - // do PUCCH power control - // this is the normalized RX power - eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id]; + /* TODO: fix how we deal with power, unit is not dBm, it's special from nfapi */ + normalized_rx_power = ue_sched_ctl->pucch1_snr[CC_id]; + target_rx_power = 208; - /* TODO: fix how we deal with power, unit is not dBm, it's special from nfapi */ - normalized_rx_power = ue_sched_ctl->pucch1_snr[CC_id]; - target_rx_power = 208; - - // this assumes accumulated tpc - // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out - int32_t framex10psubframe = UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_frame*10+UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_subframe; - if (((framex10psubframe+10)<=(frameP*10+subframeP)) || //normal case - ((framex10psubframe>(frameP*10+subframeP)) && (((10240-framex10psubframe+frameP*10+subframeP)>=10)))) //frame wrap-around - if (ue_sched_ctl->pucch1_cqi_update[CC_id] == 1) { - ue_sched_ctl->pucch1_cqi_update[CC_id] = 0; + // this assumes accumulated tpc + // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out + int32_t framex10psubframe = + UE_list->UE_template[CC_id][UE_id]. + pucch_tpc_tx_frame * 10 + + UE_list->UE_template[CC_id][UE_id]. + pucch_tpc_tx_subframe; + if (((framex10psubframe + 10) <= (frameP * 10 + subframeP)) || //normal case + ((framex10psubframe > (frameP * 10 + subframeP)) && (((10240 - framex10psubframe + frameP * 10 + subframeP) >= 10)))) //frame wrap-around + if (ue_sched_ctl->pucch1_cqi_update[CC_id] == 1) { + ue_sched_ctl->pucch1_cqi_update[CC_id] = 0; - UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_frame=frameP; - UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_subframe=subframeP; - - if (normalized_rx_power>(target_rx_power+4)) { - tpc = 0; //-1 - tpc_accumulated--; - } else if (normalized_rx_power<(target_rx_power-4)) { - tpc = 2; //+1 - tpc_accumulated++; - } else { - tpc = 1; //0 - } - - LOG_D(MAC,"[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n", - module_idP,frameP, subframeP,harq_pid,tpc, - tpc_accumulated,normalized_rx_power,target_rx_power); + UE_list-> + UE_template[CC_id] + [UE_id].pucch_tpc_tx_frame = frameP; + UE_list-> + UE_template[CC_id] + [UE_id].pucch_tpc_tx_subframe = subframeP; - } // Po_PUCCH has been updated - else { - tpc = 1; //0 - } // time to do TPC update - else { - tpc = 1; //0 - } + if (normalized_rx_power > + (target_rx_power + 4)) { + tpc = 0; //-1 + tpc_accumulated--; + } else if (normalized_rx_power < + (target_rx_power - 4)) { + tpc = 2; //+1 + tpc_accumulated++; + } else { + tpc = 1; //0 + } - dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; - memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; - dl_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_dl_config_dci_dl_pdu)); - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format = NFAPI_DL_DCI_FORMAT_1; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level = get_aggregation(get_bw_index(module_idP,CC_id),ue_sched_ctl->dl_cqi[CC_id],format1); - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = rnti; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = 1; // CRNTI : see Table 4-10 from SCF082 - nFAPI specifications - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000; // equal to RS power - - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process = harq_pid; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc = tpc; // dont adjust power when retransmitting - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1 = 1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1 = mcs; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1 = 0; - //deactivate second codeword - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_2 = 0; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_2 = 1; - if (cc[CC_id].tdd_Config != NULL) { //TDD - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.downlink_assignment_index = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; - LOG_D(MAC,"[eNB %d] Initial transmission CC_id %d : harq_pid %d, dai %d, mcs %d\n", - module_idP,CC_id,harq_pid, - (UE_list->UE_template[CC_id][UE_id].DAI-1), - mcs); - } else { - LOG_D(MAC,"[eNB %d] Initial transmission CC_id %d : harq_pid %d, mcs %d\n", - module_idP,CC_id,harq_pid,mcs); - - } - LOG_D(MAC,"Checking feasibility pdu %d (new sdu)\n",dl_req->number_pdu); - if (!CCE_allocation_infeasible(module_idP,CC_id,1,subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level,rnti)) { + LOG_D(MAC, + "[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n", + module_idP, frameP, subframeP, harq_pid, + tpc, tpc_accumulated, + normalized_rx_power, target_rx_power); + + } // Po_PUCCH has been updated + else { + tpc = 1; //0 + } // time to do TPC update + else { + tpc = 1; //0 + } + + dl_config_pdu = + &dl_req->dl_config_pdu_list[dl_req->number_pdu]; + memset((void *) dl_config_pdu, 0, + sizeof(nfapi_dl_config_request_pdu_t)); + dl_config_pdu->pdu_type = + NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; + dl_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu)); + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format = + NFAPI_DL_DCI_FORMAT_1; + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.aggregation_level = + get_aggregation(get_bw_index(module_idP, CC_id), + ue_sched_ctl->dl_cqi[CC_id], + format1); + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = rnti; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = 1; // CRNTI : see Table 4-10 from SCF082 - nFAPI specifications + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000; // equal to RS power + + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + harq_process = harq_pid; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc = tpc; // dont adjust power when retransmitting + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.new_data_indicator_1 = + 1 - + UE_list->UE_template[CC_id][UE_id]. + oldNDI[harq_pid]; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1 = mcs; + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.redundancy_version_1 = 0; + //deactivate second codeword + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_2 = 0; + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.redundancy_version_2 = 1; + if (cc[CC_id].tdd_Config != NULL) { //TDD + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.downlink_assignment_index = + (UE_list->UE_template[CC_id][UE_id].DAI - + 1) & 3; + LOG_D(MAC, + "[eNB %d] Initial transmission CC_id %d : harq_pid %d, dai %d, mcs %d\n", + module_idP, CC_id, harq_pid, + (UE_list->UE_template[CC_id][UE_id].DAI - 1), + mcs); + } else { + LOG_D(MAC, + "[eNB %d] Initial transmission CC_id %d : harq_pid %d, mcs %d\n", + module_idP, CC_id, harq_pid, mcs); + + } + LOG_D(MAC, "Checking feasibility pdu %d (new sdu)\n", + dl_req->number_pdu); + if (!CCE_allocation_infeasible + (module_idP, CC_id, 1, subframeP, + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.aggregation_level, rnti)) { - ue_sched_ctl->round[CC_id][harq_pid] = 0; - dl_req->number_dci++; - dl_req->number_pdu++; - - // Toggle NDI for next time - LOG_D(MAC,"CC_id %d Frame %d, subframeP %d: Toggling Format1 NDI for UE %d (rnti %x/%d) oldNDI %d\n", - CC_id, frameP,subframeP,UE_id, - rnti,harq_pid,UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]); - - UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]=1-UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; - UE_list->UE_template[CC_id][UE_id].oldmcs1[harq_pid] = mcs; - UE_list->UE_template[CC_id][UE_id].oldmcs2[harq_pid] = 0; - AssertFatal(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated!=NULL,"physicalConfigDedicated is NULL\n"); - AssertFatal(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->pdsch_ConfigDedicated!=NULL,"physicalConfigDedicated->pdsch_ConfigDedicated is NULL\n"); - - fill_nfapi_dlsch_config(eNB,dl_req, - TBS, - eNB->pdu_index[CC_id], - rnti, - 0, // type 0 allocation from 7.1.6 in 36.213 - 0, // virtual_resource_block_assignment_flag, unused here - 0, // resource_block_coding, to be filled in later - getQm(mcs), - 0, // redundancy version - 1, // transport blocks - 0, // transport block to codeword swap flag - cc[CC_id].p_eNB == 1 ? 0 : 1, // transmission_scheme - 1, // number of layers - 1, // number of subbands - // uint8_t codebook_index, - 4, // UE category capacity - UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->pdsch_ConfigDedicated->p_a, - 0, // delta_power_offset for TM5 - 0, // ngap - 0, // nprb - cc[CC_id].p_eNB == 1 ? 1 : 2, // transmission mode - 0, //number of PRBs treated as one subband, not used here - 0 // number of beamforming vectors, not used here - ); - eNB->TX_req[CC_id].sfn_sf = fill_nfapi_tx_req(&eNB->TX_req[CC_id].tx_request_body, - (frameP*10)+subframeP, - TBS, - eNB->pdu_index[CC_id], - eNB->UE_list.DLSCH_pdu[CC_id][0][(unsigned char)UE_id].payload[0]); - - LOG_D(MAC,"Filled NFAPI configuration for DCI/DLSCH/TXREQ %d, new SDU\n",eNB->pdu_index[CC_id]); + ue_sched_ctl->round[CC_id][harq_pid] = 0; + dl_req->number_dci++; + dl_req->number_pdu++; - eNB->pdu_index[CC_id]++; - program_dlsch_acknak(module_idP,CC_id,UE_id,frameP,subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.cce_idx); + // Toggle NDI for next time + LOG_D(MAC, + "CC_id %d Frame %d, subframeP %d: Toggling Format1 NDI for UE %d (rnti %x/%d) oldNDI %d\n", + CC_id, frameP, subframeP, UE_id, rnti, + harq_pid, + UE_list-> + UE_template[CC_id][UE_id].oldNDI[harq_pid]); - } - else { - LOG_W(MAC,"Frame %d, Subframe %d: Dropping DLSCH allocation for UE %d/%x, infeasible CCE allocations\n", - frameP,subframeP,UE_id,rnti); - } - } else { // There is no data from RLC or MAC header, so don't schedule + UE_list->UE_template[CC_id][UE_id]. + oldNDI[harq_pid] = + 1 - + UE_list->UE_template[CC_id][UE_id]. + oldNDI[harq_pid]; + UE_list->UE_template[CC_id][UE_id]. + oldmcs1[harq_pid] = mcs; + UE_list->UE_template[CC_id][UE_id]. + oldmcs2[harq_pid] = 0; + AssertFatal(UE_list->UE_template[CC_id] + [UE_id].physicalConfigDedicated != + NULL, + "physicalConfigDedicated is NULL\n"); + AssertFatal(UE_list->UE_template[CC_id] + [UE_id]. + physicalConfigDedicated->pdsch_ConfigDedicated + != NULL, + "physicalConfigDedicated->pdsch_ConfigDedicated is NULL\n"); - } - } + fill_nfapi_dlsch_config(eNB, dl_req, TBS, eNB->pdu_index[CC_id], rnti, 0, // type 0 allocation from 7.1.6 in 36.213 + 0, // virtual_resource_block_assignment_flag, unused here + 0, // resource_block_coding, to be filled in later + getQm(mcs), 0, // redundancy version + 1, // transport blocks + 0, // transport block to codeword swap flag + cc[CC_id].p_eNB == 1 ? 0 : 1, // transmission_scheme + 1, // number of layers + 1, // number of subbands + // uint8_t codebook_index, + 4, // UE category capacity + UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->pdsch_ConfigDedicated->p_a, 0, // delta_power_offset for TM5 + 0, // ngap + 0, // nprb + cc[CC_id].p_eNB == 1 ? 1 : 2, // transmission mode + 0, //number of PRBs treated as one subband, not used here + 0 // number of beamforming vectors, not used here + ); + eNB->TX_req[CC_id].sfn_sf = + fill_nfapi_tx_req(&eNB-> + TX_req + [CC_id].tx_request_body, + (frameP * 10) + subframeP, + TBS, eNB->pdu_index[CC_id], + eNB-> + UE_list.DLSCH_pdu[CC_id][0][(unsigned char) + UE_id].payload + [0]); - if (cc[CC_id].tdd_Config != NULL){ // TDD - set_ul_DAI(module_idP,UE_id,CC_id,frameP,subframeP); - } + LOG_D(MAC, + "Filled NFAPI configuration for DCI/DLSCH/TXREQ %d, new SDU\n", + eNB->pdu_index[CC_id]); - } // UE_id loop - } // CC_id loop + eNB->pdu_index[CC_id]++; + program_dlsch_acknak(module_idP, CC_id, UE_id, + frameP, subframeP, + dl_config_pdu-> + dci_dl_pdu.dci_dl_pdu_rel8. + cce_idx); + + } else { + LOG_W(MAC, + "Frame %d, Subframe %d: Dropping DLSCH allocation for UE %d/%x, infeasible CCE allocations\n", + frameP, subframeP, UE_id, rnti); + } + } else { // There is no data from RLC or MAC header, so don't schedule + + } + } + + if (cc[CC_id].tdd_Config != NULL) { // TDD + set_ul_DAI(module_idP, UE_id, CC_id, frameP, subframeP); + } + + } // UE_id loop + } // CC_id loop - - fill_DLSCH_dci(module_idP,frameP,subframeP,mbsfn_flag); - stop_meas(&eNB->schedule_dlsch); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SCHEDULE_DLSCH,VCD_FUNCTION_OUT); + fill_DLSCH_dci(module_idP, frameP, subframeP, mbsfn_flag); + + stop_meas(&eNB->schedule_dlsch); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_SCHEDULE_DLSCH, VCD_FUNCTION_OUT); } //------------------------------------------------------------------------------ void -fill_DLSCH_dci( - module_id_t module_idP, - frame_t frameP, - sub_frame_t subframeP, - int* mbsfn_flagP - ) +fill_DLSCH_dci(module_id_t module_idP, + frame_t frameP, sub_frame_t subframeP, int *mbsfn_flagP) //------------------------------------------------------------------------------ { - // loop over all allocated UEs and compute frequency allocations for PDSCH - int UE_id = -1; - uint8_t /* first_rb, */ nb_rb=3; - rnti_t rnti; - //unsigned char *vrb_map; - uint8_t rballoc_sub[25]; - //uint8_t number_of_subbands=13; + // loop over all allocated UEs and compute frequency allocations for PDSCH + int UE_id = -1; + uint8_t /* first_rb, */ nb_rb = 3; + rnti_t rnti; + //unsigned char *vrb_map; + uint8_t rballoc_sub[25]; + //uint8_t number_of_subbands=13; - //unsigned char round; - unsigned char harq_pid; - int i; - int CC_id; - eNB_MAC_INST *eNB =RC.mac[module_idP]; - UE_list_t *UE_list = &eNB->UE_list; - int N_RBG; - int N_RB_DL; - COMMON_channels_t *cc; + //unsigned char round; + unsigned char harq_pid; + int i; + int CC_id; + eNB_MAC_INST *eNB = RC.mac[module_idP]; + UE_list_t *UE_list = &eNB->UE_list; + int N_RBG; + int N_RB_DL; + COMMON_channels_t *cc; - start_meas(&eNB->fill_DLSCH_dci); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_FILL_DLSCH_DCI,VCD_FUNCTION_IN); + start_meas(&eNB->fill_DLSCH_dci); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_FILL_DLSCH_DCI, VCD_FUNCTION_IN); - for (CC_id=0; CC_id0) - continue; + if (mbsfn_flagP[CC_id] > 0) + continue; - cc = &eNB->common_channels[CC_id]; - N_RBG = to_rbg(cc->mib->message.dl_Bandwidth); - N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth); + cc = &eNB->common_channels[CC_id]; + N_RBG = to_rbg(cc->mib->message.dl_Bandwidth); + N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth); - // UE specific DCIs - for (UE_id=UE_list->head; UE_id>=0; UE_id=UE_list->next[UE_id]) { - LOG_T(MAC,"CC_id %d, UE_id: %d => status %d\n",CC_id,UE_id,eNB_dlsch_info[module_idP][CC_id][UE_id].status); + // UE specific DCIs + for (UE_id = UE_list->head; UE_id >= 0; + UE_id = UE_list->next[UE_id]) { + LOG_T(MAC, "CC_id %d, UE_id: %d => status %d\n", CC_id, UE_id, + eNB_dlsch_info[module_idP][CC_id][UE_id].status); - if (eNB_dlsch_info[module_idP][CC_id][UE_id].status == S_DL_SCHEDULED) { + if (eNB_dlsch_info[module_idP][CC_id][UE_id].status == + S_DL_SCHEDULED) { - // clear scheduling flag - eNB_dlsch_info[module_idP][CC_id][UE_id].status = S_DL_WAITING; - rnti = UE_RNTI(module_idP,UE_id); - if (cc->tdd_Config) harq_pid = ((frameP*10)+subframeP)%10; - else harq_pid = ((frameP*10)+subframeP)&7; - nb_rb = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid]; + // clear scheduling flag + eNB_dlsch_info[module_idP][CC_id][UE_id].status = + S_DL_WAITING; + rnti = UE_RNTI(module_idP, UE_id); + if (cc->tdd_Config) + harq_pid = ((frameP * 10) + subframeP) % 10; + else + harq_pid = ((frameP * 10) + subframeP) & 7; + nb_rb = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid]; - - /// Synchronizing rballoc with rballoc_sub - for(i=0; iUE_template[CC_id][UE_id].rballoc_subband[harq_pid][i]; - } - nfapi_dl_config_request_t *DL_req = &RC.mac[module_idP]->DL_req[0]; - nfapi_dl_config_request_pdu_t* dl_config_pdu; + /// Synchronizing rballoc with rballoc_sub + for (i = 0; i < N_RBG; i++) { + rballoc_sub[i] = + UE_list-> + UE_template[CC_id][UE_id].rballoc_subband[harq_pid] + [i]; + } - for (i=0;ipdu_type == NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE)&& - (dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti == rnti) && - (dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format != 1)) { - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = allocate_prbs_sub(nb_rb,N_RB_DL,N_RBG,rballoc_sub); - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_allocation_type = 0; - } - else if ((dl_config_pdu->pdu_type == NFAPI_DL_CONFIG_DLSCH_PDU_TYPE)&& - (dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti == rnti) && - (dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type==0)) { - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = allocate_prbs_sub(nb_rb,N_RB_DL,N_RBG,rballoc_sub); - } + nfapi_dl_config_request_t *DL_req = + &RC.mac[module_idP]->DL_req[0]; + nfapi_dl_config_request_pdu_t *dl_config_pdu; + + for (i = 0; + i < DL_req[CC_id].dl_config_request_body.number_pdu; + i++) { + dl_config_pdu = + &DL_req[CC_id]. + dl_config_request_body.dl_config_pdu_list[i]; + if ((dl_config_pdu->pdu_type == + NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE) + && (dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + rnti == rnti) + && (dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.dci_format != 1)) { + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.resource_block_coding = + allocate_prbs_sub(nb_rb, N_RB_DL, N_RBG, + rballoc_sub); + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.resource_allocation_type = 0; + } else + if ((dl_config_pdu->pdu_type == + NFAPI_DL_CONFIG_DLSCH_PDU_TYPE) + && (dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8. + rnti == rnti) + && (dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.resource_allocation_type == + 0)) { + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.resource_block_coding = + allocate_prbs_sub(nb_rb, N_RB_DL, N_RBG, + rballoc_sub); + } + } + } } - } + } - } - - stop_meas(&eNB->fill_DLSCH_dci); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_FILL_DLSCH_DCI,VCD_FUNCTION_OUT); + stop_meas(&eNB->fill_DLSCH_dci); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_FILL_DLSCH_DCI, VCD_FUNCTION_OUT); } //------------------------------------------------------------------------------ -unsigned char* -get_dlsch_sdu( - module_id_t module_idP, - int CC_id, - frame_t frameP, - rnti_t rntiP, - uint8_t TBindex -) +unsigned char *get_dlsch_sdu(module_id_t module_idP, + int CC_id, frame_t frameP, rnti_t rntiP, + uint8_t TBindex) //------------------------------------------------------------------------------ { - int UE_id; - eNB_MAC_INST *eNB=RC.mac[module_idP]; + int UE_id; + eNB_MAC_INST *eNB = RC.mac[module_idP]; - if (rntiP==SI_RNTI) { - LOG_D(MAC,"[eNB %d] CC_id %d Frame %d Get DLSCH sdu for BCCH \n", module_idP, CC_id, frameP); + if (rntiP == SI_RNTI) { + LOG_D(MAC, "[eNB %d] CC_id %d Frame %d Get DLSCH sdu for BCCH \n", + module_idP, CC_id, frameP); - return((unsigned char *)&eNB->common_channels[CC_id].BCCH_pdu.payload[0]); - } + return ((unsigned char *) &eNB->common_channels[CC_id]. + BCCH_pdu.payload[0]); + } - UE_id = find_UE_id(module_idP,rntiP); + UE_id = find_UE_id(module_idP, rntiP); - if (UE_id != -1) { - LOG_D(MAC,"[eNB %d] Frame %d: CC_id %d Get DLSCH sdu for rnti %x => UE_id %d\n",module_idP,frameP,CC_id,rntiP,UE_id); - return((unsigned char *)&eNB->UE_list.DLSCH_pdu[CC_id][TBindex][UE_id].payload[0]); - } else { - LOG_E(MAC,"[eNB %d] Frame %d: CC_id %d UE with RNTI %x does not exist\n", module_idP,frameP,CC_id,rntiP); - return NULL; - } + if (UE_id != -1) { + LOG_D(MAC, + "[eNB %d] Frame %d: CC_id %d Get DLSCH sdu for rnti %x => UE_id %d\n", + module_idP, frameP, CC_id, rntiP, UE_id); + return ((unsigned char *) &eNB-> + UE_list.DLSCH_pdu[CC_id][TBindex][UE_id].payload[0]); + } else { + LOG_E(MAC, + "[eNB %d] Frame %d: CC_id %d UE with RNTI %x does not exist\n", + module_idP, frameP, CC_id, rntiP); + return NULL; + } } //------------------------------------------------------------------------------ -void update_ul_dci(module_id_t module_idP, - uint8_t CC_idP, - rnti_t rntiP, - uint8_t daiP) +void +update_ul_dci(module_id_t module_idP, + uint8_t CC_idP, rnti_t rntiP, uint8_t daiP) //------------------------------------------------------------------------------ { - nfapi_hi_dci0_request_t *HI_DCI0_req = &RC.mac[module_idP]->HI_DCI0_req[CC_idP]; - nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = &HI_DCI0_req->hi_dci0_request_body.hi_dci0_pdu_list[0]; - COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_idP]; - int i; + nfapi_hi_dci0_request_t *HI_DCI0_req = + &RC.mac[module_idP]->HI_DCI0_req[CC_idP]; + nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = + &HI_DCI0_req->hi_dci0_request_body.hi_dci0_pdu_list[0]; + COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_idP]; + int i; - if (cc->tdd_Config != NULL) { // TDD - for (i=0; ihi_dci0_request_body.number_of_dci + HI_DCI0_req->hi_dci0_request_body.number_of_dci; i++) { + if (cc->tdd_Config != NULL) { // TDD + for (i = 0; + i < + HI_DCI0_req->hi_dci0_request_body.number_of_dci + + HI_DCI0_req->hi_dci0_request_body.number_of_dci; i++) { - if ((hi_dci0_pdu[i].pdu_type == NFAPI_HI_DCI0_DCI_PDU_TYPE) && - (hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.rnti == rntiP)) - hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.dl_assignment_index = (daiP-1)&3; - + if ((hi_dci0_pdu[i].pdu_type == NFAPI_HI_DCI0_DCI_PDU_TYPE) && + (hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.rnti == rntiP)) + hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.dl_assignment_index = + (daiP - 1) & 3; + + } } - } } //------------------------------------------------------------------------------ -void set_ue_dai( - sub_frame_t subframeP, - int UE_id, - uint8_t CC_id, - uint8_t tdd_config, - UE_list_t* UE_list -) +void +set_ue_dai(sub_frame_t subframeP, + int UE_id, uint8_t CC_id, uint8_t tdd_config, + UE_list_t * UE_list) //------------------------------------------------------------------------------ { - switch (tdd_config) { - case 0: - if ((subframeP==0)||(subframeP==1)||(subframeP==3)||(subframeP==5)||(subframeP==6)||(subframeP==8)) { - UE_list->UE_template[CC_id][UE_id].DAI = 0; + switch (tdd_config) { + case 0: + if ((subframeP == 0) || (subframeP == 1) || (subframeP == 3) + || (subframeP == 5) || (subframeP == 6) || (subframeP == 8)) { + UE_list->UE_template[CC_id][UE_id].DAI = 0; + } + + break; + + case 1: + if ((subframeP == 0) || (subframeP == 4) || (subframeP == 5) + || (subframeP == 9)) { + UE_list->UE_template[CC_id][UE_id].DAI = 0; + } + + break; + + case 2: + if ((subframeP == 4) || (subframeP == 5)) { + UE_list->UE_template[CC_id][UE_id].DAI = 0; + } + + break; + + case 3: + if ((subframeP == 5) || (subframeP == 7) || (subframeP == 9)) { + UE_list->UE_template[CC_id][UE_id].DAI = 0; + } + + break; + + case 4: + if ((subframeP == 0) || (subframeP == 6)) { + UE_list->UE_template[CC_id][UE_id].DAI = 0; + } + + break; + + case 5: + if (subframeP == 9) { + UE_list->UE_template[CC_id][UE_id].DAI = 0; + } + + break; + + case 6: + if ((subframeP == 0) || (subframeP == 1) || (subframeP == 5) + || (subframeP == 6) || (subframeP == 9)) { + UE_list->UE_template[CC_id][UE_id].DAI = 0; + } + + break; + + default: + UE_list->UE_template[CC_id][UE_id].DAI = 0; + LOG_N(MAC, "unknow TDD config %d\n", tdd_config); + break; } - - break; - - case 1: - if ((subframeP==0)||(subframeP==4)||(subframeP==5)||(subframeP==9)) { - UE_list->UE_template[CC_id][UE_id].DAI = 0; - } - - break; - - case 2: - if ((subframeP==4)||(subframeP==5)) { - UE_list->UE_template[CC_id][UE_id].DAI = 0; - } - - break; - - case 3: - if ((subframeP==5)||(subframeP==7)||(subframeP==9)) { - UE_list->UE_template[CC_id][UE_id].DAI = 0; - } - - break; - - case 4: - if ((subframeP==0)||(subframeP==6)) { - UE_list->UE_template[CC_id][UE_id].DAI = 0; - } - - break; - - case 5: - if (subframeP==9) { - UE_list->UE_template[CC_id][UE_id].DAI = 0; - } - - break; - - case 6: - if ((subframeP==0)||(subframeP==1)||(subframeP==5)||(subframeP==6)||(subframeP==9)) { - UE_list->UE_template[CC_id][UE_id].DAI = 0; - } - - break; - - default: - UE_list->UE_template[CC_id][UE_id].DAI = 0; - LOG_N(MAC,"unknow TDD config %d\n",tdd_config); - break; - } } diff --git a/openair2/LAYER2/MAC/eNB_scheduler_mch.c b/openair2/LAYER2/MAC/eNB_scheduler_mch.c index 3b05850a1d..7ce5a5b12c 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_mch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_mch.c @@ -52,10 +52,10 @@ #include "pdcp.h" #if defined(ENABLE_ITTI) -# include "intertask_interface.h" +#include "intertask_interface.h" #endif -#include "SIMULATION/TOOLS/defs.h" // for taus +#include "SIMULATION/TOOLS/defs.h" // for taus #define ENABLE_MAC_PAYLOAD_DEBUG #define DEBUG_eNB_SCHEDULER 1 @@ -63,607 +63,746 @@ extern RAN_CONTEXT_t RC; #if defined(Rel10) || defined(Rel14) -int8_t get_mbsfn_sf_alloction (module_id_t module_idP, uint8_t CC_id, uint8_t mbsfn_sync_area) +int8_t +get_mbsfn_sf_alloction(module_id_t module_idP, uint8_t CC_id, + uint8_t mbsfn_sync_area) { - // currently there is one-to-one mapping between sf allocation pattern and sync area - if (mbsfn_sync_area > MAX_MBSFN_AREA) { - LOG_W(MAC,"[eNB %d] CC_id %d MBSFN synchronization area %d out of range\n ", module_idP, CC_id, mbsfn_sync_area); - return -1; - } else if (RC.mac[module_idP]->common_channels[CC_id].mbsfn_SubframeConfig[mbsfn_sync_area] != NULL) { - return mbsfn_sync_area; - } else { - LOG_W(MAC,"[eNB %d] CC_id %d MBSFN Subframe Config pattern %d not found \n ", module_idP, CC_id, mbsfn_sync_area); - return -1; - } + // currently there is one-to-one mapping between sf allocation pattern and sync area + if (mbsfn_sync_area > MAX_MBSFN_AREA) { + LOG_W(MAC, + "[eNB %d] CC_id %d MBSFN synchronization area %d out of range\n ", + module_idP, CC_id, mbsfn_sync_area); + return -1; + } else if (RC.mac[module_idP]-> + common_channels[CC_id].mbsfn_SubframeConfig[mbsfn_sync_area] + != NULL) { + return mbsfn_sync_area; + } else { + LOG_W(MAC, + "[eNB %d] CC_id %d MBSFN Subframe Config pattern %d not found \n ", + module_idP, CC_id, mbsfn_sync_area); + return -1; + } } -int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_frame_t subframeP) +int +schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, + sub_frame_t subframeP) { - int mcch_flag=0,mtch_flag=0, msi_flag=0; - int mbsfn_period =0;// 1<<(RC.mac[module_idP]->mbsfn_SubframeConfig[0]->radioframeAllocationPeriod); - int mcch_period = 0;//32<<(RC.mac[module_idP]->mbsfn_AreaInfo[0]->mcch_Config_r9.mcch_RepetitionPeriod_r9); - int mch_scheduling_period = 8<<(RC.mac[module_idP]->common_channels[CC_id].pmch_Config[0]->mch_SchedulingPeriod_r9); - unsigned char mcch_sdu_length; - unsigned char header_len_mcch=0,header_len_msi=0,header_len_mtch=0, header_len_mtch_temp=0, header_len_mcch_temp=0, header_len_msi_temp=0; - int ii=0, msi_pos=0; - int mcch_mcs = -1; - uint16_t TBS,j=-1,padding=0,post_padding=0; - mac_rlc_status_resp_t rlc_status; - int num_mtch; - int msi_length,i,k; - unsigned char sdu_lcids[11], num_sdus=0, offset=0; - uint16_t sdu_lengths[11], sdu_length_total=0; - unsigned char mch_buffer[MAX_DLSCH_PAYLOAD_BYTES]; // check the max value, this is for dlsch only + int mcch_flag = 0, mtch_flag = 0, msi_flag = 0; + int mbsfn_period = 0; // 1<<(RC.mac[module_idP]->mbsfn_SubframeConfig[0]->radioframeAllocationPeriod); + int mcch_period = 0; //32<<(RC.mac[module_idP]->mbsfn_AreaInfo[0]->mcch_Config_r9.mcch_RepetitionPeriod_r9); + int mch_scheduling_period = + 8 << (RC.mac[module_idP]->common_channels[CC_id]. + pmch_Config[0]->mch_SchedulingPeriod_r9); + unsigned char mcch_sdu_length; + unsigned char header_len_mcch = 0, header_len_msi = + 0, header_len_mtch = 0, header_len_mtch_temp = + 0, header_len_mcch_temp = 0, header_len_msi_temp = 0; + int ii = 0, msi_pos = 0; + int mcch_mcs = -1; + uint16_t TBS, j = -1, padding = 0, post_padding = 0; + mac_rlc_status_resp_t rlc_status; + int num_mtch; + int msi_length, i, k; + unsigned char sdu_lcids[11], num_sdus = 0, offset = 0; + uint16_t sdu_lengths[11], sdu_length_total = 0; + unsigned char mch_buffer[MAX_DLSCH_PAYLOAD_BYTES]; // check the max value, this is for dlsch only - COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_id]; + COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_id]; - cc->MCH_pdu.Pdu_size=0; + cc->MCH_pdu.Pdu_size = 0; - for (i=0; - i< cc->num_active_mbsfn_area; - i++ ) { - // assume, that there is always a mapping - if ((j=get_mbsfn_sf_alloction(module_idP,CC_id,i)) == -1) { - return 0; + for (i = 0; i < cc->num_active_mbsfn_area; i++) { + // assume, that there is always a mapping + if ((j = get_mbsfn_sf_alloction(module_idP, CC_id, i)) == -1) { + return 0; + } + + mbsfn_period = + 1 << (cc->mbsfn_SubframeConfig[j]->radioframeAllocationPeriod); + mcch_period = + 32 << (cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.mcch_RepetitionPeriod_r9); + msi_pos = 0; + ii = 0; + LOG_D(MAC, + "[eNB %d] CC_id %d Frame %d subframeP %d : Checking MBSFN Sync Area %d/%d with SF allocation %d/%d for MCCH and MTCH (mbsfn period %d, mcch period %d)\n", + module_idP, CC_id, frameP, subframeP, i, + cc->num_active_mbsfn_area, j, cc->num_sf_allocation_pattern, + mbsfn_period, mcch_period); + + + switch (cc->mbsfn_AreaInfo[i]->mcch_Config_r9.signallingMCS_r9) { + case 0: + mcch_mcs = 2; + break; + + case 1: + mcch_mcs = 7; + break; + + case 2: + mcch_mcs = 13; + break; + + case 3: + mcch_mcs = 19; + break; + } + + // 1st: Check the MBSFN subframes from SIB2 info (SF allocation pattern i, max 8 non-overlapping patterns exist) + if (frameP % mbsfn_period == cc->mbsfn_SubframeConfig[j]->radioframeAllocationOffset) { // MBSFN frameP + if (cc->mbsfn_SubframeConfig[j]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) { // one-frameP format + + // Find the first subframeP in this MCH to transmit MSI + if (frameP % mch_scheduling_period == + cc->mbsfn_SubframeConfig[j]-> + radioframeAllocationOffset) { + while (ii == 0) { + ii = cc-> + mbsfn_SubframeConfig[j]->subframeAllocation. + choice.oneFrame.buf[0] & (0x80 >> msi_pos); + msi_pos++; + } + + LOG_D(MAC, + "[eNB %d] CC_id %d Frame %d subframeP %d : sync area %d sf allocation pattern %d sf alloc %x msi pos is %d \n", + module_idP, CC_id, frameP, subframeP, i, j, + cc->mbsfn_SubframeConfig[j]-> + subframeAllocation.choice.oneFrame.buf[0], + msi_pos); + } + // Check if the subframeP is for MSI, MCCH or MTCHs and Set the correspoding flag to 1 + switch (subframeP) { + case 1: + if (cc->tdd_Config == NULL) { + if ((cc-> + mbsfn_SubframeConfig[j]->subframeAllocation. + choice.oneFrame.buf[0] & MBSFN_FDD_SF1) == + MBSFN_FDD_SF1) { + if (msi_pos == 1) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.mcch_Offset_r9) + && + ((cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_FDD_SF1) == + MBSFN_FDD_SF1)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } + + break; + + case 2: + if (cc->tdd_Config == NULL) { + if ((cc-> + mbsfn_SubframeConfig[j]->subframeAllocation. + choice.oneFrame.buf[0] & MBSFN_FDD_SF2) == + MBSFN_FDD_SF2) { + if (msi_pos == 2) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.mcch_Offset_r9) + && + ((cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_FDD_SF2) == + MBSFN_FDD_SF2)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } + + break; + + case 3: + if (cc->tdd_Config != NULL) { // TDD + if ((cc-> + mbsfn_SubframeConfig[j]->subframeAllocation. + choice.oneFrame.buf[0] & MBSFN_TDD_SF3) == + MBSFN_TDD_SF3) { + if (msi_pos == 1) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.mcch_Offset_r9) + && + ((cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_TDD_SF3) == + MBSFN_TDD_SF3)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } else { // FDD + if ((cc-> + mbsfn_SubframeConfig[j]->subframeAllocation. + choice.oneFrame.buf[0] & MBSFN_FDD_SF3) == + MBSFN_FDD_SF3) { + if (msi_pos == 3) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.mcch_Offset_r9) + && + ((cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_FDD_SF3) == + MBSFN_FDD_SF3)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } + + break; + + case 4: + if (cc->tdd_Config != NULL) { + if ((cc-> + mbsfn_SubframeConfig[j]->subframeAllocation. + choice.oneFrame.buf[0] & MBSFN_TDD_SF4) == + MBSFN_TDD_SF4) { + if (msi_pos == 2) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.mcch_Offset_r9) + && + ((cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_TDD_SF4) == + MBSFN_TDD_SF4)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } + + break; + + case 6: + if (cc->tdd_Config == NULL) { + if ((cc-> + mbsfn_SubframeConfig[j]->subframeAllocation. + choice.oneFrame.buf[0] & MBSFN_FDD_SF6) == + MBSFN_FDD_SF6) { + if (msi_pos == 4) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.mcch_Offset_r9) + && + ((cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_FDD_SF6) == + MBSFN_FDD_SF6)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } + + break; + + case 7: + if (cc->tdd_Config != NULL) { // TDD + if ((cc-> + mbsfn_SubframeConfig[j]->subframeAllocation. + choice.oneFrame.buf[0] & MBSFN_TDD_SF7) == + MBSFN_TDD_SF7) { + if (msi_pos == 3) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.mcch_Offset_r9) + && + ((cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_TDD_SF7) == + MBSFN_TDD_SF7)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } else { // FDD + if ((cc-> + mbsfn_SubframeConfig[j]->subframeAllocation. + choice.oneFrame.buf[0] & MBSFN_FDD_SF7) == + MBSFN_FDD_SF7) { + if (msi_pos == 5) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.mcch_Offset_r9) + && + ((cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_FDD_SF7) == + MBSFN_FDD_SF7)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } + + break; + + case 8: + if (cc->tdd_Config != NULL) { //TDD + if ((cc-> + mbsfn_SubframeConfig[j]->subframeAllocation. + choice.oneFrame.buf[0] & MBSFN_TDD_SF8) == + MBSFN_TDD_SF8) { + if (msi_pos == 4) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.mcch_Offset_r9) + && + ((cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_TDD_SF8) == + MBSFN_TDD_SF8)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } else { // FDD + if ((cc-> + mbsfn_SubframeConfig[j]->subframeAllocation. + choice.oneFrame.buf[0] & MBSFN_FDD_SF8) == + MBSFN_FDD_SF8) { + if (msi_pos == 6) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.mcch_Offset_r9) + && + ((cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_FDD_SF8) == + MBSFN_FDD_SF8)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } + + break; + + case 9: + if (cc->tdd_Config != NULL) { + if ((cc-> + mbsfn_SubframeConfig[j]->subframeAllocation. + choice.oneFrame.buf[0] & MBSFN_TDD_SF9) == + MBSFN_TDD_SF9) { + if (msi_pos == 5) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.mcch_Offset_r9) + && + ((cc->mbsfn_AreaInfo[i]-> + mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_TDD_SF9) == + MBSFN_TDD_SF9)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } + + break; + } // end switch + + // sf allocation is non-overlapping + if ((msi_flag == 1) || (mcch_flag == 1) + || (mtch_flag == 1)) { + LOG_D(MAC, + "[eNB %d] CC_id %d Frame %d Subframe %d: sync area %d SF alloc %d: msi flag %d, mcch flag %d, mtch flag %d\n", + module_idP, CC_id, frameP, subframeP, i, j, + msi_flag, mcch_flag, mtch_flag); + break; + } + } else { // four-frameP format + } + } + } // end of for loop + + cc->msi_active = 0; + cc->mcch_active = 0; + cc->mtch_active = 0; + + // Calculate the mcs + if ((msi_flag == 1) || (mcch_flag == 1)) { + cc->MCH_pdu.mcs = mcch_mcs; + } else if (mtch_flag == 1) { // only MTCH in this subframeP + cc->MCH_pdu.mcs = cc->pmch_Config[0]->dataMCS_r9; + } + // 2nd: Create MSI, get MCCH from RRC and MTCHs from RLC + + // there is MSI (MCH Scheduling Info) + if (msi_flag == 1) { + // Create MSI here + uint16_t msi_control_element[29], *msi_ptr; + + msi_ptr = &msi_control_element[0]; + ((MSI_ELEMENT *) msi_ptr)->lcid = MCCH_LCHANID; //MCCH + + if (mcch_flag == 1) { + ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0; + ((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0; + } else { // no mcch for this MSP + ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0x7; // stop value is 2047 + ((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0xff; + } + + msi_ptr += sizeof(MSI_ELEMENT); + + //Header for MTCHs + num_mtch = cc->mbms_SessionList[0]->list.count; + + for (k = 0; k < num_mtch; k++) { // loop for all session in this MCH (MCH[0]) at this moment + ((MSI_ELEMENT *) msi_ptr)->lcid = cc->mbms_SessionList[0]->list.array[k]->logicalChannelIdentity_r9; //mtch_lcid; + ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0; // last subframeP of this mtch (only one mtch now) + ((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0xB; + msi_ptr += sizeof(MSI_ELEMENT); + } + + msi_length = msi_ptr - msi_control_element; + + if (msi_length < 128) { + header_len_msi = 2; + } else { + header_len_msi = 3; + } + + LOG_D(MAC, + "[eNB %d] CC_id %d Frame %d : MSI->MCH, length of MSI is %d bytes \n", + module_idP, CC_id, frameP, msi_length); + //LOG_D(MAC,"Scheduler: MSI is transmitted in this subframeP \n" ); + + // LOG_D(MAC,"Scheduler: MSI length is %d bytes\n",msi_length); + // Store MSI data to mch_buffer[0] + memcpy((char *) &mch_buffer[sdu_length_total], + msi_control_element, msi_length); + + sdu_lcids[num_sdus] = MCH_SCHDL_INFO; + sdu_lengths[num_sdus] = msi_length; + sdu_length_total += sdu_lengths[num_sdus]; + LOG_I(MAC, "[eNB %d] CC_id %d Create %d bytes for MSI\n", + module_idP, CC_id, sdu_lengths[num_sdus]); + num_sdus++; + cc->msi_active = 1; + } + // there is MCCH + if (mcch_flag == 1) { + LOG_D(MAC, + "[eNB %d] CC_id %d Frame %d Subframe %d: Schedule MCCH MESSAGE (area %d, sfAlloc %d)\n", + module_idP, CC_id, frameP, subframeP, i, j); + + mcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MCCH, 1, &cc->MCCH_pdu.payload[0], 1, // this is eNB + module_idP, // index + i); // this is the mbsfn sync area index + + if (mcch_sdu_length > 0) { + LOG_D(MAC, + "[eNB %d] CC_id %d Frame %d subframeP %d : MCCH->MCH, Received %d bytes from RRC \n", + module_idP, CC_id, frameP, subframeP, mcch_sdu_length); + + header_len_mcch = 2; + + if (cc->tdd_Config != NULL) { + LOG_D(MAC, + "[eNB %d] CC_id %d Frame %d subframeP %d: Scheduling MCCH->MCH (TDD) for MCCH message %d bytes (mcs %d )\n", + module_idP, CC_id, frameP, subframeP, + mcch_sdu_length, mcch_mcs); + } else { + LOG_I(MAC, + "[eNB %d] CC_id %d Frame %d subframeP %d: Scheduling MCCH->MCH (FDD) for MCCH message %d bytes (mcs %d)\n", + module_idP, CC_id, frameP, subframeP, + mcch_sdu_length, mcch_mcs); + } + + cc->mcch_active = 1; + + memcpy((char *) &mch_buffer[sdu_length_total], + &cc->MCCH_pdu.payload[0], mcch_sdu_length); + sdu_lcids[num_sdus] = MCCH_LCHANID; + sdu_lengths[num_sdus] = mcch_sdu_length; + + if (sdu_lengths[num_sdus] > 128) { + header_len_mcch = 3; + } + + sdu_length_total += sdu_lengths[num_sdus]; + LOG_D(MAC, + "[eNB %d] CC_id %d Got %d bytes for MCCH from RRC \n", + module_idP, CC_id, sdu_lengths[num_sdus]); + num_sdus++; + } } - mbsfn_period = 1<<(cc->mbsfn_SubframeConfig[j]->radioframeAllocationPeriod); - mcch_period = 32<<(cc->mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_RepetitionPeriod_r9); - msi_pos=0; - ii=0; - LOG_D(MAC,"[eNB %d] CC_id %d Frame %d subframeP %d : Checking MBSFN Sync Area %d/%d with SF allocation %d/%d for MCCH and MTCH (mbsfn period %d, mcch period %d)\n", - module_idP, CC_id, frameP, subframeP,i,cc->num_active_mbsfn_area, - j,cc->num_sf_allocation_pattern,mbsfn_period,mcch_period); - - - switch (cc->mbsfn_AreaInfo[i]->mcch_Config_r9.signallingMCS_r9) { - case 0: - mcch_mcs = 2; - break; - - case 1: - mcch_mcs = 7; - break; - - case 2: - mcch_mcs = 13; - break; - - case 3: - mcch_mcs = 19; - break; - } - - // 1st: Check the MBSFN subframes from SIB2 info (SF allocation pattern i, max 8 non-overlapping patterns exist) - if (frameP % mbsfn_period == cc->mbsfn_SubframeConfig[j]->radioframeAllocationOffset) { // MBSFN frameP - if (cc->mbsfn_SubframeConfig[j]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) { // one-frameP format - - // Find the first subframeP in this MCH to transmit MSI - if (frameP % mch_scheduling_period == cc->mbsfn_SubframeConfig[j]->radioframeAllocationOffset ) { - while (ii == 0) { - ii = cc->mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & (0x80>>msi_pos); - msi_pos++; - } - - LOG_D(MAC,"[eNB %d] CC_id %d Frame %d subframeP %d : sync area %d sf allocation pattern %d sf alloc %x msi pos is %d \n", - module_idP, CC_id, frameP, subframeP,i,j, - cc->mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0], msi_pos); - } - - // Check if the subframeP is for MSI, MCCH or MTCHs and Set the correspoding flag to 1 - switch (subframeP) { - case 1: - if (cc->tdd_Config == NULL) { - if ((cc->mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF1) == MBSFN_FDD_SF1) { - if (msi_pos == 1) { - msi_flag = 1; - } - - if ( (frameP % mcch_period == cc->mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((cc->mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF1) == MBSFN_FDD_SF1) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } - - break; - - case 2: - if (cc->tdd_Config == NULL) { - if ((cc->mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF2) == MBSFN_FDD_SF2) { - if (msi_pos == 2) { - msi_flag = 1; - } - - if ( (frameP % mcch_period == cc->mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((cc->mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF2) == MBSFN_FDD_SF2) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } - - break; - - case 3: - if (cc->tdd_Config != NULL) { // TDD - if ((cc->mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF3) == MBSFN_TDD_SF3) { - if (msi_pos == 1) { - msi_flag = 1; - } - - if ( (frameP % mcch_period == cc->mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((cc->mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF3) == MBSFN_TDD_SF3) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } else { // FDD - if ((cc->mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF3) == MBSFN_FDD_SF3) { - if (msi_pos == 3) { - msi_flag = 1; - } - - if ( (frameP % mcch_period == cc->mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((cc->mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF3) == MBSFN_FDD_SF3) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } - - break; - - case 4: - if (cc->tdd_Config != NULL) { - if ((cc->mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF4) == MBSFN_TDD_SF4) { - if (msi_pos == 2) { - msi_flag = 1; - } - - if ( (frameP % mcch_period == cc->mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((cc->mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF4) == MBSFN_TDD_SF4) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } - - break; - - case 6: - if (cc->tdd_Config == NULL) { - if ((cc->mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF6) == MBSFN_FDD_SF6) { - if (msi_pos == 4) { - msi_flag = 1; - } - - if ( (frameP % mcch_period == cc->mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((cc->mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF6) == MBSFN_FDD_SF6) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } - - break; - - case 7: - if (cc->tdd_Config != NULL) { // TDD - if ((cc->mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF7) == MBSFN_TDD_SF7) { - if (msi_pos == 3) { - msi_flag = 1; - } - - if ( (frameP % mcch_period == cc->mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((cc->mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF7) == MBSFN_TDD_SF7) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } else { // FDD - if ((cc->mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF7) == MBSFN_FDD_SF7) { - if (msi_pos == 5) { - msi_flag = 1; - } - - if ( (frameP % mcch_period == cc->mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((cc->mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF7) == MBSFN_FDD_SF7) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } - - break; - - case 8: - if (cc->tdd_Config != NULL) { //TDD - if ((cc->mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF8) == MBSFN_TDD_SF8) { - if (msi_pos == 4) { - msi_flag = 1; - } - - if ( (frameP % mcch_period == cc->mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((cc->mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF8) == MBSFN_TDD_SF8) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } else { // FDD - if ((cc->mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF8) == MBSFN_FDD_SF8) { - if (msi_pos == 6) { - msi_flag = 1; - } - - if ( (frameP % mcch_period == cc->mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((cc->mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF8) == MBSFN_FDD_SF8) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } - - break; - - case 9: - if (cc->tdd_Config != NULL) { - if ((cc->mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF9) == MBSFN_TDD_SF9) { - if (msi_pos == 5) { - msi_flag = 1; - } - - if ( (frameP % mcch_period == cc->mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((cc->mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF9) == MBSFN_TDD_SF9) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } - - break; - }// end switch - - // sf allocation is non-overlapping - if ((msi_flag==1) || (mcch_flag==1) || (mtch_flag==1)) { - LOG_D(MAC,"[eNB %d] CC_id %d Frame %d Subframe %d: sync area %d SF alloc %d: msi flag %d, mcch flag %d, mtch flag %d\n", - module_idP, CC_id, frameP, subframeP,i,j,msi_flag,mcch_flag,mtch_flag); - break; - } - } else { // four-frameP format - } - } - } // end of for loop - - cc->msi_active=0; - cc->mcch_active=0; - cc->mtch_active=0; - - // Calculate the mcs - if ((msi_flag==1) || (mcch_flag==1)) { - cc->MCH_pdu.mcs = mcch_mcs; - } else if (mtch_flag == 1) { // only MTCH in this subframeP - cc->MCH_pdu.mcs = cc->pmch_Config[0]->dataMCS_r9; - } - - - // 2nd: Create MSI, get MCCH from RRC and MTCHs from RLC - - // there is MSI (MCH Scheduling Info) - if (msi_flag == 1) { - // Create MSI here - uint16_t msi_control_element[29], *msi_ptr; - - msi_ptr = &msi_control_element[0]; - ((MSI_ELEMENT *) msi_ptr)->lcid = MCCH_LCHANID; //MCCH - - if (mcch_flag==1) { - ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0; - ((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0; - } else { // no mcch for this MSP - ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0x7;// stop value is 2047 - ((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0xff; - } - - msi_ptr+= sizeof(MSI_ELEMENT); - - //Header for MTCHs - num_mtch = cc->mbms_SessionList[0]->list.count; - - for (k=0; klcid = cc->mbms_SessionList[0]->list.array[k]->logicalChannelIdentity_r9;//mtch_lcid; - ((MSI_ELEMENT *) msi_ptr)->stop_sf_MSB = 0; // last subframeP of this mtch (only one mtch now) - ((MSI_ELEMENT *) msi_ptr)->stop_sf_LSB = 0xB; - msi_ptr+=sizeof(MSI_ELEMENT); - } - - msi_length = msi_ptr-msi_control_element; - - if (msi_length<128) { - header_len_msi = 2; - } else { - header_len_msi = 3; - } - - LOG_D(MAC,"[eNB %d] CC_id %d Frame %d : MSI->MCH, length of MSI is %d bytes \n", - module_idP,CC_id,frameP,msi_length); - //LOG_D(MAC,"Scheduler: MSI is transmitted in this subframeP \n" ); - - // LOG_D(MAC,"Scheduler: MSI length is %d bytes\n",msi_length); - // Store MSI data to mch_buffer[0] - memcpy((char *)&mch_buffer[sdu_length_total], - msi_control_element, - msi_length); - - sdu_lcids[num_sdus] = MCH_SCHDL_INFO; - sdu_lengths[num_sdus] = msi_length; - sdu_length_total += sdu_lengths[num_sdus]; - LOG_I(MAC,"[eNB %d] CC_id %d Create %d bytes for MSI\n", module_idP, CC_id, sdu_lengths[num_sdus]); - num_sdus++; - cc->msi_active=1; - } - - // there is MCCH - if (mcch_flag == 1) { - LOG_D(MAC,"[eNB %d] CC_id %d Frame %d Subframe %d: Schedule MCCH MESSAGE (area %d, sfAlloc %d)\n", - module_idP, CC_id, frameP, subframeP, i, j); - - mcch_sdu_length = mac_rrc_data_req(module_idP, - CC_id, - frameP, - MCCH,1, - &cc->MCCH_pdu.payload[0], - 1,// this is eNB - module_idP, // index - i); // this is the mbsfn sync area index - - if (mcch_sdu_length > 0) { - LOG_D(MAC,"[eNB %d] CC_id %d Frame %d subframeP %d : MCCH->MCH, Received %d bytes from RRC \n", - module_idP,CC_id,frameP,subframeP,mcch_sdu_length); - - header_len_mcch = 2; - - if (cc->tdd_Config != NULL) { - LOG_D(MAC,"[eNB %d] CC_id %d Frame %d subframeP %d: Scheduling MCCH->MCH (TDD) for MCCH message %d bytes (mcs %d )\n", - module_idP, CC_id, - frameP,subframeP, - mcch_sdu_length, - mcch_mcs); - } else { - LOG_I(MAC,"[eNB %d] CC_id %d Frame %d subframeP %d: Scheduling MCCH->MCH (FDD) for MCCH message %d bytes (mcs %d)\n", - module_idP, CC_id, - frameP, subframeP, - mcch_sdu_length, - mcch_mcs); - } - - cc->mcch_active=1; - - memcpy((char *)&mch_buffer[sdu_length_total], - &cc->MCCH_pdu.payload[0], - mcch_sdu_length); - sdu_lcids[num_sdus] = MCCH_LCHANID; - sdu_lengths[num_sdus] = mcch_sdu_length; - - if (sdu_lengths[num_sdus]>128) { - header_len_mcch = 3; - } - - sdu_length_total += sdu_lengths[num_sdus]; - LOG_D(MAC,"[eNB %d] CC_id %d Got %d bytes for MCCH from RRC \n",module_idP,CC_id,sdu_lengths[num_sdus]); - num_sdus++; - } - } - - TBS = get_TBS_DL(cc->MCH_pdu.mcs, to_prb(cc->mib->message.dl_Bandwidth)); + TBS = + get_TBS_DL(cc->MCH_pdu.mcs, to_prb(cc->mib->message.dl_Bandwidth)); #if defined(Rel10) || defined(Rel14) - // do not let mcch and mtch multiplexing when relaying is active - // for sync area 1, so not transmit data - //if ((i == 0) && ((RC.mac[module_idP]->MBMS_flag != multicast_relay) || (RC.mac[module_idP]->mcch_active==0))) { + // do not let mcch and mtch multiplexing when relaying is active + // for sync area 1, so not transmit data + //if ((i == 0) && ((RC.mac[module_idP]->MBMS_flag != multicast_relay) || (RC.mac[module_idP]->mcch_active==0))) { #endif - // there is MTCHs, loop if there are more than 1 - if (mtch_flag == 1) { - // Calculate TBS - /* if ((msi_flag==1) || (mcch_flag==1)) { - TBS = mac_xface->get_TBS(mcch_mcs, mac_xface->frame_parms->N_RB_DL); - } - else { // only MTCH in this subframeP - TBS = mac_xface->get_TBS(RC.mac[module_idP]->pmch_Config[0]->dataMCS_r9, mac_xface->frame_parms->N_RB_DL); - } + // there is MTCHs, loop if there are more than 1 + if (mtch_flag == 1) { + // Calculate TBS + /* if ((msi_flag==1) || (mcch_flag==1)) { + TBS = mac_xface->get_TBS(mcch_mcs, mac_xface->frame_parms->N_RB_DL); + } + else { // only MTCH in this subframeP + TBS = mac_xface->get_TBS(RC.mac[module_idP]->pmch_Config[0]->dataMCS_r9, mac_xface->frame_parms->N_RB_DL); + } - // get MTCH data from RLC (like for DTCH) - LOG_D(MAC,"[eNB %d] CC_id %d Frame %d subframe %d: Schedule MTCH (area %d, sfAlloc %d)\n",Mod_id,CC_id,frame,subframe,i,j); + // get MTCH data from RLC (like for DTCH) + LOG_D(MAC,"[eNB %d] CC_id %d Frame %d subframe %d: Schedule MTCH (area %d, sfAlloc %d)\n",Mod_id,CC_id,frame,subframe,i,j); - header_len_mtch = 3; - LOG_D(MAC,"[eNB %d], CC_id %d, Frame %d, MTCH->MCH, Checking RLC status (rab %d, tbs %d, len %d)\n", - Mod_id,CC_id,frame,MTCH,TBS, - TBS-header_len_mcch-header_len_msi-sdu_length_total-header_len_mtch); + header_len_mtch = 3; + LOG_D(MAC,"[eNB %d], CC_id %d, Frame %d, MTCH->MCH, Checking RLC status (rab %d, tbs %d, len %d)\n", + Mod_id,CC_id,frame,MTCH,TBS, + TBS-header_len_mcch-header_len_msi-sdu_length_total-header_len_mtch); - rlc_status = mac_rlc_status_ind(Mod_id,frame,1,RLC_MBMS_YES,MTCH+ (maxDRB + 3) * MAX_MOBILES_PER_RG, - TBS-header_len_mcch-header_len_msi-sdu_length_total-header_len_mtch); - printf("frame %d, subframe %d, rlc_status.bytes_in_buffer is %d\n",frame,subframe, rlc_status.bytes_in_buffer); + rlc_status = mac_rlc_status_ind(Mod_id,frame,1,RLC_MBMS_YES,MTCH+ (maxDRB + 3) * MAX_MOBILES_PER_RG, + TBS-header_len_mcch-header_len_msi-sdu_length_total-header_len_mtch); + printf("frame %d, subframe %d, rlc_status.bytes_in_buffer is %d\n",frame,subframe, rlc_status.bytes_in_buffer); - */ + */ - // get MTCH data from RLC (like for DTCH) - LOG_D(MAC,"[eNB %d] CC_id %d Frame %d subframeP %d: Schedule MTCH (area %d, sfAlloc %d)\n",module_idP,CC_id,frameP,subframeP,i,j); + // get MTCH data from RLC (like for DTCH) + LOG_D(MAC, + "[eNB %d] CC_id %d Frame %d subframeP %d: Schedule MTCH (area %d, sfAlloc %d)\n", + module_idP, CC_id, frameP, subframeP, i, j); - header_len_mtch = 3; - LOG_D(MAC,"[eNB %d], CC_id %d, Frame %d, MTCH->MCH, Checking RLC status (rab %d, tbs %d, len %d)\n", - module_idP,CC_id,frameP,MTCH,TBS, - TBS-header_len_mcch-header_len_msi-sdu_length_total-header_len_mtch); + header_len_mtch = 3; + LOG_D(MAC, + "[eNB %d], CC_id %d, Frame %d, MTCH->MCH, Checking RLC status (rab %d, tbs %d, len %d)\n", + module_idP, CC_id, frameP, MTCH, TBS, + TBS - header_len_mcch - header_len_msi - sdu_length_total - + header_len_mtch); - rlc_status = mac_rlc_status_ind(module_idP,0,frameP,subframeP,module_idP,ENB_FLAG_YES,MBMS_FLAG_YES,MTCH, - TBS-header_len_mcch-header_len_msi-sdu_length_total-header_len_mtch); - LOG_D(MAC,"e-MBMS log channel %u frameP %d, subframeP %d, rlc_status.bytes_in_buffer is %d\n", - MTCH,frameP,subframeP, rlc_status.bytes_in_buffer); + rlc_status = + mac_rlc_status_ind(module_idP, 0, frameP, subframeP, + module_idP, ENB_FLAG_YES, MBMS_FLAG_YES, + MTCH, + TBS - header_len_mcch - header_len_msi - + sdu_length_total - header_len_mtch); + LOG_D(MAC, + "e-MBMS log channel %u frameP %d, subframeP %d, rlc_status.bytes_in_buffer is %d\n", + MTCH, frameP, subframeP, rlc_status.bytes_in_buffer); - if (rlc_status.bytes_in_buffer >0) { - LOG_I(MAC,"[eNB %d][MBMS USER-PLANE], CC_id %d, Frame %d, MTCH->MCH, Requesting %d bytes from RLC (header len mtch %d)\n", - module_idP,CC_id,frameP,TBS-header_len_mcch-header_len_msi-sdu_length_total-header_len_mtch,header_len_mtch); + if (rlc_status.bytes_in_buffer > 0) { + LOG_I(MAC, + "[eNB %d][MBMS USER-PLANE], CC_id %d, Frame %d, MTCH->MCH, Requesting %d bytes from RLC (header len mtch %d)\n", + module_idP, CC_id, frameP, + TBS - header_len_mcch - header_len_msi - + sdu_length_total - header_len_mtch, header_len_mtch); - sdu_lengths[num_sdus] = mac_rlc_data_req( - module_idP, - 0, - module_idP, - frameP, - ENB_FLAG_YES, - MBMS_FLAG_YES, - MTCH, - 0, //not used - (char*)&mch_buffer[sdu_length_total]); - //sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP,frameP, MBMS_FLAG_NO, MTCH+(MAX_NUM_RB*(NUMBER_OF_UE_MAX+1)), (char*)&mch_buffer[sdu_length_total]); - LOG_I(MAC,"[eNB %d][MBMS USER-PLANE] CC_id %d Got %d bytes for MTCH %d\n",module_idP,CC_id,sdu_lengths[num_sdus],MTCH); - cc->mtch_active=1; - sdu_lcids[num_sdus] = MTCH; - sdu_length_total += sdu_lengths[num_sdus]; + sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, 0, module_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_YES, MTCH, 0, //not used + (char *) + &mch_buffer + [sdu_length_total]); + //sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP,frameP, MBMS_FLAG_NO, MTCH+(MAX_NUM_RB*(NUMBER_OF_UE_MAX+1)), (char*)&mch_buffer[sdu_length_total]); + LOG_I(MAC, + "[eNB %d][MBMS USER-PLANE] CC_id %d Got %d bytes for MTCH %d\n", + module_idP, CC_id, sdu_lengths[num_sdus], MTCH); + cc->mtch_active = 1; + sdu_lcids[num_sdus] = MTCH; + sdu_length_total += sdu_lengths[num_sdus]; - if (sdu_lengths[num_sdus] < 128) { - header_len_mtch = 2; - } + if (sdu_lengths[num_sdus] < 128) { + header_len_mtch = 2; + } - num_sdus++; - } else { - header_len_mtch = 0; + num_sdus++; + } else { + header_len_mtch = 0; + } } - } - #if defined(Rel10) || defined(Rel14) - // } + // } #endif - // FINAL STEP: Prepare and multiplexe MSI, MCCH and MTCHs - if ((sdu_length_total + header_len_msi + header_len_mcch + header_len_mtch) >0) { - // Adjust the last subheader - /* if ((msi_flag==1) || (mcch_flag==1)) { - RC.mac[module_idP]->MCH_pdu.mcs = mcch_mcs; - } - else if (mtch_flag == 1) { // only MTCH in this subframeP - RC.mac[module_idP]->MCH_pdu.mcs = RC.mac[module_idP]->pmch_Config[0]->dataMCS_r9; - } - */ - header_len_mtch_temp = header_len_mtch; - header_len_mcch_temp = header_len_mcch; - header_len_msi_temp = header_len_msi; + // FINAL STEP: Prepare and multiplexe MSI, MCCH and MTCHs + if ((sdu_length_total + header_len_msi + header_len_mcch + + header_len_mtch) > 0) { + // Adjust the last subheader + /* if ((msi_flag==1) || (mcch_flag==1)) { + RC.mac[module_idP]->MCH_pdu.mcs = mcch_mcs; + } + else if (mtch_flag == 1) { // only MTCH in this subframeP + RC.mac[module_idP]->MCH_pdu.mcs = RC.mac[module_idP]->pmch_Config[0]->dataMCS_r9; + } + */ + header_len_mtch_temp = header_len_mtch; + header_len_mcch_temp = header_len_mcch; + header_len_msi_temp = header_len_msi; - if (header_len_mtch>0) { - header_len_mtch=1; // remove Length field in the subheader for the last PDU - } else if (header_len_mcch>0) { - header_len_mcch=1; + if (header_len_mtch > 0) { + header_len_mtch = 1; // remove Length field in the subheader for the last PDU + } else if (header_len_mcch > 0) { + header_len_mcch = 1; + } else { + header_len_msi = 1; + } + + // Calculate the padding + if ((TBS - header_len_mtch - header_len_mcch - header_len_msi - + sdu_length_total) < 0) { + LOG_E(MAC, "Error in building MAC PDU, TBS %d < PDU %d \n", + TBS, + header_len_mtch + header_len_mcch + header_len_msi + + sdu_length_total); + return 0; + } else + if ((TBS - header_len_mtch - header_len_mcch - header_len_msi - + sdu_length_total) <= 2) { + padding = + (TBS - header_len_mtch - header_len_mcch - header_len_msi - + sdu_length_total); + post_padding = 0; + } else { // using post_padding, give back the Length field of subheader for the last PDU + padding = 0; + + if (header_len_mtch > 0) { + header_len_mtch = header_len_mtch_temp; + } else if (header_len_mcch > 0) { + header_len_mcch = header_len_mcch_temp; + } else { + header_len_msi = header_len_msi_temp; + } + + post_padding = + TBS - sdu_length_total - header_len_msi - header_len_mcch - + header_len_mtch; + } + + // Generate the MAC Header for MCH + // here we use the function for DLSCH because DLSCH & MCH have the same Header structure + offset = generate_dlsch_header((unsigned char *) cc->MCH_pdu.payload, num_sdus, sdu_lengths, sdu_lcids, 255, // no drx + 31, // no timing advance + NULL, // no contention res id + padding, post_padding); + + cc->MCH_pdu.Pdu_size = TBS; + cc->MCH_pdu.sync_area = i; + cc->MCH_pdu.msi_active = cc->msi_active; + cc->MCH_pdu.mcch_active = cc->mcch_active; + cc->MCH_pdu.mtch_active = cc->mtch_active; + LOG_D(MAC, + " MCS for this sf is %d (mcch active %d, mtch active %d)\n", + cc->MCH_pdu.mcs, cc->MCH_pdu.mcch_active, + cc->MCH_pdu.mtch_active); + LOG_I(MAC, + "[eNB %d][MBMS USER-PLANE ] CC_id %d Generate header : sdu_length_total %d, num_sdus %d, sdu_lengths[0] %d, sdu_lcids[0] %d => payload offset %d,padding %d,post_padding %d (mcs %d, TBS %d), header MTCH %d, header MCCH %d, header MSI %d\n", + module_idP, CC_id, sdu_length_total, num_sdus, + sdu_lengths[0], sdu_lcids[0], offset, padding, post_padding, + cc->MCH_pdu.mcs, TBS, header_len_mtch, header_len_mcch, + header_len_msi); + // copy SDU to mch_pdu after the MAC Header + memcpy(&cc->MCH_pdu.payload[offset], mch_buffer, sdu_length_total); + + // filling remainder of MCH with random data if necessery + for (j = 0; j < (TBS - sdu_length_total - offset); j++) { + cc->MCH_pdu.payload[offset + sdu_length_total + j] = + (char) (taus() & 0xff); + } + + /* Tracing of PDU is done on UE side */ + if (opt_enabled == 1) { + trace_pdu(1, (uint8_t *) cc->MCH_pdu.payload, TBS, module_idP, 6, 0xffff, // M_RNTI = 6 in wirehsark + RC.mac[module_idP]->frame, + RC.mac[module_idP]->subframe, 0, 0); + LOG_D(OPT, + "[eNB %d][MCH] CC_id %d Frame %d : MAC PDU with size %d\n", + module_idP, CC_id, frameP, TBS); + } + + /* + for (j=0;jMCH_pdu.payload[j+offset]); + printf(" \n"); */ + return 1; } else { - header_len_msi=1; - } - - // Calculate the padding - if ((TBS - header_len_mtch - header_len_mcch - header_len_msi - sdu_length_total) < 0) { - LOG_E(MAC,"Error in building MAC PDU, TBS %d < PDU %d \n", - TBS, header_len_mtch + header_len_mcch + header_len_msi + sdu_length_total); - return 0; - } else if ((TBS - header_len_mtch - header_len_mcch - header_len_msi - sdu_length_total) <= 2) { - padding = (TBS - header_len_mtch - header_len_mcch - header_len_msi - sdu_length_total); - post_padding = 0; - } else { // using post_padding, give back the Length field of subheader for the last PDU - padding = 0; - - if (header_len_mtch>0) { - header_len_mtch = header_len_mtch_temp; - } else if (header_len_mcch>0) { - header_len_mcch = header_len_mcch_temp; - } else { - header_len_msi = header_len_msi_temp; - } - - post_padding = TBS - sdu_length_total - header_len_msi - header_len_mcch - header_len_mtch; - } - - // Generate the MAC Header for MCH - // here we use the function for DLSCH because DLSCH & MCH have the same Header structure - offset = generate_dlsch_header((unsigned char*)cc->MCH_pdu.payload, - num_sdus, - sdu_lengths, - sdu_lcids, - 255, // no drx - 31, // no timing advance - NULL, // no contention res id - padding, - post_padding); - - cc->MCH_pdu.Pdu_size=TBS; - cc->MCH_pdu.sync_area=i; - cc->MCH_pdu.msi_active= cc->msi_active; - cc->MCH_pdu.mcch_active= cc->mcch_active; - cc->MCH_pdu.mtch_active= cc->mtch_active; - LOG_D(MAC," MCS for this sf is %d (mcch active %d, mtch active %d)\n", cc->MCH_pdu.mcs, - cc->MCH_pdu.mcch_active,cc->MCH_pdu.mtch_active ); - LOG_I(MAC, - "[eNB %d][MBMS USER-PLANE ] CC_id %d Generate header : sdu_length_total %d, num_sdus %d, sdu_lengths[0] %d, sdu_lcids[0] %d => payload offset %d,padding %d,post_padding %d (mcs %d, TBS %d), header MTCH %d, header MCCH %d, header MSI %d\n", - module_idP,CC_id,sdu_length_total,num_sdus,sdu_lengths[0],sdu_lcids[0],offset,padding,post_padding,cc->MCH_pdu.mcs,TBS, - header_len_mtch, header_len_mcch, header_len_msi); - // copy SDU to mch_pdu after the MAC Header - memcpy(&cc->MCH_pdu.payload[offset],mch_buffer,sdu_length_total); - - // filling remainder of MCH with random data if necessery - for (j=0; j<(TBS-sdu_length_total-offset); j++) { - cc->MCH_pdu.payload[offset+sdu_length_total+j] = (char)(taus()&0xff); - } - - /* Tracing of PDU is done on UE side */ - if (opt_enabled ==1 ) { - trace_pdu(1, (uint8_t *)cc->MCH_pdu.payload, - TBS, module_idP, 6, 0xffff, // M_RNTI = 6 in wirehsark - RC.mac[module_idP]->frame, RC.mac[module_idP]->subframe,0,0); - LOG_D(OPT,"[eNB %d][MCH] CC_id %d Frame %d : MAC PDU with size %d\n", - module_idP, CC_id, frameP, TBS); + cc->MCH_pdu.Pdu_size = 0; + cc->MCH_pdu.sync_area = 0; + cc->MCH_pdu.msi_active = 0; + cc->MCH_pdu.mcch_active = 0; + cc->MCH_pdu.mtch_active = 0; + // for testing purpose, fill with random data + //for (j=0;j<(TBS-sdu_length_total-offset);j++) + // RC.mac[module_idP]->MCH_pdu.payload[offset+sdu_length_total+j] = (char)(taus()&0xff); + return 0; } + //this is for testing /* - for (j=0;jMCH_pdu.payload[j+offset]); - printf(" \n");*/ - return 1; - } else { - cc->MCH_pdu.Pdu_size=0; - cc->MCH_pdu.sync_area=0; - cc->MCH_pdu.msi_active=0; - cc->MCH_pdu.mcch_active=0; - cc->MCH_pdu.mtch_active=0; - // for testing purpose, fill with random data - //for (j=0;j<(TBS-sdu_length_total-offset);j++) - // RC.mac[module_idP]->MCH_pdu.payload[offset+sdu_length_total+j] = (char)(taus()&0xff); - return 0; - } - - //this is for testing - /* - if (mtch_flag == 1) { - // LOG_D(MAC,"DUY: mch_buffer length so far is : %ld\n", &mch_buffer[sdu_length_total]-&mch_buffer[0]); - return 1; - } - else - return 0; - */ + if (mtch_flag == 1) { + // LOG_D(MAC,"DUY: mch_buffer length so far is : %ld\n", &mch_buffer[sdu_length_total]-&mch_buffer[0]); + return 1; + } + else + return 0; + */ } -MCH_PDU *get_mch_sdu(module_id_t module_idP, int CC_id, frame_t frameP, sub_frame_t subframeP) +MCH_PDU *get_mch_sdu(module_id_t module_idP, int CC_id, frame_t frameP, + sub_frame_t subframeP) { - // RC.mac[module_idP]->MCH_pdu.mcs=0; - //LOG_D(MAC," MCH_pdu.mcs is %d\n", RC.mac[module_idP]->MCH_pdu.mcs); + // RC.mac[module_idP]->MCH_pdu.mcs=0; + //LOG_D(MAC," MCH_pdu.mcs is %d\n", RC.mac[module_idP]->MCH_pdu.mcs); //#warning "MCH pdu should take the CC_id index" - return(&RC.mac[module_idP]->common_channels[CC_id].MCH_pdu); + return (&RC.mac[module_idP]->common_channels[CC_id].MCH_pdu); } #endif diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c index 19ff3cf39f..42c50d8063 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c @@ -53,7 +53,7 @@ #include "pdcp.h" #if defined(ENABLE_ITTI) -# include "intertask_interface.h" +#include "intertask_interface.h" #endif #include "T.h" @@ -61,1449 +61,1781 @@ #define ENABLE_MAC_PAYLOAD_DEBUG #define DEBUG_eNB_SCHEDULER 1 -int choose(int n,int k) +int choose(int n, int k) { - int res = 1; - int res2 = 1; - int i; + int res = 1; + int res2 = 1; + int i; - if (k>n) return(0); - if (n==k) return(1); + if (k > n) + return (0); + if (n == k) + return (1); - for (i=n;i>k;i--) res*=i; - for (i=2;i<=(n-k);i++) res2*=i; + for (i = n; i > k; i--) + res *= i; + for (i = 2; i <= (n - k); i++) + res2 *= i; - return(res/res2); + return (res / res2); } // Patented algorithm from Yang et al, US Patent 2009, "Channel Quality Indexing and Reverse Indexing" -void reverse_index(int N,int M,int r,int *v) +void reverse_index(int N, int M, int r, int *v) { - int BaseValue=0; - int IncreaseValue,ThresholdValue; - int sumV; - int i; + int BaseValue = 0; + int IncreaseValue, ThresholdValue; + int sumV; + int i; - r = choose(N,M) - 1 - r; - memset((void*)v,0,M*sizeof(int)); + r = choose(N, M) - 1 - r; + memset((void *) v, 0, M * sizeof(int)); - sumV=0; - i=M; - while (i>0 && r>0) { - IncreaseValue = choose(N-M+1-sumV-v[i-1]+i-2,i-1); - ThresholdValue = BaseValue+IncreaseValue; - if (r>=ThresholdValue) { - v[i-1]++; - BaseValue=ThresholdValue; + sumV = 0; + i = M; + while (i > 0 && r > 0) { + IncreaseValue = choose(N - M + 1 - sumV - v[i - 1] + i - 2, i - 1); + ThresholdValue = BaseValue + IncreaseValue; + if (r >= ThresholdValue) { + v[i - 1]++; + BaseValue = ThresholdValue; + } else { + r = r - BaseValue; + sumV += v[i - 1]; + i--; + BaseValue = 0; + } } - else { - r=r-BaseValue; - sumV+=v[i-1]; - i--; - BaseValue=0; - } - } } int to_prb(int dl_Bandwidth) { - int prbmap[6] = {6,15,25,50,75,100}; + int prbmap[6] = { 6, 15, 25, 50, 75, 100 }; - AssertFatal(dl_Bandwidth < 6,"dl_Bandwidth is 0..5\n"); - return(prbmap[dl_Bandwidth]); + AssertFatal(dl_Bandwidth < 6, "dl_Bandwidth is 0..5\n"); + return (prbmap[dl_Bandwidth]); } int to_rbg(int dl_Bandwidth) { - int rbgmap[6] = {6,8,13,17,19,25}; + int rbgmap[6] = { 6, 8, 13, 17, 19, 25 }; - AssertFatal(dl_Bandwidth < 6,"dl_Bandwidth is 0..5\n"); - return(rbgmap[dl_Bandwidth]); + AssertFatal(dl_Bandwidth < 6, "dl_Bandwidth is 0..5\n"); + return (rbgmap[dl_Bandwidth]); } -int get_phich_resource_times6(COMMON_channels_t *cc) +int get_phich_resource_times6(COMMON_channels_t * cc) { - int phichmap[4] = {1,3,6,12}; - AssertFatal(cc!=NULL,"cc is null\n"); - AssertFatal(cc->mib!=NULL,"cc->mib is null\n"); - AssertFatal((cc->mib->message.phich_Config.phich_Resource>=0) && - (cc->mib->message.phich_Config.phich_Resource<4), - "phich_Resource %d not in 0..3\n",(int)cc->mib->message.phich_Config.phich_Resource); + int phichmap[4] = { 1, 3, 6, 12 }; + AssertFatal(cc != NULL, "cc is null\n"); + AssertFatal(cc->mib != NULL, "cc->mib is null\n"); + AssertFatal((cc->mib->message.phich_Config.phich_Resource >= 0) && + (cc->mib->message.phich_Config.phich_Resource < 4), + "phich_Resource %d not in 0..3\n", + (int) cc->mib->message.phich_Config.phich_Resource); - return(phichmap[cc->mib->message.phich_Config.phich_Resource]); + return (phichmap[cc->mib->message.phich_Config.phich_Resource]); } -uint16_t mac_computeRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs) +uint16_t mac_computeRIV(uint16_t N_RB_DL, uint16_t RBstart, uint16_t Lcrbs) { - uint16_t RIV; + uint16_t RIV; - if (Lcrbs<=(1+(N_RB_DL>>1))) - RIV = (N_RB_DL*(Lcrbs-1)) + RBstart; - else - RIV = (N_RB_DL*(N_RB_DL+1-Lcrbs)) + (N_RB_DL-1-RBstart); + if (Lcrbs <= (1 + (N_RB_DL >> 1))) + RIV = (N_RB_DL * (Lcrbs - 1)) + RBstart; + else + RIV = (N_RB_DL * (N_RB_DL + 1 - Lcrbs)) + (N_RB_DL - 1 - RBstart); - return(RIV); + return (RIV); } uint8_t getQm(uint8_t mcs) { - if (mcs<10) return(2); - else if (mcs<17) return(4); - else return (6); -} - -void get_Msg3alloc(COMMON_channels_t *cc, - - sub_frame_t current_subframe, - frame_t current_frame, - frame_t *frame, - sub_frame_t *subframe) -{ - // Fill in other TDD Configuration!!!! - - if (cc->tdd_Config==NULL) { // FDD - *subframe = current_subframe+6; - - if (*subframe>9) { - *subframe = *subframe-10; - *frame = (current_frame+1) & 1023; - } else { - *frame=current_frame; - } - } else { // TDD - if (cc->tdd_Config->subframeAssignment == 1) { - switch (current_subframe) { - - case 0: - *subframe = 7; - *frame = current_frame; - break; - - case 4: - *subframe = 2; - *frame = (current_frame+1) & 1023; - break; - - case 5: - *subframe = 2; - *frame = (current_frame+1) & 1023; - break; - - case 9: - *subframe = 7; - *frame = (current_frame+1) & 1023; - break; - } - } else if (cc->tdd_Config->subframeAssignment == 3) { - switch (current_subframe) { - - case 0: - case 5: - case 6: - *subframe = 2; - *frame = (current_frame+1) & 1023; - break; - - case 7: - *subframe = 3; - *frame = (current_frame+1) & 1023; - break; - - case 8: - *subframe = 4; - *frame = (current_frame+1) & 1023; - break; - - case 9: - *subframe = 2; - *frame = (current_frame+2) & 1023; - break; - } - } else if (cc->tdd_Config->subframeAssignment == 4) { - switch (current_subframe) { - - case 0: - case 4: - case 5: - case 6: - *subframe = 2; - *frame = (current_frame+1) & 1023; - break; - - case 7: - *subframe = 3; - *frame = (current_frame+1) & 1023; - break; - - case 8: - case 9: - *subframe = 2; - *frame = (current_frame+2) & 1023; - break; - } - } else if (cc->tdd_Config->subframeAssignment == 5) { - switch (current_subframe) { - - case 0: - case 4: - case 5: - case 6: - *subframe = 2; - *frame = (current_frame+1) & 1023; - break; - - case 7: - case 8: - case 9: - *subframe = 2; - *frame = (current_frame+2) & 1023; - break; - } - } - } -} - - - -void get_Msg3allocret(COMMON_channels_t *cc, - sub_frame_t current_subframe, - frame_t current_frame, - frame_t *frame, - sub_frame_t *subframe) -{ - if (cc->tdd_Config == NULL) { //FDD - /* always retransmit in n+8 */ - *subframe = current_subframe + 8; - - if (*subframe > 9) { - *subframe = *subframe - 10; - *frame = (current_frame + 1) & 1023; - } else { - *frame = current_frame; - } - } else { - if (cc->tdd_Config->subframeAssignment == 1) { - // original PUSCH in 2, PHICH in 6 (S), ret in 2 - // original PUSCH in 3, PHICH in 9, ret in 3 - // original PUSCH in 7, PHICH in 1 (S), ret in 7 - // original PUSCH in 8, PHICH in 4, ret in 8 - *frame = (current_frame+1) & 1023; - } else if (cc->tdd_Config->subframeAssignment == 3) { - // original PUSCH in 2, PHICH in 8, ret in 2 next frame - // original PUSCH in 3, PHICH in 9, ret in 3 next frame - // original PUSCH in 4, PHICH in 0, ret in 4 next frame - *frame=(current_frame+1) & 1023; - } else if (cc->tdd_Config->subframeAssignment == 4) { - // original PUSCH in 2, PHICH in 8, ret in 2 next frame - // original PUSCH in 3, PHICH in 9, ret in 3 next frame - *frame=(current_frame+1) & 1023; - } else if (cc->tdd_Config->subframeAssignment == 5) { - // original PUSCH in 2, PHICH in 8, ret in 2 next frame - *frame=(current_frame+1) & 1023; - } - } -} - -uint8_t subframe2harqpid(COMMON_channels_t *cc,frame_t frame,sub_frame_t subframe) -{ - uint8_t ret = 255; - - AssertFatal(cc!=NULL,"cc is null\n"); - - if (cc->tdd_Config == NULL) { // FDD - ret = (((frame<<1)+subframe)&7); - } else { - switch (cc->tdd_Config->subframeAssignment) { - case 1: - if ((subframe==2) || - (subframe==3) || - (subframe==7) || - (subframe==8)) - switch (subframe) { - case 2: - case 3: - ret = (subframe-2); - break; - - case 7: - case 8: - ret = (subframe-5); - break; - - default: - AssertFatal(1==0,"subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n",subframe,(int)cc->tdd_Config->subframeAssignment); - break; - } - - break; - - case 2: - AssertFatal((subframe==2) || (subframe==7), - "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n",subframe,(int)cc->tdd_Config->subframeAssignment); - - ret = (subframe/7); - break; - - case 3: - AssertFatal((subframe>1) && (subframe<5), - "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n",subframe,(int)cc->tdd_Config->subframeAssignment); - ret = (subframe-2); - break; - - case 4: - AssertFatal((subframe>1) && (subframe<4), - "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n",subframe,(int)cc->tdd_Config->subframeAssignment); - ret = (subframe-2); - break; - - case 5: - AssertFatal(subframe==2, - "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n",subframe,(int)cc->tdd_Config->subframeAssignment); - ret = (subframe-2); - break; - - default: - AssertFatal(1==0,"subframe2_harq_pid, Unsupported TDD mode %d\n",(int)cc->tdd_Config->subframeAssignment); - } - } - return ret; -} - -uint8_t get_Msg3harqpid(COMMON_channels_t *cc, - frame_t frame, - sub_frame_t current_subframe) -{ - uint8_t ul_subframe=0; - uint32_t ul_frame=0; - - if (cc->tdd_Config == NULL) { // FDD - ul_subframe = (current_subframe>3) ? (current_subframe-4) : (current_subframe+6); - ul_frame = (current_subframe>3) ? ((frame+1)&1023) : frame; - } else { - switch (cc->tdd_Config->subframeAssignment) { - case 1: - switch (current_subframe) { - case 9: - case 0: - ul_subframe = 7; - break; - - case 5: - case 7: - ul_subframe = 2; - break; - - } - - break; - - case 3: - switch (current_subframe) { - case 0: - case 5: - case 6: - ul_subframe = 2; - break; - - case 7: - ul_subframe = 3; - break; - - case 8: - ul_subframe = 4; - break; - - case 9: - ul_subframe = 2; - break; - } - - break; - - case 4: - switch (current_subframe) { - case 0: - case 5: - case 6: - case 8: - case 9: - ul_subframe = 2; - break; - - case 7: - ul_subframe = 3; - break; - } - - break; - - case 5: - ul_subframe =2; - break; - - default: - LOG_E(PHY,"get_Msg3_harq_pid: Unsupported TDD configuration %d\n",(int)cc->tdd_Config->subframeAssignment); - AssertFatal(1==0,"get_Msg3_harq_pid: Unsupported TDD configuration"); - break; - } - } - - return(subframe2harqpid(cc,ul_frame,ul_subframe)); -} - -uint32_t pdcchalloc2ulframe(COMMON_channels_t *ccP,uint32_t frame, uint8_t n) -{ - uint32_t ul_frame; - - if ((ccP->tdd_Config) && - (ccP->tdd_Config->subframeAssignment == 1) && - ((n==1)||(n==6))) // tdd_config 0,1 SF 1,5 - ul_frame = (frame + (n==1 ? 0 : 1)); - else if ((ccP->tdd_Config) && - (ccP->tdd_Config->subframeAssignment == 6) && - ((n==0)||(n==1)||(n==5)||(n==6))) - ul_frame = (frame + (n>=5 ? 1 : 0)); - else if ((ccP->tdd_Config) && - (ccP->tdd_Config->subframeAssignment == 6) && - (n==9)) // tdd_config 6 SF 9 - ul_frame = (frame+1); - else - ul_frame = (frame+(n>=6 ? 1 : 0)); - - LOG_D(PHY, "frame %d subframe %d: PUSCH frame = %d\n", frame, n, ul_frame); - return ul_frame; -} - -uint8_t pdcchalloc2ulsubframe(COMMON_channels_t *ccP,uint8_t n) -{ - uint8_t ul_subframe; - - if ((ccP->tdd_Config) && - (ccP->tdd_Config->subframeAssignment == 1) && - ((n==1)||(n==6))) // tdd_config 0,1 SF 1,5 - ul_subframe = ((n+6)%10); - else if ((ccP->tdd_Config) && - (ccP->tdd_Config->subframeAssignment == 6) && - ((n==0)||(n==1)||(n==5)||(n==6))) - ul_subframe = ((n+7)%10); - else if ((ccP->tdd_Config) && - (ccP->tdd_Config->subframeAssignment == 6) && - (n==9)) // tdd_config 6 SF 9 - ul_subframe = ((n+5)%10); - else - ul_subframe = ((n+4)%10); - - LOG_D(PHY, "subframe %d: PUSCH subframe = %d\n", n, ul_subframe); - return ul_subframe; -} - -int is_UL_sf(COMMON_channels_t *ccP,sub_frame_t subframeP) -{ - // if FDD return dummy value - if (ccP->tdd_Config == NULL) - return(0); - - switch (ccP->tdd_Config->subframeAssignment) { - case 1: - switch (subframeP) { - case 0: - case 4: - case 5: - case 9: - return(0); - break; - - case 2: - case 3: - case 7: - case 8: - return(1); - break; - - default: - return(0); - break; - } - break; - - case 3: - if ((subframeP<=1) || (subframeP>=5)) - return(0); - else if ((subframeP>1) && (subframeP < 5)) - return(1); - else AssertFatal(1==0,"Unknown subframe number\n"); - break; - - case 4: - if ((subframeP<=1) || (subframeP>=4)) - return(0); - else if ((subframeP>1) && (subframeP < 4)) - return(1); - else AssertFatal(1==0,"Unknown subframe number\n"); - break; - - case 5: - if ((subframeP<=1) || (subframeP>=3)) - return(0); - else if ((subframeP>1) && (subframeP < 3)) - return(1); - else AssertFatal(1==0,"Unknown subframe number\n"); - break; - - default: - AssertFatal(1==0,"subframe %d Unsupported TDD configuration %d\n", - subframeP,(int)ccP->tdd_Config->subframeAssignment); - break; - } -} - -uint16_t get_pucch1_absSF(COMMON_channels_t *cc,uint16_t dlsch_absSF) -{ - uint16_t sf,f,nextf; - - if (cc->tdd_Config==NULL) { //FDD n+4 - return((dlsch_absSF + 4)%10240); - } - else { - sf = dlsch_absSF%10; - f = dlsch_absSF/10; - nextf = (f+1)&1023; - - switch (cc->tdd_Config->subframeAssignment) { - case 0: - AssertFatal(1==0,"SFA 0 to be filled in now, :-)\n"); - break; - case 1: - if ((sf==5) || (sf==6)) return((10*nextf) + 2); // ACK/NAK in SF 2 next frame - else if (sf==9) return((10*nextf) + 3); // ACK/NAK in SF 3 next frame - else if ((sf==0) || (sf==1)) return((10*f) + 2); // ACK/NAK in SF 7 same frame - else AssertFatal(1==0,"Impossible dlsch subframe %d for TDD configuration 3\n",sf); - break; - case 2: - if ((sf==4) || (sf==5) || (sf==6) || (sf==8)) return((10*nextf) + 2); // ACK/NAK in SF 2 next frame - else if (sf==9) return((10*nextf) + 7); // ACK/NAK in SF 7 next frame - else if ((sf==0) || (sf==1) || (sf==3)) return((10*f) + 7); // ACK/NAK in SF 7 same frame - else AssertFatal(1==0,"Impossible dlsch subframe %d for TDD configuration 3\n",sf); - break; - case 3: - if ((sf==5) || (sf==6) || (sf==7) || (sf==8) || (sf==9)) return((10*nextf) + (sf>>1)); // ACK/NAK in 2,3,4 resp. next frame - else if (sf==1) return((10*nextf) + 2); // ACK/NAK in 2 next frame - else if (sf==0) return((10*f) + 4); // ACK/NAK in 4 same frame - else AssertFatal(1==0,"Impossible dlsch subframe %d for TDD configuration 3\n",sf); - break; - case 4: - if ((sf==6) || (sf==7) || (sf==8) || (sf==9)) return(((10*nextf) + 3)%10240); // ACK/NAK in SF 3 next frame - else if ((sf==0) || (sf==1) || (sf==4) || (sf==5)) return(((10*nextf) + 2)%10240); // ACK/NAK in SF 2 next frame - else AssertFatal(1==0,"Impossible dlsch subframe %d for TDD configuration 4\n",sf); - break; - case 5: - if ((sf==0) || (sf==1) || (sf==3) || (sf==4) || (sf==5) || (sf==6) || (sf==7) || (sf==8)) return(((10*nextf) + 2)%10240); // ACK/NAK in SF 3 next frame - else if (sf==9) return(((10*(1+nextf)) + 2)%10240); // ACK/NAK in SF 2 next frame - else AssertFatal(1==0,"Impossible dlsch subframe %d for TDD configuration 5\n",sf); - break; - case 6: - AssertFatal(1==0,"SFA 6 To be filled in now, :-)\n"); - break; - default: - AssertFatal(1==0,"Illegal TDD subframe Assigment %d\n",(int)cc->tdd_Config->subframeAssignment); - break; - } - } - AssertFatal(1==0,"Shouldn't get here\n"); -} - -void get_srs_pos(COMMON_channels_t *cc,uint16_t isrs,uint16_t *psrsPeriodicity,uint16_t *psrsOffset) -{ - if(cc->tdd_Config) { // TDD - AssertFatal(isrs>=10,"2 ms SRS periodicity not supported"); - - if ((isrs>9)&&(isrs<15)) { - *psrsPeriodicity=5; - *psrsOffset=isrs-10; - } - if ((isrs>14)&&(isrs<25)) { - *psrsPeriodicity=10; - *psrsOffset=isrs-15; - } - if ((isrs>24)&&(isrs<45)) { - *psrsPeriodicity=20; - *psrsOffset=isrs-25; - } - if ((isrs>44)&&(isrs<85)) { - *psrsPeriodicity=40; - *psrsOffset=isrs-45; - } - if ((isrs>84)&&(isrs<165)) { - *psrsPeriodicity=80; - *psrsOffset=isrs-85; - } - if ((isrs>164)&&(isrs<325)) { - *psrsPeriodicity=160; - *psrsOffset=isrs-165; - } - if ((isrs>324)&&(isrs<645)) { - *psrsPeriodicity=320; - *psrsOffset=isrs-325; - } - - AssertFatal(isrs<=644,"Isrs out of range %d>644\n",isrs); - } // TDD - else { // FDD - if (isrs<2) { - *psrsPeriodicity=2; - *psrsOffset=isrs; - } - if ((isrs>1)&&(isrs<7)) { - *psrsPeriodicity=5; - *psrsOffset=isrs-2; - } - if ((isrs>6)&&(isrs<17)) { - *psrsPeriodicity=10; - *psrsOffset=isrs-7; - } - if ((isrs>16)&&(isrs<37)) { - *psrsPeriodicity=20; - *psrsOffset=isrs-17; - } - if ((isrs>36)&&(isrs<77)) { - *psrsPeriodicity=40; - *psrsOffset=isrs-37; - } - if ((isrs>76)&&(isrs<157)) { - *psrsPeriodicity=80; - *psrsOffset=isrs-77; - } - if ((isrs>156)&&(isrs<317)) { - *psrsPeriodicity=160; - *psrsOffset=isrs-157; - } - if ((isrs>316)&&(isrs<637)) { - *psrsPeriodicity=320; - *psrsOffset=isrs-317; - } - AssertFatal(isrs<=636,"Isrs out of range %d>636\n",isrs); - } -} - -void get_csi_params(COMMON_channels_t *cc,struct CQI_ReportPeriodic *cqi_ReportPeriodic,uint16_t *Npd,uint16_t *N_OFFSET_CQI,int *H) -{ - uint16_t cqi_PMI_ConfigIndex = cqi_ReportPeriodic->choice.setup.cqi_pmi_ConfigIndex; - uint8_t Jtab[6] = {0,2,2,3,4,4}; - - AssertFatal(cqi_ReportPeriodic!=NULL,"cqi_ReportPeriodic is null!\n"); - - if (cc->tdd_Config==NULL) { //FDD - if (cqi_PMI_ConfigIndex <= 1) { // 2 ms CQI_PMI period - *Npd = 2; - *N_OFFSET_CQI = cqi_PMI_ConfigIndex; - } else if (cqi_PMI_ConfigIndex <= 6) { // 5 ms CQI_PMI period - *Npd = 5; - *N_OFFSET_CQI = cqi_PMI_ConfigIndex-2; - } else if (cqi_PMI_ConfigIndex <=16) { // 10ms CQI_PMI period - *Npd = 10; - *N_OFFSET_CQI = cqi_PMI_ConfigIndex-7; - } else if (cqi_PMI_ConfigIndex <= 36) { // 20 ms CQI_PMI period - *Npd = 20; - *N_OFFSET_CQI = cqi_PMI_ConfigIndex-17; - } else if (cqi_PMI_ConfigIndex <= 76) { // 40 ms CQI_PMI period - *Npd = 40; - *N_OFFSET_CQI = cqi_PMI_ConfigIndex-37; - } else if (cqi_PMI_ConfigIndex <= 156) { // 80 ms CQI_PMI period - *Npd = 80; - *N_OFFSET_CQI = cqi_PMI_ConfigIndex-77; - } else if (cqi_PMI_ConfigIndex <= 316) { // 160 ms CQI_PMI period - *Npd = 160; - *N_OFFSET_CQI = cqi_PMI_ConfigIndex-157; - } - else if (cqi_PMI_ConfigIndex > 317) { - - if (cqi_PMI_ConfigIndex <= 349) { // 32 ms CQI_PMI period - *Npd = 32; - *N_OFFSET_CQI = cqi_PMI_ConfigIndex-318; - } - else if (cqi_PMI_ConfigIndex <= 413) { // 64 ms CQI_PMI period - *Npd = 64; - *N_OFFSET_CQI = cqi_PMI_ConfigIndex-350; - } - else if (cqi_PMI_ConfigIndex <= 541) { // 128 ms CQI_PMI period - *Npd = 128; - *N_OFFSET_CQI = cqi_PMI_ConfigIndex-414; - } - } - } - else { // TDD - if (cqi_PMI_ConfigIndex == 0) { // all UL subframes - *Npd = 1; - *N_OFFSET_CQI = 0; - } else if (cqi_PMI_ConfigIndex <= 6) { // 5 ms CQI_PMI period - *Npd = 5; - *N_OFFSET_CQI = cqi_PMI_ConfigIndex-1; - } else if (cqi_PMI_ConfigIndex <=16) { // 10ms CQI_PMI period - *Npd = 10; - *N_OFFSET_CQI = cqi_PMI_ConfigIndex-6; - } else if (cqi_PMI_ConfigIndex <= 36) { // 20 ms CQI_PMI period - *Npd = 20; - *N_OFFSET_CQI = cqi_PMI_ConfigIndex-16; - } else if (cqi_PMI_ConfigIndex <= 76) { // 40 ms CQI_PMI period - *Npd = 40; - *N_OFFSET_CQI = cqi_PMI_ConfigIndex-36; - } else if (cqi_PMI_ConfigIndex <= 156) { // 80 ms CQI_PMI period - *Npd = 80; - *N_OFFSET_CQI = cqi_PMI_ConfigIndex-76; - } else if (cqi_PMI_ConfigIndex <= 316) { // 160 ms CQI_PMI period - *Npd = 160; - *N_OFFSET_CQI = cqi_PMI_ConfigIndex-156; - } - } - - // get H - if (cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic.present == CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_subbandCQI) - *H = 1+(Jtab[cc->mib->message.dl_Bandwidth]*cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic.choice.subbandCQI.k); - else - *H=1; -} - -uint8_t get_dl_cqi_pmi_size_pusch(COMMON_channels_t *cc,uint8_t tmode,uint8_t ri, CQI_ReportModeAperiodic_t *cqi_ReportModeAperiodic) -{ - int Ntab[6] = {0,4,7,9,10,13}; - int N = Ntab[cc->mib->message.dl_Bandwidth]; - int Ltab_uesel[6] = {0,6,9,13,15,18}; - int L = Ltab_uesel[cc->mib->message.dl_Bandwidth]; - - AssertFatal(cqi_ReportModeAperiodic != NULL,"cqi_ReportPeriodic is null!\n"); - - switch (*cqi_ReportModeAperiodic) { - case CQI_ReportModeAperiodic_rm12: - AssertFatal(tmode==4 || tmode==6 || tmode==8 || tmode==9 || tmode==10,"Illegal TM (%d) for CQI_ReportModeAperiodic_rm12\n",tmode); - AssertFatal(cc->p_eNB<=4,"only up to 4 antenna ports supported here\n"); - if (ri==1 && cc->p_eNB==2) return(4+(N<<1)); - else if (ri==2 && cc->p_eNB==2) return(8+N); - else if (ri==1 && cc->p_eNB==4) return(4+(N<<2)); - else if (ri>1 && cc->p_eNB==4) return(8+(N<<2)); - break; - case CQI_ReportModeAperiodic_rm20: - // Table 5.2.2.6.3-1 (36.212) - AssertFatal(tmode==1 || tmode==2 || tmode==3 || tmode==7 || tmode==9 || tmode==10,"Illegal TM (%d) for CQI_ReportModeAperiodic_rm20\n",tmode); - AssertFatal(tmode!=9 && tmode!=10,"TM9/10 will be handled later for CQI_ReportModeAperiodic_rm20\n"); - return(4+2+L); - break; - case CQI_ReportModeAperiodic_rm22: - // Table 5.2.2.6.3-2 (36.212) - AssertFatal(tmode==4 || tmode==6 || tmode==8 || tmode==9 || tmode==10,"Illegal TM (%d) for CQI_ReportModeAperiodic_rm22\n",tmode); - AssertFatal(tmode!=9 && tmode!=10,"TM9/10 will be handled later for CQI_ReportModeAperiodic_rm22\n"); - if (ri==1 && cc->p_eNB==2) return(4+2+0+0+L+4); - if (ri==2 && cc->p_eNB==2) return(4+2+4+2+L+2); - if (ri==1 && cc->p_eNB==4) return(4+2+0+0+L+8); - if (ri>=2 && cc->p_eNB==4) return(4+2+4+2+L+8); - break; - case CQI_ReportModeAperiodic_rm30: - // Table 5.2.2.6.2-1 (36.212) - AssertFatal(tmode==1 || tmode==2 || tmode==3 || tmode==7 || tmode==8 || tmode==9 || tmode==10,"Illegal TM (%d) for CQI_ReportModeAperiodic_rm30\n",tmode); - AssertFatal(tmode!=8 && tmode!=9 && tmode!=10,"TM8/9/10 will be handled later for CQI_ReportModeAperiodic_rm30\n"); - return(4+(N<<1)); - break; - case CQI_ReportModeAperiodic_rm31: - // Table 5.2.2.6.2-2 (36.212) - AssertFatal(tmode==4 || tmode==6 || tmode==8 || tmode==9 || tmode==10,"Illegal TM (%d) for CQI_ReportModeAperiodic_rm31\n",tmode); - AssertFatal(tmode!=8 && tmode!=9 && tmode!=10,"TM8/9/10 will be handled later for CQI_ReportModeAperiodic_rm31\n"); - if (ri==1 && cc->p_eNB==2) return(4+(N<<1)+0+0+2); - else if (ri==2 && cc->p_eNB==2) return(4+(N<<1)+4+(N<<1)+1); - else if (ri==1 && cc->p_eNB==4) return(4+(N<<1)+0+0+4); - else if (ri>=2 && cc->p_eNB==4) return(4+(N<<1)+4+(N<<1)+4); - break; - case CQI_ReportModeAperiodic_rm32_v1250: - AssertFatal(tmode==4 || tmode==6 || tmode==8 || tmode==9 || tmode==10,"Illegal TM (%d) for CQI_ReportModeAperiodic_rm32\n",tmode); - AssertFatal(1==0,"CQI_ReportModeAperiodic_rm32_v1250 not supported yet\n"); - break; - case CQI_ReportModeAperiodic_rm10_v1310: - // Table 5.2.2.6.1-1F/G (36.212) - if (ri==1) return(4); // F - else return(7); // G - break; - case CQI_ReportModeAperiodic_rm11_v1310: - // Table 5.2.2.6.1-1H (36.212) - AssertFatal(tmode==4 || tmode==6 || tmode==8 || tmode==9 || tmode==10,"Illegal TM (%d) for CQI_ReportModeAperiodic_rm11\n",tmode); - AssertFatal(cc->p_eNB<=4,"only up to 4 antenna ports supported here\n"); - if (ri==1 && cc->p_eNB==2) return(4+0+2); - else if (ri==2 && cc->p_eNB==2) return(4+4+1); - else if (ri==1 && cc->p_eNB==4) return(4+0+4); - else if (ri>1 && cc->p_eNB==4) return(4+4+4); - - break; - } - AssertFatal(1==0,"Shouldn't get here\n"); - return(0); -} - -uint8_t get_rel8_dl_cqi_pmi_size(UE_sched_ctrl *sched_ctl,int CC_idP,COMMON_channels_t *cc,uint8_t tmode, struct CQI_ReportPeriodic *cqi_ReportPeriodic) -{ - int no_pmi=0; - // Ltab[6] = {0,log2(15/4/2),log2(25/4/2),log2(50/6/3),log2(75/8/4),log2(100/8/4)}; - - uint8_t Ltab[6] = {0,1,2,2,2,2}; - uint8_t ri = sched_ctl->periodic_ri_received[CC_idP]; - - AssertFatal(cqi_ReportPeriodic != NULL,"cqi_ReportPeriodic is null!\n"); - AssertFatal(cqi_ReportPeriodic->present != CQI_ReportPeriodic_PR_NOTHING, - "cqi_ReportPeriodic->present == CQI_ReportPeriodic_PR_NOTHING!\n"); - AssertFatal(cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic.present != CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_NOTHING, - "cqi_ReportPeriodic->cqi_FormatIndicatorPeriodic.choice.setup.present == CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_NOTHING!\n"); - - switch(tmode) { - case 1: - case 2: - case 5: - case 6: - case 7: - no_pmi=1; - break; - default: - no_pmi=0; - } - - if ((cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic.present == CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_widebandCQI) || - (sched_ctl->feedback_cnt[CC_idP] == 0)) { - // send wideband report every opportunity if wideband reporting mode is selected, else every H opportunities - if (no_pmi == 1) - return(4); - else if ((cc->p_eNB==2) && (ri==1)) return(6); - else if ((cc->p_eNB==2) && (ri==2)) return(8); - else if ((cc->p_eNB==4) && (ri==1)) return(8); - else if ((cc->p_eNB==4) && (ri==2)) return(11); - else AssertFatal(1==0,"illegal combination p %d, ri %d, no_pmi %d\n",cc->p_eNB,ri,no_pmi); - } - else if (cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic.present == CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_subbandCQI) { - if ((no_pmi == 1)||ri==1) return(4+Ltab[cc->mib->message.dl_Bandwidth]); + if (mcs < 10) + return (2); + else if (mcs < 17) + return (4); else - return(7+Ltab[cc->mib->message.dl_Bandwidth]); - } - AssertFatal(1==0,"Shouldn't get here : cqi_ReportPeriodic->present %d\n",cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic.present); + return (6); } -void fill_nfapi_dl_dci_1A(nfapi_dl_config_request_pdu_t *dl_config_pdu, - uint8_t aggregation_level, - uint16_t rnti, - uint8_t rnti_type, - uint8_t harq_process, - uint8_t tpc, - uint16_t resource_block_coding, - uint8_t mcs, - uint8_t ndi, - uint8_t rv, - uint8_t vrb_flag) +void +get_Msg3alloc(COMMON_channels_t * cc, + sub_frame_t current_subframe, + frame_t current_frame, frame_t * frame, + sub_frame_t * subframe) { - memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; - dl_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_dl_config_dci_dl_pdu)); - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format = NFAPI_DL_DCI_FORMAT_1A; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level = aggregation_level; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = rnti; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = rnti_type; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000; // equal to RS power - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process = harq_process; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc = tpc; // no TPC - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = resource_block_coding; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1 = mcs; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1 = ndi; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1 = rv; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.virtual_resource_block_assignment_flag = vrb_flag; + // Fill in other TDD Configuration!!!! + + if (cc->tdd_Config == NULL) { // FDD + *subframe = current_subframe + 6; + + if (*subframe > 9) { + *subframe = *subframe - 10; + *frame = (current_frame + 1) & 1023; + } else { + *frame = current_frame; + } + } else { // TDD + if (cc->tdd_Config->subframeAssignment == 1) { + switch (current_subframe) { + + case 0: + *subframe = 7; + *frame = current_frame; + break; + + case 4: + *subframe = 2; + *frame = (current_frame + 1) & 1023; + break; + + case 5: + *subframe = 2; + *frame = (current_frame + 1) & 1023; + break; + + case 9: + *subframe = 7; + *frame = (current_frame + 1) & 1023; + break; + } + } else if (cc->tdd_Config->subframeAssignment == 3) { + switch (current_subframe) { + + case 0: + case 5: + case 6: + *subframe = 2; + *frame = (current_frame + 1) & 1023; + break; + + case 7: + *subframe = 3; + *frame = (current_frame + 1) & 1023; + break; + + case 8: + *subframe = 4; + *frame = (current_frame + 1) & 1023; + break; + + case 9: + *subframe = 2; + *frame = (current_frame + 2) & 1023; + break; + } + } else if (cc->tdd_Config->subframeAssignment == 4) { + switch (current_subframe) { + + case 0: + case 4: + case 5: + case 6: + *subframe = 2; + *frame = (current_frame + 1) & 1023; + break; + + case 7: + *subframe = 3; + *frame = (current_frame + 1) & 1023; + break; + + case 8: + case 9: + *subframe = 2; + *frame = (current_frame + 2) & 1023; + break; + } + } else if (cc->tdd_Config->subframeAssignment == 5) { + switch (current_subframe) { + + case 0: + case 4: + case 5: + case 6: + *subframe = 2; + *frame = (current_frame + 1) & 1023; + break; + + case 7: + case 8: + case 9: + *subframe = 2; + *frame = (current_frame + 2) & 1023; + break; + } + } + } } -void program_dlsch_acknak(module_id_t module_idP, int CC_idP,int UE_idP, frame_t frameP, sub_frame_t subframeP,uint8_t cce_idx) -{ - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc = eNB->common_channels; - UE_list_t *UE_list = &eNB->UE_list; - rnti_t rnti = UE_RNTI(module_idP,UE_idP); - nfapi_ul_config_request_body_t *ul_req; - nfapi_ul_config_request_pdu_t *ul_config_pdu; - int use_simultaneous_pucch_pusch=0; - nfapi_ul_config_ulsch_harq_information *ulsch_harq_information = NULL; - nfapi_ul_config_harq_information *harq_information = NULL; + +void +get_Msg3allocret(COMMON_channels_t * cc, + sub_frame_t current_subframe, + frame_t current_frame, + frame_t * frame, sub_frame_t * subframe) +{ + if (cc->tdd_Config == NULL) { //FDD + /* always retransmit in n+8 */ + *subframe = current_subframe + 8; + + if (*subframe > 9) { + *subframe = *subframe - 10; + *frame = (current_frame + 1) & 1023; + } else { + *frame = current_frame; + } + } else { + if (cc->tdd_Config->subframeAssignment == 1) { + // original PUSCH in 2, PHICH in 6 (S), ret in 2 + // original PUSCH in 3, PHICH in 9, ret in 3 + // original PUSCH in 7, PHICH in 1 (S), ret in 7 + // original PUSCH in 8, PHICH in 4, ret in 8 + *frame = (current_frame + 1) & 1023; + } else if (cc->tdd_Config->subframeAssignment == 3) { + // original PUSCH in 2, PHICH in 8, ret in 2 next frame + // original PUSCH in 3, PHICH in 9, ret in 3 next frame + // original PUSCH in 4, PHICH in 0, ret in 4 next frame + *frame = (current_frame + 1) & 1023; + } else if (cc->tdd_Config->subframeAssignment == 4) { + // original PUSCH in 2, PHICH in 8, ret in 2 next frame + // original PUSCH in 3, PHICH in 9, ret in 3 next frame + *frame = (current_frame + 1) & 1023; + } else if (cc->tdd_Config->subframeAssignment == 5) { + // original PUSCH in 2, PHICH in 8, ret in 2 next frame + *frame = (current_frame + 1) & 1023; + } + } +} + +uint8_t +subframe2harqpid(COMMON_channels_t * cc, frame_t frame, + sub_frame_t subframe) +{ + uint8_t ret = 255; + + AssertFatal(cc != NULL, "cc is null\n"); + + if (cc->tdd_Config == NULL) { // FDD + ret = (((frame << 1) + subframe) & 7); + } else { + switch (cc->tdd_Config->subframeAssignment) { + case 1: + if ((subframe == 2) || + (subframe == 3) || (subframe == 7) || (subframe == 8)) + switch (subframe) { + case 2: + case 3: + ret = (subframe - 2); + break; + + case 7: + case 8: + ret = (subframe - 5); + break; + + default: + AssertFatal(1 == 0, + "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n", + subframe, + (int) cc->tdd_Config->subframeAssignment); + break; + } + + break; + + case 2: + AssertFatal((subframe == 2) || (subframe == 7), + "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n", + subframe, + (int) cc->tdd_Config->subframeAssignment); + + ret = (subframe / 7); + break; + + case 3: + AssertFatal((subframe > 1) && (subframe < 5), + "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n", + subframe, + (int) cc->tdd_Config->subframeAssignment); + ret = (subframe - 2); + break; + + case 4: + AssertFatal((subframe > 1) && (subframe < 4), + "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n", + subframe, + (int) cc->tdd_Config->subframeAssignment); + ret = (subframe - 2); + break; + + case 5: + AssertFatal(subframe == 2, + "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n", + subframe, + (int) cc->tdd_Config->subframeAssignment); + ret = (subframe - 2); + break; + + default: + AssertFatal(1 == 0, + "subframe2_harq_pid, Unsupported TDD mode %d\n", + (int) cc->tdd_Config->subframeAssignment); + } + } + return ret; +} + +uint8_t +get_Msg3harqpid(COMMON_channels_t * cc, + frame_t frame, sub_frame_t current_subframe) +{ + uint8_t ul_subframe = 0; + uint32_t ul_frame = 0; + + if (cc->tdd_Config == NULL) { // FDD + ul_subframe = + (current_subframe > + 3) ? (current_subframe - 4) : (current_subframe + 6); + ul_frame = (current_subframe > 3) ? ((frame + 1) & 1023) : frame; + } else { + switch (cc->tdd_Config->subframeAssignment) { + case 1: + switch (current_subframe) { + case 9: + case 0: + ul_subframe = 7; + break; + + case 5: + case 7: + ul_subframe = 2; + break; + + } + + break; + + case 3: + switch (current_subframe) { + case 0: + case 5: + case 6: + ul_subframe = 2; + break; + + case 7: + ul_subframe = 3; + break; + + case 8: + ul_subframe = 4; + break; + + case 9: + ul_subframe = 2; + break; + } + + break; + + case 4: + switch (current_subframe) { + case 0: + case 5: + case 6: + case 8: + case 9: + ul_subframe = 2; + break; + + case 7: + ul_subframe = 3; + break; + } + + break; + + case 5: + ul_subframe = 2; + break; + + default: + LOG_E(PHY, + "get_Msg3_harq_pid: Unsupported TDD configuration %d\n", + (int) cc->tdd_Config->subframeAssignment); + AssertFatal(1 == 0, + "get_Msg3_harq_pid: Unsupported TDD configuration"); + break; + } + } + + return (subframe2harqpid(cc, ul_frame, ul_subframe)); +} + +uint32_t +pdcchalloc2ulframe(COMMON_channels_t * ccP, uint32_t frame, uint8_t n) +{ + uint32_t ul_frame; + + if ((ccP->tdd_Config) && (ccP->tdd_Config->subframeAssignment == 1) && ((n == 1) || (n == 6))) // tdd_config 0,1 SF 1,5 + ul_frame = (frame + (n == 1 ? 0 : 1)); + else if ((ccP->tdd_Config) && + (ccP->tdd_Config->subframeAssignment == 6) && + ((n == 0) || (n == 1) || (n == 5) || (n == 6))) + ul_frame = (frame + (n >= 5 ? 1 : 0)); + else if ((ccP->tdd_Config) && (ccP->tdd_Config->subframeAssignment == 6) && (n == 9)) // tdd_config 6 SF 9 + ul_frame = (frame + 1); + else + ul_frame = (frame + (n >= 6 ? 1 : 0)); + + LOG_D(PHY, "frame %d subframe %d: PUSCH frame = %d\n", frame, n, + ul_frame); + return ul_frame; +} + +uint8_t pdcchalloc2ulsubframe(COMMON_channels_t * ccP, uint8_t n) +{ + uint8_t ul_subframe; + + if ((ccP->tdd_Config) && (ccP->tdd_Config->subframeAssignment == 1) && ((n == 1) || (n == 6))) // tdd_config 0,1 SF 1,5 + ul_subframe = ((n + 6) % 10); + else if ((ccP->tdd_Config) && + (ccP->tdd_Config->subframeAssignment == 6) && + ((n == 0) || (n == 1) || (n == 5) || (n == 6))) + ul_subframe = ((n + 7) % 10); + else if ((ccP->tdd_Config) && (ccP->tdd_Config->subframeAssignment == 6) && (n == 9)) // tdd_config 6 SF 9 + ul_subframe = ((n + 5) % 10); + else + ul_subframe = ((n + 4) % 10); + + LOG_D(PHY, "subframe %d: PUSCH subframe = %d\n", n, ul_subframe); + return ul_subframe; +} + +int is_UL_sf(COMMON_channels_t * ccP, sub_frame_t subframeP) +{ + // if FDD return dummy value + if (ccP->tdd_Config == NULL) + return (0); + + switch (ccP->tdd_Config->subframeAssignment) { + case 1: + switch (subframeP) { + case 0: + case 4: + case 5: + case 9: + return (0); + break; + + case 2: + case 3: + case 7: + case 8: + return (1); + break; + + default: + return (0); + break; + } + break; + + case 3: + if ((subframeP <= 1) || (subframeP >= 5)) + return (0); + else if ((subframeP > 1) && (subframeP < 5)) + return (1); + else + AssertFatal(1 == 0, "Unknown subframe number\n"); + break; + + case 4: + if ((subframeP <= 1) || (subframeP >= 4)) + return (0); + else if ((subframeP > 1) && (subframeP < 4)) + return (1); + else + AssertFatal(1 == 0, "Unknown subframe number\n"); + break; + + case 5: + if ((subframeP <= 1) || (subframeP >= 3)) + return (0); + else if ((subframeP > 1) && (subframeP < 3)) + return (1); + else + AssertFatal(1 == 0, "Unknown subframe number\n"); + break; + + default: + AssertFatal(1 == 0, + "subframe %d Unsupported TDD configuration %d\n", + subframeP, (int) ccP->tdd_Config->subframeAssignment); + break; + } +} + +uint16_t get_pucch1_absSF(COMMON_channels_t * cc, uint16_t dlsch_absSF) +{ + uint16_t sf, f, nextf; + + if (cc->tdd_Config == NULL) { //FDD n+4 + return ((dlsch_absSF + 4) % 10240); + } else { + sf = dlsch_absSF % 10; + f = dlsch_absSF / 10; + nextf = (f + 1) & 1023; + + switch (cc->tdd_Config->subframeAssignment) { + case 0: + AssertFatal(1 == 0, "SFA 0 to be filled in now, :-)\n"); + break; + case 1: + if ((sf == 5) || (sf == 6)) + return ((10 * nextf) + 2); // ACK/NAK in SF 2 next frame + else if (sf == 9) + return ((10 * nextf) + 3); // ACK/NAK in SF 3 next frame + else if ((sf == 0) || (sf == 1)) + return ((10 * f) + 2); // ACK/NAK in SF 7 same frame + else + AssertFatal(1 == 0, + "Impossible dlsch subframe %d for TDD configuration 3\n", + sf); + break; + case 2: + if ((sf == 4) || (sf == 5) || (sf == 6) || (sf == 8)) + return ((10 * nextf) + 2); // ACK/NAK in SF 2 next frame + else if (sf == 9) + return ((10 * nextf) + 7); // ACK/NAK in SF 7 next frame + else if ((sf == 0) || (sf == 1) || (sf == 3)) + return ((10 * f) + 7); // ACK/NAK in SF 7 same frame + else + AssertFatal(1 == 0, + "Impossible dlsch subframe %d for TDD configuration 3\n", + sf); + break; + case 3: + if ((sf == 5) || (sf == 6) || (sf == 7) || (sf == 8) + || (sf == 9)) + return ((10 * nextf) + (sf >> 1)); // ACK/NAK in 2,3,4 resp. next frame + else if (sf == 1) + return ((10 * nextf) + 2); // ACK/NAK in 2 next frame + else if (sf == 0) + return ((10 * f) + 4); // ACK/NAK in 4 same frame + else + AssertFatal(1 == 0, + "Impossible dlsch subframe %d for TDD configuration 3\n", + sf); + break; + case 4: + if ((sf == 6) || (sf == 7) || (sf == 8) || (sf == 9)) + return (((10 * nextf) + 3) % 10240); // ACK/NAK in SF 3 next frame + else if ((sf == 0) || (sf == 1) || (sf == 4) || (sf == 5)) + return (((10 * nextf) + 2) % 10240); // ACK/NAK in SF 2 next frame + else + AssertFatal(1 == 0, + "Impossible dlsch subframe %d for TDD configuration 4\n", + sf); + break; + case 5: + if ((sf == 0) || (sf == 1) || (sf == 3) || (sf == 4) + || (sf == 5) || (sf == 6) || (sf == 7) || (sf == 8)) + return (((10 * nextf) + 2) % 10240); // ACK/NAK in SF 3 next frame + else if (sf == 9) + return (((10 * (1 + nextf)) + 2) % 10240); // ACK/NAK in SF 2 next frame + else + AssertFatal(1 == 0, + "Impossible dlsch subframe %d for TDD configuration 5\n", + sf); + break; + case 6: + AssertFatal(1 == 0, "SFA 6 To be filled in now, :-)\n"); + break; + default: + AssertFatal(1 == 0, "Illegal TDD subframe Assigment %d\n", + (int) cc->tdd_Config->subframeAssignment); + break; + } + } + AssertFatal(1 == 0, "Shouldn't get here\n"); +} + +void +get_srs_pos(COMMON_channels_t * cc, uint16_t isrs, + uint16_t * psrsPeriodicity, uint16_t * psrsOffset) +{ + if (cc->tdd_Config) { // TDD + AssertFatal(isrs >= 10, "2 ms SRS periodicity not supported"); + + if ((isrs > 9) && (isrs < 15)) { + *psrsPeriodicity = 5; + *psrsOffset = isrs - 10; + } + if ((isrs > 14) && (isrs < 25)) { + *psrsPeriodicity = 10; + *psrsOffset = isrs - 15; + } + if ((isrs > 24) && (isrs < 45)) { + *psrsPeriodicity = 20; + *psrsOffset = isrs - 25; + } + if ((isrs > 44) && (isrs < 85)) { + *psrsPeriodicity = 40; + *psrsOffset = isrs - 45; + } + if ((isrs > 84) && (isrs < 165)) { + *psrsPeriodicity = 80; + *psrsOffset = isrs - 85; + } + if ((isrs > 164) && (isrs < 325)) { + *psrsPeriodicity = 160; + *psrsOffset = isrs - 165; + } + if ((isrs > 324) && (isrs < 645)) { + *psrsPeriodicity = 320; + *psrsOffset = isrs - 325; + } + + AssertFatal(isrs <= 644, "Isrs out of range %d>644\n", isrs); + } // TDD + else { // FDD + if (isrs < 2) { + *psrsPeriodicity = 2; + *psrsOffset = isrs; + } + if ((isrs > 1) && (isrs < 7)) { + *psrsPeriodicity = 5; + *psrsOffset = isrs - 2; + } + if ((isrs > 6) && (isrs < 17)) { + *psrsPeriodicity = 10; + *psrsOffset = isrs - 7; + } + if ((isrs > 16) && (isrs < 37)) { + *psrsPeriodicity = 20; + *psrsOffset = isrs - 17; + } + if ((isrs > 36) && (isrs < 77)) { + *psrsPeriodicity = 40; + *psrsOffset = isrs - 37; + } + if ((isrs > 76) && (isrs < 157)) { + *psrsPeriodicity = 80; + *psrsOffset = isrs - 77; + } + if ((isrs > 156) && (isrs < 317)) { + *psrsPeriodicity = 160; + *psrsOffset = isrs - 157; + } + if ((isrs > 316) && (isrs < 637)) { + *psrsPeriodicity = 320; + *psrsOffset = isrs - 317; + } + AssertFatal(isrs <= 636, "Isrs out of range %d>636\n", isrs); + } +} + +void +get_csi_params(COMMON_channels_t * cc, + struct CQI_ReportPeriodic *cqi_ReportPeriodic, + uint16_t * Npd, uint16_t * N_OFFSET_CQI, int *H) +{ + uint16_t cqi_PMI_ConfigIndex = + cqi_ReportPeriodic->choice.setup.cqi_pmi_ConfigIndex; + uint8_t Jtab[6] = { 0, 2, 2, 3, 4, 4 }; + + AssertFatal(cqi_ReportPeriodic != NULL, + "cqi_ReportPeriodic is null!\n"); + + if (cc->tdd_Config == NULL) { //FDD + if (cqi_PMI_ConfigIndex <= 1) { // 2 ms CQI_PMI period + *Npd = 2; + *N_OFFSET_CQI = cqi_PMI_ConfigIndex; + } else if (cqi_PMI_ConfigIndex <= 6) { // 5 ms CQI_PMI period + *Npd = 5; + *N_OFFSET_CQI = cqi_PMI_ConfigIndex - 2; + } else if (cqi_PMI_ConfigIndex <= 16) { // 10ms CQI_PMI period + *Npd = 10; + *N_OFFSET_CQI = cqi_PMI_ConfigIndex - 7; + } else if (cqi_PMI_ConfigIndex <= 36) { // 20 ms CQI_PMI period + *Npd = 20; + *N_OFFSET_CQI = cqi_PMI_ConfigIndex - 17; + } else if (cqi_PMI_ConfigIndex <= 76) { // 40 ms CQI_PMI period + *Npd = 40; + *N_OFFSET_CQI = cqi_PMI_ConfigIndex - 37; + } else if (cqi_PMI_ConfigIndex <= 156) { // 80 ms CQI_PMI period + *Npd = 80; + *N_OFFSET_CQI = cqi_PMI_ConfigIndex - 77; + } else if (cqi_PMI_ConfigIndex <= 316) { // 160 ms CQI_PMI period + *Npd = 160; + *N_OFFSET_CQI = cqi_PMI_ConfigIndex - 157; + } else if (cqi_PMI_ConfigIndex > 317) { + + if (cqi_PMI_ConfigIndex <= 349) { // 32 ms CQI_PMI period + *Npd = 32; + *N_OFFSET_CQI = cqi_PMI_ConfigIndex - 318; + } else if (cqi_PMI_ConfigIndex <= 413) { // 64 ms CQI_PMI period + *Npd = 64; + *N_OFFSET_CQI = cqi_PMI_ConfigIndex - 350; + } else if (cqi_PMI_ConfigIndex <= 541) { // 128 ms CQI_PMI period + *Npd = 128; + *N_OFFSET_CQI = cqi_PMI_ConfigIndex - 414; + } + } + } else { // TDD + if (cqi_PMI_ConfigIndex == 0) { // all UL subframes + *Npd = 1; + *N_OFFSET_CQI = 0; + } else if (cqi_PMI_ConfigIndex <= 6) { // 5 ms CQI_PMI period + *Npd = 5; + *N_OFFSET_CQI = cqi_PMI_ConfigIndex - 1; + } else if (cqi_PMI_ConfigIndex <= 16) { // 10ms CQI_PMI period + *Npd = 10; + *N_OFFSET_CQI = cqi_PMI_ConfigIndex - 6; + } else if (cqi_PMI_ConfigIndex <= 36) { // 20 ms CQI_PMI period + *Npd = 20; + *N_OFFSET_CQI = cqi_PMI_ConfigIndex - 16; + } else if (cqi_PMI_ConfigIndex <= 76) { // 40 ms CQI_PMI period + *Npd = 40; + *N_OFFSET_CQI = cqi_PMI_ConfigIndex - 36; + } else if (cqi_PMI_ConfigIndex <= 156) { // 80 ms CQI_PMI period + *Npd = 80; + *N_OFFSET_CQI = cqi_PMI_ConfigIndex - 76; + } else if (cqi_PMI_ConfigIndex <= 316) { // 160 ms CQI_PMI period + *Npd = 160; + *N_OFFSET_CQI = cqi_PMI_ConfigIndex - 156; + } + } + + // get H + if (cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic. + present == + CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_subbandCQI) + *H = 1 + + (Jtab[cc->mib->message.dl_Bandwidth] * + cqi_ReportPeriodic->choice.setup. + cqi_FormatIndicatorPeriodic.choice.subbandCQI.k); + else + *H = 1; +} + +uint8_t +get_dl_cqi_pmi_size_pusch(COMMON_channels_t * cc, uint8_t tmode, + uint8_t ri, + CQI_ReportModeAperiodic_t * + cqi_ReportModeAperiodic) +{ + int Ntab[6] = { 0, 4, 7, 9, 10, 13 }; + int N = Ntab[cc->mib->message.dl_Bandwidth]; + int Ltab_uesel[6] = { 0, 6, 9, 13, 15, 18 }; + int L = Ltab_uesel[cc->mib->message.dl_Bandwidth]; + + AssertFatal(cqi_ReportModeAperiodic != NULL, + "cqi_ReportPeriodic is null!\n"); + + switch (*cqi_ReportModeAperiodic) { + case CQI_ReportModeAperiodic_rm12: + AssertFatal(tmode == 4 || tmode == 6 || tmode == 8 || tmode == 9 + || tmode == 10, + "Illegal TM (%d) for CQI_ReportModeAperiodic_rm12\n", + tmode); + AssertFatal(cc->p_eNB <= 4, + "only up to 4 antenna ports supported here\n"); + if (ri == 1 && cc->p_eNB == 2) + return (4 + (N << 1)); + else if (ri == 2 && cc->p_eNB == 2) + return (8 + N); + else if (ri == 1 && cc->p_eNB == 4) + return (4 + (N << 2)); + else if (ri > 1 && cc->p_eNB == 4) + return (8 + (N << 2)); + break; + case CQI_ReportModeAperiodic_rm20: + // Table 5.2.2.6.3-1 (36.212) + AssertFatal(tmode == 1 || tmode == 2 || tmode == 3 || tmode == 7 + || tmode == 9 + || tmode == 10, + "Illegal TM (%d) for CQI_ReportModeAperiodic_rm20\n", + tmode); + AssertFatal(tmode != 9 + && tmode != 10, + "TM9/10 will be handled later for CQI_ReportModeAperiodic_rm20\n"); + return (4 + 2 + L); + break; + case CQI_ReportModeAperiodic_rm22: + // Table 5.2.2.6.3-2 (36.212) + AssertFatal(tmode == 4 || tmode == 6 || tmode == 8 || tmode == 9 + || tmode == 10, + "Illegal TM (%d) for CQI_ReportModeAperiodic_rm22\n", + tmode); + AssertFatal(tmode != 9 + && tmode != 10, + "TM9/10 will be handled later for CQI_ReportModeAperiodic_rm22\n"); + if (ri == 1 && cc->p_eNB == 2) + return (4 + 2 + 0 + 0 + L + 4); + if (ri == 2 && cc->p_eNB == 2) + return (4 + 2 + 4 + 2 + L + 2); + if (ri == 1 && cc->p_eNB == 4) + return (4 + 2 + 0 + 0 + L + 8); + if (ri >= 2 && cc->p_eNB == 4) + return (4 + 2 + 4 + 2 + L + 8); + break; + case CQI_ReportModeAperiodic_rm30: + // Table 5.2.2.6.2-1 (36.212) + AssertFatal(tmode == 1 || tmode == 2 || tmode == 3 || tmode == 7 + || tmode == 8 || tmode == 9 + || tmode == 10, + "Illegal TM (%d) for CQI_ReportModeAperiodic_rm30\n", + tmode); + AssertFatal(tmode != 8 && tmode != 9 + && tmode != 10, + "TM8/9/10 will be handled later for CQI_ReportModeAperiodic_rm30\n"); + return (4 + (N << 1)); + break; + case CQI_ReportModeAperiodic_rm31: + // Table 5.2.2.6.2-2 (36.212) + AssertFatal(tmode == 4 || tmode == 6 || tmode == 8 || tmode == 9 + || tmode == 10, + "Illegal TM (%d) for CQI_ReportModeAperiodic_rm31\n", + tmode); + AssertFatal(tmode != 8 && tmode != 9 + && tmode != 10, + "TM8/9/10 will be handled later for CQI_ReportModeAperiodic_rm31\n"); + if (ri == 1 && cc->p_eNB == 2) + return (4 + (N << 1) + 0 + 0 + 2); + else if (ri == 2 && cc->p_eNB == 2) + return (4 + (N << 1) + 4 + (N << 1) + 1); + else if (ri == 1 && cc->p_eNB == 4) + return (4 + (N << 1) + 0 + 0 + 4); + else if (ri >= 2 && cc->p_eNB == 4) + return (4 + (N << 1) + 4 + (N << 1) + 4); + break; + case CQI_ReportModeAperiodic_rm32_v1250: + AssertFatal(tmode == 4 || tmode == 6 || tmode == 8 || tmode == 9 + || tmode == 10, + "Illegal TM (%d) for CQI_ReportModeAperiodic_rm32\n", + tmode); + AssertFatal(1 == 0, + "CQI_ReportModeAperiodic_rm32_v1250 not supported yet\n"); + break; + case CQI_ReportModeAperiodic_rm10_v1310: + // Table 5.2.2.6.1-1F/G (36.212) + if (ri == 1) + return (4); // F + else + return (7); // G + break; + case CQI_ReportModeAperiodic_rm11_v1310: + // Table 5.2.2.6.1-1H (36.212) + AssertFatal(tmode == 4 || tmode == 6 || tmode == 8 || tmode == 9 + || tmode == 10, + "Illegal TM (%d) for CQI_ReportModeAperiodic_rm11\n", + tmode); + AssertFatal(cc->p_eNB <= 4, + "only up to 4 antenna ports supported here\n"); + if (ri == 1 && cc->p_eNB == 2) + return (4 + 0 + 2); + else if (ri == 2 && cc->p_eNB == 2) + return (4 + 4 + 1); + else if (ri == 1 && cc->p_eNB == 4) + return (4 + 0 + 4); + else if (ri > 1 && cc->p_eNB == 4) + return (4 + 4 + 4); + + break; + } + AssertFatal(1 == 0, "Shouldn't get here\n"); + return (0); +} + +uint8_t +get_rel8_dl_cqi_pmi_size(UE_sched_ctrl * sched_ctl, int CC_idP, + COMMON_channels_t * cc, uint8_t tmode, + struct CQI_ReportPeriodic * cqi_ReportPeriodic) +{ + int no_pmi = 0; + // Ltab[6] = {0,log2(15/4/2),log2(25/4/2),log2(50/6/3),log2(75/8/4),log2(100/8/4)}; + + uint8_t Ltab[6] = { 0, 1, 2, 2, 2, 2 }; + uint8_t ri = sched_ctl->periodic_ri_received[CC_idP]; + + AssertFatal(cqi_ReportPeriodic != NULL, + "cqi_ReportPeriodic is null!\n"); + AssertFatal(cqi_ReportPeriodic->present != + CQI_ReportPeriodic_PR_NOTHING, + "cqi_ReportPeriodic->present == CQI_ReportPeriodic_PR_NOTHING!\n"); + AssertFatal(cqi_ReportPeriodic->choice. + setup.cqi_FormatIndicatorPeriodic.present != + CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_NOTHING, + "cqi_ReportPeriodic->cqi_FormatIndicatorPeriodic.choice.setup.present == CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_NOTHING!\n"); + + switch (tmode) { + case 1: + case 2: + case 5: + case 6: + case 7: + no_pmi = 1; + break; + default: + no_pmi = 0; + } + + if ((cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic. + present == + CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_widebandCQI) + || (sched_ctl->feedback_cnt[CC_idP] == 0)) { + // send wideband report every opportunity if wideband reporting mode is selected, else every H opportunities + if (no_pmi == 1) + return (4); + else if ((cc->p_eNB == 2) && (ri == 1)) + return (6); + else if ((cc->p_eNB == 2) && (ri == 2)) + return (8); + else if ((cc->p_eNB == 4) && (ri == 1)) + return (8); + else if ((cc->p_eNB == 4) && (ri == 2)) + return (11); + else + AssertFatal(1 == 0, + "illegal combination p %d, ri %d, no_pmi %d\n", + cc->p_eNB, ri, no_pmi); + } else if (cqi_ReportPeriodic->choice. + setup.cqi_FormatIndicatorPeriodic.present == + CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_subbandCQI) + { + if ((no_pmi == 1) || ri == 1) + return (4 + Ltab[cc->mib->message.dl_Bandwidth]); + else + return (7 + Ltab[cc->mib->message.dl_Bandwidth]); + } + AssertFatal(1 == 0, + "Shouldn't get here : cqi_ReportPeriodic->present %d\n", + cqi_ReportPeriodic->choice. + setup.cqi_FormatIndicatorPeriodic.present); +} + +void +fill_nfapi_dl_dci_1A(nfapi_dl_config_request_pdu_t * dl_config_pdu, + uint8_t aggregation_level, + uint16_t rnti, + uint8_t rnti_type, + uint8_t harq_process, + uint8_t tpc, + uint16_t resource_block_coding, + uint8_t mcs, uint8_t ndi, uint8_t rv, + uint8_t vrb_flag) +{ + memset((void *) dl_config_pdu, 0, + sizeof(nfapi_dl_config_request_pdu_t)); + dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; + dl_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu)); + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format = + NFAPI_DL_DCI_FORMAT_1A; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level = + aggregation_level; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = rnti; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = rnti_type; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000; // equal to RS power + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process = harq_process; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc = tpc; // no TPC + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = + resource_block_coding; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1 = mcs; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1 = ndi; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1 = rv; + dl_config_pdu->dci_dl_pdu. + dci_dl_pdu_rel8.virtual_resource_block_assignment_flag = vrb_flag; +} + +void +program_dlsch_acknak(module_id_t module_idP, int CC_idP, int UE_idP, + frame_t frameP, sub_frame_t subframeP, + uint8_t cce_idx) +{ + eNB_MAC_INST *eNB = RC.mac[module_idP]; + COMMON_channels_t *cc = eNB->common_channels; + UE_list_t *UE_list = &eNB->UE_list; + rnti_t rnti = UE_RNTI(module_idP, UE_idP); + nfapi_ul_config_request_body_t *ul_req; + nfapi_ul_config_request_pdu_t *ul_config_pdu; + + int use_simultaneous_pucch_pusch = 0; + nfapi_ul_config_ulsch_harq_information *ulsch_harq_information = NULL; + nfapi_ul_config_harq_information *harq_information = NULL; #if defined(Rel10) || defined(Rel14) - if ((UE_list->UE_template[CC_idP][UE_idP].physicalConfigDedicated->ext2) && - (UE_list->UE_template[CC_idP][UE_idP].physicalConfigDedicated->ext2->pucch_ConfigDedicated_v1020) && - (UE_list->UE_template[CC_idP][UE_idP].physicalConfigDedicated->ext2->pucch_ConfigDedicated_v1020->simultaneousPUCCH_PUSCH_r10) && - (*UE_list->UE_template[CC_idP][UE_idP].physicalConfigDedicated->ext2->pucch_ConfigDedicated_v1020->simultaneousPUCCH_PUSCH_r10 == - PUCCH_ConfigDedicated_v1020__simultaneousPUCCH_PUSCH_r10_true)) - use_simultaneous_pucch_pusch=1; + if ((UE_list->UE_template[CC_idP][UE_idP].physicalConfigDedicated-> + ext2) + && (UE_list->UE_template[CC_idP][UE_idP]. + physicalConfigDedicated->ext2->pucch_ConfigDedicated_v1020) + && (UE_list->UE_template[CC_idP][UE_idP]. + physicalConfigDedicated->ext2->pucch_ConfigDedicated_v1020-> + simultaneousPUCCH_PUSCH_r10) + && (*UE_list->UE_template[CC_idP][UE_idP]. + physicalConfigDedicated->ext2->pucch_ConfigDedicated_v1020-> + simultaneousPUCCH_PUSCH_r10 == + PUCCH_ConfigDedicated_v1020__simultaneousPUCCH_PUSCH_r10_true)) + use_simultaneous_pucch_pusch = 1; #endif - // pucch1 and pusch feedback is similar, namely in n+k subframes from now - // This is used in the following "if/else" condition to check if there isn't or is already an UL grant in n+k - int16_t ul_absSF = get_pucch1_absSF(&cc[CC_idP],subframeP+(10*frameP)); + // pucch1 and pusch feedback is similar, namely in n+k subframes from now + // This is used in the following "if/else" condition to check if there isn't or is already an UL grant in n+k + int16_t ul_absSF = + get_pucch1_absSF(&cc[CC_idP], subframeP + (10 * frameP)); - if ((ul_config_pdu = has_ul_grant(module_idP,CC_idP, - ul_absSF, - rnti)) == NULL) { - // no UL grant so - // Program ACK/NAK alone Format 1a/b or 3 + if ((ul_config_pdu = has_ul_grant(module_idP, CC_idP, + ul_absSF, rnti)) == NULL) { + // no UL grant so + // Program ACK/NAK alone Format 1a/b or 3 - ul_req = &RC.mac[module_idP]->UL_req_tmp[CC_idP][ul_absSF%10].ul_config_request_body; - ul_config_pdu = &ul_req->ul_config_pdu_list[ul_req->number_of_pdus]; - // Do PUCCH - fill_nfapi_uci_acknak(module_idP, - CC_idP, - rnti, - (frameP*10)+subframeP, - cce_idx); - } - else { - /* there is already an existing UL grant so update it if needed - * on top of some other UL resource (PUSCH,combined SR/CQI/HARQ on PUCCH, etc) - */ - switch(ul_config_pdu->pdu_type) { - - /* [ulsch] to [ulsch + harq] or [ulsch + harq on pucch] */ - - case NFAPI_UL_CONFIG_ULSCH_PDU_TYPE: - if (use_simultaneous_pucch_pusch==1) { - // Convert it to an NFAPI_UL_CONFIG_ULSCH_UCI_HARQ_PDU_TYPE - harq_information = &ul_config_pdu->ulsch_uci_harq_pdu.harq_information; - ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_UCI_HARQ_PDU_TYPE; - LOG_D(MAC,"Frame %d, Subframe %d: Switched UCI HARQ to ULSCH UCI HARQ\n",frameP,subframeP); - } - else { - // Convert it to an NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE - ulsch_harq_information = &ul_config_pdu->ulsch_harq_pdu.harq_information; - ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE; - ul_config_pdu->ulsch_harq_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.n_srs_initial=0; // last symbol not punctured - ul_config_pdu->ulsch_harq_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.initial_number_of_resource_blocks= - ul_config_pdu->ulsch_harq_pdu.ulsch_pdu.ulsch_pdu_rel8.number_of_resource_blocks; // we don't change the number of resource blocks across retransmissions yet - LOG_D(MAC,"Frame %d, Subframe %d: Switched UCI HARQ to ULSCH HARQ\n",frameP,subframeP); - } - break; - case NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE: - AssertFatal(use_simultaneous_pucch_pusch == 1, - "Cannot be NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE, simultaneous_pucch_pusch is active"); - break; - case NFAPI_UL_CONFIG_ULSCH_UCI_HARQ_PDU_TYPE: - AssertFatal(use_simultaneous_pucch_pusch == 0, - "Cannot be NFAPI_UL_CONFIG_ULSCH_UCI_PDU_TYPE, simultaneous_pucch_pusch is inactive\n"); - break; - - /* [ulsch + cqi] to [ulsch + cqi + harq] */ - - case NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE: - // Convert it to an NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE - ulsch_harq_information = &ul_config_pdu->ulsch_cqi_harq_ri_pdu.harq_information; - ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE; - /* TODO: check this - when converting from nfapi_ul_config_ulsch_cqi_ri_pdu to - * nfapi_ul_config_ulsch_cqi_harq_ri_pdu, shouldn't we copy initial_transmission_parameters - * from the one to the other? - * Those two types are not compatible. 'initial_transmission_parameters' is not at the - * place in both. - */ - ul_config_pdu->ulsch_cqi_harq_ri_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.n_srs_initial=0; // last symbol not punctured - ul_config_pdu->ulsch_cqi_harq_ri_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.initial_number_of_resource_blocks= - ul_config_pdu->ulsch_harq_pdu.ulsch_pdu.ulsch_pdu_rel8.number_of_resource_blocks; // we don't change the number of resource blocks across retransmissions yet - break; - case NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE: - AssertFatal(use_simultaneous_pucch_pusch == 0, - "Cannot be NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE, simultaneous_pucch_pusch is active\n"); - break; - - /* [ulsch + cqi on pucch] to [ulsch + cqi on pucch + harq on pucch] */ - - case NFAPI_UL_CONFIG_ULSCH_UCI_CSI_PDU_TYPE: - // convert it to an NFAPI_UL_CONFIG_ULSCH_CSI_UCI_HARQ_PDU_TYPE - harq_information = &ul_config_pdu->ulsch_csi_uci_harq_pdu.harq_information; - ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_CSI_UCI_HARQ_PDU_TYPE; - break; - case NFAPI_UL_CONFIG_ULSCH_CSI_UCI_HARQ_PDU_TYPE: - AssertFatal(use_simultaneous_pucch_pusch == 1, - "Cannot be NFAPI_UL_CONFIG_ULSCH_CSI_UCI_HARQ_PDU_TYPE, simultaneous_pucch_pusch is inactive\n"); - break; - - /* [sr] to [sr + harq] */ - - case NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE: - // convert to NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE - ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE; - harq_information = &ul_config_pdu->uci_sr_harq_pdu.harq_information; - break; - case NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE: - /* nothing to do */ - break; - - /* [cqi] to [cqi + harq] */ - - case NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE: - // convert to NFAPI_UL_CONFIG_UCI_CQI_HARQ_PDU_TYPE - ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_UCI_CQI_HARQ_PDU_TYPE; - harq_information = &ul_config_pdu->uci_cqi_harq_pdu.harq_information; - break; - case NFAPI_UL_CONFIG_UCI_CQI_HARQ_PDU_TYPE: - /* nothing to do */ - break; - - /* [cqi + sr] to [cqr + sr + harq] */ - - case NFAPI_UL_CONFIG_UCI_CQI_SR_PDU_TYPE: - // convert to NFAPI_UL_CONFIG_UCI_CQI_SR_HARQ_PDU_TYPE - ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_UCI_CQI_SR_HARQ_PDU_TYPE; - harq_information = &ul_config_pdu->uci_cqi_sr_harq_pdu.harq_information; - break; - case NFAPI_UL_CONFIG_UCI_CQI_SR_HARQ_PDU_TYPE: - /* nothing to do */ - break; - } - } - - if (ulsch_harq_information) fill_nfapi_ulsch_harq_information(module_idP,CC_idP, - rnti, - ulsch_harq_information); - - if (harq_information) fill_nfapi_harq_information(module_idP,CC_idP, - rnti, - (frameP*10)+subframeP, - harq_information, - cce_idx); -} - -uint8_t get_V_UL_DAI(module_id_t module_idP,int CC_idP,uint16_t rntiP) -{ - nfapi_hi_dci0_request_body_t *HI_DCI0_req = &RC.mac[module_idP]->HI_DCI0_req[CC_idP].hi_dci0_request_body; - nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = &HI_DCI0_req->hi_dci0_pdu_list[0]; - - for (int i=0;inumber_of_dci;i++) { - if ((hi_dci0_pdu[i].pdu_type == NFAPI_HI_DCI0_DCI_PDU_TYPE)&& - (hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.rnti == rntiP)) - return(hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.dl_assignment_index); - } - return(4); // this is rule from Section 7.3 in 36.213 -} - -void fill_nfapi_ulsch_harq_information(module_id_t module_idP, - int CC_idP, - uint16_t rntiP, - nfapi_ul_config_ulsch_harq_information *harq_information) -{ - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc = &eNB->common_channels[CC_idP]; - UE_list_t *UE_list = &eNB->UE_list; - - int UE_id = find_UE_id(module_idP,rntiP); - - PUSCH_ConfigDedicated_t *puschConfigDedicated; - // PUSCH_ConfigDedicated_v1020_t *puschConfigDedicated_v1020; - // PUSCH_ConfigDedicated_v1130_t *puschConfigDedicated_v1130; - // PUSCH_ConfigDedicated_v1250_t *puschConfigDedicated_v1250; - - AssertFatal(UE_id>=0,"UE_id cannot be found, impossible\n"); - AssertFatal(UE_list!=NULL,"UE_list is null\n"); - AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated!=NULL,"physicalConfigDedicated for rnti %x is null\n",rntiP); - AssertFatal((puschConfigDedicated = (PUSCH_ConfigDedicated_t *)UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pusch_ConfigDedicated)!=NULL,"physicalConfigDedicated->puschConfigDedicated for rnti %x is null\n",rntiP); -#if defined(Rel14) || defined(Rel14) - /* if (UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->ext2) puschConfigDedicated_v1020 = UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->ext2->pusch_ConfigDedicated_v1020; -#endif -#ifdef Rel14 - if (UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->ext4) puschConfigDedicated_v1130 = UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->ext4->pusch_ConfigDedicated_v1130; - if (UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->ext5) puschConfigDedicated_v1250 = UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->ext5->pusch_ConfigDedicated_v1250; - */ -#endif - harq_information->harq_information_rel10.delta_offset_harq = puschConfigDedicated->betaOffset_ACK_Index; - AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated!=NULL,"pucch_ConfigDedicated is null!\n"); - if ((UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated->tdd_AckNackFeedbackMode!=NULL)&& - (*UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated->tdd_AckNackFeedbackMode==PUCCH_ConfigDedicated__tdd_AckNackFeedbackMode_multiplexing)) - harq_information->harq_information_rel10.ack_nack_mode = 1; // multiplexing - else - harq_information->harq_information_rel10.ack_nack_mode = 0; // bundling - - switch(get_tmode(module_idP,CC_idP,UE_id)) { - case 1: - case 2: - case 5: - case 6: - case 7: - if (cc->tdd_Config==NULL) // FDD - harq_information->harq_information_rel10.harq_size = 1; - else { - if (harq_information->harq_information_rel10.ack_nack_mode == 1) - harq_information->harq_information_rel10.harq_size = get_V_UL_DAI(module_idP,CC_idP,rntiP); - else - harq_information->harq_information_rel10.harq_size = 1; - } - break; - default: // for any other TM we need 2 bits harq - if (cc->tdd_Config==NULL) { - harq_information->harq_information_rel10.harq_size = 2; - } - else { - if (harq_information->harq_information_rel10.ack_nack_mode == 1) - harq_information->harq_information_rel10.harq_size = get_V_UL_DAI(module_idP,CC_idP,rntiP); - else - harq_information->harq_information_rel10.harq_size = 2; - } - break; - } // get Tmode -} - -void fill_nfapi_harq_information(module_id_t module_idP, - int CC_idP, - uint16_t rntiP, - uint16_t absSFP, - nfapi_ul_config_harq_information *harq_information, - uint8_t cce_idxP) -{ - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc = &eNB->common_channels[CC_idP]; - UE_list_t *UE_list = &eNB->UE_list; - - int UE_id = find_UE_id(module_idP,rntiP); - - AssertFatal(UE_id>=0,"UE_id cannot be found, impossible\n"); - AssertFatal(UE_list!=NULL,"UE_list is null\n"); - AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated!=NULL,"physicalConfigDedicated for rnti %x is null\n",rntiP); - - harq_information->harq_information_rel11.num_ant_ports = 1; - - switch(get_tmode(module_idP,CC_idP,UE_id)) { - case 1: - case 2: - case 5: - case 6: - case 7: - if (cc->tdd_Config!=NULL) { - AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated!=NULL, - "pucch_ConfigDedicated is null for TDD!\n"); - if ((UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated->tdd_AckNackFeedbackMode!=NULL)&& - (*UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated->tdd_AckNackFeedbackMode==PUCCH_ConfigDedicated__tdd_AckNackFeedbackMode_multiplexing)) { - harq_information->harq_information_rel10_tdd.harq_size = 2; // 2-bit ACK/NAK - harq_information->harq_information_rel10_tdd.ack_nack_mode = 1; // multiplexing - } - else { - harq_information->harq_information_rel10_tdd.harq_size = 1; // 1-bit ACK/NAK - harq_information->harq_information_rel10_tdd.ack_nack_mode = 0; // bundling - } - harq_information->harq_information_rel10_tdd.n_pucch_1_0 = cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + cce_idxP; - harq_information->harq_information_rel10_tdd.number_of_pucch_resources = 1; + ul_req = + &RC.mac[module_idP]->UL_req_tmp[CC_idP][ul_absSF % + 10]. + ul_config_request_body; + ul_config_pdu = + &ul_req->ul_config_pdu_list[ul_req->number_of_pdus]; + // Do PUCCH + fill_nfapi_uci_acknak(module_idP, + CC_idP, + rnti, (frameP * 10) + subframeP, cce_idx); } else { - harq_information->harq_information_rel9_fdd.number_of_pucch_resources = 1; - harq_information->harq_information_rel9_fdd.harq_size = 1; // 1-bit ACK/NAK - harq_information->harq_information_rel9_fdd.n_pucch_1_0 = cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + cce_idxP; + /* there is already an existing UL grant so update it if needed + * on top of some other UL resource (PUSCH,combined SR/CQI/HARQ on PUCCH, etc) + */ + switch (ul_config_pdu->pdu_type) { + + /* [ulsch] to [ulsch + harq] or [ulsch + harq on pucch] */ + + case NFAPI_UL_CONFIG_ULSCH_PDU_TYPE: + if (use_simultaneous_pucch_pusch == 1) { + // Convert it to an NFAPI_UL_CONFIG_ULSCH_UCI_HARQ_PDU_TYPE + harq_information = + &ul_config_pdu->ulsch_uci_harq_pdu.harq_information; + ul_config_pdu->pdu_type = + NFAPI_UL_CONFIG_ULSCH_UCI_HARQ_PDU_TYPE; + LOG_D(MAC, + "Frame %d, Subframe %d: Switched UCI HARQ to ULSCH UCI HARQ\n", + frameP, subframeP); + } else { + // Convert it to an NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE + ulsch_harq_information = + &ul_config_pdu->ulsch_harq_pdu.harq_information; + ul_config_pdu->pdu_type = + NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE; + ul_config_pdu->ulsch_harq_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.n_srs_initial = 0; // last symbol not punctured + ul_config_pdu->ulsch_harq_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.initial_number_of_resource_blocks = ul_config_pdu->ulsch_harq_pdu.ulsch_pdu.ulsch_pdu_rel8.number_of_resource_blocks; // we don't change the number of resource blocks across retransmissions yet + LOG_D(MAC, + "Frame %d, Subframe %d: Switched UCI HARQ to ULSCH HARQ\n", + frameP, subframeP); + } + break; + case NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE: + AssertFatal(use_simultaneous_pucch_pusch == 1, + "Cannot be NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE, simultaneous_pucch_pusch is active"); + break; + case NFAPI_UL_CONFIG_ULSCH_UCI_HARQ_PDU_TYPE: + AssertFatal(use_simultaneous_pucch_pusch == 0, + "Cannot be NFAPI_UL_CONFIG_ULSCH_UCI_PDU_TYPE, simultaneous_pucch_pusch is inactive\n"); + break; + + /* [ulsch + cqi] to [ulsch + cqi + harq] */ + + case NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE: + // Convert it to an NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE + ulsch_harq_information = + &ul_config_pdu->ulsch_cqi_harq_ri_pdu.harq_information; + ul_config_pdu->pdu_type = + NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE; + /* TODO: check this - when converting from nfapi_ul_config_ulsch_cqi_ri_pdu to + * nfapi_ul_config_ulsch_cqi_harq_ri_pdu, shouldn't we copy initial_transmission_parameters + * from the one to the other? + * Those two types are not compatible. 'initial_transmission_parameters' is not at the + * place in both. + */ + ul_config_pdu->ulsch_cqi_harq_ri_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.n_srs_initial = 0; // last symbol not punctured + ul_config_pdu->ulsch_cqi_harq_ri_pdu.initial_transmission_parameters.initial_transmission_parameters_rel8.initial_number_of_resource_blocks = ul_config_pdu->ulsch_harq_pdu.ulsch_pdu.ulsch_pdu_rel8.number_of_resource_blocks; // we don't change the number of resource blocks across retransmissions yet + break; + case NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE: + AssertFatal(use_simultaneous_pucch_pusch == 0, + "Cannot be NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE, simultaneous_pucch_pusch is active\n"); + break; + + /* [ulsch + cqi on pucch] to [ulsch + cqi on pucch + harq on pucch] */ + + case NFAPI_UL_CONFIG_ULSCH_UCI_CSI_PDU_TYPE: + // convert it to an NFAPI_UL_CONFIG_ULSCH_CSI_UCI_HARQ_PDU_TYPE + harq_information = + &ul_config_pdu->ulsch_csi_uci_harq_pdu.harq_information; + ul_config_pdu->pdu_type = + NFAPI_UL_CONFIG_ULSCH_CSI_UCI_HARQ_PDU_TYPE; + break; + case NFAPI_UL_CONFIG_ULSCH_CSI_UCI_HARQ_PDU_TYPE: + AssertFatal(use_simultaneous_pucch_pusch == 1, + "Cannot be NFAPI_UL_CONFIG_ULSCH_CSI_UCI_HARQ_PDU_TYPE, simultaneous_pucch_pusch is inactive\n"); + break; + + /* [sr] to [sr + harq] */ + + case NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE: + // convert to NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE + ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE; + harq_information = + &ul_config_pdu->uci_sr_harq_pdu.harq_information; + break; + case NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE: + /* nothing to do */ + break; + + /* [cqi] to [cqi + harq] */ + + case NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE: + // convert to NFAPI_UL_CONFIG_UCI_CQI_HARQ_PDU_TYPE + ul_config_pdu->pdu_type = + NFAPI_UL_CONFIG_UCI_CQI_HARQ_PDU_TYPE; + harq_information = + &ul_config_pdu->uci_cqi_harq_pdu.harq_information; + break; + case NFAPI_UL_CONFIG_UCI_CQI_HARQ_PDU_TYPE: + /* nothing to do */ + break; + + /* [cqi + sr] to [cqr + sr + harq] */ + + case NFAPI_UL_CONFIG_UCI_CQI_SR_PDU_TYPE: + // convert to NFAPI_UL_CONFIG_UCI_CQI_SR_HARQ_PDU_TYPE + ul_config_pdu->pdu_type = + NFAPI_UL_CONFIG_UCI_CQI_SR_HARQ_PDU_TYPE; + harq_information = + &ul_config_pdu->uci_cqi_sr_harq_pdu.harq_information; + break; + case NFAPI_UL_CONFIG_UCI_CQI_SR_HARQ_PDU_TYPE: + /* nothing to do */ + break; + } } - break; - default: // for any other TM we need 2 bits harq - if (cc->tdd_Config!=NULL) { - AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated!=NULL, - "pucch_ConfigDedicated is null for TDD!\n"); - if ((UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated->tdd_AckNackFeedbackMode!=NULL)&& - (*UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->pucch_ConfigDedicated->tdd_AckNackFeedbackMode==PUCCH_ConfigDedicated__tdd_AckNackFeedbackMode_multiplexing)) { - harq_information->harq_information_rel10_tdd.ack_nack_mode = 1; // multiplexing - } - else { - harq_information->harq_information_rel10_tdd.ack_nack_mode = 0; // bundling - } - harq_information->harq_information_rel10_tdd.harq_size = 2; - harq_information->harq_information_rel10_tdd.n_pucch_1_0 = cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + cce_idxP; - harq_information->harq_information_rel10_tdd.number_of_pucch_resources = 1; + + if (ulsch_harq_information) + fill_nfapi_ulsch_harq_information(module_idP, CC_idP, + rnti, ulsch_harq_information); + + if (harq_information) + fill_nfapi_harq_information(module_idP, CC_idP, + rnti, + (frameP * 10) + subframeP, + harq_information, cce_idx); +} + +uint8_t get_V_UL_DAI(module_id_t module_idP, int CC_idP, uint16_t rntiP) +{ + nfapi_hi_dci0_request_body_t *HI_DCI0_req = + &RC.mac[module_idP]->HI_DCI0_req[CC_idP].hi_dci0_request_body; + nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = + &HI_DCI0_req->hi_dci0_pdu_list[0]; + + for (int i = 0; i < HI_DCI0_req->number_of_dci; i++) { + if ((hi_dci0_pdu[i].pdu_type == NFAPI_HI_DCI0_DCI_PDU_TYPE) && + (hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.rnti == rntiP)) + return (hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8. + dl_assignment_index); } - else { - harq_information->harq_information_rel9_fdd.number_of_pucch_resources = 1; - harq_information->harq_information_rel9_fdd.ack_nack_mode = 0; // 1a/b - harq_information->harq_information_rel9_fdd.harq_size = 2; - harq_information->harq_information_rel9_fdd.n_pucch_1_0 = cc->radioResourceConfigCommon->pucch_ConfigCommon.n1PUCCH_AN + cce_idxP; + return (4); // this is rule from Section 7.3 in 36.213 +} + +void +fill_nfapi_ulsch_harq_information(module_id_t module_idP, + int CC_idP, + uint16_t rntiP, + nfapi_ul_config_ulsch_harq_information + * harq_information) +{ + eNB_MAC_INST *eNB = RC.mac[module_idP]; + COMMON_channels_t *cc = &eNB->common_channels[CC_idP]; + UE_list_t *UE_list = &eNB->UE_list; + + int UE_id = find_UE_id(module_idP, rntiP); + + PUSCH_ConfigDedicated_t *puschConfigDedicated; + // PUSCH_ConfigDedicated_v1020_t *puschConfigDedicated_v1020; + // PUSCH_ConfigDedicated_v1130_t *puschConfigDedicated_v1130; + // PUSCH_ConfigDedicated_v1250_t *puschConfigDedicated_v1250; + + AssertFatal(UE_id >= 0, "UE_id cannot be found, impossible\n"); + AssertFatal(UE_list != NULL, "UE_list is null\n"); + AssertFatal(UE_list->UE_template[CC_idP][UE_id]. + physicalConfigDedicated != NULL, + "physicalConfigDedicated for rnti %x is null\n", rntiP); + AssertFatal((puschConfigDedicated = (PUSCH_ConfigDedicated_t *) + UE_list->UE_template[CC_idP][UE_id]. + physicalConfigDedicated->pusch_ConfigDedicated) != NULL, + "physicalConfigDedicated->puschConfigDedicated for rnti %x is null\n", + rntiP); +#if defined(Rel14) || defined(Rel14) + /* if (UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->ext2) puschConfigDedicated_v1020 = UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->ext2->pusch_ConfigDedicated_v1020; + #endif + #ifdef Rel14 + if (UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->ext4) puschConfigDedicated_v1130 = UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->ext4->pusch_ConfigDedicated_v1130; + if (UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->ext5) puschConfigDedicated_v1250 = UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->ext5->pusch_ConfigDedicated_v1250; + */ +#endif + harq_information->harq_information_rel10.delta_offset_harq = + puschConfigDedicated->betaOffset_ACK_Index; + AssertFatal(UE_list-> + UE_template[CC_idP][UE_id].physicalConfigDedicated-> + pucch_ConfigDedicated != NULL, + "pucch_ConfigDedicated is null!\n"); + if ((UE_list->UE_template[CC_idP][UE_id]. + physicalConfigDedicated->pucch_ConfigDedicated-> + tdd_AckNackFeedbackMode != NULL) + && (*UE_list->UE_template[CC_idP][UE_id]. + physicalConfigDedicated->pucch_ConfigDedicated-> + tdd_AckNackFeedbackMode == + PUCCH_ConfigDedicated__tdd_AckNackFeedbackMode_multiplexing)) + harq_information->harq_information_rel10.ack_nack_mode = 1; // multiplexing + else + harq_information->harq_information_rel10.ack_nack_mode = 0; // bundling + + switch (get_tmode(module_idP, CC_idP, UE_id)) { + case 1: + case 2: + case 5: + case 6: + case 7: + if (cc->tdd_Config == NULL) // FDD + harq_information->harq_information_rel10.harq_size = 1; + else { + if (harq_information->harq_information_rel10.ack_nack_mode == + 1) + harq_information->harq_information_rel10.harq_size = + get_V_UL_DAI(module_idP, CC_idP, rntiP); + else + harq_information->harq_information_rel10.harq_size = 1; + } + break; + default: // for any other TM we need 2 bits harq + if (cc->tdd_Config == NULL) { + harq_information->harq_information_rel10.harq_size = 2; + } else { + if (harq_information->harq_information_rel10.ack_nack_mode == + 1) + harq_information->harq_information_rel10.harq_size = + get_V_UL_DAI(module_idP, CC_idP, rntiP); + else + harq_information->harq_information_rel10.harq_size = 2; + } + break; + } // get Tmode +} + +void +fill_nfapi_harq_information(module_id_t module_idP, + int CC_idP, + uint16_t rntiP, + uint16_t absSFP, + nfapi_ul_config_harq_information * + harq_information, uint8_t cce_idxP) +{ + eNB_MAC_INST *eNB = RC.mac[module_idP]; + COMMON_channels_t *cc = &eNB->common_channels[CC_idP]; + UE_list_t *UE_list = &eNB->UE_list; + + int UE_id = find_UE_id(module_idP, rntiP); + + AssertFatal(UE_id >= 0, "UE_id cannot be found, impossible\n"); + AssertFatal(UE_list != NULL, "UE_list is null\n"); + AssertFatal(UE_list->UE_template[CC_idP][UE_id]. + physicalConfigDedicated != NULL, + "physicalConfigDedicated for rnti %x is null\n", rntiP); + + harq_information->harq_information_rel11.num_ant_ports = 1; + + switch (get_tmode(module_idP, CC_idP, UE_id)) { + case 1: + case 2: + case 5: + case 6: + case 7: + if (cc->tdd_Config != NULL) { + AssertFatal(UE_list-> + UE_template[CC_idP] + [UE_id].physicalConfigDedicated-> + pucch_ConfigDedicated != NULL, + "pucch_ConfigDedicated is null for TDD!\n"); + if ((UE_list-> + UE_template[CC_idP][UE_id].physicalConfigDedicated-> + pucch_ConfigDedicated->tdd_AckNackFeedbackMode != NULL) + && (*UE_list-> + UE_template[CC_idP][UE_id].physicalConfigDedicated-> + pucch_ConfigDedicated->tdd_AckNackFeedbackMode == + PUCCH_ConfigDedicated__tdd_AckNackFeedbackMode_multiplexing)) + { + harq_information->harq_information_rel10_tdd.harq_size = 2; // 2-bit ACK/NAK + harq_information->harq_information_rel10_tdd.ack_nack_mode = 1; // multiplexing + } else { + harq_information->harq_information_rel10_tdd.harq_size = 1; // 1-bit ACK/NAK + harq_information->harq_information_rel10_tdd.ack_nack_mode = 0; // bundling + } + harq_information->harq_information_rel10_tdd.n_pucch_1_0 = + cc->radioResourceConfigCommon->pucch_ConfigCommon. + n1PUCCH_AN + cce_idxP; + harq_information-> + harq_information_rel10_tdd.number_of_pucch_resources = 1; + } else { + harq_information-> + harq_information_rel9_fdd.number_of_pucch_resources = 1; + harq_information->harq_information_rel9_fdd.harq_size = 1; // 1-bit ACK/NAK + harq_information->harq_information_rel9_fdd.n_pucch_1_0 = + cc->radioResourceConfigCommon->pucch_ConfigCommon. + n1PUCCH_AN + cce_idxP; + } + break; + default: // for any other TM we need 2 bits harq + if (cc->tdd_Config != NULL) { + AssertFatal(UE_list-> + UE_template[CC_idP] + [UE_id].physicalConfigDedicated-> + pucch_ConfigDedicated != NULL, + "pucch_ConfigDedicated is null for TDD!\n"); + if ((UE_list-> + UE_template[CC_idP][UE_id].physicalConfigDedicated-> + pucch_ConfigDedicated->tdd_AckNackFeedbackMode != NULL) + && (*UE_list-> + UE_template[CC_idP][UE_id].physicalConfigDedicated-> + pucch_ConfigDedicated->tdd_AckNackFeedbackMode == + PUCCH_ConfigDedicated__tdd_AckNackFeedbackMode_multiplexing)) + { + harq_information->harq_information_rel10_tdd.ack_nack_mode = 1; // multiplexing + } else { + harq_information->harq_information_rel10_tdd.ack_nack_mode = 0; // bundling + } + harq_information->harq_information_rel10_tdd.harq_size = 2; + harq_information->harq_information_rel10_tdd.n_pucch_1_0 = + cc->radioResourceConfigCommon->pucch_ConfigCommon. + n1PUCCH_AN + cce_idxP; + harq_information-> + harq_information_rel10_tdd.number_of_pucch_resources = 1; + } else { + harq_information-> + harq_information_rel9_fdd.number_of_pucch_resources = 1; + harq_information->harq_information_rel9_fdd.ack_nack_mode = 0; // 1a/b + harq_information->harq_information_rel9_fdd.harq_size = 2; + harq_information->harq_information_rel9_fdd.n_pucch_1_0 = + cc->radioResourceConfigCommon->pucch_ConfigCommon. + n1PUCCH_AN + cce_idxP; + } + break; + } // get Tmode +} + +uint16_t +fill_nfapi_uci_acknak(module_id_t module_idP, + int CC_idP, + uint16_t rntiP, uint16_t absSFP, uint8_t cce_idxP) +{ + eNB_MAC_INST *eNB = RC.mac[module_idP]; + COMMON_channels_t *cc = &eNB->common_channels[CC_idP]; + + int ackNAK_absSF = get_pucch1_absSF(cc, absSFP); + nfapi_ul_config_request_body_t *ul_req = + &eNB->UL_req_tmp[CC_idP][ackNAK_absSF % 10].ul_config_request_body; + nfapi_ul_config_request_pdu_t *ul_config_pdu = + &ul_req->ul_config_pdu_list[ul_req->number_of_pdus]; + + memset((void *) ul_config_pdu, 0, + sizeof(nfapi_ul_config_request_pdu_t)); + ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE; + ul_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_ul_config_uci_harq_pdu)); + ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.handle = 0; // don't know how to use this + ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.rnti = + rntiP; + + fill_nfapi_harq_information(module_idP, CC_idP, + rntiP, + absSFP, + &ul_config_pdu->uci_harq_pdu. + harq_information, cce_idxP); + LOG_D(MAC, + "Filled in UCI HARQ request for rnti %x SF %d.%d acknakSF %d.%d, cce_idxP %d-> n1_pucch %d\n", + rntiP, absSFP / 10, absSFP % 10, ackNAK_absSF / 10, + ackNAK_absSF % 10, cce_idxP, + ul_config_pdu->uci_harq_pdu. + harq_information.harq_information_rel9_fdd.n_pucch_1_0); + + ul_req->number_of_pdus++; + + return (((ackNAK_absSF / 10) << 4) + (ackNAK_absSF % 10)); +} + +void +fill_nfapi_dlsch_config(eNB_MAC_INST * eNB, + nfapi_dl_config_request_body_t * dl_req, + uint16_t length, + uint16_t pdu_index, + uint16_t rnti, + uint8_t resource_allocation_type, + uint8_t + virtual_resource_block_assignment_flag, + uint16_t resource_block_coding, + uint8_t modulation, + uint8_t redundancy_version, + uint8_t transport_blocks, + uint8_t transport_block_to_codeword_swap_flag, + uint8_t transmission_scheme, + uint8_t number_of_layers, + uint8_t number_of_subbands, + // uint8_t codebook_index, + uint8_t ue_category_capacity, + uint8_t pa, + uint8_t delta_power_offset_index, + uint8_t ngap, + uint8_t nprb, + uint8_t transmission_mode, + uint8_t num_bf_prb_per_subband, + uint8_t num_bf_vector) +{ + nfapi_dl_config_request_pdu_t *dl_config_pdu = + &dl_req->dl_config_pdu_list[dl_req->number_pdu]; + memset((void *) dl_config_pdu, 0, + sizeof(nfapi_dl_config_request_pdu_t)); + + dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; + dl_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu)); + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = length; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = pdu_index; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = rnti; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = + resource_allocation_type; + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.virtual_resource_block_assignment_flag = + virtual_resource_block_assignment_flag; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = + resource_block_coding; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = modulation; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = + redundancy_version; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = + transport_blocks; + dl_config_pdu->dlsch_pdu. + dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = + transport_block_to_codeword_swap_flag; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = + transmission_scheme; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = + number_of_layers; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = + number_of_subbands; + // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = codebook_index; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = + ue_category_capacity; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = pa; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = + delta_power_offset_index; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = ngap; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = nprb; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = + transmission_mode; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = + num_bf_prb_per_subband; + dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = num_bf_vector; + dl_req->number_pdu++; +} + +uint16_t +fill_nfapi_tx_req(nfapi_tx_request_body_t * tx_req_body, + uint16_t absSF, uint16_t pdu_length, + uint16_t pdu_index, uint8_t * pdu) +{ + nfapi_tx_request_pdu_t *TX_req = + &tx_req_body->tx_pdu_list[tx_req_body->number_of_pdus]; + LOG_D(MAC, "Filling TX_req %d for pdu length %d\n", + tx_req_body->number_of_pdus, pdu_length); + TX_req->pdu_length = pdu_length; + TX_req->pdu_index = pdu_index; + TX_req->num_segments = 1; + TX_req->segments[0].segment_length = pdu_length; + TX_req->segments[0].segment_data = pdu; + tx_req_body->number_of_pdus++; + + return (((absSF / 10) << 4) + (absSF % 10)); +} + +void +fill_nfapi_ulsch_config_request_rel8(nfapi_ul_config_request_pdu_t * + ul_config_pdu, uint8_t cqi_req, + COMMON_channels_t * cc, + struct PhysicalConfigDedicated + *physicalConfigDedicated, + uint8_t tmode, uint32_t handle, + uint16_t rnti, + uint8_t resource_block_start, + uint8_t + number_of_resource_blocks, + uint8_t mcs, + uint8_t cyclic_shift_2_for_drms, + uint8_t + frequency_hopping_enabled_flag, + uint8_t frequency_hopping_bits, + uint8_t new_data_indication, + uint8_t redundancy_version, + uint8_t harq_process_number, + uint8_t ul_tx_mode, + uint8_t current_tx_nb, + uint8_t n_srs, uint16_t size) +{ + memset((void *) ul_config_pdu, 0, + sizeof(nfapi_ul_config_request_pdu_t)); + + ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_PDU_TYPE; + ul_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_ul_config_ulsch_pdu)); + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.handle = handle; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.rnti = rnti; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.resource_block_start = + resource_block_start; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.number_of_resource_blocks = + number_of_resource_blocks; + if (mcs < 11) + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type = 2; + else if (mcs < 21) + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type = 4; + else + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type = 6; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.cyclic_shift_2_for_drms = + cyclic_shift_2_for_drms; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8. + frequency_hopping_enabled_flag = frequency_hopping_enabled_flag; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_bits = + frequency_hopping_bits; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.new_data_indication = + new_data_indication; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.redundancy_version = + redundancy_version; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.harq_process_number = + harq_process_number; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.ul_tx_mode = ul_tx_mode; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.current_tx_nb = current_tx_nb; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.n_srs = n_srs; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.size = size; + + if (cqi_req == 1) { + // Add CQI portion + ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE; + ul_config_pdu->pdu_size = + (uint8_t) (2 + sizeof(nfapi_ul_config_ulsch_cqi_ri_pdu)); + ul_config_pdu->ulsch_cqi_ri_pdu. + cqi_ri_information.cqi_ri_information_rel9.report_type = 1; + ul_config_pdu->ulsch_cqi_ri_pdu. + cqi_ri_information.cqi_ri_information_rel9. + aperiodic_cqi_pmi_ri_report.number_of_cc = 1; + LOG_D(MAC, "report_type %d\n", + ul_config_pdu->ulsch_cqi_ri_pdu. + cqi_ri_information.cqi_ri_information_rel9.report_type); + + if (cc->p_eNB <= 2 + && (tmode == 3 || tmode == 4 || tmode == 8 || tmode == 9 + || tmode == 10)) + ul_config_pdu->ulsch_cqi_ri_pdu. + cqi_ri_information.cqi_ri_information_rel9. + aperiodic_cqi_pmi_ri_report.cc[0].ri_size = 1; + else if (cc->p_eNB <= 2) + ul_config_pdu->ulsch_cqi_ri_pdu. + cqi_ri_information.cqi_ri_information_rel9. + aperiodic_cqi_pmi_ri_report.cc[0].ri_size = 0; + else if (cc->p_eNB == 4) + ul_config_pdu->ulsch_cqi_ri_pdu. + cqi_ri_information.cqi_ri_information_rel9. + aperiodic_cqi_pmi_ri_report.cc[0].ri_size = 2; + + AssertFatal(physicalConfigDedicated->cqi_ReportConfig != NULL, + "physicalConfigDedicated->cqi_ReportConfig is null!\n"); + AssertFatal(physicalConfigDedicated-> + cqi_ReportConfig->cqi_ReportModeAperiodic != NULL, + "physicalConfigDedicated->cqi_ReportModeAperiodic is null!\n"); + AssertFatal(physicalConfigDedicated->pusch_ConfigDedicated != NULL, + "physicalConfigDedicated->puschConfigDedicated is null!\n"); + + for (int ri = 0; + ri < + (1 << ul_config_pdu->ulsch_cqi_ri_pdu. + cqi_ri_information.cqi_ri_information_rel9. + aperiodic_cqi_pmi_ri_report.cc[0].ri_size); ri++) + ul_config_pdu->ulsch_cqi_ri_pdu. + cqi_ri_information.cqi_ri_information_rel9. + aperiodic_cqi_pmi_ri_report.cc[0].dl_cqi_pmi_size[ri] = + get_dl_cqi_pmi_size_pusch(cc, tmode, 1 + ri, + physicalConfigDedicated->cqi_ReportConfig->cqi_ReportModeAperiodic); + + ul_config_pdu->ulsch_cqi_ri_pdu. + cqi_ri_information.cqi_ri_information_rel9.delta_offset_cqi = + physicalConfigDedicated->pusch_ConfigDedicated-> + betaOffset_CQI_Index; + ul_config_pdu->ulsch_cqi_ri_pdu. + cqi_ri_information.cqi_ri_information_rel9.delta_offset_ri = + physicalConfigDedicated->pusch_ConfigDedicated-> + betaOffset_RI_Index; } - break; - } // get Tmode -} - -uint16_t fill_nfapi_uci_acknak(module_id_t module_idP, - int CC_idP, - uint16_t rntiP, - uint16_t absSFP, - uint8_t cce_idxP) -{ - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc = &eNB->common_channels[CC_idP]; - - int ackNAK_absSF = get_pucch1_absSF(cc,absSFP); - nfapi_ul_config_request_body_t *ul_req = &eNB->UL_req_tmp[CC_idP][ackNAK_absSF%10].ul_config_request_body; - nfapi_ul_config_request_pdu_t *ul_config_pdu = &ul_req->ul_config_pdu_list[ul_req->number_of_pdus]; - - memset((void*)ul_config_pdu,0,sizeof(nfapi_ul_config_request_pdu_t)); - ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE; - ul_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_ul_config_uci_harq_pdu)); - ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.handle = 0; // don't know how to use this - ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.rnti = rntiP; - - fill_nfapi_harq_information(module_idP,CC_idP, - rntiP, - absSFP, - &ul_config_pdu->uci_harq_pdu.harq_information, - cce_idxP); - LOG_D(MAC,"Filled in UCI HARQ request for rnti %x SF %d.%d acknakSF %d.%d, cce_idxP %d-> n1_pucch %d\n",rntiP, - absSFP/10,absSFP%10,ackNAK_absSF/10,ackNAK_absSF%10,cce_idxP,ul_config_pdu->uci_harq_pdu.harq_information.harq_information_rel9_fdd.n_pucch_1_0); - - ul_req->number_of_pdus++; - - return(((ackNAK_absSF/10)<<4) + (ackNAK_absSF%10)); -} - -void fill_nfapi_dlsch_config(eNB_MAC_INST *eNB, - nfapi_dl_config_request_body_t *dl_req, - uint16_t length, - uint16_t pdu_index, - uint16_t rnti, - uint8_t resource_allocation_type, - uint8_t virtual_resource_block_assignment_flag, - uint16_t resource_block_coding, - uint8_t modulation, - uint8_t redundancy_version, - uint8_t transport_blocks, - uint8_t transport_block_to_codeword_swap_flag, - uint8_t transmission_scheme, - uint8_t number_of_layers, - uint8_t number_of_subbands, - // uint8_t codebook_index, - uint8_t ue_category_capacity, - uint8_t pa, - uint8_t delta_power_offset_index, - uint8_t ngap, - uint8_t nprb, - uint8_t transmission_mode, - uint8_t num_bf_prb_per_subband, - uint8_t num_bf_vector - ) -{ - nfapi_dl_config_request_pdu_t *dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu]; - memset((void*)dl_config_pdu,0,sizeof(nfapi_dl_config_request_pdu_t)); - - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE; - dl_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_dl_config_dlsch_pdu)); - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = length; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = pdu_index; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = rnti; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = resource_allocation_type; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = virtual_resource_block_assignment_flag; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = resource_block_coding; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = modulation; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = redundancy_version; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = transport_blocks; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = transport_block_to_codeword_swap_flag; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = transmission_scheme; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = number_of_layers; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = number_of_subbands; - // dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index = codebook_index; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = ue_category_capacity; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = pa; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = delta_power_offset_index; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = ngap; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = nprb; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = transmission_mode; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = num_bf_prb_per_subband; - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = num_bf_vector; - dl_req->number_pdu++; -} - -uint16_t fill_nfapi_tx_req(nfapi_tx_request_body_t *tx_req_body,uint16_t absSF,uint16_t pdu_length, uint16_t pdu_index, uint8_t *pdu) -{ - nfapi_tx_request_pdu_t *TX_req = &tx_req_body->tx_pdu_list[tx_req_body->number_of_pdus]; - LOG_D(MAC,"Filling TX_req %d for pdu length %d\n",tx_req_body->number_of_pdus,pdu_length); - TX_req->pdu_length = pdu_length; - TX_req->pdu_index = pdu_index; - TX_req->num_segments = 1; - TX_req->segments[0].segment_length = pdu_length; - TX_req->segments[0].segment_data = pdu; - tx_req_body->number_of_pdus++; - - return(((absSF/10)<<4) + (absSF%10)); -} - -void fill_nfapi_ulsch_config_request_rel8(nfapi_ul_config_request_pdu_t *ul_config_pdu, - uint8_t cqi_req, - COMMON_channels_t *cc, - struct PhysicalConfigDedicated *physicalConfigDedicated, - uint8_t tmode, - uint32_t handle, - uint16_t rnti, - uint8_t resource_block_start, - uint8_t number_of_resource_blocks, - uint8_t mcs, - uint8_t cyclic_shift_2_for_drms, - uint8_t frequency_hopping_enabled_flag, - uint8_t frequency_hopping_bits, - uint8_t new_data_indication, - uint8_t redundancy_version, - uint8_t harq_process_number, - uint8_t ul_tx_mode, - uint8_t current_tx_nb, - uint8_t n_srs, - uint16_t size - ) -{ - memset((void*)ul_config_pdu,0,sizeof(nfapi_ul_config_request_pdu_t)); - - ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_PDU_TYPE; - ul_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_ul_config_ulsch_pdu)); - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.handle = handle; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.rnti = rnti; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.resource_block_start = resource_block_start; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.number_of_resource_blocks = number_of_resource_blocks; - if (mcs<11) ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type = 2; - else if (mcs<21) ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type = 4; - else ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.modulation_type = 6; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.cyclic_shift_2_for_drms = cyclic_shift_2_for_drms; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_enabled_flag = frequency_hopping_enabled_flag; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.frequency_hopping_bits = frequency_hopping_bits; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.new_data_indication = new_data_indication; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.redundancy_version = redundancy_version; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.harq_process_number = harq_process_number; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.ul_tx_mode = ul_tx_mode; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.current_tx_nb = current_tx_nb; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.n_srs = n_srs; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.size = size; - - if (cqi_req == 1) { - // Add CQI portion - ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE; - ul_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_ul_config_ulsch_cqi_ri_pdu)); - ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.report_type = 1; - ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.aperiodic_cqi_pmi_ri_report.number_of_cc = 1; - LOG_D(MAC,"report_type %d\n",ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.report_type); - - if (cc->p_eNB<=2 && (tmode==3||tmode==4||tmode==8||tmode==9||tmode==10)) - ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.aperiodic_cqi_pmi_ri_report.cc[0].ri_size = 1; - else if (cc->p_eNB<=2) - ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.aperiodic_cqi_pmi_ri_report.cc[0].ri_size = 0; - else if (cc->p_eNB==4) - ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.aperiodic_cqi_pmi_ri_report.cc[0].ri_size = 2; - - AssertFatal(physicalConfigDedicated->cqi_ReportConfig!=NULL,"physicalConfigDedicated->cqi_ReportConfig is null!\n"); - AssertFatal(physicalConfigDedicated->cqi_ReportConfig->cqi_ReportModeAperiodic!=NULL,"physicalConfigDedicated->cqi_ReportModeAperiodic is null!\n"); - AssertFatal(physicalConfigDedicated->pusch_ConfigDedicated!=NULL,"physicalConfigDedicated->puschConfigDedicated is null!\n"); - - for (int ri=0; - ri<(1<ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.aperiodic_cqi_pmi_ri_report.cc[0].ri_size); - ri++) - ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.aperiodic_cqi_pmi_ri_report.cc[0].dl_cqi_pmi_size[ri] = - get_dl_cqi_pmi_size_pusch(cc, - tmode, - 1+ri, - physicalConfigDedicated->cqi_ReportConfig->cqi_ReportModeAperiodic); - - ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.delta_offset_cqi = physicalConfigDedicated->pusch_ConfigDedicated->betaOffset_CQI_Index; - ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9.delta_offset_ri = physicalConfigDedicated->pusch_ConfigDedicated->betaOffset_RI_Index; - } } #ifdef Rel14 -void fill_nfapi_ulsch_config_request_emtc(nfapi_ul_config_request_pdu_t *ul_config_pdu, - uint8_t ue_type, - uint16_t total_number_of_repetitions, - uint16_t repetition_number, - uint16_t initial_transmission_sf_io) +void +fill_nfapi_ulsch_config_request_emtc(nfapi_ul_config_request_pdu_t * + ul_config_pdu, uint8_t ue_type, + uint16_t + total_number_of_repetitions, + uint16_t repetition_number, + uint16_t initial_transmission_sf_io) { - // Re13 fields + // Re13 fields - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.ue_type = ue_type; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions = total_number_of_repetitions; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.repetition_number = repetition_number; - ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.initial_transmission_sf_io = initial_transmission_sf_io; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.ue_type = ue_type; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions = + total_number_of_repetitions; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.repetition_number = + repetition_number; + ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.initial_transmission_sf_io = + initial_transmission_sf_io; } int get_numnarrowbands(long dl_Bandwidth) { - int nb_tab[6] = {1,2,4,8,12,16}; + int nb_tab[6] = { 1, 2, 4, 8, 12, 16 }; - AssertFatal(dl_Bandwidth<7 || dl_Bandwidth>=0,"dl_Bandwidth not in [0..6]\n"); - return(nb_tab[dl_Bandwidth]); + AssertFatal(dl_Bandwidth < 7 + || dl_Bandwidth >= 0, "dl_Bandwidth not in [0..6]\n"); + return (nb_tab[dl_Bandwidth]); } int get_numnarrowbandbits(long dl_Bandwidth) { - int nbbits_tab[6] = {0,1,2,3,4,4}; + int nbbits_tab[6] = { 0, 1, 2, 3, 4, 4 }; - AssertFatal(dl_Bandwidth<7 || dl_Bandwidth>=0,"dl_Bandwidth not in [0..6]\n"); - return(nbbits_tab[dl_Bandwidth]); + AssertFatal(dl_Bandwidth < 7 + || dl_Bandwidth >= 0, "dl_Bandwidth not in [0..6]\n"); + return (nbbits_tab[dl_Bandwidth]); } //This implements the frame/subframe condition for first subframe of MPDCCH transmission (Section 9.1.5 36.213, Rel 13/14) -int startSF_fdd_RA_times2[8] = {2,3,4,5,8,10,16,20}; -int startSF_tdd_RA[7] = {1,2,4,5,8,10,20}; +int startSF_fdd_RA_times2[8] = { 2, 3, 4, 5, 8, 10, 16, 20 }; +int startSF_tdd_RA[7] = { 1, 2, 4, 5, 8, 10, 20 }; -int mpdcch_sf_condition(eNB_MAC_INST *eNB,int CC_id, frame_t frameP,sub_frame_t subframeP,int rmax,MPDCCH_TYPES_t mpdcch_type,int UE_id) +int +mpdcch_sf_condition(eNB_MAC_INST * eNB, int CC_id, frame_t frameP, + sub_frame_t subframeP, int rmax, + MPDCCH_TYPES_t mpdcch_type, int UE_id) { - struct PRACH_ConfigSIB_v1310 *ext4_prach = eNB->common_channels[CC_id].radioResourceConfigCommon_BR->ext4->prach_ConfigCommon_v1310; + struct PRACH_ConfigSIB_v1310 *ext4_prach = + eNB->common_channels[CC_id].radioResourceConfigCommon_BR-> + ext4->prach_ConfigCommon_v1310; - int T; - EPDCCH_SetConfig_r11_t *epdcch_setconfig_r11; + int T; + EPDCCH_SetConfig_r11_t *epdcch_setconfig_r11; - switch (mpdcch_type) { - case TYPE0: - AssertFatal(1==0,"MPDCCH Type 0 not handled yet\n"); - break; - case TYPE1: - AssertFatal(1==0,"MPDCCH Type 1 not handled yet\n"); - break; - case TYPE1A: - AssertFatal(1==0,"MPDCCH Type 1A not handled yet\n"); - break; - case TYPE2: // RAR - AssertFatal(ext4_prach->mpdcch_startSF_CSS_RA_r13!=NULL, - "mpdcch_startSF_CSS_RA_r13 is null\n"); - AssertFatal(rmax>0,"rmax is 0!\b"); - if (eNB->common_channels[CC_id].tdd_Config==NULL) //FDD - T = rmax*startSF_fdd_RA_times2[ext4_prach->mpdcch_startSF_CSS_RA_r13->choice.fdd_r13]>>1; - else //TDD - T = rmax*startSF_tdd_RA[ext4_prach->mpdcch_startSF_CSS_RA_r13->choice.tdd_r13]; - break; - case TYPE2A: - AssertFatal(1==0,"MPDCCH Type 2A not handled yet\n"); - break; - case TYPEUESPEC: - epdcch_setconfig_r11= eNB->UE_list.UE_template[CC_id][UE_id].physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11->list.array[0] ; + switch (mpdcch_type) { + case TYPE0: + AssertFatal(1 == 0, "MPDCCH Type 0 not handled yet\n"); + break; + case TYPE1: + AssertFatal(1 == 0, "MPDCCH Type 1 not handled yet\n"); + break; + case TYPE1A: + AssertFatal(1 == 0, "MPDCCH Type 1A not handled yet\n"); + break; + case TYPE2: // RAR + AssertFatal(ext4_prach->mpdcch_startSF_CSS_RA_r13 != NULL, + "mpdcch_startSF_CSS_RA_r13 is null\n"); + AssertFatal(rmax > 0, "rmax is 0!\b"); + if (eNB->common_channels[CC_id].tdd_Config == NULL) //FDD + T = rmax * + startSF_fdd_RA_times2[ext4_prach-> + mpdcch_startSF_CSS_RA_r13-> + choice.fdd_r13] >> 1; + else //TDD + T = rmax * + startSF_tdd_RA[ext4_prach-> + mpdcch_startSF_CSS_RA_r13->choice.tdd_r13]; + break; + case TYPE2A: + AssertFatal(1 == 0, "MPDCCH Type 2A not handled yet\n"); + break; + case TYPEUESPEC: + epdcch_setconfig_r11 = + eNB->UE_list.UE_template[CC_id][UE_id]. + physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11. + choice.setup.setConfigToAddModList_r11->list.array[0]; - AssertFatal(epdcch_setconfig_r11 != NULL," epdcch_setconfig_r11 is null for UE specific \n"); - AssertFatal(epdcch_setconfig_r11->ext2 != NULL," ext2 doesn't exist in epdcch config ' \n"); + AssertFatal(epdcch_setconfig_r11 != NULL, + " epdcch_setconfig_r11 is null for UE specific \n"); + AssertFatal(epdcch_setconfig_r11->ext2 != NULL, + " ext2 doesn't exist in epdcch config ' \n"); - if (eNB->common_channels[CC_id].tdd_Config==NULL) //FDD - T = rmax*startSF_fdd_RA_times2[epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_StartSF_UESS_r13.choice.fdd_r13]>>1; - else //TDD - T = rmax*startSF_tdd_RA[epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_StartSF_UESS_r13.choice.tdd_r13]; + if (eNB->common_channels[CC_id].tdd_Config == NULL) //FDD + T = rmax * + startSF_fdd_RA_times2[epdcch_setconfig_r11-> + ext2->mpdcch_config_r13->choice. + setup.mpdcch_StartSF_UESS_r13.choice. + fdd_r13] >> 1; + else //TDD + T = rmax * + startSF_tdd_RA[epdcch_setconfig_r11-> + ext2->mpdcch_config_r13->choice. + setup.mpdcch_StartSF_UESS_r13.choice. + tdd_r13]; - break; - default: - return(0); - } + break; + default: + return (0); + } - AssertFatal(T>0,"T is 0!\n"); - if (((10*frameP) + subframeP)%T == 0) return(1); - else return(0); + AssertFatal(T > 0, "T is 0!\n"); + if (((10 * frameP) + subframeP) % T == 0) + return (1); + else + return (0); } -int narrowband_to_first_rb(COMMON_channels_t *cc, int nb_index) +int narrowband_to_first_rb(COMMON_channels_t * cc, int nb_index) { - switch (cc->mib->message.dl_Bandwidth) { - case 0: // 6 PRBs, N_NB=1, i_0=0 - return(0); - break; - case 3: // 50 PRBs, N_NB=8, i_0=1 - return((int)(1+(6*nb_index))); - break; - case 5: // 100 PRBs, N_NB=16, i_0=2 - return((int)(2+(6*nb_index))); - break; - case 1: // 15 PRBs N_NB=2, i_0=1 - if (nb_index>0) return(1); - else return(0); - break; - case 2: // 25 PRBs, N_NB=4, i_0=0 - if (nb_index>1) return(1+(6*nb_index)); - else return((6*nb_index)); - break; - case 4: // 75 PRBs, N_NB=12, i_0=1 - if (nb_index>5) return(2+(6*nb_index)); - else return(1+(6*nb_index)); - break; - default: - AssertFatal(1==0,"Impossible dl_Bandwidth %d\n",(int)cc->mib->message.dl_Bandwidth); - break; - } + switch (cc->mib->message.dl_Bandwidth) { + case 0: // 6 PRBs, N_NB=1, i_0=0 + return (0); + break; + case 3: // 50 PRBs, N_NB=8, i_0=1 + return ((int) (1 + (6 * nb_index))); + break; + case 5: // 100 PRBs, N_NB=16, i_0=2 + return ((int) (2 + (6 * nb_index))); + break; + case 1: // 15 PRBs N_NB=2, i_0=1 + if (nb_index > 0) + return (1); + else + return (0); + break; + case 2: // 25 PRBs, N_NB=4, i_0=0 + if (nb_index > 1) + return (1 + (6 * nb_index)); + else + return ((6 * nb_index)); + break; + case 4: // 75 PRBs, N_NB=12, i_0=1 + if (nb_index > 5) + return (2 + (6 * nb_index)); + else + return (1 + (6 * nb_index)); + break; + default: + AssertFatal(1 == 0, "Impossible dl_Bandwidth %d\n", + (int) cc->mib->message.dl_Bandwidth); + break; + } } #endif @@ -1511,23 +1843,23 @@ int narrowband_to_first_rb(COMMON_channels_t *cc, int nb_index) void init_ue_sched_info(void) //------------------------------------------------------------------------------ { - module_id_t i,j,k; + module_id_t i, j, k; - for (i=0; iUE_list; + int UE_id; + UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; - for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) { - if (UE_list->active[UE_id] != TRUE) continue; - if (UE_list->UE_template[UE_PCCID(mod_idP,UE_id)][UE_id].rnti==rntiP) { - return(UE_id); + for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) { + if (UE_list->active[UE_id] != TRUE) + continue; + if (UE_list->UE_template[UE_PCCID(mod_idP, UE_id)][UE_id].rnti == + rntiP) { + return (UE_id); + } } - } - return(-1); + return (-1); } //------------------------------------------------------------------------------ int find_RA_id(module_id_t mod_idP, int CC_idP, rnti_t rntiP) //------------------------------------------------------------------------------ { - int RA_id; - AssertFatal(RC.mac[mod_idP],"RC.mac[%d] is null\n",mod_idP); + int RA_id; + AssertFatal(RC.mac[mod_idP], "RC.mac[%d] is null\n", mod_idP); - RA_TEMPLATE *RA_template = (RA_TEMPLATE *)&RC.mac[mod_idP]->common_channels[CC_idP].RA_template[0]; + RA_t *ra = (RA_t *) & RC.mac[mod_idP]->common_channels[CC_idP].ra[0]; - for (RA_id = 0; RA_id < NB_RA_PROC_MAX; RA_id++) { - LOG_D(MAC,"Checking RA_id %d for %x : RA_active %d, wait_ack_Msg4 %d\n", - RA_id,rntiP, - RA_template[RA_id].RA_active, - RA_template[RA_id].wait_ack_Msg4); + for (RA_id = 0; RA_id < NB_RA_PROC_MAX; RA_id++) { + LOG_D(MAC, + "Checking RA_id %d for %x : state %d\n", + RA_id, rntiP, ra[RA_id].state); - if (RA_template[RA_id].RA_active==TRUE && - RA_template[RA_id].wait_ack_Msg4 == 0 && - RA_template[RA_id].rnti == rntiP) return(RA_id); - } - return(-1); + if (ra[RA_id].state != IDLE && + ra[RA_id].rnti == rntiP) + return (RA_id); + } + return (-1); } //------------------------------------------------------------------------------ -int UE_num_active_CC(UE_list_t *listP,int ue_idP) +int UE_num_active_CC(UE_list_t * listP, int ue_idP) //------------------------------------------------------------------------------ { - return(listP->numactiveCCs[ue_idP]); + return (listP->numactiveCCs[ue_idP]); } //------------------------------------------------------------------------------ -int UE_PCCID(module_id_t mod_idP,int ue_idP) +int UE_PCCID(module_id_t mod_idP, int ue_idP) //------------------------------------------------------------------------------ { - return(RC.mac[mod_idP]->UE_list.pCC_id[ue_idP]); + return (RC.mac[mod_idP]->UE_list.pCC_id[ue_idP]); } //------------------------------------------------------------------------------ rnti_t UE_RNTI(module_id_t mod_idP, int ue_idP) //------------------------------------------------------------------------------ { - rnti_t rnti = RC.mac[mod_idP]->UE_list.UE_template[UE_PCCID(mod_idP,ue_idP)][ue_idP].rnti; + rnti_t rnti = + RC.mac[mod_idP]-> + UE_list.UE_template[UE_PCCID(mod_idP, ue_idP)][ue_idP].rnti; - if (rnti>0) { - return (rnti); - } + if (rnti > 0) { + return (rnti); + } - LOG_D(MAC,"[eNB %d] Couldn't find RNTI for UE %d\n",mod_idP,ue_idP); - //display_backtrace(); - return(NOT_A_RNTI); + LOG_D(MAC, "[eNB %d] Couldn't find RNTI for UE %d\n", mod_idP, ue_idP); + //display_backtrace(); + return (NOT_A_RNTI); } //------------------------------------------------------------------------------ boolean_t is_UE_active(module_id_t mod_idP, int ue_idP) //------------------------------------------------------------------------------ { - return(RC.mac[mod_idP]->UE_list.active[ue_idP]); + return (RC.mac[mod_idP]->UE_list.active[ue_idP]); } /* @@ -1639,317 +1974,333 @@ uint8_t find_active_UEs(module_id_t module_idP,int CC_id){ // get aggregation (L) form phy for a give UE -unsigned char get_aggregation (uint8_t bw_index, uint8_t cqi, uint8_t dci_fmt) +unsigned char +get_aggregation(uint8_t bw_index, uint8_t cqi, uint8_t dci_fmt) { - unsigned char aggregation=3; + unsigned char aggregation = 3; - switch (dci_fmt){ - case format0: - aggregation = cqi2fmt0_agg[bw_index][cqi]; - break; - case format1: - case format1A: - case format1B: - case format1D: - aggregation = cqi2fmt1x_agg[bw_index][cqi]; - break; - case format2: - case format2A: - case format2B: - case format2C: - case format2D: - aggregation = cqi2fmt2x_agg[bw_index][cqi]; - break; - case format1C: - case format1E_2A_M10PRB: - case format3: - case format3A: - case format4: - default: - LOG_W(MAC,"unsupported DCI format %d\n",dci_fmt); - } + switch (dci_fmt) { + case format0: + aggregation = cqi2fmt0_agg[bw_index][cqi]; + break; + case format1: + case format1A: + case format1B: + case format1D: + aggregation = cqi2fmt1x_agg[bw_index][cqi]; + break; + case format2: + case format2A: + case format2B: + case format2C: + case format2D: + aggregation = cqi2fmt2x_agg[bw_index][cqi]; + break; + case format1C: + case format1E_2A_M10PRB: + case format3: + case format3A: + case format4: + default: + LOG_W(MAC, "unsupported DCI format %d\n", dci_fmt); + } - LOG_D(MAC,"Aggregation level %d (cqi %d, bw_index %d, format %d)\n", - 1<head; j>=0; j=listP->next[j]) { - LOG_T(MAC,"node %d => %d\n",j,listP->next[j]); + if (ul_flag == 0) { + for (j = listP->head; j >= 0; j = listP->next[j]) { + LOG_T(MAC, "node %d => %d\n", j, listP->next[j]); + } + } else { + for (j = listP->head_ul; j >= 0; j = listP->next_ul[j]) { + LOG_T(MAC, "node %d => %d\n", j, listP->next_ul[j]); + } } - } else { - for (j=listP->head_ul; j>=0; j=listP->next_ul[j]) { - LOG_T(MAC,"node %d => %d\n",j,listP->next_ul[j]); - } - } } -int add_new_ue(module_id_t mod_idP, int cc_idP, rnti_t rntiP,int harq_pidP - #ifdef Rel14 - ,uint8_t rach_resource_type - #endif - ) +int add_new_ue(module_id_t mod_idP, int cc_idP, rnti_t rntiP, int harq_pidP +#ifdef Rel14 + , uint8_t rach_resource_type +#endif + ) { - int UE_id; - int i, j; + int UE_id; + int i, j; - UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; + UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; - LOG_D(MAC,"[eNB %d, CC_id %d] Adding UE with rnti %x (next avail %d, num_UEs %d)\n",mod_idP,cc_idP,rntiP,UE_list->avail,UE_list->num_UEs); - dump_ue_list(UE_list,0); + LOG_D(MAC, + "[eNB %d, CC_id %d] Adding UE with rnti %x (next avail %d, num_UEs %d)\n", + mod_idP, cc_idP, rntiP, UE_list->avail, UE_list->num_UEs); + dump_ue_list(UE_list, 0); - for (i = 0; i < NUMBER_OF_UE_MAX; i++) { - if (UE_list->active[i] == TRUE) continue; - UE_id = i; - memset(&UE_list->UE_template[cc_idP][UE_id], 0, sizeof(UE_TEMPLATE)); - UE_list->UE_template[cc_idP][UE_id].rnti = rntiP; - UE_list->UE_template[cc_idP][UE_id].configured = FALSE; - UE_list->numactiveCCs[UE_id] = 1; - UE_list->numactiveULCCs[UE_id] = 1; - UE_list->pCC_id[UE_id] = cc_idP; - UE_list->ordered_CCids[0][UE_id] = cc_idP; - UE_list->ordered_ULCCids[0][UE_id] = cc_idP; - UE_list->num_UEs++; - UE_list->active[UE_id] = TRUE; + for (i = 0; i < NUMBER_OF_UE_MAX; i++) { + if (UE_list->active[i] == TRUE) + continue; + UE_id = i; + memset(&UE_list->UE_template[cc_idP][UE_id], 0, + sizeof(UE_TEMPLATE)); + UE_list->UE_template[cc_idP][UE_id].rnti = rntiP; + UE_list->UE_template[cc_idP][UE_id].configured = FALSE; + UE_list->numactiveCCs[UE_id] = 1; + UE_list->numactiveULCCs[UE_id] = 1; + UE_list->pCC_id[UE_id] = cc_idP; + UE_list->ordered_CCids[0][UE_id] = cc_idP; + UE_list->ordered_ULCCids[0][UE_id] = cc_idP; + UE_list->num_UEs++; + UE_list->active[UE_id] = TRUE; #ifdef Rel14 - UE_list->UE_template[cc_idP][UE_id].rach_resource_type = rach_resource_type ; + UE_list->UE_template[cc_idP][UE_id].rach_resource_type = + rach_resource_type; #endif - memset((void*)&UE_list->UE_sched_ctrl[UE_id],0,sizeof(UE_sched_ctrl)); - memset((void*)&UE_list->eNB_UE_stats[cc_idP][UE_id],0,sizeof(eNB_UE_STATS)); + memset((void *) &UE_list->UE_sched_ctrl[UE_id], 0, + sizeof(UE_sched_ctrl)); + memset((void *) &UE_list->eNB_UE_stats[cc_idP][UE_id], 0, + sizeof(eNB_UE_STATS)); - UE_list->UE_sched_ctrl[UE_id].ta_update = 31; + UE_list->UE_sched_ctrl[UE_id].ta_update = 31; - for (j=0; j<8; j++) { - UE_list->UE_template[cc_idP][UE_id].oldNDI[j] = (j==0)?1:0; // 1 because first transmission is with format1A (Msg4) for harq_pid 0 - UE_list->UE_template[cc_idP][UE_id].oldNDI_UL[j] = (j==harq_pidP)?0:1; // 1st transmission is with Msg3; - UE_list->UE_sched_ctrl[UE_id].round[cc_idP][j] = 8; - UE_list->UE_sched_ctrl[UE_id].round_UL[cc_idP][j] = 0; + for (j = 0; j < 8; j++) { + UE_list->UE_template[cc_idP][UE_id].oldNDI[j] = (j == 0) ? 1 : 0; // 1 because first transmission is with format1A (Msg4) for harq_pid 0 + UE_list->UE_template[cc_idP][UE_id].oldNDI_UL[j] = (j == harq_pidP) ? 0 : 1; // 1st transmission is with Msg3; + UE_list->UE_sched_ctrl[UE_id].round[cc_idP][j] = 8; + UE_list->UE_sched_ctrl[UE_id].round_UL[cc_idP][j] = 0; + } + + eNB_ulsch_info[mod_idP][cc_idP][UE_id].status = S_UL_WAITING; + eNB_dlsch_info[mod_idP][cc_idP][UE_id].status = S_DL_WAITING; + LOG_D(MAC, "[eNB %d] Add UE_id %d on Primary CC_id %d: rnti %x\n", + mod_idP, UE_id, cc_idP, rntiP); + dump_ue_list(UE_list, 0); + return (UE_id); } - eNB_ulsch_info[mod_idP][cc_idP][UE_id].status = S_UL_WAITING; - eNB_dlsch_info[mod_idP][cc_idP][UE_id].status = S_DL_WAITING; - LOG_D(MAC,"[eNB %d] Add UE_id %d on Primary CC_id %d: rnti %x\n",mod_idP,UE_id,cc_idP,rntiP); - dump_ue_list(UE_list,0); - return(UE_id); - } - - printf("MAC: cannot add new UE for rnti %x\n", rntiP); - LOG_E(MAC,"error in add_new_ue(), could not find space in UE_list, Dumping UE list\n"); - dump_ue_list(UE_list,0); - return(-1); + printf("MAC: cannot add new UE for rnti %x\n", rntiP); + LOG_E(MAC, + "error in add_new_ue(), could not find space in UE_list, Dumping UE list\n"); + dump_ue_list(UE_list, 0); + return (-1); } //------------------------------------------------------------------------------ -int rrc_mac_remove_ue(module_id_t mod_idP,rnti_t rntiP) +int rrc_mac_remove_ue(module_id_t mod_idP, rnti_t rntiP) //------------------------------------------------------------------------------ { - int i; - UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; - int UE_id = find_UE_id(mod_idP,rntiP); - int pCC_id; + int i; + UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; + int UE_id = find_UE_id(mod_idP, rntiP); + int pCC_id; + + if (UE_id == -1) { + LOG_W(MAC, "rrc_mac_remove_ue: UE %x not found\n", rntiP); + return 0; + } + + pCC_id = UE_PCCID(mod_idP, UE_id); + + LOG_I(MAC, "Removing UE %d from Primary CC_id %d (rnti %x)\n", UE_id, + pCC_id, rntiP); + dump_ue_list(UE_list, 0); + + UE_list->active[UE_id] = FALSE; + UE_list->num_UEs--; + + if (UE_list->head == UE_id) + UE_list->head = UE_list->next[UE_id]; + else + UE_list->next[prev(UE_list, UE_id, 0)] = UE_list->next[UE_id]; + if (UE_list->head_ul == UE_id) + UE_list->head_ul = UE_list->next_ul[UE_id]; + else + UE_list->next_ul[prev(UE_list, UE_id, 0)] = + UE_list->next_ul[UE_id]; + + // clear all remaining pending transmissions + UE_list->UE_template[pCC_id][UE_id].bsr_info[LCGID0] = 0; + UE_list->UE_template[pCC_id][UE_id].bsr_info[LCGID1] = 0; + UE_list->UE_template[pCC_id][UE_id].bsr_info[LCGID2] = 0; + UE_list->UE_template[pCC_id][UE_id].bsr_info[LCGID3] = 0; + + UE_list->UE_template[pCC_id][UE_id].ul_SR = 0; + UE_list->UE_template[pCC_id][UE_id].rnti = NOT_A_RNTI; + UE_list->UE_template[pCC_id][UE_id].ul_active = FALSE; + eNB_ulsch_info[mod_idP][pCC_id][UE_id].rnti = NOT_A_RNTI; + eNB_ulsch_info[mod_idP][pCC_id][UE_id].status = S_UL_NONE; + eNB_dlsch_info[mod_idP][pCC_id][UE_id].rnti = NOT_A_RNTI; + eNB_dlsch_info[mod_idP][pCC_id][UE_id].status = S_DL_NONE; + + // check if this has an RA process active + RA_t *ra; + for (i = 0; i < NB_RA_PROC_MAX; i++) { + ra = (RA_t *) & RC.mac[mod_idP]->common_channels[pCC_id].ra[i]; + if (ra->rnti == rntiP) { + ra->state = IDLE; + ra->timing_offset = 0; + ra->RRC_timer = 20; + ra->rnti = 0; + //break; + } + } - if (UE_id == -1) { - LOG_W(MAC,"rrc_mac_remove_ue: UE %x not found\n", rntiP); return 0; - } - - pCC_id = UE_PCCID(mod_idP,UE_id); - - LOG_I(MAC,"Removing UE %d from Primary CC_id %d (rnti %x)\n",UE_id,pCC_id, rntiP); - dump_ue_list(UE_list,0); - - UE_list->active[UE_id] = FALSE; - UE_list->num_UEs--; - - if (UE_list->head == UE_id) UE_list->head=UE_list->next[UE_id]; - else UE_list->next[prev(UE_list,UE_id,0)]=UE_list->next[UE_id]; - if (UE_list->head_ul == UE_id) UE_list->head_ul=UE_list->next_ul[UE_id]; - else UE_list->next_ul[prev(UE_list,UE_id,0)]=UE_list->next_ul[UE_id]; - - // clear all remaining pending transmissions - UE_list->UE_template[pCC_id][UE_id].bsr_info[LCGID0] = 0; - UE_list->UE_template[pCC_id][UE_id].bsr_info[LCGID1] = 0; - UE_list->UE_template[pCC_id][UE_id].bsr_info[LCGID2] = 0; - UE_list->UE_template[pCC_id][UE_id].bsr_info[LCGID3] = 0; - - UE_list->UE_template[pCC_id][UE_id].ul_SR = 0; - UE_list->UE_template[pCC_id][UE_id].rnti = NOT_A_RNTI; - UE_list->UE_template[pCC_id][UE_id].ul_active = FALSE; - eNB_ulsch_info[mod_idP][pCC_id][UE_id].rnti = NOT_A_RNTI; - eNB_ulsch_info[mod_idP][pCC_id][UE_id].status = S_UL_NONE; - eNB_dlsch_info[mod_idP][pCC_id][UE_id].rnti = NOT_A_RNTI; - eNB_dlsch_info[mod_idP][pCC_id][UE_id].status = S_DL_NONE; - - // check if this has an RA process active - RA_TEMPLATE *RA_template; - for (i=0;icommon_channels[pCC_id].RA_template[i]; - if (RA_template->rnti == rntiP){ - RA_template->RA_active=FALSE; - RA_template->generate_rar=0; - RA_template->generate_Msg4=0; - RA_template->wait_ack_Msg4=0; - RA_template->timing_offset=0; - RA_template->RRC_timer=20; - RA_template->rnti = 0; - //break; - } - } - - return 0; } -int prev(UE_list_t *listP, int nodeP, int ul_flag) +int prev(UE_list_t * listP, int nodeP, int ul_flag) { - int j; + int j; - if (ul_flag == 0 ) { - if (nodeP==listP->head) { - return(nodeP); + if (ul_flag == 0) { + if (nodeP == listP->head) { + return (nodeP); + } + + for (j = listP->head; j >= 0; j = listP->next[j]) { + if (listP->next[j] == nodeP) { + return (j); + } + } + } else { + if (nodeP == listP->head_ul) { + return (nodeP); + } + + for (j = listP->head_ul; j >= 0; j = listP->next_ul[j]) { + if (listP->next_ul[j] == nodeP) { + return (j); + } + } } - for (j=listP->head; j>=0; j=listP->next[j]) { - if (listP->next[j]==nodeP) { - return(j); - } - } - } else { - if (nodeP==listP->head_ul) { - return(nodeP); - } + LOG_E(MAC, + "error in prev(), could not find previous to %d in UE_list %s, should never happen, Dumping UE list\n", + nodeP, (ul_flag == 0) ? "DL" : "UL"); + dump_ue_list(listP, ul_flag); - for (j=listP->head_ul; j>=0; j=listP->next_ul[j]) { - if (listP->next_ul[j]==nodeP) { - return(j); - } - } - } - - LOG_E(MAC,"error in prev(), could not find previous to %d in UE_list %s, should never happen, Dumping UE list\n", - nodeP, (ul_flag == 0)? "DL" : "UL"); - dump_ue_list(listP, ul_flag); - - return(-1); + return (-1); } -void swap_UEs(UE_list_t *listP,int nodeiP, int nodejP, int ul_flag) +void swap_UEs(UE_list_t * listP, int nodeiP, int nodejP, int ul_flag) { - int prev_i,prev_j,next_i,next_j; + int prev_i, prev_j, next_i, next_j; - LOG_T(MAC,"Swapping UE %d,%d\n",nodeiP,nodejP); - dump_ue_list(listP,ul_flag); + LOG_T(MAC, "Swapping UE %d,%d\n", nodeiP, nodejP); + dump_ue_list(listP, ul_flag); - prev_i = prev(listP,nodeiP,ul_flag); - prev_j = prev(listP,nodejP,ul_flag); + prev_i = prev(listP, nodeiP, ul_flag); + prev_j = prev(listP, nodejP, ul_flag); - AssertFatal((prev_i>=0) && (prev_j>=0), - "swap_UEs: problem"); + AssertFatal((prev_i >= 0) && (prev_j >= 0), "swap_UEs: problem"); - if (ul_flag == 0) { - next_i = listP->next[nodeiP]; - next_j = listP->next[nodejP]; - } else { - next_i = listP->next_ul[nodeiP]; - next_j = listP->next_ul[nodejP]; - } - - LOG_T(MAC,"[%s] next_i %d, next_i, next_j %d, head %d \n", - (ul_flag == 0)? "DL" : "UL", - next_i,next_j,listP->head); - - if (ul_flag == 0 ) { - - if (next_i == nodejP) { // case ... p(i) i j n(j) ... => ... p(j) j i n(i) ... - LOG_T(MAC,"Case ... p(i) i j n(j) ... => ... p(j) j i n(i) ...\n"); - - listP->next[nodeiP] = next_j; - listP->next[nodejP] = nodeiP; - - if (nodeiP==listP->head) { // case i j n(j) - listP->head = nodejP; - } else { - listP->next[prev_i] = nodejP; - } - } else if (next_j == nodeiP) { // case ... p(j) j i n(i) ... => ... p(i) i j n(j) ... - LOG_T(MAC,"Case ... p(j) j i n(i) ... => ... p(i) i j n(j) ...\n"); - listP->next[nodejP] = next_i; - listP->next[nodeiP] = nodejP; - - if (nodejP==listP->head) { // case j i n(i) - listP->head = nodeiP; - } else { - listP->next[prev_j] = nodeiP; - } - } else { // case ... p(i) i n(i) ... p(j) j n(j) ... - listP->next[nodejP] = next_i; - listP->next[nodeiP] = next_j; - - if (nodeiP==listP->head) { - LOG_T(MAC,"changing head to %d\n",nodejP); - listP->head=nodejP; - listP->next[prev_j] = nodeiP; - } else if (nodejP==listP->head) { - LOG_D(MAC,"changing head to %d\n",nodeiP); - listP->head=nodeiP; - listP->next[prev_i] = nodejP; - } else { - listP->next[prev_i] = nodejP; - listP->next[prev_j] = nodeiP; - } + if (ul_flag == 0) { + next_i = listP->next[nodeiP]; + next_j = listP->next[nodejP]; + } else { + next_i = listP->next_ul[nodeiP]; + next_j = listP->next_ul[nodejP]; } - } else { // ul_flag - if (next_i == nodejP) { // case ... p(i) i j n(j) ... => ... p(j) j i n(i) ... - LOG_T(MAC,"[UL] Case ... p(i) i j n(j) ... => ... p(j) j i n(i) ...\n"); + LOG_T(MAC, "[%s] next_i %d, next_i, next_j %d, head %d \n", + (ul_flag == 0) ? "DL" : "UL", next_i, next_j, listP->head); - listP->next_ul[nodeiP] = next_j; - listP->next_ul[nodejP] = nodeiP; + if (ul_flag == 0) { - if (nodeiP==listP->head_ul) { // case i j n(j) - listP->head_ul = nodejP; - } else { - listP->next_ul[prev_i] = nodejP; - } - } else if (next_j == nodeiP) { // case ... p(j) j i n(i) ... => ... p(i) i j n(j) ... - LOG_T(MAC,"[UL]Case ... p(j) j i n(i) ... => ... p(i) i j n(j) ...\n"); - listP->next_ul[nodejP] = next_i; - listP->next_ul[nodeiP] = nodejP; + if (next_i == nodejP) { // case ... p(i) i j n(j) ... => ... p(j) j i n(i) ... + LOG_T(MAC, + "Case ... p(i) i j n(j) ... => ... p(j) j i n(i) ...\n"); - if (nodejP==listP->head_ul) { // case j i n(i) - listP->head_ul = nodeiP; - } else { - listP->next_ul[prev_j] = nodeiP; - } - } else { // case ... p(i) i n(i) ... p(j) j n(j) ... + listP->next[nodeiP] = next_j; + listP->next[nodejP] = nodeiP; - listP->next_ul[nodejP] = next_i; - listP->next_ul[nodeiP] = next_j; + if (nodeiP == listP->head) { // case i j n(j) + listP->head = nodejP; + } else { + listP->next[prev_i] = nodejP; + } + } else if (next_j == nodeiP) { // case ... p(j) j i n(i) ... => ... p(i) i j n(j) ... + LOG_T(MAC, + "Case ... p(j) j i n(i) ... => ... p(i) i j n(j) ...\n"); + listP->next[nodejP] = next_i; + listP->next[nodeiP] = nodejP; - if (nodeiP==listP->head_ul) { - LOG_T(MAC,"[UL]changing head to %d\n",nodejP); - listP->head_ul=nodejP; - listP->next_ul[prev_j] = nodeiP; - } else if (nodejP==listP->head_ul) { - LOG_T(MAC,"[UL]changing head to %d\n",nodeiP); - listP->head_ul=nodeiP; - listP->next_ul[prev_i] = nodejP; - } else { - listP->next_ul[prev_i] = nodejP; - listP->next_ul[prev_j] = nodeiP; - } + if (nodejP == listP->head) { // case j i n(i) + listP->head = nodeiP; + } else { + listP->next[prev_j] = nodeiP; + } + } else { // case ... p(i) i n(i) ... p(j) j n(j) ... + listP->next[nodejP] = next_i; + listP->next[nodeiP] = next_j; + + if (nodeiP == listP->head) { + LOG_T(MAC, "changing head to %d\n", nodejP); + listP->head = nodejP; + listP->next[prev_j] = nodeiP; + } else if (nodejP == listP->head) { + LOG_D(MAC, "changing head to %d\n", nodeiP); + listP->head = nodeiP; + listP->next[prev_i] = nodejP; + } else { + listP->next[prev_i] = nodejP; + listP->next[prev_j] = nodeiP; + } + } + } else { // ul_flag + + if (next_i == nodejP) { // case ... p(i) i j n(j) ... => ... p(j) j i n(i) ... + LOG_T(MAC, + "[UL] Case ... p(i) i j n(j) ... => ... p(j) j i n(i) ...\n"); + + listP->next_ul[nodeiP] = next_j; + listP->next_ul[nodejP] = nodeiP; + + if (nodeiP == listP->head_ul) { // case i j n(j) + listP->head_ul = nodejP; + } else { + listP->next_ul[prev_i] = nodejP; + } + } else if (next_j == nodeiP) { // case ... p(j) j i n(i) ... => ... p(i) i j n(j) ... + LOG_T(MAC, + "[UL]Case ... p(j) j i n(i) ... => ... p(i) i j n(j) ...\n"); + listP->next_ul[nodejP] = next_i; + listP->next_ul[nodeiP] = nodejP; + + if (nodejP == listP->head_ul) { // case j i n(i) + listP->head_ul = nodeiP; + } else { + listP->next_ul[prev_j] = nodeiP; + } + } else { // case ... p(i) i n(i) ... p(j) j n(j) ... + + listP->next_ul[nodejP] = next_i; + listP->next_ul[nodeiP] = next_j; + + if (nodeiP == listP->head_ul) { + LOG_T(MAC, "[UL]changing head to %d\n", nodejP); + listP->head_ul = nodejP; + listP->next_ul[prev_j] = nodeiP; + } else if (nodejP == listP->head_ul) { + LOG_T(MAC, "[UL]changing head to %d\n", nodeiP); + listP->head_ul = nodeiP; + listP->next_ul[prev_i] = nodejP; + } else { + listP->next_ul[prev_i] = nodejP; + listP->next_ul[prev_j] = nodeiP; + } + } } - } - LOG_T(MAC,"After swap\n"); - dump_ue_list(listP,ul_flag); + LOG_T(MAC, "After swap\n"); + dump_ue_list(listP, ul_flag); } /* @@ -2066,818 +2417,959 @@ void swap_UEs(UE_list_t *listP,int nodeiP, int nodejP, int ul_flag) */ // This has to be updated to include BSR information -uint8_t UE_is_to_be_scheduled(module_id_t module_idP,int CC_id,uint8_t UE_id) +uint8_t +UE_is_to_be_scheduled(module_id_t module_idP, int CC_id, uint8_t UE_id) { - UE_TEMPLATE *UE_template = &RC.mac[module_idP]->UE_list.UE_template[CC_id][UE_id]; - UE_sched_ctrl *UE_sched_ctl = &RC.mac[module_idP]->UE_list.UE_sched_ctrl[UE_id]; + UE_TEMPLATE *UE_template = + &RC.mac[module_idP]->UE_list.UE_template[CC_id][UE_id]; + UE_sched_ctrl *UE_sched_ctl = + &RC.mac[module_idP]->UE_list.UE_sched_ctrl[UE_id]; - // do not schedule UE if UL is not working - if (UE_sched_ctl->ul_failure_timer>0) - return(0); - if (UE_sched_ctl->ul_out_of_sync>0) - return(0); + // do not schedule UE if UL is not working + if (UE_sched_ctl->ul_failure_timer > 0) + return (0); + if (UE_sched_ctl->ul_out_of_sync > 0) + return (0); - LOG_D(MAC,"[eNB %d][PUSCH] Checking UL requirements UE %d/%x\n",module_idP,UE_id,UE_RNTI(module_idP,UE_id)); + LOG_D(MAC, "[eNB %d][PUSCH] Checking UL requirements UE %d/%x\n", + module_idP, UE_id, UE_RNTI(module_idP, UE_id)); - if ((UE_template->bsr_info[LCGID0]>0) || - (UE_template->bsr_info[LCGID1]>0) || - (UE_template->bsr_info[LCGID2]>0) || - (UE_template->bsr_info[LCGID3]>0) || - (UE_template->ul_SR>0) || // uplink scheduling request - ((UE_sched_ctl->ul_inactivity_timer>20)&& - (UE_sched_ctl->ul_scheduled==0))|| // every 2 frames when RRC_CONNECTED - ((UE_sched_ctl->ul_inactivity_timer>10)&& - (UE_sched_ctl->ul_scheduled==0)&& - (mac_eNB_get_rrc_status(module_idP,UE_RNTI(module_idP,UE_id)) < RRC_CONNECTED))) // every Frame when not RRC_CONNECTED - { - LOG_D(MAC,"[eNB %d][PUSCH] UE %d/%x should be scheduled (BSR0 %d,SR %d)\n",module_idP,UE_id,UE_RNTI(module_idP,UE_id), - UE_template->bsr_info[LCGID0], - UE_template->ul_SR); - return(1); - } else { - return(0); - } + if ((UE_template->bsr_info[LCGID0] > 0) || (UE_template->bsr_info[LCGID1] > 0) || (UE_template->bsr_info[LCGID2] > 0) || (UE_template->bsr_info[LCGID3] > 0) || (UE_template->ul_SR > 0) || // uplink scheduling request + ((UE_sched_ctl->ul_inactivity_timer > 20) && (UE_sched_ctl->ul_scheduled == 0)) || // every 2 frames when RRC_CONNECTED + ((UE_sched_ctl->ul_inactivity_timer > 10) && (UE_sched_ctl->ul_scheduled == 0) && (mac_eNB_get_rrc_status(module_idP, UE_RNTI(module_idP, UE_id)) < RRC_CONNECTED))) // every Frame when not RRC_CONNECTED + { + LOG_D(MAC, + "[eNB %d][PUSCH] UE %d/%x should be scheduled (BSR0 %d,SR %d)\n", + module_idP, UE_id, UE_RNTI(module_idP, UE_id), + UE_template->bsr_info[LCGID0], UE_template->ul_SR); + return (1); + } else { + return (0); + } } -uint8_t get_tmode(module_id_t module_idP,int CC_idP,int UE_idP) +uint8_t get_tmode(module_id_t module_idP, int CC_idP, int UE_idP) { - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc = &eNB->common_channels[CC_idP]; + eNB_MAC_INST *eNB = RC.mac[module_idP]; + COMMON_channels_t *cc = &eNB->common_channels[CC_idP]; - struct PhysicalConfigDedicated *physicalConfigDedicated = eNB->UE_list.physicalConfigDedicated[CC_idP][UE_idP]; + struct PhysicalConfigDedicated *physicalConfigDedicated = + eNB->UE_list.physicalConfigDedicated[CC_idP][UE_idP]; - if (physicalConfigDedicated == NULL ) { // RRCConnectionSetup not received by UE yet - AssertFatal(cc->p_eNB<=2,"p_eNB is %d, should be <2\n",cc->p_eNB); - return(cc->p_eNB); - } - else { - AssertFatal(physicalConfigDedicated->antennaInfo!=NULL, - "antennaInfo is null for CCId %d, UEid %d\n",CC_idP,UE_idP); + if (physicalConfigDedicated == NULL) { // RRCConnectionSetup not received by UE yet + AssertFatal(cc->p_eNB <= 2, "p_eNB is %d, should be <2\n", + cc->p_eNB); + return (cc->p_eNB); + } else { + AssertFatal(physicalConfigDedicated->antennaInfo != NULL, + "antennaInfo is null for CCId %d, UEid %d\n", CC_idP, + UE_idP); - AssertFatal(physicalConfigDedicated->antennaInfo->present != PhysicalConfigDedicated__antennaInfo_PR_NOTHING, - "antennaInfo (mod_id %d, CC_id %d) is set to NOTHING\n",module_idP,CC_idP); + AssertFatal(physicalConfigDedicated->antennaInfo->present != + PhysicalConfigDedicated__antennaInfo_PR_NOTHING, + "antennaInfo (mod_id %d, CC_id %d) is set to NOTHING\n", + module_idP, CC_idP); - if (physicalConfigDedicated->antennaInfo->present == PhysicalConfigDedicated__antennaInfo_PR_explicitValue) { - return(physicalConfigDedicated->antennaInfo->choice.explicitValue.transmissionMode); + if (physicalConfigDedicated->antennaInfo->present == + PhysicalConfigDedicated__antennaInfo_PR_explicitValue) { + return (physicalConfigDedicated->antennaInfo-> + choice.explicitValue.transmissionMode); + } else if (physicalConfigDedicated->antennaInfo->present == + PhysicalConfigDedicated__antennaInfo_PR_defaultValue) { + AssertFatal(cc->p_eNB <= 2, "p_eNB is %d, should be <2\n", + cc->p_eNB); + return (cc->p_eNB); + } else + AssertFatal(1 == 0, "Shouldn't be here\n"); } - else if (physicalConfigDedicated->antennaInfo->present == PhysicalConfigDedicated__antennaInfo_PR_defaultValue) { - AssertFatal(cc->p_eNB<=2,"p_eNB is %d, should be <2\n",cc->p_eNB); - return(cc->p_eNB); - } - else AssertFatal(1==0,"Shouldn't be here\n"); - } } -int8_t get_ULharq(module_id_t module_idP,int CC_idP,uint16_t frameP,uint8_t subframeP) +int8_t +get_ULharq(module_id_t module_idP, int CC_idP, uint16_t frameP, + uint8_t subframeP) { - uint8_t ret = -1; - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc = &eNB->common_channels[CC_idP]; + uint8_t ret = -1; + eNB_MAC_INST *eNB = RC.mac[module_idP]; + COMMON_channels_t *cc = &eNB->common_channels[CC_idP]; - if (cc->tdd_Config==NULL) { // FDD - ret = (((frameP<<1)+subframeP)&7); - } else { - switch (cc->tdd_Config->subframeAssignment) { - case 1: - if ((subframeP==2) || - (subframeP==3) || - (subframeP==7) || - (subframeP==8)) - switch (subframeP) { - case 2: - case 3: - ret = (subframeP-2); - break; + if (cc->tdd_Config == NULL) { // FDD + ret = (((frameP << 1) + subframeP) & 7); + } else { + switch (cc->tdd_Config->subframeAssignment) { + case 1: + if ((subframeP == 2) || + (subframeP == 3) || (subframeP == 7) || (subframeP == 8)) + switch (subframeP) { + case 2: + case 3: + ret = (subframeP - 2); + break; - case 7: - case 8: - ret = (subframeP-5); - break; + case 7: + case 8: + ret = (subframeP - 5); + break; - default: - AssertFatal(1==0,"subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n",subframeP,(int)cc->tdd_Config->subframeAssignment); - break; - } + default: + AssertFatal(1 == 0, + "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n", + subframeP, + (int) cc->tdd_Config->subframeAssignment); + break; + } - break; + break; - case 2: - AssertFatal((subframeP==2) || (subframeP==7), - "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n",subframeP,(int)cc->tdd_Config->subframeAssignment); - ret = (subframeP/7); - break; + case 2: + AssertFatal((subframeP == 2) || (subframeP == 7), + "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n", + subframeP, + (int) cc->tdd_Config->subframeAssignment); + ret = (subframeP / 7); + break; - case 3: - AssertFatal((subframeP>1) && (subframeP<5), - "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n",subframeP,(int)cc->tdd_Config->subframeAssignment); - ret = (subframeP-2); - break; + case 3: + AssertFatal((subframeP > 1) && (subframeP < 5), + "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n", + subframeP, + (int) cc->tdd_Config->subframeAssignment); + ret = (subframeP - 2); + break; - case 4: - AssertFatal((subframeP>1) && (subframeP<4), - "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n",subframeP,(int)cc->tdd_Config->subframeAssignment); - ret = (subframeP-2); - break; + case 4: + AssertFatal((subframeP > 1) && (subframeP < 4), + "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n", + subframeP, + (int) cc->tdd_Config->subframeAssignment); + ret = (subframeP - 2); + break; - case 5: - AssertFatal(subframeP==2, - "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n",subframeP,(int)cc->tdd_Config->subframeAssignment); - ret = (subframeP-2); - break; + case 5: + AssertFatal(subframeP == 2, + "subframe2_harq_pid, Illegal subframe %d for TDD mode %d\n", + subframeP, + (int) cc->tdd_Config->subframeAssignment); + ret = (subframeP - 2); + break; - default: - AssertFatal(1==0,"subframe2_harq_pid, Unsupported TDD mode %d\n",(int)cc->tdd_Config->subframeAssignment); - break; + default: + AssertFatal(1 == 0, + "subframe2_harq_pid, Unsupported TDD mode %d\n", + (int) cc->tdd_Config->subframeAssignment); + break; + } } - } - AssertFatal(ret!=-1, - "invalid harq_pid(%d) at SFN/SF = %d/%d\n", (int8_t)ret, frameP, subframeP); - return ret; + AssertFatal(ret != -1, + "invalid harq_pid(%d) at SFN/SF = %d/%d\n", (int8_t) ret, + frameP, subframeP); + return ret; } -uint16_t getRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs) +uint16_t getRIV(uint16_t N_RB_DL, uint16_t RBstart, uint16_t Lcrbs) { - uint16_t RIV; + uint16_t RIV; - if (Lcrbs<=(1+(N_RB_DL>>1))) - RIV = (N_RB_DL*(Lcrbs-1)) + RBstart; - else - RIV = (N_RB_DL*(N_RB_DL+1-Lcrbs)) + (N_RB_DL-1-RBstart); + if (Lcrbs <= (1 + (N_RB_DL >> 1))) + RIV = (N_RB_DL * (Lcrbs - 1)) + RBstart; + else + RIV = (N_RB_DL * (N_RB_DL + 1 - Lcrbs)) + (N_RB_DL - 1 - RBstart); - return(RIV); + return (RIV); } -uint32_t allocate_prbs(int UE_id,unsigned char nb_rb, int N_RB_DL, uint32_t *rballoc) +uint32_t +allocate_prbs(int UE_id, unsigned char nb_rb, int N_RB_DL, + uint32_t * rballoc) { - int i; - uint32_t rballoc_dci=0; - unsigned char nb_rb_alloc=0; + int i; + uint32_t rballoc_dci = 0; + unsigned char nb_rb_alloc = 0; - for (i=0; i<(N_RB_DL-2); i+=2) { - if (((*rballoc>>i)&3)==0) { - *rballoc |= (3<>1)); - nb_rb_alloc+=2; + for (i = 0; i < (N_RB_DL - 2); i += 2) { + if (((*rballoc >> i) & 3) == 0) { + *rballoc |= (3 << i); + rballoc_dci |= (1 << ((12 - i) >> 1)); + nb_rb_alloc += 2; + } + + if (nb_rb_alloc == nb_rb) { + return (rballoc_dci); + } } - if (nb_rb_alloc==nb_rb) { - return(rballoc_dci); + if ((N_RB_DL & 1) == 1) { + if ((*rballoc >> (N_RB_DL - 1) & 1) == 0) { + *rballoc |= (1 << (N_RB_DL - 1)); + rballoc_dci |= 1; + } } - } - if ((N_RB_DL&1)==1) { - if ((*rballoc>>(N_RB_DL-1)&1)==0) { - *rballoc |= (1<<(N_RB_DL-1)); - rballoc_dci |= 1; - } - } - - return(rballoc_dci); + return (rballoc_dci); } int get_bw_index(module_id_t module_id, uint8_t CC_id) { - int bw_index=0; + int bw_index = 0; - int N_RB_DL = to_prb(RC.mac[module_id]->common_channels[CC_id].mib->message.dl_Bandwidth); + int N_RB_DL = + to_prb(RC.mac[module_id]->common_channels[CC_id].mib-> + message.dl_Bandwidth); - switch (N_RB_DL) { - case 6: // 1.4 MHz - bw_index=0; - break; + switch (N_RB_DL) { + case 6: // 1.4 MHz + bw_index = 0; + break; - case 25: // 5HMz - bw_index=1; - break; + case 25: // 5HMz + bw_index = 1; + break; - case 50: // 10HMz - bw_index=2; - break; + case 50: // 10HMz + bw_index = 2; + break; - case 100: // 20HMz - bw_index=3; - break; + case 100: // 20HMz + bw_index = 3; + break; - default: - bw_index=1; - LOG_W(MAC,"[eNB %d] N_RB_DL %d unknown for CC_id %d, setting bw_index to 1\n", module_id, N_RB_DL,CC_id); - break; - } + default: + bw_index = 1; + LOG_W(MAC, + "[eNB %d] N_RB_DL %d unknown for CC_id %d, setting bw_index to 1\n", + module_id, N_RB_DL, CC_id); + break; + } - return bw_index; + return bw_index; } int get_min_rb_unit(module_id_t module_id, uint8_t CC_id) { - int min_rb_unit=0; - int N_RB_DL = to_prb(RC.mac[module_id]->common_channels[CC_id].mib->message.dl_Bandwidth); + int min_rb_unit = 0; + int N_RB_DL = + to_prb(RC.mac[module_id]->common_channels[CC_id].mib-> + message.dl_Bandwidth); - switch (N_RB_DL) { - case 6: // 1.4 MHz - min_rb_unit=1; - break; + switch (N_RB_DL) { + case 6: // 1.4 MHz + min_rb_unit = 1; + break; - case 25: // 5HMz - min_rb_unit=2; - break; + case 25: // 5HMz + min_rb_unit = 2; + break; - case 50: // 10HMz - min_rb_unit=3; - break; + case 50: // 10HMz + min_rb_unit = 3; + break; - case 100: // 20HMz - min_rb_unit=4; - break; + case 100: // 20HMz + min_rb_unit = 4; + break; - default: - min_rb_unit=2; - LOG_W(MAC,"[eNB %d] N_DL_RB %d unknown for CC_id %d, setting min_rb_unit to 2\n", - module_id, N_RB_DL, CC_id); - break; - } - - return min_rb_unit; -} - -uint32_t allocate_prbs_sub(int nb_rb, int N_RB_DL, int N_RBG, uint8_t *rballoc) -{ - int check=0;//check1=0,check2=0; - uint32_t rballoc_dci=0; - //uint8_t number_of_subbands=13; - - LOG_T(MAC,"*****Check1RBALLOC****: %d%d%d%d (nb_rb %d,N_RBG %d)\n", - rballoc[3],rballoc[2],rballoc[1],rballoc[0],nb_rb,N_RBG); - - while((nb_rb >0) && (check < N_RBG)) { - //printf("rballoc[%d] %d\n",check,rballoc[check]); - if(rballoc[check] == 1) { - rballoc_dci |= (1<<((N_RBG-1)-check)); - - switch (N_RB_DL) { - case 6: - nb_rb--; - break; - - case 25: - if ((check == N_RBG-1)) { - nb_rb--; - } else { - nb_rb-=2; - } - - break; - - case 50: - if ((check == N_RBG-1)) { - nb_rb-=2; - } else { - nb_rb-=3; - } - - break; - - case 100: - nb_rb-=4; - break; - } + default: + min_rb_unit = 2; + LOG_W(MAC, + "[eNB %d] N_DL_RB %d unknown for CC_id %d, setting min_rb_unit to 2\n", + module_id, N_RB_DL, CC_id); + break; } - // printf("rb_alloc %x\n",rballoc_dci); - check = check+1; - // check1 = check1+2; - } + return min_rb_unit; +} - // rballoc_dci = (rballoc_dci)&(0x1fff); - LOG_T(MAC,"*********RBALLOC : %x\n",rballoc_dci); - // exit(-1); - return (rballoc_dci); +uint32_t +allocate_prbs_sub(int nb_rb, int N_RB_DL, int N_RBG, uint8_t * rballoc) +{ + int check = 0; //check1=0,check2=0; + uint32_t rballoc_dci = 0; + //uint8_t number_of_subbands=13; + + LOG_T(MAC, "*****Check1RBALLOC****: %d%d%d%d (nb_rb %d,N_RBG %d)\n", + rballoc[3], rballoc[2], rballoc[1], rballoc[0], nb_rb, N_RBG); + + while ((nb_rb > 0) && (check < N_RBG)) { + //printf("rballoc[%d] %d\n",check,rballoc[check]); + if (rballoc[check] == 1) { + rballoc_dci |= (1 << ((N_RBG - 1) - check)); + + switch (N_RB_DL) { + case 6: + nb_rb--; + break; + + case 25: + if ((check == N_RBG - 1)) { + nb_rb--; + } else { + nb_rb -= 2; + } + + break; + + case 50: + if ((check == N_RBG - 1)) { + nb_rb -= 2; + } else { + nb_rb -= 3; + } + + break; + + case 100: + nb_rb -= 4; + break; + } + } + // printf("rb_alloc %x\n",rballoc_dci); + check = check + 1; + // check1 = check1+2; + } + + // rballoc_dci = (rballoc_dci)&(0x1fff); + LOG_T(MAC, "*********RBALLOC : %x\n", rballoc_dci); + // exit(-1); + return (rballoc_dci); } int get_subbandsize(uint8_t dl_Bandwidth) { - uint8_t ss[6] = {6,4,4,6,8,8}; + uint8_t ss[6] = { 6, 4, 4, 6, 8, 8 }; - AssertFatal(dl_Bandwidth<6,"dl_Bandwidth %d is out of bounds\n",dl_Bandwidth); + AssertFatal(dl_Bandwidth < 6, "dl_Bandwidth %d is out of bounds\n", + dl_Bandwidth); - return(ss[dl_Bandwidth]); + return (ss[dl_Bandwidth]); } int get_nb_subband(int N_RB_DL) { - int nb_sb=0; + int nb_sb = 0; - switch (N_RB_DL) { - case 6: - nb_sb=0; - break; + switch (N_RB_DL) { + case 6: + nb_sb = 0; + break; - case 15: - nb_sb = 4; // sb_size =4 + case 15: + nb_sb = 4; // sb_size =4 - case 25: - nb_sb = 7; // sb_size =4, 1 sb with 1PRB, 6 with 2 RBG, each has 2 PRBs - break; + case 25: + nb_sb = 7; // sb_size =4, 1 sb with 1PRB, 6 with 2 RBG, each has 2 PRBs + break; - case 50: // sb_size =6 - nb_sb = 9; - break; + case 50: // sb_size =6 + nb_sb = 9; + break; - case 75: // sb_size =8 - nb_sb = 10; - break; + case 75: // sb_size =8 + nb_sb = 10; + break; - case 100: // sb_size =8 , 1 sb with 1 RBG + 12 sb with 2RBG, each RBG has 4 PRBs - nb_sb = 13; - break; + case 100: // sb_size =8 , 1 sb with 1 RBG + 12 sb with 2RBG, each RBG has 4 PRBs + nb_sb = 13; + break; - default: - nb_sb=0; - break; - } - - return nb_sb; -} - -void init_CCE_table(int module_idP,int CC_idP) -{ - memset(RC.mac[module_idP]->CCE_table[CC_idP],0,800*sizeof(int)); -} - - -int get_nCCE_offset(int *CCE_table, - const unsigned char L, - const int nCCE, - const int common_dci, - const unsigned short rnti, - const unsigned char subframe) -{ - int search_space_free,m,nb_candidates = 0,l,i; - unsigned int Yk; - /* - printf("CCE Allocation: "); - for (i=0;i=0 ; m--) { - - search_space_free = 1; - for (l=0; lCCE_table[CC_idP], 0, 800 * sizeof(int)); +} - for (i=0; i<=subframe; i++) - Yk = (Yk*39827)%65537; - Yk = Yk % (nCCE/L); +int +get_nCCE_offset(int *CCE_table, + const unsigned char L, + const int nCCE, + const int common_dci, + const unsigned short rnti, const unsigned char subframe) +{ + int search_space_free, m, nb_candidates = 0, l, i; + unsigned int Yk; + /* + printf("CCE Allocation: "); + for (i=0;i= 0; m--) { + + search_space_free = 1; + for (l = 0; l < L; l++) { + + // printf("CCE_table[%d] %d\n",(m*L)+l,CCE_table[(m*L)+l]); + if (CCE_table[(m * L) + l] == 1) { + search_space_free = 0; + break; + } + } + + if (search_space_free == 1) { + + // printf("returning %d\n",m*L); + + for (l = 0; l < L; l++) + CCE_table[(m * L) + l] = 1; + return (m * L); + } + } + + return (-1); + + } else { // Find first available in ue specific search space + // according to procedure in Section 9.1.1 of 36.213 (v. 8.6) + // compute Yk + Yk = (unsigned int) rnti; + + for (i = 0; i <= subframe; i++) + Yk = (Yk * 39827) % 65537; + + Yk = Yk % (nCCE / L); + + switch (L) { + case 1: + case 2: + nb_candidates = 6; + break; + + case 4: + case 8: + nb_candidates = 2; + break; + + default: + DevParam(L, nCCE, rnti); + break; + } + + LOG_D(MAC, "rnti %x, Yk = %d, nCCE %d (nCCE/L %d),nb_cand %d\n", + rnti, Yk, nCCE, nCCE / L, nb_candidates); + + for (m = 0; m < nb_candidates; m++) { + search_space_free = 1; + + for (l = 0; l < L; l++) { + int cce = (((Yk + m) % (nCCE / L)) * L) + l; + if (cce >= nCCE || CCE_table[cce] == 1) { + search_space_free = 0; + break; + } + } + + if (search_space_free == 1) { + for (l = 0; l < L; l++) + CCE_table[(((Yk + m) % (nCCE / L)) * L) + l] = 1; + + return (((Yk + m) % (nCCE / L)) * L); + } + } + + return (-1); + } +} + +void +dump_CCE_table(int *CCE_table, const int nCCE, + const unsigned short rnti, const int subframe, int L) +{ + int nb_candidates = 0, i; + unsigned int Yk; + + printf("CCE 0: "); + for (i = 0; i < nCCE; i++) { + printf("%1d.", CCE_table[i]); + if ((i & 7) == 7) + printf("\n CCE %d: ", i); + } + + Yk = (unsigned int) rnti; + + for (i = 0; i <= subframe; i++) + Yk = (Yk * 39827) % 65537; + + Yk = Yk % (nCCE / L); switch (L) { case 1: case 2: - nb_candidates = 6; - break; + nb_candidates = 6; + break; case 4: case 8: - nb_candidates = 2; - break; + nb_candidates = 2; + break; default: - DevParam(L, nCCE, rnti); - break; + DevParam(L, nCCE, rnti); + break; } - LOG_D(MAC,"rnti %x, Yk = %d, nCCE %d (nCCE/L %d),nb_cand %d\n",rnti,Yk,nCCE,nCCE/L,nb_candidates); + printf("rnti %x, Yk*L = %d, nCCE %d (nCCE/L %d),nb_cand*L %d\n", rnti, + Yk * L, nCCE, nCCE / L, nb_candidates * L); +} - for (m = 0 ; m < nb_candidates ; m++) { - search_space_free = 1; +uint16_t +getnquad(COMMON_channels_t * cc, uint8_t num_pdcch_symbols, uint8_t mi) +{ + uint16_t Nreg = 0; - for (l=0; l= nCCE || CCE_table[cce] == 1) { - search_space_free = 0; - break; - } - } + AssertFatal(cc != NULL, "cc is null\n"); + AssertFatal(cc->mib != NULL, "cc->mib is null\n"); - if (search_space_free == 1) { - for (l=0; lmib->message.dl_Bandwidth); + int phich_resource = get_phich_resource_times6(cc); - return(((Yk+m)%(nCCE/L))*L); - } + uint8_t Ngroup_PHICH = (phich_resource * N_RB_DL) / 48; + + if (((phich_resource * N_RB_DL) % 48) > 0) + Ngroup_PHICH++; + + if (cc->Ncp == 1) { + Ngroup_PHICH <<= 1; } - return(-1); - } + Ngroup_PHICH *= mi; + + if ((num_pdcch_symbols > 0) && (num_pdcch_symbols < 4)) + switch (N_RB_DL) { + case 6: + Nreg = 12 + (num_pdcch_symbols - 1) * 18; + break; + + case 25: + Nreg = 50 + (num_pdcch_symbols - 1) * 75; + break; + + case 50: + Nreg = 100 + (num_pdcch_symbols - 1) * 150; + break; + + case 100: + Nreg = 200 + (num_pdcch_symbols - 1) * 300; + break; + + default: + return (0); + } + // printf("Nreg %d (%d)\n",Nreg,Nreg - 4 - (3*Ngroup_PHICH)); + return (Nreg - 4 - (3 * Ngroup_PHICH)); } -void dump_CCE_table(int *CCE_table,const int nCCE,const unsigned short rnti,const int subframe,int L) +uint16_t +getnCCE(COMMON_channels_t * cc, uint8_t num_pdcch_symbols, uint8_t mi) { - int nb_candidates = 0,i; - unsigned int Yk; - - printf("CCE 0: "); - for (i=0;imib!=NULL,"cc->mib is null\n"); + // for FDD + if (cc->tdd_Config == NULL) // FDD + return 1; - int N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth); - int phich_resource = get_phich_resource_times6(cc); + // for TDD + switch (cc->tdd_Config->subframeAssignment) { + case 0: + if ((subframe == 0) || (subframe == 5)) + return (2); + else + return (1); - uint8_t Ngroup_PHICH = (phich_resource*N_RB_DL)/48; + break; - if (((phich_resource*N_RB_DL)%48) > 0) - Ngroup_PHICH++; + case 1: + if ((subframe == 0) || (subframe == 5)) + return (0); + else + return (1); - if (cc->Ncp == 1) { - Ngroup_PHICH<<=1; - } + break; - Ngroup_PHICH*=mi; + case 2: + if ((subframe == 3) || (subframe == 8)) + return (1); + else + return (0); + + break; + + case 3: + if ((subframe == 0) || (subframe == 8) || (subframe == 9)) + return (1); + else + return (0); + + break; + + case 4: + if ((subframe == 8) || (subframe == 9)) + return (1); + else + return (0); + + break; + + case 5: + if (subframe == 8) + return (1); + else + return (0); + + break; - if ((num_pdcch_symbols>0) && (num_pdcch_symbols<4)) - switch (N_RB_DL) { case 6: - Nreg=12+(num_pdcch_symbols-1)*18; - break; - - case 25: - Nreg=50+(num_pdcch_symbols-1)*75; - break; - - case 50: - Nreg=100+(num_pdcch_symbols-1)*150; - break; - - case 100: - Nreg=200+(num_pdcch_symbols-1)*300; - break; + return (1); + break; default: - return(0); + return (0); } - - // printf("Nreg %d (%d)\n",Nreg,Nreg - 4 - (3*Ngroup_PHICH)); - return(Nreg - 4 - (3*Ngroup_PHICH)); } -uint16_t getnCCE(COMMON_channels_t *cc, uint8_t num_pdcch_symbols, uint8_t mi) +uint16_t +get_nCCE_max(COMMON_channels_t * cc, int num_pdcch_symbols, int subframe) { - AssertFatal(cc!=NULL,"cc is null\n"); - return(getnquad(cc,num_pdcch_symbols,mi)/9); -} - -uint8_t getmi(COMMON_channels_t *cc,int subframe) -{ - AssertFatal(cc!=NULL,"cc is null\n"); - - // for FDD - if (cc->tdd_Config==NULL) // FDD - return 1; - - // for TDD - switch (cc->tdd_Config->subframeAssignment) { - case 0: - if ((subframe==0) || (subframe==5)) - return(2); - else return(1); - - break; - - case 1: - if ((subframe==0) || (subframe==5)) - return(0); - else return(1); - - break; - - case 2: - if ((subframe==3) || (subframe==8)) - return(1); - else return(0); - - break; - - case 3: - if ((subframe==0) || (subframe==8) || (subframe==9)) - return(1); - else return(0); - - break; - - case 4: - if ((subframe==8) || (subframe==9)) - return(1); - else return(0); - - break; - - case 5: - if (subframe==8) - return(1); - else return(0); - - break; - - case 6: - return(1); - break; - - default: - return(0); - } -} - -uint16_t get_nCCE_max(COMMON_channels_t *cc, int num_pdcch_symbols,int subframe) -{ - AssertFatal(cc!=NULL,"cc is null\n"); - return(getnCCE(cc,num_pdcch_symbols, - getmi(cc,subframe))); + AssertFatal(cc != NULL, "cc is null\n"); + return (getnCCE(cc, num_pdcch_symbols, getmi(cc, subframe))); } // Allocate the CCEs -int allocate_CCEs(int module_idP, - int CC_idP, - int subframeP, - int test_onlyP) +int +allocate_CCEs(int module_idP, int CC_idP, int subframeP, int test_onlyP) { - int *CCE_table = RC.mac[module_idP]->CCE_table[CC_idP]; - nfapi_dl_config_request_body_t *DL_req = &RC.mac[module_idP]->DL_req[CC_idP].dl_config_request_body; - nfapi_hi_dci0_request_body_t *HI_DCI0_req = &RC.mac[module_idP]->HI_DCI0_req[CC_idP].hi_dci0_request_body; - nfapi_dl_config_request_pdu_t *dl_config_pdu = &DL_req->dl_config_pdu_list[0]; - nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = &HI_DCI0_req->hi_dci0_pdu_list[0]; - int nCCE_max = get_nCCE_max(&RC.mac[module_idP]->common_channels[CC_idP],1,subframeP); - int fCCE; - int i,j,idci; - int nCCE=0; + int *CCE_table = RC.mac[module_idP]->CCE_table[CC_idP]; + nfapi_dl_config_request_body_t *DL_req = + &RC.mac[module_idP]->DL_req[CC_idP].dl_config_request_body; + nfapi_hi_dci0_request_body_t *HI_DCI0_req = + &RC.mac[module_idP]->HI_DCI0_req[CC_idP].hi_dci0_request_body; + nfapi_dl_config_request_pdu_t *dl_config_pdu = + &DL_req->dl_config_pdu_list[0]; + nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = + &HI_DCI0_req->hi_dci0_pdu_list[0]; + int nCCE_max = + get_nCCE_max(&RC.mac[module_idP]->common_channels[CC_idP], 1, + subframeP); + int fCCE; + int i, j, idci; + int nCCE = 0; - LOG_D(MAC,"Allocate CCEs subframe %d, test %d : (DL PDU %d, DL DCI %d, UL %d)\n",subframeP,test_onlyP,DL_req->number_pdu,DL_req->number_dci,HI_DCI0_req->number_of_dci); - DL_req->number_pdcch_ofdm_symbols=1; + LOG_D(MAC, + "Allocate CCEs subframe %d, test %d : (DL PDU %d, DL DCI %d, UL %d)\n", + subframeP, test_onlyP, DL_req->number_pdu, DL_req->number_dci, + HI_DCI0_req->number_of_dci); + DL_req->number_pdcch_ofdm_symbols = 1; -try_again: - init_CCE_table(module_idP,CC_idP); - nCCE=0; + try_again: + init_CCE_table(module_idP, CC_idP); + nCCE = 0; - for (i=0,idci=0;inumber_pdu;i++) { - // allocate DL common DCIs first - if ((dl_config_pdu[i].pdu_type == NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE)&& - (dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti_type==2) - ) { - LOG_D(MAC,"Trying to allocate COMMON DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", - idci,DL_req->number_dci+HI_DCI0_req->number_of_dci, - DL_req->number_dci,HI_DCI0_req->number_of_dci, - dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti, - dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, - nCCE,nCCE_max, DL_req->number_pdcch_ofdm_symbols); + for (i = 0, idci = 0; i < DL_req->number_pdu; i++) { + // allocate DL common DCIs first + if ((dl_config_pdu[i].pdu_type == NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE) + && (dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti_type == + 2)) { + LOG_D(MAC, + "Trying to allocate COMMON DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", + idci, DL_req->number_dci + HI_DCI0_req->number_of_dci, + DL_req->number_dci, HI_DCI0_req->number_of_dci, + dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti, + dl_config_pdu[i].dci_dl_pdu. + dci_dl_pdu_rel8.aggregation_level, nCCE, nCCE_max, + DL_req->number_pdcch_ofdm_symbols); - if (nCCE + (dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level) > nCCE_max) { - if (DL_req->number_pdcch_ofdm_symbols == 3) - goto failed; - LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols, increasing by 1\n",DL_req->number_pdcch_ofdm_symbols); - DL_req->number_pdcch_ofdm_symbols++; - nCCE_max = get_nCCE_max(&RC.mac[module_idP]->common_channels[CC_idP],DL_req->number_pdcch_ofdm_symbols,subframeP); - goto try_again; - } + if (nCCE + + (dl_config_pdu[i].dci_dl_pdu. + dci_dl_pdu_rel8.aggregation_level) > nCCE_max) { + if (DL_req->number_pdcch_ofdm_symbols == 3) + goto failed; + LOG_D(MAC, + "Can't fit DCI allocations with %d PDCCH symbols, increasing by 1\n", + DL_req->number_pdcch_ofdm_symbols); + DL_req->number_pdcch_ofdm_symbols++; + nCCE_max = + get_nCCE_max(&RC.mac[module_idP]-> + common_channels[CC_idP], + DL_req->number_pdcch_ofdm_symbols, + subframeP); + goto try_again; + } + // number of CCEs left can potentially hold this allocation + fCCE = get_nCCE_offset(CCE_table, + dl_config_pdu[i]. + dci_dl_pdu.dci_dl_pdu_rel8. + aggregation_level, nCCE_max, 1, + dl_config_pdu[i]. + dci_dl_pdu.dci_dl_pdu_rel8.rnti, + subframeP); + if (fCCE == -1) { + if (DL_req->number_pdcch_ofdm_symbols == 3) { + LOG_D(MAC, + "subframe %d: Dropping Allocation for RNTI %x\n", + subframeP, + dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8. + rnti); + for (j = 0; j <= i; j++) { + if (dl_config_pdu[j].pdu_type == + NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE) + LOG_D(MAC, + "DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", + j, + DL_req->number_dci + + HI_DCI0_req->number_of_dci, + DL_req->number_dci, + HI_DCI0_req->number_of_dci, + dl_config_pdu[j]. + dci_dl_pdu.dci_dl_pdu_rel8.rnti, + dl_config_pdu[j]. + dci_dl_pdu.dci_dl_pdu_rel8.dci_format, + dl_config_pdu[j]. + dci_dl_pdu.dci_dl_pdu_rel8. + aggregation_level, nCCE, nCCE_max, + DL_req->number_pdcch_ofdm_symbols); + } + //dump_CCE_table(CCE_table,nCCE_max,subframeP,dci_alloc->rnti,1<L); + goto failed; + } + LOG_D(MAC, + "Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1\n", + DL_req->number_pdcch_ofdm_symbols); - // number of CCEs left can potentially hold this allocation - fCCE = get_nCCE_offset(CCE_table, - dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, - nCCE_max, - 1, - dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti, - subframeP); - if (fCCE == -1) { - if (DL_req->number_pdcch_ofdm_symbols == 3) { - LOG_D(MAC,"subframe %d: Dropping Allocation for RNTI %x\n", - subframeP,dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti); - for (j=0;j<=i;j++){ - if (dl_config_pdu[j].pdu_type == NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE) - LOG_D(MAC,"DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", - j,DL_req->number_dci+HI_DCI0_req->number_of_dci, - DL_req->number_dci,HI_DCI0_req->number_of_dci, - dl_config_pdu[j].dci_dl_pdu.dci_dl_pdu_rel8.rnti, - dl_config_pdu[j].dci_dl_pdu.dci_dl_pdu_rel8.dci_format, - dl_config_pdu[j].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, - nCCE,nCCE_max,DL_req->number_pdcch_ofdm_symbols); - } - //dump_CCE_table(CCE_table,nCCE_max,subframeP,dci_alloc->rnti,1<L); - goto failed; - } - LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1\n",DL_req->number_pdcch_ofdm_symbols); + DL_req->number_pdcch_ofdm_symbols++; + nCCE_max = + get_nCCE_max(&RC.mac[module_idP]-> + common_channels[CC_idP], + DL_req->number_pdcch_ofdm_symbols, + subframeP); + goto try_again; + } // fCCE==-1 - DL_req->number_pdcch_ofdm_symbols++; - nCCE_max = get_nCCE_max(&RC.mac[module_idP]->common_channels[CC_idP],DL_req->number_pdcch_ofdm_symbols,subframeP); - goto try_again; - } // fCCE==-1 + // the allocation is feasible, rnti rule passes + nCCE += + dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8. + aggregation_level; + LOG_D(MAC, "Allocating at nCCE %d\n", fCCE); + if (test_onlyP == 0) { + dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.cce_idx = fCCE; + LOG_D(MAC, + "Allocate COMMON DCI CCEs subframe %d, test %d => L %d fCCE %d\n", + subframeP, test_onlyP, + dl_config_pdu[i].dci_dl_pdu. + dci_dl_pdu_rel8.aggregation_level, fCCE); + } + idci++; + } + } // for i = 0 ... num_DL_DCIs - // the allocation is feasible, rnti rule passes - nCCE += dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level; - LOG_D(MAC,"Allocating at nCCE %d\n",fCCE); - if (test_onlyP == 0) { - dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.cce_idx=fCCE; - LOG_D(MAC,"Allocate COMMON DCI CCEs subframe %d, test %d => L %d fCCE %d\n",subframeP,test_onlyP,dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level,fCCE); - } - idci++; - } - } // for i = 0 ... num_DL_DCIs + // no try to allocate UL DCIs + for (i = 0; i < HI_DCI0_req->number_of_dci + HI_DCI0_req->number_of_hi; + i++) { - // no try to allocate UL DCIs - for (i=0;inumber_of_dci+HI_DCI0_req->number_of_hi;i++) { + // allocate UL DCIs + if (hi_dci0_pdu[i].pdu_type == NFAPI_HI_DCI0_DCI_PDU_TYPE) { - // allocate UL DCIs - if (hi_dci0_pdu[i].pdu_type == NFAPI_HI_DCI0_DCI_PDU_TYPE) { + LOG_D(MAC, + "Trying to allocate format 0 DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", + idci, DL_req->number_dci + HI_DCI0_req->number_of_dci, + DL_req->number_dci, HI_DCI0_req->number_of_dci, + hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.rnti, + hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.aggregation_level, + nCCE, nCCE_max, DL_req->number_pdcch_ofdm_symbols); - LOG_D(MAC,"Trying to allocate format 0 DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", - idci,DL_req->number_dci+HI_DCI0_req->number_of_dci, - DL_req->number_dci,HI_DCI0_req->number_of_dci, - hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.rnti,hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.aggregation_level, - nCCE,nCCE_max, DL_req->number_pdcch_ofdm_symbols); + if (nCCE + + (hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.aggregation_level) > + nCCE_max) { + if (DL_req->number_pdcch_ofdm_symbols == 3) + goto failed; + LOG_D(MAC, + "Can't fit DCI allocations with %d PDCCH symbols, increasing by 1\n", + DL_req->number_pdcch_ofdm_symbols); - if (nCCE + (hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.aggregation_level) > nCCE_max) { - if (DL_req->number_pdcch_ofdm_symbols == 3) - goto failed; - LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols, increasing by 1\n",DL_req->number_pdcch_ofdm_symbols); + DL_req->number_pdcch_ofdm_symbols++; + nCCE_max = + get_nCCE_max(&RC.mac[module_idP]-> + common_channels[CC_idP], + DL_req->number_pdcch_ofdm_symbols, + subframeP); + goto try_again; + } + // number of CCEs left can potentially hold this allocation + fCCE = get_nCCE_offset(CCE_table, + hi_dci0_pdu[i].dci_pdu. + dci_pdu_rel8.aggregation_level, + nCCE_max, 0, + hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8. + rnti, subframeP); + if (fCCE == -1) { + if (DL_req->number_pdcch_ofdm_symbols == 3) { + LOG_D(MAC, + "subframe %d: Dropping Allocation for RNTI %x\n", + subframeP, + hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.rnti); + for (j = 0; j <= i; j++) { + if (hi_dci0_pdu[j].pdu_type == + NFAPI_HI_DCI0_DCI_PDU_TYPE) + LOG_D(MAC, + "DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", + j, + DL_req->number_dci + + HI_DCI0_req->number_of_dci, + DL_req->number_dci, + HI_DCI0_req->number_of_dci, + hi_dci0_pdu[j].dci_pdu.dci_pdu_rel8.rnti, + hi_dci0_pdu[j].dci_pdu.dci_pdu_rel8. + dci_format, + hi_dci0_pdu[j].dci_pdu. + dci_pdu_rel8.aggregation_level, nCCE, + nCCE_max, + DL_req->number_pdcch_ofdm_symbols); + } + //dump_CCE_table(CCE_table,nCCE_max,subframeP,dci_alloc->rnti,1<L); + goto failed; + } + LOG_D(MAC, + "Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1\n", + DL_req->number_pdcch_ofdm_symbols); - DL_req->number_pdcch_ofdm_symbols++; - nCCE_max = get_nCCE_max(&RC.mac[module_idP]->common_channels[CC_idP],DL_req->number_pdcch_ofdm_symbols,subframeP); - goto try_again; - } + DL_req->number_pdcch_ofdm_symbols++; + nCCE_max = + get_nCCE_max(&RC.mac[module_idP]-> + common_channels[CC_idP], + DL_req->number_pdcch_ofdm_symbols, + subframeP); + goto try_again; + } // fCCE==-1 - // number of CCEs left can potentially hold this allocation - fCCE = get_nCCE_offset(CCE_table, - hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.aggregation_level, - nCCE_max, - 0, - hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.rnti, - subframeP); - if (fCCE == -1) { - if (DL_req->number_pdcch_ofdm_symbols == 3) { - LOG_D(MAC,"subframe %d: Dropping Allocation for RNTI %x\n", - subframeP,hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.rnti); - for (j=0;j<=i;j++){ - if (hi_dci0_pdu[j].pdu_type == NFAPI_HI_DCI0_DCI_PDU_TYPE) - LOG_D(MAC,"DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", - j,DL_req->number_dci+HI_DCI0_req->number_of_dci, - DL_req->number_dci,HI_DCI0_req->number_of_dci, - hi_dci0_pdu[j].dci_pdu.dci_pdu_rel8.rnti, - hi_dci0_pdu[j].dci_pdu.dci_pdu_rel8.dci_format, - hi_dci0_pdu[j].dci_pdu.dci_pdu_rel8.aggregation_level, - nCCE,nCCE_max,DL_req->number_pdcch_ofdm_symbols); - } - //dump_CCE_table(CCE_table,nCCE_max,subframeP,dci_alloc->rnti,1<L); - goto failed; - } - LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1\n",DL_req->number_pdcch_ofdm_symbols); + // the allocation is feasible, rnti rule passes + nCCE += hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.aggregation_level; + LOG_D(MAC, "Allocating at nCCE %d\n", fCCE); + if (test_onlyP == 0) { + hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.cce_index = fCCE; + LOG_D(MAC, "Allocate CCEs subframe %d, test %d\n", + subframeP, test_onlyP); + } + idci++; + } + } // for i = 0 ... num_UL_DCIs - DL_req->number_pdcch_ofdm_symbols++; - nCCE_max = get_nCCE_max(&RC.mac[module_idP]->common_channels[CC_idP],DL_req->number_pdcch_ofdm_symbols,subframeP); - goto try_again; - } // fCCE==-1 + for (i = 0; i < DL_req->number_pdu; i++) { + // allocate DL UE specific DCIs + if ((dl_config_pdu[i].pdu_type == NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE) + && (dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti_type == + 1)) { + LOG_D(MAC, + "Trying to allocate DL UE-SPECIFIC DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", + idci, DL_req->number_dci + HI_DCI0_req->number_of_dci, + DL_req->number_dci, HI_DCI0_req->number_of_dci, + dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti, + dl_config_pdu[i].dci_dl_pdu. + dci_dl_pdu_rel8.aggregation_level, nCCE, nCCE_max, + DL_req->number_pdcch_ofdm_symbols); - // the allocation is feasible, rnti rule passes - nCCE += hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.aggregation_level; - LOG_D(MAC,"Allocating at nCCE %d\n",fCCE); - if (test_onlyP == 0) { - hi_dci0_pdu[i].dci_pdu.dci_pdu_rel8.cce_index=fCCE; - LOG_D(MAC,"Allocate CCEs subframe %d, test %d\n",subframeP,test_onlyP); - } - idci++; - } - } // for i = 0 ... num_UL_DCIs + if (nCCE + + (dl_config_pdu[i].dci_dl_pdu. + dci_dl_pdu_rel8.aggregation_level) > nCCE_max) { + if (DL_req->number_pdcch_ofdm_symbols == 3) + goto failed; + LOG_D(MAC, + "Can't fit DCI allocations with %d PDCCH symbols, increasing by 1\n", + DL_req->number_pdcch_ofdm_symbols); - for (i=0;inumber_pdu;i++) { - // allocate DL UE specific DCIs - if ((dl_config_pdu[i].pdu_type == NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE)&& - (dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti_type==1)) { - LOG_D(MAC,"Trying to allocate DL UE-SPECIFIC DCI %d/%d (%d,%d) : rnti %x, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", - idci,DL_req->number_dci+HI_DCI0_req->number_of_dci, - DL_req->number_dci,HI_DCI0_req->number_of_dci, - dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti,dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, - nCCE,nCCE_max, DL_req->number_pdcch_ofdm_symbols); + DL_req->number_pdcch_ofdm_symbols++; + nCCE_max = + get_nCCE_max(&RC.mac[module_idP]-> + common_channels[CC_idP], + DL_req->number_pdcch_ofdm_symbols, + subframeP); + goto try_again; + } + // number of CCEs left can potentially hold this allocation + fCCE = get_nCCE_offset(CCE_table, + dl_config_pdu[i]. + dci_dl_pdu.dci_dl_pdu_rel8. + aggregation_level, nCCE_max, 0, + dl_config_pdu[i]. + dci_dl_pdu.dci_dl_pdu_rel8.rnti, + subframeP); + if (fCCE == -1) { + if (DL_req->number_pdcch_ofdm_symbols == 3) { + LOG_I(MAC, + "subframe %d: Dropping Allocation for RNTI %x\n", + subframeP, + dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8. + rnti); + for (j = 0; j <= i; j++) { + if (dl_config_pdu[j].pdu_type == + NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE) + LOG_I(MAC, + "DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", + j, + DL_req->number_dci + + HI_DCI0_req->number_of_dci, + DL_req->number_dci, + HI_DCI0_req->number_of_dci, + dl_config_pdu[j]. + dci_dl_pdu.dci_dl_pdu_rel8.rnti, + dl_config_pdu[j]. + dci_dl_pdu.dci_dl_pdu_rel8.dci_format, + dl_config_pdu[j]. + dci_dl_pdu.dci_dl_pdu_rel8. + aggregation_level, nCCE, nCCE_max, + DL_req->number_pdcch_ofdm_symbols); + } + //dump_CCE_table(CCE_table,nCCE_max,subframeP,dci_alloc->rnti,1<L); + goto failed; + } + LOG_D(MAC, + "Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1\n", + DL_req->number_pdcch_ofdm_symbols); - if (nCCE + (dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level) > nCCE_max) { - if (DL_req->number_pdcch_ofdm_symbols == 3) - goto failed; - LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols, increasing by 1\n",DL_req->number_pdcch_ofdm_symbols); + DL_req->number_pdcch_ofdm_symbols++; + nCCE_max = + get_nCCE_max(&RC.mac[module_idP]-> + common_channels[CC_idP], + DL_req->number_pdcch_ofdm_symbols, + subframeP); + goto try_again; + } // fCCE==-1 - DL_req->number_pdcch_ofdm_symbols++; - nCCE_max = get_nCCE_max(&RC.mac[module_idP]->common_channels[CC_idP],DL_req->number_pdcch_ofdm_symbols,subframeP); - goto try_again; - } + // the allocation is feasible, rnti rule passes + nCCE += + dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8. + aggregation_level; + LOG_D(MAC, "Allocating at nCCE %d\n", fCCE); + if (test_onlyP == 0) { + dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.cce_idx = fCCE; + LOG_D(MAC, "Allocate CCEs subframe %d, test %d\n", + subframeP, test_onlyP); + } + idci++; + } + } // for i = 0 ... num_DL_DCIs - // number of CCEs left can potentially hold this allocation - fCCE = get_nCCE_offset(CCE_table, - dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, - nCCE_max, - 0, - dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti, - subframeP); - if (fCCE == -1) { - if (DL_req->number_pdcch_ofdm_symbols == 3) { - LOG_I(MAC,"subframe %d: Dropping Allocation for RNTI %x\n", - subframeP,dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.rnti); - for (j=0;j<=i;j++){ - if (dl_config_pdu[j].pdu_type == NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE) - LOG_I(MAC,"DCI %d/%d (%d,%d) : rnti %x dci format %d, aggreg %d nCCE %d / %d (num_pdcch_symbols %d)\n", - j,DL_req->number_dci+HI_DCI0_req->number_of_dci, - DL_req->number_dci,HI_DCI0_req->number_of_dci, - dl_config_pdu[j].dci_dl_pdu.dci_dl_pdu_rel8.rnti, - dl_config_pdu[j].dci_dl_pdu.dci_dl_pdu_rel8.dci_format, - dl_config_pdu[j].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, - nCCE,nCCE_max,DL_req->number_pdcch_ofdm_symbols); - } - //dump_CCE_table(CCE_table,nCCE_max,subframeP,dci_alloc->rnti,1<L); - goto failed; - } - LOG_D(MAC,"Can't fit DCI allocations with %d PDCCH symbols (rnti condition), increasing by 1\n",DL_req->number_pdcch_ofdm_symbols); + return 0; - DL_req->number_pdcch_ofdm_symbols++; - nCCE_max = get_nCCE_max(&RC.mac[module_idP]->common_channels[CC_idP],DL_req->number_pdcch_ofdm_symbols,subframeP); - goto try_again; - } // fCCE==-1 - - // the allocation is feasible, rnti rule passes - nCCE += dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level; - LOG_D(MAC,"Allocating at nCCE %d\n",fCCE); - if (test_onlyP == 0) { - dl_config_pdu[i].dci_dl_pdu.dci_dl_pdu_rel8.cce_idx=fCCE; - LOG_D(MAC,"Allocate CCEs subframe %d, test %d\n",subframeP,test_onlyP); - } - idci++; - } - } // for i = 0 ... num_DL_DCIs - - return 0; - -failed: - return -1; + failed: + return -1; } /* @@ -2917,750 +3409,1046 @@ uint8_t get_ul_req_index(module_id_t module_idP, int CC_idP, sub_frame_t subfram } */ -nfapi_ul_config_request_pdu_t* has_ul_grant(module_id_t module_idP,int CC_idP,uint16_t absSFP,uint16_t rnti) +nfapi_ul_config_request_pdu_t *has_ul_grant(module_id_t module_idP, + int CC_idP, uint16_t absSFP, + uint16_t rnti) { - nfapi_ul_config_request_body_t *ul_req; - nfapi_ul_config_request_pdu_t *ul_config_pdu; + nfapi_ul_config_request_body_t *ul_req; + nfapi_ul_config_request_pdu_t *ul_config_pdu; - ul_req = &RC.mac[module_idP]->UL_req_tmp[CC_idP][absSFP%10].ul_config_request_body; - ul_config_pdu = &ul_req->ul_config_pdu_list[0]; - LOG_D(MAC,"Checking for rnti %x UL grant in subframeP %d (num pdu %d)\n",rnti,absSFP%10,ul_req->number_of_pdus); + ul_req = + &RC.mac[module_idP]->UL_req_tmp[CC_idP][absSFP % + 10].ul_config_request_body; + ul_config_pdu = &ul_req->ul_config_pdu_list[0]; + LOG_D(MAC, + "Checking for rnti %x UL grant in subframeP %d (num pdu %d)\n", + rnti, absSFP % 10, ul_req->number_of_pdus); - for (int i=0; inumber_of_pdus;i++){ - LOG_D(MAC,"PDU %d : type %d,rnti %x\n",i,ul_config_pdu[i].pdu_type,rnti); - if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE)&& - (ul_config_pdu[i].ulsch_pdu.ulsch_pdu_rel8.rnti == rnti)) return(&ul_config_pdu[i]); - if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE)&& - (ul_config_pdu[i].ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti == rnti)) return(&ul_config_pdu[i]); - if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE)&& - (ul_config_pdu[i].ulsch_harq_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti == rnti)) return(&ul_config_pdu[i]); - if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE)&& - (ul_config_pdu[i].ulsch_cqi_harq_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti == rnti)) return(&ul_config_pdu[i]); + for (int i = 0; i < ul_req->number_of_pdus; i++) { + LOG_D(MAC, "PDU %d : type %d,rnti %x\n", i, + ul_config_pdu[i].pdu_type, rnti); + if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE) + && (ul_config_pdu[i].ulsch_pdu.ulsch_pdu_rel8.rnti == rnti)) + return (&ul_config_pdu[i]); + if ((ul_config_pdu[i].pdu_type == + NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE) + && (ul_config_pdu[i].ulsch_cqi_ri_pdu.ulsch_pdu. + ulsch_pdu_rel8.rnti == rnti)) + return (&ul_config_pdu[i]); + if ((ul_config_pdu[i].pdu_type == + NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE) + && (ul_config_pdu[i].ulsch_harq_pdu.ulsch_pdu.ulsch_pdu_rel8. + rnti == rnti)) + return (&ul_config_pdu[i]); + if ((ul_config_pdu[i].pdu_type == + NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE) + && (ul_config_pdu[i].ulsch_cqi_harq_ri_pdu. + ulsch_pdu.ulsch_pdu_rel8.rnti == rnti)) + return (&ul_config_pdu[i]); - if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE)&& - (ul_config_pdu[i].uci_cqi_pdu.ue_information.ue_information_rel8.rnti == rnti)) return(&ul_config_pdu[i]); - if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE)&& - (ul_config_pdu[i].uci_sr_pdu.ue_information.ue_information_rel8.rnti == rnti)) return(&ul_config_pdu[i]); - if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE)&& - (ul_config_pdu[i].uci_harq_pdu.ue_information.ue_information_rel8.rnti == rnti)) return(&ul_config_pdu[i]); - if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE)&& - (ul_config_pdu[i].uci_sr_harq_pdu.ue_information.ue_information_rel8.rnti == rnti)) return(&ul_config_pdu[i]); - if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_UCI_CQI_HARQ_PDU_TYPE)&& - (ul_config_pdu[i].uci_cqi_harq_pdu.ue_information.ue_information_rel8.rnti == rnti)) return(&ul_config_pdu[i]); - if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_UCI_CQI_SR_PDU_TYPE)&& - (ul_config_pdu[i].uci_cqi_sr_pdu.ue_information.ue_information_rel8.rnti == rnti)) return(&ul_config_pdu[i]); - if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_UCI_CQI_SR_HARQ_PDU_TYPE) && - (ul_config_pdu[i].uci_cqi_sr_harq_pdu.ue_information.ue_information_rel8.rnti == rnti)) return(&ul_config_pdu[i]); + if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE) + && (ul_config_pdu[i].uci_cqi_pdu. + ue_information.ue_information_rel8.rnti == rnti)) + return (&ul_config_pdu[i]); + if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE) + && (ul_config_pdu[i].uci_sr_pdu. + ue_information.ue_information_rel8.rnti == rnti)) + return (&ul_config_pdu[i]); + if ((ul_config_pdu[i].pdu_type == + NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE) + && (ul_config_pdu[i].uci_harq_pdu. + ue_information.ue_information_rel8.rnti == rnti)) + return (&ul_config_pdu[i]); + if ((ul_config_pdu[i].pdu_type == + NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE) + && (ul_config_pdu[i].uci_sr_harq_pdu. + ue_information.ue_information_rel8.rnti == rnti)) + return (&ul_config_pdu[i]); + if ((ul_config_pdu[i].pdu_type == + NFAPI_UL_CONFIG_UCI_CQI_HARQ_PDU_TYPE) + && (ul_config_pdu[i].uci_cqi_harq_pdu. + ue_information.ue_information_rel8.rnti == rnti)) + return (&ul_config_pdu[i]); + if ((ul_config_pdu[i].pdu_type == + NFAPI_UL_CONFIG_UCI_CQI_SR_PDU_TYPE) + && (ul_config_pdu[i].uci_cqi_sr_pdu. + ue_information.ue_information_rel8.rnti == rnti)) + return (&ul_config_pdu[i]); + if ((ul_config_pdu[i].pdu_type == + NFAPI_UL_CONFIG_UCI_CQI_SR_HARQ_PDU_TYPE) + && (ul_config_pdu[i].uci_cqi_sr_harq_pdu. + ue_information.ue_information_rel8.rnti == rnti)) + return (&ul_config_pdu[i]); - if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_UCI_CSI_PDU_TYPE)&& - (ul_config_pdu[i].ulsch_uci_csi_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti == rnti)) return(&ul_config_pdu[i]); - if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_UCI_HARQ_PDU_TYPE)&& - (ul_config_pdu[i].ulsch_uci_harq_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti == rnti)) return(&ul_config_pdu[i]); - if ((ul_config_pdu[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_CSI_UCI_HARQ_PDU_TYPE)&& - (ul_config_pdu[i].ulsch_csi_uci_harq_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti == rnti)) return(&ul_config_pdu[i]); - } + if ((ul_config_pdu[i].pdu_type == + NFAPI_UL_CONFIG_ULSCH_UCI_CSI_PDU_TYPE) + && (ul_config_pdu[i].ulsch_uci_csi_pdu. + ulsch_pdu.ulsch_pdu_rel8.rnti == rnti)) + return (&ul_config_pdu[i]); + if ((ul_config_pdu[i].pdu_type == + NFAPI_UL_CONFIG_ULSCH_UCI_HARQ_PDU_TYPE) + && (ul_config_pdu[i].ulsch_uci_harq_pdu. + ulsch_pdu.ulsch_pdu_rel8.rnti == rnti)) + return (&ul_config_pdu[i]); + if ((ul_config_pdu[i].pdu_type == + NFAPI_UL_CONFIG_ULSCH_CSI_UCI_HARQ_PDU_TYPE) + && (ul_config_pdu[i].ulsch_csi_uci_harq_pdu. + ulsch_pdu.ulsch_pdu_rel8.rnti == rnti)) + return (&ul_config_pdu[i]); + } - return(NULL); // no ul grant at all for this UE + return (NULL); // no ul grant at all for this UE } -boolean_t CCE_allocation_infeasible(int module_idP, - int CC_idP, - int format_flag, - int subframe, - int aggregation, - int rnti) +boolean_t +CCE_allocation_infeasible(int module_idP, + int CC_idP, + int format_flag, + int subframe, int aggregation, int rnti) { - nfapi_dl_config_request_body_t *DL_req = &RC.mac[module_idP]->DL_req[CC_idP].dl_config_request_body; - nfapi_dl_config_request_pdu_t *dl_config_pdu = &DL_req->dl_config_pdu_list[DL_req->number_pdu]; - nfapi_hi_dci0_request_body_t *HI_DCI0_req = &RC.mac[module_idP]->HI_DCI0_req[CC_idP].hi_dci0_request_body; - nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = &HI_DCI0_req->hi_dci0_pdu_list[HI_DCI0_req->number_of_dci+HI_DCI0_req->number_of_hi]; - int ret; - boolean_t res = FALSE; + nfapi_dl_config_request_body_t *DL_req = + &RC.mac[module_idP]->DL_req[CC_idP].dl_config_request_body; + nfapi_dl_config_request_pdu_t *dl_config_pdu = + &DL_req->dl_config_pdu_list[DL_req->number_pdu]; + nfapi_hi_dci0_request_body_t *HI_DCI0_req = + &RC.mac[module_idP]->HI_DCI0_req[CC_idP].hi_dci0_request_body; + nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = + &HI_DCI0_req->hi_dci0_pdu_list[HI_DCI0_req->number_of_dci + + HI_DCI0_req->number_of_hi]; + int ret; + boolean_t res = FALSE; - if (format_flag != 2) { // DL DCI - if (DL_req->number_pdu == MAX_NUM_DL_PDU) { - LOG_W(MAC, "Subframe %d: FAPI DL structure is full, skip scheduling UE %d\n", - subframe, rnti); - } else { - dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = rnti; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = (format_flag == 0)?2:1; - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level = aggregation; - DL_req->number_pdu++; - LOG_D(MAC,"Subframe %d: Checking CCE feasibility format %d : (%x,%d) (%x,%d,%d)\n", - subframe,format_flag,rnti,aggregation, - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti, - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, - dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type); - ret = allocate_CCEs(module_idP,CC_idP,subframe,0); - if (ret==-1) - res = TRUE; - DL_req->number_pdu--; + if (format_flag != 2) { // DL DCI + if (DL_req->number_pdu == MAX_NUM_DL_PDU) { + LOG_W(MAC, + "Subframe %d: FAPI DL structure is full, skip scheduling UE %d\n", + subframe, rnti); + } else { + dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = rnti; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = + (format_flag == 0) ? 2 : 1; + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level = + aggregation; + DL_req->number_pdu++; + LOG_D(MAC, + "Subframe %d: Checking CCE feasibility format %d : (%x,%d) (%x,%d,%d)\n", + subframe, format_flag, rnti, aggregation, + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti, + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8. + aggregation_level, + dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type); + ret = allocate_CCEs(module_idP, CC_idP, subframe, 0); + if (ret == -1) + res = TRUE; + DL_req->number_pdu--; + } + } else { // ue-specific UL DCI + if (HI_DCI0_req->number_of_dci + HI_DCI0_req->number_of_hi == + MAX_NUM_HI_DCI0_PDU) { + LOG_W(MAC, + "Subframe %d: FAPI UL structure is full, skip scheduling UE %d\n", + subframe, rnti); + } else { + hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_DCI_PDU_TYPE; + hi_dci0_pdu->dci_pdu.dci_pdu_rel8.rnti = rnti; + hi_dci0_pdu->dci_pdu.dci_pdu_rel8.aggregation_level = + aggregation; + HI_DCI0_req->number_of_dci++; + ret = allocate_CCEs(module_idP, CC_idP, subframe, 0); + if (ret == -1) + res = TRUE; + HI_DCI0_req->number_of_dci--; + } } - } - else { // ue-specific UL DCI - if (HI_DCI0_req->number_of_dci+HI_DCI0_req->number_of_hi == MAX_NUM_HI_DCI0_PDU) { - LOG_W(MAC, "Subframe %d: FAPI UL structure is full, skip scheduling UE %d\n", - subframe, rnti); - } else { - hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_DCI_PDU_TYPE; - hi_dci0_pdu->dci_pdu.dci_pdu_rel8.rnti = rnti; - hi_dci0_pdu->dci_pdu.dci_pdu_rel8.aggregation_level = aggregation; - HI_DCI0_req->number_of_dci++; - ret = allocate_CCEs(module_idP,CC_idP,subframe,0); - if (ret==-1) - res = TRUE; - HI_DCI0_req->number_of_dci--; - } - } - return res; + return res; } -void extract_harq(module_id_t mod_idP,int CC_idP,int UE_id,frame_t frameP,sub_frame_t subframeP,void *harq_indication,int format) +void +extract_harq(module_id_t mod_idP, int CC_idP, int UE_id, + frame_t frameP, sub_frame_t subframeP, + void *harq_indication, int format) { - UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; - UE_sched_ctrl *sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - rnti_t rnti = UE_RNTI(mod_idP,UE_id); - COMMON_channels_t *cc = &RC.mac[mod_idP]->common_channels[CC_idP]; - nfapi_harq_indication_fdd_rel13_t *harq_indication_fdd; - nfapi_harq_indication_tdd_rel13_t *harq_indication_tdd; - uint16_t num_ack_nak; - int numCC = UE_list->numactiveCCs[UE_id]; - int pCCid = UE_list->pCC_id[UE_id]; - int spatial_bundling = 0; - int tmode[5]; - int i,j; - uint8_t *pdu; + UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; + UE_sched_ctrl *sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + rnti_t rnti = UE_RNTI(mod_idP, UE_id); + COMMON_channels_t *cc = &RC.mac[mod_idP]->common_channels[CC_idP]; + nfapi_harq_indication_fdd_rel13_t *harq_indication_fdd; + nfapi_harq_indication_tdd_rel13_t *harq_indication_tdd; + uint16_t num_ack_nak; + int numCC = UE_list->numactiveCCs[UE_id]; + int pCCid = UE_list->pCC_id[UE_id]; + int spatial_bundling = 0; + int tmode[5]; + int i, j; + uint8_t *pdu; #ifdef Rel14 - AssertFatal(UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated->pucch_ConfigDedicated!=NULL,"pucch_ConfigDedicated is null!\n"); - if ((UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated->ext7) && - (UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated->ext7->pucch_ConfigDedicated_r13) && - (((UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated->ext7->pucch_ConfigDedicated_r13->spatialBundlingPUCCH_r13) && - (format==0)) || - ((UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated->ext7->pucch_ConfigDedicated_r13->spatialBundlingPUSCH_r13) && - (format==1)))) - spatial_bundling = 1; + AssertFatal(UE_list-> + UE_template[pCCid][UE_id].physicalConfigDedicated-> + pucch_ConfigDedicated != NULL, + "pucch_ConfigDedicated is null!\n"); + if ((UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated->ext7) + && (UE_list->UE_template[pCCid][UE_id]. + physicalConfigDedicated->ext7->pucch_ConfigDedicated_r13) + && + (((UE_list->UE_template[pCCid][UE_id]. + physicalConfigDedicated->ext7->pucch_ConfigDedicated_r13-> + spatialBundlingPUCCH_r13) + && (format == 0)) + || + ((UE_list->UE_template[pCCid][UE_id]. + physicalConfigDedicated->ext7->pucch_ConfigDedicated_r13-> + spatialBundlingPUSCH_r13) + && (format == 1)))) + spatial_bundling = 1; #endif - for (i=0;itdd_Config) { - harq_indication_tdd = (nfapi_harq_indication_tdd_rel13_t *)harq_indication; - // pdu = &harq_indication_tdd->harq_tb_n[0]; + if (cc->tdd_Config) { + harq_indication_tdd = + (nfapi_harq_indication_tdd_rel13_t *) harq_indication; + // pdu = &harq_indication_tdd->harq_tb_n[0]; - num_ack_nak = harq_indication_tdd->number_of_ack_nack; + num_ack_nak = harq_indication_tdd->number_of_ack_nack; - switch (harq_indication_tdd->mode) { - case 0: // Format 1a/b - AssertFatal(numCC==1,"numCC %d > 1, should not be using Format1a/b\n",numCC); - break; - case 1: // Channel Selection - break; - case 2: // Format 3 - break; - case 3: // Format 4 - break; - case 4: // Format 5 - break; - } - } - else { - harq_indication_fdd = (nfapi_harq_indication_fdd_rel13_t *)harq_indication; - num_ack_nak = harq_indication_fdd->number_of_ack_nack; - pdu = &harq_indication_fdd->harq_tb_n[0]; + switch (harq_indication_tdd->mode) { + case 0: // Format 1a/b + AssertFatal(numCC == 1, + "numCC %d > 1, should not be using Format1a/b\n", + numCC); + break; + case 1: // Channel Selection + break; + case 2: // Format 3 + break; + case 3: // Format 4 + break; + case 4: // Format 5 + break; + } + } else { + harq_indication_fdd = + (nfapi_harq_indication_fdd_rel13_t *) harq_indication; + num_ack_nak = harq_indication_fdd->number_of_ack_nack; + pdu = &harq_indication_fdd->harq_tb_n[0]; - uint8_t harq_pid = ((10*frameP) + subframeP + 10236)&7; + uint8_t harq_pid = ((10 * frameP) + subframeP + 10236) & 7; - switch (harq_indication_fdd->mode) { - case 0: // Format 1a/b (10.1.2.1) - AssertFatal(numCC==1,"numCC %d > 1, should not be using Format1a/b\n",numCC); - if (tmode[0]==1 || tmode[0]==2 || tmode[0]==5 || tmode[0]==6 || tmode[0]==7) { // NOTE: have to handle the case of TM9-10 with 1 antenna port - // single ACK/NAK bit - AssertFatal(num_ack_nak==1,"num_ack_nak %d > 1 for 1 CC and single-layer transmission\n",num_ack_nak); - AssertFatal(sched_ctl->round[CC_idP][harq_pid]<8,"Got ACK/NAK for inactive harq_pid %d for UE %d/%x\n",harq_pid,UE_id,rnti); - AssertFatal(pdu[0] == 1 || pdu[0] == 2 || pdu[0] == 4, - "Received ACK/NAK %d which is not 1 or 2 for harq_pid %d from UE %d/%x\n",pdu[0],harq_pid,UE_id,rnti); - LOG_D(MAC,"Received %d for harq_pid %d\n",pdu[0],harq_pid); + switch (harq_indication_fdd->mode) { + case 0: // Format 1a/b (10.1.2.1) + AssertFatal(numCC == 1, + "numCC %d > 1, should not be using Format1a/b\n", + numCC); + if (tmode[0] == 1 || tmode[0] == 2 || tmode[0] == 5 || tmode[0] == 6 || tmode[0] == 7) { // NOTE: have to handle the case of TM9-10 with 1 antenna port + // single ACK/NAK bit + AssertFatal(num_ack_nak == 1, + "num_ack_nak %d > 1 for 1 CC and single-layer transmission\n", + num_ack_nak); + AssertFatal(sched_ctl->round[CC_idP][harq_pid] < 8, + "Got ACK/NAK for inactive harq_pid %d for UE %d/%x\n", + harq_pid, UE_id, rnti); + AssertFatal(pdu[0] == 1 || pdu[0] == 2 + || pdu[0] == 4, + "Received ACK/NAK %d which is not 1 or 2 for harq_pid %d from UE %d/%x\n", + pdu[0], harq_pid, UE_id, rnti); + LOG_D(MAC, "Received %d for harq_pid %d\n", pdu[0], + harq_pid); - if (pdu[0] == 1) { // ACK - sched_ctl->round[CC_idP][harq_pid]=8; // release HARQ process - sched_ctl->tbcnt[CC_idP][harq_pid]=0; - } - else if (pdu[0] == 2 || pdu[0] == 4) // NAK (treat DTX as NAK) - sched_ctl->round[CC_idP][harq_pid]++; // increment round - } - else { - // one or two ACK/NAK bits - AssertFatal(num_ack_nak>2,"num_ack_nak %d > 2 for 1 CC and TM3/4/8/9/10\n",num_ack_nak); - if ((num_ack_nak==2) && (sched_ctl->round[CC_idP][harq_pid]<8) && (sched_ctl->tbcnt[CC_idP][harq_pid]==1) && (pdu[0] == 1) && (pdu[1] == 1)) { - sched_ctl->round[CC_idP][harq_pid]=8; - sched_ctl->tbcnt[CC_idP][harq_pid]=0; - } - if ((num_ack_nak==2) && (sched_ctl->round[CC_idP][harq_pid]<8) && (sched_ctl->tbcnt[CC_idP][harq_pid]==1) && (pdu[0] == 2) && (pdu[1] == 2)) - sched_ctl->round[CC_idP][harq_pid]++; - else if (((num_ack_nak==2) && (sched_ctl->round[CC_idP][harq_pid]<8) && (sched_ctl->tbcnt[0][harq_pid]==2) && (pdu[0] == 1) && (pdu[1] == 2)) || - ((num_ack_nak==2) && (sched_ctl->round[CC_idP][harq_pid]<8) && (sched_ctl->tbcnt[CC_idP][harq_pid]==2) && (pdu[0] == 2) && (pdu[1] == 1))) { - sched_ctl->round[CC_idP][harq_pid]++; - sched_ctl->tbcnt[CC_idP][harq_pid]=1; - } - else if ((num_ack_nak==2) && (sched_ctl->round[CC_idP][harq_pid]<8) && (sched_ctl->tbcnt[CC_idP][harq_pid]==2) && (pdu[0] == 2) && (pdu[1] == 2)) - sched_ctl->round[CC_idP][harq_pid]++; - else AssertFatal(1==0,"Illegal ACK/NAK/round combination (%d,%d,%d,%d,%d) for harq_pid %d, UE %d/%x\n", - num_ack_nak,sched_ctl->round[CC_idP][harq_pid],sched_ctl->round[CC_idP][harq_pid],pdu[0],pdu[1], harq_pid,UE_id, - rnti); - } - break; - case 1: // FDD Channel Selection (10.1.2.2.1), must be received for 2 serving cells - AssertFatal(numCC==2,"Should not receive harq indication with channel selection with %d active CCs\n", - numCC); + if (pdu[0] == 1) { // ACK + sched_ctl->round[CC_idP][harq_pid] = 8; // release HARQ process + sched_ctl->tbcnt[CC_idP][harq_pid] = 0; + } else if (pdu[0] == 2 || pdu[0] == 4) // NAK (treat DTX as NAK) + sched_ctl->round[CC_idP][harq_pid]++; // increment round + } else { + // one or two ACK/NAK bits + AssertFatal(num_ack_nak > 2, + "num_ack_nak %d > 2 for 1 CC and TM3/4/8/9/10\n", + num_ack_nak); + if ((num_ack_nak == 2) + && (sched_ctl->round[CC_idP][harq_pid] < 8) + && (sched_ctl->tbcnt[CC_idP][harq_pid] == 1) + && (pdu[0] == 1) && (pdu[1] == 1)) { + sched_ctl->round[CC_idP][harq_pid] = 8; + sched_ctl->tbcnt[CC_idP][harq_pid] = 0; + } + if ((num_ack_nak == 2) + && (sched_ctl->round[CC_idP][harq_pid] < 8) + && (sched_ctl->tbcnt[CC_idP][harq_pid] == 1) + && (pdu[0] == 2) && (pdu[1] == 2)) + sched_ctl->round[CC_idP][harq_pid]++; + else if (((num_ack_nak == 2) + && (sched_ctl->round[CC_idP][harq_pid] < 8) + && (sched_ctl->tbcnt[0][harq_pid] == 2) + && (pdu[0] == 1) && (pdu[1] == 2)) + || ((num_ack_nak == 2) + && (sched_ctl->round[CC_idP][harq_pid] < 8) + && (sched_ctl->tbcnt[CC_idP][harq_pid] == 2) + && (pdu[0] == 2) && (pdu[1] == 1))) { + sched_ctl->round[CC_idP][harq_pid]++; + sched_ctl->tbcnt[CC_idP][harq_pid] = 1; + } else if ((num_ack_nak == 2) + && (sched_ctl->round[CC_idP][harq_pid] < 8) + && (sched_ctl->tbcnt[CC_idP][harq_pid] == 2) + && (pdu[0] == 2) && (pdu[1] == 2)) + sched_ctl->round[CC_idP][harq_pid]++; + else + AssertFatal(1 == 0, + "Illegal ACK/NAK/round combination (%d,%d,%d,%d,%d) for harq_pid %d, UE %d/%x\n", + num_ack_nak, + sched_ctl->round[CC_idP][harq_pid], + sched_ctl->round[CC_idP][harq_pid], pdu[0], + pdu[1], harq_pid, UE_id, rnti); + } + break; + case 1: // FDD Channel Selection (10.1.2.2.1), must be received for 2 serving cells + AssertFatal(numCC == 2, + "Should not receive harq indication with channel selection with %d active CCs\n", + numCC); - if ((num_ack_nak == 2) && (sched_ctl->round[pCCid][harq_pid]<8) && (sched_ctl->round[1-pCCid][harq_pid]<8) && (sched_ctl->tbcnt[pCCid][harq_pid]==1) && (sched_ctl->tbcnt[1-pCCid][harq_pid]==1)) { - AssertFatal(pdu[0]<=3,"pdu[0] %d is not ACK/NAK/DTX\n",pdu[0]); - AssertFatal(pdu[1]<=3,"pdu[1] %d is not ACK/NAK/DTX\n",pdu[1]); - if (pdu[0] == 1) sched_ctl->round[pCCid][harq_pid]=8; - else sched_ctl->round[pCCid][harq_pid]++; - if (pdu[1] == 1) sched_ctl->round[1-pCCid][harq_pid]=8; - else sched_ctl->round[1-pCCid][harq_pid]++; - } // A=2 - else if ((num_ack_nak == 3) && (sched_ctl->round[pCCid][harq_pid]<8) && (sched_ctl->tbcnt[pCCid][harq_pid]==2) && (sched_ctl->round[1-pCCid][harq_pid]<8) && (sched_ctl->tbcnt[1-pCCid][harq_pid]==1)) { - AssertFatal(pdu[0]<=3,"pdu[0] %d is not ACK/NAK/DTX\n",pdu[0]); - AssertFatal(pdu[1]<=3,"pdu[1] %d is not ACK/NAK/DTX\n",pdu[1]); - AssertFatal(pdu[2]<=3,"pdu[2] %d is not ACK/NAK/DTX\n",pdu[2]); - AssertFatal(sched_ctl->tbcnt[pCCid][harq_pid] == 2,"sched_ctl->tbcnt[%d][%d] != 2 for UE %d/%x\n",pCCid,harq_pid,UE_id,rnti); - AssertFatal(sched_ctl->tbcnt[1-pCCid][harq_pid] == 1,"sched_ctl->tbcnt[%d][%d] != 1 for UE %d/%x\n",1-pCCid,harq_pid,UE_id,rnti); - if ((pdu[0] == 1) && (pdu[1] == 1)) { // both ACK - sched_ctl->round[pCCid][harq_pid]=8; - sched_ctl->tbcnt[pCCid][harq_pid]=0; - } - else if (((pdu[0] == 2) && (pdu[1] == 1))|| - ((pdu[0] == 1) && (pdu[1] == 2))){ - sched_ctl->round[pCCid][harq_pid]++; - sched_ctl->tbcnt[pCCid][harq_pid]=1; - } - else - sched_ctl->round[pCCid][harq_pid]++; + if ((num_ack_nak == 2) + && (sched_ctl->round[pCCid][harq_pid] < 8) + && (sched_ctl->round[1 - pCCid][harq_pid] < 8) + && (sched_ctl->tbcnt[pCCid][harq_pid] == 1) + && (sched_ctl->tbcnt[1 - pCCid][harq_pid] == 1)) { + AssertFatal(pdu[0] <= 3, "pdu[0] %d is not ACK/NAK/DTX\n", + pdu[0]); + AssertFatal(pdu[1] <= 3, "pdu[1] %d is not ACK/NAK/DTX\n", + pdu[1]); + if (pdu[0] == 1) + sched_ctl->round[pCCid][harq_pid] = 8; + else + sched_ctl->round[pCCid][harq_pid]++; + if (pdu[1] == 1) + sched_ctl->round[1 - pCCid][harq_pid] = 8; + else + sched_ctl->round[1 - pCCid][harq_pid]++; + } // A=2 + else if ((num_ack_nak == 3) + && (sched_ctl->round[pCCid][harq_pid] < 8) + && (sched_ctl->tbcnt[pCCid][harq_pid] == 2) + && (sched_ctl->round[1 - pCCid][harq_pid] < 8) + && (sched_ctl->tbcnt[1 - pCCid][harq_pid] == 1)) { + AssertFatal(pdu[0] <= 3, "pdu[0] %d is not ACK/NAK/DTX\n", + pdu[0]); + AssertFatal(pdu[1] <= 3, "pdu[1] %d is not ACK/NAK/DTX\n", + pdu[1]); + AssertFatal(pdu[2] <= 3, "pdu[2] %d is not ACK/NAK/DTX\n", + pdu[2]); + AssertFatal(sched_ctl->tbcnt[pCCid][harq_pid] == 2, + "sched_ctl->tbcnt[%d][%d] != 2 for UE %d/%x\n", + pCCid, harq_pid, UE_id, rnti); + AssertFatal(sched_ctl->tbcnt[1 - pCCid][harq_pid] == 1, + "sched_ctl->tbcnt[%d][%d] != 1 for UE %d/%x\n", + 1 - pCCid, harq_pid, UE_id, rnti); + if ((pdu[0] == 1) && (pdu[1] == 1)) { // both ACK + sched_ctl->round[pCCid][harq_pid] = 8; + sched_ctl->tbcnt[pCCid][harq_pid] = 0; + } else if (((pdu[0] == 2) && (pdu[1] == 1)) || + ((pdu[0] == 1) && (pdu[1] == 2))) { + sched_ctl->round[pCCid][harq_pid]++; + sched_ctl->tbcnt[pCCid][harq_pid] = 1; + } else + sched_ctl->round[pCCid][harq_pid]++; - if (pdu[2] == 1) sched_ctl->round[1-pCCid][harq_pid]=8; - else sched_ctl->round[1-pCCid][harq_pid]++; - } // A=3 primary cell has 2 TBs - else if ((num_ack_nak == 3) && (sched_ctl->round[1-pCCid][harq_pid]<8) && (sched_ctl->round[pCCid][harq_pid]<8) && (sched_ctl->tbcnt[1-pCCid][harq_pid]==2) && (sched_ctl->tbcnt[pCCid][harq_pid]==1)) { - AssertFatal(pdu[0]<=3,"pdu[0] %d is not ACK/NAK/DTX\n",pdu[0]); - AssertFatal(pdu[1]<=3,"pdu[1] %d is not ACK/NAK/DTX\n",pdu[1]); - AssertFatal(pdu[2]<=3,"pdu[2] %d is not ACK/NAK/DTX\n",pdu[2]); - AssertFatal(sched_ctl->tbcnt[1-pCCid][harq_pid] == 2,"sched_ctl->tbcnt[%d][%d] != 2 for UE %d/%x\n",1-pCCid,harq_pid,UE_id,rnti); - AssertFatal(sched_ctl->tbcnt[pCCid][harq_pid] == 1,"sched_ctl->tbcnt[%d][%d] != 1 for UE %d/%x\n",pCCid,harq_pid,UE_id,rnti); - if ((pdu[0] == 1) && (pdu[1] == 1)) { // both ACK - sched_ctl->round[1-pCCid][harq_pid]=8; - sched_ctl->tbcnt[1-pCCid][harq_pid]=0; - } - else if (((pdu[0] >= 2) && (pdu[1] == 1))|| - ((pdu[0] == 1) && (pdu[1] >= 2))){ // one ACK - sched_ctl->round[1-pCCid][harq_pid]++; - sched_ctl->tbcnt[1-pCCid][harq_pid]=1; - } - else // both NAK/DTX - sched_ctl->round[1-pCCid][harq_pid]++; + if (pdu[2] == 1) + sched_ctl->round[1 - pCCid][harq_pid] = 8; + else + sched_ctl->round[1 - pCCid][harq_pid]++; + } // A=3 primary cell has 2 TBs + else if ((num_ack_nak == 3) + && (sched_ctl->round[1 - pCCid][harq_pid] < 8) + && (sched_ctl->round[pCCid][harq_pid] < 8) + && (sched_ctl->tbcnt[1 - pCCid][harq_pid] == 2) + && (sched_ctl->tbcnt[pCCid][harq_pid] == 1)) { + AssertFatal(pdu[0] <= 3, "pdu[0] %d is not ACK/NAK/DTX\n", + pdu[0]); + AssertFatal(pdu[1] <= 3, "pdu[1] %d is not ACK/NAK/DTX\n", + pdu[1]); + AssertFatal(pdu[2] <= 3, "pdu[2] %d is not ACK/NAK/DTX\n", + pdu[2]); + AssertFatal(sched_ctl->tbcnt[1 - pCCid][harq_pid] == 2, + "sched_ctl->tbcnt[%d][%d] != 2 for UE %d/%x\n", + 1 - pCCid, harq_pid, UE_id, rnti); + AssertFatal(sched_ctl->tbcnt[pCCid][harq_pid] == 1, + "sched_ctl->tbcnt[%d][%d] != 1 for UE %d/%x\n", + pCCid, harq_pid, UE_id, rnti); + if ((pdu[0] == 1) && (pdu[1] == 1)) { // both ACK + sched_ctl->round[1 - pCCid][harq_pid] = 8; + sched_ctl->tbcnt[1 - pCCid][harq_pid] = 0; + } else if (((pdu[0] >= 2) && (pdu[1] == 1)) + || ((pdu[0] == 1) && (pdu[1] >= 2))) { // one ACK + sched_ctl->round[1 - pCCid][harq_pid]++; + sched_ctl->tbcnt[1 - pCCid][harq_pid] = 1; + } else // both NAK/DTX + sched_ctl->round[1 - pCCid][harq_pid]++; - if (pdu[2] == 1) sched_ctl->round[pCCid][harq_pid]=8; - else sched_ctl->round[pCCid][harq_pid]++; - } // A=3 secondary cell has 2 TBs + if (pdu[2] == 1) + sched_ctl->round[pCCid][harq_pid] = 8; + else + sched_ctl->round[pCCid][harq_pid]++; + } // A=3 secondary cell has 2 TBs #if MAX_NUM_CCs>1 - else if ((num_ack_nak == 4) && (sched_ctl->round[0][harq_pid]<8) && (sched_ctl->round[1][harq_pid]<8) && (sched_ctl->tbcnt[1-pCCid][harq_pid]==2) && (sched_ctl->tbcnt[pCCid][harq_pid]==2)) { - AssertFatal(pdu[0]<=3,"pdu[0] %d is not ACK/NAK/DTX\n",pdu[0]); - AssertFatal(pdu[1]<=3,"pdu[1] %d is not ACK/NAK/DTX\n",pdu[1]); - AssertFatal(pdu[2]<=3,"pdu[2] %d is not ACK/NAK/DTX\n",pdu[2]); - AssertFatal(pdu[3]<=3,"pdu[3] %d is not ACK/NAK/DTX\n",pdu[3]); - AssertFatal(sched_ctl->tbcnt[0][harq_pid] == 2,"sched_ctl->tbcnt[0][%d] != 2 for UE %d/%x\n",harq_pid,UE_id,rnti); - AssertFatal(sched_ctl->tbcnt[1][harq_pid] == 2,"sched_ctl->tbcnt[1][%d] != 2 for UE %d/%x\n",harq_pid,UE_id,rnti); - if ((pdu[0] == 1) && (pdu[1] == 1)) { // both ACK - sched_ctl->round[0][harq_pid]=8; - sched_ctl->tbcnt[0][harq_pid]=0; - } - else if (((pdu[0] >= 2) && (pdu[1] == 1))|| - ((pdu[0] == 1) && (pdu[1] >= 2))){ // one ACK - sched_ctl->round[0][harq_pid]++; - sched_ctl->tbcnt[0][harq_pid]=1; - } - else // both NAK/DTX - sched_ctl->round[0][harq_pid]++; + else if ((num_ack_nak == 4) + && (sched_ctl->round[0][harq_pid] < 8) + && (sched_ctl->round[1][harq_pid] < 8) + && (sched_ctl->tbcnt[1 - pCCid][harq_pid] == 2) + && (sched_ctl->tbcnt[pCCid][harq_pid] == 2)) { + AssertFatal(pdu[0] <= 3, "pdu[0] %d is not ACK/NAK/DTX\n", + pdu[0]); + AssertFatal(pdu[1] <= 3, "pdu[1] %d is not ACK/NAK/DTX\n", + pdu[1]); + AssertFatal(pdu[2] <= 3, "pdu[2] %d is not ACK/NAK/DTX\n", + pdu[2]); + AssertFatal(pdu[3] <= 3, "pdu[3] %d is not ACK/NAK/DTX\n", + pdu[3]); + AssertFatal(sched_ctl->tbcnt[0][harq_pid] == 2, + "sched_ctl->tbcnt[0][%d] != 2 for UE %d/%x\n", + harq_pid, UE_id, rnti); + AssertFatal(sched_ctl->tbcnt[1][harq_pid] == 2, + "sched_ctl->tbcnt[1][%d] != 2 for UE %d/%x\n", + harq_pid, UE_id, rnti); + if ((pdu[0] == 1) && (pdu[1] == 1)) { // both ACK + sched_ctl->round[0][harq_pid] = 8; + sched_ctl->tbcnt[0][harq_pid] = 0; + } else if (((pdu[0] >= 2) && (pdu[1] == 1)) + || ((pdu[0] == 1) && (pdu[1] >= 2))) { // one ACK + sched_ctl->round[0][harq_pid]++; + sched_ctl->tbcnt[0][harq_pid] = 1; + } else // both NAK/DTX + sched_ctl->round[0][harq_pid]++; - if ((pdu[2] == 1) && (pdu[3] == 1)) { // both ACK - sched_ctl->round[1][harq_pid]=8; - sched_ctl->tbcnt[1][harq_pid]=0; - } - else if (((pdu[2] >= 2) && (pdu[3] == 1))|| - ((pdu[2] == 1) && (pdu[3] >= 2))){ // one ACK - sched_ctl->round[1][harq_pid]++; - sched_ctl->tbcnt[1][harq_pid]=1; - } - else // both NAK/DTX - sched_ctl->round[1][harq_pid]++; - } // A=4 both serving cells have 2 TBs + if ((pdu[2] == 1) && (pdu[3] == 1)) { // both ACK + sched_ctl->round[1][harq_pid] = 8; + sched_ctl->tbcnt[1][harq_pid] = 0; + } else if (((pdu[2] >= 2) && (pdu[3] == 1)) + || ((pdu[2] == 1) && (pdu[3] >= 2))) { // one ACK + sched_ctl->round[1][harq_pid]++; + sched_ctl->tbcnt[1][harq_pid] = 1; + } else // both NAK/DTX + sched_ctl->round[1][harq_pid]++; + } // A=4 both serving cells have 2 TBs #endif - break; - case 2: // Format 3 - AssertFatal(numCC>2,"Should not receive harq indication with FDD format 3 with %d < 3 active CCs\n", - numCC); - for (i=0,j=0;iround[i][harq_pid]<8)) { - if (tmode[i]==1 || tmode[i]==2 || tmode[0]==5 || tmode[0]==6 || tmode[0]==7) { - if (pdu[j] == 1) { - sched_ctl->round[i][harq_pid]=8; - sched_ctl->tbcnt[i][harq_pid]=0; - } - else if (pdu[j] == 2) sched_ctl->round[i][harq_pid]++; - else AssertFatal(1==0,"Illegal harq_ack value for CC %d harq_pid %d (%d) UE %d/%x\n", - i,harq_pid,pdu[j],UE_id,rnti); - j++; - } - else if (spatial_bundling == 0) { - if ((sched_ctl->tbcnt[i][harq_pid]==2) && (pdu[j] == 1) && (pdu[j+1]==1)) { - sched_ctl->round[i][harq_pid]=8; - sched_ctl->tbcnt[i][harq_pid]=0; - } - else if ((sched_ctl->tbcnt[i][harq_pid]==2) && (pdu[j] == 1) && (pdu[j+1]==2)) { - sched_ctl->round[i][harq_pid]++; - sched_ctl->tbcnt[i][harq_pid]=1; - } - else if ((sched_ctl->tbcnt[i][harq_pid]==2) && (pdu[j] == 2) && (pdu[j+1]==1)) { - sched_ctl->round[i][harq_pid]++; - sched_ctl->tbcnt[i][harq_pid]=1; - } - else if ((sched_ctl->tbcnt[i][harq_pid]==2) && (pdu[j] == 2) && (pdu[j+1]==2)) { - sched_ctl->round[i][harq_pid]++; - } - else AssertFatal(1==0,"Illegal combination for CC %d harq_pid %d (%d,%d,%d) UE %d/%x\n", - i,harq_pid,sched_ctl->tbcnt[i][harq_pid],pdu[j],pdu[j+1],UE_id,rnti); - j+=2; - } - else if (spatial_bundling == 1) { - if (pdu[j] == 1) { - sched_ctl->round[i][harq_pid]=8; - sched_ctl->tbcnt[i][harq_pid]=0; - } - else if (pdu[j] == 2) { - sched_ctl->round[i][harq_pid]++; - } - else AssertFatal(1==0,"Illegal hack_nak value %d for CC %d harq_pid %d UE %d/%x\n", - pdu[j],i,harq_pid,UE_id,rnti); - j++; - } - else AssertFatal(1==0,"Illegal value for spatial_bundling %d\n",spatial_bundling); - } - } - break; - case 3: // Format 4 - AssertFatal(1==0,"Should not receive harq indication with Format 4\n"); - break; - case 4: // Format 5 - AssertFatal(1==0,"Should not receive harq indication with Format 5\n"); - break; + break; + case 2: // Format 3 + AssertFatal(numCC > 2, + "Should not receive harq indication with FDD format 3 with %d < 3 active CCs\n", + numCC); + for (i = 0, j = 0; i < numCC; i++) { + if ((sched_ctl->round[i][harq_pid] < 8)) { + if (tmode[i] == 1 || tmode[i] == 2 || tmode[0] == 5 + || tmode[0] == 6 || tmode[0] == 7) { + if (pdu[j] == 1) { + sched_ctl->round[i][harq_pid] = 8; + sched_ctl->tbcnt[i][harq_pid] = 0; + } else if (pdu[j] == 2) + sched_ctl->round[i][harq_pid]++; + else + AssertFatal(1 == 0, + "Illegal harq_ack value for CC %d harq_pid %d (%d) UE %d/%x\n", + i, harq_pid, pdu[j], UE_id, rnti); + j++; + } else if (spatial_bundling == 0) { + if ((sched_ctl->tbcnt[i][harq_pid] == 2) + && (pdu[j] == 1) && (pdu[j + 1] == 1)) { + sched_ctl->round[i][harq_pid] = 8; + sched_ctl->tbcnt[i][harq_pid] = 0; + } else if ((sched_ctl->tbcnt[i][harq_pid] == 2) + && (pdu[j] == 1) && (pdu[j + 1] == 2)) { + sched_ctl->round[i][harq_pid]++; + sched_ctl->tbcnt[i][harq_pid] = 1; + } else if ((sched_ctl->tbcnt[i][harq_pid] == 2) + && (pdu[j] == 2) && (pdu[j + 1] == 1)) { + sched_ctl->round[i][harq_pid]++; + sched_ctl->tbcnt[i][harq_pid] = 1; + } else if ((sched_ctl->tbcnt[i][harq_pid] == 2) + && (pdu[j] == 2) && (pdu[j + 1] == 2)) { + sched_ctl->round[i][harq_pid]++; + } else + AssertFatal(1 == 0, + "Illegal combination for CC %d harq_pid %d (%d,%d,%d) UE %d/%x\n", + i, harq_pid, + sched_ctl->tbcnt[i][harq_pid], + pdu[j], pdu[j + 1], UE_id, rnti); + j += 2; + } else if (spatial_bundling == 1) { + if (pdu[j] == 1) { + sched_ctl->round[i][harq_pid] = 8; + sched_ctl->tbcnt[i][harq_pid] = 0; + } else if (pdu[j] == 2) { + sched_ctl->round[i][harq_pid]++; + } else + AssertFatal(1 == 0, + "Illegal hack_nak value %d for CC %d harq_pid %d UE %d/%x\n", + pdu[j], i, harq_pid, UE_id, rnti); + j++; + } else + AssertFatal(1 == 0, + "Illegal value for spatial_bundling %d\n", + spatial_bundling); + } + } + break; + case 3: // Format 4 + AssertFatal(1 == 0, + "Should not receive harq indication with Format 4\n"); + break; + case 4: // Format 5 + AssertFatal(1 == 0, + "Should not receive harq indication with Format 5\n"); + break; + } } - } } -void extract_pucch_csi(module_id_t mod_idP,int CC_idP,int UE_id, frame_t frameP,sub_frame_t subframeP,uint8_t *pdu, uint8_t length) +void +extract_pucch_csi(module_id_t mod_idP, int CC_idP, int UE_id, + frame_t frameP, sub_frame_t subframeP, + uint8_t * pdu, uint8_t length) { - UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; - UE_sched_ctrl *sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - COMMON_channels_t *cc=&RC.mac[mod_idP]->common_channels[CC_idP]; - struct CQI_ReportPeriodic *cqi_ReportPeriodic; - int no_pmi; - uint8_t Ltab[6] = {0,2,4,4,4,4}; - uint8_t Jtab[6] = {0,2,2,3,4,4}; - int feedback_cnt; + UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; + UE_sched_ctrl *sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + COMMON_channels_t *cc = &RC.mac[mod_idP]->common_channels[CC_idP]; + struct CQI_ReportPeriodic *cqi_ReportPeriodic; + int no_pmi; + uint8_t Ltab[6] = { 0, 2, 4, 4, 4, 4 }; + uint8_t Jtab[6] = { 0, 2, 2, 3, 4, 4 }; + int feedback_cnt; - AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated != NULL, "physicalConfigDedicated is null for UE %d\n",UE_id); - AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->cqi_ReportConfig != NULL,"cqi_ReportConfig is null for UE %d\n",UE_id); - AssertFatal((cqi_ReportPeriodic = UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->cqi_ReportConfig->cqi_ReportPeriodic)!=NULL, - "cqi_ReportPeriodic is null for UE %d\n",UE_id); + AssertFatal(UE_list->UE_template[CC_idP][UE_id]. + physicalConfigDedicated != NULL, + "physicalConfigDedicated is null for UE %d\n", UE_id); + AssertFatal(UE_list-> + UE_template[CC_idP][UE_id].physicalConfigDedicated-> + cqi_ReportConfig != NULL, + "cqi_ReportConfig is null for UE %d\n", UE_id); + AssertFatal((cqi_ReportPeriodic = + UE_list-> + UE_template[CC_idP][UE_id].physicalConfigDedicated-> + cqi_ReportConfig->cqi_ReportPeriodic) != NULL, + "cqi_ReportPeriodic is null for UE %d\n", UE_id); - // determine feedback mode - AssertFatal(cqi_ReportPeriodic->present != CQI_ReportPeriodic_PR_NOTHING, - "cqi_ReportPeriodic->present == CQI_ReportPeriodic_PR_NOTHING!\n"); - AssertFatal(cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic.present != CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_NOTHING, - "cqi_ReportPeriodic->cqi_FormatIndicatorPeriodic.choice.setup.present == CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_NOTHING!\n"); + // determine feedback mode + AssertFatal(cqi_ReportPeriodic->present != + CQI_ReportPeriodic_PR_NOTHING, + "cqi_ReportPeriodic->present == CQI_ReportPeriodic_PR_NOTHING!\n"); + AssertFatal(cqi_ReportPeriodic->choice. + setup.cqi_FormatIndicatorPeriodic.present != + CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_NOTHING, + "cqi_ReportPeriodic->cqi_FormatIndicatorPeriodic.choice.setup.present == CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_NOTHING!\n"); - uint16_t Npd,N_OFFSET_CQI; - int H,K,bandwidth_part,L,Lmask; - int ri = sched_ctl->periodic_ri_received[CC_idP]; + uint16_t Npd, N_OFFSET_CQI; + int H, K, bandwidth_part, L, Lmask; + int ri = sched_ctl->periodic_ri_received[CC_idP]; - get_csi_params(cc,cqi_ReportPeriodic,&Npd,&N_OFFSET_CQI,&H); - K =(H-1)/Jtab[cc->mib->message.dl_Bandwidth]; - L = Ltab[cc->mib->message.dl_Bandwidth]; - Lmask =L-1; - feedback_cnt = (((frameP*10)+subframeP)/Npd)%H; + get_csi_params(cc, cqi_ReportPeriodic, &Npd, &N_OFFSET_CQI, &H); + K = (H - 1) / Jtab[cc->mib->message.dl_Bandwidth]; + L = Ltab[cc->mib->message.dl_Bandwidth]; + Lmask = L - 1; + feedback_cnt = (((frameP * 10) + subframeP) / Npd) % H; - if (feedback_cnt>0) bandwidth_part = (feedback_cnt-1)%K; - else bandwidth_part = 0; + if (feedback_cnt > 0) + bandwidth_part = (feedback_cnt - 1) % K; + else + bandwidth_part = 0; - switch(get_tmode(mod_idP,CC_idP,UE_id)) { - case 1: - case 2: - case 3: - case 7: - no_pmi=1; - break; - case 4: - case 5: - case 6: - no_pmi=0; - break; - default: - // note: need to check TM8-10 without PMI/RI or with 1 antenna port (see Section 5.2.3.3.1 from 36.213) - no_pmi=0; - } - - if ((cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic.present == CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_widebandCQI) || - (feedback_cnt==0)){ - // Note: This implements only Tables: 5.3.3.1-1,5.3.3.1-1A and 5.3.3.1-2 from 36.213 (1,2,4 antenna ports Wideband CQI/PMI) - - if (no_pmi == 1) { // get spatial_diffcqi if needed - sched_ctl->periodic_wideband_cqi[CC_idP] = pdu[0]&0xF; - sched_ctl->periodic_wideband_spatial_diffcqi[CC_idP] = (pdu[0]>>4)&7; + switch (get_tmode(mod_idP, CC_idP, UE_id)) { + case 1: + case 2: + case 3: + case 7: + no_pmi = 1; + break; + case 4: + case 5: + case 6: + no_pmi = 0; + break; + default: + // note: need to check TM8-10 without PMI/RI or with 1 antenna port (see Section 5.2.3.3.1 from 36.213) + no_pmi = 0; } - else if ((cc->p_eNB==2) && (ri==1)) { - // p=2 Rank 1 wideband CQI/PMI 6 bits - sched_ctl->periodic_wideband_cqi[CC_idP] = pdu[0]&0xF; - sched_ctl->periodic_wideband_pmi[CC_idP] = (pdu[0]>>4)&3; - } - else if ((cc->p_eNB==2) && (ri>1)) { - // p=2 Rank 2 wideband CQI/PMI 8 bits - sched_ctl->periodic_wideband_cqi[CC_idP] = pdu[0]&0xF; - sched_ctl->periodic_wideband_spatial_diffcqi[CC_idP] = (pdu[0]>>4)&7; - sched_ctl->periodic_wideband_pmi[CC_idP] = (pdu[0]>>7)&1; - } - else if ((cc->p_eNB==4) && (ri==1)) { - // p=4 Rank 1 wideband CQI/PMI 8 bits - sched_ctl->periodic_wideband_cqi[CC_idP] = pdu[0]&0xF; - sched_ctl->periodic_wideband_pmi[CC_idP] = (pdu[0]>>4)&0x0F; + if ((cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic. + present == + CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_widebandCQI) + || (feedback_cnt == 0)) { + // Note: This implements only Tables: 5.3.3.1-1,5.3.3.1-1A and 5.3.3.1-2 from 36.213 (1,2,4 antenna ports Wideband CQI/PMI) + + if (no_pmi == 1) { // get spatial_diffcqi if needed + sched_ctl->periodic_wideband_cqi[CC_idP] = pdu[0] & 0xF; + sched_ctl->periodic_wideband_spatial_diffcqi[CC_idP] = + (pdu[0] >> 4) & 7; + } else if ((cc->p_eNB == 2) && (ri == 1)) { + // p=2 Rank 1 wideband CQI/PMI 6 bits + sched_ctl->periodic_wideband_cqi[CC_idP] = pdu[0] & 0xF; + sched_ctl->periodic_wideband_pmi[CC_idP] = (pdu[0] >> 4) & 3; + } else if ((cc->p_eNB == 2) && (ri > 1)) { + // p=2 Rank 2 wideband CQI/PMI 8 bits + sched_ctl->periodic_wideband_cqi[CC_idP] = pdu[0] & 0xF; + sched_ctl->periodic_wideband_spatial_diffcqi[CC_idP] = + (pdu[0] >> 4) & 7; + sched_ctl->periodic_wideband_pmi[CC_idP] = (pdu[0] >> 7) & 1; + } else if ((cc->p_eNB == 4) && (ri == 1)) { + // p=4 Rank 1 wideband CQI/PMI 8 bits + sched_ctl->periodic_wideband_cqi[CC_idP] = pdu[0] & 0xF; + sched_ctl->periodic_wideband_pmi[CC_idP] = + (pdu[0] >> 4) & 0x0F; + + } else if ((cc->p_eNB == 4) && (ri > 1)) { + // p=4 Rank 2 wideband CQI/PMI 11 bits + sched_ctl->periodic_wideband_cqi[CC_idP] = pdu[0] & 0xF; + sched_ctl->periodic_wideband_spatial_diffcqi[CC_idP] = + (pdu[0] >> 4) & 7; + sched_ctl->periodic_wideband_pmi[CC_idP] = (pdu[0] >> 7) & 0xF; + } else + AssertFatal(1 == 0, + "illegal combination p %d, ri %d, no_pmi %d\n", + cc->p_eNB, ri, no_pmi); + } else if (cqi_ReportPeriodic->choice. + setup.cqi_FormatIndicatorPeriodic.present == + CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_subbandCQI) + { + // This is Table 5.2.3.3.2-2 for 36.213 + if (ri == 1) { + //4+Ltab[cc->mib->message.dl_Bandwidth] bits + sched_ctl->periodic_subband_cqi[CC_idP][(bandwidth_part * L) + + ((pdu[0] >> 4) & + Lmask)] = + pdu[0] & 0xF; + } else if (ri > 1) { + //7+Ltab[cc->mib->message.dl_Bandwidth] bits; + sched_ctl-> + periodic_subband_spatial_diffcqi[CC_idP][(bandwidth_part * + L) + + ((pdu[0] >> 7) & + Lmask)] = + (pdu[0] >> 4) & 7; + sched_ctl->periodic_subband_cqi[CC_idP][(bandwidth_part * L) + + ((pdu[0] >> 7) & + Lmask)] = + pdu[0] & 0xF; + } } - else if ((cc->p_eNB==4) && (ri>1)) { - // p=4 Rank 2 wideband CQI/PMI 11 bits - sched_ctl->periodic_wideband_cqi[CC_idP] = pdu[0]&0xF; - sched_ctl->periodic_wideband_spatial_diffcqi[CC_idP] = (pdu[0]>>4)&7; - sched_ctl->periodic_wideband_pmi[CC_idP] = (pdu[0]>>7)&0xF; - } - else AssertFatal(1==0,"illegal combination p %d, ri %d, no_pmi %d\n",cc->p_eNB,ri,no_pmi); - } - else if (cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic.present == CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_subbandCQI) { - // This is Table 5.2.3.3.2-2 for 36.213 - if (ri==1) { - //4+Ltab[cc->mib->message.dl_Bandwidth] bits - sched_ctl->periodic_subband_cqi[CC_idP][(bandwidth_part*L)+((pdu[0]>>4)&Lmask)] = pdu[0]&0xF; - } - else if (ri>1) { - //7+Ltab[cc->mib->message.dl_Bandwidth] bits; - sched_ctl->periodic_subband_spatial_diffcqi[CC_idP][(bandwidth_part*L)+((pdu[0]>>7)&Lmask)] = (pdu[0]>>4)&7; - sched_ctl->periodic_subband_cqi[CC_idP][(bandwidth_part*L)+((pdu[0]>>7)&Lmask)] = pdu[0]&0xF; - } - } } -void extract_pusch_csi(module_id_t mod_idP,int CC_idP,int UE_id, frame_t frameP,sub_frame_t subframeP,uint8_t *pdu, uint8_t length) +void +extract_pusch_csi(module_id_t mod_idP, int CC_idP, int UE_id, + frame_t frameP, sub_frame_t subframeP, + uint8_t * pdu, uint8_t length) { - UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; - COMMON_channels_t *cc = &RC.mac[mod_idP]->common_channels[CC_idP]; - UE_sched_ctrl *sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - int Ntab[6] = {0,4,7,9,10,13}; - int Ntab_uesel[6] = {0,8,13,17,19,25}; - int Ltab_uesel[6] = {0,6,9,13,15,18}; - int Mtab_uesel[6] = {0,1,3,5,6,6}; - int v[6]; - int i; - uint64_t p = *(uint64_t*)pdu; - int curbyte, curbit; - CQI_ReportModeAperiodic_t *cqi_ReportModeAperiodic; + UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; + COMMON_channels_t *cc = &RC.mac[mod_idP]->common_channels[CC_idP]; + UE_sched_ctrl *sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + int Ntab[6] = { 0, 4, 7, 9, 10, 13 }; + int Ntab_uesel[6] = { 0, 8, 13, 17, 19, 25 }; + int Ltab_uesel[6] = { 0, 6, 9, 13, 15, 18 }; + int Mtab_uesel[6] = { 0, 1, 3, 5, 6, 6 }; + int v[6]; + int i; + uint64_t p = *(uint64_t *) pdu; + int curbyte, curbit; + CQI_ReportModeAperiodic_t *cqi_ReportModeAperiodic; - AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated != NULL, "physicalConfigDedicated is null for UE %d\n",UE_id); - AssertFatal(UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->cqi_ReportConfig != NULL,"cqi_ReportConfig is null for UE %d\n",UE_id); - AssertFatal((cqi_ReportModeAperiodic = UE_list->UE_template[CC_idP][UE_id].physicalConfigDedicated->cqi_ReportConfig->cqi_ReportModeAperiodic)!=NULL, - "cqi_ReportModeAperiodic is null for UE %d\n",UE_id); + AssertFatal(UE_list->UE_template[CC_idP][UE_id]. + physicalConfigDedicated != NULL, + "physicalConfigDedicated is null for UE %d\n", UE_id); + AssertFatal(UE_list-> + UE_template[CC_idP][UE_id].physicalConfigDedicated-> + cqi_ReportConfig != NULL, + "cqi_ReportConfig is null for UE %d\n", UE_id); + AssertFatal((cqi_ReportModeAperiodic = + UE_list-> + UE_template[CC_idP][UE_id].physicalConfigDedicated-> + cqi_ReportConfig->cqi_ReportModeAperiodic) != NULL, + "cqi_ReportModeAperiodic is null for UE %d\n", UE_id); - int N = Ntab[cc->mib->message.dl_Bandwidth]; - int tmode = get_tmode(mod_idP,CC_idP,UE_id); - int ri = sched_ctl->aperiodic_ri_received[CC_idP]; - int r,diffcqi0=0,diffcqi1=0,pmi_uesel=0; - int bw = cc->mib->message.dl_Bandwidth; - int m; + int N = Ntab[cc->mib->message.dl_Bandwidth]; + int tmode = get_tmode(mod_idP, CC_idP, UE_id); + int ri = sched_ctl->aperiodic_ri_received[CC_idP]; + int r, diffcqi0 = 0, diffcqi1 = 0, pmi_uesel = 0; + int bw = cc->mib->message.dl_Bandwidth; + int m; - switch(*cqi_ReportModeAperiodic) { - case CQI_ReportModeAperiodic_rm12: - AssertFatal(0==1, "to be fixed, don't use p but pdu directly\n"); - // wideband multiple PMI (TM4/6), Table 5.2.2.6.1-1 (for TM4/6) - AssertFatal(tmode==4 || tmode==6 || tmode==8|| tmode==9 || tmode==10,"Illegal transmission mode %d for CQI_ReportModeAperiodic_rm12\n",tmode); - if (tmode <= 6) { //Table 5.2.2.6.1-1 36.213 - if ((ri==1) && (cc->p_eNB==2)) { - sched_ctl->aperiodic_wideband_cqi0[CC_idP] = (uint8_t)(p&0x0F); p>>=4; - for (i=0;iaperiodic_subband_pmi[CC_idP][i] = (uint8_t)(p&0x03); - p>>=2; - } - } - if ((ri==2) && (cc->p_eNB==2)) { - sched_ctl->aperiodic_wideband_cqi0[CC_idP] = (uint8_t)(p&0x0F); p>>=4; - sched_ctl->aperiodic_wideband_cqi1[CC_idP] = (uint8_t)(p&0x0F); p>>=4; - for (i=0;iaperiodic_subband_pmi[CC_idP][i] = (uint8_t)(p&0x01); - p>>=1; - } - } - if ((ri==1) && (cc->p_eNB==4)) { - sched_ctl->aperiodic_wideband_cqi0[CC_idP] = (uint8_t)(p&0x0F); p>>=4; - for (i=0;iaperiodic_subband_pmi[CC_idP][i] = (uint8_t)(p&0x03); - p>>=4; - } - } - if ((ri==2) && (cc->p_eNB==4)) { - sched_ctl->aperiodic_wideband_cqi0[CC_idP] = (uint8_t)(p&0x0F); p>>=4; - sched_ctl->aperiodic_wideband_cqi1[CC_idP] = (uint8_t)(p&0x0F); p>>=4; - for (i=0;iaperiodic_subband_pmi[CC_idP][i] = (uint8_t)(p&0x01); - p>>=4; - } - } - } // if (tmode <= 6) { //Table 5.2.2.6.1-1 36.213 - else { - AssertFatal(1==0,"support for TM 8-10 to be done\n"); - } + switch (*cqi_ReportModeAperiodic) { + case CQI_ReportModeAperiodic_rm12: + AssertFatal(0 == 1, "to be fixed, don't use p but pdu directly\n"); + // wideband multiple PMI (TM4/6), Table 5.2.2.6.1-1 (for TM4/6) + AssertFatal(tmode == 4 || tmode == 6 || tmode == 8 || tmode == 9 + || tmode == 10, + "Illegal transmission mode %d for CQI_ReportModeAperiodic_rm12\n", + tmode); + if (tmode <= 6) { //Table 5.2.2.6.1-1 36.213 + if ((ri == 1) && (cc->p_eNB == 2)) { + sched_ctl->aperiodic_wideband_cqi0[CC_idP] = + (uint8_t) (p & 0x0F); + p >>= 4; + for (i = 0; i < N; i++) { + sched_ctl->aperiodic_subband_pmi[CC_idP][i] = + (uint8_t) (p & 0x03); + p >>= 2; + } + } + if ((ri == 2) && (cc->p_eNB == 2)) { + sched_ctl->aperiodic_wideband_cqi0[CC_idP] = + (uint8_t) (p & 0x0F); + p >>= 4; + sched_ctl->aperiodic_wideband_cqi1[CC_idP] = + (uint8_t) (p & 0x0F); + p >>= 4; + for (i = 0; i < N; i++) { + sched_ctl->aperiodic_subband_pmi[CC_idP][i] = + (uint8_t) (p & 0x01); + p >>= 1; + } + } + if ((ri == 1) && (cc->p_eNB == 4)) { + sched_ctl->aperiodic_wideband_cqi0[CC_idP] = + (uint8_t) (p & 0x0F); + p >>= 4; + for (i = 0; i < N; i++) { + sched_ctl->aperiodic_subband_pmi[CC_idP][i] = + (uint8_t) (p & 0x03); + p >>= 4; + } + } + if ((ri == 2) && (cc->p_eNB == 4)) { + sched_ctl->aperiodic_wideband_cqi0[CC_idP] = + (uint8_t) (p & 0x0F); + p >>= 4; + sched_ctl->aperiodic_wideband_cqi1[CC_idP] = + (uint8_t) (p & 0x0F); + p >>= 4; + for (i = 0; i < N; i++) { + sched_ctl->aperiodic_subband_pmi[CC_idP][i] = + (uint8_t) (p & 0x01); + p >>= 4; + } + } + } // if (tmode <= 6) { //Table 5.2.2.6.1-1 36.213 + else { + AssertFatal(1 == 0, "support for TM 8-10 to be done\n"); + } - break; - case CQI_ReportModeAperiodic_rm20: - AssertFatal(0==1, "to be fixed, don't use p but pdu directly\n"); - // UE-selected subband CQI no PMI (TM1/2/3/7) , Table 5.2.2.6.3-1 from 36.213 - AssertFatal(tmode==1 || tmode==2 || tmode==3 || tmode==7,"Illegal transmission mode %d for CQI_ReportModeAperiodic_rm20\n",tmode); + break; + case CQI_ReportModeAperiodic_rm20: + AssertFatal(0 == 1, "to be fixed, don't use p but pdu directly\n"); + // UE-selected subband CQI no PMI (TM1/2/3/7) , Table 5.2.2.6.3-1 from 36.213 + AssertFatal(tmode == 1 || tmode == 2 || tmode == 3 + || tmode == 7, + "Illegal transmission mode %d for CQI_ReportModeAperiodic_rm20\n", + tmode); - sched_ctl->aperiodic_wideband_cqi0[CC_idP] = (uint8_t)(p&0x0F); p>>=4; - diffcqi0 = (uint8_t)(p&0x03); p>>=2; - r = (uint8_t)(p&((1>>Ltab_uesel[bw])-1)); - reverse_index(Ntab_uesel[bw],Mtab_uesel[bw],r,v); - for (m=0;maperiodic_subband_diffcqi0[CC_idP][v[m]] = diffcqi0; - break; - case CQI_ReportModeAperiodic_rm22: - AssertFatal(0==1, "to be fixed, don't use p but pdu directly\n"); - // UE-selected subband CQI multiple PMI (TM4/6) Table 5.2.2.6.3-2 from 36.213 + sched_ctl->aperiodic_wideband_cqi0[CC_idP] = (uint8_t) (p & 0x0F); + p >>= 4; + diffcqi0 = (uint8_t) (p & 0x03); + p >>= 2; + r = (uint8_t) (p & ((1 >> Ltab_uesel[bw]) - 1)); + reverse_index(Ntab_uesel[bw], Mtab_uesel[bw], r, v); + for (m = 0; m < Mtab_uesel[bw]; m++) + sched_ctl->aperiodic_subband_diffcqi0[CC_idP][v[m]] = diffcqi0; + break; + case CQI_ReportModeAperiodic_rm22: + AssertFatal(0 == 1, "to be fixed, don't use p but pdu directly\n"); + // UE-selected subband CQI multiple PMI (TM4/6) Table 5.2.2.6.3-2 from 36.213 - AssertFatal(tmode==4 || tmode==6 || tmode==8|| tmode==9 || tmode==10,"Illegal transmission mode %d for CQI_ReportModeAperiodic_rm22\n",tmode); + AssertFatal(tmode == 4 || tmode == 6 || tmode == 8 || tmode == 9 + || tmode == 10, + "Illegal transmission mode %d for CQI_ReportModeAperiodic_rm22\n", + tmode); - sched_ctl->aperiodic_wideband_cqi0[CC_idP] = (uint8_t)(p&0x0F); p>>=4; - diffcqi0 = (uint8_t)(p&0x03); p>>=2; + sched_ctl->aperiodic_wideband_cqi0[CC_idP] = (uint8_t) (p & 0x0F); + p >>= 4; + diffcqi0 = (uint8_t) (p & 0x03); + p >>= 2; - if (ri>1) { - sched_ctl->aperiodic_wideband_cqi1[CC_idP] = (uint8_t)(p&0x0F); p>>=4; - diffcqi1 = (uint8_t)(p&0x03); p>>=2; - } - r = (uint8_t)(p&((1>>Ltab_uesel[bw])-1)); p>>=Ltab_uesel[bw]; - reverse_index(Ntab_uesel[bw],Mtab_uesel[bw],r,v); - if ((ri==1)&&(cc->p_eNB==2)) { - pmi_uesel = p&0x3; p>>=2; - sched_ctl->aperiodic_wideband_pmi[CC_idP] = p&0x3; - } - else if ((ri==2)&&(cc->p_eNB==2)) { - pmi_uesel = p&0x1; p>>=1; - sched_ctl->aperiodic_wideband_pmi[CC_idP] = p&0x1; - } - else if (cc->p_eNB==4) { - pmi_uesel = p&0x0F; p>>=4; - sched_ctl->aperiodic_wideband_pmi[CC_idP] = p&0x0F; - } - for (m=0;maperiodic_subband_diffcqi0[CC_idP][v[m]] = diffcqi0; - if (ri>1) sched_ctl->aperiodic_subband_diffcqi1[CC_idP][v[m]] = diffcqi1; - sched_ctl->aperiodic_subband_pmi[CC_idP][v[m]] = pmi_uesel; - } - break; - case CQI_ReportModeAperiodic_rm30: - //subband CQI no PMI (TM1/2/3/7) - AssertFatal(tmode==1 || tmode==2 || tmode==3 || tmode==7,"Illegal transmission mode %d for CQI_ReportModeAperiodic_rm30\n",tmode); - sched_ctl->aperiodic_wideband_cqi0[CC_idP] = pdu[0]>>4; - curbyte = 0; - curbit = 3; - for (i=0;iaperiodic_subband_diffcqi0[CC_idP][i] = (pdu[curbyte] >> (curbit-1)) & 0x03; - curbit -= 2; - if (curbit < 0) { - curbit = 7; - curbyte++; - } - } - sched_ctl->dl_cqi[CC_idP] = sched_ctl->aperiodic_wideband_cqi0[CC_idP]; - break; - case CQI_ReportModeAperiodic_rm31: - AssertFatal(0==1, "to be fixed, don't use p but pdu directly\n"); - //subband CQI single PMI (TM4/5/6) - AssertFatal(tmode==4 || tmode==5 || tmode==6 || tmode==8|| tmode==9|| tmode==10,"Illegal transmission mode %d for CQI_ReportModeAperiodic_rm31\n",tmode); + if (ri > 1) { + sched_ctl->aperiodic_wideband_cqi1[CC_idP] = + (uint8_t) (p & 0x0F); + p >>= 4; + diffcqi1 = (uint8_t) (p & 0x03); + p >>= 2; + } + r = (uint8_t) (p & ((1 >> Ltab_uesel[bw]) - 1)); + p >>= Ltab_uesel[bw]; + reverse_index(Ntab_uesel[bw], Mtab_uesel[bw], r, v); + if ((ri == 1) && (cc->p_eNB == 2)) { + pmi_uesel = p & 0x3; + p >>= 2; + sched_ctl->aperiodic_wideband_pmi[CC_idP] = p & 0x3; + } else if ((ri == 2) && (cc->p_eNB == 2)) { + pmi_uesel = p & 0x1; + p >>= 1; + sched_ctl->aperiodic_wideband_pmi[CC_idP] = p & 0x1; + } else if (cc->p_eNB == 4) { + pmi_uesel = p & 0x0F; + p >>= 4; + sched_ctl->aperiodic_wideband_pmi[CC_idP] = p & 0x0F; + } + for (m = 0; m < Mtab_uesel[bw]; m++) { + sched_ctl->aperiodic_subband_diffcqi0[CC_idP][v[m]] = diffcqi0; + if (ri > 1) + sched_ctl->aperiodic_subband_diffcqi1[CC_idP][v[m]] = + diffcqi1; + sched_ctl->aperiodic_subband_pmi[CC_idP][v[m]] = pmi_uesel; + } + break; + case CQI_ReportModeAperiodic_rm30: + //subband CQI no PMI (TM1/2/3/7) + AssertFatal(tmode == 1 || tmode == 2 || tmode == 3 + || tmode == 7, + "Illegal transmission mode %d for CQI_ReportModeAperiodic_rm30\n", + tmode); + sched_ctl->aperiodic_wideband_cqi0[CC_idP] = pdu[0] >> 4; + curbyte = 0; + curbit = 3; + for (i = 0; i < N; i++) { + sched_ctl->aperiodic_subband_diffcqi0[CC_idP][i] = + (pdu[curbyte] >> (curbit - 1)) & 0x03; + curbit -= 2; + if (curbit < 0) { + curbit = 7; + curbyte++; + } + } + sched_ctl->dl_cqi[CC_idP] = + sched_ctl->aperiodic_wideband_cqi0[CC_idP]; + break; + case CQI_ReportModeAperiodic_rm31: + AssertFatal(0 == 1, "to be fixed, don't use p but pdu directly\n"); + //subband CQI single PMI (TM4/5/6) + AssertFatal(tmode == 4 || tmode == 5 || tmode == 6 || tmode == 8 + || tmode == 9 + || tmode == 10, + "Illegal transmission mode %d for CQI_ReportModeAperiodic_rm31\n", + tmode); - if ((ri==1) && (cc->p_eNB==2)) { - sched_ctl->aperiodic_wideband_cqi0[CC_idP] = (uint8_t)(p&0x0F); p>>=4; - for (i=0;iaperiodic_subband_diffcqi0[CC_idP][i] = (uint8_t)(p&0x03); - p>>=2; - } - sched_ctl->aperiodic_wideband_pmi[CC_idP] = p&0x03; - } - if ((ri==2) && (cc->p_eNB==2)) { - sched_ctl->aperiodic_wideband_cqi0[CC_idP] = (uint8_t)(p&0x0F); p>>=4; - for (i=0;iaperiodic_subband_pmi[CC_idP][i] = (uint8_t)(p&0x01); - p>>=1; - } - sched_ctl->aperiodic_wideband_cqi1[CC_idP] = (uint8_t)(p&0x0F); p>>=4; - for (i=0;iaperiodic_subband_pmi[CC_idP][i] = (uint8_t)(p&0x01); - p>>=1; - } - sched_ctl->aperiodic_wideband_pmi[CC_idP] = p&0x01; - } - if ((ri==1) && (cc->p_eNB==4)) { - sched_ctl->aperiodic_wideband_cqi0[CC_idP] = (uint8_t)(p&0x0F); p>>=4; - for (i=0;iaperiodic_subband_diffcqi0[CC_idP][i] = (uint8_t)(p&0x03); - p>>=2; - } - sched_ctl->aperiodic_wideband_pmi[CC_idP] = p&0x0F; - } - if ((ri>1) && (cc->p_eNB==4)) { // Note : 64 bits for 20 MHz - sched_ctl->aperiodic_wideband_cqi0[CC_idP] = (uint8_t)(p&0x0F); p>>=4; - for (i=0;iaperiodic_subband_pmi[CC_idP][i] = (uint8_t)(p&0x01); - p>>=1; - } - sched_ctl->aperiodic_wideband_cqi1[CC_idP] = (uint8_t)(p&0x0F); p>>=4; - for (i=0;iaperiodic_subband_pmi[CC_idP][i] = (uint8_t)(p&0x01); - p>>=2; - } - sched_ctl->aperiodic_wideband_pmi[CC_idP] = p&0x0F; - } + if ((ri == 1) && (cc->p_eNB == 2)) { + sched_ctl->aperiodic_wideband_cqi0[CC_idP] = + (uint8_t) (p & 0x0F); + p >>= 4; + for (i = 0; i < N; i++) { + sched_ctl->aperiodic_subband_diffcqi0[CC_idP][i] = + (uint8_t) (p & 0x03); + p >>= 2; + } + sched_ctl->aperiodic_wideband_pmi[CC_idP] = p & 0x03; + } + if ((ri == 2) && (cc->p_eNB == 2)) { + sched_ctl->aperiodic_wideband_cqi0[CC_idP] = + (uint8_t) (p & 0x0F); + p >>= 4; + for (i = 0; i < N; i++) { + sched_ctl->aperiodic_subband_pmi[CC_idP][i] = + (uint8_t) (p & 0x01); + p >>= 1; + } + sched_ctl->aperiodic_wideband_cqi1[CC_idP] = + (uint8_t) (p & 0x0F); + p >>= 4; + for (i = 0; i < N; i++) { + sched_ctl->aperiodic_subband_pmi[CC_idP][i] = + (uint8_t) (p & 0x01); + p >>= 1; + } + sched_ctl->aperiodic_wideband_pmi[CC_idP] = p & 0x01; + } + if ((ri == 1) && (cc->p_eNB == 4)) { + sched_ctl->aperiodic_wideband_cqi0[CC_idP] = + (uint8_t) (p & 0x0F); + p >>= 4; + for (i = 0; i < N; i++) { + sched_ctl->aperiodic_subband_diffcqi0[CC_idP][i] = + (uint8_t) (p & 0x03); + p >>= 2; + } + sched_ctl->aperiodic_wideband_pmi[CC_idP] = p & 0x0F; + } + if ((ri > 1) && (cc->p_eNB == 4)) { // Note : 64 bits for 20 MHz + sched_ctl->aperiodic_wideband_cqi0[CC_idP] = + (uint8_t) (p & 0x0F); + p >>= 4; + for (i = 0; i < N; i++) { + sched_ctl->aperiodic_subband_pmi[CC_idP][i] = + (uint8_t) (p & 0x01); + p >>= 1; + } + sched_ctl->aperiodic_wideband_cqi1[CC_idP] = + (uint8_t) (p & 0x0F); + p >>= 4; + for (i = 0; i < N; i++) { + sched_ctl->aperiodic_subband_pmi[CC_idP][i] = + (uint8_t) (p & 0x01); + p >>= 2; + } + sched_ctl->aperiodic_wideband_pmi[CC_idP] = p & 0x0F; + } - break; - case CQI_ReportModeAperiodic_rm32_v1250: - AssertFatal(tmode==4 || tmode==5 || tmode==6 || tmode==8|| tmode==9|| tmode==10,"Illegal transmission mode %d for CQI_ReportModeAperiodic_rm32\n",tmode); - AssertFatal(1==0,"CQI_ReportModeAperiodic_rm32 to be done\n"); - break; - case CQI_ReportModeAperiodic_rm10_v1310: - AssertFatal(tmode==1 || tmode==2 || tmode==3 || tmode==7,"Illegal transmission mode %d for CQI_ReportModeAperiodic_rm10\n",tmode); - AssertFatal(1==0,"CQI_ReportModeAperiodic_rm10 to be done\n"); - break; - case CQI_ReportModeAperiodic_rm11_v1310: - AssertFatal(tmode==4 || tmode==5 || tmode==6 || tmode==8|| tmode==9|| tmode==10,"Illegal transmission mode %d for CQI_ReportModeAperiodic_rm11\n",tmode); - AssertFatal(1==0,"CQI_ReportModeAperiodic_rm11 to be done\n"); - break; - } + break; + case CQI_ReportModeAperiodic_rm32_v1250: + AssertFatal(tmode == 4 || tmode == 5 || tmode == 6 || tmode == 8 + || tmode == 9 + || tmode == 10, + "Illegal transmission mode %d for CQI_ReportModeAperiodic_rm32\n", + tmode); + AssertFatal(1 == 0, "CQI_ReportModeAperiodic_rm32 to be done\n"); + break; + case CQI_ReportModeAperiodic_rm10_v1310: + AssertFatal(tmode == 1 || tmode == 2 || tmode == 3 + || tmode == 7, + "Illegal transmission mode %d for CQI_ReportModeAperiodic_rm10\n", + tmode); + AssertFatal(1 == 0, "CQI_ReportModeAperiodic_rm10 to be done\n"); + break; + case CQI_ReportModeAperiodic_rm11_v1310: + AssertFatal(tmode == 4 || tmode == 5 || tmode == 6 || tmode == 8 + || tmode == 9 + || tmode == 10, + "Illegal transmission mode %d for CQI_ReportModeAperiodic_rm11\n", + tmode); + AssertFatal(1 == 0, "CQI_ReportModeAperiodic_rm11 to be done\n"); + break; + } } -void cqi_indication(module_id_t mod_idP, int CC_idP, frame_t frameP, sub_frame_t subframeP, rnti_t rntiP, - nfapi_cqi_indication_rel9_t *rel9,uint8_t *pdu, - nfapi_ul_cqi_information_t *ul_cqi_information) +void +cqi_indication(module_id_t mod_idP, int CC_idP, frame_t frameP, + sub_frame_t subframeP, rnti_t rntiP, + nfapi_cqi_indication_rel9_t * rel9, uint8_t * pdu, + nfapi_ul_cqi_information_t * ul_cqi_information) { - int UE_id = find_UE_id(mod_idP, rntiP); - UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; - if (UE_id == -1) { - LOG_W(MAC, "cqi_indication: UE %x not found\n", rntiP); - return; - } - UE_sched_ctrl *sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - - if (UE_id >= 0) { - - if (ul_cqi_information->channel == 0) { // PUCCH - - // extract pucch csi information before changing RI information - extract_pucch_csi(mod_idP,CC_idP,UE_id,frameP,subframeP,pdu,rel9->length); - - memcpy((void*)sched_ctl->periodic_ri_received, - (void*)rel9->ri, - rel9->number_of_cc_reported); - - // SNR for PUCCH2 - sched_ctl->pucch2_snr[CC_idP] = ul_cqi_information->ul_cqi; + int UE_id = find_UE_id(mod_idP, rntiP); + UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; + if (UE_id == -1) { + LOG_W(MAC, "cqi_indication: UE %x not found\n", rntiP); + return; } - else { //PUSCH - memcpy((void*)sched_ctl->aperiodic_ri_received, - (void*)rel9->ri, - rel9->number_of_cc_reported); - - extract_pusch_csi(mod_idP,CC_idP,UE_id,frameP,subframeP,pdu,rel9->length); - - } - - // timing advance - sched_ctl->timing_advance = rel9->timing_advance; - sched_ctl->timing_advance_r9 = rel9->timing_advance_r9; - } -} - -void SR_indication(module_id_t mod_idP, int cc_idP, frame_t frameP, sub_frame_t subframeP, rnti_t rntiP, uint8_t ul_cqi) -{ - T(T_ENB_MAC_SCHEDULING_REQUEST, T_INT(mod_idP), T_INT(cc_idP), T_INT(frameP), T_INT(subframeP), T_INT(rntiP)); - - int UE_id = find_UE_id(mod_idP, rntiP); - UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; - - if (UE_id != -1) { - if (mac_eNB_get_rrc_status(mod_idP,UE_RNTI(mod_idP,UE_id)) < RRC_CONNECTED) - LOG_D(MAC,"[eNB %d][SR %x] Frame %d subframeP %d Signaling SR for UE %d on CC_id %d\n",mod_idP,rntiP,frameP,subframeP, UE_id,cc_idP); - -#if 0 UE_sched_ctrl *sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - /* for the moment don't use ul_cqi from SR, value is too different from harq */ - sched_ctl->pucch1_snr[cc_idP] = ul_cqi; - sched_ctl->pucch1_cqi_update[cc_idP] = 1; + if (UE_id >= 0) { + + if (ul_cqi_information->channel == 0) { // PUCCH + + // extract pucch csi information before changing RI information + extract_pucch_csi(mod_idP, CC_idP, UE_id, frameP, subframeP, + pdu, rel9->length); + + memcpy((void *) sched_ctl->periodic_ri_received, + (void *) rel9->ri, rel9->number_of_cc_reported); + + // SNR for PUCCH2 + sched_ctl->pucch2_snr[CC_idP] = ul_cqi_information->ul_cqi; + } else { //PUSCH + memcpy((void *) sched_ctl->aperiodic_ri_received, + (void *) rel9->ri, rel9->number_of_cc_reported); + + extract_pusch_csi(mod_idP, CC_idP, UE_id, frameP, subframeP, + pdu, rel9->length); + + } + + // timing advance + sched_ctl->timing_advance = rel9->timing_advance; + sched_ctl->timing_advance_r9 = rel9->timing_advance_r9; + } +} + +void +SR_indication(module_id_t mod_idP, int cc_idP, frame_t frameP, + sub_frame_t subframeP, rnti_t rntiP, uint8_t ul_cqi) +{ + T(T_ENB_MAC_SCHEDULING_REQUEST, T_INT(mod_idP), T_INT(cc_idP), + T_INT(frameP), T_INT(subframeP), T_INT(rntiP)); + + int UE_id = find_UE_id(mod_idP, rntiP); + UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; + + if (UE_id != -1) { + if (mac_eNB_get_rrc_status(mod_idP, UE_RNTI(mod_idP, UE_id)) < + RRC_CONNECTED) + LOG_D(MAC, + "[eNB %d][SR %x] Frame %d subframeP %d Signaling SR for UE %d on CC_id %d\n", + mod_idP, rntiP, frameP, subframeP, UE_id, cc_idP); + +#if 0 + UE_sched_ctrl *sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + + /* for the moment don't use ul_cqi from SR, value is too different from harq */ + sched_ctl->pucch1_snr[cc_idP] = ul_cqi; + sched_ctl->pucch1_cqi_update[cc_idP] = 1; #endif - UE_list->UE_template[cc_idP][UE_id].ul_SR = 1; - UE_list->UE_template[cc_idP][UE_id].ul_active = TRUE; - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SR_INDICATION,1); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SR_INDICATION,0); - } else { - // AssertFatal(0, "find_UE_id(%u,rnti %d) not found", enb_mod_idP, rntiP); - // AssertError(0, 0, "Frame %d: find_UE_id(%u,rnti %d) not found\n", frameP, enb_mod_idP, rntiP); - LOG_D(MAC,"[eNB %d][SR %x] Frame %d subframeP %d Signaling SR for UE %d (unknown UEid) on CC_id %d\n",mod_idP,rntiP,frameP,subframeP, UE_id,cc_idP); - } + UE_list->UE_template[cc_idP][UE_id].ul_SR = 1; + UE_list->UE_template[cc_idP][UE_id].ul_active = TRUE; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_SR_INDICATION, 1); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_SR_INDICATION, 0); + } else { + // AssertFatal(0, "find_UE_id(%u,rnti %d) not found", enb_mod_idP, rntiP); + // AssertError(0, 0, "Frame %d: find_UE_id(%u,rnti %d) not found\n", frameP, enb_mod_idP, rntiP); + LOG_D(MAC, + "[eNB %d][SR %x] Frame %d subframeP %d Signaling SR for UE %d (unknown UEid) on CC_id %d\n", + mod_idP, rntiP, frameP, subframeP, UE_id, cc_idP); + } } -void UL_failure_indication(module_id_t mod_idP, int cc_idP, frame_t frameP, rnti_t rntiP, sub_frame_t subframeP) +void +UL_failure_indication(module_id_t mod_idP, int cc_idP, frame_t frameP, + rnti_t rntiP, sub_frame_t subframeP) { - int UE_id = find_UE_id(mod_idP, rntiP); - UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; + int UE_id = find_UE_id(mod_idP, rntiP); + UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; - if (UE_id != -1) { - LOG_D(MAC,"[eNB %d][UE %d/%x] Frame %d subframeP %d Signaling UL Failure for UE %d on CC_id %d (timer %d)\n", - mod_idP,UE_id,rntiP,frameP,subframeP, UE_id,cc_idP, - UE_list->UE_sched_ctrl[UE_id].ul_failure_timer); - if (UE_list->UE_sched_ctrl[UE_id].ul_failure_timer == 0) - UE_list->UE_sched_ctrl[UE_id].ul_failure_timer=1; - } else { - // AssertFatal(0, "find_UE_id(%u,rnti %d) not found", enb_mod_idP, rntiP); - // AssertError(0, 0, "Frame %d: find_UE_id(%u,rnti %d) not found\n", frameP, enb_mod_idP, rntiP); - LOG_W(MAC,"[eNB %d][SR %x] Frame %d subframeP %d Signaling UL Failure for UE %d (unknown UEid) on CC_id %d\n",mod_idP,rntiP,frameP,subframeP, UE_id,cc_idP); - } + if (UE_id != -1) { + LOG_D(MAC, + "[eNB %d][UE %d/%x] Frame %d subframeP %d Signaling UL Failure for UE %d on CC_id %d (timer %d)\n", + mod_idP, UE_id, rntiP, frameP, subframeP, UE_id, cc_idP, + UE_list->UE_sched_ctrl[UE_id].ul_failure_timer); + if (UE_list->UE_sched_ctrl[UE_id].ul_failure_timer == 0) + UE_list->UE_sched_ctrl[UE_id].ul_failure_timer = 1; + } else { + // AssertFatal(0, "find_UE_id(%u,rnti %d) not found", enb_mod_idP, rntiP); + // AssertError(0, 0, "Frame %d: find_UE_id(%u,rnti %d) not found\n", frameP, enb_mod_idP, rntiP); + LOG_W(MAC, + "[eNB %d][SR %x] Frame %d subframeP %d Signaling UL Failure for UE %d (unknown UEid) on CC_id %d\n", + mod_idP, rntiP, frameP, subframeP, UE_id, cc_idP); + } } -void harq_indication(module_id_t mod_idP, int CC_idP, frame_t frameP, sub_frame_t subframeP, nfapi_harq_indication_pdu_t *harq_pdu) +void +harq_indication(module_id_t mod_idP, int CC_idP, frame_t frameP, + sub_frame_t subframeP, + nfapi_harq_indication_pdu_t * harq_pdu) { - rnti_t rnti = harq_pdu->rx_ue_information.rnti; - uint8_t ul_cqi = harq_pdu->ul_cqi_information.ul_cqi; - uint8_t channel = harq_pdu->ul_cqi_information.channel; - int UE_id = find_UE_id(mod_idP, rnti); - if (UE_id == -1) { - LOG_W(MAC, "harq_indication: UE %x not found\n", rnti); - return; - } - UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; - UE_sched_ctrl *sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - COMMON_channels_t *cc = &RC.mac[mod_idP]->common_channels[CC_idP]; + rnti_t rnti = harq_pdu->rx_ue_information.rnti; + uint8_t ul_cqi = harq_pdu->ul_cqi_information.ul_cqi; + uint8_t channel = harq_pdu->ul_cqi_information.channel; + int UE_id = find_UE_id(mod_idP, rnti); + if (UE_id == -1) { + LOG_W(MAC, "harq_indication: UE %x not found\n", rnti); + return; + } + UE_list_t *UE_list = &RC.mac[mod_idP]->UE_list; + UE_sched_ctrl *sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + COMMON_channels_t *cc = &RC.mac[mod_idP]->common_channels[CC_idP]; // extract HARQ Information - LOG_D(MAC,"Frame %d, subframe %d: Received harq indication (%d) from UE %d/%x, ul_cqi %d\n",frameP,subframeP,channel,UE_id,rnti,ul_cqi); - if (cc->tdd_Config) extract_harq(mod_idP,CC_idP,UE_id,frameP,subframeP,(void*)&harq_pdu->harq_indication_tdd_rel13,channel); - else extract_harq(mod_idP,CC_idP,UE_id,frameP,subframeP,(void*)&harq_pdu->harq_indication_fdd_rel13,channel); - if (channel == 0) { - sched_ctl->pucch1_snr[CC_idP] = ul_cqi; - sched_ctl->pucch1_cqi_update[CC_idP] = 1; - } + LOG_D(MAC, + "Frame %d, subframe %d: Received harq indication (%d) from UE %d/%x, ul_cqi %d\n", + frameP, subframeP, channel, UE_id, rnti, ul_cqi); + if (cc->tdd_Config) + extract_harq(mod_idP, CC_idP, UE_id, frameP, subframeP, + (void *) &harq_pdu->harq_indication_tdd_rel13, + channel); + else + extract_harq(mod_idP, CC_idP, UE_id, frameP, subframeP, + (void *) &harq_pdu->harq_indication_fdd_rel13, + channel); + if (channel == 0) { + sched_ctl->pucch1_snr[CC_idP] = ul_cqi; + sched_ctl->pucch1_cqi_update[CC_idP] = 1; + } } diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c index 1fcd07c1d3..343d391538 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c @@ -29,6 +29,8 @@ */ +/* indented with: indent -kr eNB_scheduler_RA.c */ + #include "assertions.h" #include "PHY/defs.h" #include "PHY/extern.h" @@ -52,7 +54,7 @@ #include "pdcp.h" #if defined(ENABLE_ITTI) -# include "intertask_interface.h" +#include "intertask_interface.h" #endif #include "T.h" @@ -61,645 +63,838 @@ #define DEBUG_eNB_SCHEDULER 1 // This table holds the allowable PRB sizes for ULSCH transmissions -uint8_t rb_table[34] = {1,2,3,4,5,6,8,9,10,12,15,16,18,20,24,25,27,30,32,36,40,45,48,50,54,60,64,72,75,80,81,90,96,100}; +uint8_t rb_table[34] = + { 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, 30, 32, + 36, 40, 45, 48, 50, 54, 60, 64, 72, 75, 80, 81, 90, 96, 100 +}; -void rx_sdu(const module_id_t enb_mod_idP, - const int CC_idP, - const frame_t frameP, - const sub_frame_t subframeP, - const rnti_t rntiP, - uint8_t *sduP, - const uint16_t sdu_lenP, - const uint16_t timing_advance, - const uint8_t ul_cqi) +void +rx_sdu(const module_id_t enb_mod_idP, + const int CC_idP, + const frame_t frameP, + const sub_frame_t subframeP, + const rnti_t rntiP, + uint8_t * sduP, + const uint16_t sdu_lenP, + const uint16_t timing_advance, const uint8_t ul_cqi) { - int current_rnti = rntiP; - unsigned char rx_ces[MAX_NUM_CE],num_ce,num_sdu,i,*payload_ptr; - unsigned char rx_lcids[NB_RB_MAX]; - unsigned short rx_lengths[NB_RB_MAX]; - int UE_id = find_UE_id(enb_mod_idP, current_rnti); - int RA_id; - int ii,j; - eNB_MAC_INST *eNB = RC.mac[enb_mod_idP]; - int harq_pid = subframe2harqpid(&eNB->common_channels[CC_idP],frameP,subframeP); + int current_rnti = rntiP; + unsigned char rx_ces[MAX_NUM_CE], num_ce, num_sdu, i, *payload_ptr; + unsigned char rx_lcids[NB_RB_MAX]; + unsigned short rx_lengths[NB_RB_MAX]; + int UE_id = find_UE_id(enb_mod_idP, current_rnti); + int RA_id; + int ii, j; + eNB_MAC_INST *mac = RC.mac[enb_mod_idP]; + int harq_pid = + subframe2harqpid(&mac->common_channels[CC_idP], frameP, subframeP); - UE_list_t *UE_list= &eNB->UE_list; - int crnti_rx=0; - int old_buffer_info; - RA_TEMPLATE *RA_template = (RA_TEMPLATE *)&RC.mac[enb_mod_idP]->common_channels[CC_idP].RA_template[0]; - int first_rb = 0; + UE_list_t *UE_list = &mac->UE_list; + int crnti_rx = 0; + int old_buffer_info; + RA_t *ra = + (RA_t *) & RC.mac[enb_mod_idP]->common_channels[CC_idP].ra[0]; + int first_rb = 0; - start_meas(&eNB->rx_ulsch_sdu); + start_meas(&mac->rx_ulsch_sdu); - if ((UE_id > NUMBER_OF_UE_MAX) || (UE_id == -1) ) - for(ii=0; ii NUMBER_OF_UE_MAX) || (UE_id == -1)) + for (ii = 0; ii < NB_RB_MAX; ii++) { + rx_lengths[ii] = 0; + } + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU, 1); + if (opt_enabled == 1) { + trace_pdu(0, sduP, sdu_lenP, 0, 3, current_rnti, frameP, subframeP, + 0, 0); + LOG_D(OPT, "[eNB %d][ULSCH] Frame %d rnti %x with size %d\n", + enb_mod_idP, frameP, current_rnti, sdu_lenP); } - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU,1); - if (opt_enabled == 1) { - trace_pdu(0, sduP,sdu_lenP, 0, 3, current_rnti, frameP, subframeP, 0,0); - LOG_D(OPT,"[eNB %d][ULSCH] Frame %d rnti %x with size %d\n", - enb_mod_idP, frameP, current_rnti, sdu_lenP); - } - - if (UE_id!=-1) { - LOG_D(MAC,"[eNB %d][PUSCH %d] CC_id %d Received ULSCH sdu round %d from PHY (rnti %x, UE_id %d) ul_cqi %d\n",enb_mod_idP,harq_pid,CC_idP, UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid], - current_rnti, UE_id,ul_cqi); - - AssertFatal(UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid] < 8, - "round >= 8\n"); - if (sduP!=NULL) { - UE_list->UE_sched_ctrl[UE_id].ul_inactivity_timer = 0; - UE_list->UE_sched_ctrl[UE_id].ul_failure_timer = 0; - UE_list->UE_sched_ctrl[UE_id].ul_scheduled &= (~(1<UE_sched_ctrl[UE_id].ta_update = - (UE_list->UE_sched_ctrl[UE_id].ta_update * 3 + timing_advance)/4; - UE_list->UE_sched_ctrl[UE_id].pusch_snr[CC_idP] = ul_cqi; - UE_list->UE_sched_ctrl[UE_id].ul_consecutive_errors = 0; - first_rb = UE_list->UE_template[CC_idP][UE_id].first_rb_ul[harq_pid]; - - if (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync > 0) { - UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync=0; - mac_eNB_rrc_ul_in_sync(enb_mod_idP,CC_idP,frameP,subframeP,UE_RNTI(enb_mod_idP,UE_id)); - } - } - else { // we've got an error - LOG_D(MAC,"[eNB %d][PUSCH %d] CC_id %d ULSCH in error in round %d, ul_cqi %d\n",enb_mod_idP,harq_pid,CC_idP, - UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid],ul_cqi); - - // AssertFatal(1==0,"ulsch in error\n"); - if (UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid] == 3) { - UE_list->UE_sched_ctrl[UE_id].ul_scheduled &= (~(1<UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid]=0; - if (UE_list->UE_sched_ctrl[UE_id].ul_consecutive_errors++ == 10) - UE_list->UE_sched_ctrl[UE_id].ul_failure_timer = 1; - } - else UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid]++; - return; - - } - } - else if ((RA_id = find_RA_id(enb_mod_idP,CC_idP,current_rnti))!=-1) { // Check if this is an RA process for the rnti - AssertFatal(eNB->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx>1, - "maxHARQ %d should be greater than 1\n", - (int)eNB->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx); - - LOG_D(MAC,"[eNB %d][PUSCH %d] CC_id %d Received ULSCH sdu round %d from PHY (rnti %x, RA_id %d) ul_cqi %d\n",enb_mod_idP,harq_pid,CC_idP, - RA_template[RA_id].msg3_round, - current_rnti,RA_id,ul_cqi); - - first_rb = RA_template->msg3_first_rb; - - if (sduP==NULL) { // we've got an error on Msg3 - LOG_D(MAC,"[eNB %d] CC_id %d, RA %d ULSCH in error in round %d/%d\n",enb_mod_idP,CC_idP,RA_id, - RA_template[RA_id].msg3_round, - (int)eNB->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx); - if (RA_template[RA_id].msg3_round == eNB->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx-1) { - cancel_ra_proc(enb_mod_idP,CC_idP,frameP,current_rnti); - } - - else { - first_rb = UE_list->UE_template[CC_idP][UE_id].first_rb_ul[harq_pid]; - RA_template[RA_id].msg3_round++; - // prepare handling of retransmission - RA_template[RA_id].Msg3_frame += ((RA_template[RA_id].Msg3_subframe>1) ? 1 : 0); - RA_template[RA_id].Msg3_subframe = (RA_template[RA_id].Msg3_subframe+8)%10; - add_msg3(enb_mod_idP,CC_idP, &RA_template[RA_id],frameP,subframeP); - } - return; - } - } - else { - LOG_W(MAC,"Cannot find UE or RA corresponding to ULSCH rnti %x, dropping it\n", current_rnti); - return; - } - payload_ptr = parse_ulsch_header(sduP,&num_ce,&num_sdu,rx_ces,rx_lcids,rx_lengths,sdu_lenP); - - T(T_ENB_MAC_UE_UL_PDU, T_INT(enb_mod_idP), T_INT(CC_idP), T_INT(current_rnti), T_INT(frameP), T_INT(subframeP), - T_INT(harq_pid), T_INT(sdu_lenP), T_INT(num_ce), T_INT(num_sdu)); - T(T_ENB_MAC_UE_UL_PDU_WITH_DATA, T_INT(enb_mod_idP), T_INT(CC_idP), T_INT(current_rnti), T_INT(frameP), T_INT(subframeP), - T_INT(harq_pid), T_INT(sdu_lenP), T_INT(num_ce), T_INT(num_sdu), T_BUFFER(sduP, sdu_lenP)); - - eNB->eNB_stats[CC_idP].ulsch_bytes_rx=sdu_lenP; - eNB->eNB_stats[CC_idP].total_ulsch_bytes_rx+=sdu_lenP; - eNB->eNB_stats[CC_idP].total_ulsch_pdus_rx+=1; - - UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid] = 0; - - // control element - for (i=0; iUE_template[CC_idP][UE_id].phr_info = (payload_ptr[0] & 0x3f) - PHR_MAPPING_OFFSET; - LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : Received PHR PH = %d (db)\n", - enb_mod_idP, CC_idP, rx_ces[i], UE_list->UE_template[CC_idP][UE_id].phr_info); - UE_list->UE_template[CC_idP][UE_id].phr_info_configured=1; - UE_list->UE_sched_ctrl[UE_id].phr_received = 1; - } - payload_ptr+=sizeof(POWER_HEADROOM_CMD); - break; - - case CRNTI: { - int old_rnti = (((uint16_t)payload_ptr[0])<<8) + payload_ptr[1]; - int old_UE_id = find_UE_id(enb_mod_idP, old_rnti); - LOG_D(MAC, "[eNB %d] Frame %d, Subframe %d CC_id %d MAC CE_LCID %d (ce %d/%d): CRNTI %x (UE_id %d) in Msg3\n", - enb_mod_idP, frameP, subframeP, CC_idP, rx_ces[i], i, num_ce, old_rnti, old_UE_id); - if (old_UE_id != -1) { - /* TODO: if the UE did random access (followed by a MAC uplink with - * CRNTI) because none of its scheduling request was granted, then - * according to 36.321 5.4.4 the UE's MAC will notify RRC to release - * PUCCH/SRS. According to 36.331 5.3.13 the UE will then apply - * default configuration for CQI reporting and scheduling requests, - * which basically means that the CQI requests won't work anymore and - * that the UE won't do any scheduling request anymore as long as the - * eNB doesn't reconfigure the UE. - * We have to take care of this. As the code is, nothing is done and - * the UE state in the eNB is wrong. - */ - UE_id = old_UE_id; - UE_list->UE_sched_ctrl[UE_id].ul_inactivity_timer = 0; - UE_list->UE_sched_ctrl[UE_id].ul_failure_timer = 0; - if (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync > 0) { - UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync = 0; - mac_eNB_rrc_ul_in_sync(enb_mod_idP, CC_idP, frameP, subframeP, old_rnti); - } - /* receiving CRNTI means that the current rnti has to go away */ - cancel_ra_proc(enb_mod_idP,CC_idP,frameP,current_rnti); - current_rnti = old_rnti; - } - crnti_rx=1; - payload_ptr+=2; - break; - } - - case TRUNCATED_BSR: - case SHORT_BSR: { - uint8_t lcgid; - lcgid = (payload_ptr[0] >> 6); - - LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n", - enb_mod_idP, CC_idP, rx_ces[i], lcgid, payload_ptr[0] & 0x3f); - - if (crnti_rx==1) - LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n", - enb_mod_idP, CC_idP, rx_ces[i], lcgid, payload_ptr[0] & 0x3f); - if (UE_id != -1) { - - UE_list->UE_template[CC_idP][UE_id].bsr_info[lcgid] = (payload_ptr[0] & 0x3f); - - // update buffer info - - UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[lcgid]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[lcgid]]; - - UE_list->UE_template[CC_idP][UE_id].ul_total_buffer= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[lcgid]; - - RC.eNB[enb_mod_idP][CC_idP]->pusch_stats_bsr[UE_id][(frameP*10)+subframeP] = (payload_ptr[0] & 0x3f); - if (UE_id == UE_list->head) - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_BSR,RC.eNB[enb_mod_idP][CC_idP]->pusch_stats_bsr[UE_id][(frameP*10)+subframeP]); - if (UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[lcgid] == 0 ) { - UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[lcgid]=frameP; - } - if (mac_eNB_get_rrc_status(enb_mod_idP,UE_RNTI(enb_mod_idP,UE_id)) < RRC_CONNECTED) - LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d : ul_total_buffer = %d (lcg increment %d)\n", - enb_mod_idP, CC_idP, rx_ces[i], UE_list->UE_template[CC_idP][UE_id].ul_total_buffer, - UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[lcgid]); - } - else { - - } - payload_ptr += 1;//sizeof(SHORT_BSR); // fixme - } - break; - - case LONG_BSR: - if (UE_id != -1) { - UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID0] = ((payload_ptr[0] & 0xFC) >> 2); - UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID1] = - ((payload_ptr[0] & 0x03) << 4) | ((payload_ptr[1] & 0xF0) >> 4); - UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID2] = - ((payload_ptr[1] & 0x0F) << 2) | ((payload_ptr[2] & 0xC0) >> 6); - UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID3] = (payload_ptr[2] & 0x3F); - - // update buffer info - old_buffer_info = UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID0]; - UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID0]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID0]]; - - UE_list->UE_template[CC_idP][UE_id].ul_total_buffer+= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID0]; - if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= old_buffer_info) - UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= old_buffer_info; - else - UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = 0; - - old_buffer_info = UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID1]; - UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID1]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID1]]; - UE_list->UE_template[CC_idP][UE_id].ul_total_buffer+= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID1]; - if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= old_buffer_info) - UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= old_buffer_info; - else - UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = 0; - - old_buffer_info = UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID2]; - UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID2]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID2]]; - UE_list->UE_template[CC_idP][UE_id].ul_total_buffer+= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID2]; - if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= old_buffer_info) - UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= old_buffer_info; - else - UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = 0; - - old_buffer_info = UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID3]; - UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID3]=BSR_TABLE[UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID3]]; - UE_list->UE_template[CC_idP][UE_id].ul_total_buffer+= UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[LCGID3]; - if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= old_buffer_info) - UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= old_buffer_info; - else - UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = 0; - - LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d: Received long BSR LCGID0 = %u LCGID1 = " - "%u LCGID2 = %u LCGID3 = %u\n", - enb_mod_idP, CC_idP, - rx_ces[i], - UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID0], - UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID1], - UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID2], - UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID3]); - if (crnti_rx==1) - LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d: Received long BSR LCGID0 = %u LCGID1 = " - "%u LCGID2 = %u LCGID3 = %u\n", - enb_mod_idP, CC_idP, - rx_ces[i], - UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID0], - UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID1], - UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID2], - UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID3]); - - if (UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID0] == 0 ) { - UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[LCGID0]=0; - } else if (UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[LCGID0] == 0) { - UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[LCGID0]=frameP; - } - - if (UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID1] == 0 ) { - UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[LCGID1]=0; - } else if (UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[LCGID1] == 0) { - UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[LCGID1]=frameP; - } - - if (UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID2] == 0 ) { - UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[LCGID2]=0; - } else if (UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[LCGID2] == 0) { - UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[LCGID2]=frameP; - } - - if (UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID3] == 0 ) { - UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[LCGID3]= 0; - } else if (UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[LCGID3] == 0) { - UE_list->UE_template[CC_idP][UE_id].ul_buffer_creation_time[LCGID3]=frameP; - - } - } - - payload_ptr += 3;////sizeof(LONG_BSR); - break; - - default: - LOG_E(MAC, "[eNB %d] CC_id %d Received unknown MAC header (0x%02x)\n", enb_mod_idP, CC_idP, rx_ces[i]); - break; - } - } - - for (i=0; i CCCH_PAYLOAD_SIZE_MAX) { - LOG_E(MAC, "[eNB %d/%d] frame %d received CCCH of size %d (too big, maximum allowed is %d, sdu_len %d), dropping packet\n", - enb_mod_idP, CC_idP, frameP, rx_lengths[i], CCCH_PAYLOAD_SIZE_MAX,sdu_lenP); - break; - } - LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d, Received CCCH: %x.%x.%x.%x.%x.%x, Terminating RA procedure for UE rnti %x\n", - enb_mod_idP,CC_idP,frameP, - payload_ptr[0],payload_ptr[1],payload_ptr[2],payload_ptr[3],payload_ptr[4], payload_ptr[5], current_rnti); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_TERMINATE_RA_PROC,1); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_TERMINATE_RA_PROC,0); - for (ii=0; iicommon_channels[CC_idP].RA_template[ii]; - - LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Checking proc %d : rnti (%x, %x), active %d\n", - enb_mod_idP, CC_idP, ii, - RA_template->rnti, current_rnti, - RA_template->RA_active); - - if ((RA_template->rnti==current_rnti) && - (RA_template->RA_active==TRUE)) { - - //payload_ptr = parse_ulsch_header(msg3,&num_ce,&num_sdu,rx_ces,rx_lcids,rx_lengths,msg3_len); - - if (UE_id < 0) { - memcpy(&RA_template->cont_res_id[0],payload_ptr,6); - LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d CCCH: Received Msg3: length %d, offset %ld\n", - enb_mod_idP,CC_idP,frameP,rx_lengths[i],payload_ptr-sduP); - - if ((UE_id=add_new_ue(enb_mod_idP,CC_idP,eNB->common_channels[CC_idP].RA_template[ii].rnti,harq_pid - #ifdef Rel14 - ,eNB->common_channels[CC_idP].RA_template[ii].rach_resource_type - #endif - )) == -1 ) { - AssertFatal(1==0,"[MAC][eNB] Max user count reached\n"); - // kill RA procedure - } else - LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d Added user with rnti %x => UE %d\n", - enb_mod_idP,CC_idP,frameP,RA_template->rnti,UE_id); - } else { - LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d CCCH: Received Msg3 from already registered UE %d: length %d, offset %ld\n", - enb_mod_idP,CC_idP,frameP,UE_id,rx_lengths[i],payload_ptr-sduP); - // kill RA procedure - } - - mac_rrc_data_ind( - enb_mod_idP, - CC_idP, - frameP,subframeP, - current_rnti, - CCCH, - (uint8_t*)payload_ptr, - rx_lengths[i], - ENB_FLAG_YES, - enb_mod_idP, - 0 - ); - - - if (num_ce >0) { // handle msg3 which is not RRCConnectionRequest - // process_ra_message(msg3,num_ce,rx_lcids,rx_ces); - } - - // prepare transmission of Msg4 - RA_template->generate_Msg4 = 1; - RA_template->wait_ack_Msg4 = 0; - - - - // Program Msg4 PDCCH+DLSCH/MPDCCH transmission 4 subframes from now, // Check if this is ok for BL/CE, or if the rule is different - RA_template->Msg4_frame = frameP + ((subframeP>5) ? 1 : 0); - RA_template->Msg4_subframe = (subframeP+4)%10; - - } // if process is active - } // loop on RA processes - - break ; - - case DCCH : - case DCCH1 : - // if(eNB_mac_inst[module_idP][CC_idP].Dcch_lchan[UE_id].Active==1){ - - -#if defined(ENABLE_MAC_PAYLOAD_DEBUG) - LOG_T(MAC,"offset: %d\n",(unsigned char)((unsigned char*)payload_ptr-sduP)); - for (j=0; j<32; j++) { - LOG_T(MAC,"%x ",payload_ptr[j]); - } - LOG_T(MAC,"\n"); -#endif - - if (UE_id != -1) { - // adjust buffer occupancy of the correponding logical channel group - if (UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[UE_list->UE_template[CC_idP][UE_id].lcgidmap[rx_lcids[i]]] >= rx_lengths[i]) - UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[UE_list->UE_template[CC_idP][UE_id].lcgidmap[rx_lcids[i]]] -= rx_lengths[i]; - else - UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[UE_list->UE_template[CC_idP][UE_id].lcgidmap[rx_lcids[i]]] = 0; - - LOG_D(MAC,"[eNB %d] CC_id %d Frame %d : ULSCH -> UL-DCCH, received %d bytes form UE %d on LCID %d \n", - enb_mod_idP,CC_idP,frameP, rx_lengths[i], UE_id, rx_lcids[i]); - - mac_rlc_data_ind( - enb_mod_idP, - current_rnti, - enb_mod_idP, - frameP, - ENB_FLAG_YES, - MBMS_FLAG_NO, - rx_lcids[i], - (char *)payload_ptr, - rx_lengths[i], - 1, - NULL);//(unsigned int*)crc_status); - UE_list->eNB_UE_stats[CC_idP][UE_id].num_pdu_rx[rx_lcids[i]]+=1; - UE_list->eNB_UE_stats[CC_idP][UE_id].num_bytes_rx[rx_lcids[i]]+=rx_lengths[i]; - - - } /* UE_id != -1 */ - - - // } - break; - - // all the DRBS - case DTCH: - default : - -#if defined(ENABLE_MAC_PAYLOAD_DEBUG) - LOG_T(MAC,"offset: %d\n",(unsigned char)((unsigned char*)payload_ptr-sduP)); - for (j=0; j<32; j++) { - LOG_T(MAC,"%x ",payload_ptr[j]); - } - LOG_T(MAC,"\n"); -#endif - if (rx_lcids[i] < NB_RB_MAX ) { - LOG_D(MAC,"[eNB %d] CC_id %d Frame %d : ULSCH -> UL-DTCH, received %d bytes from UE %d for lcid %d\n", - enb_mod_idP,CC_idP,frameP, rx_lengths[i], UE_id, rx_lcids[i]); - - if (UE_id != -1) { - // adjust buffer occupancy of the correponding logical channel group - LOG_D(MAC,"[eNB %d] CC_id %d Frame %d : ULSCH -> UL-DTCH, received %d bytes from UE %d for lcid %d, removing from LCGID %ld, %d\n", - enb_mod_idP,CC_idP,frameP, rx_lengths[i], UE_id,rx_lcids[i], - UE_list->UE_template[CC_idP][UE_id].lcgidmap[rx_lcids[i]], - UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[UE_list->UE_template[CC_idP][UE_id].lcgidmap[rx_lcids[i]]]); - - if (UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[UE_list->UE_template[CC_idP][UE_id].lcgidmap[rx_lcids[i]]] >= rx_lengths[i]) - UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[UE_list->UE_template[CC_idP][UE_id].lcgidmap[rx_lcids[i]]] -= rx_lengths[i]; - else - UE_list->UE_template[CC_idP][UE_id].ul_buffer_info[UE_list->UE_template[CC_idP][UE_id].lcgidmap[rx_lcids[i]]] = 0; - if ((rx_lengths[i] 0) ) { // MAX SIZE OF transport block - mac_rlc_data_ind( - enb_mod_idP, - current_rnti, - enb_mod_idP, - frameP, - ENB_FLAG_YES, - MBMS_FLAG_NO, - rx_lcids[i], - (char *)payload_ptr, - rx_lengths[i], - 1, - NULL);//(unsigned int*)crc_status); - - UE_list->eNB_UE_stats[CC_idP][UE_id].num_pdu_rx[rx_lcids[i]]+=1; - UE_list->eNB_UE_stats[CC_idP][UE_id].num_bytes_rx[rx_lcids[i]]+=rx_lengths[i]; - } - else { /* rx_length[i] */ - UE_list->eNB_UE_stats[CC_idP][UE_id].num_errors_rx+=1; - LOG_E(MAC,"[eNB %d] CC_id %d Frame %d : Max size of transport block reached LCID %d from UE %d ", - enb_mod_idP, CC_idP, frameP, rx_lcids[i], UE_id); - } - } - else {/*(UE_id != -1*/ - LOG_E(MAC,"[eNB %d] CC_id %d Frame %d : received unsupported or unknown LCID %d from UE %d ", - enb_mod_idP, CC_idP, frameP, rx_lcids[i], UE_id); - } - } - - break; - } - - payload_ptr+=rx_lengths[i]; - } - - // Program ACK for PHICH - LOG_D(MAC,"Programming PHICH ACK for rnti %x harq_pid %d (first_rb %d)\n",current_rnti,harq_pid,first_rb); - nfapi_hi_dci0_request_body_t *hi_dci0_req = &eNB->HI_DCI0_req[CC_idP].hi_dci0_request_body; - nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = &hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req->number_of_dci+hi_dci0_req->number_of_hi]; - memset((void*)hi_dci0_pdu,0,sizeof(nfapi_hi_dci0_request_pdu_t)); - hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_HI_PDU_TYPE; - hi_dci0_pdu->pdu_size = 2+sizeof(nfapi_hi_dci0_hi_pdu); - hi_dci0_pdu->hi_pdu.hi_pdu_rel8.resource_block_start = first_rb; - hi_dci0_pdu->hi_pdu.hi_pdu_rel8.cyclic_shift_2_for_drms = 0; - hi_dci0_pdu->hi_pdu.hi_pdu_rel8.hi_value = 1; - hi_dci0_req->number_of_hi++; - - /* NN--> FK: we could either check the payload, or use a phy helper to detect a false msg3 */ - if ((num_sdu == 0) && (num_ce==0)) { - if (UE_id != -1) - UE_list->eNB_UE_stats[CC_idP][UE_id].total_num_errors_rx+=1; - /* - if (msg3_flagP != NULL) { - if( *msg3_flagP == 1 ) { - LOG_N(MAC,"[eNB %d] CC_id %d frame %d : false msg3 detection: signal phy to canceling RA and remove the UE\n", enb_mod_idP, CC_idP, frameP); - *msg3_flagP=0; - } - }*/ - } else { if (UE_id != -1) { - UE_list->eNB_UE_stats[CC_idP][UE_id].pdu_bytes_rx=sdu_lenP; - UE_list->eNB_UE_stats[CC_idP][UE_id].total_pdu_bytes_rx+=sdu_lenP; - UE_list->eNB_UE_stats[CC_idP][UE_id].total_num_pdus_rx+=1; - } - } + LOG_D(MAC, + "[eNB %d][PUSCH %d] CC_id %d Received ULSCH sdu round %d from PHY (rnti %x, UE_id %d) ul_cqi %d\n", + enb_mod_idP, harq_pid, CC_idP, + UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid], + current_rnti, UE_id, ul_cqi); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU,0); - stop_meas(&eNB->rx_ulsch_sdu); + AssertFatal(UE_list->UE_sched_ctrl[UE_id]. + round_UL[CC_idP][harq_pid] < 8, "round >= 8\n"); + if (sduP != NULL) { + UE_list->UE_sched_ctrl[UE_id].ul_inactivity_timer = 0; + UE_list->UE_sched_ctrl[UE_id].ul_failure_timer = 0; + UE_list->UE_sched_ctrl[UE_id].ul_scheduled &= + (~(1 << harq_pid)); + /* Update with smoothing: 3/4 of old value and 1/4 of new. + * This is the logic that was done in the function + * lte_est_timing_advance_pusch, maybe it's not necessary? + * maybe it's even not correct at all? + */ + UE_list->UE_sched_ctrl[UE_id].ta_update = + (UE_list->UE_sched_ctrl[UE_id].ta_update * 3 + + timing_advance) / 4; + UE_list->UE_sched_ctrl[UE_id].pusch_snr[CC_idP] = ul_cqi; + UE_list->UE_sched_ctrl[UE_id].ul_consecutive_errors = 0; + first_rb = + UE_list->UE_template[CC_idP][UE_id].first_rb_ul[harq_pid]; + + if (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync > 0) { + UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync = 0; + mac_eNB_rrc_ul_in_sync(enb_mod_idP, CC_idP, frameP, + subframeP, UE_RNTI(enb_mod_idP, + UE_id)); + } + } else { // we've got an error + LOG_D(MAC, + "[eNB %d][PUSCH %d] CC_id %d ULSCH in error in round %d, ul_cqi %d\n", + enb_mod_idP, harq_pid, CC_idP, + UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid], + ul_cqi); + + // AssertFatal(1==0,"ulsch in error\n"); + if (UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid] == + 3) { + UE_list->UE_sched_ctrl[UE_id].ul_scheduled &= + (~(1 << harq_pid)); + UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid] = + 0; + if (UE_list->UE_sched_ctrl[UE_id]. + ul_consecutive_errors++ == 10) + UE_list->UE_sched_ctrl[UE_id].ul_failure_timer = 1; + } else + UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid]++; + return; + + } + } else if ((RA_id = find_RA_id(enb_mod_idP, CC_idP, current_rnti)) != -1) { // Check if this is an RA process for the rnti + AssertFatal(mac->common_channels[CC_idP]. + radioResourceConfigCommon->rach_ConfigCommon. + maxHARQ_Msg3Tx > 1, + "maxHARQ %d should be greater than 1\n", + (int) mac->common_channels[CC_idP]. + radioResourceConfigCommon->rach_ConfigCommon. + maxHARQ_Msg3Tx); + + LOG_D(MAC, + "[eNB %d][PUSCH %d] CC_id %d Received ULSCH sdu round %d from PHY (rnti %x, RA_id %d) ul_cqi %d\n", + enb_mod_idP, harq_pid, CC_idP, ra[RA_id].msg3_round, + current_rnti, RA_id, ul_cqi); + + first_rb = ra->msg3_first_rb; + + if (sduP == NULL) { // we've got an error on Msg3 + LOG_D(MAC, + "[eNB %d] CC_id %d, RA %d ULSCH in error in round %d/%d\n", + enb_mod_idP, CC_idP, RA_id, + ra[RA_id].msg3_round, + (int) mac->common_channels[CC_idP]. + radioResourceConfigCommon->rach_ConfigCommon. + maxHARQ_Msg3Tx); + if (ra[RA_id].msg3_round == + mac->common_channels[CC_idP].radioResourceConfigCommon-> + rach_ConfigCommon.maxHARQ_Msg3Tx - 1) { + cancel_ra_proc(enb_mod_idP, CC_idP, frameP, current_rnti); + } + + else { + first_rb = + UE_list->UE_template[CC_idP][UE_id]. + first_rb_ul[harq_pid]; + ra[RA_id].msg3_round++; + // prepare handling of retransmission + ra[RA_id].Msg3_frame += + ((ra[RA_id].Msg3_subframe > 1) ? 1 : 0); + ra[RA_id].Msg3_subframe = + (ra[RA_id].Msg3_subframe + 8) % 10; + add_msg3(enb_mod_idP, CC_idP, &ra[RA_id], frameP, + subframeP); + } + return; + } + } else { + LOG_W(MAC, + "Cannot find UE or RA corresponding to ULSCH rnti %x, dropping it\n", + current_rnti); + return; + } + payload_ptr = + parse_ulsch_header(sduP, &num_ce, &num_sdu, rx_ces, rx_lcids, + rx_lengths, sdu_lenP); + + T(T_ENB_MAC_UE_UL_PDU, T_INT(enb_mod_idP), T_INT(CC_idP), + T_INT(current_rnti), T_INT(frameP), T_INT(subframeP), + T_INT(harq_pid), T_INT(sdu_lenP), T_INT(num_ce), T_INT(num_sdu)); + T(T_ENB_MAC_UE_UL_PDU_WITH_DATA, T_INT(enb_mod_idP), T_INT(CC_idP), + T_INT(current_rnti), T_INT(frameP), T_INT(subframeP), + T_INT(harq_pid), T_INT(sdu_lenP), T_INT(num_ce), T_INT(num_sdu), + T_BUFFER(sduP, sdu_lenP)); + + mac->eNB_stats[CC_idP].ulsch_bytes_rx = sdu_lenP; + mac->eNB_stats[CC_idP].total_ulsch_bytes_rx += sdu_lenP; + mac->eNB_stats[CC_idP].total_ulsch_pdus_rx += 1; + + UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid] = 0; + + // control element + for (i = 0; i < num_ce; i++) { + + T(T_ENB_MAC_UE_UL_CE, T_INT(enb_mod_idP), T_INT(CC_idP), + T_INT(current_rnti), T_INT(frameP), T_INT(subframeP), + T_INT(rx_ces[i])); + + switch (rx_ces[i]) { // implement and process BSR + CRNTI + + case POWER_HEADROOM: + if (UE_id != -1) { + UE_list->UE_template[CC_idP][UE_id].phr_info = + (payload_ptr[0] & 0x3f) - PHR_MAPPING_OFFSET; + LOG_D(MAC, + "[eNB %d] CC_id %d MAC CE_LCID %d : Received PHR PH = %d (db)\n", + enb_mod_idP, CC_idP, rx_ces[i], + UE_list->UE_template[CC_idP][UE_id].phr_info); + UE_list->UE_template[CC_idP][UE_id].phr_info_configured = + 1; + UE_list->UE_sched_ctrl[UE_id].phr_received = 1; + } + payload_ptr += sizeof(POWER_HEADROOM_CMD); + break; + + case CRNTI: + { + int old_rnti = + (((uint16_t) payload_ptr[0]) << 8) + payload_ptr[1]; + int old_UE_id = find_UE_id(enb_mod_idP, old_rnti); + LOG_D(MAC, + "[eNB %d] Frame %d, Subframe %d CC_id %d MAC CE_LCID %d (ce %d/%d): CRNTI %x (UE_id %d) in Msg3\n", + enb_mod_idP, frameP, subframeP, CC_idP, rx_ces[i], i, + num_ce, old_rnti, old_UE_id); + if (old_UE_id != -1) { + /* TODO: if the UE did random access (followed by a MAC uplink with + * CRNTI) because none of its scheduling request was granted, then + * according to 36.321 5.4.4 the UE's MAC will notify RRC to release + * PUCCH/SRS. According to 36.331 5.3.13 the UE will then apply + * default configuration for CQI reporting and scheduling requests, + * which basically means that the CQI requests won't work anymore and + * that the UE won't do any scheduling request anymore as long as the + * eNB doesn't reconfigure the UE. + * We have to take care of this. As the code is, nothing is done and + * the UE state in the eNB is wrong. + */ + UE_id = old_UE_id; + UE_list->UE_sched_ctrl[UE_id].ul_inactivity_timer = 0; + UE_list->UE_sched_ctrl[UE_id].ul_failure_timer = 0; + if (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync > 0) { + UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync = 0; + mac_eNB_rrc_ul_in_sync(enb_mod_idP, CC_idP, frameP, + subframeP, old_rnti); + } + /* receiving CRNTI means that the current rnti has to go away */ + cancel_ra_proc(enb_mod_idP, CC_idP, frameP, + current_rnti); + current_rnti = old_rnti; + } + crnti_rx = 1; + payload_ptr += 2; + break; + } + + case TRUNCATED_BSR: + case SHORT_BSR: + { + uint8_t lcgid; + lcgid = (payload_ptr[0] >> 6); + + LOG_D(MAC, + "[eNB %d] CC_id %d MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n", + enb_mod_idP, CC_idP, rx_ces[i], lcgid, + payload_ptr[0] & 0x3f); + + if (crnti_rx == 1) + LOG_D(MAC, + "[eNB %d] CC_id %d MAC CE_LCID %d : Received short BSR LCGID = %u bsr = %d\n", + enb_mod_idP, CC_idP, rx_ces[i], lcgid, + payload_ptr[0] & 0x3f); + if (UE_id != -1) { + + UE_list->UE_template[CC_idP][UE_id].bsr_info[lcgid] = + (payload_ptr[0] & 0x3f); + + // update buffer info + + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[lcgid] = + BSR_TABLE[UE_list->UE_template[CC_idP][UE_id]. + bsr_info[lcgid]]; + + UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[lcgid]; + + RC.eNB[enb_mod_idP][CC_idP]-> + pusch_stats_bsr[UE_id][(frameP * 10) + subframeP] + = (payload_ptr[0] & 0x3f); + if (UE_id == UE_list->head) + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME + (VCD_SIGNAL_DUMPER_VARIABLES_UE0_BSR, + RC.eNB[enb_mod_idP][CC_idP]->pusch_stats_bsr + [UE_id][(frameP * 10) + subframeP]); + if (UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_creation_time[lcgid] + == 0) { + UE_list->UE_template[CC_idP] + [UE_id].ul_buffer_creation_time[lcgid] = + frameP; + } + if (mac_eNB_get_rrc_status + (enb_mod_idP, + UE_RNTI(enb_mod_idP, UE_id)) < RRC_CONNECTED) + LOG_D(MAC, + "[eNB %d] CC_id %d MAC CE_LCID %d : ul_total_buffer = %d (lcg increment %d)\n", + enb_mod_idP, CC_idP, rx_ces[i], + UE_list->UE_template[CC_idP][UE_id]. + ul_total_buffer, + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[lcgid]); + } else { + + } + payload_ptr += 1; //sizeof(SHORT_BSR); // fixme + } + break; + + case LONG_BSR: + if (UE_id != -1) { + UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID0] = + ((payload_ptr[0] & 0xFC) >> 2); + UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID1] = + ((payload_ptr[0] & 0x03) << 4) | + ((payload_ptr[1] & 0xF0) >> 4); + UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID2] = + ((payload_ptr[1] & 0x0F) << 2) | + ((payload_ptr[2] & 0xC0) >> 6); + UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID3] = + (payload_ptr[2] & 0x3F); + + // update buffer info + old_buffer_info = + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[LCGID0]; + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[LCGID0] = + BSR_TABLE[UE_list->UE_template[CC_idP][UE_id]. + bsr_info[LCGID0]]; + + UE_list->UE_template[CC_idP][UE_id].ul_total_buffer += + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[LCGID0]; + if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= + old_buffer_info) + UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= + old_buffer_info; + else + UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = + 0; + + old_buffer_info = + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[LCGID1]; + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[LCGID1] = + BSR_TABLE[UE_list->UE_template[CC_idP][UE_id]. + bsr_info[LCGID1]]; + UE_list->UE_template[CC_idP][UE_id].ul_total_buffer += + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[LCGID1]; + if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= + old_buffer_info) + UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= + old_buffer_info; + else + UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = + 0; + + old_buffer_info = + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[LCGID2]; + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[LCGID2] = + BSR_TABLE[UE_list->UE_template[CC_idP][UE_id]. + bsr_info[LCGID2]]; + UE_list->UE_template[CC_idP][UE_id].ul_total_buffer += + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[LCGID2]; + if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= + old_buffer_info) + UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= + old_buffer_info; + else + UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = + 0; + + old_buffer_info = + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[LCGID3]; + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[LCGID3] = + BSR_TABLE[UE_list->UE_template[CC_idP][UE_id]. + bsr_info[LCGID3]]; + UE_list->UE_template[CC_idP][UE_id].ul_total_buffer += + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[LCGID3]; + if (UE_list->UE_template[CC_idP][UE_id].ul_total_buffer >= + old_buffer_info) + UE_list->UE_template[CC_idP][UE_id].ul_total_buffer -= + old_buffer_info; + else + UE_list->UE_template[CC_idP][UE_id].ul_total_buffer = + 0; + + LOG_D(MAC, + "[eNB %d] CC_id %d MAC CE_LCID %d: Received long BSR LCGID0 = %u LCGID1 = " + "%u LCGID2 = %u LCGID3 = %u\n", enb_mod_idP, CC_idP, + rx_ces[i], + UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID0], + UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID1], + UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID2], + UE_list->UE_template[CC_idP][UE_id]. + bsr_info[LCGID3]); + if (crnti_rx == 1) + LOG_D(MAC, + "[eNB %d] CC_id %d MAC CE_LCID %d: Received long BSR LCGID0 = %u LCGID1 = " + "%u LCGID2 = %u LCGID3 = %u\n", enb_mod_idP, + CC_idP, rx_ces[i], + UE_list->UE_template[CC_idP][UE_id]. + bsr_info[LCGID0], + UE_list->UE_template[CC_idP][UE_id]. + bsr_info[LCGID1], + UE_list->UE_template[CC_idP][UE_id]. + bsr_info[LCGID2], + UE_list->UE_template[CC_idP][UE_id]. + bsr_info[LCGID3]); + + if (UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID0] == + 0) { + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_creation_time[LCGID0] = 0; + } else if (UE_list->UE_template[CC_idP] + [UE_id].ul_buffer_creation_time[LCGID0] == 0) { + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_creation_time[LCGID0] = frameP; + } + + if (UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID1] == + 0) { + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_creation_time[LCGID1] = 0; + } else if (UE_list->UE_template[CC_idP] + [UE_id].ul_buffer_creation_time[LCGID1] == 0) { + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_creation_time[LCGID1] = frameP; + } + + if (UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID2] == + 0) { + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_creation_time[LCGID2] = 0; + } else if (UE_list->UE_template[CC_idP] + [UE_id].ul_buffer_creation_time[LCGID2] == 0) { + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_creation_time[LCGID2] = frameP; + } + + if (UE_list->UE_template[CC_idP][UE_id].bsr_info[LCGID3] == + 0) { + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_creation_time[LCGID3] = 0; + } else if (UE_list->UE_template[CC_idP] + [UE_id].ul_buffer_creation_time[LCGID3] == 0) { + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_creation_time[LCGID3] = frameP; + + } + } + + payload_ptr += 3; ////sizeof(LONG_BSR); + break; + + default: + LOG_E(MAC, + "[eNB %d] CC_id %d Received unknown MAC header (0x%02x)\n", + enb_mod_idP, CC_idP, rx_ces[i]); + break; + } + } + + for (i = 0; i < num_sdu; i++) { + LOG_D(MAC, "SDU Number %d MAC Subheader SDU_LCID %d, length %d\n", + i, rx_lcids[i], rx_lengths[i]); + + T(T_ENB_MAC_UE_UL_SDU, T_INT(enb_mod_idP), T_INT(CC_idP), + T_INT(current_rnti), T_INT(frameP), T_INT(subframeP), + T_INT(rx_lcids[i]), T_INT(rx_lengths[i])); + T(T_ENB_MAC_UE_UL_SDU_WITH_DATA, T_INT(enb_mod_idP), T_INT(CC_idP), + T_INT(current_rnti), T_INT(frameP), T_INT(subframeP), + T_INT(rx_lcids[i]), T_INT(rx_lengths[i]), T_BUFFER(payload_ptr, + rx_lengths + [i])); + + switch (rx_lcids[i]) { + case CCCH: + if (rx_lengths[i] > CCCH_PAYLOAD_SIZE_MAX) { + LOG_E(MAC, + "[eNB %d/%d] frame %d received CCCH of size %d (too big, maximum allowed is %d, sdu_len %d), dropping packet\n", + enb_mod_idP, CC_idP, frameP, rx_lengths[i], + CCCH_PAYLOAD_SIZE_MAX, sdu_lenP); + break; + } + LOG_D(MAC, + "[eNB %d][RAPROC] CC_id %d Frame %d, Received CCCH: %x.%x.%x.%x.%x.%x, Terminating RA procedure for UE rnti %x\n", + enb_mod_idP, CC_idP, frameP, payload_ptr[0], + payload_ptr[1], payload_ptr[2], payload_ptr[3], + payload_ptr[4], payload_ptr[5], current_rnti); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_TERMINATE_RA_PROC, 1); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_TERMINATE_RA_PROC, 0); + for (ii = 0; ii < NB_RA_PROC_MAX; ii++) { + RA_t *ra = &mac->common_channels[CC_idP].ra[ii]; + + LOG_D(MAC, + "[mac %d][RAPROC] CC_id %d Checking proc %d : rnti (%x, %x), state %d\n", + enb_mod_idP, CC_idP, ii, ra->rnti, + current_rnti, ra->state); + + if ((ra->rnti == current_rnti) && (ra->state != IDLE)) { + + //payload_ptr = parse_ulsch_header(msg3,&num_ce,&num_sdu,rx_ces,rx_lcids,rx_lengths,msg3_len); + + if (UE_id < 0) { + memcpy(&ra->cont_res_id[0], payload_ptr, 6); + LOG_D(MAC, + "[eNB %d][RAPROC] CC_id %d Frame %d CCCH: Received Msg3: length %d, offset %ld\n", + enb_mod_idP, CC_idP, frameP, rx_lengths[i], + payload_ptr - sduP); + + if ((UE_id = + add_new_ue(enb_mod_idP, CC_idP, + mac->common_channels[CC_idP]. + ra[ii].rnti, harq_pid +#ifdef Rel14 + , + mac->common_channels[CC_idP]. + ra[ii].rach_resource_type +#endif + )) == -1) { + AssertFatal(1 == 0, + "[MAC][eNB] Max user count reached\n"); + // kill RA procedure + } else + LOG_D(MAC, + "[eNB %d][RAPROC] CC_id %d Frame %d Added user with rnti %x => UE %d\n", + enb_mod_idP, CC_idP, frameP, ra->rnti, + UE_id); + } else { + LOG_D(MAC, + "[eNB %d][RAPROC] CC_id %d Frame %d CCCH: Received Msg3 from already registered UE %d: length %d, offset %ld\n", + enb_mod_idP, CC_idP, frameP, UE_id, + rx_lengths[i], payload_ptr - sduP); + // kill RA procedure + } + + mac_rrc_data_ind(enb_mod_idP, + CC_idP, + frameP, subframeP, + current_rnti, + CCCH, + (uint8_t *) payload_ptr, + rx_lengths[i], + ENB_FLAG_YES, enb_mod_idP, 0); + + + if (num_ce > 0) { // handle msg3 which is not RRCConnectionRequest + // process_ra_message(msg3,num_ce,rx_lcids,rx_ces); + } + // prepare transmission of Msg4 + ra->state = MSG4; + + + + // Program Msg4 PDCCH+DLSCH/MPDCCH transmission 4 subframes from now, // Check if this is ok for BL/CE, or if the rule is different + ra->Msg4_frame = frameP + ((subframeP > 5) ? 1 : 0); + ra->Msg4_subframe = (subframeP + 4) % 10; + + } // if process is active + } // loop on RA processes + + break; + + case DCCH: + case DCCH1: + // if(eNB_mac_inst[module_idP][CC_idP].Dcch_lchan[UE_id].Active==1){ + + +#if defined(ENABLE_MAC_PAYLOAD_DEBUG) + LOG_T(MAC, "offset: %d\n", + (unsigned char) ((unsigned char *) payload_ptr - sduP)); + for (j = 0; j < 32; j++) { + LOG_T(MAC, "%x ", payload_ptr[j]); + } + LOG_T(MAC, "\n"); +#endif + + if (UE_id != -1) { + // adjust buffer occupancy of the correponding logical channel group + if (UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[UE_list->UE_template[CC_idP] + [UE_id].lcgidmap[rx_lcids[i]]] >= + rx_lengths[i]) + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[UE_list->UE_template[CC_idP] + [UE_id].lcgidmap[rx_lcids[i]]] -= + rx_lengths[i]; + else + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[UE_list->UE_template[CC_idP] + [UE_id].lcgidmap[rx_lcids[i]]] = 0; + + LOG_D(MAC, + "[eNB %d] CC_id %d Frame %d : ULSCH -> UL-DCCH, received %d bytes form UE %d on LCID %d \n", + enb_mod_idP, CC_idP, frameP, rx_lengths[i], UE_id, + rx_lcids[i]); + + mac_rlc_data_ind(enb_mod_idP, current_rnti, enb_mod_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_NO, rx_lcids[i], (char *) payload_ptr, rx_lengths[i], 1, NULL); //(unsigned int*)crc_status); + UE_list->eNB_UE_stats[CC_idP][UE_id]. + num_pdu_rx[rx_lcids[i]] += 1; + UE_list->eNB_UE_stats[CC_idP][UE_id]. + num_bytes_rx[rx_lcids[i]] + += rx_lengths[i]; + + + } + + /* UE_id != -1 */ + // } + break; + + // all the DRBS + case DTCH: + default: + +#if defined(ENABLE_MAC_PAYLOAD_DEBUG) + LOG_T(MAC, "offset: %d\n", + (unsigned char) ((unsigned char *) payload_ptr - sduP)); + for (j = 0; j < 32; j++) { + LOG_T(MAC, "%x ", payload_ptr[j]); + } + LOG_T(MAC, "\n"); +#endif + if (rx_lcids[i] < NB_RB_MAX) { + LOG_D(MAC, + "[eNB %d] CC_id %d Frame %d : ULSCH -> UL-DTCH, received %d bytes from UE %d for lcid %d\n", + enb_mod_idP, CC_idP, frameP, rx_lengths[i], UE_id, + rx_lcids[i]); + + if (UE_id != -1) { + // adjust buffer occupancy of the correponding logical channel group + LOG_D(MAC, + "[eNB %d] CC_id %d Frame %d : ULSCH -> UL-DTCH, received %d bytes from UE %d for lcid %d, removing from LCGID %ld, %d\n", + enb_mod_idP, CC_idP, frameP, rx_lengths[i], + UE_id, rx_lcids[i], + UE_list->UE_template[CC_idP][UE_id]. + lcgidmap[rx_lcids[i]], + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[UE_list->UE_template[CC_idP] + [UE_id].lcgidmap[rx_lcids[i]]]); + + if (UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[UE_list->UE_template[CC_idP] + [UE_id].lcgidmap[rx_lcids[i]]] + >= rx_lengths[i]) + UE_list->UE_template[CC_idP][UE_id]. + ul_buffer_info[UE_list->UE_template[CC_idP] + [UE_id].lcgidmap[rx_lcids[i]]] + -= rx_lengths[i]; + else + UE_list->UE_template[CC_idP][UE_id].ul_buffer_info + [UE_list->UE_template[CC_idP][UE_id].lcgidmap + [rx_lcids[i]]] = 0; + if ((rx_lengths[i] < SCH_PAYLOAD_SIZE_MAX) + && (rx_lengths[i] > 0)) { // MAX SIZE OF transport block + mac_rlc_data_ind(enb_mod_idP, current_rnti, enb_mod_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_NO, rx_lcids[i], (char *) payload_ptr, rx_lengths[i], 1, NULL); //(unsigned int*)crc_status); + + UE_list->eNB_UE_stats[CC_idP][UE_id]. + num_pdu_rx[rx_lcids[i]] += 1; + UE_list->eNB_UE_stats[CC_idP][UE_id]. + num_bytes_rx[rx_lcids[i]] += rx_lengths[i]; + } else { /* rx_length[i] */ + UE_list->eNB_UE_stats[CC_idP][UE_id]. + num_errors_rx += 1; + LOG_E(MAC, + "[eNB %d] CC_id %d Frame %d : Max size of transport block reached LCID %d from UE %d ", + enb_mod_idP, CC_idP, frameP, rx_lcids[i], + UE_id); + } + } else { /*(UE_id != -1 */ + LOG_E(MAC, + "[eNB %d] CC_id %d Frame %d : received unsupported or unknown LCID %d from UE %d ", + enb_mod_idP, CC_idP, frameP, rx_lcids[i], UE_id); + } + } + + break; + } + + payload_ptr += rx_lengths[i]; + } + + // Program ACK for PHICH + LOG_D(MAC, + "Programming PHICH ACK for rnti %x harq_pid %d (first_rb %d)\n", + current_rnti, harq_pid, first_rb); + nfapi_hi_dci0_request_body_t *hi_dci0_req = + &mac->HI_DCI0_req[CC_idP].hi_dci0_request_body; + nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = + &hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req->number_of_dci + + hi_dci0_req->number_of_hi]; + memset((void *) hi_dci0_pdu, 0, sizeof(nfapi_hi_dci0_request_pdu_t)); + hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_HI_PDU_TYPE; + hi_dci0_pdu->pdu_size = 2 + sizeof(nfapi_hi_dci0_hi_pdu); + hi_dci0_pdu->hi_pdu.hi_pdu_rel8.resource_block_start = first_rb; + hi_dci0_pdu->hi_pdu.hi_pdu_rel8.cyclic_shift_2_for_drms = 0; + hi_dci0_pdu->hi_pdu.hi_pdu_rel8.hi_value = 1; + hi_dci0_req->number_of_hi++; + + /* NN--> FK: we could either check the payload, or use a phy helper to detect a false msg3 */ + if ((num_sdu == 0) && (num_ce == 0)) { + if (UE_id != -1) + UE_list->eNB_UE_stats[CC_idP][UE_id].total_num_errors_rx += 1; + /* + if (msg3_flagP != NULL) { + if( *msg3_flagP == 1 ) { + LOG_N(MAC,"[eNB %d] CC_id %d frame %d : false msg3 detection: signal phy to canceling RA and remove the UE\n", enb_mod_idP, CC_idP, frameP); + *msg3_flagP=0; + } + } */ + } else { + if (UE_id != -1) { + UE_list->eNB_UE_stats[CC_idP][UE_id].pdu_bytes_rx = sdu_lenP; + UE_list->eNB_UE_stats[CC_idP][UE_id].total_pdu_bytes_rx += + sdu_lenP; + UE_list->eNB_UE_stats[CC_idP][UE_id].total_num_pdus_rx += 1; + } + } + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU, 0); + stop_meas(&mac->rx_ulsch_sdu); } uint32_t bytes_to_bsr_index(int32_t nbytes) { - uint32_t i=0; + uint32_t i = 0; - if (nbytes<0) { - return(0); - } + if (nbytes < 0) { + return (0); + } - while ((iE == 0) { - not_done = 0; + if (((SCH_SUBHEADER_FIXED *) mac_header_ptr)->E == 0) { + not_done = 0; + } + + lcid = ((SCH_SUBHEADER_FIXED *) mac_header_ptr)->LCID; + + if (lcid < EXTENDED_POWER_HEADROOM) { + if (not_done == 0) { // last MAC SDU, length is implicit + mac_header_ptr++; + length = + tb_length - (mac_header_ptr - mac_header) - ce_len; + + for (num_sdu_cnt = 0; num_sdu_cnt < num_sdus; + num_sdu_cnt++) { + length -= rx_lengths[num_sdu_cnt]; + } + } else { + if (((SCH_SUBHEADER_SHORT *) mac_header_ptr)->F == 0) { + length = ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->L; + mac_header_ptr += 2; //sizeof(SCH_SUBHEADER_SHORT); + } else { // F = 1 + length = + ((((SCH_SUBHEADER_LONG *) mac_header_ptr)->L_MSB & + 0x7f) << 8) | (((SCH_SUBHEADER_LONG *) + mac_header_ptr)->L_LSB & 0xff); + mac_header_ptr += 3; //sizeof(SCH_SUBHEADER_LONG); + } + } + + LOG_D(MAC, + "[eNB] sdu %d lcid %d tb_length %d length %d (offset now %ld)\n", + num_sdus, lcid, tb_length, length, + mac_header_ptr - mac_header); + rx_lcids[num_sdus] = lcid; + rx_lengths[num_sdus] = length; + num_sdus++; + } else { // This is a control element subheader POWER_HEADROOM, BSR and CRNTI + if (lcid == SHORT_PADDING) { + mac_header_ptr++; + } else { + rx_ces[num_ces] = lcid; + num_ces++; + mac_header_ptr++; + + if (lcid == LONG_BSR) { + ce_len += 3; + } else if (lcid == CRNTI) { + ce_len += 2; + } else if ((lcid == POWER_HEADROOM) + || (lcid == TRUNCATED_BSR) + || (lcid == SHORT_BSR)) { + ce_len++; + } else { + LOG_E(MAC, "unknown CE %d \n", lcid); + AssertFatal(1 == 0, "unknown CE"); + } + } + } } - lcid = ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID; + *num_ce = num_ces; + *num_sdu = num_sdus; - if (lcid < EXTENDED_POWER_HEADROOM) { - if (not_done==0) { // last MAC SDU, length is implicit - mac_header_ptr++; - length = tb_length-(mac_header_ptr-mac_header)-ce_len; - - for (num_sdu_cnt=0; num_sdu_cnt < num_sdus ; num_sdu_cnt++) { - length -= rx_lengths[num_sdu_cnt]; - } - } else { - if (((SCH_SUBHEADER_SHORT *)mac_header_ptr)->F == 0) { - length = ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->L; - mac_header_ptr += 2;//sizeof(SCH_SUBHEADER_SHORT); - } else { // F = 1 - length = ((((SCH_SUBHEADER_LONG *)mac_header_ptr)->L_MSB & 0x7f ) << 8 ) | (((SCH_SUBHEADER_LONG *)mac_header_ptr)->L_LSB & 0xff); - mac_header_ptr += 3;//sizeof(SCH_SUBHEADER_LONG); - } - } - - LOG_D(MAC,"[eNB] sdu %d lcid %d tb_length %d length %d (offset now %ld)\n", - num_sdus,lcid,tb_length, length,mac_header_ptr-mac_header); - rx_lcids[num_sdus] = lcid; - rx_lengths[num_sdus] = length; - num_sdus++; - } else { // This is a control element subheader POWER_HEADROOM, BSR and CRNTI - if (lcid == SHORT_PADDING) { - mac_header_ptr++; - } else { - rx_ces[num_ces] = lcid; - num_ces++; - mac_header_ptr++; - - if (lcid==LONG_BSR) { - ce_len+=3; - } else if (lcid==CRNTI) { - ce_len+=2; - } else if ((lcid==POWER_HEADROOM) || (lcid==TRUNCATED_BSR)|| (lcid== SHORT_BSR)) { - ce_len++; - } else { - LOG_E(MAC,"unknown CE %d \n", lcid); - AssertFatal(1==0,"unknown CE"); - } - } - } - } - - *num_ce = num_ces; - *num_sdu = num_sdus; - - return(mac_header_ptr); + return (mac_header_ptr); } /* This function is called by PHY layer when it schedules some @@ -707,538 +902,629 @@ unsigned char *parse_ulsch_header(unsigned char *mac_header, * The MAC scheduler has to skip the RBs used by this message 3 * (done below in schedule_ulsch). */ -void set_msg3_subframe(module_id_t Mod_id, - int CC_id, - int frame, - int subframe, - int rnti, - int Msg3_frame, - int Msg3_subframe) +void +set_msg3_subframe(module_id_t Mod_id, + int CC_id, + int frame, + int subframe, int rnti, int Msg3_frame, + int Msg3_subframe) { - eNB_MAC_INST *eNB=RC.mac[Mod_id]; - int i; - for (i=0; icommon_channels[CC_id].RA_template[i].RA_active == TRUE && - eNB->common_channels[CC_id].RA_template[i].rnti == rnti) { - eNB->common_channels[CC_id].RA_template[i].Msg3_subframe = Msg3_subframe; - break; + eNB_MAC_INST *mac = RC.mac[Mod_id]; + int i; + for (i = 0; i < NB_RA_PROC_MAX; i++) { + if (mac->common_channels[CC_id].ra[i].state != IDLE && + mac->common_channels[CC_id].ra[i].rnti == rnti) { + mac->common_channels[CC_id].ra[i].Msg3_subframe = + Msg3_subframe; + break; + } } - } } -void schedule_ulsch(module_id_t module_idP, - frame_t frameP, - sub_frame_t subframeP) +void +schedule_ulsch(module_id_t module_idP, frame_t frameP, + sub_frame_t subframeP) { - uint16_t first_rb[MAX_NUM_CCs],i; - int CC_id; - eNB_MAC_INST *eNB=RC.mac[module_idP]; - COMMON_channels_t *cc; + uint16_t first_rb[MAX_NUM_CCs], i; + int CC_id; + eNB_MAC_INST *mac = RC.mac[module_idP]; + COMMON_channels_t *cc; - start_meas(&eNB->schedule_ulsch); + start_meas(&mac->schedule_ulsch); - int sched_subframe = (subframeP+4)%10; + int sched_subframe = (subframeP + 4) % 10; - cc = &eNB->common_channels[0]; - int tdd_sfa; - // for TDD: check subframes where we have to act and return if nothing should be done now - if (cc->tdd_Config) { - tdd_sfa = cc->tdd_Config->subframeAssignment; - switch (subframeP) { - case 0: - if ((tdd_sfa == 0)|| - (tdd_sfa == 3)|| - (tdd_sfa == 6)) sched_subframe = 4; - else return; - break; - case 1: - if ((tdd_sfa==0)|| - (tdd_sfa==1)) sched_subframe = 7; - else if (tdd_sfa==6) sched_subframe = 8; - break; - default: - return; + cc = &mac->common_channels[0]; + int tdd_sfa; + // for TDD: check subframes where we have to act and return if nothing should be done now + if (cc->tdd_Config) { + tdd_sfa = cc->tdd_Config->subframeAssignment; + switch (subframeP) { + case 0: + if ((tdd_sfa == 0) || (tdd_sfa == 3) || (tdd_sfa == 6)) + sched_subframe = 4; + else + return; + break; + case 1: + if ((tdd_sfa == 0) || (tdd_sfa == 1)) + sched_subframe = 7; + else if (tdd_sfa == 6) + sched_subframe = 8; + break; + default: + return; - case 2: // Don't schedule UL in subframe 2 for TDD - return; - case 3: - if (tdd_sfa==2) sched_subframe = 7; - else return; - break; - case 4: - if (tdd_sfa==1) sched_subframe = 8; - else return; - break; - case 5: - if (tdd_sfa==0) sched_subframe = 9; - else if (tdd_sfa==6) sched_subframe = 3; - else return; - break; - case 6: - if (tdd_sfa==1) sched_subframe = 2; - else if (tdd_sfa==6) sched_subframe = 3; - else return; - break; - case 7: - return; - case 8: - if ((tdd_sfa>=2) || (tdd_sfa<=5)) sched_subframe=2; - else return; - break; - case 9: - if ((tdd_sfa==1) || (tdd_sfa==3) || (tdd_sfa==4)) sched_subframe=3; - else if (tdd_sfa==6) sched_subframe=4; - else return; - break; + case 2: // Don't schedule UL in subframe 2 for TDD + return; + case 3: + if (tdd_sfa == 2) + sched_subframe = 7; + else + return; + break; + case 4: + if (tdd_sfa == 1) + sched_subframe = 8; + else + return; + break; + case 5: + if (tdd_sfa == 0) + sched_subframe = 9; + else if (tdd_sfa == 6) + sched_subframe = 3; + else + return; + break; + case 6: + if (tdd_sfa == 1) + sched_subframe = 2; + else if (tdd_sfa == 6) + sched_subframe = 3; + else + return; + break; + case 7: + return; + case 8: + if ((tdd_sfa >= 2) || (tdd_sfa <= 5)) + sched_subframe = 2; + else + return; + break; + case 9: + if ((tdd_sfa == 1) || (tdd_sfa == 3) || (tdd_sfa == 4)) + sched_subframe = 3; + else if (tdd_sfa == 6) + sched_subframe = 4; + else + return; + break; + } } - } - for (CC_id=0; CC_idRA_template[i].RA_active == TRUE) && - (cc->RA_template[i].generate_rar == 0) && - (cc->RA_template[i].generate_Msg4 == 0) && - (cc->RA_template[i].wait_ack_Msg4 == 0) && - (cc->RA_template[i].Msg3_subframe == sched_subframe)) { - first_rb[CC_id]++; - // cc->RA_template[i].Msg3_subframe = -1; - break; - } + for (i = 0; i < NB_RA_PROC_MAX; i++) { + if ((cc->ra[i].state == WAITMSG3) && + (cc->ra[i].Msg3_subframe == sched_subframe)) { + first_rb[CC_id]++; + // cc->ray[i].Msg3_subframe = -1; + break; + } + } } - } - schedule_ulsch_rnti(module_idP, frameP, subframeP, sched_subframe,first_rb); + schedule_ulsch_rnti(module_idP, frameP, subframeP, sched_subframe, + first_rb); - stop_meas(&eNB->schedule_ulsch); + stop_meas(&mac->schedule_ulsch); } -void schedule_ulsch_rnti(module_id_t module_idP, - frame_t frameP, - sub_frame_t subframeP, - unsigned char sched_subframeP, - uint16_t *first_rb) +void +schedule_ulsch_rnti(module_id_t module_idP, + frame_t frameP, + sub_frame_t subframeP, + unsigned char sched_subframeP, uint16_t * first_rb) { - int UE_id; - uint8_t aggregation = 2; - rnti_t rnti = -1; - uint8_t round = 0; - uint8_t harq_pid = 0; - uint8_t status = 0; - uint8_t rb_table_index = -1; - uint32_t cqi_req,cshift,ndi,tpc; - int32_t normalized_rx_power; - int32_t target_rx_power=-90; - static int32_t tpc_accumulated=0; - int n; - int CC_id = 0; - int drop_ue=0; - int N_RB_UL; - eNB_MAC_INST *eNB = RC.mac[module_idP]; - COMMON_channels_t *cc = eNB->common_channels; - UE_list_t *UE_list=&eNB->UE_list; - UE_TEMPLATE *UE_template; - UE_sched_ctrl *UE_sched_ctrl; - int sched_frame=frameP; - int rvidx_tab[4] = {0,2,3,1}; + int UE_id; + uint8_t aggregation = 2; + rnti_t rnti = -1; + uint8_t round = 0; + uint8_t harq_pid = 0; + uint8_t status = 0; + uint8_t rb_table_index = -1; + uint32_t cqi_req, cshift, ndi, tpc; + int32_t normalized_rx_power; + int32_t target_rx_power = -90; + static int32_t tpc_accumulated = 0; + int n; + int CC_id = 0; + int drop_ue = 0; + int N_RB_UL; + eNB_MAC_INST *mac = RC.mac[module_idP]; + COMMON_channels_t *cc = mac->common_channels; + UE_list_t *UE_list = &mac->UE_list; + UE_TEMPLATE *UE_template; + UE_sched_ctrl *UE_sched_ctrl; + int sched_frame = frameP; + int rvidx_tab[4] = { 0, 2, 3, 1 }; - if (sched_subframePHI_DCI0_req[CC_id].hi_dci0_request_body; - nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu; + nfapi_hi_dci0_request_body_t *hi_dci0_req = + &mac->HI_DCI0_req[CC_id].hi_dci0_request_body; + nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu; - nfapi_ul_config_request_body_t *ul_req_tmp = &eNB->UL_req_tmp[CC_id][sched_subframeP].ul_config_request_body; + nfapi_ul_config_request_body_t *ul_req_tmp = + &mac->UL_req_tmp[CC_id][sched_subframeP].ul_config_request_body; - LOG_D(MAC,"entering ulsch preprocesor\n"); - ulsch_scheduler_pre_processor(module_idP, - frameP, - subframeP, - first_rb); + LOG_D(MAC, "entering ulsch preprocesor\n"); + ulsch_scheduler_pre_processor(module_idP, frameP, subframeP, first_rb); - LOG_D(MAC,"exiting ulsch preprocesor\n"); + LOG_D(MAC, "exiting ulsch preprocesor\n"); - eNB->HI_DCI0_req[CC_id].sfn_sf = (frameP<<4)+subframeP; + mac->HI_DCI0_req[CC_id].sfn_sf = (frameP << 4) + subframeP; - // loop over all active UEs - for (UE_id=UE_list->head_ul; UE_id>=0; UE_id=UE_list->next_ul[UE_id]) { + // loop over all active UEs + for (UE_id = UE_list->head_ul; UE_id >= 0; + UE_id = UE_list->next_ul[UE_id]) { - // don't schedule if Msg4 is not received yet - if (UE_list->UE_template[UE_PCCID(module_idP,UE_id)][UE_id].configured==FALSE) { - LOG_D(MAC,"[eNB %d] frame %d subfarme %d, UE %d: not configured, skipping UE scheduling \n", - module_idP,frameP,subframeP,UE_id); - continue; - } + // don't schedule if Msg4 is not received yet + if (UE_list->UE_template[UE_PCCID(module_idP, UE_id)][UE_id]. + configured == FALSE) { + LOG_D(MAC, + "[eNB %d] frame %d subfarme %d, UE %d: not configured, skipping UE scheduling \n", + module_idP, frameP, subframeP, UE_id); + continue; + } - rnti = UE_RNTI(module_idP,UE_id); + rnti = UE_RNTI(module_idP, UE_id); - if (rnti==NOT_A_RNTI) { - LOG_W(MAC,"[eNB %d] frame %d subfarme %d, UE %d: no RNTI \n", module_idP,frameP,subframeP,UE_id); - continue; - } + if (rnti == NOT_A_RNTI) { + LOG_W(MAC, "[eNB %d] frame %d subfarme %d, UE %d: no RNTI \n", + module_idP, frameP, subframeP, UE_id); + continue; + } - drop_ue = 0; - /* let's drop the UE if get_eNB_UE_stats returns NULL when calling it with any of the UE's active UL CCs */ - /* TODO: refine? + drop_ue = 0; + /* let's drop the UE if get_eNB_UE_stats returns NULL when calling it with any of the UE's active UL CCs */ + /* TODO: refine? - for (n=0; nnumactiveULCCs[UE_id]; n++) { - CC_id = UE_list->ordered_ULCCids[n][UE_id]; + for (n=0; nnumactiveULCCs[UE_id]; n++) { + CC_id = UE_list->ordered_ULCCids[n][UE_id]; - if (mac_xface->get_eNB_UE_stats(module_idP,CC_id,rnti) == NULL) { - LOG_W(MAC,"[eNB %d] frame %d subframe %d, UE %d/%x CC %d: no PHY context\n", module_idP,frameP,subframeP,UE_id,rnti,CC_id); - drop_ue = 1; - break; - } - }*/ - if (drop_ue == 1) { + if (mac_xface->get_eNB_UE_stats(module_idP,CC_id,rnti) == NULL) { + LOG_W(MAC,"[eNB %d] frame %d subframe %d, UE %d/%x CC %d: no PHY context\n", module_idP,frameP,subframeP,UE_id,rnti,CC_id); + drop_ue = 1; + break; + } + } */ + if (drop_ue == 1) { /* we can't come here, ulsch_scheduler_pre_processor won't put in the list a UE with no PHY context */ -abort(); - /* TODO: this is a hack. Sometimes the UE has no PHY context but - * is still present in the MAC with 'ul_failure_timer' = 0 and - * 'ul_out_of_sync' = 0. It seems wrong and the UE stays there forever. Let's - * start an UL out of sync procedure in this case. - * The root cause of this problem has to be found and corrected. - * In the meantime, this hack... - */ - if (UE_list->UE_sched_ctrl[UE_id].ul_failure_timer == 0 && - UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync == 0) { - LOG_W(MAC,"[eNB %d] frame %d subframe %d, UE %d/%x CC %d: UE in weird state, let's put it 'out of sync'\n", - module_idP,frameP,subframeP,UE_id,rnti,CC_id); - // inform RRC of failure and clear timer - mac_eNB_rrc_ul_failure(module_idP,CC_id,frameP,subframeP,rnti); - UE_list->UE_sched_ctrl[UE_id].ul_failure_timer=0; - UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync=1; - } - continue; - } + abort(); + /* TODO: this is a hack. Sometimes the UE has no PHY context but + * is still present in the MAC with 'ul_failure_timer' = 0 and + * 'ul_out_of_sync' = 0. It seems wrong and the UE stays there forever. Let's + * start an UL out of sync procedure in this case. + * The root cause of this problem has to be found and corrected. + * In the meantime, this hack... + */ + if (UE_list->UE_sched_ctrl[UE_id].ul_failure_timer == 0 && + UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync == 0) { + LOG_W(MAC, + "[eNB %d] frame %d subframe %d, UE %d/%x CC %d: UE in weird state, let's put it 'out of sync'\n", + module_idP, frameP, subframeP, UE_id, rnti, CC_id); + // inform RRC of failure and clear timer + mac_eNB_rrc_ul_failure(module_idP, CC_id, frameP, + subframeP, rnti); + UE_list->UE_sched_ctrl[UE_id].ul_failure_timer = 0; + UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync = 1; + } + continue; + } + // loop over all active UL CC_ids for this UE + for (n = 0; n < UE_list->numactiveULCCs[UE_id]; n++) { + // This is the actual CC_id in the list + CC_id = UE_list->ordered_ULCCids[n][UE_id]; + N_RB_UL = to_prb(cc[CC_id].ul_Bandwidth); - // loop over all active UL CC_ids for this UE - for (n=0; nnumactiveULCCs[UE_id]; n++) { - // This is the actual CC_id in the list - CC_id = UE_list->ordered_ULCCids[n][UE_id]; - N_RB_UL = to_prb(cc[CC_id].ul_Bandwidth); + /* + aggregation=get_aggregation(get_bw_index(module_idP,CC_id), + eNB_UE_stats->dl_cqi, + format0); + */ - /* - aggregation=get_aggregation(get_bw_index(module_idP,CC_id), - eNB_UE_stats->dl_cqi, - format0); - */ + if (CCE_allocation_infeasible + (module_idP, CC_id, 1, subframeP, aggregation, rnti)) { + LOG_W(MAC, + "[eNB %d] frame %d subframe %d, UE %d/%x CC %d: not enough nCCE\n", + module_idP, frameP, subframeP, UE_id, rnti, CC_id); + continue; // break; + } - if (CCE_allocation_infeasible(module_idP,CC_id,1,subframeP,aggregation,rnti)) { - LOG_W(MAC,"[eNB %d] frame %d subframe %d, UE %d/%x CC %d: not enough nCCE\n", module_idP,frameP,subframeP,UE_id,rnti,CC_id); - continue; // break; - } + /* be sure that there are some free RBs */ + if (first_rb[CC_id] >= N_RB_UL - 1) { + LOG_W(MAC, + "[eNB %d] frame %d subframe %d, UE %d/%x CC %d: dropping, not enough RBs\n", + module_idP, frameP, subframeP, UE_id, rnti, CC_id); + continue; + } + // if (eNB_UE_stats->mode == PUSCH) { // ue has a ulsch channel - /* be sure that there are some free RBs */ - if (first_rb[CC_id] >= N_RB_UL-1) { - LOG_W(MAC,"[eNB %d] frame %d subframe %d, UE %d/%x CC %d: dropping, not enough RBs\n", - module_idP,frameP,subframeP,UE_id,rnti,CC_id); - continue; - } + UE_template = &UE_list->UE_template[CC_id][UE_id]; + UE_sched_ctrl = &UE_list->UE_sched_ctrl[UE_id]; + harq_pid = + subframe2harqpid(&cc[CC_id], sched_frame, sched_subframeP); + round = UE_sched_ctrl->round_UL[CC_id][harq_pid]; + AssertFatal(round < 8, "round %d > 7 for UE %d/%x\n", round, + UE_id, rnti); + LOG_D(MAC, + "[eNB %d] frame %d subframe %d,Checking PUSCH %d for UE %d/%x CC %d : aggregation level %d, N_RB_UL %d\n", + module_idP, frameP, subframeP, harq_pid, UE_id, rnti, + CC_id, aggregation, N_RB_UL); - // if (eNB_UE_stats->mode == PUSCH) { // ue has a ulsch channel + RC.eNB[module_idP][CC_id]->pusch_stats_BO[UE_id][(frameP * + 10) + + subframeP] = + UE_template->ul_total_buffer; + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME + (VCD_SIGNAL_DUMPER_VARIABLES_UE0_BO, + RC.eNB[module_idP][CC_id]->pusch_stats_BO[UE_id][(frameP * + 10) + + subframeP]); + if (UE_is_to_be_scheduled(module_idP, CC_id, UE_id) > 0 || round > 0) // || ((frameP%10)==0)) + // if there is information on bsr of DCCH, DTCH or if there is UL_SR, or if there is a packet to retransmit, or we want to schedule a periodic feedback every 10 frames + { + LOG_D(MAC, + "[eNB %d][PUSCH %d] Frame %d subframe %d Scheduling UE %d/%x in round %d(SR %d,UL_inactivity timer %d,UL_failure timer %d,cqi_req_timer %d)\n", + module_idP, harq_pid, frameP, subframeP, UE_id, rnti, + round, UE_template->ul_SR, + UE_sched_ctrl->ul_inactivity_timer, + UE_sched_ctrl->ul_failure_timer, + UE_sched_ctrl->cqi_req_timer); + // reset the scheduling request + UE_template->ul_SR = 0; + status = mac_eNB_get_rrc_status(module_idP, rnti); + if (status < RRC_CONNECTED) + cqi_req = 0; + else if (UE_sched_ctrl->cqi_req_timer > 30) { + cqi_req = 1; + UE_sched_ctrl->cqi_req_timer = 0; + } else + cqi_req = 0; - UE_template = &UE_list->UE_template[CC_id][UE_id]; - UE_sched_ctrl = &UE_list->UE_sched_ctrl[UE_id]; - harq_pid = subframe2harqpid(&cc[CC_id],sched_frame,sched_subframeP); - round = UE_sched_ctrl->round_UL[CC_id][harq_pid]; - AssertFatal(round<8,"round %d > 7 for UE %d/%x\n",round,UE_id,rnti); - LOG_D(MAC,"[eNB %d] frame %d subframe %d,Checking PUSCH %d for UE %d/%x CC %d : aggregation level %d, N_RB_UL %d\n", - module_idP,frameP,subframeP,harq_pid,UE_id,rnti,CC_id, aggregation,N_RB_UL); + //power control + //compute the expected ULSCH RX power (for the stats) - RC.eNB[module_idP][CC_id]->pusch_stats_BO[UE_id][(frameP*10)+subframeP] = UE_template->ul_total_buffer; - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_BO,RC.eNB[module_idP][CC_id]->pusch_stats_BO[UE_id][(frameP*10)+subframeP]); - if (UE_is_to_be_scheduled(module_idP,CC_id,UE_id) > 0 || round > 0)// || ((frameP%10)==0)) - // if there is information on bsr of DCCH, DTCH or if there is UL_SR, or if there is a packet to retransmit, or we want to schedule a periodic feedback every 10 frames - { - LOG_D(MAC,"[eNB %d][PUSCH %d] Frame %d subframe %d Scheduling UE %d/%x in round %d(SR %d,UL_inactivity timer %d,UL_failure timer %d,cqi_req_timer %d)\n", - module_idP,harq_pid,frameP,subframeP,UE_id,rnti,round,UE_template->ul_SR, - UE_sched_ctrl->ul_inactivity_timer, + // this is the normalized RX power and this should be constant (regardless of mcs + normalized_rx_power = UE_sched_ctrl->pusch_snr[CC_id]; + target_rx_power = 178; - UE_sched_ctrl->ul_failure_timer, + // this assumes accumulated tpc + // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out + int32_t framex10psubframe = + UE_template->pusch_tpc_tx_frame * 10 + + UE_template->pusch_tpc_tx_subframe; + if (((framex10psubframe + 10) <= (frameP * 10 + subframeP)) || //normal case + ((framex10psubframe > (frameP * 10 + subframeP)) && (((10240 - framex10psubframe + frameP * 10 + subframeP) >= 10)))) //frame wrap-around + { + UE_template->pusch_tpc_tx_frame = frameP; + UE_template->pusch_tpc_tx_subframe = subframeP; + if (normalized_rx_power > (target_rx_power + 4)) { + tpc = 0; //-1 + tpc_accumulated--; + } else if (normalized_rx_power < (target_rx_power - 4)) { + tpc = 2; //+1 + tpc_accumulated++; + } else { + tpc = 1; //0 + } + } else { + tpc = 1; //0 + } + //tpc = 1; + if (tpc != 1) { + LOG_D(MAC, + "[eNB %d] ULSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n", + module_idP, frameP, subframeP, harq_pid, tpc, + tpc_accumulated, normalized_rx_power, + target_rx_power); + } + // new transmission + if (round == 0) { - UE_sched_ctrl->cqi_req_timer); - // reset the scheduling request - UE_template->ul_SR = 0; - status = mac_eNB_get_rrc_status(module_idP,rnti); - if (status < RRC_CONNECTED) - cqi_req = 0; - else if (UE_sched_ctrl->cqi_req_timer>30) { - cqi_req = 1; - UE_sched_ctrl->cqi_req_timer=0; - } - else - cqi_req = 0; + ndi = 1 - UE_template->oldNDI_UL[harq_pid]; + UE_template->oldNDI_UL[harq_pid] = ndi; + UE_list->eNB_UE_stats[CC_id][UE_id]. + normalized_rx_power = normalized_rx_power; + UE_list->eNB_UE_stats[CC_id][UE_id].target_rx_power = + target_rx_power; + UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1 = + UE_template->pre_assigned_mcs_ul; + UE_template->mcs_UL[harq_pid] = UE_template->pre_assigned_mcs_ul; //cmin (UE_template->pre_assigned_mcs_ul, openair_daq_vars.target_ue_ul_mcs); // adjust, based on user-defined MCS + if (UE_template->pre_allocated_rb_table_index_ul >= 0) { + rb_table_index = + UE_template->pre_allocated_rb_table_index_ul; + } else { + UE_template->mcs_UL[harq_pid] = 10; //cmin (10, openair_daq_vars.target_ue_ul_mcs); + rb_table_index = 5; // for PHR + } - //power control - //compute the expected ULSCH RX power (for the stats) - - // this is the normalized RX power and this should be constant (regardless of mcs - normalized_rx_power = UE_sched_ctrl->pusch_snr[CC_id]; - target_rx_power = 178; - - // this assumes accumulated tpc - // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out - int32_t framex10psubframe = UE_template->pusch_tpc_tx_frame*10+UE_template->pusch_tpc_tx_subframe; - if (((framex10psubframe+10)<=(frameP*10+subframeP)) || //normal case - ((framex10psubframe>(frameP*10+subframeP)) && (((10240-framex10psubframe+frameP*10+subframeP)>=10)))) //frame wrap-around - { - UE_template->pusch_tpc_tx_frame=frameP; - UE_template->pusch_tpc_tx_subframe=subframeP; - if (normalized_rx_power>(target_rx_power+4)) { - tpc = 0; //-1 - tpc_accumulated--; - } else if (normalized_rx_power<(target_rx_power-4)) { - tpc = 2; //+1 - tpc_accumulated++; - } else { - tpc = 1; //0 - } - } else { - tpc = 1; //0 - } - //tpc = 1; - if (tpc!=1) { - LOG_D(MAC,"[eNB %d] ULSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n", - module_idP,frameP,subframeP,harq_pid,tpc, - tpc_accumulated,normalized_rx_power,target_rx_power); - } - - // new transmission - if (round==0) { - - ndi = 1-UE_template->oldNDI_UL[harq_pid]; - UE_template->oldNDI_UL[harq_pid]=ndi; - UE_list->eNB_UE_stats[CC_id][UE_id].normalized_rx_power=normalized_rx_power; - UE_list->eNB_UE_stats[CC_id][UE_id].target_rx_power=target_rx_power; - UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1=UE_template->pre_assigned_mcs_ul; - UE_template->mcs_UL[harq_pid] = UE_template->pre_assigned_mcs_ul;//cmin (UE_template->pre_assigned_mcs_ul, openair_daq_vars.target_ue_ul_mcs); // adjust, based on user-defined MCS - if (UE_template->pre_allocated_rb_table_index_ul >=0) { - rb_table_index=UE_template->pre_allocated_rb_table_index_ul; - } else { - UE_template->mcs_UL[harq_pid]=10;//cmin (10, openair_daq_vars.target_ue_ul_mcs); - rb_table_index=5; // for PHR - } - - UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2=UE_template->mcs_UL[harq_pid]; - // buffer_occupancy = UE_template->ul_total_buffer; + UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2 = + UE_template->mcs_UL[harq_pid]; + // buffer_occupancy = UE_template->ul_total_buffer; - while (((rb_table[rb_table_index]>(N_RB_UL-1-first_rb[CC_id])) || - (rb_table[rb_table_index]>45)) && - (rb_table_index>0)) { - rb_table_index--; - } + while (((rb_table[rb_table_index] > + (N_RB_UL - 1 - first_rb[CC_id])) + || (rb_table[rb_table_index] > 45)) + && (rb_table_index > 0)) { + rb_table_index--; + } - UE_template->TBS_UL[harq_pid] = get_TBS_UL(UE_template->mcs_UL[harq_pid],rb_table[rb_table_index]); - UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx+=rb_table[rb_table_index]; - UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_TBS=UE_template->TBS_UL[harq_pid]; - // buffer_occupancy -= TBS; + UE_template->TBS_UL[harq_pid] = + get_TBS_UL(UE_template->mcs_UL[harq_pid], + rb_table[rb_table_index]); + UE_list->eNB_UE_stats[CC_id][UE_id]. + total_rbs_used_rx += rb_table[rb_table_index]; + UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_TBS = + UE_template->TBS_UL[harq_pid]; + // buffer_occupancy -= TBS; - T(T_ENB_MAC_UE_UL_SCHEDULE, T_INT(module_idP), T_INT(CC_id), T_INT(rnti), T_INT(frameP), - T_INT(subframeP), T_INT(harq_pid), T_INT(UE_template->mcs_UL[harq_pid]), T_INT(first_rb[CC_id]), T_INT(rb_table[rb_table_index]), - T_INT(UE_template->TBS_UL[harq_pid]), T_INT(ndi)); + T(T_ENB_MAC_UE_UL_SCHEDULE, T_INT(module_idP), + T_INT(CC_id), T_INT(rnti), T_INT(frameP), + T_INT(subframeP), T_INT(harq_pid), + T_INT(UE_template->mcs_UL[harq_pid]), + T_INT(first_rb[CC_id]), + T_INT(rb_table[rb_table_index]), + T_INT(UE_template->TBS_UL[harq_pid]), T_INT(ndi)); - if (mac_eNB_get_rrc_status(module_idP,rnti) < RRC_CONNECTED) - LOG_D(MAC,"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled UE %d (mcs %d, first rb %d, nb_rb %d, rb_table_index %d, TBS %d, harq_pid %d)\n", - module_idP,harq_pid,rnti,CC_id,frameP,subframeP,UE_id,UE_template->mcs_UL[harq_pid], - first_rb[CC_id],rb_table[rb_table_index], - rb_table_index,UE_template->TBS_UL[harq_pid],harq_pid); + if (mac_eNB_get_rrc_status(module_idP, rnti) < + RRC_CONNECTED) + LOG_D(MAC, + "[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled UE %d (mcs %d, first rb %d, nb_rb %d, rb_table_index %d, TBS %d, harq_pid %d)\n", + module_idP, harq_pid, rnti, CC_id, frameP, + subframeP, UE_id, + UE_template->mcs_UL[harq_pid], + first_rb[CC_id], rb_table[rb_table_index], + rb_table_index, + UE_template->TBS_UL[harq_pid], harq_pid); - // bad indices : 20 (40 PRB), 21 (45 PRB), 22 (48 PRB) - //store for possible retransmission - UE_template->nb_rb_ul[harq_pid] = rb_table[rb_table_index]; - UE_template->first_rb_ul[harq_pid] = first_rb[CC_id]; + // bad indices : 20 (40 PRB), 21 (45 PRB), 22 (48 PRB) + //store for possible retransmission + UE_template->nb_rb_ul[harq_pid] = + rb_table[rb_table_index]; + UE_template->first_rb_ul[harq_pid] = first_rb[CC_id]; - UE_sched_ctrl->ul_scheduled |= (1<head) - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_SCHEDULED,UE_sched_ctrl->ul_scheduled); + UE_sched_ctrl->ul_scheduled |= (1 << harq_pid); + if (UE_id == UE_list->head) + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME + (VCD_SIGNAL_DUMPER_VARIABLES_UE0_SCHEDULED, + UE_sched_ctrl->ul_scheduled); - // adjust total UL buffer status by TBS, wait for UL sdus to do final update - LOG_D(MAC,"[eNB %d] CC_id %d UE %d/%x : adjusting ul_total_buffer, old %d, TBS %d\n", module_idP,CC_id,UE_id,rnti,UE_template->ul_total_buffer,UE_template->TBS_UL[harq_pid]); - if (UE_template->ul_total_buffer > UE_template->TBS_UL[harq_pid]) - UE_template->ul_total_buffer -= UE_template->TBS_UL[harq_pid]; - else - UE_template->ul_total_buffer = 0; - LOG_D(MAC,"ul_total_buffer, new %d\n", UE_template->ul_total_buffer); - // Cyclic shift for DM RS - cshift = 0;// values from 0 to 7 can be used for mapping the cyclic shift (36.211 , Table 5.5.2.1.1-1) - // save it for a potential retransmission - UE_template->cshift[harq_pid] = cshift; + // adjust total UL buffer status by TBS, wait for UL sdus to do final update + LOG_D(MAC, + "[eNB %d] CC_id %d UE %d/%x : adjusting ul_total_buffer, old %d, TBS %d\n", + module_idP, CC_id, UE_id, rnti, + UE_template->ul_total_buffer, + UE_template->TBS_UL[harq_pid]); + if (UE_template->ul_total_buffer > + UE_template->TBS_UL[harq_pid]) + UE_template->ul_total_buffer -= + UE_template->TBS_UL[harq_pid]; + else + UE_template->ul_total_buffer = 0; + LOG_D(MAC, "ul_total_buffer, new %d\n", + UE_template->ul_total_buffer); + // Cyclic shift for DM RS + cshift = 0; // values from 0 to 7 can be used for mapping the cyclic shift (36.211 , Table 5.5.2.1.1-1) + // save it for a potential retransmission + UE_template->cshift[harq_pid] = cshift; - hi_dci0_pdu = &hi_dci0_req->hi_dci0_pdu_list[eNB->HI_DCI0_req[CC_id].hi_dci0_request_body.number_of_dci+eNB->HI_DCI0_req[CC_id].hi_dci0_request_body.number_of_hi]; - memset((void*)hi_dci0_pdu,0,sizeof(nfapi_hi_dci0_request_pdu_t)); - hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_DCI_PDU_TYPE; - hi_dci0_pdu->pdu_size = 2+sizeof(nfapi_hi_dci0_dci_pdu); - hi_dci0_pdu->dci_pdu.dci_pdu_rel8.dci_format = NFAPI_UL_DCI_FORMAT_0; - hi_dci0_pdu->dci_pdu.dci_pdu_rel8.aggregation_level = aggregation; - hi_dci0_pdu->dci_pdu.dci_pdu_rel8.rnti = rnti; - hi_dci0_pdu->dci_pdu.dci_pdu_rel8.transmission_power = 6000; - hi_dci0_pdu->dci_pdu.dci_pdu_rel8.resource_block_start = first_rb[CC_id]; - hi_dci0_pdu->dci_pdu.dci_pdu_rel8.number_of_resource_block = rb_table[rb_table_index]; - hi_dci0_pdu->dci_pdu.dci_pdu_rel8.mcs_1 = UE_template->mcs_UL[harq_pid]; - hi_dci0_pdu->dci_pdu.dci_pdu_rel8.cyclic_shift_2_for_drms = cshift; - hi_dci0_pdu->dci_pdu.dci_pdu_rel8.frequency_hopping_enabled_flag = 0; - hi_dci0_pdu->dci_pdu.dci_pdu_rel8.new_data_indication_1 = ndi; - hi_dci0_pdu->dci_pdu.dci_pdu_rel8.tpc = tpc; - hi_dci0_pdu->dci_pdu.dci_pdu_rel8.cqi_csi_request = cqi_req; - hi_dci0_pdu->dci_pdu.dci_pdu_rel8.dl_assignment_index = UE_template->DAI_ul[sched_subframeP]; + hi_dci0_pdu = + &hi_dci0_req->hi_dci0_pdu_list[mac->HI_DCI0_req + [CC_id]. + hi_dci0_request_body. + number_of_dci + + mac->HI_DCI0_req + [CC_id]. + hi_dci0_request_body. + number_of_hi]; + memset((void *) hi_dci0_pdu, 0, + sizeof(nfapi_hi_dci0_request_pdu_t)); + hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_DCI_PDU_TYPE; + hi_dci0_pdu->pdu_size = + 2 + sizeof(nfapi_hi_dci0_dci_pdu); + hi_dci0_pdu->dci_pdu.dci_pdu_rel8.dci_format = + NFAPI_UL_DCI_FORMAT_0; + hi_dci0_pdu->dci_pdu.dci_pdu_rel8.aggregation_level = + aggregation; + hi_dci0_pdu->dci_pdu.dci_pdu_rel8.rnti = rnti; + hi_dci0_pdu->dci_pdu.dci_pdu_rel8.transmission_power = + 6000; + hi_dci0_pdu->dci_pdu.dci_pdu_rel8. + resource_block_start = first_rb[CC_id]; + hi_dci0_pdu->dci_pdu.dci_pdu_rel8. + number_of_resource_block = + rb_table[rb_table_index]; + hi_dci0_pdu->dci_pdu.dci_pdu_rel8.mcs_1 = + UE_template->mcs_UL[harq_pid]; + hi_dci0_pdu->dci_pdu.dci_pdu_rel8. + cyclic_shift_2_for_drms = cshift; + hi_dci0_pdu->dci_pdu.dci_pdu_rel8. + frequency_hopping_enabled_flag = 0; + hi_dci0_pdu->dci_pdu.dci_pdu_rel8. + new_data_indication_1 = ndi; + hi_dci0_pdu->dci_pdu.dci_pdu_rel8.tpc = tpc; + hi_dci0_pdu->dci_pdu.dci_pdu_rel8.cqi_csi_request = + cqi_req; + hi_dci0_pdu->dci_pdu.dci_pdu_rel8.dl_assignment_index = + UE_template->DAI_ul[sched_subframeP]; - eNB->HI_DCI0_req[CC_id].hi_dci0_request_body.number_of_dci++; + mac->HI_DCI0_req[CC_id].hi_dci0_request_body. + number_of_dci++; - LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d\n", - harq_pid,frameP,subframeP,UE_id,rnti,sched_frame,sched_subframeP); + LOG_D(MAC, + "[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d\n", + harq_pid, frameP, subframeP, UE_id, rnti, + sched_frame, sched_subframeP); - // Add UL_config PDUs - fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus], - cqi_req, - cc, - UE_template->physicalConfigDedicated, - get_tmode(module_idP,CC_id,UE_id), - eNB->ul_handle, - rnti, - first_rb[CC_id], // resource_block_start - rb_table[rb_table_index], // number_of_resource_blocks - UE_template->mcs_UL[harq_pid], - cshift, // cyclic_shift_2_for_drms - 0, // frequency_hopping_enabled_flag - 0, // frequency_hopping_bits - ndi, // new_data_indication - 0, // redundancy_version - harq_pid, // harq_process_number - 0, // ul_tx_mode - 0, // current_tx_nb - 0, // n_srs - get_TBS_UL(UE_template->mcs_UL[harq_pid], - rb_table[rb_table_index]) - ); + // Add UL_config PDUs + fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus], cqi_req, cc, UE_template->physicalConfigDedicated, get_tmode(module_idP, CC_id, UE_id), mac->ul_handle, rnti, first_rb[CC_id], // resource_block_start + rb_table[rb_table_index], // number_of_resource_blocks + UE_template->mcs_UL[harq_pid], cshift, // cyclic_shift_2_for_drms + 0, // frequency_hopping_enabled_flag + 0, // frequency_hopping_bits + ndi, // new_data_indication + 0, // redundancy_version + harq_pid, // harq_process_number + 0, // ul_tx_mode + 0, // current_tx_nb + 0, // n_srs + get_TBS_UL + (UE_template-> + mcs_UL[harq_pid], + rb_table + [rb_table_index])); #ifdef Rel14 - if (UE_template->rach_resource_type>0) { // This is a BL/CE UE allocation - fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus], - UE_template->rach_resource_type>2 ? 2 : 1, - 1, //total_number_of_repetitions - 1, //repetition_number - (frameP*10)+subframeP); - } + if (UE_template->rach_resource_type > 0) { // This is a BL/CE UE allocation + fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus], UE_template->rach_resource_type > 2 ? 2 : 1, 1, //total_number_of_repetitions + 1, //repetition_number + (frameP * + 10) + + subframeP); + } #endif - ul_req_tmp->number_of_pdus++; - eNB->ul_handle++; + ul_req_tmp->number_of_pdus++; + mac->ul_handle++; - add_ue_ulsch_info(module_idP, - CC_id, - UE_id, - subframeP, - S_UL_SCHEDULED); + add_ue_ulsch_info(module_idP, + CC_id, UE_id, subframeP, + S_UL_SCHEDULED); - LOG_D(MAC,"[eNB %d] CC_id %d Frame %d, subframeP %d: Generated ULSCH DCI for next UE_id %d, format 0\n", module_idP,CC_id,frameP,subframeP,UE_id); + LOG_D(MAC, + "[eNB %d] CC_id %d Frame %d, subframeP %d: Generated ULSCH DCI for next UE_id %d, format 0\n", + module_idP, CC_id, frameP, subframeP, UE_id); - // increment first rb for next UE allocation - first_rb[CC_id]+=rb_table[rb_table_index]; - } - else { // round > 0 => retransmission - T(T_ENB_MAC_UE_UL_SCHEDULE_RETRANSMISSION, T_INT(module_idP), T_INT(CC_id), T_INT(rnti), T_INT(frameP), - T_INT(subframeP), T_INT(harq_pid), T_INT(UE_template->mcs_UL[harq_pid]), T_INT(first_rb[CC_id]), T_INT(rb_table[rb_table_index]), - T_INT(round)); + // increment first rb for next UE allocation + first_rb[CC_id] += rb_table[rb_table_index]; + } else { // round > 0 => retransmission + T(T_ENB_MAC_UE_UL_SCHEDULE_RETRANSMISSION, + T_INT(module_idP), T_INT(CC_id), T_INT(rnti), + T_INT(frameP), T_INT(subframeP), T_INT(harq_pid), + T_INT(UE_template->mcs_UL[harq_pid]), + T_INT(first_rb[CC_id]), + T_INT(rb_table[rb_table_index]), T_INT(round)); - // fill in NAK information + // fill in NAK information - hi_dci0_pdu = &hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req->number_of_dci+hi_dci0_req->number_of_hi]; - memset((void*)hi_dci0_pdu,0,sizeof(nfapi_hi_dci0_request_pdu_t)); - hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_HI_PDU_TYPE; - hi_dci0_pdu->pdu_size = 2+sizeof(nfapi_hi_dci0_hi_pdu); - hi_dci0_pdu->hi_pdu.hi_pdu_rel8.resource_block_start = UE_template->first_rb_ul[harq_pid]; - hi_dci0_pdu->hi_pdu.hi_pdu_rel8.cyclic_shift_2_for_drms = UE_template->cshift[harq_pid]; - hi_dci0_pdu->hi_pdu.hi_pdu_rel8.hi_value = 0; - hi_dci0_req->number_of_hi++; - LOG_D(MAC,"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled (PHICH) UE %d (mcs %d, first rb %d, nb_rb %d, TBS %d, round %d)\n", - module_idP,harq_pid,rnti,CC_id,frameP,subframeP,UE_id,UE_template->mcs_UL[harq_pid], - UE_template->first_rb_ul[harq_pid], UE_template->nb_rb_ul[harq_pid], - UE_template->TBS_UL[harq_pid],round); - // Add UL_config PDUs - LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d\n", - harq_pid,frameP,subframeP,UE_id,rnti,sched_frame,sched_subframeP); - fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus], - cqi_req, - cc, - UE_template->physicalConfigDedicated, - get_tmode(module_idP,CC_id,UE_id), - eNB->ul_handle, - rnti, - UE_template->first_rb_ul[harq_pid], // resource_block_start - UE_template->nb_rb_ul[harq_pid], // number_of_resource_blocks - UE_template->mcs_UL[harq_pid], - cshift, // cyclic_shift_2_for_drms - 0, // frequency_hopping_enabled_flag - 0, // frequency_hopping_bits - UE_template->oldNDI_UL[harq_pid], // new_data_indication - rvidx_tab[round&3], // redundancy_version - harq_pid, // harq_process_number - 0, // ul_tx_mode - 0, // current_tx_nb - 0, // n_srs - UE_template->TBS_UL[harq_pid] - ); + hi_dci0_pdu = + &hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req-> + number_of_dci + + hi_dci0_req-> + number_of_hi]; + memset((void *) hi_dci0_pdu, 0, + sizeof(nfapi_hi_dci0_request_pdu_t)); + hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_HI_PDU_TYPE; + hi_dci0_pdu->pdu_size = + 2 + sizeof(nfapi_hi_dci0_hi_pdu); + hi_dci0_pdu->hi_pdu.hi_pdu_rel8.resource_block_start = + UE_template->first_rb_ul[harq_pid]; + hi_dci0_pdu->hi_pdu.hi_pdu_rel8. + cyclic_shift_2_for_drms = + UE_template->cshift[harq_pid]; + hi_dci0_pdu->hi_pdu.hi_pdu_rel8.hi_value = 0; + hi_dci0_req->number_of_hi++; + LOG_D(MAC, + "[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled (PHICH) UE %d (mcs %d, first rb %d, nb_rb %d, TBS %d, round %d)\n", + module_idP, harq_pid, rnti, CC_id, frameP, + subframeP, UE_id, UE_template->mcs_UL[harq_pid], + UE_template->first_rb_ul[harq_pid], + UE_template->nb_rb_ul[harq_pid], + UE_template->TBS_UL[harq_pid], round); + // Add UL_config PDUs + LOG_D(MAC, + "[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d\n", + harq_pid, frameP, subframeP, UE_id, rnti, + sched_frame, sched_subframeP); + fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus], cqi_req, cc, UE_template->physicalConfigDedicated, get_tmode(module_idP, CC_id, UE_id), mac->ul_handle, rnti, UE_template->first_rb_ul[harq_pid], // resource_block_start + UE_template->nb_rb_ul[harq_pid], // number_of_resource_blocks + UE_template->mcs_UL[harq_pid], cshift, // cyclic_shift_2_for_drms + 0, // frequency_hopping_enabled_flag + 0, // frequency_hopping_bits + UE_template->oldNDI_UL[harq_pid], // new_data_indication + rvidx_tab[round & 3], // redundancy_version + harq_pid, // harq_process_number + 0, // ul_tx_mode + 0, // current_tx_nb + 0, // n_srs + UE_template-> + TBS_UL[harq_pid]); #ifdef Rel14 - if (UE_template->rach_resource_type>0) { // This is a BL/CE UE allocation - fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus], - UE_template->rach_resource_type>2 ? 2 : 1, - 1, //total_number_of_repetitions - 1, //repetition_number - (frameP*10)+subframeP); - } + if (UE_template->rach_resource_type > 0) { // This is a BL/CE UE allocation + fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus], UE_template->rach_resource_type > 2 ? 2 : 1, 1, //total_number_of_repetitions + 1, //repetition_number + (frameP * + 10) + + subframeP); + } #endif - ul_req_tmp->number_of_pdus++; - eNB->ul_handle++; + ul_req_tmp->number_of_pdus++; + mac->ul_handle++; - }/* - else if (round > 0) { //we schedule a retransmission + } /* + else if (round > 0) { //we schedule a retransmission - ndi = UE_template->oldNDI_UL[harq_pid]; + ndi = UE_template->oldNDI_UL[harq_pid]; - if ((round&3)==0) { - mcs = openair_daq_vars.target_ue_ul_mcs; - } else { - mcs = rvidx_tab[round&3] + 28; //not correct for round==4! + if ((round&3)==0) { + mcs = openair_daq_vars.target_ue_ul_mcs; + } else { + mcs = rvidx_tab[round&3] + 28; //not correct for round==4! - } + } - LOG_I(MAC,"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled UE retransmission (mcs %d, first rb %d, nb_rb %d, harq_pid %d, round %d)\n", - module_idP,UE_id,rnti,CC_id,frameP,subframeP,mcs, - first_rb[CC_id],UE_template->nb_rb_ul[harq_pid], - harq_pid, round); + LOG_I(MAC,"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled UE retransmission (mcs %d, first rb %d, nb_rb %d, harq_pid %d, round %d)\n", + module_idP,UE_id,rnti,CC_id,frameP,subframeP,mcs, + first_rb[CC_id],UE_template->nb_rb_ul[harq_pid], + harq_pid, round); - rballoc = mac_xface->computeRIV(frame_parms->N_RB_UL, - first_rb[CC_id], - UE_template->nb_rb_ul[harq_pid]); - first_rb[CC_id]+=UE_template->nb_rb_ul[harq_pid]; // increment for next UE allocation + rballoc = mac_xface->computeRIV(frame_parms->N_RB_UL, + first_rb[CC_id], + UE_template->nb_rb_ul[harq_pid]); + first_rb[CC_id]+=UE_template->nb_rb_ul[harq_pid]; // increment for next UE allocation - UE_list->eNB_UE_stats[CC_id][UE_id].num_retransmission_rx+=1; - UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used_retx_rx=UE_template->nb_rb_ul[harq_pid]; - UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx+=UE_template->nb_rb_ul[harq_pid]; - UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1=mcs; - UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2=mcs; - } - */ + UE_list->eNB_UE_stats[CC_id][UE_id].num_retransmission_rx+=1; + UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used_retx_rx=UE_template->nb_rb_ul[harq_pid]; + UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx+=UE_template->nb_rb_ul[harq_pid]; + UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1=mcs; + UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2=mcs; + } + */ - } // UE_is_to_be_scheduled - } // loop over UE_id - } // loop of CC_id + } // UE_is_to_be_scheduled + } // loop over UE_id + } // loop of CC_id } diff --git a/openair2/LAYER2/MAC/extern.h b/openair2/LAYER2/MAC/extern.h index f192cd7e12..50ea5634b9 100644 --- a/openair2/LAYER2/MAC/extern.h +++ b/openair2/LAYER2/MAC/extern.h @@ -35,7 +35,7 @@ #ifdef USER_MODE //#include "stdio.h" -#endif //USER_MODE +#endif //USER_MODE #include "PHY/defs.h" #include "defs.h" @@ -56,8 +56,8 @@ extern UE_RRC_INST *UE_rrc_inst; extern UE_MAC_INST *UE_mac_inst; -extern eNB_ULSCH_INFO eNB_ulsch_info[NUMBER_OF_eNB_MAX][MAX_NUM_CCs][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8 -extern eNB_DLSCH_INFO eNB_dlsch_info[NUMBER_OF_eNB_MAX][MAX_NUM_CCs][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8 +extern eNB_ULSCH_INFO eNB_ulsch_info[NUMBER_OF_eNB_MAX][MAX_NUM_CCs][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8 +extern eNB_DLSCH_INFO eNB_dlsch_info[NUMBER_OF_eNB_MAX][MAX_NUM_CCs][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8 @@ -79,28 +79,26 @@ extern uint32_t RRC_CONNECTION_FLAG; extern uint8_t rb_table[34]; -extern DCI0_5MHz_TDD_1_6_t UL_alloc_pdu; +extern DCI0_5MHz_TDD_1_6_t UL_alloc_pdu; -extern DCI1A_5MHz_TDD_1_6_t RA_alloc_pdu; -extern DCI1A_5MHz_TDD_1_6_t DLSCH_alloc_pdu1A; -extern DCI1A_5MHz_TDD_1_6_t BCCH_alloc_pdu; +extern DCI1A_5MHz_TDD_1_6_t RA_alloc_pdu; +extern DCI1A_5MHz_TDD_1_6_t DLSCH_alloc_pdu1A; +extern DCI1A_5MHz_TDD_1_6_t BCCH_alloc_pdu; -extern DCI1A_5MHz_TDD_1_6_t CCCH_alloc_pdu; -extern DCI1_5MHz_TDD_t DLSCH_alloc_pdu; +extern DCI1A_5MHz_TDD_1_6_t CCCH_alloc_pdu; +extern DCI1_5MHz_TDD_t DLSCH_alloc_pdu; -extern DCI0_5MHz_FDD_t UL_alloc_pdu_fdd; +extern DCI0_5MHz_FDD_t UL_alloc_pdu_fdd; -extern DCI1A_5MHz_FDD_t DLSCH_alloc_pdu1A_fdd; -extern DCI1A_5MHz_FDD_t RA_alloc_pdu_fdd; -extern DCI1A_5MHz_FDD_t BCCH_alloc_pdu_fdd; +extern DCI1A_5MHz_FDD_t DLSCH_alloc_pdu1A_fdd; +extern DCI1A_5MHz_FDD_t RA_alloc_pdu_fdd; +extern DCI1A_5MHz_FDD_t BCCH_alloc_pdu_fdd; -extern DCI1A_5MHz_FDD_t CCCH_alloc_pdu_fdd; -extern DCI1_5MHz_FDD_t DLSCH_alloc_pdu_fdd; +extern DCI1A_5MHz_FDD_t CCCH_alloc_pdu_fdd; +extern DCI1_5MHz_FDD_t DLSCH_alloc_pdu_fdd; extern DCI2_5MHz_2A_TDD_t DLSCH_alloc_pdu1; extern DCI2_5MHz_2A_TDD_t DLSCH_alloc_pdu2; extern DCI1E_5MHz_2A_M10PRB_TDD_t DLSCH_alloc_pdu1E; -#endif //DEF_H - - +#endif //DEF_H diff --git a/openair2/LAYER2/MAC/flexran_agent_mac_proto.h b/openair2/LAYER2/MAC/flexran_agent_mac_proto.h index 5b152a1138..d3170aaf91 100644 --- a/openair2/LAYER2/MAC/flexran_agent_mac_proto.h +++ b/openair2/LAYER2/MAC/flexran_agent_mac_proto.h @@ -17,7 +17,7 @@ *------------------------------------------------------------------------------- * For more information about the OpenAirInterface (OAI) Software Alliance: * contact@openairinterface.org - */ + */ /*! \file flexran_agent_mac_proto.h * \brief MAC functions for FlexRAN agent @@ -39,150 +39,178 @@ /* * slice specific scheduler */ -typedef void (*slice_scheduler)(module_id_t mod_id, - int slice_id, - uint32_t frame, - uint32_t subframe, - int *mbsfn_flag, - Protocol__FlexranMessage **dl_info); +typedef void (*slice_scheduler) (module_id_t mod_id, + int slice_id, + uint32_t frame, + uint32_t subframe, + int *mbsfn_flag, + Protocol__FlexranMessage ** dl_info); /* * top level flexran scheduler used by the eNB scheduler */ -void flexran_schedule_ue_spec_default(mid_t mod_id, - uint32_t frame, +void flexran_schedule_ue_spec_default(mid_t mod_id, + uint32_t frame, uint32_t subframe, - int *mbsfn_flag, - Protocol__FlexranMessage **dl_info); + int *mbsfn_flag, + Protocol__FlexranMessage ** dl_info); /* * slice specific scheduler for embb */ void -flexran_schedule_ue_spec_embb(mid_t mod_id, - int slice_id, - uint32_t frame, - uint32_t subframe, - int *mbsfn_flag, - Protocol__FlexranMessage **dl_info); +flexran_schedule_ue_spec_embb(mid_t mod_id, + int slice_id, + uint32_t frame, + uint32_t subframe, + int *mbsfn_flag, + Protocol__FlexranMessage ** dl_info); /* * slice specific scheduler for urllc */ void -flexran_schedule_ue_spec_urllc(mid_t mod_id, - int slice_id, - uint32_t frame, - uint32_t subframe, - int *mbsfn_flag, - Protocol__FlexranMessage **dl_info); +flexran_schedule_ue_spec_urllc(mid_t mod_id, + int slice_id, + uint32_t frame, + uint32_t subframe, + int *mbsfn_flag, + Protocol__FlexranMessage ** dl_info); /* * slice specific scheduler for mmtc */ void -flexran_schedule_ue_spec_mmtc(mid_t mod_id, - int slice_id, - uint32_t frame, - uint32_t subframe, - int *mbsfn_flag, - Protocol__FlexranMessage **dl_info); +flexran_schedule_ue_spec_mmtc(mid_t mod_id, + int slice_id, + uint32_t frame, + uint32_t subframe, + int *mbsfn_flag, + Protocol__FlexranMessage ** dl_info); /* * slice specific scheduler for best effort traffic */ void -flexran_schedule_ue_spec_be(mid_t mod_id, - int slice_id, - uint32_t frame, - uint32_t subframe, - int *mbsfn_flag, - Protocol__FlexranMessage **dl_info); +flexran_schedule_ue_spec_be(mid_t mod_id, + int slice_id, + uint32_t frame, + uint32_t subframe, + int *mbsfn_flag, + Protocol__FlexranMessage ** dl_info); /* * common flexran scheduler function */ void -flexran_schedule_ue_spec_common(mid_t mod_id, - int slice_id, - uint32_t frame, - uint32_t subframe, - int *mbsfn_flag, - Protocol__FlexranMessage **dl_info); +flexran_schedule_ue_spec_common(mid_t mod_id, + int slice_id, + uint32_t frame, + uint32_t subframe, + int *mbsfn_flag, + Protocol__FlexranMessage ** dl_info); -uint16_t flexran_nb_rbs_allowed_slice(float rb_percentage, - int total_rbs); +uint16_t flexran_nb_rbs_allowed_slice(float rb_percentage, int total_rbs); -int flexran_slice_member(int UE_id, - int slice_id); +int flexran_slice_member(int UE_id, int slice_id); -int flexran_slice_maxmcs(int slice_id) ; +int flexran_slice_maxmcs(int slice_id); -void _store_dlsch_buffer (module_id_t Mod_id, - int slice_id, - frame_t frameP, - sub_frame_t subframeP); +void _store_dlsch_buffer(module_id_t Mod_id, + int slice_id, + frame_t frameP, sub_frame_t subframeP); -void _assign_rbs_required (module_id_t Mod_id, - int slice_id, - frame_t frameP, - sub_frame_t subframe, - uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t nb_rbs_allowed_slice[MAX_NUM_CCs][MAX_NUM_SLICES], - int min_rb_unit[MAX_NUM_CCs]); +void _assign_rbs_required(module_id_t Mod_id, + int slice_id, + frame_t frameP, + sub_frame_t subframe, + uint16_t + nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], + uint16_t + nb_rbs_allowed_slice[MAX_NUM_CCs] + [MAX_NUM_SLICES], int min_rb_unit[MAX_NUM_CCs]); -void _dlsch_scheduler_pre_processor (module_id_t Mod_id, - int slice_id, - frame_t frameP, - sub_frame_t subframeP, - int N_RBG[MAX_NUM_CCs], - int *mbsfn_flag); +void _dlsch_scheduler_pre_processor(module_id_t Mod_id, + int slice_id, + frame_t frameP, + sub_frame_t subframeP, + int N_RBG[MAX_NUM_CCs], + int *mbsfn_flag); -void _dlsch_scheduler_pre_processor_reset (int module_idP, - int UE_id, - uint8_t CC_id, - int frameP, - int subframeP, - int N_RBG, - uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t nb_rbs_allowed_slice[MAX_NUM_CCs][MAX_NUM_SLICES], - unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX], - unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]); +void _dlsch_scheduler_pre_processor_reset(int module_idP, + int UE_id, + uint8_t CC_id, + int frameP, + int subframeP, + int N_RBG, + uint16_t + nb_rbs_required[MAX_NUM_CCs] + [NUMBER_OF_UE_MAX], + uint16_t + nb_rbs_required_remaining + [MAX_NUM_CCs][NUMBER_OF_UE_MAX], + uint16_t + nb_rbs_allowed_slice[MAX_NUM_CCs] + [MAX_NUM_SLICES], + unsigned char + rballoc_sub[MAX_NUM_CCs] + [N_RBG_MAX], + unsigned char + MIMO_mode_indicator[MAX_NUM_CCs] + [N_RBG_MAX]); -void _dlsch_scheduler_pre_processor_allocate (module_id_t Mod_id, - int UE_id, - uint8_t CC_id, - int N_RBG, - int transmission_mode, - int min_rb_unit, - uint8_t N_RB_DL, - uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX], - unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]); +void _dlsch_scheduler_pre_processor_allocate(module_id_t Mod_id, + int UE_id, + uint8_t CC_id, + int N_RBG, + int transmission_mode, + int min_rb_unit, + uint8_t N_RB_DL, + uint16_t + nb_rbs_required[MAX_NUM_CCs] + [NUMBER_OF_UE_MAX], + uint16_t + nb_rbs_required_remaining + [MAX_NUM_CCs] + [NUMBER_OF_UE_MAX], + unsigned char + rballoc_sub[MAX_NUM_CCs] + [N_RBG_MAX], + unsigned char + MIMO_mode_indicator + [MAX_NUM_CCs][N_RBG_MAX]); /* * Default scheduler used by the eNB agent */ -void flexran_schedule_ue_spec_default(mid_t mod_id, uint32_t frame, uint32_t subframe, - int *mbsfn_flag, Protocol__FlexranMessage **dl_info); +void flexran_schedule_ue_spec_default(mid_t mod_id, uint32_t frame, + uint32_t subframe, int *mbsfn_flag, + Protocol__FlexranMessage ** dl_info); /* * Data plane function for applying the DL decisions of the scheduler */ -void flexran_apply_dl_scheduling_decisions(mid_t mod_id, uint32_t frame, uint32_t subframe, int *mbsfn_flag, - Protocol__FlexranMessage *dl_scheduling_info); +void flexran_apply_dl_scheduling_decisions(mid_t mod_id, uint32_t frame, + uint32_t subframe, + int *mbsfn_flag, + Protocol__FlexranMessage * + dl_scheduling_info); /* * Data plane function for applying the UE specific DL decisions of the scheduler */ -void flexran_apply_ue_spec_scheduling_decisions(mid_t mod_id, uint32_t frame, uint32_t subframe, int *mbsfn_flag, - uint32_t n_dl_ue_data, Protocol__FlexDlData **dl_ue_data); +void flexran_apply_ue_spec_scheduling_decisions(mid_t mod_id, + uint32_t frame, + uint32_t subframe, + int *mbsfn_flag, + uint32_t n_dl_ue_data, + Protocol__FlexDlData ** + dl_ue_data); /* * Data plane function for filling the DCI structure */ -void flexran_fill_oai_dci(mid_t mod_id, uint32_t CC_id, uint32_t rnti, Protocol__FlexDlDci *dl_dci); +void flexran_fill_oai_dci(mid_t mod_id, uint32_t CC_id, uint32_t rnti, + Protocol__FlexDlDci * dl_dci); #endif diff --git a/openair2/LAYER2/MAC/flexran_agent_scheduler_dataplane.c b/openair2/LAYER2/MAC/flexran_agent_scheduler_dataplane.c index 018d490f44..44052a8749 100644 --- a/openair2/LAYER2/MAC/flexran_agent_scheduler_dataplane.c +++ b/openair2/LAYER2/MAC/flexran_agent_scheduler_dataplane.c @@ -17,7 +17,7 @@ *------------------------------------------------------------------------------- * For more information about the OpenAirInterface (OAI) Software Alliance: * contact@openairinterface.org - */ + */ /*! \file flexran_agent_scheduler_dataplane.c * \brief data plane procedures related to eNB scheduling @@ -57,495 +57,532 @@ #include "flexran_agent_common.h" -#include "SIMULATION/TOOLS/defs.h" // for taus +#include "SIMULATION/TOOLS/defs.h" // for taus -void flexran_apply_dl_scheduling_decisions(mid_t mod_id, +void +flexran_apply_dl_scheduling_decisions(mid_t mod_id, + uint32_t frame, + uint32_t subframe, + int *mbsfn_flag, + Protocol__FlexranMessage * + dl_scheduling_info) +{ + + Protocol__FlexDlMacConfig *mac_config = + dl_scheduling_info->dl_mac_config_msg; + + // Check if there is anything to schedule for random access + if (mac_config->n_dl_rar > 0) { + /*TODO: call the random access data plane function */ + } + // Check if there is anything to schedule for paging/broadcast + if (mac_config->n_dl_broadcast > 0) { + /*TODO: call the broadcast/paging data plane function */ + } + // Check if there is anything to schedule for the UEs + if (mac_config->n_dl_ue_data > 0) { + flexran_apply_ue_spec_scheduling_decisions(mod_id, frame, subframe, + mbsfn_flag, + mac_config-> + n_dl_ue_data, + mac_config->dl_ue_data); + } + +} + + +void +flexran_apply_ue_spec_scheduling_decisions(mid_t mod_id, uint32_t frame, uint32_t subframe, int *mbsfn_flag, - Protocol__FlexranMessage *dl_scheduling_info) { + uint32_t n_dl_ue_data, + Protocol__FlexDlData ** + dl_ue_data) +{ - Protocol__FlexDlMacConfig *mac_config = dl_scheduling_info->dl_mac_config_msg; + uint8_t CC_id; + int UE_id; + mac_rlc_status_resp_t rlc_status; + unsigned char ta_len = 0; + unsigned char header_len = 0, header_len_tmp = 0; + unsigned char sdu_lcids[11], offset, num_sdus = 0; + uint16_t nb_rb; + uint16_t TBS, sdu_lengths[11], rnti, padding = 0, post_padding = 0; + unsigned char dlsch_buffer[MAX_DLSCH_PAYLOAD_BYTES]; + uint8_t round = 0; + uint8_t harq_pid = 0; + // LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]; + LTE_eNB_UE_stats *eNB_UE_stats = NULL; + uint16_t sdu_length_total = 0; + short ta_update = 0; + eNB_MAC_INST *eNB = &eNB_mac_inst[mod_id]; + UE_list_t *UE_list = &eNB->UE_list; + // static int32_t tpc_accumulated=0; + UE_sched_ctrl *ue_sched_ctl; - // Check if there is anything to schedule for random access - if (mac_config->n_dl_rar > 0) { - /*TODO: call the random access data plane function*/ - } + int last_sdu_header_len = 0; - // Check if there is anything to schedule for paging/broadcast - if (mac_config->n_dl_broadcast > 0) { - /*TODO: call the broadcast/paging data plane function*/ - } + int i, j; - // Check if there is anything to schedule for the UEs - if (mac_config->n_dl_ue_data > 0) { - flexran_apply_ue_spec_scheduling_decisions(mod_id, frame, subframe, mbsfn_flag, - mac_config->n_dl_ue_data, mac_config->dl_ue_data); - } - -} + Protocol__FlexDlData *dl_data; + Protocol__FlexDlDci *dl_dci; + uint32_t rlc_size, n_lc, lcid; -void flexran_apply_ue_spec_scheduling_decisions(mid_t mod_id, - uint32_t frame, - uint32_t subframe, - int *mbsfn_flag, - uint32_t n_dl_ue_data, - Protocol__FlexDlData **dl_ue_data) { + // For each UE-related command + for (i = 0; i < n_dl_ue_data; i++) { - uint8_t CC_id; - int UE_id; - mac_rlc_status_resp_t rlc_status; - unsigned char ta_len=0; - unsigned char header_len = 0, header_len_tmp = 0; - unsigned char sdu_lcids[11],offset,num_sdus=0; - uint16_t nb_rb; - uint16_t TBS, sdu_lengths[11],rnti,padding=0,post_padding=0; - unsigned char dlsch_buffer[MAX_DLSCH_PAYLOAD_BYTES]; - uint8_t round = 0; - uint8_t harq_pid = 0; - // LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]; - LTE_eNB_UE_stats *eNB_UE_stats = NULL; - uint16_t sdu_length_total = 0; - short ta_update = 0; - eNB_MAC_INST *eNB = &eNB_mac_inst[mod_id]; - UE_list_t *UE_list = &eNB->UE_list; - // static int32_t tpc_accumulated=0; - UE_sched_ctrl *ue_sched_ctl; + dl_data = dl_ue_data[i]; + dl_dci = dl_data->dl_dci; - int last_sdu_header_len = 0; + CC_id = dl_data->serv_cell_index; + // frame_parms[CC_id] = mac_xface->get_lte_frame_parms(mod_id, CC_id); - int i, j; + rnti = dl_data->rnti; + UE_id = find_ue(rnti, PHY_vars_eNB_g[mod_id][CC_id]); - Protocol__FlexDlData *dl_data; - Protocol__FlexDlDci *dl_dci; + ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + eNB_UE_stats = mac_xface->get_eNB_UE_stats(mod_id, CC_id, rnti); - uint32_t rlc_size, n_lc, lcid; - - // For each UE-related command - for (i = 0; i < n_dl_ue_data; i++) { - - dl_data = dl_ue_data[i]; - dl_dci = dl_data->dl_dci; + round = dl_dci->rv[0]; + harq_pid = dl_dci->harq_process; - CC_id = dl_data->serv_cell_index; - // frame_parms[CC_id] = mac_xface->get_lte_frame_parms(mod_id, CC_id); - - rnti = dl_data->rnti; - UE_id = find_ue(rnti, PHY_vars_eNB_g[mod_id][CC_id]); + //LOG_I(FLEXRAN_AGENT, "[Frame %d][Subframe %d] Scheduling harq %d\n", frame, subframe, harq_pid); + // LOG_I(FLEXRAN_AGENT, "[Frame %d][Subframe %d]Now scheduling harq_pid %d (round %d)\n", frame, subframe, harq_pid, round); - ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - eNB_UE_stats = mac_xface->get_eNB_UE_stats(mod_id,CC_id,rnti); - - round = dl_dci->rv[0]; - harq_pid = dl_dci->harq_process; - - //LOG_I(FLEXRAN_AGENT, "[Frame %d][Subframe %d] Scheduling harq %d\n", frame, subframe, harq_pid); - // LOG_I(FLEXRAN_AGENT, "[Frame %d][Subframe %d]Now scheduling harq_pid %d (round %d)\n", frame, subframe, harq_pid, round); + // If this is a new transmission + if (round == 0) { + // First we have to deal with the creation of the PDU based on the message instructions + rlc_status.bytes_in_buffer = 0; - // If this is a new transmission - if (round == 0) { - // First we have to deal with the creation of the PDU based on the message instructions - rlc_status.bytes_in_buffer = 0; - - TBS = dl_dci->tbs_size[0]; - - if (dl_data->n_ce_bitmap > 0) { - //Check if there is TA command and set the length appropriately - ta_len = (dl_data->ce_bitmap[0] & PROTOCOL__FLEX_CE_TYPE__FLPCET_TA) ? 2 : 0; - } + TBS = dl_dci->tbs_size[0]; - num_sdus = 0; - sdu_length_total = 0; - - n_lc = dl_data->n_rlc_pdu; - // Go through each one of the channel commands and create SDUs - header_len = 0; - last_sdu_header_len = 0; - for (j = 0; j < n_lc; j++) { - sdu_lengths[j] = 0; - lcid = dl_data->rlc_pdu[j]->rlc_pdu_tb[0]->logical_channel_id; - rlc_size = dl_data->rlc_pdu[j]->rlc_pdu_tb[0]->size; - LOG_D(MAC,"[TEST] [eNB %d] [Frame %d] [Subframe %d], LCID %d, CC_id %d, Requesting %d bytes from RLC (RRC message)\n", - mod_id, frame, subframe, lcid, CC_id, rlc_size); - if (rlc_size > 0) { - - rlc_status = mac_rlc_status_ind(mod_id, - rnti, - mod_id, - frame, - subframe, - ENB_FLAG_YES, - MBMS_FLAG_NO, - lcid, - 0); - - if (rlc_status.bytes_in_buffer > 0) { - - if (rlc_status.bytes_in_buffer < rlc_size) { - rlc_size = rlc_status.bytes_in_buffer; + if (dl_data->n_ce_bitmap > 0) { + //Check if there is TA command and set the length appropriately + ta_len = + (dl_data-> + ce_bitmap[0] & PROTOCOL__FLEX_CE_TYPE__FLPCET_TA) ? 2 + : 0; } - if (rlc_size <= 2) { - rlc_size = 3; - } + num_sdus = 0; + sdu_length_total = 0; - rlc_status = mac_rlc_status_ind(mod_id, - rnti, - mod_id, - frame, - subframe, - ENB_FLAG_YES, - MBMS_FLAG_NO, - lcid, - rlc_size); // transport block set size - - LOG_D(MAC, "[TEST] RLC can give %d bytes for LCID %d during second call\n", rlc_status.bytes_in_buffer, lcid); - - if (rlc_status.bytes_in_buffer > 0) { - - sdu_lengths[j] = mac_rlc_data_req(mod_id, - rnti, - mod_id, - frame, - ENB_FLAG_YES, - MBMS_FLAG_NO, - lcid, - rlc_size, //not used - (char *)&dlsch_buffer[sdu_length_total]); - - LOG_D(MAC,"[eNB %d][LCID %d] CC_id %d Got %d bytes from RLC\n",mod_id, lcid, CC_id, sdu_lengths[j]); - sdu_length_total += sdu_lengths[j]; - sdu_lcids[j] = lcid; - - UE_list->eNB_UE_stats[CC_id][UE_id].num_pdu_tx[lcid] += 1; - UE_list->eNB_UE_stats[CC_id][UE_id].num_bytes_tx[lcid] += sdu_lengths[j]; - - if (sdu_lengths[j] < 128) { - header_len += 2; - last_sdu_header_len = 2; - } else { - header_len += 3; - last_sdu_header_len = 3; - } - num_sdus++; - } - } - } - } // SDU creation end - - - if (((sdu_length_total + header_len + ta_len) > 0)) { - - header_len_tmp = header_len; - - // If we have only a single SDU, header length becomes 1 - if ((num_sdus) == 1) { - //if (header_len == 2 || header_len == 3) { - header_len = 1; - } else { - header_len = (header_len - last_sdu_header_len) + 1; - } - - // If we need a 1 or 2 bit padding or no padding at all - if ((TBS - header_len - sdu_length_total - ta_len) <= 2 - || (TBS - header_len - sdu_length_total - ta_len) > TBS) { //protect from overflow - padding = (TBS - header_len - sdu_length_total - ta_len); - post_padding = 0; - } else { // The last sdu needs to have a length field, since we add padding - padding = 0; - header_len = header_len_tmp; - post_padding = TBS - sdu_length_total - header_len - ta_len; // 1 is for the postpadding header - } - - if (ta_len > 0) { - // Reset the measurement - ta_update = flexran_get_TA(mod_id, UE_id, CC_id); - ue_sched_ctl->ta_timer = 20; - eNB_UE_stats->timing_advance_update = 0; - } else { - ta_update = 0; - } + n_lc = dl_data->n_rlc_pdu; + // Go through each one of the channel commands and create SDUs + header_len = 0; + last_sdu_header_len = 0; + for (j = 0; j < n_lc; j++) { + sdu_lengths[j] = 0; + lcid = + dl_data->rlc_pdu[j]->rlc_pdu_tb[0]->logical_channel_id; + rlc_size = dl_data->rlc_pdu[j]->rlc_pdu_tb[0]->size; + LOG_D(MAC, + "[TEST] [eNB %d] [Frame %d] [Subframe %d], LCID %d, CC_id %d, Requesting %d bytes from RLC (RRC message)\n", + mod_id, frame, subframe, lcid, CC_id, rlc_size); + if (rlc_size > 0) { + + rlc_status = mac_rlc_status_ind(mod_id, + rnti, + mod_id, + frame, + subframe, + ENB_FLAG_YES, + MBMS_FLAG_NO, lcid, 0); + + if (rlc_status.bytes_in_buffer > 0) { + + if (rlc_status.bytes_in_buffer < rlc_size) { + rlc_size = rlc_status.bytes_in_buffer; + } + + if (rlc_size <= 2) { + rlc_size = 3; + } + + rlc_status = mac_rlc_status_ind(mod_id, rnti, mod_id, frame, subframe, ENB_FLAG_YES, MBMS_FLAG_NO, lcid, rlc_size); // transport block set size + + LOG_D(MAC, + "[TEST] RLC can give %d bytes for LCID %d during second call\n", + rlc_status.bytes_in_buffer, lcid); + + if (rlc_status.bytes_in_buffer > 0) { + + sdu_lengths[j] = mac_rlc_data_req(mod_id, rnti, mod_id, frame, ENB_FLAG_YES, MBMS_FLAG_NO, lcid, rlc_size, //not used + (char *) + &dlsch_buffer + [sdu_length_total]); + + LOG_D(MAC, + "[eNB %d][LCID %d] CC_id %d Got %d bytes from RLC\n", + mod_id, lcid, CC_id, sdu_lengths[j]); + sdu_length_total += sdu_lengths[j]; + sdu_lcids[j] = lcid; + + UE_list-> + eNB_UE_stats[CC_id][UE_id].num_pdu_tx[lcid] + += 1; + UE_list-> + eNB_UE_stats[CC_id][UE_id].num_bytes_tx + [lcid] += sdu_lengths[j]; + + if (sdu_lengths[j] < 128) { + header_len += 2; + last_sdu_header_len = 2; + } else { + header_len += 3; + last_sdu_header_len = 3; + } + num_sdus++; + } + } + } + } // SDU creation end + + + if (((sdu_length_total + header_len + ta_len) > 0)) { + + header_len_tmp = header_len; + + // If we have only a single SDU, header length becomes 1 + if ((num_sdus) == 1) { + //if (header_len == 2 || header_len == 3) { + header_len = 1; + } else { + header_len = (header_len - last_sdu_header_len) + 1; + } + + // If we need a 1 or 2 bit padding or no padding at all + if ((TBS - header_len - sdu_length_total - ta_len) <= 2 || (TBS - header_len - sdu_length_total - ta_len) > TBS) { //protect from overflow + padding = + (TBS - header_len - sdu_length_total - ta_len); + post_padding = 0; + } else { // The last sdu needs to have a length field, since we add padding + padding = 0; + header_len = header_len_tmp; + post_padding = TBS - sdu_length_total - header_len - ta_len; // 1 is for the postpadding header + } + + if (ta_len > 0) { + // Reset the measurement + ta_update = flexran_get_TA(mod_id, UE_id, CC_id); + ue_sched_ctl->ta_timer = 20; + eNB_UE_stats->timing_advance_update = 0; + } else { + ta_update = 0; + } + + // If there is nothing to schedule, just leave + if ((sdu_length_total) <= 0) { + harq_pid_updated[UE_id][harq_pid] = 1; + harq_pid_round[UE_id][harq_pid] = 0; + continue; + } + // LOG_I(FLEXRAN_AGENT, "[Frame %d][Subframe %d] TBS is %d and bytes are %d\n", frame, subframe, TBS, sdu_length_total); + + offset = generate_dlsch_header((unsigned char *) UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0], num_sdus, //num_sdus + sdu_lengths, // + sdu_lcids, 255, // no drx + ta_update, // timing advance + NULL, // contention res id + padding, post_padding); - // If there is nothing to schedule, just leave - if ((sdu_length_total) <= 0) { - harq_pid_updated[UE_id][harq_pid] = 1; - harq_pid_round[UE_id][harq_pid] = 0; - continue; - } - // LOG_I(FLEXRAN_AGENT, "[Frame %d][Subframe %d] TBS is %d and bytes are %d\n", frame, subframe, TBS, sdu_length_total); - - offset = generate_dlsch_header((unsigned char*)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0], - num_sdus, //num_sdus - sdu_lengths, // - sdu_lcids, - 255, // no drx - ta_update, // timing advance - NULL, // contention res id - padding, - post_padding); - - #ifdef DEBUG_eNB_SCHEDULER - LOG_T(MAC,"[eNB %d] First 16 bytes of DLSCH : \n"); - - for (i=0; i<16; i++) { - LOG_T(MAC,"%x.",dlsch_buffer[i]); - } - - LOG_T(MAC,"\n"); + LOG_T(MAC, "[eNB %d] First 16 bytes of DLSCH : \n"); + + for (i = 0; i < 16; i++) { + LOG_T(MAC, "%x.", dlsch_buffer[i]); + } + + LOG_T(MAC, "\n"); #endif - // cycle through SDUs and place in dlsch_buffer - memcpy(&UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset],dlsch_buffer,sdu_length_total); - // memcpy(&eNB_mac_inst[0].DLSCH_pdu[0][0].payload[0][offset],dcch_buffer,sdu_lengths[0]); - - // fill remainder of DLSCH with random data - for (j=0; j<(TBS-sdu_length_total-offset); j++) { - UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset+sdu_length_total+j] = (char)(taus()&0xff); - } - - //eNB_mac_inst[0].DLSCH_pdu[0][0].payload[0][offset+sdu_lengths[0]+j] = (char)(taus()&0xff); - if (opt_enabled == 1) { - trace_pdu(1, (uint8_t *)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0], - TBS, mod_id, 3, UE_RNTI(mod_id, UE_id), - eNB->frame, eNB->subframe,0,0); - LOG_D(OPT,"[eNB %d][DLSCH] CC_id %d Frame %d rnti %x with size %d\n", - mod_id, CC_id, frame, UE_RNTI(mod_id,UE_id), TBS); - } - - // store stats - eNB->eNB_stats[CC_id].dlsch_bytes_tx+=sdu_length_total; - eNB->eNB_stats[CC_id].dlsch_pdus_tx+=1; - UE_list->eNB_UE_stats[CC_id][UE_id].dl_cqi= eNB_UE_stats->DL_cqi[0]; - - UE_list->eNB_UE_stats[CC_id][UE_id].crnti= rnti; - UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status=mac_eNB_get_rrc_status(mod_id, rnti); - UE_list->eNB_UE_stats[CC_id][UE_id].harq_pid = harq_pid; - UE_list->eNB_UE_stats[CC_id][UE_id].harq_round = round; - - //nb_rb = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid]; - //Find the number of resource blocks and set them to the template for retransmissions - nb_rb = get_min_rb_unit(mod_id, CC_id); - uint16_t stats_tbs = mac_xface->get_TBS_DL(dl_dci->mcs[0], nb_rb); + // cycle through SDUs and place in dlsch_buffer + memcpy(&UE_list->DLSCH_pdu[CC_id][0][UE_id]. + payload[0][offset], dlsch_buffer, sdu_length_total); + // memcpy(&eNB_mac_inst[0].DLSCH_pdu[0][0].payload[0][offset],dcch_buffer,sdu_lengths[0]); - while (stats_tbs < TBS) { - nb_rb += get_min_rb_unit(mod_id, CC_id); - stats_tbs = mac_xface->get_TBS_DL(dl_dci->mcs[0], nb_rb); + // fill remainder of DLSCH with random data + for (j = 0; j < (TBS - sdu_length_total - offset); j++) { + UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset + + sdu_length_total + + j] = + (char) (taus() & 0xff); + } + + //eNB_mac_inst[0].DLSCH_pdu[0][0].payload[0][offset+sdu_lengths[0]+j] = (char)(taus()&0xff); + if (opt_enabled == 1) { + trace_pdu(1, + (uint8_t *) + UE_list->DLSCH_pdu[CC_id][0][UE_id]. + payload[0], TBS, mod_id, 3, UE_RNTI(mod_id, + UE_id), + eNB->frame, eNB->subframe, 0, 0); + LOG_D(OPT, + "[eNB %d][DLSCH] CC_id %d Frame %d rnti %x with size %d\n", + mod_id, CC_id, frame, UE_RNTI(mod_id, UE_id), + TBS); + } + // store stats + eNB->eNB_stats[CC_id].dlsch_bytes_tx += sdu_length_total; + eNB->eNB_stats[CC_id].dlsch_pdus_tx += 1; + UE_list->eNB_UE_stats[CC_id][UE_id].dl_cqi = + eNB_UE_stats->DL_cqi[0]; + + UE_list->eNB_UE_stats[CC_id][UE_id].crnti = rnti; + UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status = + mac_eNB_get_rrc_status(mod_id, rnti); + UE_list->eNB_UE_stats[CC_id][UE_id].harq_pid = harq_pid; + UE_list->eNB_UE_stats[CC_id][UE_id].harq_round = round; + + //nb_rb = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid]; + //Find the number of resource blocks and set them to the template for retransmissions + nb_rb = get_min_rb_unit(mod_id, CC_id); + uint16_t stats_tbs = + mac_xface->get_TBS_DL(dl_dci->mcs[0], nb_rb); + + while (stats_tbs < TBS) { + nb_rb += get_min_rb_unit(mod_id, CC_id); + stats_tbs = + mac_xface->get_TBS_DL(dl_dci->mcs[0], nb_rb); + } + + // LOG_I(FLEXRAN_AGENT, "The MCS was %d\n", dl_dci->mcs[0]); + + UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used = nb_rb; + UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used += + nb_rb; + UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs1 = + dl_dci->mcs[0]; + UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs2 = + dl_dci->mcs[0]; + UE_list->eNB_UE_stats[CC_id][UE_id].TBS = TBS; + + UE_list->eNB_UE_stats[CC_id][UE_id].overhead_bytes = + TBS - sdu_length_total; + UE_list->eNB_UE_stats[CC_id][UE_id].total_sdu_bytes += + sdu_length_total; + UE_list->eNB_UE_stats[CC_id][UE_id].total_pdu_bytes += TBS; + UE_list->eNB_UE_stats[CC_id][UE_id].total_num_pdus += 1; + + //eNB_UE_stats->dlsch_mcs1 = cqi_to_mcs[eNB_UE_stats->DL_cqi[0]]; + //eNB_UE_stats->dlsch_mcs1 = cmin(eNB_UE_stats->dlsch_mcs1, openair_daq_vars.target_ue_dl_mcs); + } else { + LOG_D(FLEXRAN_AGENT, + "No need to schedule a dci after all. Just drop it\n"); + harq_pid_updated[UE_id][harq_pid] = 1; + harq_pid_round[UE_id][harq_pid] = 0; + continue; + } + } else { + // No need to create anything apart of DCI in case of retransmission + /*TODO: Must add these */ + // eNB_UE_stats->dlsch_trials[round]++; + //UE_list->eNB_UE_stats[CC_id][UE_id].num_retransmission+=1; + //UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used_retx=nb_rb; + //UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_retx+=nb_rb; + //UE_list->eNB_UE_stats[CC_id][UE_id].ncce_used_retx=nCCECC_id]; } - // LOG_I(FLEXRAN_AGENT, "The MCS was %d\n", dl_dci->mcs[0]); - - UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used = nb_rb; - UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used += nb_rb; - UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs1=dl_dci->mcs[0]; - UE_list->eNB_UE_stats[CC_id][UE_id].dlsch_mcs2=dl_dci->mcs[0]; - UE_list->eNB_UE_stats[CC_id][UE_id].TBS = TBS; - - UE_list->eNB_UE_stats[CC_id][UE_id].overhead_bytes= TBS - sdu_length_total; - UE_list->eNB_UE_stats[CC_id][UE_id].total_sdu_bytes+= sdu_length_total; - UE_list->eNB_UE_stats[CC_id][UE_id].total_pdu_bytes+= TBS; - UE_list->eNB_UE_stats[CC_id][UE_id].total_num_pdus+=1; - - //eNB_UE_stats->dlsch_mcs1 = cqi_to_mcs[eNB_UE_stats->DL_cqi[0]]; - //eNB_UE_stats->dlsch_mcs1 = cmin(eNB_UE_stats->dlsch_mcs1, openair_daq_vars.target_ue_dl_mcs); - } else { - LOG_D(FLEXRAN_AGENT, "No need to schedule a dci after all. Just drop it\n"); - harq_pid_updated[UE_id][harq_pid] = 1; - harq_pid_round[UE_id][harq_pid] = 0; - continue; - } - } else { - // No need to create anything apart of DCI in case of retransmission - /*TODO: Must add these */ - // eNB_UE_stats->dlsch_trials[round]++; - //UE_list->eNB_UE_stats[CC_id][UE_id].num_retransmission+=1; - //UE_list->eNB_UE_stats[CC_id][UE_id].rbs_used_retx=nb_rb; - //UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_retx+=nb_rb; - //UE_list->eNB_UE_stats[CC_id][UE_id].ncce_used_retx=nCCECC_id]; + // UE_list->UE_template[CC_id][UE_id].oldNDI[dl_dci->harq_process] = dl_dci->ndi[0]; + // eNB_UE_stats->dlsch_mcs1 = dl_dci->mcs[0]; + + //Fill the proper DCI of OAI + flexran_fill_oai_dci(mod_id, CC_id, rnti, dl_dci); } - - // UE_list->UE_template[CC_id][UE_id].oldNDI[dl_dci->harq_process] = dl_dci->ndi[0]; - // eNB_UE_stats->dlsch_mcs1 = dl_dci->mcs[0]; - - //Fill the proper DCI of OAI - flexran_fill_oai_dci(mod_id, CC_id, rnti, dl_dci); - } } -void flexran_fill_oai_dci(mid_t mod_id, uint32_t CC_id, uint32_t rnti, - Protocol__FlexDlDci *dl_dci) { - void *DLSCH_dci = NULL; - DCI_PDU *DCI_pdu; +void +flexran_fill_oai_dci(mid_t mod_id, uint32_t CC_id, uint32_t rnti, + Protocol__FlexDlDci * dl_dci) +{ - unsigned char harq_pid = 0; - // unsigned char round = 0; - LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]; - int size_bits = 0, size_bytes = 0; - eNB_MAC_INST *eNB = &eNB_mac_inst[mod_id]; - UE_list_t *UE_list = &eNB->UE_list; - LTE_eNB_UE_stats *eNB_UE_stats = NULL; + void *DLSCH_dci = NULL; + DCI_PDU *DCI_pdu; - int UE_id = find_ue(rnti, PHY_vars_eNB_g[mod_id][CC_id]); + unsigned char harq_pid = 0; + // unsigned char round = 0; + LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]; + int size_bits = 0, size_bytes = 0; + eNB_MAC_INST *eNB = &eNB_mac_inst[mod_id]; + UE_list_t *UE_list = &eNB->UE_list; + LTE_eNB_UE_stats *eNB_UE_stats = NULL; - uint32_t format; + int UE_id = find_ue(rnti, PHY_vars_eNB_g[mod_id][CC_id]); - harq_pid = dl_dci->harq_process; - // round = dl_dci->rv[0]; - - // Note this code is for a specific DCI format - DLSCH_dci = (void *)UE_list->UE_template[CC_id][UE_id].DLSCH_DCI[harq_pid]; - DCI_pdu = &eNB->common_channels[CC_id].DCI_pdu; - - frame_parms[CC_id] = mac_xface->get_lte_frame_parms(mod_id, CC_id); + uint32_t format; - if (dl_dci->has_tpc == 1) { - // Check if tpc has been set and reset measurement */ - if ((dl_dci->tpc == 0) || (dl_dci->tpc == 2)) { - eNB_UE_stats = mac_xface->get_eNB_UE_stats(mod_id, CC_id, rnti); - eNB_UE_stats->Po_PUCCH_update = 0; + harq_pid = dl_dci->harq_process; + // round = dl_dci->rv[0]; + + // Note this code is for a specific DCI format + DLSCH_dci = + (void *) UE_list->UE_template[CC_id][UE_id].DLSCH_DCI[harq_pid]; + DCI_pdu = &eNB->common_channels[CC_id].DCI_pdu; + + frame_parms[CC_id] = mac_xface->get_lte_frame_parms(mod_id, CC_id); + + if (dl_dci->has_tpc == 1) { + // Check if tpc has been set and reset measurement */ + if ((dl_dci->tpc == 0) || (dl_dci->tpc == 2)) { + eNB_UE_stats = + mac_xface->get_eNB_UE_stats(mod_id, CC_id, rnti); + eNB_UE_stats->Po_PUCCH_update = 0; + } } - } - - - switch (frame_parms[CC_id]->N_RB_DL) { - case 6: - if (frame_parms[CC_id]->frame_type == TDD) { - if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1) { - FILL_DCI_TDD_1(DCI1_1_5MHz_TDD_t, DLSCH_dci, dl_dci); - size_bytes = sizeof(DCI1_1_5MHz_TDD_t); - size_bits = sizeof_DCI1_1_5MHz_TDD_t; - } else if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A) { - //TODO - } else if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D) { - //TODO - } - } else { - if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1) { - FILL_DCI_FDD_1(DCI1_1_5MHz_FDD_t, DLSCH_dci, dl_dci); - size_bytes = sizeof(DCI1_1_5MHz_FDD_t); - size_bits = sizeof_DCI1_1_5MHz_FDD_t; - } else if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A) { - //TODO - } else if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D) { - //TODO - } - } - break; - case 25: - if (frame_parms[CC_id]->frame_type == TDD) { - if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1) { - FILL_DCI_TDD_1(DCI1_5MHz_TDD_t, DLSCH_dci, dl_dci); - size_bytes = sizeof(DCI1_5MHz_TDD_t); - size_bits = sizeof_DCI1_5MHz_TDD_t; - } else if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A) { - //TODO - } else if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D) { - //TODO - } - } else { - if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1) { - FILL_DCI_FDD_1(DCI1_5MHz_FDD_t, DLSCH_dci, dl_dci); - size_bytes = sizeof(DCI1_5MHz_FDD_t); - size_bits = sizeof_DCI1_5MHz_FDD_t; - } else if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A) { - //TODO - } else if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D) { - //TODO - } - } - break; - case 50: - if (frame_parms[CC_id]->frame_type == TDD) { - if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1) { - FILL_DCI_TDD_1(DCI1_10MHz_TDD_t, DLSCH_dci, dl_dci); - size_bytes = sizeof(DCI1_10MHz_TDD_t); - size_bits = sizeof_DCI1_10MHz_TDD_t; - } else if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A) { - //TODO - } else if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D) { - //TODO - } - } else { - if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1) { - FILL_DCI_FDD_1(DCI1_10MHz_FDD_t, DLSCH_dci, dl_dci); - size_bytes = sizeof(DCI1_10MHz_FDD_t); - size_bits = sizeof_DCI1_10MHz_FDD_t; - } else if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A) { - //TODO - } else if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D) { - //TODO - } - } - break; - case 100: - if (frame_parms[CC_id]->frame_type == TDD) { - if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1) { - FILL_DCI_TDD_1(DCI1_20MHz_TDD_t, DLSCH_dci, dl_dci); - size_bytes = sizeof(DCI1_20MHz_TDD_t); - size_bits = sizeof_DCI1_20MHz_TDD_t; - } else if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A) { - //TODO - } else if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D) { - //TODO - } - } else { - if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1) { - FILL_DCI_FDD_1(DCI1_20MHz_FDD_t, DLSCH_dci, dl_dci); - size_bytes = sizeof(DCI1_20MHz_FDD_t); - size_bits = sizeof_DCI1_20MHz_FDD_t; - } else if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A) { - //TODO - } else if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D) { - //TODO - } - } - break; - } - //Set format to the proper type - switch(dl_dci->format) { - case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1: - format = format1; - break; - case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1A: - format = format1A; - break; - case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1B: - format = format1B; - break; - case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1C: - format = format1C; - break; - case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D: - format = format1E_2A_M10PRB; - break; - case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2: - format = format2; - break; - case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A: - format = format2A; - break; - case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2B: - format = format2B; - break; - case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_3: - format = 3; - break; - default: - /*TODO: Need to deal with unsupported DCI type*/ - return; - } - - add_ue_spec_dci(DCI_pdu, - DLSCH_dci, - rnti, - size_bytes, - dl_dci->aggr_level, - size_bits, - format, - 0); + + switch (frame_parms[CC_id]->N_RB_DL) { + case 6: + if (frame_parms[CC_id]->frame_type == TDD) { + if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1) { + FILL_DCI_TDD_1(DCI1_1_5MHz_TDD_t, DLSCH_dci, dl_dci); + size_bytes = sizeof(DCI1_1_5MHz_TDD_t); + size_bits = sizeof_DCI1_1_5MHz_TDD_t; + } else if (dl_dci->format == + PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A) { + //TODO + } else if (dl_dci->format == + PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D) { + //TODO + } + } else { + if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1) { + FILL_DCI_FDD_1(DCI1_1_5MHz_FDD_t, DLSCH_dci, dl_dci); + size_bytes = sizeof(DCI1_1_5MHz_FDD_t); + size_bits = sizeof_DCI1_1_5MHz_FDD_t; + } else if (dl_dci->format == + PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A) { + //TODO + } else if (dl_dci->format == + PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D) { + //TODO + } + } + break; + case 25: + if (frame_parms[CC_id]->frame_type == TDD) { + if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1) { + FILL_DCI_TDD_1(DCI1_5MHz_TDD_t, DLSCH_dci, dl_dci); + size_bytes = sizeof(DCI1_5MHz_TDD_t); + size_bits = sizeof_DCI1_5MHz_TDD_t; + } else if (dl_dci->format == + PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A) { + //TODO + } else if (dl_dci->format == + PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D) { + //TODO + } + } else { + if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1) { + FILL_DCI_FDD_1(DCI1_5MHz_FDD_t, DLSCH_dci, dl_dci); + size_bytes = sizeof(DCI1_5MHz_FDD_t); + size_bits = sizeof_DCI1_5MHz_FDD_t; + } else if (dl_dci->format == + PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A) { + //TODO + } else if (dl_dci->format == + PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D) { + //TODO + } + } + break; + case 50: + if (frame_parms[CC_id]->frame_type == TDD) { + if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1) { + FILL_DCI_TDD_1(DCI1_10MHz_TDD_t, DLSCH_dci, dl_dci); + size_bytes = sizeof(DCI1_10MHz_TDD_t); + size_bits = sizeof_DCI1_10MHz_TDD_t; + } else if (dl_dci->format == + PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A) { + //TODO + } else if (dl_dci->format == + PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D) { + //TODO + } + } else { + if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1) { + FILL_DCI_FDD_1(DCI1_10MHz_FDD_t, DLSCH_dci, dl_dci); + size_bytes = sizeof(DCI1_10MHz_FDD_t); + size_bits = sizeof_DCI1_10MHz_FDD_t; + } else if (dl_dci->format == + PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A) { + //TODO + } else if (dl_dci->format == + PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D) { + //TODO + } + } + break; + case 100: + if (frame_parms[CC_id]->frame_type == TDD) { + if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1) { + FILL_DCI_TDD_1(DCI1_20MHz_TDD_t, DLSCH_dci, dl_dci); + size_bytes = sizeof(DCI1_20MHz_TDD_t); + size_bits = sizeof_DCI1_20MHz_TDD_t; + } else if (dl_dci->format == + PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A) { + //TODO + } else if (dl_dci->format == + PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D) { + //TODO + } + } else { + if (dl_dci->format == PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1) { + FILL_DCI_FDD_1(DCI1_20MHz_FDD_t, DLSCH_dci, dl_dci); + size_bytes = sizeof(DCI1_20MHz_FDD_t); + size_bits = sizeof_DCI1_20MHz_FDD_t; + } else if (dl_dci->format == + PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A) { + //TODO + } else if (dl_dci->format == + PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D) { + //TODO + } + } + break; + } + + //Set format to the proper type + switch (dl_dci->format) { + case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1: + format = format1; + break; + case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1A: + format = format1A; + break; + case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1B: + format = format1B; + break; + case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1C: + format = format1C; + break; + case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D: + format = format1E_2A_M10PRB; + break; + case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2: + format = format2; + break; + case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A: + format = format2A; + break; + case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2B: + format = format2B; + break; + case PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_3: + format = 3; + break; + default: + /*TODO: Need to deal with unsupported DCI type */ + return; + } + + add_ue_spec_dci(DCI_pdu, + DLSCH_dci, + rnti, + size_bytes, dl_dci->aggr_level, size_bits, format, 0); } diff --git a/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue.c b/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue.c index ee0e7c5582..3a491bd7ea 100644 --- a/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue.c +++ b/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue.c @@ -17,7 +17,7 @@ *------------------------------------------------------------------------------- * For more information about the OpenAirInterface (OAI) Software Alliance: * contact@openairinterface.org - */ + */ /*! \file flexran_agent_scheduler_dlsch_ue.c * \brief procedures related to eNB for the DLSCH transport channel @@ -58,10 +58,10 @@ #include "flexran_agent_mac.h" #include -#include "SIMULATION/TOOLS/defs.h" // for taus +#include "SIMULATION/TOOLS/defs.h" // for taus #if defined(ENABLE_ITTI) -# include "intertask_interface.h" +#include "intertask_interface.h" #endif #define ENABLE_MAC_PAYLOAD_DEBUG @@ -74,14 +74,14 @@ /*!\brief UE ULSCH scheduling states*/ typedef enum { - MIN_SLICE_STRATEGY = 0, - SLICE_MASK, - UEID_TO_SLICEID, - MAX_SLICE_STRATEGY + MIN_SLICE_STRATEGY = 0, + SLICE_MASK, + UEID_TO_SLICEID, + MAX_SLICE_STRATEGY } SLICING_STRATEGY; // this assumes a max of of 16 UE per eNB/CC -#define SLICE0_MASK 0x000f +#define SLICE0_MASK 0x000f #define SLICE1_MASK 0x00f0 #define SLICE2_MASK 0x0f00 #define SLICE3_MASK 0xf000 @@ -96,26 +96,28 @@ int slicing_strategy = UEID_TO_SLICEID; int slicing_strategy_current = UEID_TO_SLICEID; // RB share for each slice for past and current time -float slice_percentage[MAX_NUM_SLICES] = {1.0, 0.0, 0.0, 0.0}; -float slice_percentage_current[MAX_NUM_SLICES] = {1.0, 0.0, 0.0, 0.0}; +float slice_percentage[MAX_NUM_SLICES] = { 1.0, 0.0, 0.0, 0.0 }; +float slice_percentage_current[MAX_NUM_SLICES] = { 1.0, 0.0, 0.0, 0.0 }; + float total_slice_percentage = 0; // MAX MCS for each slice for past and current time -int slice_maxmcs[MAX_NUM_SLICES] = {28, 28, 28, 28}; -int slice_maxmcs_current[MAX_NUM_SLICES] = {28, 28, 28, 28}; +int slice_maxmcs[MAX_NUM_SLICES] = { 28, 28, 28, 28 }; +int slice_maxmcs_current[MAX_NUM_SLICES] = { 28, 28, 28, 28 }; -int update_dl_scheduler[MAX_NUM_SLICES] = {1, 1, 1, 1}; -int update_dl_scheduler_current[MAX_NUM_SLICES] = {1, 1, 1, 1}; +int update_dl_scheduler[MAX_NUM_SLICES] = { 1, 1, 1, 1 }; +int update_dl_scheduler_current[MAX_NUM_SLICES] = { 1, 1, 1, 1 }; // name of available scheduler -char *dl_scheduler_type[MAX_NUM_SLICES] = {"flexran_schedule_ue_spec_embb", - "flexran_schedule_ue_spec_urllc", - "flexran_schedule_ue_spec_mmtc", - "flexran_schedule_ue_spec_be" // best effort +char *dl_scheduler_type[MAX_NUM_SLICES] = + { "flexran_schedule_ue_spec_embb", + "flexran_schedule_ue_spec_urllc", + "flexran_schedule_ue_spec_mmtc", + "flexran_schedule_ue_spec_be" // best effort }; // pointer to the slice specific scheduler -slice_scheduler slice_sched[MAX_NUM_SLICES] = {0}; +slice_scheduler slice_sched[MAX_NUM_SLICES] = { 0 }; /** @@ -125,585 +127,695 @@ slice_scheduler slice_sched[MAX_NUM_SLICES] = {0}; // This function stores the downlink buffer for all the logical channels -void _store_dlsch_buffer (module_id_t Mod_id, - int slice_id, - frame_t frameP, - sub_frame_t subframeP) +void +_store_dlsch_buffer(module_id_t Mod_id, + int slice_id, frame_t frameP, sub_frame_t subframeP) { - int UE_id,i; - rnti_t rnti; - mac_rlc_status_resp_t rlc_status; - UE_list_t *UE_list = &eNB_mac_inst[Mod_id].UE_list; - UE_TEMPLATE *UE_template; + int UE_id, i; + rnti_t rnti; + mac_rlc_status_resp_t rlc_status; + UE_list_t *UE_list = &eNB_mac_inst[Mod_id].UE_list; + UE_TEMPLATE *UE_template; - for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) { - if (UE_list->active[UE_id] != TRUE) continue; - - if (flexran_slice_member(UE_id, slice_id) == 0) - continue; - - UE_template = &UE_list->UE_template[UE_PCCID(Mod_id,UE_id)][UE_id]; + for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) { + if (UE_list->active[UE_id] != TRUE) + continue; - // clear logical channel interface variables - UE_template->dl_buffer_total = 0; - UE_template->dl_pdus_total = 0; + if (flexran_slice_member(UE_id, slice_id) == 0) + continue; - for(i=0; i< MAX_NUM_LCID; i++) { - UE_template->dl_buffer_info[i]=0; - UE_template->dl_pdus_in_buffer[i]=0; - UE_template->dl_buffer_head_sdu_creation_time[i]=0; - UE_template->dl_buffer_head_sdu_remaining_size_to_send[i]=0; - } + UE_template = + &UE_list->UE_template[UE_PCCID(Mod_id, UE_id)][UE_id]; - rnti = UE_RNTI(Mod_id,UE_id); + // clear logical channel interface variables + UE_template->dl_buffer_total = 0; + UE_template->dl_pdus_total = 0; - for(i=0; i< MAX_NUM_LCID; i++) { // loop over all the logical channels + for (i = 0; i < MAX_NUM_LCID; i++) { + UE_template->dl_buffer_info[i] = 0; + UE_template->dl_pdus_in_buffer[i] = 0; + UE_template->dl_buffer_head_sdu_creation_time[i] = 0; + UE_template->dl_buffer_head_sdu_remaining_size_to_send[i] = 0; + } - rlc_status = mac_rlc_status_ind(Mod_id,rnti, Mod_id,frameP,subframeP,ENB_FLAG_YES,MBMS_FLAG_NO,i,0 ); - UE_template->dl_buffer_info[i] = rlc_status.bytes_in_buffer; //storing the dlsch buffer for each logical channel - UE_template->dl_pdus_in_buffer[i] = rlc_status.pdus_in_buffer; - UE_template->dl_buffer_head_sdu_creation_time[i] = rlc_status.head_sdu_creation_time ; - UE_template->dl_buffer_head_sdu_creation_time_max = cmax(UE_template->dl_buffer_head_sdu_creation_time_max, - rlc_status.head_sdu_creation_time ); - UE_template->dl_buffer_head_sdu_remaining_size_to_send[i] = rlc_status.head_sdu_remaining_size_to_send; - UE_template->dl_buffer_head_sdu_is_segmented[i] = rlc_status.head_sdu_is_segmented; - UE_template->dl_buffer_total += UE_template->dl_buffer_info[i];//storing the total dlsch buffer - UE_template->dl_pdus_total += UE_template->dl_pdus_in_buffer[i]; + rnti = UE_RNTI(Mod_id, UE_id); + + for (i = 0; i < MAX_NUM_LCID; i++) { // loop over all the logical channels + + rlc_status = + mac_rlc_status_ind(Mod_id, rnti, Mod_id, frameP, subframeP, + ENB_FLAG_YES, MBMS_FLAG_NO, i, 0); + UE_template->dl_buffer_info[i] = rlc_status.bytes_in_buffer; //storing the dlsch buffer for each logical channel + UE_template->dl_pdus_in_buffer[i] = rlc_status.pdus_in_buffer; + UE_template->dl_buffer_head_sdu_creation_time[i] = + rlc_status.head_sdu_creation_time; + UE_template->dl_buffer_head_sdu_creation_time_max = + cmax(UE_template->dl_buffer_head_sdu_creation_time_max, + rlc_status.head_sdu_creation_time); + UE_template->dl_buffer_head_sdu_remaining_size_to_send[i] = + rlc_status.head_sdu_remaining_size_to_send; + UE_template->dl_buffer_head_sdu_is_segmented[i] = + rlc_status.head_sdu_is_segmented; + UE_template->dl_buffer_total += UE_template->dl_buffer_info[i]; //storing the total dlsch buffer + UE_template->dl_pdus_total += + UE_template->dl_pdus_in_buffer[i]; #ifdef DEBUG_eNB_SCHEDULER - /* note for dl_buffer_head_sdu_remaining_size_to_send[i] : - * 0 if head SDU has not been segmented (yet), else remaining size not already segmented and sent - */ - if (UE_template->dl_buffer_info[i]>0) - LOG_D(MAC, - "[eNB %d][SLICE %d] Frame %d Subframe %d : RLC status for UE %d in LCID%d: total of %d pdus and size %d, head sdu queuing time %d, remaining size %d, is segmeneted %d \n", - Mod_id, slice_id,frameP, subframeP, UE_id, - i, UE_template->dl_pdus_in_buffer[i],UE_template->dl_buffer_info[i], - UE_template->dl_buffer_head_sdu_creation_time[i], - UE_template->dl_buffer_head_sdu_remaining_size_to_send[i], - UE_template->dl_buffer_head_sdu_is_segmented[i] - ); + /* note for dl_buffer_head_sdu_remaining_size_to_send[i] : + * 0 if head SDU has not been segmented (yet), else remaining size not already segmented and sent + */ + if (UE_template->dl_buffer_info[i] > 0) + LOG_D(MAC, + "[eNB %d][SLICE %d] Frame %d Subframe %d : RLC status for UE %d in LCID%d: total of %d pdus and size %d, head sdu queuing time %d, remaining size %d, is segmeneted %d \n", + Mod_id, slice_id, frameP, subframeP, UE_id, + i, UE_template->dl_pdus_in_buffer[i], + UE_template->dl_buffer_info[i], + UE_template->dl_buffer_head_sdu_creation_time[i], + UE_template-> + dl_buffer_head_sdu_remaining_size_to_send[i], + UE_template->dl_buffer_head_sdu_is_segmented[i]); #endif + } + + //#ifdef DEBUG_eNB_SCHEDULER + if (UE_template->dl_buffer_total > 0) + LOG_D(MAC, + "[eNB %d] Frame %d Subframe %d : RLC status for UE %d : total DL buffer size %d and total number of pdu %d \n", + Mod_id, frameP, subframeP, UE_id, + UE_template->dl_buffer_total, + UE_template->dl_pdus_total); + + //#endif } - - //#ifdef DEBUG_eNB_SCHEDULER - if ( UE_template->dl_buffer_total>0) - LOG_D(MAC,"[eNB %d] Frame %d Subframe %d : RLC status for UE %d : total DL buffer size %d and total number of pdu %d \n", - Mod_id, frameP, subframeP, UE_id, - UE_template->dl_buffer_total, - UE_template->dl_pdus_total - ); - - //#endif - } } // This function returns the estimated number of RBs required by each UE for downlink scheduling -void _assign_rbs_required (module_id_t Mod_id, - int slice_id, - frame_t frameP, - sub_frame_t subframe, - uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t nb_rbs_allowed_slice[MAX_NUM_CCs][MAX_NUM_SLICES], - int min_rb_unit[MAX_NUM_CCs]) +void +_assign_rbs_required(module_id_t Mod_id, + int slice_id, + frame_t frameP, + sub_frame_t subframe, + uint16_t + nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], + uint16_t nb_rbs_allowed_slice[MAX_NUM_CCs] + [MAX_NUM_SLICES], int min_rb_unit[MAX_NUM_CCs]) { - rnti_t rnti; - uint16_t TBS = 0; - LTE_eNB_UE_stats *eNB_UE_stats[MAX_NUM_CCs]; - int UE_id,n,i,j,CC_id,pCCid,tmp; - UE_list_t *UE_list = &eNB_mac_inst[Mod_id].UE_list; - // UE_TEMPLATE *UE_template; + rnti_t rnti; + uint16_t TBS = 0; + LTE_eNB_UE_stats *eNB_UE_stats[MAX_NUM_CCs]; + int UE_id, n, i, j, CC_id, pCCid, tmp; + UE_list_t *UE_list = &eNB_mac_inst[Mod_id].UE_list; + // UE_TEMPLATE *UE_template; - // clear rb allocations across all CC_ids - for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) { - if (UE_list->active[UE_id] != TRUE) continue; - - if (flexran_slice_member(UE_id, slice_id) == 0) - continue; - - pCCid = UE_PCCID(Mod_id,UE_id); - rnti = UE_list->UE_template[pCCid][UE_id].rnti; + // clear rb allocations across all CC_ids + for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) { + if (UE_list->active[UE_id] != TRUE) + continue; - /* skip UE not present in PHY (for any of its active CCs) */ - if (!phy_stats_exist(Mod_id, rnti)) - continue; + if (flexran_slice_member(UE_id, slice_id) == 0) + continue; - //update CQI information across component carriers - for (n=0; nnumactiveCCs[UE_id]; n++) { - CC_id = UE_list->ordered_CCids[n][UE_id]; - eNB_UE_stats[CC_id] = mac_xface->get_eNB_UE_stats(Mod_id,CC_id,rnti); - eNB_UE_stats[CC_id]->dlsch_mcs1 = cqi_to_mcs[flexran_get_ue_wcqi(Mod_id, UE_id)]; - } + pCCid = UE_PCCID(Mod_id, UE_id); + rnti = UE_list->UE_template[pCCid][UE_id].rnti; - // provide the list of CCs sorted according to MCS - for (i=0; inumactiveCCs[UE_id]; i++) { - for (j=i+1; jnumactiveCCs[UE_id]; j++) { - DevAssert( j < MAX_NUM_CCs ); + /* skip UE not present in PHY (for any of its active CCs) */ + if (!phy_stats_exist(Mod_id, rnti)) + continue; - if (eNB_UE_stats[UE_list->ordered_CCids[i][UE_id]]->dlsch_mcs1 > - eNB_UE_stats[UE_list->ordered_CCids[j][UE_id]]->dlsch_mcs1) { - tmp = UE_list->ordered_CCids[i][UE_id]; - UE_list->ordered_CCids[i][UE_id] = UE_list->ordered_CCids[j][UE_id]; - UE_list->ordered_CCids[j][UE_id] = tmp; - } - } - } + //update CQI information across component carriers + for (n = 0; n < UE_list->numactiveCCs[UE_id]; n++) { + CC_id = UE_list->ordered_CCids[n][UE_id]; + eNB_UE_stats[CC_id] = + mac_xface->get_eNB_UE_stats(Mod_id, CC_id, rnti); + eNB_UE_stats[CC_id]->dlsch_mcs1 = + cqi_to_mcs[flexran_get_ue_wcqi(Mod_id, UE_id)]; + } - /* NN --> RK - * check the index of UE_template" - */ - if (UE_list->UE_template[pCCid][UE_id].dl_buffer_total> 0) { - LOG_D(MAC,"[preprocessor] assign RB for UE %d\n",UE_id); + // provide the list of CCs sorted according to MCS + for (i = 0; i < UE_list->numactiveCCs[UE_id]; i++) { + for (j = i + 1; j < UE_list->numactiveCCs[UE_id]; j++) { + DevAssert(j < MAX_NUM_CCs); - for (i=0; inumactiveCCs[UE_id]; i++) { - CC_id = UE_list->ordered_CCids[i][UE_id]; - eNB_UE_stats[CC_id] = mac_xface->get_eNB_UE_stats(Mod_id,CC_id,rnti); - - if (cqi_to_mcs[flexran_get_ue_wcqi(Mod_id, UE_id)] == 0) {//eNB_UE_stats[CC_id]->dlsch_mcs1==0) { - nb_rbs_required[CC_id][UE_id] = 4; // don't let the TBS get too small - } else { - nb_rbs_required[CC_id][UE_id] = min_rb_unit[CC_id]; - } - - TBS = mac_xface->get_TBS_DL(cqi_to_mcs[flexran_get_ue_wcqi(Mod_id, UE_id)], nb_rbs_required[CC_id][UE_id]); - nb_rbs_allowed_slice[CC_id][slice_id] = flexran_nb_rbs_allowed_slice(slice_percentage[slice_id], - flexran_get_N_RB_DL(Mod_id, CC_id)); - LOG_D(MAC,"[preprocessor] start RB assignement for UE %d CC_id %d dl buffer %d (RB unit %d, MCS %d, TBS %d) \n", - UE_id, CC_id, UE_list->UE_template[pCCid][UE_id].dl_buffer_total, - nb_rbs_required[CC_id][UE_id], flexran_get_ue_wcqi(Mod_id, UE_id), TBS); - - /* calculating required number of RBs for each UE */ - while (TBS < UE_list->UE_template[pCCid][UE_id].dl_buffer_total) { - nb_rbs_required[CC_id][UE_id] += min_rb_unit[CC_id]; + if (eNB_UE_stats[UE_list->ordered_CCids[i][UE_id]]-> + dlsch_mcs1 > + eNB_UE_stats[UE_list->ordered_CCids[j][UE_id]]-> + dlsch_mcs1) { + tmp = UE_list->ordered_CCids[i][UE_id]; + UE_list->ordered_CCids[i][UE_id] = + UE_list->ordered_CCids[j][UE_id]; + UE_list->ordered_CCids[j][UE_id] = tmp; + } + } + } - if (nb_rbs_required[CC_id][UE_id] > nb_rbs_allowed_slice[CC_id][slice_id]) { - TBS = mac_xface->get_TBS_DL(flexran_get_ue_wcqi(Mod_id, UE_id), nb_rbs_allowed_slice[CC_id][slice_id]); - nb_rbs_required[CC_id][UE_id] = nb_rbs_allowed_slice[CC_id][slice_id]; - break; - } + /* NN --> RK + * check the index of UE_template" + */ + if (UE_list->UE_template[pCCid][UE_id].dl_buffer_total > 0) { + LOG_D(MAC, "[preprocessor] assign RB for UE %d\n", UE_id); - TBS = mac_xface->get_TBS_DL(cqi_to_mcs[flexran_get_ue_wcqi(Mod_id, UE_id)], nb_rbs_required[CC_id][UE_id]); - } // end of while + for (i = 0; i < UE_list->numactiveCCs[UE_id]; i++) { + CC_id = UE_list->ordered_CCids[i][UE_id]; + eNB_UE_stats[CC_id] = + mac_xface->get_eNB_UE_stats(Mod_id, CC_id, rnti); - LOG_D(MAC,"[eNB %d][SLICE %d] Frame %d: UE %d on CC %d: RB unit %d, nb_required RB %d (TBS %d, mcs %d)\n", - Mod_id, slice_id,frameP,UE_id, CC_id, min_rb_unit[CC_id], nb_rbs_required[CC_id][UE_id], TBS, cqi_to_mcs[flexran_get_ue_wcqi(Mod_id, UE_id)]); - } - } - } -} + if (cqi_to_mcs[flexran_get_ue_wcqi(Mod_id, UE_id)] == 0) { //eNB_UE_stats[CC_id]->dlsch_mcs1==0) { + nb_rbs_required[CC_id][UE_id] = 4; // don't let the TBS get too small + } else { + nb_rbs_required[CC_id][UE_id] = min_rb_unit[CC_id]; + } -void _dlsch_scheduler_pre_processor_allocate (module_id_t Mod_id, - int UE_id, - uint8_t CC_id, - int N_RBG, - int transmission_mode, - int min_rb_unit, - uint8_t N_RB_DL, - uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX], - unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]) { - int i; - UE_list_t *UE_list=&eNB_mac_inst[Mod_id].UE_list; - UE_sched_ctrl *ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + TBS = + mac_xface->get_TBS_DL(cqi_to_mcs + [flexran_get_ue_wcqi + (Mod_id, UE_id)], + nb_rbs_required[CC_id][UE_id]); + nb_rbs_allowed_slice[CC_id][slice_id] = + flexran_nb_rbs_allowed_slice(slice_percentage + [slice_id], + flexran_get_N_RB_DL + (Mod_id, CC_id)); + LOG_D(MAC, + "[preprocessor] start RB assignement for UE %d CC_id %d dl buffer %d (RB unit %d, MCS %d, TBS %d) \n", + UE_id, CC_id, + UE_list->UE_template[pCCid][UE_id].dl_buffer_total, + nb_rbs_required[CC_id][UE_id], + flexran_get_ue_wcqi(Mod_id, UE_id), TBS); - for(i=0; iUE_template[pCCid][UE_id]. + dl_buffer_total) { + nb_rbs_required[CC_id][UE_id] += min_rb_unit[CC_id]; - if((rballoc_sub[CC_id][i] == 0) && - (ue_sched_ctl->rballoc_sub_UE[CC_id][i] == 0) && - (nb_rbs_required_remaining[CC_id][UE_id]>0) && - (ue_sched_ctl->pre_nb_available_rbs[CC_id] < nb_rbs_required[CC_id][UE_id])) { + if (nb_rbs_required[CC_id][UE_id] > + nb_rbs_allowed_slice[CC_id][slice_id]) { + TBS = + mac_xface->get_TBS_DL(flexran_get_ue_wcqi + (Mod_id, UE_id), + nb_rbs_allowed_slice + [CC_id] + [slice_id]); + nb_rbs_required[CC_id][UE_id] = + nb_rbs_allowed_slice[CC_id][slice_id]; + break; + } - // if this UE is not scheduled for TM5 - if (ue_sched_ctl->dl_pow_off[CC_id] != 0 ) { + TBS = + mac_xface->get_TBS_DL(cqi_to_mcs + [flexran_get_ue_wcqi + (Mod_id, UE_id)], + nb_rbs_required[CC_id] + [UE_id]); + } // end of while - if ((i == N_RBG-1) && ((N_RB_DL == 25) || (N_RB_DL == 50))) { - rballoc_sub[CC_id][i] = 1; - ue_sched_ctl->rballoc_sub_UE[CC_id][i] = 1; - MIMO_mode_indicator[CC_id][i] = 1; - if (transmission_mode == 5 ) { - ue_sched_ctl->dl_pow_off[CC_id] = 1; - } - nb_rbs_required_remaining[CC_id][UE_id] = nb_rbs_required_remaining[CC_id][UE_id] - min_rb_unit+1; - ue_sched_ctl->pre_nb_available_rbs[CC_id] = ue_sched_ctl->pre_nb_available_rbs[CC_id] + min_rb_unit - 1; - } else { - if (nb_rbs_required_remaining[CC_id][UE_id] >= min_rb_unit){ - rballoc_sub[CC_id][i] = 1; - ue_sched_ctl->rballoc_sub_UE[CC_id][i] = 1; - MIMO_mode_indicator[CC_id][i] = 1; - if (transmission_mode == 5 ) { - ue_sched_ctl->dl_pow_off[CC_id] = 1; + LOG_D(MAC, + "[eNB %d][SLICE %d] Frame %d: UE %d on CC %d: RB unit %d, nb_required RB %d (TBS %d, mcs %d)\n", + Mod_id, slice_id, frameP, UE_id, CC_id, + min_rb_unit[CC_id], nb_rbs_required[CC_id][UE_id], + TBS, cqi_to_mcs[flexran_get_ue_wcqi(Mod_id, UE_id)]); } - nb_rbs_required_remaining[CC_id][UE_id] = nb_rbs_required_remaining[CC_id][UE_id] - min_rb_unit; - ue_sched_ctl->pre_nb_available_rbs[CC_id] = ue_sched_ctl->pre_nb_available_rbs[CC_id] + min_rb_unit; - } } - } // dl_pow_off[CC_id][UE_id] ! = 0 } - } } -void _dlsch_scheduler_pre_processor_reset (int module_idP, - int UE_id, - uint8_t CC_id, - int frameP, - int subframeP, - int N_RBG, - uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t nb_rbs_allowed_slice[MAX_NUM_CCs][MAX_NUM_SLICES], - unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX], - unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]) { - int i,j; - UE_list_t *UE_list=&eNB_mac_inst[module_idP].UE_list; - UE_sched_ctrl *ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - uint8_t *vrb_map = eNB_mac_inst[module_idP].common_channels[CC_id].vrb_map; - int RBGsize = PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL/N_RBG; -#ifdef SF05_LIMIT - //int subframe05_limit=0; - int sf05_upper=-1,sf05_lower=-1; -#endif - // LTE_eNB_UE_stats *eNB_UE_stats = mac_xface->get_eNB_UE_stats(module_idP,CC_id,rnti); - - flexran_update_TA(module_idP, UE_id, CC_id); +void +_dlsch_scheduler_pre_processor_allocate(module_id_t Mod_id, + int UE_id, + uint8_t CC_id, + int N_RBG, + int transmission_mode, + int min_rb_unit, + uint8_t N_RB_DL, + uint16_t + nb_rbs_required[MAX_NUM_CCs] + [NUMBER_OF_UE_MAX], + uint16_t + nb_rbs_required_remaining + [MAX_NUM_CCs] + [NUMBER_OF_UE_MAX], unsigned char + rballoc_sub[MAX_NUM_CCs] + [N_RBG_MAX], unsigned char + MIMO_mode_indicator + [MAX_NUM_CCs][N_RBG_MAX]) +{ + int i; + UE_list_t *UE_list = &eNB_mac_inst[Mod_id].UE_list; + UE_sched_ctrl *ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - if (UE_id==0) { - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_TIMING_ADVANCE,ue_sched_ctl->ta_update); - } - nb_rbs_required[CC_id][UE_id]=0; - ue_sched_ctl->pre_nb_available_rbs[CC_id] = 0; - ue_sched_ctl->dl_pow_off[CC_id] = 2; - nb_rbs_required_remaining[CC_id][UE_id] = 0; - for (i=0; irballoc_sub_UE[CC_id][i] = 0; - rballoc_sub[CC_id][i] = 0; -#ifdef SF05_LIMIT - // for avoiding 6+ PRBs around DC in subframe 0-5 (avoid excessive errors) + for (i = 0; i < N_RBG; i++) { - if ((subframeP==0 || subframeP==5) && - (i>=sf05_lower && i<=sf05_upper)) - rballoc_sub[CC_id][i]=1; + if ((rballoc_sub[CC_id][i] == 0) && + (ue_sched_ctl->rballoc_sub_UE[CC_id][i] == 0) && + (nb_rbs_required_remaining[CC_id][UE_id] > 0) && + (ue_sched_ctl->pre_nb_available_rbs[CC_id] < + nb_rbs_required[CC_id][UE_id])) { + + // if this UE is not scheduled for TM5 + if (ue_sched_ctl->dl_pow_off[CC_id] != 0) { + + if ((i == N_RBG - 1) + && ((N_RB_DL == 25) || (N_RB_DL == 50))) { + rballoc_sub[CC_id][i] = 1; + ue_sched_ctl->rballoc_sub_UE[CC_id][i] = 1; + MIMO_mode_indicator[CC_id][i] = 1; + if (transmission_mode == 5) { + ue_sched_ctl->dl_pow_off[CC_id] = 1; + } + nb_rbs_required_remaining[CC_id][UE_id] = + nb_rbs_required_remaining[CC_id][UE_id] - + min_rb_unit + 1; + ue_sched_ctl->pre_nb_available_rbs[CC_id] = + ue_sched_ctl->pre_nb_available_rbs[CC_id] + + min_rb_unit - 1; + } else { + if (nb_rbs_required_remaining[CC_id][UE_id] >= + min_rb_unit) { + rballoc_sub[CC_id][i] = 1; + ue_sched_ctl->rballoc_sub_UE[CC_id][i] = 1; + MIMO_mode_indicator[CC_id][i] = 1; + if (transmission_mode == 5) { + ue_sched_ctl->dl_pow_off[CC_id] = 1; + } + nb_rbs_required_remaining[CC_id][UE_id] = + nb_rbs_required_remaining[CC_id][UE_id] - + min_rb_unit; + ue_sched_ctl->pre_nb_available_rbs[CC_id] = + ue_sched_ctl->pre_nb_available_rbs[CC_id] + + min_rb_unit; + } + } + } // dl_pow_off[CC_id][UE_id] ! = 0 + } + } +} + +void +_dlsch_scheduler_pre_processor_reset(int module_idP, + int UE_id, + uint8_t CC_id, + int frameP, + int subframeP, + int N_RBG, + uint16_t nb_rbs_required[MAX_NUM_CCs] + [NUMBER_OF_UE_MAX], + uint16_t + nb_rbs_required_remaining + [MAX_NUM_CCs][NUMBER_OF_UE_MAX], + uint16_t + nb_rbs_allowed_slice[MAX_NUM_CCs] + [MAX_NUM_SLICES], unsigned char + rballoc_sub[MAX_NUM_CCs] + [N_RBG_MAX], unsigned char + MIMO_mode_indicator[MAX_NUM_CCs] + [N_RBG_MAX]) +{ + int i, j; + UE_list_t *UE_list = &eNB_mac_inst[module_idP].UE_list; + UE_sched_ctrl *ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + uint8_t *vrb_map = + eNB_mac_inst[module_idP].common_channels[CC_id].vrb_map; + int RBGsize = + PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL / N_RBG; +#ifdef SF05_LIMIT + //int subframe05_limit=0; + int sf05_upper = -1, sf05_lower = -1; #endif - // for SI-RNTI,RA-RNTI and P-RNTI allocations - for (j=0;jget_eNB_UE_stats(module_idP,CC_id,rnti); + + flexran_update_TA(module_idP, UE_id, CC_id); + + if (UE_id == 0) { + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME + (VCD_SIGNAL_DUMPER_VARIABLES_UE0_TIMING_ADVANCE, + ue_sched_ctl->ta_update); + } + nb_rbs_required[CC_id][UE_id] = 0; + ue_sched_ctl->pre_nb_available_rbs[CC_id] = 0; + ue_sched_ctl->dl_pow_off[CC_id] = 2; + nb_rbs_required_remaining[CC_id][UE_id] = 0; + for (i = 0; i < n_active_slices; i++) + nb_rbs_allowed_slice[CC_id][i] = 0; +#ifdef SF05_LIMIT + switch (N_RBG) { + case 6: + sf05_lower = 0; + sf05_upper = 5; break; - } + case 8: + sf05_lower = 2; + sf05_upper = 5; + break; + case 13: + sf05_lower = 4; + sf05_upper = 7; + break; + case 17: + sf05_lower = 7; + sf05_upper = 9; + break; + case 25: + sf05_lower = 11; + sf05_upper = 13; + break; + } +#endif + // Initialize Subbands according to VRB map + for (i = 0; i < N_RBG; i++) { + ue_sched_ctl->rballoc_sub_UE[CC_id][i] = 0; + rballoc_sub[CC_id][i] = 0; +#ifdef SF05_LIMIT + // for avoiding 6+ PRBs around DC in subframe 0-5 (avoid excessive errors) + + if ((subframeP == 0 || subframeP == 5) && + (i >= sf05_lower && i <= sf05_upper)) + rballoc_sub[CC_id][i] = 1; +#endif + // for SI-RNTI,RA-RNTI and P-RNTI allocations + for (j = 0; j < RBGsize; j++) { + if (vrb_map[j + (i * RBGsize)] != 0) { + rballoc_sub[CC_id][i] = 1; + LOG_D(MAC, "Frame %d, subframe %d : vrb %d allocated\n", + frameP, subframeP, j + (i * RBGsize)); + break; + } + } + LOG_D(MAC, "Frame %d Subframe %d CC_id %d RBG %i : rb_alloc %d\n", + frameP, subframeP, CC_id, i, rballoc_sub[CC_id][i]); + MIMO_mode_indicator[CC_id][i] = 2; } - LOG_D(MAC,"Frame %d Subframe %d CC_id %d RBG %i : rb_alloc %d\n",frameP,subframeP,CC_id,i,rballoc_sub[CC_id][i]); - MIMO_mode_indicator[CC_id][i] = 2; - } } // This function assigns pre-available RBS to each UE in specified sub-bands before scheduling is done -void _dlsch_scheduler_pre_processor (module_id_t Mod_id, - int slice_id, - frame_t frameP, - sub_frame_t subframeP, - int N_RBG[MAX_NUM_CCs], - int *mbsfn_flag) +void +_dlsch_scheduler_pre_processor(module_id_t Mod_id, + int slice_id, + frame_t frameP, + sub_frame_t subframeP, + int N_RBG[MAX_NUM_CCs], int *mbsfn_flag) { - unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX], total_ue_count; - unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]; - int UE_id, i; - uint8_t round = 0; - uint8_t harq_pid = 0; - uint16_t ii,j; - uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; - uint16_t nb_rbs_allowed_slice[MAX_NUM_CCs][MAX_NUM_SLICES]; - uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; - uint16_t nb_rbs_required_remaining_1[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; - uint16_t average_rbs_per_user[MAX_NUM_CCs] = {0}; - rnti_t rnti; - int min_rb_unit[MAX_NUM_CCs]; - uint16_t r1=0; - uint8_t CC_id; - UE_list_t *UE_list = &eNB_mac_inst[Mod_id].UE_list; - LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs] = {0}; + unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX], total_ue_count; + unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]; + int UE_id, i; + uint8_t round = 0; + uint8_t harq_pid = 0; + uint16_t ii, j; + uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + uint16_t nb_rbs_allowed_slice[MAX_NUM_CCs][MAX_NUM_SLICES]; + uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + uint16_t nb_rbs_required_remaining_1[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + uint16_t average_rbs_per_user[MAX_NUM_CCs] = { 0 }; + rnti_t rnti; + int min_rb_unit[MAX_NUM_CCs]; + uint16_t r1 = 0; + uint8_t CC_id; + UE_list_t *UE_list = &eNB_mac_inst[Mod_id].UE_list; + LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs] = { 0 }; - int transmission_mode = 0; - UE_sched_ctrl *ue_sched_ctl; - - - for (CC_id=0; CC_id0) // If this CC is allocated for MBSFN skip it here - continue; - - frame_parms[CC_id] = mac_xface->get_lte_frame_parms(Mod_id,CC_id); - - - min_rb_unit[CC_id]=get_min_rb_unit(Mod_id,CC_id); - - for (i = 0; i < NUMBER_OF_UE_MAX; i++) { - if (UE_list->active[i] != TRUE) continue; - - UE_id = i; - // Initialize scheduling information for all active UEs - - //if (flexran_slice_member(UE_id, slice_id) == 0) - //continue; - _dlsch_scheduler_pre_processor_reset(Mod_id, - UE_id, - CC_id, - frameP, - subframeP, - N_RBG[CC_id], - nb_rbs_required, - nb_rbs_required_remaining, - nb_rbs_allowed_slice, - rballoc_sub, - MIMO_mode_indicator); - - } - } - - // Store the DLSCH buffer for each logical channel - _store_dlsch_buffer (Mod_id,slice_id,frameP,subframeP); - - // Calculate the number of RBs required by each UE on the basis of logical channel's buffer - _assign_rbs_required (Mod_id,slice_id, frameP,subframeP,nb_rbs_required,nb_rbs_allowed_slice,min_rb_unit); - - // Sorts the user on the basis of dlsch logical channel buffer and CQI - sort_UEs (Mod_id,frameP,subframeP); - - total_ue_count = 0; - - // loop over all active UEs - for (i=UE_list->head; i>=0; i=UE_list->next[i]) { - rnti = flexran_get_ue_crnti(Mod_id, i); - if(rnti == NOT_A_RNTI) - continue; - if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) - continue; - - UE_id = i; - - if (flexran_slice_member(UE_id, slice_id) == 0) - continue; - - if (!phy_stats_exist(Mod_id, rnti)) - continue; - - for (ii=0; ii < UE_num_active_CC(UE_list,UE_id); ii++) { - CC_id = UE_list->ordered_CCids[ii][UE_id]; - ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - ue_sched_ctl->max_allowed_rbs[CC_id]=nb_rbs_allowed_slice[CC_id][slice_id]; - flexran_get_harq(Mod_id, CC_id, UE_id, frameP, subframeP, &harq_pid, &round); - - // if there is no available harq_process, skip the UE - if (UE_list->UE_sched_ctrl[UE_id].harq_pid[CC_id]<0) - continue; - - average_rbs_per_user[CC_id]=0; - - frame_parms[CC_id] = mac_xface->get_lte_frame_parms(Mod_id,CC_id); - - // mac_xface->get_ue_active_harq_pid(Mod_id,CC_id,rnti,frameP,subframeP,&harq_pid,&round,0); - - if(round>0) { - nb_rbs_required[CC_id][UE_id] = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid]; - } - - //nb_rbs_required_remaining[UE_id] = nb_rbs_required[UE_id]; - if (nb_rbs_required[CC_id][UE_id] > 0) { - total_ue_count = total_ue_count + 1; - } + int transmission_mode = 0; + UE_sched_ctrl *ue_sched_ctl; - // hypotetical assignement - /* - * If schedule is enabled and if the priority of the UEs is modified - * The average rbs per logical channel per user will depend on the level of - * priority. Concerning the hypothetical assignement, we should assign more - * rbs to prioritized users. Maybe, we can do a mapping between the - * average rbs per user and the level of priority or multiply the average rbs - * per user by a coefficient which represents the degree of priority. - */ + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - if (total_ue_count == 0) { - average_rbs_per_user[CC_id] = 0; - } else if( (min_rb_unit[CC_id] * total_ue_count) <= nb_rbs_allowed_slice[CC_id][slice_id] ) { - average_rbs_per_user[CC_id] = (uint16_t) floor(nb_rbs_allowed_slice[CC_id][slice_id]/total_ue_count); - } else { - average_rbs_per_user[CC_id] = min_rb_unit[CC_id]; // consider the total number of use that can be scheduled UE - } - } - } - - // note: nb_rbs_required is assigned according to total_buffer_dl - // extend nb_rbs_required to capture per LCID RB required - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - rnti = UE_RNTI(Mod_id,i); - - if(rnti == NOT_A_RNTI) - continue; - - if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) - continue; - - if (!phy_stats_exist(Mod_id, rnti)) - continue; - - if (flexran_slice_member(i, slice_id) == 0) - continue; - - for (ii=0; iiordered_CCids[ii][i]; - - // control channel - if (mac_eNB_get_rrc_status(Mod_id,rnti) < RRC_RECONFIGURED) { - nb_rbs_required_remaining_1[CC_id][i] = nb_rbs_required[CC_id][i]; - } else { - nb_rbs_required_remaining_1[CC_id][i] = cmin(average_rbs_per_user[CC_id],nb_rbs_required[CC_id][i]); - - } - } - } - - //Allocation to UEs is done in 2 rounds, - // 1st stage: average number of RBs allocated to each UE - // 2nd stage: remaining RBs are allocated to high priority UEs - for(r1=0; r1<2; r1++) { - - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - - if (flexran_slice_member(i, slice_id) == 0) - continue; - - for (ii=0; iiordered_CCids[ii][i]; - - if(r1 == 0) { - nb_rbs_required_remaining[CC_id][i] = nb_rbs_required_remaining_1[CC_id][i]; - } else { // rb required based only on the buffer - rb allloctaed in the 1st round + extra reaming rb form the 1st round - nb_rbs_required_remaining[CC_id][i] = nb_rbs_required[CC_id][i]-nb_rbs_required_remaining_1[CC_id][i]+nb_rbs_required_remaining[CC_id][i]; - } - - if (nb_rbs_required[CC_id][i]> 0 ) - LOG_D(MAC,"round %d : nb_rbs_required_remaining[%d][%d]= %d (remaining_1 %d, required %d, pre_nb_available_rbs %d, N_RBG %d, rb_unit %d)\n", - r1, CC_id, i, - nb_rbs_required_remaining[CC_id][i], - nb_rbs_required_remaining_1[CC_id][i], - nb_rbs_required[CC_id][i], - UE_list->UE_sched_ctrl[i].pre_nb_available_rbs[CC_id], - N_RBG[CC_id], - min_rb_unit[CC_id]); - - } - } - - if (total_ue_count > 0 ) { - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - UE_id = i; - - if (flexran_slice_member(UE_id, slice_id) == 0) - continue; - - for (ii=0; iiordered_CCids[ii][UE_id]; - ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - flexran_get_harq(Mod_id, CC_id, UE_id, frameP, subframeP, &harq_pid, &round); - rnti = UE_RNTI(Mod_id,UE_id); - - // LOG_D(MAC,"UE %d rnti 0x\n", UE_id, rnti ); - if(rnti == NOT_A_RNTI) - continue; - - if (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync == 1) + if (mbsfn_flag[CC_id] > 0) // If this CC is allocated for MBSFN skip it here continue; - if (!phy_stats_exist(Mod_id, rnti)) - continue; + frame_parms[CC_id] = mac_xface->get_lte_frame_parms(Mod_id, CC_id); - transmission_mode = mac_xface->get_transmission_mode(Mod_id,CC_id,rnti); - //rrc_status = mac_eNB_get_rrc_status(Mod_id,rnti); - /* 1st allocate for the retx */ - // retransmission in data channels - // control channel in the 1st transmission - // data channel for all TM - LOG_T(MAC,"calling dlsch_scheduler_pre_processor_allocate .. \n "); - _dlsch_scheduler_pre_processor_allocate (Mod_id, - UE_id, - CC_id, - N_RBG[CC_id], - transmission_mode, - min_rb_unit[CC_id], - frame_parms[CC_id]->N_RB_DL, - nb_rbs_required, - nb_rbs_required_remaining, - rballoc_sub, - MIMO_mode_indicator); - } - } - } // total_ue_count - } // end of for for r1 and r2 + min_rb_unit[CC_id] = get_min_rb_unit(Mod_id, CC_id); - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - UE_id = i; - ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - - if (flexran_slice_member(UE_id, slice_id) == 0) - continue; + for (i = 0; i < NUMBER_OF_UE_MAX; i++) { + if (UE_list->active[i] != TRUE) + continue; - for (ii=0; iiordered_CCids[ii][UE_id]; - //PHY_vars_eNB_g[Mod_id]->mu_mimo_mode[UE_id].dl_pow_off = dl_pow_off[UE_id]; + UE_id = i; + // Initialize scheduling information for all active UEs - if (ue_sched_ctl->pre_nb_available_rbs[CC_id] > 0 ) { - LOG_D(MAC,"******************DL Scheduling Information for UE%d ************************\n",UE_id); - LOG_D(MAC,"dl power offset UE%d = %d \n",UE_id,ue_sched_ctl->dl_pow_off[CC_id]); - LOG_D(MAC,"***********RB Alloc for every subband for UE%d ***********\n",UE_id); + //if (flexran_slice_member(UE_id, slice_id) == 0) + //continue; + _dlsch_scheduler_pre_processor_reset(Mod_id, + UE_id, + CC_id, + frameP, + subframeP, + N_RBG[CC_id], + nb_rbs_required, + nb_rbs_required_remaining, + nb_rbs_allowed_slice, + rballoc_sub, + MIMO_mode_indicator); - for(j=0; jmu_mimo_mode[UE_id].rballoc_sub[i] = rballoc_sub_UE[CC_id][UE_id][i]; - LOG_D(MAC,"RB Alloc for UE%d and Subband%d = %d\n",UE_id,j,ue_sched_ctl->rballoc_sub_UE[CC_id][j]); - } - - //PHY_vars_eNB_g[Mod_id]->mu_mimo_mode[UE_id].pre_nb_available_rbs = pre_nb_available_rbs[CC_id][UE_id]; - LOG_D(MAC,"[eNB %d][SLICE %d] Total RBs allocated for UE%d = %d\n", - Mod_id, slice_id, UE_id,ue_sched_ctl->pre_nb_available_rbs[CC_id]); - } + } + } + + // Store the DLSCH buffer for each logical channel + _store_dlsch_buffer(Mod_id, slice_id, frameP, subframeP); + + // Calculate the number of RBs required by each UE on the basis of logical channel's buffer + _assign_rbs_required(Mod_id, slice_id, frameP, subframeP, + nb_rbs_required, nb_rbs_allowed_slice, + min_rb_unit); + + // Sorts the user on the basis of dlsch logical channel buffer and CQI + sort_UEs(Mod_id, frameP, subframeP); + + total_ue_count = 0; + + // loop over all active UEs + for (i = UE_list->head; i >= 0; i = UE_list->next[i]) { + rnti = flexran_get_ue_crnti(Mod_id, i); + if (rnti == NOT_A_RNTI) + continue; + if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) + continue; + + UE_id = i; + + if (flexran_slice_member(UE_id, slice_id) == 0) + continue; + + if (!phy_stats_exist(Mod_id, rnti)) + continue; + + for (ii = 0; ii < UE_num_active_CC(UE_list, UE_id); ii++) { + CC_id = UE_list->ordered_CCids[ii][UE_id]; + ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + ue_sched_ctl->max_allowed_rbs[CC_id] = + nb_rbs_allowed_slice[CC_id][slice_id]; + flexran_get_harq(Mod_id, CC_id, UE_id, frameP, subframeP, + &harq_pid, &round); + + // if there is no available harq_process, skip the UE + if (UE_list->UE_sched_ctrl[UE_id].harq_pid[CC_id] < 0) + continue; + + average_rbs_per_user[CC_id] = 0; + + frame_parms[CC_id] = + mac_xface->get_lte_frame_parms(Mod_id, CC_id); + + // mac_xface->get_ue_active_harq_pid(Mod_id,CC_id,rnti,frameP,subframeP,&harq_pid,&round,0); + + if (round > 0) { + nb_rbs_required[CC_id][UE_id] = + UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid]; + } + //nb_rbs_required_remaining[UE_id] = nb_rbs_required[UE_id]; + if (nb_rbs_required[CC_id][UE_id] > 0) { + total_ue_count = total_ue_count + 1; + } + // hypotetical assignement + /* + * If schedule is enabled and if the priority of the UEs is modified + * The average rbs per logical channel per user will depend on the level of + * priority. Concerning the hypothetical assignement, we should assign more + * rbs to prioritized users. Maybe, we can do a mapping between the + * average rbs per user and the level of priority or multiply the average rbs + * per user by a coefficient which represents the degree of priority. + */ + + if (total_ue_count == 0) { + average_rbs_per_user[CC_id] = 0; + } else if ((min_rb_unit[CC_id] * total_ue_count) <= + nb_rbs_allowed_slice[CC_id][slice_id]) { + average_rbs_per_user[CC_id] = + (uint16_t) floor(nb_rbs_allowed_slice[CC_id][slice_id] + / total_ue_count); + } else { + average_rbs_per_user[CC_id] = min_rb_unit[CC_id]; // consider the total number of use that can be scheduled UE + } + } + } + + // note: nb_rbs_required is assigned according to total_buffer_dl + // extend nb_rbs_required to capture per LCID RB required + for (i = UE_list->head; i >= 0; i = UE_list->next[i]) { + rnti = UE_RNTI(Mod_id, i); + + if (rnti == NOT_A_RNTI) + continue; + + if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) + continue; + + if (!phy_stats_exist(Mod_id, rnti)) + continue; + + if (flexran_slice_member(i, slice_id) == 0) + continue; + + for (ii = 0; ii < UE_num_active_CC(UE_list, i); ii++) { + CC_id = UE_list->ordered_CCids[ii][i]; + + // control channel + if (mac_eNB_get_rrc_status(Mod_id, rnti) < RRC_RECONFIGURED) { + nb_rbs_required_remaining_1[CC_id][i] = + nb_rbs_required[CC_id][i]; + } else { + nb_rbs_required_remaining_1[CC_id][i] = + cmin(average_rbs_per_user[CC_id], + nb_rbs_required[CC_id][i]); + + } + } + } + + //Allocation to UEs is done in 2 rounds, + // 1st stage: average number of RBs allocated to each UE + // 2nd stage: remaining RBs are allocated to high priority UEs + for (r1 = 0; r1 < 2; r1++) { + + for (i = UE_list->head; i >= 0; i = UE_list->next[i]) { + + if (flexran_slice_member(i, slice_id) == 0) + continue; + + for (ii = 0; ii < UE_num_active_CC(UE_list, i); ii++) { + CC_id = UE_list->ordered_CCids[ii][i]; + + if (r1 == 0) { + nb_rbs_required_remaining[CC_id][i] = + nb_rbs_required_remaining_1[CC_id][i]; + } else { // rb required based only on the buffer - rb allloctaed in the 1st round + extra reaming rb form the 1st round + nb_rbs_required_remaining[CC_id][i] = + nb_rbs_required[CC_id][i] - + nb_rbs_required_remaining_1[CC_id][i] + + nb_rbs_required_remaining[CC_id][i]; + } + + if (nb_rbs_required[CC_id][i] > 0) + LOG_D(MAC, + "round %d : nb_rbs_required_remaining[%d][%d]= %d (remaining_1 %d, required %d, pre_nb_available_rbs %d, N_RBG %d, rb_unit %d)\n", + r1, CC_id, i, + nb_rbs_required_remaining[CC_id][i], + nb_rbs_required_remaining_1[CC_id][i], + nb_rbs_required[CC_id][i], + UE_list->UE_sched_ctrl[i]. + pre_nb_available_rbs[CC_id], N_RBG[CC_id], + min_rb_unit[CC_id]); + + } + } + + if (total_ue_count > 0) { + for (i = UE_list->head; i >= 0; i = UE_list->next[i]) { + UE_id = i; + + if (flexran_slice_member(UE_id, slice_id) == 0) + continue; + + for (ii = 0; ii < UE_num_active_CC(UE_list, UE_id); ii++) { + CC_id = UE_list->ordered_CCids[ii][UE_id]; + ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + flexran_get_harq(Mod_id, CC_id, UE_id, frameP, + subframeP, &harq_pid, &round); + rnti = UE_RNTI(Mod_id, UE_id); + + // LOG_D(MAC,"UE %d rnti 0x\n", UE_id, rnti ); + if (rnti == NOT_A_RNTI) + continue; + + if (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync == 1) + continue; + + if (!phy_stats_exist(Mod_id, rnti)) + continue; + + transmission_mode = + mac_xface->get_transmission_mode(Mod_id, CC_id, + rnti); + //rrc_status = mac_eNB_get_rrc_status(Mod_id,rnti); + /* 1st allocate for the retx */ + + // retransmission in data channels + // control channel in the 1st transmission + // data channel for all TM + LOG_T(MAC, + "calling dlsch_scheduler_pre_processor_allocate .. \n "); + _dlsch_scheduler_pre_processor_allocate(Mod_id, UE_id, + CC_id, + N_RBG[CC_id], + transmission_mode, + min_rb_unit + [CC_id], + frame_parms + [CC_id]-> + N_RB_DL, + nb_rbs_required, + nb_rbs_required_remaining, + rballoc_sub, + MIMO_mode_indicator); + } + } + } // total_ue_count + } // end of for for r1 and r2 + + for (i = UE_list->head; i >= 0; i = UE_list->next[i]) { + UE_id = i; + ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + + if (flexran_slice_member(UE_id, slice_id) == 0) + continue; + + for (ii = 0; ii < UE_num_active_CC(UE_list, UE_id); ii++) { + CC_id = UE_list->ordered_CCids[ii][UE_id]; + //PHY_vars_eNB_g[Mod_id]->mu_mimo_mode[UE_id].dl_pow_off = dl_pow_off[UE_id]; + + if (ue_sched_ctl->pre_nb_available_rbs[CC_id] > 0) { + LOG_D(MAC, + "******************DL Scheduling Information for UE%d ************************\n", + UE_id); + LOG_D(MAC, "dl power offset UE%d = %d \n", UE_id, + ue_sched_ctl->dl_pow_off[CC_id]); + LOG_D(MAC, + "***********RB Alloc for every subband for UE%d ***********\n", + UE_id); + + for (j = 0; j < N_RBG[CC_id]; j++) { + //PHY_vars_eNB_g[Mod_id]->mu_mimo_mode[UE_id].rballoc_sub[i] = rballoc_sub_UE[CC_id][UE_id][i]; + LOG_D(MAC, "RB Alloc for UE%d and Subband%d = %d\n", + UE_id, j, + ue_sched_ctl->rballoc_sub_UE[CC_id][j]); + } + + //PHY_vars_eNB_g[Mod_id]->mu_mimo_mode[UE_id].pre_nb_available_rbs = pre_nb_available_rbs[CC_id][UE_id]; + LOG_D(MAC, + "[eNB %d][SLICE %d] Total RBs allocated for UE%d = %d\n", + Mod_id, slice_id, UE_id, + ue_sched_ctl->pre_nb_available_rbs[CC_id]); + } + } } - } } #define SF05_LIMIT 1 @@ -714,956 +826,1180 @@ void _dlsch_scheduler_pre_processor (module_id_t Mod_id, */ void -flexran_schedule_ue_spec_default(mid_t mod_id, - uint32_t frame, - uint32_t subframe, - int *mbsfn_flag, - Protocol__FlexranMessage **dl_info) +flexran_schedule_ue_spec_default(mid_t mod_id, + uint32_t frame, + uint32_t subframe, + int *mbsfn_flag, + Protocol__FlexranMessage ** dl_info) //------------------------------------------------------------------------------ { - int i=0; - - flexran_agent_mac_create_empty_dl_config(mod_id, dl_info); - - for (i = 0; i < n_active_slices; i++) { - - // Load any updated functions - if (update_dl_scheduler[i] > 0 ) { - slice_sched[i] = dlsym(NULL, dl_scheduler_type[i]); - update_dl_scheduler[i] = 0; - update_dl_scheduler_current[i] = 0; - slice_percentage_current[i]= slice_percentage[i]; - total_slice_percentage+=slice_percentage[i]; - LOG_N(MAC,"update dl scheduler slice %d\n", i); + int i = 0; + + flexran_agent_mac_create_empty_dl_config(mod_id, dl_info); + + for (i = 0; i < n_active_slices; i++) { + + // Load any updated functions + if (update_dl_scheduler[i] > 0) { + slice_sched[i] = dlsym(NULL, dl_scheduler_type[i]); + update_dl_scheduler[i] = 0; + update_dl_scheduler_current[i] = 0; + slice_percentage_current[i] = slice_percentage[i]; + total_slice_percentage += slice_percentage[i]; + LOG_N(MAC, "update dl scheduler slice %d\n", i); + } + // check if the number of slices has changed, and log + if (n_active_slices_current != n_active_slices) { + if ((n_active_slices > 0) + && (n_active_slices <= MAX_NUM_SLICES)) { + LOG_N(MAC, + "[eNB %d]frame %d subframe %d: number of active slices has changed: %d-->%d\n", + mod_id, frame, subframe, n_active_slices_current, + n_active_slices); + n_active_slices_current = n_active_slices; + } else { + LOG_W(MAC, + "invalid number of slices %d, revert to the previous value %d\n", + n_active_slices, n_active_slices_current); + n_active_slices = n_active_slices_current; + } + } + // check if the slice rb share has changed, and log the console + if (slice_percentage_current[i] != slice_percentage[i]) { + if ((slice_percentage[i] >= 0.0) + && (slice_percentage[i] <= 1.0)) { + if ((total_slice_percentage - slice_percentage_current[i] + + slice_percentage[i]) <= 1.0) { + total_slice_percentage = + total_slice_percentage - + slice_percentage_current[i] + slice_percentage[i]; + LOG_N(MAC, + "[eNB %d][SLICE %d] frame %d subframe %d: total percentage %f, slice RB percentage has changed: %f-->%f\n", + mod_id, i, frame, subframe, + total_slice_percentage, + slice_percentage_current[i], + slice_percentage[i]); + slice_percentage_current[i] = slice_percentage[i]; + } else { + LOG_W(MAC, + "[eNB %d][SLICE %d] invalid total RB share (%f->%f), revert the previous value (%f->%f)\n", + mod_id, i, total_slice_percentage, + total_slice_percentage - + slice_percentage_current[i] + + slice_percentage[i], slice_percentage[i], + slice_percentage_current[i]); + slice_percentage[i] = slice_percentage_current[i]; + + } + } else { + LOG_W(MAC, + "[eNB %d][SLICE %d] invalid slice RB share, revert the previous value (%f->%f)\n", + mod_id, i, slice_percentage[i], + slice_percentage_current[i]); + slice_percentage[i] = slice_percentage_current[i]; + + } + } + // check if the slice max MCS, and log the console + if (slice_maxmcs_current[i] != slice_maxmcs[i]) { + if ((slice_maxmcs[i] >= 0) && (slice_maxmcs[i] < 29)) { + LOG_N(MAC, + "[eNB %d][SLICE %d] frame %d subframe %d: slice MAX MCS has changed: %d-->%d\n", + mod_id, i, frame, subframe, slice_maxmcs_current[i], + slice_maxmcs[i]); + slice_maxmcs_current[i] = slice_maxmcs[i]; + } else { + LOG_W(MAC, + "[eNB %d][SLICE %d] invalid slice max mcs %d, revert the previous value %d\n", + mod_id, i, slice_percentage[i], slice_percentage[i]); + slice_maxmcs[i] = slice_maxmcs_current[i]; + } + } + // check if a new scheduler, and log the console + if (update_dl_scheduler_current[i] != update_dl_scheduler[i]) { + LOG_N(MAC, + "[eNB %d][SLICE %d] frame %d subframe %d: DL scheduler for this slice is updated: %s \n", + mod_id, i, frame, subframe, dl_scheduler_type[i]); + update_dl_scheduler_current[i] = update_dl_scheduler[i]; + } + // Run each enabled slice-specific schedulers one by one + //LOG_N(MAC,"[eNB %d]frame %d subframe %d slice %d: calling the scheduler\n", mod_id, frame, subframe,i); + slice_sched[i] (mod_id, i, frame, subframe, mbsfn_flag, dl_info); + } - - // check if the number of slices has changed, and log - if (n_active_slices_current != n_active_slices ){ - if ((n_active_slices > 0) && (n_active_slices <= MAX_NUM_SLICES)) { - LOG_N(MAC,"[eNB %d]frame %d subframe %d: number of active slices has changed: %d-->%d\n", - mod_id, frame, subframe, n_active_slices_current, n_active_slices); - n_active_slices_current = n_active_slices; - } else { - LOG_W(MAC,"invalid number of slices %d, revert to the previous value %d\n",n_active_slices, n_active_slices_current); - n_active_slices = n_active_slices_current; - } - } - - // check if the slice rb share has changed, and log the console - if (slice_percentage_current[i] != slice_percentage[i]){ - if ((slice_percentage[i] >= 0.0) && (slice_percentage[i] <= 1.0)){ - if ((total_slice_percentage - slice_percentage_current[i] + slice_percentage[i]) <= 1.0) { - total_slice_percentage=total_slice_percentage - slice_percentage_current[i] + slice_percentage[i]; - LOG_N(MAC,"[eNB %d][SLICE %d] frame %d subframe %d: total percentage %f, slice RB percentage has changed: %f-->%f\n", - mod_id, i, frame, subframe, total_slice_percentage, slice_percentage_current[i], slice_percentage[i]); - slice_percentage_current[i] = slice_percentage[i]; - } else { - LOG_W(MAC,"[eNB %d][SLICE %d] invalid total RB share (%f->%f), revert the previous value (%f->%f)\n", - mod_id,i, - total_slice_percentage, - total_slice_percentage - slice_percentage_current[i] + slice_percentage[i], - slice_percentage[i],slice_percentage_current[i]); - slice_percentage[i]= slice_percentage_current[i]; + +} + +uint16_t flexran_nb_rbs_allowed_slice(float rb_percentage, int total_rbs) +{ + return (uint16_t) floor(rb_percentage * total_rbs); +} + +int flexran_slice_maxmcs(int slice_id) +{ + return slice_maxmcs[slice_id]; +} + +int flexran_slice_member(int UE_id, int slice_id) +{ + // group membership definition + int slice_member = 0; + + if ((slice_id < 0) || (slice_id > n_active_slices)) + LOG_W(MAC, "out of range slice id %d\n", slice_id); + + switch (slicing_strategy) { + case SLICE_MASK: + switch (slice_id) { + case 0: + if (SLICE0_MASK & UE_id) { + slice_member = 1; + } + break; + case 1: + if (SLICE1_MASK & UE_id) { + slice_member = 1; + } + break; + case 2: + if (SLICE2_MASK & UE_id) { + slice_member = 1; + } + break; + case 3: + if (SLICE3_MASK & UE_id) { + slice_member = 1; + } + break; + default: + LOG_W(MAC, "unknown slice_id %d\n", slice_id); + break; } - } else { - LOG_W(MAC,"[eNB %d][SLICE %d] invalid slice RB share, revert the previous value (%f->%f)\n",mod_id, i, slice_percentage[i],slice_percentage_current[i]); - slice_percentage[i]= slice_percentage_current[i]; - - } - } - - // check if the slice max MCS, and log the console - if (slice_maxmcs_current[i] != slice_maxmcs[i]){ - if ((slice_maxmcs[i] >= 0) && (slice_maxmcs[i] < 29)){ - LOG_N(MAC,"[eNB %d][SLICE %d] frame %d subframe %d: slice MAX MCS has changed: %d-->%d\n", - mod_id, i, frame, subframe, slice_maxmcs_current[i], slice_maxmcs[i]); - slice_maxmcs_current[i] = slice_maxmcs[i]; - } else { - LOG_W(MAC,"[eNB %d][SLICE %d] invalid slice max mcs %d, revert the previous value %d\n",mod_id, i, slice_percentage[i],slice_percentage[i]); - slice_maxmcs[i]= slice_maxmcs_current[i]; - } - } - - // check if a new scheduler, and log the console - if (update_dl_scheduler_current[i] != update_dl_scheduler[i]){ - LOG_N(MAC,"[eNB %d][SLICE %d] frame %d subframe %d: DL scheduler for this slice is updated: %s \n", - mod_id, i, frame, subframe, dl_scheduler_type[i]); - update_dl_scheduler_current[i] = update_dl_scheduler[i]; + break; + case UEID_TO_SLICEID: + default: + if ((UE_id % n_active_slices) == slice_id) { + slice_member = 1; // this ue is a member of this slice + } + break; } - // Run each enabled slice-specific schedulers one by one - //LOG_N(MAC,"[eNB %d]frame %d subframe %d slice %d: calling the scheduler\n", mod_id, frame, subframe,i); - slice_sched[i](mod_id, i, frame, subframe, mbsfn_flag,dl_info); - - } - + return slice_member; } -uint16_t flexran_nb_rbs_allowed_slice(float rb_percentage, int total_rbs){ - return (uint16_t) floor(rb_percentage * total_rbs); -} - -int flexran_slice_maxmcs(int slice_id) { - return slice_maxmcs[slice_id]; -} - -int flexran_slice_member(int UE_id, int slice_id){ - // group membership definition - int slice_member = 0 ; - - if ((slice_id < 0) || (slice_id > n_active_slices)) - LOG_W(MAC,"out of range slice id %d\n",slice_id); - - switch (slicing_strategy) { - case SLICE_MASK: - switch (slice_id){ - case 0: - if (SLICE0_MASK&UE_id){ - slice_member=1; - } - break; - case 1: - if (SLICE1_MASK&UE_id){ - slice_member=1; - } - break; - case 2: - if (SLICE2_MASK&UE_id){ - slice_member=1; - } - break; - case 3: - if (SLICE3_MASK&UE_id){ - slice_member=1; - } - break; - default : - LOG_W(MAC,"unknown slice_id %d\n", slice_id); - break; - - } - break; - case UEID_TO_SLICEID: - default: - if ((UE_id % n_active_slices) == slice_id){ - slice_member= 1; // this ue is a member of this slice - } - break; - } - - return slice_member; -} /* more aggressive rb and mcs allocation with medium priority and the traffic qci */ void -flexran_schedule_ue_spec_embb(mid_t mod_id, - int slice_id, - uint32_t frame, - uint32_t subframe, - int *mbsfn_flag, - Protocol__FlexranMessage **dl_info) - +flexran_schedule_ue_spec_embb(mid_t mod_id, + int slice_id, + uint32_t frame, + uint32_t subframe, + int *mbsfn_flag, + Protocol__FlexranMessage ** dl_info) { - flexran_schedule_ue_spec_common(mod_id, - slice_id, - frame, - subframe, - mbsfn_flag, - dl_info); - + flexran_schedule_ue_spec_common(mod_id, + slice_id, + frame, subframe, mbsfn_flag, dl_info); + } + /* more conservative mcs allocation with high priority and the traffic qci */ void -flexran_schedule_ue_spec_urllc(mid_t mod_id, - int slice_id, - uint32_t frame, - uint32_t subframe, - int *mbsfn_flag, - Protocol__FlexranMessage **dl_info) - +flexran_schedule_ue_spec_urllc(mid_t mod_id, + int slice_id, + uint32_t frame, + uint32_t subframe, + int *mbsfn_flag, + Protocol__FlexranMessage ** dl_info) { - flexran_schedule_ue_spec_common(mod_id, - slice_id, - frame, - subframe, - mbsfn_flag, - dl_info); - + flexran_schedule_ue_spec_common(mod_id, + slice_id, + frame, subframe, mbsfn_flag, dl_info); + } + /* constant rb allocation with low mcs with low priority and given the UE capabilities */ void -flexran_schedule_ue_spec_mmtc(mid_t mod_id, - int slice_id, - uint32_t frame, - uint32_t subframe, - int *mbsfn_flag, - Protocol__FlexranMessage **dl_info) - +flexran_schedule_ue_spec_mmtc(mid_t mod_id, + int slice_id, + uint32_t frame, + uint32_t subframe, + int *mbsfn_flag, + Protocol__FlexranMessage ** dl_info) { - - flexran_schedule_ue_spec_common(mod_id, - slice_id, - frame, - subframe, - mbsfn_flag, - dl_info); - + + flexran_schedule_ue_spec_common(mod_id, + slice_id, + frame, subframe, mbsfn_flag, dl_info); + } + /* regular rb and mcs allocation with low priority */ void -flexran_schedule_ue_spec_be(mid_t mod_id, - int slice_id, - uint32_t frame, - uint32_t subframe, - int *mbsfn_flag, - Protocol__FlexranMessage **dl_info) - +flexran_schedule_ue_spec_be(mid_t mod_id, + int slice_id, + uint32_t frame, + uint32_t subframe, + int *mbsfn_flag, + Protocol__FlexranMessage ** dl_info) { - - flexran_schedule_ue_spec_common(mod_id, - slice_id, - frame, - subframe, - mbsfn_flag, - dl_info); - + + flexran_schedule_ue_spec_common(mod_id, + slice_id, + frame, subframe, mbsfn_flag, dl_info); + } //------------------------------------------------------------------------------ void -flexran_schedule_ue_spec_common(mid_t mod_id, - int slice_id, - uint32_t frame, - uint32_t subframe, - int *mbsfn_flag, - Protocol__FlexranMessage **dl_info) +flexran_schedule_ue_spec_common(mid_t mod_id, + int slice_id, + uint32_t frame, + uint32_t subframe, + int *mbsfn_flag, + Protocol__FlexranMessage ** dl_info) //------------------------------------------------------------------------------ { - uint8_t CC_id; - int UE_id; - int N_RBG[MAX_NUM_CCs]; - unsigned char aggregation; - mac_rlc_status_resp_t rlc_status; - unsigned char header_len = 0, header_len_last = 0, ta_len = 0; - uint16_t nb_rb, nb_rb_temp, total_nb_available_rb[MAX_NUM_CCs], nb_available_rb; - uint16_t TBS, j, rnti; - uint8_t round = 0; - uint8_t harq_pid = 0; - uint16_t sdu_length_total = 0; - int mcs, mcs_tmp; - uint16_t min_rb_unit[MAX_NUM_CCs]; - eNB_MAC_INST *eNB = &eNB_mac_inst[mod_id]; - /* TODO: Must move the helper structs to scheduler implementation */ - UE_list_t *UE_list = &eNB->UE_list; - int32_t normalized_rx_power, target_rx_power; - int32_t tpc = 1; - static int32_t tpc_accumulated=0; - UE_sched_ctrl *ue_sched_ctl; - LTE_eNB_UE_stats *eNB_UE_stats = NULL; - Protocol__FlexDlData *dl_data[NUM_MAX_UE]; - int num_ues_added = 0; - int channels_added = 0; + uint8_t CC_id; + int UE_id; + int N_RBG[MAX_NUM_CCs]; + unsigned char aggregation; + mac_rlc_status_resp_t rlc_status; + unsigned char header_len = 0, header_len_last = 0, ta_len = 0; + uint16_t nb_rb, nb_rb_temp, total_nb_available_rb[MAX_NUM_CCs], + nb_available_rb; + uint16_t TBS, j, rnti; + uint8_t round = 0; + uint8_t harq_pid = 0; + uint16_t sdu_length_total = 0; + int mcs, mcs_tmp; + uint16_t min_rb_unit[MAX_NUM_CCs]; + eNB_MAC_INST *eNB = &eNB_mac_inst[mod_id]; + /* TODO: Must move the helper structs to scheduler implementation */ + UE_list_t *UE_list = &eNB->UE_list; + int32_t normalized_rx_power, target_rx_power; + int32_t tpc = 1; + static int32_t tpc_accumulated = 0; + UE_sched_ctrl *ue_sched_ctl; + LTE_eNB_UE_stats *eNB_UE_stats = NULL; + Protocol__FlexDlData *dl_data[NUM_MAX_UE]; + int num_ues_added = 0; + int channels_added = 0; - Protocol__FlexDlDci *dl_dci; - Protocol__FlexRlcPdu *rlc_pdus[11]; - uint32_t ce_flags = 0; + Protocol__FlexDlDci *dl_dci; + Protocol__FlexRlcPdu *rlc_pdus[11]; + uint32_t ce_flags = 0; + + uint8_t rballoc_sub[25]; + int i; + uint32_t data_to_request; + uint32_t dci_tbs; + uint8_t ue_has_transmission = 0; + uint32_t ndi; - uint8_t rballoc_sub[25]; - int i; - uint32_t data_to_request; - uint32_t dci_tbs; - uint8_t ue_has_transmission = 0; - uint32_t ndi; - #if 0 - - if (UE_list->head==-1) { - return; - } - + + if (UE_list->head == -1) { + return; + } #endif - start_meas(&eNB->schedule_dlsch); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SCHEDULE_DLSCH,VCD_FUNCTION_IN); + start_meas(&eNB->schedule_dlsch); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_SCHEDULE_DLSCH, VCD_FUNCTION_IN); - //weight = get_ue_weight(module_idP,UE_id); - aggregation = 1; // set to the maximum aggregation level + //weight = get_ue_weight(module_idP,UE_id); + aggregation = 1; // set to the maximum aggregation level - for (CC_id=0; CC_idcommon_channels[CC_id].vrb_map[i] != 0) - total_nb_available_rb[CC_id]--; - - N_RBG[CC_id] = flexran_get_N_RBG(mod_id, CC_id); + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + min_rb_unit[CC_id] = get_min_rb_unit(mod_id, CC_id); + // get number of PRBs less those used by common channels + total_nb_available_rb[CC_id] = flexran_get_N_RB_DL(mod_id, CC_id); + for (i = 0; i < flexran_get_N_RB_DL(mod_id, CC_id); i++) + if (eNB->common_channels[CC_id].vrb_map[i] != 0) + total_nb_available_rb[CC_id]--; - // store the global enb stats: - eNB->eNB_stats[CC_id].num_dlactive_UEs = UE_list->num_UEs; - eNB->eNB_stats[CC_id].available_prbs = total_nb_available_rb[CC_id]; - eNB->eNB_stats[CC_id].total_available_prbs += total_nb_available_rb[CC_id]; - eNB->eNB_stats[CC_id].dlsch_bytes_tx=0; - eNB->eNB_stats[CC_id].dlsch_pdus_tx=0; - } + N_RBG[CC_id] = flexran_get_N_RBG(mod_id, CC_id); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PREPROCESSOR,VCD_FUNCTION_IN); + // store the global enb stats: + eNB->eNB_stats[CC_id].num_dlactive_UEs = UE_list->num_UEs; + eNB->eNB_stats[CC_id].available_prbs = + total_nb_available_rb[CC_id]; + eNB->eNB_stats[CC_id].total_available_prbs += + total_nb_available_rb[CC_id]; + eNB->eNB_stats[CC_id].dlsch_bytes_tx = 0; + eNB->eNB_stats[CC_id].dlsch_pdus_tx = 0; + } - start_meas(&eNB->schedule_dlsch_preprocessor); - _dlsch_scheduler_pre_processor(mod_id, - slice_id, - frame, - subframe, - N_RBG, - mbsfn_flag); - stop_meas(&eNB->schedule_dlsch_preprocessor); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PREPROCESSOR,VCD_FUNCTION_OUT); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PREPROCESSOR, VCD_FUNCTION_IN); - for (CC_id=0; CC_idschedule_dlsch_preprocessor); + _dlsch_scheduler_pre_processor(mod_id, + slice_id, + frame, subframe, N_RBG, mbsfn_flag); + stop_meas(&eNB->schedule_dlsch_preprocessor); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PREPROCESSOR, VCD_FUNCTION_OUT); - if (mbsfn_flag[CC_id]>0) - continue; - - for (UE_id=UE_list->head; UE_id>=0; UE_id=UE_list->next[UE_id]) { - - rnti = flexran_get_ue_crnti(mod_id, UE_id); - eNB_UE_stats = mac_xface->get_eNB_UE_stats(mod_id,CC_id,rnti); - ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - - if (eNB_UE_stats==NULL) { - LOG_D(MAC,"[eNB] Cannot find eNB_UE_stats\n"); - // mac_xface->macphy_exit("[MAC][eNB] Cannot find eNB_UE_stats\n"); - continue; - } - - if (flexran_slice_member(UE_id, slice_id) == 0) - continue; - - if (rnti==NOT_A_RNTI) { - LOG_D(MAC,"Cannot find rnti for UE_id %d (num_UEs %d)\n", UE_id,UE_list->num_UEs); - // mac_xface->macphy_exit("Cannot find rnti for UE_id"); - continue; - } + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + LOG_D(MAC, "doing schedule_ue_spec for CC_id %d\n", CC_id); - switch(mac_xface->get_transmission_mode(mod_id,CC_id,rnti)){ - case 1: - case 2: - case 7: - aggregation = get_aggregation(get_bw_index(mod_id,CC_id), - eNB_UE_stats->DL_cqi[0], - format1); - break; - case 3: - aggregation = get_aggregation(get_bw_index(mod_id,CC_id), - eNB_UE_stats->DL_cqi[0], - format2A); - break; - default: - LOG_W(MAC,"Unsupported transmission mode %d\n", mac_xface->get_transmission_mode(mod_id,CC_id,rnti)); - aggregation = 2; - } - - if ((ue_sched_ctl->pre_nb_available_rbs[CC_id] == 0) || // no RBs allocated - CCE_allocation_infeasible(mod_id, CC_id, 0, subframe, aggregation, rnti)) { - LOG_D(MAC,"[eNB %d] Frame %d : no RB allocated for UE %d on CC_id %d: continue \n", - mod_id, frame, UE_id, CC_id); - //if(mac_xface->get_transmission_mode(module_idP,rnti)==5) - continue; //to next user (there might be rbs availiable for other UEs in TM5 - // else - // break; - } + if (mbsfn_flag[CC_id] > 0) + continue; - if (flexran_get_duplex_mode(mod_id, CC_id) == PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { - set_ue_dai (subframe, - flexran_get_subframe_assignment(mod_id, CC_id), - UE_id, - CC_id, - UE_list); - //TODO: update UL DAI after DLSCH scheduling - //set_ul_DAI(mod_id, UE_id, CC_id, frame, subframe,frame_parms); - } + for (UE_id = UE_list->head; UE_id >= 0; + UE_id = UE_list->next[UE_id]) { - channels_added = 0; + rnti = flexran_get_ue_crnti(mod_id, UE_id); + eNB_UE_stats = + mac_xface->get_eNB_UE_stats(mod_id, CC_id, rnti); + ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - // After this point all the UEs will be scheduled - dl_data[num_ues_added] = (Protocol__FlexDlData *) malloc(sizeof(Protocol__FlexDlData)); - protocol__flex_dl_data__init(dl_data[num_ues_added]); - dl_data[num_ues_added]->has_rnti = 1; - dl_data[num_ues_added]->rnti = rnti; - dl_data[num_ues_added]->n_rlc_pdu = 0; - dl_data[num_ues_added]->has_serv_cell_index = 1; - dl_data[num_ues_added]->serv_cell_index = CC_id; - - nb_available_rb = ue_sched_ctl->pre_nb_available_rbs[CC_id]; - flexran_get_harq(mod_id, CC_id, UE_id, frame, subframe, &harq_pid, &round); - sdu_length_total=0; - mcs = cqi_to_mcs[flexran_get_ue_wcqi(mod_id, UE_id)]; - // LOG_I(FLEXRAN_AGENT, "The MCS is %d\n", mcs); - mcs = cmin(mcs,flexran_slice_maxmcs(slice_id)); + if (eNB_UE_stats == NULL) { + LOG_D(MAC, "[eNB] Cannot find eNB_UE_stats\n"); + // mac_xface->macphy_exit("[MAC][eNB] Cannot find eNB_UE_stats\n"); + continue; + } + + if (flexran_slice_member(UE_id, slice_id) == 0) + continue; + + if (rnti == NOT_A_RNTI) { + LOG_D(MAC, "Cannot find rnti for UE_id %d (num_UEs %d)\n", + UE_id, UE_list->num_UEs); + // mac_xface->macphy_exit("Cannot find rnti for UE_id"); + continue; + } + + switch (mac_xface->get_transmission_mode(mod_id, CC_id, rnti)) { + case 1: + case 2: + case 7: + aggregation = get_aggregation(get_bw_index(mod_id, CC_id), + eNB_UE_stats->DL_cqi[0], + format1); + break; + case 3: + aggregation = get_aggregation(get_bw_index(mod_id, CC_id), + eNB_UE_stats->DL_cqi[0], + format2A); + break; + default: + LOG_W(MAC, "Unsupported transmission mode %d\n", + mac_xface->get_transmission_mode(mod_id, CC_id, + rnti)); + aggregation = 2; + } + + if ((ue_sched_ctl->pre_nb_available_rbs[CC_id] == 0) || // no RBs allocated + CCE_allocation_infeasible(mod_id, CC_id, 0, subframe, + aggregation, rnti)) { + LOG_D(MAC, + "[eNB %d] Frame %d : no RB allocated for UE %d on CC_id %d: continue \n", + mod_id, frame, UE_id, CC_id); + //if(mac_xface->get_transmission_mode(module_idP,rnti)==5) + continue; //to next user (there might be rbs availiable for other UEs in TM5 + // else + // break; + } + + if (flexran_get_duplex_mode(mod_id, CC_id) == + PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { + set_ue_dai(subframe, + flexran_get_subframe_assignment(mod_id, CC_id), + UE_id, CC_id, UE_list); + //TODO: update UL DAI after DLSCH scheduling + //set_ul_DAI(mod_id, UE_id, CC_id, frame, subframe,frame_parms); + } + + channels_added = 0; + + // After this point all the UEs will be scheduled + dl_data[num_ues_added] = + (Protocol__FlexDlData *) + malloc(sizeof(Protocol__FlexDlData)); + protocol__flex_dl_data__init(dl_data[num_ues_added]); + dl_data[num_ues_added]->has_rnti = 1; + dl_data[num_ues_added]->rnti = rnti; + dl_data[num_ues_added]->n_rlc_pdu = 0; + dl_data[num_ues_added]->has_serv_cell_index = 1; + dl_data[num_ues_added]->serv_cell_index = CC_id; + + nb_available_rb = ue_sched_ctl->pre_nb_available_rbs[CC_id]; + flexran_get_harq(mod_id, CC_id, UE_id, frame, subframe, + &harq_pid, &round); + sdu_length_total = 0; + mcs = cqi_to_mcs[flexran_get_ue_wcqi(mod_id, UE_id)]; + // LOG_I(FLEXRAN_AGENT, "The MCS is %d\n", mcs); + mcs = cmin(mcs, flexran_slice_maxmcs(slice_id)); #ifdef EXMIMO - if (mac_xface->get_transmission_mode(mod_id, CC_id, rnti) == 5) { - mcs = cqi_to_mcs[flexran_get_ue_wcqi(mod_id, UE_id)]; - mcs = cmin(mcs,16); - } - + if (mac_xface->get_transmission_mode(mod_id, CC_id, rnti) == 5) { + mcs = cqi_to_mcs[flexran_get_ue_wcqi(mod_id, UE_id)]; + mcs = cmin(mcs, 16); + } #endif - // initializing the rb allocation indicator for each UE - for(j = 0; j < flexran_get_N_RBG(mod_id, CC_id); j++) { - UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = 0; - rballoc_sub[j] = 0; - } - - /* LOG_D(MAC,"[eNB %d] Frame %d: Scheduling UE %d on CC_id %d (rnti %x, harq_pid %d, round %d, rb %d, cqi %d, mcs %d, rrc %d)\n", */ - /* mod_id, frame, UE_id, CC_id, rnti, harq_pid, round, nb_available_rb, */ - /* eNB_UE_stats->DL_cqi[0], mcs, */ - /* UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status); */ - - dl_dci = (Protocol__FlexDlDci*) malloc(sizeof(Protocol__FlexDlDci)); - protocol__flex_dl_dci__init(dl_dci); - dl_data[num_ues_added]->dl_dci = dl_dci; - - - dl_dci->has_rnti = 1; - dl_dci->rnti = rnti; - dl_dci->has_harq_process = 1; - dl_dci->harq_process = harq_pid; - - /* process retransmission */ - if (round > 0) { - - LOG_D(FLEXRAN_AGENT, "There was a retransmission just now and the round was %d\n", round); - - if (flexran_get_duplex_mode(mod_id, CC_id) == PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { - UE_list->UE_template[CC_id][UE_id].DAI++; - update_ul_dci(mod_id, CC_id, rnti, UE_list->UE_template[CC_id][UE_id].DAI); - LOG_D(MAC,"DAI update: CC_id %d subframeP %d: UE %d, DAI %d\n", - CC_id, subframe,UE_id,UE_list->UE_template[CC_id][UE_id].DAI); - } - - mcs = UE_list->UE_template[CC_id][UE_id].mcs[harq_pid]; - - // get freq_allocation - nb_rb = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid]; - - /*TODO: Must add this to FlexRAN agent API */ - dci_tbs = mac_xface->get_TBS_DL(mcs, nb_rb); - - if (nb_rb <= nb_available_rb) { - - if(nb_rb == ue_sched_ctl->pre_nb_available_rbs[CC_id]) { - for(j = 0; j < flexran_get_N_RBG(mod_id, CC_id); j++) { // for indicating the rballoc for each sub-band - UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = ue_sched_ctl->rballoc_sub_UE[CC_id][j]; - } - } else { - nb_rb_temp = nb_rb; - j = 0; - - while((nb_rb_temp > 0) && (j < flexran_get_N_RBG(mod_id, CC_id))) { - if(ue_sched_ctl->rballoc_sub_UE[CC_id][j] == 1) { - UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = ue_sched_ctl->rballoc_sub_UE[CC_id][j]; - - if((j == flexran_get_N_RBG(mod_id, CC_id) - 1) && - ((flexran_get_N_RB_DL(mod_id, CC_id) == 25)|| - (flexran_get_N_RB_DL(mod_id, CC_id) == 50))) { - nb_rb_temp = nb_rb_temp - min_rb_unit[CC_id]+1; - } else { - nb_rb_temp = nb_rb_temp - min_rb_unit[CC_id]; - } - } - j = j + 1; + // initializing the rb allocation indicator for each UE + for (j = 0; j < flexran_get_N_RBG(mod_id, CC_id); j++) { + UE_list-> + UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] + = 0; + rballoc_sub[j] = 0; } - } - nb_available_rb -= nb_rb; - PHY_vars_eNB_g[mod_id][CC_id]->mu_mimo_mode[UE_id].pre_nb_available_rbs = nb_rb; - PHY_vars_eNB_g[mod_id][CC_id]->mu_mimo_mode[UE_id].dl_pow_off = ue_sched_ctl->dl_pow_off[CC_id]; - - for(j=0; j < flexran_get_N_RBG(mod_id, CC_id); j++) { - PHY_vars_eNB_g[mod_id][CC_id]->mu_mimo_mode[UE_id].rballoc_sub[j] = UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j]; - rballoc_sub[j] = UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j]; - } + /* LOG_D(MAC,"[eNB %d] Frame %d: Scheduling UE %d on CC_id %d (rnti %x, harq_pid %d, round %d, rb %d, cqi %d, mcs %d, rrc %d)\n", */ + /* mod_id, frame, UE_id, CC_id, rnti, harq_pid, round, nb_available_rb, */ + /* eNB_UE_stats->DL_cqi[0], mcs, */ + /* UE_list->eNB_UE_stats[CC_id][UE_id].rrc_status); */ - // Keep the old NDI, do not toggle - ndi = UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; - tpc = UE_list->UE_template[CC_id][UE_id].oldTPC[harq_pid]; - UE_list->UE_template[CC_id][UE_id].mcs[harq_pid] = mcs; + dl_dci = + (Protocol__FlexDlDci *) + malloc(sizeof(Protocol__FlexDlDci)); + protocol__flex_dl_dci__init(dl_dci); + dl_data[num_ues_added]->dl_dci = dl_dci; - ue_has_transmission = 1; - num_ues_added++; - } else { - LOG_D(MAC,"[eNB %d] Frame %d CC_id %d : don't schedule UE %d, its retransmission takes more resources than we have\n", - mod_id, frame, CC_id, UE_id); - ue_has_transmission = 0; + + dl_dci->has_rnti = 1; + dl_dci->rnti = rnti; + dl_dci->has_harq_process = 1; + dl_dci->harq_process = harq_pid; + + /* process retransmission */ + if (round > 0) { + + LOG_D(FLEXRAN_AGENT, + "There was a retransmission just now and the round was %d\n", + round); + + if (flexran_get_duplex_mode(mod_id, CC_id) == + PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { + UE_list->UE_template[CC_id][UE_id].DAI++; + update_ul_dci(mod_id, CC_id, rnti, + UE_list->UE_template[CC_id][UE_id].DAI); + LOG_D(MAC, + "DAI update: CC_id %d subframeP %d: UE %d, DAI %d\n", + CC_id, subframe, UE_id, + UE_list->UE_template[CC_id][UE_id].DAI); + } + + mcs = UE_list->UE_template[CC_id][UE_id].mcs[harq_pid]; + + // get freq_allocation + nb_rb = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid]; + + /*TODO: Must add this to FlexRAN agent API */ + dci_tbs = mac_xface->get_TBS_DL(mcs, nb_rb); + + if (nb_rb <= nb_available_rb) { + + if (nb_rb == ue_sched_ctl->pre_nb_available_rbs[CC_id]) { + for (j = 0; j < flexran_get_N_RBG(mod_id, CC_id); j++) { // for indicating the rballoc for each sub-band + UE_list->UE_template[CC_id][UE_id]. + rballoc_subband[harq_pid][j] = + ue_sched_ctl->rballoc_sub_UE[CC_id][j]; + } + } else { + nb_rb_temp = nb_rb; + j = 0; + + while ((nb_rb_temp > 0) + && (j < flexran_get_N_RBG(mod_id, CC_id))) { + if (ue_sched_ctl->rballoc_sub_UE[CC_id][j] == + 1) { + UE_list-> + UE_template[CC_id] + [UE_id].rballoc_subband[harq_pid][j] = + ue_sched_ctl->rballoc_sub_UE[CC_id][j]; + + if ((j == + flexran_get_N_RBG(mod_id, CC_id) - 1) + && + ((flexran_get_N_RB_DL(mod_id, CC_id) == + 25) + || (flexran_get_N_RB_DL(mod_id, CC_id) + == 50))) { + nb_rb_temp = + nb_rb_temp - min_rb_unit[CC_id] + + 1; + } else { + nb_rb_temp = + nb_rb_temp - min_rb_unit[CC_id]; + } + } + j = j + 1; + } + } + + nb_available_rb -= nb_rb; + PHY_vars_eNB_g[mod_id][CC_id]-> + mu_mimo_mode[UE_id].pre_nb_available_rbs = nb_rb; + PHY_vars_eNB_g[mod_id][CC_id]-> + mu_mimo_mode[UE_id].dl_pow_off = + ue_sched_ctl->dl_pow_off[CC_id]; + + for (j = 0; j < flexran_get_N_RBG(mod_id, CC_id); j++) { + PHY_vars_eNB_g[mod_id][CC_id]-> + mu_mimo_mode[UE_id].rballoc_sub[j] = + UE_list-> + UE_template[CC_id][UE_id].rballoc_subband + [harq_pid][j]; + rballoc_sub[j] = + UE_list-> + UE_template[CC_id][UE_id].rballoc_subband + [harq_pid][j]; + } + + // Keep the old NDI, do not toggle + ndi = + UE_list->UE_template[CC_id][UE_id]. + oldNDI[harq_pid]; + tpc = + UE_list->UE_template[CC_id][UE_id]. + oldTPC[harq_pid]; + UE_list->UE_template[CC_id][UE_id].mcs[harq_pid] = mcs; + + ue_has_transmission = 1; + num_ues_added++; + } else { + LOG_D(MAC, + "[eNB %d] Frame %d CC_id %d : don't schedule UE %d, its retransmission takes more resources than we have\n", + mod_id, frame, CC_id, UE_id); + ue_has_transmission = 0; + } + //End of retransmission + } else { /* This is a potentially new SDU opportunity */ + rlc_status.bytes_in_buffer = 0; + // Now check RLC information to compute number of required RBs + // get maximum TBS size for RLC request + //TBS = mac_xface->get_TBS(eNB_UE_stats->DL_cqi[0]<<1,nb_available_rb); + TBS = mac_xface->get_TBS_DL(mcs, nb_available_rb); + dci_tbs = TBS; + LOG_D(FLEXRAN_AGENT, "TBS is %d\n", TBS); + + // check first for RLC data on DCCH + // add the length for all the control elements (timing adv, drx, etc) : header + payload + + ta_len = (ue_sched_ctl->ta_update != 0) ? 2 : 0; + + dl_data[num_ues_added]->n_ce_bitmap = 2; + dl_data[num_ues_added]->ce_bitmap = + (uint32_t *) calloc(2, sizeof(uint32_t)); + + if (ta_len > 0) { + ce_flags |= PROTOCOL__FLEX_CE_TYPE__FLPCET_TA; + } + + /*TODO: Add other flags if DRX and other CE are required */ + + // Add the control element flags to the flexran message + dl_data[num_ues_added]->ce_bitmap[0] = ce_flags; + dl_data[num_ues_added]->ce_bitmap[1] = ce_flags; + + // TODO : Need to prioritize DRBs + // Loop through the UE logical channels (DCCH, DCCH1, DTCH for now) + header_len = 0; + header_len_last = 0; + sdu_length_total = 0; + for (j = 1; j < NB_RB_MAX; j++) { + header_len += 3; + // Need to see if we have space for data from this channel + if (dci_tbs - ta_len - header_len - sdu_length_total > + 0) { + LOG_D(MAC, + "[TEST]Requested %d bytes from RLC buffer on channel %d during first call\n", + dci_tbs - ta_len - header_len); + //If we have space, we need to see how much data we can request at most (if any available) + rlc_status = mac_rlc_status_ind(mod_id, rnti, mod_id, frame, subframe, ENB_FLAG_YES, MBMS_FLAG_NO, j, (dci_tbs - ta_len - header_len - sdu_length_total)); // transport block set size + + //If data are available in channel j + if (rlc_status.bytes_in_buffer > 0) { + LOG_D(MAC, + "[TEST]Have %d bytes in DCCH buffer during first call\n", + rlc_status.bytes_in_buffer); + //Fill in as much as possible + data_to_request = + cmin(dci_tbs - ta_len - header_len - + sdu_length_total, + rlc_status.bytes_in_buffer); + LOG_D(FLEXRAN_AGENT, + "Will request %d bytes from channel %d\n", + data_to_request, j); + if (data_to_request < 128) { //The header will be one byte less + header_len--; + header_len_last = 2; + } else { + header_len_last = 3; + } + /* if (j == 1 || j == 2) { + data_to_request+=0; + } */ + LOG_D(MAC, + "[TEST]Will request %d from channel %d\n", + data_to_request, j); + rlc_pdus[channels_added] = + (Protocol__FlexRlcPdu *) + malloc(sizeof(Protocol__FlexRlcPdu)); + protocol__flex_rlc_pdu__init(rlc_pdus + [channels_added]); + rlc_pdus[channels_added]->n_rlc_pdu_tb = 2; + rlc_pdus[channels_added]->rlc_pdu_tb = + (Protocol__FlexRlcPduTb **) + malloc(sizeof(Protocol__FlexRlcPduTb *) * + 2); + rlc_pdus[channels_added]->rlc_pdu_tb[0] = + (Protocol__FlexRlcPduTb *) + malloc(sizeof(Protocol__FlexRlcPduTb)); + protocol__flex_rlc_pdu_tb__init(rlc_pdus + [channels_added]->rlc_pdu_tb + [0]); + rlc_pdus[channels_added]-> + rlc_pdu_tb[0]->has_logical_channel_id = 1; + rlc_pdus[channels_added]-> + rlc_pdu_tb[0]->logical_channel_id = j; + rlc_pdus[channels_added]->rlc_pdu_tb[0]-> + has_size = 1; + rlc_pdus[channels_added]->rlc_pdu_tb[0]->size = + data_to_request; + rlc_pdus[channels_added]->rlc_pdu_tb[1] = + (Protocol__FlexRlcPduTb *) + malloc(sizeof(Protocol__FlexRlcPduTb)); + protocol__flex_rlc_pdu_tb__init(rlc_pdus + [channels_added]->rlc_pdu_tb + [1]); + rlc_pdus[channels_added]-> + rlc_pdu_tb[1]->has_logical_channel_id = 1; + rlc_pdus[channels_added]-> + rlc_pdu_tb[1]->logical_channel_id = j; + rlc_pdus[channels_added]->rlc_pdu_tb[1]-> + has_size = 1; + rlc_pdus[channels_added]->rlc_pdu_tb[1]->size = + data_to_request; + dl_data[num_ues_added]->n_rlc_pdu++; + channels_added++; + //Set this to the max value that we might request + sdu_length_total += data_to_request; + } else { + //Take back the assumption of a header for this channel + header_len -= 3; + } //End rlc_status.bytes_in_buffer <= 0 + } //end of if dci_tbs - ta_len - header_len > 0 + } // End of iterating the logical channels + + // Add rlc_pdus to the dl_data message + dl_data[num_ues_added]->rlc_pdu = (Protocol__FlexRlcPdu **) + malloc(sizeof(Protocol__FlexRlcPdu *) * + dl_data[num_ues_added]->n_rlc_pdu); + for (i = 0; i < dl_data[num_ues_added]->n_rlc_pdu; i++) { + dl_data[num_ues_added]->rlc_pdu[i] = rlc_pdus[i]; + } + + if (header_len == 0) { + LOG_D(FLEXRAN_AGENT, "Header was empty\n"); + header_len_last = 0; + } + // there is a payload + if ((dl_data[num_ues_added]->n_rlc_pdu > 0)) { + // Now compute number of required RBs for total sdu length + // Assume RAH format 2 + // adjust header lengths + LOG_D(FLEXRAN_AGENT, "We have %d bytes to transfer\n", + sdu_length_total); + if (header_len != 0) { + LOG_D(FLEXRAN_AGENT, "Header length was %d ", + header_len); + header_len_last--; + header_len -= header_len_last; + LOG_D(FLEXRAN_AGENT, "so we resized it to %d\n", + header_len); + } + + /* if (header_len == 2 || header_len == 3) { //Only one SDU, remove length field */ + /* header_len = 1; */ + /* } else { //Remove length field from the last SDU */ + /* header_len--; */ + /* } */ + + mcs_tmp = mcs; + if (mcs_tmp == 0) { + nb_rb = 4; // don't let the TBS get too small + } else { + nb_rb = min_rb_unit[CC_id]; + } + + LOG_D(MAC, + "[TEST]The initial number of resource blocks was %d\n", + nb_rb); + LOG_D(MAC, "[TEST] The initial mcs was %d\n", mcs_tmp); + + TBS = mac_xface->get_TBS_DL(mcs_tmp, nb_rb); + LOG_D(MAC, + "[TEST]The TBS during rate matching was %d\n", + TBS); + + while (TBS < (sdu_length_total + header_len + ta_len)) { + nb_rb += min_rb_unit[CC_id]; // + LOG_D(MAC, + "[TEST]Had to increase the number of RBs\n"); + if (nb_rb > nb_available_rb) { // if we've gone beyond the maximum number of RBs + // (can happen if N_RB_DL is odd) + TBS = + mac_xface->get_TBS_DL(mcs_tmp, + nb_available_rb); + nb_rb = nb_available_rb; + break; + } + + TBS = mac_xface->get_TBS_DL(mcs_tmp, nb_rb); + } + + if (nb_rb == ue_sched_ctl->pre_nb_available_rbs[CC_id]) { + LOG_D(MAC, + "[TEST]We had the exact number of rbs. Time to fill the rballoc subband\n"); + for (j = 0; j < flexran_get_N_RBG(mod_id, CC_id); j++) { // for indicating the rballoc for each sub-band + UE_list->UE_template[CC_id][UE_id]. + rballoc_subband[harq_pid][j] = + ue_sched_ctl->rballoc_sub_UE[CC_id][j]; + } + } else { + nb_rb_temp = nb_rb; + j = 0; + LOG_D(MAC, + "[TEST]Will only partially fill the bitmap\n"); + while ((nb_rb_temp > 0) + && (j < flexran_get_N_RBG(mod_id, CC_id))) { + if (ue_sched_ctl->rballoc_sub_UE[CC_id][j] == + 1) { + UE_list-> + UE_template[CC_id] + [UE_id].rballoc_subband[harq_pid][j] = + ue_sched_ctl->rballoc_sub_UE[CC_id][j]; + if ((j == + flexran_get_N_RBG(mod_id, CC_id) - 1) + && + ((flexran_get_N_RB_DL(mod_id, CC_id) == + 25) + || (flexran_get_N_RB_DL(mod_id, CC_id) + == 50))) { + nb_rb_temp = + nb_rb_temp - min_rb_unit[CC_id] + + 1; + } else { + nb_rb_temp = + nb_rb_temp - min_rb_unit[CC_id]; + } + } + j = j + 1; + } + } + + PHY_vars_eNB_g[mod_id][CC_id]-> + mu_mimo_mode[UE_id].pre_nb_available_rbs = nb_rb; + PHY_vars_eNB_g[mod_id][CC_id]-> + mu_mimo_mode[UE_id].dl_pow_off = + ue_sched_ctl->dl_pow_off[CC_id]; + + for (j = 0; j < flexran_get_N_RBG(mod_id, CC_id); j++) { + PHY_vars_eNB_g[mod_id][CC_id]-> + mu_mimo_mode[UE_id].rballoc_sub[j] = + UE_list-> + UE_template[CC_id][UE_id].rballoc_subband + [harq_pid][j]; + } + + // decrease mcs until TBS falls below required length + while ((TBS > (sdu_length_total + header_len + ta_len)) + && (mcs_tmp > 0)) { + mcs_tmp--; + TBS = mac_xface->get_TBS_DL(mcs_tmp, nb_rb); + } + + // if we have decreased too much or we don't have enough RBs, increase MCS + while ((TBS < (sdu_length_total + header_len + ta_len)) + && (((ue_sched_ctl->dl_pow_off[CC_id] > 0) + && (mcs_tmp < 28)) + || ((ue_sched_ctl->dl_pow_off[CC_id] == 0) + && (mcs_tmp <= 15)))) { + mcs_tmp++; + TBS = mac_xface->get_TBS_DL(mcs_tmp, nb_rb); + } + + dci_tbs = TBS; + mcs = mcs_tmp; + LOG_D(FLEXRAN_AGENT, "Final mcs was %d\n", mcs); + + dl_dci->has_aggr_level = 1; + dl_dci->aggr_level = aggregation; + + UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid] = + nb_rb; + + if (flexran_get_duplex_mode(mod_id, CC_id) == + PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { + UE_list->UE_template[CC_id][UE_id].DAI++; + // printf("DAI update: subframeP %d: UE %d, DAI %d\n",subframeP,UE_id,UE_list->UE_template[CC_id][UE_id].DAI); + //#warning only for 5MHz channel + update_ul_dci(mod_id, CC_id, rnti, + UE_list->UE_template[CC_id][UE_id]. + DAI); + } + // do PUCCH power control + // this is the normalized RX power + normalized_rx_power = flexran_get_p0_pucch_dbm(mod_id, UE_id, CC_id); //eNB_UE_stats->Po_PUCCH_dBm; + target_rx_power = flexran_get_p0_nominal_pucch(mod_id, CC_id) + 20; //mac_xface->get_target_pucch_rx_power(mod_id, CC_id) + 20; + // this assumes accumulated tpc + // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out + int32_t framex10psubframe = + UE_list->UE_template[CC_id][UE_id]. + pucch_tpc_tx_frame * 10 + + UE_list->UE_template[CC_id][UE_id]. + pucch_tpc_tx_subframe; + + if (((framex10psubframe + 10) <= (frame * 10 + subframe)) || //normal case + ((framex10psubframe > (frame * 10 + subframe)) && (((10240 - framex10psubframe + frame * 10 + subframe) >= 10)))) //frame wrap-around + if (flexran_get_p0_pucch_status + (mod_id, UE_id, CC_id) == 1) { + flexran_update_p0_pucch(mod_id, UE_id, CC_id); + + UE_list-> + UE_template[CC_id] + [UE_id].pucch_tpc_tx_frame = frame; + UE_list-> + UE_template[CC_id] + [UE_id].pucch_tpc_tx_subframe = subframe; + if (normalized_rx_power > + (target_rx_power + 1)) { + tpc = 0; //-1 + tpc_accumulated--; + } else if (normalized_rx_power < + (target_rx_power - 1)) { + tpc = 2; //+1 + tpc_accumulated++; + } else { + tpc = 1; //0 + } + LOG_D(MAC, + "[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n", + mod_id, frame, subframe, harq_pid, tpc, + tpc_accumulated, normalized_rx_power, + target_rx_power); + } // Po_PUCCH has been updated + else { + tpc = 1; //0 + } // time to do TPC update + else { + tpc = 1; //0 + } + + for (i = 0; + i < + PHY_vars_eNB_g[mod_id][CC_id]->frame_parms.N_RBG; + i++) { + rballoc_sub[i] = + UE_list-> + UE_template[CC_id][UE_id].rballoc_subband + [harq_pid][i]; + } + + // Toggle NDI + LOG_D(MAC, + "CC_id %d Frame %d, subframeP %d: Toggling Format1 NDI for UE %d (rnti %x/%d) oldNDI %d\n", + CC_id, frame, subframe, UE_id, + UE_list->UE_template[CC_id][UE_id].rnti, + harq_pid, + UE_list->UE_template[CC_id][UE_id]. + oldNDI[harq_pid]); + UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid] = + 1 - + UE_list->UE_template[CC_id][UE_id]. + oldNDI[harq_pid]; + ndi = + UE_list->UE_template[CC_id][UE_id]. + oldNDI[harq_pid]; + + UE_list->UE_template[CC_id][UE_id].mcs[harq_pid] = mcs; + UE_list->UE_template[CC_id][UE_id].oldTPC[harq_pid] = + tpc; + + // Increase the pointer for the number of scheduled UEs + num_ues_added++; + ue_has_transmission = 1; + } else { // There is no data from RLC or MAC header, so don't schedule + ue_has_transmission = 0; + } + } // End of new scheduling + + // If we has transmission or retransmission + if (ue_has_transmission) { + switch (mac_xface-> + get_transmission_mode(mod_id, CC_id, rnti)) { + case 1: + case 2: + default: + dl_dci->has_res_alloc = 1; + dl_dci->res_alloc = 0; + dl_dci->has_vrb_format = 1; + dl_dci->vrb_format = + PROTOCOL__FLEX_VRB_FORMAT__FLVRBF_LOCALIZED; + dl_dci->has_format = 1; + dl_dci->format = PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1; + dl_dci->has_rb_bitmap = 1; + dl_dci->rb_bitmap = + allocate_prbs_sub(nb_rb, rballoc_sub); + dl_dci->has_rb_shift = 1; + dl_dci->rb_shift = 0; + dl_dci->n_ndi = 1; + dl_dci->ndi = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_ndi); + dl_dci->ndi[0] = ndi; + dl_dci->n_rv = 1; + dl_dci->rv = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_rv); + dl_dci->rv[0] = round & 3; + dl_dci->has_tpc = 1; + dl_dci->tpc = tpc; + dl_dci->n_mcs = 1; + dl_dci->mcs = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_mcs); + dl_dci->mcs[0] = mcs; + dl_dci->n_tbs_size = 1; + dl_dci->tbs_size = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_tbs_size); + dl_dci->tbs_size[0] = dci_tbs; + if (flexran_get_duplex_mode(mod_id, CC_id) == + PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { + dl_dci->has_dai = 1; + dl_dci->dai = + (UE_list->UE_template[CC_id][UE_id].DAI - + 1) & 3; + } + break; + case 3: + dl_dci->has_res_alloc = 1; + dl_dci->res_alloc = 0; + dl_dci->has_vrb_format = 1; + dl_dci->vrb_format = + PROTOCOL__FLEX_VRB_FORMAT__FLVRBF_LOCALIZED; + dl_dci->has_format = 1; + dl_dci->format = PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A; + dl_dci->has_rb_bitmap = 1; + dl_dci->rb_bitmap = + allocate_prbs_sub(nb_rb, rballoc_sub); + dl_dci->has_rb_shift = 1; + dl_dci->rb_shift = 0; + dl_dci->n_ndi = 2; + dl_dci->ndi = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_ndi); + dl_dci->ndi[0] = ndi; + dl_dci->ndi[1] = ndi; + dl_dci->n_rv = 2; + dl_dci->rv = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_rv); + dl_dci->rv[0] = round & 3; + dl_dci->rv[1] = round & 3; + dl_dci->has_tpc = 1; + dl_dci->tpc = tpc; + dl_dci->n_mcs = 2; + dl_dci->mcs = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_mcs); + dl_dci->mcs[0] = mcs; + dl_dci->mcs[1] = mcs; + dl_dci->n_tbs_size = 2; + dl_dci->tbs_size = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_tbs_size); + dl_dci->tbs_size[0] = dci_tbs; + dl_dci->tbs_size[1] = dci_tbs; + if (flexran_get_duplex_mode(mod_id, CC_id) == + PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { + dl_dci->has_dai = 1; + dl_dci->dai = + (UE_list->UE_template[CC_id][UE_id].DAI - + 1) & 3; + } + break; + case 4: + dl_dci->has_res_alloc = 1; + dl_dci->res_alloc = 0; + dl_dci->has_vrb_format = 1; + dl_dci->vrb_format = + PROTOCOL__FLEX_VRB_FORMAT__FLVRBF_LOCALIZED; + dl_dci->has_format = 1; + dl_dci->format = PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A; + dl_dci->has_rb_bitmap = 1; + dl_dci->rb_bitmap = + allocate_prbs_sub(nb_rb, rballoc_sub); + dl_dci->has_rb_shift = 1; + dl_dci->rb_shift = 0; + dl_dci->n_ndi = 2; + dl_dci->ndi = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_ndi); + dl_dci->ndi[0] = ndi; + dl_dci->ndi[1] = ndi; + dl_dci->n_rv = 2; + dl_dci->rv = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_rv); + dl_dci->rv[0] = round & 3; + dl_dci->rv[1] = round & 3; + dl_dci->has_tpc = 1; + dl_dci->tpc = tpc; + dl_dci->n_mcs = 2; + dl_dci->mcs = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_mcs); + dl_dci->mcs[0] = mcs; + dl_dci->mcs[1] = mcs; + dl_dci->n_tbs_size = 2; + dl_dci->tbs_size = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_tbs_size); + dl_dci->tbs_size[0] = dci_tbs; + dl_dci->tbs_size[1] = dci_tbs; + if (flexran_get_duplex_mode(mod_id, CC_id) == + PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { + dl_dci->has_dai = 1; + dl_dci->dai = + (UE_list->UE_template[CC_id][UE_id].DAI - + 1) & 3; + } + break; + case 5: + dl_dci->has_res_alloc = 1; + dl_dci->res_alloc = 0; + dl_dci->has_vrb_format = 1; + dl_dci->vrb_format = + PROTOCOL__FLEX_VRB_FORMAT__FLVRBF_LOCALIZED; + dl_dci->has_format = 1; + dl_dci->format = PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D; + dl_dci->has_rb_bitmap = 1; + dl_dci->rb_bitmap = + allocate_prbs_sub(nb_rb, rballoc_sub); + dl_dci->has_rb_shift = 1; + dl_dci->rb_shift = 0; + dl_dci->n_ndi = 1; + dl_dci->ndi[0] = ndi; + dl_dci->n_rv = 1; + dl_dci->rv = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_rv); + dl_dci->rv[0] = round & 3; + dl_dci->has_tpc = 1; + dl_dci->tpc = tpc; + dl_dci->n_mcs = 1; + dl_dci->mcs = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_mcs); + dl_dci->mcs[0] = mcs; + dl_dci->n_tbs_size = 1; + dl_dci->tbs_size = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_tbs_size); + dl_dci->tbs_size[0] = dci_tbs; + if (flexran_get_duplex_mode(mod_id, CC_id) == + PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { + dl_dci->has_dai = 1; + dl_dci->dai = + (UE_list->UE_template[CC_id][UE_id].DAI - + 1) & 3; + } + + if (ue_sched_ctl->dl_pow_off[CC_id] == 2) { + ue_sched_ctl->dl_pow_off[CC_id] = 1; + } + + dl_dci->has_dl_power_offset = 1; + dl_dci->dl_power_offset = + ue_sched_ctl->dl_pow_off[CC_id]; + dl_dci->has_precoding_info = 1; + dl_dci->precoding_info = 5; // Is this right?? + + break; + case 6: + dl_dci->has_res_alloc = 1; + dl_dci->res_alloc = 0; + dl_dci->has_vrb_format = 1; + dl_dci->vrb_format = + PROTOCOL__FLEX_VRB_FORMAT__FLVRBF_LOCALIZED; + dl_dci->has_format = 1; + dl_dci->format = PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D; + dl_dci->has_rb_bitmap = 1; + dl_dci->rb_bitmap = + allocate_prbs_sub(nb_rb, rballoc_sub); + dl_dci->has_rb_shift = 1; + dl_dci->rb_shift = 0; + dl_dci->n_ndi = 1; + dl_dci->ndi = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_ndi); + dl_dci->ndi[0] = ndi; + dl_dci->n_rv = 1; + dl_dci->rv = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_rv); + dl_dci->rv[0] = round & 3; + dl_dci->has_tpc = 1; + dl_dci->tpc = tpc; + dl_dci->n_mcs = 1; + dl_dci->mcs = + (uint32_t *) malloc(sizeof(uint32_t) * + dl_dci->n_mcs); + dl_dci->mcs[0] = mcs; + if (flexran_get_duplex_mode(mod_id, CC_id) == + PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { + dl_dci->has_dai = 1; + dl_dci->dai = + (UE_list->UE_template[CC_id][UE_id].DAI - + 1) & 3; + } + + dl_dci->has_dl_power_offset = 1; + dl_dci->dl_power_offset = + ue_sched_ctl->dl_pow_off[CC_id]; + dl_dci->has_precoding_info = 1; + dl_dci->precoding_info = 5; // Is this right?? + break; + } + } + + if (flexran_get_duplex_mode(mod_id, CC_id) == + PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { + + /* TODO */ + //set_ul_DAI(mod_id, UE_id, CC_id, frame, subframe, frame_parms); + } + } // UE_id loop + } // CC_id loop + + // Add all the dl_data elements to the flexran message + int offset = (*dl_info)->dl_mac_config_msg->n_dl_ue_data; + (*dl_info)->dl_mac_config_msg->n_dl_ue_data += num_ues_added; + if (num_ues_added > 0) { + (*dl_info)->dl_mac_config_msg->dl_ue_data = + (Protocol__FlexDlData **) + realloc((*dl_info)->dl_mac_config_msg->dl_ue_data, + sizeof(Protocol__FlexDlData *) * + ((*dl_info)->dl_mac_config_msg->n_dl_ue_data)); + if ((*dl_info)->dl_mac_config_msg->dl_ue_data == NULL) { + LOG_E(MAC, "Request for memory reallocation failed\n"); + return; } - //End of retransmission - } else { /* This is a potentially new SDU opportunity */ - rlc_status.bytes_in_buffer = 0; - // Now check RLC information to compute number of required RBs - // get maximum TBS size for RLC request - //TBS = mac_xface->get_TBS(eNB_UE_stats->DL_cqi[0]<<1,nb_available_rb); - TBS = mac_xface->get_TBS_DL(mcs, nb_available_rb); - dci_tbs = TBS; - LOG_D(FLEXRAN_AGENT, "TBS is %d\n", TBS); - - // check first for RLC data on DCCH - // add the length for all the control elements (timing adv, drx, etc) : header + payload - - ta_len = (ue_sched_ctl->ta_update != 0) ? 2 : 0; - - dl_data[num_ues_added]->n_ce_bitmap = 2; - dl_data[num_ues_added]->ce_bitmap = (uint32_t *) calloc(2, sizeof(uint32_t)); - - if (ta_len > 0) { - ce_flags |= PROTOCOL__FLEX_CE_TYPE__FLPCET_TA; + for (i = 0; i < num_ues_added; i++) { + (*dl_info)->dl_mac_config_msg->dl_ue_data[offset + i] = + dl_data[i]; } + } - /*TODO: Add other flags if DRX and other CE are required*/ - - // Add the control element flags to the flexran message - dl_data[num_ues_added]->ce_bitmap[0] = ce_flags; - dl_data[num_ues_added]->ce_bitmap[1] = ce_flags; - - // TODO : Need to prioritize DRBs - // Loop through the UE logical channels (DCCH, DCCH1, DTCH for now) - header_len = 0; - header_len_last = 0; - sdu_length_total = 0; - for (j = 1; j < NB_RB_MAX; j++) { - header_len += 3; - // Need to see if we have space for data from this channel - if (dci_tbs - ta_len - header_len - sdu_length_total > 0) { - LOG_D(MAC, "[TEST]Requested %d bytes from RLC buffer on channel %d during first call\n", dci_tbs-ta_len-header_len); - //If we have space, we need to see how much data we can request at most (if any available) - rlc_status = mac_rlc_status_ind(mod_id, - rnti, - mod_id, - frame, - subframe, - ENB_FLAG_YES, - MBMS_FLAG_NO, - j, - (dci_tbs - ta_len - header_len - sdu_length_total)); // transport block set size - - //If data are available in channel j - if (rlc_status.bytes_in_buffer > 0) { - LOG_D(MAC, "[TEST]Have %d bytes in DCCH buffer during first call\n", rlc_status.bytes_in_buffer); - //Fill in as much as possible - data_to_request = cmin(dci_tbs - ta_len - header_len - sdu_length_total, rlc_status.bytes_in_buffer); - LOG_D(FLEXRAN_AGENT, "Will request %d bytes from channel %d\n", data_to_request, j); - if (data_to_request < 128) { //The header will be one byte less - header_len--; - header_len_last = 2; - } else { - header_len_last = 3; - } - /* if (j == 1 || j == 2) { - data_to_request+=0; - } */ - LOG_D(MAC, "[TEST]Will request %d from channel %d\n", data_to_request, j); - rlc_pdus[channels_added] = (Protocol__FlexRlcPdu *) malloc(sizeof(Protocol__FlexRlcPdu)); - protocol__flex_rlc_pdu__init(rlc_pdus[channels_added]); - rlc_pdus[channels_added]->n_rlc_pdu_tb = 2; - rlc_pdus[channels_added]->rlc_pdu_tb = (Protocol__FlexRlcPduTb **) malloc(sizeof(Protocol__FlexRlcPduTb *) * 2); - rlc_pdus[channels_added]->rlc_pdu_tb[0] = (Protocol__FlexRlcPduTb *) malloc(sizeof(Protocol__FlexRlcPduTb)); - protocol__flex_rlc_pdu_tb__init(rlc_pdus[channels_added]->rlc_pdu_tb[0]); - rlc_pdus[channels_added]->rlc_pdu_tb[0]->has_logical_channel_id = 1; - rlc_pdus[channels_added]->rlc_pdu_tb[0]->logical_channel_id = j; - rlc_pdus[channels_added]->rlc_pdu_tb[0]->has_size = 1; - rlc_pdus[channels_added]->rlc_pdu_tb[0]->size = data_to_request; - rlc_pdus[channels_added]->rlc_pdu_tb[1] = (Protocol__FlexRlcPduTb *) malloc(sizeof(Protocol__FlexRlcPduTb)); - protocol__flex_rlc_pdu_tb__init(rlc_pdus[channels_added]->rlc_pdu_tb[1]); - rlc_pdus[channels_added]->rlc_pdu_tb[1]->has_logical_channel_id = 1; - rlc_pdus[channels_added]->rlc_pdu_tb[1]->logical_channel_id = j; - rlc_pdus[channels_added]->rlc_pdu_tb[1]->has_size = 1; - rlc_pdus[channels_added]->rlc_pdu_tb[1]->size = data_to_request; - dl_data[num_ues_added]->n_rlc_pdu++; - channels_added++; - //Set this to the max value that we might request - sdu_length_total += data_to_request; - } else { - //Take back the assumption of a header for this channel - header_len -= 3; - } //End rlc_status.bytes_in_buffer <= 0 - } //end of if dci_tbs - ta_len - header_len > 0 - } // End of iterating the logical channels - - // Add rlc_pdus to the dl_data message - dl_data[num_ues_added]->rlc_pdu = (Protocol__FlexRlcPdu **) malloc(sizeof(Protocol__FlexRlcPdu *) * - dl_data[num_ues_added]->n_rlc_pdu); - for (i = 0; i < dl_data[num_ues_added]->n_rlc_pdu; i++) { - dl_data[num_ues_added]->rlc_pdu[i] = rlc_pdus[i]; - } - - if (header_len == 0) { - LOG_D(FLEXRAN_AGENT, "Header was empty\n"); - header_len_last = 0; - } - - // there is a payload - if ((dl_data[num_ues_added]->n_rlc_pdu > 0)) { - // Now compute number of required RBs for total sdu length - // Assume RAH format 2 - // adjust header lengths - LOG_D(FLEXRAN_AGENT, "We have %d bytes to transfer\n", sdu_length_total); - if (header_len != 0) { - LOG_D(FLEXRAN_AGENT, "Header length was %d ", header_len); - header_len_last--; - header_len -= header_len_last; - LOG_D(FLEXRAN_AGENT, "so we resized it to %d\n", header_len); - } - - /* if (header_len == 2 || header_len == 3) { //Only one SDU, remove length field */ - /* header_len = 1; */ - /* } else { //Remove length field from the last SDU */ - /* header_len--; */ - /* } */ - - mcs_tmp = mcs; - if (mcs_tmp == 0) { - nb_rb = 4; // don't let the TBS get too small - } else { - nb_rb=min_rb_unit[CC_id]; - } - - LOG_D(MAC,"[TEST]The initial number of resource blocks was %d\n", nb_rb); - LOG_D(MAC,"[TEST] The initial mcs was %d\n", mcs_tmp); - - TBS = mac_xface->get_TBS_DL(mcs_tmp, nb_rb); - LOG_D(MAC,"[TEST]The TBS during rate matching was %d\n", TBS); - - while (TBS < (sdu_length_total + header_len + ta_len)) { - nb_rb += min_rb_unit[CC_id]; // - LOG_D(MAC, "[TEST]Had to increase the number of RBs\n"); - if (nb_rb > nb_available_rb) { // if we've gone beyond the maximum number of RBs - // (can happen if N_RB_DL is odd) - TBS = mac_xface->get_TBS_DL(mcs_tmp, nb_available_rb); - nb_rb = nb_available_rb; - break; - } - - TBS = mac_xface->get_TBS_DL(mcs_tmp, nb_rb); - } - - if(nb_rb == ue_sched_ctl->pre_nb_available_rbs[CC_id]) { - LOG_D(MAC, "[TEST]We had the exact number of rbs. Time to fill the rballoc subband\n"); - for(j = 0; j < flexran_get_N_RBG(mod_id, CC_id); j++) { // for indicating the rballoc for each sub-band - UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = ue_sched_ctl->rballoc_sub_UE[CC_id][j]; - } - } else { - nb_rb_temp = nb_rb; - j = 0; - LOG_D(MAC, "[TEST]Will only partially fill the bitmap\n"); - while((nb_rb_temp > 0) && (j < flexran_get_N_RBG(mod_id, CC_id))) { - if(ue_sched_ctl->rballoc_sub_UE[CC_id][j] == 1) { - UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j] = ue_sched_ctl->rballoc_sub_UE[CC_id][j]; - if ((j == flexran_get_N_RBG(mod_id, CC_id) - 1) && - ((flexran_get_N_RB_DL(mod_id, CC_id) == 25)|| - (flexran_get_N_RB_DL(mod_id, CC_id) == 50))) { - nb_rb_temp = nb_rb_temp - min_rb_unit[CC_id] + 1; - } else { - nb_rb_temp = nb_rb_temp - min_rb_unit[CC_id]; - } - } - j = j+1; - } - } - - PHY_vars_eNB_g[mod_id][CC_id]->mu_mimo_mode[UE_id].pre_nb_available_rbs = nb_rb; - PHY_vars_eNB_g[mod_id][CC_id]->mu_mimo_mode[UE_id].dl_pow_off = ue_sched_ctl->dl_pow_off[CC_id]; - - for(j = 0; j < flexran_get_N_RBG(mod_id, CC_id); j++) { - PHY_vars_eNB_g[mod_id][CC_id]->mu_mimo_mode[UE_id].rballoc_sub[j] = UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][j]; - } - - // decrease mcs until TBS falls below required length - while ((TBS > (sdu_length_total + header_len + ta_len)) && (mcs_tmp > 0)) { - mcs_tmp--; - TBS = mac_xface->get_TBS_DL(mcs_tmp, nb_rb); - } - - // if we have decreased too much or we don't have enough RBs, increase MCS - while ((TBS < (sdu_length_total + header_len + ta_len)) && - ((( ue_sched_ctl->dl_pow_off[CC_id] > 0) && (mcs_tmp < 28)) || ( (ue_sched_ctl->dl_pow_off[CC_id]==0) && (mcs_tmp <= 15)))) { - mcs_tmp++; - TBS = mac_xface->get_TBS_DL(mcs_tmp, nb_rb); - } - - dci_tbs = TBS; - mcs = mcs_tmp; - LOG_D(FLEXRAN_AGENT, "Final mcs was %d\n", mcs); - - dl_dci->has_aggr_level = 1; - dl_dci->aggr_level = aggregation; - - UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid] = nb_rb; - - if (flexran_get_duplex_mode(mod_id, CC_id) == PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { - UE_list->UE_template[CC_id][UE_id].DAI++; - // printf("DAI update: subframeP %d: UE %d, DAI %d\n",subframeP,UE_id,UE_list->UE_template[CC_id][UE_id].DAI); - //#warning only for 5MHz channel - update_ul_dci(mod_id, CC_id, rnti, UE_list->UE_template[CC_id][UE_id].DAI); - } - - // do PUCCH power control - // this is the normalized RX power - normalized_rx_power = flexran_get_p0_pucch_dbm(mod_id,UE_id, CC_id); //eNB_UE_stats->Po_PUCCH_dBm; - target_rx_power = flexran_get_p0_nominal_pucch(mod_id, CC_id) + 20; //mac_xface->get_target_pucch_rx_power(mod_id, CC_id) + 20; - // this assumes accumulated tpc - // make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out - int32_t framex10psubframe = UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_frame*10+UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_subframe; - - if (((framex10psubframe+10)<=(frame*10+subframe)) || //normal case - ((framex10psubframe>(frame*10+subframe)) && (((10240-framex10psubframe+frame*10+subframe)>=10)))) //frame wrap-around - if (flexran_get_p0_pucch_status(mod_id, UE_id, CC_id) == 1) { - flexran_update_p0_pucch(mod_id, UE_id, CC_id); - - UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_frame = frame; - UE_list->UE_template[CC_id][UE_id].pucch_tpc_tx_subframe = subframe; - if (normalized_rx_power>(target_rx_power+1)) { - tpc = 0; //-1 - tpc_accumulated--; - } else if (normalized_rx_power<(target_rx_power-1)) { - tpc = 2; //+1 - tpc_accumulated++; - } else { - tpc = 1; //0 - } - LOG_D(MAC,"[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, normalized/target rx power %d/%d\n", - mod_id, frame, subframe, harq_pid, tpc, - tpc_accumulated, normalized_rx_power, target_rx_power); - } // Po_PUCCH has been updated - else { - tpc = 1; //0 - } // time to do TPC update - else { - tpc = 1; //0 - } - - for(i=0; iframe_parms.N_RBG; i++) { - rballoc_sub[i] = UE_list->UE_template[CC_id][UE_id].rballoc_subband[harq_pid][i]; - } - - // Toggle NDI - LOG_D(MAC,"CC_id %d Frame %d, subframeP %d: Toggling Format1 NDI for UE %d (rnti %x/%d) oldNDI %d\n", - CC_id, frame, subframe, UE_id, - UE_list->UE_template[CC_id][UE_id].rnti,harq_pid, UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]); - UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]= 1 - UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; - ndi = UE_list->UE_template[CC_id][UE_id].oldNDI[harq_pid]; - - UE_list->UE_template[CC_id][UE_id].mcs[harq_pid] = mcs; - UE_list->UE_template[CC_id][UE_id].oldTPC[harq_pid] = tpc; - - // Increase the pointer for the number of scheduled UEs - num_ues_added++; - ue_has_transmission = 1; - } else { // There is no data from RLC or MAC header, so don't schedule - ue_has_transmission = 0; - } - } // End of new scheduling - - // If we has transmission or retransmission - if (ue_has_transmission) { - switch (mac_xface->get_transmission_mode(mod_id, CC_id, rnti)) { - case 1: - case 2: - default: - dl_dci->has_res_alloc = 1; - dl_dci->res_alloc = 0; - dl_dci->has_vrb_format = 1; - dl_dci->vrb_format = PROTOCOL__FLEX_VRB_FORMAT__FLVRBF_LOCALIZED; - dl_dci->has_format = 1; - dl_dci->format = PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1; - dl_dci->has_rb_bitmap = 1; - dl_dci->rb_bitmap = allocate_prbs_sub(nb_rb, rballoc_sub); - dl_dci->has_rb_shift = 1; - dl_dci->rb_shift = 0; - dl_dci->n_ndi = 1; - dl_dci->ndi = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_ndi); - dl_dci->ndi[0] = ndi; - dl_dci->n_rv = 1; - dl_dci->rv = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_rv); - dl_dci->rv[0] = round & 3; - dl_dci->has_tpc = 1; - dl_dci->tpc = tpc; - dl_dci->n_mcs = 1; - dl_dci->mcs = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_mcs); - dl_dci->mcs[0] = mcs; - dl_dci->n_tbs_size = 1; - dl_dci->tbs_size = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_tbs_size); - dl_dci->tbs_size[0] = dci_tbs; - if (flexran_get_duplex_mode(mod_id, CC_id) == PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { - dl_dci->has_dai = 1; - dl_dci->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; - } - break; - case 3: - dl_dci->has_res_alloc = 1; - dl_dci->res_alloc = 0; - dl_dci->has_vrb_format = 1; - dl_dci->vrb_format = PROTOCOL__FLEX_VRB_FORMAT__FLVRBF_LOCALIZED; - dl_dci->has_format = 1; - dl_dci->format = PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A; - dl_dci->has_rb_bitmap = 1; - dl_dci->rb_bitmap = allocate_prbs_sub(nb_rb, rballoc_sub); - dl_dci->has_rb_shift = 1; - dl_dci->rb_shift = 0; - dl_dci->n_ndi = 2; - dl_dci->ndi = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_ndi); - dl_dci->ndi[0] = ndi; - dl_dci->ndi[1] = ndi; - dl_dci->n_rv = 2; - dl_dci->rv = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_rv); - dl_dci->rv[0] = round & 3; - dl_dci->rv[1] = round & 3; - dl_dci->has_tpc = 1; - dl_dci->tpc = tpc; - dl_dci->n_mcs = 2; - dl_dci->mcs = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_mcs); - dl_dci->mcs[0] = mcs; - dl_dci->mcs[1] = mcs; - dl_dci->n_tbs_size = 2; - dl_dci->tbs_size = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_tbs_size); - dl_dci->tbs_size[0] = dci_tbs; - dl_dci->tbs_size[1] = dci_tbs; - if (flexran_get_duplex_mode(mod_id, CC_id) == PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { - dl_dci->has_dai = 1; - dl_dci->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; - } - break; - case 4: - dl_dci->has_res_alloc = 1; - dl_dci->res_alloc = 0; - dl_dci->has_vrb_format = 1; - dl_dci->vrb_format = PROTOCOL__FLEX_VRB_FORMAT__FLVRBF_LOCALIZED; - dl_dci->has_format = 1; - dl_dci->format = PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_2A; - dl_dci->has_rb_bitmap = 1; - dl_dci->rb_bitmap = allocate_prbs_sub(nb_rb, rballoc_sub); - dl_dci->has_rb_shift = 1; - dl_dci->rb_shift = 0; - dl_dci->n_ndi = 2; - dl_dci->ndi = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_ndi); - dl_dci->ndi[0] = ndi; - dl_dci->ndi[1] = ndi; - dl_dci->n_rv = 2; - dl_dci->rv = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_rv); - dl_dci->rv[0] = round & 3; - dl_dci->rv[1] = round & 3; - dl_dci->has_tpc = 1; - dl_dci->tpc = tpc; - dl_dci->n_mcs = 2; - dl_dci->mcs = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_mcs); - dl_dci->mcs[0] = mcs; - dl_dci->mcs[1] = mcs; - dl_dci->n_tbs_size = 2; - dl_dci->tbs_size = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_tbs_size); - dl_dci->tbs_size[0] = dci_tbs; - dl_dci->tbs_size[1] = dci_tbs; - if (flexran_get_duplex_mode(mod_id, CC_id) == PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { - dl_dci->has_dai = 1; - dl_dci->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; - } - break; - case 5: - dl_dci->has_res_alloc = 1; - dl_dci->res_alloc = 0; - dl_dci->has_vrb_format = 1; - dl_dci->vrb_format = PROTOCOL__FLEX_VRB_FORMAT__FLVRBF_LOCALIZED; - dl_dci->has_format = 1; - dl_dci->format = PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D; - dl_dci->has_rb_bitmap = 1; - dl_dci->rb_bitmap = allocate_prbs_sub(nb_rb, rballoc_sub); - dl_dci->has_rb_shift = 1; - dl_dci->rb_shift = 0; - dl_dci->n_ndi = 1; - dl_dci->ndi[0] = ndi; - dl_dci->n_rv = 1; - dl_dci->rv = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_rv); - dl_dci->rv[0] = round & 3; - dl_dci->has_tpc = 1; - dl_dci->tpc = tpc; - dl_dci->n_mcs = 1; - dl_dci->mcs = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_mcs); - dl_dci->mcs[0] = mcs; - dl_dci->n_tbs_size = 1; - dl_dci->tbs_size = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_tbs_size); - dl_dci->tbs_size[0] = dci_tbs; - if (flexran_get_duplex_mode(mod_id, CC_id) == PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { - dl_dci->has_dai = 1; - dl_dci->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; - } - - if(ue_sched_ctl->dl_pow_off[CC_id] == 2) { - ue_sched_ctl->dl_pow_off[CC_id] = 1; - } - - dl_dci->has_dl_power_offset = 1; - dl_dci->dl_power_offset = ue_sched_ctl->dl_pow_off[CC_id]; - dl_dci->has_precoding_info = 1; - dl_dci->precoding_info = 5; // Is this right?? - - break; - case 6: - dl_dci->has_res_alloc = 1; - dl_dci->res_alloc = 0; - dl_dci->has_vrb_format = 1; - dl_dci->vrb_format = PROTOCOL__FLEX_VRB_FORMAT__FLVRBF_LOCALIZED; - dl_dci->has_format = 1; - dl_dci->format = PROTOCOL__FLEX_DCI_FORMAT__FLDCIF_1D; - dl_dci->has_rb_bitmap = 1; - dl_dci->rb_bitmap = allocate_prbs_sub(nb_rb, rballoc_sub); - dl_dci->has_rb_shift = 1; - dl_dci->rb_shift = 0; - dl_dci->n_ndi = 1; - dl_dci->ndi = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_ndi); - dl_dci->ndi[0] = ndi; - dl_dci->n_rv = 1; - dl_dci->rv = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_rv); - dl_dci->rv[0] = round & 3; - dl_dci->has_tpc = 1; - dl_dci->tpc = tpc; - dl_dci->n_mcs = 1; - dl_dci->mcs = (uint32_t *) malloc(sizeof(uint32_t) * dl_dci->n_mcs); - dl_dci->mcs[0] = mcs; - if (flexran_get_duplex_mode(mod_id, CC_id) == PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { - dl_dci->has_dai = 1; - dl_dci->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; - } - - dl_dci->has_dl_power_offset = 1; - dl_dci->dl_power_offset = ue_sched_ctl->dl_pow_off[CC_id]; - dl_dci->has_precoding_info = 1; - dl_dci->precoding_info = 5; // Is this right?? - break; - } - } - - if (flexran_get_duplex_mode(mod_id, CC_id) == PROTOCOL__FLEX_DUPLEX_MODE__FLDM_TDD) { - - /* TODO */ - //set_ul_DAI(mod_id, UE_id, CC_id, frame, subframe, frame_parms); - } - } // UE_id loop - } // CC_id loop - - // Add all the dl_data elements to the flexran message - int offset = (*dl_info)->dl_mac_config_msg->n_dl_ue_data; - (*dl_info)->dl_mac_config_msg->n_dl_ue_data += num_ues_added; - if ( num_ues_added > 0 ){ - (*dl_info)->dl_mac_config_msg->dl_ue_data = (Protocol__FlexDlData **) realloc( (*dl_info)->dl_mac_config_msg->dl_ue_data, - sizeof(Protocol__FlexDlData *) * ((*dl_info)->dl_mac_config_msg->n_dl_ue_data)); - if ((*dl_info)->dl_mac_config_msg->dl_ue_data == NULL ){ - LOG_E(MAC, "Request for memory reallocation failed\n"); - return; - } - for (i = 0; i < num_ues_added; i++) { - (*dl_info)->dl_mac_config_msg->dl_ue_data[offset+i] = dl_data[i]; - } - } - - stop_meas(&eNB->schedule_dlsch); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SCHEDULE_DLSCH,VCD_FUNCTION_OUT); + stop_meas(&eNB->schedule_dlsch); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_SCHEDULE_DLSCH, VCD_FUNCTION_OUT); } diff --git a/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue_remote.c b/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue_remote.c index 17424b2797..68c86f1da5 100644 --- a/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue_remote.c +++ b/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue_remote.c @@ -17,7 +17,7 @@ *------------------------------------------------------------------------------- * For more information about the OpenAirInterface (OAI) Software Alliance: * contact@openairinterface.org - */ + */ /*! \file flexran_agent_scheduler_dlsch_ue_remote.c * \brief procedures related to remote scheduling in the DLSCH transport channel @@ -44,137 +44,159 @@ int queue_initialized = 0; //uint32_t period = 10; //uint32_t sched [] = {1, 2, 3}; -void flexran_schedule_ue_spec_remote(mid_t mod_id, uint32_t frame, uint32_t subframe, - int *mbsfn_flag, Protocol__FlexranMessage **dl_info) { +void +flexran_schedule_ue_spec_remote(mid_t mod_id, uint32_t frame, + uint32_t subframe, int *mbsfn_flag, + Protocol__FlexranMessage ** dl_info) +{ - - //if ((subframe == skip_subframe) && (frame % period == 0)) { - // LOG_I(MAC, "Will skip subframe %d %d\n", subframe, frame); - // for (int i = 0; i < 3; i++) { - // LOG_I(MAC, "%d\n", sched[i]); - // } - //} - /* if (frame == 500 && subframe == 1) { */ - /* char policy[] = "rrc: \n - ul_scheduler: \n behavior : tester_function\n parameters:\n period: !!int 3\nmac: \n - dl_scheduler: \n parameters: \n period : !!int 40\n skip_subframe : !!int 3\n sched : [!!int 4, !!int 5, !!int 6]"; */ - /* apply_reconfiguration_policy(mod_id, policy, strlen(policy)); */ - /* } */ - - eNB_MAC_INST *eNB; - - if (!queue_initialized) { - TAILQ_INIT(&queue_head); - queue_initialized = 1; - } - - eNB = &eNB_mac_inst[mod_id]; - - dl_mac_config_element_t *dl_config_elem; - - int diff; - LOG_D(MAC, "[TEST] Current frame and subframe %d, %d\n", frame, subframe); - // First we check to see if we have a scheduling decision for this sfn_sf already in our queue - while(queue_head.tqh_first != NULL) { - dl_config_elem = queue_head.tqh_first; - - diff = get_sf_difference(mod_id, dl_config_elem->dl_info->dl_mac_config_msg->sfn_sf); - // Check if this decision is for now, for a later or a previous subframe - if ( diff == 0) { // Now - LOG_D(MAC, "Found a decision for this subframe in the queue. Let's use it!\n"); - TAILQ_REMOVE(&queue_head, queue_head.tqh_first, configs); - *dl_info = dl_config_elem->dl_info; - free(dl_config_elem); - eNB->eNB_stats[mod_id].sched_decisions++; - return; - } else if (diff < 0) { //previous subframe , delete message and free memory - LOG_D(MAC, "Found a decision for a previous subframe in the queue. Let's get rid of it\n"); - TAILQ_REMOVE(&queue_head, queue_head.tqh_first, configs); - flexran_agent_mac_destroy_dl_config(dl_config_elem->dl_info); - free(dl_config_elem); - eNB->eNB_stats[mod_id].sched_decisions++; - eNB->eNB_stats[mod_id].missed_deadlines++; - } else { // next subframe, nothing to do now - LOG_D(MAC, "Found a decision for a future subframe in the queue. Nothing to do now\n"); - flexran_agent_mac_create_empty_dl_config(mod_id, dl_info); - return; - } - } - - //Done with the local cache. Now we need to check if something new arrived - flexran_agent_get_pending_dl_mac_config(mod_id, dl_info); - while (*dl_info != NULL) { - - diff = get_sf_difference(mod_id, (*dl_info)->dl_mac_config_msg->sfn_sf); - if (diff == 0) { // Got a command for this sfn_sf - LOG_D(MAC, "Found a decision for this subframe pending. Let's use it\n"); - eNB->eNB_stats[mod_id].sched_decisions++; - return; - } else if (diff < 0) { - LOG_D(MAC, "Found a decision for a previous subframe. Let's get rid of it\n"); - flexran_agent_mac_destroy_dl_config(*dl_info); - *dl_info = NULL; - flexran_agent_get_pending_dl_mac_config(mod_id, dl_info); - eNB->eNB_stats[mod_id].sched_decisions++; - eNB->eNB_stats[mod_id].missed_deadlines++; - } else { // Intended for future subframe. Store it in local cache - LOG_D(MAC, "Found a decision for a future subframe in the queue. Let's store it in the cache\n"); - dl_mac_config_element_t *e = malloc(sizeof(dl_mac_config_element_t)); - e->dl_info = *dl_info; - TAILQ_INSERT_TAIL(&queue_head, e, configs); - flexran_agent_mac_create_empty_dl_config(mod_id, dl_info); - // No need to look for another. Messages arrive ordered - return; - } - } - - // We found no pending command, so we will simply pass an empty one - flexran_agent_mac_create_empty_dl_config(mod_id, dl_info); -} - -int get_sf_difference(mid_t mod_id, uint32_t sfn_sf) { - int diff_in_subframes; - - uint16_t current_frame = flexran_get_current_system_frame_num(mod_id); - uint16_t current_subframe = flexran_get_current_subframe(mod_id); - uint32_t current_sfn_sf = flexran_get_sfn_sf(mod_id); - - if (sfn_sf == current_sfn_sf) { - return 0; - } - - uint16_t frame_mask = ((1<<12) - 1); - uint16_t frame = (sfn_sf & (frame_mask << 4)) >> 4; - - uint16_t sf_mask = ((1<<4) - 1); - uint16_t subframe = (sfn_sf & sf_mask); - - LOG_D(MAC, "[TEST] Target frame and subframe %d, %d\n", frame, subframe); - - if (frame == current_frame) { - return subframe - current_subframe; - } else if (frame > current_frame) { - diff_in_subframes = ((frame*10)+subframe) - ((current_frame*10)+current_subframe); - - // diff_in_subframes = 9 - current_subframe; - //diff_in_subframes += (subframe + 1); - //diff_in_subframes += (frame-2) * 10; - if (diff_in_subframes > SCHED_AHEAD_SUBFRAMES) { - return -1; - } else { - return 1; - } - } else { //frame < current_frame - //diff_in_subframes = 9 - current_subframe; - //diff_in_subframes += (subframe + 1); - //if (frame > 0) { - // diff_in_subframes += (frame - 1) * 10; + //if ((subframe == skip_subframe) && (frame % period == 0)) { + // LOG_I(MAC, "Will skip subframe %d %d\n", subframe, frame); + // for (int i = 0; i < 3; i++) { + // LOG_I(MAC, "%d\n", sched[i]); + // } //} - //diff_in_subframes += (1023 - current_frame) * 10; - diff_in_subframes = 10240 - ((current_frame*10)+current_subframe) + ((frame*10)+subframe); - if (diff_in_subframes > SCHED_AHEAD_SUBFRAMES) { - return -1; - } else { - return 1; + + /* if (frame == 500 && subframe == 1) { */ + /* char policy[] = "rrc: \n - ul_scheduler: \n behavior : tester_function\n parameters:\n period: !!int 3\nmac: \n - dl_scheduler: \n parameters: \n period : !!int 40\n skip_subframe : !!int 3\n sched : [!!int 4, !!int 5, !!int 6]"; */ + /* apply_reconfiguration_policy(mod_id, policy, strlen(policy)); */ + /* } */ + + eNB_MAC_INST *eNB; + + if (!queue_initialized) { + TAILQ_INIT(&queue_head); + queue_initialized = 1; + } + + eNB = &eNB_mac_inst[mod_id]; + + dl_mac_config_element_t *dl_config_elem; + + int diff; + LOG_D(MAC, "[TEST] Current frame and subframe %d, %d\n", frame, + subframe); + // First we check to see if we have a scheduling decision for this sfn_sf already in our queue + while (queue_head.tqh_first != NULL) { + dl_config_elem = queue_head.tqh_first; + + diff = + get_sf_difference(mod_id, + dl_config_elem->dl_info-> + dl_mac_config_msg->sfn_sf); + // Check if this decision is for now, for a later or a previous subframe + if (diff == 0) { // Now + LOG_D(MAC, + "Found a decision for this subframe in the queue. Let's use it!\n"); + TAILQ_REMOVE(&queue_head, queue_head.tqh_first, configs); + *dl_info = dl_config_elem->dl_info; + free(dl_config_elem); + eNB->eNB_stats[mod_id].sched_decisions++; + return; + } else if (diff < 0) { //previous subframe , delete message and free memory + LOG_D(MAC, + "Found a decision for a previous subframe in the queue. Let's get rid of it\n"); + TAILQ_REMOVE(&queue_head, queue_head.tqh_first, configs); + flexran_agent_mac_destroy_dl_config(dl_config_elem->dl_info); + free(dl_config_elem); + eNB->eNB_stats[mod_id].sched_decisions++; + eNB->eNB_stats[mod_id].missed_deadlines++; + } else { // next subframe, nothing to do now + LOG_D(MAC, + "Found a decision for a future subframe in the queue. Nothing to do now\n"); + flexran_agent_mac_create_empty_dl_config(mod_id, dl_info); + return; + } + } + + //Done with the local cache. Now we need to check if something new arrived + flexran_agent_get_pending_dl_mac_config(mod_id, dl_info); + while (*dl_info != NULL) { + + diff = + get_sf_difference(mod_id, + (*dl_info)->dl_mac_config_msg->sfn_sf); + if (diff == 0) { // Got a command for this sfn_sf + LOG_D(MAC, + "Found a decision for this subframe pending. Let's use it\n"); + eNB->eNB_stats[mod_id].sched_decisions++; + return; + } else if (diff < 0) { + LOG_D(MAC, + "Found a decision for a previous subframe. Let's get rid of it\n"); + flexran_agent_mac_destroy_dl_config(*dl_info); + *dl_info = NULL; + flexran_agent_get_pending_dl_mac_config(mod_id, dl_info); + eNB->eNB_stats[mod_id].sched_decisions++; + eNB->eNB_stats[mod_id].missed_deadlines++; + } else { // Intended for future subframe. Store it in local cache + LOG_D(MAC, + "Found a decision for a future subframe in the queue. Let's store it in the cache\n"); + dl_mac_config_element_t *e = + malloc(sizeof(dl_mac_config_element_t)); + e->dl_info = *dl_info; + TAILQ_INSERT_TAIL(&queue_head, e, configs); + flexran_agent_mac_create_empty_dl_config(mod_id, dl_info); + // No need to look for another. Messages arrive ordered + return; + } + } + + // We found no pending command, so we will simply pass an empty one + flexran_agent_mac_create_empty_dl_config(mod_id, dl_info); +} + +int get_sf_difference(mid_t mod_id, uint32_t sfn_sf) +{ + int diff_in_subframes; + + uint16_t current_frame = flexran_get_current_system_frame_num(mod_id); + uint16_t current_subframe = flexran_get_current_subframe(mod_id); + uint32_t current_sfn_sf = flexran_get_sfn_sf(mod_id); + + if (sfn_sf == current_sfn_sf) { + return 0; + } + + uint16_t frame_mask = ((1 << 12) - 1); + uint16_t frame = (sfn_sf & (frame_mask << 4)) >> 4; + + uint16_t sf_mask = ((1 << 4) - 1); + uint16_t subframe = (sfn_sf & sf_mask); + + LOG_D(MAC, "[TEST] Target frame and subframe %d, %d\n", frame, + subframe); + + if (frame == current_frame) { + return subframe - current_subframe; + } else if (frame > current_frame) { + diff_in_subframes = + ((frame * 10) + subframe) - ((current_frame * 10) + + current_subframe); + + // diff_in_subframes = 9 - current_subframe; + //diff_in_subframes += (subframe + 1); + //diff_in_subframes += (frame-2) * 10; + if (diff_in_subframes > SCHED_AHEAD_SUBFRAMES) { + return -1; + } else { + return 1; + } + } else { //frame < current_frame + //diff_in_subframes = 9 - current_subframe; + //diff_in_subframes += (subframe + 1); + //if (frame > 0) { + // diff_in_subframes += (frame - 1) * 10; + //} + //diff_in_subframes += (1023 - current_frame) * 10; + diff_in_subframes = + 10240 - ((current_frame * 10) + current_subframe) + + ((frame * 10) + subframe); + if (diff_in_subframes > SCHED_AHEAD_SUBFRAMES) { + return -1; + } else { + return 1; + } } - } } diff --git a/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue_remote.h b/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue_remote.h index 997b9d1d24..449ba1e8cd 100644 --- a/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue_remote.h +++ b/openair2/LAYER2/MAC/flexran_agent_scheduler_dlsch_ue_remote.h @@ -17,7 +17,7 @@ *------------------------------------------------------------------------------- * For more information about the OpenAirInterface (OAI) Software Alliance: * contact@openairinterface.org - */ + */ /*! \file flexran_agent_scheduler_dlsch_ue_remote.h * \brief Local stub for remote scheduler used by the controller @@ -46,8 +46,8 @@ #define SCHED_AHEAD_SUBFRAMES 20 typedef struct dl_mac_config_element_s { - Protocol__FlexranMessage *dl_info; - TAILQ_ENTRY(dl_mac_config_element_s) configs; + Protocol__FlexranMessage *dl_info; + TAILQ_ENTRY(dl_mac_config_element_s) configs; } dl_mac_config_element_t; TAILQ_HEAD(DlMacConfigHead, dl_mac_config_element_s); @@ -55,8 +55,9 @@ TAILQ_HEAD(DlMacConfigHead, dl_mac_config_element_s); /* * Default scheduler used by the eNB agent */ -void flexran_schedule_ue_spec_remote(mid_t mod_id, uint32_t frame, uint32_t subframe, - int *mbsfn_flag, Protocol__FlexranMessage **dl_info); +void flexran_schedule_ue_spec_remote(mid_t mod_id, uint32_t frame, + uint32_t subframe, int *mbsfn_flag, + Protocol__FlexranMessage ** dl_info); // Find the difference in subframes from the given subframe diff --git a/openair2/LAYER2/MAC/flexran_dci_conversions.h b/openair2/LAYER2/MAC/flexran_dci_conversions.h index f52ae5b807..5c18b43104 100644 --- a/openair2/LAYER2/MAC/flexran_dci_conversions.h +++ b/openair2/LAYER2/MAC/flexran_dci_conversions.h @@ -17,7 +17,7 @@ *------------------------------------------------------------------------------- * For more information about the OpenAirInterface (OAI) Software Alliance: * contact@openairinterface.org - */ + */ /*! \file flexran_dci_conversions.h * \brief Conversion helpers from flexran messages to OAI formats DCI @@ -47,5 +47,5 @@ ((TYPE*)DCI)->mcs = FLEXRAN_DCI->mcs[0]; \ ((TYPE*)DCI)->TPC = FLEXRAN_DCI->tpc; \ ((TYPE*)DCI)->ndi = FLEXRAN_DCI->ndi[0]; - + #endif diff --git a/openair2/LAYER2/MAC/l1_helpers.c b/openair2/LAYER2/MAC/l1_helpers.c index 2b5a38eda7..6e71f66ec5 100644 --- a/openair2/LAYER2/MAC/l1_helpers.c +++ b/openair2/LAYER2/MAC/l1_helpers.c @@ -34,28 +34,36 @@ #include "UTIL/LOG/log.h" #include "proto.h" -int8_t get_Po_NOMINAL_PUSCH(module_id_t module_idP,uint8_t CC_id) +int8_t get_Po_NOMINAL_PUSCH(module_id_t module_idP, uint8_t CC_id) { - RACH_ConfigCommon_t *rach_ConfigCommon = NULL; + RACH_ConfigCommon_t *rach_ConfigCommon = NULL; - AssertFatal(CC_id==0, - "Transmission on secondary CCs is not supported yet\n"); - AssertFatal(UE_mac_inst[module_idP].radioResourceConfigCommon!=NULL, - "[UE %d] CCid %d FATAL radioResourceConfigCommon is NULL !!!\n",module_idP,CC_id); + AssertFatal(CC_id == 0, + "Transmission on secondary CCs is not supported yet\n"); + AssertFatal(UE_mac_inst[module_idP].radioResourceConfigCommon != NULL, + "[UE %d] CCid %d FATAL radioResourceConfigCommon is NULL !!!\n", + module_idP, CC_id); - rach_ConfigCommon = &UE_mac_inst[module_idP].radioResourceConfigCommon->rach_ConfigCommon; + rach_ConfigCommon = + &UE_mac_inst[module_idP].radioResourceConfigCommon-> + rach_ConfigCommon; - return(-120 + (rach_ConfigCommon->powerRampingParameters.preambleInitialReceivedTargetPower<<1) + - get_DELTA_PREAMBLE(module_idP,CC_id)); + return (-120 + + (rach_ConfigCommon-> + powerRampingParameters.preambleInitialReceivedTargetPower << + 1) + get_DELTA_PREAMBLE(module_idP, CC_id)); } -int8_t get_deltaP_rampup(module_id_t module_idP,uint8_t CC_id) +int8_t get_deltaP_rampup(module_id_t module_idP, uint8_t CC_id) { - AssertFatal(CC_id==0, - "Transmission on secondary CCs is not supported yet\n"); + AssertFatal(CC_id == 0, + "Transmission on secondary CCs is not supported yet\n"); - LOG_D(MAC,"[PUSCH]%d dB\n",UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER<<1); - return((int8_t)(UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER<<1)); + LOG_D(MAC, "[PUSCH]%d dB\n", + UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER << 1); + return ((int8_t) + (UE_mac_inst[module_idP]. + RA_PREAMBLE_TRANSMISSION_COUNTER << 1)); } diff --git a/openair2/LAYER2/MAC/lte_transport_init.c b/openair2/LAYER2/MAC/lte_transport_init.c index 1f67d8913c..e1f21f21e4 100644 --- a/openair2/LAYER2/MAC/lte_transport_init.c +++ b/openair2/LAYER2/MAC/lte_transport_init.c @@ -29,104 +29,104 @@ void init_transport_channels(unsigned char transmission_mode) { - // init DCI structures for testing + // init DCI structures for testing - UL_alloc_pdu.type = 0; - UL_alloc_pdu.hopping = 0; - UL_alloc_pdu.rballoc = UL_RB_ALLOC; - UL_alloc_pdu.mcs = 2; - UL_alloc_pdu.ndi = 1; - UL_alloc_pdu.TPC = 0; - UL_alloc_pdu.cqi_req = 1; + UL_alloc_pdu.type = 0; + UL_alloc_pdu.hopping = 0; + UL_alloc_pdu.rballoc = UL_RB_ALLOC; + UL_alloc_pdu.mcs = 2; + UL_alloc_pdu.ndi = 1; + UL_alloc_pdu.TPC = 0; + UL_alloc_pdu.cqi_req = 1; - /* - BCCH_alloc_pdu.type = 1; - BCCH_alloc_pdu.vrb_type = 0; - BCCH_alloc_pdu.rballoc = BCCH_RB_ALLOC; - BCCH_alloc_pdu.ndi = 1; - BCCH_alloc_pdu.rv = 1; - BCCH_alloc_pdu.mcs = 1; - BCCH_alloc_pdu.harq_pid = 0; - BCCH_alloc_pdu.TPC = 1; // set to 3 PRB + /* + BCCH_alloc_pdu.type = 1; + BCCH_alloc_pdu.vrb_type = 0; + BCCH_alloc_pdu.rballoc = BCCH_RB_ALLOC; + BCCH_alloc_pdu.ndi = 1; + BCCH_alloc_pdu.rv = 1; + BCCH_alloc_pdu.mcs = 1; + BCCH_alloc_pdu.harq_pid = 0; + BCCH_alloc_pdu.TPC = 1; // set to 3 PRB - // for FDD mode - BCCH_alloc_pdu_fdd.type = 1; - BCCH_alloc_pdu_fdd.vrb_type = 0; - BCCH_alloc_pdu_fdd.rballoc = BCCH_RB_ALLOC; - BCCH_alloc_pdu_fdd.ndi = 1; - BCCH_alloc_pdu_fdd.rv = 1; - BCCH_alloc_pdu_fdd.mcs = 1; - BCCH_alloc_pdu_fdd.harq_pid = 0; - BCCH_alloc_pdu_fdd.TPC = 1; // set to 3 PRB - */ + // for FDD mode + BCCH_alloc_pdu_fdd.type = 1; + BCCH_alloc_pdu_fdd.vrb_type = 0; + BCCH_alloc_pdu_fdd.rballoc = BCCH_RB_ALLOC; + BCCH_alloc_pdu_fdd.ndi = 1; + BCCH_alloc_pdu_fdd.rv = 1; + BCCH_alloc_pdu_fdd.mcs = 1; + BCCH_alloc_pdu_fdd.harq_pid = 0; + BCCH_alloc_pdu_fdd.TPC = 1; // set to 3 PRB + */ - DLSCH_alloc_pdu1A.type = 1; - DLSCH_alloc_pdu1A.vrb_type = 0; - DLSCH_alloc_pdu1A.rballoc = BCCH_RB_ALLOC; - DLSCH_alloc_pdu1A.ndi = 1; - DLSCH_alloc_pdu1A.rv = 1; - DLSCH_alloc_pdu1A.mcs = 2; - DLSCH_alloc_pdu1A.harq_pid = 0; - DLSCH_alloc_pdu1A.TPC = 1; // set to 3 PRB + DLSCH_alloc_pdu1A.type = 1; + DLSCH_alloc_pdu1A.vrb_type = 0; + DLSCH_alloc_pdu1A.rballoc = BCCH_RB_ALLOC; + DLSCH_alloc_pdu1A.ndi = 1; + DLSCH_alloc_pdu1A.rv = 1; + DLSCH_alloc_pdu1A.mcs = 2; + DLSCH_alloc_pdu1A.harq_pid = 0; + DLSCH_alloc_pdu1A.TPC = 1; // set to 3 PRB - DLSCH_alloc_pdu1A_fdd.type = 1; - DLSCH_alloc_pdu1A_fdd.vrb_type = 0; - DLSCH_alloc_pdu1A_fdd.rballoc = BCCH_RB_ALLOC; - DLSCH_alloc_pdu1A_fdd.ndi = 1; - DLSCH_alloc_pdu1A_fdd.rv = 1; - DLSCH_alloc_pdu1A_fdd.mcs = 2; - DLSCH_alloc_pdu1A_fdd.harq_pid = 0; - DLSCH_alloc_pdu1A_fdd.TPC = 1; // set to 3 PRB + DLSCH_alloc_pdu1A_fdd.type = 1; + DLSCH_alloc_pdu1A_fdd.vrb_type = 0; + DLSCH_alloc_pdu1A_fdd.rballoc = BCCH_RB_ALLOC; + DLSCH_alloc_pdu1A_fdd.ndi = 1; + DLSCH_alloc_pdu1A_fdd.rv = 1; + DLSCH_alloc_pdu1A_fdd.mcs = 2; + DLSCH_alloc_pdu1A_fdd.harq_pid = 0; + DLSCH_alloc_pdu1A_fdd.TPC = 1; // set to 3 PRB - RA_alloc_pdu.type = 1; - RA_alloc_pdu.vrb_type = 0; - RA_alloc_pdu.rballoc = RA_RB_ALLOC; - RA_alloc_pdu.ndi = 1; - RA_alloc_pdu.rv = 0; - RA_alloc_pdu.mcs = 0; - RA_alloc_pdu.harq_pid = 0; - RA_alloc_pdu.TPC = 1; + RA_alloc_pdu.type = 1; + RA_alloc_pdu.vrb_type = 0; + RA_alloc_pdu.rballoc = RA_RB_ALLOC; + RA_alloc_pdu.ndi = 1; + RA_alloc_pdu.rv = 0; + RA_alloc_pdu.mcs = 0; + RA_alloc_pdu.harq_pid = 0; + RA_alloc_pdu.TPC = 1; - RA_alloc_pdu_fdd.type = 1; - RA_alloc_pdu_fdd.vrb_type = 0; - RA_alloc_pdu_fdd.rballoc = RA_RB_ALLOC; - RA_alloc_pdu_fdd.ndi = 1; - RA_alloc_pdu_fdd.rv = 1; - RA_alloc_pdu_fdd.mcs = 1; - RA_alloc_pdu_fdd.harq_pid = 0; - RA_alloc_pdu_fdd.TPC = 1; + RA_alloc_pdu_fdd.type = 1; + RA_alloc_pdu_fdd.vrb_type = 0; + RA_alloc_pdu_fdd.rballoc = RA_RB_ALLOC; + RA_alloc_pdu_fdd.ndi = 1; + RA_alloc_pdu_fdd.rv = 1; + RA_alloc_pdu_fdd.mcs = 1; + RA_alloc_pdu_fdd.harq_pid = 0; + RA_alloc_pdu_fdd.TPC = 1; - DLSCH_alloc_pdu1.rballoc = 0xf; - DLSCH_alloc_pdu1.TPC = 0; - DLSCH_alloc_pdu1.dai = 0; - DLSCH_alloc_pdu1.harq_pid = 0; - DLSCH_alloc_pdu1.tb_swap = 0; - DLSCH_alloc_pdu1.mcs1 = 4; - DLSCH_alloc_pdu1.ndi1 = 1; - DLSCH_alloc_pdu1.rv1 = 0; + DLSCH_alloc_pdu1.rballoc = 0xf; + DLSCH_alloc_pdu1.TPC = 0; + DLSCH_alloc_pdu1.dai = 0; + DLSCH_alloc_pdu1.harq_pid = 0; + DLSCH_alloc_pdu1.tb_swap = 0; + DLSCH_alloc_pdu1.mcs1 = 4; + DLSCH_alloc_pdu1.ndi1 = 1; + DLSCH_alloc_pdu1.rv1 = 0; - // Forget second codeword - if (transmission_mode == 6) { - DLSCH_alloc_pdu1.tpmi = 5; // PUSCH_PRECODING0 - } else { - DLSCH_alloc_pdu1.tpmi = 0; - } + // Forget second codeword + if (transmission_mode == 6) { + DLSCH_alloc_pdu1.tpmi = 5; // PUSCH_PRECODING0 + } else { + DLSCH_alloc_pdu1.tpmi = 0; + } - DLSCH_alloc_pdu2.rah = 0; - DLSCH_alloc_pdu2.rballoc = DLSCH_RB_ALLOC; - DLSCH_alloc_pdu2.TPC = 0; - DLSCH_alloc_pdu2.dai = 0; - DLSCH_alloc_pdu2.harq_pid = 0; - DLSCH_alloc_pdu2.tb_swap = 0; - DLSCH_alloc_pdu2.mcs1 = 4; - DLSCH_alloc_pdu2.ndi1 = 1; - DLSCH_alloc_pdu2.rv1 = 0; + DLSCH_alloc_pdu2.rah = 0; + DLSCH_alloc_pdu2.rballoc = DLSCH_RB_ALLOC; + DLSCH_alloc_pdu2.TPC = 0; + DLSCH_alloc_pdu2.dai = 0; + DLSCH_alloc_pdu2.harq_pid = 0; + DLSCH_alloc_pdu2.tb_swap = 0; + DLSCH_alloc_pdu2.mcs1 = 4; + DLSCH_alloc_pdu2.ndi1 = 1; + DLSCH_alloc_pdu2.rv1 = 0; - // Forget second codeword - if (transmission_mode == 6) { - DLSCH_alloc_pdu2.tpmi = 5; // PUSCH_PRECODING0 - } else { - DLSCH_alloc_pdu2.tpmi = 0; - } + // Forget second codeword + if (transmission_mode == 6) { + DLSCH_alloc_pdu2.tpmi = 5; // PUSCH_PRECODING0 + } else { + DLSCH_alloc_pdu2.tpmi = 0; + } } diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c index 83f639a89d..fcaab0b80b 100644 --- a/openair2/LAYER2/MAC/main.c +++ b/openair2/LAYER2/MAC/main.c @@ -48,66 +48,72 @@ extern RAN_CONTEXT_t RC; -void dl_phy_sync_success(module_id_t module_idP, - frame_t frameP, - unsigned char eNB_index, - uint8_t first_sync) //init as MR +void dl_phy_sync_success(module_id_t module_idP, frame_t frameP, unsigned char eNB_index, uint8_t first_sync) //init as MR { - LOG_D(MAC,"[UE %d] Frame %d: PHY Sync to eNB_index %d successful \n", module_idP, frameP, eNB_index); + LOG_D(MAC, "[UE %d] Frame %d: PHY Sync to eNB_index %d successful \n", + module_idP, frameP, eNB_index); #if defined(ENABLE_USE_MME) - int mme_enabled=1; + int mme_enabled = 1; #else - int mme_enabled=0; + int mme_enabled = 0; #endif - if (first_sync==1 && !(mme_enabled==1)) { - //layer2_init_UE(module_idP); - openair_rrc_ue_init(module_idP,eNB_index); - } else - { - rrc_in_sync_ind(module_idP,frameP,eNB_index); - } -} - -void mac_UE_out_of_sync_ind(module_id_t module_idP, frame_t frameP, uint16_t eNB_index) -{ - - // Mac_rlc_xface->mac_out_of_sync_ind(Mod_id, frameP, eNB_index); -} - - -int mac_top_init_ue(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, uint8_t HO_active) -{ - - int i; - - LOG_I(MAC,"[MAIN] Init function start:Nb_UE_INST=%d\n",NB_UE_INST); - - if (NB_UE_INST>0) { - UE_mac_inst = (UE_MAC_INST*)malloc16(NB_UE_INST*sizeof(UE_MAC_INST)); - - AssertFatal(UE_mac_inst!=NULL, - "[MAIN] Can't ALLOCATE %zu Bytes for %d UE_MAC_INST with size %zu \n",NB_UE_INST*sizeof(UE_MAC_INST),NB_UE_INST,sizeof(UE_MAC_INST)); - - LOG_D(MAC,"[MAIN] ALLOCATE %zu Bytes for %d UE_MAC_INST @ %p\n",NB_UE_INST*sizeof(UE_MAC_INST),NB_UE_INST,UE_mac_inst); - - bzero(UE_mac_inst,NB_UE_INST*sizeof(UE_MAC_INST)); - - for(i=0; imac_out_of_sync_ind(Mod_id, frameP, eNB_index); +} - LOG_I(MAC,"[MAIN] calling RRC\n"); - openair_rrc_top_init_ue(eMBMS_active, uecap_xer, cba_group_active,HO_active); +int +mac_top_init_ue(int eMBMS_active, char *uecap_xer, + uint8_t cba_group_active, uint8_t HO_active) +{ - - LOG_I(MAC,"[MAIN][INIT] Init function finished\n"); + int i; - return(0); + LOG_I(MAC, "[MAIN] Init function start:Nb_UE_INST=%d\n", NB_UE_INST); + + if (NB_UE_INST > 0) { + UE_mac_inst = + (UE_MAC_INST *) malloc16(NB_UE_INST * sizeof(UE_MAC_INST)); + + AssertFatal(UE_mac_inst != NULL, + "[MAIN] Can't ALLOCATE %zu Bytes for %d UE_MAC_INST with size %zu \n", + NB_UE_INST * sizeof(UE_MAC_INST), NB_UE_INST, + sizeof(UE_MAC_INST)); + + LOG_D(MAC, "[MAIN] ALLOCATE %zu Bytes for %d UE_MAC_INST @ %p\n", + NB_UE_INST * sizeof(UE_MAC_INST), NB_UE_INST, UE_mac_inst); + + bzero(UE_mac_inst, NB_UE_INST * sizeof(UE_MAC_INST)); + + for (i = 0; i < NB_UE_INST; i++) { + ue_init_mac(i); + } + } else { + UE_mac_inst = NULL; + } + + + LOG_I(MAC, "[MAIN] calling RRC\n"); + openair_rrc_top_init_ue(eMBMS_active, uecap_xer, cba_group_active, + HO_active); + + + LOG_I(MAC, "[MAIN][INIT] Init function finished\n"); + + return (0); } @@ -115,183 +121,107 @@ int mac_top_init_ue(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, void mac_top_init_eNB() { - module_id_t i,j; - int list_el; - UE_list_t *UE_list; - eNB_MAC_INST *mac; + module_id_t i, j; + int list_el; + UE_list_t *UE_list; + eNB_MAC_INST *mac; - LOG_I(MAC,"[MAIN] Init function start:nb_macrlc_inst=%d\n",RC.nb_macrlc_inst); + LOG_I(MAC, "[MAIN] Init function start:nb_macrlc_inst=%d\n", + RC.nb_macrlc_inst); - if (RC.nb_macrlc_inst>0) { - RC.mac = (eNB_MAC_INST**)malloc16(RC.nb_macrlc_inst*sizeof(eNB_MAC_INST*)); - AssertFatal(RC.mac != NULL,"can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n", - RC.nb_macrlc_inst*sizeof(eNB_MAC_INST*), - RC.nb_macrlc_inst, - sizeof(eNB_MAC_INST)); - for (i=0;iMod_id = i; - for (j=0;jDL_req[j].dl_config_request_body.dl_config_pdu_list = RC.mac[i]->dl_config_pdu_list[j]; - RC.mac[i]->UL_req[j].ul_config_request_body.ul_config_pdu_list = RC.mac[i]->ul_config_pdu_list[j]; - for (int k=0;k<10;k++) RC.mac[i]->UL_req_tmp[j][k].ul_config_request_body.ul_config_pdu_list = RC.mac[i]->ul_config_pdu_list_tmp[j][k]; - RC.mac[i]->HI_DCI0_req[j].hi_dci0_request_body.hi_dci0_pdu_list = RC.mac[i]->hi_dci0_pdu_list[j]; - RC.mac[i]->TX_req[j].tx_request_body.tx_pdu_list = RC.mac[i]->tx_request_pdu[j]; - RC.mac[i]->ul_handle = 0; - } + if (RC.nb_macrlc_inst > 0) { + RC.mac = + (eNB_MAC_INST **) malloc16(RC.nb_macrlc_inst * + sizeof(eNB_MAC_INST *)); + AssertFatal(RC.mac != NULL, + "can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n", + RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *), + RC.nb_macrlc_inst, sizeof(eNB_MAC_INST)); + for (i = 0; i < RC.nb_macrlc_inst; i++) { + RC.mac[i] = (eNB_MAC_INST *) malloc16(sizeof(eNB_MAC_INST)); + AssertFatal(RC.mac != NULL, + "can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n", + RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *), + RC.nb_macrlc_inst, sizeof(eNB_MAC_INST)); + LOG_D(MAC, + "[MAIN] ALLOCATE %zu Bytes for %d eNB_MAC_INST @ %p\n", + sizeof(eNB_MAC_INST), RC.nb_macrlc_inst, RC.mac); + bzero(RC.mac[i], sizeof(eNB_MAC_INST)); + RC.mac[i]->Mod_id = i; + for (j = 0; j < MAX_NUM_CCs; j++) { + RC.mac[i]->DL_req[j].dl_config_request_body. + dl_config_pdu_list = RC.mac[i]->dl_config_pdu_list[j]; + RC.mac[i]->UL_req[j].ul_config_request_body. + ul_config_pdu_list = RC.mac[i]->ul_config_pdu_list[j]; + for (int k = 0; k < 10; k++) + RC.mac[i]->UL_req_tmp[j][k]. + ul_config_request_body.ul_config_pdu_list = + RC.mac[i]->ul_config_pdu_list_tmp[j][k]; + RC.mac[i]->HI_DCI0_req[j]. + hi_dci0_request_body.hi_dci0_pdu_list = + RC.mac[i]->hi_dci0_pdu_list[j]; + RC.mac[i]->TX_req[j].tx_request_body.tx_pdu_list = + RC.mac[i]->tx_request_pdu[j]; + RC.mac[i]->ul_handle = 0; + } + } + + AssertFatal(rlc_module_init() == 0, + "Could not initialize RLC layer\n"); + + // These should be out of here later + pdcp_layer_init(); + + rrc_init_global_param(); + + } else { + RC.mac = NULL; } - AssertFatal(rlc_module_init()==0,"Could not initialize RLC layer\n"); - - // These should be out of here later - pdcp_layer_init (); - - rrc_init_global_param(); - - } else { - RC.mac = NULL; - } - - // Initialize Linked-List for Active UEs - for(i=0; iif_inst = IF_Module_init(i); + mac->if_inst = IF_Module_init(i); - UE_list = &mac->UE_list; + UE_list = &mac->UE_list; - UE_list->num_UEs=0; - UE_list->head=-1; - UE_list->head_ul=-1; - UE_list->avail=0; + UE_list->num_UEs = 0; + UE_list->head = -1; + UE_list->head_ul = -1; + UE_list->avail = 0; - for (list_el=0; list_elnext[list_el]=list_el+1; - UE_list->next_ul[list_el]=list_el+1; + for (list_el = 0; list_el < NUMBER_OF_UE_MAX - 1; list_el++) { + UE_list->next[list_el] = list_el + 1; + UE_list->next_ul[list_el] = list_el + 1; + } + + UE_list->next[list_el] = -1; + UE_list->next_ul[list_el] = -1; } - UE_list->next[list_el]=-1; - UE_list->next_ul[list_el]=-1; - } - } -void mac_init_cell_params(int Mod_idP,int CC_idP) { +void mac_init_cell_params(int Mod_idP, int CC_idP) +{ - int j; - RA_TEMPLATE *RA_template; - UE_TEMPLATE *UE_template; - int size_bytes1,size_bytes2,size_bits1,size_bits2; + int j; + UE_TEMPLATE *UE_template; - LOG_D(MAC,"[MAIN][eNB %d] CC_id %d initializing RA_template\n",Mod_idP, CC_idP); - LOG_D(MAC, "[MSC_NEW][FRAME 00000][MAC_eNB][MOD %02d][]\n", Mod_idP); - COMMON_channels_t *cc = &RC.mac[Mod_idP]->common_channels[CC_idP]; + LOG_D(MAC, "[MSC_NEW][FRAME 00000][MAC_eNB][MOD %02d][]\n", Mod_idP); + COMMON_channels_t *cc = &RC.mac[Mod_idP]->common_channels[CC_idP]; - RA_template = (RA_TEMPLATE *)&cc->RA_template[0]; - - for (j=0; jtdd_Config != NULL) { - switch (cc->mib->message.dl_Bandwidth) { - case MasterInformationBlock__dl_Bandwidth_n6: - size_bytes1 = sizeof(DCI1A_1_5MHz_TDD_1_6_t); - size_bytes2 = sizeof(DCI1A_1_5MHz_TDD_1_6_t); - size_bits1 = sizeof_DCI1A_1_5MHz_TDD_1_6_t; - size_bits2 = sizeof_DCI1A_1_5MHz_TDD_1_6_t; - break; - - case MasterInformationBlock__dl_Bandwidth_n25: - size_bytes1 = sizeof(DCI1A_5MHz_TDD_1_6_t); - size_bytes2 = sizeof(DCI1A_5MHz_TDD_1_6_t); - size_bits1 = sizeof_DCI1A_5MHz_TDD_1_6_t; - size_bits2 = sizeof_DCI1A_5MHz_TDD_1_6_t; - break; - - case MasterInformationBlock__dl_Bandwidth_n50: - size_bytes1 = sizeof(DCI1A_10MHz_TDD_1_6_t); - size_bytes2 = sizeof(DCI1A_10MHz_TDD_1_6_t); - size_bits1 = sizeof_DCI1A_10MHz_TDD_1_6_t; - size_bits2 = sizeof_DCI1A_10MHz_TDD_1_6_t; - break; - - case MasterInformationBlock__dl_Bandwidth_n100: - size_bytes1 = sizeof(DCI1A_20MHz_TDD_1_6_t); - size_bytes2 = sizeof(DCI1A_20MHz_TDD_1_6_t); - size_bits1 = sizeof_DCI1A_20MHz_TDD_1_6_t; - size_bits2 = sizeof_DCI1A_20MHz_TDD_1_6_t; - break; - - default: - size_bytes1 = sizeof(DCI1A_1_5MHz_TDD_1_6_t); - size_bytes2 = sizeof(DCI1A_1_5MHz_TDD_1_6_t); - size_bits1 = sizeof_DCI1A_1_5MHz_TDD_1_6_t; - size_bits2 = sizeof_DCI1A_1_5MHz_TDD_1_6_t; - break; - } - - } else { - switch (cc->mib->message.dl_Bandwidth) { - case MasterInformationBlock__dl_Bandwidth_n6: - size_bytes1 = sizeof(DCI1A_1_5MHz_FDD_t); - size_bytes2 = sizeof(DCI1A_1_5MHz_FDD_t); - size_bits1 = sizeof_DCI1A_1_5MHz_FDD_t; - size_bits2 = sizeof_DCI1A_1_5MHz_FDD_t; - break; - - case MasterInformationBlock__dl_Bandwidth_n25: - size_bytes1 = sizeof(DCI1A_5MHz_FDD_t); - size_bytes2 = sizeof(DCI1A_5MHz_FDD_t); - size_bits1 = sizeof_DCI1A_5MHz_FDD_t; - size_bits2 = sizeof_DCI1A_5MHz_FDD_t; - break; - - case MasterInformationBlock__dl_Bandwidth_n50: - size_bytes1 = sizeof(DCI1A_10MHz_FDD_t); - size_bytes2 = sizeof(DCI1A_10MHz_FDD_t); - size_bits1 = sizeof_DCI1A_10MHz_FDD_t; - size_bits2 = sizeof_DCI1A_10MHz_FDD_t; - break; - - case MasterInformationBlock__dl_Bandwidth_n100: - size_bytes1 = sizeof(DCI1A_20MHz_FDD_t); - size_bytes2 = sizeof(DCI1A_20MHz_FDD_t); - size_bits1 = sizeof_DCI1A_20MHz_FDD_t; - size_bits2 = sizeof_DCI1A_20MHz_FDD_t; - break; - - default: - size_bytes1 = sizeof(DCI1A_1_5MHz_FDD_t); - size_bytes2 = sizeof(DCI1A_1_5MHz_FDD_t); - size_bits1 = sizeof_DCI1A_1_5MHz_FDD_t; - size_bits2 = sizeof_DCI1A_1_5MHz_FDD_t; - break; - } + memset(&RC.mac[Mod_idP]->eNB_stats, 0, sizeof(eNB_STATS)); + UE_template = + (UE_TEMPLATE *) & RC.mac[Mod_idP]->UE_list.UE_template[CC_idP][0]; + + for (j = 0; j < NUMBER_OF_UE_MAX; j++) { + UE_template[j].rnti = 0; + // initiallize the eNB to UE statistics + memset(&RC.mac[Mod_idP]->UE_list.eNB_UE_stats[CC_idP][j], 0, + sizeof(eNB_UE_STATS)); } - - memcpy((void *)&RA_template[j].RA_alloc_pdu1[0],(void *)&RA_alloc_pdu,size_bytes1); - memcpy((void *)&RA_template[j].RA_alloc_pdu2[0],(void *)&DLSCH_alloc_pdu1A,size_bytes2); - RA_template[j].RA_dci_size_bytes1 = size_bytes1; - RA_template[j].RA_dci_size_bytes2 = size_bytes2; - RA_template[j].RA_dci_size_bits1 = size_bits1; - RA_template[j].RA_dci_size_bits2 = size_bits2; - - RA_template[j].RA_dci_fmt1 = format1A; - RA_template[j].RA_dci_fmt2 = format1A; - } - - memset (&RC.mac[Mod_idP]->eNB_stats,0,sizeof(eNB_STATS)); - UE_template = (UE_TEMPLATE *)&RC.mac[Mod_idP]->UE_list.UE_template[CC_idP][0]; - - for (j=0; jUE_list.eNB_UE_stats[CC_idP][j],0,sizeof(eNB_UE_STATS)); - } } @@ -300,17 +230,17 @@ int rlcmac_init_global_param(void) { - LOG_I(MAC,"[MAIN] CALLING RLC_MODULE_INIT...\n"); + LOG_I(MAC, "[MAIN] CALLING RLC_MODULE_INIT...\n"); - if (rlc_module_init()!=0) { - return(-1); - } + if (rlc_module_init() != 0) { + return (-1); + } - pdcp_layer_init (); + pdcp_layer_init(); - LOG_I(MAC,"[MAIN] Init Global Param Done\n"); + LOG_I(MAC, "[MAIN] Init Global Param Done\n"); - return 0; + return 0; } @@ -318,29 +248,31 @@ void mac_top_cleanup(void) { #ifndef USER_MODE - pdcp_module_cleanup (); + pdcp_module_cleanup(); #endif - if (NB_UE_INST>0) { - free (UE_mac_inst); - } + if (NB_UE_INST > 0) { + free(UE_mac_inst); + } - if (RC.nb_macrlc_inst>0) { - free(RC.mac); - } + if (RC.nb_macrlc_inst > 0) { + free(RC.mac); + } } -int l2_init_ue(int eMBMS_active, char *uecap_xer,uint8_t cba_group_active, uint8_t HO_active) +int +l2_init_ue(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, + uint8_t HO_active) { - LOG_I(MAC,"[MAIN] MAC_INIT_GLOBAL_PARAM IN...\n"); - // NB_NODE=2; - // NB_INST=2; + LOG_I(MAC, "[MAIN] MAC_INIT_GLOBAL_PARAM IN...\n"); + // NB_NODE=2; + // NB_INST=2; - rlcmac_init_global_param(); - LOG_I(MAC,"[MAIN] init UE MAC functions \n"); - mac_top_init_ue(eMBMS_active,uecap_xer,cba_group_active,HO_active); - return(1); + rlcmac_init_global_param(); + LOG_I(MAC, "[MAIN] init UE MAC functions \n"); + mac_top_init_ue(eMBMS_active, uecap_xer, cba_group_active, HO_active); + return (1); } int l2_init_eNB() @@ -348,13 +280,12 @@ int l2_init_eNB() - LOG_I(MAC,"[MAIN] MAC_INIT_GLOBAL_PARAM IN...\n"); + LOG_I(MAC, "[MAIN] MAC_INIT_GLOBAL_PARAM IN...\n"); - rlcmac_init_global_param(); + rlcmac_init_global_param(); - LOG_D(MAC,"[MAIN] ALL INIT OK\n"); + LOG_D(MAC, "[MAIN] ALL INIT OK\n"); - return(1); + return (1); } - diff --git a/openair2/LAYER2/MAC/openair2_proc.c b/openair2/LAYER2/MAC/openair2_proc.c deleted file mode 100644 index ab78be3c61..0000000000 --- a/openair2/LAYER2/MAC/openair2_proc.c +++ /dev/null @@ -1,405 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/* \file openair2_proc.c - \brief MAC layer online statistics - \author Navid Nikaein - \date 2013 - 2014 - \version 1.0 - @ingroup _mac -*/ - -#ifndef USER_MODE -#include -#include -#include - -#endif -#include "LAYER2/MAC/defs.h" -#include "LAYER2/MAC/extern.h" -//#include "RRC/LITE/extern.h" -//#include "LAYER2/PDCP/pdcp.h" -#include "proto.h" - -extern RAN_CONTEXT_t RC; - -int openair2_stats_read(char *buffer, char **my_buffer, off_t off, int length) - -{ - - int len = 0,fg,Overhead, Sign; - unsigned int i,j,k,kk; - unsigned int ue_id, eNB_id; - unsigned int Mod_id = 0,CH_index; - unsigned int stat_tx_pdcp_sdu; - unsigned int stat_tx_pdcp_bytes; - unsigned int stat_tx_pdcp_sdu_discarded; - unsigned int stat_tx_pdcp_bytes_discarded; - unsigned int stat_tx_data_pdu; - unsigned int stat_tx_data_bytes; - unsigned int stat_tx_retransmit_pdu_by_status; - unsigned int stat_tx_retransmit_bytes_by_status; - unsigned int stat_tx_retransmit_pdu; - unsigned int stat_tx_retransmit_bytes; - unsigned int stat_tx_control_pdu; - unsigned int stat_tx_control_bytes; - unsigned int stat_rx_pdcp_sdu; - unsigned int stat_rx_pdcp_bytes; - unsigned int stat_rx_data_pdus_duplicate; - unsigned int stat_rx_data_bytes_duplicate; - unsigned int stat_rx_data_pdu; - unsigned int stat_rx_data_bytes; - unsigned int stat_rx_data_pdu_dropped; - unsigned int stat_rx_data_bytes_dropped; - unsigned int stat_rx_data_pdu_out_of_window; - unsigned int stat_rx_data_bytes_out_of_window; - unsigned int stat_rx_control_pdu; - unsigned int stat_rx_control_bytes; - unsigned int stat_timer_reordering_timed_out; - unsigned int stat_timer_poll_retransmit_timed_out; - unsigned int stat_timer_status_prohibit_timed_out; - - // UE part - for (ue_id=0; ue_id RRC_CONNECTED) { - case RRC_RECONFIGURED : - case RRC_CONNECTED: - case RRC_SI_RECEIVED: - case RRC_IDLE: - break; - - if (mac_get_rrc_status(ue_id,0,enb_id) > RRC_CONNECTED) { - // if (UE_mac_inst[ue_id].Dcch_lchan[CH_index].Active==1) { - len+=sprintf(&buffer[len],"eNB %d: Wideband SINR %d dB---\n", - CH_index,UE_mac_inst[Mod_id].Def_meas[CH_index].Wideband_sinr); - len+=sprintf(&buffer[len],"CH %d: Subband SINR (dB) :", - CH_index); - - for (fg=0; fg>5, - UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.NB_RX, - UE_mac_inst[Mod_id].Dcch_lchan[CH_index].Lchan_info.NB_RX_ERRORS); - - for(i=1; i>5, - Pdcp_stats_rx[k][CH_index][i], - Pdcp_stats_rx_rate[k][CH_index][i], - (10*Pdcp_stats_rx_rate[k][CH_index][i])>>5, - Sign*(10*Overhead)>>5); - - - int status = rlc_stat_req (k, - UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, - &stat_tx_pdcp_sdu, - &stat_tx_pdcp_bytes, - &stat_tx_pdcp_sdu_discarded, - &stat_tx_pdcp_bytes_discarded, - &stat_tx_data_pdu, - &stat_tx_data_bytes, - &stat_tx_retransmit_pdu_by_status, - &stat_tx_retransmit_bytes_by_status, - &stat_tx_retransmit_pdu, - &stat_tx_retransmit_bytes, - &stat_tx_control_pdu, - &stat_tx_control_bytes, - &stat_rx_pdcp_sdu, - &stat_rx_pdcp_bytes, - &stat_rx_data_pdus_duplicate, - &stat_rx_data_bytes_duplicate, - &stat_rx_data_pdu, - &stat_rx_data_bytes, - &stat_rx_data_pdu_dropped, - &stat_rx_data_bytes_dropped, - &stat_rx_data_pdu_out_of_window, - &stat_rx_data_bytes_out_of_window, - &stat_rx_control_pdu, - &stat_rx_control_bytes, - &stat_timer_reordering_timed_out, - &stat_timer_poll_retransmit_timed_out, - &stat_timer_status_prohibit_timed_out) ; - - if (status == RLC_OP_STATUS_OK) { - len+=sprintf(&buffer[len],"RLC LCHAN %d, NB_SDU_TO_TX = %d\tNB_SDU_DISC %d\tNB_RX_SDU %d\n", - UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, - tx_pdcp_sdu, - tx_pdcp_sdu_discarded, - rx_sdu); - len+=sprintf(&buffer[len],"RLC LCHAN %d, NB_TB_TX_DATA = %d\tNB_TB_TX_CONTROL %d\tNB_TX_TB_RETRANS %d", - UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, - tx_data_pdu, - tx_control_pdu, - tx_retransmit_pdu); - len+=sprintf(&buffer[len],"\tRLC LCHAN %d, NB_TX_TB_RETRANS_BY_STATUS = %d\tNB_TX_TB_RETRANS_PADD %d\n", - UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, - tx_retransmit_pdu_by_status, - tx_retransmit_pdu_unblock); - len+=sprintf(&buffer[len],"RLC LCHAN %d, NB_RX_DATA = %d\tNB_RX_TB_OUT_WIN %d\tNB_RX_TB_CORRUPT %d\n", - UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, - rx_data_pdu, - rx_data_pdu_out_of_window, - rx_error_pdu); - } - - len+=sprintf(&buffer[len],"[MAC]: LCHAN %d, NB_TX_MAC = %d (%d bits/TTI, %d kbits/s), NB_RX_MAC = %d (%d errors)\n", - UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.Lchan_id.Index, - UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_TX, - UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.output_rate, - (10*UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.output_rate)>>5, - UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_RX, - UE_mac_inst[Mod_id].Dtch_lchan[i][CH_index].Lchan_info.NB_RX_ERRORS); - len+=sprintf(&buffer[len]," TX per TB: "); - - for(kk=0; kkIs_cluster_head[k] ==1) { - - Mod_id=k; - len+=sprintf(&buffer[len], - "-------------------------------------------------------------------CH %d: TTI: %d------------------------------------------------------------------\n", - NODE_ID[Mod_id],Mac_rlc_xface->frame); - - for(i=1; i<=NB_CNX_CH; i++) { - if (CH_mac_inst[Mod_id].Dcch_lchan[i].Active==1) { - len+=sprintf(&buffer[len],"\nMR index %d: DL SINR (feedback) %d dB, CQI: %s\n\n", - i,//CH_rrc_inst[Mod_id].Info.UE_list[i].L2_id[0], - CH_mac_inst[Mod_id].Def_meas[i].Wideband_sinr); - //print_cqi(CH_mac_inst[Mod_id].Def_meas[i].cqi)); - - len+=sprintf(&buffer[len], - "[MAC] LCHAN %d (DCCH), NB_TX_MAC= %d (%d bits/TTI, %d kbits/s), NB_RX_MAC= %d (errors %d, sacch errors %d, sach errors %d, sach_missing %d)\n\n", - CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.Lchan_id.Index, - CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.NB_TX, - CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.output_rate, - (10*CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.output_rate)>>5, - CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.NB_RX, - CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.NB_RX_ERRORS, - CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.NB_RX_SACCH_ERRORS, - CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.NB_RX_SACH_ERRORS, - CH_mac_inst[Mod_id].Dcch_lchan[i].Lchan_info.NB_RX_SACH_MISSING); - - for(j=0; j>5, - Pdcp_stats_rx[k][i][j], - Pdcp_stats_rx_rate[k][i][j], - (10*Pdcp_stats_rx_rate[k][i][j])>>5, - Sign*(10*Overhead)>>5); - int status = rlc_stat_req (k, - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Lchan_id.Index, - &tx_pdcp_sdu, - &tx_pdcp_sdu_discarded, - &tx_retransmit_pdu_unblock, - &tx_retransmit_pdu_by_status, - &tx_retransmit_pdu, - &tx_data_pdu, - &tx_control_pdu, - &rx_sdu, - &rx_error_pdu, - &rx_data_pdu, - &rx_data_pdu_out_of_window, - &rx_control_pdu) ; - /* - if (status == RLC_OP_STATUS_OK) { - len+=sprintf(&buffer[len],"\t[RLC] LCHAN %d, NB_SDU_TO_TX = %d\tNB_SDU_DISC %d\tNB_RX_SDU %d\n", - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Lchan_id.Index, - tx_pdcp_sdu, - tx_pdcp_sdu_discarded, - rx_sdu); - len+=sprintf(&buffer[len],"\t[RLC] LCHAN %d, NB_TB_TX_DATA = %d\tNB_TB_TX_CONTROL %d\tNB_TX_TB_RETRANS %\n", - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Lchan_id.Index, - tx_data_pdu, - tx_control_pdu, - tx_retransmit_pdu); - len+=sprintf(&buffer[len],"\t[RLC] LCHAN %d, NB_TX_TB_RETRANS_BY_STATUS = %d\tNB_TX_TB_RETRANS_PADD %d\n", - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Lchan_id.Index, - tx_retransmit_pdu_by_status, - tx_retransmit_pdu_unblock); - len+=sprintf(&buffer[len],"\t[RLC] LCHAN %d, NB_RX_DATA = %d\tNB_RX_TB_OUT_WIN %d\tNB_RX_TB_CORRUPT %d\n", - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Lchan_id.Index, - rx_data_pdu, - rx_data_pdu_out_of_window, - rx_error_pdu); - } - */ - len+=sprintf(&buffer[len], - "[MAC]LCHAN %d (CNX %d,RAB %d), NB_TX_MAC= %d (%d bits/TTI, %d kbit/s), NB_RX_MAC= %d (errors %d, sacch_errors %d, sach_errors %d, sach_missing %d)\n", - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Lchan_id.Index, - i,j, - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_TX, - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.output_rate, - (10*CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.output_rate)>>5, - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_RX, - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_RX_ERRORS, - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_RX_SACCH_ERRORS, - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_RX_SACH_ERRORS, - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_RX_SACH_MISSING); - len+=sprintf(&buffer[len],"[MAC][SCHEDULER] TX Arrival Rate %d, TX Service Rate %d, RX Arrival rate %d, RX Service rate %d, NB_BW_REQ_RX %d\n\n", - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Arrival_rate, - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Tx_rate, - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Req_rate, - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.Rx_rate, - CH_mac_inst[Mod_id].Dtch_lchan[j][i].Lchan_info.NB_BW_REQ_RX); - - /* - len+=sprintf(&buffer[len]," TX per TB: "); - for(kk=0;kkUE_list; - UE_TEMPLATE *UE_template; + int UE_id, i; + rnti_t rnti; + mac_rlc_status_resp_t rlc_status; + UE_list_t *UE_list = &RC.mac[Mod_id]->UE_list; + UE_TEMPLATE *UE_template; - for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) { - if (UE_list->active[UE_id] != TRUE) continue; + for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) { + if (UE_list->active[UE_id] != TRUE) + continue; - UE_template = &UE_list->UE_template[UE_PCCID(Mod_id,UE_id)][UE_id]; + UE_template = + &UE_list->UE_template[UE_PCCID(Mod_id, UE_id)][UE_id]; - // clear logical channel interface variables - UE_template->dl_buffer_total = 0; - UE_template->dl_pdus_total = 0; + // clear logical channel interface variables + UE_template->dl_buffer_total = 0; + UE_template->dl_pdus_total = 0; - for(i=0; i< MAX_NUM_LCID; i++) { - UE_template->dl_buffer_info[i]=0; - UE_template->dl_pdus_in_buffer[i]=0; - UE_template->dl_buffer_head_sdu_creation_time[i]=0; - UE_template->dl_buffer_head_sdu_remaining_size_to_send[i]=0; - } + for (i = 0; i < MAX_NUM_LCID; i++) { + UE_template->dl_buffer_info[i] = 0; + UE_template->dl_pdus_in_buffer[i] = 0; + UE_template->dl_buffer_head_sdu_creation_time[i] = 0; + UE_template->dl_buffer_head_sdu_remaining_size_to_send[i] = 0; + } - rnti = UE_RNTI(Mod_id,UE_id); + rnti = UE_RNTI(Mod_id, UE_id); - for(i=0; i< MAX_NUM_LCID; i++) { // loop over all the logical channels + for (i = 0; i < MAX_NUM_LCID; i++) { // loop over all the logical channels - rlc_status = mac_rlc_status_ind(Mod_id,rnti, Mod_id,frameP,subframeP,ENB_FLAG_YES,MBMS_FLAG_NO,i,0 ); - UE_template->dl_buffer_info[i] = rlc_status.bytes_in_buffer; //storing the dlsch buffer for each logical channel - UE_template->dl_pdus_in_buffer[i] = rlc_status.pdus_in_buffer; - UE_template->dl_buffer_head_sdu_creation_time[i] = rlc_status.head_sdu_creation_time ; - UE_template->dl_buffer_head_sdu_creation_time_max = cmax(UE_template->dl_buffer_head_sdu_creation_time_max, - rlc_status.head_sdu_creation_time ); - UE_template->dl_buffer_head_sdu_remaining_size_to_send[i] = rlc_status.head_sdu_remaining_size_to_send; - UE_template->dl_buffer_head_sdu_is_segmented[i] = rlc_status.head_sdu_is_segmented; - UE_template->dl_buffer_total += UE_template->dl_buffer_info[i];//storing the total dlsch buffer - UE_template->dl_pdus_total += UE_template->dl_pdus_in_buffer[i]; + rlc_status = + mac_rlc_status_ind(Mod_id, rnti, Mod_id, frameP, subframeP, + ENB_FLAG_YES, MBMS_FLAG_NO, i, 0); + UE_template->dl_buffer_info[i] = rlc_status.bytes_in_buffer; //storing the dlsch buffer for each logical channel + UE_template->dl_pdus_in_buffer[i] = rlc_status.pdus_in_buffer; + UE_template->dl_buffer_head_sdu_creation_time[i] = + rlc_status.head_sdu_creation_time; + UE_template->dl_buffer_head_sdu_creation_time_max = + cmax(UE_template->dl_buffer_head_sdu_creation_time_max, + rlc_status.head_sdu_creation_time); + UE_template->dl_buffer_head_sdu_remaining_size_to_send[i] = + rlc_status.head_sdu_remaining_size_to_send; + UE_template->dl_buffer_head_sdu_is_segmented[i] = + rlc_status.head_sdu_is_segmented; + UE_template->dl_buffer_total += UE_template->dl_buffer_info[i]; //storing the total dlsch buffer + UE_template->dl_pdus_total += + UE_template->dl_pdus_in_buffer[i]; #ifdef DEBUG_eNB_SCHEDULER - /* note for dl_buffer_head_sdu_remaining_size_to_send[i] : - * 0 if head SDU has not been segmented (yet), else remaining size not already segmented and sent - */ - if (UE_template->dl_buffer_info[i]>0) - LOG_D(MAC, - "[eNB %d] Frame %d Subframe %d : RLC status for UE %d in LCID%d: total of %d pdus and size %d, head sdu queuing time %d, remaining size %d, is segmeneted %d \n", - Mod_id, frameP, subframeP, UE_id, - i, UE_template->dl_pdus_in_buffer[i],UE_template->dl_buffer_info[i], - UE_template->dl_buffer_head_sdu_creation_time[i], - UE_template->dl_buffer_head_sdu_remaining_size_to_send[i], - UE_template->dl_buffer_head_sdu_is_segmented[i] - ); + /* note for dl_buffer_head_sdu_remaining_size_to_send[i] : + * 0 if head SDU has not been segmented (yet), else remaining size not already segmented and sent + */ + if (UE_template->dl_buffer_info[i] > 0) + LOG_D(MAC, + "[eNB %d] Frame %d Subframe %d : RLC status for UE %d in LCID%d: total of %d pdus and size %d, head sdu queuing time %d, remaining size %d, is segmeneted %d \n", + Mod_id, frameP, subframeP, UE_id, + i, UE_template->dl_pdus_in_buffer[i], + UE_template->dl_buffer_info[i], + UE_template->dl_buffer_head_sdu_creation_time[i], + UE_template-> + dl_buffer_head_sdu_remaining_size_to_send[i], + UE_template->dl_buffer_head_sdu_is_segmented[i]); #endif + } + + //#ifdef DEBUG_eNB_SCHEDULER + if (UE_template->dl_buffer_total > 0) + LOG_D(MAC, + "[eNB %d] Frame %d Subframe %d : RLC status for UE %d : total DL buffer size %d and total number of pdu %d \n", + Mod_id, frameP, subframeP, UE_id, + UE_template->dl_buffer_total, + UE_template->dl_pdus_total); + + //#endif } - - //#ifdef DEBUG_eNB_SCHEDULER - if ( UE_template->dl_buffer_total>0) - LOG_D(MAC,"[eNB %d] Frame %d Subframe %d : RLC status for UE %d : total DL buffer size %d and total number of pdu %d \n", - Mod_id, frameP, subframeP, UE_id, - UE_template->dl_buffer_total, - UE_template->dl_pdus_total - ); - - //#endif - } } // This function returns the estimated number of RBs required by each UE for downlink scheduling -void assign_rbs_required (module_id_t Mod_id, - frame_t frameP, - sub_frame_t subframe, - uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - int min_rb_unit[MAX_NUM_CCs]) +void +assign_rbs_required(module_id_t Mod_id, + frame_t frameP, + sub_frame_t subframe, + uint16_t + nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], + int min_rb_unit[MAX_NUM_CCs]) { - uint16_t TBS = 0; + uint16_t TBS = 0; - int UE_id,n,i,j,CC_id,pCCid,tmp; - UE_list_t *UE_list = &RC.mac[Mod_id]->UE_list; - eNB_UE_STATS *eNB_UE_stats,*eNB_UE_stats_i,*eNB_UE_stats_j; - int N_RB_DL; + int UE_id, n, i, j, CC_id, pCCid, tmp; + UE_list_t *UE_list = &RC.mac[Mod_id]->UE_list; + eNB_UE_STATS *eNB_UE_stats, *eNB_UE_stats_i, *eNB_UE_stats_j; + int N_RB_DL; - // clear rb allocations across all CC_id - for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) { - if (UE_list->active[UE_id] != TRUE) continue; + // clear rb allocations across all CC_id + for (UE_id = 0; UE_id < NUMBER_OF_UE_MAX; UE_id++) { + if (UE_list->active[UE_id] != TRUE) + continue; - pCCid = UE_PCCID(Mod_id,UE_id); + pCCid = UE_PCCID(Mod_id, UE_id); - //update CQI information across component carriers - for (n=0; nnumactiveCCs[UE_id]; n++) { + //update CQI information across component carriers + for (n = 0; n < UE_list->numactiveCCs[UE_id]; n++) { - CC_id = UE_list->ordered_CCids[n][UE_id]; - eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id]; + CC_id = UE_list->ordered_CCids[n][UE_id]; + eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id]; - eNB_UE_stats->dlsch_mcs1=cqi_to_mcs[UE_list->UE_sched_ctrl[UE_id].dl_cqi[CC_id]]; + eNB_UE_stats->dlsch_mcs1 = + cqi_to_mcs[UE_list->UE_sched_ctrl[UE_id].dl_cqi[CC_id]]; + } + + // provide the list of CCs sorted according to MCS + for (i = 0; i < UE_list->numactiveCCs[UE_id]; i++) { + eNB_UE_stats_i = + &UE_list->eNB_UE_stats[UE_list-> + ordered_CCids[i][UE_id]][UE_id]; + for (j = i + 1; j < UE_list->numactiveCCs[UE_id]; j++) { + DevAssert(j < MAX_NUM_CCs); + eNB_UE_stats_j = + &UE_list-> + eNB_UE_stats[UE_list->ordered_CCids[j][UE_id]][UE_id]; + if (eNB_UE_stats_j->dlsch_mcs1 > + eNB_UE_stats_i->dlsch_mcs1) { + tmp = UE_list->ordered_CCids[i][UE_id]; + UE_list->ordered_CCids[i][UE_id] = + UE_list->ordered_CCids[j][UE_id]; + UE_list->ordered_CCids[j][UE_id] = tmp; + } + } + } + + if (UE_list->UE_template[pCCid][UE_id].dl_buffer_total > 0) { + LOG_D(MAC, "[preprocessor] assign RB for UE %d\n", UE_id); + + for (i = 0; i < UE_list->numactiveCCs[UE_id]; i++) { + CC_id = UE_list->ordered_CCids[i][UE_id]; + eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id]; + + if (eNB_UE_stats->dlsch_mcs1 == 0) { + nb_rbs_required[CC_id][UE_id] = 4; // don't let the TBS get too small + } else { + nb_rbs_required[CC_id][UE_id] = min_rb_unit[CC_id]; + } + + TBS = + get_TBS_DL(eNB_UE_stats->dlsch_mcs1, + nb_rbs_required[CC_id][UE_id]); + + LOG_D(MAC, + "[preprocessor] start RB assignement for UE %d CC_id %d dl buffer %d (RB unit %d, MCS %d, TBS %d) \n", + UE_id, CC_id, + UE_list->UE_template[pCCid][UE_id].dl_buffer_total, + nb_rbs_required[CC_id][UE_id], + eNB_UE_stats->dlsch_mcs1, TBS); + + N_RB_DL = + to_prb(RC.mac[Mod_id]->common_channels[CC_id]. + mib->message.dl_Bandwidth); + + /* calculating required number of RBs for each UE */ + while (TBS < + UE_list->UE_template[pCCid][UE_id]. + dl_buffer_total) { + nb_rbs_required[CC_id][UE_id] += min_rb_unit[CC_id]; + + if (nb_rbs_required[CC_id][UE_id] > N_RB_DL) { + TBS = + get_TBS_DL(eNB_UE_stats->dlsch_mcs1, N_RB_DL); + nb_rbs_required[CC_id][UE_id] = N_RB_DL; + break; + } + + TBS = + get_TBS_DL(eNB_UE_stats->dlsch_mcs1, + nb_rbs_required[CC_id][UE_id]); + } // end of while + + LOG_D(MAC, + "[eNB %d] Frame %d: UE %d on CC %d: RB unit %d, nb_required RB %d (TBS %d, mcs %d)\n", + Mod_id, frameP, UE_id, CC_id, min_rb_unit[CC_id], + nb_rbs_required[CC_id][UE_id], TBS, + eNB_UE_stats->dlsch_mcs1); + } + } } - - // provide the list of CCs sorted according to MCS - for (i=0; inumactiveCCs[UE_id]; i++) { - eNB_UE_stats_i = &UE_list->eNB_UE_stats[UE_list->ordered_CCids[i][UE_id]][UE_id]; - for (j=i+1; jnumactiveCCs[UE_id]; j++) { - DevAssert( j < MAX_NUM_CCs ); - eNB_UE_stats_j = &UE_list->eNB_UE_stats[UE_list->ordered_CCids[j][UE_id]][UE_id]; - if (eNB_UE_stats_j->dlsch_mcs1 > - eNB_UE_stats_i->dlsch_mcs1) { - tmp = UE_list->ordered_CCids[i][UE_id]; - UE_list->ordered_CCids[i][UE_id] = UE_list->ordered_CCids[j][UE_id]; - UE_list->ordered_CCids[j][UE_id] = tmp; - } - } - } - - if (UE_list->UE_template[pCCid][UE_id].dl_buffer_total> 0) { - LOG_D(MAC,"[preprocessor] assign RB for UE %d\n",UE_id); - - for (i=0; inumactiveCCs[UE_id]; i++) { - CC_id = UE_list->ordered_CCids[i][UE_id]; - eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id]; - - if (eNB_UE_stats->dlsch_mcs1==0) { - nb_rbs_required[CC_id][UE_id] = 4; // don't let the TBS get too small - } else { - nb_rbs_required[CC_id][UE_id] = min_rb_unit[CC_id]; - } - - TBS = get_TBS_DL(eNB_UE_stats->dlsch_mcs1,nb_rbs_required[CC_id][UE_id]); - - LOG_D(MAC,"[preprocessor] start RB assignement for UE %d CC_id %d dl buffer %d (RB unit %d, MCS %d, TBS %d) \n", - UE_id, CC_id, UE_list->UE_template[pCCid][UE_id].dl_buffer_total, - nb_rbs_required[CC_id][UE_id],eNB_UE_stats->dlsch_mcs1,TBS); - - N_RB_DL = to_prb(RC.mac[Mod_id]->common_channels[CC_id].mib->message.dl_Bandwidth); - - /* calculating required number of RBs for each UE */ - while (TBS < UE_list->UE_template[pCCid][UE_id].dl_buffer_total) { - nb_rbs_required[CC_id][UE_id] += min_rb_unit[CC_id]; - - if (nb_rbs_required[CC_id][UE_id] > N_RB_DL) { - TBS = get_TBS_DL(eNB_UE_stats->dlsch_mcs1,N_RB_DL); - nb_rbs_required[CC_id][UE_id] = N_RB_DL; - break; - } - - TBS = get_TBS_DL(eNB_UE_stats->dlsch_mcs1,nb_rbs_required[CC_id][UE_id]); - } // end of while - - LOG_D(MAC,"[eNB %d] Frame %d: UE %d on CC %d: RB unit %d, nb_required RB %d (TBS %d, mcs %d)\n", - Mod_id, frameP,UE_id, CC_id, min_rb_unit[CC_id], nb_rbs_required[CC_id][UE_id], TBS, eNB_UE_stats->dlsch_mcs1); - } - } - } } // This function scans all CC_ids for a particular UE to find the maximum round index of its HARQ processes -int maxround(module_id_t Mod_id,uint16_t rnti,int frame,sub_frame_t subframe,uint8_t ul_flag ) +int +maxround(module_id_t Mod_id, uint16_t rnti, int frame, + sub_frame_t subframe, uint8_t ul_flag) { - uint8_t round,round_max=0,UE_id; - int CC_id,harq_pid; - UE_list_t *UE_list = &RC.mac[Mod_id]->UE_list; - COMMON_channels_t *cc; + uint8_t round, round_max = 0, UE_id; + int CC_id, harq_pid; + UE_list_t *UE_list = &RC.mac[Mod_id]->UE_list; + COMMON_channels_t *cc; - for (CC_id=0; CC_idcommon_channels[CC_id]; + cc = &RC.mac[Mod_id]->common_channels[CC_id]; - UE_id = find_UE_id(Mod_id,rnti); - if (cc->tdd_Config) harq_pid = ((frame*10)+subframe)%10; - else harq_pid = ((frame*10)+subframe)&7; + UE_id = find_UE_id(Mod_id, rnti); + if (cc->tdd_Config) + harq_pid = ((frame * 10) + subframe) % 10; + else + harq_pid = ((frame * 10) + subframe) & 7; - round = UE_list->UE_sched_ctrl[UE_id].round[CC_id][harq_pid]; - if (round > round_max) { - round_max = round; + round = UE_list->UE_sched_ctrl[UE_id].round[CC_id][harq_pid]; + if (round > round_max) { + round_max = round; + } } - } - return round_max; + return round_max; } // This function scans all CC_ids for a particular UE to find the maximum DL CQI // it returns -1 if the UE is not found in PHY layer (get_eNB_UE_stats gives NULL) -int maxcqi(module_id_t Mod_id,int32_t UE_id) +int maxcqi(module_id_t Mod_id, int32_t UE_id) { - UE_list_t *UE_list = &RC.mac[Mod_id]->UE_list; - int CC_id,n; - int CQI = 0; + UE_list_t *UE_list = &RC.mac[Mod_id]->UE_list; + int CC_id, n; + int CQI = 0; - for (n=0; nnumactiveCCs[UE_id]; n++) { - CC_id = UE_list->ordered_CCids[n][UE_id]; + for (n = 0; n < UE_list->numactiveCCs[UE_id]; n++) { + CC_id = UE_list->ordered_CCids[n][UE_id]; - if (UE_list->UE_sched_ctrl[UE_id].dl_cqi[CC_id] > CQI) { - CQI = UE_list->UE_sched_ctrl[UE_id].dl_cqi[CC_id]; + if (UE_list->UE_sched_ctrl[UE_id].dl_cqi[CC_id] > CQI) { + CQI = UE_list->UE_sched_ctrl[UE_id].dl_cqi[CC_id]; + } } - } - return CQI; + return CQI; } struct sort_ue_dl_params { - int Mod_idP; - int frameP; - int subframeP; + int Mod_idP; + int frameP; + int subframeP; }; static int ue_dl_compare(const void *_a, const void *_b, void *_params) { - struct sort_ue_dl_params *params = _params; - UE_list_t *UE_list = &RC.mac[params->Mod_idP]->UE_list; + struct sort_ue_dl_params *params = _params; + UE_list_t *UE_list = &RC.mac[params->Mod_idP]->UE_list; - int UE_id1 = *(const int *)_a; - int UE_id2 = *(const int *)_b; + int UE_id1 = *(const int *) _a; + int UE_id2 = *(const int *) _b; - int rnti1 = UE_RNTI(params->Mod_idP, UE_id1); - int pCC_id1 = UE_PCCID(params->Mod_idP, UE_id1); - int round1 = maxround(params->Mod_idP, rnti1, params->frameP, params->subframeP, 1); + int rnti1 = UE_RNTI(params->Mod_idP, UE_id1); + int pCC_id1 = UE_PCCID(params->Mod_idP, UE_id1); + int round1 = + maxround(params->Mod_idP, rnti1, params->frameP, params->subframeP, + 1); - int rnti2 = UE_RNTI(params->Mod_idP, UE_id2); - int pCC_id2 = UE_PCCID(params->Mod_idP, UE_id2); - int round2 = maxround(params->Mod_idP, rnti2, params->frameP, params->subframeP, 1); + int rnti2 = UE_RNTI(params->Mod_idP, UE_id2); + int pCC_id2 = UE_PCCID(params->Mod_idP, UE_id2); + int round2 = + maxround(params->Mod_idP, rnti2, params->frameP, params->subframeP, + 1); - int cqi1 = maxcqi(params->Mod_idP, UE_id1); - int cqi2 = maxcqi(params->Mod_idP, UE_id2); + int cqi1 = maxcqi(params->Mod_idP, UE_id1); + int cqi2 = maxcqi(params->Mod_idP, UE_id2); - if (round1 > round2) return -1; - if (round1 < round2) return 1; + if (round1 > round2) + return -1; + if (round1 < round2) + return 1; - if (UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_info[1] + UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_info[2] > - UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_info[1] + UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_info[2]) - return -1; - if (UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_info[1] + UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_info[2] < - UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_info[1] + UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_info[2]) - return 1; + if (UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_info[1] + + UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_info[2] > + UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_info[1] + + UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_info[2]) + return -1; + if (UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_info[1] + + UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_info[2] < + UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_info[1] + + UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_info[2]) + return 1; - if (UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_head_sdu_creation_time_max > - UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_head_sdu_creation_time_max) - return -1; - if (UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_head_sdu_creation_time_max < - UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_head_sdu_creation_time_max) - return 1; + if (UE_list-> + UE_template[pCC_id1][UE_id1].dl_buffer_head_sdu_creation_time_max > + UE_list-> + UE_template[pCC_id2][UE_id2].dl_buffer_head_sdu_creation_time_max) + return -1; + if (UE_list-> + UE_template[pCC_id1][UE_id1].dl_buffer_head_sdu_creation_time_max < + UE_list-> + UE_template[pCC_id2][UE_id2].dl_buffer_head_sdu_creation_time_max) + return 1; - if (UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_total > - UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_total) - return -1; - if (UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_total < - UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_total) - return 1; + if (UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_total > + UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_total) + return -1; + if (UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_total < + UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_total) + return 1; - if (cqi1 > cqi2) return -1; - if (cqi1 < cqi2) return 1; + if (cqi1 > cqi2) + return -1; + if (cqi1 < cqi2) + return 1; - return 0; + return 0; #if 0 - /* The above order derives from the following. */ - if(round2 > round1) { // Check first if one of the UEs has an active HARQ process which needs service and swap order - swap_UEs(UE_list,UE_id1,UE_id2,0); - } else if (round2 == round1) { - // RK->NN : I guess this is for fairness in the scheduling. This doesn't make sense unless all UEs have the same configuration of logical channels. This should be done on the sum of all information that has to be sent. And still it wouldn't ensure fairness. It should be based on throughput seen by each UE or maybe using the head_sdu_creation_time, i.e. swap UEs if one is waiting longer for service. - // for(j=0;j round1) { // Check first if one of the UEs has an active HARQ process which needs service and swap order + swap_UEs(UE_list, UE_id1, UE_id2, 0); + } else if (round2 == round1) { + // RK->NN : I guess this is for fairness in the scheduling. This doesn't make sense unless all UEs have the same configuration of logical channels. This should be done on the sum of all information that has to be sent. And still it wouldn't ensure fairness. It should be based on throughput seen by each UE or maybe using the head_sdu_creation_time, i.e. swap UEs if one is waiting longer for service. + // for(j=0;jUE_template[pCC_id1][UE_id1].dl_buffer_info[1] + UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_info[2]) < - (UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_info[1] + UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_info[2]) ) { - swap_UEs(UE_list,UE_id1,UE_id2,0); - } else if (UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_head_sdu_creation_time_max < - UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_head_sdu_creation_time_max ) { - swap_UEs(UE_list,UE_id1,UE_id2,0); - } else if (UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_total < - UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_total ) { - swap_UEs(UE_list,UE_id1,UE_id2,0); - } else if (cqi1 < cqi2) { - swap_UEs(UE_list,UE_id1,UE_id2,0); - } - } + if ((UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_info[1] + + UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_info[2]) < + (UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_info[1] + + UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_info[2])) { + swap_UEs(UE_list, UE_id1, UE_id2, 0); + } else if (UE_list->UE_template[pCC_id1] + [UE_id1].dl_buffer_head_sdu_creation_time_max < + UE_list->UE_template[pCC_id2] + [UE_id2].dl_buffer_head_sdu_creation_time_max) { + swap_UEs(UE_list, UE_id1, UE_id2, 0); + } else if (UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_total < + UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_total) { + swap_UEs(UE_list, UE_id1, UE_id2, 0); + } else if (cqi1 < cqi2) { + swap_UEs(UE_list, UE_id1, UE_id2, 0); + } + } #endif } // This fuction sorts the UE in order their dlsch buffer and CQI -void sort_UEs (module_id_t Mod_idP, - int frameP, - sub_frame_t subframeP) +void sort_UEs(module_id_t Mod_idP, int frameP, sub_frame_t subframeP) { - int i; - int list[NUMBER_OF_UE_MAX]; - int list_size = 0; - int rnti; - struct sort_ue_dl_params params = { Mod_idP, frameP, subframeP }; + int i; + int list[NUMBER_OF_UE_MAX]; + int list_size = 0; + int rnti; + struct sort_ue_dl_params params = { Mod_idP, frameP, subframeP }; - UE_list_t *UE_list = &RC.mac[Mod_idP]->UE_list; + UE_list_t *UE_list = &RC.mac[Mod_idP]->UE_list; - for (i = 0; i < NUMBER_OF_UE_MAX; i++) { + for (i = 0; i < NUMBER_OF_UE_MAX; i++) { - if (UE_list->active[i]==FALSE) continue; - if ((rnti = UE_RNTI(Mod_idP, i)) == NOT_A_RNTI) continue; - if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) continue; + if (UE_list->active[i] == FALSE) + continue; + if ((rnti = UE_RNTI(Mod_idP, i)) == NOT_A_RNTI) + continue; + if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) + continue; - list[list_size] = i; - list_size++; - } + list[list_size] = i; + list_size++; + } - qsort_r(list, list_size, sizeof(int), ue_dl_compare, ¶ms); + qsort_r(list, list_size, sizeof(int), ue_dl_compare, ¶ms); - if (list_size) { - for (i = 0; i < list_size-1; i++) - UE_list->next[list[i]] = list[i+1]; - UE_list->next[list[list_size-1]] = -1; - UE_list->head = list[0]; - } else { - UE_list->head = -1; - } + if (list_size) { + for (i = 0; i < list_size - 1; i++) + UE_list->next[list[i]] = list[i + 1]; + UE_list->next[list[list_size - 1]] = -1; + UE_list->head = list[0]; + } else { + UE_list->head = -1; + } #if 0 - int UE_id1,UE_id2; - int pCC_id1,pCC_id2; - int cqi1,cqi2,round1,round2; - int i=0,ii=0;//,j=0; - rnti_t rnti1,rnti2; + int UE_id1, UE_id2; + int pCC_id1, pCC_id2; + int cqi1, cqi2, round1, round2; + int i = 0, ii = 0; //,j=0; + rnti_t rnti1, rnti2; - UE_list_t *UE_list = &RC.mac[Mod_idP]->UE_list; + UE_list_t *UE_list = &RC.mac[Mod_idP]->UE_list; - for (i=UE_list->head; i>=0; i=UE_list->next[i]) { + for (i = UE_list->head; i >= 0; i = UE_list->next[i]) { - for(ii=UE_list->next[i]; ii>=0; ii=UE_list->next[ii]) { + for (ii = UE_list->next[i]; ii >= 0; ii = UE_list->next[ii]) { - UE_id1 = i; - rnti1 = UE_RNTI(Mod_idP,UE_id1); - if(rnti1 == NOT_A_RNTI) - continue; - if (UE_list->UE_sched_ctrl[UE_id1].ul_out_of_sync == 1) - continue; - pCC_id1 = UE_PCCID(Mod_idP,UE_id1); - cqi1 = maxcqi(Mod_idP,UE_id1); // - round1 = maxround(Mod_idP,rnti1,frameP,subframeP,0); + UE_id1 = i; + rnti1 = UE_RNTI(Mod_idP, UE_id1); + if (rnti1 == NOT_A_RNTI) + continue; + if (UE_list->UE_sched_ctrl[UE_id1].ul_out_of_sync == 1) + continue; + pCC_id1 = UE_PCCID(Mod_idP, UE_id1); + cqi1 = maxcqi(Mod_idP, UE_id1); // + round1 = maxround(Mod_idP, rnti1, frameP, subframeP, 0); - UE_id2 = ii; - rnti2 = UE_RNTI(Mod_idP,UE_id2); - if(rnti2 == NOT_A_RNTI) - continue; - if (UE_list->UE_sched_ctrl[UE_id2].ul_out_of_sync == 1) - continue; - cqi2 = maxcqi(Mod_idP,UE_id2); - round2 = maxround(Mod_idP,rnti2,frameP,subframeP,0); //mac_xface->get_ue_active_harq_pid(Mod_id,rnti2,subframe,&harq_pid2,&round2,0); - pCC_id2 = UE_PCCID(Mod_idP,UE_id2); + UE_id2 = ii; + rnti2 = UE_RNTI(Mod_idP, UE_id2); + if (rnti2 == NOT_A_RNTI) + continue; + if (UE_list->UE_sched_ctrl[UE_id2].ul_out_of_sync == 1) + continue; + cqi2 = maxcqi(Mod_idP, UE_id2); + round2 = maxround(Mod_idP, rnti2, frameP, subframeP, 0); //mac_xface->get_ue_active_harq_pid(Mod_id,rnti2,subframe,&harq_pid2,&round2,0); + pCC_id2 = UE_PCCID(Mod_idP, UE_id2); - if(round2 > round1) { // Check first if one of the UEs has an active HARQ process which needs service and swap order - swap_UEs(UE_list,UE_id1,UE_id2,0); - } else if (round2 == round1) { - // RK->NN : I guess this is for fairness in the scheduling. This doesn't make sense unless all UEs have the same configuration of logical channels. This should be done on the sum of all information that has to be sent. And still it wouldn't ensure fairness. It should be based on throughput seen by each UE or maybe using the head_sdu_creation_time, i.e. swap UEs if one is waiting longer for service. - // for(j=0;j round1) { // Check first if one of the UEs has an active HARQ process which needs service and swap order + swap_UEs(UE_list, UE_id1, UE_id2, 0); + } else if (round2 == round1) { + // RK->NN : I guess this is for fairness in the scheduling. This doesn't make sense unless all UEs have the same configuration of logical channels. This should be done on the sum of all information that has to be sent. And still it wouldn't ensure fairness. It should be based on throughput seen by each UE or maybe using the head_sdu_creation_time, i.e. swap UEs if one is waiting longer for service. + // for(j=0;jUE_template[pCC_id1][UE_id1].dl_buffer_info[1] + UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_info[2]) < - (UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_info[1] + UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_info[2]) ) { - swap_UEs(UE_list,UE_id1,UE_id2,0); - } else if (UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_head_sdu_creation_time_max < - UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_head_sdu_creation_time_max ) { - swap_UEs(UE_list,UE_id1,UE_id2,0); - } else if (UE_list->UE_template[pCC_id1][UE_id1].dl_buffer_total < - UE_list->UE_template[pCC_id2][UE_id2].dl_buffer_total ) { - swap_UEs(UE_list,UE_id1,UE_id2,0); - } else if (cqi1 < cqi2) { - swap_UEs(UE_list,UE_id1,UE_id2,0); - } - } + if ((UE_list->UE_template[pCC_id1][UE_id1]. + dl_buffer_info[1] + + UE_list->UE_template[pCC_id1][UE_id1]. + dl_buffer_info[2]) < + (UE_list->UE_template[pCC_id2][UE_id2]. + dl_buffer_info[1] + + UE_list->UE_template[pCC_id2][UE_id2]. + dl_buffer_info[2])) { + swap_UEs(UE_list, UE_id1, UE_id2, 0); + } else if (UE_list->UE_template[pCC_id1] + [UE_id1].dl_buffer_head_sdu_creation_time_max < + UE_list->UE_template[pCC_id2] + [UE_id2].dl_buffer_head_sdu_creation_time_max) { + swap_UEs(UE_list, UE_id1, UE_id2, 0); + } else if (UE_list->UE_template[pCC_id1][UE_id1]. + dl_buffer_total < + UE_list->UE_template[pCC_id2][UE_id2]. + dl_buffer_total) { + swap_UEs(UE_list, UE_id1, UE_id2, 0); + } else if (cqi1 < cqi2) { + swap_UEs(UE_list, UE_id1, UE_id2, 0); + } + } + } } - } #endif } @@ -485,1050 +554,1297 @@ void sort_UEs (module_id_t Mod_idP, // This function assigns pre-available RBS to each UE in specified sub-bands before scheduling is done -void dlsch_scheduler_pre_processor (module_id_t Mod_id, - frame_t frameP, - sub_frame_t subframeP, - int N_RBG[MAX_NUM_CCs], - int *mbsfn_flag) +void +dlsch_scheduler_pre_processor(module_id_t Mod_id, + frame_t frameP, + sub_frame_t subframeP, + int N_RBG[MAX_NUM_CCs], int *mbsfn_flag) { - unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX],harq_pid=0,round=0,total_ue_count; - unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]; - int UE_id, i; - uint16_t ii,j; - uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; - uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; - uint16_t nb_rbs_required_remaining_1[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; - uint16_t average_rbs_per_user[MAX_NUM_CCs] = {0}; - rnti_t rnti; - int min_rb_unit[MAX_NUM_CCs]; - uint16_t r1=0; - uint8_t CC_id; - UE_list_t *UE_list = &RC.mac[Mod_id]->UE_list; + unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX], harq_pid = + 0, round = 0, total_ue_count; + unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]; + int UE_id, i; + uint16_t ii, j; + uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + uint16_t nb_rbs_required_remaining_1[MAX_NUM_CCs][NUMBER_OF_UE_MAX]; + uint16_t average_rbs_per_user[MAX_NUM_CCs] = { 0 }; + rnti_t rnti; + int min_rb_unit[MAX_NUM_CCs]; + uint16_t r1 = 0; + uint8_t CC_id; + UE_list_t *UE_list = &RC.mac[Mod_id]->UE_list; - int N_RB_DL; - int transmission_mode = 0; - UE_sched_ctrl *ue_sched_ctl; - // int rrc_status = RRC_IDLE; - COMMON_channels_t *cc; + int N_RB_DL; + int transmission_mode = 0; + UE_sched_ctrl *ue_sched_ctl; + // int rrc_status = RRC_IDLE; + COMMON_channels_t *cc; #ifdef TM5 - int harq_pid1=0; - int round1=0,round2=0; - int UE_id2; - uint16_t i1,i2,i3; - rnti_t rnti1,rnti2; - LTE_eNB_UE_stats *eNB_UE_stats1 = NULL; - LTE_eNB_UE_stats *eNB_UE_stats2 = NULL; - UE_sched_ctrl *ue_sched_ctl1,*ue_sched_ctl2; + int harq_pid1 = 0; + int round1 = 0, round2 = 0; + int UE_id2; + uint16_t i1, i2, i3; + rnti_t rnti1, rnti2; + LTE_eNB_UE_stats *eNB_UE_stats1 = NULL; + LTE_eNB_UE_stats *eNB_UE_stats2 = NULL; + UE_sched_ctrl *ue_sched_ctl1, *ue_sched_ctl2; #endif - for (CC_id=0; CC_id0) // If this CC is allocated for MBSFN skip it here - continue; - - - - min_rb_unit[CC_id]=get_min_rb_unit(Mod_id,CC_id); - - for (i = 0; i < NUMBER_OF_UE_MAX; i++) { - if (UE_list->active[i] != TRUE) continue; - - UE_id = i; - // Initialize scheduling information for all active UEs - - - - dlsch_scheduler_pre_processor_reset(Mod_id, - UE_id, - CC_id, - frameP, - subframeP, - N_RBG[CC_id], - nb_rbs_required, - nb_rbs_required_remaining, - rballoc_sub, - MIMO_mode_indicator); - - } - } - - - // Store the DLSCH buffer for each logical channel - store_dlsch_buffer (Mod_id,frameP,subframeP); - - - - // Calculate the number of RBs required by each UE on the basis of logical channel's buffer - assign_rbs_required (Mod_id,frameP,subframeP,nb_rbs_required,min_rb_unit); - - - - // Sorts the user on the basis of dlsch logical channel buffer and CQI - sort_UEs (Mod_id,frameP,subframeP); - - - - total_ue_count =0; - - // loop over all active UEs - for (i=UE_list->head; i>=0; i=UE_list->next[i]) { - rnti = UE_RNTI(Mod_id,i); - - if(rnti == NOT_A_RNTI) - continue; - if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) - continue; - UE_id = i; - - for (ii=0; iiordered_CCids[ii][UE_id]; - ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - cc=&RC.mac[Mod_id]->common_channels[ii]; - if (cc->tdd_Config) harq_pid = ((frameP*10)+subframeP)%10; - else harq_pid = ((frameP*10)+subframeP)&7; - round = ue_sched_ctl->round[CC_id][harq_pid]; - - average_rbs_per_user[CC_id]=0; - - - if(round != 8) { - nb_rbs_required[CC_id][UE_id] = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid]; - } - - //nb_rbs_required_remaining[UE_id] = nb_rbs_required[UE_id]; - if (nb_rbs_required[CC_id][UE_id] > 0) { - total_ue_count = total_ue_count + 1; - } - - - // hypothetical assignment - /* - * If schedule is enabled and if the priority of the UEs is modified - * The average rbs per logical channel per user will depend on the level of - * priority. Concerning the hypothetical assignement, we should assign more - * rbs to prioritized users. Maybe, we can do a mapping between the - * average rbs per user and the level of priority or multiply the average rbs - * per user by a coefficient which represents the degree of priority. - */ - - N_RB_DL = to_prb(RC.mac[Mod_id]->common_channels[CC_id].mib->message.dl_Bandwidth); - - if (total_ue_count == 0) { - average_rbs_per_user[CC_id] = 0; - } else if( (min_rb_unit[CC_id] * total_ue_count) <= (N_RB_DL) ) { - average_rbs_per_user[CC_id] = (uint16_t) floor(N_RB_DL/total_ue_count); - } else { - average_rbs_per_user[CC_id] = min_rb_unit[CC_id]; // consider the total number of use that can be scheduled UE - } - } - } - - // note: nb_rbs_required is assigned according to total_buffer_dl - // extend nb_rbs_required to capture per LCID RB required - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - rnti = UE_RNTI(Mod_id,i); - - if(rnti == NOT_A_RNTI) - continue; - if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) - continue; - - for (ii=0; iiordered_CCids[ii][i]; - ue_sched_ctl = &UE_list->UE_sched_ctrl[i]; - round = ue_sched_ctl->round[CC_id][harq_pid]; - - // control channel or retransmission - /* TODO: do we have to check for retransmission? */ - if (mac_eNB_get_rrc_status(Mod_id,rnti) < RRC_RECONFIGURED || round > 0) { - nb_rbs_required_remaining_1[CC_id][i] = nb_rbs_required[CC_id][i]; - } else { - nb_rbs_required_remaining_1[CC_id][i] = cmin(average_rbs_per_user[CC_id],nb_rbs_required[CC_id][i]); - - } - } - } - - //Allocation to UEs is done in 2 rounds, - // 1st stage: average number of RBs allocated to each UE - // 2nd stage: remaining RBs are allocated to high priority UEs - for(r1=0; r1<2; r1++) { - - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - for (ii=0; iiordered_CCids[ii][i]; - - if(r1 == 0) { - nb_rbs_required_remaining[CC_id][i] = nb_rbs_required_remaining_1[CC_id][i]; - } else { // rb required based only on the buffer - rb allloctaed in the 1st round + extra reaming rb form the 1st round - nb_rbs_required_remaining[CC_id][i] = nb_rbs_required[CC_id][i]-nb_rbs_required_remaining_1[CC_id][i]+nb_rbs_required_remaining[CC_id][i]; -if (nb_rbs_required_remaining[CC_id][i]<0) abort(); - } - - if (nb_rbs_required[CC_id][i]> 0 ) - LOG_D(MAC,"round %d : nb_rbs_required_remaining[%d][%d]= %d (remaining_1 %d, required %d, pre_nb_available_rbs %d, N_RBG %d, rb_unit %d)\n", - r1, CC_id, i, - nb_rbs_required_remaining[CC_id][i], - nb_rbs_required_remaining_1[CC_id][i], - nb_rbs_required[CC_id][i], - UE_list->UE_sched_ctrl[i].pre_nb_available_rbs[CC_id], - N_RBG[CC_id], - min_rb_unit[CC_id]); - - } - } - - if (total_ue_count > 0 ) { - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - UE_id = i; - - for (ii=0; iiordered_CCids[ii][UE_id]; - ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - round = ue_sched_ctl->round[CC_id][harq_pid]; - - rnti = UE_RNTI(Mod_id,UE_id); - - // LOG_D(MAC,"UE %d rnti 0x\n", UE_id, rnti ); - if(rnti == NOT_A_RNTI) - continue; - if (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync == 1) + if (mbsfn_flag[CC_id] > 0) // If this CC is allocated for MBSFN skip it here continue; - transmission_mode = get_tmode(Mod_id,CC_id,UE_id); - // mac_xface->get_ue_active_harq_pid(Mod_id,CC_id,rnti,frameP,subframeP,&harq_pid,&round,0); - //rrc_status = mac_eNB_get_rrc_status(Mod_id,rnti); - /* 1st allocate for the retx */ - // retransmission in data channels - // control channel in the 1st transmission - // data channel for all TM - LOG_T(MAC,"calling dlsch_scheduler_pre_processor_allocate .. \n "); - dlsch_scheduler_pre_processor_allocate (Mod_id, - UE_id, - CC_id, - N_RBG[CC_id], - transmission_mode, - min_rb_unit[CC_id], - to_prb(RC.mac[Mod_id]->common_channels[CC_id].mib->message.dl_Bandwidth), - nb_rbs_required, - nb_rbs_required_remaining, - rballoc_sub, - MIMO_mode_indicator); + + min_rb_unit[CC_id] = get_min_rb_unit(Mod_id, CC_id); + + for (i = 0; i < NUMBER_OF_UE_MAX; i++) { + if (UE_list->active[i] != TRUE) + continue; + + UE_id = i; + // Initialize scheduling information for all active UEs + + + + dlsch_scheduler_pre_processor_reset(Mod_id, + UE_id, + CC_id, + frameP, + subframeP, + N_RBG[CC_id], + nb_rbs_required, + nb_rbs_required_remaining, + rballoc_sub, + MIMO_mode_indicator); + + } + } + + + // Store the DLSCH buffer for each logical channel + store_dlsch_buffer(Mod_id, frameP, subframeP); + + + + // Calculate the number of RBs required by each UE on the basis of logical channel's buffer + assign_rbs_required(Mod_id, frameP, subframeP, nb_rbs_required, + min_rb_unit); + + + + // Sorts the user on the basis of dlsch logical channel buffer and CQI + sort_UEs(Mod_id, frameP, subframeP); + + + + total_ue_count = 0; + + // loop over all active UEs + for (i = UE_list->head; i >= 0; i = UE_list->next[i]) { + rnti = UE_RNTI(Mod_id, i); + + if (rnti == NOT_A_RNTI) + continue; + if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) + continue; + UE_id = i; + + for (ii = 0; ii < UE_num_active_CC(UE_list, UE_id); ii++) { + CC_id = UE_list->ordered_CCids[ii][UE_id]; + ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + cc = &RC.mac[Mod_id]->common_channels[ii]; + if (cc->tdd_Config) + harq_pid = ((frameP * 10) + subframeP) % 10; + else + harq_pid = ((frameP * 10) + subframeP) & 7; + round = ue_sched_ctl->round[CC_id][harq_pid]; + + average_rbs_per_user[CC_id] = 0; + + + if (round != 8) { + nb_rbs_required[CC_id][UE_id] = + UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid]; + } + //nb_rbs_required_remaining[UE_id] = nb_rbs_required[UE_id]; + if (nb_rbs_required[CC_id][UE_id] > 0) { + total_ue_count = total_ue_count + 1; + } + // hypothetical assignment + /* + * If schedule is enabled and if the priority of the UEs is modified + * The average rbs per logical channel per user will depend on the level of + * priority. Concerning the hypothetical assignement, we should assign more + * rbs to prioritized users. Maybe, we can do a mapping between the + * average rbs per user and the level of priority or multiply the average rbs + * per user by a coefficient which represents the degree of priority. + */ + + N_RB_DL = + to_prb(RC.mac[Mod_id]->common_channels[CC_id].mib-> + message.dl_Bandwidth); + + if (total_ue_count == 0) { + average_rbs_per_user[CC_id] = 0; + } else if ((min_rb_unit[CC_id] * total_ue_count) <= (N_RB_DL)) { + average_rbs_per_user[CC_id] = + (uint16_t) floor(N_RB_DL / total_ue_count); + } else { + average_rbs_per_user[CC_id] = min_rb_unit[CC_id]; // consider the total number of use that can be scheduled UE + } + } + } + + // note: nb_rbs_required is assigned according to total_buffer_dl + // extend nb_rbs_required to capture per LCID RB required + for (i = UE_list->head; i >= 0; i = UE_list->next[i]) { + rnti = UE_RNTI(Mod_id, i); + + if (rnti == NOT_A_RNTI) + continue; + if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) + continue; + + for (ii = 0; ii < UE_num_active_CC(UE_list, i); ii++) { + CC_id = UE_list->ordered_CCids[ii][i]; + ue_sched_ctl = &UE_list->UE_sched_ctrl[i]; + round = ue_sched_ctl->round[CC_id][harq_pid]; + + // control channel or retransmission + /* TODO: do we have to check for retransmission? */ + if (mac_eNB_get_rrc_status(Mod_id, rnti) < RRC_RECONFIGURED + || round > 0) { + nb_rbs_required_remaining_1[CC_id][i] = + nb_rbs_required[CC_id][i]; + } else { + nb_rbs_required_remaining_1[CC_id][i] = + cmin(average_rbs_per_user[CC_id], + nb_rbs_required[CC_id][i]); + + } + } + } + + //Allocation to UEs is done in 2 rounds, + // 1st stage: average number of RBs allocated to each UE + // 2nd stage: remaining RBs are allocated to high priority UEs + for (r1 = 0; r1 < 2; r1++) { + + for (i = UE_list->head; i >= 0; i = UE_list->next[i]) { + for (ii = 0; ii < UE_num_active_CC(UE_list, i); ii++) { + CC_id = UE_list->ordered_CCids[ii][i]; + + if (r1 == 0) { + nb_rbs_required_remaining[CC_id][i] = + nb_rbs_required_remaining_1[CC_id][i]; + } else { // rb required based only on the buffer - rb allloctaed in the 1st round + extra reaming rb form the 1st round + nb_rbs_required_remaining[CC_id][i] = + nb_rbs_required[CC_id][i] - + nb_rbs_required_remaining_1[CC_id][i] + + nb_rbs_required_remaining[CC_id][i]; + if (nb_rbs_required_remaining[CC_id][i] < 0) + abort(); + } + + if (nb_rbs_required[CC_id][i] > 0) + LOG_D(MAC, + "round %d : nb_rbs_required_remaining[%d][%d]= %d (remaining_1 %d, required %d, pre_nb_available_rbs %d, N_RBG %d, rb_unit %d)\n", + r1, CC_id, i, + nb_rbs_required_remaining[CC_id][i], + nb_rbs_required_remaining_1[CC_id][i], + nb_rbs_required[CC_id][i], + UE_list->UE_sched_ctrl[i]. + pre_nb_available_rbs[CC_id], N_RBG[CC_id], + min_rb_unit[CC_id]); + + } + } + + if (total_ue_count > 0) { + for (i = UE_list->head; i >= 0; i = UE_list->next[i]) { + UE_id = i; + + for (ii = 0; ii < UE_num_active_CC(UE_list, UE_id); ii++) { + CC_id = UE_list->ordered_CCids[ii][UE_id]; + ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + round = ue_sched_ctl->round[CC_id][harq_pid]; + + rnti = UE_RNTI(Mod_id, UE_id); + + // LOG_D(MAC,"UE %d rnti 0x\n", UE_id, rnti ); + if (rnti == NOT_A_RNTI) + continue; + if (UE_list->UE_sched_ctrl[UE_id].ul_out_of_sync == 1) + continue; + + transmission_mode = get_tmode(Mod_id, CC_id, UE_id); + // mac_xface->get_ue_active_harq_pid(Mod_id,CC_id,rnti,frameP,subframeP,&harq_pid,&round,0); + //rrc_status = mac_eNB_get_rrc_status(Mod_id,rnti); + /* 1st allocate for the retx */ + + // retransmission in data channels + // control channel in the 1st transmission + // data channel for all TM + LOG_T(MAC, + "calling dlsch_scheduler_pre_processor_allocate .. \n "); + dlsch_scheduler_pre_processor_allocate(Mod_id, UE_id, + CC_id, + N_RBG[CC_id], + transmission_mode, + min_rb_unit + [CC_id], + to_prb(RC.mac + [Mod_id]->common_channels + [CC_id].mib->message.dl_Bandwidth), + nb_rbs_required, + nb_rbs_required_remaining, + rballoc_sub, + MIMO_mode_indicator); #ifdef TM5 - // data chanel TM5: to be revisted - if ((round == 0 ) && - (transmission_mode == 5) && - (ue_sched_ctl->dl_pow_off[CC_id] != 1)) { + // data chanel TM5: to be revisted + if ((round == 0) && + (transmission_mode == 5) && + (ue_sched_ctl->dl_pow_off[CC_id] != 1)) { - for(j=0; jrballoc_sub_UE[CC_id][j] == 0)) || - ((j < (N_RBG[CC_id]-1)) && (rballoc_sub[CC_id][j+1] == 0) && (ue_sched_ctl->rballoc_sub_UE[CC_id][j+1] == 0)) ) && - (nb_rbs_required_remaining[CC_id][UE_id]>0)) { + if ((((j == (N_RBG[CC_id] - 1)) + && (rballoc_sub[CC_id][j] == 0) + && (ue_sched_ctl-> + rballoc_sub_UE[CC_id][j] == 0)) + || ((j < (N_RBG[CC_id] - 1)) + && (rballoc_sub[CC_id][j + 1] == 0) + && + (ue_sched_ctl->rballoc_sub_UE + [CC_id][j + 1] == 0))) + && (nb_rbs_required_remaining[CC_id][UE_id] + > 0)) { - for (ii = UE_list->next[i+1]; ii >=0; ii=UE_list->next[ii]) { + for (ii = UE_list->next[i + 1]; ii >= 0; + ii = UE_list->next[ii]) { - UE_id2 = ii; - rnti2 = UE_RNTI(Mod_id,UE_id2); - ue_sched_ctl2 = &UE_list->UE_sched_ctrl[UE_id2]; - round2 = ue_sched_ctl2->round[CC_id]; - if(rnti2 == NOT_A_RNTI) - continue; - if (UE_list->UE_sched_ctrl[UE_id2].ul_out_of_sync == 1) - continue; + UE_id2 = ii; + rnti2 = UE_RNTI(Mod_id, UE_id2); + ue_sched_ctl2 = + &UE_list->UE_sched_ctrl[UE_id2]; + round2 = ue_sched_ctl2->round[CC_id]; + if (rnti2 == NOT_A_RNTI) + continue; + if (UE_list-> + UE_sched_ctrl + [UE_id2].ul_out_of_sync == 1) + continue; - eNB_UE_stats2 = UE_list->eNB_UE_stats[CC_id][UE_id2]; - //mac_xface->get_ue_active_harq_pid(Mod_id,CC_id,rnti2,frameP,subframeP,&harq_pid2,&round2,0); + eNB_UE_stats2 = + UE_list-> + eNB_UE_stats[CC_id][UE_id2]; + //mac_xface->get_ue_active_harq_pid(Mod_id,CC_id,rnti2,frameP,subframeP,&harq_pid2,&round2,0); - if ((mac_eNB_get_rrc_status(Mod_id,rnti2) >= RRC_RECONFIGURED) && - (round2==0) && - (get_tmode(Mod_id,CC_id,UE_id2)==5) && - (ue_sched_ctl->dl_pow_off[CC_id] != 1)) { + if ((mac_eNB_get_rrc_status + (Mod_id, + rnti2) >= RRC_RECONFIGURED) + && (round2 == 0) + && + (get_tmode(Mod_id, CC_id, UE_id2) + == 5) + && (ue_sched_ctl-> + dl_pow_off[CC_id] != 1)) { - if( (((j == (N_RBG[CC_id]-1)) && (ue_sched_ctl->rballoc_sub_UE[CC_id][j] == 0)) || - ((j < (N_RBG[CC_id]-1)) && (ue_sched_ctl->rballoc_sub_UE[CC_id][j+1] == 0)) ) && - (nb_rbs_required_remaining[CC_id][UE_id2]>0)) { + if ((((j == (N_RBG[CC_id] - 1)) + && + (ue_sched_ctl->rballoc_sub_UE + [CC_id][j] == 0)) + || ((j < (N_RBG[CC_id] - 1)) + && + (ue_sched_ctl-> + rballoc_sub_UE[CC_id][j + + 1] + == 0))) + && + (nb_rbs_required_remaining + [CC_id] + [UE_id2] > 0)) { - if((((eNB_UE_stats2->DL_pmi_single^eNB_UE_stats1->DL_pmi_single)<<(14-j))&0xc000)== 0x4000) { //MU-MIMO only for 25 RBs configuration + if ((((eNB_UE_stats2-> + DL_pmi_single ^ + eNB_UE_stats1-> + DL_pmi_single) + << (14 - j)) & 0xc000) == 0x4000) { //MU-MIMO only for 25 RBs configuration - rballoc_sub[CC_id][j] = 1; - ue_sched_ctl->rballoc_sub_UE[CC_id][j] = 1; - ue_sched_ctl2->rballoc_sub_UE[CC_id][j] = 1; - MIMO_mode_indicator[CC_id][j] = 0; + rballoc_sub[CC_id][j] = 1; + ue_sched_ctl-> + rballoc_sub_UE[CC_id] + [j] = 1; + ue_sched_ctl2-> + rballoc_sub_UE[CC_id] + [j] = 1; + MIMO_mode_indicator[CC_id] + [j] = 0; - if (j< N_RBG[CC_id]-1) { - rballoc_sub[CC_id][j+1] = 1; - ue_sched_ctl->rballoc_sub_UE[CC_id][j+1] = 1; - ue_sched_ctl2->rballoc_sub_UE[CC_id][j+1] = 1; - MIMO_mode_indicator[CC_id][j+1] = 0; - } + if (j < N_RBG[CC_id] - 1) { + rballoc_sub[CC_id][j + + 1] = + 1; + ue_sched_ctl-> + rballoc_sub_UE + [CC_id][j + 1] = 1; + ue_sched_ctl2->rballoc_sub_UE + [CC_id][j + 1] = 1; + MIMO_mode_indicator + [CC_id][j + 1] + = 0; + } - ue_sched_ctl->dl_pow_off[CC_id] = 0; - ue_sched_ctl2->dl_pow_off[CC_id] = 0; + ue_sched_ctl-> + dl_pow_off[CC_id] + = 0; + ue_sched_ctl2-> + dl_pow_off[CC_id] + = 0; - if ((j == N_RBG[CC_id]-1) && - ((N_RB_DL == 25) || - (N_RB_DL == 50))) { - - nb_rbs_required_remaining[CC_id][UE_id] = nb_rbs_required_remaining[CC_id][UE_id] - min_rb_unit[CC_id]+1; - ue_sched_ctl->pre_nb_available_rbs[CC_id] = ue_sched_ctl->pre_nb_available_rbs[CC_id] + min_rb_unit[CC_id]-1; - nb_rbs_required_remaining[CC_id][UE_id2] = nb_rbs_required_remaining[CC_id][UE_id2] - min_rb_unit[CC_id]+1; - ue_sched_ctl2->pre_nb_available_rbs[CC_id] = ue_sched_ctl2->pre_nb_available_rbs[CC_id] + min_rb_unit[CC_id]-1; - } else { - - nb_rbs_required_remaining[CC_id][UE_id] = nb_rbs_required_remaining[CC_id][UE_id] - 4; - ue_sched_ctl->pre_nb_available_rbs[CC_id] = ue_sched_ctl->pre_nb_available_rbs[CC_id] + 4; - nb_rbs_required_remaining[CC_id][UE_id2] = nb_rbs_required_remaining[CC_id][UE_id2] - 4; - ue_sched_ctl2->pre_nb_available_rbs[CC_id] = ue_sched_ctl2->pre_nb_available_rbs[CC_id] + 4; - } + if ((j == N_RBG[CC_id] - 1) + && ((N_RB_DL == 25) + || (N_RB_DL == + 50))) { - break; - } - } - } - } - } - } - } + nb_rbs_required_remaining + [CC_id][UE_id] = + nb_rbs_required_remaining + [CC_id][UE_id] - + min_rb_unit[CC_id] + + 1; + ue_sched_ctl->pre_nb_available_rbs + [CC_id] = + ue_sched_ctl->pre_nb_available_rbs + [CC_id] + + min_rb_unit[CC_id] + - 1; + nb_rbs_required_remaining + [CC_id][UE_id2] = + nb_rbs_required_remaining + [CC_id][UE_id2] - + min_rb_unit[CC_id] + + 1; + ue_sched_ctl2->pre_nb_available_rbs + [CC_id] = + ue_sched_ctl2->pre_nb_available_rbs + [CC_id] + + min_rb_unit[CC_id] + - 1; + } else { + nb_rbs_required_remaining + [CC_id][UE_id] = + nb_rbs_required_remaining + [CC_id][UE_id] - 4; + ue_sched_ctl->pre_nb_available_rbs + [CC_id] = + ue_sched_ctl->pre_nb_available_rbs + [CC_id] + 4; + nb_rbs_required_remaining + [CC_id][UE_id2] = + nb_rbs_required_remaining + [CC_id][UE_id2] - + 4; + ue_sched_ctl2->pre_nb_available_rbs + [CC_id] = + ue_sched_ctl2->pre_nb_available_rbs + [CC_id] + 4; + } + + break; + } + } + } + } + } + } + } #endif - } - } - } // total_ue_count - } // end of for for r1 and r2 + } + } + } // total_ue_count + } // end of for for r1 and r2 #ifdef TM5 - // This has to be revisited!!!! - for (CC_id=0; CC_id 0) && (i3 == 0)) { + PHY_vars_eNB_g[Mod_id][CC_id]->check_for_SUMIMO_transmissions = + PHY_vars_eNB_g[Mod_id][CC_id]-> + check_for_SUMIMO_transmissions + 1; + } + + if (i3 == N_RBG[CC_id] && i1 == 0 && i2 == 0) { + PHY_vars_eNB_g[Mod_id][CC_id]->FULL_MUMIMO_transmissions = + PHY_vars_eNB_g[Mod_id][CC_id]->FULL_MUMIMO_transmissions + + 1; + } + + if ((i1 < N_RBG[CC_id]) && (i3 > 0)) { + PHY_vars_eNB_g[Mod_id][CC_id]->check_for_MUMIMO_transmissions = + PHY_vars_eNB_g[Mod_id][CC_id]-> + check_for_MUMIMO_transmissions + 1; + } + + PHY_vars_eNB_g[Mod_id][CC_id]->check_for_total_transmissions = + PHY_vars_eNB_g[Mod_id][CC_id]->check_for_total_transmissions + + 1; - for (j=0; j0) && (i3==0)) { - PHY_vars_eNB_g[Mod_id][CC_id]->check_for_SUMIMO_transmissions = PHY_vars_eNB_g[Mod_id][CC_id]->check_for_SUMIMO_transmissions + 1; - } - - if(i3 == N_RBG[CC_id] && i1==0 && i2==0) { - PHY_vars_eNB_g[Mod_id][CC_id]->FULL_MUMIMO_transmissions = PHY_vars_eNB_g[Mod_id][CC_id]->FULL_MUMIMO_transmissions + 1; - } - - if((i1 < N_RBG[CC_id]) && (i3 > 0)) { - PHY_vars_eNB_g[Mod_id][CC_id]->check_for_MUMIMO_transmissions = PHY_vars_eNB_g[Mod_id][CC_id]->check_for_MUMIMO_transmissions + 1; - } - - PHY_vars_eNB_g[Mod_id][CC_id]->check_for_total_transmissions = PHY_vars_eNB_g[Mod_id][CC_id]->check_for_total_transmissions + 1; - - } - #endif - for(i=UE_list->head; i>=0; i=UE_list->next[i]) { - UE_id = i; - ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + for (i = UE_list->head; i >= 0; i = UE_list->next[i]) { + UE_id = i; + ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - for (ii=0; iiordered_CCids[ii][UE_id]; - //PHY_vars_eNB_g[Mod_id]->mu_mimo_mode[UE_id].dl_pow_off = dl_pow_off[UE_id]; + for (ii = 0; ii < UE_num_active_CC(UE_list, UE_id); ii++) { + CC_id = UE_list->ordered_CCids[ii][UE_id]; + //PHY_vars_eNB_g[Mod_id]->mu_mimo_mode[UE_id].dl_pow_off = dl_pow_off[UE_id]; - if (ue_sched_ctl->pre_nb_available_rbs[CC_id] > 0 ) { - LOG_D(MAC,"******************DL Scheduling Information for UE%d ************************\n",UE_id); - LOG_D(MAC,"dl power offset UE%d = %d \n",UE_id,ue_sched_ctl->dl_pow_off[CC_id]); - LOG_D(MAC,"***********RB Alloc for every subband for UE%d ***********\n",UE_id); + if (ue_sched_ctl->pre_nb_available_rbs[CC_id] > 0) { + LOG_D(MAC, + "******************DL Scheduling Information for UE%d ************************\n", + UE_id); + LOG_D(MAC, "dl power offset UE%d = %d \n", UE_id, + ue_sched_ctl->dl_pow_off[CC_id]); + LOG_D(MAC, + "***********RB Alloc for every subband for UE%d ***********\n", + UE_id); - for(j=0; jmu_mimo_mode[UE_id].rballoc_sub[i] = rballoc_sub_UE[CC_id][UE_id][i]; - LOG_D(MAC,"RB Alloc for UE%d and Subband%d = %d\n",UE_id,j,ue_sched_ctl->rballoc_sub_UE[CC_id][j]); - } + for (j = 0; j < N_RBG[CC_id]; j++) { + //PHY_vars_eNB_g[Mod_id]->mu_mimo_mode[UE_id].rballoc_sub[i] = rballoc_sub_UE[CC_id][UE_id][i]; + LOG_D(MAC, "RB Alloc for UE%d and Subband%d = %d\n", + UE_id, j, + ue_sched_ctl->rballoc_sub_UE[CC_id][j]); + } - //PHY_vars_eNB_g[Mod_id]->mu_mimo_mode[UE_id].pre_nb_available_rbs = pre_nb_available_rbs[CC_id][UE_id]; - LOG_D(MAC,"Total RBs allocated for UE%d = %d\n",UE_id,ue_sched_ctl->pre_nb_available_rbs[CC_id]); - } + //PHY_vars_eNB_g[Mod_id]->mu_mimo_mode[UE_id].pre_nb_available_rbs = pre_nb_available_rbs[CC_id][UE_id]; + LOG_D(MAC, "Total RBs allocated for UE%d = %d\n", UE_id, + ue_sched_ctl->pre_nb_available_rbs[CC_id]); + } + } } - } } #define SF0_LIMIT 1 -void dlsch_scheduler_pre_processor_reset (int module_idP, - int UE_id, - uint8_t CC_id, - int frameP, - int subframeP, - int N_RBG, - uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX], - unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]) - +void +dlsch_scheduler_pre_processor_reset(int module_idP, + int UE_id, + uint8_t CC_id, + int frameP, + int subframeP, + int N_RBG, + uint16_t nb_rbs_required[MAX_NUM_CCs] + [NUMBER_OF_UE_MAX], + uint16_t + nb_rbs_required_remaining + [MAX_NUM_CCs][NUMBER_OF_UE_MAX], + unsigned char + rballoc_sub[MAX_NUM_CCs] + [N_RBG_MAX], unsigned char + MIMO_mode_indicator[MAX_NUM_CCs] + [N_RBG_MAX]) { - int i,j; - UE_list_t *UE_list=&RC.mac[module_idP]->UE_list; - UE_sched_ctrl *ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - rnti_t rnti = UE_RNTI(module_idP,UE_id); + int i, j; + UE_list_t *UE_list = &RC.mac[module_idP]->UE_list; + UE_sched_ctrl *ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + rnti_t rnti = UE_RNTI(module_idP, UE_id); - uint8_t *vrb_map = RC.mac[module_idP]->common_channels[CC_id].vrb_map; - int N_RB_DL = to_prb(RC.mac[module_idP]->common_channels[CC_id].mib->message.dl_Bandwidth); - int RBGsize = N_RB_DL/N_RBG,RBGsize_last; + uint8_t *vrb_map = RC.mac[module_idP]->common_channels[CC_id].vrb_map; + int N_RB_DL = + to_prb(RC.mac[module_idP]->common_channels[CC_id].mib-> + message.dl_Bandwidth); + int RBGsize = N_RB_DL / N_RBG, RBGsize_last; #ifdef SF0_LIMIT - int sf0_upper=-1,sf0_lower=-1; + int sf0_upper = -1, sf0_lower = -1; #endif - LOG_D(MAC,"Running preprocessor for UE %d (%x)\n",UE_id,rnti); - // initialize harq_pid and round + LOG_D(MAC, "Running preprocessor for UE %d (%x)\n", UE_id, rnti); + // initialize harq_pid and round - if (ue_sched_ctl->ta_timer) ue_sched_ctl->ta_timer--; + if (ue_sched_ctl->ta_timer) + ue_sched_ctl->ta_timer--; - /* - eNB_UE_stats *eNB_UE_stats; + /* + eNB_UE_stats *eNB_UE_stats; - if (eNB_UE_stats == NULL) - return; + if (eNB_UE_stats == NULL) + return; - - mac_xface->get_ue_active_harq_pid(module_idP,CC_id,rnti, - frameP,subframeP, - &ue_sched_ctl->harq_pid[CC_id], - &ue_sched_ctl->round[CC_id], - openair_harq_DL); - - if (ue_sched_ctl->ta_timer == 0) { + mac_xface->get_ue_active_harq_pid(module_idP,CC_id,rnti, + frameP,subframeP, + &ue_sched_ctl->harq_pid[CC_id], + &ue_sched_ctl->round[CC_id], + openair_harq_DL); - // WE SHOULD PROTECT the eNB_UE_stats with a mutex here ... - ue_sched_ctl->ta_timer = 20; // wait 20 subframes before taking TA measurement from PHY + if (ue_sched_ctl->ta_timer == 0) { + + // WE SHOULD PROTECT the eNB_UE_stats with a mutex here ... + + ue_sched_ctl->ta_timer = 20; // wait 20 subframes before taking TA measurement from PHY + switch (N_RB_DL) { + case 6: + ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update; + break; + + case 15: + ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update/2; + break; + + case 25: + ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update/4; + break; + + case 50: + ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update/8; + break; + + case 75: + ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update/12; + break; + + case 100: + ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update/16; + break; + } + // clear the update in case PHY does not have a new measurement after timer expiry + eNB_UE_stats->timing_advance_update = 0; + } + else { + ue_sched_ctl->ta_timer--; + ue_sched_ctl->ta_update =0; // don't trigger a timing advance command + } + + + if (UE_id==0) { + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_TIMING_ADVANCE,ue_sched_ctl->ta_update); + } + */ + + nb_rbs_required[CC_id][UE_id] = 0; + ue_sched_ctl->pre_nb_available_rbs[CC_id] = 0; + ue_sched_ctl->dl_pow_off[CC_id] = 2; + nb_rbs_required_remaining[CC_id][UE_id] = 0; + switch (N_RB_DL) { case 6: - ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update; - break; - - case 15: - ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update/2; - break; - - case 25: - ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update/4; - break; - - case 50: - ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update/8; - break; - - case 75: - ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update/12; - break; - - case 100: - ue_sched_ctl->ta_update = eNB_UE_stats->timing_advance_update/16; - break; - } - // clear the update in case PHY does not have a new measurement after timer expiry - eNB_UE_stats->timing_advance_update = 0; - } - else { - ue_sched_ctl->ta_timer--; - ue_sched_ctl->ta_update =0; // don't trigger a timing advance command - } - - - if (UE_id==0) { - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_TIMING_ADVANCE,ue_sched_ctl->ta_update); - } - */ - - nb_rbs_required[CC_id][UE_id]=0; - ue_sched_ctl->pre_nb_available_rbs[CC_id] = 0; - ue_sched_ctl->dl_pow_off[CC_id] = 2; - nb_rbs_required_remaining[CC_id][UE_id] = 0; - - switch (N_RB_DL) { - case 6: RBGsize = 1; RBGsize_last = 1; break; - case 15: RBGsize = 2; RBGsize_last = 1; break; - case 25: RBGsize = 2; RBGsize_last = 1; break; - case 50: RBGsize = 3; RBGsize_last = 2; break; - case 75: RBGsize = 4; RBGsize_last = 3; break; - case 100: RBGsize = 4; RBGsize_last = 4; break; - default: AssertFatal(1==0,"unsupported RBs (%d)\n", N_RB_DL); - } - -#ifdef SF0_LIMIT - switch (N_RBG) { - case 6: - sf0_lower=0; - sf0_upper=5; - break; - case 8: - sf0_lower=2; - sf0_upper=5; - break; - case 13: - sf0_lower=4; - sf0_upper=7; - break; - case 17: - sf0_lower=7; - sf0_upper=9; - break; - case 25: - sf0_lower=11; - sf0_upper=13; - break; - default: AssertFatal(1==0,"unsupported RBs (%d)\n", N_RB_DL); - } -#endif - // Initialize Subbands according to VRB map - for (i=0; irballoc_sub_UE[CC_id][i] = 0; - rballoc_sub[CC_id][i] = 0; -#ifdef SF0_LIMIT - // for avoiding 6+ PRBs around DC in subframe 0 (avoid excessive errors) - /* TODO: make it proper - allocate those RBs, do not "protect" them, but - * compute number of available REs and limit MCS according to the - * TBS table 36.213 7.1.7.2.1-1 (can be done after pre-processor) - */ - if (subframeP==0 && - i >= sf0_lower && i <= sf0_upper) - rballoc_sub[CC_id][i]=1; -#endif - // for SI-RNTI,RA-RNTI and P-RNTI allocations - for (j = 0; j < rb_size; j++) { - if (vrb_map[j+(i*RBGsize)] != 0) { - rballoc_sub[CC_id][i] = 1; - LOG_D(MAC,"Frame %d, subframe %d : vrb %d allocated\n",frameP,subframeP,j+(i*RBGsize)); + RBGsize = 1; + RBGsize_last = 1; break; - } + case 15: + RBGsize = 2; + RBGsize_last = 1; + break; + case 25: + RBGsize = 2; + RBGsize_last = 1; + break; + case 50: + RBGsize = 3; + RBGsize_last = 2; + break; + case 75: + RBGsize = 4; + RBGsize_last = 3; + break; + case 100: + RBGsize = 4; + RBGsize_last = 4; + break; + default: + AssertFatal(1 == 0, "unsupported RBs (%d)\n", N_RB_DL); + } + +#ifdef SF0_LIMIT + switch (N_RBG) { + case 6: + sf0_lower = 0; + sf0_upper = 5; + break; + case 8: + sf0_lower = 2; + sf0_upper = 5; + break; + case 13: + sf0_lower = 4; + sf0_upper = 7; + break; + case 17: + sf0_lower = 7; + sf0_upper = 9; + break; + case 25: + sf0_lower = 11; + sf0_upper = 13; + break; + default: + AssertFatal(1 == 0, "unsupported RBs (%d)\n", N_RB_DL); + } +#endif + // Initialize Subbands according to VRB map + for (i = 0; i < N_RBG; i++) { + int rb_size = i == N_RBG - 1 ? RBGsize_last : RBGsize; + + ue_sched_ctl->rballoc_sub_UE[CC_id][i] = 0; + rballoc_sub[CC_id][i] = 0; +#ifdef SF0_LIMIT + // for avoiding 6+ PRBs around DC in subframe 0 (avoid excessive errors) + /* TODO: make it proper - allocate those RBs, do not "protect" them, but + * compute number of available REs and limit MCS according to the + * TBS table 36.213 7.1.7.2.1-1 (can be done after pre-processor) + */ + if (subframeP == 0 && i >= sf0_lower && i <= sf0_upper) + rballoc_sub[CC_id][i] = 1; +#endif + // for SI-RNTI,RA-RNTI and P-RNTI allocations + for (j = 0; j < rb_size; j++) { + if (vrb_map[j + (i * RBGsize)] != 0) { + rballoc_sub[CC_id][i] = 1; + LOG_D(MAC, "Frame %d, subframe %d : vrb %d allocated\n", + frameP, subframeP, j + (i * RBGsize)); + break; + } + } + LOG_D(MAC, "Frame %d Subframe %d CC_id %d RBG %i : rb_alloc %d\n", + frameP, subframeP, CC_id, i, rballoc_sub[CC_id][i]); + MIMO_mode_indicator[CC_id][i] = 2; } - LOG_D(MAC,"Frame %d Subframe %d CC_id %d RBG %i : rb_alloc %d\n",frameP,subframeP,CC_id,i,rballoc_sub[CC_id][i]); - MIMO_mode_indicator[CC_id][i] = 2; - } } -void dlsch_scheduler_pre_processor_allocate (module_id_t Mod_id, - int UE_id, - uint8_t CC_id, - int N_RBG, - int transmission_mode, - int min_rb_unit, - uint8_t N_RB_DL, - uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX], - unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]) +void +dlsch_scheduler_pre_processor_allocate(module_id_t Mod_id, + int UE_id, + uint8_t CC_id, + int N_RBG, + int transmission_mode, + int min_rb_unit, + uint8_t N_RB_DL, + uint16_t + nb_rbs_required[MAX_NUM_CCs] + [NUMBER_OF_UE_MAX], + uint16_t + nb_rbs_required_remaining + [MAX_NUM_CCs] + [NUMBER_OF_UE_MAX], unsigned char + rballoc_sub[MAX_NUM_CCs] + [N_RBG_MAX], unsigned char + MIMO_mode_indicator + [MAX_NUM_CCs][N_RBG_MAX]) { - int i; - UE_list_t *UE_list=&RC.mac[Mod_id]->UE_list; - UE_sched_ctrl *ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; + int i; + UE_list_t *UE_list = &RC.mac[Mod_id]->UE_list; + UE_sched_ctrl *ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id]; - for(i=0; irballoc_sub_UE[CC_id][i] == 0) && - (nb_rbs_required_remaining[CC_id][UE_id]>0) && - (ue_sched_ctl->pre_nb_available_rbs[CC_id] < nb_rbs_required[CC_id][UE_id])) { + if ((rballoc_sub[CC_id][i] == 0) && + (ue_sched_ctl->rballoc_sub_UE[CC_id][i] == 0) && + (nb_rbs_required_remaining[CC_id][UE_id] > 0) && + (ue_sched_ctl->pre_nb_available_rbs[CC_id] < + nb_rbs_required[CC_id][UE_id])) { - // if this UE is not scheduled for TM5 - if (ue_sched_ctl->dl_pow_off[CC_id] != 0 ) { + // if this UE is not scheduled for TM5 + if (ue_sched_ctl->dl_pow_off[CC_id] != 0) { - if ((i == N_RBG-1) && ((N_RB_DL == 25) || (N_RB_DL == 50))) { - if (nb_rbs_required_remaining[CC_id][UE_id] >= min_rb_unit-1){ - rballoc_sub[CC_id][i] = 1; - ue_sched_ctl->rballoc_sub_UE[CC_id][i] = 1; - MIMO_mode_indicator[CC_id][i] = 1; - if (transmission_mode == 5 ) { - ue_sched_ctl->dl_pow_off[CC_id] = 1; - } - nb_rbs_required_remaining[CC_id][UE_id] = nb_rbs_required_remaining[CC_id][UE_id] - min_rb_unit+1; - ue_sched_ctl->pre_nb_available_rbs[CC_id] = ue_sched_ctl->pre_nb_available_rbs[CC_id] + min_rb_unit - 1; - } - } else { - if (nb_rbs_required_remaining[CC_id][UE_id] >= min_rb_unit){ - rballoc_sub[CC_id][i] = 1; - ue_sched_ctl->rballoc_sub_UE[CC_id][i] = 1; - MIMO_mode_indicator[CC_id][i] = 1; - if (transmission_mode == 5 ) { - ue_sched_ctl->dl_pow_off[CC_id] = 1; - } - nb_rbs_required_remaining[CC_id][UE_id] = nb_rbs_required_remaining[CC_id][UE_id] - min_rb_unit; - ue_sched_ctl->pre_nb_available_rbs[CC_id] = ue_sched_ctl->pre_nb_available_rbs[CC_id] + min_rb_unit; - } + if ((i == N_RBG - 1) + && ((N_RB_DL == 25) || (N_RB_DL == 50))) { + if (nb_rbs_required_remaining[CC_id][UE_id] >= + min_rb_unit - 1) { + rballoc_sub[CC_id][i] = 1; + ue_sched_ctl->rballoc_sub_UE[CC_id][i] = 1; + MIMO_mode_indicator[CC_id][i] = 1; + if (transmission_mode == 5) { + ue_sched_ctl->dl_pow_off[CC_id] = 1; + } + nb_rbs_required_remaining[CC_id][UE_id] = + nb_rbs_required_remaining[CC_id][UE_id] - + min_rb_unit + 1; + ue_sched_ctl->pre_nb_available_rbs[CC_id] = + ue_sched_ctl->pre_nb_available_rbs[CC_id] + + min_rb_unit - 1; + } + } else { + if (nb_rbs_required_remaining[CC_id][UE_id] >= + min_rb_unit) { + rballoc_sub[CC_id][i] = 1; + ue_sched_ctl->rballoc_sub_UE[CC_id][i] = 1; + MIMO_mode_indicator[CC_id][i] = 1; + if (transmission_mode == 5) { + ue_sched_ctl->dl_pow_off[CC_id] = 1; + } + nb_rbs_required_remaining[CC_id][UE_id] = + nb_rbs_required_remaining[CC_id][UE_id] - + min_rb_unit; + ue_sched_ctl->pre_nb_available_rbs[CC_id] = + ue_sched_ctl->pre_nb_available_rbs[CC_id] + + min_rb_unit; + } + } + } // dl_pow_off[CC_id][UE_id] ! = 0 } - } // dl_pow_off[CC_id][UE_id] ! = 0 } - } } /// ULSCH PRE_PROCESSOR -void ulsch_scheduler_pre_processor(module_id_t module_idP, - int frameP, - sub_frame_t subframeP, - uint16_t *first_rb) +void +ulsch_scheduler_pre_processor(module_id_t module_idP, + int frameP, + sub_frame_t subframeP, uint16_t * first_rb) { - int16_t i; - uint16_t UE_id,n,r; - uint8_t CC_id, harq_pid; - uint16_t nb_allocated_rbs[MAX_NUM_CCs][NUMBER_OF_UE_MAX],total_allocated_rbs[MAX_NUM_CCs],average_rbs_per_user[MAX_NUM_CCs]; - int16_t total_remaining_rbs[MAX_NUM_CCs]; - uint16_t max_num_ue_to_be_scheduled = 0; - uint16_t total_ue_count = 0; - rnti_t rnti = -1; - UE_list_t *UE_list = &RC.mac[module_idP]->UE_list; - UE_TEMPLATE *UE_template = 0; - int N_RB_DL; - int N_RB_UL; - LOG_D(MAC,"In ulsch_preprocessor: assign max mcs min rb\n"); - // maximize MCS and then allocate required RB according to the buffer occupancy with the limit of max available UL RB - assign_max_mcs_min_rb(module_idP,frameP, subframeP, first_rb); + int16_t i; + uint16_t UE_id, n, r; + uint8_t CC_id, harq_pid; + uint16_t nb_allocated_rbs[MAX_NUM_CCs][NUMBER_OF_UE_MAX], + total_allocated_rbs[MAX_NUM_CCs], + average_rbs_per_user[MAX_NUM_CCs]; + int16_t total_remaining_rbs[MAX_NUM_CCs]; + uint16_t max_num_ue_to_be_scheduled = 0; + uint16_t total_ue_count = 0; + rnti_t rnti = -1; + UE_list_t *UE_list = &RC.mac[module_idP]->UE_list; + UE_TEMPLATE *UE_template = 0; + int N_RB_DL; + int N_RB_UL; + LOG_D(MAC, "In ulsch_preprocessor: assign max mcs min rb\n"); + // maximize MCS and then allocate required RB according to the buffer occupancy with the limit of max available UL RB + assign_max_mcs_min_rb(module_idP, frameP, subframeP, first_rb); - LOG_D(MAC,"In ulsch_preprocessor: sort ue \n"); - // sort ues - sort_ue_ul (module_idP,frameP, subframeP); + LOG_D(MAC, "In ulsch_preprocessor: sort ue \n"); + // sort ues + sort_ue_ul(module_idP, frameP, subframeP); - // we need to distribute RBs among UEs - // step1: reset the vars - for (CC_id=0; CC_idcommon_channels[CC_id].mib->message.dl_Bandwidth); - N_RB_UL = to_prb(RC.mac[module_idP]->common_channels[CC_id].ul_Bandwidth); - total_allocated_rbs[CC_id] = 0; - total_remaining_rbs[CC_id] = 0; - average_rbs_per_user[CC_id] = 0; + // we need to distribute RBs among UEs + // step1: reset the vars + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + N_RB_DL = + to_prb(RC.mac[module_idP]->common_channels[CC_id].mib-> + message.dl_Bandwidth); + N_RB_UL = + to_prb(RC.mac[module_idP]->common_channels[CC_id]. + ul_Bandwidth); + total_allocated_rbs[CC_id] = 0; + total_remaining_rbs[CC_id] = 0; + average_rbs_per_user[CC_id] = 0; - for (i=UE_list->head_ul; i>=0; i=UE_list->next_ul[i]) { - nb_allocated_rbs[CC_id][i]=0; + for (i = UE_list->head_ul; i >= 0; i = UE_list->next_ul[i]) { + nb_allocated_rbs[CC_id][i] = 0; + } } - } - LOG_D(MAC,"In ulsch_preprocessor: step2 \n"); - // step 2: calculate the average rb per UE - total_ue_count =0; - max_num_ue_to_be_scheduled=0; + LOG_D(MAC, "In ulsch_preprocessor: step2 \n"); + // step 2: calculate the average rb per UE + total_ue_count = 0; + max_num_ue_to_be_scheduled = 0; - for (i=UE_list->head_ul; i>=0; i=UE_list->next_ul[i]) { + for (i = UE_list->head_ul; i >= 0; i = UE_list->next_ul[i]) { - rnti = UE_RNTI(module_idP,i); + rnti = UE_RNTI(module_idP, i); - if (rnti==NOT_A_RNTI) - continue; + if (rnti == NOT_A_RNTI) + continue; - if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) - continue; + if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) + continue; - UE_id = i; + UE_id = i; - LOG_D(MAC,"In ulsch_preprocessor: handling UE %d/%x\n",UE_id,rnti); - for (n=0; nnumactiveULCCs[UE_id]; n++) { - // This is the actual CC_id in the list - CC_id = UE_list->ordered_ULCCids[n][UE_id]; - LOG_D(MAC,"In ulsch_preprocessor: handling UE %d/%x CCid %d\n",UE_id,rnti,CC_id); - UE_template = &UE_list->UE_template[CC_id][UE_id]; - average_rbs_per_user[CC_id]=0; + LOG_D(MAC, "In ulsch_preprocessor: handling UE %d/%x\n", UE_id, + rnti); + for (n = 0; n < UE_list->numactiveULCCs[UE_id]; n++) { + // This is the actual CC_id in the list + CC_id = UE_list->ordered_ULCCids[n][UE_id]; + LOG_D(MAC, + "In ulsch_preprocessor: handling UE %d/%x CCid %d\n", + UE_id, rnti, CC_id); + UE_template = &UE_list->UE_template[CC_id][UE_id]; + average_rbs_per_user[CC_id] = 0; - if (UE_template->pre_allocated_nb_rb_ul > 0) { - total_ue_count+=1; - } - /* - if((mac_xface->get_nCCE_max(module_idP,CC_id,3,subframeP) - nCCE_to_be_used[CC_id]) > (1<pre_allocated_nb_rb_ul > 0) { + total_ue_count += 1; + } + /* + if((mac_xface->get_nCCE_max(module_idP,CC_id,3,subframeP) - nCCE_to_be_used[CC_id]) > (1< 0 ) { - average_rbs_per_user[CC_id] = (uint16_t) floor((N_RB_UL-first_rb[CC_id])/max_num_ue_to_be_scheduled); - } else { - average_rbs_per_user[CC_id]=1; - LOG_W(MAC,"[eNB %d] frame %d subframe %d: UE %d CC %d: can't get average rb per user (should not be here)\n", - module_idP,frameP,subframeP,UE_id,CC_id); - } + if (total_ue_count == 0) { + average_rbs_per_user[CC_id] = 0; + } else if (total_ue_count == 1) { // increase the available RBs, special case, + average_rbs_per_user[CC_id] = + N_RB_UL - first_rb[CC_id] + 1; + } else if ((total_ue_count <= (N_RB_DL - first_rb[CC_id])) + && (total_ue_count <= max_num_ue_to_be_scheduled)) { + average_rbs_per_user[CC_id] = + (uint16_t) floor((N_RB_UL - first_rb[CC_id]) / + total_ue_count); + } else if (max_num_ue_to_be_scheduled > 0) { + average_rbs_per_user[CC_id] = + (uint16_t) floor((N_RB_UL - first_rb[CC_id]) / + max_num_ue_to_be_scheduled); + } else { + average_rbs_per_user[CC_id] = 1; + LOG_W(MAC, + "[eNB %d] frame %d subframe %d: UE %d CC %d: can't get average rb per user (should not be here)\n", + module_idP, frameP, subframeP, UE_id, CC_id); + } + } } - } - if (total_ue_count > 0) - LOG_D(MAC,"[eNB %d] Frame %d subframe %d: total ue to be scheduled %d/%d\n", - module_idP, frameP, subframeP,total_ue_count, max_num_ue_to_be_scheduled); + if (total_ue_count > 0) + LOG_D(MAC, + "[eNB %d] Frame %d subframe %d: total ue to be scheduled %d/%d\n", + module_idP, frameP, subframeP, total_ue_count, + max_num_ue_to_be_scheduled); - //LOG_D(MAC,"step3\n"); + //LOG_D(MAC,"step3\n"); - // step 3: assigne RBS - for (i=UE_list->head_ul; i>=0; i=UE_list->next_ul[i]) { - rnti = UE_RNTI(module_idP,i); + // step 3: assigne RBS + for (i = UE_list->head_ul; i >= 0; i = UE_list->next_ul[i]) { + rnti = UE_RNTI(module_idP, i); - if (rnti==NOT_A_RNTI) - continue; - if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) - continue; + if (rnti == NOT_A_RNTI) + continue; + if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) + continue; - UE_id = i; + UE_id = i; - for (n=0; nnumactiveULCCs[UE_id]; n++) { - // This is the actual CC_id in the list - CC_id = UE_list->ordered_ULCCids[n][UE_id]; - harq_pid = subframe2harqpid(&RC.mac[module_idP]->common_channels[CC_id],frameP,subframeP); + for (n = 0; n < UE_list->numactiveULCCs[UE_id]; n++) { + // This is the actual CC_id in the list + CC_id = UE_list->ordered_ULCCids[n][UE_id]; + harq_pid = + subframe2harqpid(&RC.mac[module_idP]-> + common_channels[CC_id], frameP, + subframeP); - // mac_xface->get_ue_active_harq_pid(module_idP,CC_id,rnti,frameP,subframeP,&harq_pid,&round,openair_harq_UL); + // mac_xface->get_ue_active_harq_pid(module_idP,CC_id,rnti,frameP,subframeP,&harq_pid,&round,openair_harq_UL); - if(UE_list->UE_sched_ctrl[UE_id].round_UL[CC_id]>0) { - nb_allocated_rbs[CC_id][UE_id] = UE_list->UE_template[CC_id][UE_id].nb_rb_ul[harq_pid]; - } else { - nb_allocated_rbs[CC_id][UE_id] = cmin(UE_list->UE_template[CC_id][UE_id].pre_allocated_nb_rb_ul, average_rbs_per_user[CC_id]); - } + if (UE_list->UE_sched_ctrl[UE_id].round_UL[CC_id] > 0) { + nb_allocated_rbs[CC_id][UE_id] = + UE_list->UE_template[CC_id][UE_id].nb_rb_ul[harq_pid]; + } else { + nb_allocated_rbs[CC_id][UE_id] = + cmin(UE_list-> + UE_template[CC_id][UE_id].pre_allocated_nb_rb_ul, + average_rbs_per_user[CC_id]); + } - total_allocated_rbs[CC_id]+= nb_allocated_rbs[CC_id][UE_id]; - LOG_D(MAC,"In ulsch_preprocessor: assigning %d RBs for UE %d/%x CCid %d, harq_pid %d\n",nb_allocated_rbs[CC_id][UE_id],UE_id,rnti,CC_id,harq_pid); + total_allocated_rbs[CC_id] += nb_allocated_rbs[CC_id][UE_id]; + LOG_D(MAC, + "In ulsch_preprocessor: assigning %d RBs for UE %d/%x CCid %d, harq_pid %d\n", + nb_allocated_rbs[CC_id][UE_id], UE_id, rnti, CC_id, + harq_pid); + } } - } - // step 4: assigne the remaining RBs and set the pre_allocated rbs accordingly - for(r=0; r<2; r++) { + // step 4: assigne the remaining RBs and set the pre_allocated rbs accordingly + for (r = 0; r < 2; r++) { - for (i=UE_list->head_ul; i>=0; i=UE_list->next_ul[i]) { - rnti = UE_RNTI(module_idP,i); + for (i = UE_list->head_ul; i >= 0; i = UE_list->next_ul[i]) { + rnti = UE_RNTI(module_idP, i); - if (rnti==NOT_A_RNTI) - continue; - if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) - continue; - UE_id = i; + if (rnti == NOT_A_RNTI) + continue; + if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) + continue; + UE_id = i; - for (n=0; nnumactiveULCCs[UE_id]; n++) { - // This is the actual CC_id in the list - CC_id = UE_list->ordered_ULCCids[n][UE_id]; - UE_template = &UE_list->UE_template[CC_id][UE_id]; - total_remaining_rbs[CC_id]=N_RB_UL - first_rb[CC_id] - total_allocated_rbs[CC_id]; + for (n = 0; n < UE_list->numactiveULCCs[UE_id]; n++) { + // This is the actual CC_id in the list + CC_id = UE_list->ordered_ULCCids[n][UE_id]; + UE_template = &UE_list->UE_template[CC_id][UE_id]; + total_remaining_rbs[CC_id] = + N_RB_UL - first_rb[CC_id] - total_allocated_rbs[CC_id]; - if (total_ue_count == 1 ) { - total_remaining_rbs[CC_id]+=1; - } + if (total_ue_count == 1) { + total_remaining_rbs[CC_id] += 1; + } - if ( r == 0 ) { - while ( (UE_template->pre_allocated_nb_rb_ul > 0 ) && - (nb_allocated_rbs[CC_id][UE_id] < UE_template->pre_allocated_nb_rb_ul) && - (total_remaining_rbs[CC_id] > 0)) { - nb_allocated_rbs[CC_id][UE_id] = cmin(nb_allocated_rbs[CC_id][UE_id]+1,UE_template->pre_allocated_nb_rb_ul); - total_remaining_rbs[CC_id]--; - total_allocated_rbs[CC_id]++; - } - } else { - UE_template->pre_allocated_nb_rb_ul= nb_allocated_rbs[CC_id][UE_id]; - LOG_D(MAC,"******************UL Scheduling Information for UE%d CC_id %d ************************\n",UE_id, CC_id); - LOG_D(MAC,"[eNB %d] total RB allocated for UE%d CC_id %d = %d\n", module_idP, UE_id, CC_id, UE_template->pre_allocated_nb_rb_ul); - } - } + if (r == 0) { + while ((UE_template->pre_allocated_nb_rb_ul > 0) && + (nb_allocated_rbs[CC_id][UE_id] < + UE_template->pre_allocated_nb_rb_ul) + && (total_remaining_rbs[CC_id] > 0)) { + nb_allocated_rbs[CC_id][UE_id] = + cmin(nb_allocated_rbs[CC_id][UE_id] + 1, + UE_template->pre_allocated_nb_rb_ul); + total_remaining_rbs[CC_id]--; + total_allocated_rbs[CC_id]++; + } + } else { + UE_template->pre_allocated_nb_rb_ul = + nb_allocated_rbs[CC_id][UE_id]; + LOG_D(MAC, + "******************UL Scheduling Information for UE%d CC_id %d ************************\n", + UE_id, CC_id); + LOG_D(MAC, + "[eNB %d] total RB allocated for UE%d CC_id %d = %d\n", + module_idP, UE_id, CC_id, + UE_template->pre_allocated_nb_rb_ul); + } + } + } } - } - for (CC_id=0; CC_id0) { - LOG_D(MAC,"[eNB %d] total RB allocated for all UEs = %d/%d\n", module_idP, total_allocated_rbs[CC_id], N_RB_UL - first_rb[CC_id]); + if (total_allocated_rbs[CC_id] > 0) { + LOG_D(MAC, "[eNB %d] total RB allocated for all UEs = %d/%d\n", + module_idP, total_allocated_rbs[CC_id], + N_RB_UL - first_rb[CC_id]); + } } - } } -void assign_max_mcs_min_rb(module_id_t module_idP,int frameP, sub_frame_t subframeP, uint16_t *first_rb) +void +assign_max_mcs_min_rb(module_id_t module_idP, int frameP, + sub_frame_t subframeP, uint16_t * first_rb) { - int i; - uint16_t n,UE_id; - uint8_t CC_id; - rnti_t rnti = -1; - int mcs; - int rb_table_index=0,tbs,tx_power; - eNB_MAC_INST *eNB = RC.mac[module_idP]; - UE_list_t *UE_list = &eNB->UE_list; + int i; + uint16_t n, UE_id; + uint8_t CC_id; + rnti_t rnti = -1; + int mcs; + int rb_table_index = 0, tbs, tx_power; + eNB_MAC_INST *eNB = RC.mac[module_idP]; + UE_list_t *UE_list = &eNB->UE_list; - UE_TEMPLATE *UE_template; - int Ncp; - int N_RB_UL; + UE_TEMPLATE *UE_template; + int Ncp; + int N_RB_UL; - for (i = 0; i < NUMBER_OF_UE_MAX; i++) { - if (UE_list->active[i] != TRUE) continue; + for (i = 0; i < NUMBER_OF_UE_MAX; i++) { + if (UE_list->active[i] != TRUE) + continue; - rnti = UE_RNTI(module_idP,i); + rnti = UE_RNTI(module_idP, i); - if (rnti==NOT_A_RNTI) - continue; - if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) - continue; + if (rnti == NOT_A_RNTI) + continue; + if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) + continue; - if (UE_list->UE_sched_ctrl[i].phr_received == 1) - mcs = 20; // if we've received the power headroom information the UE, we can go to maximum mcs - else - mcs = 10; // otherwise, limit to QPSK PUSCH + if (UE_list->UE_sched_ctrl[i].phr_received == 1) + mcs = 20; // if we've received the power headroom information the UE, we can go to maximum mcs + else + mcs = 10; // otherwise, limit to QPSK PUSCH - UE_id = i; + UE_id = i; - for (n=0; nnumactiveULCCs[UE_id]; n++) { - // This is the actual CC_id in the list - CC_id = UE_list->ordered_ULCCids[n][UE_id]; + for (n = 0; n < UE_list->numactiveULCCs[UE_id]; n++) { + // This is the actual CC_id in the list + CC_id = UE_list->ordered_ULCCids[n][UE_id]; - if (CC_id >= MAX_NUM_CCs) { - LOG_E( MAC, "CC_id %u should be < %u, loop n=%u < numactiveULCCs[%u]=%u", - CC_id, - MAX_NUM_CCs, - n, - UE_id, - UE_list->numactiveULCCs[UE_id]); - } + if (CC_id >= MAX_NUM_CCs) { + LOG_E(MAC, + "CC_id %u should be < %u, loop n=%u < numactiveULCCs[%u]=%u", + CC_id, MAX_NUM_CCs, n, UE_id, + UE_list->numactiveULCCs[UE_id]); + } - AssertFatal( CC_id < MAX_NUM_CCs, "CC_id %u should be < %u, loop n=%u < numactiveULCCs[%u]=%u", - CC_id, - MAX_NUM_CCs, - n, - UE_id, - UE_list->numactiveULCCs[UE_id]); + AssertFatal(CC_id < MAX_NUM_CCs, + "CC_id %u should be < %u, loop n=%u < numactiveULCCs[%u]=%u", + CC_id, MAX_NUM_CCs, n, UE_id, + UE_list->numactiveULCCs[UE_id]); - UE_template = &UE_list->UE_template[CC_id][UE_id]; + UE_template = &UE_list->UE_template[CC_id][UE_id]; - Ncp = RC.mac[module_idP]->common_channels[CC_id].Ncp; - N_RB_UL = to_prb(RC.mac[module_idP]->common_channels[CC_id].ul_Bandwidth); - // if this UE has UL traffic - if (UE_template->ul_total_buffer > 0 ) { + Ncp = RC.mac[module_idP]->common_channels[CC_id].Ncp; + N_RB_UL = + to_prb(RC.mac[module_idP]->common_channels[CC_id]. + ul_Bandwidth); + // if this UE has UL traffic + if (UE_template->ul_total_buffer > 0) { - tbs = get_TBS_UL(mcs,3)<<3; // 1 or 2 PRB with cqi enabled does not work well! - rb_table_index = 2; + tbs = get_TBS_UL(mcs, 3) << 3; // 1 or 2 PRB with cqi enabled does not work well! + rb_table_index = 2; - // fixme: set use_srs flag - tx_power= estimate_ue_tx_power(tbs,rb_table[rb_table_index],0,Ncp,0); + // fixme: set use_srs flag + tx_power = + estimate_ue_tx_power(tbs, rb_table[rb_table_index], 0, + Ncp, 0); - while ((((UE_template->phr_info - tx_power) < 0 ) || (tbs > UE_template->ul_total_buffer))&& - (mcs > 3)) { - // LOG_I(MAC,"UE_template->phr_info %d tx_power %d mcs %d\n", UE_template->phr_info,tx_power, mcs); - mcs--; - tbs = get_TBS_UL(mcs,rb_table[rb_table_index])<<3; - tx_power = estimate_ue_tx_power(tbs,rb_table[rb_table_index],0,Ncp,0); // fixme: set use_srs - } + while ((((UE_template->phr_info - tx_power) < 0) + || (tbs > UE_template->ul_total_buffer)) + && (mcs > 3)) { + // LOG_I(MAC,"UE_template->phr_info %d tx_power %d mcs %d\n", UE_template->phr_info,tx_power, mcs); + mcs--; + tbs = get_TBS_UL(mcs, rb_table[rb_table_index]) << 3; + tx_power = estimate_ue_tx_power(tbs, rb_table[rb_table_index], 0, Ncp, 0); // fixme: set use_srs + } - while ((tbs < UE_template->ul_total_buffer) && - (rb_table[rb_table_index]<(N_RB_UL-first_rb[CC_id])) && - ((UE_template->phr_info - tx_power) > 0) && - (rb_table_index < 32 )) { - - rb_table_index++; - tbs = get_TBS_UL(mcs,rb_table[rb_table_index])<<3; - tx_power = estimate_ue_tx_power(tbs,rb_table[rb_table_index],0,Ncp,0); - } + while ((tbs < UE_template->ul_total_buffer) && + (rb_table[rb_table_index] < + (N_RB_UL - first_rb[CC_id])) + && ((UE_template->phr_info - tx_power) > 0) + && (rb_table_index < 32)) { - UE_template->ue_tx_power = tx_power; + rb_table_index++; + tbs = get_TBS_UL(mcs, rb_table[rb_table_index]) << 3; + tx_power = + estimate_ue_tx_power(tbs, rb_table[rb_table_index], + 0, Ncp, 0); + } - if (rb_table[rb_table_index]>(N_RB_UL-first_rb[CC_id]-1)) { - rb_table_index--; - } + UE_template->ue_tx_power = tx_power; - // 1 or 2 PRB with cqi enabled does not work well - if (rb_table[rb_table_index]<3) { - rb_table_index=2; //3PRB - } + if (rb_table[rb_table_index] > + (N_RB_UL - first_rb[CC_id] - 1)) { + rb_table_index--; + } + // 1 or 2 PRB with cqi enabled does not work well + if (rb_table[rb_table_index] < 3) { + rb_table_index = 2; //3PRB + } - UE_template->pre_assigned_mcs_ul=mcs; - UE_template->pre_allocated_rb_table_index_ul=rb_table_index; - UE_template->pre_allocated_nb_rb_ul= rb_table[rb_table_index]; - LOG_D(MAC,"[eNB %d] frame %d subframe %d: for UE %d CC %d: pre-assigned mcs %d, pre-allocated rb_table[%d]=%d RBs (phr %d, tx power %d)\n", - module_idP, frameP, subframeP, UE_id, CC_id, - UE_template->pre_assigned_mcs_ul, - UE_template->pre_allocated_rb_table_index_ul, - UE_template->pre_allocated_nb_rb_ul, - UE_template->phr_info,tx_power); - } else { - /* if UE has pending scheduling request then pre-allocate 3 RBs */ - //if (UE_template->ul_active == 1 && UE_template->ul_SR == 1) { - if (UE_is_to_be_scheduled(module_idP, CC_id, i)) { - /* use QPSK mcs */ - UE_template->pre_assigned_mcs_ul = 10; - UE_template->pre_allocated_rb_table_index_ul = 2; - UE_template->pre_allocated_nb_rb_ul = 3; - } else { - UE_template->pre_assigned_mcs_ul = 0; - UE_template->pre_allocated_rb_table_index_ul = -1; - UE_template->pre_allocated_nb_rb_ul = 0; - } - } + UE_template->pre_assigned_mcs_ul = mcs; + UE_template->pre_allocated_rb_table_index_ul = + rb_table_index; + UE_template->pre_allocated_nb_rb_ul = + rb_table[rb_table_index]; + LOG_D(MAC, + "[eNB %d] frame %d subframe %d: for UE %d CC %d: pre-assigned mcs %d, pre-allocated rb_table[%d]=%d RBs (phr %d, tx power %d)\n", + module_idP, frameP, subframeP, UE_id, CC_id, + UE_template->pre_assigned_mcs_ul, + UE_template->pre_allocated_rb_table_index_ul, + UE_template->pre_allocated_nb_rb_ul, + UE_template->phr_info, tx_power); + } else { + /* if UE has pending scheduling request then pre-allocate 3 RBs */ + //if (UE_template->ul_active == 1 && UE_template->ul_SR == 1) { + if (UE_is_to_be_scheduled(module_idP, CC_id, i)) { + /* use QPSK mcs */ + UE_template->pre_assigned_mcs_ul = 10; + UE_template->pre_allocated_rb_table_index_ul = 2; + UE_template->pre_allocated_nb_rb_ul = 3; + } else { + UE_template->pre_assigned_mcs_ul = 0; + UE_template->pre_allocated_rb_table_index_ul = -1; + UE_template->pre_allocated_nb_rb_ul = 0; + } + } + } } - } } struct sort_ue_ul_params { - int module_idP; - int frameP; - int subframeP; + int module_idP; + int frameP; + int subframeP; }; static int ue_ul_compare(const void *_a, const void *_b, void *_params) { - struct sort_ue_ul_params *params = _params; - UE_list_t *UE_list = &RC.mac[params->module_idP]->UE_list; + struct sort_ue_ul_params *params = _params; + UE_list_t *UE_list = &RC.mac[params->module_idP]->UE_list; - int UE_id1 = *(const int *)_a; - int UE_id2 = *(const int *)_b; + int UE_id1 = *(const int *) _a; + int UE_id2 = *(const int *) _b; - int rnti1 = UE_RNTI(params->module_idP, UE_id1); - int pCCid1 = UE_PCCID(params->module_idP, UE_id1); - int round1 = maxround(params->module_idP, rnti1, params->frameP, params->subframeP, 1); + int rnti1 = UE_RNTI(params->module_idP, UE_id1); + int pCCid1 = UE_PCCID(params->module_idP, UE_id1); + int round1 = maxround(params->module_idP, rnti1, params->frameP, + params->subframeP, 1); - int rnti2 = UE_RNTI(params->module_idP, UE_id2); - int pCCid2 = UE_PCCID(params->module_idP, UE_id2); - int round2 = maxround(params->module_idP, rnti2, params->frameP, params->subframeP, 1); + int rnti2 = UE_RNTI(params->module_idP, UE_id2); + int pCCid2 = UE_PCCID(params->module_idP, UE_id2); + int round2 = maxround(params->module_idP, rnti2, params->frameP, + params->subframeP, 1); - if (round1 > round2) return -1; - if (round1 < round2) return 1; + if (round1 > round2) + return -1; + if (round1 < round2) + return 1; - if (UE_list->UE_template[pCCid1][UE_id1].ul_buffer_info[LCGID0] > UE_list->UE_template[pCCid2][UE_id2].ul_buffer_info[LCGID0]) - return -1; - if (UE_list->UE_template[pCCid1][UE_id1].ul_buffer_info[LCGID0] < UE_list->UE_template[pCCid2][UE_id2].ul_buffer_info[LCGID0]) - return 1; + if (UE_list->UE_template[pCCid1][UE_id1].ul_buffer_info[LCGID0] > + UE_list->UE_template[pCCid2][UE_id2].ul_buffer_info[LCGID0]) + return -1; + if (UE_list->UE_template[pCCid1][UE_id1].ul_buffer_info[LCGID0] < + UE_list->UE_template[pCCid2][UE_id2].ul_buffer_info[LCGID0]) + return 1; - if (UE_list->UE_template[pCCid1][UE_id1].ul_total_buffer > UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer) - return -1; - if (UE_list->UE_template[pCCid1][UE_id1].ul_total_buffer < UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer) - return 1; + if (UE_list->UE_template[pCCid1][UE_id1].ul_total_buffer > + UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer) + return -1; + if (UE_list->UE_template[pCCid1][UE_id1].ul_total_buffer < + UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer) + return 1; - if (UE_list->UE_template[pCCid1][UE_id1].pre_assigned_mcs_ul > UE_list->UE_template[pCCid2][UE_id2].pre_assigned_mcs_ul) - return -1; - if (UE_list->UE_template[pCCid1][UE_id1].pre_assigned_mcs_ul < UE_list->UE_template[pCCid2][UE_id2].pre_assigned_mcs_ul) - return 1; + if (UE_list->UE_template[pCCid1][UE_id1].pre_assigned_mcs_ul > + UE_list->UE_template[pCCid2][UE_id2].pre_assigned_mcs_ul) + return -1; + if (UE_list->UE_template[pCCid1][UE_id1].pre_assigned_mcs_ul < + UE_list->UE_template[pCCid2][UE_id2].pre_assigned_mcs_ul) + return 1; - return 0; + return 0; #if 0 - /* The above order derives from the following. - * The last case is not handled: "if (UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer > 0 )" - * I don't think it makes a big difference. - */ - if(round2 > round1) { - swap_UEs(UE_list,UE_id1,UE_id2,1); - } else if (round2 == round1) { - if (UE_list->UE_template[pCCid1][UE_id1].ul_buffer_info[LCGID0] < UE_list->UE_template[pCCid2][UE_id2].ul_buffer_info[LCGID0]) { - swap_UEs(UE_list,UE_id1,UE_id2,1); - } else if (UE_list->UE_template[pCCid1][UE_id1].ul_total_buffer < UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer) { - swap_UEs(UE_list,UE_id1,UE_id2,1); - } else if (UE_list->UE_template[pCCid1][UE_id1].pre_assigned_mcs_ul < UE_list->UE_template[pCCid2][UE_id2].pre_assigned_mcs_ul) { - if (UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer > 0 ) { - swap_UEs(UE_list,UE_id1,UE_id2,1); - } - } - } + /* The above order derives from the following. + * The last case is not handled: "if (UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer > 0 )" + * I don't think it makes a big difference. + */ + if (round2 > round1) { + swap_UEs(UE_list, UE_id1, UE_id2, 1); + } else if (round2 == round1) { + if (UE_list->UE_template[pCCid1][UE_id1].ul_buffer_info[LCGID0] < + UE_list->UE_template[pCCid2][UE_id2].ul_buffer_info[LCGID0]) { + swap_UEs(UE_list, UE_id1, UE_id2, 1); + } else if (UE_list->UE_template[pCCid1][UE_id1].ul_total_buffer < + UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer) { + swap_UEs(UE_list, UE_id1, UE_id2, 1); + } else if (UE_list->UE_template[pCCid1][UE_id1]. + pre_assigned_mcs_ul < + UE_list->UE_template[pCCid2][UE_id2]. + pre_assigned_mcs_ul) { + if (UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer > 0) { + swap_UEs(UE_list, UE_id1, UE_id2, 1); + } + } + } #endif } -void sort_ue_ul (module_id_t module_idP,int frameP, sub_frame_t subframeP) +void sort_ue_ul(module_id_t module_idP, int frameP, sub_frame_t subframeP) { - int i; - int list[NUMBER_OF_UE_MAX]; - int list_size = 0; - int rnti; - struct sort_ue_ul_params params = { module_idP, frameP, subframeP }; - - UE_list_t *UE_list = &RC.mac[module_idP]->UE_list; - - for (i = 0; i < NUMBER_OF_UE_MAX; i++) { - if (UE_list->active[i] == FALSE) continue; - if ((rnti = UE_RNTI(module_idP, i)) == NOT_A_RNTI) continue; - if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) continue; - - list[list_size] = i; - list_size++; - } - - qsort_r(list, list_size, sizeof(int), ue_ul_compare, ¶ms); - - if (list_size) { - for (i = 0; i < list_size-1; i++) - UE_list->next_ul[list[i]] = list[i+1]; - UE_list->next_ul[list[list_size-1]] = -1; - UE_list->head_ul = list[0]; - } else { - UE_list->head_ul = -1; - } + int i; + int list[NUMBER_OF_UE_MAX]; + int list_size = 0; + int rnti; + struct sort_ue_ul_params params = { module_idP, frameP, subframeP }; + UE_list_t *UE_list = &RC.mac[module_idP]->UE_list; + + for (i = 0; i < NUMBER_OF_UE_MAX; i++) { + if (UE_list->active[i] == FALSE) + continue; + if ((rnti = UE_RNTI(module_idP, i)) == NOT_A_RNTI) + continue; + if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) + continue; + + list[list_size] = i; + list_size++; + } + + qsort_r(list, list_size, sizeof(int), ue_ul_compare, ¶ms); + + if (list_size) { + for (i = 0; i < list_size - 1; i++) + UE_list->next_ul[list[i]] = list[i + 1]; + UE_list->next_ul[list[list_size - 1]] = -1; + UE_list->head_ul = list[0]; + } else { + UE_list->head_ul = -1; + } + #if 0 - int UE_id1,UE_id2; - int pCCid1,pCCid2; - int round1,round2; - int i=0,ii=0; - rnti_t rnti1,rnti2; - - UE_list_t *UE_list = &RC.mac[module_idP]->UE_list; - - for (i=UE_list->head_ul; i>=0; i=UE_list->next_ul[i]) { - - //LOG_I(MAC,"sort ue ul i %d\n",i); - for (ii=UE_list->next_ul[i]; ii>=0; ii=UE_list->next_ul[ii]) { - //LOG_I(MAC,"sort ul ue 2 ii %d\n",ii); - - UE_id1 = i; - rnti1 = UE_RNTI(module_idP,UE_id1); - - if(rnti1 == NOT_A_RNTI) - continue; - if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) - continue; - - - pCCid1 = UE_PCCID(module_idP,UE_id1); - round1 = maxround(module_idP,rnti1,frameP,subframeP,1); - - UE_id2 = ii; - rnti2 = UE_RNTI(module_idP,UE_id2); - - if(rnti2 == NOT_A_RNTI) - continue; - if (UE_list->UE_sched_ctrl[UE_id2].ul_out_of_sync == 1) - continue; - - pCCid2 = UE_PCCID(module_idP,UE_id2); - round2 = maxround(module_idP,rnti2,frameP,subframeP,1); - - if(round2 > round1) { - swap_UEs(UE_list,UE_id1,UE_id2,1); - } else if (round2 == round1) { - if (UE_list->UE_template[pCCid1][UE_id1].ul_buffer_info[LCGID0] < UE_list->UE_template[pCCid2][UE_id2].ul_buffer_info[LCGID0]) { - swap_UEs(UE_list,UE_id1,UE_id2,1); - } else if (UE_list->UE_template[pCCid1][UE_id1].ul_total_buffer < UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer) { - swap_UEs(UE_list,UE_id1,UE_id2,1); - } else if (UE_list->UE_template[pCCid1][UE_id1].pre_assigned_mcs_ul < UE_list->UE_template[pCCid2][UE_id2].pre_assigned_mcs_ul) { - if (UE_list->UE_template[pCCid2][UE_id2].ul_total_buffer > 0 ) { - swap_UEs(UE_list,UE_id1,UE_id2,1); - } - } - } + int UE_id1, UE_id2; + int pCCid1, pCCid2; + int round1, round2; + int i = 0, ii = 0; + rnti_t rnti1, rnti2; + + UE_list_t *UE_list = &RC.mac[module_idP]->UE_list; + + for (i = UE_list->head_ul; i >= 0; i = UE_list->next_ul[i]) { + + //LOG_I(MAC,"sort ue ul i %d\n",i); + for (ii = UE_list->next_ul[i]; ii >= 0; ii = UE_list->next_ul[ii]) { + //LOG_I(MAC,"sort ul ue 2 ii %d\n",ii); + + UE_id1 = i; + rnti1 = UE_RNTI(module_idP, UE_id1); + + if (rnti1 == NOT_A_RNTI) + continue; + if (UE_list->UE_sched_ctrl[i].ul_out_of_sync == 1) + continue; + + + pCCid1 = UE_PCCID(module_idP, UE_id1); + round1 = maxround(module_idP, rnti1, frameP, subframeP, 1); + + UE_id2 = ii; + rnti2 = UE_RNTI(module_idP, UE_id2); + + if (rnti2 == NOT_A_RNTI) + continue; + if (UE_list->UE_sched_ctrl[UE_id2].ul_out_of_sync == 1) + continue; + + pCCid2 = UE_PCCID(module_idP, UE_id2); + round2 = maxround(module_idP, rnti2, frameP, subframeP, 1); + + if (round2 > round1) { + swap_UEs(UE_list, UE_id1, UE_id2, 1); + } else if (round2 == round1) { + if (UE_list-> + UE_template[pCCid1][UE_id1].ul_buffer_info[LCGID0] < + UE_list->UE_template[pCCid2][UE_id2]. + ul_buffer_info[LCGID0]) { + swap_UEs(UE_list, UE_id1, UE_id2, 1); + } else if (UE_list->UE_template[pCCid1][UE_id1]. + ul_total_buffer < + UE_list->UE_template[pCCid2][UE_id2]. + ul_total_buffer) { + swap_UEs(UE_list, UE_id1, UE_id2, 1); + } else if (UE_list-> + UE_template[pCCid1][UE_id1].pre_assigned_mcs_ul + < + UE_list-> + UE_template[pCCid2][UE_id2].pre_assigned_mcs_ul) + { + if (UE_list->UE_template[pCCid2][UE_id2]. + ul_total_buffer > 0) { + swap_UEs(UE_list, UE_id1, UE_id2, 1); + } + } + } + } } - } #endif } diff --git a/openair2/LAYER2/MAC/proto.h b/openair2/LAYER2/MAC/proto.h index b316cbfeeb..bbd6d6a36d 100644 --- a/openair2/LAYER2/MAC/proto.h +++ b/openair2/LAYER2/MAC/proto.h @@ -43,12 +43,11 @@ */ -void schedule_mib(module_id_t module_idP, - frame_t frameP, - sub_frame_t subframeP); +void schedule_mib(module_id_t module_idP, + frame_t frameP, sub_frame_t subframeP); /** \fn void schedule_RA(module_id_t module_idP,frame_t frameP,sub_frame_t subframe); -\brief First stage of Random-Access Scheduling. Loops over the RA_templates and checks if RAR, Msg3 or its retransmission are to be scheduled in the subframe. It returns the total number of PRB used for RA SDUs. For Msg3 it retrieves the L3msg from RRC and fills the appropriate buffers. For the others it just computes the number of PRBs. Each DCI uses 3 PRBs (format 1A) +\brief First stage of Random-Access Scheduling. Loops over the ras and checks if RAR, Msg3 or its retransmission are to be scheduled in the subframe. It returns the total number of PRB used for RA SDUs. For Msg3 it retrieves the L3msg from RRC and fills the appropriate buffers. For the others it just computes the number of PRBs. Each DCI uses 3 PRBs (format 1A) for the message. @param Mod_id Instance ID of eNB @param frame Frame index @@ -56,28 +55,32 @@ for the message. */ -void schedule_RA(module_id_t module_idP,frame_t frameP,sub_frame_t subframe); +void schedule_RA(module_id_t module_idP, frame_t frameP, + sub_frame_t subframe); /** \brief First stage of SI Scheduling. Gets a SI SDU from RRC if available and computes the MCS required to transport it as a function of the SDU length. It assumes a length less than or equal to 64 bytes (MCS 6, 3 PRBs). @param Mod_id Instance ID of eNB @param frame Frame index @param subframe Subframe number on which to act */ -void schedule_SI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP); +void schedule_SI(module_id_t module_idP, frame_t frameP, + sub_frame_t subframeP); /** \brief MBMS scheduling: Checking the position for MBSFN subframes. Create MSI, transfer MCCH from RRC to MAC, transfer MTCHs from RLC to MAC. Multiplexing MSI,MCCH&MTCHs. Return 1 if there are MBSFN data being allocated, otherwise return 0; @param Mod_id Instance ID of eNB @param frame Frame index @param subframe Subframe number on which to act */ -int schedule_MBMS(module_id_t module_idP,uint8_t CC_id, frame_t frameP, sub_frame_t subframe); +int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, + sub_frame_t subframe); /** \brief check the mapping between sf allocation and sync area, Currently only supports 1:1 mapping @param Mod_id Instance ID of eNB @param mbsfn_sync_area index of mbsfn sync area @param[out] index of sf pattern */ -int8_t get_mbsfn_sf_alloction (module_id_t module_idP, uint8_t CC_id, uint8_t mbsfn_sync_area); +int8_t get_mbsfn_sf_alloction(module_id_t module_idP, uint8_t CC_id, + uint8_t mbsfn_sync_area); /** \brief check the mapping between sf allocation and sync area, Currently only supports 1:1 mapping @param Mod_id Instance ID of eNB @@ -85,14 +88,17 @@ int8_t get_mbsfn_sf_alloction (module_id_t module_idP, uint8_t CC_id, uint8_t mb @param eNB_index index of eNB @param[out] index of sf pattern */ -int8_t ue_get_mbsfn_sf_alloction (module_id_t module_idP, uint8_t mbsfn_sync_area, unsigned char eNB_index); +int8_t ue_get_mbsfn_sf_alloction(module_id_t module_idP, + uint8_t mbsfn_sync_area, + unsigned char eNB_index); /** \brief top ULSCH Scheduling for TDD (config 1-6). @param Mod_id Instance ID of eNB @param frame Frame index @param subframe Subframe number on which to act */ -void schedule_ulsch(module_id_t module_idP,frame_t frameP,sub_frame_t subframe); +void schedule_ulsch(module_id_t module_idP, frame_t frameP, + sub_frame_t subframe); /** \brief ULSCH Scheduling per RNTI @param Mod_id Instance ID of eNB @@ -100,7 +106,10 @@ void schedule_ulsch(module_id_t module_idP,frame_t frameP,sub_frame_t subframe); @param subframe Subframe number on which to act @param sched_subframe Subframe number where PUSCH is transmitted (for DAI lookup) */ -void schedule_ulsch_rnti(module_id_t module_idP, frame_t frameP, sub_frame_t subframe, unsigned char sched_subframe, uint16_t *first_rb); +void schedule_ulsch_rnti(module_id_t module_idP, frame_t frameP, + sub_frame_t subframe, + unsigned char sched_subframe, + uint16_t * first_rb); /** \brief Second stage of DLSCH scheduling, after schedule_SI, schedule_RA and schedule_dlsch have been called. This routine first allocates random frequency assignments for SI and RA SDUs using distributed VRB allocations and adds the corresponding DCI SDU to the DCI buffer for PHY. It then loops over the UE specific DCIs previously allocated and fills in the remaining DCI fields related to frequency allocation. It assumes localized allocation of type 0 (DCI.rah=0). The allocation is done for tranmission modes 1,2,4. @param Mod_id Instance of eNB @@ -108,7 +117,8 @@ void schedule_ulsch_rnti(module_id_t module_idP, frame_t frameP, sub_frame_t sub @param subframe Index of subframe @param mbsfn_flag Indicates that this subframe is for MCH/MCCH */ -void fill_DLSCH_dci(module_id_t module_idP,frame_t frameP,sub_frame_t subframe,int *mbsfn_flag); +void fill_DLSCH_dci(module_id_t module_idP, frame_t frameP, + sub_frame_t subframe, int *mbsfn_flag); /** \brief UE specific DLSCH scheduling. Retrieves next ue to be schduled from round-robin scheduler and gets the appropriate harq_pid for the subframe from PHY. If the process is active and requires a retransmission, it schedules the retransmission with the same PRB count and MCS as the first transmission. Otherwise it consults RLC for DCCH/DTCH SDUs (status with maximum number of available PRBS), builds the MAC header (timing advance sent by default) and copies @param Mod_id Instance ID of eNB @@ -117,39 +127,43 @@ void fill_DLSCH_dci(module_id_t module_idP,frame_t frameP,sub_frame_t subframe,i @param mbsfn_flag Indicates that MCH/MCCH is in this subframe */ -void schedule_ue_spec(module_id_t module_idP,frame_t frameP,sub_frame_t subframe,int *mbsfn_flag); +void schedule_ue_spec(module_id_t module_idP, frame_t frameP, + sub_frame_t subframe, int *mbsfn_flag); /** \brief Function for UE/PHY to compute PUSCH transmit power in power-control procedure. @param Mod_id Module id of UE @returns Po_NOMINAL_PUSCH (PREAMBLE_RECEIVED_TARGET_POWER+DELTA_PREAMBLE */ -int8_t get_Po_NOMINAL_PUSCH(module_id_t module_idP,uint8_t CC_id); +int8_t get_Po_NOMINAL_PUSCH(module_id_t module_idP, uint8_t CC_id); /** \brief Function to compute DELTA_PREAMBLE from 36.321 (for RA power ramping procedure and Msg3 PUSCH power control policy) @param Mod_id Module id of UE @returns DELTA_PREAMBLE */ -int8_t get_DELTA_PREAMBLE(module_id_t module_idP,int CC_id); +int8_t get_DELTA_PREAMBLE(module_id_t module_idP, int CC_id); /** \brief Function for compute deltaP_rampup from 36.321 (for RA power ramping procedure and Msg3 PUSCH power control policy) @param Mod_id Module id of UE @param CC_id carrier component id of UE @returns deltaP_rampup */ -int8_t get_deltaP_rampup(module_id_t module_idP,uint8_t CC_id); +int8_t get_deltaP_rampup(module_id_t module_idP, uint8_t CC_id); -uint16_t mac_computeRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs); +uint16_t mac_computeRIV(uint16_t N_RB_DL, uint16_t RBstart, + uint16_t Lcrbs); -void add_msg3(module_id_t module_idP,int CC_id, RA_TEMPLATE *RA_template, frame_t frameP, sub_frame_t subframeP); +void add_msg3(module_id_t module_idP, int CC_id, RA_t * ra, frame_t frameP, + sub_frame_t subframeP); //main.c -int mac_top_init(int eMBMS_active, char *uecap_xer,uint8_t cba_group_active, uint8_t HO_active); +int mac_top_init(int eMBMS_active, char *uecap_xer, + uint8_t cba_group_active, uint8_t HO_active); void mac_top_init_eNB(void); -void mac_init_cell_params(int Mod_idP,int CC_idP); +void mac_init_cell_params(int Mod_idP, int CC_idP); char layer2_init_UE(module_id_t module_idP); @@ -161,19 +175,29 @@ int mac_init_global_param(void); void mac_top_cleanup(void); -void mac_UE_out_of_sync_ind(module_id_t module_idP,frame_t frameP, uint16_t eNB_index); +void mac_UE_out_of_sync_ind(module_id_t module_idP, frame_t frameP, + uint16_t eNB_index); -void clear_nfapi_information(eNB_MAC_INST *eNB,int CC_idP,frame_t frameP,sub_frame_t subframeP); +void clear_nfapi_information(eNB_MAC_INST * eNB, int CC_idP, + frame_t frameP, sub_frame_t subframeP); -void dlsch_scheduler_pre_processor_reset (int module_idP,int UE_id, - uint8_t CC_id, - int frameP, - int subframeP, - int N_RBG, - uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX], - unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]); +void dlsch_scheduler_pre_processor_reset(int module_idP, int UE_id, + uint8_t CC_id, + int frameP, + int subframeP, + int N_RBG, + uint16_t + nb_rbs_required[MAX_NUM_CCs] + [NUMBER_OF_UE_MAX], + uint16_t + nb_rbs_required_remaining + [MAX_NUM_CCs][NUMBER_OF_UE_MAX], + unsigned char + rballoc_sub[MAX_NUM_CCs] + [N_RBG_MAX], + unsigned char + MIMO_mode_indicator[MAX_NUM_CCs] + [N_RBG_MAX]); // eNB functions /* \brief This function assigns pre-available RBS to each UE in specified sub-bands before scheduling is done @@ -184,24 +208,33 @@ void dlsch_scheduler_pre_processor_reset (int module_idP,int UE_id, */ -void dlsch_scheduler_pre_processor (module_id_t module_idP, - frame_t frameP, - sub_frame_t subframe, - int N_RBG[MAX_NUM_CCs], - int *mbsfn_flag); +void dlsch_scheduler_pre_processor(module_id_t module_idP, + frame_t frameP, + sub_frame_t subframe, + int N_RBG[MAX_NUM_CCs], + int *mbsfn_flag); -void dlsch_scheduler_pre_processor_allocate (module_id_t Mod_id, - int UE_id, - uint8_t CC_id, - int N_RBG, - int transmission_mode, - int min_rb_unit, - uint8_t N_RB_DL, - uint16_t nb_rbs_required[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - uint16_t nb_rbs_required_remaining[MAX_NUM_CCs][NUMBER_OF_UE_MAX], - unsigned char rballoc_sub[MAX_NUM_CCs][N_RBG_MAX], - unsigned char MIMO_mode_indicator[MAX_NUM_CCs][N_RBG_MAX]); +void dlsch_scheduler_pre_processor_allocate(module_id_t Mod_id, + int UE_id, + uint8_t CC_id, + int N_RBG, + int transmission_mode, + int min_rb_unit, + uint8_t N_RB_DL, + uint16_t + nb_rbs_required[MAX_NUM_CCs] + [NUMBER_OF_UE_MAX], + uint16_t + nb_rbs_required_remaining + [MAX_NUM_CCs] + [NUMBER_OF_UE_MAX], + unsigned char + rballoc_sub[MAX_NUM_CCs] + [N_RBG_MAX], + unsigned char + MIMO_mode_indicator + [MAX_NUM_CCs][N_RBG_MAX]); /* \brief Function to trigger the eNB scheduling procedure. It is called by PHY at the beginning of each subframe, \f$n$\f and generates all DLSCH allocations for subframe \f$n\f$ and ULSCH allocations for subframe \f$n+k$\f. @@ -209,7 +242,7 @@ void dlsch_scheduler_pre_processor_allocate (module_id_t Mod_id, @param subframe Index of current subframe @param calibration_flag Flag to indicate that eNB scheduler should schedule TDD auto-calibration PUSCH. */ -void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP);//, int calibration_flag); +void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP); //, int calibration_flag); /* \brief Function to indicate a received preamble on PRACH. It initiates the RA procedure. @param Mod_id Instance ID of eNB @@ -218,12 +251,13 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame @param rnti RA rnti corresponding to this PRACH preamble @param rach_resource type (0=non BL/CE,1 CE level 0,2 CE level 1, 3 CE level 2,4 CE level 3) */ -void initiate_ra_proc(module_id_t module_idP,int CC_id,frame_t frameP, sub_frame_t subframeP, uint16_t preamble_index,int16_t timing_offset,uint16_t rnti +void initiate_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP, + sub_frame_t subframeP, uint16_t preamble_index, + int16_t timing_offset, uint16_t rnti #ifdef Rel14 - , - uint8_t rach_resource_type + , uint8_t rach_resource_type #endif - ); + ); /* \brief Function in eNB to fill RAR pdu when requested by PHY. This provides a single RAR SDU for the moment and returns the t-CRNTI. @param Mod_id Instance ID of eNB @@ -231,31 +265,30 @@ void initiate_ra_proc(module_id_t module_idP,int CC_id,frame_t frameP, sub_frame @param N_RB_UL Number of UL resource blocks @returns t_CRNTI */ -unsigned short fill_rar( - const module_id_t module_idP, - const int CC_id, - const frame_t frameP, - uint8_t * const dlsch_buffer, - const uint16_t N_RB_UL, - const uint8_t input_buffer_length -); +unsigned short fill_rar(const module_id_t module_idP, + const int CC_id, + RA_t *ra, + const frame_t frameP, + uint8_t * const dlsch_buffer, + const uint16_t N_RB_UL, + const uint8_t input_buffer_length); #ifdef Rel14 -unsigned short fill_rar_br(eNB_MAC_INST *eNB, +unsigned short fill_rar_br(eNB_MAC_INST * eNB, int CC_id, - RA_TEMPLATE *RA_template, - const frame_t frameP, - const sub_frame_t subframeP, - uint8_t* const dlsch_buffer, - const uint8_t ce_level - ); + RA_t * ra, + const frame_t frameP, + const sub_frame_t subframeP, + uint8_t * const dlsch_buffer, + const uint8_t ce_level); #endif /* \brief Function to indicate a failed RA response. It removes all temporary variables related to the initial connection of a UE @param Mod_id Instance ID of eNB @param preamble_index index of the received RA request. */ -void cancel_ra_proc(module_id_t module_idP,int CC_id,frame_t frameP, uint16_t preamble_index); +void cancel_ra_proc(module_id_t module_idP, int CC_id, frame_t frameP, + uint16_t preamble_index); /* \brief Function used by PHY to inform MAC that an uplink is scheduled for Msg3 in given subframe. This is used so that the MAC @@ -269,12 +302,10 @@ void cancel_ra_proc(module_id_t module_idP,int CC_id,frame_t frameP, uint16_t pr @param Msg3_subframe subframe where scheduling takes place */ void set_msg3_subframe(module_id_t Mod_id, - int CC_id, - int frame, - int subframe, - int rnti, - int Msg3_frame, - int Msg3_subframe); + int CC_id, + int frame, + int subframe, + int rnti, int Msg3_frame, int Msg3_subframe); /* \brief Function to indicate a received SDU on ULSCH. @param Mod_id Instance ID of eNB @@ -286,14 +317,13 @@ void set_msg3_subframe(module_id_t Mod_id, @param ul_cqi Uplink CQI estimate after this pdu (SNR quantized to 8 bits, -64 ... 63.5 dB in .5dB steps) */ void rx_sdu(const module_id_t enb_mod_idP, - const int CC_idP, - const frame_t frameP, + const int CC_idP, + const frame_t frameP, const sub_frame_t subframeP, - const rnti_t rntiP, - uint8_t *sduP, - const uint16_t sdu_lenP, - const uint16_t timing_advance, - const uint8_t ul_cqi); + const rnti_t rntiP, + uint8_t * sduP, + const uint16_t sdu_lenP, + const uint16_t timing_advance, const uint8_t ul_cqi); /* \brief Function to indicate a scheduled schduling request (SR) was received by eNB. @@ -304,7 +334,8 @@ void rx_sdu(const module_id_t enb_mod_idP, @param rnti RNTI of UE transmitting the SR @param ul_cqi SNR measurement of PUCCH (SNR quantized to 8 bits, -64 ... 63.5 dB in .5dB steps) */ -void SR_indication(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_t subframe,rnti_t rnti,uint8_t ul_cqi); +void SR_indication(module_id_t module_idP, int CC_id, frame_t frameP, + sub_frame_t subframe, rnti_t rnti, uint8_t ul_cqi); /* \brief Function to indicate a UL failure was detected by eNB PHY. @param Mod_id Instance ID of eNB @@ -313,7 +344,8 @@ void SR_indication(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_t s @param rnti RNTI of UE transmitting the SR @param subframe Index of subframe where SR was received */ -void UL_failure_indication(module_id_t Mod_id,int CC_id,frame_t frameP,rnti_t rnti,sub_frame_t subframe); +void UL_failure_indication(module_id_t Mod_id, int CC_id, frame_t frameP, + rnti_t rnti, sub_frame_t subframe); /* \brief Function to indicate an HARQ ACK/NAK. @param Mod_id Instance ID of eNB @@ -322,7 +354,9 @@ void UL_failure_indication(module_id_t Mod_id,int CC_id,frame_t frameP,rnti_t rn @param subframeP subframe index @param harq_pdu NFAPI HARQ PDU descriptor */ -void harq_indication(module_id_t mod_idP, int CC_idP, frame_t frameP, sub_frame_t subframeP, nfapi_harq_indication_pdu_t *harq_pdu); +void harq_indication(module_id_t mod_idP, int CC_idP, frame_t frameP, + sub_frame_t subframeP, + nfapi_harq_indication_pdu_t * harq_pdu); /* \brief Function to indicate a received CQI pdu @param Mod_id Instance ID of eNB @@ -332,11 +366,13 @@ void harq_indication(module_id_t mod_idP, int CC_idP, frame_t frameP, sub_frame_ @param rntiP RNTI of incoming CQI information @param ul_cqi_information NFAPI UL CQI measurement */ -void cqi_indication(module_id_t mod_idP, int CC_idP, frame_t frameP, sub_frame_t subframeP, rnti_t rntiP, - nfapi_cqi_indication_rel9_t *rel9,uint8_t *pdu, - nfapi_ul_cqi_information_t *ul_cqi_information); +void cqi_indication(module_id_t mod_idP, int CC_idP, frame_t frameP, + sub_frame_t subframeP, rnti_t rntiP, + nfapi_cqi_indication_rel9_t * rel9, uint8_t * pdu, + nfapi_ul_cqi_information_t * ul_cqi_information); -uint8_t *get_dlsch_sdu(module_id_t module_idP,int CC_id,frame_t frameP,rnti_t rnti,uint8_t TBindex); +uint8_t *get_dlsch_sdu(module_id_t module_idP, int CC_id, frame_t frameP, + rnti_t rnti, uint8_t TBindex); /* \brief Function to retrieve MCH transport block and MCS used for MCH in this MBSFN subframe. Returns null if no MCH is to be transmitted @param Mod_id Instance ID of eNB @@ -345,69 +381,70 @@ uint8_t *get_dlsch_sdu(module_id_t module_idP,int CC_id,frame_t frameP,rnti_t rn @param mcs Pointer to mcs used by PHY (to be filled by MAC) @returns Pointer to MCH transport block and mcs for subframe */ -MCH_PDU *get_mch_sdu( module_id_t Mod_id, int CC_id, frame_t frame, sub_frame_t subframe); +MCH_PDU *get_mch_sdu(module_id_t Mod_id, int CC_id, frame_t frame, + sub_frame_t subframe); -void ue_mac_reset (module_id_t module_idP,uint8_t eNB_index); -void ue_init_mac (module_id_t module_idP); -void init_ue_sched_info(void); -void add_ue_ulsch_info (module_id_t module_idP, int CC_id, int UE_id, sub_frame_t subframe,UE_ULSCH_STATUS status); -void add_ue_dlsch_info (module_id_t module_idP, int CC_id,int UE_id, sub_frame_t subframe,UE_DLSCH_STATUS status); -int find_UE_id (module_id_t module_idP, rnti_t rnti) ; -int find_RA_id (module_id_t mod_idP, int CC_idP, rnti_t rntiP); -rnti_t UE_RNTI (module_id_t module_idP, int UE_id); -int UE_PCCID (module_id_t module_idP, int UE_id); -uint8_t find_active_UEs (module_id_t module_idP); -boolean_t is_UE_active (module_id_t module_idP, int UE_id); -uint8_t get_aggregation (uint8_t bw_index, uint8_t cqi, uint8_t dci_fmt); +void ue_mac_reset(module_id_t module_idP, uint8_t eNB_index); +void ue_init_mac(module_id_t module_idP); +void init_ue_sched_info(void); +void add_ue_ulsch_info(module_id_t module_idP, int CC_id, int UE_id, + sub_frame_t subframe, UE_ULSCH_STATUS status); +void add_ue_dlsch_info(module_id_t module_idP, int CC_id, int UE_id, + sub_frame_t subframe, UE_DLSCH_STATUS status); +int find_UE_id(module_id_t module_idP, rnti_t rnti); +int find_RA_id(module_id_t mod_idP, int CC_idP, rnti_t rntiP); +rnti_t UE_RNTI(module_id_t module_idP, int UE_id); +int UE_PCCID(module_id_t module_idP, int UE_id); +uint8_t find_active_UEs(module_id_t module_idP); +boolean_t is_UE_active(module_id_t module_idP, int UE_id); +uint8_t get_aggregation(uint8_t bw_index, uint8_t cqi, uint8_t dci_fmt); int8_t find_active_UEs_with_traffic(module_id_t module_idP); -void init_CCE_table(int module_idP,int CC_idP); +void init_CCE_table(int module_idP, int CC_idP); int get_nCCE_offset(int *CCE_table, - const unsigned char L, - const int nCCE, - const int common_dci, - const unsigned short rnti, + const unsigned char L, + const int nCCE, + const int common_dci, + const unsigned short rnti, const unsigned char subframe); -int allocate_CCEs(int module_idP, - int CC_idP, - int subframe, - int test_only); +int allocate_CCEs(int module_idP, int CC_idP, int subframe, int test_only); boolean_t CCE_allocation_infeasible(int module_idP, - int CC_idP, - int common_flag, - int subframe, - int aggregation, - int rnti); + int CC_idP, + int common_flag, + int subframe, + int aggregation, int rnti); -void set_ue_dai(sub_frame_t subframeP, - int UE_id, - uint8_t CC_id, - uint8_t tdd_config, - UE_list_t *UE_list); +void set_ue_dai(sub_frame_t subframeP, + int UE_id, + uint8_t CC_id, uint8_t tdd_config, UE_list_t * UE_list); -uint8_t find_num_active_UEs_in_cbagroup(module_id_t module_idP, unsigned char group_id); -uint8_t UE_is_to_be_scheduled(module_id_t module_idP,int CC_id,uint8_t UE_id); +uint8_t find_num_active_UEs_in_cbagroup(module_id_t module_idP, + unsigned char group_id); +uint8_t UE_is_to_be_scheduled(module_id_t module_idP, int CC_id, + uint8_t UE_id); /** \brief Round-robin scheduler for ULSCH traffic. @param Mod_id Instance ID for eNB @param subframe Subframe number on which to act @returns UE index that is to be scheduled if needed/room */ -module_id_t schedule_next_ulue(module_id_t module_idP, int UE_id,sub_frame_t subframe); +module_id_t schedule_next_ulue(module_id_t module_idP, int UE_id, + sub_frame_t subframe); /** \brief Round-robin scheduler for DLSCH traffic. @param Mod_id Instance ID for eNB @param subframe Subframe number on which to act @returns UE index that is to be scheduled if needed/room */ -int schedule_next_dlue(module_id_t module_idP, int CC_id, sub_frame_t subframe); +int schedule_next_dlue(module_id_t module_idP, int CC_id, + sub_frame_t subframe); /* \brief Allocates a set of PRBS for a particular UE. This is a simple function for the moment, later it should process frequency-domain CQI information and/or PMI information. Currently it just returns the first PRBS that are available in the subframe based on the number requested. @param UE_id Index of UE on which to act @@ -416,7 +453,8 @@ int schedule_next_dlue(module_id_t module_idP, int CC_id, sub_frame_t subframe); @param rballoc Pointer to bit-map of current PRB allocation given to previous users/control channels. This is updated for subsequent calls to the routine. @returns an rballoc bitmap for resource type 0 allocation (DCI). */ -uint32_t allocate_prbs(int UE_id,uint8_t nb_rb, int N_RB_DL, uint32_t *rballoc); +uint32_t allocate_prbs(int UE_id, uint8_t nb_rb, int N_RB_DL, + uint32_t * rballoc); /* \fn uint32_t req_new_ulsch(module_id_t module_idP) \brief check for a new transmission in any drb @@ -433,19 +471,25 @@ uint32_t req_new_ulsch(module_id_t module_idP); @param subframe subframe number @returns 0 for no SR, 1 for SR */ -uint32_t ue_get_SR(module_id_t module_idP, int CC_id,frame_t frameP, uint8_t eNB_id,rnti_t rnti,sub_frame_t subframe); +uint32_t ue_get_SR(module_id_t module_idP, int CC_id, frame_t frameP, + uint8_t eNB_id, rnti_t rnti, sub_frame_t subframe); uint8_t get_ue_weight(module_id_t module_idP, int CC_id, int UE_id); // UE functions -void mac_out_of_sync_ind(module_id_t module_idP, frame_t frameP, uint16_t CH_index); +void mac_out_of_sync_ind(module_id_t module_idP, frame_t frameP, + uint16_t CH_index); -void ue_decode_si(module_id_t module_idP, int CC_id,frame_t frame, uint8_t CH_index, void *pdu, uint16_t len); +void ue_decode_si(module_id_t module_idP, int CC_id, frame_t frame, + uint8_t CH_index, void *pdu, uint16_t len); -void ue_decode_p(module_id_t module_idP, int CC_id,frame_t frame, uint8_t CH_index, void *pdu, uint16_t len); +void ue_decode_p(module_id_t module_idP, int CC_id, frame_t frame, + uint8_t CH_index, void *pdu, uint16_t len); -void ue_send_sdu(module_id_t module_idP, uint8_t CC_id,frame_t frame, sub_frame_t subframe, uint8_t *sdu,uint16_t sdu_len,uint8_t CH_index); +void ue_send_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frame, + sub_frame_t subframe, uint8_t * sdu, uint16_t sdu_len, + uint8_t CH_index); #if defined(Rel10) || defined(Rel14) @@ -457,7 +501,9 @@ void ue_send_sdu(module_id_t module_idP, uint8_t CC_id,frame_t frame, sub_frame_ @param eNB_index Index of attached eNB @param sync_area the index of MBSFN sync area */ -void ue_send_mch_sdu(module_id_t module_idP,uint8_t CC_id, frame_t frameP,uint8_t *sdu,uint16_t sdu_len,uint8_t eNB_index,uint8_t sync_area) ; +void ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP, + uint8_t * sdu, uint16_t sdu_len, uint8_t eNB_index, + uint8_t sync_area); /*\brief Function to check if UE PHY needs to decode MCH for MAC. @param Mod_id Index of protocol instance @@ -467,7 +513,9 @@ void ue_send_mch_sdu(module_id_t module_idP,uint8_t CC_id, frame_t frameP,uint8_ @param[out] sync_area return the sync area @param[out] mcch_active flag indicating whether this MCCH is active in this SF */ -int ue_query_mch(uint8_t Mod_id,uint8_t CC_id, uint32_t frame,sub_frame_t subframe, uint8_t eNB_index, uint8_t *sync_area, uint8_t *mcch_active); +int ue_query_mch(uint8_t Mod_id, uint8_t CC_id, uint32_t frame, + sub_frame_t subframe, uint8_t eNB_index, + uint8_t * sync_area, uint8_t * mcch_active); #endif @@ -478,7 +526,10 @@ int ue_query_mch(uint8_t Mod_id,uint8_t CC_id, uint32_t frame,sub_frame_t subfra @param subframe subframe number @returns 0 for no SR, 1 for SR */ -void ue_get_sdu(module_id_t module_idP, int CC_id,frame_t frameP, sub_frame_t subframe, uint8_t eNB_index,uint8_t *ulsch_buffer,uint16_t buflen,uint8_t *access_mode); +void ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP, + sub_frame_t subframe, uint8_t eNB_index, + uint8_t * ulsch_buffer, uint16_t buflen, + uint8_t * access_mode); /* \brief Function called by PHY to retrieve information to be transmitted using the RA procedure. If the UE is not in PUSCH mode for a particular eNB index, this is assumed to be an Msg3 and MAC attempts to retrieves the CCCH message from RRC. If the UE is in PUSCH mode for a particular eNB index and PUCCH format 0 (Scheduling Request) is not activated, the MAC may use this resource for random-access to transmit a BSR along with the C-RNTI control element (see 5.1.4 from 36.321) @param Mod_id Index of UE instance @@ -486,7 +537,9 @@ void ue_get_sdu(module_id_t module_idP, int CC_id,frame_t frameP, sub_frame_t su @param New_Msg3 Flag to indicate this call is for a new Msg3 @param subframe Index of subframe for PRACH transmission (0 ... 9) @returns A pointer to a PRACH_RESOURCES_t */ -PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP,int CC_id,frame_t frameP,uint8_t new_Msg3,sub_frame_t subframe); +PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP, int CC_id, + frame_t frameP, uint8_t new_Msg3, + sub_frame_t subframe); /* \brief Function called by PHY to process the received RAR. It checks that the preamble matches what was sent by the eNB and provides the timing advance and t-CRNTI. @param Mod_id Index of UE instance @@ -501,16 +554,14 @@ random-access procedure @returns timing advance or 0xffff if preamble doesn't match */ uint16_t -ue_process_rar( - const module_id_t module_idP, - const int CC_id, - const frame_t frameP, - const rnti_t ra_rnti, - uint8_t * const dlsch_buffer, - rnti_t * const t_crnti, - const uint8_t preamble_index, - uint8_t* selected_rar_buffer -); +ue_process_rar(const module_id_t module_idP, + const int CC_id, + const frame_t frameP, + const rnti_t ra_rnti, + uint8_t * const dlsch_buffer, + rnti_t * const t_crnti, + const uint8_t preamble_index, + uint8_t * selected_rar_buffer); /* \brief Generate header for UL-SCH. This function parses the desired control elements and sdus and generates the header as described @@ -529,17 +580,17 @@ in the ULSCH buffer. @param post_padding Number of bytes for padding at the end of MAC PDU @returns Number of bytes used for header */ -unsigned char generate_ulsch_header(uint8_t *mac_header, - uint8_t num_sdus, - uint8_t short_padding, - uint16_t *sdu_lengths, - uint8_t *sdu_lcids, - POWER_HEADROOM_CMD *power_headroom, - uint16_t *crnti, - BSR_SHORT *truncated_bsr, - BSR_SHORT *short_bsr, - BSR_LONG *long_bsr, - unsigned short post_padding); +unsigned char generate_ulsch_header(uint8_t * mac_header, + uint8_t num_sdus, + uint8_t short_padding, + uint16_t * sdu_lengths, + uint8_t * sdu_lcids, + POWER_HEADROOM_CMD * power_headroom, + uint16_t * crnti, + BSR_SHORT * truncated_bsr, + BSR_SHORT * short_bsr, + BSR_LONG * long_bsr, + unsigned short post_padding); /* \brief Parse header for UL-SCH. This function parses the received UL-SCH header as described in 36-321 MAC layer specifications. It returns the number of bytes used for the header to be used as an offset for the payload @@ -552,40 +603,46 @@ in the ULSCH buffer. @param rx_lengths Pointer to array of SDU lengths @returns Pointer to payload following header */ -uint8_t *parse_ulsch_header(uint8_t *mac_header, - uint8_t *num_ce, - uint8_t *num_sdu, - uint8_t *rx_ces, - uint8_t *rx_lcids, - uint16_t *rx_lengths, - uint16_t tx_lenght); +uint8_t *parse_ulsch_header(uint8_t * mac_header, + uint8_t * num_ce, + uint8_t * num_sdu, + uint8_t * rx_ces, + uint8_t * rx_lcids, + uint16_t * rx_lengths, uint16_t tx_lenght); int to_prb(int); int to_rbg(int); -int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, uint8_t HO_active); +int l2_init(LTE_DL_FRAME_PARMS * frame_parms, int eMBMS_active, + char *uecap_xer, uint8_t cba_group_active, uint8_t HO_active); int mac_init(void); -int add_new_ue(module_id_t Mod_id, int CC_id, rnti_t rnti,int harq_pid - #ifdef Rel14 - ,uint8_t rach_resource_type - #endif - ); +int add_new_ue(module_id_t Mod_id, int CC_id, rnti_t rnti, int harq_pid +#ifdef Rel14 + , uint8_t rach_resource_type +#endif + ); int rrc_mac_remove_ue(module_id_t Mod_id, rnti_t rntiP); -int maxround(module_id_t Mod_id,uint16_t rnti,int frame,sub_frame_t subframe,uint8_t ul_flag); -void swap_UEs(UE_list_t *listP,int nodeiP, int nodejP, int ul_flag); -int prev(UE_list_t *listP, int nodeP, int ul_flag); -void dump_ue_list(UE_list_t *listP, int ul_flag); -int UE_num_active_CC(UE_list_t *listP,int ue_idP); -int UE_PCCID(module_id_t mod_idP,int ue_idP); +int maxround(module_id_t Mod_id, uint16_t rnti, int frame, + sub_frame_t subframe, uint8_t ul_flag); +void swap_UEs(UE_list_t * listP, int nodeiP, int nodejP, int ul_flag); +int prev(UE_list_t * listP, int nodeP, int ul_flag); +void dump_ue_list(UE_list_t * listP, int ul_flag); +int UE_num_active_CC(UE_list_t * listP, int ue_idP); +int UE_PCCID(module_id_t mod_idP, int ue_idP); rnti_t UE_RNTI(module_id_t mod_idP, int ue_idP); -void ulsch_scheduler_pre_processor(module_id_t module_idP, int frameP, sub_frame_t subframeP, uint16_t *first_rb); -void store_ulsch_buffer(module_id_t module_idP, int frameP, sub_frame_t subframeP); -void sort_ue_ul (module_id_t module_idP,int frameP, sub_frame_t subframeP); -void assign_max_mcs_min_rb(module_id_t module_idP,int frameP, sub_frame_t subframeP,uint16_t *first_rb); -void adjust_bsr_info(int buffer_occupancy, uint16_t TBS, UE_TEMPLATE *UE_template); +void ulsch_scheduler_pre_processor(module_id_t module_idP, int frameP, + sub_frame_t subframeP, + uint16_t * first_rb); +void store_ulsch_buffer(module_id_t module_idP, int frameP, + sub_frame_t subframeP); +void sort_ue_ul(module_id_t module_idP, int frameP, sub_frame_t subframeP); +void assign_max_mcs_min_rb(module_id_t module_idP, int frameP, + sub_frame_t subframeP, uint16_t * first_rb); +void adjust_bsr_info(int buffer_occupancy, uint16_t TBS, + UE_TEMPLATE * UE_template); int phy_stats_exist(module_id_t Mod_id, int rnti); /*! \fn UE_L2_state_t ue_scheduler(const module_id_t module_idP,const frame_t frameP, const sub_frame_t subframe, const lte_subframe_t direction,const uint8_t eNB_index) @@ -599,15 +656,13 @@ int phy_stats_exist(module_id_t Mod_id, int rnti); \param[in] eNB_index instance of eNB @returns L2 state (CONNETION_OK or CONNECTION_LOST or PHY_RESYNCH) */ -UE_L2_STATE_t ue_scheduler( - const module_id_t module_idP, - const frame_t rxFrameP, - const sub_frame_t rxSubframe, - const frame_t txFrameP, - const sub_frame_t txSubframe, - const lte_subframe_t direction, - const uint8_t eNB_index, - const int CC_id); +UE_L2_STATE_t ue_scheduler(const module_id_t module_idP, + const frame_t rxFrameP, + const sub_frame_t rxSubframe, + const frame_t txFrameP, + const sub_frame_t txSubframe, + const lte_subframe_t direction, + const uint8_t eNB_index, const int CC_id); /*! \fn int cba_access(module_id_t module_idP,frame_t frameP,sub_frame_t subframe, uint8_t eNB_index,uint16_t buflen); \brief determine whether to use cba resource to transmit or not @@ -617,7 +672,8 @@ UE_L2_STATE_t ue_scheduler( \param[in] eNB_index instance of eNB \param[out] access(1) or postpone (0) */ -int cba_access(module_id_t module_idP,frame_t frameP,sub_frame_t subframe, uint8_t eNB_index,uint16_t buflen); +int cba_access(module_id_t module_idP, frame_t frameP, + sub_frame_t subframe, uint8_t eNB_index, uint16_t buflen); /*! \fn BSR_SHORT * get_bsr_short(module_id_t module_idP, uint8_t bsr_len) \brief get short bsr level @@ -633,14 +689,15 @@ BSR_SHORT *get_bsr_short(module_id_t module_idP, uint8_t bsr_len); \param[in] bsr_len indicator for no, short, or long bsr \param[out] bsr_l pointer to long bsr */ -BSR_LONG * get_bsr_long(module_id_t module_idP, uint8_t bsr_len); +BSR_LONG *get_bsr_long(module_id_t module_idP, uint8_t bsr_len); /*! \fn boolean_t update_bsr(module_id_t module_idP, frame_t frameP,sub_frame_t subframeP) \brief get the rlc stats and update the bsr level for each lcid \param[in] Mod_id instance of the UE \param[in] frame Frame index */ -boolean_t update_bsr(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP,eNB_index_t eNB_index); +boolean_t update_bsr(module_id_t module_idP, frame_t frameP, + sub_frame_t subframeP, eNB_index_t eNB_index); /*! \fn locate_BsrIndexByBufferSize (int *table, int size, int value) \brief locate the BSR level in the table as defined in 36.321. This function requires that he values in table to be monotonic, either increasing or decreasing. The returned value is not less than 0, nor greater than n-1, where n is the size of table. @@ -649,7 +706,8 @@ boolean_t update_bsr(module_id_t module_idP, frame_t frameP, sub_frame_t subfram \param[in] value Value of the buffer \return the index in the BSR_LEVEL table */ -uint8_t locate_BsrIndexByBufferSize (const uint32_t *table, int size, int value); +uint8_t locate_BsrIndexByBufferSize(const uint32_t * table, int size, + int value); /*! \fn int get_sf_periodicBSRTimer(uint8_t periodicBSR_Timer) @@ -700,7 +758,8 @@ int get_db_dl_PathlossChange(uint8_t dl_PathlossChange); \param[in] CC_id Component Carrier Index \return phr mapping */ -uint8_t get_phr_mapping (module_id_t module_idP, int CC_id, uint8_t eNB_index); +uint8_t get_phr_mapping(module_id_t module_idP, int CC_id, + uint8_t eNB_index); /*! \fn void update_phr (module_id_t module_idP) \brief update/reset the phr timers @@ -708,13 +767,14 @@ uint8_t get_phr_mapping (module_id_t module_idP, int CC_id, uint8_t eNB_index); \param[in] CC_id Component carrier index \return void */ -void update_phr (module_id_t module_idP,int CC_id); +void update_phr(module_id_t module_idP, int CC_id); /*! \brief Function to indicate Msg3 transmission/retransmission which initiates/reset Contention Resolution Timer \param[in] Mod_id Instance index of UE \param[in] eNB_id Index of eNB */ -void Msg3_tx(module_id_t module_idP,uint8_t CC_id,frame_t frameP,uint8_t eNB_id); +void Msg3_tx(module_id_t module_idP, uint8_t CC_id, frame_t frameP, + uint8_t eNB_id); /*! \brief Function to indicate the transmission of msg1/rach @@ -722,12 +782,12 @@ void Msg3_tx(module_id_t module_idP,uint8_t CC_id,frame_t frameP,uint8_t eNB_id) \param[in] eNB_id Index of eNB */ -void Msg1_tx(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id); +void Msg1_tx(module_id_t module_idP, uint8_t CC_id, frame_t frameP, + uint8_t eNB_id); -void dl_phy_sync_success(module_id_t module_idP, - frame_t frameP, - unsigned char eNB_index, - uint8_t first_sync); +void dl_phy_sync_success(module_id_t module_idP, + frame_t frameP, + unsigned char eNB_index, uint8_t first_sync); int dump_eNB_l2_stats(char *buffer, int length); @@ -744,9 +804,11 @@ void add_common_dci(DCI_PDU *DCI_pdu, uint8_t ra_flag); */ -uint32_t allocate_prbs_sub(int nb_rb, int N_RB_DL, int N_RBG, uint8_t *rballoc); +uint32_t allocate_prbs_sub(int nb_rb, int N_RB_DL, int N_RBG, + uint8_t * rballoc); -void update_ul_dci(module_id_t module_idP,uint8_t CC_id,rnti_t rnti,uint8_t dai); +void update_ul_dci(module_id_t module_idP, uint8_t CC_id, rnti_t rnti, + uint8_t dai); int get_bw_index(module_id_t module_id, uint8_t CC_id); @@ -767,14 +829,14 @@ in the DLSCH buffer. @returns Number of bytes used for header */ unsigned char generate_dlsch_header(unsigned char *mac_header, - unsigned char num_sdus, - unsigned short *sdu_lengths, - unsigned char *sdu_lcids, - unsigned char drx_cmd, - unsigned short timing_advance_cmd, - unsigned char *ue_cont_res_id, - unsigned char short_padding, - unsigned short post_padding); + unsigned char num_sdus, + unsigned short *sdu_lengths, + unsigned char *sdu_lcids, + unsigned char drx_cmd, + unsigned short timing_advance_cmd, + unsigned char *ue_cont_res_id, + unsigned char short_padding, + unsigned short post_padding); /** \brief RRC eNB Configuration primitive for PHY/MAC. Allows configuration of PHY/MAC resources based on System Information (SI), RRCConnectionSetup and RRCConnectionReconfiguration messages. @param Mod_id Instance ID of eNB @@ -798,51 +860,55 @@ unsigned char generate_dlsch_header(unsigned char *mac_header, @param sib1_ext_r13 SI Scheduling information for SI-BR UEs */ -int rrc_mac_config_req_eNB(module_id_t module_idP, - int CC_id, - int physCellId, - int p_eNB, - int Ncp, - int eutra_band, - uint32_t dl_CarrierFreq, +int rrc_mac_config_req_eNB(module_id_t module_idP, + int CC_id, + int physCellId, + int p_eNB, + int Ncp, + int eutra_band, uint32_t dl_CarrierFreq, #ifdef Rel14 - int pbch_repetition, + int pbch_repetition, #endif - rnti_t rntiP, - BCCH_BCH_Message_t *mib, - RadioResourceConfigCommonSIB_t *radioResourceConfigCommon, + rnti_t rntiP, + BCCH_BCH_Message_t * mib, + RadioResourceConfigCommonSIB_t * + radioResourceConfigCommon, #ifdef Rel14 - RadioResourceConfigCommonSIB_t *radioResourceConfigCommon_BR, + RadioResourceConfigCommonSIB_t * + radioResourceConfigCommon_BR, #endif - struct PhysicalConfigDedicated *physicalConfigDedicated, + struct PhysicalConfigDedicated + *physicalConfigDedicated, #if defined(Rel10) || defined(Rel14) - SCellToAddMod_r10_t *sCellToAddMod_r10, + SCellToAddMod_r10_t * sCellToAddMod_r10, //struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10, #endif - MeasObjectToAddMod_t **measObj, - MAC_MainConfig_t *mac_MainConfig, - long logicalChannelIdentity, - LogicalChannelConfig_t *logicalChannelConfig, - MeasGapConfig_t *measGapConfig, - TDD_Config_t *tdd_Config, - MobilityControlInfo_t *mobilityControlInfo, - SchedulingInfoList_t *schedulingInfoList, - uint32_t ul_CarrierFreq, - long *ul_Bandwidth, - AdditionalSpectrumEmission_t *additionalSpectrumEmission, - struct MBSFN_SubframeConfigList *mbsfn_SubframeConfigList + MeasObjectToAddMod_t ** measObj, + MAC_MainConfig_t * mac_MainConfig, + long logicalChannelIdentity, + LogicalChannelConfig_t * logicalChannelConfig, + MeasGapConfig_t * measGapConfig, + TDD_Config_t * tdd_Config, + MobilityControlInfo_t * mobilityControlInfo, + SchedulingInfoList_t * schedulingInfoList, + uint32_t ul_CarrierFreq, + long *ul_Bandwidth, + AdditionalSpectrumEmission_t * + additionalSpectrumEmission, + struct MBSFN_SubframeConfigList + *mbsfn_SubframeConfigList #if defined(Rel10) || defined(Rel14) , - uint8_t MBMS_Flag, - MBSFN_AreaInfoList_r9_t *mbsfn_AreaInfoList, - PMCH_InfoList_r9_t *pmch_InfoList - + uint8_t MBMS_Flag, + MBSFN_AreaInfoList_r9_t * mbsfn_AreaInfoList, + PMCH_InfoList_r9_t * pmch_InfoList #endif #ifdef Rel14 , - SystemInformationBlockType1_v1310_IEs_t *sib1_ext_r13 + SystemInformationBlockType1_v1310_IEs_t * + sib1_ext_r13 #endif - ); + ); /** \brief RRC eNB Configuration primitive for PHY/MAC. Allows configuration of PHY/MAC resources based on System Information (SI), RRCConnectionSetup and RRCConnectionReconfiguration messages. @param Mod_id Instance ID of ue @@ -864,132 +930,154 @@ int rrc_mac_config_req_eNB(module_id_t module_idP, @param mbsfn_AreaInfoList pointer to MBSFN Area Info list from SIB13 @param pmch_InfoList pointer to PMCH_InfoList from MBSFNAreaConfiguration Message (MCCH Message) */ -int rrc_mac_config_req_ue(module_id_t module_idP, - int CC_id, - uint8_t eNB_index, - RadioResourceConfigCommonSIB_t *radioResourceConfigCommon, - struct PhysicalConfigDedicated *physicalConfigDedicated, +int rrc_mac_config_req_ue(module_id_t module_idP, + int CC_id, + uint8_t eNB_index, + RadioResourceConfigCommonSIB_t * + radioResourceConfigCommon, + struct PhysicalConfigDedicated + *physicalConfigDedicated, #if defined(Rel10) || defined(Rel14) - SCellToAddMod_r10_t *sCellToAddMod_r10, + SCellToAddMod_r10_t * sCellToAddMod_r10, //struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10, #endif - MeasObjectToAddMod_t **measObj, - MAC_MainConfig_t *mac_MainConfig, + MeasObjectToAddMod_t ** measObj, + MAC_MainConfig_t * mac_MainConfig, long logicalChannelIdentity, - LogicalChannelConfig_t *logicalChannelConfig, - MeasGapConfig_t *measGapConfig, - TDD_Config_t *tdd_Config, - MobilityControlInfo_t *mobilityControlInfo, - uint8_t *SIwindowsize, - uint16_t *SIperiod, - ARFCN_ValueEUTRA_t *ul_CarrierFreq, + LogicalChannelConfig_t * logicalChannelConfig, + MeasGapConfig_t * measGapConfig, + TDD_Config_t * tdd_Config, + MobilityControlInfo_t * mobilityControlInfo, + uint8_t * SIwindowsize, + uint16_t * SIperiod, + ARFCN_ValueEUTRA_t * ul_CarrierFreq, long *ul_Bandwidth, - AdditionalSpectrumEmission_t *additionalSpectrumEmission, - struct MBSFN_SubframeConfigList *mbsfn_SubframeConfigList + AdditionalSpectrumEmission_t * + additionalSpectrumEmission, + struct MBSFN_SubframeConfigList + *mbsfn_SubframeConfigList #if defined(Rel10) || defined(Rel14) , uint8_t MBMS_Flag, - MBSFN_AreaInfoList_r9_t *mbsfn_AreaInfoList, - PMCH_InfoList_r9_t *pmch_InfoList - + MBSFN_AreaInfoList_r9_t * mbsfn_AreaInfoList, + PMCH_InfoList_r9_t * pmch_InfoList #endif #ifdef CBA , - uint8_t num_active_cba_groups, - uint16_t cba_rnti + uint8_t num_active_cba_groups, uint16_t cba_rnti #endif - ); + ); -uint16_t getRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs); +uint16_t getRIV(uint16_t N_RB_DL, uint16_t RBstart, uint16_t Lcrbs); int get_subbandsize(uint8_t dl_bandwidth); -void get_Msg3allocret(COMMON_channels_t *cc, +void get_Msg3allocret(COMMON_channels_t * cc, sub_frame_t current_subframe, frame_t current_frame, - frame_t *frame, - sub_frame_t *subframe); + frame_t * frame, sub_frame_t * subframe); -void get_Msg3alloc(COMMON_channels_t *cc, +void get_Msg3alloc(COMMON_channels_t * cc, sub_frame_t current_subframe, frame_t current_frame, - frame_t *frame, - sub_frame_t *subframe); + frame_t * frame, sub_frame_t * subframe); -uint16_t mac_computeRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs); +uint16_t mac_computeRIV(uint16_t N_RB_DL, uint16_t RBstart, + uint16_t Lcrbs); -int get_phich_resource_times6(COMMON_channels_t *cc); +int get_phich_resource_times6(COMMON_channels_t * cc); int to_rbg(int dl_Bandwidth); int to_prb(int dl_Bandwidth); -uint8_t get_Msg3harqpid(COMMON_channels_t *cc, - frame_t frame, - sub_frame_t current_subframe); +uint8_t get_Msg3harqpid(COMMON_channels_t * cc, + frame_t frame, sub_frame_t current_subframe); -uint32_t pdcchalloc2ulframe(COMMON_channels_t *ccP,uint32_t frame, uint8_t n); +uint32_t pdcchalloc2ulframe(COMMON_channels_t * ccP, uint32_t frame, + uint8_t n); -uint8_t pdcchalloc2ulsubframe(COMMON_channels_t *ccP,uint8_t n); +uint8_t pdcchalloc2ulsubframe(COMMON_channels_t * ccP, uint8_t n); -int is_UL_sf(COMMON_channels_t *ccP,sub_frame_t subframeP); +int is_UL_sf(COMMON_channels_t * ccP, sub_frame_t subframeP); uint8_t getQm(uint8_t mcs); -uint8_t subframe2harqpid(COMMON_channels_t *cc,frame_t frame,sub_frame_t subframe); +uint8_t subframe2harqpid(COMMON_channels_t * cc, frame_t frame, + sub_frame_t subframe); -void get_srs_pos(COMMON_channels_t *cc,uint16_t isrs,uint16_t *psrsPeriodicity,uint16_t *psrsOffset); +void get_srs_pos(COMMON_channels_t * cc, uint16_t isrs, + uint16_t * psrsPeriodicity, uint16_t * psrsOffset); -void get_csi_params(COMMON_channels_t *cc,struct CQI_ReportPeriodic *cqi_PMI_ConfigIndex,uint16_t *Npd,uint16_t *N_OFFSET_CQI,int *H); +void get_csi_params(COMMON_channels_t * cc, + struct CQI_ReportPeriodic *cqi_PMI_ConfigIndex, + uint16_t * Npd, uint16_t * N_OFFSET_CQI, int *H); -uint8_t get_rel8_dl_cqi_pmi_size(UE_sched_ctrl *sched_ctl,int CC_idP,COMMON_channels_t *cc,uint8_t tmode, struct CQI_ReportPeriodic *cqi_ReportPeriodic); +uint8_t get_rel8_dl_cqi_pmi_size(UE_sched_ctrl * sched_ctl, int CC_idP, + COMMON_channels_t * cc, uint8_t tmode, + struct CQI_ReportPeriodic + *cqi_ReportPeriodic); -uint8_t get_dl_cqi_pmi_size_pusch(COMMON_channels_t *cc,uint8_t tmode, uint8_t ri, CQI_ReportModeAperiodic_t *cqi_ReportModeAperiodic); -void extract_pucch_csi(module_id_t mod_idP,int CC_idP,int UE_id, frame_t frameP,sub_frame_t subframeP, uint8_t *pdu, uint8_t length); +uint8_t get_dl_cqi_pmi_size_pusch(COMMON_channels_t * cc, uint8_t tmode, + uint8_t ri, + CQI_ReportModeAperiodic_t * + cqi_ReportModeAperiodic); +void extract_pucch_csi(module_id_t mod_idP, int CC_idP, int UE_id, + frame_t frameP, sub_frame_t subframeP, + uint8_t * pdu, uint8_t length); -void extract_pusch_csi(module_id_t mod_idP,int CC_idP,int UE_id, frame_t frameP,sub_frame_t subframeP,uint8_t *pdu, uint8_t length); +void extract_pusch_csi(module_id_t mod_idP, int CC_idP, int UE_id, + frame_t frameP, sub_frame_t subframeP, + uint8_t * pdu, uint8_t length); -uint16_t fill_nfapi_tx_req(nfapi_tx_request_body_t *tx_req_body,uint16_t absSF,uint16_t pdu_length, uint16_t pdu_index, uint8_t *pdu ); +uint16_t fill_nfapi_tx_req(nfapi_tx_request_body_t * tx_req_body, + uint16_t absSF, uint16_t pdu_length, + uint16_t pdu_index, uint8_t * pdu); -void fill_nfapi_ulsch_config_request_rel8(nfapi_ul_config_request_pdu_t *ul_config_pdu, - uint8_t cqi_req, - COMMON_channels_t *cc, - struct PhysicalConfigDedicated *physicalConfigDedicated, - uint8_t tmode, - uint32_t handle, - uint16_t rnti, - uint8_t resource_block_start, - uint8_t number_of_resource_blocks, - uint8_t mcs, - uint8_t cyclic_shift_2_for_drms, - uint8_t frequency_hopping_enabled_flag, - uint8_t frequency_hopping_bits, - uint8_t new_data_indication, - uint8_t redundancy_version, - uint8_t harq_process_number, - uint8_t ul_tx_mode, - uint8_t current_tx_nb, - uint8_t n_srs, - uint16_t size - ); +void fill_nfapi_ulsch_config_request_rel8(nfapi_ul_config_request_pdu_t * + ul_config_pdu, uint8_t cqi_req, + COMMON_channels_t * cc, + struct PhysicalConfigDedicated + *physicalConfigDedicated, + uint8_t tmode, uint32_t handle, + uint16_t rnti, + uint8_t resource_block_start, + uint8_t + number_of_resource_blocks, + uint8_t mcs, + uint8_t cyclic_shift_2_for_drms, + uint8_t + frequency_hopping_enabled_flag, + uint8_t frequency_hopping_bits, + uint8_t new_data_indication, + uint8_t redundancy_version, + uint8_t harq_process_number, + uint8_t ul_tx_mode, + uint8_t current_tx_nb, + uint8_t n_srs, uint16_t size); #ifdef Rel14 -void fill_nfapi_ulsch_config_request_emtc(nfapi_ul_config_request_pdu_t *ul_config_pdu, - uint8_t ue_type, - uint16_t total_number_of_repetitions, +void fill_nfapi_ulsch_config_request_emtc(nfapi_ul_config_request_pdu_t * + ul_config_pdu, uint8_t ue_type, + uint16_t + total_number_of_repetitions, uint16_t repetition_number, - uint16_t initial_transmission_sf_io); + uint16_t + initial_transmission_sf_io); #endif -void program_dlsch_acknak(module_id_t module_idP, int CC_idP,int UE_idP, frame_t frameP, sub_frame_t subframeP,uint8_t cce_idx); +void program_dlsch_acknak(module_id_t module_idP, int CC_idP, int UE_idP, + frame_t frameP, sub_frame_t subframeP, + uint8_t cce_idx); -void fill_nfapi_dlsch_config(eNB_MAC_INST *eNB, nfapi_dl_config_request_body_t *dl_req, - uint16_t length, - uint16_t pdu_index, +void fill_nfapi_dlsch_config(eNB_MAC_INST * eNB, + nfapi_dl_config_request_body_t * dl_req, + uint16_t length, uint16_t pdu_index, uint16_t rnti, uint8_t resource_allocation_type, - uint8_t virtual_resource_block_assignment_flag, + uint8_t + virtual_resource_block_assignment_flag, uint16_t resource_block_coding, uint8_t modulation, uint8_t redundancy_version, @@ -998,7 +1086,7 @@ void fill_nfapi_dlsch_config(eNB_MAC_INST *eNB, nfapi_dl_config_request_body_t * uint8_t transmission_scheme, uint8_t number_of_layers, uint8_t number_of_subbands, - // uint8_t codebook_index, + // uint8_t codebook_index, uint8_t ue_category_capacity, uint8_t pa, uint8_t delta_power_offset_index, @@ -1006,28 +1094,27 @@ void fill_nfapi_dlsch_config(eNB_MAC_INST *eNB, nfapi_dl_config_request_body_t * uint8_t nprb, uint8_t transmission_mode, uint8_t num_bf_prb_per_subband, - uint8_t num_bf_vector - ); + uint8_t num_bf_vector); void fill_nfapi_harq_information(module_id_t module_idP, int CC_idP, uint16_t rntiP, uint16_t absSFP, - nfapi_ul_config_harq_information *harq_information, - uint8_t cce_idxP); + nfapi_ul_config_harq_information * + harq_information, uint8_t cce_idxP); void fill_nfapi_ulsch_harq_information(module_id_t module_idP, int CC_idP, uint16_t rntiP, - nfapi_ul_config_ulsch_harq_information *harq_information); + nfapi_ul_config_ulsch_harq_information + * harq_information); uint16_t fill_nfapi_uci_acknak(module_id_t module_idP, int CC_idP, uint16_t rntiP, - uint16_t absSFP, - uint8_t cce_idxP); + uint16_t absSFP, uint8_t cce_idxP); -void fill_nfapi_dl_dci_1A(nfapi_dl_config_request_pdu_t *dl_config_pdu, +void fill_nfapi_dl_dci_1A(nfapi_dl_config_request_pdu_t * dl_config_pdu, uint8_t aggregation_level, uint16_t rnti, uint8_t rnti_type, @@ -1035,34 +1122,40 @@ void fill_nfapi_dl_dci_1A(nfapi_dl_config_request_pdu_t *dl_config_pdu, uint8_t tpc, uint16_t resource_block_coding, uint8_t mcs, - uint8_t ndi, - uint8_t rv, - uint8_t vrb_flag); + uint8_t ndi, uint8_t rv, uint8_t vrb_flag); -nfapi_ul_config_request_pdu_t* has_ul_grant(module_id_t module_idP,int CC_idP,uint16_t subframeP,uint16_t rnti); +nfapi_ul_config_request_pdu_t *has_ul_grant(module_id_t module_idP, + int CC_idP, uint16_t subframeP, + uint16_t rnti); -uint8_t get_tmode(module_id_t module_idP,int CC_idP,int UE_idP); +uint8_t get_tmode(module_id_t module_idP, int CC_idP, int UE_idP); -uint8_t get_ul_req_index(module_id_t module_idP, int CC_idP, sub_frame_t subframeP); +uint8_t get_ul_req_index(module_id_t module_idP, int CC_idP, + sub_frame_t subframeP); #ifdef Rel14 int get_numnarrowbandbits(long dl_Bandwidth); -int mpdcch_sf_condition(eNB_MAC_INST *eNB,int CC_id, frame_t frameP,sub_frame_t subframeP,int rmax,MPDCCH_TYPES_t mpdcch_type,int UE_id); +int mpdcch_sf_condition(eNB_MAC_INST * eNB, int CC_id, frame_t frameP, + sub_frame_t subframeP, int rmax, + MPDCCH_TYPES_t mpdcch_type, int UE_id); int get_numnarrowbands(long dl_Bandwidth); -int narrowband_to_first_rb(COMMON_channels_t *cc, int nb_index); +int narrowband_to_first_rb(COMMON_channels_t * cc, int nb_index); #endif int l2_init_eNB(void); -void Msg1_transmitted(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id); -void Msg3_transmitted(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id); -uint32_t from_earfcn(int eutra_bandP,uint32_t dl_earfcn); +void Msg1_transmitted(module_id_t module_idP, uint8_t CC_id, + frame_t frameP, uint8_t eNB_id); +void Msg3_transmitted(module_id_t module_idP, uint8_t CC_id, + frame_t frameP, uint8_t eNB_id); +uint32_t from_earfcn(int eutra_bandP, uint32_t dl_earfcn); int32_t get_uldl_offset(int eutra_bandP); -int l2_init_ue(int eMBMS_active, char *uecap_xer,uint8_t cba_group_active, uint8_t HO_active); +int l2_init_ue(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, + uint8_t HO_active); #endif /** @}*/ diff --git a/openair2/LAYER2/MAC/ra_procedures.c b/openair2/LAYER2/MAC/ra_procedures.c index f649acad1e..3f2df025c7 100644 --- a/openair2/LAYER2/MAC/ra_procedures.c +++ b/openair2/LAYER2/MAC/ra_procedures.c @@ -47,482 +47,604 @@ #include "SIMULATION/simulation_defs.h" #endif -#include "SIMULATION/TOOLS/defs.h" // for taus +#include "SIMULATION/TOOLS/defs.h" // for taus -int8_t get_DELTA_PREAMBLE(module_id_t module_idP,int CC_id) +int8_t get_DELTA_PREAMBLE(module_id_t module_idP, int CC_id) { - AssertFatal(CC_id==0, - "Transmission on secondary CCs is not supported yet\n"); - uint8_t prachConfigIndex = UE_mac_inst[module_idP].radioResourceConfigCommon->prach_Config.prach_ConfigInfo.prach_ConfigIndex; - uint8_t preambleformat; + AssertFatal(CC_id == 0, + "Transmission on secondary CCs is not supported yet\n"); + uint8_t prachConfigIndex = + UE_mac_inst[module_idP].radioResourceConfigCommon-> + prach_Config.prach_ConfigInfo.prach_ConfigIndex; + uint8_t preambleformat; - if (UE_mac_inst[module_idP].tdd_Config) { // TDD - if (prachConfigIndex < 20) { - preambleformat = 0; - } else if (prachConfigIndex < 30) { - preambleformat = 1; - } else if (prachConfigIndex < 40) { - preambleformat = 2; - } else if (prachConfigIndex < 48) { - preambleformat = 3; - } else { - preambleformat = 4; + if (UE_mac_inst[module_idP].tdd_Config) { // TDD + if (prachConfigIndex < 20) { + preambleformat = 0; + } else if (prachConfigIndex < 30) { + preambleformat = 1; + } else if (prachConfigIndex < 40) { + preambleformat = 2; + } else if (prachConfigIndex < 48) { + preambleformat = 3; + } else { + preambleformat = 4; + } + } else { // FDD + preambleformat = prachConfigIndex >> 2; } - } else { // FDD - preambleformat = prachConfigIndex>>2; - } - switch (preambleformat) { - case 0: - case 1: - return(0); + switch (preambleformat) { + case 0: + case 1: + return (0); - case 2: - case 3: - return(-3); + case 2: + case 3: + return (-3); - case 4: - return(8); + case 4: + return (8); - default: - AssertFatal(1==0,"[UE %d] ue_procedures.c: FATAL, Illegal preambleformat %d, prachConfigIndex %d\n", - module_idP, - preambleformat,prachConfigIndex); - } + default: + AssertFatal(1 == 0, + "[UE %d] ue_procedures.c: FATAL, Illegal preambleformat %d, prachConfigIndex %d\n", + module_idP, preambleformat, prachConfigIndex); + } } /// This routine implements Section 5.1.2 (UE Random Access Resource Selection) from 36.321 -void get_prach_resources(module_id_t module_idP, - int CC_id, - uint8_t eNB_index, - uint8_t t_id, - uint8_t first_Msg3, - RACH_ConfigDedicated_t *rach_ConfigDedicated) +void +get_prach_resources(module_id_t module_idP, + int CC_id, + uint8_t eNB_index, + uint8_t t_id, + uint8_t first_Msg3, + RACH_ConfigDedicated_t * rach_ConfigDedicated) { - uint8_t Msg3_size = UE_mac_inst[module_idP].RA_Msg3_size; - PRACH_RESOURCES_t *prach_resources = &UE_mac_inst[module_idP].RA_prach_resources; - RACH_ConfigCommon_t *rach_ConfigCommon = NULL; - uint8_t noGroupB = 0; - uint8_t f_id = 0,num_prach=0; - int numberOfRA_Preambles; - int messageSizeGroupA; - int sizeOfRA_PreamblesGroupA; - int messagePowerOffsetGroupB; - int PLThreshold; + uint8_t Msg3_size = UE_mac_inst[module_idP].RA_Msg3_size; + PRACH_RESOURCES_t *prach_resources = + &UE_mac_inst[module_idP].RA_prach_resources; + RACH_ConfigCommon_t *rach_ConfigCommon = NULL; + uint8_t noGroupB = 0; + uint8_t f_id = 0, num_prach = 0; + int numberOfRA_Preambles; + int messageSizeGroupA; + int sizeOfRA_PreamblesGroupA; + int messagePowerOffsetGroupB; + int PLThreshold; - AssertFatal(CC_id==0, - "Transmission on secondary CCs is not supported yet\n"); - AssertFatal(UE_mac_inst[module_idP].radioResourceConfigCommon!=NULL, - "[UE %d] FATAL radioResourceConfigCommon is NULL !!!\n",module_idP); + AssertFatal(CC_id == 0, + "Transmission on secondary CCs is not supported yet\n"); + AssertFatal(UE_mac_inst[module_idP].radioResourceConfigCommon != NULL, + "[UE %d] FATAL radioResourceConfigCommon is NULL !!!\n", + module_idP); - rach_ConfigCommon = &UE_mac_inst[module_idP].radioResourceConfigCommon->rach_ConfigCommon; - numberOfRA_Preambles = (1+rach_ConfigCommon->preambleInfo.numberOfRA_Preambles)<<2; + rach_ConfigCommon = + &UE_mac_inst[module_idP].radioResourceConfigCommon-> + rach_ConfigCommon; + numberOfRA_Preambles = + (1 + rach_ConfigCommon->preambleInfo.numberOfRA_Preambles) << 2; - if (rach_ConfigDedicated) { // This is for network controlled Mobility, later - if (rach_ConfigDedicated->ra_PRACH_MaskIndex != 0) { - prach_resources->ra_PreambleIndex = rach_ConfigDedicated->ra_PreambleIndex; - prach_resources->ra_RACH_MaskIndex = rach_ConfigDedicated->ra_PRACH_MaskIndex; - return; - } - } - - /* TODO: gcc warns if this variable is not always set, let's put -1 for no more warning */ - messageSizeGroupA = -1; - - if (!rach_ConfigCommon->preambleInfo.preamblesGroupAConfig) { - noGroupB = 1; - } else { - sizeOfRA_PreamblesGroupA = (rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA+1)<<2; - switch (rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->messageSizeGroupA) { - case 0: - messageSizeGroupA = 56; - break; - case 1: - messageSizeGroupA = 144; - break; - case 2: - messageSizeGroupA = 208; - break; - case 3: - messageSizeGroupA = 256; - break; + if (rach_ConfigDedicated) { // This is for network controlled Mobility, later + if (rach_ConfigDedicated->ra_PRACH_MaskIndex != 0) { + prach_resources->ra_PreambleIndex = + rach_ConfigDedicated->ra_PreambleIndex; + prach_resources->ra_RACH_MaskIndex = + rach_ConfigDedicated->ra_PRACH_MaskIndex; + return; + } } - /* TODO: what value to use as default? */ - messagePowerOffsetGroupB = -9999; - switch (rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->messagePowerOffsetGroupB) { - case 0: - messagePowerOffsetGroupB = -9999; - break; - case 1: - messagePowerOffsetGroupB = 0; - break; - case 2: - messagePowerOffsetGroupB = 5; - break; - case 3: - messagePowerOffsetGroupB = 8; - break; - case 4: - messagePowerOffsetGroupB = 10; - break; - case 5: - messagePowerOffsetGroupB = 12; - break; - case 6: - messagePowerOffsetGroupB = 15; - break; - case 7: - messagePowerOffsetGroupB = 18; - break; - } + /* TODO: gcc warns if this variable is not always set, let's put -1 for no more warning */ + messageSizeGroupA = -1; - PLThreshold = 0 - get_DELTA_PREAMBLE(module_idP,CC_id) - get_Po_NOMINAL_PUSCH(module_idP,CC_id) - messagePowerOffsetGroupB; - // Note Pcmax is set to 0 here, we have to fix this - - if (sizeOfRA_PreamblesGroupA == numberOfRA_Preambles) { - noGroupB = 1; - } - } - - if (first_Msg3 == 1) { - if (noGroupB == 1) { - // use Group A procedure - UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = (taus())%numberOfRA_Preambles; - UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0; - UE_mac_inst[module_idP].RA_usedGroupA = 1; - } else if ((Msg3_size PLThreshold)) { - // use Group A procedure - UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = (taus())%sizeOfRA_PreamblesGroupA; - UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0; - UE_mac_inst[module_idP].RA_usedGroupA = 1; - } else { // use Group B - UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = sizeOfRA_PreamblesGroupA + - (taus())%(numberOfRA_Preambles - sizeOfRA_PreamblesGroupA); - UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0; - UE_mac_inst[module_idP].RA_usedGroupA = 0; - } - - UE_mac_inst[module_idP].RA_prach_resources.ra_PREAMBLE_RECEIVED_TARGET_POWER = get_Po_NOMINAL_PUSCH(module_idP,CC_id); - } else { // Msg3 is being retransmitted - if (UE_mac_inst[module_idP].RA_usedGroupA == 1) { - if (rach_ConfigCommon->preambleInfo.preamblesGroupAConfig) { - UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = (taus())%rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA; - } else { - UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = (taus())&0x3f; - } - - UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0; + if (!rach_ConfigCommon->preambleInfo.preamblesGroupAConfig) { + noGroupB = 1; } else { - // FIXME rach_ConfigCommon->preambleInfo.preamblesGroupAConfig may be zero - UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = - rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA + - (taus())%(rach_ConfigCommon->preambleInfo.numberOfRA_Preambles - - rach_ConfigCommon->preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA); - UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = 0; - } - } + sizeOfRA_PreamblesGroupA = + (rach_ConfigCommon->preambleInfo. + preamblesGroupAConfig->sizeOfRA_PreamblesGroupA + 1) << 2; + switch (rach_ConfigCommon->preambleInfo. + preamblesGroupAConfig->messageSizeGroupA) { + case 0: + messageSizeGroupA = 56; + break; + case 1: + messageSizeGroupA = 144; + break; + case 2: + messageSizeGroupA = 208; + break; + case 3: + messageSizeGroupA = 256; + break; + } - // choose random PRACH resource in TDD - if (UE_mac_inst[module_idP].tdd_Config) { - num_prach = get_num_prach_tdd(module_idP); + /* TODO: what value to use as default? */ + messagePowerOffsetGroupB = -9999; + switch (rach_ConfigCommon->preambleInfo. + preamblesGroupAConfig->messagePowerOffsetGroupB) { + case 0: + messagePowerOffsetGroupB = -9999; + break; + case 1: + messagePowerOffsetGroupB = 0; + break; + case 2: + messagePowerOffsetGroupB = 5; + break; + case 3: + messagePowerOffsetGroupB = 8; + break; + case 4: + messagePowerOffsetGroupB = 10; + break; + case 5: + messagePowerOffsetGroupB = 12; + break; + case 6: + messagePowerOffsetGroupB = 15; + break; + case 7: + messagePowerOffsetGroupB = 18; + break; + } - if ((num_prach>0) && (num_prach<6)) { - UE_mac_inst[module_idP].RA_prach_resources.ra_TDD_map_index = (taus()%num_prach); + PLThreshold = + 0 - get_DELTA_PREAMBLE(module_idP, + CC_id) - + get_Po_NOMINAL_PUSCH(module_idP, + CC_id) - messagePowerOffsetGroupB; + // Note Pcmax is set to 0 here, we have to fix this + + if (sizeOfRA_PreamblesGroupA == numberOfRA_Preambles) { + noGroupB = 1; + } } - f_id = get_fid_prach_tdd(module_idP, - UE_mac_inst[module_idP].RA_prach_resources.ra_TDD_map_index); - } + if (first_Msg3 == 1) { + if (noGroupB == 1) { + // use Group A procedure + UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = + (taus()) % numberOfRA_Preambles; + UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = + 0; + UE_mac_inst[module_idP].RA_usedGroupA = 1; + } else if ((Msg3_size < messageSizeGroupA) || + (get_PL(module_idP, 0, eNB_index) > PLThreshold)) { + // use Group A procedure + UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = + (taus()) % sizeOfRA_PreamblesGroupA; + UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = + 0; + UE_mac_inst[module_idP].RA_usedGroupA = 1; + } else { // use Group B + UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = + sizeOfRA_PreamblesGroupA + + (taus()) % (numberOfRA_Preambles - + sizeOfRA_PreamblesGroupA); + UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = + 0; + UE_mac_inst[module_idP].RA_usedGroupA = 0; + } - // choose RA-RNTI - UE_mac_inst[module_idP].RA_prach_resources.ra_RNTI = 1 + t_id + 10*f_id; + UE_mac_inst[module_idP]. + RA_prach_resources.ra_PREAMBLE_RECEIVED_TARGET_POWER = + get_Po_NOMINAL_PUSCH(module_idP, CC_id); + } else { // Msg3 is being retransmitted + if (UE_mac_inst[module_idP].RA_usedGroupA == 1) { + if (rach_ConfigCommon->preambleInfo.preamblesGroupAConfig) { + UE_mac_inst[module_idP].RA_prach_resources. + ra_PreambleIndex = + (taus()) % + rach_ConfigCommon->preambleInfo. + preamblesGroupAConfig->sizeOfRA_PreamblesGroupA; + } else { + UE_mac_inst[module_idP].RA_prach_resources. + ra_PreambleIndex = (taus()) & 0x3f; + } + + UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = + 0; + } else { + // FIXME rach_ConfigCommon->preambleInfo.preamblesGroupAConfig may be zero + UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex = + rach_ConfigCommon->preambleInfo. + preamblesGroupAConfig->sizeOfRA_PreamblesGroupA + + (taus()) % + (rach_ConfigCommon->preambleInfo.numberOfRA_Preambles - + rach_ConfigCommon->preambleInfo. + preamblesGroupAConfig->sizeOfRA_PreamblesGroupA); + UE_mac_inst[module_idP].RA_prach_resources.ra_RACH_MaskIndex = + 0; + } + } + + // choose random PRACH resource in TDD + if (UE_mac_inst[module_idP].tdd_Config) { + num_prach = get_num_prach_tdd(module_idP); + + if ((num_prach > 0) && (num_prach < 6)) { + UE_mac_inst[module_idP].RA_prach_resources.ra_TDD_map_index = + (taus() % num_prach); + } + + f_id = get_fid_prach_tdd(module_idP, + UE_mac_inst + [module_idP].RA_prach_resources. + ra_TDD_map_index); + } + // choose RA-RNTI + UE_mac_inst[module_idP].RA_prach_resources.ra_RNTI = + 1 + t_id + 10 * f_id; } -void Msg1_transmitted(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id) +void +Msg1_transmitted(module_id_t module_idP, uint8_t CC_id, + frame_t frameP, uint8_t eNB_id) { - AssertFatal(CC_id==0, - "Transmission on secondary CCs is not supported yet\n"); - // start contention resolution timer - UE_mac_inst[module_idP].RA_attempt_number++; + AssertFatal(CC_id == 0, + "Transmission on secondary CCs is not supported yet\n"); + // start contention resolution timer + UE_mac_inst[module_idP].RA_attempt_number++; - if (opt_enabled) { - trace_pdu(0, NULL, 0, module_idP, 0 , UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex, - UE_mac_inst[module_idP].txFrame, UE_mac_inst[module_idP].txSubframe, 0, UE_mac_inst[module_idP].RA_attempt_number); - LOG_D(OPT,"[UE %d][RAPROC] TX MSG1 Frame %d trace pdu for rnti %x with size %d\n", - module_idP, frameP, 1, UE_mac_inst[module_idP].RA_Msg3_size); - } + if (opt_enabled) { + trace_pdu(0, NULL, 0, module_idP, 0, + UE_mac_inst[module_idP].RA_prach_resources. + ra_PreambleIndex, UE_mac_inst[module_idP].txFrame, + UE_mac_inst[module_idP].txSubframe, 0, + UE_mac_inst[module_idP].RA_attempt_number); + LOG_D(OPT, + "[UE %d][RAPROC] TX MSG1 Frame %d trace pdu for rnti %x with size %d\n", + module_idP, frameP, 1, UE_mac_inst[module_idP].RA_Msg3_size); + } } -void Msg3_transmitted(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id) +void +Msg3_transmitted(module_id_t module_idP, uint8_t CC_id, + frame_t frameP, uint8_t eNB_id) { - AssertFatal(CC_id==0, - "Transmission on secondary CCs is not supported yet\n"); + AssertFatal(CC_id == 0, + "Transmission on secondary CCs is not supported yet\n"); - // start contention resolution timer - LOG_D(MAC,"[UE %d][RAPROC] Frame %d : Msg3_tx: Setting contention resolution timer\n",module_idP,frameP); - UE_mac_inst[module_idP].RA_contention_resolution_cnt = 0; - UE_mac_inst[module_idP].RA_contention_resolution_timer_active = 1; + // start contention resolution timer + LOG_D(MAC, + "[UE %d][RAPROC] Frame %d : Msg3_tx: Setting contention resolution timer\n", + module_idP, frameP); + UE_mac_inst[module_idP].RA_contention_resolution_cnt = 0; + UE_mac_inst[module_idP].RA_contention_resolution_timer_active = 1; - if (opt_enabled) { // msg3 - trace_pdu(0, &UE_mac_inst[module_idP].CCCH_pdu.payload[0], UE_mac_inst[module_idP].RA_Msg3_size, - module_idP, 3, UE_mac_inst[module_idP].crnti, UE_mac_inst[module_idP].txFrame, UE_mac_inst[module_idP].txSubframe, 0, 0); - LOG_D(OPT,"[UE %d][RAPROC] MSG3 Frame %d trace pdu Preamble %d with size %d\n", - module_idP, frameP, UE_mac_inst[module_idP].crnti /*UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex*/, UE_mac_inst[module_idP].RA_Msg3_size); - } + if (opt_enabled) { // msg3 + trace_pdu(0, &UE_mac_inst[module_idP].CCCH_pdu.payload[0], + UE_mac_inst[module_idP].RA_Msg3_size, module_idP, 3, + UE_mac_inst[module_idP].crnti, + UE_mac_inst[module_idP].txFrame, + UE_mac_inst[module_idP].txSubframe, 0, 0); + LOG_D(OPT, + "[UE %d][RAPROC] MSG3 Frame %d trace pdu Preamble %d with size %d\n", + module_idP, frameP, UE_mac_inst[module_idP].crnti + /*UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex */ + , UE_mac_inst[module_idP].RA_Msg3_size); + } } -PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP,int CC_id,frame_t frameP, uint8_t eNB_indexP,sub_frame_t subframeP) +PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP, int CC_id, + frame_t frameP, uint8_t eNB_indexP, + sub_frame_t subframeP) { - uint8_t Size = 0; - UE_MODE_t UE_mode = get_ue_mode(module_idP,0,eNB_indexP); - uint8_t lcid = CCCH; - uint16_t Size16; - struct RACH_ConfigCommon *rach_ConfigCommon = (struct RACH_ConfigCommon *)NULL; - int32_t frame_diff = 0; - mac_rlc_status_resp_t rlc_status; - uint8_t dcch_header_len = 0; - uint16_t sdu_lengths[8]; - uint8_t ulsch_buff[MAX_ULSCH_PAYLOAD_BYTES]; + uint8_t Size = 0; + UE_MODE_t UE_mode = get_ue_mode(module_idP, 0, eNB_indexP); + uint8_t lcid = CCCH; + uint16_t Size16; + struct RACH_ConfigCommon *rach_ConfigCommon = + (struct RACH_ConfigCommon *) NULL; + int32_t frame_diff = 0; + mac_rlc_status_resp_t rlc_status; + uint8_t dcch_header_len = 0; + uint16_t sdu_lengths[8]; + uint8_t ulsch_buff[MAX_ULSCH_PAYLOAD_BYTES]; - AssertFatal(CC_id==0, - "Transmission on secondary CCs is not supported yet\n"); + AssertFatal(CC_id == 0, + "Transmission on secondary CCs is not supported yet\n"); - if (UE_mode == PRACH) { - if (UE_mac_inst[module_idP].radioResourceConfigCommon) { - rach_ConfigCommon = &UE_mac_inst[module_idP].radioResourceConfigCommon->rach_ConfigCommon; - } else { - return(NULL); + if (UE_mode == PRACH) { + if (UE_mac_inst[module_idP].radioResourceConfigCommon) { + rach_ConfigCommon = + &UE_mac_inst[module_idP]. + radioResourceConfigCommon->rach_ConfigCommon; + } else { + return (NULL); + } + + if (UE_mac_inst[module_idP].RA_active == 0) { + LOG_I(MAC, "RA not active\n"); + // check if RRC is ready to initiate the RA procedure + Size = mac_rrc_data_req(module_idP, + CC_id, + frameP, + CCCH, 1, + &UE_mac_inst[module_idP]. + CCCH_pdu.payload[sizeof + (SCH_SUBHEADER_SHORT) + + 1], 0, eNB_indexP, + 0); + Size16 = (uint16_t) Size; + + // LOG_D(MAC,"[UE %d] Frame %d: Requested RRCConnectionRequest, got %d bytes\n",module_idP,frameP,Size); + LOG_I(RRC, + "[MSC_MSG][FRAME %05d][RRC_UE][MOD %02d][][--- MAC_DATA_REQ (RRCConnectionRequest eNB %d) --->][MAC_UE][MOD %02d][]\n", + frameP, module_idP, eNB_indexP, module_idP); + LOG_I(MAC, + "[UE %d] Frame %d: Requested RRCConnectionRequest, got %d bytes\n", + module_idP, frameP, Size); + + if (Size > 0) { + + UE_mac_inst[module_idP].RA_active = 1; + UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER = + 1; + UE_mac_inst[module_idP].RA_Msg3_size = + Size + sizeof(SCH_SUBHEADER_SHORT) + + sizeof(SCH_SUBHEADER_SHORT); + UE_mac_inst[module_idP].RA_prachMaskIndex = 0; + UE_mac_inst[module_idP].RA_prach_resources.Msg3 = + UE_mac_inst[module_idP].CCCH_pdu.payload; + UE_mac_inst[module_idP].RA_backoff_cnt = 0; // add the backoff condition here if we have it from a previous RA reponse which failed (i.e. backoff indicator) + + AssertFatal(rach_ConfigCommon != NULL, + "[UE %d] FATAL Frame %d: rach_ConfigCommon is NULL !!!\n", + module_idP, frameP); + UE_mac_inst[module_idP].RA_window_cnt = + 2 + + rach_ConfigCommon->ra_SupervisionInfo. + ra_ResponseWindowSize; + + if (UE_mac_inst[module_idP].RA_window_cnt == 9) { + UE_mac_inst[module_idP].RA_window_cnt = 10; // Note: 9 subframe window doesn't exist, after 8 is 10! + } + + UE_mac_inst[module_idP].RA_tx_frame = frameP; + UE_mac_inst[module_idP].RA_tx_subframe = subframeP; + UE_mac_inst[module_idP].RA_backoff_frame = frameP; + UE_mac_inst[module_idP].RA_backoff_subframe = subframeP; + // Fill in preamble and PRACH resource + get_prach_resources(module_idP, CC_id, eNB_indexP, + subframeP, 1, NULL); + + generate_ulsch_header((uint8_t *) & UE_mac_inst[module_idP].CCCH_pdu.payload[0], // mac header + 1, // num sdus + 0, // short pading + &Size16, // sdu length + &lcid, // sdu lcid + NULL, // power headroom + NULL, // crnti + NULL, // truncated bsr + NULL, // short bsr + NULL, // long_bsr + 1); //post_padding + return (&UE_mac_inst[module_idP].RA_prach_resources); + + } else if (UE_mac_inst[module_idP]. + scheduling_info.BSR_bytes[UE_mac_inst[module_idP]. + scheduling_info.LCGID + [DCCH]] > 0) { + // This is for triggering a transmission on DCCH using PRACH (during handover, or sending SR for example) + dcch_header_len = 2 + 2; /// SHORT Subheader + C-RNTI control element + rlc_status = + mac_rlc_status_ind(module_idP, + UE_mac_inst[module_idP].crnti, + eNB_indexP, frameP, subframeP, + ENB_FLAG_NO, MBMS_FLAG_NO, DCCH, 6); + + if (UE_mac_inst[module_idP].crnti_before_ho) + LOG_D(MAC, + "[UE %d] Frame %d : UL-DCCH -> ULSCH, HO RRCConnectionReconfigurationComplete (%x, %x), RRC message has %d bytes to send throug PRACH (mac header len %d)\n", + module_idP, frameP, + UE_mac_inst[module_idP].crnti, + UE_mac_inst[module_idP].crnti_before_ho, + rlc_status.bytes_in_buffer, dcch_header_len); + else + LOG_D(MAC, + "[UE %d] Frame %d : UL-DCCH -> ULSCH, RRC message has %d bytes to send through PRACH(mac header len %d)\n", + module_idP, frameP, rlc_status.bytes_in_buffer, + dcch_header_len); + + sdu_lengths[0] = mac_rlc_data_req(module_idP, UE_mac_inst[module_idP].crnti, eNB_indexP, frameP, ENB_FLAG_NO, MBMS_FLAG_NO, DCCH, 6, //not used + (char *) &ulsch_buff[0]); + + LOG_D(MAC, "[UE %d] TX Got %d bytes for DCCH\n", + module_idP, sdu_lengths[0]); + update_bsr(module_idP, frameP, subframeP, eNB_indexP); + UE_mac_inst[module_idP]. + scheduling_info.BSR[UE_mac_inst[module_idP]. + scheduling_info.LCGID[DCCH]] = + locate_BsrIndexByBufferSize(BSR_TABLE, BSR_TABLE_SIZE, + UE_mac_inst + [module_idP].scheduling_info.BSR_bytes + [UE_mac_inst + [module_idP].scheduling_info.LCGID + [DCCH]]); + + //TO DO: fill BSR infos in UL TBS + + //header_len +=2; + UE_mac_inst[module_idP].RA_active = 1; + UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER = + 1; + UE_mac_inst[module_idP].RA_Msg3_size = + Size + dcch_header_len; + UE_mac_inst[module_idP].RA_prachMaskIndex = 0; + UE_mac_inst[module_idP].RA_prach_resources.Msg3 = + ulsch_buff; + UE_mac_inst[module_idP].RA_backoff_cnt = 0; // add the backoff condition here if we have it from a previous RA reponse which failed (i.e. backoff indicator) + + AssertFatal(rach_ConfigCommon != NULL, + "[UE %d] FATAL Frame %d: rach_ConfigCommon is NULL !!!\n", + module_idP, frameP); + UE_mac_inst[module_idP].RA_window_cnt = + 2 + + rach_ConfigCommon->ra_SupervisionInfo. + ra_ResponseWindowSize; + + if (UE_mac_inst[module_idP].RA_window_cnt == 9) { + UE_mac_inst[module_idP].RA_window_cnt = 10; // Note: 9 subframe window doesn't exist, after 8 is 10! + } + + + UE_mac_inst[module_idP].RA_tx_frame = frameP; + UE_mac_inst[module_idP].RA_tx_subframe = subframeP; + UE_mac_inst[module_idP].RA_backoff_frame = frameP; + UE_mac_inst[module_idP].RA_backoff_subframe = subframeP; + // Fill in preamble and PRACH resource + get_prach_resources(module_idP, CC_id, eNB_indexP, + subframeP, 1, NULL); + generate_ulsch_header((uint8_t *) ulsch_buff, // mac header + 1, // num sdus + 0, // short pading + &Size16, // sdu length + &lcid, // sdu lcid + NULL, // power headroom + &UE_mac_inst[module_idP].crnti, // crnti + NULL, // truncated bsr + NULL, // short bsr + NULL, // long_bsr + 0); //post_padding + + return (&UE_mac_inst[module_idP].RA_prach_resources); + } + } else { // RACH is active + LOG_D(MAC, + "[MAC][UE %d][RAPROC] frameP %d, subframe %d: RA Active, window cnt %d (RA_tx_frame %d, RA_tx_subframe %d)\n", + module_idP, frameP, subframeP, + UE_mac_inst[module_idP].RA_window_cnt, + UE_mac_inst[module_idP].RA_tx_frame, + UE_mac_inst[module_idP].RA_tx_subframe); + + // compute backoff parameters + if (UE_mac_inst[module_idP].RA_backoff_cnt > 0) { + frame_diff = + (sframe_t) frameP - + UE_mac_inst[module_idP].RA_backoff_frame; + + if (frame_diff < 0) { + frame_diff = -frame_diff; + } + + UE_mac_inst[module_idP].RA_backoff_cnt -= + ((10 * frame_diff) + + (subframeP - + UE_mac_inst[module_idP].RA_backoff_subframe)); + + UE_mac_inst[module_idP].RA_backoff_frame = frameP; + UE_mac_inst[module_idP].RA_backoff_subframe = subframeP; + } + // compute RA window parameters + if (UE_mac_inst[module_idP].RA_window_cnt > 0) { + frame_diff = + (frame_t) frameP - UE_mac_inst[module_idP].RA_tx_frame; + + if (frame_diff < 0) { + frame_diff = -frame_diff; + } + + UE_mac_inst[module_idP].RA_window_cnt -= + ((10 * frame_diff) + + (subframeP - UE_mac_inst[module_idP].RA_tx_subframe)); + LOG_D(MAC, + "[MAC][UE %d][RAPROC] frameP %d, subframe %d: RA Active, adjusted window cnt %d\n", + module_idP, frameP, subframeP, + UE_mac_inst[module_idP].RA_window_cnt); + } + + if ((UE_mac_inst[module_idP].RA_window_cnt <= 0) && + (UE_mac_inst[module_idP].RA_backoff_cnt <= 0)) { + + UE_mac_inst[module_idP].RA_tx_frame = frameP; + UE_mac_inst[module_idP].RA_tx_subframe = subframeP; + UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER++; + UE_mac_inst[module_idP].RA_prach_resources.ra_PREAMBLE_RECEIVED_TARGET_POWER += (rach_ConfigCommon->powerRampingParameters.powerRampingStep << 1); // 2dB increments in ASN.1 definition + int preambleTransMax = -1; + switch (rach_ConfigCommon->ra_SupervisionInfo. + preambleTransMax) { + case PreambleTransMax_n3: + preambleTransMax = 3; + break; + case PreambleTransMax_n4: + preambleTransMax = 4; + break; + case PreambleTransMax_n5: + preambleTransMax = 5; + break; + case PreambleTransMax_n6: + preambleTransMax = 6; + break; + case PreambleTransMax_n7: + preambleTransMax = 7; + break; + case PreambleTransMax_n8: + preambleTransMax = 8; + break; + case PreambleTransMax_n10: + preambleTransMax = 10; + break; + case PreambleTransMax_n20: + preambleTransMax = 20; + break; + case PreambleTransMax_n50: + preambleTransMax = 50; + break; + case PreambleTransMax_n100: + preambleTransMax = 100; + break; + case PreambleTransMax_n200: + preambleTransMax = 200; + break; + } + + if (UE_mac_inst[module_idP]. + RA_PREAMBLE_TRANSMISSION_COUNTER == preambleTransMax) { + LOG_D(MAC, + "[UE %d] Frame %d: Maximum number of RACH attempts (%d)\n", + module_idP, frameP, preambleTransMax); + // send message to RRC + UE_mac_inst[module_idP]. + RA_PREAMBLE_TRANSMISSION_COUNTER = 1; + UE_mac_inst[module_idP]. + RA_prach_resources.ra_PREAMBLE_RECEIVED_TARGET_POWER + = get_Po_NOMINAL_PUSCH(module_idP, CC_id); + } + + UE_mac_inst[module_idP].RA_window_cnt = + 2 + + rach_ConfigCommon->ra_SupervisionInfo. + ra_ResponseWindowSize; + UE_mac_inst[module_idP].RA_backoff_cnt = 0; + + // Fill in preamble and PRACH resource + get_prach_resources(module_idP, CC_id, eNB_indexP, + subframeP, 0, NULL); + return (&UE_mac_inst[module_idP].RA_prach_resources); + } + } + } else if (UE_mode == PUSCH) { + LOG_D(MAC, + "[UE %d] FATAL: Should not have checked for RACH in PUSCH yet ...", + module_idP); + AssertFatal(1 == 0, ""); } - if (UE_mac_inst[module_idP].RA_active == 0) { - LOG_I(MAC,"RA not active\n"); - // check if RRC is ready to initiate the RA procedure - Size = mac_rrc_data_req(module_idP, - CC_id, - frameP, - CCCH,1, - &UE_mac_inst[module_idP].CCCH_pdu.payload[sizeof(SCH_SUBHEADER_SHORT)+1],0, - eNB_indexP, - 0); - Size16 = (uint16_t)Size; - - // LOG_D(MAC,"[UE %d] Frame %d: Requested RRCConnectionRequest, got %d bytes\n",module_idP,frameP,Size); - LOG_I(RRC, "[MSC_MSG][FRAME %05d][RRC_UE][MOD %02d][][--- MAC_DATA_REQ (RRCConnectionRequest eNB %d) --->][MAC_UE][MOD %02d][]\n", - frameP, module_idP, eNB_indexP, module_idP); - LOG_I(MAC,"[UE %d] Frame %d: Requested RRCConnectionRequest, got %d bytes\n",module_idP,frameP,Size); - - if (Size>0) { - - UE_mac_inst[module_idP].RA_active = 1; - UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER = 1; - UE_mac_inst[module_idP].RA_Msg3_size = Size+sizeof(SCH_SUBHEADER_SHORT)+sizeof(SCH_SUBHEADER_SHORT); - UE_mac_inst[module_idP].RA_prachMaskIndex = 0; - UE_mac_inst[module_idP].RA_prach_resources.Msg3 = UE_mac_inst[module_idP].CCCH_pdu.payload; - UE_mac_inst[module_idP].RA_backoff_cnt = 0; // add the backoff condition here if we have it from a previous RA reponse which failed (i.e. backoff indicator) - - AssertFatal(rach_ConfigCommon!=NULL, - "[UE %d] FATAL Frame %d: rach_ConfigCommon is NULL !!!\n",module_idP,frameP); - UE_mac_inst[module_idP].RA_window_cnt = 2+ rach_ConfigCommon->ra_SupervisionInfo.ra_ResponseWindowSize; - - if (UE_mac_inst[module_idP].RA_window_cnt == 9) { - UE_mac_inst[module_idP].RA_window_cnt = 10; // Note: 9 subframe window doesn't exist, after 8 is 10! - } - - UE_mac_inst[module_idP].RA_tx_frame = frameP; - UE_mac_inst[module_idP].RA_tx_subframe = subframeP; - UE_mac_inst[module_idP].RA_backoff_frame = frameP; - UE_mac_inst[module_idP].RA_backoff_subframe = subframeP; - // Fill in preamble and PRACH resource - get_prach_resources(module_idP,CC_id,eNB_indexP,subframeP,1,NULL); - - generate_ulsch_header((uint8_t*)&UE_mac_inst[module_idP].CCCH_pdu.payload[0], // mac header - 1, // num sdus - 0, // short pading - &Size16, // sdu length - &lcid, // sdu lcid - NULL, // power headroom - NULL, // crnti - NULL, // truncated bsr - NULL, // short bsr - NULL, // long_bsr - 1); //post_padding - return(&UE_mac_inst[module_idP].RA_prach_resources); - - } else if (UE_mac_inst[module_idP].scheduling_info.BSR_bytes[UE_mac_inst[module_idP].scheduling_info.LCGID[DCCH]] > 0) { - // This is for triggering a transmission on DCCH using PRACH (during handover, or sending SR for example) - dcch_header_len = 2 + 2; /// SHORT Subheader + C-RNTI control element - rlc_status = mac_rlc_status_ind(module_idP,UE_mac_inst[module_idP].crnti, eNB_indexP,frameP,subframeP,ENB_FLAG_NO,MBMS_FLAG_NO, - DCCH, - 6); - - if (UE_mac_inst[module_idP].crnti_before_ho) - LOG_D(MAC, - "[UE %d] Frame %d : UL-DCCH -> ULSCH, HO RRCConnectionReconfigurationComplete (%x, %x), RRC message has %d bytes to send throug PRACH (mac header len %d)\n", - module_idP,frameP, UE_mac_inst[module_idP].crnti,UE_mac_inst[module_idP].crnti_before_ho, rlc_status.bytes_in_buffer,dcch_header_len); - else - LOG_D(MAC,"[UE %d] Frame %d : UL-DCCH -> ULSCH, RRC message has %d bytes to send through PRACH(mac header len %d)\n", - module_idP,frameP, rlc_status.bytes_in_buffer,dcch_header_len); - - sdu_lengths[0] = mac_rlc_data_req(module_idP, UE_mac_inst[module_idP].crnti, - eNB_indexP, frameP,ENB_FLAG_NO, MBMS_FLAG_NO, - DCCH, - 6, //not used - (char *)&ulsch_buff[0]); - - LOG_D(MAC,"[UE %d] TX Got %d bytes for DCCH\n",module_idP,sdu_lengths[0]); - update_bsr(module_idP, frameP, subframeP,eNB_indexP); - UE_mac_inst[module_idP].scheduling_info.BSR[UE_mac_inst[module_idP].scheduling_info.LCGID[DCCH]] = - locate_BsrIndexByBufferSize(BSR_TABLE, BSR_TABLE_SIZE, UE_mac_inst[module_idP].scheduling_info.BSR_bytes[UE_mac_inst[module_idP].scheduling_info.LCGID[DCCH]]); - - //TO DO: fill BSR infos in UL TBS - - //header_len +=2; - UE_mac_inst[module_idP].RA_active = 1; - UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER = 1; - UE_mac_inst[module_idP].RA_Msg3_size = Size+dcch_header_len; - UE_mac_inst[module_idP].RA_prachMaskIndex = 0; - UE_mac_inst[module_idP].RA_prach_resources.Msg3 = ulsch_buff; - UE_mac_inst[module_idP].RA_backoff_cnt = 0; // add the backoff condition here if we have it from a previous RA reponse which failed (i.e. backoff indicator) - - AssertFatal(rach_ConfigCommon!=NULL, - "[UE %d] FATAL Frame %d: rach_ConfigCommon is NULL !!!\n",module_idP,frameP); - UE_mac_inst[module_idP].RA_window_cnt = 2+ rach_ConfigCommon->ra_SupervisionInfo.ra_ResponseWindowSize; - - if (UE_mac_inst[module_idP].RA_window_cnt == 9) { - UE_mac_inst[module_idP].RA_window_cnt = 10; // Note: 9 subframe window doesn't exist, after 8 is 10! - } - - - UE_mac_inst[module_idP].RA_tx_frame = frameP; - UE_mac_inst[module_idP].RA_tx_subframe = subframeP; - UE_mac_inst[module_idP].RA_backoff_frame = frameP; - UE_mac_inst[module_idP].RA_backoff_subframe = subframeP; - // Fill in preamble and PRACH resource - get_prach_resources(module_idP,CC_id,eNB_indexP,subframeP,1,NULL); - generate_ulsch_header((uint8_t*)ulsch_buff, // mac header - 1, // num sdus - 0, // short pading - &Size16, // sdu length - &lcid, // sdu lcid - NULL, // power headroom - &UE_mac_inst[module_idP].crnti, // crnti - NULL, // truncated bsr - NULL, // short bsr - NULL, // long_bsr - 0); //post_padding - - return(&UE_mac_inst[module_idP].RA_prach_resources); - } - } else { // RACH is active - LOG_D(MAC,"[MAC][UE %d][RAPROC] frameP %d, subframe %d: RA Active, window cnt %d (RA_tx_frame %d, RA_tx_subframe %d)\n",module_idP, - frameP,subframeP,UE_mac_inst[module_idP].RA_window_cnt, - UE_mac_inst[module_idP].RA_tx_frame,UE_mac_inst[module_idP].RA_tx_subframe); - - // compute backoff parameters - if (UE_mac_inst[module_idP].RA_backoff_cnt>0) { - frame_diff = (sframe_t)frameP - UE_mac_inst[module_idP].RA_backoff_frame; - - if (frame_diff < 0) { - frame_diff = -frame_diff; - } - - UE_mac_inst[module_idP].RA_backoff_cnt -= ((10*frame_diff) + (subframeP-UE_mac_inst[module_idP].RA_backoff_subframe)); - - UE_mac_inst[module_idP].RA_backoff_frame = frameP; - UE_mac_inst[module_idP].RA_backoff_subframe = subframeP; - } - - // compute RA window parameters - if (UE_mac_inst[module_idP].RA_window_cnt>0) { - frame_diff = (frame_t)frameP - UE_mac_inst[module_idP].RA_tx_frame; - - if (frame_diff < 0) { - frame_diff = -frame_diff; - } - - UE_mac_inst[module_idP].RA_window_cnt -= ((10*frame_diff) + (subframeP-UE_mac_inst[module_idP].RA_tx_subframe)); - LOG_D(MAC,"[MAC][UE %d][RAPROC] frameP %d, subframe %d: RA Active, adjusted window cnt %d\n",module_idP, - frameP,subframeP,UE_mac_inst[module_idP].RA_window_cnt); - } - - if ((UE_mac_inst[module_idP].RA_window_cnt<=0) && - (UE_mac_inst[module_idP].RA_backoff_cnt<=0)) { - - UE_mac_inst[module_idP].RA_tx_frame = frameP; - UE_mac_inst[module_idP].RA_tx_subframe = subframeP; - UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER++; - UE_mac_inst[module_idP].RA_prach_resources.ra_PREAMBLE_RECEIVED_TARGET_POWER += - (rach_ConfigCommon->powerRampingParameters.powerRampingStep<<1); // 2dB increments in ASN.1 definition - int preambleTransMax = -1; - switch (rach_ConfigCommon->ra_SupervisionInfo.preambleTransMax) { - case PreambleTransMax_n3: - preambleTransMax = 3; - break; - case PreambleTransMax_n4: - preambleTransMax = 4; - break; - case PreambleTransMax_n5: - preambleTransMax = 5; - break; - case PreambleTransMax_n6: - preambleTransMax = 6; - break; - case PreambleTransMax_n7: - preambleTransMax = 7; - break; - case PreambleTransMax_n8: - preambleTransMax = 8; - break; - case PreambleTransMax_n10: - preambleTransMax = 10; - break; - case PreambleTransMax_n20: - preambleTransMax = 20; - break; - case PreambleTransMax_n50: - preambleTransMax = 50; - break; - case PreambleTransMax_n100: - preambleTransMax = 100; - break; - case PreambleTransMax_n200: - preambleTransMax = 200; - break; - } - - if (UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER == preambleTransMax) { - LOG_D(MAC,"[UE %d] Frame %d: Maximum number of RACH attempts (%d)\n",module_idP,frameP,preambleTransMax); - // send message to RRC - UE_mac_inst[module_idP].RA_PREAMBLE_TRANSMISSION_COUNTER=1; - UE_mac_inst[module_idP].RA_prach_resources.ra_PREAMBLE_RECEIVED_TARGET_POWER = get_Po_NOMINAL_PUSCH(module_idP,CC_id); - } - - UE_mac_inst[module_idP].RA_window_cnt = 2+ rach_ConfigCommon->ra_SupervisionInfo.ra_ResponseWindowSize; - UE_mac_inst[module_idP].RA_backoff_cnt = 0; - - // Fill in preamble and PRACH resource - get_prach_resources(module_idP,CC_id,eNB_indexP,subframeP,0,NULL); - return(&UE_mac_inst[module_idP].RA_prach_resources); - } - } - } else if (UE_mode == PUSCH) { - LOG_D(MAC,"[UE %d] FATAL: Should not have checked for RACH in PUSCH yet ...",module_idP); - AssertFatal(1==0,""); - } - - return(NULL); + return (NULL); } diff --git a/openair2/LAYER2/MAC/rar_tools.c b/openair2/LAYER2/MAC/rar_tools.c index ad870b6387..8d9e5bb3e1 100644 --- a/openair2/LAYER2/MAC/rar_tools.c +++ b/openair2/LAYER2/MAC/rar_tools.c @@ -40,269 +40,246 @@ #define DEBUG_RAR -extern unsigned int localRIV2alloc_LUT25[512]; -extern unsigned int distRIV2alloc_LUT25[512]; +extern unsigned int localRIV2alloc_LUT25[512]; +extern unsigned int distRIV2alloc_LUT25[512]; extern unsigned short RIV2nb_rb_LUT25[512]; extern unsigned short RIV2first_rb_LUT25[512]; extern RAN_CONTEXT_t RC; //------------------------------------------------------------------------------ -unsigned short fill_rar( - const module_id_t module_idP, - const int CC_id, - const frame_t frameP, - uint8_t* const dlsch_buffer, - const uint16_t N_RB_UL, - const uint8_t input_buffer_length -) +unsigned short +fill_rar(const module_id_t module_idP, + const int CC_id, + RA_t * ra, + const frame_t frameP, + uint8_t * const dlsch_buffer, + const uint16_t N_RB_UL, const uint8_t input_buffer_length) //------------------------------------------------------------------------------ { - RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *)dlsch_buffer; - // RAR_PDU *rar = (RAR_PDU *)(dlsch_buffer+1); - uint8_t *rar = (uint8_t *)(dlsch_buffer+1); - int i,ra_idx = -1; - RA_TEMPLATE *RA_template; + RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *) dlsch_buffer; + uint8_t *rar = (uint8_t *) (dlsch_buffer + 1); - AssertFatal(CC_id < MAX_NUM_CCs, "CC_id %u < MAX_NUM_CCs %u", CC_id, MAX_NUM_CCs); - for (i=0; icommon_channels[CC_id].RA_template[i].generate_rar == 1) { - ra_idx=i; - RC.mac[module_idP]->common_channels[CC_id].RA_template[i].generate_rar = 0; - break; + // subheader fixed + rarh->E = 0; // First and last RAR + rarh->T = 1; // 0 for E/T/R/R/BI subheader, 1 for E/T/RAPID subheader + rarh->RAPID = ra->preamble_index; // Respond to Preamble 0 only for the moment + rar[4] = (uint8_t) (ra->rnti >> 8); + rar[5] = (uint8_t) (ra->rnti & 0xff); + //ra->timing_offset = 0; + ra->timing_offset /= 16; //T_A = N_TA/16, where N_TA should be on a 30.72Msps + rar[0] = (uint8_t) (ra->timing_offset >> (2 + 4)); // 7 MSBs of timing advance + divide by 4 + rar[1] = (uint8_t) (ra->timing_offset << (4 - 2)) & 0xf0; // 4 LSBs of timing advance + divide by 4 + ra->msg3_first_rb = 6; + ra->msg3_nb_rb = 1; + uint16_t rballoc = mac_computeRIV(N_RB_UL, ra->msg3_first_rb, ra->msg3_nb_rb); // first PRB only for UL Grant + rar[1] |= (rballoc >> 7) & 7; // Hopping = 0 (bit 3), 3 MSBs of rballoc + rar[2] = ((uint8_t) (rballoc & 0xff)) << 1; // 7 LSBs of rballoc + ra->msg3_mcs = 10; + ra->msg3_TPC = 3; + ra->msg3_ULdelay = 0; + ra->msg3_cqireq = 0; + rar[2] |= ((ra->msg3_mcs & 0x8) >> 3); // mcs 10 + rar[3] = + (((ra->msg3_mcs & 0x7) << 5)) | ((ra->msg3_TPC & 7) << 2) | + ((ra->msg3_ULdelay & 1) << 1) | (ra->msg3_cqireq & 1); + + if (opt_enabled) { + trace_pdu(1, dlsch_buffer, input_buffer_length, module_idP, 2, 1, + RC.mac[module_idP]->frame, RC.mac[module_idP]->subframe, + 0, 0); + LOG_D(OPT, + "[eNB %d][RAPROC] CC_id %d RAR Frame %d trace pdu for rnti %x and rapid %d size %d\n", + module_idP, CC_id, frameP, ra->rnti, rarh->RAPID, + input_buffer_length); } - } - RA_template = &RC.mac[module_idP]->common_channels[CC_id].RA_template[ra_idx]; - - //DevAssert( ra_idx != -1 ); - if (ra_idx==-1) - return(0); - // subheader fixed - rarh->E = 0; // First and last RAR - rarh->T = 1; // 0 for E/T/R/R/BI subheader, 1 for E/T/RAPID subheader - rarh->RAPID = RA_template->preamble_index; // Respond to Preamble 0 only for the moment - rar[4] = (uint8_t)(RA_template->rnti>>8); - rar[5] = (uint8_t)(RA_template->rnti&0xff); - //RA_template->timing_offset = 0; - RA_template->timing_offset /= 16; //T_A = N_TA/16, where N_TA should be on a 30.72Msps - rar[0] = (uint8_t)(RA_template->timing_offset>>(2+4)); // 7 MSBs of timing advance + divide by 4 - rar[1] = (uint8_t)(RA_template->timing_offset<<(4-2))&0xf0; // 4 LSBs of timing advance + divide by 4 - RA_template->msg3_first_rb=6; - RA_template->msg3_nb_rb=1; - uint16_t rballoc = mac_computeRIV(N_RB_UL,RA_template->msg3_first_rb,RA_template->msg3_nb_rb); // first PRB only for UL Grant - rar[1] |= (rballoc>>7)&7; // Hopping = 0 (bit 3), 3 MSBs of rballoc - rar[2] = ((uint8_t)(rballoc&0xff))<<1; // 7 LSBs of rballoc - RA_template->msg3_mcs = 10; - RA_template->msg3_TPC = 3; - RA_template->msg3_ULdelay = 0; - RA_template->msg3_cqireq = 0; - rar[2] |= ((RA_template->msg3_mcs&0x8)>>3); // mcs 10 - rar[3] = (((RA_template->msg3_mcs&0x7)<<5)) | ((RA_template->msg3_TPC&7)<<2) | ((RA_template->msg3_ULdelay&1)<<1) | (RA_template->msg3_cqireq&1); - - LOG_D(MAC,"[eNB %d][RAPROC] CC_id %d Frame %d Generating RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for ra_idx %d, CRNTI %x,preamble %d/%d,TIMING OFFSET %d\n", - module_idP, CC_id, - frameP, - *(uint8_t*)rarh,rar[0],rar[1],rar[2],rar[3],rar[4],rar[5], - ra_idx, - RA_template->rnti, - rarh->RAPID,RC.mac[module_idP]->common_channels[CC_id].RA_template[0].preamble_index, - RA_template->timing_offset); - - if (opt_enabled) { - trace_pdu(1, dlsch_buffer, input_buffer_length, module_idP, 2, 1, - RC.mac[module_idP]->frame, RC.mac[module_idP]->subframe, 0, 0); - LOG_D(OPT,"[eNB %d][RAPROC] CC_id %d RAR Frame %d trace pdu for rnti %x and rapid %d size %d\n", - module_idP, CC_id, frameP, RA_template->rnti, - rarh->RAPID, input_buffer_length); - } - - return(RA_template->rnti); + return (ra->rnti); } #ifdef Rel14 //------------------------------------------------------------------------------ -unsigned short fill_rar_br(eNB_MAC_INST *eNB, - int CC_id, - RA_TEMPLATE *RA_template, - const frame_t frameP, - const sub_frame_t subframeP, - uint8_t* const dlsch_buffer, - const uint8_t ce_level -) +unsigned short +fill_rar_br(eNB_MAC_INST * eNB, + int CC_id, + RA_t * ra, + const frame_t frameP, + const sub_frame_t subframeP, + uint8_t * const dlsch_buffer, const uint8_t ce_level) //------------------------------------------------------------------------------ { - RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *)dlsch_buffer; - COMMON_channels_t *cc = &eNB->common_channels[CC_id]; - uint8_t *rar = (uint8_t *)(dlsch_buffer+1); - // uint8_t nb,reps; - uint8_t rballoc; - uint8_t mcs,TPC,ULdelay,cqireq; - int input_buffer_length; + RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *) dlsch_buffer; + COMMON_channels_t *cc = &eNB->common_channels[CC_id]; + uint8_t *rar = (uint8_t *) (dlsch_buffer + 1); + // uint8_t nb,reps; + uint8_t rballoc; + uint8_t mcs, TPC, ULdelay, cqireq; + int input_buffer_length; - AssertFatal(RA_template != NULL, "RA is null \n"); + AssertFatal(ra != NULL, "RA is null \n"); - // subheader fixed - rarh->E = 0; // First and last RAR - rarh->T = 1; // 0 for E/T/R/R/BI subheader, 1 for E/T/RAPID subheader - rarh->RAPID = RA_template->preamble_index; // Respond to Preamble 0 only for the moment - RA_template->timing_offset /= 16; //T_A = N_TA/16, where N_TA should be on a 30.72Msps - rar[0] = (uint8_t)(RA_template->timing_offset>>(2+4)); // 7 MSBs of timing advance + divide by 4 - rar[1] = (uint8_t)(RA_template->timing_offset<<(4-2))&0xf0; // 4 LSBs of timing advance + divide by 4 + // subheader fixed + rarh->E = 0; // First and last RAR + rarh->T = 1; // 0 for E/T/R/R/BI subheader, 1 for E/T/RAPID subheader + rarh->RAPID = ra->preamble_index; // Respond to Preamble 0 only for the moment + ra->timing_offset /= 16; //T_A = N_TA/16, where N_TA should be on a 30.72Msps + rar[0] = (uint8_t) (ra->timing_offset >> (2 + 4)); // 7 MSBs of timing advance + divide by 4 + rar[1] = (uint8_t) (ra->timing_offset << (4 - 2)) & 0xf0; // 4 LSBs of timing advance + divide by 4 - int N_NB_index; + int N_NB_index; - AssertFatal(1==0,"RAR for BL/CE Still to be finished ...\n"); + AssertFatal(1 == 0, "RAR for BL/CE Still to be finished ...\n"); - // Copy the Msg2 narrowband - RA_template->msg34_narrowband = RA_template->msg2_narrowband; + // Copy the Msg2 narrowband + ra->msg34_narrowband = ra->msg2_narrowband; - if (ce_level<2) { //CE Level 0,1, CEmodeA - input_buffer_length =6; + if (ce_level < 2) { //CE Level 0,1, CEmodeA + input_buffer_length = 6; - N_NB_index = get_numnarrowbandbits(cc->mib->message.dl_Bandwidth); + N_NB_index = get_numnarrowbandbits(cc->mib->message.dl_Bandwidth); - rar[4] = (uint8_t)(RA_template->rnti>>8); - rar[5] = (uint8_t)(RA_template->rnti&0xff); - //cc->RA_template[ra_idx].timing_offset = 0; - // nb = 0; - rballoc = mac_computeRIV(6,1+ce_level,1); // one PRB only for UL Grant in position 1+ce_level within Narrowband - rar[1] |= (rballoc&15)<<(4-N_NB_index); // Hopping = 0 (bit 3), 3 MSBs of rballoc + rar[4] = (uint8_t) (ra->rnti >> 8); + rar[5] = (uint8_t) (ra->rnti & 0xff); + //cc->ra[ra_idx].timing_offset = 0; + // nb = 0; + rballoc = mac_computeRIV(6, 1 + ce_level, 1); // one PRB only for UL Grant in position 1+ce_level within Narrowband + rar[1] |= (rballoc & 15) << (4 - N_NB_index); // Hopping = 0 (bit 3), 3 MSBs of rballoc - // reps = 4; - mcs = 7; - TPC = 3; // no power increase - ULdelay = 0; - cqireq = 0; - rar[2] |= ((mcs&0x8)>>3); // mcs 10 - rar[3] = (((mcs&0x7)<<5)) | ((TPC&7)<<2) | ((ULdelay&1)<<1) | (cqireq&1); - } - else { // CE level 2,3 => CEModeB + // reps = 4; + mcs = 7; + TPC = 3; // no power increase + ULdelay = 0; + cqireq = 0; + rar[2] |= ((mcs & 0x8) >> 3); // mcs 10 + rar[3] = + (((mcs & 0x7) << 5)) | ((TPC & 7) << 2) | ((ULdelay & 1) << 1) + | (cqireq & 1); + } else { // CE level 2,3 => CEModeB - input_buffer_length =5; + input_buffer_length = 5; - rar[3] = (uint8_t)(RA_template->rnti>>8); - rar[4] = (uint8_t)(RA_template->rnti&0xff); - } - LOG_D(MAC,"[RAPROC] Frame %d Generating RAR BR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for ce_level %d, CRNTI %x,preamble %d/%d,TIMING OFFSET %d\n", - frameP, - *(uint8_t*)rarh,rar[0],rar[1],rar[2],rar[3],rar[4],rar[5], - ce_level, - RA_template->rnti, - rarh->RAPID,RA_template->preamble_index, - RA_template->timing_offset); + rar[3] = (uint8_t) (ra->rnti >> 8); + rar[4] = (uint8_t) (ra->rnti & 0xff); + } + LOG_D(MAC, + "[RAPROC] Frame %d Generating RAR BR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for ce_level %d, CRNTI %x,preamble %d/%d,TIMING OFFSET %d\n", + frameP, *(uint8_t *) rarh, rar[0], rar[1], rar[2], rar[3], + rar[4], rar[5], ce_level, ra->rnti, rarh->RAPID, + ra->preamble_index, ra->timing_offset); - if (opt_enabled) { - trace_pdu(1, dlsch_buffer, input_buffer_length, eNB->Mod_id, 2, 1, - eNB->frame, eNB->subframe, 0, 0); - LOG_D(OPT,"[RAPROC] RAR Frame %d trace pdu for rnti %x and rapid %d size %d\n", - frameP, RA_template->rnti, - rarh->RAPID, input_buffer_length); - } + if (opt_enabled) { + trace_pdu(1, dlsch_buffer, input_buffer_length, eNB->Mod_id, 2, 1, + eNB->frame, eNB->subframe, 0, 0); + LOG_D(OPT, + "[RAPROC] RAR Frame %d trace pdu for rnti %x and rapid %d size %d\n", + frameP, ra->rnti, rarh->RAPID, input_buffer_length); + } - return(RA_template->rnti); + return (ra->rnti); } #endif //------------------------------------------------------------------------------ -uint16_t -ue_process_rar( - const module_id_t module_idP, - const int CC_id, - const frame_t frameP, - const rnti_t ra_rnti, - uint8_t* const dlsch_buffer, - rnti_t* const t_crnti, - const uint8_t preamble_index, - uint8_t* selected_rar_buffer // output argument for storing the selected RAR header and RAR payload -) +uint16_t ue_process_rar(const module_id_t module_idP, const int CC_id, const frame_t frameP, const rnti_t ra_rnti, uint8_t * const dlsch_buffer, rnti_t * const t_crnti, const uint8_t preamble_index, uint8_t * selected_rar_buffer // output argument for storing the selected RAR header and RAR payload + ) //------------------------------------------------------------------------------ { - uint16_t ret = 0; // return value + uint16_t ret = 0; // return value - RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *)dlsch_buffer; - // RAR_PDU *rar = (RAR_PDU *)(dlsch_buffer+1); - uint8_t *rar = (uint8_t *)(dlsch_buffer+1); + RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *) dlsch_buffer; + // RAR_PDU *rar = (RAR_PDU *)(dlsch_buffer+1); + uint8_t *rar = (uint8_t *) (dlsch_buffer + 1); - // get the last RAR payload for working with CMW500 - uint8_t n_rarpy = 0; // number of RAR payloads - uint8_t n_rarh = 0; // number of MAC RAR subheaders - uint8_t best_rx_rapid = -1; // the closest RAPID receive from all RARs - while (1) { - n_rarh++; - if (rarh->T == 1) { - n_rarpy++; - LOG_D(MAC, "RAPID %d\n", rarh->RAPID); - } + // get the last RAR payload for working with CMW500 + uint8_t n_rarpy = 0; // number of RAR payloads + uint8_t n_rarh = 0; // number of MAC RAR subheaders + uint8_t best_rx_rapid = -1; // the closest RAPID receive from all RARs + while (1) { + n_rarh++; + if (rarh->T == 1) { + n_rarpy++; + LOG_D(MAC, "RAPID %d\n", rarh->RAPID); + } - if (rarh->RAPID == preamble_index) { - LOG_D(PHY, "Found RAR with the intended RAPID %d\n", rarh->RAPID); - rar = (uint8_t *)(dlsch_buffer+n_rarh + (n_rarpy-1)*6); - break; - } + if (rarh->RAPID == preamble_index) { + LOG_D(PHY, "Found RAR with the intended RAPID %d\n", + rarh->RAPID); + rar = (uint8_t *) (dlsch_buffer + n_rarh + (n_rarpy - 1) * 6); + break; + } - if (abs((int)rarh->RAPID - (int)preamble_index) < abs((int)best_rx_rapid - (int)preamble_index)) { - best_rx_rapid = rarh->RAPID; - rar = (uint8_t *)(dlsch_buffer+n_rarh + (n_rarpy-1)*6); - } + if (abs((int) rarh->RAPID - (int) preamble_index) < + abs((int) best_rx_rapid - (int) preamble_index)) { + best_rx_rapid = rarh->RAPID; + rar = (uint8_t *) (dlsch_buffer + n_rarh + (n_rarpy - 1) * 6); + } - if (rarh->E == 0) { - LOG_I(PHY, "No RAR found with the intended RAPID. The closest RAPID in all RARs is %d\n", best_rx_rapid); - break; - } else { - rarh++; - } - }; - LOG_D(MAC, "number of RAR subheader %d; number of RAR pyloads %d\n", n_rarh, n_rarpy); + if (rarh->E == 0) { + LOG_I(PHY, + "No RAR found with the intended RAPID. The closest RAPID in all RARs is %d\n", + best_rx_rapid); + break; + } else { + rarh++; + } + }; + LOG_D(MAC, "number of RAR subheader %d; number of RAR pyloads %d\n", + n_rarh, n_rarpy); - if (CC_id>0) { - LOG_W(MAC,"Should not have received RAR on secondary CCs! \n"); - return(0xffff); - } + if (CC_id > 0) { + LOG_W(MAC, "Should not have received RAR on secondary CCs! \n"); + return (0xffff); + } - LOG_I(MAC,"[eNB %d][RAPROC] Frame %d Received RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for preamble %d/%d\n",module_idP,frameP, - *(uint8_t*)rarh,rar[0],rar[1],rar[2],rar[3],rar[4],rar[5], - rarh->RAPID,preamble_index); + LOG_I(MAC, + "[eNB %d][RAPROC] Frame %d Received RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for preamble %d/%d\n", + module_idP, frameP, *(uint8_t *) rarh, rar[0], rar[1], rar[2], + rar[3], rar[4], rar[5], rarh->RAPID, preamble_index); #ifdef DEBUG_RAR - LOG_D(MAC,"[UE %d][RAPROC] rarh->E %d\n",module_idP,rarh->E); - LOG_D(MAC,"[UE %d][RAPROC] rarh->T %d\n",module_idP,rarh->T); - LOG_D(MAC,"[UE %d][RAPROC] rarh->RAPID %d\n",module_idP,rarh->RAPID); + LOG_D(MAC, "[UE %d][RAPROC] rarh->E %d\n", module_idP, rarh->E); + LOG_D(MAC, "[UE %d][RAPROC] rarh->T %d\n", module_idP, rarh->T); + LOG_D(MAC, "[UE %d][RAPROC] rarh->RAPID %d\n", module_idP, + rarh->RAPID); - // LOG_I(MAC,"[UE %d][RAPROC] rar->R %d\n",module_idP,rar->R); - LOG_D(MAC,"[UE %d][RAPROC] rar->Timing_Advance_Command %d\n",module_idP,(((uint16_t)(rar[0]&0x7f))<<4) + (rar[1]>>4)); - // LOG_I(MAC,"[UE %d][RAPROC] rar->hopping_flag %d\n",module_idP,rar->hopping_flag); - // LOG_I(MAC,"[UE %d][RAPROC] rar->rb_alloc %d\n",module_idP,rar->rb_alloc); - // LOG_I(MAC,"[UE %d][RAPROC] rar->mcs %d\n",module_idP,rar->mcs); - // LOG_I(MAC,"[UE %d][RAPROC] rar->TPC %d\n",module_idP,rar->TPC); - // LOG_I(MAC,"[UE %d][RAPROC] rar->UL_delay %d\n",module_idP,rar->UL_delay); - // LOG_I(MAC,"[UE %d][RAPROC] rar->cqi_req %d\n",module_idP,rar->cqi_req); - LOG_D(MAC,"[UE %d][RAPROC] rar->t_crnti %x\n",module_idP,(uint16_t)rar[5]+(rar[4]<<8)); + // LOG_I(MAC,"[UE %d][RAPROC] rar->R %d\n",module_idP,rar->R); + LOG_D(MAC, "[UE %d][RAPROC] rar->Timing_Advance_Command %d\n", + module_idP, (((uint16_t) (rar[0] & 0x7f)) << 4) + (rar[1] >> 4)); + // LOG_I(MAC,"[UE %d][RAPROC] rar->hopping_flag %d\n",module_idP,rar->hopping_flag); + // LOG_I(MAC,"[UE %d][RAPROC] rar->rb_alloc %d\n",module_idP,rar->rb_alloc); + // LOG_I(MAC,"[UE %d][RAPROC] rar->mcs %d\n",module_idP,rar->mcs); + // LOG_I(MAC,"[UE %d][RAPROC] rar->TPC %d\n",module_idP,rar->TPC); + // LOG_I(MAC,"[UE %d][RAPROC] rar->UL_delay %d\n",module_idP,rar->UL_delay); + // LOG_I(MAC,"[UE %d][RAPROC] rar->cqi_req %d\n",module_idP,rar->cqi_req); + LOG_D(MAC, "[UE %d][RAPROC] rar->t_crnti %x\n", module_idP, + (uint16_t) rar[5] + (rar[4] << 8)); #endif - if (opt_enabled) { - LOG_D(OPT,"[UE %d][RAPROC] CC_id %d RAR Frame %d trace pdu for ra-RNTI %x\n", - module_idP, CC_id, frameP, ra_rnti); - trace_pdu(1, (uint8_t*)dlsch_buffer, n_rarh + n_rarpy*6, module_idP, 2, ra_rnti, - UE_mac_inst[module_idP].rxFrame, UE_mac_inst[module_idP].rxSubframe, 0, 0); - } + if (opt_enabled) { + LOG_D(OPT, + "[UE %d][RAPROC] CC_id %d RAR Frame %d trace pdu for ra-RNTI %x\n", + module_idP, CC_id, frameP, ra_rnti); + trace_pdu(1, (uint8_t *) dlsch_buffer, n_rarh + n_rarpy * 6, + module_idP, 2, ra_rnti, UE_mac_inst[module_idP].rxFrame, + UE_mac_inst[module_idP].rxSubframe, 0, 0); + } - if (preamble_index == rarh->RAPID) { - *t_crnti = (uint16_t)rar[5]+(rar[4]<<8);//rar->t_crnti; - UE_mac_inst[module_idP].crnti = *t_crnti;//rar->t_crnti; - //return(rar->Timing_Advance_Command); - ret = ((((uint16_t)(rar[0]&0x7f))<<4) + (rar[1]>>4)); - } else { - UE_mac_inst[module_idP].crnti=0; - ret = (0xffff); - } + if (preamble_index == rarh->RAPID) { + *t_crnti = (uint16_t) rar[5] + (rar[4] << 8); //rar->t_crnti; + UE_mac_inst[module_idP].crnti = *t_crnti; //rar->t_crnti; + //return(rar->Timing_Advance_Command); + ret = ((((uint16_t) (rar[0] & 0x7f)) << 4) + (rar[1] >> 4)); + } else { + UE_mac_inst[module_idP].crnti = 0; + ret = (0xffff); + } - // move the selected RAR to the front of the RA_PDSCH buffer - memcpy(selected_rar_buffer+0, (uint8_t*)rarh, 1); - memcpy(selected_rar_buffer+1, (uint8_t*)rar , 6); + // move the selected RAR to the front of the RA_PDSCH buffer + memcpy(selected_rar_buffer + 0, (uint8_t *) rarh, 1); + memcpy(selected_rar_buffer + 1, (uint8_t *) rar, 6); - return ret; + return ret; } diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c index d6c2512309..5b73a76312 100644 --- a/openair2/LAYER2/MAC/ue_procedures.c +++ b/openair2/LAYER2/MAC/ue_procedures.c @@ -37,10 +37,10 @@ #include "defs.h" #include "proto.h" #ifdef PHY_EMUL -# include "SIMULATION/PHY_EMULATION/impl_defs.h" +#include "SIMULATION/PHY_EMULATION/impl_defs.h" #else -# include "SCHED/defs.h" -# include "PHY/impl_defs_top.h" +#include "SCHED/defs.h" +#include "PHY/impl_defs_top.h" #endif #include "PHY_INTERFACE/extern.h" #include "COMMON/mac_rrc_primitives.h" @@ -54,17 +54,17 @@ #include "OCG_extern.h" #ifdef PHY_EMUL -# include "SIMULATION/simulation_defs.h" +#include "SIMULATION/simulation_defs.h" #endif #include "pdcp.h" #if defined(ENABLE_ITTI) -# include "intertask_interface.h" +#include "intertask_interface.h" #endif #include "assertions.h" -#include "SIMULATION/TOOLS/defs.h" // for taus +#include "SIMULATION/TOOLS/defs.h" // for taus #define DEBUG_HEADER_PARSING 1 #define ENABLE_MAC_PAYLOAD_DEBUG 1 @@ -77,1738 +77,2071 @@ extern uint8_t usim_test; #endif */ mapping BSR_names[] = { - {"NONE", 0}, - {"SHORT BSR", 1}, - {"TRUNCATED BSR", 2}, - {"LONG BSR", 3}, - {"PADDING BSR", 4}, - {NULL, -1} + {"NONE", 0}, + {"SHORT BSR", 1}, + {"TRUNCATED BSR", 2}, + {"LONG BSR", 3}, + {"PADDING BSR", 4}, + {NULL, -1} }; void ue_init_mac(module_id_t module_idP) { - int i; - // default values as deined in 36.331 sec 9.2.2 - LOG_I(MAC,"[UE%d] Applying default macMainConfig\n",module_idP); - //UE_mac_inst[module_idP].scheduling_info.macConfig=NULL; - UE_mac_inst[module_idP].scheduling_info.retxBSR_Timer= RetxBSR_Timer_r12_sf10240; - UE_mac_inst[module_idP].scheduling_info.periodicBSR_Timer=PeriodicBSR_Timer_r12_infinity; - UE_mac_inst[module_idP].scheduling_info.periodicPHR_Timer = MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf20; - UE_mac_inst[module_idP].scheduling_info.prohibitPHR_Timer = MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf20; - UE_mac_inst[module_idP].scheduling_info.PathlossChange_db = MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB1; - UE_mac_inst[module_idP].PHR_state = MAC_MainConfig__phr_Config_PR_setup; - UE_mac_inst[module_idP].scheduling_info.SR_COUNTER=0; - UE_mac_inst[module_idP].scheduling_info.sr_ProhibitTimer=0; - UE_mac_inst[module_idP].scheduling_info.sr_ProhibitTimer_Running=0; - UE_mac_inst[module_idP].scheduling_info.maxHARQ_Tx=MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n5; - UE_mac_inst[module_idP].scheduling_info.ttiBundling=0; - UE_mac_inst[module_idP].scheduling_info.extendedBSR_Sizes_r10=0; - UE_mac_inst[module_idP].scheduling_info.extendedPHR_r10=0; - UE_mac_inst[module_idP].scheduling_info.drx_config=NULL; - UE_mac_inst[module_idP].scheduling_info.phr_config=NULL; - // set init value 0xFFFF, make sure periodic timer and retx time counters are NOT active, after bsr transmission set the value configured by the NW. - UE_mac_inst[module_idP].scheduling_info.periodicBSR_SF = MAC_UE_BSR_TIMER_NOT_RUNNING; - UE_mac_inst[module_idP].scheduling_info.retxBSR_SF = MAC_UE_BSR_TIMER_NOT_RUNNING; - UE_mac_inst[module_idP].BSR_reporting_active = BSR_TRIGGER_NONE; - - UE_mac_inst[module_idP].scheduling_info.periodicPHR_SF = get_sf_perioidicPHR_Timer(UE_mac_inst[module_idP].scheduling_info.periodicPHR_Timer); - UE_mac_inst[module_idP].scheduling_info.prohibitPHR_SF = get_sf_prohibitPHR_Timer(UE_mac_inst[module_idP].scheduling_info.prohibitPHR_Timer); - UE_mac_inst[module_idP].scheduling_info.PathlossChange_db = get_db_dl_PathlossChange(UE_mac_inst[module_idP].scheduling_info.PathlossChange); - UE_mac_inst[module_idP].PHR_reporting_active = 0; + int i; + // default values as deined in 36.331 sec 9.2.2 + LOG_I(MAC, "[UE%d] Applying default macMainConfig\n", module_idP); + //UE_mac_inst[module_idP].scheduling_info.macConfig=NULL; + UE_mac_inst[module_idP].scheduling_info.retxBSR_Timer = + RetxBSR_Timer_r12_sf10240; + UE_mac_inst[module_idP].scheduling_info.periodicBSR_Timer = + PeriodicBSR_Timer_r12_infinity; + UE_mac_inst[module_idP].scheduling_info.periodicPHR_Timer = + MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf20; + UE_mac_inst[module_idP].scheduling_info.prohibitPHR_Timer = + MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf20; + UE_mac_inst[module_idP].scheduling_info.PathlossChange_db = + MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB1; + UE_mac_inst[module_idP].PHR_state = + MAC_MainConfig__phr_Config_PR_setup; + UE_mac_inst[module_idP].scheduling_info.SR_COUNTER = 0; + UE_mac_inst[module_idP].scheduling_info.sr_ProhibitTimer = 0; + UE_mac_inst[module_idP].scheduling_info.sr_ProhibitTimer_Running = 0; + UE_mac_inst[module_idP].scheduling_info.maxHARQ_Tx = + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n5; + UE_mac_inst[module_idP].scheduling_info.ttiBundling = 0; + UE_mac_inst[module_idP].scheduling_info.extendedBSR_Sizes_r10 = 0; + UE_mac_inst[module_idP].scheduling_info.extendedPHR_r10 = 0; + UE_mac_inst[module_idP].scheduling_info.drx_config = NULL; + UE_mac_inst[module_idP].scheduling_info.phr_config = NULL; + // set init value 0xFFFF, make sure periodic timer and retx time counters are NOT active, after bsr transmission set the value configured by the NW. + UE_mac_inst[module_idP].scheduling_info.periodicBSR_SF = + MAC_UE_BSR_TIMER_NOT_RUNNING; + UE_mac_inst[module_idP].scheduling_info.retxBSR_SF = + MAC_UE_BSR_TIMER_NOT_RUNNING; + UE_mac_inst[module_idP].BSR_reporting_active = BSR_TRIGGER_NONE; - for (i=0; i < MAX_NUM_LCID; i++) { - LOG_D(MAC,"[UE%d] Applying default logical channel config for LCGID %d\n",module_idP,i); - UE_mac_inst[module_idP].scheduling_info.Bj[i]=-1; - UE_mac_inst[module_idP].scheduling_info.bucket_size[i]=-1; + UE_mac_inst[module_idP].scheduling_info.periodicPHR_SF = + get_sf_perioidicPHR_Timer(UE_mac_inst[module_idP]. + scheduling_info.periodicPHR_Timer); + UE_mac_inst[module_idP].scheduling_info.prohibitPHR_SF = + get_sf_prohibitPHR_Timer(UE_mac_inst[module_idP]. + scheduling_info.prohibitPHR_Timer); + UE_mac_inst[module_idP].scheduling_info.PathlossChange_db = + get_db_dl_PathlossChange(UE_mac_inst[module_idP]. + scheduling_info.PathlossChange); + UE_mac_inst[module_idP].PHR_reporting_active = 0; - if (i < DTCH) { // initilize all control channels lcgid to 0 - UE_mac_inst[module_idP].scheduling_info.LCGID[i]=0; - } else { // initialize all the data channels lcgid to 1 - UE_mac_inst[module_idP].scheduling_info.LCGID[i]=1; + for (i = 0; i < MAX_NUM_LCID; i++) { + LOG_D(MAC, + "[UE%d] Applying default logical channel config for LCGID %d\n", + module_idP, i); + UE_mac_inst[module_idP].scheduling_info.Bj[i] = -1; + UE_mac_inst[module_idP].scheduling_info.bucket_size[i] = -1; + + if (i < DTCH) { // initilize all control channels lcgid to 0 + UE_mac_inst[module_idP].scheduling_info.LCGID[i] = 0; + } else { // initialize all the data channels lcgid to 1 + UE_mac_inst[module_idP].scheduling_info.LCGID[i] = 1; + } + + UE_mac_inst[module_idP].scheduling_info.LCID_status[i] = + LCID_EMPTY; + UE_mac_inst[module_idP].scheduling_info.LCID_buffer_remain[i] = 0; } - UE_mac_inst[module_idP].scheduling_info.LCID_status[i]=LCID_EMPTY; - UE_mac_inst[module_idP].scheduling_info.LCID_buffer_remain[i] = 0; - } - #ifdef CBA - for (i=0; i E == 0) { - // printf("E=0\n"); - not_done = 0; + if (((SCH_SUBHEADER_FIXED *) mac_header_ptr)->E == 0) { + // printf("E=0\n"); + not_done = 0; + } + + lcid = ((SCH_SUBHEADER_FIXED *) mac_header_ptr)->LCID; + + if (lcid < UE_CONT_RES) { + //printf("[MAC][UE] header %x.%x.%x\n",mac_header_ptr[0],mac_header_ptr[1],mac_header_ptr[2]); + if (not_done == 0) { // last MAC SDU, length is implicit + mac_header_ptr++; + length = + tb_length - (mac_header_ptr - mac_header) - ce_len; + + for (num_sdu_cnt = 0; num_sdu_cnt < num_sdus; + num_sdu_cnt++) { + length -= rx_lengths[num_sdu_cnt]; + } + } else { + if (((SCH_SUBHEADER_LONG *) mac_header_ptr)->F == 1) { + length = + ((((SCH_SUBHEADER_LONG *) mac_header_ptr)-> + L_MSB & 0x7f) + << 8) | (((SCH_SUBHEADER_LONG *) mac_header_ptr)-> + L_LSB & 0xff); + mac_header_ptr += 3; +#ifdef DEBUG_HEADER_PARSING + LOG_D(MAC, "[UE] parse long sdu, size %x \n", length); +#endif + + } else { //if (((SCH_SUBHEADER_SHORT *)mac_header_ptr)->F == 0) { + length = ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->L; + mac_header_ptr += 2; + } + } + +#ifdef DEBUG_HEADER_PARSING + LOG_D(MAC, "[UE] sdu %d lcid %d length %d (offset now %ld)\n", + num_sdus, lcid, length, mac_header_ptr - mac_header); +#endif + rx_lcids[num_sdus] = lcid; + rx_lengths[num_sdus] = length; + num_sdus++; + } else { // This is a control element subheader + if (lcid == SHORT_PADDING) { + num_padding++; + mac_header_ptr++; + } else { + rx_ces[num_ces] = lcid; + num_ces++; + mac_header_ptr++; + + if (lcid == TIMING_ADV_CMD) { + ce_len++; + } else if (lcid == UE_CONT_RES) { + + // FNA: check MAC Header is one of thoses defined in Annex B of 36.321 + // Check there is only 1 Contention Resolution + if (num_cont_res) { + LOG_W(MAC, + "[UE] Msg4 Wrong received format: More than 1 Contention Resolution\n"); + // exit parsing + return NULL; + + } + // UE_CONT_RES shall never be the last subheader unless this is the only MAC subheader + if ((not_done == 0) + && ((num_sdus) || (num_ces > 1) || (num_padding))) { + LOG_W(MAC, + "[UE] Msg4 Wrong received format: Contention Resolution after num_ces=%d num_sdus=%d num_padding=%d\n", + num_ces, num_sdus, num_padding); + // exit parsing + return NULL; + } + num_cont_res++; + ce_len += 6; + } + } + +#ifdef DEBUG_HEADER_PARSING + LOG_D(MAC, "[UE] ce %d lcid %d (offset now %ld)\n", num_ces, + lcid, mac_header_ptr - mac_header); +#endif + } } - lcid = ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID; + *num_ce = num_ces; + *num_sdu = num_sdus; - if (lcid < UE_CONT_RES) { - //printf("[MAC][UE] header %x.%x.%x\n",mac_header_ptr[0],mac_header_ptr[1],mac_header_ptr[2]); - if (not_done==0) {// last MAC SDU, length is implicit - mac_header_ptr++; - length = tb_length-(mac_header_ptr-mac_header)-ce_len; - - for (num_sdu_cnt=0; num_sdu_cnt < num_sdus ; num_sdu_cnt++) { - length -= rx_lengths[num_sdu_cnt]; - } - } else { - if (((SCH_SUBHEADER_LONG *)mac_header_ptr)->F == 1) { - length = ((((SCH_SUBHEADER_LONG *)mac_header_ptr)->L_MSB & 0x7f ) << 8 ) | (((SCH_SUBHEADER_LONG *)mac_header_ptr)->L_LSB & 0xff); - mac_header_ptr += 3; -#ifdef DEBUG_HEADER_PARSING - LOG_D(MAC,"[UE] parse long sdu, size %x \n",length); -#endif - - } else { //if (((SCH_SUBHEADER_SHORT *)mac_header_ptr)->F == 0) { - length = ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->L; - mac_header_ptr += 2; - } - } - -#ifdef DEBUG_HEADER_PARSING - LOG_D(MAC,"[UE] sdu %d lcid %d length %d (offset now %ld)\n", - num_sdus,lcid,length,mac_header_ptr-mac_header); -#endif - rx_lcids[num_sdus] = lcid; - rx_lengths[num_sdus] = length; - num_sdus++; - } else { // This is a control element subheader - if (lcid == SHORT_PADDING) { - num_padding ++; - mac_header_ptr++; - } else { - rx_ces[num_ces] = lcid; - num_ces++; - mac_header_ptr ++; - - if (lcid==TIMING_ADV_CMD) { - ce_len++; - } else if (lcid==UE_CONT_RES) { - - // FNA: check MAC Header is one of thoses defined in Annex B of 36.321 - // Check there is only 1 Contention Resolution - if (num_cont_res) { - LOG_W(MAC,"[UE] Msg4 Wrong received format: More than 1 Contention Resolution\n"); - // exit parsing - return NULL; - - } - - // UE_CONT_RES shall never be the last subheader unless this is the only MAC subheader - if ((not_done == 0) && ((num_sdus) || (num_ces > 1) || (num_padding))) { - LOG_W(MAC,"[UE] Msg4 Wrong received format: Contention Resolution after num_ces=%d num_sdus=%d num_padding=%d\n",num_ces,num_sdus,num_padding); - // exit parsing - return NULL; - } - num_cont_res ++; - ce_len+=6; - } - } - -#ifdef DEBUG_HEADER_PARSING - LOG_D(MAC,"[UE] ce %d lcid %d (offset now %ld)\n",num_ces,lcid,mac_header_ptr-mac_header); -#endif - } - } - - *num_ce = num_ces; - *num_sdu = num_sdus; - - return(mac_header_ptr); + return (mac_header_ptr); } -uint32_t ue_get_SR(module_id_t module_idP,int CC_id,frame_t frameP,uint8_t eNB_id,uint16_t rnti, sub_frame_t subframe) +uint32_t +ue_get_SR(module_id_t module_idP, int CC_id, frame_t frameP, + uint8_t eNB_id, uint16_t rnti, sub_frame_t subframe) { - // no UL-SCH resources available for this tti && UE has a valid PUCCH resources for SR configuration for this tti - // int MGL=6;// measurement gap length in ms - int MGRP = 0; // measurement gap repetition period in ms - int gapOffset = -1; - int T = 0; + // no UL-SCH resources available for this tti && UE has a valid PUCCH resources for SR configuration for this tti + // int MGL=6;// measurement gap length in ms + int MGRP = 0; // measurement gap repetition period in ms + int gapOffset = -1; + int T = 0; - DevCheck(module_idP < (int)NB_UE_INST, module_idP, NB_UE_INST, 0); + DevCheck(module_idP < (int) NB_UE_INST, module_idP, NB_UE_INST, 0); - AssertFatal(CC_id==0, - "Transmission on secondary CCs is not supported yet\n"); + AssertFatal(CC_id == 0, + "Transmission on secondary CCs is not supported yet\n"); - // determin the measurement gap - if (UE_mac_inst[module_idP].measGapConfig !=NULL) { - if (UE_mac_inst[module_idP].measGapConfig->choice.setup.gapOffset.present == MeasGapConfig__setup__gapOffset_PR_gp0) { - MGRP= 40; - gapOffset= UE_mac_inst[module_idP].measGapConfig->choice.setup.gapOffset.choice.gp0; - } else if (UE_mac_inst[module_idP].measGapConfig->choice.setup.gapOffset.present == MeasGapConfig__setup__gapOffset_PR_gp1) { - MGRP= 80; - gapOffset= UE_mac_inst[module_idP].measGapConfig->choice.setup.gapOffset.choice.gp1; + // determin the measurement gap + if (UE_mac_inst[module_idP].measGapConfig != NULL) { + if (UE_mac_inst[module_idP].measGapConfig->choice.setup. + gapOffset.present == MeasGapConfig__setup__gapOffset_PR_gp0) { + MGRP = 40; + gapOffset = + UE_mac_inst[module_idP].measGapConfig->choice. + setup.gapOffset.choice.gp0; + } else if (UE_mac_inst[module_idP].measGapConfig->choice. + setup.gapOffset.present == + MeasGapConfig__setup__gapOffset_PR_gp1) { + MGRP = 80; + gapOffset = + UE_mac_inst[module_idP].measGapConfig->choice. + setup.gapOffset.choice.gp1; + } else { + LOG_W(MAC, "Measurement GAP offset is unknown\n"); + } + + T = MGRP / 10; + DevAssert(T != 0); + + //check the measurement gap and sr prohibit timer + if ((subframe == gapOffset % 10) + && ((frameP % T) == (floor(gapOffset / 10))) + && (UE_mac_inst[module_idP]. + scheduling_info.sr_ProhibitTimer_Running == 0)) { + UE_mac_inst[module_idP].scheduling_info.SR_pending = 1; + return (0); + } + } + + if ((UE_mac_inst[module_idP].physicalConfigDedicated != NULL) && + (UE_mac_inst[module_idP].scheduling_info.SR_pending == 1) && + (UE_mac_inst[module_idP].scheduling_info.SR_COUNTER < + (1 << + (2 + + UE_mac_inst[module_idP]. + physicalConfigDedicated->schedulingRequestConfig->choice.setup. + dsr_TransMax)))) { + LOG_D(MAC, + "[UE %d][SR %x] Frame %d subframe %d PHY asks for SR (SR_COUNTER/dsr_TransMax %d/%d), SR_pending %d\n", + module_idP, rnti, frameP, subframe, + UE_mac_inst[module_idP].scheduling_info.SR_COUNTER, + (1 << + (2 + + UE_mac_inst[module_idP]. + physicalConfigDedicated->schedulingRequestConfig->choice. + setup.dsr_TransMax)), + UE_mac_inst[module_idP].scheduling_info.SR_pending); + + UE_mac_inst[module_idP].scheduling_info.SR_COUNTER++; + + // start the sr-prohibittimer : rel 9 and above + if (UE_mac_inst[module_idP].scheduling_info.sr_ProhibitTimer > 0) { // timer configured + UE_mac_inst[module_idP].scheduling_info.sr_ProhibitTimer--; + UE_mac_inst[module_idP].scheduling_info. + sr_ProhibitTimer_Running = 1; + } else { + UE_mac_inst[module_idP].scheduling_info. + sr_ProhibitTimer_Running = 0; + } + + LOG_D(MAC, + "[UE %d][SR %x] Frame %d subframe %d send SR indication (SR_COUNTER/dsr_TransMax %d/%d), SR_pending %d\n", + module_idP, rnti, frameP, subframe, + UE_mac_inst[module_idP].scheduling_info.SR_COUNTER, + (1 << + (2 + + UE_mac_inst[module_idP]. + physicalConfigDedicated->schedulingRequestConfig->choice. + setup.dsr_TransMax)), + UE_mac_inst[module_idP].scheduling_info.SR_pending); + + //UE_mac_inst[module_idP].ul_active =1; + return (1); //instruct phy to signal SR } else { - LOG_W(MAC, "Measurement GAP offset is unknown\n"); + // notify RRC to relase PUCCH/SRS + // clear any configured dl/ul + // initiate RA + if (UE_mac_inst[module_idP].scheduling_info.SR_pending) { + // release all pucch resource + UE_mac_inst[module_idP].physicalConfigDedicated = NULL; + UE_mac_inst[module_idP].ul_active = 0; + UE_mac_inst[module_idP].BSR_reporting_active = + BSR_TRIGGER_NONE; + + LOG_I(MAC, "[UE %d] Release all SRs \n", module_idP); + } + UE_mac_inst[module_idP].scheduling_info.SR_pending = 0; + UE_mac_inst[module_idP].scheduling_info.SR_COUNTER = 0; + return (0); } - - T=MGRP/10; - DevAssert( T != 0 ); - - //check the measurement gap and sr prohibit timer - if ((subframe == gapOffset %10) && ((frameP %T) == (floor(gapOffset/10))) - && (UE_mac_inst[module_idP].scheduling_info.sr_ProhibitTimer_Running ==0)) { - UE_mac_inst[module_idP].scheduling_info.SR_pending=1; - return(0); - } - } - - if ((UE_mac_inst[module_idP].physicalConfigDedicated != NULL) && - (UE_mac_inst[module_idP].scheduling_info.SR_pending==1) && - (UE_mac_inst[module_idP].scheduling_info.SR_COUNTER < - (1<<(2+UE_mac_inst[module_idP].physicalConfigDedicated->schedulingRequestConfig->choice.setup.dsr_TransMax))) - ) { - LOG_D(MAC,"[UE %d][SR %x] Frame %d subframe %d PHY asks for SR (SR_COUNTER/dsr_TransMax %d/%d), SR_pending %d\n", - module_idP,rnti,frameP,subframe, - UE_mac_inst[module_idP].scheduling_info.SR_COUNTER, - (1<<(2+UE_mac_inst[module_idP].physicalConfigDedicated->schedulingRequestConfig->choice.setup.dsr_TransMax)), - UE_mac_inst[module_idP].scheduling_info.SR_pending); - - UE_mac_inst[module_idP].scheduling_info.SR_COUNTER++; - - // start the sr-prohibittimer : rel 9 and above - if (UE_mac_inst[module_idP].scheduling_info.sr_ProhibitTimer > 0) { // timer configured - UE_mac_inst[module_idP].scheduling_info.sr_ProhibitTimer--; - UE_mac_inst[module_idP].scheduling_info.sr_ProhibitTimer_Running=1; - } else { - UE_mac_inst[module_idP].scheduling_info.sr_ProhibitTimer_Running=0; - } - - LOG_D(MAC,"[UE %d][SR %x] Frame %d subframe %d send SR indication (SR_COUNTER/dsr_TransMax %d/%d), SR_pending %d\n", - module_idP,rnti,frameP,subframe, - UE_mac_inst[module_idP].scheduling_info.SR_COUNTER, - (1<<(2+UE_mac_inst[module_idP].physicalConfigDedicated->schedulingRequestConfig->choice.setup.dsr_TransMax)), - UE_mac_inst[module_idP].scheduling_info.SR_pending); - - //UE_mac_inst[module_idP].ul_active =1; - return(1); //instruct phy to signal SR - } else { - // notify RRC to relase PUCCH/SRS - // clear any configured dl/ul - // initiate RA - if (UE_mac_inst[module_idP].scheduling_info.SR_pending){ - // release all pucch resource - UE_mac_inst[module_idP].physicalConfigDedicated = NULL; - UE_mac_inst[module_idP].ul_active=0; - UE_mac_inst[module_idP].BSR_reporting_active=BSR_TRIGGER_NONE; - - LOG_I(MAC,"[UE %d] Release all SRs \n", module_idP); - } - UE_mac_inst[module_idP].scheduling_info.SR_pending=0; - UE_mac_inst[module_idP].scheduling_info.SR_COUNTER=0; - return(0); - } } //------------------------------------------------------------------------------ void -ue_send_sdu( - module_id_t module_idP, +ue_send_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP, - sub_frame_t subframeP, - uint8_t* sdu, - uint16_t sdu_len, - uint8_t eNB_index -) + sub_frame_t subframeP, + uint8_t * sdu, uint16_t sdu_len, uint8_t eNB_index) //------------------------------------------------------------------------------ { - unsigned char rx_ces[MAX_NUM_CE],num_ce,num_sdu,i,*payload_ptr; - unsigned char rx_lcids[NB_RB_MAX]; - unsigned short rx_lengths[NB_RB_MAX]; - unsigned char *tx_sdu; + unsigned char rx_ces[MAX_NUM_CE], num_ce, num_sdu, i, *payload_ptr; + unsigned char rx_lcids[NB_RB_MAX]; + unsigned short rx_lengths[NB_RB_MAX]; + unsigned char *tx_sdu; #if UE_TIMING_TRACE - start_meas(&UE_mac_inst[module_idP].rx_dlsch_sdu); + start_meas(&UE_mac_inst[module_idP].rx_dlsch_sdu); #endif - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU, VCD_FUNCTION_IN); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU, VCD_FUNCTION_IN); - LOG_T(MAC,"sdu: %x.%x.%x\n",sdu[0],sdu[1],sdu[2]); + LOG_T(MAC, "sdu: %x.%x.%x\n", sdu[0], sdu[1], sdu[2]); - if (opt_enabled) { - trace_pdu(1, sdu, sdu_len, module_idP, 3, UE_mac_inst[module_idP].crnti, - frameP, subframeP, 0, 0); - LOG_D(OPT,"[UE %d][DLSCH] Frame %d trace pdu for rnti %x with size %d\n", - module_idP, frameP, UE_mac_inst[module_idP].crnti, sdu_len); - } - - payload_ptr = parse_header(sdu,&num_ce,&num_sdu,rx_ces,rx_lcids,rx_lengths,sdu_len); - -#ifdef DEBUG_HEADER_PARSING - LOG_D(MAC,"[UE %d] ue_send_sdu : Frame %d eNB_index %d : num_ce %d num_sdu %d\n",module_idP, - frameP,eNB_index,num_ce,num_sdu); -#endif - -#if defined(ENABLE_MAC_PAYLOAD_DEBUG) - LOG_T(MAC,"[UE %d] First 32 bytes of DLSCH : \n", module_idP); - - for (i=0; i<32; i++) { - LOG_T(MAC,"%x.",sdu[i]); - } - - LOG_T(MAC,"\n"); -#endif - - if (payload_ptr != NULL) { - - for (i=0; i= 9 (64 bits) - // (other possibility is 1 for TBS=7 (SCH_SUBHEADER_FIXED), or 2 for TBS=8 (SCH_SUBHEADER_FIXED+PADDING or SCH_SUBHEADER_SHORT) - for (i=0; i<6; i++) - if (tx_sdu[i] != payload_ptr[i]) { - LOG_E(MAC,"[UE %d][RAPROC] Contention detected, RA failed\n",module_idP); - ra_failed(module_idP,CC_id,eNB_index); - UE_mac_inst[module_idP].RA_contention_resolution_timer_active = 0; - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU, VCD_FUNCTION_OUT); - return; - } - - LOG_I(MAC,"[UE %d][RAPROC] Frame %d : Clearing contention resolution timer\n", module_idP, frameP); - UE_mac_inst[module_idP].RA_contention_resolution_timer_active = 0; - ra_succeeded(module_idP,CC_id,eNB_index); - } - - payload_ptr+=6; - break; - - case TIMING_ADV_CMD: -#ifdef DEBUG_HEADER_PARSING - LOG_D(MAC,"[UE] CE %d : UE Timing Advance : %d\n",i,payload_ptr[0]); -#endif - process_timing_advance(module_idP,CC_id,payload_ptr[0]); - payload_ptr++; - break; - - case DRX_CMD: -#ifdef DEBUG_HEADER_PARSING - LOG_D(MAC,"[UE] CE %d : UE DRX :",i); -#endif - payload_ptr++; - break; + if (opt_enabled) { + trace_pdu(1, sdu, sdu_len, module_idP, 3, + UE_mac_inst[module_idP].crnti, frameP, subframeP, 0, 0); + LOG_D(OPT, + "[UE %d][DLSCH] Frame %d trace pdu for rnti %x with size %d\n", + module_idP, frameP, UE_mac_inst[module_idP].crnti, sdu_len); } - } - for (i=0; i DL-CCCH, RRC message (eNB %d, %d bytes)\n", - module_idP, - UE_mac_inst[module_idP].crnti, - frameP, - eNB_index, - rx_lengths[i]); #if defined(ENABLE_MAC_PAYLOAD_DEBUG) - int j; + LOG_T(MAC, "[UE %d] First 32 bytes of DLSCH : \n", module_idP); - for (j=0; j DL-DCCH%d, RRC message (eNB %d, %d bytes)\n", module_idP, frameP, rx_lcids[i],eNB_index,rx_lengths[i]); - mac_rlc_data_ind(module_idP, - UE_mac_inst[module_idP].crnti, - eNB_index, - frameP, - ENB_FLAG_NO, - MBMS_FLAG_NO, - rx_lcids[i], - (char *)payload_ptr, - rx_lengths[i], - 1, - NULL); - - } else if ((rx_lcids[i] < NB_RB_MAX) && (rx_lcids[i] > DCCH1 )) { - - LOG_D(MAC,"[UE %d] Frame %d : DLSCH -> DL-DTCH%d (eNB %d, %d bytes)\n", module_idP, frameP,rx_lcids[i], eNB_index,rx_lengths[i]); - -#if defined(ENABLE_MAC_PAYLOAD_DEBUG) - int j; - for (j=0;j= 9 (64 bits) + // (other possibility is 1 for TBS=7 (SCH_SUBHEADER_FIXED), or 2 for TBS=8 (SCH_SUBHEADER_FIXED+PADDING or SCH_SUBHEADER_SHORT) + for (i = 0; i < 6; i++) + if (tx_sdu[i] != payload_ptr[i]) { + LOG_E(MAC, + "[UE %d][RAPROC] Contention detected, RA failed\n", + module_idP); + ra_failed(module_idP, CC_id, eNB_index); + UE_mac_inst + [module_idP]. + RA_contention_resolution_timer_active = 0; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU, + VCD_FUNCTION_OUT); + return; + } + + LOG_I(MAC, + "[UE %d][RAPROC] Frame %d : Clearing contention resolution timer\n", + module_idP, frameP); + UE_mac_inst + [module_idP]. + RA_contention_resolution_timer_active = 0; + ra_succeeded(module_idP, CC_id, eNB_index); + } + + payload_ptr += 6; + break; + + case TIMING_ADV_CMD: +#ifdef DEBUG_HEADER_PARSING + LOG_D(MAC, "[UE] CE %d : UE Timing Advance : %d\n", i, + payload_ptr[0]); +#endif + process_timing_advance(module_idP, CC_id, payload_ptr[0]); + payload_ptr++; + break; + + case DRX_CMD: +#ifdef DEBUG_HEADER_PARSING + LOG_D(MAC, "[UE] CE %d : UE DRX :", i); +#endif + payload_ptr++; + break; + } + } + + for (i = 0; i < num_sdu; i++) { +#ifdef DEBUG_HEADER_PARSING + LOG_D(MAC, "[UE] SDU %d : LCID %d, length %d\n", i, + rx_lcids[i], rx_lengths[i]); +#endif + + if (rx_lcids[i] == CCCH) { + + LOG_D(MAC, + "[UE %d] rnti %x Frame %d : DLSCH -> DL-CCCH, RRC message (eNB %d, %d bytes)\n", + module_idP, UE_mac_inst[module_idP].crnti, frameP, + eNB_index, rx_lengths[i]); + +#if defined(ENABLE_MAC_PAYLOAD_DEBUG) + int j; + + for (j = 0; j < rx_lengths[i]; j++) { + LOG_T(MAC, "%x.", (uint8_t) payload_ptr[j]); + } + + LOG_T(MAC, "\n"); +#endif + mac_rrc_data_ind(module_idP, + CC_id, + frameP, subframeP, + UE_mac_inst[module_idP].crnti, + CCCH, + (uint8_t *) payload_ptr, + rx_lengths[i], ENB_FLAG_NO, eNB_index, 0); + + } else if ((rx_lcids[i] == DCCH) || (rx_lcids[i] == DCCH1)) { + LOG_D(MAC, + "[UE %d] Frame %d : DLSCH -> DL-DCCH%d, RRC message (eNB %d, %d bytes)\n", + module_idP, frameP, rx_lcids[i], eNB_index, + rx_lengths[i]); + mac_rlc_data_ind(module_idP, UE_mac_inst[module_idP].crnti, + eNB_index, frameP, ENB_FLAG_NO, + MBMS_FLAG_NO, rx_lcids[i], + (char *) payload_ptr, rx_lengths[i], 1, + NULL); + + } else if ((rx_lcids[i] < NB_RB_MAX) && (rx_lcids[i] > DCCH1)) { + + LOG_D(MAC, + "[UE %d] Frame %d : DLSCH -> DL-DTCH%d (eNB %d, %d bytes)\n", + module_idP, frameP, rx_lcids[i], eNB_index, + rx_lengths[i]); + +#if defined(ENABLE_MAC_PAYLOAD_DEBUG) + int j; + for (j = 0; j < rx_lengths[i]; j++) + LOG_T(MAC, "%x.", (unsigned char) payload_ptr[j]); + LOG_T(MAC, "\n"); +#endif + mac_rlc_data_ind(module_idP, + UE_mac_inst[module_idP].crnti, + eNB_index, + frameP, + ENB_FLAG_NO, + MBMS_FLAG_NO, + rx_lcids[i], + (char *) payload_ptr, rx_lengths[i], 1, + NULL); + } else { + LOG_E(MAC, "[UE %d] Frame %d : unknown LCID %d (eNB %d)\n", + module_idP, frameP, rx_lcids[i], eNB_index); + } + payload_ptr += rx_lengths[i]; + } + } // end if (payload_ptr != NULL) + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU, VCD_FUNCTION_OUT); #if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].rx_dlsch_sdu); + stop_meas(&UE_mac_inst[module_idP].rx_dlsch_sdu); #endif } -void ue_decode_si(module_id_t module_idP,int CC_id,frame_t frameP, uint8_t eNB_index, void *pdu,uint16_t len) +void +ue_decode_si(module_id_t module_idP, int CC_id, frame_t frameP, + uint8_t eNB_index, void *pdu, uint16_t len) { #if UE_TIMING_TRACE start_meas(&UE_mac_inst[module_idP].rx_si); #endif - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_IN); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_IN); - LOG_D(MAC,"[UE %d] Frame %d Sending SI to RRC (LCID Id %d,len %d)\n",module_idP,frameP,BCCH,len); + LOG_D(MAC, "[UE %d] Frame %d Sending SI to RRC (LCID Id %d,len %d)\n", + module_idP, frameP, BCCH, len); - mac_rrc_data_ind(module_idP, - CC_id, - frameP,0, // unknown subframe - SI_RNTI, - BCCH, - (uint8_t *)pdu, - len, - ENB_FLAG_NO, - eNB_index, - 0); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_OUT); + mac_rrc_data_ind(module_idP, CC_id, frameP, 0, // unknown subframe + SI_RNTI, + BCCH, (uint8_t *) pdu, len, ENB_FLAG_NO, eNB_index, + 0); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_OUT); #if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].rx_si); + stop_meas(&UE_mac_inst[module_idP].rx_si); #endif - if (opt_enabled == 1) { - trace_pdu(0, - (uint8_t *)pdu, - len, - module_idP, - 4, - 0xffff, - UE_mac_inst[module_idP].rxFrame, - UE_mac_inst[module_idP].rxSubframe, - 0, - 0); - LOG_D(OPT,"[UE %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n", - module_idP, frameP, CC_id, 0xffff, len); - } + if (opt_enabled == 1) { + trace_pdu(0, + (uint8_t *) pdu, + len, + module_idP, + 4, + 0xffff, + UE_mac_inst[module_idP].rxFrame, + UE_mac_inst[module_idP].rxSubframe, 0, 0); + LOG_D(OPT, + "[UE %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n", + module_idP, frameP, CC_id, 0xffff, len); + } } -void ue_decode_p(module_id_t module_idP,int CC_id,frame_t frameP, uint8_t eNB_index, void *pdu,uint16_t len) +void +ue_decode_p(module_id_t module_idP, int CC_id, frame_t frameP, + uint8_t eNB_index, void *pdu, uint16_t len) { #if UE_TIMING_TRACE start_meas(&UE_mac_inst[module_idP].rx_p); #endif - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_PCCH, VCD_FUNCTION_IN); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_PCCH, VCD_FUNCTION_IN); - LOG_D(MAC,"[UE %d] Frame %d Sending Paging message to RRC (LCID Id %d,len %d)\n",module_idP,frameP,PCCH,len); + LOG_D(MAC, + "[UE %d] Frame %d Sending Paging message to RRC (LCID Id %d,len %d)\n", + module_idP, frameP, PCCH, len); - mac_rrc_data_ind(module_idP, - CC_id, - frameP,0, // unknown subframe - P_RNTI, - PCCH, - (uint8_t *)pdu, - len, - ENB_FLAG_NO, - eNB_index, - 0); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_PCCH, VCD_FUNCTION_OUT); + mac_rrc_data_ind(module_idP, CC_id, frameP, 0, // unknown subframe + P_RNTI, + PCCH, (uint8_t *) pdu, len, ENB_FLAG_NO, eNB_index, + 0); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_PCCH, VCD_FUNCTION_OUT); #if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].rx_p); + stop_meas(&UE_mac_inst[module_idP].rx_p); #endif - if (opt_enabled == 1) { - trace_pdu(0, - (uint8_t *)pdu, - len, - module_idP, - 4, - P_RNTI, - UE_mac_inst[module_idP].rxFrame, - UE_mac_inst[module_idP].rxSubframe, - 0, - 0); - LOG_D(OPT,"[UE %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n", - module_idP, frameP, CC_id, P_RNTI, len); - } + if (opt_enabled == 1) { + trace_pdu(0, + (uint8_t *) pdu, + len, + module_idP, + 4, + P_RNTI, + UE_mac_inst[module_idP].rxFrame, + UE_mac_inst[module_idP].rxSubframe, 0, 0); + LOG_D(OPT, + "[UE %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n", + module_idP, frameP, CC_id, P_RNTI, len); + } } #if defined(Rel10) || defined(Rel14) unsigned char *parse_mch_header(unsigned char *mac_header, - unsigned char *num_sdu, - unsigned char *rx_lcids, - unsigned short *rx_lengths, - unsigned short tb_length) + unsigned char *num_sdu, + unsigned char *rx_lcids, + unsigned short *rx_lengths, + unsigned short tb_length) { - unsigned char not_done=1, num_sdus=0, lcid, i; - unsigned char *mac_header_ptr = mac_header; - unsigned short length; + unsigned char not_done = 1, num_sdus = 0, lcid, i; + unsigned char *mac_header_ptr = mac_header; + unsigned short length; - while (not_done == 1) { - if (((SCH_SUBHEADER_FIXED *)mac_header_ptr)->E == 0) { - not_done = 0; + while (not_done == 1) { + if (((SCH_SUBHEADER_FIXED *) mac_header_ptr)->E == 0) { + not_done = 0; + } + + lcid = ((SCH_SUBHEADER_FIXED *) mac_header_ptr)->LCID; + + if (lcid < SHORT_PADDING) { // subheader for MSI, MCCH or MTCH + if (not_done == 0) { // last MAC SDU, length is implicit + mac_header_ptr++; + length = tb_length - (mac_header_ptr - mac_header); + + for (i = 0; i < num_sdus; i++) { + length -= rx_lengths[i]; + } + } else { // not the last MAC SDU + if (((SCH_SUBHEADER_LONG *) mac_header_ptr)->F == 1) { // subheader has length of 3octets + // length = ((SCH_SUBHEADER_LONG *)mac_header_ptr)->L; + length = + ((((SCH_SUBHEADER_LONG *) mac_header_ptr)-> + L_MSB & 0x7f) + << 8) | (((SCH_SUBHEADER_LONG *) mac_header_ptr)-> + L_LSB & 0xff); + mac_header_ptr += 3; + } else { // subheader has length of 2octets + length = ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->L; + mac_header_ptr += 2; + } + } + + rx_lcids[num_sdus] = lcid; + rx_lengths[num_sdus] = length; + num_sdus++; + } else { // subheader for padding + // if (lcid == SHORT_PADDING) + mac_header_ptr++; + } } - lcid = ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID; - - if (lcid < SHORT_PADDING) {// subheader for MSI, MCCH or MTCH - if (not_done == 0) { // last MAC SDU, length is implicit - mac_header_ptr++; - length = tb_length- (mac_header_ptr - mac_header); - - for (i=0; iF == 1) {// subheader has length of 3octets - // length = ((SCH_SUBHEADER_LONG *)mac_header_ptr)->L; - length = ((((SCH_SUBHEADER_LONG *)mac_header_ptr)->L_MSB & 0x7f ) << 8 ) | (((SCH_SUBHEADER_LONG *)mac_header_ptr)->L_LSB & 0xff); - mac_header_ptr += 3; - } else { // subheader has length of 2octets - length = ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->L; - mac_header_ptr += 2; - } - } - - rx_lcids[num_sdus] = lcid; - rx_lengths[num_sdus] = length; - num_sdus++; - } else { // subheader for padding - // if (lcid == SHORT_PADDING) - mac_header_ptr++; - } - } - - *num_sdu = num_sdus; - return(mac_header_ptr); + *num_sdu = num_sdus; + return (mac_header_ptr); } // this function is for sending mch_sdu from phy to mac -void ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP, uint8_t *sdu, uint16_t sdu_len, uint8_t eNB_index, uint8_t sync_area) +void +ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP, + uint8_t * sdu, uint16_t sdu_len, uint8_t eNB_index, + uint8_t sync_area) { - unsigned char num_sdu, i, *payload_ptr; - unsigned char rx_lcids[NB_RB_MAX]; - unsigned short rx_lengths[NB_RB_MAX]; + unsigned char num_sdu, i, *payload_ptr; + unsigned char rx_lcids[NB_RB_MAX]; + unsigned short rx_lengths[NB_RB_MAX]; #if UE_TIMING_TRACE - start_meas(&UE_mac_inst[module_idP].rx_mch_sdu); + start_meas(&UE_mac_inst[module_idP].rx_mch_sdu); #endif - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_MCH_SDU, VCD_FUNCTION_IN); - - LOG_D(MAC,"[UE %d] Frame %d : process the mch PDU for sync area %d \n",module_idP,frameP, sync_area); - LOG_D(MAC,"[UE %d] sdu: %x.%x\n", module_idP,sdu[0], sdu[1]); - LOG_D(MAC,"[UE %d] parse_mch_header, demultiplex\n",module_idP); - - payload_ptr = parse_mch_header(sdu, &num_sdu, rx_lcids, rx_lengths, sdu_len); - LOG_D(MAC,"[UE %d] parse_mch_header, found %d sdus\n",module_idP,num_sdu); - - for (i=0; iMSI for sync area %d (eNB %d, %d bytes)\n",module_idP,frameP, sync_area, eNB_index, rx_lengths[i]); - // ??store necessary scheduling info to ue_mac_inst in order to - // calculate exact position of interested service (for the complex case has >1 mtch) - // set msi_status to 1 - UE_mac_inst[module_idP].msi_status = 1; - } - } else if (rx_lcids[i] == MCCH_LCHANID) { - LOG_I(MAC,"[UE %d] Frame %d : SDU %d MCH->MCCH for sync area %d (eNB %d, %d bytes)\n",module_idP,frameP, i, sync_area, eNB_index, rx_lengths[i]); - mac_rrc_data_ind(module_idP, - CC_id, - frameP,0, // unknown subframe - M_RNTI, - MCCH, - payload_ptr, rx_lengths[i], 0, eNB_index, sync_area); - } else if (rx_lcids[i] == MTCH) { - if (UE_mac_inst[module_idP].msi_status==1) { - LOG_I(MAC,"[UE %d] Frame %d : MCH->MTCH for sync area %d (eNB %d, %d bytes)\n",module_idP,frameP, sync_area, eNB_index, rx_lengths[i]); - - mac_rlc_data_ind( - module_idP, - UE_mac_inst[module_idP].crnti, - eNB_index, - frameP, - ENB_FLAG_NO, - MBMS_FLAG_YES, - MTCH, /*+ (maxDRB + 3),*/ - (char *)payload_ptr, - rx_lengths[i], - 1, - NULL); - - } - } else { - LOG_W(MAC,"[UE %d] Frame %d : unknown sdu %d rx_lcids[%d]=%d mcch status %d eNB %d \n", - module_idP, - frameP, - rx_lengths[i], - i, - rx_lcids[i], - UE_mac_inst[module_idP].mcch_status, eNB_index); - } - - payload_ptr += rx_lengths[i]; - } - - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_MCH_SDU, VCD_FUNCTION_OUT); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].rx_mch_sdu); -#endif -} - -int8_t ue_get_mbsfn_sf_alloction (module_id_t module_idP, uint8_t mbsfn_sync_area, unsigned char eNB_index) -{ - // currently there is one-to-one mapping between sf allocation pattern and sync area - if (mbsfn_sync_area >= MAX_MBSFN_AREA) { - LOG_W( MAC, "[UE %"PRIu8"] MBSFN synchronization area %"PRIu8" out of range for eNB %"PRIu8"\n", module_idP, mbsfn_sync_area, eNB_index ); - return -1; - } else if (UE_mac_inst[module_idP].mbsfn_SubframeConfig[mbsfn_sync_area] != NULL) { - return mbsfn_sync_area; - } else { - LOG_W( MAC, "[UE %"PRIu8"] MBSFN Subframe Config pattern %"PRIu8" not found \n", module_idP, mbsfn_sync_area ); - return -1; - } -} - -int ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, uint32_t subframe, uint8_t eNB_index,uint8_t *sync_area, uint8_t *mcch_active) -{ - - int i=0, j=0, ii=0, msi_pos=0, mcch_mcs = - 1; - int mcch_flag=0, mtch_flag=0, msi_flag=0; - int mbsfn_period = 0;// 1<<(UE_mac_inst[module_idP].mbsfn_SubframeConfig[0]->radioframeAllocationPeriod); - int mcch_period = 0;// 32<<(UE_mac_inst[module_idP].mbsfn_AreaInfo[0]->mcch_Config_r9.mcch_RepetitionPeriod_r9); - int mch_scheduling_period = -1; - - int frame_FDD=1; - - -#if UE_TIMING_TRACE - start_meas(&UE_mac_inst[module_idP].ue_query_mch); -#endif - - if (UE_mac_inst[module_idP].pmch_Config[0]) { - mch_scheduling_period = 8<<(UE_mac_inst[module_idP].pmch_Config[0]->mch_SchedulingPeriod_r9); - } - - for (i=0; - i< UE_mac_inst[module_idP].num_active_mbsfn_area; - i++ ) { - // assume, that there is always a mapping - if ((j=ue_get_mbsfn_sf_alloction(module_idP,i,eNB_index)) == -1) { - return -1; // continue; - } - - ii=0; - msi_pos=0; - mbsfn_period = 1<<(UE_mac_inst[module_idP].mbsfn_SubframeConfig[0]->radioframeAllocationPeriod); - mcch_period = 32<<(UE_mac_inst[module_idP].mbsfn_AreaInfo[0]->mcch_Config_r9.mcch_RepetitionPeriod_r9); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_MCH_SDU, VCD_FUNCTION_IN); LOG_D(MAC, - "[UE %d] Frame %d subframe %d: Checking MBSFN Sync Area %d/%d with SF allocation %d/%d for MCCH and MTCH (mbsfn period %d, mcch period %d,mac sched period (%d,%ld))\n", - module_idP,frameP, subframe,i,UE_mac_inst[module_idP].num_active_mbsfn_area, - j,UE_mac_inst[module_idP].num_sf_allocation_pattern,mbsfn_period,mcch_period, - mch_scheduling_period,UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->radioframeAllocationOffset); + "[UE %d] Frame %d : process the mch PDU for sync area %d \n", + module_idP, frameP, sync_area); + LOG_D(MAC, "[UE %d] sdu: %x.%x\n", module_idP, sdu[0], sdu[1]); + LOG_D(MAC, "[UE %d] parse_mch_header, demultiplex\n", module_idP); - // get the real MCS value - switch (UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.signallingMCS_r9) { - case 0: - mcch_mcs = 2; - break; + payload_ptr = + parse_mch_header(sdu, &num_sdu, rx_lcids, rx_lengths, sdu_len); + LOG_D(MAC, "[UE %d] parse_mch_header, found %d sdus\n", module_idP, + num_sdu); - case 1: - mcch_mcs = 7; - break; + for (i = 0; i < num_sdu; i++) { + if (rx_lcids[i] == MCH_SCHDL_INFO) { + if (UE_mac_inst[module_idP].mcch_status == 1) { + LOG_I(MAC, + "[UE %d] Frame %d : MCH->MSI for sync area %d (eNB %d, %d bytes)\n", + module_idP, frameP, sync_area, eNB_index, + rx_lengths[i]); + // ??store necessary scheduling info to ue_mac_inst in order to + // calculate exact position of interested service (for the complex case has >1 mtch) + // set msi_status to 1 + UE_mac_inst[module_idP].msi_status = 1; + } + } else if (rx_lcids[i] == MCCH_LCHANID) { + LOG_I(MAC, + "[UE %d] Frame %d : SDU %d MCH->MCCH for sync area %d (eNB %d, %d bytes)\n", + module_idP, frameP, i, sync_area, eNB_index, + rx_lengths[i]); + mac_rrc_data_ind(module_idP, CC_id, frameP, 0, // unknown subframe + M_RNTI, + MCCH, + payload_ptr, rx_lengths[i], 0, eNB_index, + sync_area); + } else if (rx_lcids[i] == MTCH) { + if (UE_mac_inst[module_idP].msi_status == 1) { + LOG_I(MAC, + "[UE %d] Frame %d : MCH->MTCH for sync area %d (eNB %d, %d bytes)\n", + module_idP, frameP, sync_area, eNB_index, + rx_lengths[i]); - case 2: - mcch_mcs = 13; - break; + mac_rlc_data_ind(module_idP, UE_mac_inst[module_idP].crnti, eNB_index, frameP, ENB_FLAG_NO, MBMS_FLAG_YES, MTCH, /*+ (maxDRB + 3), */ + (char *) payload_ptr, rx_lengths[i], 1, + NULL); - case 3: - mcch_mcs = 19; - break; + } + } else { + LOG_W(MAC, + "[UE %d] Frame %d : unknown sdu %d rx_lcids[%d]=%d mcch status %d eNB %d \n", + module_idP, frameP, rx_lengths[i], i, rx_lcids[i], + UE_mac_inst[module_idP].mcch_status, eNB_index); + } + + payload_ptr += rx_lengths[i]; } - if (frameP % mbsfn_period == UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->radioframeAllocationOffset) { // MBSFN frameP - if (UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) { // one-frameP format - - if (UE_mac_inst[module_idP].pmch_Config[0]) { - // Find the first subframe in this MCH to transmit MSI - if (frameP % mch_scheduling_period == UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->radioframeAllocationOffset ) { - while (ii == 0) { - ii = UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & (0x80>>msi_pos); - msi_pos++; - } - } - } - - if (UE_mac_inst[module_idP].tdd_Config == NULL) frame_FDD=1; - else frame_FDD=0; - // Check if the subframe is for MSI, MCCH or MTCHs and Set the correspoding flag to 1 - switch (subframe) { - case 1: - if (frame_FDD==1) { - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF1) == MBSFN_FDD_SF1) { - if (msi_pos == 1) { - msi_flag = 1; - } - - if ( (frameP % mcch_period == UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF1) == MBSFN_FDD_SF1) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } - - break; - - case 2: - if (frame_FDD==1) { - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF2) == MBSFN_FDD_SF2) { - if (msi_pos == 2) { - msi_flag = 1; - } - - if ( (frameP % mcch_period == UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF2) == MBSFN_FDD_SF2) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } - - break; - - case 3: - if (frame_FDD==0) { //TDD - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF3) == MBSFN_TDD_SF3) { - if (msi_pos == 1) { - msi_flag = 1; - } - - if ( (frameP % mcch_period == UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF3) == MBSFN_TDD_SF3) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } else { // FDD - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF3) == MBSFN_FDD_SF3) { - if (msi_pos == 3) { - msi_flag = 1; - } - - if ((frameP % mcch_period == UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF3) == MBSFN_FDD_SF3) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } - - break; - - case 4: - if (frame_FDD==0) { - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF4) == MBSFN_TDD_SF4) { - if (msi_pos == 2) { - msi_flag = 1; - } - - if ((frameP % mcch_period == UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF4) == MBSFN_TDD_SF4) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } - - break; - - case 6: - if (frame_FDD==1) { - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF6) == MBSFN_FDD_SF6) { - if (msi_pos == 4) { - msi_flag = 1; - } - - if ((frameP % mcch_period == UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF6) == MBSFN_FDD_SF6) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } - - break; - - case 7: - if (frame_FDD==0) { // TDD - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF7) == MBSFN_TDD_SF7) { - if (msi_pos == 3) { - msi_flag = 1; - } - - if ((frameP % mcch_period == UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF7) == MBSFN_TDD_SF7) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } else { // FDD - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF7) == MBSFN_FDD_SF7) { - if (msi_pos == 5) { - msi_flag = 1; - } - - if ((frameP % mcch_period == UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF7) == MBSFN_FDD_SF7) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } - - break; - - case 8: - if (frame_FDD==0) { //TDD - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF8) == MBSFN_TDD_SF8) { - if (msi_pos == 4) { - msi_flag = 1; - } - - if ( (frameP % mcch_period == UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF8) == MBSFN_TDD_SF8) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } else { // FDD - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_FDD_SF8) == MBSFN_FDD_SF8) { - if (msi_pos == 6) { - msi_flag = 1; - } - - if ((frameP % mcch_period == UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_FDD_SF8) == MBSFN_FDD_SF8) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } - - break; - - case 9: - if (frame_FDD==0) { - if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.choice.oneFrame.buf[0] & MBSFN_TDD_SF9) == MBSFN_TDD_SF9) { - if (msi_pos == 5) { - msi_flag = 1; - } - - if ((frameP % mcch_period == UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.mcch_Offset_r9) && - ((UE_mac_inst[module_idP].mbsfn_AreaInfo[i]->mcch_Config_r9.sf_AllocInfo_r9.buf[0] & MBSFN_TDD_SF9) == MBSFN_TDD_SF9) ) { - mcch_flag = 1; - } - - mtch_flag = 1; - } - } - - break; - }// end switch - - // sf allocation is non-overlapping - if ((msi_flag==1) || (mcch_flag==1) || (mtch_flag==1)) { - LOG_D(MAC,"[UE %d] Frame %d Subframe %d: sync area %d SF alloc %d: msi flag %d, mcch flag %d, mtch flag %d\n", - module_idP, frameP, subframe,i,j,msi_flag,mcch_flag,mtch_flag); - - *sync_area=i; - break; - } - } else { // four-frameP format - } - } - } // end of for + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_MCH_SDU, VCD_FUNCTION_OUT); #if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].ue_query_mch); + stop_meas(&UE_mac_inst[module_idP].rx_mch_sdu); +#endif +} + +int8_t +ue_get_mbsfn_sf_alloction(module_id_t module_idP, + uint8_t mbsfn_sync_area, unsigned char eNB_index) +{ + // currently there is one-to-one mapping between sf allocation pattern and sync area + if (mbsfn_sync_area >= MAX_MBSFN_AREA) { + LOG_W(MAC, + "[UE %" PRIu8 "] MBSFN synchronization area %" PRIu8 + " out of range for eNB %" PRIu8 "\n", module_idP, + mbsfn_sync_area, eNB_index); + return -1; + } else if (UE_mac_inst[module_idP]. + mbsfn_SubframeConfig[mbsfn_sync_area] != NULL) { + return mbsfn_sync_area; + } else { + LOG_W(MAC, + "[UE %" PRIu8 "] MBSFN Subframe Config pattern %" PRIu8 + " not found \n", module_idP, mbsfn_sync_area); + return -1; + } +} + +int +ue_query_mch(module_id_t module_idP, uint8_t CC_id, uint32_t frameP, + uint32_t subframe, uint8_t eNB_index, uint8_t * sync_area, + uint8_t * mcch_active) +{ + + int i = 0, j = 0, ii = 0, msi_pos = 0, mcch_mcs = -1; + int mcch_flag = 0, mtch_flag = 0, msi_flag = 0; + int mbsfn_period = 0; // 1<<(UE_mac_inst[module_idP].mbsfn_SubframeConfig[0]->radioframeAllocationPeriod); + int mcch_period = 0; // 32<<(UE_mac_inst[module_idP].mbsfn_AreaInfo[0]->mcch_Config_r9.mcch_RepetitionPeriod_r9); + int mch_scheduling_period = -1; + + int frame_FDD = 1; + + +#if UE_TIMING_TRACE + start_meas(&UE_mac_inst[module_idP].ue_query_mch); #endif - if ( (mcch_flag==1)) { // || (msi_flag==1)) - *mcch_active=1; - } + if (UE_mac_inst[module_idP].pmch_Config[0]) { + mch_scheduling_period = + 8 << (UE_mac_inst[module_idP]. + pmch_Config[0]->mch_SchedulingPeriod_r9); + } - if ( (mcch_flag==1) || ((msi_flag==1) && (UE_mac_inst[module_idP].mcch_status==1)) ) { - return mcch_mcs; - } else if ((mtch_flag==1) && (UE_mac_inst[module_idP].msi_status==1)) { - return UE_mac_inst[module_idP].pmch_Config[0]->dataMCS_r9; - } else { - return -1; - } + for (i = 0; i < UE_mac_inst[module_idP].num_active_mbsfn_area; i++) { + // assume, that there is always a mapping + if ((j = + ue_get_mbsfn_sf_alloction(module_idP, i, eNB_index)) == -1) { + return -1; // continue; + } + + ii = 0; + msi_pos = 0; + mbsfn_period = + 1 << (UE_mac_inst[module_idP]. + mbsfn_SubframeConfig[0]->radioframeAllocationPeriod); + mcch_period = + 32 << (UE_mac_inst[module_idP]. + mbsfn_AreaInfo[0]->mcch_Config_r9. + mcch_RepetitionPeriod_r9); + + LOG_D(MAC, + "[UE %d] Frame %d subframe %d: Checking MBSFN Sync Area %d/%d with SF allocation %d/%d for MCCH and MTCH (mbsfn period %d, mcch period %d,mac sched period (%d,%ld))\n", + module_idP, frameP, subframe, i, + UE_mac_inst[module_idP].num_active_mbsfn_area, j, + UE_mac_inst[module_idP].num_sf_allocation_pattern, + mbsfn_period, mcch_period, mch_scheduling_period, + UE_mac_inst[module_idP]. + mbsfn_SubframeConfig[j]->radioframeAllocationOffset); + + // get the real MCS value + switch (UE_mac_inst[module_idP].mbsfn_AreaInfo[i]-> + mcch_Config_r9.signallingMCS_r9) { + case 0: + mcch_mcs = 2; + break; + + case 1: + mcch_mcs = 7; + break; + + case 2: + mcch_mcs = 13; + break; + + case 3: + mcch_mcs = 19; + break; + } + + if (frameP % mbsfn_period == UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->radioframeAllocationOffset) { // MBSFN frameP + if (UE_mac_inst[module_idP].mbsfn_SubframeConfig[j]->subframeAllocation.present == MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame) { // one-frameP format + + if (UE_mac_inst[module_idP].pmch_Config[0]) { + // Find the first subframe in this MCH to transmit MSI + if (frameP % mch_scheduling_period == + UE_mac_inst[module_idP]. + mbsfn_SubframeConfig + [j]->radioframeAllocationOffset) { + while (ii == 0) { + ii = UE_mac_inst[module_idP]. + mbsfn_SubframeConfig[j]-> + subframeAllocation.choice. + oneFrame.buf[0] & (0x80 >> msi_pos); + msi_pos++; + } + } + } + + if (UE_mac_inst[module_idP].tdd_Config == NULL) + frame_FDD = 1; + else + frame_FDD = 0; + // Check if the subframe is for MSI, MCCH or MTCHs and Set the correspoding flag to 1 + switch (subframe) { + case 1: + if (frame_FDD == 1) { + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig + [j]->subframeAllocation.choice.oneFrame. + buf[0] & MBSFN_FDD_SF1) == MBSFN_FDD_SF1) { + if (msi_pos == 1) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.mcch_Offset_r9) + && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_FDD_SF1) == + MBSFN_FDD_SF1)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } + + break; + + case 2: + if (frame_FDD == 1) { + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig + [j]->subframeAllocation.choice.oneFrame. + buf[0] & MBSFN_FDD_SF2) == MBSFN_FDD_SF2) { + if (msi_pos == 2) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.mcch_Offset_r9) + && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_FDD_SF2) == + MBSFN_FDD_SF2)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } + + break; + + case 3: + if (frame_FDD == 0) { //TDD + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig + [j]->subframeAllocation.choice.oneFrame. + buf[0] & MBSFN_TDD_SF3) == MBSFN_TDD_SF3) { + if (msi_pos == 1) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.mcch_Offset_r9) + && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_TDD_SF3) == + MBSFN_TDD_SF3)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } else { // FDD + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig + [j]->subframeAllocation.choice.oneFrame. + buf[0] & MBSFN_FDD_SF3) == MBSFN_FDD_SF3) { + if (msi_pos == 3) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.mcch_Offset_r9) + && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_FDD_SF3) == + MBSFN_FDD_SF3)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } + + break; + + case 4: + if (frame_FDD == 0) { + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig + [j]->subframeAllocation.choice.oneFrame. + buf[0] & MBSFN_TDD_SF4) == MBSFN_TDD_SF4) { + if (msi_pos == 2) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.mcch_Offset_r9) + && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_TDD_SF4) == + MBSFN_TDD_SF4)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } + + break; + + case 6: + if (frame_FDD == 1) { + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig + [j]->subframeAllocation.choice.oneFrame. + buf[0] & MBSFN_FDD_SF6) == MBSFN_FDD_SF6) { + if (msi_pos == 4) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.mcch_Offset_r9) + && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_FDD_SF6) == + MBSFN_FDD_SF6)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } + + break; + + case 7: + if (frame_FDD == 0) { // TDD + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig + [j]->subframeAllocation.choice.oneFrame. + buf[0] & MBSFN_TDD_SF7) == MBSFN_TDD_SF7) { + if (msi_pos == 3) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.mcch_Offset_r9) + && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_TDD_SF7) == + MBSFN_TDD_SF7)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } else { // FDD + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig + [j]->subframeAllocation.choice.oneFrame. + buf[0] & MBSFN_FDD_SF7) == MBSFN_FDD_SF7) { + if (msi_pos == 5) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.mcch_Offset_r9) + && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_FDD_SF7) == + MBSFN_FDD_SF7)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } + + break; + + case 8: + if (frame_FDD == 0) { //TDD + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig + [j]->subframeAllocation.choice.oneFrame. + buf[0] & MBSFN_TDD_SF8) == MBSFN_TDD_SF8) { + if (msi_pos == 4) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.mcch_Offset_r9) + && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_TDD_SF8) == + MBSFN_TDD_SF8)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } else { // FDD + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig + [j]->subframeAllocation.choice.oneFrame. + buf[0] & MBSFN_FDD_SF8) == MBSFN_FDD_SF8) { + if (msi_pos == 6) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.mcch_Offset_r9) + && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_FDD_SF8) == + MBSFN_FDD_SF8)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } + + break; + + case 9: + if (frame_FDD == 0) { + if ((UE_mac_inst[module_idP].mbsfn_SubframeConfig + [j]->subframeAllocation.choice.oneFrame. + buf[0] & MBSFN_TDD_SF9) == MBSFN_TDD_SF9) { + if (msi_pos == 5) { + msi_flag = 1; + } + + if ((frameP % mcch_period == + UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.mcch_Offset_r9) + && + ((UE_mac_inst[module_idP].mbsfn_AreaInfo + [i]->mcch_Config_r9.sf_AllocInfo_r9. + buf[0] & MBSFN_TDD_SF9) == + MBSFN_TDD_SF9)) { + mcch_flag = 1; + } + + mtch_flag = 1; + } + } + + break; + } // end switch + + // sf allocation is non-overlapping + if ((msi_flag == 1) || (mcch_flag == 1) + || (mtch_flag == 1)) { + LOG_D(MAC, + "[UE %d] Frame %d Subframe %d: sync area %d SF alloc %d: msi flag %d, mcch flag %d, mtch flag %d\n", + module_idP, frameP, subframe, i, j, msi_flag, + mcch_flag, mtch_flag); + + *sync_area = i; + break; + } + } else { // four-frameP format + } + } + } // end of for +#if UE_TIMING_TRACE + stop_meas(&UE_mac_inst[module_idP].ue_query_mch); +#endif + + if ((mcch_flag == 1)) { // || (msi_flag==1)) + *mcch_active = 1; + } + + if ((mcch_flag == 1) + || ((msi_flag == 1) && (UE_mac_inst[module_idP].mcch_status == 1))) { + return mcch_mcs; + } else if ((mtch_flag == 1) + && (UE_mac_inst[module_idP].msi_status == 1)) { + return UE_mac_inst[module_idP].pmch_Config[0]->dataMCS_r9; + } else { + return -1; + } } #endif -unsigned char generate_ulsch_header(uint8_t *mac_header, - uint8_t num_sdus, - uint8_t short_padding, - uint16_t *sdu_lengths, - uint8_t *sdu_lcids, - POWER_HEADROOM_CMD *power_headroom, - uint16_t *crnti, - BSR_SHORT *truncated_bsr, - BSR_SHORT *short_bsr, - BSR_LONG *long_bsr, - unsigned short post_padding) +unsigned char +generate_ulsch_header(uint8_t * mac_header, + uint8_t num_sdus, + uint8_t short_padding, + uint16_t * sdu_lengths, + uint8_t * sdu_lcids, + POWER_HEADROOM_CMD * power_headroom, + uint16_t * crnti, + BSR_SHORT * truncated_bsr, + BSR_SHORT * short_bsr, + BSR_LONG * long_bsr, unsigned short post_padding) { - SCH_SUBHEADER_FIXED *mac_header_ptr = (SCH_SUBHEADER_FIXED *)mac_header; - unsigned char first_element=0,last_size=0,i; - unsigned char mac_header_control_elements[16],*ce_ptr; + SCH_SUBHEADER_FIXED *mac_header_ptr = + (SCH_SUBHEADER_FIXED *) mac_header; + unsigned char first_element = 0, last_size = 0, i; + unsigned char mac_header_control_elements[16], *ce_ptr; - LOG_D(MAC,"[UE] Generate ULSCH : num_sdus %d\n",num_sdus); + LOG_D(MAC, "[UE] Generate ULSCH : num_sdus %d\n", num_sdus); #ifdef DEBUG_HEADER_PARSING - for (i=0; iR = 0; - mac_header_ptr->E = 0; - mac_header_ptr->LCID = SHORT_PADDING; - first_element=1; - last_size=1; - } - - if (short_padding == 2) { - mac_header_ptr->E = 1; - mac_header_ptr++; - mac_header_ptr->R = 0; - mac_header_ptr->E = 0; - mac_header_ptr->LCID = SHORT_PADDING; - last_size=1; - } - - if (power_headroom) { - if (first_element>0) { - mac_header_ptr->E = 1; - mac_header_ptr++; - } else { - first_element=1; + for (i = 0; i < num_sdus; i++) { + LOG_T(MAC, "[UE] sdu %d : lcid %d length %d", i, sdu_lcids[i], + sdu_lengths[i]); } - mac_header_ptr->R = 0; - mac_header_ptr->E = 0; - mac_header_ptr->LCID = POWER_HEADROOM; - last_size=1; - *((POWER_HEADROOM_CMD *)ce_ptr)=(*power_headroom); - ce_ptr+=sizeof(POWER_HEADROOM_CMD); - LOG_D(MAC, "phr header size %zu\n",sizeof(POWER_HEADROOM_CMD)); - } + LOG_T(MAC, "\n"); +#endif + ce_ptr = &mac_header_control_elements[0]; - if (crnti) { + if ((short_padding == 1) || (short_padding == 2)) { + mac_header_ptr->R = 0; + mac_header_ptr->E = 0; + mac_header_ptr->LCID = SHORT_PADDING; + first_element = 1; + last_size = 1; + } + + if (short_padding == 2) { + mac_header_ptr->E = 1; + mac_header_ptr++; + mac_header_ptr->R = 0; + mac_header_ptr->E = 0; + mac_header_ptr->LCID = SHORT_PADDING; + last_size = 1; + } + + if (power_headroom) { + if (first_element > 0) { + mac_header_ptr->E = 1; + mac_header_ptr++; + } else { + first_element = 1; + } + + mac_header_ptr->R = 0; + mac_header_ptr->E = 0; + mac_header_ptr->LCID = POWER_HEADROOM; + last_size = 1; + *((POWER_HEADROOM_CMD *) ce_ptr) = (*power_headroom); + ce_ptr += sizeof(POWER_HEADROOM_CMD); + LOG_D(MAC, "phr header size %zu\n", sizeof(POWER_HEADROOM_CMD)); + } + + if (crnti) { #ifdef DEBUG_HEADER_PARSING - LOG_D(MAC,"[UE] CRNTI : %x (first_element %d)\n",*crnti,first_element); + LOG_D(MAC, "[UE] CRNTI : %x (first_element %d)\n", *crnti, + first_element); #endif - if (first_element>0) { - mac_header_ptr->E = 1; - mac_header_ptr++; - } else { - first_element=1; + if (first_element > 0) { + mac_header_ptr->E = 1; + mac_header_ptr++; + } else { + first_element = 1; + } + + mac_header_ptr->R = 0; + mac_header_ptr->E = 0; + mac_header_ptr->LCID = CRNTI; + last_size = 1; + *((uint16_t *) ce_ptr) = (*crnti); + ce_ptr += sizeof(uint16_t); + // printf("offset %d\n",ce_ptr-mac_header_control_elements); } - mac_header_ptr->R = 0; - mac_header_ptr->E = 0; - mac_header_ptr->LCID = CRNTI; - last_size=1; - *((uint16_t *)ce_ptr)=(*crnti); - ce_ptr+=sizeof(uint16_t); - // printf("offset %d\n",ce_ptr-mac_header_control_elements); - } - - if (truncated_bsr) { - if (first_element>0) { - mac_header_ptr->E = 1; - /* - printf("last subheader : %x (R%d,E%d,LCID%d)\n",*(unsigned char*)mac_header_ptr, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->R, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->E, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID); - */ - mac_header_ptr++; - } else { - first_element=1; - } + if (truncated_bsr) { + if (first_element > 0) { + mac_header_ptr->E = 1; + /* + printf("last subheader : %x (R%d,E%d,LCID%d)\n",*(unsigned char*)mac_header_ptr, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->R, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->E, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID); + */ + mac_header_ptr++; + } else { + first_element = 1; + } #ifdef DEBUG_HEADER_PARSING - LOG_D(MAC,"[UE] Scheduler Truncated BSR Header\n"); + LOG_D(MAC, "[UE] Scheduler Truncated BSR Header\n"); #endif - mac_header_ptr->R = 0; - mac_header_ptr->E = 0; - mac_header_ptr->LCID = TRUNCATED_BSR; - last_size=1; - *((BSR_TRUNCATED *)ce_ptr)=(*truncated_bsr); - ce_ptr+=sizeof(BSR_TRUNCATED); - // printf("(cont_res) : offset %d\n",ce_ptr-mac_header_control_elements); + mac_header_ptr->R = 0; + mac_header_ptr->E = 0; + mac_header_ptr->LCID = TRUNCATED_BSR; + last_size = 1; + *((BSR_TRUNCATED *) ce_ptr) = (*truncated_bsr); + ce_ptr += sizeof(BSR_TRUNCATED); + // printf("(cont_res) : offset %d\n",ce_ptr-mac_header_control_elements); - } else if (short_bsr) { - if (first_element>0) { - mac_header_ptr->E = 1; - /* - printf("last subheader : %x (R%d,E%d,LCID%d)\n",*(unsigned char*)mac_header_ptr, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->R, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->E, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID); - */ - mac_header_ptr++; - } else { - first_element=1; - } + } else if (short_bsr) { + if (first_element > 0) { + mac_header_ptr->E = 1; + /* + printf("last subheader : %x (R%d,E%d,LCID%d)\n",*(unsigned char*)mac_header_ptr, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->R, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->E, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID); + */ + mac_header_ptr++; + } else { + first_element = 1; + } #ifdef DEBUG_HEADER_PARSING - LOG_D(MAC,"[UE] Scheduler SHORT BSR Header\n"); + LOG_D(MAC, "[UE] Scheduler SHORT BSR Header\n"); #endif - mac_header_ptr->R = 0; - mac_header_ptr->E = 0; - mac_header_ptr->LCID = SHORT_BSR; - last_size=1; - *((BSR_SHORT *)ce_ptr)=(*short_bsr); - ce_ptr+=sizeof(BSR_SHORT); + mac_header_ptr->R = 0; + mac_header_ptr->E = 0; + mac_header_ptr->LCID = SHORT_BSR; + last_size = 1; + *((BSR_SHORT *) ce_ptr) = (*short_bsr); + ce_ptr += sizeof(BSR_SHORT); - // printf("(cont_res) : offset %d\n",ce_ptr-mac_header_control_elements); - } else if (long_bsr) { - if (first_element>0) { - mac_header_ptr->E = 1; - /* - printf("last subheader : %x (R%d,E%d,LCID%d)\n",*(unsigned char*)mac_header_ptr, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->R, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->E, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID); - */ - mac_header_ptr++; - } else { - first_element=1; - } + // printf("(cont_res) : offset %d\n",ce_ptr-mac_header_control_elements); + } else if (long_bsr) { + if (first_element > 0) { + mac_header_ptr->E = 1; + /* + printf("last subheader : %x (R%d,E%d,LCID%d)\n",*(unsigned char*)mac_header_ptr, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->R, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->E, + ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID); + */ + mac_header_ptr++; + } else { + first_element = 1; + } #ifdef DEBUG_HEADER_PARSING - LOG_D(MAC,"[UE] Scheduler Long BSR Header\n"); + LOG_D(MAC, "[UE] Scheduler Long BSR Header\n"); #endif - mac_header_ptr->R = 0; - mac_header_ptr->E = 0; - mac_header_ptr->LCID = LONG_BSR; - last_size=1; + mac_header_ptr->R = 0; + mac_header_ptr->E = 0; + mac_header_ptr->LCID = LONG_BSR; + last_size = 1; - *(ce_ptr) = (long_bsr->Buffer_size0 << 2) | ((long_bsr->Buffer_size1 & 0x30) >> 4); - *(ce_ptr + 1) = ((long_bsr->Buffer_size1 & 0x0F) << 4) | ((long_bsr->Buffer_size2 & 0x3C) >> 2); - *(ce_ptr + 2) = ((long_bsr->Buffer_size2 & 0x03) << 2) | (long_bsr->Buffer_size3 & 0x3F); - ce_ptr += BSR_LONG_SIZE; + *(ce_ptr) = + (long_bsr-> + Buffer_size0 << 2) | ((long_bsr->Buffer_size1 & 0x30) >> 4); + *(ce_ptr + 1) = + ((long_bsr->Buffer_size1 & 0x0F) << 4) | ((long_bsr-> + Buffer_size2 & 0x3C) + >> 2); + *(ce_ptr + 2) = + ((long_bsr-> + Buffer_size2 & 0x03) << 2) | (long_bsr->Buffer_size3 & 0x3F); + ce_ptr += BSR_LONG_SIZE; - // printf("(cont_res) : offset %d\n",ce_ptr-mac_header_control_elements); - } - - // printf("last_size %d,mac_header_ptr %p\n",last_size,mac_header_ptr); - - for (i=0; i0) { - mac_header_ptr->E = 1; - #ifdef DEBUG_HEADER_PARSING - LOG_D(MAC,"[UE] last subheader : %x (R%d,E%d,LCID%d)\n",*(unsigned char*)mac_header_ptr, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->R, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->E, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID); - #endif - mac_header_ptr+=last_size; - } - mac_header_ptr->R = 0; - mac_header_ptr->E = 0; - mac_header_ptr->LCID = sdu_lcids[i]; + // printf("(cont_res) : offset %d\n",ce_ptr-mac_header_control_elements); } - else { - if ((first_element>0)) { - mac_header_ptr->E = 1; - #ifdef DEBUG_HEADER_PARSING - LOG_D(MAC,"[UE] last subheader : %x (R%d,E%d,LCID%d)\n",*(unsigned char*)mac_header_ptr, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->R, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->E, - ((SCH_SUBHEADER_FIXED *)mac_header_ptr)->LCID); - #endif - mac_header_ptr+=last_size; - // printf("last_size %d,mac_header_ptr %p\n",last_size,mac_header_ptr); - } else { - first_element=1; - - } - - if (sdu_lengths[i] < 128) { - ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->R = 0; // 3 - ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->E = 0; - ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->F = 0; - ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->LCID = sdu_lcids[i]; - ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->L = (unsigned char)sdu_lengths[i]; - last_size=2; - #ifdef DEBUG_HEADER_PARSING - LOG_D(MAC,"[UE] short sdu\n"); - LOG_T(MAC,"[UE] last subheader : %x (R%d,E%d,LCID%d,F%d,L%d)\n", - ((uint16_t*)mac_header_ptr)[0], - ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->R, - ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->E, - ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->LCID, - ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->F, - ((SCH_SUBHEADER_SHORT *)mac_header_ptr)->L); - #endif - } else { - ((SCH_SUBHEADER_LONG *)mac_header_ptr)->R = 0; - ((SCH_SUBHEADER_LONG *)mac_header_ptr)->E = 0; - ((SCH_SUBHEADER_LONG *)mac_header_ptr)->F = 1; - ((SCH_SUBHEADER_LONG *)mac_header_ptr)->LCID = sdu_lcids[i]; - ((SCH_SUBHEADER_LONG *)mac_header_ptr)->L_MSB = ((unsigned short) sdu_lengths[i]>>8)&0x7f; - ((SCH_SUBHEADER_LONG *)mac_header_ptr)->L_LSB = (unsigned short) sdu_lengths[i]&0xff; - ((SCH_SUBHEADER_LONG *)mac_header_ptr)->padding = 0x00; - last_size=3; - #ifdef DEBUG_HEADER_PARSING - LOG_D(MAC,"[UE] long sdu\n"); - #endif - } - } - } - - if (post_padding>0) {// we have lots of padding at the end of the packet - mac_header_ptr->E = 1; - mac_header_ptr+=last_size; - // add a padding element - mac_header_ptr->R = 0; - mac_header_ptr->E = 0; - mac_header_ptr->LCID = SHORT_PADDING; - mac_header_ptr++; - } else { // no end of packet padding - // last SDU subhead is of fixed type (sdu length implicitly to be computed at UE) - mac_header_ptr++; - //mac_header_ptr=last_size; // FIXME: should be ++ - } - - - if ((ce_ptr-mac_header_control_elements) > 0) { - memcpy((void*)mac_header_ptr,mac_header_control_elements,ce_ptr-mac_header_control_elements); - mac_header_ptr+=(unsigned char)(ce_ptr-mac_header_control_elements); - } + // printf("last_size %d,mac_header_ptr %p\n",last_size,mac_header_ptr); + for (i = 0; i < num_sdus; i++) { #ifdef DEBUG_HEADER_PARSING - LOG_T(MAC," [UE] header : "); - - for (i=0; i<((unsigned char*)mac_header_ptr - mac_header); i++) { - LOG_T(MAC,"%2x.",mac_header[i]); - } - - LOG_T(MAC,"\n"); + LOG_T(MAC, "[UE] sdu subheader %d (lcid %d, %d bytes)\n", i, + sdu_lcids[i], sdu_lengths[i]); #endif - return((unsigned char*)mac_header_ptr - mac_header); + + if ((i == (num_sdus - 1)) + && ((short_padding) || (post_padding == 0))) { + if (first_element > 0) { + mac_header_ptr->E = 1; +#ifdef DEBUG_HEADER_PARSING + LOG_D(MAC, "[UE] last subheader : %x (R%d,E%d,LCID%d)\n", + *(unsigned char *) mac_header_ptr, + ((SCH_SUBHEADER_FIXED *) mac_header_ptr)->R, + ((SCH_SUBHEADER_FIXED *) mac_header_ptr)->E, + ((SCH_SUBHEADER_FIXED *) mac_header_ptr)->LCID); +#endif + mac_header_ptr += last_size; + } + mac_header_ptr->R = 0; + mac_header_ptr->E = 0; + mac_header_ptr->LCID = sdu_lcids[i]; + } else { + if ((first_element > 0)) { + mac_header_ptr->E = 1; +#ifdef DEBUG_HEADER_PARSING + LOG_D(MAC, "[UE] last subheader : %x (R%d,E%d,LCID%d)\n", + *(unsigned char *) mac_header_ptr, + ((SCH_SUBHEADER_FIXED *) mac_header_ptr)->R, + ((SCH_SUBHEADER_FIXED *) mac_header_ptr)->E, + ((SCH_SUBHEADER_FIXED *) mac_header_ptr)->LCID); +#endif + mac_header_ptr += last_size; + // printf("last_size %d,mac_header_ptr %p\n",last_size,mac_header_ptr); + } else { + first_element = 1; + + } + + if (sdu_lengths[i] < 128) { + ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->R = 0; // 3 + ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->E = 0; + ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->F = 0; + ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->LCID = + sdu_lcids[i]; + ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->L = + (unsigned char) sdu_lengths[i]; + last_size = 2; +#ifdef DEBUG_HEADER_PARSING + LOG_D(MAC, "[UE] short sdu\n"); + LOG_T(MAC, + "[UE] last subheader : %x (R%d,E%d,LCID%d,F%d,L%d)\n", + ((uint16_t *) mac_header_ptr)[0], + ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->R, + ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->E, + ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->LCID, + ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->F, + ((SCH_SUBHEADER_SHORT *) mac_header_ptr)->L); +#endif + } else { + ((SCH_SUBHEADER_LONG *) mac_header_ptr)->R = 0; + ((SCH_SUBHEADER_LONG *) mac_header_ptr)->E = 0; + ((SCH_SUBHEADER_LONG *) mac_header_ptr)->F = 1; + ((SCH_SUBHEADER_LONG *) mac_header_ptr)->LCID = + sdu_lcids[i]; + ((SCH_SUBHEADER_LONG *) mac_header_ptr)->L_MSB = + ((unsigned short) sdu_lengths[i] >> 8) & 0x7f; + ((SCH_SUBHEADER_LONG *) mac_header_ptr)->L_LSB = + (unsigned short) sdu_lengths[i] & 0xff; + ((SCH_SUBHEADER_LONG *) mac_header_ptr)->padding = 0x00; + last_size = 3; +#ifdef DEBUG_HEADER_PARSING + LOG_D(MAC, "[UE] long sdu\n"); +#endif + } + } + } + + if (post_padding > 0) { // we have lots of padding at the end of the packet + mac_header_ptr->E = 1; + mac_header_ptr += last_size; + // add a padding element + mac_header_ptr->R = 0; + mac_header_ptr->E = 0; + mac_header_ptr->LCID = SHORT_PADDING; + mac_header_ptr++; + } else { // no end of packet padding + // last SDU subhead is of fixed type (sdu length implicitly to be computed at UE) + mac_header_ptr++; + //mac_header_ptr=last_size; // FIXME: should be ++ + } + + + if ((ce_ptr - mac_header_control_elements) > 0) { + memcpy((void *) mac_header_ptr, mac_header_control_elements, + ce_ptr - mac_header_control_elements); + mac_header_ptr += + (unsigned char) (ce_ptr - mac_header_control_elements); + } +#ifdef DEBUG_HEADER_PARSING + LOG_T(MAC, " [UE] header : "); + + for (i = 0; i < ((unsigned char *) mac_header_ptr - mac_header); i++) { + LOG_T(MAC, "%2x.", mac_header[i]); + } + + LOG_T(MAC, "\n"); +#endif + return ((unsigned char *) mac_header_ptr - mac_header); } -void ue_get_sdu(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_t subframe, uint8_t eNB_index,uint8_t *ulsch_buffer,uint16_t buflen, uint8_t *access_mode) +void +ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP, + sub_frame_t subframe, uint8_t eNB_index, + uint8_t * ulsch_buffer, uint16_t buflen, uint8_t * access_mode) { - uint8_t total_rlc_pdu_header_len=0, rlc_pdu_header_len_last=0 ; - uint16_t buflen_remain = 0; - uint8_t bsr_len=0,bsr_ce_len=0,bsr_header_len=0; - uint8_t phr_header_len=0, phr_ce_len=0,phr_len=0; - uint8_t lcid=0,lcid_rlc_pdu_count=0; - boolean_t is_lcid_processed = FALSE; - boolean_t is_all_lcid_processed = FALSE; - uint16_t sdu_lengths[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; - uint8_t sdu_lcids[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; - uint8_t payload_offset=0,num_sdus=0; - uint8_t ulsch_buff[MAX_ULSCH_PAYLOAD_BYTES]; - uint16_t sdu_length_total=0; - BSR_SHORT bsr_short,bsr_truncated; - BSR_LONG bsr_long; - BSR_SHORT *bsr_s=&bsr_short; - BSR_LONG *bsr_l=&bsr_long; - BSR_SHORT *bsr_t=&bsr_truncated; - POWER_HEADROOM_CMD phr; - POWER_HEADROOM_CMD *phr_p=&phr; - unsigned short short_padding=0, post_padding=0, padding_len=0; - int j; // used for padding - // Compute header length - int lcg_id = 0; - int lcg_id_bsr_trunc = 0; - int highest_priority = 16; - int num_lcg_id_with_data = 0; - rlc_buffer_occupancy_t lcid_buffer_occupancy_old=0, lcid_buffer_occupancy_new=0; - - LOG_D(MAC,"[UE %d] MAC PROCESS UL TRANSPORT BLOCK at frame%d subframe %d TBS=%d\n", - module_idP, frameP, subframe, buflen); + uint8_t total_rlc_pdu_header_len = 0, rlc_pdu_header_len_last = 0; + uint16_t buflen_remain = 0; + uint8_t bsr_len = 0, bsr_ce_len = 0, bsr_header_len = 0; + uint8_t phr_header_len = 0, phr_ce_len = 0, phr_len = 0; + uint8_t lcid = 0, lcid_rlc_pdu_count = 0; + boolean_t is_lcid_processed = FALSE; + boolean_t is_all_lcid_processed = FALSE; + uint16_t sdu_lengths[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; + uint8_t sdu_lcids[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; + uint8_t payload_offset = 0, num_sdus = 0; + uint8_t ulsch_buff[MAX_ULSCH_PAYLOAD_BYTES]; + uint16_t sdu_length_total = 0; + BSR_SHORT bsr_short, bsr_truncated; + BSR_LONG bsr_long; + BSR_SHORT *bsr_s = &bsr_short; + BSR_LONG *bsr_l = &bsr_long; + BSR_SHORT *bsr_t = &bsr_truncated; + POWER_HEADROOM_CMD phr; + POWER_HEADROOM_CMD *phr_p = &phr; + unsigned short short_padding = 0, post_padding = 0, padding_len = 0; + int j; // used for padding + // Compute header length + int lcg_id = 0; + int lcg_id_bsr_trunc = 0; + int highest_priority = 16; + int num_lcg_id_with_data = 0; + rlc_buffer_occupancy_t lcid_buffer_occupancy_old = + 0, lcid_buffer_occupancy_new = 0; + + LOG_D(MAC, + "[UE %d] MAC PROCESS UL TRANSPORT BLOCK at frame%d subframe %d TBS=%d\n", + module_idP, frameP, subframe, buflen); - AssertFatal(CC_id==0, - "Transmission on secondary CCs is not supported yet\n"); + AssertFatal(CC_id == 0, + "Transmission on secondary CCs is not supported yet\n"); #if UE_TIMING_TRACE - start_meas(&UE_mac_inst[module_idP].tx_ulsch_sdu); + start_meas(&UE_mac_inst[module_idP].tx_ulsch_sdu); #endif - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GET_SDU, VCD_FUNCTION_IN); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GET_SDU, VCD_FUNCTION_IN); #ifdef CBA - if (*access_mode==CBA_ACCESS) { - LOG_D(MAC,"[UE %d] frameP %d subframe %d try CBA transmission\n", - module_idP, frameP, subframe); + if (*access_mode == CBA_ACCESS) { + LOG_D(MAC, "[UE %d] frameP %d subframe %d try CBA transmission\n", + module_idP, frameP, subframe); - //if (UE_mac_inst[module_idP].scheduling_info.LCID_status[DTCH] == LCID_EMPTY) - if (cba_access(module_idP,frameP,subframe,eNB_index,buflen)==0) { - *access_mode=POSTPONED_ACCESS; - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GET_SDU, VCD_FUNCTION_OUT); - return; + //if (UE_mac_inst[module_idP].scheduling_info.LCID_status[DTCH] == LCID_EMPTY) + if (cba_access(module_idP, frameP, subframe, eNB_index, buflen) == + 0) { + *access_mode = POSTPONED_ACCESS; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GET_SDU, VCD_FUNCTION_OUT); + return; + } + + LOG_I(MAC, + "[UE %d] frameP %d subframe %d CBA transmission oppurtunity, tbs %d\n", + module_idP, frameP, subframe, buflen); } - - LOG_I(MAC,"[UE %d] frameP %d subframe %d CBA transmission oppurtunity, tbs %d\n", - module_idP, frameP, subframe,buflen); - } - #endif - bsr_header_len = 0; - phr_header_len = 1;//sizeof(SCH_SUBHEADER_FIXED); - - while (lcg_id < MAX_NUM_LCGID) { - if (UE_mac_inst[module_idP].scheduling_info.BSR_bytes[lcg_id]){ - num_lcg_id_with_data ++; - } - lcg_id ++; - } - - if (num_lcg_id_with_data){ - LOG_D(MAC,"[UE %d] MAC Tx data pending at frame%d subframe %d nb LCG =%d Bytes for LCG0=%d LCG1=%d LCG2=%d LCG3=%d BSR Trigger status =%d TBS=%d\n", - module_idP, - frameP, - subframe, - num_lcg_id_with_data, - UE_mac_inst[module_idP].scheduling_info.BSR_bytes[0], - UE_mac_inst[module_idP].scheduling_info.BSR_bytes[1], - UE_mac_inst[module_idP].scheduling_info.BSR_bytes[2], - UE_mac_inst[module_idP].scheduling_info.BSR_bytes[3], - UE_mac_inst[module_idP].BSR_reporting_active, buflen); - - } - //Restart ReTxBSR Timer at new grant indication (36.321) - if (UE_mac_inst[module_idP].scheduling_info.retxBSR_SF != MAC_UE_BSR_TIMER_NOT_RUNNING){ - UE_mac_inst[module_idP].scheduling_info.retxBSR_SF = get_sf_retxBSRTimer(UE_mac_inst[module_idP].scheduling_info.retxBSR_Timer); - } - - // periodicBSR-Timer expires, trigger BSR - if ((UE_mac_inst[module_idP].scheduling_info.periodicBSR_Timer != PeriodicBSR_Timer_r12_infinity) - && (UE_mac_inst[module_idP].scheduling_info.periodicBSR_SF == 0)){ - // Trigger BSR Periodic - UE_mac_inst[module_idP].BSR_reporting_active |= BSR_TRIGGER_PERIODIC; - - LOG_D(MAC,"[UE %d] MAC BSR Triggered PeriodicBSR Timer expiry at frame%d subframe %d TBS=%d\n", - module_idP, frameP, subframe, buflen); + bsr_header_len = 0; + phr_header_len = 1; //sizeof(SCH_SUBHEADER_FIXED); + while (lcg_id < MAX_NUM_LCGID) { + if (UE_mac_inst[module_idP].scheduling_info.BSR_bytes[lcg_id]) { + num_lcg_id_with_data++; + } + lcg_id++; } - //Compute BSR Length if Regular or Periodic BSR is triggered - //WARNING: if BSR long is computed, it may be changed to BSR short during or after multiplexing if there remains less than 1 LCGROUP with data after Tx - if (UE_mac_inst[module_idP].BSR_reporting_active){ + if (num_lcg_id_with_data) { + LOG_D(MAC, + "[UE %d] MAC Tx data pending at frame%d subframe %d nb LCG =%d Bytes for LCG0=%d LCG1=%d LCG2=%d LCG3=%d BSR Trigger status =%d TBS=%d\n", + module_idP, frameP, subframe, num_lcg_id_with_data, + UE_mac_inst[module_idP].scheduling_info.BSR_bytes[0], + UE_mac_inst[module_idP].scheduling_info.BSR_bytes[1], + UE_mac_inst[module_idP].scheduling_info.BSR_bytes[2], + UE_mac_inst[module_idP].scheduling_info.BSR_bytes[3], + UE_mac_inst[module_idP].BSR_reporting_active, buflen); - AssertFatal ((UE_mac_inst[module_idP].BSR_reporting_active & BSR_TRIGGER_PADDING) == 0 , "Inconsistent BSR Trigger=%d !\n", - UE_mac_inst[module_idP].BSR_reporting_active); + } + //Restart ReTxBSR Timer at new grant indication (36.321) + if (UE_mac_inst[module_idP].scheduling_info.retxBSR_SF != + MAC_UE_BSR_TIMER_NOT_RUNNING) { + UE_mac_inst[module_idP].scheduling_info.retxBSR_SF = + get_sf_retxBSRTimer(UE_mac_inst[module_idP]. + scheduling_info.retxBSR_Timer); + } + // periodicBSR-Timer expires, trigger BSR + if ((UE_mac_inst[module_idP].scheduling_info.periodicBSR_Timer != + PeriodicBSR_Timer_r12_infinity) + && (UE_mac_inst[module_idP].scheduling_info.periodicBSR_SF == 0)) { + // Trigger BSR Periodic + UE_mac_inst[module_idP].BSR_reporting_active |= + BSR_TRIGGER_PERIODIC; - if (buflen >= 4){ - //A Regular or Periodic BSR can only be sent if TBS >= 4 as transmitting only a BSR is not allowed if UE has data to transmit - bsr_header_len = 1; + LOG_D(MAC, + "[UE %d] MAC BSR Triggered PeriodicBSR Timer expiry at frame%d subframe %d TBS=%d\n", + module_idP, frameP, subframe, buflen); - if (num_lcg_id_with_data <= 1){ - bsr_ce_len = sizeof(BSR_SHORT); //1 byte - } - else{ - bsr_ce_len = BSR_LONG_SIZE; //3 bytes - } - } - } + } + //Compute BSR Length if Regular or Periodic BSR is triggered + //WARNING: if BSR long is computed, it may be changed to BSR short during or after multiplexing if there remains less than 1 LCGROUP with data after Tx + if (UE_mac_inst[module_idP].BSR_reporting_active) { - bsr_len = bsr_ce_len + bsr_header_len; + AssertFatal((UE_mac_inst[module_idP].BSR_reporting_active & + BSR_TRIGGER_PADDING) == 0, + "Inconsistent BSR Trigger=%d !\n", + UE_mac_inst[module_idP].BSR_reporting_active); - phr_ce_len = (UE_mac_inst[module_idP].PHR_reporting_active == 1) ? 1 /* sizeof(POWER_HEADROOM_CMD)*/: 0; - if ((phr_ce_len > 0) && ((phr_ce_len + phr_header_len + bsr_len) <= buflen)){ - phr_len = phr_ce_len + phr_header_len; - LOG_D(MAC,"[UE %d] header size info: PHR len %d (ce%d,hdr%d) buff_len %d\n", - module_idP, phr_len, phr_ce_len, phr_header_len, buflen); - } else { - phr_len=0; - phr_header_len = 0; - phr_ce_len = 0; - } + if (buflen >= 4) { + //A Regular or Periodic BSR can only be sent if TBS >= 4 as transmitting only a BSR is not allowed if UE has data to transmit + bsr_header_len = 1; - // check for UL bandwidth requests and add SR control element + if (num_lcg_id_with_data <= 1) { + bsr_ce_len = sizeof(BSR_SHORT); //1 byte + } else { + bsr_ce_len = BSR_LONG_SIZE; //3 bytes + } + } + } - // check for UL bandwidth requests and add SR control element + bsr_len = bsr_ce_len + bsr_header_len; - // Check for DCCH first + phr_ce_len = + (UE_mac_inst[module_idP].PHR_reporting_active == + 1) ? 1 /* sizeof(POWER_HEADROOM_CMD) */ : 0; + if ((phr_ce_len > 0) + && ((phr_ce_len + phr_header_len + bsr_len) <= buflen)) { + phr_len = phr_ce_len + phr_header_len; + LOG_D(MAC, + "[UE %d] header size info: PHR len %d (ce%d,hdr%d) buff_len %d\n", + module_idP, phr_len, phr_ce_len, phr_header_len, buflen); + } else { + phr_len = 0; + phr_header_len = 0; + phr_ce_len = 0; + } + + // check for UL bandwidth requests and add SR control element + + // check for UL bandwidth requests and add SR control element + + // Check for DCCH first // TO DO: Multiplex in the order defined by the logical channel prioritization -for (lcid=DCCH; (lcid < MAX_NUM_LCID) && (is_all_lcid_processed == FALSE) ; lcid++) { - if (UE_mac_inst[module_idP].scheduling_info.LCID_status[lcid] == LCID_NOT_EMPTY) { + for (lcid = DCCH; + (lcid < MAX_NUM_LCID) && (is_all_lcid_processed == FALSE); lcid++) + { + if (UE_mac_inst[module_idP].scheduling_info.LCID_status[lcid] == + LCID_NOT_EMPTY) { - lcid_rlc_pdu_count = 0; - is_lcid_processed = FALSE; - lcid_buffer_occupancy_old = mac_rlc_get_buffer_occupancy_ind(module_idP, - UE_mac_inst[module_idP].crnti, - eNB_index, - frameP, - subframe, - ENB_FLAG_NO, - lcid); + lcid_rlc_pdu_count = 0; + is_lcid_processed = FALSE; + lcid_buffer_occupancy_old = + mac_rlc_get_buffer_occupancy_ind(module_idP, + UE_mac_inst[module_idP]. + crnti, eNB_index, frameP, + subframe, ENB_FLAG_NO, + lcid); - lcid_buffer_occupancy_new = lcid_buffer_occupancy_old; + lcid_buffer_occupancy_new = lcid_buffer_occupancy_old; - AssertFatal (lcid_buffer_occupancy_new == UE_mac_inst[module_idP].scheduling_info.LCID_buffer_remain[lcid], "LCID=%d RLC has BO %d bytes but MAC has stored %d bytes\n", - lcid,lcid_buffer_occupancy_new,UE_mac_inst[module_idP].scheduling_info.LCID_buffer_remain[lcid]); + AssertFatal(lcid_buffer_occupancy_new == + UE_mac_inst[module_idP]. + scheduling_info.LCID_buffer_remain[lcid], + "LCID=%d RLC has BO %d bytes but MAC has stored %d bytes\n", + lcid, lcid_buffer_occupancy_new, + UE_mac_inst[module_idP]. + scheduling_info.LCID_buffer_remain[lcid]); - AssertFatal (lcid_buffer_occupancy_new <= UE_mac_inst[module_idP].scheduling_info.BSR_bytes[UE_mac_inst[module_idP].scheduling_info.LCGID[lcid]], "LCID=%d RLC has more BO %d bytes than BSR = %d bytes\n", - lcid,lcid_buffer_occupancy_new,UE_mac_inst[module_idP].scheduling_info.BSR_bytes[UE_mac_inst[module_idP].scheduling_info.LCGID[lcid]]); + AssertFatal(lcid_buffer_occupancy_new <= + UE_mac_inst[module_idP]. + scheduling_info.BSR_bytes[UE_mac_inst[module_idP]. + scheduling_info.LCGID + [lcid]], + "LCID=%d RLC has more BO %d bytes than BSR = %d bytes\n", + lcid, lcid_buffer_occupancy_new, + UE_mac_inst[module_idP]. + scheduling_info.BSR_bytes[UE_mac_inst[module_idP]. + scheduling_info.LCGID + [lcid]]); - //Multiplex all available DCCH RLC PDUs considering to multiplex the last PDU each time for maximize the data - //Adjust at the end of the loop - while ((!is_lcid_processed) && (lcid_buffer_occupancy_new) && (bsr_len + phr_len + total_rlc_pdu_header_len + sdu_length_total + MIN_MAC_HDR_RLC_SIZE <= buflen)) { + //Multiplex all available DCCH RLC PDUs considering to multiplex the last PDU each time for maximize the data + //Adjust at the end of the loop + while ((!is_lcid_processed) && (lcid_buffer_occupancy_new) + && (bsr_len + phr_len + total_rlc_pdu_header_len + + sdu_length_total + MIN_MAC_HDR_RLC_SIZE <= buflen)) + { - // Workaround for issue in OAI eNB or EPC which are not able to process SRB2 message multiplexed with SRB1 on the same MAC PDU - if ((usim_test == 0) && (lcid == DCCH1) && (lcid_rlc_pdu_count == 0) && (num_sdus)) { + // Workaround for issue in OAI eNB or EPC which are not able to process SRB2 message multiplexed with SRB1 on the same MAC PDU + if ((usim_test == 0) && (lcid == DCCH1) + && (lcid_rlc_pdu_count == 0) && (num_sdus)) { - // Skip SRB2 multiplex if at least one SRB1 SDU is already multiplexed - break; - } + // Skip SRB2 multiplex if at least one SRB1 SDU is already multiplexed + break; + } - buflen_remain = buflen - (bsr_len + phr_len + total_rlc_pdu_header_len + sdu_length_total + 1); + buflen_remain = + buflen - (bsr_len + phr_len + + total_rlc_pdu_header_len + sdu_length_total + + 1); - LOG_D(MAC, "[UE %d] Frame %d : UL-DXCH -> ULSCH, RLC %d has %d bytes to " - "send (Transport Block size %d BSR size=%d PHR=%d SDU Length Total %d , mac header len %d BSR byte before Tx=%d)\n", - module_idP,frameP, lcid,lcid_buffer_occupancy_new,buflen,bsr_len,phr_len,sdu_length_total,total_rlc_pdu_header_len,UE_mac_inst[module_idP].scheduling_info.BSR_bytes[UE_mac_inst[module_idP].scheduling_info.LCGID[lcid]]); + LOG_D(MAC, + "[UE %d] Frame %d : UL-DXCH -> ULSCH, RLC %d has %d bytes to " + "send (Transport Block size %d BSR size=%d PHR=%d SDU Length Total %d , mac header len %d BSR byte before Tx=%d)\n", + module_idP, frameP, lcid, lcid_buffer_occupancy_new, + buflen, bsr_len, phr_len, sdu_length_total, + total_rlc_pdu_header_len, + UE_mac_inst[module_idP]. + scheduling_info.BSR_bytes[UE_mac_inst[module_idP]. + scheduling_info.LCGID + [lcid]]); - sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, - UE_mac_inst[module_idP].crnti, - eNB_index, + sdu_lengths[num_sdus] = mac_rlc_data_req(module_idP, + UE_mac_inst + [module_idP]. + crnti, eNB_index, frameP, ENB_FLAG_NO, MBMS_FLAG_NO, lcid, buflen_remain, - (char *)&ulsch_buff[sdu_length_total]); + (char *) + &ulsch_buff + [sdu_length_total]); - AssertFatal (buflen_remain >= sdu_lengths[num_sdus], "LCID=%d RLC has segmented %d bytes but MAC has max=%d\n", - lcid,sdu_lengths[num_sdus],buflen_remain); + AssertFatal(buflen_remain >= sdu_lengths[num_sdus], + "LCID=%d RLC has segmented %d bytes but MAC has max=%d\n", + lcid, sdu_lengths[num_sdus], buflen_remain); - if (sdu_lengths[num_sdus]) - { - sdu_length_total += sdu_lengths[num_sdus]; - sdu_lcids[num_sdus] = lcid; - LOG_D(MAC,"[UE %d] TX Multiplex RLC PDU TX Got %d bytes for LcId%d\n",module_idP,sdu_lengths[num_sdus],lcid); + if (sdu_lengths[num_sdus]) { + sdu_length_total += sdu_lengths[num_sdus]; + sdu_lcids[num_sdus] = lcid; + LOG_D(MAC, + "[UE %d] TX Multiplex RLC PDU TX Got %d bytes for LcId%d\n", + module_idP, sdu_lengths[num_sdus], lcid); - if (buflen == (bsr_len + phr_len + total_rlc_pdu_header_len + sdu_length_total + 1)) { - //No more remaining TBS after this PDU - //exit the function - rlc_pdu_header_len_last = 1; - is_lcid_processed = TRUE; - is_all_lcid_processed = TRUE; - } - else { - rlc_pdu_header_len_last = (sdu_lengths[num_sdus] > 128 ) ? 3 : 2 ; + if (buflen == + (bsr_len + phr_len + total_rlc_pdu_header_len + + sdu_length_total + 1)) { + //No more remaining TBS after this PDU + //exit the function + rlc_pdu_header_len_last = 1; + is_lcid_processed = TRUE; + is_all_lcid_processed = TRUE; + } else { + rlc_pdu_header_len_last = + (sdu_lengths[num_sdus] > 128) ? 3 : 2; - //Change to 1 byte if it does not fit in the TBS, ie last PDU - if (buflen <= (bsr_len + phr_len + total_rlc_pdu_header_len + rlc_pdu_header_len_last + sdu_length_total)) { - rlc_pdu_header_len_last = 1; - is_lcid_processed = TRUE; - is_all_lcid_processed = TRUE; - } - } + //Change to 1 byte if it does not fit in the TBS, ie last PDU + if (buflen <= + (bsr_len + phr_len + total_rlc_pdu_header_len + + rlc_pdu_header_len_last + sdu_length_total)) { + rlc_pdu_header_len_last = 1; + is_lcid_processed = TRUE; + is_all_lcid_processed = TRUE; + } + } - //Update number of SDU - num_sdus ++; + //Update number of SDU + num_sdus++; - //Update total MAC Header size for RLC PDUs and save last one - total_rlc_pdu_header_len += rlc_pdu_header_len_last; + //Update total MAC Header size for RLC PDUs and save last one + total_rlc_pdu_header_len += rlc_pdu_header_len_last; - lcid_rlc_pdu_count ++; - } - else - { - /* avoid infinite loop ... */ - is_lcid_processed = TRUE; - } + lcid_rlc_pdu_count++; + } else { + /* avoid infinite loop ... */ + is_lcid_processed = TRUE; + } - /* Get updated BO after multiplexing this PDU */ - lcid_buffer_occupancy_new = mac_rlc_get_buffer_occupancy_ind(module_idP, - UE_mac_inst[module_idP].crnti, - eNB_index, - frameP, - subframe, - ENB_FLAG_NO, - lcid); + /* Get updated BO after multiplexing this PDU */ + lcid_buffer_occupancy_new = + mac_rlc_get_buffer_occupancy_ind(module_idP, + UE_mac_inst + [module_idP].crnti, + eNB_index, frameP, + subframe, ENB_FLAG_NO, + lcid); - is_lcid_processed = (is_lcid_processed) || (lcid_buffer_occupancy_new <= 0); - } + is_lcid_processed = (is_lcid_processed) + || (lcid_buffer_occupancy_new <= 0); + } - //Update Buffer remain and BSR bytes after transmission + //Update Buffer remain and BSR bytes after transmission - AssertFatal (lcid_buffer_occupancy_new <= lcid_buffer_occupancy_old, "MAC UE Tx error : Buffer Occupancy After Tx=%d greater than before=%d BO! for LCID=%d RLC PDU nb=%d Frame %d Subrame %d\n", - lcid_buffer_occupancy_new,lcid_buffer_occupancy_old,lcid,lcid_rlc_pdu_count,frameP,subframe); + AssertFatal(lcid_buffer_occupancy_new <= + lcid_buffer_occupancy_old, + "MAC UE Tx error : Buffer Occupancy After Tx=%d greater than before=%d BO! for LCID=%d RLC PDU nb=%d Frame %d Subrame %d\n", + lcid_buffer_occupancy_new, + lcid_buffer_occupancy_old, lcid, + lcid_rlc_pdu_count, frameP, subframe); - UE_mac_inst[module_idP].scheduling_info.LCID_buffer_remain[lcid] = lcid_buffer_occupancy_new; - UE_mac_inst[module_idP].scheduling_info.BSR_bytes[UE_mac_inst[module_idP].scheduling_info.LCGID[lcid]] += (lcid_buffer_occupancy_new - lcid_buffer_occupancy_old); + UE_mac_inst[module_idP].scheduling_info. + LCID_buffer_remain[lcid] = lcid_buffer_occupancy_new; + UE_mac_inst[module_idP]. + scheduling_info.BSR_bytes[UE_mac_inst[module_idP]. + scheduling_info.LCGID[lcid]] += + (lcid_buffer_occupancy_new - lcid_buffer_occupancy_old); - //Update the number of LCGID with data as BSR shall reflect status after BSR transmission - if ((num_lcg_id_with_data > 1) && (UE_mac_inst[module_idP].scheduling_info.BSR_bytes[UE_mac_inst[module_idP].scheduling_info.LCGID[lcid]] == 0)) - { - num_lcg_id_with_data --; - // Change BSR size to BSR SHORT if num_lcg_id_with_data becomes to 1 - if ((bsr_len) && (num_lcg_id_with_data == 1)) - { - bsr_ce_len = sizeof(BSR_SHORT); - bsr_len = bsr_ce_len + bsr_header_len; - } + //Update the number of LCGID with data as BSR shall reflect status after BSR transmission + if ((num_lcg_id_with_data > 1) + && (UE_mac_inst[module_idP]. + scheduling_info.BSR_bytes[UE_mac_inst[module_idP]. + scheduling_info.LCGID[lcid]] + == 0)) { + num_lcg_id_with_data--; + // Change BSR size to BSR SHORT if num_lcg_id_with_data becomes to 1 + if ((bsr_len) && (num_lcg_id_with_data == 1)) { + bsr_ce_len = sizeof(BSR_SHORT); + bsr_len = bsr_ce_len + bsr_header_len; + } + } + + + UE_mac_inst[module_idP].scheduling_info.LCID_status[lcid] = + LCID_EMPTY; + } } - UE_mac_inst[module_idP].scheduling_info.LCID_status[lcid] = LCID_EMPTY; - } - } + + // Compute BSR Values and update Nb LCGID with data after multiplexing + num_lcg_id_with_data = 0; + lcg_id_bsr_trunc = 0; + for (lcg_id = 0; lcg_id < MAX_NUM_LCGID; lcg_id++) { + UE_mac_inst[module_idP].scheduling_info.BSR[lcg_id] = + locate_BsrIndexByBufferSize(BSR_TABLE, BSR_TABLE_SIZE, + UE_mac_inst + [module_idP].scheduling_info. + BSR_bytes[lcg_id]); + + if (UE_mac_inst[module_idP].scheduling_info.BSR_bytes[lcg_id]) { + num_lcg_id_with_data++; + lcg_id_bsr_trunc = lcg_id; + } + } + if (bsr_ce_len) { + //Print updated BSR when sent + LOG_D(MAC, + "[UE %d] Remaining Buffer after Tx frame%d subframe %d nb LCG =%d Bytes for LCG0=%d LCG1=%d LCG2=%d LCG3=%d BSR Trigger status =%d TBS=%d\n", + module_idP, frameP, subframe, num_lcg_id_with_data, + UE_mac_inst[module_idP].scheduling_info.BSR_bytes[0], + UE_mac_inst[module_idP].scheduling_info.BSR_bytes[1], + UE_mac_inst[module_idP].scheduling_info.BSR_bytes[2], + UE_mac_inst[module_idP].scheduling_info.BSR_bytes[3], + UE_mac_inst[module_idP].BSR_reporting_active, buflen); - // Compute BSR Values and update Nb LCGID with data after multiplexing - num_lcg_id_with_data = 0; - lcg_id_bsr_trunc = 0; - for (lcg_id=0;lcg_idPH = get_phr_mapping(module_idP, CC_id, eNB_index); + phr_p->R = 0; + LOG_D(MAC, + "[UE %d] Frame %d report PHR with mapping (%d->%d) for LCID %d\n", + module_idP, frameP, get_PHR(module_idP, CC_id, eNB_index), + phr_p->PH, POWER_HEADROOM); + update_phr(module_idP, CC_id); + } else { + phr_p = NULL; + } - if (UE_mac_inst[module_idP].scheduling_info.BSR_bytes[lcg_id]){ - num_lcg_id_with_data ++; - lcg_id_bsr_trunc = lcg_id; - } - } + LOG_T(MAC, "[UE %d] Frame %d: bsr s %p bsr_l %p, phr_p %p\n", + module_idP, frameP, bsr_s, bsr_l, phr_p); - if (bsr_ce_len) { - //Print updated BSR when sent - LOG_D(MAC,"[UE %d] Remaining Buffer after Tx frame%d subframe %d nb LCG =%d Bytes for LCG0=%d LCG1=%d LCG2=%d LCG3=%d BSR Trigger status =%d TBS=%d\n", - module_idP, - frameP, - subframe, - num_lcg_id_with_data, - UE_mac_inst[module_idP].scheduling_info.BSR_bytes[0], - UE_mac_inst[module_idP].scheduling_info.BSR_bytes[1], - UE_mac_inst[module_idP].scheduling_info.BSR_bytes[2], - UE_mac_inst[module_idP].scheduling_info.BSR_bytes[3], - UE_mac_inst[module_idP].BSR_reporting_active, buflen); - - LOG_D(MAC,"[UE %d] Frame %d Subframe %d TX BSR Regular or Periodic size=%d BSR0=%d BSR1=%d BSR2=%d BSR3=%d\n",module_idP,frameP,subframe,bsr_ce_len, - UE_mac_inst[module_idP].scheduling_info.BSR[0], - UE_mac_inst[module_idP].scheduling_info.BSR[1], - UE_mac_inst[module_idP].scheduling_info.BSR[2], - UE_mac_inst[module_idP].scheduling_info.BSR[3]); - } + // Check BSR padding: it is done after PHR according to Logical Channel Prioritization order + // Check for max padding size, ie MAC Hdr for last RLC PDU = 1 + /* For Padding BSR: + - if the number of padding bits is equal to or larger than the size of the Short BSR plus its subheader but smaller than the size of the Long BSR plus its subheader: + - if more than one LCG has data available for transmission in the TTI where the BSR is transmitted: report Truncated BSR of the LCG with the highest priority logical channel with data available for transmission; + - else report Short BSR. + - else if the number of padding bits is equal to or larger than the size of the Long BSR plus its subheader, report Long BSR. + */ + if (sdu_length_total) { + padding_len = + buflen - (bsr_len + phr_len + total_rlc_pdu_header_len - + rlc_pdu_header_len_last + sdu_length_total + 1); + } else { + padding_len = buflen - (bsr_len + phr_len); + } - // build PHR and update the timers - if (phr_ce_len == sizeof(POWER_HEADROOM_CMD)) { - phr_p->PH = get_phr_mapping(module_idP,CC_id,eNB_index); - phr_p->R = 0; - LOG_D(MAC,"[UE %d] Frame %d report PHR with mapping (%d->%d) for LCID %d\n", - module_idP,frameP, get_PHR(module_idP,CC_id,eNB_index), phr_p->PH,POWER_HEADROOM); - update_phr(module_idP,CC_id); - } else { - phr_p=NULL; - } - - LOG_T(MAC,"[UE %d] Frame %d: bsr s %p bsr_l %p, phr_p %p\n", module_idP,frameP,bsr_s, bsr_l, phr_p); + if ((padding_len) && (bsr_len == 0)) { + /* if the number of padding bits is equal to or larger than the size of the Long BSR plus its subheader, report Long BSR */ + if (padding_len >= (1 + BSR_LONG_SIZE)) { + bsr_ce_len = BSR_LONG_SIZE; + bsr_header_len = 1; + // Trigger BSR Padding + UE_mac_inst[module_idP].BSR_reporting_active |= + BSR_TRIGGER_PADDING; - // Check BSR padding: it is done after PHR according to Logical Channel Prioritization order - // Check for max padding size, ie MAC Hdr for last RLC PDU = 1 - /* For Padding BSR: - - if the number of padding bits is equal to or larger than the size of the Short BSR plus its subheader but smaller than the size of the Long BSR plus its subheader: - - if more than one LCG has data available for transmission in the TTI where the BSR is transmitted: report Truncated BSR of the LCG with the highest priority logical channel with data available for transmission; - - else report Short BSR. - - else if the number of padding bits is equal to or larger than the size of the Long BSR plus its subheader, report Long BSR. - */ - if (sdu_length_total) { - padding_len = buflen - (bsr_len + phr_len + total_rlc_pdu_header_len - rlc_pdu_header_len_last + sdu_length_total + 1); - } - else { - padding_len = buflen - (bsr_len + phr_len); - } + } else if (padding_len >= (1 + sizeof(BSR_SHORT))) { + bsr_ce_len = sizeof(BSR_SHORT); + bsr_header_len = 1; + if (num_lcg_id_with_data > 1) { + // REPORT TRUNCATED BSR + //Get LCGID of highest priority LCID with data + for (lcid = DCCH; lcid < MAX_NUM_LCID; lcid++) { + if (UE_mac_inst[module_idP]. + logicalChannelConfig[lcid] != NULL) { + lcg_id = + UE_mac_inst[module_idP].scheduling_info. + LCGID[lcid]; - if ((padding_len) && (bsr_len == 0)) - { - /* if the number of padding bits is equal to or larger than the size of the Long BSR plus its subheader, report Long BSR*/ - if (padding_len >= (1+BSR_LONG_SIZE)) - { - bsr_ce_len = BSR_LONG_SIZE; - bsr_header_len = 1; - // Trigger BSR Padding - UE_mac_inst[module_idP].BSR_reporting_active |= BSR_TRIGGER_PADDING; + if ((lcg_id < MAX_NUM_LCGID) + && (UE_mac_inst[module_idP]. + scheduling_info.BSR_bytes[lcg_id]) + && + (UE_mac_inst[module_idP].logicalChannelConfig + [lcid]->ul_SpecificParameters->priority <= + highest_priority)) { + highest_priority = + UE_mac_inst[module_idP]. + logicalChannelConfig[lcid]-> + ul_SpecificParameters->priority; + lcg_id_bsr_trunc = lcg_id; + } + } + } + } else { + //Report SHORT BSR, clear bsr_t + bsr_t = NULL; + } + // Trigger BSR Padding + UE_mac_inst[module_idP].BSR_reporting_active |= + BSR_TRIGGER_PADDING; + } + bsr_len = bsr_header_len + bsr_ce_len; + } + //Fill BSR Infos + if (bsr_ce_len == 0) { + bsr_s = NULL; + bsr_l = NULL; + bsr_t = NULL; + } else if (bsr_ce_len == BSR_LONG_SIZE) { + bsr_s = NULL; + bsr_t = NULL; + bsr_l->Buffer_size0 = + UE_mac_inst[module_idP].scheduling_info.BSR[LCGID0]; + bsr_l->Buffer_size1 = + UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1]; + bsr_l->Buffer_size2 = + UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2]; + bsr_l->Buffer_size3 = + UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3]; - } else if (padding_len >= (1+sizeof(BSR_SHORT))) { - bsr_ce_len = sizeof(BSR_SHORT); - bsr_header_len = 1; + LOG_D(MAC, + "[UE %d] Frame %d subframe %d BSR Trig=%d report long BSR (level LCGID0 %d,level LCGID1 %d,level LCGID2 %d,level LCGID3 %d)\n", + module_idP, frameP, subframe, + UE_mac_inst[module_idP].BSR_reporting_active, + UE_mac_inst[module_idP].scheduling_info.BSR[LCGID0], + UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1], + UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2], + UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3]); - if (num_lcg_id_with_data > 1) - { - // REPORT TRUNCATED BSR - //Get LCGID of highest priority LCID with data - for (lcid=DCCH; lcid < MAX_NUM_LCID ; lcid++) { - if (UE_mac_inst[module_idP].logicalChannelConfig[lcid] != NULL) { - lcg_id = UE_mac_inst[module_idP].scheduling_info.LCGID[lcid]; + } else if (bsr_ce_len == sizeof(BSR_SHORT)) { + bsr_l = NULL; + if ((bsr_t != NULL) + && (UE_mac_inst[module_idP].BSR_reporting_active & + BSR_TRIGGER_PADDING)) { + //Truncated BSR + bsr_s = NULL; + bsr_t->LCGID = lcg_id_bsr_trunc; + bsr_t->Buffer_size = + UE_mac_inst[module_idP].scheduling_info. + BSR[lcg_id_bsr_trunc]; - if ((lcg_id < MAX_NUM_LCGID) && (UE_mac_inst[module_idP].scheduling_info.BSR_bytes[lcg_id]) - && (UE_mac_inst[module_idP].logicalChannelConfig[lcid]->ul_SpecificParameters->priority <= highest_priority)) { - highest_priority = UE_mac_inst[module_idP].logicalChannelConfig[lcid]->ul_SpecificParameters->priority; - lcg_id_bsr_trunc = lcg_id; - } - } - } - } - else - { - //Report SHORT BSR, clear bsr_t - bsr_t = NULL; - } + LOG_D(MAC, + "[UE %d] Frame %d subframe %d BSR Trig=%d report TRUNCATED BSR with level %d for LCGID %d\n", + module_idP, frameP, subframe, + UE_mac_inst[module_idP].BSR_reporting_active, + UE_mac_inst[module_idP]. + scheduling_info.BSR[lcg_id_bsr_trunc], lcg_id_bsr_trunc); - // Trigger BSR Padding - UE_mac_inst[module_idP].BSR_reporting_active |= BSR_TRIGGER_PADDING; - } - bsr_len = bsr_header_len + bsr_ce_len; - } - - //Fill BSR Infos - if (bsr_ce_len == 0 ) { - bsr_s = NULL; - bsr_l = NULL; - bsr_t = NULL; - } else if (bsr_ce_len == BSR_LONG_SIZE) { - bsr_s = NULL; - bsr_t = NULL; - bsr_l->Buffer_size0 = UE_mac_inst[module_idP].scheduling_info.BSR[LCGID0]; - bsr_l->Buffer_size1 = UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1]; - bsr_l->Buffer_size2 = UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2]; - bsr_l->Buffer_size3 = UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3]; - - LOG_D(MAC, "[UE %d] Frame %d subframe %d BSR Trig=%d report long BSR (level LCGID0 %d,level LCGID1 %d,level LCGID2 %d,level LCGID3 %d)\n", module_idP,frameP,subframe, - UE_mac_inst[module_idP].BSR_reporting_active, - UE_mac_inst[module_idP].scheduling_info.BSR[LCGID0], - UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1], - UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2], - UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3]); - - } else if (bsr_ce_len == sizeof(BSR_SHORT)) { - bsr_l = NULL; - if ((bsr_t != NULL) && (UE_mac_inst[module_idP].BSR_reporting_active & BSR_TRIGGER_PADDING)) { - //Truncated BSR - bsr_s = NULL; - bsr_t->LCGID = lcg_id_bsr_trunc; - bsr_t->Buffer_size = UE_mac_inst[module_idP].scheduling_info.BSR[lcg_id_bsr_trunc]; - - LOG_D(MAC,"[UE %d] Frame %d subframe %d BSR Trig=%d report TRUNCATED BSR with level %d for LCGID %d\n", - module_idP, frameP, subframe, UE_mac_inst[module_idP].BSR_reporting_active, UE_mac_inst[module_idP].scheduling_info.BSR[lcg_id_bsr_trunc],lcg_id_bsr_trunc); - - } - else - { - bsr_t = NULL; - bsr_s->LCGID = lcg_id_bsr_trunc; - bsr_s->Buffer_size = UE_mac_inst[module_idP].scheduling_info.BSR[lcg_id_bsr_trunc]; - - LOG_D(MAC,"[UE %d] Frame %d subframe %d BSR Trig=%d report SHORT BSR with level %d for LCGID %d\n", - module_idP, frameP, subframe, UE_mac_inst[module_idP].BSR_reporting_active, UE_mac_inst[module_idP].scheduling_info.BSR[lcg_id_bsr_trunc],lcg_id_bsr_trunc); - } - } + } else { + bsr_t = NULL; + bsr_s->LCGID = lcg_id_bsr_trunc; + bsr_s->Buffer_size = + UE_mac_inst[module_idP].scheduling_info. + BSR[lcg_id_bsr_trunc]; + LOG_D(MAC, + "[UE %d] Frame %d subframe %d BSR Trig=%d report SHORT BSR with level %d for LCGID %d\n", + module_idP, frameP, subframe, + UE_mac_inst[module_idP].BSR_reporting_active, + UE_mac_inst[module_idP]. + scheduling_info.BSR[lcg_id_bsr_trunc], lcg_id_bsr_trunc); + } + } // 1-bit padding or 2-bit padding special padding subheader // Check for max padding size, ie MAC Hdr for last RLC PDU = 1 - if (sdu_length_total) { - padding_len = buflen - (bsr_len + phr_len + total_rlc_pdu_header_len - rlc_pdu_header_len_last + sdu_length_total + 1); - } - else { - padding_len = buflen - (bsr_len + phr_len); - } - - if (padding_len <= 2) { - short_padding = padding_len; - // only add padding header - post_padding = 0; - //update total MAC Hdr size for RLC data if (sdu_length_total) { - total_rlc_pdu_header_len = total_rlc_pdu_header_len - rlc_pdu_header_len_last + 1; - rlc_pdu_header_len_last = 1; - } - } - else if (sdu_length_total) { - post_padding = buflen - (bsr_len + phr_len + total_rlc_pdu_header_len + sdu_length_total + 1); - // If by adding MAC Hdr for last RLC PDU the padding is 0 then set MAC Hdr for last RLC PDU = 1 and compute 1 or 2 byte padding - if (post_padding == 0) { - total_rlc_pdu_header_len -= rlc_pdu_header_len_last; - padding_len = buflen - (bsr_len + phr_len + total_rlc_pdu_header_len + sdu_length_total + 1); - short_padding = padding_len; - total_rlc_pdu_header_len ++; - } - } - else { - if (padding_len == buflen) {// nona mac pdu - *access_mode=CANCELED_ACCESS; + padding_len = + buflen - (bsr_len + phr_len + total_rlc_pdu_header_len - + rlc_pdu_header_len_last + sdu_length_total + 1); + } else { + padding_len = buflen - (bsr_len + phr_len); } - short_padding = 0; + if (padding_len <= 2) { + short_padding = padding_len; + // only add padding header + post_padding = 0; + //update total MAC Hdr size for RLC data + if (sdu_length_total) { + total_rlc_pdu_header_len = + total_rlc_pdu_header_len - rlc_pdu_header_len_last + 1; + rlc_pdu_header_len_last = 1; + } + } else if (sdu_length_total) { + post_padding = + buflen - (bsr_len + phr_len + total_rlc_pdu_header_len + + sdu_length_total + 1); + // If by adding MAC Hdr for last RLC PDU the padding is 0 then set MAC Hdr for last RLC PDU = 1 and compute 1 or 2 byte padding + if (post_padding == 0) { + total_rlc_pdu_header_len -= rlc_pdu_header_len_last; + padding_len = + buflen - (bsr_len + phr_len + total_rlc_pdu_header_len + + sdu_length_total + 1); + short_padding = padding_len; + total_rlc_pdu_header_len++; + } + } else { + if (padding_len == buflen) { // nona mac pdu + *access_mode = CANCELED_ACCESS; + } - post_padding = buflen - (bsr_len + phr_len + total_rlc_pdu_header_len + sdu_length_total + 1); - } + short_padding = 0; - // Generate header - // if (num_sdus>0) { + post_padding = + buflen - (bsr_len + phr_len + total_rlc_pdu_header_len + + sdu_length_total + 1); + } - payload_offset = generate_ulsch_header(ulsch_buffer, // mac header - num_sdus, // num sdus - short_padding, // short pading - sdu_lengths, // sdu length - sdu_lcids, // sdu lcid - phr_p, // power headroom - NULL, // crnti - bsr_t, // truncated bsr - bsr_s, // short bsr - bsr_l, - post_padding); // long_bsr + // Generate header + // if (num_sdus>0) { - LOG_D(MAC, - "[UE %d] Generate header :bufflen %d sdu_length_total %d, num_sdus %d, sdu_lengths[0] %d, sdu_lcids[0] %d => payload offset %d, total_rlc_pdu_header_len %d, padding %d,post_padding %d, bsr len %d, phr len %d, reminder %d \n", - module_idP,buflen, sdu_length_total,num_sdus,sdu_lengths[0],sdu_lcids[0],payload_offset, total_rlc_pdu_header_len, - short_padding,post_padding, bsr_len, phr_len,buflen-sdu_length_total-payload_offset); - // cycle through SDUs and place in ulsch_buffer - if (sdu_length_total) { - memcpy(&ulsch_buffer[payload_offset],ulsch_buff,sdu_length_total); - } + payload_offset = generate_ulsch_header(ulsch_buffer, // mac header + num_sdus, // num sdus + short_padding, // short pading + sdu_lengths, // sdu length + sdu_lcids, // sdu lcid + phr_p, // power headroom + NULL, // crnti + bsr_t, // truncated bsr + bsr_s, // short bsr + bsr_l, post_padding); // long_bsr - // fill remainder of DLSCH with random data - if (post_padding) { - for (j=0; j<(buflen-sdu_length_total-payload_offset); j++) { - ulsch_buffer[payload_offset+sdu_length_total+j] = (char)(taus()&0xff); - } - } - LOG_D(MAC,"[UE %d][SR] Gave SDU to PHY, clearing any scheduling request\n", module_idP); - UE_mac_inst[module_idP].scheduling_info.SR_pending=0; - UE_mac_inst[module_idP].scheduling_info.SR_COUNTER=0; + LOG_D(MAC, + "[UE %d] Generate header :bufflen %d sdu_length_total %d, num_sdus %d, sdu_lengths[0] %d, sdu_lcids[0] %d => payload offset %d, total_rlc_pdu_header_len %d, padding %d,post_padding %d, bsr len %d, phr len %d, reminder %d \n", + module_idP, buflen, sdu_length_total, num_sdus, sdu_lengths[0], + sdu_lcids[0], payload_offset, total_rlc_pdu_header_len, + short_padding, post_padding, bsr_len, phr_len, + buflen - sdu_length_total - payload_offset); + // cycle through SDUs and place in ulsch_buffer + if (sdu_length_total) { + memcpy(&ulsch_buffer[payload_offset], ulsch_buff, + sdu_length_total); + } + // fill remainder of DLSCH with random data + if (post_padding) { + for (j = 0; j < (buflen - sdu_length_total - payload_offset); j++) { + ulsch_buffer[payload_offset + sdu_length_total + j] = + (char) (taus() & 0xff); + } + } + LOG_D(MAC, + "[UE %d][SR] Gave SDU to PHY, clearing any scheduling request\n", + module_idP); + UE_mac_inst[module_idP].scheduling_info.SR_pending = 0; + UE_mac_inst[module_idP].scheduling_info.SR_COUNTER = 0; - /* Actions when a BSR is sent */ - if (bsr_ce_len) - { - LOG_D(MAC,"[UE %d] MAC BSR Sent !! bsr (ce%d,hdr%d) buff_len %d\n", - module_idP, bsr_ce_len, bsr_header_len, buflen); + /* Actions when a BSR is sent */ + if (bsr_ce_len) { + LOG_D(MAC, + "[UE %d] MAC BSR Sent !! bsr (ce%d,hdr%d) buff_len %d\n", + module_idP, bsr_ce_len, bsr_header_len, buflen); - // Reset ReTx BSR Timer - UE_mac_inst[module_idP].scheduling_info.retxBSR_SF = get_sf_retxBSRTimer(UE_mac_inst[module_idP].scheduling_info.retxBSR_Timer); + // Reset ReTx BSR Timer + UE_mac_inst[module_idP].scheduling_info.retxBSR_SF = + get_sf_retxBSRTimer(UE_mac_inst[module_idP]. + scheduling_info.retxBSR_Timer); - LOG_D(MAC,"[UE %d] MAC ReTx BSR Timer Reset =%d\n", module_idP, - UE_mac_inst[module_idP].scheduling_info.retxBSR_SF); + LOG_D(MAC, "[UE %d] MAC ReTx BSR Timer Reset =%d\n", module_idP, + UE_mac_inst[module_idP].scheduling_info.retxBSR_SF); - // Reset Periodic Timer except when BSR is truncated - if ((bsr_t == NULL) && (UE_mac_inst[module_idP].scheduling_info.periodicBSR_Timer != PeriodicBSR_Timer_r12_infinity)) - { - UE_mac_inst[module_idP].scheduling_info.periodicBSR_SF = get_sf_periodicBSRTimer(UE_mac_inst[module_idP].scheduling_info.periodicBSR_Timer); + // Reset Periodic Timer except when BSR is truncated + if ((bsr_t == NULL) + && (UE_mac_inst[module_idP].scheduling_info. + periodicBSR_Timer != PeriodicBSR_Timer_r12_infinity)) { + UE_mac_inst[module_idP].scheduling_info.periodicBSR_SF = + get_sf_periodicBSRTimer(UE_mac_inst + [module_idP].scheduling_info. + periodicBSR_Timer); - LOG_D(MAC,"[UE %d] MAC Periodic BSR Timer Reset =%d\n", - module_idP, UE_mac_inst[module_idP].scheduling_info.periodicBSR_SF); + LOG_D(MAC, "[UE %d] MAC Periodic BSR Timer Reset =%d\n", + module_idP, + UE_mac_inst[module_idP].scheduling_info.periodicBSR_SF); - } + } + // Reset BSR Trigger flags + UE_mac_inst[module_idP].BSR_reporting_active = BSR_TRIGGER_NONE; + } - // Reset BSR Trigger flags - UE_mac_inst[module_idP].BSR_reporting_active = BSR_TRIGGER_NONE; - } - - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GET_SDU, VCD_FUNCTION_OUT); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GET_SDU, VCD_FUNCTION_OUT); #if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].tx_ulsch_sdu); + stop_meas(&UE_mac_inst[module_idP].tx_ulsch_sdu); #endif - - if (opt_enabled) { - trace_pdu(0, ulsch_buffer, buflen, module_idP, 3, UE_mac_inst[module_idP].crnti, UE_mac_inst[module_idP].txFrame, UE_mac_inst[module_idP].txSubframe, 0, 0); - LOG_D(OPT,"[UE %d][ULSCH] Frame %d subframe %d trace pdu for rnti %x with size %d\n", - module_idP, frameP, subframe, UE_mac_inst[module_idP].crnti, buflen); - } + + if (opt_enabled) { + trace_pdu(0, ulsch_buffer, buflen, module_idP, 3, + UE_mac_inst[module_idP].crnti, + UE_mac_inst[module_idP].txFrame, + UE_mac_inst[module_idP].txSubframe, 0, 0); + LOG_D(OPT, + "[UE %d][ULSCH] Frame %d subframe %d trace pdu for rnti %x with size %d\n", + module_idP, frameP, subframe, UE_mac_inst[module_idP].crnti, + buflen); + } } //------------------------------------------------------------------------------ @@ -1820,281 +2153,327 @@ for (lcid=DCCH; (lcid < MAX_NUM_LCID) && (is_all_lcid_processed == FALSE) ; lcid // 4. Perform PHR procedures UE_L2_STATE_t -ue_scheduler( - const module_id_t module_idP, - const frame_t rxFrameP, - const sub_frame_t rxSubframeP, - const frame_t txFrameP, - const sub_frame_t txSubframeP, - const lte_subframe_t directionP, - const uint8_t eNB_indexP, - const int CC_id) +ue_scheduler(const module_id_t module_idP, + const frame_t rxFrameP, + const sub_frame_t rxSubframeP, + const frame_t txFrameP, + const sub_frame_t txSubframeP, + const lte_subframe_t directionP, + const uint8_t eNB_indexP, const int CC_id) //------------------------------------------------------------------------------ { - int lcid; // lcid index - int TTI= 1; - int bucketsizeduration = -1; - int bucketsizeduration_max = -1; - // mac_rlc_status_resp_t rlc_status[MAX_NUM_LCGID]; // 4 - // int8_t lcg_id; - struct RACH_ConfigCommon *rach_ConfigCommon = (struct RACH_ConfigCommon *)NULL; - protocol_ctxt_t ctxt; + int lcid; // lcid index + int TTI = 1; + int bucketsizeduration = -1; + int bucketsizeduration_max = -1; + // mac_rlc_status_resp_t rlc_status[MAX_NUM_LCGID]; // 4 + // int8_t lcg_id; + struct RACH_ConfigCommon *rach_ConfigCommon = + (struct RACH_ConfigCommon *) NULL; + protocol_ctxt_t ctxt; #if defined(ENABLE_ITTI) - MessageDef *msg_p; - const char *msg_name; - instance_t instance; - int result; + MessageDef *msg_p; + const char *msg_name; + instance_t instance; + int result; #endif #if UE_TIMING_TRACE - start_meas(&UE_mac_inst[module_idP].ue_scheduler); + start_meas(&UE_mac_inst[module_idP].ue_scheduler); #endif - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_IN); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_IN); - PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_NO, UE_mac_inst[module_idP].crnti, txFrameP, txSubframeP,eNB_indexP); + PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_NO, + UE_mac_inst[module_idP].crnti, txFrameP, + txSubframeP, eNB_indexP); #if defined(ENABLE_ITTI) - do { - // Checks if a message has been sent to MAC sub-task - itti_poll_msg (TASK_MAC_UE, &msg_p); + do { + // Checks if a message has been sent to MAC sub-task + itti_poll_msg(TASK_MAC_UE, &msg_p); - if (msg_p != NULL) { - msg_name = ITTI_MSG_NAME (msg_p); - instance = ITTI_MSG_INSTANCE (msg_p); + if (msg_p != NULL) { + msg_name = ITTI_MSG_NAME(msg_p); + instance = ITTI_MSG_INSTANCE(msg_p); - switch (ITTI_MSG_ID(msg_p)) { - case RRC_MAC_CCCH_DATA_REQ: - LOG_I(MAC, "Received %s from %s: instance %d, frameP %d, eNB_index %d\n", - msg_name, ITTI_MSG_ORIGIN_NAME(msg_p), instance, - RRC_MAC_CCCH_DATA_REQ (msg_p).frame, RRC_MAC_CCCH_DATA_REQ (msg_p).enb_index); + switch (ITTI_MSG_ID(msg_p)) { + case RRC_MAC_CCCH_DATA_REQ: + LOG_I(MAC, + "Received %s from %s: instance %d, frameP %d, eNB_index %d\n", + msg_name, ITTI_MSG_ORIGIN_NAME(msg_p), instance, + RRC_MAC_CCCH_DATA_REQ(msg_p).frame, + RRC_MAC_CCCH_DATA_REQ(msg_p).enb_index); - // TODO process CCCH data req. - break; + // TODO process CCCH data req. + break; - default: - LOG_E(MAC, "Received unexpected message %s\n", msg_name); - break; - } + default: + LOG_E(MAC, "Received unexpected message %s\n", msg_name); + break; + } - result = itti_free (ITTI_MSG_ORIGIN_ID(msg_p), msg_p); - AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); + result = itti_free(ITTI_MSG_ORIGIN_ID(msg_p), msg_p); + AssertFatal(result == EXIT_SUCCESS, + "Failed to free memory (%d)!\n", result); + } } - } while(msg_p != NULL); + while (msg_p != NULL); #endif - //Mac_rlc_xface->frameP=frameP; - //Rrc_xface->Frame_index=Mac_rlc_xface->frameP; - //if (subframe%5 == 0) - //LG#ifdef EXMIMO - pdcp_run(&ctxt); - //#endif - UE_mac_inst[module_idP].txFrame = txFrameP; - UE_mac_inst[module_idP].txSubframe = txSubframeP; - UE_mac_inst[module_idP].rxFrame = rxFrameP; - UE_mac_inst[module_idP].rxSubframe = rxSubframeP; + //Mac_rlc_xface->frameP=frameP; + //Rrc_xface->Frame_index=Mac_rlc_xface->frameP; + //if (subframe%5 == 0) + //LG#ifdef EXMIMO + pdcp_run(&ctxt); + //#endif + UE_mac_inst[module_idP].txFrame = txFrameP; + UE_mac_inst[module_idP].txSubframe = txSubframeP; + UE_mac_inst[module_idP].rxFrame = rxFrameP; + UE_mac_inst[module_idP].rxSubframe = rxSubframeP; #ifdef CELLULAR - rrc_rx_tx(module_idP, txFrameP, 0, eNB_indexP); + rrc_rx_tx(module_idP, txFrameP, 0, eNB_indexP); #else - switch (rrc_rx_tx(&ctxt, - eNB_indexP, - CC_id)) { - case RRC_OK: - break; + switch (rrc_rx_tx(&ctxt, eNB_indexP, CC_id)) { + case RRC_OK: + break; - case RRC_ConnSetup_failed: - LOG_E(MAC,"RRCConnectionSetup failed, returning to IDLE state\n"); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); + case RRC_ConnSetup_failed: + LOG_E(MAC, "RRCConnectionSetup failed, returning to IDLE state\n"); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); +#if UE_TIMING_TRACE + stop_meas(&UE_mac_inst[module_idP].ue_scheduler); +#endif + return (CONNECTION_LOST); + break; + + case RRC_PHY_RESYNCH: + LOG_E(MAC, "RRC Loss of synch, returning PHY_RESYNCH\n"); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); +#if UE_TIMING_TRACE + stop_meas(&UE_mac_inst[module_idP].ue_scheduler); +#endif + return (PHY_RESYNCH); + + case RRC_Handover_failed: + LOG_N(MAC, "Handover failure for UE %d eNB_index %d\n", module_idP, + eNB_indexP); + //Invalid...need to add another MAC UE state for re-connection procedure + phy_config_afterHO_ue(module_idP, 0, eNB_indexP, + (MobilityControlInfo_t *) NULL, 1); + //return(3); + break; + + case RRC_HO_STARTED: + LOG_I(MAC, + "RRC handover, Instruct PHY to start the contention-free PRACH and synchronization\n"); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); +#if UE_TIMING_TRACE + stop_meas(&UE_mac_inst[module_idP].ue_scheduler); +#endif + return (PHY_HO_PRACH); + + default: + break; + } + +#endif + + // Check Contention resolution timer (put in a function later) + if (UE_mac_inst[module_idP].RA_contention_resolution_timer_active == 1) { + + if (UE_mac_inst[module_idP].radioResourceConfigCommon) { + rach_ConfigCommon = + &UE_mac_inst[module_idP]. + radioResourceConfigCommon->rach_ConfigCommon; + } else { + LOG_E(MAC, "FATAL: radioResourceConfigCommon is NULL!!!\n"); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, + VCD_FUNCTION_OUT); + + stop_meas(&UE_mac_inst[module_idP].ue_scheduler); + AssertFatal(1 == 0, ""); + +#if UE_TIMING_TRACE + stop_meas(&UE_mac_inst[module_idP].ue_scheduler); +#endif + //return(RRC_OK); + } + + LOG_I(MAC, "Frame %d: Contention resolution timer %d/%ld\n", + txFrameP, + UE_mac_inst[module_idP].RA_contention_resolution_cnt, + ((1 + + rach_ConfigCommon-> + ra_SupervisionInfo.mac_ContentionResolutionTimer) << 3)); + + UE_mac_inst[module_idP].RA_contention_resolution_cnt++; + + if (UE_mac_inst[module_idP].RA_contention_resolution_cnt == + ((1 + + rach_ConfigCommon-> + ra_SupervisionInfo.mac_ContentionResolutionTimer) << 3)) { + UE_mac_inst[module_idP].RA_active = 0; + UE_mac_inst[module_idP].RA_contention_resolution_timer_active = + 0; + // Signal PHY to quit RA procedure + LOG_E(MAC, + "Module id %u Contention resolution timer expired, RA failed\n", + module_idP); + ra_failed(module_idP, 0, eNB_indexP); + } + } + // Get RLC status info and update Bj for all lcids that are active + for (lcid = DCCH; lcid < MAX_NUM_LCID; lcid++) { + if (UE_mac_inst[module_idP].logicalChannelConfig[lcid]) { + // meausre the Bj + if ((directionP == SF_UL) + && (UE_mac_inst[module_idP].scheduling_info.Bj[lcid] >= 0)) { + if (UE_mac_inst[module_idP]. + logicalChannelConfig[lcid]->ul_SpecificParameters) { + bucketsizeduration = + UE_mac_inst[module_idP].logicalChannelConfig + [lcid]->ul_SpecificParameters->prioritisedBitRate * + TTI; + bucketsizeduration_max = + get_ms_bucketsizeduration(UE_mac_inst + [module_idP].logicalChannelConfig + [lcid]->ul_SpecificParameters->bucketSizeDuration); + } else { + LOG_E(MAC, + "[UE %d] lcid %d, NULL ul_SpecificParameters\n", + module_idP, lcid); + AssertFatal(1 == 0, ""); + } + + if (UE_mac_inst[module_idP].scheduling_info.Bj[lcid] > + bucketsizeduration_max) { + UE_mac_inst[module_idP].scheduling_info.Bj[lcid] = + bucketsizeduration_max; + } else { + UE_mac_inst[module_idP].scheduling_info.Bj[lcid] = + bucketsizeduration; + } + } + + + /* + if (lcid == DCCH) { + LOG_D(MAC,"[UE %d][SR] Frame %d subframe %d Pending data for SRB1=%d for LCGID %d \n", + module_idP, txFrameP,txSubframeP,UE_mac_inst[module_idP].scheduling_info.BSR[UE_mac_inst[module_idP].scheduling_info.LCGID[lcid]], + // UE_mac_inst[module_idP].scheduling_info.LCGID[lcid]); + } + */ + } + } + + // Call BSR procedure as described in Section 5.4.5 in 36.321 + + // First check ReTxBSR Timer because it is always configured + // Decrement ReTxBSR Timer if it is running and not null + if ((UE_mac_inst[module_idP].scheduling_info.retxBSR_SF != + MAC_UE_BSR_TIMER_NOT_RUNNING) + && (UE_mac_inst[module_idP].scheduling_info.retxBSR_SF != 0)) { + UE_mac_inst[module_idP].scheduling_info.retxBSR_SF--; + } + // Decrement Periodic Timer if it is running and not null + if ((UE_mac_inst[module_idP].scheduling_info.periodicBSR_SF != + MAC_UE_BSR_TIMER_NOT_RUNNING) + && (UE_mac_inst[module_idP].scheduling_info.periodicBSR_SF != 0)) { + UE_mac_inst[module_idP].scheduling_info.periodicBSR_SF--; + } + //Check whether Regular BSR is triggered + if (update_bsr(module_idP, txFrameP, txSubframeP, eNB_indexP) == TRUE) { + // call SR procedure to generate pending SR and BSR for next PUCCH/PUSCH TxOp. This should implement the procedures + // outlined in Sections 5.4.4 an 5.4.5 of 36.321 + UE_mac_inst[module_idP].scheduling_info.SR_pending = 1; + // Regular BSR trigger + UE_mac_inst[module_idP].BSR_reporting_active |= + BSR_TRIGGER_REGULAR; + LOG_D(MAC, + "[UE %d][BSR] Regular BSR Triggered Frame %d subframe %d SR for PUSCH is pending\n", + module_idP, txFrameP, txSubframeP); + } + // UE has no valid phy config dedicated || no valid/released SR + if ((UE_mac_inst[module_idP].physicalConfigDedicated == NULL)) { + // cancel all pending SRs + UE_mac_inst[module_idP].scheduling_info.SR_pending = 0; + UE_mac_inst[module_idP].ul_active = 0; + LOG_T(MAC, "[UE %d] Release all SRs \n", module_idP); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); +#if UE_TIMING_TRACE + stop_meas(&UE_mac_inst[module_idP].ue_scheduler); +#endif + return (CONNECTION_OK); + } + + if ((UE_mac_inst[module_idP]. + physicalConfigDedicated->schedulingRequestConfig == NULL) + || (UE_mac_inst[module_idP]. + physicalConfigDedicated->schedulingRequestConfig->present == + SchedulingRequestConfig_PR_release)) { + + // initiate RA with CRNTI included in msg3 (no contention) as descibed in 36.321 sec 5.1.5 + + // cancel all pending SRs + UE_mac_inst[module_idP].scheduling_info.SR_pending = 0; + UE_mac_inst[module_idP].ul_active = 0; + LOG_T(MAC, "[UE %d] Release all SRs \n", module_idP); + } + // Put this in a function + // Call PHR procedure as described in Section 5.4.6 in 36.321 + if (UE_mac_inst[module_idP].PHR_state == MAC_MainConfig__phr_Config_PR_setup) { // normal operation + + if (UE_mac_inst[module_idP].PHR_reconfigured == 1) { // upon (re)configuration of the power headroom reporting functionality by upper layers + UE_mac_inst[module_idP].PHR_reporting_active = 1; + UE_mac_inst[module_idP].PHR_reconfigured = 0; + } else { + //LOG_D(MAC,"PHR normal operation %d active %d \n", UE_mac_inst[module_idP].scheduling_info.periodicPHR_SF, UE_mac_inst[module_idP].PHR_reporting_active); + if ((UE_mac_inst[module_idP].scheduling_info.prohibitPHR_SF <= + 0) + && + ((get_PL(module_idP, 0, eNB_indexP) < + UE_mac_inst[module_idP].scheduling_info. + PathlossChange_db) + || (UE_mac_inst[module_idP].power_backoff_db[eNB_indexP] > + UE_mac_inst[module_idP]. + scheduling_info.PathlossChange_db))) + // trigger PHR and reset the timer later when the PHR report is sent + { + UE_mac_inst[module_idP].PHR_reporting_active = 1; + } else if (UE_mac_inst[module_idP].PHR_reporting_active == 0) { + UE_mac_inst[module_idP].scheduling_info.prohibitPHR_SF--; + } + + if (UE_mac_inst[module_idP].scheduling_info.periodicPHR_SF <= + 0) + // trigger PHR and reset the timer later when the PHR report is sent + { + UE_mac_inst[module_idP].PHR_reporting_active = 1; + } else if (UE_mac_inst[module_idP].PHR_reporting_active == 0) { + UE_mac_inst[module_idP].scheduling_info.periodicPHR_SF--; + } + } + } else { // release / nothing + UE_mac_inst[module_idP].PHR_reporting_active = 0; // release PHR + } + + //If the UE has UL resources allocated for new transmission for this TTI here: + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME + (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); #if UE_TIMING_TRACE stop_meas(&UE_mac_inst[module_idP].ue_scheduler); #endif - return(CONNECTION_LOST); - break; - - case RRC_PHY_RESYNCH: - LOG_E(MAC,"RRC Loss of synch, returning PHY_RESYNCH\n"); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].ue_scheduler); -#endif - return(PHY_RESYNCH); - - case RRC_Handover_failed: - LOG_N(MAC,"Handover failure for UE %d eNB_index %d\n",module_idP,eNB_indexP); - //Invalid...need to add another MAC UE state for re-connection procedure - phy_config_afterHO_ue(module_idP,0,eNB_indexP,(MobilityControlInfo_t *)NULL,1); - //return(3); - break; - - case RRC_HO_STARTED: - LOG_I(MAC,"RRC handover, Instruct PHY to start the contention-free PRACH and synchronization\n"); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].ue_scheduler); -#endif - return(PHY_HO_PRACH); - - default: - break; - } - -#endif - - // Check Contention resolution timer (put in a function later) - if (UE_mac_inst[module_idP].RA_contention_resolution_timer_active == 1) { - - if (UE_mac_inst[module_idP].radioResourceConfigCommon) { - rach_ConfigCommon = &UE_mac_inst[module_idP].radioResourceConfigCommon->rach_ConfigCommon; - } else { - LOG_E(MAC,"FATAL: radioResourceConfigCommon is NULL!!!\n"); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); - - stop_meas(&UE_mac_inst[module_idP].ue_scheduler); - AssertFatal(1==0,""); - -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].ue_scheduler); -#endif - //return(RRC_OK); - } - - LOG_I(MAC,"Frame %d: Contention resolution timer %d/%ld\n",txFrameP,UE_mac_inst[module_idP].RA_contention_resolution_cnt, - ((1+rach_ConfigCommon->ra_SupervisionInfo.mac_ContentionResolutionTimer)<<3)); - - UE_mac_inst[module_idP].RA_contention_resolution_cnt++; - - if (UE_mac_inst[module_idP].RA_contention_resolution_cnt == - ((1+rach_ConfigCommon->ra_SupervisionInfo.mac_ContentionResolutionTimer)<<3)) { - UE_mac_inst[module_idP].RA_active = 0; - UE_mac_inst[module_idP].RA_contention_resolution_timer_active = 0; - // Signal PHY to quit RA procedure - LOG_E(MAC,"Module id %u Contention resolution timer expired, RA failed\n", module_idP); - ra_failed(module_idP,0,eNB_indexP); - } - } - - - // Get RLC status info and update Bj for all lcids that are active - for (lcid=DCCH; lcid < MAX_NUM_LCID; lcid++ ) { - if (UE_mac_inst[module_idP].logicalChannelConfig[lcid]) { - // meausre the Bj - if ((directionP == SF_UL)&& (UE_mac_inst[module_idP].scheduling_info.Bj[lcid] >= 0)) { - if (UE_mac_inst[module_idP].logicalChannelConfig[lcid]->ul_SpecificParameters) { - bucketsizeduration = UE_mac_inst[module_idP].logicalChannelConfig[lcid]->ul_SpecificParameters->prioritisedBitRate * TTI; - bucketsizeduration_max = get_ms_bucketsizeduration(UE_mac_inst[module_idP].logicalChannelConfig[lcid]->ul_SpecificParameters->bucketSizeDuration); - } else { - LOG_E(MAC,"[UE %d] lcid %d, NULL ul_SpecificParameters\n",module_idP,lcid); - AssertFatal(1==0,""); - } - - if ( UE_mac_inst[module_idP].scheduling_info.Bj[lcid] > bucketsizeduration_max ) { - UE_mac_inst[module_idP].scheduling_info.Bj[lcid] = bucketsizeduration_max; - } else { - UE_mac_inst[module_idP].scheduling_info.Bj[lcid] = bucketsizeduration; - } - } - - - /* - if (lcid == DCCH) { - LOG_D(MAC,"[UE %d][SR] Frame %d subframe %d Pending data for SRB1=%d for LCGID %d \n", - module_idP, txFrameP,txSubframeP,UE_mac_inst[module_idP].scheduling_info.BSR[UE_mac_inst[module_idP].scheduling_info.LCGID[lcid]], -// UE_mac_inst[module_idP].scheduling_info.LCGID[lcid]); - } - */ - } - } - - // Call BSR procedure as described in Section 5.4.5 in 36.321 - - // First check ReTxBSR Timer because it is always configured - // Decrement ReTxBSR Timer if it is running and not null - if ((UE_mac_inst[module_idP].scheduling_info.retxBSR_SF != MAC_UE_BSR_TIMER_NOT_RUNNING) - && (UE_mac_inst[module_idP].scheduling_info.retxBSR_SF != 0)){ - UE_mac_inst[module_idP].scheduling_info.retxBSR_SF --; - } - - // Decrement Periodic Timer if it is running and not null - if ((UE_mac_inst[module_idP].scheduling_info.periodicBSR_SF != MAC_UE_BSR_TIMER_NOT_RUNNING) - && (UE_mac_inst[module_idP].scheduling_info.periodicBSR_SF != 0)){ - UE_mac_inst[module_idP].scheduling_info.periodicBSR_SF--; - } - - //Check whether Regular BSR is triggered - if (update_bsr(module_idP,txFrameP, txSubframeP,eNB_indexP) == TRUE) { - // call SR procedure to generate pending SR and BSR for next PUCCH/PUSCH TxOp. This should implement the procedures - // outlined in Sections 5.4.4 an 5.4.5 of 36.321 - UE_mac_inst[module_idP].scheduling_info.SR_pending= 1; - // Regular BSR trigger - UE_mac_inst[module_idP].BSR_reporting_active |= BSR_TRIGGER_REGULAR; - LOG_D(MAC,"[UE %d][BSR] Regular BSR Triggered Frame %d subframe %d SR for PUSCH is pending\n", - module_idP, txFrameP,txSubframeP); - } - - // UE has no valid phy config dedicated || no valid/released SR - if ((UE_mac_inst[module_idP].physicalConfigDedicated == NULL)) { - // cancel all pending SRs - UE_mac_inst[module_idP].scheduling_info.SR_pending=0; - UE_mac_inst[module_idP].ul_active=0; - LOG_T(MAC,"[UE %d] Release all SRs \n", module_idP); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].ue_scheduler); -#endif - return(CONNECTION_OK); - } - - if ((UE_mac_inst[module_idP].physicalConfigDedicated->schedulingRequestConfig == NULL) || - (UE_mac_inst[module_idP].physicalConfigDedicated->schedulingRequestConfig->present == SchedulingRequestConfig_PR_release)) { - - // initiate RA with CRNTI included in msg3 (no contention) as descibed in 36.321 sec 5.1.5 - - // cancel all pending SRs - UE_mac_inst[module_idP].scheduling_info.SR_pending=0; - UE_mac_inst[module_idP].ul_active=0; - LOG_T(MAC,"[UE %d] Release all SRs \n", module_idP); - } - - // Put this in a function - // Call PHR procedure as described in Section 5.4.6 in 36.321 - if (UE_mac_inst[module_idP].PHR_state == MAC_MainConfig__phr_Config_PR_setup) { // normal operation - - if (UE_mac_inst[module_idP].PHR_reconfigured == 1) { // upon (re)configuration of the power headroom reporting functionality by upper layers - UE_mac_inst[module_idP].PHR_reporting_active = 1; - UE_mac_inst[module_idP].PHR_reconfigured = 0; - } else { - //LOG_D(MAC,"PHR normal operation %d active %d \n", UE_mac_inst[module_idP].scheduling_info.periodicPHR_SF, UE_mac_inst[module_idP].PHR_reporting_active); - if ((UE_mac_inst[module_idP].scheduling_info.prohibitPHR_SF <= 0) && - ((get_PL(module_idP,0,eNB_indexP) < UE_mac_inst[module_idP].scheduling_info.PathlossChange_db) || - (UE_mac_inst[module_idP].power_backoff_db[eNB_indexP] > UE_mac_inst[module_idP].scheduling_info.PathlossChange_db))) - // trigger PHR and reset the timer later when the PHR report is sent - { - UE_mac_inst[module_idP].PHR_reporting_active = 1; - } else if (UE_mac_inst[module_idP].PHR_reporting_active ==0 ) { - UE_mac_inst[module_idP].scheduling_info.prohibitPHR_SF--; - } - - if (UE_mac_inst[module_idP].scheduling_info.periodicPHR_SF <= 0 ) - // trigger PHR and reset the timer later when the PHR report is sent - { - UE_mac_inst[module_idP].PHR_reporting_active = 1; - } else if (UE_mac_inst[module_idP].PHR_reporting_active == 0 ) { - UE_mac_inst[module_idP].scheduling_info.periodicPHR_SF--; - } - } - } else { // release / nothing - UE_mac_inst[module_idP].PHR_reporting_active = 0; // release PHR - } - - //If the UE has UL resources allocated for new transmission for this TTI here: - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SCHEDULER, VCD_FUNCTION_OUT); -#if UE_TIMING_TRACE - stop_meas(&UE_mac_inst[module_idP].ue_scheduler); -#endif - return(CONNECTION_OK); + return (CONNECTION_OK); } // to be improved @@ -2102,522 +2481,564 @@ ue_scheduler( extern int cba_backoff; double uniform_rngen(int min, int max) { - double random = (double)taus()/((double)0xffffffff); - return (max - min) * random + min; + double random = (double) taus() / ((double) 0xffffffff); + return (max - min) * random + min; } -int cba_access(module_id_t module_idP,frame_t frameP,sub_frame_t subframe, uint8_t eNB_index,uint16_t buflen) +int +cba_access(module_id_t module_idP, frame_t frameP, + sub_frame_t subframe, uint8_t eNB_index, uint16_t buflen) { - mac_rlc_status_resp_t rlc_status; - int header_offset=4; - int rv =0; + mac_rlc_status_resp_t rlc_status; + int header_offset = 4; + int rv = 0; - /* - if (( ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1]>0)&&(UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1]<64)) || - ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2]>0)&&(UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2]<64)) || - ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3]>0)&&(UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3]<64)) ) - // && (UE_mac_inst[module_idP].ul_active == 0) // check if the ul is acrtive - && (UE_mac_inst[module_idP].cba_last_access[0] <= 0) ) { // backoff - // LOG_D(MAC,"[UE %d] Frame %d Subframe %d: the current CBA backoff is %d \n", module_idP, frameP, subframe, - // UE_mac_inst[module_idP].cba_last_access[0] ); + /* + if (( ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1]>0)&&(UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1]<64)) || + ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2]>0)&&(UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2]<64)) || + ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3]>0)&&(UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3]<64)) ) + // && (UE_mac_inst[module_idP].ul_active == 0) // check if the ul is acrtive + && (UE_mac_inst[module_idP].cba_last_access[0] <= 0) ) { // backoff + // LOG_D(MAC,"[UE %d] Frame %d Subframe %d: the current CBA backoff is %d \n", module_idP, frameP, subframe, + // UE_mac_inst[module_idP].cba_last_access[0] ); - UE_mac_inst[module_idP].cba_last_access[0]= round(uniform_rngen(1,40)); - LOG_D(MAC,"[UE %d] Frame %d Subframe %d: start a new CBA backoff %d UL active state %d \n", module_idP, frameP, subframe, - UE_mac_inst[module_idP].cba_last_access[0], UE_mac_inst[module_idP].ul_active); + UE_mac_inst[module_idP].cba_last_access[0]= round(uniform_rngen(1,40)); + LOG_D(MAC,"[UE %d] Frame %d Subframe %d: start a new CBA backoff %d UL active state %d \n", module_idP, frameP, subframe, + UE_mac_inst[module_idP].cba_last_access[0], UE_mac_inst[module_idP].ul_active); - rv=1; - } else if (( ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1]> 0 )) || - ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2]> 0 )) || - ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3]> 0 )) ) - // && (UE_mac_inst[module_idP].ul_active == 0) // check if the ul is acrtive - && (UE_mac_inst[module_idP].cba_last_access[0]> 0) ){ + rv=1; + } else if (( ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1]> 0 )) || + ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2]> 0 )) || + ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3]> 0 )) ) + // && (UE_mac_inst[module_idP].ul_active == 0) // check if the ul is acrtive + && (UE_mac_inst[module_idP].cba_last_access[0]> 0) ){ - UE_mac_inst[module_idP].cba_last_access[0]-=1; - LOG_D(MAC,"[UE %d] Frame %d Subframe %d: CBA backoff is decreased by one to %d UL active state %d \n", - module_idP, frameP, subframe, - UE_mac_inst[module_idP].cba_last_access[0], UE_mac_inst[module_idP].ul_active); + UE_mac_inst[module_idP].cba_last_access[0]-=1; + LOG_D(MAC,"[UE %d] Frame %d Subframe %d: CBA backoff is decreased by one to %d UL active state %d \n", + module_idP, frameP, subframe, + UE_mac_inst[module_idP].cba_last_access[0], UE_mac_inst[module_idP].ul_active); - } else if (( ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1] == 0 )) && - ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2] == 0 )) && - ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3] == 0 )) ) - && (UE_mac_inst[module_idP].cba_last_access[0]> 0) ){ - UE_mac_inst[module_idP].cba_last_access[0]-=1; - }*/ + } else if (( ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1] == 0 )) && + ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2] == 0 )) && + ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3] == 0 )) ) + && (UE_mac_inst[module_idP].cba_last_access[0]> 0) ){ + UE_mac_inst[module_idP].cba_last_access[0]-=1; + } */ - if ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID0]>0)&&(UE_mac_inst[module_idP].scheduling_info.BSR[LCGID0]<64) ) { - return 0; - } - - if ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1] <= 0 ) && - (UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2] <= 0 ) && - (UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3] <= 0 ) ) { - return 0; - } - - if (cba_backoff == 0 ) { // apply probablisitc method - UE_mac_inst[module_idP].cba_last_access[0]= uniform_rngen(0,1); - - if (uniform_rngen(0,1) > 0.6 ) { - LOG_I(MAC,"[UE %d] Frame %d Subframe %d: CBA probability-based backoff (%d), UL active state %d \n", module_idP, frameP, subframe, - cba_backoff,UE_mac_inst[module_idP].ul_active); - - rv=1; + if ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID0] > 0) + && (UE_mac_inst[module_idP].scheduling_info.BSR[LCGID0] < 64)) { + return 0; } - } else { - if (UE_mac_inst[module_idP].cba_last_access[0] <= 0) { - UE_mac_inst[module_idP].cba_last_access[0]= round(uniform_rngen(1,cba_backoff)); + if ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1] <= 0) && + (UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2] <= 0) && + (UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3] <= 0)) { + return 0; + } - LOG_I(MAC,"[UE %d] Frame %d Subframe %d: start a new CBA backoff %d/%d UL active state %d \n", module_idP, frameP, subframe, - UE_mac_inst[module_idP].cba_last_access[0], cba_backoff,UE_mac_inst[module_idP].ul_active); + if (cba_backoff == 0) { // apply probablisitc method + UE_mac_inst[module_idP].cba_last_access[0] = uniform_rngen(0, 1); - rv = 1; - /* - rlc_status = mac_rlc_status_ind(module_idP, UE_mac_inst[module_idP].crnti,frameP,ENB_FLAG_NO,MBMS_FLAG_NO, // eNB_index - DTCH, - 0); + if (uniform_rngen(0, 1) > 0.6) { + LOG_I(MAC, + "[UE %d] Frame %d Subframe %d: CBA probability-based backoff (%d), UL active state %d \n", + module_idP, frameP, subframe, cba_backoff, + UE_mac_inst[module_idP].ul_active); - if (( - // (rlc_status.pdus_in_buffer > 0 ) && - // (UE_mac_inst[module_idP].ul_active == 0) && // check if the ul is acrtive - (rlc_status.head_sdu_is_segmented == 0 ) && - ((rlc_status.head_sdu_remaining_size_to_send + header_offset ) <= buflen ) - )){ - rv = 1; - - UE_mac_inst[module_idP].cba_last_access[0]= round(uniform_rngen(1,30)); - LOG_D(MAC,"[UE %d] Frame %d Subframe %d: start a new CBA backoff %d UL active state %d \n", module_idP, frameP, subframe, - UE_mac_inst[module_idP].cba_last_access[0], UE_mac_inst[module_idP].ul_active); - */ + rv = 1; + } } else { - UE_mac_inst[module_idP].cba_last_access[0]-=1; - LOG_D(MAC,"[UE %d] Frame %d Subframe %d: wait for backoff to expire (%d) CBA UL active state %d \n", - module_idP, frameP, subframe, - UE_mac_inst[module_idP].cba_last_access[0], UE_mac_inst[module_idP].ul_active); + + if (UE_mac_inst[module_idP].cba_last_access[0] <= 0) { + UE_mac_inst[module_idP].cba_last_access[0] = + round(uniform_rngen(1, cba_backoff)); + + LOG_I(MAC, + "[UE %d] Frame %d Subframe %d: start a new CBA backoff %d/%d UL active state %d \n", + module_idP, frameP, subframe, + UE_mac_inst[module_idP].cba_last_access[0], cba_backoff, + UE_mac_inst[module_idP].ul_active); + + rv = 1; + /* + rlc_status = mac_rlc_status_ind(module_idP, UE_mac_inst[module_idP].crnti,frameP,ENB_FLAG_NO,MBMS_FLAG_NO, // eNB_index + DTCH, + 0); + + if (( + // (rlc_status.pdus_in_buffer > 0 ) && + // (UE_mac_inst[module_idP].ul_active == 0) && // check if the ul is acrtive + (rlc_status.head_sdu_is_segmented == 0 ) && + ((rlc_status.head_sdu_remaining_size_to_send + header_offset ) <= buflen ) + )){ + rv = 1; + + UE_mac_inst[module_idP].cba_last_access[0]= round(uniform_rngen(1,30)); + LOG_D(MAC,"[UE %d] Frame %d Subframe %d: start a new CBA backoff %d UL active state %d \n", module_idP, frameP, subframe, + UE_mac_inst[module_idP].cba_last_access[0], UE_mac_inst[module_idP].ul_active); + */ + } else { + UE_mac_inst[module_idP].cba_last_access[0] -= 1; + LOG_D(MAC, + "[UE %d] Frame %d Subframe %d: wait for backoff to expire (%d) CBA UL active state %d \n", + module_idP, frameP, subframe, + UE_mac_inst[module_idP].cba_last_access[0], + UE_mac_inst[module_idP].ul_active); + } } - } - return rv; - /* - if (( ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1]>0)&&(UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1]<64)) || - ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2]>0)&&(UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2]<64)) || - ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3]>0)&&(UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3]<64)) ) - // && (UE_mac_inst[module_idP].ul_active == 0) // check if the ul is acrtive - && (UE_mac_inst[module_idP].cba_last_access[0] <= 0) ) { + return rv; + /* + if (( ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1]>0)&&(UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1]<64)) || + ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2]>0)&&(UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2]<64)) || + ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3]>0)&&(UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3]<64)) ) + // && (UE_mac_inst[module_idP].ul_active == 0) // check if the ul is acrtive + && (UE_mac_inst[module_idP].cba_last_access[0] <= 0) ) { - UE_mac_inst[module_idP].cba_last_access[0]= round(uniform_rngen(1,cba_backoff)); + UE_mac_inst[module_idP].cba_last_access[0]= round(uniform_rngen(1,cba_backoff)); - LOG_I(MAC,"[UE %d] Frame %d Subframe %d: start a new CBA backoff %d/%d UL active state %d \n", module_idP, frameP, subframe, - UE_mac_inst[module_idP].cba_last_access[0], cba_backoff,UE_mac_inst[module_idP].ul_active); + LOG_I(MAC,"[UE %d] Frame %d Subframe %d: start a new CBA backoff %d/%d UL active state %d \n", module_idP, frameP, subframe, + UE_mac_inst[module_idP].cba_last_access[0], cba_backoff,UE_mac_inst[module_idP].ul_active); - rv = 1; + rv = 1; - rlc_status = mac_rlc_status_ind(module_idP, UE_mac_inst[module_idP].crnti,frameP,ENB_FLAG_NO,MBMS_FLAG_NO, // eNB_index - DTCH, - 0); + rlc_status = mac_rlc_status_ind(module_idP, UE_mac_inst[module_idP].crnti,frameP,ENB_FLAG_NO,MBMS_FLAG_NO, // eNB_index + DTCH, + 0); - if (( - // (rlc_status.pdus_in_buffer > 0 ) && - // (UE_mac_inst[module_idP].ul_active == 0) && // check if the ul is acrtive - (rlc_status.head_sdu_is_segmented == 0 ) && - ((rlc_status.head_sdu_remaining_size_to_send + header_offset ) <= buflen ) - )){ - rv = 1; + if (( + // (rlc_status.pdus_in_buffer > 0 ) && + // (UE_mac_inst[module_idP].ul_active == 0) && // check if the ul is acrtive + (rlc_status.head_sdu_is_segmented == 0 ) && + ((rlc_status.head_sdu_remaining_size_to_send + header_offset ) <= buflen ) + )){ + rv = 1; - UE_mac_inst[module_idP].cba_last_access[0]= round(uniform_rngen(1,30)); - LOG_D(MAC,"[UE %d] Frame %d Subframe %d: start a new CBA backoff %d UL active state %d \n", module_idP, frameP, subframe, - UE_mac_inst[module_idP].cba_last_access[0], UE_mac_inst[module_idP].ul_active); - } else - UE_mac_inst[module_idP].cba_last_access[0]= round(uniform_rngen(1,5)); + UE_mac_inst[module_idP].cba_last_access[0]= round(uniform_rngen(1,30)); + LOG_D(MAC,"[UE %d] Frame %d Subframe %d: start a new CBA backoff %d UL active state %d \n", module_idP, frameP, subframe, + UE_mac_inst[module_idP].cba_last_access[0], UE_mac_inst[module_idP].ul_active); + } else + UE_mac_inst[module_idP].cba_last_access[0]= round(uniform_rngen(1,5)); - } else if (( ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1]> 0 )) || - ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2]> 0 )) || - ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3]> 0 )) ) - // && (UE_mac_inst[module_idP].ul_active == 0) // check if the ul is acrtive - && (UE_mac_inst[module_idP].cba_last_access[0]> 0) ) - { + } else if (( ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID1]> 0 )) || + ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID2]> 0 )) || + ((UE_mac_inst[module_idP].scheduling_info.BSR[LCGID3]> 0 )) ) + // && (UE_mac_inst[module_idP].ul_active == 0) // check if the ul is acrtive + && (UE_mac_inst[module_idP].cba_last_access[0]> 0) ) + { - UE_mac_inst[module_idP].cba_last_access[0]-=1; - LOG_D(MAC,"[UE %d] Frame %d Subframe %d: wait for backoff to expire (%d) CBA UL active state %d \n", - module_idP, frameP, subframe, - UE_mac_inst[module_idP].cba_last_access[0], UE_mac_inst[module_idP].ul_active); - } - } - */ + UE_mac_inst[module_idP].cba_last_access[0]-=1; + LOG_D(MAC,"[UE %d] Frame %d Subframe %d: wait for backoff to expire (%d) CBA UL active state %d \n", + module_idP, frameP, subframe, + UE_mac_inst[module_idP].cba_last_access[0], UE_mac_inst[module_idP].ul_active); + } + } + */ } #endif -boolean_t update_bsr(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP,eNB_index_t eNB_index) +boolean_t +update_bsr(module_id_t module_idP, frame_t frameP, + sub_frame_t subframeP, eNB_index_t eNB_index) { - mac_rlc_status_resp_t rlc_status; - boolean_t bsr_regular_triggered = FALSE; - uint8_t lcid; - uint8_t lcgid; - uint8_t num_lcid_with_data = 0; // for LCID with data only if LCGID is defined - uint16_t lcgid_buffer_remain[MAX_NUM_LCGID] = {0,0,0,0}; - int32_t lcid_bytes_in_buffer[MAX_NUM_LCID]; - /* Array for ordering LCID with data per decreasing priority order */ - uint8_t lcid_reordered_array[MAX_NUM_LCID]= - {MAX_NUM_LCID,MAX_NUM_LCID,MAX_NUM_LCID,MAX_NUM_LCID,MAX_NUM_LCID,MAX_NUM_LCID,MAX_NUM_LCID,MAX_NUM_LCID,MAX_NUM_LCID,MAX_NUM_LCID,MAX_NUM_LCID}; - uint8_t pos_next = 0; - uint8_t highest_priority = 16; - uint8_t array_index = 0; + mac_rlc_status_resp_t rlc_status; + boolean_t bsr_regular_triggered = FALSE; + uint8_t lcid; + uint8_t lcgid; + uint8_t num_lcid_with_data = 0; // for LCID with data only if LCGID is defined + uint16_t lcgid_buffer_remain[MAX_NUM_LCGID] = { 0, 0, 0, 0 }; + int32_t lcid_bytes_in_buffer[MAX_NUM_LCID]; + /* Array for ordering LCID with data per decreasing priority order */ + uint8_t lcid_reordered_array[MAX_NUM_LCID] = + { MAX_NUM_LCID, MAX_NUM_LCID, MAX_NUM_LCID, MAX_NUM_LCID, + MAX_NUM_LCID, MAX_NUM_LCID, MAX_NUM_LCID, MAX_NUM_LCID, + MAX_NUM_LCID, + MAX_NUM_LCID, MAX_NUM_LCID + }; + uint8_t pos_next = 0; + uint8_t highest_priority = 16; + uint8_t array_index = 0; - // Reset All BSR Infos - lcid_bytes_in_buffer[0] = 0; - for (lcid=DCCH; lcid < MAX_NUM_LCID; lcid++) - { - // Reset transmission status - lcid_bytes_in_buffer[lcid] = 0; - UE_mac_inst[module_idP].scheduling_info.LCID_status[lcid]=LCID_EMPTY; - } - - for (lcgid=0; lcgid < MAX_NUM_LCGID; lcgid++) - { - // Reset Buffer Info - UE_mac_inst[module_idP].scheduling_info.BSR[lcgid]=0; - UE_mac_inst[module_idP].scheduling_info.BSR_bytes[lcgid]=0; - } - - //Get Buffer Occupancy and fill lcid_reordered_array - for (lcid=DCCH; lcid < MAX_NUM_LCID; lcid++) - { - if (UE_mac_inst[module_idP].logicalChannelConfig[lcid]) - { - lcgid = UE_mac_inst[module_idP].scheduling_info.LCGID[lcid]; - - // Store already available data to transmit per Group - if (lcgid < MAX_NUM_LCGID) - { - lcgid_buffer_remain[lcgid] += UE_mac_inst[module_idP].scheduling_info.LCID_buffer_remain[lcid]; - } - - rlc_status = mac_rlc_status_ind(module_idP, UE_mac_inst[module_idP].crnti,eNB_index,frameP,subframeP,ENB_FLAG_NO,MBMS_FLAG_NO, - lcid, - 0xFFFF); //TBS is not used in RLC at this step, set a special value for debug - - lcid_bytes_in_buffer[lcid] = rlc_status.bytes_in_buffer; - - if (rlc_status.bytes_in_buffer > 0) - { - LOG_D(MAC,"[UE %d] PDCCH Tick : LCID%d LCGID%d has data to transmit =%d bytes at frame %d subframe %d\n", - module_idP, lcid,lcgid,rlc_status.bytes_in_buffer,frameP,subframeP); - - UE_mac_inst[module_idP].scheduling_info.LCID_status[lcid] = LCID_NOT_EMPTY; - //Update BSR_bytes and position in lcid_reordered_array only if Group is defined - if (lcgid < MAX_NUM_LCGID) - { - num_lcid_with_data ++; - // sum lcid buffer which has same lcgid - UE_mac_inst[module_idP].scheduling_info.BSR_bytes[lcgid] += rlc_status.bytes_in_buffer; - - //Fill in the array - array_index = 0; - do - { - if (UE_mac_inst[module_idP].logicalChannelConfig[lcid]->ul_SpecificParameters->priority <= highest_priority) - { - //Insert if priority is higher or equal (lower or equal in value) - for (pos_next=num_lcid_with_data-1; pos_next > array_index; pos_next--) - { - lcid_reordered_array[pos_next] = lcid_reordered_array[pos_next - 1]; - - } - lcid_reordered_array[array_index] = lcid; - break; - - } - array_index ++; - } - while ((array_index < num_lcid_with_data) && (array_index < MAX_NUM_LCID)); - } - } - } - - } - - // Check whether a regular BSR can be triggered according to the first cases in 36.321 - if (num_lcid_with_data) - { - LOG_D(MAC,"[UE %d] PDCCH Tick at frame %d subframe %d: NumLCID with data=%d Reordered LCID0=%d LCID1=%d LCID2=%d\n", - module_idP, frameP, subframeP,num_lcid_with_data,lcid_reordered_array[0],lcid_reordered_array[1],lcid_reordered_array[2]); - - for (array_index=0; array_index < num_lcid_with_data; array_index++) - { - lcid = lcid_reordered_array[array_index]; - /* UL data, for a logical channel which belongs to a LCG, becomes available for transmission in the RLC entity - either the data belongs to a logical channel with higher priority than the priorities of the logical channels - which belong to any LCG and for which data is already available for transmission - */ - if ((UE_mac_inst[module_idP].scheduling_info.LCID_buffer_remain[lcid] == 0) - /* or there is no data available for any of the logical channels which belong to a LCG */ - ||(lcgid_buffer_remain[UE_mac_inst[module_idP].scheduling_info.LCGID[lcid]] == 0) - ) - { - bsr_regular_triggered = TRUE; - - LOG_D(MAC,"[UE %d] PDCCH Tick : MAC BSR Triggered LCID%d LCGID%d data become available at frame %d subframe %d\n", - module_idP, lcid,UE_mac_inst[module_idP].scheduling_info.LCGID[lcid],frameP, subframeP); - - break; - } - } - - // Trigger Regular BSR if ReTxBSR Timer has expired and UE has data for transmission - if (UE_mac_inst[module_idP].scheduling_info.retxBSR_SF == 0) - { - bsr_regular_triggered = TRUE; - - if ((UE_mac_inst[module_idP].BSR_reporting_active & BSR_TRIGGER_REGULAR) == 0) { - LOG_I(MAC,"[UE %d] PDCCH Tick : MAC BSR Triggered ReTxBSR Timer expiry at frame %d subframe %d\n", - module_idP, frameP, subframeP); - } - - } - } - - //Store Buffer Occupancy in remain buffers for next TTI - for (lcid=DCCH; lcid < MAX_NUM_LCID; lcid++) - { - UE_mac_inst[module_idP].scheduling_info.LCID_buffer_remain[lcid] = lcid_bytes_in_buffer[lcid]; - } - - return bsr_regular_triggered; -} - -uint8_t locate_BsrIndexByBufferSize (const uint32_t *table, int size, int value) -{ - - uint8_t ju, jm, jl; - int ascend; - - DevAssert( size > 0 ); - DevAssert( size <= 256 ); - - if (value == 0) { - return 0; //elseif (value > 150000) return 63; - } - - jl = 0; // lower bound - ju = size - 1; // upper bound - ascend = (table[ju] >= table[jl]) ? 1 : 0; // determine the order of the the table: 1 if ascending order of table, 0 otherwise - - while (ju-jl > 1) { //If we are not yet done, - jm = (ju+jl) >> 1; //compute a midpoint, - - if ((value >= table[jm]) == ascend) { - jl=jm; // replace the lower limit - } else { - ju=jm; //replace the upper limit + // Reset All BSR Infos + lcid_bytes_in_buffer[0] = 0; + for (lcid = DCCH; lcid < MAX_NUM_LCID; lcid++) { + // Reset transmission status + lcid_bytes_in_buffer[lcid] = 0; + UE_mac_inst[module_idP].scheduling_info.LCID_status[lcid] = + LCID_EMPTY; } - LOG_T(MAC,"[UE] searching BSR index %d for (BSR TABLE %d < value %d)\n", jm, table[jm], value); - } + for (lcgid = 0; lcgid < MAX_NUM_LCGID; lcgid++) { + // Reset Buffer Info + UE_mac_inst[module_idP].scheduling_info.BSR[lcgid] = 0; + UE_mac_inst[module_idP].scheduling_info.BSR_bytes[lcgid] = 0; + } - if (value == table[jl]) { - return jl; - } else { - return jl+1; //equally ju - } + //Get Buffer Occupancy and fill lcid_reordered_array + for (lcid = DCCH; lcid < MAX_NUM_LCID; lcid++) { + if (UE_mac_inst[module_idP].logicalChannelConfig[lcid]) { + lcgid = UE_mac_inst[module_idP].scheduling_info.LCGID[lcid]; + + // Store already available data to transmit per Group + if (lcgid < MAX_NUM_LCGID) { + lcgid_buffer_remain[lcgid] += + UE_mac_inst[module_idP]. + scheduling_info.LCID_buffer_remain[lcid]; + } + + rlc_status = mac_rlc_status_ind(module_idP, UE_mac_inst[module_idP].crnti, eNB_index, frameP, subframeP, ENB_FLAG_NO, MBMS_FLAG_NO, lcid, 0xFFFF); //TBS is not used in RLC at this step, set a special value for debug + + lcid_bytes_in_buffer[lcid] = rlc_status.bytes_in_buffer; + + if (rlc_status.bytes_in_buffer > 0) { + LOG_D(MAC, + "[UE %d] PDCCH Tick : LCID%d LCGID%d has data to transmit =%d bytes at frame %d subframe %d\n", + module_idP, lcid, lcgid, rlc_status.bytes_in_buffer, + frameP, subframeP); + + UE_mac_inst[module_idP].scheduling_info.LCID_status[lcid] = + LCID_NOT_EMPTY; + //Update BSR_bytes and position in lcid_reordered_array only if Group is defined + if (lcgid < MAX_NUM_LCGID) { + num_lcid_with_data++; + // sum lcid buffer which has same lcgid + UE_mac_inst[module_idP].scheduling_info. + BSR_bytes[lcgid] += rlc_status.bytes_in_buffer; + + //Fill in the array + array_index = 0; + do { + if (UE_mac_inst[module_idP].logicalChannelConfig + [lcid]->ul_SpecificParameters->priority <= + highest_priority) { + //Insert if priority is higher or equal (lower or equal in value) + for (pos_next = num_lcid_with_data - 1; + pos_next > array_index; pos_next--) { + lcid_reordered_array[pos_next] = + lcid_reordered_array[pos_next - 1]; + + } + lcid_reordered_array[array_index] = lcid; + break; + + } + array_index++; + } + while ((array_index < num_lcid_with_data) + && (array_index < MAX_NUM_LCID)); + } + } + } + + } + + // Check whether a regular BSR can be triggered according to the first cases in 36.321 + if (num_lcid_with_data) { + LOG_D(MAC, + "[UE %d] PDCCH Tick at frame %d subframe %d: NumLCID with data=%d Reordered LCID0=%d LCID1=%d LCID2=%d\n", + module_idP, frameP, subframeP, num_lcid_with_data, + lcid_reordered_array[0], lcid_reordered_array[1], + lcid_reordered_array[2]); + + for (array_index = 0; array_index < num_lcid_with_data; + array_index++) { + lcid = lcid_reordered_array[array_index]; + /* UL data, for a logical channel which belongs to a LCG, becomes available for transmission in the RLC entity + either the data belongs to a logical channel with higher priority than the priorities of the logical channels + which belong to any LCG and for which data is already available for transmission + */ + if ((UE_mac_inst[module_idP]. + scheduling_info.LCID_buffer_remain[lcid] == 0) + /* or there is no data available for any of the logical channels which belong to a LCG */ + || + (lcgid_buffer_remain + [UE_mac_inst[module_idP].scheduling_info.LCGID[lcid]] == + 0)) { + bsr_regular_triggered = TRUE; + + LOG_D(MAC, + "[UE %d] PDCCH Tick : MAC BSR Triggered LCID%d LCGID%d data become available at frame %d subframe %d\n", + module_idP, lcid, + UE_mac_inst[module_idP].scheduling_info.LCGID[lcid], + frameP, subframeP); + + break; + } + } + + // Trigger Regular BSR if ReTxBSR Timer has expired and UE has data for transmission + if (UE_mac_inst[module_idP].scheduling_info.retxBSR_SF == 0) { + bsr_regular_triggered = TRUE; + + if ((UE_mac_inst[module_idP].BSR_reporting_active & + BSR_TRIGGER_REGULAR) == 0) { + LOG_I(MAC, + "[UE %d] PDCCH Tick : MAC BSR Triggered ReTxBSR Timer expiry at frame %d subframe %d\n", + module_idP, frameP, subframeP); + } + + } + } + //Store Buffer Occupancy in remain buffers for next TTI + for (lcid = DCCH; lcid < MAX_NUM_LCID; lcid++) { + UE_mac_inst[module_idP].scheduling_info.LCID_buffer_remain[lcid] = + lcid_bytes_in_buffer[lcid]; + } + + return bsr_regular_triggered; +} + +uint8_t +locate_BsrIndexByBufferSize(const uint32_t * table, int size, int value) +{ + + uint8_t ju, jm, jl; + int ascend; + + DevAssert(size > 0); + DevAssert(size <= 256); + + if (value == 0) { + return 0; //elseif (value > 150000) return 63; + } + + jl = 0; // lower bound + ju = size - 1; // upper bound + ascend = (table[ju] >= table[jl]) ? 1 : 0; // determine the order of the the table: 1 if ascending order of table, 0 otherwise + + while (ju - jl > 1) { //If we are not yet done, + jm = (ju + jl) >> 1; //compute a midpoint, + + if ((value >= table[jm]) == ascend) { + jl = jm; // replace the lower limit + } else { + ju = jm; //replace the upper limit + } + + LOG_T(MAC, + "[UE] searching BSR index %d for (BSR TABLE %d < value %d)\n", + jm, table[jm], value); + } + + if (value == table[jl]) { + return jl; + } else { + return jl + 1; //equally ju + } } int get_sf_periodicBSRTimer(uint8_t sf_offset) { - switch (sf_offset) { - case PeriodicBSR_Timer_r12_sf5: - return 5; - break; + switch (sf_offset) { + case PeriodicBSR_Timer_r12_sf5: + return 5; + break; - case PeriodicBSR_Timer_r12_sf10: - return 10; - break; + case PeriodicBSR_Timer_r12_sf10: + return 10; + break; - case PeriodicBSR_Timer_r12_sf16: - return 16; - break; + case PeriodicBSR_Timer_r12_sf16: + return 16; + break; - case PeriodicBSR_Timer_r12_sf20: - return 20; - break; + case PeriodicBSR_Timer_r12_sf20: + return 20; + break; - case PeriodicBSR_Timer_r12_sf32: - return 32; - break; + case PeriodicBSR_Timer_r12_sf32: + return 32; + break; - case PeriodicBSR_Timer_r12_sf40: - return 40; - break; + case PeriodicBSR_Timer_r12_sf40: + return 40; + break; - case PeriodicBSR_Timer_r12_sf64: - return 64; - break; + case PeriodicBSR_Timer_r12_sf64: + return 64; + break; - case PeriodicBSR_Timer_r12_sf80: - return 80; - break; + case PeriodicBSR_Timer_r12_sf80: + return 80; + break; - case PeriodicBSR_Timer_r12_sf128: - return 128; - break; + case PeriodicBSR_Timer_r12_sf128: + return 128; + break; - case PeriodicBSR_Timer_r12_sf160: - return 160; - break; + case PeriodicBSR_Timer_r12_sf160: + return 160; + break; - case PeriodicBSR_Timer_r12_sf320: - return 320; - break; + case PeriodicBSR_Timer_r12_sf320: + return 320; + break; - case PeriodicBSR_Timer_r12_sf640: - return 640; - break; + case PeriodicBSR_Timer_r12_sf640: + return 640; + break; - case PeriodicBSR_Timer_r12_sf1280: - return 1280; - break; + case PeriodicBSR_Timer_r12_sf1280: + return 1280; + break; - case PeriodicBSR_Timer_r12_sf2560: - return 2560; - break; + case PeriodicBSR_Timer_r12_sf2560: + return 2560; + break; - case PeriodicBSR_Timer_r12_infinity: - default: - return 0xFFFF; - break; - } + case PeriodicBSR_Timer_r12_infinity: + default: + return 0xFFFF; + break; + } } int get_sf_retxBSRTimer(uint8_t sf_offset) { - switch (sf_offset) { - case RetxBSR_Timer_r12_sf320: - return 320; - break; + switch (sf_offset) { + case RetxBSR_Timer_r12_sf320: + return 320; + break; - case RetxBSR_Timer_r12_sf640: - return 640; - break; + case RetxBSR_Timer_r12_sf640: + return 640; + break; - case RetxBSR_Timer_r12_sf1280: - return 1280; - break; + case RetxBSR_Timer_r12_sf1280: + return 1280; + break; - case RetxBSR_Timer_r12_sf2560: - return 2560; - break; + case RetxBSR_Timer_r12_sf2560: + return 2560; + break; - case RetxBSR_Timer_r12_sf5120: - return 5120; - break; + case RetxBSR_Timer_r12_sf5120: + return 5120; + break; - case RetxBSR_Timer_r12_sf10240: - return 10240; - break; + case RetxBSR_Timer_r12_sf10240: + return 10240; + break; - default: - return -1; - break; - } + default: + return -1; + break; + } } + int get_ms_bucketsizeduration(uint8_t bucketsizeduration) { - switch (bucketsizeduration) { - case LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50: - return 50; - break; + switch (bucketsizeduration) { + case LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50: + return + 50; + break; - case LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms100: - return 100; - break; + case LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms100: + return + 100; + break; - case LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms150: - return 150; - break; + case LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms150: + return + 150; + break; - case LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms300: - return 300; - break; + case LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms300: + return + 300; + break; - case LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms500: - return 500; - break; + case LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms500: + return + 500; + break; - case LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms1000: - return 1000; - break; + case LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms1000: + return + 1000; + break; - default: - return 0; - break; - } + default: + return 0; + break; + } } -void update_phr(module_id_t module_idP,int CC_id) +void update_phr(module_id_t module_idP, int CC_id) { - AssertFatal(CC_id==0, - "Transmission on secondary CCs is not supported yet\n"); + AssertFatal(CC_id == 0, + "Transmission on secondary CCs is not supported yet\n"); - UE_mac_inst[module_idP].PHR_reporting_active =0; - UE_mac_inst[module_idP].scheduling_info.periodicPHR_SF = get_sf_perioidicPHR_Timer(UE_mac_inst[module_idP].scheduling_info.periodicPHR_Timer); - UE_mac_inst[module_idP].scheduling_info.prohibitPHR_SF = get_sf_prohibitPHR_Timer(UE_mac_inst[module_idP].scheduling_info.prohibitPHR_Timer); - // LOG_D(MAC,"phr %d %d\n ",UE_mac_inst[module_idP].scheduling_info.periodicPHR_SF, UE_mac_inst[module_idP].scheduling_info.prohibitPHR_SF); + UE_mac_inst[module_idP].PHR_reporting_active = 0; + UE_mac_inst[module_idP].scheduling_info.periodicPHR_SF = + get_sf_perioidicPHR_Timer(UE_mac_inst[module_idP]. + scheduling_info.periodicPHR_Timer); + UE_mac_inst[module_idP].scheduling_info.prohibitPHR_SF = + get_sf_prohibitPHR_Timer(UE_mac_inst[module_idP]. + scheduling_info.prohibitPHR_Timer); + // LOG_D(MAC,"phr %d %d\n ",UE_mac_inst[module_idP].scheduling_info.periodicPHR_SF, UE_mac_inst[module_idP].scheduling_info.prohibitPHR_SF); } -uint8_t get_phr_mapping (module_id_t module_idP, int CC_id, uint8_t eNB_index) + +uint8_t +get_phr_mapping(module_id_t module_idP, int CC_id, uint8_t eNB_index) { - AssertFatal(CC_id==0, - "Transmission on secondary CCs is not supported yet\n"); + AssertFatal(CC_id == 0, + "Transmission on secondary CCs is not supported yet\n"); - //power headroom reporting range is from -23 ...+40 dB, as described in 36313 - //note: mac_xface->get_Po_NOMINAL_PUSCH(module_idP) is float - if (get_PHR(module_idP,CC_id,eNB_index) < -23) { - return 0; - } else if (get_PHR(module_idP,CC_id,eNB_index) >= 40) { - return 63; - } else { // -23 to 40 - return (uint8_t) get_PHR(module_idP,CC_id,eNB_index) + PHR_MAPPING_OFFSET; + //power headroom reporting range is from -23 ...+40 dB, as described in 36313 + //note: mac_xface->get_Po_NOMINAL_PUSCH(module_idP) is float + if (get_PHR(module_idP, CC_id, eNB_index) < -23) { + return 0; + } else if (get_PHR(module_idP, CC_id, eNB_index) >= 40) { + return 63; + } else { // -23 to 40 + return (uint8_t) get_PHR(module_idP, CC_id, + eNB_index) + PHR_MAPPING_OFFSET; - } + } } + int get_sf_perioidicPHR_Timer(uint8_t perioidicPHR_Timer) { - return (perioidicPHR_Timer+1)*10; + return (perioidicPHR_Timer + 1) * 10; } int get_sf_prohibitPHR_Timer(uint8_t prohibitPHR_Timer) { - return (prohibitPHR_Timer)*10; + return (prohibitPHR_Timer) * 10; } int get_db_dl_PathlossChange(uint8_t dl_PathlossChange) { - switch (dl_PathlossChange) { - case MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB1: - return 1; - break; + switch (dl_PathlossChange) { + case MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB1: + return 1; + break; - case MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB3: - return 3; - break; + case MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB3: + return 3; + break; - case MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB6: - return 6; - break; + case MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB6: + return 6; + break; - case MAC_MainConfig__phr_Config__setup__dl_PathlossChange_infinity: - default: - return -1; - break; - } + case MAC_MainConfig__phr_Config__setup__dl_PathlossChange_infinity: + default: + return -1; + break; + } } diff --git a/openair2/LAYER2/MAC/vars.h b/openair2/LAYER2/MAC/vars.h index 4ff5475253..2386088161 100644 --- a/openair2/LAYER2/MAC/vars.h +++ b/openair2/LAYER2/MAC/vars.h @@ -34,25 +34,32 @@ #define __MAC_VARS_H__ #ifdef USER_MODE //#include "stdio.h" -#endif //USER_MODE +#endif //USER_MODE #include "PHY/defs.h" #include "defs.h" #include "COMMON/mac_rrc_primitives.h" -const uint32_t BSR_TABLE[BSR_TABLE_SIZE]= {0,10,12,14,17,19,22,26,31,36,42,49,57,67,78,91, - 105,125,146,171,200,234,274,321,376,440,515,603,706,826,967,1132, - 1326,1552,1817,2127,2490,2915,3413,3995,4677,5467,6411,7505,8787,10287,12043,14099, - 16507,19325,22624,26487,31009,36304,42502,49759,58255,68201,79846,93479,109439, 128125,150000, 300000 - }; -// extended bsr table--currently not used -const uint32_t Extended_BSR_TABLE[BSR_TABLE_SIZE] = {0,10,13,16,19,23,29,35,43,53,65,80,98,120,147, - 181,223,274,337,414,509,625,769,945,1162,1429, - 1757,2161,2657,3267,4017,4940,6074,7469,9185, - 11294,13888,17077,20999,25822,31752,39045,48012, - 59039,72598,89272,109774,134986,165989,204111, - 250990,308634,379519,466683,573866,705666,867737, - 1067031,1312097,1613447,1984009,2439678,3000000, - 6000000}; +const uint32_t BSR_TABLE[BSR_TABLE_SIZE] = + { 0, 10, 12, 14, 17, 19, 22, 26, 31, 36, 42, 49, 57, 67, 78, 91, + 105, 125, 146, 171, 200, 234, 274, 321, 376, 440, 515, 603, 706, 826, + 967, 1132, + 1326, 1552, 1817, 2127, 2490, 2915, 3413, 3995, 4677, 5467, 6411, 7505, + 8787, 10287, 12043, 14099, + 16507, 19325, 22624, 26487, 31009, 36304, 42502, 49759, 58255, 68201, + 79846, 93479, 109439, 128125, 150000, 300000 +}; + +// extended bsr table--currently not used +const uint32_t Extended_BSR_TABLE[BSR_TABLE_SIZE] = + { 0, 10, 13, 16, 19, 23, 29, 35, 43, 53, 65, 80, 98, 120, 147, + 181, 223, 274, 337, 414, 509, 625, 769, 945, 1162, 1429, + 1757, 2161, 2657, 3267, 4017, 4940, 6074, 7469, 9185, + 11294, 13888, 17077, 20999, 25822, 31752, 39045, 48012, + 59039, 72598, 89272, 109774, 134986, 165989, 204111, + 250990, 308634, 379519, 466683, 573866, 705666, 867737, + 1067031, 1312097, 1613447, 1984009, 2439678, 3000000, + 6000000 +}; //#define MAX_SIZE_OF_AGG3 576 //#define MAX_SIZE_OF_AGG2 288 @@ -64,24 +71,26 @@ const uint32_t Extended_BSR_TABLE[BSR_TABLE_SIZE] = {0,10,13,16,19,23,29,35,43,5 * this is also dependent to transmission mode, where an offset could be defined */ // the follwoing three tables are calibrated for TXMODE 1 and 2 -const uint8_t cqi2fmt0_agg[MAX_SUPPORTED_BW][CQI_VALUE_RANGE]= { - {3, 3, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, // 1.4_DCI0_CRC_Size= 37 bits - //{3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0}, // 5_DCI0_CRC_SIZE = 41 - {3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, // 5_DCI0_CRC_SIZE = 41 - {3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0}, // 10_DCI0_CRC_SIZE = 43 - {3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0} // 20_DCI0_CRC_SIZE = 44 +const uint8_t cqi2fmt0_agg[MAX_SUPPORTED_BW][CQI_VALUE_RANGE] = { + {3, 3, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, // 1.4_DCI0_CRC_Size= 37 bits + //{3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0}, // 5_DCI0_CRC_SIZE = 41 + {3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, // 5_DCI0_CRC_SIZE = 41 + {3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0}, // 10_DCI0_CRC_SIZE = 43 + {3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0} // 20_DCI0_CRC_SIZE = 44 }; -const uint8_t cqi2fmt1x_agg[MAX_SUPPORTED_BW][CQI_VALUE_RANGE]= { - {3, 3, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, // 1.4_DCI0_CRC_Size < 38 bits - {3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, // 5_DCI0_CRC_SIZE < 43 - {3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0}, // 10_DCI0_CRC_SIZE < 47 - {3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0} // 20_DCI0_CRC_SIZE < 55 + +const uint8_t cqi2fmt1x_agg[MAX_SUPPORTED_BW][CQI_VALUE_RANGE] = { + {3, 3, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, // 1.4_DCI0_CRC_Size < 38 bits + {3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, // 5_DCI0_CRC_SIZE < 43 + {3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0}, // 10_DCI0_CRC_SIZE < 47 + {3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0} // 20_DCI0_CRC_SIZE < 55 }; -const uint8_t cqi2fmt2x_agg[MAX_SUPPORTED_BW][CQI_VALUE_RANGE]= { - {3, 3, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, // 1.4_DCI0_CRC_Size= 47 bits - {3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, // 5_DCI0_CRC_SIZE = 55 - {3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0}, // 10_DCI0_CRC_SIZE = 59 - {3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0} // 20_DCI0_CRC_SIZE = 64 + +const uint8_t cqi2fmt2x_agg[MAX_SUPPORTED_BW][CQI_VALUE_RANGE] = { + {3, 3, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, // 1.4_DCI0_CRC_Size= 47 bits + {3, 3, 3, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, // 5_DCI0_CRC_SIZE = 55 + {3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0}, // 10_DCI0_CRC_SIZE = 59 + {3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0} // 20_DCI0_CRC_SIZE = 64 }; //uint32_t EBSR_Level[63]={0,10,13,16,19,23,29,35,43,53,65,80,98,120,147,181}; @@ -89,7 +98,7 @@ const uint8_t cqi2fmt2x_agg[MAX_SUPPORTED_BW][CQI_VALUE_RANGE]= { uint32_t RRC_CONNECTION_FLAG; -UE_MAC_INST *UE_mac_inst; //[NB_MODULE_MAX]; +UE_MAC_INST *UE_mac_inst; //[NB_MODULE_MAX]; MAC_RLC_XFACE *Mac_rlc_xface; /// Primary component carrier index of eNB @@ -97,39 +106,39 @@ int pCC_id[NUMBER_OF_eNB_MAX]; -eNB_ULSCH_INFO eNB_ulsch_info[NUMBER_OF_eNB_MAX][MAX_NUM_CCs][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8 -eNB_DLSCH_INFO eNB_dlsch_info[NUMBER_OF_eNB_MAX][MAX_NUM_CCs][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8 +eNB_ULSCH_INFO eNB_ulsch_info[NUMBER_OF_eNB_MAX][MAX_NUM_CCs][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8 +eNB_DLSCH_INFO eNB_dlsch_info[NUMBER_OF_eNB_MAX][MAX_NUM_CCs][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8 #ifdef OPENAIR2 -unsigned char NB_eNB_INST=0; -unsigned char NB_UE_INST=0; -unsigned char NB_RN_INST=0; -unsigned char NB_INST=0; +unsigned char NB_eNB_INST = 0; +unsigned char NB_UE_INST = 0; +unsigned char NB_RN_INST = 0; +unsigned char NB_INST = 0; #endif -DCI0_5MHz_TDD_1_6_t UL_alloc_pdu; +DCI0_5MHz_TDD_1_6_t UL_alloc_pdu; -DCI1A_5MHz_TDD_1_6_t DLSCH_alloc_pdu1A; -DCI1A_5MHz_TDD_1_6_t RA_alloc_pdu; -DCI1A_5MHz_TDD_1_6_t BCCH_alloc_pdu; +DCI1A_5MHz_TDD_1_6_t DLSCH_alloc_pdu1A; +DCI1A_5MHz_TDD_1_6_t RA_alloc_pdu; +DCI1A_5MHz_TDD_1_6_t BCCH_alloc_pdu; -DCI1A_5MHz_TDD_1_6_t CCCH_alloc_pdu; -DCI1_5MHz_TDD_t DLSCH_alloc_pdu; +DCI1A_5MHz_TDD_1_6_t CCCH_alloc_pdu; +DCI1_5MHz_TDD_t DLSCH_alloc_pdu; #if defined(Rel10) || defined(Rel14) -DCI1C_5MHz_t MCCH_alloc_pdu; +DCI1C_5MHz_t MCCH_alloc_pdu; #endif -DCI0_5MHz_FDD_t UL_alloc_pdu_fdd; +DCI0_5MHz_FDD_t UL_alloc_pdu_fdd; -DCI1A_5MHz_FDD_t DLSCH_alloc_pdu1A_fdd; -DCI1A_5MHz_FDD_t RA_alloc_pdu_fdd; -DCI1A_5MHz_FDD_t BCCH_alloc_pdu_fdd; +DCI1A_5MHz_FDD_t DLSCH_alloc_pdu1A_fdd; +DCI1A_5MHz_FDD_t RA_alloc_pdu_fdd; +DCI1A_5MHz_FDD_t BCCH_alloc_pdu_fdd; -DCI1A_5MHz_FDD_t CCCH_alloc_pdu_fdd; -DCI1_5MHz_FDD_t DLSCH_alloc_pdu_fdd; +DCI1A_5MHz_FDD_t CCCH_alloc_pdu_fdd; +DCI1_5MHz_FDD_t DLSCH_alloc_pdu_fdd; DCI2_5MHz_2A_TDD_t DLSCH_alloc_pdu1; DCI2_5MHz_2A_TDD_t DLSCH_alloc_pdu2; @@ -137,5 +146,3 @@ DCI2_5MHz_2A_TDD_t DLSCH_alloc_pdu2; DCI1E_5MHz_2A_M10PRB_TDD_t DLSCH_alloc_pdu1E; #endif - - From 7d3ce9bd1d7e29e04c48e72069d5a1f4c8695b22 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Mon, 13 Nov 2017 07:15:08 -0800 Subject: [PATCH 03/19] added .ipe file for L1_L2_procedures slides and updated .pdf file --- targets/DOCS/oai_L1_L2_procedures.ipe | 12461 ++++++++++++++++++++++++ targets/DOCS/oai_L1_L2_procedures.pdf | Bin 1118156 -> 663552 bytes 2 files changed, 12461 insertions(+) create mode 100755 targets/DOCS/oai_L1_L2_procedures.ipe diff --git a/targets/DOCS/oai_L1_L2_procedures.ipe b/targets/DOCS/oai_L1_L2_procedures.ipe new file mode 100755 index 0000000000..2062240c14 --- /dev/null +++ b/targets/DOCS/oai_L1_L2_procedures.ipe @@ -0,0 +1,12461 @@ + + + + +\usepackage{setspace}\usepackage{amsmath}\usepackage{stackrel} + +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 +2NraK/l2+fJVply/fvPGjVufKLfxKb6yX+Xq1ev46b8t2KodLrbDcuXK51Z4+crVm7duPXh4 +7/6DPZSH9xDZS5eu4Of09C4rWceT+zqhGuuIcl9EuZ6eHqIcUe4zWlpaqqmptbGxVdDs9hfB +4QMirh1w2fcfBXxAns8UXd3LF3UuXby4h6JzCVhTjRvDukt6V1w8LYWd2bMygXLY9B32L6ft +lEPt3nv/cjh0+/r6tDoOjo7O36p/uSNCORwhr169vX//IbzZl/KNyt4LWIc09sxpHScPi0Fp +JTNI4k76Ci4pLX327IW9g6MjaoIWFjs7B3lfwY177SvY3d3D0NBYS4PwPg7yvoKbiXJfVWtr +a2VlZfr6hshV4ei2WzUkkp8pB2/k9j1j/XaIuwK+Xbiga2z2Nr8ianSxVqK49rqT0W36+vuF +IlEDh9PA4Wpn4TQ1N+99oKvOri4Ol6u1QfhkHIhyX0Orq6slJaXv3qmz7vr1W3fu3MXMjxZQ +br/yR6xn5+fu/nYx7MKtW3d2UrAXOhf0Tp2SXxf4TDlzek8Fa9DR0VOyV8G3Cxd19Cxs3lVw +E6SbvAWZUHl7yQ7H8ELrr+1lX0ZnPpRxIMp9TdatFRUVIYdlWIc0Ni8vTyKRjH9MExMT+Dc6 +0ZruWd3d3XgRiUQ8Hv8zEgiE8fEJDg5OmOB/dkEOh1teXrGTEhIcbutoWlgek1UU9tGSXRKW +lB0QleQdk7z7kpjhb2Khf+GCHuPfQDxLW8NqYfKMjC/n2187fdo55UbEYu0t+0U5rQ7Cp+JA +lPvaWllZhq/T1ze4d+9hTU2Npt3rwjyDs28rFLZEJ/nIZN2LMtEnSiNeF/ZWZLL20BjPH/9z +Qkfn0nu+bfHnVfzbLkad5vEF1fh7amu1sVRX14gaG1GX956x1tTWaWkQPhMHotxBsW4lKyur +ublFo7ZKS599mJcJgiLc9A1fMP7tU3zb+UiFpWVlL1++cnZ2dXV108bi5OT8+vXb7SP0fenV +B09PlomJqZYG4X0c3rxtam454lcfmE4SVN8yczY2NpaWliHmqZMjIi2lHJjWO1mG18/z7Yvu +JAkLC6c7SWxsbHfXHzvdSaJRlBsaGjYyMhofn2DepqVlNDQ0zM/PGxqaID5oCxwcHNva2ohy +mkw55nDaYafrdFcwPftwFCi3vr7OPEEMn4Y9vnbthouLG/NRaGh4SUnp2NiYmZnlikLt7R3G +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 +QvYK19Ha2tbxQci8mLHPoPX19fb2dqSrCwsLdF7uU0JwEDTVTsCQ2iOSaFC6u7sRQCawbW1t +fX39ym6I+vsHmptbhodH6LwciShHT3jRE15EORJRjihHlCPKkQ4B5QQCofbGUyqd0diel4KC +grX7WK2rJ8qRDgHlPDxZ6ekZvVorDodraWk9NDysaZTLLyh0dnbt1WYlJaWwvX2IciStphwO +YDbbW1//HRydlhYrKxtTU3P54IkaRrnSsvI//nji5uahvbF980bfzz+AKEc6BBmrUCjS3njO +zMxSxvqV1NDAoYyVRFcf6OoDXX0gypGIckQ5ohxRjihHlCPKEeVIRDnNpFx+fr6bm3t8fAJz +7/3w8LC3t4+XF7urq5tZYG1tLSwsPDIySrVr9I2NjdLSMjc3DxbLa499oB1WynV2diKMCKZY +LJYpekGPi4tHqAsKCpXLlJdXuLq6qfVB2tnZ5efnj/lpaenKTtSJciSi3K53x9ra5l//+vel +S1eYvkcyM7O+++77H374qazsfRdAra1tP//8y/HjJ7u733NveXnZzs7+xx9/vnbthp7e5Z9/ +/hUY/NTwEEeWcsXFxQjj99//mJubJ1P096Kjo/vPf35na2uvbCmePn32X//135GR0cpv5ebm +njhx6sKFi4gtwv7y5WvlU3VEORJRbndydHS6fv3mo0eP6+vlD92zWOxHj/5ALUMFYRZgs33e +vjX4/fdHkZGRzJyUlFTU3+TklNXV1dnZWUtL66dPn++6x7nDSrny8nKE8fHjJz4+vnhbXV39 +22+PwC5nZ1dmAYFAcP/+QwsLy2fPnjNP5Q8ODp09e97ExGxiYhKxRYujq6u3F6tMlCMR5WSK +fs9QEx0cnMLDI5C0GhgYMp1qMpRbXFy8fftuRUVlaGgYquTa2jpmYhmmDw1GqI9wd5Sxqglm +GGH09vY1MjLB26CgYEdHZ4QazQqzgIeHJ3xda2vrmTPnmHuBgLVjx35taWlVrmSPo6QR5UhE +OQi554sXL2HPYMl6e/tev36TlyfvIpihXG1t3Y0btzAxMDBw5sz5pqZmTD979oKpuXT14fOU +gzHLzy949ep1X1+fubllamrakyfPGMqhXbh7935lZRWmYZ7ZbG9MxMXFnzt3YXh4iK4+kIhy ++0s5VD3g6+XL1yEhoQ4Ojo2NTSdPnkGGhU+RXiHtCggI9PJinzx5OiwsHDPfvTN6+PB35Rq6 +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 +pHyubtC511LJ/iprOhgsChWTdiq+k6qkHDJIM3Y21kpT2fnmC+Zs7sXzpob2fn4uelrn4uoH +idQJCH4WLI7fq2h9PvOS/W156klV+0OWqbR0vyQ5Mupm98QKc3G4pv3h3OriQH3n0Pjy4kT/ +vZ5Hy+vG9mxH04NH4yw/x8pkS13Ng4cDzc2D86yri8MPqutaaNNqbepuxvWIiKg7TWQpREBA +QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA +QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA +QEBAQEBA8K6xOPWsvrI0P+cV8hu7R8af9d69P7j0Mzzu2YN66hl1D8f+TJ6x4aHnL5Z/4OLK +8EBHxZ0idl0LbtePLq5fmH7aU9PYv/DmDTND9xrujyysvXHhRefdxocj8z+1CQsTQ02VZRsS +y73bMcw6vfysd+D5xMJ/i5RWXwxVFuRWdQ6t/rj8a2sLkzMLtHAGex6OvPjxD5oZ6qstK8nd +6Pvi+s7XO325/34FLefy1tnvVeXl6N07BdSlu22P31Lu0lR7Q3Vx/kbBeWUD4+wOXR1/0l1R +WvxqtFU09G8qeLm7sZJ+XFn98ze65eWL4Y6Ovsmltbe3ZHluZm5+5Uc0ebS/MS+ndGB04YOk +c3uy88cf7VExNNuATWzBg4H2spi0urn/5kcttRVEmhubmpmZ6hk4xKY1L76Vy00pDEW5S3fH +f6CQcR9Frm0HRdbramZuaH3hTtckdeFp653opKo3h/LqcEt8QlrX1BvMWB7Jj0ms6Zn8qc1o +izH97Pe7lY3W5aWjdC74ZsMqczxQQi8w+cF/xwz7LNxAU1rFODSv6eWPY3NNrI9H3D1qprmk +K6gaWf2jn7SWbSP6h52cBht9r6iseM4vZ5TFvJXR9qBAH1sne+q8uZGFkUtgSe80+7ah+qIg +S2dre1vqkpWZpa1X6uPXx8rig5tHtm3nV1ov2ERTVVHXNr97ihoDkQZCH+/hNV5/oKm6rLzd +1WK63KXnWYHuFlZ0mdZOzg6Wnrn3Hm0uc6Q8eP8BqVsDb53nl0tCfX3jG/5igyc7cxWlZPWt +Aqp7pj5IOt+PdTjEY/P0exRYXlpYXGbPg2MDDxqbHoy/mB0fn1p4uTo/OTo8/oJ1aW1ucmxk +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 ++2+FvNhG86Nc74/+Y5dXOa2SXzTG8AnJZ7Z13fSzMrR1o+5ytbVyvHF3fv6BMYdQYNGTuf5K +W30zOzd3T0cXXROX7I4p5nAB99en/YpZGn28Vk3gjFf581c1aArV2nVCs/X723hDPsKaF249 +nO6/raEqr27j6X/lioeB4J/4NSq7GnS5ThlcaV1fGsidMUnreNKcqWNo4UHJycfRxPh8ceOz +73Tdo9ty+8Xim2eZy0NxQbZ6xk6enl7mhiaBydTac+6C5MGztknf229qTnIW4ddIzCn11hVS +CWXPdeMB4gw9X+p4ruCCq6GZA9VwMwMTt/M5YyuvTJvVVGOebxXOf7dnM9Gsc/yIhGs2xeIX +PaVWFiaWjlQVPd3tHXTM7RLqn7DvbM+OMVY3t/P2pi652VrpmoY2P39tG2OuJeHwl7yxTa90 +2WpJgN5ODt2mobEIbREunZhXps3Ks0rJg0e0wqpezvXdcLezd/TwovvV28neIaGi57WNqrLA +r7+RLJxcqXCX2CvmyO6Pu8HW/EKeVP2bIjz5ebWii7sf1SabGJtRytTJysrY9nzj09lib/V9 +gq7s/HXX7fYLnx+jlgbl12V5FS09PcMjo40luHZwulKKoLkgQlXLjBpa+poGPmEVL5nz+VG+ +eka2VI3szIyNLuaMvFzb4nSeGequrO148brTY+JxV+39gcXFuZnpiY768sys8rbbMVJGHndZ +bpnpwab46zF5Ne1DfX3tHU9mJx7VVt8bfrXOeTlWmpMUExNX/fDNveOVB7WFMTExaRWdyz+4 +6zre0tAwwN5lWRytzC1sfrLZsns50FaTnhwfw0JiWvnwwtvCSBZH6+91snfKWGEkzWNUeS/H +y7KoisXklLezhtPsqzCStamB/OSYmNjCx9OsuXh+pL6q/iH7/uWptob6/onvbOuZR+2VdW0v +vu8mWuxvbHv4jCb5xEDjjesx8fnVz8dGuvp6RmemOurrO5+wVdVCT3N9B2unbKq7PoWqTVxK +49Dru+UL4y01TU+n2RJaaCm4SdWsrIsdePPy4f2ae93P3tjSHytPTi2q6uh90Nz2mG3YLA/c +b+roZ9+13FaTRze8off1RdXa8wf3aloebnZKj/U2FZS1rZtULyfrC1KpG+NvVX4v7OLlRE9G +cix1qaC6c+ktoTvPaqsans5sKnhppKq0rHt0+knn/fr218JjnnXWFtc9YGVd6qgouE4VmpLV +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 +wJn/A5vjFyA= + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + +0.6 0 0 0.6 0 0 e + + + + + +0.5 0 0 0.5 0 0 e + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h + + + + + +-0.5 -0.5 m +0.5 -0.5 l +0.5 0.5 l +-0.5 0.5 l +h + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + + + +-0.43 -0.57 m +0.57 0.43 l +0.43 0.57 l +-0.57 -0.43 l +h + + +-0.43 0.57 m +0.57 -0.43 l +0.43 -0.57 l +-0.57 0.43 l +h + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +-1 0.333 m +0 0 l +-1 -0.333 l + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + +0.6 0 0 0.6 0 0 e + + + + + +0.5 0 0 0.5 0 0 e + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h + + + + + +-0.5 -0.5 m +0.5 -0.5 l +0.5 0.5 l +-0.5 0.5 l +h + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + + + +-0.43 -0.57 m +0.57 0.43 l +0.43 0.57 l +-0.57 -0.43 l +h + + +-0.43 0.57 m +0.57 -0.43 l +0.43 -0.57 l +-0.57 0.43 l +h + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +-1 0.333 m +0 0 l +-1 -0.333 l + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +\renewcommand\rmdefault{cmss} +\makeatletter +\leftmargini 1.5em +\leftmargin \leftmargini +\leftmarginii 1.2em +\leftmarginiii 1em +\def\@listI{\leftmargin\leftmargini + \parsep \z@ + \partopsep 3pt + \topsep \z@ + \itemsep \z@} +\@listI +\def\@listii {\leftmargin\leftmarginii + \labelwidth\leftmarginii + \advance\labelwidth-\labelsep + \topsep \z@ + \parsep \z@ + \itemsep \parsep} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii + \advance\labelwidth-\labelsep + \topsep \z@ + \parsep \z@ + \partopsep \z@ + \itemsep \topsep} +\makeatother + + + + + + + + + +Some Preliminaries +\begin{itemize} +\item This description corresponds to the {\tt RU-RAU-split} branch for RAN infrastructure components (located in {\tt targets/DOCS/oai\_L1\_L2\_procedures.pdf}, editable with {\tt ipe}) +\item we describe +\begin{enumerate} +\item node functions +\item current functional splits and packet formats +\item RAN procedures +\item process scheduling +\end{enumerate} +\end{itemize} + + + + + +NGFI Harmonization in OAI +\small +\begin{itemize} +\item New descriptions for OAI RAN infrastructure Node Functions +\begin{itemize} +\item{\tt NGFI\_RCC} : Radio Cloud Center +\item{\tt NGFI\_RAU} : Radio Aggregation Unit +\item{\tt NGFI\_RRU} : Remote Radio Unit +\item{\tt 3GPP\_BBU} : Baseband Unit +\item{\tt 3GPP\_eNodeB} : Complete eNodeB +\end{itemize} +\end{itemize} +\small Source: China Mobile - {\tt http://www.windriver.com.cn/windforum/download/wf2015\_networking03.pdf} + + + + + +\small\begin{itemize} +\item Current OAI implementation (RRU/RCC) supports either +\begin{itemize} +\item IF5 time-domain fronthaul ($>$ 1 GbE required) +\item IF4.5 split (FFTs) (280 Mbit/s/antenna port fronthaul – 20 MHz carrier) per carrier/sector +\item Soon IF2 (NFAPI) +\item IF1’ for “PDCP/RRC” soon (3GPP Fh-C/Fh-U) +\end{itemize} +\end{itemize} +NGFI split points + + + + + + +OAI RAN Software Architecture + + + + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +528 64 m +528 32 l +640 32 l +640 64 l +h + + +528 64 m +528 32 l +640 32 l +640 64 l +h + + +528 101 m +528 48 l +736 48 l +736 101 l +h + + +392 376 m +392 296 l +512 296 l +512 376 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +392 376 m +392 296 l +512 296 l +512 376 l +h + + +136 312 m +136 272 l +200 272 l +200 312 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + +\tiny\bf LTE\\ +MODEM + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +96 408 m +96 360 l +208 360 l +208 408 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + +\tiny\bf LTE/NR/NB\\ +PDCP + +128 320 m +128 280 l +192 280 l +192 320 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + +\tiny\bf LTE\\ +RRC + +112 464 m +112 440 l +648 440 l +648 464 l +h + + +432 224 m +432 224 l +432 224 l +432 224 l +h + +\bf OSS/BSS/MEC + +192 296 m +232 296 l +232 404 l +256 404 l + + +144 288 m +144 320 l + + +384 368 m +448 368 l + + +384 352 m +448 352 l + + +152 456 m +152 368 l + + +304 456 m +304 408 l + + +456 456 m +456 416 l + + +600 456 m +600 409 l + + +512 368 m +576 368 l + + +512 352 m +576 352 l + + +88 384 m +8 384 l + + +128 264 m +8 264 l + +OAI Functional Splits + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\bf\tiny LTE-L1 + +192 368 m +96 368 l + + +192 368 m +96 368 l + + +192 368 m +96 368 l + +\bf\tiny Management +\bf\tiny data (user/control plane) +\bf\tiny configuration + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\tiny\bf LTE\\ +MAC-RLC + +288 432 m +288 432 l +288 432 l +288 432 l +h + + +240 460 m +240 40 l +520 40 l +520 460 l +h + + +384 416 m +384 416 l +384 416 l +384 416 l +h + + +560 416 m +560 336 l +656 336 l +656 416 l +h + + +88 456 m +88 40 l +216 40 l +216 221 l +216 261 l +216 456 l +100.8 456 l +88 456 l + +\bf\tiny Radio-Cloud Center (RCC) +\tiny\bf Radio-Access Unit (RAU) + +136 248 m +136 208 l +200 208 l +200 248 l +h + + +128 256 m +128 216 l +192 216 l +192 256 l +h + +\tiny\bf NR\\ +RRC + +128 229 m +112 229 l +112 261 l +112 360 l + + +488 368 m +488 304 l +504 304 l +504 368 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +384 368 m +448 368 l + + +384 352 m +448 352 l + + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\bf\tiny NR-L1 +\tiny\bf NR\\ +MAC-RLC + +488 368 m +488 304 l +504 304 l +504 368 l +h + +\tiny PRECODE +\tiny PRECODE + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + +\tiny\bf NR\\ +MODEM + +512 368 m +576 368 l + + +512 352 m +576 352 l + + +560 231 m +560 160 l +656 160 l +656 231 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +336 264 m +536 264 l + + +336 248 m +536 248 l + + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\bf\tiny LTE-L1 + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\tiny\bf LTE\\ +MAC-RLC + +488 368 m +488 304 l +504 304 l +504 368 l +h + +\tiny PRECODE + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + +\tiny\bf LTE\\ +MODEM + +232 264 m +256 264 l + + +256 424 m +224 424 l +224 316 l +256 316 l + + +64 264 m +64 264 l + + +528 288 m +528 208 l +736 208 l +736 288 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\tiny\bf NR\\ +MAC-RLC + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\tiny\bf NB-IoT\\ +MAC-RLC + +128 264 m +8 264 l + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +336 264 m +536 264 l + + +336 248 m +536 248 l + + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\bf\tiny NR-L1 + +488 368 m +488 304 l +504 304 l +504 368 l +h + +\tiny PRECODE + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + +\tiny\bf NR\\ +MODEM + +528 288 m +528 208 l +736 208 l +736 288 l +h + +\tiny\bf Remote Radio-Unit (RRU) + +336 72 m +576 72 l + + +336 86 m +576 88 l + + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\tiny\bf NB-IoT\\ +RRC + +128 264 m +8 264 l + + +104 360 m +104 88 l +120 88 l + + +192 88 m +256 88 l + + +528 64 m +528 32 l +640 32 l +640 64 l +h + +\tiny\bf NB-IoT\\ +L1/MODEM + +224 384 m +208 384 l + + +192 240 m +256 240 l + + +232 240 m +232 168 l +256 168 l + + +224 192 m +224 192 l + + +224 192 m +224 192 l + + +224 312 m +224 72 l +256 72 l + + + + + +OAI Functional Splits +\tiny\begin{itemize} +\item OAI currently implements the following entities in openairinterface5g +\begin{itemize} +\item LTE-MODEM (eNB 36.211 OFDM modulation/demodulation) +\item LTE-L1 (eNB 36.211/212/213) +\item LTE-MACRLC (eNB 36.321/322) +\item LTE-PDCP (eNB PDCP/GTPU 36.323) +\item LTE-RRC (eNB RRC/SCTP 36.331) +\end{itemize} +\item Each entity comprises +\begin{itemize} +\item a northbound interface (backhaul/midhaul/fronthaul and configuration) +\item a southbound interface (midaul/fronthaul and configuration) +\item one or two management interfaces +\item Three computing nodes +\begin{itemize} +\item {\bf Radio Cloud Center (RCC)} : multiple RRC/PDCP entities +\item {\bf Radio-Access Unit (RAU)}: multiple MACRLC entities with medium-latency midhaul and L1 entities with low-latency fronthaul. +\item {\bf Remote Radio-Unit (RRU)}: Equipment at radio site. Varying degrees of processing elements depending on fronthaul/midhaul interface. +\end{itemize} +\end{itemize} +\item Each entity has a configuration which is a local file or received via the management interface +\item default interface between all entities is implemented using a UDP socket. Transport is configurable via a dynamically-loadable networking device +\end{itemize} + +288 192 m +288 64 l +432 64 l +432 192 l +h + +OAI entity + +336 171 m +336 208 l + + +384 171 m +384 208 l + + +336 171 m +336 208 l + + +384 171 m +384 208 l + + +240 80 m +288 80 l + + +240 80 m +288 80 l + + +16 0 0 16 288 224 e + + +16 0 0 16 288 224 e + +\tiny\bf Northbound interface +\tiny\bf Southbound interface +\tiny\bf data +\tiny\bf data +\tiny\bf in-band configuration +\tiny\bf in-band configuration +\tiny\bf OSS/BSS +\tiny\bf FlexRAN + +240 80 m +288 80 l + +\tiny\tt .conf + + + + + +511.895 513.539 m +511.895 14.2386 l +734.284 14.2386 l +734.284 513.539 l +h + + +511.895 513.539 m +511.895 14.2386 l +734.284 14.2386 l +734.284 513.539 l +h + + +511.895 513.539 m +511.895 14.2386 l +734.284 14.2386 l +734.284 513.539 l +h + + +16 432 m +16 112 l +192 112 l +192 432 l +h + + +16 432 m +16 112 l +192 112 l +192 432 l +h + +Functional Splits (Current) + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +RRC +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-C +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-U +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX +\end{tiny} + + +384 432 m +384 384 l + + +384 432 m +384 384 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt rf\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +RRC +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-C +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-U +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +3GPP\_eNodeB +3GPP\_BBU +\tiny to MME +\tiny to S-PGw + +384 432 m +384 384 l + + +384 432 m +384 384 l + +\tiny to MME +\tiny to S-PGw + +160 112 m +160 112 l +160 112 l +160 112 l +h + + +144 112 m +144 112 l +144 112 l +144 112 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt USB3 or PCIe} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF5 / ethernet} +\end{tiny} + + +16 432 m +16 112 l +192 112 l +192 432 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +RRC +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-C +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-U +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +upper-PHY RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +NGFI\_RCC (IF4.5) + +384 432 m +384 384 l + + +384 432 m +384 384 l + +\tiny to MME +\tiny to S-PGw + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF4p5 / ethernet} +\end{tiny} + +\setstretch{.5}\begin{tiny} +upper-PHY TX +\end{tiny} + + +384 432 m +384 384 l + +\tiny to NGFI\_RRU + +384 432 m +384 384 l + +\tiny to NGFI\_RRU or RRH\_gw + +384 432 m +384 384 l + +\tiny to RF Device + + + + + +1.83417 462.604 m +1.83417 50.8252 l +207.006 50.8252 l +207.006 462.604 l +h + + +1.83417 462.604 m +1.83417 50.8252 l +207.006 50.8252 l +207.006 462.604 l +h + + +16 432 m +16 112 l +192 112 l +192 432 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +RRC +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-C +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-U +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +NGFI\_RCC (IF1'') + +384 432 m +384 384 l + + +384 432 m +384 384 l + +\tiny to MME +\tiny to S-PGw + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF1pp} / ethernet +\end{tiny} + + +16 432 m +16 112 l +192 112 l +192 432 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +RRC +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-C +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-U +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +NGFI\_RCC (IF1') + +384 432 m +384 384 l + + +384 432 m +384 384 l + +\tiny to MME +\tiny to S-PGw + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF1p} / ethernet +\end{tiny} + +\tiny to NGFI\_RRU + +384 432 m +384 384 l + +\tiny to NGFI\_RAU + +384 432 m +384 384 l + +\tiny to NGFI\_RAU +Functional Splits (Current) + +1.83417 462.604 m +1.83417 50.8252 l +207.006 50.8252 l +207.006 462.604 l +h + + +16 432 m +16 112 l +192 112 l +192 432 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +upper-PHY RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +NGFI\_RAU(IF1'') + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF4p5 / ethernet} +\end{tiny} + +\setstretch{.5}\begin{tiny} +upper-PHY TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF1pp / ethernet} +\end{tiny} + + +384 432 m +384 384 l + +\tiny to NGFI\_RCC + +384 432 m +384 384 l + +\tiny to NGFI\_RRU + + + + + +1.83417 462.604 m +1.83417 50.8252 l +207.006 50.8252 l +207.006 462.604 l +h + + +1.83417 462.604 m +1.83417 50.8252 l +207.006 50.8252 l +207.006 462.604 l +h + + +1.83417 462.604 m +1.83417 50.8252 l +207.006 50.8252 l +207.006 462.604 l +h + + +16 432 m +16 112 l +192 112 l +192 432 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +NGFI\_RRU (IF5) + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF5/ ethernet} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt rf\_device} +\end{tiny} + +NGFI\_RRU (IF4.5) + +384 432 m +384 384 l + +\tiny to NGFI\_RCC, NGFI\_RAU,3GPP\_BBU + +384 432 m +384 384 l + +\tiny to RF Device + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt USB3, PCIe, CPRI} +\end{tiny} + + +16 432 m +16 112 l +192 112 l +192 432 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF4p5/ ethernet} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt rf\_device} +\end{tiny} + + +384 432 m +384 384 l + +\tiny to NGFI\_RCC, NGFI\_RAU + +384 432 m +384 384 l + +\tiny to RF Device + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt USB3, PCIe, CPRI} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +lower-PHY RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +lower-PHY TX +\end{tiny} + + +16 432 m +16 112 l +192 112 l +192 432 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +\setstretch{.5}\begin{tiny} +upper-PHY TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF1pp\_4P5 / ethernet} +\end{tiny} + + +384 432 m +384 384 l + +\tiny to NGFI\_RCC, NGFI\_RAU + +384 432 m +384 384 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt USB3, PCIe, CPRI} +\end{tiny} + +\tiny to RF Device +Functional Splits (Current) +NGFI\_RRU\par +(IF1'') + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +lower-PHY RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +lower-PHY TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +upper-PHY RX +\end{tiny} + + + + + +Some Notes on usage of splits +\tiny\begin{itemize} +\item IF4p5 corresponds to the split-point at the input (TX) and output (RX) of the OFDM symbol generator (i.e. frequency-domain signals). According to NGFI, IF4 is "Resource mapping and IFFT" and "FFT and Resource demapping". We currently do not try to exploit multiplexing gains for unused spectral components. So, IF4p5 is simply compressed transmitted or received resource elements in the usable channel band. +\item The simplest deployment for DAS (indoor) is one NGFI\_RCC (IF4p5) and many NGFI\_RRU (IF4p5). Spatio-temportal filtering (Precoding, later) is done in RCC and RRU perform IFFT/FFT and signal generation/acquisition. Fronthaul rates in this case are feasible with 1GbE copper links. This allows for PoE in addition to fronthaul data. +\item More complex indoor, for instance with RCC in a common data center with outdoor RRS, could be +\begin{enumerate} + \item RCC-RAU with IF1'', RAU-RRU with IF4p5. Spatio-temporal filtering is done in frequency-domain in RAU along with full TX and RX processing (L1/L2) for the indoor RRS. Note that IF1' fronthaul on TX to RRU would be difficult because spatio-temporal filtering should be used. RRU does only IFFT/FFT and signal generation/acquisition +\item RCC-RAU with IF1', RAU-RRU with IF4p5. Here RCC does L2, RAU does L1 and precoding for RRS. +\end{enumerate} +\item A massive-MIMO solution would consist either of +\begin{enumerate} +\item an embedded RAU with processing (Spatio-temporal in frequency-domain, lower/upper PHY TX/RX) like the IF1' DAS solution above +\item or more simply a high-speed fronthaul (IF4p5) with an RAU for multiple sites +\item directly connected to RCC via high-speed IF4p5 (several virtual cells, precoder and IFFT/FFT in array). +\end{enumerate} +\item RCC solution with IF1'' would cater to evolved-PDCP for heterogenity (4G,5G,WIFI,IoT) +\item Currently supported node functionalities +\begin{enumerate} +\item {\tt 3GPP\_eNodeB} +\item {\tt 3GPP\_eNodeB\_BBU} [NGFI\_IF5] +\item {\tt NGFI\_RCC} [NGFI\_IF4p5] +\item {\tt NGFI\_RRU} [NGFI\_IF5] +\item {\tt NGFI\_RRU} [NGFI\_IF4p5] +\end{enumerate} +\end{itemize} + + + + +RU - L1 negotiation + +64 448 m +64 256 l +256 256 l +256 448 l +h + + +64 448 m +64 256 l +256 256 l +256 448 l +h + +RRU Entity +RAU/RCC Entity + +544 192 m +544 256 l + + +256 320 m +448 320 l + + +448 288 m +256 288 l + + +544 192 m +544 256 l + +\tiny\tt .conf +\tiny\tt .conf +\tiny\tt fronthaul data (IF5,IF4p5) + +256 320 m +448 320 l + + +448 288 m +256 288 l + +\tiny\tt RRU control/config +\begin{small} +Control and Configuration protocol +\begin{enumerate} +\item RAU$\rightarrow$ RRU : heartbeat (capabilities request) +\item RRU$\rightarrow$ RAU: capabilities indication +\item RAU$\rightarrow$ RRU: configuration (band, dl\_Carrier,ul\_Carrier, dl\_RS\_EPRE, rx/tx attenuation) +\end{enumerate} +\end{small} +During steady state, the control port manages the link quality and status (packet losses, synchronization state, start/stop, etc.) + + + + +\begin{small} +\begin{itemize} +\item IF5 interface +\begin{itemize} +\item DL subframes with timestamp (16-bit samples) +\item UL subframes with timestamp (16-bit samples) +\item optional A-law compression (13$\rightarrow$8bit) +\end{itemize} +\item IF4p5 interface +\begin{itemize} +\item DL packets, ofdm symbols with frame/subframe/symbol count +\item UL packets, ofdm symbols with frame/subframe/symbol count (16-bit) +\item UL PRACH packets with frame/subframe count (16-bit) +\item optional A-law compression (13$\rightarrow$8bit) +\end{itemize} +\end{itemize} +\end{small} +RU - L1 data plane + + + + + +544 288 m +544 256 l +704 256 l +704 288 l +h + +IF5 Packet Format (16-bit) + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + +0 +16 +32 +48 +15 +31 +47 +63 + +64 320 m +64 288 l +544 288 l +544 320 l +h + + +544 320 m +544 288 l +704 288 l +704 320 l +h + + +64 288 m +64 256 l +384 256 l +384 288 l +h + + +384 288 m +384 256 l +544 256 l +544 288 l +h + + +544 288 m +544 256 l +704 256 l +704 288 l +h + +\small Destination Address +\small Source +\small Type (0x1234) +\small RF Config +\small Address + +64 160 m +64 128 l +384 128 l +384 160 l +h + +\small Frame Check Sequence + +256 240 m +256 240 l +256 240 l + +\small Timestamp + +5 63.5079 m +5 46.9999 l +645 46.9999 l +645 63.5079 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +256 240 m +256 240 l +256 240 l + + +166 304 m +165.917 272.508 l +166.247 272.508 l + + +486 304 m +486.316 272.508 l +485.986 272.508 l + + +486.316 256 m +486.646 224 l +485.657 224 l + + +486.316 256 m +486.646 224 l +485.657 224 l + +\tiny $I_0$ +\tiny $Q_0$ +\tiny $I_1$ +\tiny $Q_1$ +\tiny $Q_{N-2}$ +\tiny $Q_{N-2}$ +\tiny $I_{N-1}$ +\tiny $Q_{N-1}$ +\tiny +\begin{itemize} +\item {\bf Type:} 2 byte (16 bit) field that specifies the RoE protocol +\item {\bf RX Config:} 16-bit. Currently just antenna index (0-7). Can later be used for gain/timing adjustments. +\item {\bf Timstamp:} Timestamp in samples of the first sample of the received packet. +\end{itemize} +\begin{itemize} +\item {\bf data block :} Uncompressed IQ samples, 16-bit resolution for each real and imaginary component. $N$ complex samples per packet. $N$ can be configured at initialization. +\end{itemize} + + + + +IF5 Packet Format (8-bit) + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + +0 +16 +32 +48 +15 +31 +47 +63 + +64 320 m +64 288 l +544 288 l +544 320 l +h + + +544 320 m +544 288 l +704 288 l +704 320 l +h + + +64 288 m +64 256 l +384 256 l +384 288 l +h + + +384 288 m +384 256 l +544 256 l +544 288 l +h + + +544 288 m +544 256 l +704 256 l +704 288 l +h + + +384 256 m +384 224 l +704 224 l +704 256 l +h + +\small Destination Address +\small Source +\small Type (0xBEEF) +\small RX Flags +\small Address + +544 288 m +544 256 l +704 256 l +704 288 l +h + +\small FIFO\_status + +544 288 m +544 256 l +704 256 l +704 288 l +h + +\tiny SeqNum +\tiny rsvd + +248.997 435.732 m +248.997 403.732 l + +\small Word0 + +5 63.5079 m +5 46.9999 l +645 46.9999 l +645 63.5079 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +166 304 m +165.917 272.508 l +166.247 272.508 l + + +486 304 m +486.316 272.508 l +485.986 272.508 l + + +486.316 256 m +486.646 224 l +485.657 224 l + +\tiny $I_0$ + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + +\tiny $Q_0$ +\tiny $I_1$ +\tiny $Q_1$ +\tiny $I_2$ +\tiny $Q_2$ +\tiny $I_3$ +\tiny $Q_3$ +\tiny $I_{638}$ +\tiny $Q_{638}$ +\tiny $I_{639}$ +\tiny $Q_{639}$ +\tiny +\begin{itemize} +\item {\bf Type:} 2 byte (16 bit) field that specifies the RoE protocol +\item {\bf RX Flags:} overrun indicator. should be '0'. +\item {\bf FIFO status:} 2 bytes. should be '0'. +\item {\bf SeqNum:} 1 byte. Sequence number of the ethernet packet. +\item {\bf rsvd:} 1 byte. shoult be '0'. \item {\bf Word0:} 4 byte (32-bit). should be '0'. +\item {\bf Timstamp:} Timestamp in samples of the first sample of the received packet. \end{itemize} +\begin{itemize} +\item {\bf data block :} Uncompressed IQ samples, 8-bit resolution for each real and imaginary component. 640 complex samples per packet. +\end{itemize} + +384 256 m +384 224 l +704 224 l +704 256 l +h + +\small Timestamp + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +486 304 m +486.316 272.508 l +485.986 272.508 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + +\tiny $I_4$ +\tiny $Q_4$ +\tiny $I_5$ +\tiny $Q_5$ + +64 160 m +64 128 l +384 128 l +384 160 l +h + +\small Frame Check Sequence + + + + +IF4p5 Packet Formats (RAW) + +272 512 m +272 512 l +272 512 l +272 512 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + +0 +16 +32 +48 +15 +31 +47 +63 + +64 320 m +64 288 l +544 288 l +544 320 l +h + + +544 320 m +544 288 l +704 288 l +704 320 l +h + + +64 288 m +64 256 l +384 256 l +384 288 l +h + + +384 288 m +384 256 l +544 256 l +544 288 l +h + + +544 288 m +544 256 l +704 256 l +704 288 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +384 256 m +384 224 l +704 224 l +704 256 l +h + + +64 160 m +64 96 l +704 96 l +704 160 l +h + +\small Destination Address +\small Source +\small Type (0x080A) +\small Subtype (0x0021) +\small Address +\small LTE PRACH Configuration +\small Reserved +\small PRACH data block (one antenna) + +64 160 m +64 128 l +384 128 l +384 160 l +h + +\small Frame Check Sequence + +384 160 m +384 128 l +704 128 l +704 160 l +h + +IF4p5 PRACH Packet (RRU$\rightarrow$ RAU,RCC) +\tiny +\begin{itemize} +\item {\bf Type:} 2 byte (16 bit) field that specifies the RoE protocol +\item {\bf Subtype:} 2 byte (16 bit) field that specifies the packet subtype +\item {\bf Reserved:} 4 byte (32 bit) field reserved +\item {\bf LTE PRACH conf:} 4 byte (32-bit) field that details the configuration of the LTE PRACH packet +\end{itemize} +\vskip 3pt +\begin{tabular}{|c|c|} +\hline +{\bf field (0 is LSB, 31 is MSB)} & {\bf description}\\ \hline +rsvd (0:2) & Reserved.\\ \hline +ant (3:5) & 3-bit Antenna index of LTE PRACH packet\\ \hline +RF Num (6:21) & 16-bit field indicating the Radio Frame number of this received PRACH packet\\ \hline +SF Num (22:25) & 4-bit field indicating the sub-frame number in the radio frame for the LTE PRACH packet\\ + & Valid range of 0 to 9.\\ \hline +Exponent (26:31) & FFT exponent output (0 if unscaled) \\ +\hline +\end{tabular} +\begin{itemize} +\item {\bf PRACH data block:} Uncompressed IQ samples +\end{itemize} + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + +\tiny RE 0 (Real) +\tiny RE 0 (Imag) +\tiny RE 1 (Real) +\tiny RE 1 (Imag) + +166 304 m +165.917 272.508 l +166.247 272.508 l + + +486 304 m +486.316 272.508 l +485.986 272.508 l + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + +\tiny RE 837 (Real) +\tiny RE 837 (Imag) +\tiny RE 838 (Real) +\tiny RE 838 (Imag) + +166 304 m +165.917 272.508 l +166.247 272.508 l + + +486 304 m +486.316 272.508 l +485.986 272.508 l + + +6.00001 47.492 m +6.00001 32 l +646 32 l +646 47.492 l +h + + +528 16 m +528 16 l +528 16 l +528 16 l +h + + +560 16 m +560 16 l +560 16 l +560 16 l +h + + + + + + +64 224 m +64 192 l +224 192 l +224 224 l +h + + +224 224 m +224 192 l +384 192 l +384 224 l +h + + +384 224 m +384 192 l +544 192 l +544 224 l +h + + +544 224 m +544 192 l +704 192 l +704 224 l +h + + +64 192 m +64 160 l +224 160 l +224 192 l +h + + +224 192 m +224 160 l +384 160 l +384 192 l +h + + +384 192 m +384 160 l +544 160 l +544 192 l +h + + +544 192 m +544 160 l +704 160 l +704 192 l +h + +\small Gain 0 +\small Gain 1 +\small Gain 4 +\small Gain 5 +\small Gain 2 +\small Gain 3 +\small Gain 6 +\small Gain 7 + +272 512 m +272 512 l +272 512 l +272 512 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + +0 +16 +32 +48 +15 +31 +47 +63 + +64 320 m +64 288 l +544 288 l +544 320 l +h + + +544 320 m +544 288 l +704 288 l +704 320 l +h + + +64 288 m +64 256 l +384 256 l +384 288 l +h + + +384 288 m +384 256 l +544 256 l +544 288 l +h + + +544 288 m +544 256 l +704 256 l +704 288 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +384 256 m +384 224 l +704 224 l +704 256 l +h + +\small Destination Address +\small Source +\small Type (0x080A) +\small Subtype (0x0019) +\small Address +\small Frame status +\small Reserved + +64 160 m +64 128 l +384 128 l +384 160 l +h + +\small Frame Check Sequence +\tiny +\begin{itemize} +\item {\bf Type:} 2 byte (16 bit) field that specifies the RoE protocol +\item {\bf Subtype:} 2 byte (16 bit) field that specifies the packet subtype +\item {\bf Reserved:} 4 byte (32 bit) field reserved +\item {\bf Frame Status:} 4 byte (32 bit) field +\end{itemize} +\vskip 3pt +\begin{tabular}{|c|c|} +\hline +{\bf field (0 is LSB, 31 is MSB)} & {\bf description}\\ \hline +{\bf ant} (0:2) & The number of Antenna Carriers represented in the packet. Antenna numbers \\ +& range from 0 to 7 with valid inputs being 0,1, 3 and 7 (1,2,4,8 antennas)\\ \hline +{\bf ant start} (3:5) & starting antenna number\\ \hline +{\bf RF Num} (6:21) & 16-bit field indicating the Radio Frame number of the UL\_RE samples\\ \hline +{\bf SF Num} (22:25) & 4-bit field indicating the sub-frame number in the radio frame for the UL\_RE samples\\ + & Valid range of 0 to 9.\\ \hline +{\bf Sym Num:} (26:29) & Symbol number. Valid range of 0 to 13. \\ +{\bf rsvd:} (30:31) & reserved\\ +\hline +\end{tabular} +\begin{itemize} +\item {\bf ULRE data block:} compressed IQ samples (8-bit A-law). $N$ is the number of resource elements $N_{\mathrm{RB}}^{\mathrm{UL}}$. +\end{itemize} + +5 63.5079 m +5 46.9999 l +645 46.9999 l +645 63.5079 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + +IF4p5 Packets : ULRE (RRU$\rightarrow$ RAU,RCC) + +256 240 m +256 240 l +256 240 l + + +166 304 m +165.917 272.508 l +166.247 272.508 l + + +486 304 m +486.316 272.508 l +485.986 272.508 l + + +486.316 256 m +486.646 224 l +485.657 224 l + + +486.316 256 m +486.646 224 l +485.657 224 l + + +258.16 141.771 m +258.16 141.771 l + + +418.597 191.907 m +418.597 191.907 l + + +429.181 79.9357 m +429.181 79.9357 l + +\tiny RE 0\\Ant 1 (Re) +\tiny RE 0\\Ant 1 (Im) +\tiny RE 1\\Ant 1 (Re) +\tiny RE 1\\Ant 1 (Im) +\tiny RE 2\\Ant 1 (Re) +\tiny RE 2\\Ant 1 (Im) +\tiny RE 3\\Ant 1 (Re) +\tiny RE 3\\Ant 1 (Im) +\tiny RE $N-4$\\Ant $R$ (Re) +\tiny RE $N-4$\\Ant $R$ (Im) +\tiny RE $N-3$\\Ant $R$ (Re) +\tiny RE $N-3$\\Ant $R$ (Im) +\tiny RE $N-2$\\Ant $R$ (Re) +\tiny RE $N-2$\\Ant $R$ (Im) +\tiny RE $N-1$\\Ant $R$ (Re) +\tiny RE $N-1$\\Ant $R$ (Im) + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + + + + + +272 512 m +272 512 l +272 512 l +272 512 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + +0 +16 +32 +48 +15 +31 +47 +63 + +64 320 m +64 288 l +544 288 l +544 320 l +h + + +544 320 m +544 288 l +704 288 l +704 320 l +h + + +64 288 m +64 256 l +384 256 l +384 288 l +h + + +384 288 m +384 256 l +544 256 l +544 288 l +h + + +544 288 m +544 256 l +704 256 l +704 288 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +384 256 m +384 224 l +704 224 l +704 256 l +h + +\small Destination Address +\small Source +\small Type (0x080A) +\small Subtype (0x0020) +\small Address +\small Frame status +\small Reserved + +64 160 m +64 128 l +384 128 l +384 160 l +h + +\small Frame Check Sequence +\tiny +\begin{itemize} +\item {\bf Type:} 2 byte (16 bit) field that specifies the RoE protocol +\item {\bf Subtype:} 2 byte (16 bit) field that specifies the packet subtype +\item {\bf Reserved:} 4 byte (32 bit) field reserved +\item {\bf Frame Status:} 4 byte (32 bit) field +\end{itemize} +\vskip 3pt +\begin{tabular}{|c|c|} +\hline +{\bf field (0 is LSB, 31 is MSB)} & {\bf description}\\ \hline +{\bf ant} (0:2) & The number of Antenna Carriers represented in the packet. Antenna numbers \\ +& range from 0 to 7 with valid inputs being 0,1, 3 and 7 (1,2,4,8 antennas)\\ \hline +{\bf ant start} (3:5) & starting antenna number\\ \hline +{\bf RF Num} (6:21) & 16-bit field indicating the Radio Frame number of this DLRE packet\\ \hline +{\bf SF Num} (22:25) & 4-bit field indicating the sub-frame number in the radio frame for the DLRE packet\\ + & Valid range of 0 to 9.\\ \hline +{\bf Sym Num:} (26:29) & Symbol number. Valid range of 0 to 13. \\ +{\bf rsvd:} (30:31) & reserved\\ +\hline +\end{tabular} +\begin{itemize} +\item DLRE data block : compressed IQ samples (8-bit A-law). $N$ is the number of resource elements $N_{\mathrm{RB}}^{\mathrm{DL}}$. +\end{itemize} +IF4p5 Packets : DLRE (RAU,RCC $\rightarrow$RRU) + +258.16 141.771 m +258.16 141.771 l + + +418.597 191.907 m +418.597 191.907 l + + +429.181 79.9357 m +429.181 79.9357 l + + +5 63.5079 m +5 46.9999 l +645 46.9999 l +645 63.5079 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +166 304 m +165.917 272.508 l +166.247 272.508 l + + +486 304 m +486.316 272.508 l +485.986 272.508 l + + +486.316 256 m +486.646 224 l +485.657 224 l + + +486.316 256 m +486.646 224 l +485.657 224 l + +\tiny RE 0\\Ant 1 (Re) +\tiny RE 0\\Ant 1 (Im) +\tiny RE 1\\Ant 1 (Re) +\tiny RE 1\\Ant 1 (Im) +\tiny RE 2\\Ant 1 (Re) +\tiny RE 2\\Ant 1 (Im) +\tiny RE 3\\Ant 1 (Re) +\tiny RE 3\\Ant 1 (Im) +\tiny RE $N-4$\\Ant $R$ (Re) +\tiny RE $N-4$\\Ant $R$ (Im) +\tiny RE $N-3$\\Ant $R$ (Re) +\tiny RE $N-3$\\Ant $R$ (Im) +\tiny RE $N-2$\\Ant $R$ (Re) +\tiny RE $N-2$\\Ant $R$ (Im) +\tiny RE $N-1$\\Ant $R$ (Re) +\tiny RE $N-1$\\Ant $R$ (Im) + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + + + + + +640 128 m +640 32 l +704 32 l +704 128 l +h + + +640 480 m +640 176 l +720 176 l +720 480 l +h + + +328.159 119.72 m +328.159 15.3556 l +554.022 15.3556 l +554.022 119.72 l +h + + +96 784 m +96 496 l +224 496 l +224 784 l +h + + +-192 928 m +-192 944 l +-192 944 l +-192 928 l +h + + +96 784 m +96 496 l +224 496 l +224 784 l +h + +\begin{small}L1 Instance 0\end{small} +LI instance 1 +\begin{small}MAC/RLC/PDCP Instance 0\end{small} + +364 518 m +364 518 l +364 518 l +364 518 l +h + + +96 784 m +96 496 l +224 496 l +224 784 l +h + + +128 768 m +128 704 l +192 704 l +192 768 l +h + +\setstretch{.5}\begin{tiny} +DL/UL Scheduler +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + + +180 460 m +340 460 l + + +180 460 m +340 460 l + +\begin{tiny}1ms TICK\end{tiny} + +392.067 448.35 m +232.502 360 l + +\begin{tiny}$\mathrm{DCI}_0$, Transport Blocks\end{tiny} + +\begin{tiny}$\mathrm{DCI}_1$\end{tiny} + +\begin{tiny}$\mathrm{DCI}_2$\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_0$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_1$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_2$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_0$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_1$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_2$ +\end{tiny} + + +234.502 211.006 m +387 210 l + + +243.386 213.48 m +243.386 213.48 l + + +232.502 250.102 m +387.004 250.371 l + + +232.502 310 m +387 310 l + + +232.502 346.88 m +387 347 l + + +336.917 451.424 m +185.872 274.589 l + + +232.5 410 m +386.079 409.083 l + +\begin{tiny}Transport Blocks\end{tiny} + +\begin{tiny}Transport Blocks\end{tiny} + +\setstretch{.5}\begin{tiny}CQI/SR/ACK/NAK/PHR\\Transport Blocks\end{tiny} +\setstretch{.5}\begin{tiny}CQI/SR/ACK/NAK/PHR\\Transport Blocks\end{tiny} +\setstretch{.5}\begin{tiny}CQI/SR/ACK/NAK/PHR\\Transport Blocks\end{tiny} + +180 460 m +340 460 l + + +180 460 m +340 460 l + +\begin{tiny}1ms TICK\end{tiny} +\begin{tiny}$\mathrm{DCI}_0$, Transport Blocks\end{tiny} + + +184.502 313 m +332 313 l + +\begin{small}MAC/RLC/PDCP Instance 1\end{small} + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX \\ +$\mathrm{eNB}_0$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX \\ +$\mathrm{eNB}_0$ +\end{tiny} + +\setstretch{.5}\begin{tiny}CQI/SR/ACK/NAK/PHR\\Transport Blocks\end{tiny} + +128 768 m +128 704 l +192 704 l +192 768 l +h + +\setstretch{.5}\begin{tiny} +DL/UL Scheduler +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC TX +\end{tiny} + +RU/L1 Instances and Component Carriers + +96 784 m +96 496 l +224 496 l +224 784 l +h + + +96 784 m +96 496 l +224 496 l +224 784 l +h + + +364 518 m +364 518 l +364 518 l +364 518 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_3$ +\end{tiny} + + +144 480 m +144 32 l +176 32 l +176 480 l +h + + +176 432 m +176 432 l + + +192 464 m +176 464 l + + +190.041 464 m +190.041 464 l + + +190.041 464 m +190.041 464 l + + +192 464 m +176 464 l + + +192 464 m +176 464 l + + +192 464 m +176 464 l + + +192 464 m +176 464 l + + +192 464 m +176 464 l + + +192 464 m +176 464 l + + +192 464 m +176 464 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_0$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_1$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_2$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_4$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_5$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_6$ +\end{tiny} + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +640 400 m +640 400 l +640 400 l +640 400 l +h + + + + + +\small\begin{itemize} +\item {\em Radio Unit} (RU) is +\begin{itemize} +\item an entity managing a set of {\bf physical} antennas. It can have a {\em local RF unit} or {\em remote RF unit} +\item performs precoding of multiple eNB TX streams and OFDM modulation (TX) and demodulation (RX) (part of 36.211) +\end{itemize} +\item {\em L1 Instance} (indexed by {\tt Mod\_id}, or {\tt enb\_mod\_id}) is a separate set of threads and contexts for the eNB/gNB procedures. There is one MAC/RLC entity associated to all :1 component carriers. +\item {\em L1 Component Carrier} (indexed by {\tt CC\_id}) is +\begin{itemize} +\item a software entity managing the L1 procedures (36.213,36.212,36.211) and can act on +\begin{itemize} +\item sectored antenna component +\item Rel10+ component carrier +\item virtual cell for DAS or Massive-MIMO array +\end{itemize} +\item each L1 instance is managed by one or two threads which operate on a subframe (TX and RX) and can have a {\em local RU} or {\em remote RU} +\item if a remote radio unit the eNB performs the 36.213 specifications only (HARQ, etc.) and connects to the remainder via the IF2 midhaul interface. +\end{itemize} +\end{itemize} +RU/L1 Instances and Component Carriers + + + + +RU/L1 Instances and Component Carriers +\small\begin{itemize} +\item RU may have both an {\tt if\_device} for fronthaul and an {\tt rf\_device} for interconnection with a local RF unit +\item if the {\tt rf\_device} is absent, it must have a southbound fronthaul interface (either IF5 or IF4p5) depending on the local processing of the remote RU +\item if the {\tt if\_device} is absent, it must have a southbound RF interface and {\tt rf\_device}. +\item three types of L1 processing are performed by the RU \begin{itemize} +\item subset of common L1 procedures from 36.211 specifications +\item fronthaul compression/decompression +\item framing +\end{itemize} +\item on TX +\begin{itemize} +\item A-law compression for (NGFI\_RAU\_IF4p5, NGFI\_RAU\_IF5) +\item A-law decompression (for NGFI\_RRU\_IF4p5 and NGFI\_RRU\_IF5) +\item OFDM modulation and cyclic prefix insertion (for NGFI\_RRU\_IF4p5,NGFI\_RAU\_IF5,3GPP\_eNodeB\_BBU,3GPP\_eNodeB) +\item Precoding (for NGFI\_RAU\_IF5, NGFI\_RAU\_IF4p5,3GPP\_eNodeB\_BBU,3GPP\_eNodeB) +\end{itemize} +\end{itemize} + + + + +RU/L1 Instances and Component Carriers +\small\begin{itemize} +\item on RX +\begin{itemize} +\item A-law compression for (NGFI\_RRU\_IF4p5, NGFI\_RRU\_IF5) +\item A-law decompression (for NGFI\_RAU\_IF4p5 and 3GPP\_eNodeB\_BBU) +\item cyclic prefix removal, frequency-shifting, OFDM demodulation, PRACH DFT (for NGFI\_RRU\_IF4p5, NGFI\_RAU\_IF5, 3GPP\_eNodeB\_BBU, 3GPP\_eNodeB) +\end{itemize} +\item On TX path +\begin{itemize} +\item L1 instances/component carriers operate on a set of logical antenna ports (0-3 for TM1-6, 4 for eMBMS, 5 for TM7, 6 for positioning, 7-8 for TM8, etc.) +\item each L1 instance has a list of RUs and the logical antenna ports are mapped to the physical antennas attached to the RUs via the precoding function +\end{itemize} +\end{itemize} + + + + +\small\begin{itemize} +\item Example configurations +\begin{itemize} +\item {\em itsolated eNB:} one instance and one or several component carriers (multiple-frequencies or antenna sectors). Potentially multiple radio-units (for CoMP). Here there is a common MACRLC instnance driving multiple L1 procedures +\item {\em indoor DAS system (RCC split with L1/L2 RAU) Multiple layer 2 instances each driving one or more component carriers} here the RAU implements multiple L1/L2 instances and precoding function. Usually with IF2/IF1'' xhaul to RCC or potentially also MAC/RLC in RAU with IF1' xhaul to RCC. +\item {\em massive-MIMO array} same as 2nd indoor DAS system (i.e. integrated L1/L2 RAU with array) +\end{itemize} +\end{itemize} +RU/L1 Instances and Component Carriers + + + + + +288 384 m +288 96 l +672 96 l +672 384 l +h + + +301.83 142.941 m +301.83 103.286 l +648 104 l +648 144 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +301.83 142.941 m +301.83 103.286 l +648 104 l +648 144 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF4p5 / ethernet} +\end{tiny} + +\setstretch{.5}\begin{tiny} +upper-PHY TX (212,213) +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +389.83 375.941 m +389.83 336.286 l +616 336 l +616 376 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF1pp / ethernet} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +\setstretch{.5}\begin{tiny} +TX PRECODING\\RX COMBINING +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +\small\begin{itemize} +\item Example: RAU with {\tt NGFI\_IF1pp} xhaul (MAC/PHY split) northbound, {\tt NGFI\_IF4p5} fronthaul southbound, 2 vCell logical interfaces (2 L1/L2 instances, or 1 L2 instance and 2 CCs), 4 RRUs with {\tt NGFI\_IF4p5} + +\end{itemize} + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +upper-PHY RX (212,213) +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +upper-PHY RX (212,213) +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +upper-PHY TX (212,213) +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_0$ +\end{tiny} + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_1$ +\end{tiny} + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_2$ +\end{tiny} + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_3$ +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{eNB}_0$ +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{eNB}_1$ +\end{tiny} + +RAU Example (DAS) + + + + + +168 416 m +168 32 l +576 32 l +576 416 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX0 +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +176 176 m +176 136 l +552 136 l +552 176 l +h + +\setstretch{.5}\begin{tiny} +{\tt NGFI\_IF4p5 / ethernet} +\end{tiny} + +\setstretch{.5}\begin{tiny} +PHY TX0 +\end{tiny} + +184 360 m +184 336 l +552 336 l +552 360 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +184 408 m +184 368 l +552 368 l +552 408 l +h + +\setstretch{.5}\begin{tiny} +{\tt NGFI\_IF1p / ethernet} +\end{tiny} + + +184 264 m +184 224 l +552 224 l +552 264 l +h + +\setstretch{.5}\begin{tiny} +TX PRECODING\\RX COMBINING +\end{tiny} + +\small\begin{itemize} +\item Example: massive-MIMO RAU with {\tt NGFI\_IF1p} fronthaul northbound, 8 L1 component carriers,1 L2 instances, many local RRUs with {\tt NGFI\_IF4p5} southbound + +\end{itemize} + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX1 +\end{tiny} + +\setstretch{.5}\begin{tiny} +PHY TX1 +\end{tiny} + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX7 +\end{tiny} + +\setstretch{.5}\begin{tiny} +PHY TX7 +\end{tiny} + +184 320 m +184 288 l +552 288 l +552 320 l +h + +\setstretch{.5}\begin{tiny} +RLC +\end{tiny} + + +184 280 m +184 248 l +552 248 l +552 280 l +h + +\setstretch{.5}\begin{tiny} +MAC +\end{tiny} + + +376 208 m +448 208 l + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{eNB}_0$ +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{eNB}_1$ +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{eNB}_7$ +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_{0\cdots 15}$ +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_{16\cdots 31}$ +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_{32\cdots 47}$ +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_{48\cdots 63}$ +\end{tiny} + +RAU Example (Massive-MIMO) + + + + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +232 384 m +232 256 l +543.99 256 l +543.99 384 l +h + + +96 136 m +96 48 l +540 48 l +540 136 l +h + + +88 192 m +88 80 l +248 80 l +248 192 l +h + + +88 192 m +88 80 l +248 80 l +248 192 l +h + + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\small\begin{itemize} +\item IF5 transports packets of size equal to a subframe and corresponding to a 1ms chunk of signal in the time-domain. This is done via the functions send\_if5 and recv\_if5, in the layer1 transport procedures ({\tt openair1/PHY/LTE\_TRANSPORT/if5\_tools.c}). A timestamp is given along with the samples, corresponding to the time (in samples) of the first sample of the packet. +\item each block can be compressed with A-law compression, yielding a compression rate of .5. +\end{itemize} +RU Procedures (NGFI\_IF5) + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_2$ (211,212) +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_2$ (211,212) +\end{tiny} + + +144 480 m +144 32 l +176 32 l +176 480 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_0$ +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_1$ (211,212) +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_0$ (211,212) +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_1$ (211,212) +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_0$ (211,212) +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +132 294 m +132 208 l +384 208 l +384 294 l +h + + +144.991 145.396 m +289.432 145.382 l + + +144.991 120.982 m +289.432 121.382 l + +\tiny {\tt RU->ru\_time.rxdata[0]} +\tiny {\tt RU->ru\_time.rxdata[R-1]} + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\setstretch{.5}\tt\tiny slot\_fep\_ul\par36.211 + +153 232 m +153 176 l +228 176 l +228 232 l +h + + +184 268 m +196 268 l + + +184 244 m +196 244 l + +\tiny {\tt eNB->common\_vars.rxdataF[0]} +\tiny {\tt eNB->common\_vars.rxdataF[R-1]} + +273 269 m +412 268 l + + +415.263 120.984 m +575 120.608 l + + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\tiny $\mathrm{Alaw}^{-1}()$ + +56 128 m +110.531 128.542 l + +\tiny from IF5 {\tt if\_device} + +680 104 m +680 104 l +680 104 l +680 104 l +h + + +544 324 m +544 144 l +576 144 l +576 324 l +h + +\setstretch{.5}\tt\tiny P\\R\\E\\C\\O\\D\\I\\N\\G\\ + +632 360 m +632 188 l +660 188 l +660 360 l +h + +\tiny {\tt RU->ru\_time.txdata[0]} + +700 264 m +735.133 264 l + + +632 264.556 m +671.833 265 l + +\setstretch{.5}\tt\tiny do\_ofdm\_mod\_rt()\par 36.211 +\setstretch{.5}\begin{tiny} +{\tt openair1/SCHED/ru-procedures.c} +\end{tiny} + + +517.232 240.387 m +576.078 240 l +576.078 240 l + + +517.232 240.387 m +576.078 240 l +576.078 240 l + + +517.232 240.387 m +576.078 240 l +576.078 240 l + + +517.232 240.387 m +576.078 240 l +576.078 240 l + +\tiny $\mathrm{Alaw}()$ +\tiny to IF5 {\tt if\_device} + +56 240 m +356.214 240.281 l + + +700 264 m +735.133 264 l + +\tiny {\tt RU->ru\_time.txdata[T-1]} +\setstretch{.5}\begin{tiny} +{\tt recv\_IF5()} +\end{tiny} + +\setstretch{.5}\begin{tiny} +{\tt send\_IF5()} +\end{tiny} + +\setstretch{.5}\begin{tiny} +{\tt ru\_fep\_full()} +\end{tiny} + +IF5 RU eNB end +\tiny $\mathrm{7.5kHz}()$ +\setstretch{.5}\begin{tiny} +{\tt ru\_thread()} +\end{tiny} + +\setstretch{.5}\begin{tiny} +{\tt ru\_thread\_asynch\_rxtx()} +\end{tiny} + + + + + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +96 136 m +96 48 l +540 48 l +540 136 l +h + + +88 192 m +88 80 l +248 80 l +248 192 l +h + + +88 192 m +88 80 l +248 80 l +248 192 l +h + + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\small\begin{itemize} +\item IF4p5 transports packets of size equal to an OFDM symbol (for DLRE and ULRE) indexed by the symbol, subframe and frame number. This is done via the functions send\_if4p5 and recv\_if4p5, in the layer1 transport procedures ({\tt openair1/PHY/LTE\_TRANSPORT/if4\_tools.c}). +\item each block are compressed with A-law compression, yielding a compression rate of .5. +\end{itemize} +RU Procedures (NGFI\_IF4p5) + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_2$ (211,212) +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_2$ (211,212) +\end{tiny} + + +144 480 m +144 32 l +176 32 l +176 480 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_0$ +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_1$ (211,212) +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_0$ (211,212) +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_1$ (211,212) +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_0$ (211,212) +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +175.991 137.396 m +575 138.93 l + + +175.991 112.982 m +575 114.329 l + + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\tiny $\mathrm{Alaw}^{-1}()$ + +56 120 m +141.531 120.07 l + +\tiny from IF4p5 {\tt if\_device} + +680 104 m +680 104 l +680 104 l +680 104 l +h + + +544 324 m +544 144 l +576 144 l +576 324 l +h + +\setstretch{.5}\tt\tiny P\\R\\E\\C\\O\\D\\I\\N\\G\\ + +700 264 m +735.133 264 l + +\setstretch{.5}\begin{tiny} +{\tt openair1/SCHED/ru-procedures.c} +\end{tiny} + + +517.232 240.387 m +576.078 240 l +576.078 240 l + + +517.232 240.387 m +576.078 240 l +576.078 240 l + + +517.232 240.387 m +576.078 240 l +576.078 240 l + + +517.232 240.387 m +576.078 240 l +576.078 240 l + +\tiny $\mathrm{Alaw}()$ +\tiny to IF4p5 {\tt if\_device} + +56 240 m +356.214 240.281 l + + +700 264 m +735.133 264 l + +\setstretch{.5}\begin{tiny} +{\tt recv\_IF4p5()} +\end{tiny} + +\setstretch{.5}\begin{tiny} +{\tt send\_IF4p5()} +\end{tiny} + +IF4p5 RU eNB end + +153 232 m +153 176 l +228 176 l +228 232 l +h + + +111.191 120.045 m +112 70 l +142 69.9344 l + + +-36 68 m +-36 68 l + + +175.991 112.982 m +575 114.329 l + +\tiny {\tt eNB->common\_vars.rxdataF[0]} +\tiny {\tt eNB->common\_vars.rxdataF[R-1]} +\tiny {\tt eNB->prach\_vars.prachF[0$\cdots$ R-1]} +\setstretch{.5}\begin{tiny} +{\tt ru\_thread()} +\end{tiny} + + + + + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +232 384 m +232 256 l +543.99 256 l +543.99 384 l +h + + +96 136 m +96 48 l +540 48 l +540 136 l +h + + +132 294 m +132 208 l +384 208 l +384 294 l +h + + +96 384 m +96 148 l +544 148 l +544 256 l +224 256 l +224 384 l +h + + +444 164 m +444 84.382 l +522.222 84.382 l +522.222 164 l +h + + +132 294 m +132 208 l +384 208 l +384 294 l +h + + +444 164 m +444 84.382 l +522.222 84.382 l +522.222 164 l +h + + +153 232 m +153 176 l +228 176 l +228 232 l +h + +RU Procedures (NGFI\_IF4p5) +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_0$ +\end{tiny} + + +144.991 145.396 m +289.432 145.382 l + + +144.991 120.982 m +289.432 121.382 l + +\tiny {\tt RU->ru\_time.rxdata[0]} +\tiny {\tt RU->ru\_time.rxdata[R-1]} + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\setstretch{.5}\tt\tiny slot\_fep\_ul\par36.211 + +153 232 m +153 176 l +228 176 l +228 232 l +h + + +184 268 m +196 268 l + + +184 244 m +196 244 l + + +273 269 m +412 268 l + + +415.263 120.984 m +575 120.608 l + + +56 128 m +110.531 128.542 l + +\tiny from {\tt rf\_device} + +680 104 m +680 104 l +680 104 l +680 104 l +h + + +632 360 m +632 188 l +660 188 l +660 360 l +h + +\tiny {\tt RU->ru\_time.txdata[0]} + +380.13 336.98 m +149.46 336.349 l + + +632 264.556 m +671.833 265 l + +\setstretch{.5}\tt\tiny do\_ofdm\_mod\_rt()\par 36.211 +\setstretch{.5}\begin{tiny} +{\tt openair1/SCHED/ru-procedures.c} +\end{tiny} + +\tiny to {\tt rf\_device} + +58 240 m +114.121 240.053 l + + +380.45 296 m +149.46 295.058 l + +\tiny {\tt RU->ru\_time.txdata[T-1]} +\setstretch{.5}\begin{tiny} +{\tt ru\_fep\_full()} +\end{tiny} + +IF4p5 RU remote-end + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\tiny $\mathrm{Alaw}^{-1}()$ + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\tiny $\mathrm{Alaw}()$ +\tiny $\mathrm{7.5kHz}()$ + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\setstretch{.5}\begin{tiny} +{\tt recv\_IF4p5()} +\end{tiny} + +\setstretch{.5}\begin{tiny} +{\tt send\_IF4p5()} +\end{tiny} + + +485.71 128.939 m +581.963 129.331 l + +\tiny to {\tt if\_device} +\tiny from {\tt if\_device} + +58 240 m +114.121 240.053 l + + +131 344 m +131 316 l +276 316 l +276 344 l +h + +\setstretch{.5}\tt\tiny ru\_prach\_procedures\par36.211 + +440.514 328 m +477 327.572 l + +\tt\tiny ru\_prach\_procedures() + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\setstretch{.5}\tt\tiny rx\_prachl\par36.211 + +199.412 220.391 m +200 104 l +236.674 103.978 l + + +178.262 196.069 m +179.06 92 l +236.674 91.6468 l + + +65.0054 121.159 m +65.0054 121.159 l +65.0054 121.159 l +65.0054 121.159 l +h + +\setstretch{.5}\begin{tiny} +{\tt ru\_thread\_prach()} +\end{tiny} + +\setstretch{.5}\begin{tiny} +{\tt ru\_thread()} +\end{tiny} + + +65.0054 357.66 m +65.0054 357.66 l +65.0054 357.66 l +65.0054 357.66 l +h + +\setstretch{.5}\begin{tiny} +{\tt ru\_thread\_asynch\_rxtx()} +\end{tiny} + +\tiny to {\tt if\_device} + +485.71 128.939 m +581.963 129.331 l + + + + + + +175.695 380 m +176.42 128 l + +OAI IF1pp Interface +\tiny\begin{itemize} +\item OAI IF1pp is the interface between the 36.213 Physical Layer Procedures (HARQ, SR, CSI, etc.) and the transport/physical channel processing +\item it can be networked, although this is not used as an xhaul interface at the moment. +\end{itemize} + +96 384 m +96 320 l +640 320 l +640 384 l +h + + +128 368 m +128 336 l +352 336 l +352 368 l +h + + +128 368 m +128 336 l +352 336 l +352 368 l +h + +\tiny {\tt phy\_procedures\_lte\_eNB\_TX} +\tiny {\tt phy\_procedures\_lte\_eNB\_RX} + +96 384 m +96 320 l +640 320 l +640 384 l +h + +\small PHY transport and physical channel procedures +\tiny {\tt common\_signal\_procedures()} +\tiny {\tt pmch\_procedures()} +\tiny {\tt generate\_dlsch\_parameters\_from\_dci()} +\tiny {\tt generate\_ulsch\_parameters\_from\_dci()} +\tiny {\tt phy\_config\_dedicated\_step2()} +\tiny {\tt generate\_dci\_top()} +\tiny {\tt generate\_phich\_top()} +\tiny {\tt pdsch\_procedures()} + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + +\tiny {\tt pucch\_procedures()} +\tiny {\tt process\_Msg3()} + +175.695 380 m +176.42 128 l + +\tiny {\tt rx\_ulsch()} + +175.695 380 m +176.42 128 l + +\tiny {\tt ulsch\_decoding()} + +175.695 380 m +176.42 128 l + +\tiny {\tt extract\_cqi()} + +175.695 380 m +176.42 128 l + +\tiny {\tt get\_Msg3\_alloc\_ret()} + +175.695 380 m +176.42 128 l + +\tiny {\tt lte\_est\_timing\_advance\_pusch()} + +175.695 380 m +176.42 128 l + +\tiny {\tt lte\_eNB\_I0\_measurements()} + +175.695 380 m +176.42 128 l + +\tiny {\tt process\_HARQ\_info()} + +175.695 380 m +176.42 128 l + +\small {\tt 36.213}\par +{\tt openair1/SCHED} +\small {\tt 36.211/212}\par +{\tt openair1/PHY} + + + + + +120 528 m +120 0 l +592 0 l +592 528 l +h + + +180 524 m +180 476 l +588 476 l +588 524 l +h + + +248 520 m +248 483.903 l +400 484 l +400 520 l +h + + +180 493.216 m +180 452 l +536 452 l +536 493.216 l +h + + +404 480 m +404 472 l +404 472 l +404 480 l +h + + +340 488 m +340 464 l +444 464 l +444 488 l +h + + +312 456 m +312 432 l +424 432 l +424.001 456 l +h + + +144 448 m +144 360 l +536 360 l +536 448 l +h + + +144 260 m +144 116 l +536 116 l +536 260 l +h + + +144 344 m +144 264 l +536 264 l +536 344 l +h + + +128 440 m +128 384 l +224 384 l +224 440 l +h + +\tt\tiny generate\_dci\_top() + + +0 424 m +0 32 l +48 32 l +48 424 l +h + +M\\ +A\\ +C + +64 416 m +172 416 l + +\tt\tiny DCI\_PDU + +128 440 m +128 384 l +224 384 l +224 440 l +h + +\setstretch{.5}\tt\tiny dlsch\_coding()\par36.212 + +64 416 m +172 416 l + +\tt\tiny DLSCH\_PDU\_0 + +128 440 m +128 384 l +224 384 l +224 440 l +h + + +64 416 m +172 416 l + +\tt\tiny DLSCH\_PDU\_1\_0 + +128 440 m +128 384 l +224 384 l +224 440 l +h + + +64 416 m +172 416 l + +\tt\tiny DLSCH\_PDU\_1\_1 + +312 456 m +312 432 l +424 432 l +424.001 456 l +h + +\setstretch{.5}\tt\tiny generate\_pcfich()\par36.212,36.211 + +304 408 m +304 384 l +400 384 l +400 408 l +h + +\setstretch{.5}\tt\tiny generate\_dci0()\par36.212 + +408 400 m +408 352 l +520 352 l +520 400 l +h + +\setstretch{.5}\tt\tiny pdcch\_scrambling()\par pdcch\_modulation\par pdcch\_interleaving\par36.211 +\setstretch{.5}\tt\tiny dlsch\_coding()\par36.212 +\setstretch{.5}\tt\tiny dlsch\_coding()\par36.212 + +268 426.729 m +293 426.729 l + + +268 399.17 m +293 399.17 l + + +405 397.373 m +421 397.373 l + + +294 320 m +294 296 l +392 296 l +392 320 l +h + +\setstretch{.5}\tt\tiny dlsch\_encoding()\par36.212 + +268 399.17 m +293 399.17 l + + +408 322.774 m +408 288 l +520 288 l +520 322.774 l +h + +\setstretch{.5}\tt\tiny dlsch\_scrambling()\par dlsch\_modulation()\par36.211 + +405 397.373 m +421 397.373 l + + +294 320 m +294 296 l +392 296 l +392 320 l +h + +\setstretch{.5}\tt\tiny dlsch\_encoding()\par36.212 + +408 251 m +408 144 l +520 144 l +520 251 l +h + +\setstretch{.5}\tt\tiny dlsch\_scrambling()\par dlsch\_modulation()\par[2-4 layers]\par 36.211 + +405 397.373 m +421 397.373 l + + +294 320 m +294 296 l +392 296 l +392 320 l +h + +\setstretch{.5}\tt\tiny dlsch\_encoding()\par36.212 + +405 397.373 m +421 397.373 l + + +268 399.17 m +293 399.17 l + + +268 399.17 m +293 399.17 l + + +552 428 m +552 428 l + + +405 409 m +600 408.924 l + + +520 381 m +600 380.885 l + + +521 292.923 m +600 293.648 l + +\tt\tiny openair1/SCHED/phy\_procedures\_lte\_eNb.c:pdsch\_procedures() +\tt\tiny openair1/SCHED/phy\_procedures\_lte\_eNb.c:pdsch\_procedures() +\tt\tiny openair1/PHY/LTE\_TRANSPORT/dci.c + +360 104 m +360 104 l +360 104 l +360 104 l +h + + +144 344 m +144 264 l +536 264 l +536 344 l +h + + +128 440 m +128 384 l +224 384 l +224 440 l +h + +\setstretch{.5}\tt\tiny dlsch\_coding()\par36.212 +\tt\tiny MCH\_PDU + +294 320 m +294 296 l +392 296 l +392 320 l +h + +\setstretch{.5}\tt\tiny dlsch\_encoding()\par36.212 + +268 399.17 m +293 399.17 l + + +408 322.774 m +408 288 l +520 288 l +520 322.774 l +h + +\setstretch{.5}\tt\tiny dlsch\_scrambling()\par mch\_modulation()\par36.211 + +405 397.373 m +421 397.373 l + +\tt\tiny openair1/SCHED/phy\_procedures\_lte\_eNb.c:pmch\_procedures() + +64 416 m +172 416 l + + +128 488 m +128 452 l +172 452 l +172 488 l +h + + +140 472 m +140 472 l +140 472 l +140 472 l +h + +\setstretch{.5}\tt\tiny UL CNTL\\36.213 + +188 476 m +188 460 l +316 460 l +316 476 l +h + +\tt\tiny generate\_phich\_top() + +172 468 m +188 468 l + +\setstretch{.5}\tt\tiny generate\_phich()\par36.212,36.211 + +405 397.373 m +421 397.373 l + + +445 457 m +600 456.672 l + + +520.262 58 m +600 58.7558 l + +\tt\tiny openair1/PHY/LTE\_TRANSPORT/phich.c +\tiny PHICH REs +\tiny PCFICH REs +\tiny PDCCH REs +\tiny PDSCH REs + +104.077 0 0 104.077 528 236 e + +\tiny PMCH REs +\setstretch{.5}\tt\tiny generate\_pilots\_slot()\par generate\_pss/sss/pbch()\par36.211 + +248 488.695 m +248 488.695 l +248 488.695 l +248 488.695 l +h + +\tt\tiny openair1/SCHED/phy\_procedures\_lte\_eNb.c:common\_signal\_procedures() + +401 507 m +600.424 507.963 l + +\tiny CS-RS/PSS/SSS/PBCH REs + +576 332 m +592 324 l + +\tt\tiny openair1/SCHED/phy\_procedures\_lte\_eNb.c:phy\_procedures\_eNB\_TX() +eNB TX Procedures +\tiny eNodeB\_3GPP or NGFI\_RCC\_IF4p5 + +232 276 m +232 240 l +240 240 l +240 276 l +h + +\tt\tiny IF2 split points + +232 276 m +232 240 l +240 240 l +240 276 l +h + + +521 292.923 m +600 293.648 l + + +521 292.923 m +600 293.648 l + + + + + + +539.766 93 m +539.306 79.0026 l +340 79.7439 l + + +447.064 116 m +447.064 92 l +632 92 l +632 116 l +h + + +304 384 m +304 320 l +368 320 l +368 384 l +h + + +225.588 267.631 m +225.588 257.004 l +451.999 257.004 l +451.999 267.631 l +h + + +286.577 417.212 m +286.577 407.581 l +412.989 407.581 l +412.989 417.212 l +h + + +-66.4757 363.53 m +-66.4757 358.467 l +-65.4632 358.467 l +-65.4632 363.53 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\begin{tiny} +\tt {\bf phy\_procedures\_eNB\_TX}(sched\_subframe,eNB,abstraction\_flag,r\_type,rn) +\end{tiny} + +\begin{tiny} eNB instance and component carriers \end{tiny} +\begin{tiny} subframe where TX was scheduled \end{tiny} + +293.168 472.33 m +189.522 511.272 l + + +372.849 474.127 m +310.542 512.47 l + +\setstretch{.5}\begin{tiny} Flag to indicate 212/213 Split\\(transport channels, no 211 procedures) \end{tiny} + +432.16 473.528 m +526.22 499.29 l + + +27.6629 0 0 27.6629 531.612 404.032 e + + +526.819 478.92 m +598.712 484.312 l + +\begin{tiny} Experimental (for relays)\end{tiny} +\begin{tiny} +\bf\tt Check for dead UEs +\end{tiny} + +304 384 m +304 320 l +368 320 l +368 384 l +h + + +340.45 451.636 m +340.45 417.212 l + +\begin{tiny}\tt eNB$\rightarrow$CC\_id==0?\end{tiny} +\begin{tiny} +\bf\tt Call eNB\_dlsch\_ulsch\_scheduler [MAC] +\end{tiny} + +340.45 451.636 m +340.45 417.212 l + + +340.45 451.636 m +340.45 417.212 l + + +340.45 451.636 m +340.45 417.212 l + + +418.155 336 m +528 336 l +528 248 l +340 247.665 l + +\tiny no + +225.588 267.631 m +225.588 257.004 l +451.999 257.004 l +451.999 267.631 l +h + +\begin{tiny}\tt is PMCH subframe?\end{tiny} +\begin{tiny} +\bf\tt Call pmch\_procedures +\end{tiny} + +340.45 451.636 m +340.45 417.212 l + + +340 97.4877 m +340 52 l + +\tiny no +\setstretch{.5} +\begin{tiny} +\bf\tt Call common\_signal\_procedures\\ +(CS-RS/PSS/SSS/PBCH) +\end{tiny} + +417.889 180.561 m +540 180 l +539.532 116 l + + +352 0 m +352 12 l +384 12 l +384 12 l +384 0 l +368 -12 l +368 -12 l +h + +eNB TX Flowchart + + + + + +225.588 267.631 m +225.588 257.004 l +451.999 257.004 l +451.999 267.631 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call get\_dci\_sdu [MAC]\\ dci=first\_dci +\end{tiny} + +368.672 502.411 m +368 524 l + + +304 384 m +304 320 l +368 320 l +368 384 l +h + +\setstretch{.5}\begin{tiny}\tt dci not empty and DL dci?\end{tiny} + +368.672 502.411 m +368 524 l + + +368.297 357.206 m +368 380 l + + +260 356 m +260 328 l +476 328 l +476 356 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call generate\_dlsch\_params\_from\_dci\\ +dci=next(dci) +\end{tiny} +\tt\tiny no + +260 342 m +240.242 342 l +240 472 l +368 472 l + + +445.666 417.484 m +512.662 417.484 l +512.662 303.725 l +367.862 303.725 l +367.862 288.454 l + + +260 356 m +260 328 l +476 328 l +476 356 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call phy\_config\_dedicated\_step2\\ +dci=first\_dci +\end{tiny} + +272 200 m +344.961 161.229 l +416 200 l +344.961 235.739 l +h + +\setstretch{.5}\begin{tiny}\tt dci not empty and UL dci?\end{tiny} + +368.297 357.206 m +368 380 l + + +260 356 m +260 328 l +476 328 l +476 356 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call generate\_ulsch\_params\_from\_dci\\ +dci=next(dci) +\end{tiny} +\tt\tiny no + +260 123 m +240.242 123 l +240 252 l +368 252 l + + +416 200 m +488 200 l +489 96 l +345 96 l +344.862 77.0895 l + + +272 80 m +272 48 l +416 48 l +416 80 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call generate\_dci\_top\\ +Call generate\_phich\_top +\end{tiny} + +368.297 357.206 m +368 380 l + + +352 0 m +352 12 l +384 12 l +384 12 l +384 0 l +368 -12 l +368 -12 l +h + + +344 24 m +344 48 l + +\tt\tiny yes +\tt\tiny yes +eNB TX Flowchart + + + + + +240 96 m +240 56 l +496 56 l +496 96 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt dlsch\_eNB[UE].subframe\_active=false\par [no PUCCH ACK to be checked in TTI n+k]\par +UE=next(UE) +\end{tiny} + +288 464 m +368 432 l +448 464 l +368 496 l +h + + +288 464 m +368 432 l +448 464 l +368 496 l +h + + +368 528 m +368 512 l + + +288 464 m +368 432 l +448 464 l +368 496 l +h + +\setstretch{.5}\begin{tiny}\tt is dlsch\_SI active?\end{tiny} + +368 528 m +368 504 l + +\setstretch{.5}\begin{tiny}\tt is dlsch\_P active?\end{tiny} + +368 528 m +368 504 l + +\setstretch{.5}\begin{tiny}\tt is dlsch\_RA active?\end{tiny} +\tt\tiny no +\tt\tiny no +\tt\tiny no + +368 528 m +368 504 l + + +456 480 m +456 464 l +648 464 l +648 480 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call pdsch\_procedures(dlsch\_SI) +\end{tiny} + +448 464 m +536 464 l +536 448 l + + +536 432 m +536 424 l +368 424 l + +\tt\tiny yes + +456 480 m +456 464 l +648 464 l +648 480 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call pdsch\_procedures(dlsch\_P) +\end{tiny} + +448 464 m +536 464 l +536 448 l + + +536 432 m +536 424 l +368 424 l + +\tt\tiny yes + +456 480 m +456 464 l +648 464 l +648 480 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call pdsch\_procedures(dlsch\_RA) +\end{tiny} + +448 464 m +536 464 l +536 448 l + + +536 432 m +536 424 l +368 424 l + +\tt\tiny yes + +256 232 m +256 208 l +480 208 l +480 232 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt UE=first\_UE from UE\_list \par [list of UE with t-CRNTI or CRNTI] +\end{tiny} + +288 464 m +368 432 l +448 464 l +368 496 l +h + +\setstretch{.5}\begin{tiny}\tt is dlsch\_UE active?\end{tiny} + +368 528 m +368 504 l + + +368 528 m +368 504 l + + +456 480 m +456 464 l +648 464 l +648 480 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call pdsch\_procedures(dlsch\_UE) +\end{tiny} +\tt\tiny yes + +448 464 m +536 464 l +536 448 l + + +536 432 m +536 424 l +368 424 l + +\tt\tiny no + +416 88 m +416 88 l +416 88 l +416 88 l +h + + +320 32 m +368 16 l +416 32 l +368 48 l +h + +\setstretch{.5}\begin{tiny}\tt UE=NULL?\end{tiny} + +368 72 m +368 56 l + + +320 40 m +224 40 l +224 168 l +288 168 l + +\tt\tiny no + +352 0 m +352 12 l +384 12 l +384 12 l +384 0 l +368 -12 l +368 -12 l +h + + +416 40 m +640 40 l +640 24 l + +\tt\tiny yes + +512 48 m +512 32 l +544 32 l +544 48 l +h + + +528 80 m +528 48 l + +\bf\setstretch{.5}\tiny IF4p5 \par [All Frequency-domain Signals are created] +eNB TX Flowchart + + + + + +130 527 m +130 -1 l +608 0 l +608 528 l +h + + +388 288 m +388 208 l +584 208 l +584 288 l +h + + +141 449 m +141 361 l +580.427 361 l +580 448 l +h + + +464 428 m +464 396 l +576 396 l +576 428 l +h + + +462.358 361 m +462.358 287.368 l +602 287.368 l +602 361 l +h + + +462.358 361 m +462.358 287.368 l +602 287.368 l +602 361 l +h + + +492 200 m +492 16 l +596 16 l +596 200 l +h + + +130 202.157 m +130 16 l +484 16 l +484 204 l +h + +\tt\tiny openair1/SCHED/phy\_procedures\_lte\_eNb.c:phy\_procedures\_eNB\_RX() + +0 424 m +0 32 l +48 32 l +48 424 l +h + +M\\ +A\\ +C + +64 416 m +172 416 l + +\setstretch{.5}\tt\tiny RACH Preamble + +534 125.858 m +688 126 l + +\tt\tiny ULSCH\_SDU(UE\_id) +\tiny eNB\_common\_vars.rxdataF[0] +\tiny eNB\_common\_vars.rxdataF[R-1] + +273 269 m +412 268 l + + +273 245 m +412 244 l + + +184 128 m +184 100 l +276 100 l +276 128 l +h + +\setstretch{.5}\tt\tiny rx\_ulsch(UE\_id)\par36.211 + +208 240 m +208 128 l + +\tt\tiny LTE\_TRANSPORT/prach.c +\tt\tiny openair1/PHY/LTE\_TRANSPORT/ulsch\_demodulation.c + +393 285 m +393 229 l +552 228 l +552 284 l +h + +\tt\tiny lte\_eNB\_I0\_measurements() + + + +280 32 m +280 199 l +308 199 l +308 32 l +h + +\setstretch{.5}\tt\tiny ulsch\_extract\_rbs\_single()\par36.211 + + + + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny lte\_ul\_channel\_estimation()\par36.211 + + + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny ulsch\_detection\_mrc()\par36.211 + + + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny frequency\_equalization()\par36.211 + + + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny lte\_idft()\par36.211 + + + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny ulsch\_XXX\_llr()\par36.211 + + + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny ulsch\_decoding()\par36.212 + + + +332 32 m +332 199 l +360 199 l +360 32 l +h + + +\setstretch{.5}\tt\tiny ulsch\_channel\_compensation()\par36.211 + + + +476 118 m +504.475 118 l + + +564 220 m +564 220 l +564 220 l +564 220 l +h + +\tt\tiny ulsch\_decoding.c + +476 118 m +504.475 118 l + +\tt\tiny ACK/NAK,RI,CQI + +131 344 m +131 316 l +276 316 l +276 344 l +h + +\setstretch{.5}\tt\tiny pucch\_procedures(UE\_id)\par36.211 + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\setstretch{.5}\tt\tiny rx\_pucchl\par36.211 + +476 118 m +504.475 118 l + + +551.76 312.126 m +687 312.231 l + +\tt\tiny ACK/NAK +\tt\tiny SR + +440.514 328 m +477 327.572 l + +\tt\tiny TRANSPORT/pucch.c + +373.112 244.28 m +373.112 316 l + + +344.968 268.786 m +345.381 316 l + + +131 344 m +131 316 l +276 316 l +276 344 l +h + +\setstretch{.5}\tt\tiny prach\_procedures\par36.211 + +405.275 413 m +464 412.625 l + + +440.514 328 m +477 327.572 l + +\tt\tiny openair1/SCHED/phy\_procedures\_lte\_eNb.c:prach\_procedures() + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\setstretch{.5}\tt\tiny rx\_prachl\par36.211 +\setstretch{.5}\tt\tiny E\_PRACH>Lmin\par36.211 +\tt\tiny LTE\_ESTIMATION/lte\_eNB\_I0\_measurements.c +eNB PHY RX Procedures + +0 416 m +144 416 l + +\tiny {\tt eNB->prach\_vars.prachF[0$\cdots$ R-1]} + +160 268 m +160 128 l + + + + + + +0 296 m +0 264 l +736 264 l +736 296 l +h + + +0 296 m +0 264 l +736 264 l +736 296 l +h + + +0 296 m +0 264 l +736 264 l +736 296 l +h + + +0 296 m +0 264 l +736 264 l +736 296 l +h + + +0 296 m +0 264 l +736 264 l +736 296 l +h + + +0 296 m +0 264 l +736 264 l +736 296 l +h + + +0 296 m +0 264 l +736 264 l +736 296 l +h + + +0 296 m +0 264 l +736 264 l +736 296 l +h + + +184 128 m +184 100 l +276 100 l +276 128 l +h + +\setstretch{.5}\tt\tiny rx\_ulsch(UE\_id)\par36.211 +\tiny$\mathbf{R}_{r,l}=\mathrm{DFT}_{N_{\mathrm{fft}}}(\mathbf{r}_{r,l}\odot\mathbf{F}_{7.5}),r=0,1,\cdots,R-1,l=0,1,\cdots,N_{\mathrm{symb}}-1$ (\tt\bf eNB\_common\_vars$\rightarrow$rxdataF[][])%,N_{\mathrm{fft}}=2^{1+\left\lceil\log_2 12N^{\mathrm{RB}}_{\mathrm{DL}}\right\rceil$ + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\setstretch{.5}\tt\tiny slot\_fep\_ul\par36.211 + +144 440 m +176 440 l + + +272 328 m +272 328 l + + +144 440 m +176 440 l + +\tiny $\mathbf{r}_{r,l}$ +\tiny $\mathbf{R}_{r,l}$ +\tiny $\mathbf{R}_{\mathrm{ext},r,l}$ +\tiny $R_{\mathrm{ext},r,l}(n)={R}_{r,l}(12\mathrm{firstPRB}+n),n=0,1,\cdots,12N_{\mathrm{PRB}}-1$ (\tt\bf eNB\_pusch\_vars$\rightarrow$ulsch\_rxdataF\_ext[][]) +\tiny $\mathbf{\hat{H}}_{r,l}$ +\tiny $\mathbf{\hat{H}}_{r,l} = \mathbf{R}_{\mathrm{ext},r,l}\odot\mathbf{DRS}^*_{l}(\mathrm{cyclicShift},n_{\mathrm{DMRS}^{(2)}},n_{\mathrm{PRS}})$, (\tt\bf eNB\_pusch\_vars$\rightarrow$drs\_ch\_estimates[]) +\tiny $\mathbf{R}_{\mathrm{comp},r,l}$ +\tiny $\mathbf{R}_{\mathrm{comp},0,l}$ +\tiny $\mathbf{R}_{\mathrm{comp},0,l}=\frac{1}{R}\sum_{r=0}^{R-1}\mathbf{R}_{\mathrm{comp},r,l}$ +\tiny $\mathbf{R}_{\mathrm{comp},0,l}$ +\tiny $\mathbf{r}_{\mathrm{comp},0,l}$ +\tiny $R_{\mathrm{comp},0,l}(n)=R_{\mathrm{comp},0,l}(n)\dot Q_8\left(\frac{1}{|\hat{H}(n)|^2+I_0}\right), \hat{H}(n)=\sum_{r=0}^{R-1}\hat{H}_{r}(n)$ +\tiny $\mathbf{R}_{\mathrm{comp},r,l}=\mathbf{\hat{H}}_r\odot\mathbf{R}_{\mathrm{ext},r,l}2^{-\log_2|H_\mathrm{max}|}, \mathbf{\hat{H}}_r = \frac{1}{2}(\mathbf{\hat{H}}_{r,3}+\mathbf{\hat{H}}_{r,10})$\par (\tt\bf eNB\_pusch\_vars$\rightarrow$ulsch\_rxdataF\_comp) +\tiny $\mathbf{\lambda}_{l}$ +\tiny QPSK : $\lambda_l(2n)=\mathrm{Re}(r_{\mathrm{comp},0,l}(n)), \lambda_l(2n+1)=\mathrm{Im}(r_{\mathrm{comp},0,l}(n))$ (\tt\bf eNB\_pusch\_vars$\rightarrow$ulsch\_llr) +\tiny ${\mathbf r}_{\mathrm{comp},0,l} = \mathrm{IDFT}_{12N_{\mathrm{PRB}}}({\mathbf R}_{\mathrm{comp},0,l})$ +\tiny 16QAM : $\lambda_l(4n)=\mathrm{Re}(r_{\mathrm{comp},0,l}(n)), \lambda_l(4n+2)=\mathrm{Im}(r_{\mathrm{comp},0,l}(n))$\par$\lambda_l(4n+1)=|\mathrm{Re}(r_{\mathrm{comp},0,l}(n))|-2\overline{|h(n)|},\lambda_l(4n+3)=|\mathrm{Im}(r_{\mathrm{comp},0,l}(n))|-2\overline{|h(n)|}$ + +280 32 m +280 199 l +308 199 l +308 32 l +h + +\setstretch{.5}\tt\tiny ulsch\_extract\_rbs\_single()\par36.211 + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny lte\_ul\_channel\_estimation()\par36.211 + +332 32 m +332 199 l +360 199 l +360 32 l +h + + +\setstretch{.5}\tt\tiny ulsch\_channel\_compensation()\par36.211 + + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny ulsch\_detection\_mrc()\par36.211 + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny frequency\_equalization()\par36.211 + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny lte\_idft()\par36.211 + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny ulsch\_XXX\_llr()\par36.211 + +304 236 m +304 236 l +304 236 l +304 236 l +h + +eNB ULSCH Demodulation + + + + +eNB PRACH Detection + +0 296 m +0 264 l +736 264 l +736 296 l +h + +\tiny$\mathbf{R}_{r}=\mathrm{DFT}_{N_{\mathrm{PRACH}}}(\mathbf{r}_{r}),r=0,1,\cdots,R-1$ (\tt\bf lte\_eNB\_prach\_vars$\rightarrow$rxsigF[])%,N_{\mathrm{fft}}=2^{1+\left\lceil\log_2 12N^{\mathrm{RB}}_{\mathrm{DL}}\right\rceil$ + +0 296 m +0 264 l +736 264 l +736 296 l +h + +\tiny$\mathbf{R}_{\mathrm{comp},r}=\mathbf{R}_{r}\odot \mathbf{X}^*_u[i],r=0,1,\cdots,R-1$ (\tt\bf lte\_eNB\_prach\_vars$\rightarrow$prachF[])%,N_{\mathrm{fft}}=2^{1+\left\lceil\log_2 12N^{\mathrm{RB}}_{\mathrm{DL}}\right\rceil$ + +0 296 m +0 264 l +736 264 l +736 296 l +h + +\tiny$\mathbf{r}_{839,r}=\mathrm{IDFT}_{1024}\left(\mathbf{R}_{\mathrm{comp},r}\right), r=0,1,\cdots,R-1$ (\tt\bf lte\_eNB\_prach\_vars$\rightarrow$prach\_ifft[]) + +112 460 m +112 400 l +176 400 l +176 460 l +h + +\tiny $\mathbf{r}_{r}$ + +144 440 m +176 440 l + +DFT +\tiny $\mathbf{R}_{r}$ + +268 480 m +268 452 l +300 452 l +300 480 l +h + +$\odot$ + +176 428 m +208 428 l +208 456 l +268 456 l + + +208 428 m +208 400 l +268 400 l + +\tiny $\mathbf{X}^*_{u}(0)$ +\tiny $\mathbf{X}^*_{u}(1)$ + +284 480 m +284 468 l + + +284 372 m +284 384 l + + +268 480 m +268 452 l +300 452 l +300 480 l +h + +\tiny$R\times\mathrm{IDFT}_{1024}$ + +300 456 m +336 456 l + + +300 456 m +336 456 l + + +268 480 m +268 452 l +300 452 l +300 480 l +h + +\tiny$R\times\mathrm{IDFT}_{1024}$ + + +268 480 m +268 452 l +300 452 l +300 480 l +h + + + +\tiny$\sum_{r}|\cdot|^2$ + + + + + +268 480 m +268 452 l +300 452 l +300 480 l +h + + + +\tiny$\sum_{r}|\cdot|^2$ + + + + + +268 480 m +268 452 l +300 452 l +300 480 l +h + +\tiny max peak in size $\mathrm{NCS}_2$ window, keep delay + + +412 456 m +440 456 l + + +412 400 m +440 400 l + + +500 460 m +532 460 l + + +500 460 m +532 460 l + + +500 460 m +532 460 l + + +624 456 m +672 456 l + + +624 456 m +672 456 l + + +268 480 m +268 452 l +300 452 l +300 480 l +h + +\tiny max peak in size $\mathrm{NCS}_2$ window, keep delay +\tiny\tt preamble\_energy\_list[]\par preamble\_delay\_list[] +\tiny $\mathbf{r}_{839,r}$ +\small\begin{itemize} +\item PRACH detection is a quasi-optimal non-coherent receiver for vector observations (multiple antennas) +\item correlation is done in the frequency-domain, number of correlations (in the example above 2) depends on {\em zeroCorrelationConfig} configuration parameter +\item peak-detection (for delay estimation) is performed in each NCS time-window +\end{itemize} + + +268 480 m +268 452 l +300 452 l +300 480 l +h + +$\odot$ + + + + + + +340 416 m +340 340 l +564 340 l +564 416 l +h + + +268 480 m +268 452 l +300 452 l +300 480 l +h + +\tiny$\sum_{r,l,i}|\cdot|^2$ +\begin{tiny}$\stackbin{<}{>}\sigma^2[\mathrm{dB}]$\end{tiny} +eNB PUCCH1 Detection + +184 128 m +184 100 l +276 100 l +276 128 l +h + +\setstretch{.5}\tt\tiny rx\_pucch()\par36.211 + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\setstretch{.5}\tt\tiny slot\_fep\_ul\par36.211 + +144 440 m +176 440 l + + +144 440 m +176 440 l + +\tiny $\mathbf{r}_{r,l}$ +\tiny $\mathbf{R}_{r,l}$ +\tiny $\mathbf{Z}^*_{l}e^{-j2\pi f/16},-3\leq f\leq 2$ + +308 448 m +352 448 l + +$\odot$ + +308 448 m +352 448 l + + +392 484 m +392 456 l + + +328 448 m +328 400 l +352 400 l + +$\odot$ + +392 484 m +392 456 l + +\tiny $\mathbf{Z}^*_{l}$ + +288 496 m +288 496 l +288 496 l +288 496 l +h + + +308 448 m +352 448 l + + +412 408 m +412 392 l +464 392 l +464 408 l +h + +\tiny$\mathbf{\hat{H}}$ +$\odot$ + +420 392 m +420 376 l + + +384 400 m +384 368 l +412 368 l + + +428 368 m +464 368 l + +\tiny$\mathrm{sgn}(\mathrm{Re}(\cdot))$ + +444 368 m +444 352 l +464 352 l + +\tiny$\mathrm{sgn}(\mathrm{Im}(\cdot))$ + +532 408 m +532 408 l +532 408 l +532 408 l +h + +\tiny PUCCH1 (Scheduling Request) +\tiny PUCCH1a/1b (ACK/NAK) +\small\begin{itemize} +\item PUCCH1 detection is a quasi-optimal non-coherent receiver (energy detector) for vector observations (multiple antennas) for scheduling request. Care is taken to handle residual frequency-offset. +\item PUCCH1A/1B detection is quasi-coherent based on a rough channel estimate obtained on the 3 symbols without data modulation. \item In both cases, correlation is done in the frequency-domain +\end{itemize} + + + + +\small\begin{itemize} +\item Threads (all in {\tt targets/RT/USER/lte-ru.c}) +\begin{itemize} +\item {\tt ru\_thread}: Thread per RU which sequentially +performs +\begin{itemize} +\item read from south interface (RF or IF fronthaul) +\item RX processing for subframe $n$ (if necessary). +\item wakeup eNBs that are waiting for signal (if necessary) +\item wait for eNB task completion (if necessary) +\item do TX processing for subframe $n+4$ (if necessary). Note that this can spawn multiple worker threads for very high order spatial processing (e.g. massive-MIMO or DAS for UDN) +\item do outgoing fronthaul (RF or IF fronthaul) +\end{itemize} +\item {\tt ru\_thread\_prach}: Thread for PRACH processing in remote RU (DFT on RX, IF4p5 RRU) +\item {\tt ru\_thread\_asynch}: Thread for asynchronous reception from fronthaul interface (TX direction in RRU). %Allows for some jitter so as not to block the RRU real-time processing. +\end{itemize} +\item Synchronization on fronthaul interface +\begin{itemize} +\item {\em synch\_to\_ext\_device} : synchronizes to incoming samples from RF or Fronthaul interface using blocking read +\item {\em synch\_to\_other} : synchronizes via POSIX mechanism to other source (other CC, timer) which maintains real-time. +\end{itemize} +\end{itemize} +RU Threads + + + + +\small\begin{itemize} +\item Threads (all in {\tt targets/RT/USER/lte-enb.c}) +\begin{itemize} +\item multi RX/TX thread mode (optional) +\begin{itemize} +\item {\tt eNB\_thread\_rxtx}: 2 threads per CC/Instance which do both RX procedures for subframe $n$ and TX procedures for subframe $n+4$. One operates on even subframes, one on odd. This allows 1ms subframe processing to use multiple-cores. +\end{itemize} +\item common RU-eNB RX/TX thread (default if single RU/eNB) +\begin{itemize} +\item calls {\tt eNB\_top}: procedure per CC/Instance which sequentially +\begin{itemize} +\item blocks on signal from RU +\item RX/TX processing for subframe $n$ and $n+4$ +\item signals completion to RU +\end{itemize} +\end{itemize} +\item {\tt eNB\_prach}: Thread per CC\_id/Instance for PRACH processing +\end{itemize} +\end{itemize} +eNB Threads + + + + + +400 400 m +400 388 l +520 388 l +520 400 l +h + + +400 432 m +400 420 l +520 420 l +520 432 l +h + + +400 448 m +400 436 l +528 436 l +528 448 l +h + + +400 448 m +400 436 l +528 436 l +528 448 l +h + + +192 388 m +192 364 l +272 364 l +272 388 l +h + + +32 480 m +32 464 l +112 464 l +112 480 l +h + +eNB Timing (multi-thread mode) + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny SF $n+1$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny SF $n+2$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny SF $n+3$ +\tiny $n$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny$n+4$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny SF $n+4$ + +32 480 m +212 572 +352 480 c + + +384 464 m +384 464 l + + +380 472 m +380 472 l + +\tiny\begin{itemize} +\item The current processing requires approximately 1ms peak in each direction (basically 1 core RX, 1core TX). The current architecture will work on a single core if the sum of RX and TX procedures is limited to 1ms. It can fit on 2 cores if the sum of RX,TX and PRACH is less than 2ms. +\item three threads, RX-TX even, RX-TX odd and PRACH. RX-TX blocks until woken by the RU thread with a new RX subframe $n$ that is linked to this eNB process. The RX-TX thread performs ue-specific processing for subframe $n$ and then TX common and ue-specific processing for subframe $n+4$ (frequency-domain generation only). This insures the data dependency between TX $n+4$ and RX $n$ is respected. The duration of this thread should be less than 2ms which can compensate some jitter on the RX processing. +\end{itemize} + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny SF $n$ +\tiny LTE HARQ periodicity (FDD, TDD can be longer) +\tiny PRACH $n$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny $n+1$ +\tiny $n$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny$n+5$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny $n+1$ + +124 424 m +172 416 +152 392 c + + +204 424 m +228 424 +236 416 c + + +192 396 m +196 416 l + + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny $n-1$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny$n+3$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny $n-1$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny $n+2$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny$n+6$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + + +284 424 m +308 424 +316 436 c + +\tiny $n+2$ + +268 452 m +276 436 l + +\tiny RU thread +\tiny RX-TX thread (even) + +400 448 m +400 436 l +528 436 l +528 448 l +h + + +400 448 m +400 436 l +528 436 l +528 448 l +h + +\tiny RX-TX thread (odd) +\tiny PRACH + +192 396 m +196 416 l + + + + + + +96 384 m +96 320 l +640 320 l +640 384 l +h + + +96 384 m +96 320 l +640 320 l +640 384 l +h + + +96 384 m +96 320 l +640 320 l +640 384 l +h + + +96 384 m +96 320 l +640 320 l +640 384 l +h + + +128 368 m +128 336 l +352 336 l +352 368 l +h + + +128 368 m +128 336 l +352 336 l +352 368 l +h + + +175.695 380 m +176.42 128 l + +OAI IF1'' Interface (can be NFAPI) +\tiny\begin{itemize} +\item OAI IF1'' is the interface between the 36.321 Medium-Access (MAC) Layer Procedures and the 36.213 Physical Layer Procedures. It links several PHY instances to one MAC instance. +\item It is a configurable (dynamically loadable) module which can implement an (N)FAPI P5/P7 or a simpler interface. +\end{itemize} + +128 368 m +128 336 l +352 336 l +352 368 l +h + +\tiny Random-Access +\tiny Events +\small PHY procedures +\tiny {\tt initiate\_ra\_proc()} +\tiny {\tt terminate\_ra\_proc()} +\tiny {\tt cancel\_ra\_proc()} +\tiny {\tt phy\_config\_dedicated()} +\tiny {\tt phy\_config\_sib1()} +\tiny {\tt phy\_config\_sib2()} +\tiny {\tt phy\_config\_sib13()} + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + +\tiny {\tt eNB\_dlsch\_ulsch\_scheduler()} +\tiny {\tt get\_dcii\_sdu()} + +175.695 380 m +176.42 128 l + +\tiny {\tt get\_dlsch\_sdu()} + +175.695 380 m +176.42 128 l + +\tiny {\tt rx\_sdu()} + +175.695 380 m +176.42 128 l + +\tiny {\tt get\_mch\_sdu()} + +175.695 380 m +176.42 128 l + +\tiny {\tt SR\_indication()} + +175.695 380 m +176.42 128 l + + +128 368 m +128 336 l +352 336 l +352 368 l +h + +\tiny PHY Config +\tiny Scheduling +\small {\tt 36.213/36.321}\\ +{\tt openair2/LAYER2/MAC} +\small {\tt 36.211/212}\par +{\tt openair1/PHY} + +96 384 m +96 320 l +640 320 l +640 384 l +h + +\small OAI MAC interface +\tiny {\tt phy\_config\_mib()} + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + +\small UL-Indication +\small Config-Req +\small Schedule-Resp +\tiny Northbound interface +\tiny Southbound interface + + + + +OAI IF1'' Interface +\tiny\begin{itemize} +\item The PHY end uses three basic messages +\begin{itemize} +\item {\tt CONFIG\_REQ}: this provides the cell configuration and UE-specific configuration to the PHY instances. This comprises the following FAPI P5/P7 messages +\begin{enumerate} +\item CONFIG.request +\item UE\_CONFIG.request (**not used in OAI PHY) +\end{enumerate} +\item {\tt UL\_INDICATION} This is an uplink indication that sends all UL information received in one TTI, including PRACH, if available. It also provides the subframe indication for the DL scheduler. It maps to the following FAPI P7 messages +\begin{enumerate} +\item {\tt SUBFRAME.indication} +\item {\tt HARQ.indication} +\item {\tt CRC.indication } +\item {\tt RX\_ULSCH.indication} +\item {\tt RX\_SR.indication} +\item {\tt RX\_CQI.indication} +\item {\tt RACH.indication} +\item {\tt SRS.indication} +\end{enumerate} +\item {\tt SCHEDULE\_REQUEST} This message contains the scheduling response information and comprises the following FAPI P7 messages +\begin{enumerate} +\item {\tt DL\_CONFIG.request} +\item {\tt UL\_CONFIG.request} +\item {\tt TX.request} +\item {\tt HI\_DCI0.request} +\end{enumerate} +\end{itemize} +\item The module is registered both by PHY and MAC and can implement different types of transport (NFAPI, function call, FAPI over UDP, etc.). During registration, fuction pointers for the different messages are provided for the module to interact with either PHY or MAC or both if they are executing in the same machine. Note that for a networked implementation (e.g. NFAPI), there are north and south components running in different machines. +\end{itemize} + + + + +OAI IF1'' Interface +\small\begin{itemize} +\item The PHY-layer timing is assumed to be +\begin{enumerate} +\item wait for subframe indication $n$ from HW +\item trigger PRACH if $n$ has PRACH (parallel thread) +\item trigger UE specific RX procedures for $n$ if $n$ is UL +\item assemble {\tt UL\_INDICATION} and send to MAC +\item wait for {\tt SCHEDULE\_REQUEST} +\item do TX procedures if $n+4$ is TX and RX programming if $n+4+k$ is UL +\end{enumerate} +\item The MAC-layer timing is assumed to be +\begin{enumerate} +\item do all UL processing for subframe $n$ if $n$ is UL after unraveling of UL\_INDICATION in MAC module +\item wait for call to {\tt eNB\_dlsch\_ulsch\_scheduler} +\item do DL scheduling for $n+4$ if it is DL +\item do UL scheduling for $n+8$ if it is UL +\item return from eNB\_dlsch\_ulsch\_scheduler +\item let MAC module form SCHEDULE\_REQUEST +\end{enumerate} +\end{itemize} + + + + + +96 384 m +96 320 l +640 320 l +640 384 l +h + + +128 368 m +128 336 l +352 336 l +352 368 l +h + + +128 368 m +128 336 l +352 336 l +352 368 l +h + +OAI MAC + +128 368 m +128 336 l +352 336 l +352 368 l +h + +\tiny Random-Access +\tiny Events + +128 368 m +128 336 l +352 336 l +352 368 l +h + +\tiny PHY Config +\tiny Scheduling +\small {\tt 36.321}\\ +{\tt openair2/LAYER2/MAC} + +175.695 380 m +176.42 128 l + + +176 496 m +176 384 l +400 384 l +400 496 l +h + + +176 496 m +176 384 l +400 384 l +400 496 l +h + +\small RRC + +384 384 m +272 144 l + + +384 384 m +384 144 l + + +384 384 m +528 144 l + + +608 384 m +528 144 l + +\small RLC + +176 496 m +176 384 l +400 384 l +400 496 l +h + +\small Preprocessor + +160 256 m +528 144 l + + +272 312 m +608 384 l + + +472 504 m +472 232 l +152 232 l +152 40 l +728 40 l +736 40 l +736 504 l +h + +\small {\tt 36.322}\\ +{\tt openair2/LAYER2/RLC} +\small {\tt user customizable scheduling module} + + + + +TX Precoding +\small\begin{itemize} +\item Spatio-temporal filtering for muli-cell (vCell) and multi-user transmission. Input and output are frequency-domain signals. +\item can be applied to Rel-10/11/12/13 physical channels and Rel-8 common channels +\begin{itemize} +\item UE-specific precoding (TM7-10) +\item vCell-specific precoding (PDCCH + TM1-6) for groups of UEs +\item PMCH vCells +\end{itemize} +\item Precoding applicable to +\begin{enumerate} +\item indoor DAS +\item outdoor co-localized arrays (e,g, Massive-MIMO) +\item outdoor CoMP +\end{enumerate} +\end{itemize} + +208 480 m +208 80 l +512 80 l +512 480 l +h + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +400 160 +480 192 +528 160 +400 160 +400 160 u + + +400 96 +448 128 +512 144 +576 96 +496 80 +400 96 +400 96 u + + +480 160 m +480 160 l + + +496 160 m +496 160 l + + +400 96 +448 128 +512 144 +576 96 +496 80 +400 96 +400 96 u + +\small UE +\small vCell +\small vCell +TX Precoding + + + + + +608 516 m +607 37 l +679 37 l +680 516 l +h + + +632 360 m +632 188 l +660 188 l +660 360 l +h + +TX Precoding (to RF device) + +208 480 m +208 80 l +512 80 l +512 480 l +h + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + +\tt eNB[0] +\tt eNB[1] +\tt eNB[CC\_max] + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +528 464 m +528 416 l +592 416 l +592 464 l +h + +\tiny\tt rf\_device[0] + +528 464 m +528 416 l +592 416 l +592 464 l +h + +\tiny\tt rf\_device[1] + +528 464 m +528 416 l +592 416 l +592 464 l +h + +\tiny\tt rf\_device[N-1] + +192 432 m +192 368 l +272 368 l +272 432 l +h + + +192 432 m +192 368 l +272 368 l +272 432 l +h + + +192 432 m +192 368 l +272 368 l +272 432 l +h + +\tiny\tt common signal precoding(vCell)\\ PBCH,PSS/SSS,PCFICH/PHICH/PDCCH\\ +PDSCH - TM1-6 +\tiny\tt UE-specific signal precoding(vCell)\\ +UE-RS,PDSCH - TM7-10 +\tiny\tt PMCH precoding + +145 413.44 m +192 384 l + + +145 413.44 m +192 288 l + + +145 413.44 m +192 192 l + + +145 349.44 m +192 384 l + + +145 349.44 m +191.982 288.048 l + + +145 349.44 m +191.982 192.084 l + + +145 157.44 m +192 384 l +192 384 l + + +145 157.44 m +191.982 288.048 l + + +145 157.44 m +191.982 192.084 l + + +400 384 m +449 447.637 l + + +400.059 384.077 m +449 431.796 l + + +400.059 384.077 m +449 383.637 l + + +400.059 384.077 m +449 367.763 l + + +400.059 384.077 m +449 143.57 l + + +400.059 384.077 m +449 127.637 l + + +400 288 m +449 383.637 l + + +400.001 288.002 m +449 367.763 l + + +400.001 288.002 m +449 143.57 l + + +400.001 288.002 m +449 127.637 l + + +400 192 m +449 447.637 l + + +400.001 288.002 m +449 447.637 l + + +400.001 288.002 m +448.966 431.763 l + + +400.001 192.005 m +449 367.763 l + + +400.001 192.005 m +449 143.57 l + + +400.001 192.005 m +449 127.637 l + +\tiny phy\_vars\_eNB.txdataF +\tiny phy\_vars\_eNB.txdata + +632 264.556 m +671.833 265 l + +\setstretch{.5}\tt\tiny do\_ofdm\_mod\_rt()\par 36.211 + + + + +TX Precoding (to IF device, NGFI\_IFv4p5) + +208 480 m +208 80 l +512 80 l +512 480 l +h + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + +\tt eNB[0] +\tt eNB[1] +\tt eNB[CC\_max] + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +528 464 m +528 416 l +592 416 l +592 464 l +h + +\tiny\tt if\_device[0] + +528 464 m +528 416 l +592 416 l +592 464 l +h + +\tiny\tt if\_device[1] + +528 464 m +528 416 l +592 416 l +592 464 l +h + +\tiny\tt if\_device[N-1] + +192 432 m +192 368 l +272 368 l +272 432 l +h + + +192 432 m +192 368 l +272 368 l +272 432 l +h + + +192 432 m +192 368 l +272 368 l +272 432 l +h + +\tiny\tt common signal precoding(vCell)\\ PBCH,PSS/SSS,PCFICH/PHICH/PDCCH\\ +PDSCH - TM1-6 +\tiny\tt UE-specific signal precoding(vCell)\\ +UE-RS,PDSCH - TM7-10 +\tiny\tt PMCH precoding + +145 413.44 m +192 384 l + + +145 413.44 m +192 288 l + + +145 413.44 m +192 192 l + + +145 349.44 m +192 384 l + + +145 349.44 m +191.982 288.048 l + + +145 349.44 m +191.982 192.084 l + + +145 157.44 m +192 384 l +192 384 l + + +145 157.44 m +191.982 288.048 l + + +145 157.44 m +191.982 192.084 l + + +400 384 m +449 447.637 l + + +400.059 384.077 m +449 431.796 l + + +400.059 384.077 m +449 383.637 l + + +400.059 384.077 m +449 367.763 l + + +400.059 384.077 m +449 143.57 l + + +400.059 384.077 m +449 127.637 l + + +400 288 m +449 383.637 l + + +400.001 288.002 m +449 367.763 l + + +400.001 288.002 m +449 143.57 l + + +400.001 288.002 m +449 127.637 l + + +400 192 m +449 447.637 l + + +400.001 288.002 m +449 447.637 l + + +400.001 288.002 m +448.966 431.763 l + + +400.001 192.005 m +449 367.763 l + + +400.001 192.005 m +449 143.57 l + + +400.001 192.005 m +449 127.637 l + + +448 544 m +448 544 l + + +432 544 m +432 544 l + + +624 432 m +672 432 l + + +624 432 m +672 432 l + + +624 432 m +672 432 l + +\tiny NGFI\_IFv4p5 +\tiny NGFI\_IFv4p5 +\tiny NGFI\_IFv4p5 + + diff --git a/targets/DOCS/oai_L1_L2_procedures.pdf b/targets/DOCS/oai_L1_L2_procedures.pdf index 369efc3b479b960c74e89b7e73e427a15cea8de9..28a4416e83a119a8950658dfe93969e8d5e2af6a 100755 GIT binary patch delta 285060 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 z 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 Q;*&0_)+dVCO51k*AA48tBLDyZ literal 1118156 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

pNXaJbVmkKJVxnwbgs&>%-fm{V=PYdh zp(I(GUI{^2K)1kYWaTd}37wQmky)mK_gAp2)7StR6aFlnt^!Djoy@>wm-mHO?D`q6 zcNWD%^}w=M#rC1Gw*A)OWV@kfCObWS@bvWHs`5vN&&N$3i}vX<59f zN&(({LDEe9?_j@MD&OB6-i*gN+MJ8;A>K7SXM%#sK2M_8zMa38M%*}ABHQ1Soi>6F zV<-^LHy~kP5IO1t>rzTiZeaIHAsaX{K7M<3bqu+Bou329$ndeTq3gd02uxxD$H|o6 zi7$_|rqUt(5;6n+vPV__E+oiMHOTrzG(_vaweEQ|)qmx;Mz&SFzAT=->?G)FGy6N| zHV6%1Ya695DQPdamO{|{$}f9fsSv0ki2NR2bjj>~a`umFBs(H_;N-{e?dGWqJnzt( z=i8t6k_|*Kb&)0!8hRAPhqOF2nMh}NUs}Djm{hr2byw;hKQZdL8nkEZv{F<#Q~vSu zbq4J)o3uf^0h!uA?RN1^a5K;FbW1{Il(|sZ@5WstN^39WxrRbYOj6c5ymFMi!<%aZ z^!0kGwixm@^Mv%osBGz#5HzaW>$$-nlTrWF?a&|AE2|>Z)wxz1JEmta1ljprF5;&4 zPpW@KY*$vAJ;WMOmie&>B0t`T_S-K$Axy70y_eZRQ{N)au35Eq?t zPX9v&OioV1!oqUdt)*sVot>V-k-|hnSwljRb`B2_(R*~B=APLp=k#q#_f5lZfnE*m zez9sSkeoJ8{vKGM>%qZcC36*UvfXv+1I03=z8N?-tpPT*aM+oIZJ8_Etl2w%RY!t~ znP499=A(XTlgOM3~fFQa8$rV^I3YMs$Z zE<07yoh^02?!s&1d$>?s14N4L;9g^mp!na~^ukeuM{i?WUvR5R#VP0{H7FFPyY};x zd>CH;3uN0l(x;N;)l0AK3vkiRMwt7+{3_jSmUH% zQ?q%=KvkkTgKFqE-nY$4M*i0gy3qFsvjKS_a==m0xAJ3o}vAGFgtS`|Mju<9Ed z12`f74HSNm$hLjHp5tZrKhRbHDyuK+rDBUN$MnaCy}=kcmJ`sazqeuB>D*>LA@ zOu19P04bXN7R|s_JoZ%&)rHR+%}zTKk-O;j_V)GFyGCPedAaQ8?~aa+IOR{v%Mgsp zPt@VEy9d_y*KWX=J|ghT{npLX9s1q=Xnb$oj|GSTAs#x(&8&{6nrOYk>&eBe;1Lr0 z&0XvA)zZHXd0d?wBd?JD3x3sNT9B%}$7`VO__5Bzkd+F#5$&JTV=GA|DCFU-vFl9g zMfgZxCxZ`rl}GIq&}NWKN_LdqC|2ALGY%1$V^BbUsK{{sh{;!~4wZ2N&6;}=p*3N1 z-;^)21I=sHDboMsgD-$7Tco3IC{$#;?#_+q_2#9D@(Ih|EA{~b8}TYPc9I-bnU$M9_W!0 zh+q}>dDD=i4xv`V;j$S4WYEwH1ww)gczk@^*w_dQL#i%rZ-4C#Muo`!enkJ*_d)@7 zJ132pz(g5*)ox9&o|kL}QsvMUCe+RH*kDBV>AzcE-UJo4_@br>vRGjF3%qQE4Uaup z2r%a#Fv;Mbc5}7zJPcC-Dr0;TNqBy%j`(5!3xv*t&Z5jB_F^?O6}pP(E5vk{=ps

@tr0 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%0ASU{V0vYcyBwu^$s3C57mL_ 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%0A6G*7Y(aa!MIG@`KA> zx!4zciMAN&aZfvI`^VtRasT{&K(qN0H3h4TZ8w0N|Ez#**By*^Uc7jtbnW=RzsxIW zE;p7{0=rCEclrA!qp6-tWs}=K3b$PbZX5dKiuH5JhTfs$)O8o+jQsty*YT2`9YK-* zu2u5TqpGZqlOG2eCYdHPvO($j@77J7IJx!tmVj5Lg8CvbvB&lbK5+Hz7sJ(d;m@_U z&Rwve?P&=$Fg7@_{iABMZ|nout4dnk#&>=CocHb3jo4RbVb5N@Ebv>iM8NLGwL4Br z&8W(}+}!acAp4}rMvHQ3*jTMiyf4MlYiiDTd7XG_Y7;a#=;fzS3F((_;7=vDov?wj~(6i3S0 zbES{3x3i-M2Y&Keu||qZ3-}xz4*bZ`)s@no@9gQ~yPCt*5puK*UEO`1z2X1vj=s)w zoSnQ@I&<{&r2hGPDZeKkcezqwGY9vtd}i@;_|=~WuZ|6{sjN`lv4b->@~cZXL|MNe6d-Ns)KVKsY zUwCvFh%bT zfZ_1*0DKM~42O5i0Vpn@UpxW@^RFWwf}%hYk3rEO z;X&XlgjMrb4T{gjLoNVjwc03x*<~jf=6!fG!w}06s28BOi3Za0D!JF&_D#3kD?o#Knl@ zgDx17@O!R6JTH9E<)1Z*mJYm&i}4D}pNjztf5XLy6@V@nvM>S{V^#pVV9>&NT#Q<@ zs#Mh+=pc&|KhP9!4~x93F-=7kHS5F^wpQhe6E+F6LoW zBTC|7SaW%x6~;B9C>{njmj_y5WFyMrVQ6!Kmnn>GL}3&LHy4|7eOBG3+aqzJS#pcR33fG0(u9oU*8&<<#&2(&Yx6@hjD zFGZjo7@H!{4p^oLv;${T1lj@G6oGbNZHhoUAe|!64!lhfXonvu0`0)u6oGblg(A=n z+)WW^hc{9L+JU_(0`2g36oGc&Z;C)W3_}rU2L`7Iw8N+rfp*|EtAHW$;wfT`ffwoW@W0D8l{*UAJj|mKXLt{+BVJKj^i}!J~#nKp) zJm7X3V-jt-G{z(kxShtBL|ZV8G06jNr!gkcmP}(z@_^fE%)n@irZEHafZG|&z-Y^6 zFaz^|+Zl{!w1qPm&phCE2ICoR=?um*54fGd42-sT1~V`ZxShdhM_WFF(ar;IXE554 z3BX{q^MKnKjCN!ZFc|GT;C2S19T^A=MmrC^&I4{|Fxrv%z+klVfZG|2 zc4SR380|dZb_Syz85ayjI}f;>A52RXW(`|foGT}K7nW8c0Pe;m^MCvXW(`|foGUSK7nW8c0Pe;m{dN2XW(`|foGUw zK7nW8c0R^4GV%Br&lGSwALAKWe0+>&3b>t*@r(>WKE^Wz+|I{%M)n{dP&&YV>V?0wRR)X=2Y)L-GGX>nv$9P7jB_HFN0&eGH zJR?h!kMT?axAQTck>Sb5c&32c`54d04&`G!Q^4&4jAvw)3NW52;C2DVGqO?z7|#@N zy8z=E8La}0X9~DofbooMSOI2l3b*&CU(0*rR(l;;RA+L47Tz-Xs{+XWcy$lw)V zv{S(C0*rQK{|YeLDd2ViMmsWx1sLrVaJvAb9a+Z$jCKmRU4YS!jAa2vI|bY>z-ULd zvjC%=0&W*zv?EhmfYD9?w+jfg!z%&;?ZE8<0`2fd0fBblb^(EQ_&WiCcHnjafp!>1 zK%gDCT|l56Mimff2W}S-Xon9G5NHQ(7Z7NN&lC`72W}S-Xa^Mp1loby1q9kbBLRVS z;C2Clc2H12pdGkfK%gD;6%c3#ZWj<}2lWL6+JW1J1lr+ggaq1w+l2($;o*b?+JW1J z1lr+Qg#_Ax+l2($;n9Tz+JW1J1lnOHgaq1w+l2($VPb>?+JW1J1lnPqgaq1w+l2($ zVcLWQ+JW1J1lnO1g#?~~+l2(4VN!(zo`Kti1fF4zg#?~~+l2(4VakOBo`Kti1fJm= z5E6I>ZWm%a)9{4|F`jAQb|J2xF24ZWm!pB41F1F-Zfri!dgUYbe5)q=DN-7?a3T6k!IYf!jrx zfsx}V!ic4T+eH|$$d43Z#L~d+B8*t%R*EoUY2bDdMlA9&MHsO(aJvX27CD_Fj941D zT|^)jMimi=1#TA+h=mUk5r_qD7ZHes&lC}e1#TA+hy@iy1Y&{PMFe6&BN2gE;C2y# zSWr+zAQre?L?9OQ6%mL9ZWj@V1@%P)Vu9O51Y+T7LbreWkuLljr+6w@fSu7imfIoBW) z<3W5~hk!lIAINxdq8Pgl0eqNHkg00Ks@-Jft697YytIAmi}>S|H=`U>^V(>jzMSXg(ef zb^?&GegHj?iSdwrczK`*2FS#CpdSFdXR|;d4UmcPKtK2b#jgWYLB{&QjsP+q512_WO~0LmZ}KKqkgR`r-9~;v^sw<01X<`appbkg=5uc#CS+QygnG%BS6OE!COJb=+>9@jx|@v3{^;fJ}^s^dr^>>>BWO6XPNMi1h*c2FQ3kcodNFc(8MTjP-*@ zgS-+R5B3g_v3~HVAQR&u{fPAej}9_19_U9TGg0gbWMVwfk4R{uU=+w$KeT@kNlg@; zg3K1y5A7dBViSd{K*su^{49~&MDZ(-v3_X(AQGG?panA45A7dBk`qO^K*su^{ewt! zqL3Hl*06qP{~(f`CH)(`C;M8XpV#X!dTq5XqMd7>y8$XGwLe-KGe6gC4H>xcFa zBJGLdXpr5*`l0=UNPMEe8pv2b@EbrT#zXoM>jOLopbKI=q#v<9z;^&yJRXY0fh-=6 zkM<8D0g8fikY5y!$4C1Ikpe~0I*^I+kbZc5pzs~Y;`!sF{ewt@qIe$2;`!sF{ewt^ zq5vPrSUK8Gk<7KZsN)3WtJ>p9k$9M7k5jM?uD)51t0d#QTwc1ir!7 z02x0I+CPY#Cm*~GknwnE{~)rSe6)WMX-^bm1sRWr_75WQiGr>m6XPNMF#n?{EXa6% z(EdRrKT%i~a^-k_(EdTBKT(_(Wc<8n|DXtbqy2*-@QwBl6fyYgOruCH$XGw{K0qeM z1O12$Dj)eDL<$wfdLdg+j0gH5@4jbzw0|IfUMz!tM3NOngF(jghxQL5&5FXqAQR&u z{Rn)c{e#G~^3nc5q*_q`8R`YFerW$7lC3DB3^LXa?H@$C6@{2V#`>ZCgGjidm@~*& zKeT@kDOVJP1{r_9X#XIRt|%%E6$@BDw0{t3R}`iO8S97k4+CPZoD~fD`jP*nNM^F0oPpu{VN88kSrK{s?FF%eQNAr(uiGrT6b=XU3&+_*D z^8%;|p+Z_mO9TuIyS^4BfL9kfdPB`9=g-GW>FE*Gu}I^8t&Zgbx&O!V*f^WpxoQ&! z*MGInt2nYX|E`mwfz3+6a~XANXPc#O;mr@R{v#LqGC8|nm$~Xl4DJl6dSllAP0Ee^ zTd!pP9{2s@^{fxl!X%?r*Ir0-%u|N+o@grn=*E@RTVyWx$tu-Tn(@%y0=}j*OUIOYwj!ACiXWEu)lMA zaok|#!QFe+<;}w;nD5{7cy~&*i*ok{uioxl&bEg`wu%N>Z1M3s+O+Ja+Z3fSE5}YM zUv{GV`{Ik;pIje(_&wCk(OG_URMO9JD;?I&ZPZUnkJ{U`mLFq3?9PtCZ7pkiTkSYe zF8yWWQG;zG)i0$EKG=7()c7+-#)m`Z8;q8Ap4lmUwBm$ki#6ZlVDjg}(73~^ypDzP z+|p#!?@l$l`B**LG;qzD%`FMrqiX|3S&y3_jxaJ z@;%5kzT?_#b)-sfNS`;Z!Z#91Yx0{0DHLdo9rC13QE5FLW0YDjLslhp-1X)(=amw# zV5*bH3J;kL+qr+L!_NgvDcx(#M_q&b$>ss|R~gBNDXKpz?t3O_RB|4(8*2q)7X*1J*ui-@O({9db*d>nH8sKwQ=Vx zRkNzkmcA&zARoEypyOq|an-&*8j!DQJ>>kg9M27FJ31xW!-wY9y&H73w5EI4 z=^1%f3xgk>44ODqCcen?mX(`iLP2z8;vNI79n?lU(<5=|!&<)D*1S>+S>&Q6>%V?9 zHzW4KNW1q(V^==#&X3qGFyIn~F8#`=(j@_q`c^wc)7dRr_l3W?7SKgXWf+?RxgvxZvRCJvklAoinF@jTl(mJ}`Iliml7K zR!$5Yoh6r>zpuu4=bPfwPli})oYn8Ve(=~}uNZCPyqFJpoHM@-ASHnXEPri*nvg)N`^%@bZ2 zCRb|tztu*`Ox9y=R@&(8=hpX z^-B6_c%s+D@J$sb%LiFyu6Mj<&%dT_IP`z*eoZ|B(6eyaNW;Jt=x z=32~2YHQ1z-NwjLW(os09?903q@W&Ops`amSs|;slQAzi=xcPk0#;M!(v4RiUpQfS zk<2FxceR!*Aj~GCy1IjOqu%w$8TE3UrZfH?2=!3qIc}Z5PyJe}V>a#5=W@*&iX8L%@57#*d6ZG^Qw_N|K=fAUHPZV%y zd-%IPc?&Lm>!a5lKSMPy)A9CE?tyQjvwd^#HSF(gGAj0wA@@me#)J69>c`Hn%uttAjk{CP9ln-;SeG6fG}o}|ARq`ydR8O6g$JPMV=4FE%JMCSP*$V7`e#j z!O%q>55_L|J484T^dN$P;Oh{fK+uW^1cIMKgaJWEA_xdR4iN$bjfnst_%}rO5A-L3 zf8g5?p+9&UBJc-(4H5Q(XCs1s;L{KxKX_6i;0OK;5$=QMCW3ts3nM~(XbBUMKFDf8 ze}dRCLra>7^FdAtMDZ#>OPq-EK}H8e@j5_Do`~^5J_SVaNo`a2wj9h-e!ZSe*#Ap)HGuwQ+&hiBKEb!iY#47nq$0w6VPn(4QdYI<~ig?QOtd z06U!RZRl|>cx-P2+uP6s2DZ0>?QIbAB-`7-_BLQJKK{y)Krn0>aV!W`u4Uicl z(vS?>+W_-{(>v(+3bwZar!pB-n@S`z+1>_};m5VD4BOj)DjvkCMz*&B_Fp0+%Jw!u zeFfXwAhti)-Ue77Y;S|uKIi{m?QP&{afQ^MqBJcyE&)y!qWD^9^Z3)|Afo=aK8HUk z*`9*Zo>RanNL~LIeGYeHpwHpLSBte3Aqy9tK-|@nRZ`(Us+wSC@`>}Y0IvCCYkC>zT9UP*(GlM-u>eF zlk3}#;(y&!YHj)u<&#mXnQt!Jrj%?mymI<}`}x!% zE8pcRPuSmX?zJbTx0Qm;mwwWl=elndd>xk(ZBcPxvzl(|`E@Sad(W_~9CSW@*wV)5 zH*2E$hCNX*KfiOF#DI4S7EILYoS1=D3XkdM51&7Zf3#q9_suOKD%$fDre|K%dw6oo zW~);pwx(_-jJ|wK%~8XV^<57n97h;hHADyWz3I?4 z#4n&^{2yGmS8mx9{{3?KvU9u)%gTsBqmLyFuG!dZIr;JZen_qP-Rp=Y3B44lZviOF*+-1K#ox59J?#=D`92{+(Lf?Hh@qp;A-awb6 zs}r3UmtGnvkwUlDOdOr{J$<>AHVt3Tw|+-^pZ}(oyLszCD?O2G{BC`l;@7EK?{toZ zxb5Ar^e8uB+MWXo-tYHJkDBMuI?|=}!tmD446Cp^j`J7f%(eJ@{ffc)A{F~WFM}lG zNUN|HNh8!|6mDIeUM?6qD0<3SXUh)is?NT^f)fR?y8HdwmVRrU@_4lR7XQzS7bo&& zY|vk{zWT$?H^Cai-9~$GK8y%zv_82r-pFiB;+}C5V}vSa)+xrQ9#<6dca7RMj=NN2 zYEDNU_pyI>ba{KLtWC*Tv-_o$x6(CR%iE`piG-}Tk}to8@frp+cYOND&rpfM6L zdQ|{7jp36|3}{z5`eUu>BN!`mJ7_aH-}l?9ADw)7?c-9(BX>fdlnk5`*EX&1t*?EHg;92g(-Pm-er@uZ5u5sR znbX-4%Y)-GZiPLk+DFiF&bvnnz7DsX5dV9Q@2Yh?X7?XE0{*GHVLJl;UT^@_CSn^B>QiwIHdLqL=pWRk z;?N&Dy-yrBg}PK+fBom=zMjMj)TH7HYp6)Y1*wpZ!1dKojY^b4u^j;@D$+BBY)3%P zOrTC_3`e#jpl4p#j)0z-U^@cXjsU!qLAMrhum>C>0XG(iX%)_Z08#8J!x0W3;vEe- zwunPLP*W6frU%3r;Kl+x6i_sAq6eHl03sd=nofxGJfQaak-hCeJR8s=$=-G#o(<^sVsAU> znGN=~1NOE9vAM}?0);3s?A0i5~7-gY2fA8bbebj+|F0pc7Dx>%FF?EoL#$DsX#IR1>i?EpGv zh!fG++YX>(hBzV(U6{&t1Q4gav$q`p9&nWv+Y!Ka1i-1SVsG{TY)1fJ3;ODSC!h}i zoj(aT;%dR+tp80v0Ghl1S3dw0kNoF;fF-wM#s~(Vzh~W&6sodklS3#c{OQjjy$cNU zA}^IRezjk0k`R>Xa!O~pnRTR`jY{O2X&o8L9rs>^E8l+oJG}7VUjKl8Dv2gKA?JrE zC&q^KT7L8L`5Aj&xO5Irw=11-A@O;T|K@YWE(@xSF3-*n>GO1BSdElO`oW9xspuW` zXJh%1UW07p+os8eei=XV0Pp7ncRz!(kFHG*(Qw~g(DmVcL)x$dfi2Rq1#f=+nsqZJ zIsN;EehLl!FKjM*el35K+Prvs{+QtoM#V~!UXr@oS6dt&Ejz8f{^ze&hx|;ZC-0eE z87}+p1*~s8JIc;$On1vg%a{OvtsUi_^owy-?jc%g(nGem#?2EjfE^Qshyg{@F+M>R}1J zM(HKZ{@EvAw&JQ(ifaBC8llm<- z&&-j_@%fc?^U9e}n~o==wx0Z&vG+TDN2^O%!_kvgu81(2?ax)-QzLt;E5WSdoNtk4 za;v-91K)&u7k0Vsuju^jI#qpKf%*;iq3w6ZhuAgQZ#lep&YXjtlNw*`&9xoAx|a4H zzFQ-q@4)F$Cbw<$olPfA4uybJhER{^>D~5pNT`~P!ZJ!8z;>=^2^~!gmvMI6_R)J)s2nJ z7uKdKP@aPuqB`QUoeJIUCrOoL{1Ga3Ks z6Airgwp>X~&s(Zw`JwZw#*tHrPR-o*!LC**3nw3Nofds8u2y;NhclaU6z?y3Fg5d} z(}R{Lrpioo47I4v|NWrIlcqIE4>Rl*SqvDXWvC=kV8P5Y88~oF;eaR$vu0n7W7-x& zuKJixcq~8to=@x0x`L@U&W5%)Onm94a>GX7Up>}zhRrRTMJ6RJ&7)hbHjYU9x^PO| z$9E?SM#_2e6+^x?S=8}Xie@zVUKDu+%9UMMTC2(b77@oCa?7CgUb#zli)mZA)C1dv zherIe^sm%R$&Shxm7SMTP^LY>e@Dyk<33NWr!r55?VES=%T`&Rl38aTJqeR8PUXFA zHYgi0YlI`mQUAqg(aNPZ6X&*;(_NLbRh}BC`kt70vE61^!O33zUB-V`SfVdK>UgRJ zGvR5eQ!7s*MB4{eN@4eANY?lTCP~OZNQ8ggOyu-Pb6MC@=8JeZNvxp$lFn^zm+OO@|R33 zAl_2R`R9N^H$Qb6(y_f-W0i?NLwI$ z)_Z?GRp(QveqoxcgT&ft;h#5;{eJ6ht#VWHW`}utk7h1BGCgKUYQrZ@=XuRX=Em_mb0g|!CcUkSFP>M|?^9b` zje+Z!hLwjDS4{Ne=B-Ig=_k1Q^;M-#svV`4G3yDPSA0rKFClrXO3@^Bqp|_*=^1yo z4s1`z(;Hh6_G!iPKfjW2Op<(C?p9V*HX-chyTU0ldY_8=f6B_(pL3zc>|(=_hrjxc z4Ck$}PB{C!Umx{o`F~r}PZ1>iKb-Ra&xzb@O+Q=H-;<|dPx|b=Uf5IqJ=jzJ*;D?-i3)V_30u?O!w#tJiXz$qp%aU^(i2_GLfq)dg%jn73q4V` zgSgL=3-_}S*Lk9gTZr2{xo{#7ahWH&$b~)SU;Hh=r7i3!|2?yTF1jJ^(d5AmF2psO z=;9mV7EK=9;6hxYi7vt+?$G4H4K6)bXlfgJpo?*6d}$C5Zg8RTJuB#<92z&Z@}NhS z#uf#-IEN-1TR|(LwG}#LX?%4M4|-*3e9sEHSck@!2l1d^md5w2po?~Be0>lPdS+>S z&kDMDhsGBO@!$p*8sc2yOSV8OeC`$xZg4@FdGV`IJ&!NI;=v6r488#iUDU(iE3kNQ zgA0T2z(N=IFu1FV2R1i@yQ)woi@{x0JU9;yosrk`xp2}I1J5iLK`Y!2L z!`Aepo7a1w!q)Vod%$~UgRSXDw_5+54YsDAt?9>LfL>g<<64Xj=*1P_Y#0T-xB`49 z9J=*hfG;(q;1)#zz7vju9|ibYLkj9X1^7-l3SJT5iw!Bb!9{=%)u7;w0&G81aF?P0 zpJYJ6-wE*18tC9E0X|%Vf?)*scnu2fQ$&|}_n;j{6<}M1f*TbD*j7PCx&YfM6xi(o zY^xxfU4U&B3hZ_PwpEY`FTl161$Mgt+bYPS7hqe30=r#+Z53qT3$U$1LDWTn*&EsW z0&J^LaJ!-a+bYQX7hqe3g8LPP*j7Q_0DH>6_}gbs`4?h5v#0#Cr~Hd6k7?j`5oTZ- zcwK}UmW@HT@9n{~OXk$CJQa@8S>#pRMU< zYx-%Naze3Q_LP4d#r(fr(+>wNa=BUpE+i}k6s;wM5amBr{q+BO%0G$|{A*P|7Y=>= z&sF`_w__UlgU^5cQ`K)SH{KqV^>-?ctQok~wclQope>Q7)y{aVKNEWS&L!sy2JtN~ zx_ukFF9eF(-*unszf5>8HgU)Ig@t=WabBVii5A8n<_CC~SkEhtmUo_GDZLXG=m)u+40G`~4< z;8%#+r-G}7d!~mA^%LT|zUO~mp{@1eMz_nCk^-k~Zx!mlp8N47cACNZi@zVNG})_J z5i{n-!G-c#`t-*8gVg6NxFNT5(@(ttn`fV`-YZ9+R9_tOmVT-6TUE<&+PIf1rjBfn zqH_dCo6b-6I22c{ki0GSTHIRYfl@E~`Z~Qn`s#yXSpg?S;9I-@$JWBw2PVUfE*iSs zd~)@E$1J6g>Wt?VR@)!s?)82!dX)q(dyL7ptf8}|+%iXGcYbcQ{VtzVaP0k#GWGiY zMUVT3?H;pkjr#U(9g~xz-+RmM-6pg9z;GC?DUbkuZrr{-PWi)q27i?M*nqnw3v2lnKcMW}bit*zsM~?r&ej(dqC(YrV=!ouA3umsn8N)0?8V zb)4!G?BZwoG%Kl{xl@(CZI<`@(c3$9Ogxt?ZF-Y%Z_VKg3;IuYP1A6_F|)}#e6*SG z00l{=EW*}$z|`K~_kEmP@`f9oTtc zK!J_nTcyqG8{fHYp_hNXbbCXs)ULAAa_(D)*$2p_k6NiY;_J|mK%H+I8~oRY^*Q`( zgNwSI{+(U9>!XW?8}^^#<-FT{dR1?m-Zj^@FO1i04ciy9R1`T!s@G%gT*^_hP4UQ! z`fFMj`q9ZLiP!h~%pI2eF4-tjvLb!|0T-9ul`lf3%y3Usmu~Po>@z&Xf9>{R_9;#d zyd}e~cYVGksdeX-&tt!YkSU{UmP}v8*}t_w7~O@1^qn6+)~&+JI-b9gH0pl zH#iTv(>5z2G^i?Wkk-+H#kS>I#)+jd2Q2hA+}X6*_0a0K)(-JEEp^8$h8i`_IZd53 z%{u0JOi`)4W827ad-#4U6l>=$(>{8UuQ0t|fl9}_jUT4?+pO4JZXZuO91ZF$extkc zg6*M+-N(N8mY^~3~t=@Xs+GxUs&PN6xmJiPxLRIIB)bExQ&EKZ@sk@)vs1lifTMy3= z^z}d0!~Y3|vi0z6J$#R0&DO*B%miBx-!l_zJ$%nhK=v9H@BMW`*?M@k9-e0F;l)8r zwjLe|;Kd;-wjQ2C;d&k})DTg)o`)-dx@BBH%!QI78rKhV;kFVYn8RhyxJShYe|H^p z7cz}&%-A#T*?M>}1GDw;aHzeQf!QV3Yy2(!?X49J(~yxy-sXBym&UC*GYh_ z5p)xi09zvz^g0P}Y6)G;1gQl4w@|l?yP42EO#rO;BF=g8Zrd9n~8#6Cjste zq9Ca$fF7-$vTev|3h*6K6l6aIpqcnp&s<+Tu(qjngY%*62BSB+adFTMbHW- zQz^(332-izJ>#COhZkF$6nn_vkIi!iY;i6WaQ1AS>>2lLJv^LgFZSlxGwxx1u=Vg_Yl;!E_3&JD2=m`)2OnZ6 zAdB5nwjLhtfItzUp7~+x;Zgm&IKst;vlZAg?s3qPt%rvaaQ2LQjvW`BaSzQzlt>GD zRJo7@V6?18xhrVYHaXg~mWNV|$~?(!&} zaHs2%Vee-3nWh?QdU93e?zthS4da?pnit&(KYM6g9M8@+ye{g!xv_rIb{X%mVWm=0 zrc_~*DR+B%tbLJ1s_7+nS8j%+$nc}Gk^KD=mufm0JI`x#@6Ju|h&F!fbImsUV96tw z(|7Wx-Yihpxu@vKeHjFl*j_HAIkH zU3oJ^CP1`2;r)fKLg$TV7wH{4bZdkEkFJ+9?MAzf>Rw$U72madPOS4+nRB}iOZ)qO z`<$8V(DCbF_q?*ZR}QPDp4Hv_+b#Iv+XpAD60W)`k2!jC$TXVPwaiO>#(n5IGQ{lN zg~{u_?hEm9TA&oiKPhE$>r>IDan{eAn`S>NiFsrdy766cCG&pW#N%zoD{^-(y1H;* zK~8Q)+{ZqPZtrfJJ~ny=qj7N_Cq=W&(xLRsm21VrJrBxN$yoY`sKQ~b2_~iUD$c% z@sM$wuSA58S4a+iIm_5_z|QdWCQ;G1?Rzg=c5_lZo^1cSx7y6bynkCSEg<0iKh;bB z*>KrhoQaLk@1bnHG+Qr?>p|IiX|`UPt(Ru&rF%>T271oe z^TY9ZAq?Cs#MVm_>jRENVe6%d^Yz(!X;dFA&VjJ?(y%^IFTS`wnyr_HdT6ot!T(dO z!`4fS@d0$-9l8acOL{IZ2Mw(!1Hn>l2{m!ixc+JmlU>is^u`S!}n%x;I7 z)0dr}5S2M5WN6r$tYFiuUMEL=>@T}Z;qxZ{MX?so4i-xKOWxb%cF?6lr7{20;F5U% z*HdOIdEJvq9(}4l_Ns=?4@1S1(UI@xnor*oGUiUax7tM2-4QE!b5|y=DTy9DH|U4S(t|^|Y~>9^X23M|CW!*Six}wtGXF_M2DXhZje6@>j0+ zx))U{Ioj^-+Qws|3HNVkl;0IZsCq2mUzut&c-=y1V=Fi>z}?j5Z}_ zdki$nO~2RPp;8@Pb@N5uzUgLXwTY@#NteDt$$eqV7(@yw*eSK&Rzhd{>0P9hbboor1>q)-D zCcKuoed6?9@6Se(j*nNI%0KPe8kOUA%yEX#$I!L66V+|2)JI)WKC5i{GHv;GtEZy{ z3)cSr*t%$X=^)E3zd!zxUis;R*$i!m-RqtlELJ*H_H^02bsN*Z|G4{DJ@QN)V=kAs z$~EoF<2vuANm2&Z)p>`kX56}1pWtF|YLhZ3z*nF#+1b;2>FQ-WqZdq+e5=x#v*eeg zN35iDf_;$soECxX=891Pb2bm1HR3|I<rVMQil35m1eGuvGT6x`WnmM8TWf4N>|R{2AD^!OX`2<_q{1bbM=oMXlUQ< zlsNgENZwHH(9@=`_vg#m>rOu6K69+}%DxgecD#J$8F>BfoKKG7Auj2|BM!KoYObXs zsQZVElOnq3znm|3?^@>1kNr}s`zsg3s4OY36t3AnZRZ8PY|NMiS{G%4J1x_Il^sx_;XMr4$jSk)~~c3tI@(YGOGah<`<(e(EvcY=)e zOqPtzUl-$AE=MU%K7Q`qg-x!uojpSI4uxq_s5?@dh}pX}7LH8O8L zKGtQB=7;*jF8h>xPq{3i>Q?D5@OaQAI;Lzf_^nRbxYVEZhIfROHxuttn`$-vuj>c| zg@F=}Ci@9D>nB`!9DY9d-6EHJ4|eer1i!9bt2gcLJ$Y_u$G@!<7ZGdxf2tJ!)2hZ+ zinEpCJthWQDc&;^Y^8Y5Ot6*WJu|^pinEpCP#P}Im2%?yA zdd$E)U?UncFpmpW^_YQqKu$DfU><}xXw1MoIK`C449w$EAc`572i#8Mvpjgf?F?pM z9&kH@8JGv$&R_=S0k<=lfqB5~3}#?-f((NhmUTUdw~KJG6AgB|2-_Pp*zF?t)nB`v2D@DZ|B6KhL}DmD zh++?jhM0^9dyB}A6yaO4X^6>)a9=TUD@C}kn1+~)2%iOy`jJKWWCxlCt)RWKM-3Q8 zggY&18nnVU)1Yo;5reg&K`S6f@!x`0xVDL{6lW{N3G@r0l1YbvKX~jQWBd!DQc{Ol z0N}!djIkz!N*5hs34l)zG6pVK^C08#z{v+0FDMb5tf)gQ1MvE}I>b5Z=!^Ga98KLz0&%|E`E0N%mZ(ScI% zS>C>XE5$WMjFu37|6i7h|FQZ1rBs{`5Aq*N#pA4Q#yr%KDQ%v-`Spv__RqZgUk!PX z+STV_xYA+%j?rpCDFu7mWvx>W>NPt5bg-;FC7ic;r0r(AASu^->fL%dnEnT!%wASD^uyJHY3+*s$SbN}r@`Rghc-q-Ttd~Mx7emT8=zWP|5edo8& zvvs)oW23%O+-H93^T&41M;F*s)l|;#aDOKoYQA{WkdTJYwX+9v-$ukub&fcuTrt4# zMaY_h^2E%3&nhFv)H})eD|%b5dMH$VPbWz*(QBkBY8M(}w6QpIn+hr^x-o6Zr`$b?45GS(vGI<=px{ zc@tN-45`STwKnc*XSSiHy!;BE8{FK?^jRJram}6azqYqOxp^>6diYP7{FIYYyggH| zhz<_f9qAtxKP+?Bq7$>HTCUlSi!)F0c2!o>tsu9x(B-Zsn^D;kT30 z+so`TEw^jSR+>6K*}*@O;_RZo!bBn3epA`+^sJ$d2}z&BE{=E3G?Z`=jdtyvGG6uW zA?KCp{(8!l6Z>i}c+?#FtYqKJl%Xo-hQfxX)+>d@7q~_N{@=fwyebYl7qm=g_0I>3 zKWBBPJv*)Q<(jY0vym7JQjYovQ-f~}G6nF+9zP(jz|{=Nq6 ziwd-QBpyiOfFjsOr~s?yH7K*ii5IYqh|mF8M#Pm|U>BhRs-C|CU2xDDVzQ_}>hEh@ z2+8tr#F+~bSspeRxe$=$;dnE|ra=_z1EFOQiJ?Fv9BhWbE_<3bo-4LSnyrx*FFFS5 z$+26+1rLbAUJ<(L2bEv+tWfZWDC`q)`B3GKT_P_0NMVnN3lUWcCserb3K1{hfiuCWR{it#BfR3ppAJ=TW!<&5H`?tvK(QfxHN@bMtS#@0xSCx@+(X0W}%gXkwZd+9Ghp_@Ax zoZIHXt%3{=O|hqGa~RCPJm7W)Gcb>>k!EY8d)5)^nL~l}zsriPk!EY8F&MxXWKYu; zFAXr#1=v=hz-|{{`x)8n0&G81V7Cjf{fta_0k)qhu-gULenu9(0Nc+L*zE$$-pIfg zVD_fKZWrJpBxLUkaE%28+%CZVT*&+v;C?O&>~7Yr)gk$2m=%2 zA^mWOnie4aaF81HEQ5^46C(X^jT>rWhBz`FkFAl0`M?1^wniG^53dgfEZZ*9Qa8<-#w-<3YbW$ap+}GRVYuus+~;XZ(K9 zkBip_13mBX=frqOKfFE|=z0ekj|b2P8IOnZsOS`wzy20mBaP+{$GaI+zdPXd`34}HJbY)5yjfsDTo27SNSaAzP;4>HCJ z#PUJLJe-MdI2JIh2s*^$c2a)V# zP>mar?qpDn8mar@nleq8Y9n}LkKUsU5pq&?BCbZ`O^ z{(e!78;U;m;1Sih@oo84t&!Hzf-of13jG&nY5y@`{-r=# z2wUBMQ6PQWvz{YU|6}r!jkDzCm7blp9A$I#)~LlcYR7Z!PGvoO{-M|PBK3$_F1TT|fQsU)N{E&ggE1lh-_YKek=>;q>_( zvE$-TdcBqVTs=v?-uCe+sZDNjIz`p%bGANH=pUZ5-hOhSdG^A%C6<%b9ilC*j!U(s zKRTOjS!tKHYk_UfZQK5(jFh_7qp5DL5wq``{dC*C!TM8C#5wK6(+-=vMa$`=Ss{H5 zl-rLlug+T7Uvw=bYDVDQ-aiAg<<`k;RXMQt)86qr z;|DR{hPBj0QmVV|&R=T8Nj$XtXRk&J-?72TrWQr2yG$)5R2Qb~jha_0ud#ZNN@AAV zwaOb0XN{WoTQ_^Nrv1hp?xUvZw@TR@=2<+~&Hl>prgkk~dQjq#cgQQFZ8PnU&ksvq zc<^T8nso||y&t{l=v|{=K6Un~3BDVa%evX!dXbryb9RG&`S_#97v5O(CC1})FsHIk zb;!5va_bdk{vY<V>;Kmzlt_u9C>3S=%pXJpO(;X5Qi;e+hKeSdOR3Bhh00XO zOf*MkMU$a4&|pXiW&Evo=X~D#{k`sU-PirQANQa8bgpw*VYlt}xYl#MR=2qI_<25w zU3?j=Qx8R!<$RVsJfm_<_mEx6GQV-tt-3wiSCtoBF=J?Cs-()m=Z!8h^fhoVzsUocE!DsZGL**WC12@HM+|S+Z%L z>iyMf<~eJlevVC?kv!_7Gyg{N?E{|s$83G+|D|+`JH6BH)~jUItE!6Pdrg%r)!#b3 z=~R3seI|Iig85_jotI`l4cmB7>7n)8S!bo<)%D)r+L|=;bwiw1Qu?+J#n!um7YJwV z3pn!g=z+`8T=h9!_h;3X>}Be7`(Atf{Pk@{=2few#dkN&mhL%x!RX@8%|Ev9pQUGU z|3RkcS83)*BLBC=hkoW+ME>}>_=w&lzk};j(k&Mi=5UXx`PJlI`!qgB>g3d?Y~9^* z7hO)%&TC!tJ^poS$n zgp~IrJO`<-NwCPbDdCDhFG<1?f!>jX8v=P*2qy&cu@Ei@c_7Q#W)2~qx* zgP;=z_)|EDIblFdkAsjC28gP15OKnQ++Gd>P8d)OfrEGx2KeteD4fm!QB@9_?F?{L za1e~e08v#AN*rc@>w<$ahZ!KMN`wRc-c_(*HWtiAlL5ovT;#rEU>F?3;Jkg33HvJ+ z%qB+z!{F*D9S6hU7zW3J+2li&g$1(#{zcbw41+^NkrJlFFgV0wY3TT15z$y0C0T-q z$I{V*l|@8k>FCAEB4V<1^kiib$wYMYW@Qn{M0E6MWf93lbo6Rv5y?b^L&h@yGL!Z0|D2MXe27@U}Y zDA^gq;IMuPPt)J)6T{%Jzfc6QFbqy`MQH!WFgS+6|A&IvY!x<}$o1v%;E;j|g4#w_ z9=5JtvVRV6A#H70TUQ%kM}=sA6%^)Sqz1OGc3$>>)G+=t4{l!W+Nd_Ua8S|f`|_zt z{n^UJ(-&71e^+g&MMN7P1`qD^<&0CE%kzmWmc@|pTzlpzZa58*PdlpqHI^T zd8W*?U4MUIx2xpqxf+4ck#1k38_&wt+8*=XUi3IzeCPD5zUOVy_LfiEtXLG7{kil( z;JW70l9RDo`mdyC${DhqCBx(`&bRx?7wEm)XH=S)ZB%pgjZ9POPc@l@2A};VtFCwa zIQ#3@2d|AGUd0Jt-=&T_U@P4aIWw@}mF#kv&G!154!TiSQ!c(1&~6r2fX`WMm!n(A zwY>Lwz3J4j{VP5CJWl(DUyIIcRhU^j_q)HT^Lgt<>+~7(TsjVz#U+QjyQ-fn$$OR5 zKe?Uh#@?d!^Gchj#p?yl52`2K4PG~E!YdYC^Nhg{>6vfVj%Q6ic1V)%pyXcpgwi*` zUGa>$Z9M{h>vl_z4e-_;FDYKvJvAw=v{-Um%B`$zE8nQ+3R?)QZ$2_di@BHcb%oWb zpXU=h+p_vkWnNpW{e9n9sq2D^jy=h7SeQ1h`_5L$=p(Xn^&xy~5_Y<-I%?o08SG@B znh;U1VKaMq)tyrbh7w&vRX?j9*XA}|{CL23B%K>ut6Y@a9)4xR^4uBUu9o%h%kgz& zWghsQar5nlk?-F>tE@kzb0&Vt@Ky7w1n=0S?N4jNIu8BrSZ{iW`^q$8?fq>}^)%k! zI`_UHm*!ZhtXg@u(&a0s=y_6fGY3qcQ9B@vjLh=RZ+Xo;SDHVQRH*O8mbwuu=Pe{Gns zBgL<;_sdwVUi-xB^E?BLmodd7oo-#b7)Tmxi8+K zWNnW`fY!{<|Hx*u;9%!1s(;63|9MPfHXF0qyh|Wvvw0(d*=*iOU^bgK5}3`#Lfrsk zlP+k?X3JusZrnc4<=0zpGIL4LY{_& z=sr5|dn^VWCt;Iuu36Y&JQtkTFR_ zu6W~&*=#mtKEqXuO_|Ri&%~z8XQ0&Cl=+O=Y&J^LWvIbep)6g@W&>YMt}@JKV>TO2 z2DrC#P+mGwO$Q5g^Ufops1Fz2RTvP|;i9_=QR9b;?kWr*F1YBfLX`aBqPq$M#FMya zZzn1Manat+fW4iI_I9Em5Et$34A|Sb=&nN42jZf;3Ik;Kxah7zyh6C>Ho^eWJubS9 zFhG5Xi*6$fklf>qMeg1tv>Nj7+|!KSoF z^bZ9>+3-XJ8}*My^bcNXy#ByL0@!QRKPc4+Hfj$Zk(kX!?_D;*;b1l!%^%|Yz-%^J zFU0wQ*=)4m5QQEn@m4I<{l^{l4?^84u&WRiM>uLK40WR1AA?Q&7RYupRk#f1e~W1o z!_6Z~Nlg1ct9CPtewe6jEcv*2qgqX-ks99$Q5SowSi4<2ZtZY%yk+NX6Mr%4W=v<8 zle6=!_d(U-r&HhPRyRIrG_ z2YxOlal@_GeMDHak1p@UE* z3+03pwH8@O5`+#yl^Ap-hYo|Tgk}qGB4N;#jbJD`z)%=;<;@KSgfrNv6b%FR8#by% z!+>B08-XVb*nTkRN)8?D?QFDrGhlDWpes2zScI5^f`SYTx^mH7g@HwgG3d(MC@|;> zs>9@41B(#LV$hXb8gOsNpes2VM4(v>r5-SeiqL8(_keh@gN>FFq&0v|2C9iCJlN!` zhzW@eG&Pi+K)mU}CcOYmNNoTcwFi%Uuu*%E+yFLe4_^H=HB|qR3F!@BqxQgE12&~S zqJQY>P51@CrnE=&4_&?qM*-NB_K5x=P>JvyfKB#~MSx0b2vj0m2{biyCt(qwk{WWL z5WWSl$^Nk*jSXx{dqn@xtCFQg^ba{v2=4>fWdB%dME{T*g~+=F8?{G(N@~cFLL}nS z)Q~5IMSx0b$dy85=7Np-hee1n=t`-Sia}RcA2iDPz@RIDjVN;sgRZbYW6+g6Kd=Zf z23=_kbU$Ka(3JpN$@?1{gRTVFO5Ru57$8;!<+6u>k)4*Pi>Mr_N93iutV3JGf^5VBzz=>Q95K{BuX=Y?;v4kb6qpWWKwcPFYXi zJHhtQsqPI8kA2dZJx5I>?rM#^8yWc4b%P;)`Y4}Fj!e^>>GN!El&*4^dfI;auHEi4 z+5&RQ4rIn;nNFJ7H0SD@=QHY#+WpR&HSMZ)-RBld!>OxMvTjtKj2S=ao#u(c#2CgL zYunkX3NA1GM3*|x@~s)2ZkuWB=6la=>1dzpIp_N$1rZ_ba)*K})@2;Mzg%(Rp?ck> zh2K}vrn6&hg8O=NhAs(bbWSwhB5$#&#koW(&dC3B(Xg?P$0R+A-e%>PlPPnb>>rY1 z$ro6ha%nzjrste-AVD&1hxw1G#cn6fL+-Rb`FA@Vm0ean(tsQC?4i@I8MLR6%G5_#U{>tG}&y6LK*59tbuy@c_IPooOxa)xWz^v6z z8$2#{zi#-X7=O5_EX(6_{qzscFC;g3Rmw@Y*XZ9GUNConej@D2>VrZ^|BIEw`<| z;O_t7`ULY=KF2F9o~%E*s(0NgJJGoOo37^{x-NSmxBA_z!r0mPk7{E-+fWqGL|z!{k$L*1{L$Ze-Zz9&(iFnAkk7NT768;k(`AFa~pRgl3zBfOZJk8T+b|l>SemVd;*y|$wI?Ro?qjZRg8aP5GQi&^|FdFr+@Q_ zPPumB&H9mu)gNv+Ny^)gw^rTht>i4YAaQRtztwE>^ui&(MWQk34H36$XeSOiMf;yV zbxz|_me$#CSI-)Z-!g5hb-YLAKH2%DUm{~3gbJu{eLps@a(ZxX$J!rn!)4_a=0}{~Qgo<@ z*#2rw;W>VVBfDeHym#Lqlp2|#)>A7cB{U(_nHg2Nb7f+Y?Hpn! zC$n(AoM-HgalzB&B=qWQl){DLkG^@?Fy-UBTX!^*80wGaNlHf5*O=|`4}7J&{GsG0 z|Bo%nDSEbhTAvx!o=*ua2-cgBppmA0ce_-J$Cl%s=KCZom!*0aoXM5)(bVexe(mf# z+H5@q?)3bs)N;E~rm^<>dFyjI!DrvJ9@Ci-64RM?I?!m9M7~H~;zrFwA#ImGhdj1V z-Rqi{*u7V-6O6BgL3%2BLK;oSZuQuyXsj>X*Rmnk=x(3Go1J@fA9BuDynHFLtU@`g zU|$F0=$q(i@)OU=^&DxtdZzz+%;o7`Y2p>%BgB6WyqJCJj92w+smmSysoS1;@4eA@J>)=22zSe3+gG10Egrmc z++-{qcRRV#ab`r#?=^RdBPNb~YC> zZ=DCNh027jrCN$BjMIyl_AY$^gD!K_bB(P&uc~q_^|{mXx$v_5SedT zeG7d0xl#)Z3o<*KeMx)gSVc-}<4;RO6M|l2B`}X;ta(qGk)YRL-1LWiL%{xoD_UIbn3% zGWRon|ClPGPC42CU8=|*-zQEL!KorVpFd6&;f(}N72%BpP8H#e1Wpx!_?9dkh1?)K z1t#gifansKq{9z_M_`igc^br{=qTJqgK!k3WE)6`fQg!dU=&3ZfCjNBiY5RJLQxb+ z0Fc{|r6>Z>XwWMZXQKg%NYMiTmpz!MSAY{!)BvC=A0&g2NHF-b!9=|R(O|&d&PKa8 zP8ET45ArI`fO|U|(P>1EG8@4+47j(mQKBCMr;2b8smXw=2M2+g44f*0Q$@%<2cE(> zRfHT3*imq*2yZlSst8UMAs?PhNb$z0BIMG*sUm6!^(C|%Ak~AstKn1;oGJp|f6`k- zRCNQJ+)G&Cp@(n)IbVn}Z(x&tb{5?A!6tpHMBO*AQG0OP2OG5q*L{d5p!UE|4>oEK z68^xZv{X@P*7L({7axSun zXe$kQ7g;Q#f5^Sag04VR2ero{`iDY1Ea)28sDCV?e<;Yqg06y%eqI*QKNRL+LD#`X zKQH+5!A9-Dj{-LOdD%q&D5+HNqd{B=^^Z;T4?R{{@T1~X5z6|2>Pa|Ngt9(}R6|Pi z6KkTw`lX}ugH4l{2=NAk~Yjg20A~8 z!izKpIzQON`N2Tv2T_R;Y)X63KL$EKh|-K;llu!Bq@!SaNBx7N0BqDhhzNj<+9S>n z23j9j6P*}8wEyE&5tx5CRRpaU;{3p=B7f~S+S)?0vhW|(b+$GRRx8}RWi4ct|J*JA zt0uZKolR2#Scay;BJdwXd^8O`Hgv0vJSt3+DbcQkLp$nuq zUAJ?zvEFf=Cxq@0LkOV@nAwdnwTs>1oM^YhISItllk9fbj4^i-FrLI`UM^Pu4~Q#~ zZ;z5!{uy!oTip*Mt{8FUo&6Yb<&6aK=%TzSi7l19u@Da~>U$C_a`z=3Ta>pXT!knv zNw^46-jQ&OQ(lp938K6q;R=Laki-KEy&s9^6}lZ0k1O)h%ab=@7AVyqe*(h#EgbXm^%3CQ6h;nmK5QM?tfJt7(8Q`km zpb$EPp$;Y)QNf6-EaC0_JHEvLR|-a4$KnSa$L!=3-p_3jT7DikF=|n+FtcDKj1FNB<^??yr0%;}B4;DsT351or zU12qJ0>MS@9X637!9e~UHjyGhc!YS!E|DTZ_<%^8KyVST!X{EA7zkNmgZBt*G~Pst z1Os6!Z15j}joKqpBp3)?VG}754CJ_E6DbmuSSXuFkzkWx5KBPD~}jKg{BSDmtC{-@>hg z7x`b{RwgJm{bvpIkm}TzvZBTPhlF0Ka41~DHWNmA?)%n`)jC6H!*^I~# z5j&Rc?ioJrJMMSSUu5;>%jxe8wRaC5_E^~e?Th&IWN+Km3fhyxqEyB@_Kh{+vu1-z zGdo(=%1loF0KW_)ZPP)SN#y|=N;&5oN>}U{?31onI8j@1J!{9BAG1FB&lSFA5%p=Q z!(@*4T5s*+$IRZFTBSPdG`T=K7jmbqoqwuhV&ek(yRnyh7K)muZhjx(IIqaRWY?bg z7pv4F!gM_{IvswyN`B)%xvA*qJGZjWUTb&%IK1JVx!tY(+?$IEN_w{Kj@kNRb5ioP zM~QK1)Sf3s00!DQmqP6#j1Q&2C?L!DkQFj@{j~c6!o2v8kO=HkoYygO_wS zO>~p$@9w$F~b%lFf=doki%EuWNlV^psv{%_>&g!_Ge0%xn-m7zNE|S<3 zWpjE@!Ucc(3#KQ8=S7^_e=C0Lj`j6UdlA=3QMdfy^5TOd#_{0u#u*k-!8pCXg|KOukDo zfs6@cG#P+oz#_Z6lL8aSm_R1|gP1_Z1TvZom_TMD^$MbZ0T$Wiof?=x#so6LhCyfx zL=ecifeB;|3TYA1E)I%lF+fy{g92I%NZ#h4coqXBwJ?E9P9zY=;3EAY1}2a(fy|p5 zOel_l31o6KKne@ubEF9bfI7+nVS=w*9YF$22l$eK8kI@?2m79iWcj0it$`I${Tyzy_!zbbu)3qK?P`CXfN@ z2pk|PyQrfaY9=AKgLE&5LNDq__yQBim_R0{BtZaR0vRn)f*?~v_Yo!(Mgp5$?}XM9 z*yJOS(1!w>be^$*2!MihWP2uFgH34<2p%f=y`;2p%<*O2Ps? zL9i+95&ffxh=RT#*r0BU=!yDCXmVXfkk#PfegekdEdeWGTcvzH#Cp1#{}~KmOzHY7ZvcG z68JGk?LXqj#EAb3e$0Wl$bZI<&C63?s7-#`ub8oG>c`dFEsk%xt)nzmQB>AzwE%la zd%aY`y876ZRd<39)c@i>-P`W|`R41IC-FCF@=y?o8dxe-qb=P^}- zFIa60u~V%T>G}NfXYA(P>=M`XhsGnjPG#O0&kh`8eR-z;L!mt9y7WyCMV0R8Tz6e; z&{P#^9U;8aEMAD~x;K{Iaq*7BnCkHMPJ`VC>!e? znD-=GOutJpI<>6UuEyrR=+muP4o|!SCB@9FBWh!wxtIxFz49i1!PLC#x80r`oIcHt ztGA_vl!W-)^0+QKHB=CBvn$0oiIVp?s!P_Wu{?Ybiek`!+X zl?N5vec>OqW*u#|-k}?s?j?7LFS+|=dF#o>pi8EHjS+d_^=Q)Y|TZCb_gFm1LGebD@LIbZkl zmHN6ndvx|KUnKIWY_z%@y)lhHpqQmRhU}iX?^s>n=j|{_OuxeZQeet@l9mf zqB-A&xfd2F$<3;gD_QN+FEjs6@RWb#sacez@b7r)KN}S0sWDH@JE$;E%^L~KQ}adw z^VGbNz&tfLfo16^J_9~nFiE!&xM0B~Z@u7Q1(SRv5=F)6C_V#4!el8)%~0bDOw<&3 zYzgthzc0{GVGB%3Q!Fq^cQ3f^Wa-Eo4dto8q%;M+LcVD5Yk`THg3>Z{>roMa<~P2Tg-QHWU{EQPPa!K>%+8n5b6} znWGfxfr2=)lo~yd>r zz<_%@R&*vu1M}1z^jc&LWsUglp-XvIO2Q93dkhz!hABmRZ0 z4(sE8r|8U}kvKK?KjPHHh4x=@YWjbssToE;Ow=}(d|bRyt%hN&#~b4#Z)T-89|YT0Z=dx`Gr^^11Mn9 z1lAU5?9d=|NO`x>K#_)0hzG7{vXnYJG^kUmp}|&7snJ7Y zL9dX;4h^7dN`)R8M8_!wdT794Q|j~3Ky8dto`(iVHl;cb4b;Xc#d&BDbEnkip|PM> z6owmo-b6)Y-e|C)SI7-c1Ad!Qw}-}tUQrls_>fYyhXyq`lb6$v+o*MPaz%`xq348=~V33d0S}FenT+M8_Evh8tRCP#A8Ajx#6>H>O%K)ykW7 zbjVm>qB%*2j0Gl|lXS>fV4^umhl~X#nv--IOO}b|Bposqm}pMYfqY`3IZ20F_DnP< z>5#F&M01i3n-de|70@ALfr(trbl9tys5TlMG8UMK6rsb`MFgw=AyedRtW~- zUvdY=R4Y~qMw0>V?U-u)`+>{ER4b-hu}U!M@L|Da1XHcZ+sz{C%wv^c^6_HpGD8 z^Q6RL z4^Ibw6$|AS5X$i^6m6kH)&dLV77#-6ETj)lhpYu6{y_dg&@1FgphMOI3+clXK53{P zM1C>&saVL(MtG=M$je3tFBJKVM0)vi*6%Kh)HwNZ3L68fU=SoIVMao zOtzBq3U1|Cuaz7POtvCDF-*1s*?{$0$%iQ}Of^Mg{rl1PpRo80f&pl|^;xj(as^Mg{u zl1-c+lp>aF;{2dgv1AkH2c?W9n>arxbu8J$`9UdU$%d&7HhF%qiSvUZ`oo5Y1=y&6 z#Q8yy{b6IW6~+Vk+u1~B1SVU_`v)5yA3(aI`2$)y5Bv#WqxL}ah{i`a9xLh}hv*+BTY2|UHe99ukH}UiW~{=3WbZ#{D~I);(AGb5=3miP*8fhj z6*OBNcEpotYtlcVt-Im~v~`1%GatdW7Ko+&6Wa=T6NtC{H*D))lO40Im~G`PBFwh( zMgp^~yph0cD{mw)+ltv%%(jv@T)6Fm@+x^Dh07|K0W?RXnf!S8fw(=$e6Ev5&DANYBt+MJU%tt)$ z)KQd=2~lWu^jaidd+I1g$AlO(W?RX51(kHvQEnI$v#sg~Phw)W6~(48+X}IH%(jxx zILx*Z>@8X!EFz8yvW2{zl?9jv4PYu{6YL{mH(20E1eUdU_%K1JCDs}02@Mh+<7*9DcGnz@Z5uq+JkQeHWjr8zI(7yd(afvl=g`Jp`(IG zP6nIO9??JK?k2L8!KSoF^bdAaUjK+_D^ZP%w2A(qD-My*3{VE@AECNOLkT=Yf-~5Z z_K5zW6doeu8En))$YchTnbIE7Kcw2nf?Q^>QG4*CfQ|Y`sP56gd(7)E{Aj?kqV@>Y zJoEKV#Q#i_F$_68?^_~Vz`c>{sGnxHl;nHf9QVnf5^5n7z`D{Kk|odRj2(&ww379 zzp$+|H2_CdS2;L)*?PeLJ6n0#>e}vfv$2)c))w;g^02jX5%R7-VP1M(iX(crP0_pR zh?R0<>Pf3{_tbj?`GaI7=iXNRJ-ku;@^tmeFtuZmua#ew_4{w!-6Wmo>$-Hdx7X;~ z2Z!!Xxa#5lP@<|km*4CD$Q^g`CTYhfZa=;C z@mq-xAI{ReL`3FaO-@^CXDK_!W8>2Ng}u{^%{-hdxr z_vM;04RglqT5Z}!-zq6UM;z|GH#7xt-z7XqI-@@ zo~NmP)zH;C72|pOd$YEBd|phsXr;CAL#-!CTPI)1KYyZYr;3b1^5v@M3b7??PAI%v z?0e8Z&-KgnHwLzfGgrU&a$TX?qaB(mMUO3C$UK`Z_k$-4p7u&EyW4Bo~gks;0fa`%r0%g}x3;rRD9! z{rB&>yq@rMrpq>+LvI&L{a&a2Schg?`#EsXNKonPozgqE^e)IWY}%(Q7w9~B@wV@i z)SYK8nzVL+>C+rsoM1IELPJV?=4j0Ob7nKNrHqmdq&}W}kSFcE%B%9LP!PB3+^$A* z1)uIX^>~R(I%|zG^Eft7#U{8ewz#VF+T~TB`vg^5t<^0?;CNFP3%Xp=jt{i)< zU4R*@+g(uG?JjgUCu4Q>%{7#A) zMZH(Oj{S8ju+r;uRoIJ?pisqWo4X?w^E++K;>Snj1%)n-+U{{e!}M!K$U|NFl?S@h zO|I-XxISc0#f#kryLH&PXKK%-c22FluB3cRb(6JTy5Gqy5szvo>{_yIqHBElgoP(r zKg_1=WihlQ9p&{u%zXa2FeBYqW2ypkq3Cg%ykL#P`o4YEV}4kz7yFT^p3mHzI%4wH zr0w&&fTW)R6^91nyFw4BL|o%om4vLmsc|e^I75e4n`yueH1@eO`$@-Kr%5Ny9(mfL zdQZcq<8t8hdZYJU%DZE9%2e+i$ac7Ra)F9{ue;ussxEbhcjgIACgD!zOQyUY9dks0 z&;1`EbOvSj_;(QcpIr|_=omuhy{0jQ&Kn5~q4P!pL+HGbzz{ly&@qHgKBX{(js=#{ zWWWN;6t4&kyb2Vj2u&T(c;pkILB1@-B|-z2G{qxA10foULxcup#3=p{I>^#c+#z%* zB1Z9s&>;z%;tZif2{DQX$ zl!y*)2_^~>VF(>V=%j}YL+BVnN0R|V=tP~nzk}Cw*xNCL&KnI3p<@W0jN4!cU6zBQ z^hDWA4icbZfB+5$=@$}3G&xAVkOA^HT%=ye062$>#CaGXe#1r3E>U2Ui=bTwNZ)Xg zG7nL1llzxe351(m7$AJZMJYr?@l7t0M<5{+Ktc?m{}mcz5)h#p+K(}W4v-3l(8)a*L+G$RFoaGzgR#Ie zhR^{zC!stRhR^}BMi3$kL+BVnrzmt`fn|VzvA{BUezJ)qCMI&>U-__yjhTN?+f6>i?L7P88J5*#@Ypk=G6Z4**m?&0<46X2bLTt5{KxaBzD zi-W?S|B*r`4sjlZ{uf8O$V`emUOu~RWmVU@SlQVMshT_3c-ce880tc* zYiu3t?7aYx;0megxH-FdY}jqJ6TVc}cCW)uTa(o*g#HO*7gAl};N@v#>!IW3vfIto z*40ZEzTd#s)eag4={Y)GNLyQ$1l`-CCvMtc*L2Eo#$3_8%TCHp8LvF0(K^=b=BoiS zm)>l%2FHN0;zcem@3hW&A=37);PipBLW|@4l;i{ygi6-S2G7sQ?zpUaY@L9>#sx#) z+xBI9bJcxab_S^Mf2isNAO}s_l?B0*>ZwnNg#&4p2fAifCDG#gG-a}5G z4ef6JxSZ*wzgya{ueCqu+)WF!@mG9Re0m*=x?9R79n{y?Zz#5QadozFc6DjEWprj=iib83pmY0 zC#clznY*O*!{fmZ5*K7Nt}af!bH00Q(~B2biVSl0 zU*ok!MK|>QuO7cO=-~2W+VXEgMM+OTrw{L&KjT`&-|Y(=EwuE|8S;KTdGCV}8{=Nf z&_ZsukxPth))lkwR2~D(g{7|H=80OLzI~&Dp^^sH`2$j!{Tkv zMlSq(%WO;YDn+OAZsEl;4n5lC!W%Yh5IQkdKc>k;=jX>EL+8F^3w5#HrN0f&SM1EJ z^Ayo~{${d!RmV%`zG{w#ZnEnfRTZ~O{m0^SYmW*)m1!0Tois_tb@<5L_qog?yN*3- zcT#+F_=t#*?t-HggYs-uliu@}X54ljY`MPT<%ZMwN#^@f1tOB`N=Dz7h{hVs{cG$5 zjxyJ{mTcd?rD|7o!@i~FO0VZ~A|~Gn3`|ctA+CSsMr3+mU{cwpH=EP~&KbPWPf@B2 zT`G0iK^K0ImU&K2PGO-Z$~+>rWGAa|Zt2T7rffgkyS+d-w9)9E;O+7IwZE+Dx^{O= z`%KMgzifw@@s*p|POXiPOIz-F;X?XR7jW4XiT zitfC{r{8>iynQcAKQU~s&s3>{@hQUP)7+NhhsD2T;R zP_-GoJ@P`UD){jZeK7 zscbe<5iqdyev)FEonVh^T7TDOneFv+b)$TIW;UoQgq0h)i^l|E}^W#1zEY6ym`{eO=m$+~FT@v1% zf#o*&b*h;R#^OQY*}LQvKl$u6JK23|>FCgg-@BK$cKvo9o$X%NrMYXsr7&1^#@S4_ zTUXeJoPO%Rj0surg}%|#>GTOhLltYoZ5f^WolP9K)I<+^mN%c&4cTXRtTT)Cq3(D3 z{ei*MyODBYljg`oRQ5H^8ks*_SDSI&u7{~(?yYLA(qXB2w(?5OM;nv$P3H_n`TqLH z%SeUeePV+8=E$_rq2FI*?vHN2J8m>{T2Eaq`>Ei~QelmNVx_A+wR&qvP(7uSYLieLtL(0Z>Yy#{f<;23LP_8o}I4UJr)NJ_Aluh+IeH&`bCAgCo8v$U%C0cXl_|v;jOK% zrx%N}wjEEViWI+IBCmZ%dcQHcS0VvwCk=WfOr5=UmJyw`Iw6U*2k*=W;xAzmL;}E={>B z(;agb9^^LM%}&|SX>06rX+qle;`XR#<>~FQ=jZHXzuiC2WcYLE$2Y@rQ5%)_v<`Ok zm3%RIN$(0~IIZ%!ZLX5t`Kv2PUwZksRo|=Hz6<0(H;}IrJo{@s`FJ3fy(w)TeSVIhR+2|r-Beb$COhh^0Ttv$Kg3<7g&oi#H3Uhy68d(#Yr*$tgI%P`! z^D>9ij!q)4el5yncMW!FNjtlAG>BY!GP3{0>FQ#Gx}jx>-o1Vuaoys3XY+TKm@905 z_vXE(Rl9lc(C}!(%XhD;_WX*qKJoKimCPz(nU+lLZjlqsFZx|m+9!5Y8I^n-D<3e6 zeXu!qM0@-CuldgpUaPC#Q!ZSoL0@+@AY*z_^2Xw!nu55*4HfF#Q&d13 zd#%F1Dz@C~sQI*_Ldl>)H(pK|>7|n_o*7e$eiD z<+O4n{+Z?NIXKCvG4f4O>c-WlMJ7An{B2qgXwfr$v{5=CNb;@3yU{`4Bu@>^ zH}&;iLnAdeN428+j~sJ(>v8R%(@XmnrngI2Tysgx-mRt)10jTd{Vygy{l~(r7lgiAUEkX`WK}P zcFO51&M2?HV>-IdP~89N$m}gIBYr+|*Ig4Er)H!3d&l{`SEa)jvu_H1 zUe0SZI=3eFS6khvut)l_MnB5U`lrh#|CGCfd5XS^NBp<+2kwMZc#Kt=xQ|r%sT-5c zg!S_W1H!Bpoj+z~t1!L)UPoN|#M$=+XDDW{4Yr1+Dh%Cd6%86F4d|;4n(iMlVH>Oa zk>_E@q{iDFY}Jo$D-UN|EqeR8X>hf1*4qLX7tZQ*&*7gjMso${G~E+#=5OZb?VbX0 zZXP;5-<+ZwX^4&P2#}Hwy8H&Zupz(uUsTyJ|#E7Va~G7JM0Zz{b%i` z^t<&QGV636u0LVyaBQRe)xol+-JkcyI2>B>Y0ThRai8UPCB-euN3-`8%~%t!WjDw0 zy+i#q@1kk}i<*~4J&NNJs?9AA&il2xcT!zXZBuq^a?Z0|&8?Hx7Pa<{E?%#}ett$z zZ7}Wr)zMS?$EEq4k^j=0D?2SF^0{RGk$oaxwW_KzyB5MhuD5`XkJ+Y?q~rSJ^$9%{ zNvX_PM?#06wplJdK3F*0$s)EgQR_tasS($dO`URO;g(l9LWLHx9KXXl4y+|V*2jN+ zdDFb6up~w`da^)J(Z#pYsk#fp%e@6p)kU9MGrnm5k4qLa8;=e>ii()MGunRq@*K$@ zwV`$seyjVGt;}8h#w6sjb>2E{(Wjwhwl#%{we>YW-i_rml4tFq_k91n=~UsxVD`sYneB5Qr3k$6%(udlraB!v|!4){jQ}YOSO-# zT=-R`w)5VSrI%KE_Fa%@y4t#CL5bOh)Q}}j&)!~qXKSkWymIFE;`xvKUcNhXX1yaH z-;2^3jo(*Azn5>jEL@(urtR0KYvB{Mtv}xV)5Fx@ie&wbb`h1jt`|$2eb>5fQlDHG zl4_(d^7-lazBa4!{gy{yZSuW8^yr{X;*aMQIWM|Dg|zsw4D-IM-V%9X^0cQ1-4bfV z`J=-Vnq`JdjU zVn~yM`Ax$Ws@0O*($}+BxhkZ6S5{WutSs45o|~S2MC(si{aTlFm>q7e=xhBjzj)l< z>v|&zM$OW{YtF}Mi1-$3ExpGIt!Pi@j&%Bd56GUMIOWs%FGIr#&HcW*`wRjaV3P1<3NiKFLl+0~CqpV1KHv;VLsqfD%2=I4f6!2y9%8{!Qd z-rmWMjNDw#lq!>Ob#iL!>=Zcw^WlN!DVtYrFCSM-YSJ{nvglY@_x9+EzP52%C!Al| zRh9lacT1x5b?$@(0-fj5-L0F-1TTLtmYtauxo2I;<`1q~?H?6a*54WP*~Y)}%j)io zeSM4?4>f-uZd1{%rmBS8;w_f~@`l=P=bq^;`J_7O+IiQAr9Kgt7oE)D{}qTm4GE&1Sn4`KH8RKED~;*hKgnq57c47jOwNBB@;h<2d&PXsjId+I6^(uIhjMPb8+z2} z^{eRTr*WZ|7tU1g{T+38NH;^lWv3y(wlJUH$jh}o&vS2FFw{s)o_B^dFpra-BlSCW z{aC&&UeR8|S;V-MOT~xlWzUX7Lq_efgFMG5075n(l*tBLVD~?{|WNOQI z?Aq0_?Ut$U{p(zVe9MD7vnFVZ5NtR*mhre|MX7OWVeBVc2EH@G0L} zpOLI$9Bp;4NMo~kb-)|VFTR@b)}4ha^W%0tnA5xTu;xA~^IkrWaen<{R&}QM2o*Uc zeg1yDD82kn#GY-^11l7Q*S2_Ue>7F*Wrv}{-cRdo*V@oGyL%D#nXeM{>w$_~YW4qb%!`d88kMb{lFZM@gS>#t0UJQyJ?zY{&y{xWoj)6hQ zM80Q_H6nfNYD2U=1z*~Gjh-6PY^rp5ka*0oofss|b)S4r;OC6h0aFtF`KOJ!5< z9;04bY`yn6OW#F8uip|s;=c2lJ0PSap0=Z^rQP z-4Nr0(QeYrf9O0s>}D)-{(LU2Z-h0kuih{^;7;14v%*d74o?QUmtEhL{pRw`0;!ze zADHd@-c2nhyYCwXK-<;-?4h`QDu3bBP`9;0Q*VF^<9P>S_fgQhl2k)=TNpm$* zS|yWrLEr7!*aNPGBEG}RrJnH@3fhmW_hZKhdn-QU&l=;hOzN4ZPHrQ2+U(v2o7Ls9 z1)W82x4wOun5pM#kdffE)q5sq{e+8B3flJLn)&~HBjtnoXG$%_kAGBN@sdkhm%D?* z*UaxPQqPxv1lor`hWx;f&0L*7RZ1e=ElSy{=5>Ggr!T6{wp&jUXe`GJeKzQ;H|_^b@&H_>Nd0m5H((L@)x825vZV2R z&<#Fl^Fg2heDr5h5!3ARV$SsON16A(-g%&NamK9B#s`Cbg*Us;?&Du>ByA);(gNFD ziSW-xzJcPmoI&LgX~Acn5sNU&|&eeN-LxUECxw+(U;yf6Q*a6Mueq;_GBN@O90rJj0|+pl9P0 zn)%_IpmRhE`D1=c8b7L;^0M#D_5#NBOO_th!Yu26rMDZ>EEN|ozqn}}$8)?-_`(LM z{b8WeD6jPiTDZCb6&jK^gDz(IHvYOyZ}pCPyH*WBy^>@ zO8l06GP#T5V!S>r*evnoK!YM@M|)q>%EK!B;L3wxqjn>IOzYSDhgzJF^^%(2sv6-N z72e-?H+jmTxq;=~Y3ugb^wm9>>K`;#E5JqmN_FU~bRU<7z%JKy``GPj?rpul%=h+MPydb?)tW7 z;pxR5IxoYoeg58Y=aSsXMn10JivMR^V^)?6&-##|WW3Qu?Cc|>CU(X5dn0!vrv$6E ztZi#74C^TIICe_SCE>Vu=#<%|8ebinGYSV7rJfgjW@=QP5i7Y7IjH5Z>r<-7OOdLj zgZb{J`Ew;&cE@#^%e6k&kDcr>?meFnY#hz}#7tcVZz#VR${fk~ooQW;RnIqjKYn^% z*7;sRl)NgH43IE(w$Gn#iZS~u_ZBg#omZOPv=co6tTO`(d zttiSgHOuj_iOqtbSs^8AN)!I;AELrJw<)-6zxl=$5x3*z17sDx>+k&48!YuQSMKzc zhLiPs^tY_--Q)9Gev9$egBOav2weB@Szfa2PH+DQ$NUev9eutx+Rg^Q+Q)uydpa@c zq5CkSU?LO0z*jbJxI>subH$WrcC0@_*^THCwsL`{~{>v6OzCBF|DOT>d;DQ+mbtzknDE!4CKi|5 znb18Gh~MS=;TDy3e{IJEzW0p=)&8*4KbttdYx$UaTLgYB@Sg}1@VqXup@itcB#b_2 z=bd#$ETO0O`Pi=NCA=tc;ny8Wzci+KQ}#T`E>> zZ#LUrJZZSB#-nl1mA(!|j)ixtTu}Ui(33a5Iwq(od-uiU6ql|1d#h~gEt_EcUwhGX zz;$=E@QrE3Q{J7eS|Bduoy0k&W4Wd|W5{X4?8rmx-N)muFEiZPaOR8Wjcgb5utQJE z^B#Z9)4Q|0Vspo?7yHuc_3hu@OI7D&Wo;-fV7;xo{rE}B>rYpAKiX%o+d408ji~8l zx3$9UCZ7F!w^dHv_5IYJqk>pxFj9WRQ%!l9>ob9H+cR;FWpQdRa)mPs(tO?GA2;j! zm_+v+RoQ2?U#2`za9WPRl`Qq`veiqqUSz#JdTPb&2H$Dmc%7HIpbmLo>kNq!y z-&_0|)vVVoZWA{aw0d;u3iD`8o@&5{ws#rKoo<%9F2odQ^7lpc>BywToYoqS)XELl zIJ+fxl;1;czpIqvYh{P*xAYm0O^9vo&ocY#NR{PmIoWvnXD&x_w^Ht5k7F_gaZ-;< zzf_!v>=4!*_P)R7OZ*91PeZ15r26&OQ4Lei4or@sJ<4%;Fz!g<5sz!DG)*6yNLGBf z|B`*fAqBSU2&3u$vekW^y1>x4V{P`YkD>{Fs-mZ_YqYF#e-R`yIeN%-dYMh(55K)$ z;XYHBY}>gZFMJhE@X|0Rw(#TboZvB5Lv?jyea5w%4BK1wk2|11?$HUv6#)I6`!(8I zt?6-7n)7wp2H(Dyt`jUwwWqIC@nRX>6s}Csdt{e$BU?n^bu35k%5dv)$;0~>8!lAk z_UBK1zCg`1PRCUsZkM`Q!%WQ-eX%x}>i-{gZy8qQ+O_|p2q=OeA;^@Fl5UvNUDDm% zHBmYQloX`9Q@Wc;3P^X?1f(0J8}<#ZwVt(}=Xv+>9{a!dhy6(o;F#R^72_J`Iez1E zXSqI&E-TN-cRb0jk1LTlZ{jO(!2a`3!lkOg|HoY2t%)+uMkdCeSqh(R6sX%) z?-4&A$p|FBOuc|V!4k#+~7~i@2jIz z_JJn@p6e>#Bh1qD{4Oq|aD#zw)EgiVprq$GrlPU&gw+?miTY->kvC<9^lHEh2A6tb zus&<-K>83EM3&2l6T~PTIJo}4yX;OK@9HtHMy-n2f@}G83$qulgZuLK&}h5>u`kk7RzaUyRzh0 zKGK?-spRDO9NloGncU*Qt|7@l=9+;%eKA2NsiQjH8$kbua#`U)|7Mc;#5saPN;1(& z4?ibZXFtV87G6Y?jtrp3ZoAo%APZ>0cMJOBQYeUyQr(5LSR)UWjCV9r*T8Fj)^ph0>1UGUP`*m>H|H>Z9gdej-#*yn_|(`%075_UGqx^(W{+tKl;M^o zv_^F*@-Qzj)I~hcUB%cg1%|ak6FQWN=^O8(cy6)PytQkH{Q_&XefQN?&IPkv5E*M# z;K9>R?uiK-6wf60+y>eNV@JmvqHU*{dbb>P*+k#yFvOwHBoi3E#XuXiL|;7tYcCed1bKQXFD`n*)DN)=M% z{W)spSBk+|?Xqudc@^`ly>opDoxi|tJ&(9%8bM9m#zq`00O2kP^gg`8O%t)BaeU3* z`(+s{0Ku9y$AI$N|I6sReX_uFXY}d5bw%A=;5o68`Cm08Z}U0i zEIalZVh*;uTDLAI5H})0W!og$BGL*EJzmWs1z}{ zvtVfLP~W)jWq8gr9i86bU$$B1?s`l|_XB=mC$rrDoX}c&fNCd7ZjIxJE?*%9=~!RU z+z}Nj_vA1vtwof1M*hP$IF67s>xvHP^9zS4Zsp5lWw$47Hs9mlzz#_Y#VYBW37!&x z`6R+Xs8mg3GPqRO@**MMaR4s~S8jvFrNc)Yrr@Q<8qH8?^>PIVj{7ZmMDA7hK-s$1 zM3#}|hzqM88DX;?Qk$n}4P+kUMH9Q%w+9j7j?aCS5&7Ybe`KFA*ie-%-rd_8y&Hes z=WtZi;n_W6p%??w?>AQoFVuN!a?2p`Rp#XVZr=yuI-24mWQ#56>+S`i`C^gLj2Hp6 zh(2J=;yQAz?eUT|-ICPs%tjSSX@>S9LcX%IkB`?}wyUp*1ldP6EptDc{>a0~O}#WU z)i$TRnGEvu5aMdgq1d^&xP3cF)mWmqW>$SbVp5g8K=EMn48A#GyEKXSX|V%bAv9Y_ zO`l6wG;i4hS-3xpeuu?xF?E4bUt#v%~Aye&xO*X&%x~AcPs5XqY4qV_6brc`VfXmZM-&rG)7^v%?9x^nKCcfv6=XAHn^}8GhSK;qaIsGkfB&a zfz-zt@g4S~h^=PfY?<0t4@sP-I4@s@NhKxHm_F(%>C4f2nf_~Uo7E`rFI#y@5@FOC z&Mkv`yfP1#1I;#@J(s09 zH0Z#2G`Ujug9p1Gyy4>7sW%;m$uwI9@tlG)W8P{h>~EHs%d|;#=3hh-)ibvr6k-9P zbnq=y??*hA@(A{0%<&_|-7>7xOvbBrNeU{Lmu|*u12-8w48-e%h}_R7=)m7zy1HOi zyf%SmqJGgD4TkBN2~_fs4fkFrE3U@o*Q;x!+pBgLiJ(Y4|F&m}0ZqGrf7gN{wZ{n9 zz+|PCew!v(6~Tw;=bkNBS62^jEPNLC7SHTAURmp{ekJtnlVR!*G2u;A9!wI32&>tR)ZrO z>@=kYXH_zdcQ#KQipYV@+ORD6t*N2;lK~Xa@mG`Bv$)bcCUm`)){`3@m%^xX?(FrT z`BId6s+T_Tm;nbQSKFOQ6K^aYJ>Hvs%WPAeG}cie#(Z)@0z%=|(3AUtFrc82f}@x$ zYZpy2RArYKus(#06W-wAMvheoR8}d>+#)(rU8;{auJY&K4nHni33Y?kV^${0nMQgC z>rt{!Fyen?p>{~)^b%q^o{o<4=$z?osf?i2VwI_lI`zdG;;tg`S!H>BrUuLU9BufD zfNxe*X2kj#*Aj?M+F(ADsG4UuyMKKi?31ZkzX>tue8F8F}fRWd053Aw-C zME~?BqL&V_ACnU*3sd%I?zbjSB-eH2o3X{Of{70s`G~?dBSCF)5cPZ)%cC=kAiUz9Y{I?p0ghamKX#Lp))TpRYSyp>k`mAH$D zc#9ovhDhr(qsUQ?HQ&u=l+?3b?b_6I?d{rX%wNPE zES3v(5#)qMV94VKtz;_6*x1-u@0s^3@$^K=9vckcn-OoMAp0y5I*Z@5(W`!ox5?ny zlC>0lG}lAbIk09d3OR=*n@`%Ck)Dnb7Dp0F_BZHsRAyoZ&HFrPXPp3Z zSfe%`$S98m;yn!ZzYqJ9<}QdcSMc9nPP!?AGs#er5c`39mp6l7_cb&ce)GGy5q`v9y~nM0 znDj9>_=)h?Q-$EOlS(;MPJ`oQ7YgWRpV7Q3q|-=>1Po`YjWlR%f1ggThXB&#Q?&Zs zsaGzP4|C!qv71wcu#C1ONP}~HnW>)xaMa6Omj*CUM#gL z&nvB-ld_2e)Q?=h4E|D?!uvLXE=%^4~t<&l4pB|KcH{XnO3K`gYw6 zNa7#;OTKu)_y$lv@rtIeAp&2($x=Old4=jF=*+kPz>vbcc{Vo zz06rdbb-K`IsjD-ZZO=v;o`Of{rpuQm_oo2zJJquljpaNg?r_Hr)VjnfLG_Z^GJ51 zJ&9szU-7@M#(KmrCyf5c=z*iegHRCQ@_gqU*>v7!fj=r$MjulEan%fE4 zi>^&4Wxej_O*d7Fo~e^ZaSrSLCFT*k19qu`_s%V#9syTh4&mNS<%6(5VH8~)`#uQJ zJV16hDCO>EzNeI>B2*P za<_Y4C7c$=*6E6T-i7az3o_$O;M zQw_qo4?81gJI7E(Aw1t<6bSW_jdi`Q^=R%?v%p=<{|L>;(_^p)Yn~ifS4WZ%mLn{m z1-5g(S1MF7;)g|&77_{*gZ7SP$WM`N4IG2*znN)d^JL<}rGkyp+8xAR2s+r-V8m_i zP5)*UqGCu>*mE@xo&odG?&?XQXXa;~B2_&5QofHKy5@^l+D)dDaaRg3(gU( zn2x7g;bhDGTM<97H$NxDB`0?ksuF#P-w}H|5c1qysKW*)yfskFon%>LsE|Aiq-b*M zw11r&tmtWZ43GwgsI#a~e9I?N33d(WaoSXU3R5tRiBj+7#D2z=Jvp3ysl1=Ce*ay-dDj?O5> z?MwuyZ8FI|%ji(X49;n(0hY=$Zg9<-@9+}?q&?xaaAbt~(S+tSdQuy;o66kaULMd} z0Xg~9?9!bdhtOePOPwETWB&S_?t2Z9CNc!t^G$3NzVkrw=YKCxWN=<^(by6LX^xwC zdj?%hQOi?&Ymwc`OP>ll=<9!(eiF6`0Ii{xF|gLw>%dGZhu_#3i@&fYId;`zxPJbQ z448$D(i& zTbaWg{pReg)Z429ZWPbh?nA+f$Wj1R!yU(QNBe-7x1XO8TWAoHP$h}%)iC(GnwKaA z*>5TY$SFP;OemAxa(L{i&#v2txqBX_{Oz4Y6*qNm{qjx>LT8XMG1%0*r%Xt0tgYvWBIHMz@e7dora60H3tR>-5~k`wKZOvL2dsl_0l-AZmLd1HbqyNPYa?jpexU;4cG+=edTlS;o zwbm@Ld)!iazS<6&qn-6;x+U)9@-ED&(w8bSC;^>1)7nQSogE zeBok`n0>MXHLs1aYy1J#_RG_&vvEbH@{Yx`rdud@ysVug2bOvcNMrW|yyIEM%_fqq zxXpnV>I6RcfHCpOm==tutQht0a>ww$sgu^cVucj>KrIBg2FjAzG0q_OBMa&sL#-PHKGHSDNN-mFul% z=AQ%gChE+RmVUwFX*g*-T7)8Z=6DkSkdJArdQ)%JXD>-f$Gz-7BtqFL2i)BTPqkLa zXyo+%Lr`cku44XD!|Jz_t}PX945USsvv0HtHG-77 zP-A5BiwzW0t@rTJ?vy&u58zbbO3q zaU={`ggsk9Qu!VFNT5R{>6^!TvLdVFbDKA7s~IhAj1h^hx9ND%>5W@S#;O5Q#hY7` zVe>gy@Nn^tYVXf0qIYsqp)^jts4sg9oFLQR?awnM=H!5g=hU<;^1l-zz5In+6N$2s zgbOC3fRUv}BH}dB9v9}iQ@}GW9A8>ZIHkKjg{(nL=ad|OQJ;F?onHRRzbbP{Q7A;Y zCUpCHi#g5Is#RV{dm@htg%9^p&mWkx3CekNk$9DJXqo%uq_*Y$qHvq-&EKKtX{E()gp7q%ILx@eTBNTyqY#EYI1V?55R~0 zSu$2W5@7Gv>)e+*R5>^mDm9vwqd>x8 zPqk1-%>`}26TjlD%y!^gwuV9KRrDXRj+FM;vZy>nt2Q|xBMky(T028j;AI;g6T-TX zP2)=Mw2|*q*~3b+jNhOWF@Z<2^Y~wg)=wJVST;t`k1?j@xB%(ud?Q<4nr^|I0vef0 z19ThIg95TyV7ED+R%4%J6D7(>GQY^v8B=SjCut(qJhj8JbmhM+AYqg?!(ngR;j-)H6T3e7;({k{J*QDnDptg&Io^z(- z0I~rz6g@oW>-dW->s(T!h`MgMg0Xryz3rB&$Y5SuAsg-Ww<8B@1{J$t=S#ulf-;!y zy`-s%#;H!&+31wz`SgdPsiYw>tgZfvE!FVyPd#HA!Lag0$3ugPU)J(MlJiJNbtUHN zk{N&9ni%{JxT+8C`%BK>E97qC<1s!A*GeBj_+=!Hvd~(aW^6OQ5m8<=27nSSLcbJQ z2#(!;aZh{$pfTr_S+z8Qt34}aS3UF7gRTXxq%Mc67R!i3#?q0gS+Mn*b#qIBk9L#R z5=cz`TsEvU+nZh7mo2u6DP_y&8z~;hTy`hws%K+fhdeCg z+aIlQHq65)_Dvki!q$cl8B1eS&<=SSLz(JZcxOoE7x6xJw(HBc zGFC_g+K&&JHgPO_-4#_VSS40O839L8owSdgvp-+~%Ib5e`}u3y%p$J47B_K41t94uXy|1? ze&S%Ku@%JJ%W)Gt)V8`aLd4vG8yd4h8^K<+nYi6rF7361{*YhgWRBV?ih7=;u-+p; z)wMn3AGH*1adr=sCEoQbO3q{jyG3D?#r{X09?BzeV409(pu&;?6`l!w8cgE z;oo9B0F?fnR{&=(Kd>UQLG}yCe~%6%R^O@Y+O%{&=qwMwBN}6^k;5 z(L=rP2GND7w?mt5loDLQTWn1HxU8q56)k*mfPT|JjIe}Oig;p*ps@HfXvH_L@RFC2 zafi93uV$xrhHEy1+uSVV9grGcq4nBU5;$|nWGO+!zD9&dmAp=Txck(62Y?EA7LAr! z$bNM!;7g*S&}#Y7H^!>%utvRS@0jYxLP{wK$W`|K-xg>rTt?BQIB0zSQW(Bk%Go?< zn{9kA|1pXfHW^3VNfemK>RsHcM(Zr1Brhdr`a+%`>`6H?oNqs@CUtW~%UTP2Wd`|$ zp0yKMGW;BExWFq}gs#WlQjUzV^92=m+D*p^L8eHC12pZ}*~lEKcV;G*JWY!=pFAC~ zS$b^dFR9|X>D~aiwl+`-J?K+@2GNxMs4?~_|M3%3z&3aF*KpBr*>jaEaO+3)WH{8u z&$Q@A9Yc~pN3qyzdqbk%^6a8kZe4q3gw$wNPr|X!*iv-Qg(e3U_wB#y8ff>L>bJY$Qbi4n*1(i@K6Y>tsL3#P?x%>5_c<*7WfF$5BC`s0og%M%o(U-_XXK z2wF`DgJg$xzRMn#*-etvlI!%#=;|?-?j8LoLk35!FbWKz0V|X1c?&MJ@z0ID+I2cu z9laI`*KMWbe%M=)AVmCVa>a1ma-|XJQ95u1Pq88y*mNi6hXq|zCcVS)x2gkZ56-%I z$oRwzI`nm*&XkX2sK4@jbRUg6sIoF!5h8?RLO@`-Qp$MKSj7%*ktrlx60_a{sT1WZ z{UKE1hoPeX59%fs7j>DkYIFIR2gQ;V)wusz7)eWi@OSHMDt*QGxrMxHl!f-(u|GhQ z%^U2qKU~4K`Gc4%^9WE?qvQEQAkjE+0Wj4cT}?*@s=@3o21Ym{m+WC}00lz3Lm2^jsMhRL zTBvD^pO|UikE*uoAA-6rC~#mA@h`O@zlBkkgAbL&SHe&RSj603Miq+*4t2lGZI=|^ zO!P1qewnc$$T%I6WrFj6f?R)|%z4)c^QjWL0miys3=la^&rAtO zTI>BpVUi71Mk|B|#_9i@)hAH76@9K{X3P;i zR|O#(H95^e24;b3Sm=M}Y1aEzd^ORzvr#LT(#4V`6F)@n2%#T`f*wtcoti4zwD`2S zy+qm58c@Ux*ff>F>_pw@`AOevW+afY+}8YBa`k7!M&*Enx`ZoL7b=ti@&Rc~TFyP zpW6zX8jJ62i|Jo(q&50c@el5}%1nNIqmySKAa~pnNz&+MrRb<-^j9fB5kdjtW7!8F z*5B^svW1&=!h^e?x6q{D$N zW@2U=$WaHk;ed4a-n$><`oA^&0k9YN&HrP=|FP#!2<3fOX~ke&Cfprq{&OJguZK8- znd%z~GlE3kjwlUSanLEE?aEMz&kRTH0>m^#t}*pjFHwLC(uM94X4lNeeAc?1PfN}~ zYX3739~i0oL_a42p!@+)nwOD@5X!r6d8fk3;BB^iY_XZpm>C`^wM!*hs(kp+yY%UdJjYG%^DgJKCCQ$Y*rD3_ z74BLMiS{Fp))8P z1#sB^4)q6R2_;q(VK!(Cj$kxwwElXrjM#NH!X5Txe`w*2N|5ezmSU}ecZ%c-(K;4+ zJuRk<2W$UxzFlzO-|DWx5h`Ah{IUzU-s4@F^hZ5@2)Fr4SiYW~ip=g5PIAUYB-wxr zaOc6#wDO6TmSTd$(=Zm9Iknymb*lTrtTZ{tfjmL=iAEv&0fc8^MEmap1A^ zJ0Z_hh!q+Rf4lrt8cY8u5eWWsE8k^^;umZoc>`LEG(N77oaYu-pJ&~#)#ajM!T{Sp zN@XHF(#zdTQ!Vc~jpEks5}PoVm{PtrE<}H7peIg5)u~VCR7w=SC1)+_p&A>G@E&ii~K&770y|8HqG&gK7U z+N~txyU`CgQ;-INTW`!p15eCWH(}2lx+#4oCkdKj?-bniE(StZsBAWD@TNZApQw{= z5004^+PAhl4K=upw6)NIjicgl3sr?=F?NMmm#&9waD~#^)I0lyEwxD zzedVhBGEUiF_PhHI;=;D)$_n2`Tamh1=DsJ$FZ|4Jz_WRKk`hV>;0=6o*X$=MYwBk z&!Abb2vclT0wKxre8R5o!4v{S{NjW_a)5+=820nE5*kI;@}( z8XJ9>WB@|g866lcW$fIg|5zxp@u39}n@=>exa*{uSFP4GuE z(btl`$!q^)oPfIP-;S$I!>2JIl#$Yjyg5$ccn_12vt$R~6|2f*n>tmpm%UmlqydkH zY-iMNPw`};?NjN?fq7_SJe*ea_)yTL2PBie{C=5FqDb2<$0{%@dr%7pr~wJAeo3|; z-($V;Rf{{f@Z;_Q0#MpJKHiMCHCXTGWDHYrbl(#wzgl!M7AFIjls%0j!Ypj0O;D>~ zGq;e*g?*vx=i-{|HZZtyv$BPFr>OI`hs}+HEBKW2VLuCO$R1a-X4;0lFAijVeM-0Y z;dQ@6a8Phftw(Y-LaV_BJiaX?vO8!dH=Epki;a?$wye=ckdFF}?jApKlt?S9S9!Cn z6K878_@AAs0>b|gaAiOP56Sqq5~_*%`Yp^t3cALQMcYT+)XScspY68xT6>n;Nx}~F z8yb#1iVqFx(N2s`V8`ii|G>VFlXELx_{&*2pQO1XMlFlKHX76SE{+!D!b- z1Ne*3(5vZXUls!yYfrXin(EQoA3#-rPC+!vTj_UAU~IZFcwCRNZZ2Do@)5tS+OJp; z(`2p6Z;xJ&^0!C7J?IGk&-RKSbB|{5I!0{z%Soa@jnQD;jc^bdv{~>DG&hm}QGyMp z{4PdjD2h+U4DbmGx5bJyAn1V$*;J?!8^bRo8iJFelaH# z+fKOWP9F9_aLU0h#Qs&-t{&y|v;rM?`5=9UN1E-r-m0Pt)wwxN&n|tSQPRxnZ-kKx z?z7`?$w;|r%Q_1TsRawo41b_X7p2w|JGnWIlRcUzh!!Y6 zJ#t{qMt}4d{{uhLELyIQQ_Czys!(jDcJ5anmt*?3)GSq60HO%RMf>;89$N4>rd=ss z(H6_W;ZP*;t`B<6Ah-73C-g41KtGnyfSKS<4Mq4HOp`<-&gVkh%ZU6A$J}^PiSPA3 z=peSbPB4#or*lk?=mKC}BNyA~mvN6vh5i3X-@~VOd{0gk!-0F&V2jW4lF~0qBK@An zRF%(m3av%0v)5-`bq) zW|oRwF3Z&gEIIgP-+Iz5SYWa-X@I}rX|eLvWFbMTJj%3`+L4k8Ie)0-1yZ659c9z8 zIqi;F4Its376(=nO`jLucKgEg=B^i!B}&qnr)*$TuX2ktn#V0=jDW5p(Ns}vs2pNj zi~S_*r=s2tWB8bWx8I?r(cxuxtf!5be%JZ%ODzbsiZ20GEHYIRS<$ zAKG&J)N8x38^L{wgcmEcvf)*gF)r&!ZCj82%_}AaIZvYNxYVf!cl^#>XK||Y2}~9)6^BJ0LeccC^S0WNKvxcbi;(C0 zix)3s;~zg{dsO!$_%kjE-bkQ|m-cbq#6ux0egh#vED8N5`}+F&Na>7^gc1Cak*SD< z`BeG&p38lsv-~_;exA_n0TP?y#tQ4aa823kB1tH>UG1f_?XT|zd+`yWcwqYI z(ZkPt!2jbH8vT&L7M>Xl$HIyCKz9`pZv74^QZRw&%KmodcZKfl_#&Wv8BjWRgplLC z=Bd4F3gf-QgB&FIi8$DkgHF*OZ%2FbrS1t6p|8Iz(Ljcag+AbOTylxW4sPf!ZlwqgZ)?D${x{S(xqRuU@%obGJX8Qf+TcKvLul#dH zVbL1|yxL2Ml?q$sq6Ozh2hgnw$FU^sa-CU&dFO0uNBNy>F#vsrK|3$C*`fT=-cn;* z`^`hW9Y!nIW0e@4sP8(%m!$J}su+>>$gOP#88vXVM7q(ixZkdJkK5jm7dJ?$C)An5 z_R4)stAXR6&c3!ov|4#g2Ezrn`W}{ENUE0IzKF4;0joA}V>(G$^hoj6^mfIQxxvrc zjh6i)4l6K5YgMV8j2m2Oo2=h;CoK=K%#`+o5pumzAABs(@evjfTIWfA8{ueMiCwN` zlX0g9ftLUV6j)L~?ZGC48R?RBO6QqzFiP#4;aGMQdWTit94^k4tiVa`rHU`lb$)bu zh(Q(9C2WeFPSU2_;#(rbI?L8?W0`d>nItA}HmR2p^|lgvttr8X=UQTQNnseL5x0hH zLnijbAp(#u1WAcw3Uvd$p9txGv}v844~Ct+DU*SoG;b89AowOiadA9eJI!ug2w8{Z zD=D&K7(?*03fGoB=vZl8E)AT^;yTZ$vl}<0bbCNi*tBRsvob3WM z=+Kmn*D^UmEh>0Cys@3(Lu@Il63;hm?2lWW6_;EJJjvuK-qMEZ#bH4qMqX|rw??2_ zZrCTHiav5DAMDXl!uccEz_2{kfboEeW#~T zQr$XxtAsIXVmk0K_HkGjD!zir8{7Q0QrN1Epv7q8B{FJTkV{A=>+U*9sXA1y^<4k) zh`TMKQN|$#7j1>#cCWj!r#bakWaI#U?%`CjUxND_)Rprwoay~xgKW19 z%d7PJMj@}kpNzYL%398i)lD&gO~5zNg}VC73aS*Nf;uumjGF~-IXP{r2lq?y1mz+X zRV^f>q1he#vI~bA?44-kWlyt;-x%h4yIUwB+Vt353nC`^*@0RhqKvu!JZQv7`hurqxP*wKhyk&zQVlx< z$_Nyii<+c;l`2m2=WN1i%PEpgXDz! zio_MW&OfN>;8UO0m`D^pW@1APy}>JJQrZ*xAuQTqu`v*+OwbY(XY!4ERX44M6)Km2 z^R|9vLW3tGYh>BCs%yp%qsim6uNavCAeT^UBY>W8U=!CKq-o8aGWl5#xT3T8`ZyrK zRWN{t>GXf#oTD}EIFJPI5`puIXqeK1IDhdK=&yQlK+`TAoN_-FXt~)t)5kA0`m$hE z+IUHi#$<+vWA@jwH6nNEPToc+KGE7Mp!s0=NdNY$7QIYgp0#hPp{?bfF+yNg}N{=KqsRbo-MmwZ)da=MPs9)n2Yy6$_UjH86I}(o-;L zKnX~rV5w-6k!iTW0Z-8avyN?=`Yog&B`9l}mbH!nHQUq4&Ka(}my&(a+J({Lz62*4 zOg>kUmDhbdwVh;y_@Ds-+maFv`y{KwugqE)DpHhST=;8ia9&eL!OiB1Z}(xqm?nKn z9uHMuh%;Is2Ua5P8TqMI4_-qs1D|rK~(w@S@C4qE+Aa+H(cz zyeLqj)yboU5<%#R*b2QZN<{}-Z%qzmpSXm0&3n5f37O~&4~({W&^zb{*1gfiFcKWU zwKr8jjY~|<>Zy>S$xd{7Tk@HbdY}m}UfNUW1D0*JJgfEP3V&(Sjp=@_U$VGOo$^Su z@OOjQY}5MQWwhA-Tt|8{t z67a;Coy?!PK*Pu)pN%8My4m?l@H`_JAaF}9;V>$swfZr4#a67CC*7X|rL$kd&WCFA zD7h(WStBirNcB%(sa%w}%S-rhsmi=ysuP*5P5ss~rji5XM zW0H6vr#z{0bt(mYb9wbiXcBus90>LmA~J2zXr0_c>h9#^$!0Je7hsZNd+t?VkF*km zgQaC4b)>MG`?$Pn(oD^z(uiN~*o-oX7@Yh$4#bzSn>O(zDfvX9!#!OXor9dN&c+8E zt!A)#ch$sCVeX2F(+2MajSj+0H;%x}Or!Oyos2Sc9JYAePbxRS5LK;s6e+)PowVy% zD+L0Z6D4N@n6NG~ULiCFtE{3}ns8+m`wB}(W16T*h)(VBS1%LD)3hu#r=eqiIdLWo z)KRWVhqPPWm}+|1%%g^J6a0DMs1+*kL@kPdW%f&IG)TYfpe&nJkEM;5i<0vVH=Skm zrRDrt-boKC>x3{ZSW%N+$&G^_SR8(RoBYK%cmUtt?-6ZhTapAb4#M6$C zYuoCoI?FWrS2mvk0R@}Iv7j)m7vC%)@I8QS2%N7u4P}()i-62Fa8-li>x^2(M3xG5 zV=nseTgV^N9{SH^6R_ZYsOF{>mbcv#4Jpk+$x2fr>~Q9+k{ZpFlz84#&2jBK%ffli z6kBU7m{t6&58HtclG8}{4w|;=GB&;j1;XfyhE7e_pS1~N12oOiuczA~CdprNt30jL zQrc|YV0Ca7lOE|a0&aNeJc#X&0>PQiSsf8J{Z8At z0r3DAKhA7dU4aER+7m>V)?gzzJY`0Cr#OI==AH}!6d9n&NS51Qs+_~@@jEVzp6Dd1fC1Ha0d=Jf$V@L z2)Np{-XMS>^<0Yt4Feq(fN(P98%21O`Wzkjkk5moeCo*Gdr^B~K#|7u(Wf}zl8b!c z+8?PT=x2V$`&$!!%M`df$@E8y1?;}X;!bP9T>~-_Zju(^^LNjg$BzIpm3nz6pkARD zuR|!|07>SQSyQw+4}ea0dP;j;hm>>l`XSseOW!yU{c&&5^i=~%?8yu}Yu+tbEvj~F zwo!5liaM*$qU$lNT%;nH`z1D=B_G;28Aw zJ2`P|f`j8q;D^{5{1*ikq>Rpewp-~d^A*Cj4S$>CS7yAF3Hd`wQK51EFLV@U`M>KZ zUQNhFvyt>Tjhd8{DD6{vj4tyNhL4$Flb&d42lj34iZbPQDsPf@UN_sOBLorI^>!3K zhEkgz@H&H4G#F>dz+ylp3G~lvi-zL7uH(1qk(fmhXEDusU-{C7g48dp3E$NNis<&R z%2Db`?cwK3;yCe|#VJ4IQ!`|li@pC@M@1yR-FZfufsHweHp_Pn;owa4c@0H?6!<_Hv+$ECyxE+2vqWO%t?D;9FiIXUALO%>PIJC zmOITi8=h<7phf9$5Qnj~oAZvGu(PoE^r>yZ#(Gw>ga`cCCgXX2K7wa$ZEbIemECX2 ztpx}#m%hjK%A{Av6FO~~{`|LPda3(x-^=5+o7B0r&}^tI#HVC;9oEa5UDQKCTJ&Hs zh2+jwILcIoH|KaHKByAROn^8|&(^pl$ZHImPH^0cOxj)tfX; z8cr4)-_QGx)*9{7vk%|s(7pOWbR=ReCfiGizU+4{xsgo|$Yh)0?j`8McNRqX9`m;l zZH{L75Tc{)HKesMSWJ}~4Gv4ml}a`e0bw^o8^MmzsVx((>*=YyG`hSMYt9CH>P|;#!5FRPl_JP6Pi2h43d5) zp~p$+E`L;59#*wmB9+*Ec*`^*B8sYQ1LZHd;E-{)noL~JyQ>8P9btgtI-HoD!yk_j zS;uX9sYqJS(job@4+$>0@7rx=!qJuiksJ94(6$jxThG=Mjgu%sX`qujdeT| z*}bl-ro+D`&asES#$TB!d@R-7|8@;59mBpcbLDI3AJ578Di&36Rm97UJk5G#(UGmr zbD*#8)e8kx>V?c*^~w!dMFC@o^so#MNnAT*2>Y8PQ_1?0L%Yt@ZjSJzlQ5Z2KO3_S zx&~Q7S4mm%?stSsIwRQ14-fFXFRNvb)$2+a(POXbldKQI^}T#=ltb8uup?~*kDbS~ zfHPK6+d3am=Q!<_c)}(e9v;P2H+aF)tPHPCi@e;M##ErAQv~LlBoQDMP_e<*b|24M zt#^5mpvBEZ%)`DXpuL2TmCWGIMZ&~m%VoLyfABKkZ)i0PcqWs<)tiCi0VOOPqNI^zd5uRC}A1n9fY+wQ6 zNnLj#!@6T*DAsN@Ri>O;rlIX_h7MeF9(tLr{jp;X2i+T{2Do{?JU1-d6%{;u@X4ec zm?fF%57h@SByv1so;ojBPHkDIH{0%a_|kwlw9RGT-I;~VgHng%v6TkX;7hz=+0kxP z4mq9ZckiU%ZcU$2k$UOf%E%+sgQyEp=KKq=u(v&ec8*#xKZwUt&*+;aGA;36QA~;t zK$wO7%PuTVBR8I$qh0DKXa~AL(+=vt#cz@2ZjM|W=V{w|5h2#>G$;?}?0Z*(XP!U0 z1msyEjbU054>EMYmBe;W)gXq%XDn|5m?M&yoi0TSNGFe~r*0h7@{0X6E8S!(zu!iE zleYQT>JEM;Mf+kayyIEWn+O)5Ycp}@MEynbeqzQ*kgGKJ59oqL#_Y1KBG^{&%saxS z{AHI~2!i1o0B78g8%sP^P|gfJt!gMGN@KGxMaa6>w7?)P`(ErnE!+#BHuBF$B8tHV z&W5pDL62ca=Sq)>G4AsPod$dDF82e%Xpo^%Vs*odW`d*kSB_1oot7&up+L!yM_0jD z|1A|A7eoAb&oxIeE3}y@(YADBj&iZg!gV!hw{S*Qr94w5-zYrI?>buYHLsDCM|lXH zO_yj#dwItzngVGplbNeU$(SEX3f-vfe77?}n|mbrP4{D|&pOeQofp!*m8ouPFnu~9 zk4gXWR)@28zku+oP!Npo`+F;ag!SW;izwkSU{K#d!{oKFE~5RHb^{ag#$jK0D{ZS- z%Tq)p*>ja4@2jRTy<4BHOp`=4^)e0;%rGpaXR*AYC0l42vZv!#3%(J@vVc&mw2##* zd=(AWe3hIssSJJnTDX!HJuE3Ynm7j3=p~6H^Ga{r;@MrJ;qU8!WbK>OMKG&osRFL7 zb#hSQ_-qf&Hp{LZrs$v2uu59n#UKd#geVX<&Tq2X<`6W03{iEe zpaUOC;&iaSJhY*wWf&?wd>gj!O^^RN#!to=xY4Ik8)En*)9d(wF`?FCc!*a=xhNq; zfwY>11gI3;)JGka7r|^^Br)sUW?mE{qeQ4QF%!)Sb`o!_QfIS(P-&EtuWdb{S(@rF zfcGs&JR?^I2ATCZHwN^vjLSxvzK*roLa_))1rk3-G~1!lE4%^!Ktl^6TQ4%9iW(>D zD{gXV;4mjG2ngmFnk=W!nc$!rk$+Z?Vn&(K6rGvbS?wwJEfY622Jtt~-H94COKhM7_0WB06xDt{;1 z5iz4Ic$tltX%;x8Lu6hI3%y22VdP>^37aGmJKd6rmG45819sq7?xk$~eOuryCWI;P zgo3zIN^m!-+0rgZf;kcUHK*EtDzC2R^4Xa=c`{zGP_ewC+L>6H_lzoJVA7T6BXK`! zNQCw6p9UOYaJgEbO~qxzLYo`bjRAM)auq7M=;!ywlsPLY*Xe{khPSiFRd&vae~5Kl zh}S4NfWhKxQgo(@#tSUBAv4NHGb^UzL)CO5(*+ADA8LkdOHwJEpnJ&x=y8`1YF!S_ z4PFmht@_Q%%rj5n4j{vQ5=nxe9qwvN^E--@ocX>#G8)h6eu7sOC+`>vs*g;XO9;_= z*GJhYfvh&Ik{x1mi0mFvOluXYLmX4!>|`8=%Fm)EJ36=IWYfRX8MLHE69a#$p(9&y zuA4&h#G~W;`-=t5H1C3UXz>ss*&b9zHRq|3c!u~z!sN)L2m+j{8Mi9yk4l#-zVTb> z(IBd#m^>c*Xb{H!66VO!I_BwozVj=#e53|#(=W(gT2tHA&u~WbszG^MBVrJ-M;jod z?nbP>5qSt%;(Svte*!MXU?@SlKDDa$!5jF;t+|}(BkWyzjTyLs{`}C&@afAmf?G90 zJ7T62biNRNxoPIU{T&xGgF2Gcu-UZ3z z<>mD-KkKV(tAeD0I#J!S_YQm(=QlSuZ^FNHryIwa15O=qSZmk7bc1G9)KyOFR7tZr zb`BRLSqR~r*y^O$gC}tnD2T*Mg<2Y}y)GHtED>go{}N@}1Mbu0B(M`$j_eJ)_R;!w z-jIko2cmMuDrAZwe8`DilEtkuICC?2s8f|dv6|2<@f!KHxEiuG|A8?$#CX#63SE}ib66p z$rLgxQmIrV$`lzQLP8;;&}52?Awx8ng%Zj9tWDYXd-#06-{<=Mp68#Z>wR6lEza3z z?fZW1*V^l~*1k`o6m&`VUfPm3MeYBcc4TZA!H%CL& zdqga=*ZI>=f7sB_b6Mb~-;tIxwsFeJ4{t{gXG2*c=T-q-k<9yK%i5^6=ESieIG!6etl)q6CI0GZ}{w_=_s?(g-*M( zT`cQ63#NE{V8ONU=YlfU|Nk{Dn6SfPbSlK=b9|3{_Y24Z$4}~`349pOnWl&($37jM z)^5YgKX1wuPaiLy_xyXFr(RQjQcSt1YnfQ{^w~${OT6|b5KEs0k3ai0e*CFr0t`KF z6YKu@-tAQ`+)+^lr3s9=1(2cw!Ir%|NX#gk8RFN%ghZU zUX3(L2kh$IADnl-&WQU^bLF9$Q!1k^YUSans>e(@eyCd9s$V$qaMRxd!7-znt1iRh zp+Y0Qk!A|1LCHN1@mqx$Hp;=lg>g%At!_ax$ey7t_eP5*g^b*?752T?wL0^LQ^uYh z3$4C+o+Eo_T4{r@(a2jV8<&IC#T-SZyE%LfquK(BBr; z`$EDorz4;9_n34@HP3 ztMkV`+a3?jsGc3Ar08oUs}pQ}IFohg^J(vfhXFh@4vD{5^HclOCri(B+6va;!Xb*Y z{=OlPy&F=NsBRxuW3yr7DhfleO)&Jj@{!b5HZ^VMLl0u5%%bhz#YyB#KjtV~f0>@| zv82V<%V4Shfu!8dPjfC*pHmrJGOx(@a?COFXem7%8=I$oqlHHCp9IVcx2)+T&7PO- z(c+gpe5%%>Wscjmzu&H{P4t~FbgGvqeZI#f?Z!V-qOIDjh-+h`Yqv*X#t{$QYg`(! zXvcX~Cq>ZS;SIZsr0_i%Qu5fT8K3uG+u2lYY!hz$+AaMQU1CrETti)+{p&p*w?;31 zpVui9`GOI2Qa=m6n`q!++*_xu?RM|8DYLfo(WWh*S=*y{ z`h!kgwtiWq@I-OsqAF8}aSIg!1R9V3bX#Zyi5I!-X&L*O+$}5pFetVc~M%PnXKfxMV8f% zB)=>4SDHCgA8)HLIl1I=(F4h}M~g0MzdNRC;az9sTz^WJv!ni&K;cq(|LbP^t?x8_ z`-|94_vcxpwzqZ~r;y{Czpxyvsl8TfCNyoQ>uxjU4XncC?K7edD!gyH-_PcKd$R1xMp^SFQ!;Ub!mh^iWQ1LN<3ut9uaUF&x_S zGw@5WY)yKzLizWNn(NXsj!=UIY+MJTdTLfPwD}UqB281u@bg7rY4ZuKVr*U~axpvP zoBBg7kN>n+F-g1LYLI`^COqP^m8`C$0cG{Fm(zVI)ERBgBXiXQ>J~2LwLYxp< ztBpGJY7AgG=U1#fdYpN!$9p;_>vh9-f#YKr5C5_TK!@PJF?KyNg_T0BZFQ--c zSxIN^NtNzN+Y|iMI6B_L@c2wctIrujl+Ma^)J^2@Pw8*@#0uyCZKLpxZ3&^q{^2^b zsDDp!`6Y~o{T4>)*LlkLr}09E?d- z2;Z#dHFQ4L!J4;vebN#COO11C1_%C1;SgQZX%m5VT>gYxKfz%q#sl;1*b9j0(W_$X zyrkx>0sS$2=#sMeZQg}r2W>VRA#Ku#%Zo=W*EMnZwtBveUq?3wxSu)N9>M0Wn=6FEADw%>CcFdUszrhNUxS2(We zqWyz|{NvH$_gCWY^i7=zU}u;9u<7-bGTml=cERe6KP#^r_n*A`Kv+css<1(A4?e4~ zk3(-9eCQL=J|rhr#;gmzI6`6N;LPo!GiDfv{wQCb?7PP2#F4uBJb|GVhA(c6q&_}s z8u<-M>^F-(atE%5%)nne&n>pLc{2w+O0m}LtAF)hFFK0!Afl~e%sJ3-)LAKwl-Dg& z(|OhBapDaS+W{u)EaAK9((TmLenq&G$Q=337L z{ryP$m!sy7n0~c7=0+Yh_WEnj2s7Fx{VE^d@qA^ny*YJcHhritXQk5yjn^KddfPgp zeuOQaQQ+)+Lhq$RR?iozWckV51*cS6<=4y+DbLrpykOEUBq?kDpoPm({cf*8VD*Mn z$+=ChUti{vKmF;jkjU1Ck87k=B@{ZWWV25WM7H>AwR<**B%GCVFf4YE{C+aZJ-a<# z>3;Li^-^-Nl2+$K=Y#l-*Eo7W(1xUSk2N)ZRPa7N*bsU3Nzl*k=Gq6YW@#cm1?+(y zRS#`{9ODlXUAONwyQOW>m4W699{szVbB~!XyzqRE=LgfaE4h-hOqRd767R5n`OOQN zzU~dxU)ZD=-Bw!4hvEWH?JQ7v|Hz~~Ec!xWT~I`*lLFb}eYo%rJO!M ztsVOywd0mR&02f7s;UX*h3PN3+OSh)Q@?cpV< z$}8;+>-IisRv3;6PKpZ{*>d=G{(^k=oM*-4#?|MX7Hz(6-059t;WdBLOV-jfv*;+f z)uK;Q4C`C#)7iytiDYPtd=wng>X={aeL(n(J-gv8$&6hnn0MI9-*>cd5!dI^RY);- z!)}|a9vSHsUbE!#4r6Gr|5c|z>uh|*M%L|^5Ek?!4sY8NQ1`*R>ALl)>bSXjcdXv9 zCpI?Tnt#{Sq58YXhI?K-rYrKlBgRxgg)wN9}GXzV!8VBT>VYgeI~REJyFJS zqcvkuTQb)>ws@t)r&GxFq&E&mzT&efB)x=ZZGpYjlm+a(J`%GW&=f$|8(K8Jm`StN7UHn8WRYZUxCB z4!5mbT?O7JNFUnh&GRYzh>G&O{tmX(-P}(~Zni$C`w(fiJU`LW^RkZQR{O86xAyr| z$)9wZ{g0T3V5I$!$JbvnZtfkS(T|GNtTxL-Pu?32fFloZaY}e(J`$kKN0bsYnM2`*`hZ+g9!|=VG1LWj0wI_N#`jjq?;o zgGbc+u3UTV(cZXA*4Avx5#b#-c)H(*8mEee9lFlRT@^X%KWPq9kt#yb_0sbQ^~y_Mr_GT`(8odLQi|%JQb>Q{TqZBFk??J}`O9PVa*umKS@tu^oh72+f!33Y0xyeo zemsxT99aW$JgT4AG-x^-B&ylG;?xLwR)wg9~ z{SW?kUnDj+e~^8coL?mN@GXDV0q0eVJ_bvE?kj8w7G07$n*BkL@F=;7ujR1ehm#@c zMdy}R96qG?Rr$z|w;yD#%S`)woevyhYz#lvFYYvEBUIhh<4ZpG z_r|&#-2O`fIQ`5UbernZoKHCOzc}h_!-`oJ(9M^7n?u*~=S~gtA8*Q^RCZo(n{mU@ zz(D`~xp_ZyUq3FmGG?C1Zu)M?{wBG9jh&U-cMU9BWmtQV*Zt%ri^lpa$Bwd6F_&nN z`QQpo=D=mgj&EeZwK11BQnSlpWm%>dDmFA%*};}@znx_o&9P4O+SZ%Atq~RvKj>U} z+!o~Lr*ARTxpG_So_``}Eo1(BQ7i5{pLv8u0#vrUzhX;!9>TpZY}vFkk}hG?X*AXo zSIVs8%1d|TzG-SX*4N6Cxc78=ld!?GU?ac57ak!7&rU2jxmMc6$!U1k-O-`zi95e8 z%DA8WC52kxy-Mj<+UsL2!S^feb(;*yIsJz9RTj7EjP&?zo0Qh>(_9izlEdpDV6IMy z72dvz;bd{Ni`VpvRm6kzn7WeF5;`9}?j?wJ%UjpktG>OS%$2x0=cS+I>zAgRYEAM7 z%IcU-}$^2j-_BwoTY9A~IIL-5e75qeY2f^e6SgiMgELG0vrY%XW1% zIR{rggml(TtG|B6q09~G_vJ+tQTtg$a{j~y1z7C&Mj*XBkcT~qTdvW| z^}I8zFGB|HCc9odFfOe$S*rcDri!CO(4uc68VLcieRG;Sw%H3U$=R=s{J) zX0Q32$$i2bYeQ&Y|LcA=Y}I(VfUAw8?&ihyy;rvLxd|CEFT2asA3Pvd*Xwt^$t|{m zS6JUe*=w)DnLKAdKebItN+-Kl+G?|*5<;`mQNR$3B+?$Wd2hBTRpV}?SN5vK0V$b6 zJxZL%X3j5z&b9W}7HkZ=>q0LFa@E?Cx%M?d^Oo_tgoy%zg^yoZiFr@54{2zgwvv)! zZ{ktq&3nqeR3wY6*-!7{ydFEdbwT}!qITG=GU4N;||)!1#MBK9-le%J>A&OHIdQ!YwM$Dyyveu`^Ks| zFEdU@y9%Q$u_5EI)Vw6{S!iuc>i#i9E<#<<~0&-onaHVdh~rXtG!bjCk+OGeRk3%|YQ zyL(CW%P#9Vd5dohM1w4G#y8cSMbU&O|L4^sMdsEIX82gl^{2s~`Ml-P%?^Hk8A{DH@@^_1reNl;s zE40*3qAz&k#75KV&VhXP#I?uo>3MQoJ0>M6oDdzK4fB}bLU`)!-l^kv4epzg`P-vs zST|YZ){s_yqiw4u^5$`GCdwqOivmvA_wP=BqvL7+WmoU=^o-!s#oQJ2yuar5A%%=N zWsC*4t7jjrknnVC^*r?;DtOa+A(d5m9Nz=VRP_g|%R~g@wuA^9ZOH0A!w?HT7_)uh zslKLyrdfB!5Tbxe zZEIb+jV&!KD9zIF(sXM$Mp1ms9P;ksgXOavgO&3$xtk?}wk>2!E3H3O$}U z(s!@!{-ZKH_8-n^8EEf>1BG$VIjQ=fVmb2d~{#bPzihK8wCtbf zRv5oJrg4^Zb*?LYi+F;@Kvvd?+XYPuPdWy^43EnKiWB-9u?pDwg2q^}e$C~snH~}Q zs|q|^71`XjjjU+8t+)5Y!EinOhQ>>r-8_BTP61YD_Bp@SK2UQxV_@~`nMypq2{I7N zcjvPY^j^so;%u55M$Iv@ZMn!tP1&503;BdGm!eKlpOJ ztCw(_y+Bk12Yi0W@X;;&}S)^kI~??**j(#Gpm?JnW68e>5r{>vZ!ppCfB zl&{^d`j3D(HSHTYE{${|+tqVrFKo-lL*k>jVl4qB)vVazLt& zp*q_)uFCqnfx;303{Npi#cY8Rm6f}5rmgzqE2+$(`|eirLa%jST$d_qtmPXV{StSn?%pS#?qh)~o^tDKxIu_^Tce-{ z0={p|!GIXZt}EH)&Rbs~>a-t%;X7AVpx9wP?yO zLE(e%|4y4Pg#Kj1IZ;wyU!jMeJ6LjbcD6Y}voalhM?DHZQ#Qt@cH54}x2-K(lJzZA zL+4L%$PRr&jki8qSE4m34%n3sS{G*(t2u2SJRP{+;ZW47ST*~MT7Mx4&#(jYm;OCD z0pV=l^$CSQIwDN}gvn89wlb;CD2kEr_6;9%9xtamJ^fvGmH=voojLH)FXg~3CG_@x zj)%X#-qAyIm-)h!%=}?Lt0P_w7n5t33t37Js2*E~qMimkSN6t*!3Y*<*ITuC<#x+1Z4D^R@@5VKl#4 z>tAB!-9VkmSQ$_<5i57U{^toi-Dkf~;E{ZvfB1Fu(64y>=%Md+5onw3sZU$enA^W> zv!UwYi}z1_G#fkjCiB3N1yWq<1)+Cy84;1u>3WYk>oyJ_{b%>_RBdmb8DSkOZ|)IU z(mb=6dQ6pFl&gZHo?XFVhQ5;OmM+rn0wa~=;|k}+O=BhBcYUvAd$Na<_TaY`*OlgvsCa>9W+=zw}t%yTbmD!+g-Ob2K|r{@8`cT6;~FeLR0q!zJ+meq9wi zhvuAM-UWrTxMeLfOls3ckL1l;Sx?Z*PfY*om&0z2orsrZ=p>rb-SX1a4`s|B7|QS4 z;99Tmd2oaEUK1-jcEkDaZi;#>Xe=mx(_U(Ax0lrv&J};$J<@WY8-KQ^OK|TOx*;34 z)ysZ`=K6;@qTAVG_a%UAq99u99aDvSFfD7#)E<{6&0kiu$}LTx@$+X3a$kez{Z{CG z=sH!AVtxM3$rp-g)mIzu=T2K?DA73U89Ubm%z<*oWy839lz?Zahb-Fje6*^SE|u?; zR)-RBSt;4`6H@saeLh*WTl`e*)P}(W(-OaYDdfBRT~tGD-M)zUB(u@5fd5*07wY}{ z`Lic(5jS|khsQi3`o5{C70vt@b^lQ$doA?ZCxOV@v9GqMxP9Y2vvZey-U7eX{p~wC zOI#s6Yjh(_jqpE@-2fh?o^5t`$CL`!Vg<<05uG5sjN^6ZdQ9-#a^Rl6Vt36)ROybDDsP08t z)<-_LvGcQ9IWMFPM9?@nLd|Bzs+jM{D=Y7A=kyb{_*!#byo5wt_(a_D=akgV$7pw*A|zb8A+#@8GDSFaMa*q9A`nXqBi(^@ro@#R|XG zPD@i>sJY&`uk-<5qW}DfTv#F3{g;~W83m7P4zAm6jn+I;;QxWbz`BDAssq%^GwqvZ zdmO5v?_aq1=~+AYTE>6el<%|Ouhy%6*;{fk!+62e{W8h?|Hye76&O4=^Wg9q=LL=K znA*i@YXcJ`;JJ1XpG!Ms))_5%70XLbJ7>4m=5)V1eH%LJlD-y{d$ymGCF@$=*JrAW z+(Co45q`5^Yt`@0FQXIEimMpyQ%dH9s6+iikrVRPu&H~NEhL6kvpMJC zjp$irsD_PH`h+iq?DO5A%nY0{-ib9{%>K2xnds&ke_bm&O$2fHwtB8Z&$Go6=tp7x znvOtpH0HLVBz!?G+LPMQs%{;RgN+VAwbczCJ>W449bhY}{tu}4lPST6Fr+t*XT52q z!4pUQ&*V3{F8q6-zjN#APQGMQUOnMmaragR)RmBI?Z~OxD+|m-8Ouie z&4&9=Om``v-}=C&fnq>GiWZ-Fe_NU6MWhgdJChX%I z6pyYoplMgJ#P4WtDx4Q$To|%KXM@^~DK6s6K5{yVNPc^qyH(^4oPbFDW?8A>nEt*c zmD}#lY7;w-m;I{#H#$Z2S<4I;4Qhxw8zu?=tb1B;h;;GMzlYh43e8V)Nv*P)D>HBS z-a7rgH{RCq=;m{cdjFCVYq0kGTYH#a-yZc$xx8w+R_@{Yk34Dp-Sz1Ka z!rZQQ;5}ey@#9?ba(IS`OG(NB&Oo1F%OZ;)QR}kQfk$z#J(l$O|67CEts-ONfxeW6 zB2F&eiC9mlyR|ByaKBn}bn!pJ{WBEqJ+|&DivM_ZDo^>$vZ;;(Y5OHl6;OA zbLRh7wf;57Mv3p4&b5sS-v^_G^;gIIKAK^9D{#Lq>o12Q;OUESQiIK6@2~Uoj^UM! z3hqCAf}i|fQS4`bhFbg1?y$mj`C|<`wE4T&Mw);49riV3q!xs1rHmH)-aD4Rcsvhh zqC9*6S`;_G{L#3vdGlL1ZctvkmJwJ5)vB_7jlZYiLf%{6`rIKl#Z_yKr|-#GaykwN zsd4^8wtA*kcTSE#U(xR(er32{M0Co`)oL|I|EVt;zwvO*`r-a7O=qVq+WPnHMQvCQ zPvvE;m6{cD=3jVA;VWSz4!){)+T+f>#%a7#@00UR9q3%Oko@3u#<8%ur$1f4boll11)svb81E|QF)|E} zrhPK8&3&!OSe8KCRIosRU*edf`o=$xYrMnlt*ULbo37D)Wu;Z_vg^rar_~$%R~ND^ zi-4p3Z+#mkj&*1Y)iiPuWgA+f-8Mhr{(7L?Xl9HyR6}bKRR)GaQT$C?p=Q zTeDh|qlEYA$7B0${aZsoX~q(+io^qafkDB1->$4t?|!p}L+))G&!WVija0v0Z4qge z54I1SY|mRJ4*So%d!ebWJK=r43N!gxU@MD}cpsYUx-NZY4%n*~cYb>>0&V*L)>F5! z+9iBd{Hz>`Y|q8DV@0DegMIVdcK#H~OiAA6d_^a*`D1_qea1GJp`X~t$S=M1PG8ha zRJQ4<<&|Y_KCQ7%?a{?RD`?E9R-sNe(2viV=T_smQne_JH_dX3dy~}%=Z<-9DLyrV53rSafzigjR0bIvnv9x1C5?`x571mmta{5&qKWosoX z;}_zr>G?qC?`@2FII)Y;G8Z2d>$@d!Vb?}e9H=+ z;;gqnZPn=|3b1{V>*oll+bSV2S}ic%h9~*bo$bwap5SR%xF}r^T(v;AwrB?E@L#P= z?WUy9`kyy8a9JH`?}1Iybfo7$3tcl6+WO9-=Q`jqTh#*o?z$5igM(K^P8yuKa%~`VU*_pP zkJua1=BN2PcUrO)yB|3GxJk7Gj*Q$Bb$IZ;`?%}?H=}D*?Po{1LX&W#LUrF$VO8gZ z*r5YjKMxiRCh^8(Z3?G14e$59@nhc>&oTex2T=isNETw!PrmLrq%ct4U{G;V+w1lI zruQd?1NJ}ZdL=n1-PTt*!XIF}uBm~~r1l(nZ%}_Q?aI=NXBtQEd(jP-UiubNxnyW4 z#CT--AalXrC#vl|-PSfsv$MgesN(ylqS`FQuDfq+HRrc?v^#Sv@TR3ZZ8zacRSB{? za<_2rD?Z_|4#h@;Y-QJgF=5Uz?dB|n(*we*Pk+j5cr312-?(~K&-@X<%%rh4|VR2@}_r}MB^r)<3@(nu4 zgLSic;w=W+{o4wP(=JIf`GOv|e^+u(iM+6MY~QU@N1EBHzgbv(Y8?5dS^CI^e+>R4 z$on|Ya!l*AL^5__WEsOH!+X`MTs~dCxxAxn zqTKSU^bG4Qd|%qOyX&0<#=gDh<+wK%UH_=->fzmD`8$GQR-T$S7G0>@E_BQG!G@>J z9Om^_ZCRRfX0Lzl@(KAFHrS(k`bK%kXoJ|3)xOg4y9x$&arF%BKRIy5{YHG2px9W0 z^c-hRA2ENPtoMo`>y|F)?sCc-Q(D;D7GPJEwT-+XHg5B%?Spnk{pn)Q$T6u@a#vNB za2H)#%STk-4icFG8^d}Ih;l zBbQ(P_}K=xo`&jE35f$v7owKh$B5})_p{O)Nbe9_-ak5+6)jfu=*ehb+p445FNSv2 zTQ$EFV_ABRcBi_wUv_({si3UOnUVChyXF>Kb(zx}cHhpe!G2|*p7s>%KP|aaOH*^m z=)8S_kf`C^Ck#(x;nnq!0HUQiu12D@d>QIit}`i7rvnE*Bp6!V`PjGq{HgwV=Qu|1 zKjv!ru`A$l^YsKxIbo~MVjmeiMZ3k`4nUKY{0L8F=8mV8uQc!Pyv#kOYeln7D`r(S zaq@SyjEZj5E)T5R{eHn)Q*)|B!j@yli!%ESb>HjL!VcWh<@{?KJZkv0j*Q%r;T@58 z!{JQv=RoO`PkfDq+Gq6{)?M2>^7@R^a94LlReXlh{>)7xP5shp+VRYt>lh&w+e7?b zG&~tqe$tVkKz=&1U*#J=ZD@pRc91ULu1a_s!anVtg83ev2{V?C?LR4E{Mq1}g~0&7 z<0B!FZ0^6*2jFVR!Lh!P11nE&Ffa9s2<02=ql%plaTGp(O0&V|Kw_tYv*dPCRJe24 z+y)25;0rwI(&nW(1*Vyw}@Y}+%t`e z9X)0Bt$j%N0rw`vrN6{_^k}|Pma$M|RZoK7$bQZK)Y~62&)kVSSh1j8GpN61c)y_2 zhdxUlm5(Pa3$on=vtIXXa$a0fpYCKDW(bnZ+>@4(iM;z~a(q(SukY^O5xM}SAM<99v>Y$G&EMW=99D* z=hU=P_D0v<{magkM6`Ylp0n#xYx62^9;4Z)*Ij^0g(&Ry^Jh=yyBE>1BCF{I<*^bz zV^&p{P~SUhAN<`m@A2QZ&BOP*&V?E{glG7Y)@i?Wi>HbI)9yj1uwiMf7bknz49t&O z+gKSKG82HGEDoEnk!U2EfVcqsD6nMe~P*T;C< z#a8g8*yTzG6jEJ_&%I3Oq;Y9%+$HnMQz>kt$lGV(ujF5J^3^-1pE)z|JZDAySas&@ z3yLqYJhtaoc{(^$M=VP>I%shC(FtjC&e7G|tnL)fw7latpQLWO-KqAKj~Z)L^5K$u z4QskNdikPutn+_hBEKPk@4e(K=c3TdX$@aau%4R@(H98s&D}PX^>(McsrZ|tA{=&7 zbrn5pDCb{iD~mh}7aO!L3=Rm0X)P1f^f{+%u23N!xpwENSEudQhzQPD<|e|+d+ZBk zvwukbl|;Lg4A~arpn5}xt8Qu8a)ly>mkL-5oZk+Vmbl3566!g8SNT|xxCbeE#X6}C z_YFVn({Xh#;(TivA07XZ;hHt;tK`8m`jzfe!*0&tR2N;oTU42wk+3Ivzu4&V`i$of z#G=mmOPrr>(tUS%hl$Q~`(?9=mY&s$T+cFkz4q`~lO;E9dMPfnN?YJ`nBTqaaHy~4 zfT=LYkJ1{^AEg`N|2I^Bd^5UIdt~X@JzMMhT?JC6nTD0l^&d~U2zd%#6Q^scS#Q6u z>@Hip$Ko}q(NZRL{1 zq}1L8Rn|egmXcN%!anVuCv|W4>&4p!+!tK=$tJtIEc)$&?2ylj+w5-i>OALgDU1K` zp8WM};+BV3vs%3rMih^P_&v|PeaI^((?x2*Fvo^3EXu#)kWRqi-jgQ`1jKe9GBjWl zleI9nF)+8W7Wjo#H8wFd18WOgt0M;12($w5LMw|S>IOCf2gG*EDTwVgaIg_mG=n$G zO#Dw)7rjW{!DhR<4PaS-M5VLf!_?4kWi5_dSgD^lbi@G0f{|p^(I|&(0Q%+vVsZv{ z#zzd)w#(=u=%Y{i^%oMALH<32mg->>gCjQM?;rnIaFmL?rJ`5B0x}~BFn|9@79dUj zOc5Z9|NcEyfHL`engDh3_jCd3_y?h37y{JE*DwWWldoY3&?a9)5*MK1&m{@a&}E%) zf-FFrd^?FEK%aa+I7-I@&;;ms0J;Dj55N$h;{l*88o!Jsz?gg)%!x7iGBQkk@^i>! z0p{fAkSPMp$pOez0VW=RCcwl4&;?j{0EPey55N>);Q?3ztjPf=;sUJ60VpH^lKA8Z z6uAE4lS5D_U`>ueftx0d2cdz5N1+Rl;L`rOloSS7coZgBcoY^`lcT_mB;gxQ1z!la z9DIRG@@q^g_yU*Vw*|hC@hIR6dD0gu_ySY>{Yvl!X7$?wUtk`;E%1dhISK%VL;xB1 zf?);#B4MD>z!!*LzeWK(!HSu*z!wZdfENh^kp{kCC<59@7>hLU1%na5N5W{NgD)74 zfJG9`=tSVj~=#$YCqz$=VqL@8tpXA%j#!gxj$L&kt60SA*Yq7mhgF{DYr z!(@zUL_uT>Y7!Z|!l*`+M8>ctk-;mBYeZ3G3~Uk^yu!#vltsqSCIK%~Ft!neQ82hk zz|0hkZbWGm3~v&J2IeHb5yeq3z)8T)6pV00c@zwB5`_ikB*qa1QZUF#z|a(oazu#~ z40952GzH@vQ6vQeokRt%FwzlaQZUqE!vN;wxgt<})m;_#@5-hRDF}G>mo>@@W|DWZ-rhMmyR9&@kG`!0j}QcC;g)VYHKh+i4i>XoEn* zXeR@=(=gi6eu0M3P6lqLVYH*|0}Z2{4BSq`Xh*vV8b&)AxSfX4jy4xGjCL|`JB@&L zKst?pcHnjz0qyW3jevIGb{YZg@D~~Z?ZE9c0@~q)Gy>Xz+i3)}!~19iv;()(2xy04 zXauwax6?2Kqg@P*fOg<^8UgL_Av6Nof!k>Ww8Ll82xtdxrxDN&F3<>Q2X3bk&<-Ba z2xtdxrxDN&4$=r{2X3bk&<_662xtdxrxVZ)?$Zfq2X3bm&rxWlDSCLM@GjKbdfM>X@Nym7m0JqaI zp3%mWj`2(ZZl_~BqkSkHykDZuRvjCQpD zWni>ZfZG`u?Pxp9z-Xrcw=*!>(e9Xm(M|zwXJE9W%`yX{odVp>z-UK%X9h+)1-PAo z(T=v#42*UPa65y5cK8c}fOg<^1_ABxLIwft!0ikI+Tnc+0@{Jw83eS$Fbo3Pf!i4b zw8N+j0@{Jw83eS$hcF0e2X1E&&<>x;AfO$%ok2i5xWFKw9k`uAKs$KEAfO$%ok2i5 zILIKN9k`uAKs)%$AfO$%ok2i5xX&P<9k`uIKs(HaNkBVrJClHRm>iRUcHnj<0qrnX zCIRih?MwpNVd_i*+JW1d1hm7IU=q*{+|DGR9WD%$fOg<^CIRhmotOl)1Gh5?Xot(j zB%mF*ok>7DTty}U&%o_W0-oWbG6{GFZf6qk4A+=Rz%y_=lYnQqD(UCaJ*fER0E%3$idKsle?lj7gLlvM?s8!0jxINt7wFFauM8+gX@_ zQR2wLh@}FzvoK;&9?8Opr2@CJFk(?!$-;=G0=Kg;Vo{dK!ic2;x3e%}QPRo6h@}Fz zvj~WVQCS4U0=KgWh=mVf5fBU9&LSWdK9fa2EO0xEfLL&WML;ZYJBxr=@Q6h~EO0xE zfLL&lML;ZYJBxr=@RvnEEO0xEfLL&!ML;ZYJBxr=m<@}7Sm1UR0kJSS76Gxq?JNRf zVXiC!Vv(LMPJk@T9qdU#3zgKso)n}}>J0Xz&_+eNx;Um`luLt(JE{3lk+v?5i5Ml< zU=zjzeO;UYd$@jJPl|w4q_K+=fDacGZ0sM>*~JOahbs&=_79jIY&;%Za?p{nf57!% zA^!+V0q!)|gz=Dngv9{29&EyR$UnRska7U_q<=JEf3PRVLs9~0>68A^ zfd9ds91m#=U{Cr-g9rdNVLap?UKKQm0U*W`#zX$$bwPtD05%>EpanJ_58?pW*gt?8 zsQGw2hy-9`{{VVm6UIaS;pKr846q5~fqww--x?;8G{7c|2mZkgocudL6>RJuLs>Y{GcRKfFF@5FubXgz=Dnczw_yMu3gSgO`Gh$Ac&V zHuewR3N;lx9>fW-v41cW*o5(re|UW$0S9ctc*sAzK9HgVHeo#EA7OpKM}v+1gLnZp z9uHiBst)!KA_mxaJa7$c>>tDounFTK{|M^?q6XY_P+{X_ACQ1nEy8Q9oA z6h8=MPo$$kbr1W8;s>GdiG($3ZQqw zc*sAzKIo8HfQ`pP@qn6h8>%PNa{5jXxhU4X_EXNB$A; z4Y>x`cs?k85Ne)u$Tq;n-{2-J)k;V!(9uLJ2Lg5pMu3!_!L;hj@M=C7X z`1+vuK`4GASr%&L`1+vuK`4JBofd37Ulczm1bn0TK_TE9#Sf$y{AwyfN-o&gKgd47 zCX5IE5h|#3lz$LPs7ULDYCT~*@DFA8zsE=M1LgCRHuy&1RwN)pzX0|R#ScQU6)DPKWB*Y6Ae38?#0)m}55*5c!4+xF zU}OJK{2-KEkq8YozP~7b5Q?rym4=Q5>>r9Bgt9A=slmqnq4+^4ydvEiZ0sM3AB55? z60*U@{-O9mD83?P8*JIogQLcWWGoy64hV>h?=6w&386!mO>CQ$ z&G;W+8f20vid3L9iz0!M#vqAOSQL28?n744IVv#j1e=r;q3M|cxcFPsGi(lMP}==( zx}JUazcCj{Wv>s7x@mhZR#+|EImNhCUL)h5JmE-zHP?rzo3;%D7ZuvW0Hd-hA1KmhEo&dlYY-uzcj#IeiW1?wU-8mW-&! z8PZl?MI)nDS;=2J+3l&Ha%QyYo7pFqY>LIIle%0Bxz`oct9m(C#7GyaKV%i%RQdAI zImhN==E4n;JyTm#=jnHAr91spQjClU7nawZySq?P^V#|ZJF-L#K1B1+ROfb^`Dt)U z+2!}SYCI8K!mI~#_u1FV6qb_g-llNc@Xj@MU6E}iT$(Gg{)Nr?qYXK8cOF&Gl72Iv z^NU)x^7(LcdJa=ICO%-+7j}ML&5Cn}_RKH8VwH1{j~cyn&}%Kz$4%Z&t1sO2f%&em zg`Fp4Lj*?Bna#=kCkoTUTQZkyH#WWAExdB!_JPHwGeylrB!@C(F7rrIu(!%G>S{3EJrDZB3#(2iU1*H&enk&CHqaDK9otnA5T7T3-FxYy%E z!`rIR(ZSP>L!S>hbA}CfcBqd1Ur_1vy4Q(Bg@A=R|~!K&EeJ%Y0p+k zoPXEmn8_0NM}_8d!dBnhFx@RXr}df-c>>QVSyG)M{n{-N~l~aacZ&{ zG;C0DQ4g{?ljGCgwYJQ>O2kr+uGd!_I71Kad?#lYU@8%FEkpW2gE{5*6@ zSvN1XGS^P}eEi+TVmVh|*;%259;$gCyvrr|B|huqv^Aa!{#nTHqs;!2A?4cC8|b;* zo#RazQ!^<+eA{!khyzN~SG6ZwQlCn#P*}m-Tluj1R?9ctBbOg|=TIMH`n*yu@y`!A zsntEz)@`X>A(O|pOSEjY#7)n)1 zrJXd32yaH22cs;Xr>)Urlv2LyQGP|W&6j{Tau+Y!OWM*mywiU;P^vXIaQ(h-xo3T{ zlLD0P?71jE6bY{b^yHz}m*LfCu;0ohoLPDsCxr)Mc(%5td>0{#^geuXUT&aJUUB$H%0e zv$gRl<9WScZ<@tarFP!ip*$YTh1!ztPCphxX1Dc;`NZ;#+&{15%C*X-L+urZe3rbK z<)!E6TGKRdMNa1Et{lH=dxOq&vSWPVHQ}CYEYi=)XH@6^(c)c!P>X4R;2g6i>!I^ zs@Zb4Wy;7Gg_I+q1Mc;4imE@;M~-@j_Gt2SE6R&;m9l)rZ@BSIxq7eBf1se|uzE1} ziVdxD@vKPC{veqHJ)#wR?*_TB8>lAq7V_nC4F^qmO;(@dR~{Rqve)8@k=8NY6yFzt zW*n=v7a2QpD0R!ZiwkjUTo}&1KOh{ix@Je^LC>u&zKMD|Gq)>F-)bq9_pE_WZJL$& zmJNx4#w+L9BwIeaKo8$9-@S5ZS_J1DE88W!XB>NX&38-5efYwg%fho;$%B`%j<(4{ ztS@tG`NH(TPaL1*H+|{vjwwq0maq0z`1o>dchv?(jSY#{O6KX~)Hw^zRIP&r|~B12U~$z=DYn58py6!zV( zddolkl)g;WQjXI)WjuO?^IcA?tU28s7IspnDuLa5$v00xd%*$Dw&3OvFZd_kX9=|O&JpFQ@xAan9jdY*#n)-x3_HC=xS^|E= zY<;^X)qZ1K)4I<0S6jb_bnOxjoW4^vVVZZ_i}8Q)XPb-OIB=J>R)EU&pj<# zdabEtL?wNZZnRr|K9nSKWAZn*erGqJ%i>fF)%Yg&)sTVUBn;)?I0Zu)I8MM&{*BWwlzn6I4dvcg znnsy7PQ1o-+sSP{%DQpVHLlrCx-zcVP9_W}-^OwR%C>Q`g>r42YN1RU3vDRR#xgWg zX>pP@o?}n?GM-^iCNSgq^`tN3+4ZC^D7Pj^&nUB*90ldo;K8rkhO%m$R3S~4AUT6C zIH5xMG(m2L>w=RhluKhN4Q0}VL<)StG8)RF2}usFJsW6Y#E~#X{{KxC{xC`MR_uokx`b6k&AL< z3|*8VW9&kHOpuSk4}y3MxiLXH2CoRhG33Pr*%*8zh{li;6C`8sm>?KKK1`5{!GD5S z47o5tDu&q*gks2p2{JLvjUW<34or}UVWtFu81i3&JPh+Dh{K?r5~N|YgbB(pR6*f9 z%VZ*tmNY>Zh8iT8llVnToS+Ir1rW^1b%2&UK@*1h8<>+T0Z{-!5r*m)n3MQJlt9pf zq4oslS+G~2%n;OIsQiG5y#mT0Xu(i-0TX)#r8a^R3{?*>u~(qs5OiRuIe>}10*WE1 zz#tXCc^2#yP!2%@2E83j>=jTDK>-G}8%*pKP!d7^1+5uO>=jTHLHz}#7fkFGP!>V^ z1)UYnvtX})mH8Z=&~f>c7iPX=Pb;h zvoMn(=FeG}KWAYu7+`Du=Pbw>I zm`S1l_2ti5n8~XF`}RL)VSZnYKWAb7oQ0XBO_Y-UISVtnG(cwma~1}JjPC=38hNfpR+Jf!^R2gpR+Ki!jF5QX@AbbppJ)0 z>F>{380ZopR7C%rg@OKxKWAYk%jtj4!od3Ya~5W@NKXHM^(>5txF}sfgarREC@lDw z#$bt382{x#81x|Y-+iRNp8h}nn1KKGAdH8`n`?FS`I$pPHVYQYuNHDkUm`!R*YC@k zOjuwx zyVe}u8S&BV5U2FMkFMqOLPqDzEiUSCg+xAn=Wewu=f~bgdk^u&D8z^yReES- zw^;r#{qlPqrvn$Ps1gqKc6_gC+M<+ii_c%t-gF{lZ+K!yjnD#_MOFKD9*=vop*B|k zt-<3Nz0>B+{aU|Z=e?3Pt6?SgBKZAm-H!>>L zvo|*`Vu|zE=riRsd3hIKV3EvFQ_T(O|yD#hl-94WqeUyZB|ZdZMwmHL=J8Z^Z~r%`lnj+L$e5YPp7*9mhRjn%5>jT#oDd;V z35g74$UGFHgpeq+%%w7gG9*-{4CPtpb!V^rJiqV#T=&2C?{)rjy{v0-UN`XOn9(`qJtf=D zTFO^S9a628RlfIN);8vG5{Wy%Nn7DA=3Af8gH~aAHtwE1GC>?y&z+O9`l17q(r;$0$9!*L;%tl% zKbSk9vAVa}CCPBKN;iGIRbS9L)~-kFKEk@qmKDBxyKk+e>W?_M4jbL?QX6TvpAH&X zZ1l9BebDyFvZ38SEmd#8-{Ss2tR$=Ulb3;X#jmEZ8^*D>H$E{9ape9M_C;FvlU$1Z zy!0PNA9sd|PzUM4OWpF@GAy6n!g&&)V56 zyQCT~R?9ZF-1zJh@+|7-f$cp+iGWL!J~L-us#NBB?|8?NM*do|aC)HVURl5!QF%#0 zekHXqr*3<#W+JnretpWV&6j#~`k(q3|1deyev5Z=%WBI(;r%xgb4sJ-+JY$a`%iRZ zl4V`*XXfO)9zE<@XnUB^hs~ztB5&K(?}FZK!msW6qULORC&ukNGmb3Y&XZ?3Mr0tC zmEld~=Ph?jJkn{YisvmTl`4MGQ?`@sj^kot@We)+OHLWGm9;@dO}m~Lcy9^D9ZyKX zM3fhIp6j|KLmx2LW4L)1H{*PJiL-!5-SN`<_C#Jmcdk<2`n=#{wF&nGh~2ktNqjl% zW{m&C7^Zel_&+i0|Iof`vF5*H*8j_x;eX)pfHLdUd;_2-AtQ|F5mGZ#fSiPc@IP9F zYbi}YO+p43Fq06O1piEs00z7y#3fN?9c9+n+Nn`y{qLPXnf0}hf->tcWdqWkfIEi~ z8fDgLv`SF_2GqZSn!G{UlxTEJFrep%M#cnbTcS}h!GNwK8W9tujfqCX1OxhxXe3OK zwk8?{6AWNqXar1h=;37(~>+0m}cN{tbYsLj4=4 z%pvOE0GKKoc`O2=zfB{Mg?LngF*TkLQ2z#SKcEZ|Vx9@c)QuVH-vHtZjnEe2>WTU{ zKp8m#>fZpEZz$A-`Zs{*gGRXv^=|-rd#HZ{b$^2TH-P7ZruIoh{Tl!S{|{oQj~KM0 z{taM%`oF=yL6V4*k|u%GizP_`4+p@lBUa7?65(ISb+F(5Kge|wDAWHdxPI55>B0`o z*79k?U(Hn|X1=Glt-G=J`)1Yk$x5Q9fBED%v_1-M7FKGv^7`mdR`$FxafjRnCiw&5 z{`-REV|KV^^Vj5TST!E{zC2Z3bC#bank?>o>HVQoE}A#0e=DmAWO@yKuGfUpR&}3p*S=z`q2Oo!9L$pq=W3SB zw*9_t*(zYaBj2BVFH=MvV?55P*3s!bI__h7al_Wrk9kG|KD+3O>pg5qFwWp3D36TH zVe8`aF$>5Td!tU9I z4GU=ot$HVmcShM&{nqlV*Ns&Pmzzo7p&5oywN%s?KLNj>!#QJ+-zJ{5;P; zir-s&vgk$Ek(PBPBNc=%@9&vBrHeau>a}_tu|R+7oMA-a`zzO@a=4XF0pveTO1BxqR{t@(GhJ22kZDl0QoLp$NdG-C zop~Z_#{x_GV@Y*$9|f@|m3g;iWLYc&qeo3Ucb`5Wl(F=A_F!1(M(1aA!fE9s(ab6S z?cQ2fU%t7wq{Z~(T|<4}Sl!nrZ`wDie=7CY&QwzRbx~tSuXBmn@@Ek~jehrjKgm3& zyIP~~*-tynSR4{-_1ny(=ol3GbN%^oUZxAPWk#pZ>M(yil>~m_!l|3q81X%#+?++B z93t0mu{WCY&hw9RXjradygY;sBo&-?wsVo$I5i-$-Lae5DwP_kG;X zV}96X@8M0QcQ+=~Y3xyw|1uw+|6tP>1*en48)rL*?Y`U>tS0HmZ^`a34L99lrhQ1c z{nvi!9v$O2(umo$56toZkmfh?q0rpsoZ4ctFrtOd@6tG!By(P!XhQsz=NlX#6EHAX?MdOCn|tH13iZ z-~>TqE{T{s(0EH?!0Cp@S`smPpmCPO0EI#v%?1MO7;rRO2;i$oV>^kMLD0BPVt}h6 zjp-z!xkBSPi5S|^SWY4eEHsXj7~rT#V>pSJN1)2$YjGH*wE1Yv9#KjgrL?J)PL$F{ zDQ&nIP)ZwdqW+r+Kn!3|N_*{Ypp-UBX;b+Rl+s2iZMYavN}CLQ)o>`KO@_W|D5Z^3 z+SCmdN@)X%QW~YS*S3^+MA;9ew5bI~l+s2iZQ!L!)%zkKPR$s2ASL|c)eKPVzXw#p zKW@z^rA@sbh@Uf!88QKJbVey{xL%OTERA6@N@;^G5R}rU?$3yz0S2YCVHX1tI7p+E zHZ&ARDQ%R}2Fm2r_X!c{@`=p|Fk=#P-?GHhsUa0Xvuo0e-q@7onaZ5r{5P@jy-`mDbX?eP zU_Y`{&F8s?Uk~??4BKT>cSA$o^Z_@UYIvPO*w>g_rQDW>^_HbL<%Mn+`{=yTdc5t1 zxIu`*ce@ae1*1@3*&h;V9k&>(-mP?0*yDT|%`a@dIYYPi`UMNmyM+R=R_nc)?N%;s zat~8jnBTpw{d(2TW6WDbM3p`3`hv^n75po?P3`9u7B2FNe*a#zGyn2dX%RkkkD+?m zBPv$@-@B zV6%OE?j^BJ28B6Mzv!)JG6yx|7+aoQ3V0%vsa7F=&n+f{nZ=sP_LC-;oFDEkevnK4 zI&P%P>DkBpF`l$|)4^LegyTCmwVoN@!#$auHu{iD#4`J-a-L${iPa6>`m9s#;7%aqss5f3gh z%wz9I&A=f#B4O{KIqn~>| z&zx?cuj!X6`&fO!`{&k^Zt4*p_1+)Oyg0Cz%gFUe^S%9X+w`vI3hE_e1sdaLMg4Zh zh`!p(Ew?Mu*LzRFuJR4JM|_@cv+dCrDx?%ynLowM*%}$l=snr8AU)lalob$^AukqC zoxRSsv@OD7*AY1tzDN1n#>OivPpxZUi++@xwYAnbt|PzrMgC?hdE?{3?Y>2yt<4`Z z#&nK2A2i^6Yq51V;oZL3;i~?3*ZwfxEBL(YKT_t%k##LR{5M+QU@rxZtxTvE_?it79OJ3sht=0P|S;PB0e=yb72Lg?bh6n=zoY_xC$NYZ{H^8<+QrQvat47%np)VY8eV}TXG+EplEM7;`_KNfDoQOX>p z%z?oiN|{ri79>QXl=)ihKq+%n3!M5|!B9wic({W=UTJu^g}_jNZaUmUAg?$)+(cld zfo?k7MIf&{nx1s5G|)|l`v{aWM=5jah6Sa}QOX=H29z>KDf6|>2~L{AM}((Alrl#t zbLw6NrOZ*v94-cwGDj)%wYLTy_+p}zIrVOUY&iw?$>Tw~oB}CAJfH|E5F*5bFDZ~A z!~=$q0ue$y_=Ey=Uhy~z7*g{pc<_xBcv{5cf$BCqE#kq?QQ&D2j|a1Yr$yw@Nr6dc zJm~zVz|$gf2BpBXGahvQQ()d1Ig(Of;u#M*|0yu@jGRy@&=?h^%t00#rOe@?MJaQz z9$+yBrOd(eK~ri(wZIWd8onS<${bV{Y08xZMA?g`U`aqJb3h5hk|qJE%hD7z2`FWb zQ03Hv3xSMM=71`vrvFgN9K;tS&-J&ok5cB~`Jj>8LMd~UGDj(Mc#b9_?+==?>;E3g z9E$^#ITq0Y2acd_?w$)8K-q_DAhv<}yy(d%~>+NlB98IUszmo1CR6i``ij7v{GiCedzB;p#p7Q-ht8gPpvj%l8-Mef zqF(ZT)_w1@zwlId^54?rILbJE_P$3!>cZx7o^V!e4LRAnD_1hBUUO)Ml}qG@NhBHR zd~3YKGvL$BnK$>T=kc-hM4#ytLSXQ~cb}5e_X7mpXX}gc2kdL@xnJOCwP(|$T*T1u zx5BKRlLb*}o6aSkl`Nk&v%AXNxN-I2&joK>v-qBK_rHEvJ;- z?7d?u46!dyTkL*$T=u8Zh1^#R`#cVAF;ZN#oe&J$8=vOJIz@Jg32gHs9yLfPKfL#~ zm3ftJynxE5n_-uCx-~qg;k5OcoYT5=eNd*q%KW;&>c(}2vTO~dwX#ZQb!F4%{CC$^ zDB3qi^}M)wPu@Iborsl50)|mnzE5+x7!|;P@|pM z*7KNO2JXpEUJIVD$3LfAuV^w@B$4*YvTlQ=Rw&1&$+mS*qLX=+HvYcx{{FRiwF>>Z zEV`K6vUhHT5xW>tUA*$twzOK*M)7<-J8)Fu{LqM)j?r7M$vKA-y|7E4+&M@KMq2kW zOFqfvurzQEy=eZb&@()Gu6YY{&SXzj_zO&st&mM2iy)gqiSl&p&rJdmgM1mwhPhwY z|Jm?{*<6&L=EK95 zEG*zK@USNfX;H$%O$8PMSaaBwg|sZ;VOtg!c<|z3Ulta)z2RYF78bY?;bCVM77JK& z*qVg}-K2Qfn}r3T3lE#Kuvh{g0d^K*L2nFF^!&T=!2$;c0_@MiV##1g%}!&n6fmUj zC9ybZJ_5|uV!@u90DH8s0J zTyv>IFe}J^V1aTI0Y+df_(lTcKd?wT3GyFU@N)#ne_(+F0|A!1vEVWU*nEfu9gRqZ zYVG%es}f-QAr?3=5MZeS3w{ZKX0?N^Mgq-h2fvd*v)VylBY|eMgDDVbRy*iyB+#sO zFeAhic5ND|=Ps7y!Htr}t4R;`@N;gtxg9l2KpGNs=5KSu@K`0~{h4Rzz3`+or7vQC-?_VTKhVs)eCrOkB{TV1f zO-+6iLD~i7r(qVJ2=YfLKMfP_L{KaMG!QjqMg-LYFox>~lnXF8n0qIJdI1U<|JZY6gHeqQ);GqJ)Tt@t=rjA>v`di3nbuU<~Jn=po`^ z(vparKkzVXNkrZsc$l^%BJU48%v%zX{u{(+>u-t>QPTipI6qXS8{7|Ai27f{PlJC_ z90sAMLE4!>ph)2;I1{D=y5=sH7u@*%S*}cSa(tE-EC4ym1k^oAULYR+!}MZFL>BkP{bkiPqgrW_yM_$eSa0lNO8>!?7Z6JvC>Ukb z{#mf|9NVjPLJGQy`n4+R?cpNZ?!@n`Efx?_+sk$O&=B*FYBlMV=tw0~7uBXupT2Ih zzP^jqvfo*Caa-_JX12}o-IIqGr{WLFS{Jv@ot%^ipZ}t}!~5HQ&czqS7q~CTh_miG z7N?|MeL-e{TR8m9BF+^tyKPI;_qR|nRG?GX(-AY)+a5PP)@#PQNbhBIzdbiqZQ5qs=3Vz#R1<50E`L(; zXwilQ^^eIBC-d8ObR85B8#~;(J+Onm!UX5W$|T7DdGFk&;MehNReL^ks1>?dMhskM z7M=5yFc^O3Q5y4mx=u-Z#7=ONpX<)zb32y{a${@B5@SN)+-Ek6mC5!jG8=uzSG{u% zmHe@1r=?Z0wi5SMyG{1fQ$Jm^WTL*`AwOU6yzUVgEUdh~8*iV5#9xPL9HdjFZ1*Ly#&d+j^Fb-Ca~IoJG`>#mWw z^`x(j@#~^JKldJ&)_f%$E6tnol37xm>o(K1_x(X9bxUnO)m1b+vmZ&~$_d>W;d6?x z+NEo*6jVpVjT;}&y6Sn1M}L$+Qo60*8(lP#Y!}k^fJjczkExot&{kxt!&_p-HE~78 z**~WAoNnsr01h=r-kCej`&qv^3#vMXyK>!DRv8&R{_xwO*vlsuO7qS;*;6hi&%O)V z#`^n_NZ5lD@7^0xp;4g;)WfrwvCx-`=Z#TZLG-iAy`|HRsK=UtA~h_boGf zcDY1*SVVp6Jo_VD*#6<6w|rt>upLL^+>}^L`CT7RM;-s9*zTX^*<>l?6F~V&e*HeR zy)*dfhT}`-Ckh)l6zZ+r=QrQxt!vp&O5+gvflE8N@s4EF591EcZ?_tM=P~4dPWi|; z;bs#oynQ)#Ou;RKi+D+US##mVYR=sqCv}VswXZ7irhiv9%-d%s({@zTh0$v=Ca^I_ z`0#LfnD?aI@hN<7@N|*FBjM``iwDoBXk30$fAZvxpGME-Pd{!`cyRKBjZwb%g0{(3 z@wTdvP}z@fl{XVCv@Wx3?*6>kW6MkEDGH0WIVNW3{zHw`JLh9>zNpMk&dFT9ugg_T z;U7dIe|xIAiyEH~xR%h<)GNQ$tWJD!A?9xM!LQjb`*%LNo^YA_m&((97jqKmIUdZd z_z|2p3g$HO%P*0aU6UL(gyQRNCMQ(fYL1-z?Re&X9}}b8$Aoa##}BSamp}ZPkeeN@ zzu)0ugL;?=NAe9N>xb_fmXp+0w8oa}3QG@h9X)>S^VMU`O~oC*G}=~Q9OpUrAL)MN zRlF9M|2w)L3En8(|91<6()}pi4{P2i-A~=xgOdQHlaO-&gp*Kp^tHQ$s-vqoV8D42 z3u!wHP+3GEI%<3c0`icy!+>~;U~<$?ft)?0?Le*@45`Oq3^;jWVfGgT2v966j(|ik z9~LZ3>ZO3DJ*4e0;8co*nJo+;Kxq{qc~PLkv3bkeI`Oo_9PX<`BaUJmfVnpkoUU zi8;i;1JS%&i#Zf9E4X_=3_TE4JL;!kR78OO8295 zKQ&HbL2M_&=#A{Wh%kC%L2M_&=#6Z|h%kC%L2M_&=#2%jod}~h7Q}Xx?q7Q!p>#h= z_frp3DBTZme(Dhq2TrIYxL3h}Dl7?}7IEOfN`j|F9H_yP;As&D&aWhRTEu}0ED4?# zao{*hg7sk>sK1h6c^C&yw*R7zfV2WLO!-k${Rd z+G~55(HL0}(7h)zRU3lmI$=QFU}!;6dqr@O;piJ)?9#LZ`!Y zJ0f`j#?-VSO7{agn5G0u1m`_4roMksx*wsd;V~Db`$2rcp>+S+euM~=fB?M@pBI$w zN9leVPwM}*>gYr%5~3AGLb!h5x(x(jq!5WKpn4@m!Q%gaL4OK(IM#SlD(DaDE&mSs zpDfD*p#S8k#OX|3rJG%;ECD-uBYLN%*r8>-&3HQ6s^3b@T^E^NveP)7uokV12IK9up*J z^S-Das#8pp-16hCS*K&=BU9n>*dILUKX?oj*54XxoV%nVOy^YCXspwsc*qupRn(C9^>aZ)1xg#e){w#8xc^SKK*TX+iOck zt&C5bXUmHZ9~Pi<`JDW9VzI4JHBitOYl4x8XJ< zyZQA`?ZLZjy1kx*b8Zu3O*~sQN8u^SrjEPHz5>_>UExQqKFC`-V+L4nJlb3)+Or3+ z`ZJi2-|r1H&&6}h-l=0nSbdSYTq5`K%~vuOTKU(XY- zZ@7DZqi^s1^JUh58j?TSY|Hg@UwyFd)ph1@LiGJCU6I#UZ}uGe|1kO{DN?!mTJuc1w+EJG{iVzOd%D;k${4Xjjo9e!?eX=7P~^jU8l+M&iT7~NHN z+b8It9i>zDA4=%{-(=9$%Q%F z+Q`$dDlYPhdvH#@@^RoZ5P1FIGPiW9&>8-I@jO(#Upq+ajtm2i*OItJx%0& zEZpL!bb|6G{J;!{oBp^%LH_)?>Q9Pim|qmggt7ZtvzIwrFkgLkD# zAyq)xkXp0@1uGit6vsyco#Fv9u(s&~Oeqa;3fKa80YDZ|&z2xn1rJhyC56R7K$61J zAmB)0VGs~#uq+4|Qn<4OI0GyR0)7-01OeFq%YmTH4i*E!OBa>`fw~+`ArN?yQYVTk z^{@TQqAdT~oj|&J;eth3{ z-I?RSz8w*Kq7Ff30;VQ#fYwFioT#6I>;z0tAXQC7tcm(5=zD;@u!sXR5vDJ2pa+)- z&x1ISDIvlX1`hP#5@8Yp2Vy%BrZI3xz62&RaNzhvgsBW1aA6_BWCji#rw|FGwON6@ z2@xhVaNu}FgeeUi$ej>rk{aN+MWjhE(Vn4C&TOqjsp4~VD$(A%bKP zVE3tqF(Swop)5Zv`V&DL49fDulP=2gqe}f4Jj7m*tTa&Or{<#nFJSpW1{{Z%B7tPl z{{Z9%Sm6H&@*}Dx{|fS7JK4~}McDeH_1Nqlu`rX67zsYs`0Zad>k4j9zH)f0plMQm zV?~Me!GxyOm_u)i^23_)HBS90`CXBAxamsq^<$_1EV{6pW<`CO@=N z;^#73ad=&EvcA!a-tBeD4KD~|2|jnuZTRrVEL-l%mb~PE6QkTcM~XOIub!Pd;2vm~ z@T2?DgU;PNeVnxT!i%5w%J#$q4GH4Ntn+ZtNBeGk5J^rBDM_x}-;x5>L zdb1Vsgtc$HJA5YdvErmsNC01K%4+8I-K;D_S6&>LzEWzh(bRf{W&gmHU*nxW7kjo| zo0eahcMNbFkX!X^D!Sy?%dOA;;xW%l#qYXV5~I(f#;P|;KA*|JIfh^*9U_z@7_atU zNb>tZs=xeU`nx?wm0{gVF7IL47=b@>a%vC$IJ1g%O3~{Go+%M}t6Ma2cSIOM`C6qy4{8X!d~?Y9p<*guPr|iz503P4`PR!| z>f-W5k~_Z(dOzs7LeSS|e10dxO76%v6CE>gt`hF(cUr|bDGv)J^5qa&PG*<+{J-`>2&kQ5y5Iu6*V<>)Ii7%2zPZ_nP<( zA*BoXC(KFN?Ah!)-L2dAJxV7RwH<7V^yGGqidDRG@h)rp4wlRfcNP2aA%bm3{0|Cr z?AX>P%ke6b+gZO((8z86B%RWmve{^9uLNn)+$~~1>HhRy(#&D!U;nqhOIy!DUlHmZ;2VEcP4N)turc9xl)!N0H@xF?zJK<;}`EH>-DI2+%i zy1ALO?MYi+lN)Oz{oJOkq9>a_h@bUovo2wb&dYrE^@-W>#eO&8F^9J+0eakf8-zbR z`g-!CH?M0}Yuj#{jjE;w#LGjH*Y%FPG1<$T;K_~&|1jUr@930+KO(o-A|a~sswIn5`F9`HA9zqqY&;+BJm#6Y;~{6)uO z7v{xwug0V1AhtQv4Q=$Jt?7b8#*sJI_`QC&|uKk^5$o6K*N07 z#2NMI^mmanB{!_^x$l21Za03GF!>_s{V4HTq!F%^6|gs|%}~08h1!W_MwOQcDZ+tUBP&>5wbxm^ zid<)3Hu-$<*~;vWg1*HOd!3!eQj20{qjw^Aeo&Ry#Psy3pK=qF++{1{(;mc7QPX%Q zm+;`S%a)bU=`nLE^f#iDrr5)p+w=CL@@weWOS}UN|3J_@r zdvDNOy;g@tj65OGj@WoYWn=4v` zxM(}Z+A08tGK3xd8!ymy4B(}Jwqrmb0fSmA;9%Dg+K$18gFzdEwqu~}7;A41)LH@b zUr=i!Xgdbzzo1s;k&a8W9b@fDL9G=~YX$gdpwKJ&kjfyzR0j^UQIlY<1GQE_trg(9LfbLWc8s+!g0^D- zxg%Gag)(0{0tuJeU>C zJ0q|P1ty;Hctqlf`ieo@G0=7lv>k)`I1m6?jgf|>7y@X<17m9NAb@T>kV~h&X9);S zD-8=W1VEO8G0pWrEk_!rPzZoD1!J1)fqITK?5iVyo;)z7h9d%K$^&C~J0?HJT}N(9m!pxuJHUeI<7@cu>eJb%#z zA~<1yF}y$Eh=I0a!2J>0jsf1kH2(F7I1d<8_isdC-U$dO>V6PW>j7i9zJPrv7{m1i zwyI!E-Cq)cfhQQ#To0^28XJ2e$TNX4ydK!ff-$@v8JQnEKqHDjU<|KEM&<{P(1-*O z7}H!2nIFyi2U}k-hVuh9&0tJ(J!F3H9R0tx9YYd>lR`{fB{5P!a|lNO|0N(k3#9)) zR|SyDfGFu-R|OLI$Ntw|3?Bon@LoRVicv$Syr(;Q-oGr$@p|85cjZX>RL(uUqKet+ zZec2I7jl}4 zg|_h?X1UN*wmfI)`GF!~Cb&yQYLh45Lt~Gy#+;qUp1rnc)vwqh7j#^da($%l$0-ky zJ3KYnSBzgX7+3pC2KlG%BTx!#4^}rC)?dc=J~_+cwROCdd2qko99!hX4I3x6g{`tm z#}@YMZu!vbBHC_qZ?fRwK9l?3Vu}c73;7s`Jh?R$Kjz9L#IYJnJ?pYd>USPhw%IGK z5Ppeeu;)34PnQ(aoMG{=t<7Xl1CnolUpKFZ-gMkTEXn z(#xv{S}nni^wke-mNEB`V4dOd%ktPT9f3W_vvgs1N(N zbKbRg&5s=lEu7*E)zo^U+gab1tWhNRk-_qM1n*lOIfmU2#5hm6$EpYC?TEW1X_hH! zUGp0kWNE)sQ7bi#)g*`G_gl=zhv{{k+H$Yg7q?)Z+8J4~x~1o2eonjB+8q&k@)5%o z#bPlpkNi>3eB5^3&VeE|*_W&I+5LOx|08FO1f_rDtdR!@<*ZT8n)*UPW$)Lvq9|v* zb|+BIdhJf2oHa-eqq6tZ?LG#aB(N|$jdIpN=bn0&0p}i6_MZA;MLBCel(SxYkD#12 z%2`u$R9LX*Mmg)XM*|CZ4FXJXp`10!SyOiuSd_CyIqS7Rfy&hZ5In*;NJCFnq^lW>X|9LN4{{QS>l_%v`5~NxG~^`k2Q};teu(bhPHFdq9oHf}0A>H+V_lrb;q@tWP>_a0W z+K4#Vhekxy5pgJIO>MUyY$)k*-W2d5?6jk?c=^WuEB1#MMo(Og;8J!fe#`pS6O>M=*Xp zpK2{G>0O*YKa4r5;$v`|eMz^tJJaJSpMOa9CVEWPPJcSptLY)K?{g;vL-yyNk~!1M z5Kt~`k$W>FFkqX8M_$aX4-3Zn6=CKduD*#d;0)o}B)1-qO^Rxs$!0x5IQ#u{7EWCv zHG=#p&dZmNgZbM&CH~BvclQh4{(5HoYr+WMbr*?WH{VxX(ih1k=&F{DiyF7dSq;;EQuShD>jOsvQwSoO|_=9pK>Q_=A^1e36z+pm0!8GGxF_et<~JS zBQqonHYe&$JQ~jM z#-99qi$8l~!a>uGElr#Cd$_;64>&0+DCZZ5Kde7UZ!taIvV8lvGozYyeZ7~adP<52 z-MIgA6*pBw2c<@rm1FVBACI{*-BC+ykgJjFyX5lOxJ=XL^_<`z2R! zxO3I1YPZxr!h0>js%MziTAp#qBXab9zLYbGmg_5`y;6GX1Y(LW>~9i0-eh%)d+`3< zrqsO}w`|J`obK1G(lvzH;r=7cjbw(_p1tFqPL_NJbj__TnGPsAUU0L#;N}W+c!6{S zc-u1_(6@ATbay#t>B@KTAQK<>Mi<9($1L6Wj1TB4sT??NdCAQL`QOTy+>Rb|Gk3ED zp#Wr~kRJvASJCmjqsuWT^K+Kqr@_xE9z%Z4+|A9>sQll$k| ze?P$>397%BIH_~i&hnhwKR>VH0Blr|4?vV~04XBs*El|!>5pkaX_0v^hs zVL@pb4*@AGkX=Gb)N31cu#-kA($pcC6$GTPpzMs)o2j3ISwY1oR5Tlfxv60jg}DK} zO+BAt0ThB1veq6P@W3H<&D0?{%R*%{L^Ov0h0U-aAxnU|W?1kz5}>RZ7RX)@psE=b zJe>qsY{vo^ga}y_EO=NEU7oey3nVXykVL_P*iM8X3KoDMM986FLCTy6F%&GoK!}h+ z!GgaPsl=>Z89*S2zzubX2SfOKQJ5Qrx!2YP3Ui|{H#IWgfH@fn?p1Io%uR;T8wX-L z8Afj$i0xz;y>TG6lVSA6f!I!l(HjS1I~hiA913%zF!x#nMqzFg=B7qq6y`=@ZWQLG zhDMOH0jYB8!3~AEQJ5QuVp9*c1fW9*#?x#9DH!rTbF zP0jof5z_?}=BCC|6y`=?WXMDj0ojGZ+_1z%1Qjw2lFRrTUs0GF5v7J{cp}nFik#=y z?hgucgZlxCuK)MI+*m1)8N~2mNm4jOJe!0gNnwHN-v5B*CV|DV#*_YKxryKk|H^WQ z{$;sGCCCehS%|EsALa!28!T_W`~0DJs-5@vbT{$#?afb&Lse$zX3opYw)ibi1uPep zmwrlJF7wlg=lT^eCjMupkk3E$<&>3bWzU`1jcJ)ZKfn6=o=V)9S8ip_c2{6g-{2@$ zXlCy1Tm0UtF?Ub0#9%f|@dDVV~Q;QMjN(*IK?cZ~E5){s@L)`cDSf`qjkLK(4kNjW8PDmH8#rv2Q$OUTyD~RJ9~ai zThT9%KTtt&|Kd58tFhN2gDg|{?;C0C*mK~p>om=q26mrc%9gddKbraI5NsKWK41<@lZK z)gRvzVY>^?6g0dStN_dz#k;f_cj>N%wra z8>dwyz z`-W8xt$<_rNDr;*eiLqoWB5s_Lzc5!Z9O6~`qG1zhPatM?KVkm{WWZ+Y|FmNJNx0i z>wm3KW}0v1t^WM!FTi+YkdOCls4r+fAa_G>T25*fjO< z2@YB)HcdThVt|$&!fUMUCQxh|2cbO_n+E7JHOq%;V58VHbupkC*r0Wl8a7dE8pWpJ zqXDXAC^o&eqd+u%P;8odHvnBvglzygEWq($8vx?PLWE^#92Un%q5(;Px+94OB*g;g zmIfpRT8|_ekQ56PlxaXxp!`Up0ZFkyK^fK`Z~%=U!SVwR_#2R*6eSLT5+v9pfCKOZ z2{sAffR`p>;rMq0i36oC5|p6?S#B_-#z`D-i$yiCsrL%Srb#rb9kj%t*fe!*P=F2x z+n8WHB4g?q!n_j!IC^n5^)6};WicO=~G{i#j zs0KEQO-sY=I05W|Q4MVPe4yAgz_u_nZ3T!(6{>+vt*oHfG-xZp(zF$z*ffewW8n#x zh2DR@u08cGm$~EfB>R=C$&SrN%|G2$8%?eAr>racaCDpQ@X@QU zS30C!_-^a^(e}>H&gnnJQ=ar2IIS0RlT{2GG6^?ZPosy!TtEK+_L5L z!1Jpi$*baDS605w>FiGvk2XrB7rf${)?b2y@i+~%}!QW@LtrTAA5An4% z)k@KO`1|OD{cN}3J?#hFCf2;qmLh%ay(kOkvDa$JUrknf%s;mGS0;F5{(g7e&0LcS z=c)3-L$*`n7av)34Exo$BL2_HEsdF5vnf@EE9$y6?{O~pZ!C4zWV|M6>7B#T%*q#D zDq&?6w(GaZPgRMV9i226@lr8$&x{Oj|7G)@mxZyN&MWYbNv znwhD4lHRC%cOvdp7h|_->a0q3mU&zhIUa7Rv@ut1*1P|nTTe+uB=7GT^8>ygIm3eo z*o=qg|5(h9()%7-_dc@0?cfT-iy)7^FMi)T?dDyvD3WUPiT5yrFXx@xvkRP2f%K#C zvyVThevI*c?A}JW)EiTWRv?@F(AlvdKZ z&dc;Q@ERv+WJerWY1@@v`$vYyG&FkDPm;v2r}eN@3*VKFsfJ%UjIK9=Y(?(-;p5t# zb0o5@mUGz5SbcaoUV3H8+xE$*$n>dDqnYjUn}+_3Pp7|0G>f$-SiQM3Cc9X7!v3=H zY~Oi~FKuFR?}=M;{9`}=*Z0)ny6u|p#gG)9c|9v&zVoc^RYTh6i+OaXE*fv}c-g_@ zbgx9@LQZ@MBhSTq_#sE8su;KXlSL7e&oJH7F2%}cu20{fmntvbvM}~omM+Md(Xr!= zu)(Cs*U_#C)|7W8msGYyss>M&EjEXnZ0AfEd`syc<`~-I>p$@1!@_yj-44X|`?!as zSjpMFI&)Y%p9z&=>(9myJvJoKiM>7mod=cCwbZXEyLNnJ~fq}j^1-yC7F+V z=l9bvG1czbX{#RNzZE8W!YS`x zI%$@tQ%m zdp;4{U;I4rOLOPIuD~j#lkJWMzonLYY-dN^ge)&Cg;S>Au#aY}#?JI}`CoXhLvgIQ z&pX$bqc>1-@b{e7$e{(yXhqY*^Bz;jT8te>`@PDBazh54WOi%g9EEkhr++wr{qFdx z;g!bn!KIHI43fwH{P~h(DlgFffPrmrU{=pmM8?I;g#Dj?0%Z2i~AbBso2XtaV>@tVwQ1!%Av)j zj5X5s!J~VV2b;YUgz_g!V~nPnj=w%|U^adWYxGM7D}1-Rl#<1|ZN$}QvwZYFdqc4K zJ-6Lb^2d#d%|04$D${=stXr4pBk^M2&VivBpC2nPc5fN+e#OW`D&vd0tVQYO@%2*a zoxbAx&M%vuktcL(k^Y92pVPH{YV+2YzvQ#BSIiYMdE>)`FC9u@UQKK8?P!y;wMoK1 z)#3ao!ZH~dG_R((oR;j<(H7m^w$xdyvY{-i+S31IYV{X?as9!Z%QX|#O6T_|ACOER zKOuy#IQXfQ>7(-Z`t3_+3{-f_kJuh0iOr>L_0``bFBX`zquO08aP;Ma&* zC!EUQ+{*yo!!V>LW{l6uBca?&Ugp25uNB7gSTIH?UKs4J1rTjGVEaL>v-Yj zOy8S}{BeEdE%PZJgwk)yyE-ZE4kNaG_r^Z72_5gW6uzICZAz)BE(x<;aFP(@N%L&UE_oEZ{CMTDamt*uVb88=STWA*JU>B}lX!+EKXxhTpmn2Vz-uF8VC8?lS2vMy<%PwQT7GgT?r zuu(fuIp-W#Fp>@5mtNay7 zno08aetQm1dYy0d975-fACjJ*FWseJx2oN182K4vTa?-7=;}BqG%}!W_O&=;cq*yD z@5cF@!Zd}Dt|*?o&NFz2-%cO{3H{oHLfIZ znch#gWJ6^<%ks8Ga*)pNsRx89mB=fyua$-DB?$Jh_;oTK9c>P~=nsXQtrE*{W%WO7 zoY?Zg>&N~C(FdLZ7Ksf@mj2t`y9Nhbe*R7SLAaWCFZW;<-LAS}8!RWQ3_F&4JDKP3 zSjNkbDg!C~PHtK)=G-r1t2*k(o7mE1{Zi?+l-OPUwY#cyI4f4|;L8QksXqrlhGcGK z$y;hKA!vzUc3<4*;!LoS{q&lx$51+=3h&eZHKHM_`&!e^Jl+6jwf3k>bRzOqi??cD zUF`DD7G&$Y+7PJukx$|@|I{=^TSPWw|K6wz!{)a}j9<=6sYgh(aVv>%a^8(ieEKQs z)V@#a>8x&hg@xhr|>KDKLw|iE+76Z zm&os78ax%quY1o-J3K6}LFe<+x8tl0dXAUg@*ialYjS+Ca?pF`i{aL$N*TI{)~i!) zi<8GzFLv>2r~W#+<-kufdEfKCo^y>AznF*o7-REs+-&r$NY{!*mv83$JJT71X2{O}sJq*WdqVp)>(>72alSR zyx5z_Y^t4^n#9Uhd1aO7@-(Z=Ir7*r-F4G892-|Abr)gP>?Ga+BJ#m;tvDD8f z_2QXCH=bMXUQTE6@0VVeQK`tD7IrHXzDH;KdJlNN4BvFdarylNzM_TsEX%l^ zzD8DEj~g-e6;oLp{+oB@$%ZUwYZ_Sa^>$w~?Ei5ql;V0`Q=NWii{G>3V%+%;72=qV zR6XFoTlo}w*o|}0Y@S^I>m?^0b3u(HC%LrY+4r8ehXXMzMfkzP%=%1{`G;4^NxE&ddo{mDgQ~Oj^}eGI|-9N>$;Ef8alX&sqSXm%xP$&3%UK0c>1_LiYjz7JA@_*4Ea_sb?fl%6?&k>VEI(_V0&)*X@=;{mRE1@ zDeqV(wf|v6!j?nqsZ*3O`GH$T9?e@eefHoNvUP7QjR|*LUA}nw+@zn!>EWw>-f`Yh z8GmLGPq%UYXaAn4?6QP6}I$+>g+NMKYgs`+D%K}ZB8%t(qkDh<|iu(da?HZ&*m^*2 z)8m*9-8U2GO18ClN(kZkS#)X+Qz6ZN6n%c2cZ#A#(h)F1Iw_FHm61_h4dwQVK zNZy_KbKcpJUn99zzVCkhnpjw8NjZI4Hd!LGtLsq2N~gsapBlx{otMqF7Mw|HA1Am; z<^6v8w#h;AtHw>)o%_bg7v@}yW6~dqYY-i*_BU?vICDZTCCHx3f}Q>5o^{t>e#)He z`;ydZ>Wt-z3_mJjc}rqLwQ*lr)vL!}``S`?^4>Ala;^S90D(Y$zk1UAa&j!mA&D>! zbP!FiOWR@tN(5E4dDkz9HMsY8qX(B#K4ME7!o5C4crsd@sz@p9ldUbrbn&=tZ5Zr% zM?@ynkJ#9TaIcZbi24osGNe!DwipuXahuzyt>4-!B!8slwglRBn%fd+KU#Aetp9GT zZIX#cYHds9qwU&#N^wiIo0>egq<9V764QY&dS>dNGLT!lL9RxlXxzA+#VI{&^%|Tc z)sNcX#D%KHP{RPjtjef`FwF-OGeeCEEaGFiq%$tR3fVt77J)oiZ#|%j?u7LKuyPk{ z2O_+;HY|Z8`ra9_)^ZYctA1r1TlUaYzhYFZ{4K2$eMlGZrwxLVVBsK1adCGJ(u@XzhFT=XI72n8J79n{fT5BF z23XP(xwt64NHs7C%prF_eIk*(OSH+cPzPbCa-Jl=T4zxYsbi^H4fx7KOqvIH2rRbYn(e|gXSP>37Fyng>9wIvoGAyHuv&x7jg#}~ zBTdN#aCeacg4K~JCmzk}I`=oWiYW8g6LOi@DncoLoVM3Y=D*s>jLT{9Ajr(=Z8HDW zLuZoVY9%yD=D!C*XijgR`R`#6n%iWcs}li}lyEiS-!6qa#?Y=tdAA^^5eyIoc; z7W>Q!S$9@0sS?fUJqP}+@^W!~7d(uWPbSd}^5eB%qfL}1o}}op{uqPs81uL4)@`E3 z1T<7zw~3DA;mI-mrxr};U;V!aMXFQhd9VW^R!p0^Cz5XmN0mLhpLS9VSl&^K$;O7# zl;&}0)EctHSxoe-s)*>>c{>TuhAgRob5)6@6#t>4(RIdNTGm8}1!_YHYyl4`q39(g z??7*hoVWL8uUnxaMEHpHwg`7!n?5BOtxjoHaPg$KjUizlx!x8(tn$z<#_cTMBq~H!53^CXadq zD%*UOVG4Y}{TelfB20wmP(4PCA>*_njbUg4Mz^jp+(cK10U|r0DU>^*C}hUmUrizK zKMzM$n9@3?RK59hQoF36b*Kt;poCQ!HdZN7g{ttzT0$iON|H!8qLf;kZT(t8ZtG{Q zl{Ak*f3z0tGOQo$G<*yK^;)na!&NibrDBg%kW8RmrzDv|`_W30QX+4A2XdrJyeuDs z9LWM@IkO9LBxe{=B?#q#V6`z;Donk{#bXpBg_Ko^kqpC`DiR|L1W1NCt#?3zq%N`h z-Aj?1lTfkO?}z8nkg1tsXfW^}5qZ-68ZzxOd1xlwAO5A+wZfT_V(5 zVs-*60c&_5xdm)Xo?t~UZWLgh=FkNETYi%KYF$J+$N$AsWK>g47znYzf1(79KK61) z1Lp?f@ST)~;Bm^LzGWfrQf6#)#{}I>hu=P%P&8dwJzs- z|0n3hM7<_GEs`vd^eIi+a!{UgEqO>3@Y5|Qpb0{y2-kILMiYy(4IeoD+k{9|XZ8mu zD=X4XpaK{knGgwJgMny17#cxGqZ`%H!Pq^HlzL~0^_kKxXHu zbv4w=ako+g6cblciunX-eV%Jcz#Ef~GP0ic-^j{D_4_PIai>dqNK~+#B&9i9DlsnLDng|zty7Rn19Tp|CTW>U zD4s_pw8jDu^-59+l|UBkL5Wf~m84v%rJb?Uq7OIP6Q#J1a+JGyLoVahn1Jd~p@V_c zI|E@BTWrN{i>hk`s$4mS+OTG+!riBeJ<<#v0Cyid&+7y^tJ+C($5TZlGIage?qui( zf$gU^0(N(0XtS-&9b;>f3YsDP|c%e(W(~NSsJXM{c7{&%6mHxmB zY96`z$_7Si!(Exr4u1~L#oDI}# zSS}vBUW4H=z>5>aT`t7Vh~L8SKvC<;GWvPldo2gBYymZ>@R#TnA$JGV%7a=+;pcVl zwH;hj&xm5Cz*-qm#dXYxDp~_0x`P@IguPZiU7$y&`e3j84U3XsHEhq0t36TytaiMg z31ANb?@w;rs!`V4)Xq66FLOj|5&v2owa6Oa+2z zu^UlNN*j|*6ZX^+Mj2}Lu&hX+0bh5gJShCf_3njTNvutaEVgqO1Ps<{eTmvFDL_{^ zpu+^v{aM!OHldTm96*mAV*n0%OITI~J(Pi=W_x~Pr=Rf#kefx_#2D3}VOVb>1nsd( z%ZKDDCO6a~t~=zwg47vjmmYH|@A)ww-^e{w=xUBR1LTubZu^*vKo%By(y_5x+JI`l zJHZ+-ACBpcw29}neZ7!V1Z4{Dglewf4&CVVFRA5T%+eaX;J<$S*!=S9)#sw!fMeMx z;0)`H>@XPFfyr0wPHN^(kI8FyidPa(&BHX;fN%-4gs}kglyH zv$Q_I)rV}Wd3`>gz2Yy($D@XlVc?|MoiWZ# z)A|`_X6<9)oJ(+;$rjYkX)+r=L{<~^JGW;x(_PWEGMnkqVBtgOHuJdwsdkbzqlyPg z)XAFN_PDI$&5HIwBcBlN4D5}F9mAP;Fbo;y=l2Ymu9qR3Q5gQ1IkLH$NVJM7ck4!U znS}46t{yX}$cBOkl+Vd2CX>E=L+{x_QE<_bHWUHH=oaole}{Do@?d?*X-NG5ojp-#c~wdwYxdQ`aW{$q_7+78s}~Ftb3|WSYW})-A1hE!a zD?=ZLijpSt~$C7-6aiS?XcJm|qR5i}K(}O}aJWvs8fbX?=p#5b} z30J(f?-~rL1!Hq9$x8T_qQK2r<-;&l%P`1zYAm8%$PtoO8a?~M! z?rRkDT7KBsXfqBATh)xK5*AM-d>!g^GOa}p?>3{(8>N!&`a7X9NY8mx5CN;IR0Aeb=3+IW47!Xr|0CJ>NGtCwjNC@gfs^4n^NMF@vV zZwGdtx_zMRt^TOMBIi#O4{fnUXxfG0zW)5|0{VvrUYA7iK!)0tTO^ov8U6=gL_f>< zPsw|mT-(AF&gqwgKkg5w(^cf}UdrfSSznbS4 zPKf^LnlN(yV;Z3)kDw(FxS*)lA=As&luSlZy9=Ku@G&B%!#89!9!`htVK3Xy>F=@7 z3Y~d#U_i*x)p#5YroA8Jf37A|(i%*o!JtLDgHH4(NbU`N5RjwRfB<}=F*%RO)gJAR4T>!^d((2%^`_R!On45aH?|6C`G3D=}Z!&?uJ(%wB!p-=iJBG3S!{pgG zYDe8~FxJQ!G6Uib&@%w723V&xZIScd5Tq~|`17DW?2k~oh0ad?Ga36u3(xg=p-|B-vi75T5SjL zD-ekZ>=R(lvH^+s>^lBFd2q-NxTQa8qPL6x6uaie+OXopOy`@m?#`vPys{K@68vWy6;>4QB)dw$hl@@a(n5$VqrD=~?uT z4_EyHfmX{(*TZDM+`E}@Y$I72+?ZR-c=D}NbihcSEmxSpTJ4;|vO``8)#P?DeCrVXh=g0t#vrgYa0$llFEG#&~l%%sO@?m ztQ%x2UI9qy?}1xD{t1=>0dz}BmybbM>ZO{l8&qM6XIn|%)%EOVO_vL(ZEM=M?>hg= z()8ZCjtHUdt?P(n_8z;AFrveq1UoANJKfEh|7YRM(K~uafzAu2&gjlUotHp$#�w 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 cKA7y|>)`GC-?xgnJ7R_^0|$eP5=M^ From 79458ae7c5449b666798be0c2254bcfa9237d028 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Tue, 14 Nov 2017 13:57:34 +0100 Subject: [PATCH 04/19] added .ipe file for L1_L2_procedures slides and updated .pdf file --- targets/DOCS/oai_L1_L2_procedures.ipe | 12461 ++++++++++++++++++++++++ targets/DOCS/oai_L1_L2_procedures.pdf | Bin 1118156 -> 1511882 bytes 2 files changed, 12461 insertions(+) create mode 100755 targets/DOCS/oai_L1_L2_procedures.ipe mode change 100755 => 100644 targets/DOCS/oai_L1_L2_procedures.pdf diff --git a/targets/DOCS/oai_L1_L2_procedures.ipe b/targets/DOCS/oai_L1_L2_procedures.ipe new file mode 100755 index 0000000000..2062240c14 --- /dev/null +++ b/targets/DOCS/oai_L1_L2_procedures.ipe @@ -0,0 +1,12461 @@ + + + + +\usepackage{setspace}\usepackage{amsmath}\usepackage{stackrel} + +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 +2NraK/l2+fJVply/fvPGjVufKLfxKb6yX+Xq1ev46b8t2KodLrbDcuXK51Z4+crVm7duPXh4 +7/6DPZSH9xDZS5eu4Of09C4rWceT+zqhGuuIcl9EuZ6eHqIcUe4zWlpaqqmptbGxVdDs9hfB +4QMirh1w2fcfBXxAns8UXd3LF3UuXby4h6JzCVhTjRvDukt6V1w8LYWd2bMygXLY9B32L6ft +lEPt3nv/cjh0+/r6tDoOjo7O36p/uSNCORwhr169vX//IbzZl/KNyt4LWIc09sxpHScPi0Fp +JTNI4k76Ci4pLX327IW9g6MjaoIWFjs7B3lfwY177SvY3d3D0NBYS4PwPg7yvoKbiXJfVWtr +a2VlZfr6hshV4ei2WzUkkp8pB2/k9j1j/XaIuwK+Xbiga2z2Nr8ianSxVqK49rqT0W36+vuF +IlEDh9PA4Wpn4TQ1N+99oKvOri4Ol6u1QfhkHIhyX0Orq6slJaXv3qmz7vr1W3fu3MXMjxZQ +br/yR6xn5+fu/nYx7MKtW3d2UrAXOhf0Tp2SXxf4TDlzek8Fa9DR0VOyV8G3Cxd19Cxs3lVw +E6SbvAWZUHl7yQ7H8ELrr+1lX0ZnPpRxIMp9TdatFRUVIYdlWIc0Ni8vTyKRjH9MExMT+Dc6 +0ZruWd3d3XgRiUQ8Hv8zEgiE8fEJDg5OmOB/dkEOh1teXrGTEhIcbutoWlgek1UU9tGSXRKW +lB0QleQdk7z7kpjhb2Khf+GCHuPfQDxLW8NqYfKMjC/n2187fdo55UbEYu0t+0U5rQ7Cp+JA +lPvaWllZhq/T1ze4d+9hTU2Npt3rwjyDs28rFLZEJ/nIZN2LMtEnSiNeF/ZWZLL20BjPH/9z +Qkfn0nu+bfHnVfzbLkad5vEF1fh7amu1sVRX14gaG1GX956x1tTWaWkQPhMHotxBsW4lKyur +ublFo7ZKS599mJcJgiLc9A1fMP7tU3zb+UiFpWVlL1++cnZ2dXV108bi5OT8+vXb7SP0fenV +B09PlomJqZYG4X0c3rxtam454lcfmE4SVN8yczY2NpaWliHmqZMjIi2lHJjWO1mG18/z7Yvu +JAkLC6c7SWxsbHfXHzvdSaJRlBsaGjYyMhofn2DepqVlNDQ0zM/PGxqaID5oCxwcHNva2ohy +mkw55nDaYafrdFcwPftwFCi3vr7OPEEMn4Y9vnbthouLG/NRaGh4SUnp2NiYmZnlikLt7R3G +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 +QvYK19Ha2tbxQci8mLHPoPX19fb2dqSrCwsLdF7uU0JwEDTVTsCQ2iOSaFC6u7sRQCawbW1t +fX39ym6I+vsHmptbhodH6LwciShHT3jRE15EORJRjihHlCPKkQ4B5QQCofbGUyqd0diel4KC +grX7WK2rJ8qRDgHlPDxZ6ekZvVorDodraWk9NDysaZTLLyh0dnbt1WYlJaWwvX2IciStphwO +YDbbW1//HRydlhYrKxtTU3P54IkaRrnSsvI//nji5uahvbF980bfzz+AKEc6BBmrUCjS3njO +zMxSxvqV1NDAoYyVRFcf6OoDXX0gypGIckQ5ohxRjihHlCPKEeVIRDnNpFx+fr6bm3t8fAJz +7/3w8LC3t4+XF7urq5tZYG1tLSwsPDIySrVr9I2NjdLSMjc3DxbLa499oB1WynV2diKMCKZY +LJYpekGPi4tHqAsKCpXLlJdXuLq6qfVB2tnZ5efnj/lpaenKTtSJciSi3K53x9ra5l//+vel +S1eYvkcyM7O+++77H374qazsfRdAra1tP//8y/HjJ7u733NveXnZzs7+xx9/vnbthp7e5Z9/ +/hUY/NTwEEeWcsXFxQjj99//mJubJ1P096Kjo/vPf35na2uvbCmePn32X//135GR0cpv5ebm +njhx6sKFi4gtwv7y5WvlU3VEORJRbndydHS6fv3mo0eP6+vlD92zWOxHj/5ALUMFYRZgs33e +vjX4/fdHkZGRzJyUlFTU3+TklNXV1dnZWUtL66dPn++6x7nDSrny8nKE8fHjJz4+vnhbXV39 +22+PwC5nZ1dmAYFAcP/+QwsLy2fPnjNP5Q8ODp09e97ExGxiYhKxRYujq6u3F6tMlCMR5WSK +fs9QEx0cnMLDI5C0GhgYMp1qMpRbXFy8fftuRUVlaGgYquTa2jpmYhmmDw1GqI9wd5Sxqglm +GGH09vY1MjLB26CgYEdHZ4QazQqzgIeHJ3xda2vrmTPnmHuBgLVjx35taWlVrmSPo6QR5UhE +OQi554sXL2HPYMl6e/tev36TlyfvIpihXG1t3Y0btzAxMDBw5sz5pqZmTD979oKpuXT14fOU +gzHLzy949ep1X1+fubllamrakyfPGMqhXbh7935lZRWmYZ7ZbG9MxMXFnzt3YXh4iK4+kIhy ++0s5VD3g6+XL1yEhoQ4Ojo2NTSdPnkGGhU+RXiHtCggI9PJinzx5OiwsHDPfvTN6+PB35Rq6 +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 +pHyubtC511LJ/iprOhgsChWTdiq+k6qkHDJIM3Y21kpT2fnmC+Zs7sXzpob2fn4uelrn4uoH +idQJCH4WLI7fq2h9PvOS/W156klV+0OWqbR0vyQ5Mupm98QKc3G4pv3h3OriQH3n0Pjy4kT/ +vZ5Hy+vG9mxH04NH4yw/x8pkS13Ng4cDzc2D86yri8MPqutaaNNqbepuxvWIiKg7TWQpREBA +QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA +QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA +QEBAQEBA8K6xOPWsvrI0P+cV8hu7R8af9d69P7j0Mzzu2YN66hl1D8f+TJ6x4aHnL5Z/4OLK +8EBHxZ0idl0LbtePLq5fmH7aU9PYv/DmDTND9xrujyysvXHhRefdxocj8z+1CQsTQ02VZRsS +y73bMcw6vfysd+D5xMJ/i5RWXwxVFuRWdQ6t/rj8a2sLkzMLtHAGex6OvPjxD5oZ6qstK8nd +6Pvi+s7XO325/34FLefy1tnvVeXl6N07BdSlu22P31Lu0lR7Q3Vx/kbBeWUD4+wOXR1/0l1R +WvxqtFU09G8qeLm7sZJ+XFn98ze65eWL4Y6Ovsmltbe3ZHluZm5+5Uc0ebS/MS+ndGB04YOk +c3uy88cf7VExNNuATWzBg4H2spi0urn/5kcttRVEmhubmpmZ6hk4xKY1L76Vy00pDEW5S3fH +f6CQcR9Frm0HRdbramZuaH3hTtckdeFp653opKo3h/LqcEt8QlrX1BvMWB7Jj0ms6Zn8qc1o +izH97Pe7lY3W5aWjdC74ZsMqczxQQi8w+cF/xwz7LNxAU1rFODSv6eWPY3NNrI9H3D1qprmk +K6gaWf2jn7SWbSP6h52cBht9r6iseM4vZ5TFvJXR9qBAH1sne+q8uZGFkUtgSe80+7ah+qIg +S2dre1vqkpWZpa1X6uPXx8rig5tHtm3nV1ov2ERTVVHXNr97ihoDkQZCH+/hNV5/oKm6rLzd +1WK63KXnWYHuFlZ0mdZOzg6Wnrn3Hm0uc6Q8eP8BqVsDb53nl0tCfX3jG/5igyc7cxWlZPWt +Aqp7pj5IOt+PdTjEY/P0exRYXlpYXGbPg2MDDxqbHoy/mB0fn1p4uTo/OTo8/oJ1aW1ucmxk +YnZ5cW5qYmL0SW9TW9cUPT+uPepubWxsH3+drmtjTTbatllddMfPlF3i5lErG3ltpl1ZmLqX +k3rjqqeAkGhYA4tlL+cGunqeTW8uaMRDTljBp+xVP+YHmpyS9+x6wVxbWV5cWlmam3o2PbdR +7urU6OT07MLS0hJr3l4b6W1vbGx8+GyWfZVu5Aq7KbN9bY2NzRvKfXludPLFwsJMX3vT/Y7H +37NSmiPPHRQyH9r4+qIu4tA3UrltnWFKJsEpbDqvPOunH/TgKWvMrC2NT07PLc4/6W5pbO59 +8arRi+OdTY2NLT0vNpN2Zf5heRT3jjOBOd1sRTTe39nYeP/xNFvzrM5OTExNjvZ2NHc+mVhb +t6/6PYU4hY3CB54Ph5pKaEcUDXa2NN7vnNo08Cee9lL1eTT+PZ23estS5JR+xCbjqVT2GG9Y +PTWXjlw0VBCxS3y+3viZNF89EfPQ52vM1aFKLW5Jr7j77KevTXbaySuaRNzd3JfzrSlch6Wy +v6Pj6g1rJX7dhFXmaqSehKhVxnfN7UnlOSKX0fviwS3X45Kur6RaHmonbXJtbFOho5WXDh2V +y368vDhDWSILM88GmhqbBlnm0OJUpzEPj4he5MNRVs/OjVHSb+p9xp7B56enJ8Ynh1hdH+ui +svO0Zd0Ye9Zf7Gu/T8t2k6ZeHn1M3Tow+d2Z2ee99Jnn8+8FnZvjnA6ftRp8/WR1jONZ9chZ +5mp3SbSWmpa6tq2jscLOvRoVoy/yHaW4DcJY4lhKslMTMYvrr0sU38+lb2WuZu1Z2/+8Lu6C +lo62urqOiVN4ff/MpoG6PL+4riK7MvxFlOyaJ16j88xAY/qN3MHBqnMyEiH1Eyyq9Ed7+me3 +jGy2lbwUhKWds7+7c67ZgEssun68N8uXVz2ipTFNXsW/myX7tdEqfQOnhMQoZRX9kifTLaVx +5tr6Ghrqmqqm1+sGmC/7bAXkQ0uGVib7IjycdLXV1OX1zM9fbR1dYQ7fkeLn0Xa/6GenI83Q +8Awpmd5kxrVEGx7kN+p6xcHnxZz7BaIqGyJUzS6m9zFXJ0uuhVubn9PU1JTXtk8q7FtZ6jaW +4ZGw8r/sbawsrmzlnjayyFwa6brm4Wygp6GhqqrlcqXl1Zph/kmUs+IXv/nstIRDaefju4UR +RqqUMNW1TFyyG6hemr+qIcojom1moW15pZQ94Y40ZUjv+nTHIYmrOfVRpoxTjHMu9ibqchKq +nnG9tE2y8iA3zsJQV11dw8DCM61is228mmHNOKl98buRutimefiAfd6jpfYkAU654s2z/Nzz ++82d88y16hDdw8r+m42n2ac9jZ1PNs9J822ppw+Lp3R8R4piX70Dwn5LzLUrBlLCponfdd9k +jdB+vtDakdYY40+PK+d1DL26tLS4vNmiGq28fIRDqWTqZV2QwVkejYv+ATrqcuKGbsV9kyPN +t7i+2L7zgHDYnf6ZRw1BzhZUZyrqmwfGFFPjr/KS6d7jso5WJupqyvwn93+07Yi6f/zTkcHi +q7765/Q1NbUMDFxy2p5Rjxi4f8tcS0tVXVnJ1CO3gVpDrXXcSbU2oOSvZWToFE+NmS2PznT3 +P330JUNRlQ1T9zSKSLVXbU+pRQ/2lypL6KT30COtKc78008lSoZf5NiIHNe6yKbzDUt53nPX ++qujD39+LKadlS3RlVfei02/lgRPWYfop99btE53+9kqf7vrrFd65/etYuYau9s0JMTW6fy2 +pc/36bz20EGQ0zS5tTvLm1M6eHh+0Eda8XIZPRB70wM0rUI6G9NkZLWy6+6YKMteZT1z/lFD +Zdsj5kKX+RnpiLKuMl9TOdNrLDtyMspCQcE1feJ5pcieffrRtPG22nVL+qhM9sPvVHTrFaNv +udRK+5+yMJh7wURQxX9oYSREwTg05/FUZ4qqcQB7PulKdJNWch+c6DHk2i/qmEUP+Ll7useF +r90f70hzO6USwaLAWl1l7YOxTRbIeJ3OKdX8J8zZ5gRBMeM7w/RU8jDL9+xZq7aRsQiFo0fV +QpfWl8zrKiXZRMEghLKxV8O1ePlMb7Ae/tiaoeqf83imL0tMRLuIReKF5hR5HbuKoVdtWc20 +ETsq79pFN+T5xOR4TazD4ePa1WPLLTFW+7gdHr5lLToVJMPNcLz5F9wLbalc3wqE3u6myh0e +nRjuKtXh4dQOuUs9MfKcxBnNywPUhWfDE1NjxRd0DvMY0rbYi0eXLWQOfnVQiCGmbehd0PLo ++x3PovOdqdWa83Lbv1GpZ5lv8TaagsZUZdYi9bSML7VQsvNVUTS72sieZ320jS7ndpWF6H5+ +wrCHZau03jzPpRhOib3r1iVdsxi2sim4qHfGKnHuRZ8ln4BFUht1piHcTlrv8oPmQk0RtfR+ +lp3Ym6krb1E9tNVX3K0JznsPKWbUtbLR2fecanf1VXs+3St5CU5cWqHra4ynxSL8evmPp3Lt +xE7qXmbTOcFaScAotr8i8vQpiULaIbQYqXp8t4R5WlpyUlJKUrDxtq9lc7/nUXs597C7425O +mIKSaU7bSGfD7SQaaTWtz9bH5vOKn0jnAUdBDsPE5u4c35MyF+i5KMJBxTjp5dpMmL2BV9bA +Sl+6hJRmUW9/jIejpesFn4sRxY0sY2Sx05JfOSL1pgGfbED+us4aLjx/Rsqqvr1Y+oR4eA2r +DpP39CUEA6q+sxA64qx3/PYLQRl5FlTMfGI7hykCjV6QMbiY3ru2OlVflBIaGJGSmeKuwXtA +2qpjqN1IQMguqYd192MPVUHrrO6J5iwLPetA36DQazd7Xl/Xrz0pUz+hlNU9luetdtYybUM5 +tmgdE4uqao3R5hb3zHxdJrOx+tLaAcUUjUKNxPTi6tnzZriSqtOV6sYrRjsOMEJT0igp30wM +OLb7hFPmKy2zluco+YfP9ktT7ZAR3r1zB5eGd+MT2l6tCjXdd9Zp8C2euIkAKW5x54w3LwzU +s7sy6Xbz04W+nBPbP+cQpAvm59jz2V6hkMymWXpyWLhqxvjdjmNy1AVJgT1fbBfRv/xg9JUJ +t/bofmXqtWB9BeGD3xw3Cr6zsPamdl6p9lXkVPVluzwawpzEpS/MUw3XUjMMvrcydof/64O6 +XtdSkpKS01KtRM5I6EWmBVlyKwSyzYnGBFdO6cDntIP06Z206xcjYm6lxGpKnNyjea33fsKJ +/QoF7Cns5fzkxGR1tOWOPcIhybTo0pMvCe7fa57Zt9WN7RtOh7gt+l7vuKorFJ2js2JtT+mF +r9P5SZGwgH7B48lsa2q1FcryfKyk2KvSdK6M4jrOyKWXPXPhiqePiGq5uThRcPfy9g/NfjS7 +9sr9unkJbCMsahBUVJEdTWd18ki93bP619F5sk7lpEDY3dHeTO8T0gHUpLLck6evZZlVkmsu +a9FAWYcdCaJiyvm0McXsrc5wcbBUlpXSdsscmem2F1YLT0hUOyMdWPh0w3D2PSluVt1SJM0p +Glz6fJ3OksL+lcPfM7YffN/v/zRQxjAsd2C4JVmOV8QpOK25/3F3fpCAsHppT7OJoIBFbDt7 +wHqoC5umtLGthKzwQFsDZV5xveslPa/TWTmre/imoyy3TfoGZVt0OERCSpsoOou6pH+Pztf1 +pNbpbMjQjKpi8+6SopLD1cq7YWaHDwvZs7rExd3T53zMvYEXrxnbWsF0b65O5kTZcYqbVz6h +7YThykieE0rlo697KQcfTS2vlgaqHdUInnltApp79LivMo3dlU5RRV0vum5xHxZP7qDNhJH2 +vHPivDbXatmehjA9SSHTBLqvl0ay/LUFFKzv08ycK46OKWj+zoR/VHBx3w6xrIcLb6XzMXkP +dn80hDtJyAbOMRdCNFUNLza8fF7Ey3FYwczZmaqHs5u3j19mRXu2nxGntM96forOskHU2GrL +DOQVUApKLOgceF513eGUTODdyphj+xQLHn63aKiJsNr5pZC9O0t0bp7nL4RVPJze+nQ+wGXS +Mfc9Ottxa13taEqTkrJvZkl0uCTw4Ncyhc+X7oXpHNMMYpmGL4I1BHiM4x5WRp3iEM15QhO8 +LNxczi5hfay059n4Jj7c8EvND9zR03Jap8VS6zlx5YC8wbdUiKYz48/Q2VNeWPF8+auRVB5i +dkTStXdxrSPVnVM6gKbl2nCwtT7naWFplxxq2Cy0xDMkVLJ7xgd7B9Z9R/Vhe/fr3etvdRRU +jC5tSbPS0fHMZRdX6KMtZhb17Em5+DGhdTpP1OtLCgVUvU5nPoOOhTfpbBxd3FsTrH1aK4R9 +qilSZ9th2er+FhMB/u/orCZsntY2O/aoa2TdwL6iyC9ulbS8ic5qnAq3uuYfl1w6K+3SyRpf +8003+Dj0qh49jVLnEvk+neeu60mci6D4shpqIKrxis4KCtYRdc/qrsmoO/avG8Fd3h4XSwbn +NtFZ9ITmhQ1uTl01ZXwj4T5IKaiXg16q4tIemRuXliri3RXMg/sWmcsDRXInxQNzejcM68eh +liYWQcWr33OFHRRLbF2fN56WhZ3YfTq4lJpSX4bpSQga31hv7OqzQIXTJ1XCKJWR46x4Rj1w +eEMKIxVXZM5a1I283Eznw8fW6Xx0g873wig6X5hjLoaoqpmFdFDGj4WyVlDF+rRQEnYpPqOl +INiYU+o7Oh+XDZ5mLkcZi/G6VbCzJVqKfXXGY/BZk94pMf9S2gybq7+houaSnhKjLWPftt6w +h8E+vqUDs1uczo0x1rsO67a9Xs3yMLODUpdmmEt1ib7GFk6e3qGB5grbPpHIebSy8KhcQ05B +3dozNi5C68QBvnPXespCDu3jyXi0yprjuyOtTI0d3D09HQzULaLSml++Us4r44Xh3nZuPp6e +ni5urv6RGc/fuufwrFSen/dCLatH5oeyrsVX9m7eSxrzkOH8jEPOw5OGv4eXuYVPZiPNu4Y4 ++2+FvNhG86Nc74/+Y5dXOa2SXzTG8AnJZ7Z13fSzMrR1o+5ytbVyvHF3fv6BMYdQYNGTuf5K +W30zOzd3T0cXXROX7I4p5nAB99en/YpZGn28Vk3gjFf581c1aArV2nVCs/X723hDPsKaF249 +nO6/raEqr27j6X/lioeB4J/4NSq7GnS5ThlcaV1fGsidMUnreNKcqWNo4UHJycfRxPh8ceOz +73Tdo9ty+8Xim2eZy0NxQbZ6xk6enl7mhiaBydTac+6C5MGztknf229qTnIW4ddIzCn11hVS +CWXPdeMB4gw9X+p4ruCCq6GZA9VwMwMTt/M5YyuvTJvVVGOebxXOf7dnM9Gsc/yIhGs2xeIX +PaVWFiaWjlQVPd3tHXTM7RLqn7DvbM+OMVY3t/P2pi652VrpmoY2P39tG2OuJeHwl7yxTa90 +2WpJgN5ODt2mobEIbREunZhXps3Ks0rJg0e0wqpezvXdcLezd/TwovvV28neIaGi57WNqrLA +r7+RLJxcqXCX2CvmyO6Pu8HW/EKeVP2bIjz5ebWii7sf1SabGJtRytTJysrY9nzj09lib/V9 +gq7s/HXX7fYLnx+jlgbl12V5FS09PcMjo40luHZwulKKoLkgQlXLjBpa+poGPmEVL5nz+VG+ +eka2VI3szIyNLuaMvFzb4nSeGequrO148brTY+JxV+39gcXFuZnpiY768sys8rbbMVJGHndZ +bpnpwab46zF5Ne1DfX3tHU9mJx7VVt8bfrXOeTlWmpMUExNX/fDNveOVB7WFMTExaRWdyz+4 +6zre0tAwwN5lWRytzC1sfrLZsns50FaTnhwfw0JiWvnwwtvCSBZH6+91snfKWGEkzWNUeS/H +y7KoisXklLezhtPsqzCStamB/OSYmNjCx9OsuXh+pL6q/iH7/uWptob6/onvbOuZR+2VdW0v +vu8mWuxvbHv4jCb5xEDjjesx8fnVz8dGuvp6RmemOurrO5+wVdVCT3N9B2unbKq7PoWqTVxK +49Dru+UL4y01TU+n2RJaaCm4SdWsrIsdePPy4f2ae93P3tjSHytPTi2q6uh90Nz2mG3YLA/c +b+roZ9+13FaTRze8off1RdXa8wf3aloebnZKj/U2FZS1rZtULyfrC1KpG+NvVX4v7OLlRE9G +cix1qaC6c+ktoTvPaqsans5sKnhppKq0rHt0+knn/fr218JjnnXWFtc9YGVd6qgouE4VmpLV +8fz7UQlLEwNV1ffHXq5N9N2vbuphP3RqsLuhsY8+XhouyEjOrKPtvRcPm1OvxVzbGBsjva3V +7DxU/iF6kLCLHmospZ5183brxOTz5uYB9vT8vKmMen7GvVdr5JW+u7To8qu7VpnvN+b6yy30 +bC5fTUlPTwxwdAlPurvEJCAgeE+xNtJZdeW8j4+Pf3pdPxEHAQEBAQEBAQEBAQEBAQEBAQEB +AQEBAQEBAQEBAQEBAQEBAQEBAQEBARv/PyjEf5A= + + +eNrsnQdcU1f7x+m2fdu+o7u1rXa4ESegKCKIAoIs2Xs4WLL3DiRh7703yN4j7L33FBDFASoq +Khsy/ie5ev9pEiBabdXen+eD4eaMe0/Ifb73Oec8h0RChAgRIkSIECFChAgRIkSIECFChAgR +IkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSIECFChAgR +IkSIECFChAgRIkSIECFChAgRIkSIECFChAgRIkSI3jBNT097e3urMNLg4CB1zvHxcRUmVFtb +S9MEqGfdUuHh4fTntm4pLBZLX8rY2HjdgiAPTSlwAsxc3dTUFE3BrKysdUvR9CQQ6KV1S4Ga +aUqB1l9RTzLsTHCEmYL0zTHTmS/Wk/R/XYgQIUKECAEPBDwQ8EDAAxEiRGvLngkB80RfEBxc +tyB9KXCHWbcUMIg0pSorK9ct1dnZSVPq2rVrzFwdqJzGHDNTit40MNMnDHsyOjr6BXryzwtc +OAsLi4WFRSWdaD6CmZmZSiY0OTlJzzbrlqI3zdC5rS36jxuosbFx3YIgDz0dMXN1CwsL9H9g +65ai/2MGvbRuKVAzTSnQ+ivqSYadCY4wU5C+OWY688V6kv6vCxEiRG+QgKWD74csTGjTpk30 +lYCD6xakL6WqqrpuKfq7LrC865YCF8XQsK4rGrMOWmemFLiQF+gThj3Jw8PzAj35ssCDvt/+ +Lu3cuZPlperbb78FfLhhwwaWV6CLFy++oprBabO8SomJiTk4OLyUqj777DOGBIgIESJENDp2 +7Bhs3Jl5rqF/SGTy6fLvfSBi5nGb/umSmUfL1Z4u1+0Thj3JzNPlPwE8vv/+e2BztbW1US9P +iYmJQ0NDGAwG9bIF1ezs7PzSay4vL6+urka9SlVT9OfrsbKy2rVr11/MHgYGBrKysshtHBGi +Nxc8EP1j9RqCB6COzZs3v0HskZWV9TqDwVvJHjw8PAw9h4gQIULAAxECHs8LHkZGRsCQvUHs +UVFR8SqqRdgDAQ9EiBDwQISAx18DHpAhe1PYw9/f/xUhDcIeCHggQoSAB6K3Hjxm5pZcoipp +UvvgrfuP5mjKVreN0WQLTm0EOSennqzWXM/wJMh2/FwoSFD+4fEphuDxZrHHq3OnIOyBgAci +RAh4IPq7CIHhKuOXDh6AHD48aEWfvuVzApxAXRaQA8OcOyQ8AVcALKFpCxQHldBkBjlXAw+E +PRD2QMADESIEPBD9XYJWE7/0j4x58IASNXusBh4wflB7M0BB6rdAYgY8Xil7vPTVKAh7ULPH +K425gYAHIkQIeCB6K8EjsbAT/AoSzBgAGOjBAxyEsoF0wSkTLg5ew5kh0viWzymvegA6ArAE +0Ah1Hobg8erY41WsRkHYA/7IbG1tEfBAhAgRU+BBBP/ICejR7Mzde/du3br9+PGTleWVheXl +2YWFhbn5pbmFhfmF2YX52fm5+fnZuYXZWXKaA0fA70Agz8LcwuLcIsgGXsyTM8/Nzc8sgjQ3 +B96ZWVxYWllaXl66/+jB7cmJmbl5IvKRvH7gAV7Dx9kVA9YAD+o66b0ZcJ1Spglrnw9D8Hhe +9oiNVWMmdXZmJCScZzIz86mszOvGjfZXUTNIXV3ZIL2KmqmbKC52eYGCbm5W1J+CpKTkqxtw +QcADEaK3CjwIBDyRiKcQSGJaujvG1c7O3sEdnZCaVFJf09Lc2lnV2FpRX1ldU9JQU15XU11T +Xl5XXlpfgWuoLK2vqqyrrquuaaysbaxsaqxsralpqq2pr6ypqq6vrK8pq68uaaitqW1qq29u +wdWURySFWaNtUSiH1MKiBQL+n/xxDIzdpbbyryF4nNKKYBI8AG/QgMfw+BR0BNDLi4EH8+xx +8+ZPJBILc+k3EimY6czPlQRIpCwSacOrqdyBklheZTJ4gVIrK+9TfxB2dnavbrIHAh6IEL1V +4AGwg0DxehBIsYHh9koXPSytrdxsdC0vWdtYZYbFNOQWVVZV5lWX5+KKC0tw5B8lBYW4wgJc +YX5pYSGuCFdcXFpUUlZUWlJSllVRmlNeWlxUVJVfWFdQXF6Gy6uuzC8syfQLt7I01bHR8ra3 +Q13QjUq9vEhc+Sd/HKm4Hhrz/deABxTZlXo4fjXwYJXyppmSwRA8ZuaWYI+HuW8RvRvkglPm +Gste1gAPiD2++eabr9bU8jLL/Pw7bm6frJv8/X/MzVVhJid9Ak3g8SxrZGhu9goJ2cZ8hbW1 +H/T2vs9k5uvXKyIi9jCZubDwQ0AFKSkbmD+Z5ORTz9UbCQkbHjx4Jzf3I5rP4osvvvj888/L +ysoQ8HguwQOXq31ToHfXrQRad7baWjO4FZrE8F2a1WfUkjJNAN9uOYuk17Y/oTMECfQG86VA +j6Xiutddqbdurz5vKYYZJqYer/1BPFdzr6XHg0QgkFYooy0JEVHmR09b7eN201SNtLP2sLMx +MdJDYxwSEqLLS0saqmvqSqsqi8urSsqrissqi0srSkrLS3GlpaUlZbiysoLSivzCqsL8qhJw +56nFVdVXNuYVV/okJJi7ONgaXPI0MPA00goQV7ThPJWZmYnHI+DxN4AHwz9gmjke4PYFz9yg +XqtCP8cD5IfdHeAggBA4M3iLenIpuBXQL3tZFzyANm7ceP78+fjVRSC8t7T0STwTys/PHx0d +jX8hgSZAQ2tkuHPnDg6HY77C7m7x0dGjTGYGHcV8zQ0N5wF44HBWz3My3c/VG7dv74acHunp +ATRvHTly5FVEiXmLwYP6C0gz9Zo6w7d8TgyLgy8d+LbCnE+z1ow6J30e+HGDfoY5wzOh9nCe +0op4bbsUvikxCR7QfYy6f6BbFjNlV+t5eG4bvcCdkDozQ8gJSGlgOGmfvt3XnD06Ozvp90Mh +D7AQSbMk0iMSmT1i46NsJaRstu1z+npzzAG+RAtrR0tDQws9UytDF1entKTEzuLK6vLa0pLK +yqKKmqKK2qKKyhLAHaXFZQBB8svKc6tKCxrKS1vKyXwSlZRi6u6hY2drY2qAOq/pJyiB3cJm +uJXNhlcoJzON8M8Gj+sT02v/Yf8t4EGznJbmu7PGqhbwRaP/doCvM81yWmqXCPPggcVir6wu +IvE9PP7zK0zo+vXrjx8/vvJCAk2AhtbIMDc3d/PmTeYrvH9f9/FjCSYzg45ivubJSSxAgps3 +45/nZO4/V2/MzbFD4DE2VkHz1tmzZxHw+DNfQPrvyBrgAb6hq+HEGnOxEPCgcY+sdk97MfCA +02qtU0/IXy0bDB6rncmbAh6riUggzVHYgwieqqJDnc+p2vPyeG/fFbTjgL+4NPrISX959QBX +lAnGwtDOJCogoKi6GtfQWFpeVVFcUVNIdn2UA/Iow5WUlVRVlHdV1jUX4VKiIp3Q9oZm+hbm +Rv4ox+gzCuhNbKY/b/XeuUf/xDFLeenL2ZeXCcvI+NfrDB5hGc00OVcDD5qFKtRKLuqi+WLS +4BYCHgh4/MNF/wWk8Q2uBh7UD86QeYIj+0E+kNXA46CCPxTTD0rgkQGKIghnAF9Smhg+byt4 +UFMHuHxNx3RQBBqpeV7wAKWgzoem5dODH00ROMgAw2zU4MHwQt508CAtURJ5yIUUFxfmJHwG +tZ/dQuSIrapooIGWJzuv+zdswUdE/PQvufmgzNDmdj6ukZmXy+pqauvqKkvLyotx5cUl1RWV +1XXNtWUN2dGXXdDOWmgTXXcjrMm5+BOn/dmOOv6y22cnh50Iv6eiCPq0kCPvqaS81BXSCnLP +eQ2HWuDRk19FXFcDD2ioBdyaqCdyrNEE9T2N5r4Kg0dISIibmxsCHgh4IOBBY/JWAw/q7xT4 +2jKsmWH+2o5ra9vQte31WwMe1E9SoAjNkAfDoWFmOg10L8NZc7AfGL5nwmXp3cU04EE/4PIW +gAdh6Sl9hMWHWQoKm21nvcCx3UZBOMTFGqOpjGLndv1xD+pHVg9hsUBrY0cbM1sbcy9P18ys +tJq6qqqqysaa2prK6oTkTFcXb2MrC0t7cwc3S5Shqiv7/tj//ei/ebuhCK+7knSEgqwP/zHM +zgNO7MdS89MIBAQ8XjvwgP6G4fmiNN4J+sml1M9ca3/HV8sJg0dNTc3du3cjIyMR8Hgx8Ojr +66+pbc4vrBq96oCAx5sIHtBTNv13hCF4UBvNNbwTrxo84A0RQKKHH/CtN/ctgjMwnOh1/fZD +cBzOA8wx9VQxqBJwEM7A8GLdY6rh4oAfmASP1aIaPpfoO21i6vEa4AH7WEB3wa/pH9xg8ICv +heZu/BYMtTwhkh6TV7eQ4mMitOXPavNzO+7YHbjrsLeGurmSlL6MiMkpXgzrQf8fdgayHYrX +vhRlbo7V17M1NfDwds3Kz8nOzsO6eRiaGJvoa7t6oUJNjJy5eDw2bY/5lTWY86Aj/xEzBRGH +U3yhv+6N+H6r7UFOwzOnU/LS8Ah4/B3gweSqFhjLGUYupfYNwuOV1EwObh00d4/VbmvU4AHO +7cGDB8XFxeuCR2xCltI5Z+5TJifFUQ+nP792/Ttzm5DM7NKXCB4tbR2uXrGiUlZc/MZC0q6j +136afvSpoXlQUkrR0NDQi4FHVXWjT0DSxUteatq+RWXig1eOl1XWDw4O/nnw6O3tS7pcoKHl +clLUOiNHAyDBtWvRCHi8ceAB8zn1t4kheNCvYf+LwYNbIwQ+B4YTVFYbmaWZxAIPTDA01tRz +1FfzCNHkgQhk3QuhfhRi6C96YfDoGZ5cbeIo+JV6eAU+c/rRFhg8wHnCTVDfjd94jweRtPh0 +sIWUFhFlLSiOOiHod+aMB/dJH0l5Jy4+i90HUDw8QVLi/ieOu/66xXvbAW8uviAVtVCUnaOj +lbaRrpaRkaOrq6uzlYe0RIKSSuJ+Xovvf7HZuzdCRMRHVND5IKcrKzv2V1abbTv9ThxzlZE0 +FBK6nJOOJ+L/5Gk/C3v2F/XSy1V91/W1V2z97XE8oOW01GtV1l1OCzM5qAdayzYzt0jDJzRf +cxg88vPzi4qK4uPjAXsAW+zl5UUNHgMDZOtcXd2ore+5j+sC2yFtPjE3SfUYRd20kWtbWrsO +SGlECElhxOWdUNjopqbWFwOP9vZu8PNyWrGkvC0r+7mDPKYC0r4y5xOV9TLautmv3/xZRjNS +WMZFXduzoqqBGfCATruruzcyJktO1XHfET0eEayEaqSiTmpSpjKuiue0NFbHKDA6Lq+jo/vF +wAPAjLNrlKC4xQEeEwEpH5lzcVqmAUVlh/TNXQNDMxoaWxHweIPAA/wK7DLDcHw04MEQEgCr +rLEqFi4Sl9++dgZmwAOaNw5ZeYYDqdAAKzzzgfoJBb71wZYXXDWUDdQG34XyqgeocQV6l8ZF +QI1q1Mix7oWsFpXoz4PHJdec1fwYcKPwrRIuTuMLgsED9AbcD9Rd96aAB7gbMNxxjEgiEwBk +V1PDojwPi/j8wo7iOmwhKuBnauhyRsLt591hP+/xPcrteOqoleBR5927g77/JeCX7Z6ikv56 +xgbKyvrnNPxMreyFBdx37owVEA89KmjBL3BehA/Fzx25lS12I6vt7gMu3DxW/EdQpw/7HeZx +38+blJe5QoKClv1/wlMSEfqF8CxBR1coP6EjREomIuHZ0ZfEBOQ6nyUSTSKQm6PO8KfbXHc5 +LUAOAAkMFyL9NeCBCi2j+fqs9lWl3pYFYnLqeyn1Ri1r7NWCRqPd3d2zs7MbGxu7urqAKUxO +TobBw9E97riQIYABTj6r03KBcheTAQwo6aYraKeq6ieo6icqaF+Wu5gkez5OTNFPWAZtbBn8 +vODRemVsz6ELHDw6rJxa3EJO4ioRAA9AK4BtQOXaFqHaFmFQK1LqEaelndV1PNcFj/ikAj0j +71Oi5oBhBGX8ZS+QGUZJLx3UDE4b1CZPOWcJ5UDFc95Yz8TauhbmwQPAD9Y9huO4/lEhlKgS ++dyUL2WCPlHUSZPXSpY9Hy+pGnxW2c3WKTI3v3JtvwoCHq8PeJDopijQgwccoI/GttK7IKi/ +bgzXXzDMwAx4gASveoMeNOiRgObZCh5ZgJ/coVvKak4buCE4P/yYA/cVVCfoHPj5iPp2tMaF +wCfzssCD5l7HcNEi/C788LXaaAs1eFA/uNETy2sOHutGLiWvaomLcVZWs+M6avn7b45cRzwN +dD1EJTHcxzHHjjrs2un/+27sYS4sP1+AkCB6336jzb867Oey1VCzVpT23n3AYdNWJ77jISb6 +3hKilrzHTI9w2LPt9N9zIJJfyFZI0OUIj+fufUG//O60Y5eLuGRsbvoStKqFYschUU6DzBME +Ijm0yNOEp0rQEfAuEWTDE0nLIP1F4EGiAQ/in2wXgAfzy8z/FvAobRqBj0N3mDWeEaijeYC7 +zWorZehX3dKsagHIUVFRAV4UFhY+efKkvr5+06ZNADwsUCmHT5hJqEapGxWqG+WrGmQrX8og +G26tFPDzadJJBTYXJLmLCfIX454XPLJy605JuB0TtJHWjNcwLqK0kqUCWtGhtPL/DZFbAcCg +oJW0PniklIvKOokoBFNOuwCctop+BqAO+T/Ulqqomy53MVHufNwl8wjmweOUqOVRQZT0uQQV +/SxwquDyFbQuw9WCJK9NPm3ZczGnZVwu6vvX1La8ueBhYGAgKyv7DwEP6qd4+NtEDR7U36+/ +CzxYpbypD8KWkZ4i4MhmsJGF64chARSnuTPQdwvNNUI3K+icz+jHPO+YEfUta+0PCDp56sRw +yGONQAQ0uEjd4mqjLTTgQe1YhqDlTQcPIgGIbO5J5MmlUSbnVe0UJVHHDzkdOhQkpxpygN+K +i8tURdhF5ETEtv0hm/e4H+SykxHDqkjbcXFYHuS4pKloJHvGj3WP19ET1hqKLuY6kUeOuP76 +i92e7Rh+Ljc1eQcZCVtObt/N+zx+2+G/bZvVGV79c7KXs57N8SCukBOBkiivAVEsU35fpk1E +QLTLFDcHxe0BUGWF9DTy2UseVKFhDjzsaKHCtZcCHn9mUtPLAg9oJR2UaCZmwMehP3XqLyD9 +dwp+C/IZQkdO60VB/k9z3yJmAogB23316lV3d3fwOiws7NatW83NzeHh4QmXK83t400dMi3R +Rcq6aaoGeRomherGuSoGmYq6qTAYACRQNchVM8zXMMx6gaEWY5skU9t4R7c8e1fQSqqKfjZo +RcM4V9UgU4ni94BaUbmUDZKaQea64FFR3R4WXeQfVhKZUKtvnaOinwNXSMEDUFsK+Zz1c9SM +Cs6ZZEUlVjMPHt4BOUa2GcqXMgHSqBnmgDqV9dL/CGNkRlLSywR9As4/K7caiePxRoAH9YAL +MNZrD7VQT5kABhH6DjKcNgkfvOSas7YNfYFVLfRPJQCZoHWpawS4AHmoQ/1Qx92i396axncK +jRNBr7UwWQyh4qUMtdBPVmHYq+BiwWcB/Qoy0E9yox5sgvsfLkIzBk0DHtQDT9Dw95sOHgQS +YY5EhGJqJERF2fAKe+zidDvE6S18+rKOMeb4KbPtrA4HD9gdP+R67Igb33Fr1q1hmzam79yB +5uRyEJGz1dG20lJ3FJMy5OE25zuEVpYPPCbgv48XzceH5uUMO3TIZfsurT1sqENc7sInzQUO +Wp04an2UNzMzlYiHmGH5D4lIToAoiCRAIDSJvLkLAXI2QDRAzkV8aQ4PqoEdwh+HelaeJapx +nbcHPP5e8fPzw+Dh6uo6NTV148aNycnJuLg4aPwlKirq0aNHBbg2db3Q5IwaYNoamnrdA8s1 +jTKV9NI1TAqAHVczzAaWV8OoUEk3XcMoA+OLq2vqegHwsMNknNMPzytspsz36PUPrzhvQm5F +3ShfwzhP3SiH8qJQ0ygrNLaqu7d/XfBobulxcrucV9REmf85mJnX7OBeoqqfoQmoyShHzQBU +WKh8KcvEIT86qaa5tfe55ngApCkoaSzEtbn6l2kYZpBPzJRcrcqlDABjgDpAzYBn1A0ysL5l ++SXtjKbEIuDxmoIHtfWEDNZq4MHQbjKcevpKl9PC1hlukRp+oBkasOWlrj8qu5UGTiD7S23u +qcEDTtRxz14APKinpK59vQCBqMOeQGtn1ui0X0VcGd7b1wg1Rj86Qw8eNAMub4HH4+kmcQA8 +YmIc5VWsD3E5bt0eeJA7TF7d5aSwi4CAw/Ej1my7Qrbuw+xjxwgJ+PGddNm1z3YXK4qT21hN +SV9NxuUQuy3rdrvjXFHGRkESMmZ7OB33c3jsZfNk2x1+jActImR2iMN534HAbaxYVnbsKZHo +gtRlsu0GphwaXqGaPPHs5VOR4J9PDxPIXEJGkyVKIkDvk56WgF9Ar5kbY6GIQB7Aofh/yD+p +E/kI5VTJ7VJOmEh6CUMt4E4Sk9v2DwcPaWnppqYmX19fgBnBwcEPHz6MoKiurq6npycrK2vH +jh2xsbHV9YPn9cOiEyv/6E/o1DVP1LdOs8KUuAWUJaY3lld1/plVLbbOqVrGkZez6qgP1tR3 +XTSKs3TKdvTABURWpuU0d3X1M7mqpbG5G+OZlpVX/4fJJO19/qHFKI+igIiqnKK2xuaewcGh +F1jV4h+aV1jSCL3u7OovKW8Pi63SMkszsCsydCh28a+MTq4rLmvr6OxHIpe+ieBx/fZD6hUf +NOCRVdEH+wrO6MfQsMRfAB47Jb2Wlp8uEJiYenxMIwQqq4vNBke8E2qfOmR8CuGCYoZxNPVD +NczMLbb23bQOKKbuh76RO9AFgp9Xrt9be4qFgHYkfARUBffMGhcCGoXPB+QHrfcM//9aP/B6 +jZjna3eae0w1dETOIgmeXQ8fBG0BqKBOoCB8pZUto2uAB+guVbvUNRYBvVlzPJaJTzdsi0iM +0RMTNz10yFb0uKWmpIuBju8RAevfWU0597mJ8AdKi9qfPO60bQd23+/owzvR4sLWCkrntFT0 +Lii6Scu7HDtjyXPC+oKCDxeH6342C5njtgonHY9yO7AdtN+9z2svJ0r4ZNBZkRAeQXse/tSi +jBcx3BRrT8ATVvAryyTiPIE4hycQqOCBAEEC8TlqfpoZ/MQT5qemhuobussr+qpreiur+8qr ++surBksruoqKr3d1EBbnKGuOCYQ/7+8gkQrrhtb+w/7LJpf+vfr++++tra3v3LkD6AKwx+XL +lx88eNDa2uro6Ojk5AReXL16tbi4+OrV8aqq1vZOWp+AqV1yaVkrk+ZyXfBobe1uaurq7e2n +H4JpaOpezxYzXtXS1tbT3UNbYVR8aVt7L/OGniF45OTV1jV0/HG6aUtodPELRClBwOM1BA+a +kX36AGI0y0ghPwDNGhMmwYN6dui6O5VQz44w9y2iHiyAL4F6ICM4tZFmMxTYRoMXZt4FkO+C +fpYI9dgEeA2FN6RZ+ULtaaF2qjAZuZRmVgz1gM7zRi6F2wKwQT/FlOHQ2BqgyBA8INHEeH9T +PR7k+GFPwSMhJsZCQMxqK5vdjm2+EqJRTg7u6ipoLm7nbayoXbuCuI56q8jYn+L22fJ78M+/ +OLDt8xWTd9LVcdC/4C8qid6xG7trl7e6moeKElpJCS0vjWHfG/nzlvBfd9gIHPdSPBusIo86 +eUyPnV37OLdFgmdJT015R01xa2VBa0V+W0VRd01Jf335leamka7u0f4rN0bHbl+/de/2vYf3 +pmemZ+dnF5bm8fglZgz+87k7SORJrWT+mpntSEvH+QW2xCU0R0Q3hkQ0BITW+wQ2enhVOqNy +nRyvtTRSspNJh0DmlFf7ef1ly2n/dvAwMjJKSEhYXFwsLS0F7OHj4zM6Onr79u3Q0FDwq5aW +FsAScIShBTSxTaLxJ7yKAGKGVgml5S0vAB6rCYBHU0v3nwQPRutcWsNjSxHweGvAg3pk/wX2 +aqHx3q8NHs+7Vws0oECT4FkKcMAKaptOP9RCP30CCmayGhgwtLY0eZiM47GaHX/hvVqo26IJ +70aNiAx3fIMntMALZtcAD5q+fXM9HrCdjo+KNhE/a8lzzHvn7rCt7OEKGg6SkjbCpxx4ubF7 +9yZ/yxq497CNlIj90RO+e7ldtu7y3HnAQUnJQk4yhJXVY882Rz7OmIs6UQoaVpz8rr9xhO/Y +G8i5z4trn70Evz0/j/3ufZcO72PX5N1/jn+PuSS7o+QBp7P70TJ7XWV3e8jt8VPaHai8J0SF +I0iTO+jCiVBtwXA9iSgT5QRrnTRn02wPh/xAv4r4uMac/J7K2istfdcGb92ZePT48fLcAnnE +5cUEDa5Qrn68vt5PSqbM2YXU3Ueqb8KXVi0Wls5mFS6lpC0mxjdhUAWemNl7E7CXhEB8tWFE +/lHgAQCjoaFhYWGhv7/f1dUV/FpVVTU9PV1UVLRx40Y/P7/h4WGGFtDMLjEn/5WDh7FtQnnl +ywSP6ITS5tZXAh5hMTgEPN4sAUsEB/ZkmAEK/nlaL2rtSQjU8x+geQg007nhAKGtfTdXOweG +0xhoBMUR1cVmA+yB26WPSgoMIvW7oAl4sgQ8oxUUOajgD582FHeUpjnIxUF9afROAwHtSLgG ++AxXC3NKL3Aa0KyJNXpvDW5h2BZ8HLyAz2e1jxiKtkodADYV1w3vpEOfH/IgrZHhDQAPPAH/ +bFVLVGyMsYiYAy8vVvKUuRC/u4I6mpPHZNd2Gz52P+nTvny8Tjv3ObCyubFuiz7O5S4ppntS +UFdN3kheHHWC3/2MmKPQSTcVlbBD/JhNu4059nnKCAUInUAd2GPDts/l1z3ae/ecVOP52U/2 +fzb8G/WOf2p9+APnwx9hjnzkfuwTL75PfQU+9T/9WZDIhgixDyPFN0SKfRIp/km42EdhZz4I +EX4n8PT7fmc+8zv7tZ/ML36KbL4ax3y1FSNsTJI8XNNDo4rTshpx1X3N3WMD1yfHHz56sLQ4 +TyISGI7VEJ69eDpVFU/Gh4Xbd1NNLMwPsseqq91Lz5zPzH8QkXQvOPaOf9h9L68pF/SIEypP +X683NweKIkIkvPLoZf808IDW0t6+fXtqaio+Ph78Ghsbe/fu3by8PG9v7zUseF1D16sGj8i4 +0pa27pcIHqUVLd3d/S8dPF5YCHggQoToLwYPytxJsmJiYiwFxaxY91pyHzSVPO1qYYaVlLTd +uR2z5VdPzgOYU8etBflRe/eHbNocsWWL1Qnei6Ji+ueVzdVlrIWFbA9xY3YfdFdUcxeUwB4R +NDhzwlGQM/z3X31/2WK2j9v7iLDz8VNKJziOKB/ZbM73H8dT7zue+BDL9y+34x+7HvnIifMD +a46PLY5+bsH3sc3xD1DHPnHh/bcn3+e+/J+EnH4vRoIlUfadFPmPUqQ/TD77cZL0x/FSG6Il +PokQ2wBAJVDwP0Ei3wdIbPOR4fJVPRtqoBfvhM4OjC5NLGkpar3SNnr76sMnDwj4P2yGC6hj +gURaWSESlwmkpaUuv2iLfUeTTI0HU6N6wgJuBMVccwi6buF23cJ6xNJozNjg3iXzHiWdYl3T +h8PkyT8EyvTW55pMgoDHuuCBwWAAGzQ0NDx69Ki2thZa55KVlTU5ObnaUMtz6c/s1cKELX6+ +vVqeSwh4IOCBCNHbBB4rRMIC5B0gkuLiYi3OaZgf53H7eWv0rr0x51XQ4lKWfKI2J0Wsd7LG +fLcl4AC7w0kuV9HTzuwcmJ9/89/OYSmnYqAgF7CL3fOn3SghEXdzA3dxIRQXpyP7Hocdm124 +9rlJCpoLCvqy84btPBT+/U7DfWxyWlJnMFoiAfp7MbI/Yk5/7iPwXtAplhCBd8NE3g8W+8RL +6GMXvndduN/FHnrH+eC7KPYP7Dk+tjn0L+tDn9gc/MSR8zOXI5/68mwIP/leovC7WRLvZIm/ +my76TsqZdxNEP4gT/zBS4oNgsY+Cxb8KktrkL8MapMoXaaBx2RlbEHG5Iq+lvenqteGpmQcr +sMOCSLpRXe3NJeQicHa4DHenp77Qz63DxWfYGDNy3mhE62LvOdV+ecUhQekGTsHAHexl7p74 +xQXyyhrCGwkeoEJQc2dn52vyZ0kTx8PPz+/WrVtxcXHAiINTBb9u3LgRvADMgIAHAh7IbRwR +orcDPPAEwhLxKXgkR0TbKyhhxUXdjx724jyceFYhfPcxxwNHLJWkbUSFI7ZwBP663Yl9L1ry +tLuMKPbQQTc2TmMlZR0lOa/9hzx5jmPUpL0Mz4VzHfHevAW1Z4fbcQ4/BQlHqVPmRw5id2xH +bd0cuPlXh1NHtBRkYlNSrtwey+koccoPUkm04w7V3hKk9E2g5GeBov8KPv1RmND7ceLvpsq8 +myL1cZzoV6FCP3kf/9aNe4M7z3uuR95z5ngfdfA91IF3UfvfQ3N8gOL8yJnrYzeej334Pg0W ++iT8zIZo8Y/iz76TLMWSIsOSJMMSK8kSJPLvAMmffWT3eCuJBGhfirT1ywutqC++Mtb76MFE +goK6ww6OxvDYoY6O8orStLCQSpTzoJ5hm7hE9WmBvMOHM3ewpXy/OfGbn/z/920IF/ft2moS +ZXebVzq99C/bnfa1Ag9ohAUQAgaDaWpqmp6elpWV7e7uRsADAQ8EPBAheuMEHnIZr80kh+Z6 +GpQrISrankcYw8Zhxr3fQlYqwtghgJPPcdsma66t1tz7PA/zuPEJWO3e77Htt/ADbFZHuc3F +ZUyMNK30FVxFhE2OHXA9xOorL+V7XMBnH7+N4Gn0ce7EnRxBm7fr791txXcwTFs0R0siWPmU +qaRARHjA/ds3CUtzS/jlqUcPRm5eq+xpjSnPdEz3V4414w5SZfVU2OSu8I2n3H/9JP8TLPxl +5KlPE0+zZJxlyZR+P036kySp/8ZIfBkk/G/Pkx+487G48ryDOfIOiuN9+4Pv2+7/0O7ABruD +H9lxfozi/i+G70sXvnfN9nyAPvJ5nARLgsh7EYL/9Tv1X8+T29zFhIPOu7mYOO3cn2tuPjN+ +E1fb4p2UmZNXXOnh0aymlLZja+jGH3y/+i7gq+/Cvvs66fuvs775LvbLH+q0DJYm7r7qWR7/ +WPAAKikpAdQBXqSnp5uZmQ0ODoJ+QMADAQ/kNo4I0dshApEcxwOKyRmWEG0pJWvDesB2028e +R3g8L160k5J2FhG24thtveWHkF+3Yo7wOQsLBxw+GPDzZuefd6K5hMy11c01pd0PHTP+bbvV +of1+Fno+ClI2HEdMOLns2A56/cLhv43H6oS4ydGjMQrCA7YXGoylUnSFw21Vct2t6iMD23Oz +r3f1zk3PQCczv7Bw79HdkTtDTQNtWRW4wOwU88sBUnFWHBFqvwVLbfQX/9r7zJc+ol8GiH8Z +LPlFmNR/omXfS5FnSVV457LsBynSHyVKfhAj8mGU0AchJz725vsPmvcHa+6Nuvs+OPPFR1q/ +fRUj8lG+JEuxOEuRKEuhCEuW8MdhgmKn9oSdEb3XUb+4spJR3e4Un1vfPTKUk1d3QT1hy+/e +n34Z8uWm0O9+iti0MXXz9xXfbyz736aU39mvJGW96s/lnwweQBMTE+3t7dAmcaATxsbGEPD4 +J4MHIkSI3ibhifh5EmXfFDwpISrG9rymueAJl/37A/bu95M448jN53xS1FFA1PbwsaCdB7Db +fvfjPRJ05gyKkxO1fxd6z0EzORU9OVn0QU67fbzGEnJujibeIoet9/5sfGSnFud+PUllVx2U +haSRJtsJw127fQUOZJkK1WLEceZ8efonCs0ly1HncViTAh9UWVJoW23BrVv9K/jH/++MWcI/ +mZu/9niq8e6VstGGws6ChOpEj7xA48sYpXgrnlCt3X6qv3nJ/+gh+63n2f95iX3uL/6vELFP +wsU3RIu9Eyf5XpzUF9Gy3/qK/svu8GdefJ8kibHknGHJP/NOhsiHGWLv5kl+HS0ufGR7uqkx +aerm0vJyx9jtvJae6/emF66NN9o5ZPKcDPtmS8r/tmZ9tz1x068pv26u2crauutIAht3ZUDo +ysoyAh4vETySk5PDw8Nh8ADGi0Ag9Pb2srOz37t37+rVqwh4IOCBCBGit0PEFcIKgRJAjEhK +i4yxFpY04GB3EjnuqSgdpHvJ7dhxu61bMGwHvAXE/GTlMfxcLjt2hmzf57lvv7Ukv42CpJmG +uqmGkpvCWT+es/57hf2UlGxOsWqd2GzlIa9lLq4ozOds4mDjkyCiZcB/+qSc0gl92f1JmpyD +aLFmFG+ZJXudMWeXKV+PtXijgyzOVSXXVzsvBt1Qln11uGN67i6BhKejpMWlpbmZ+UdTs1N9 +94ZrhlvKW6sLqgri8hM80wJtk931EhyVIs3FgvV4QrX3h2mxBWuyBqntCFDeEqS4yf/sj/7i +P4RI/uh9ZpuLyK/eYnvdJc+cPRYR7PF46ub1sf72rpqR0eZ7d4ZWHt3tT83IVbh4eRdXxqe/ +4b7anc/KmXeUr5hXKOeEGM7MZryvd46IR+Z4vETwqK+vX1pays/PB699fX1xOFxiYuLy8vLs +7CwgkJGREQQ8EPBAhAjR2+LxIO8LC23S5pcQaSQobL91j9OOHZ6iYt5YZzNdTXPeI27bf/Pc +sjH08H43RWUrYaGwrdtSvtmE3sHhKK5ge0kTq6MQLizpsZkj5Jf9UXJSIRYyFqqc5p7iXjl6 +phe51E8e1HHEnAsKVjKzltXV1uA7aXhsf7CZWL27Qpu3ZKvbqXp7jipztmor9ib0yQ4PmVbX +89XOukUuWqXhVp24sImRuoXHE4SlldXJiTJctLKyDIhkaf7BwqNbM3evPhgfvHu169ZQ9WhH +/mB9Tn9NZld5RkNBdlXu5eqsqIrkaFxibHliauXlovJcXHX5nRvj1aXxEV7K+eHqxckWwwPV +90av5lui8o7xle9kr+IUyhaUipdWSTynn27tNFJfDxqcJa3gSW/eqpbp6enKysrJycnXDTzq +6uoAXUxMTPT29gLwACYM/MzIyBgbG2ttbX0p5hUBDwQ8EP29mplbggKkv+ZhrxD9BeCxSAEP +8PweGh+lIyyC5uF12r3bjZPLX1nN7bSko4CA2UkuuyN7Qn7f6cLGbi8qgOLlDDjMgWU94Lj3 +mJmqopmcmB/rITQHr6H4CbS2cEmQco4j70WNrx0iTzkFiBno8CkKCeoZWTp5RRvbBF/SRGtI +aoVHhA+3lpfHY3M8lOu8xfv8zvS7CTRaHqsx4Wm2Oj2AOXvVW27QW6YOK4ZzU66IcGzHpY+P +DM7MzBAIVG4Gyg5zS0RKRI61fDrUiUi+YALxCYG4SMCTCCtLy8s9fcMjY2Plxd6xThwFzjuT +XY6UV0eOTtwq9gkqOH2i7MzJyyoqKWaWWQFh+Sk5GYmZ3e2dROIK/tlioDcLPF7bOB4FBQW5 +ublYLLavrw/gB4CQkpISaH4p8iV9/cQDgQeJxODvMycnB+kgRAxFv4ktordbq65qebrjKlk3 +RkYvBwVjDfT0RIUuHjsaLqMSx3rcZROr1XEeN0VZb15+7M7tqF2sjnv3eAsdw0rzm/Dxaqtq +aijLWQjw2MqJnVM8bnH+dIwTb5HPTrPzX1yw3GoXJeYYpGh88dTpY4cuatmiXdKN0clqRn72 +nkm13UMTU5MDbeVVUU6lWLU2d5VRP41Bd9l2J94aC7Zqs31tKN4hX6nBIOUWX8UaL0Wcl2ZF +FKqvPG1ybGBudvaprwFPDuW1SHHXkFfmrDzb2B5PgravJRKfbWxP2duNMnZDDr/xmESap1z7 +0tJyd9+VgasjFUXeqVhOnNPmdNSenHRsZWtndmxmkp5OvqM5LjG6pqigoryypKImPTuvo6OL +SCA+3VP3lQkQAmCP6enpfwh4ODs7e3l5RUVFgdf5+fnz8/Pg8dnJyWnjxo2ARhCPB+LxQPTn +vQ1vN3jQh1v/K/X3tv7aatXIpTQYQiD09HT7+vlqqqlaaWo6CIk6srE7b9nluf+A5/EjjieP +YfZyRfy0JXbTD9ijbEYCQlrndHTUVR2FT5pzH9JiP4CWUfQw4Uny3Rzlskvz4s/W/sKOkVJO +UWIXTQTExaUNDLwdvC/ruMQqWfgbOHrHZhRcuXF35smTq511FXEuxW6aDa6yI/7iNwPPDHgI +1tlyl5ly1tpw97mdvu4vcTNQfNhTpBYlUuyuUZHo1dtU8eDhNOGp54OMGQQ8xZdBCeuFJ5KW +yeABSINAIQTyaBI4RiCnFYhHIGhYWlpq7+ju7u4oTnULt9qfYPJ1ovk2XCKmoaEvt7Adl1fa +3ljX0trS2NzU0NjU2tZaUFjY3t4Bx3p94/Q6Ry4FGhsba29vB7wREBAAOAH8evToUQQ8ngs8 +rl6tB+ktAw9Qp7e3N3IbfwHlVQ9AG5Ews2PaGwoepU0j0H4uf/0VDY9PXXDKhHZ4Qf7YXhg8 +IC0uLXe3tof6+ly4pKGmJm7Iz43eust/8y63g1xevIJhQrz+B393++Unjx1HzeU1baTl4ndw +Wmzm4t0iZSB4zk32YJHHdlz4r1iL39X1D9snKZrHcWESxS2w6rGp+dEZdWYeUfro+HNWvuet +PK09YzJKmybvPyKtzNzuq2lK8ShxO1eDURj0U5oMUbjjLzHofKLG7GiBEU+No8iAz9lroYpX +AhUa3WSKXNQKYzwGupqm7txaXl6i8t8QyeMgADPwc6TlJyT8PInMIGTyWKR4ORb/GH8DgEdL +S3trc31BkkOQ6bYY4/8mWG+tyXTp7R0sreqsr6/v7+vs7evv6yerqakpLy9vcHDwzf0zeM3B +w9fXF3TvxMREWFgY+LW5uXl8fDwnJ2cNI/jkidAzt/+6aQ+wYExnft5USTUA8dIT6ZXVDCX7 +FyuIxPF4/fVcW7W+oeChhclabXvfN9qH8w8BD2Cz8Xg8Af90Lcns7GxlW517mLuhrrIOD5fd +bnavbZzovYfR0ifQasft+fa77ztmK6dioiqF5jqktEP2l58M+Lees2DbU+3wY0P4F7k+2y5q +bdP2E7PN5jeMYnPLkooriewdf+AXk+DgnmHhnaPuEK5qG6ztHOESnlHZ1PtoljzT5P74cAcu +FxfoXI7W6ERLT/grTAUp3vaVbnQ4nWEumGUhWI0W6/OXvxaqNOQl2oQSLPfVb8mNvN7b+GT6 +/rPrIJAIM6SVh6SVRyTCIpFIWKbszLJIDjdKJhBa8GjrGOjtqMlxibDamWD1baL9roZCj7Gx +KzVNba0d9deuDYyP37h27TowggUFBb09PYuLi6SnW9Qi4PFywAOLxaampsL4UVpaOj09XVxc +DF6rq6uD12s4ExYXdwAL+Pix5P37umun6Wns4mLTutkYJiLxIxLpnTUyLC8PP37sy3yFCwts +8/PsTGYGHcV8zcvLP4D0XFc3N1fwXPlB/Qh4IOCBgAcCHi/L40GgiEggRxWDjkw/fFDbUIn2 +tD+nIIHlE7Hafwi9bXvgATbLEwetxYUdLmk5XFKylzjNt/3819+bsn1pob1FLNvgfz3R39SF +fhPquvUSStQ5V9k4ldUwabd9gmZcQdTg1QEHTJKZR7pVcN5FTLyafeQFx2gT19igRFzH4E2o +1Yd37vXVV1XG+JRiL7SgRG97CD8OkbodItfnKlxvdbTMaH+DBfu4+4npoDNj3hLNGPEqV+Xq +cLtO3OXbI31z8/BUFvKCnXlAUBTqIBDxJMI8OVEFOwfg0djc2tHaWJXpFmnLGe+wIw59uKU0 +8M7kzdbu3r4rnfcf3gIP3bW1teXl5eAFxBtEIhEBj5cIHhgMBvxxDgwMeHl5QewRGRl548aN +7u7ubdu2hYeHT01NrQYewHwDC3jjRtIrHWrB4z8nEt97iUMtDx+qAAv+KoZa5ubYQUIil76h +ot7SfXh8Ct6uXc4iaTXDB+/nDm1AD082gLahBwchywgNB5BrTnu6PX1e9QB9u9SbzsMHqReh +0GwiD17T7CAPtQttLk+ibBAPZWNopuH930GGNWahgIuCRjSoN6+H3gIFfxVxhauF2yVR7U0P +zj+xsBMqCK2pYbit/FmTePoN7sFZ0TQNEigFVULfva19N+F+g88EGpSBr5Thxw1ODKoQRkTw +AUFH4Eum6eq3xuMBvyAQyetsSc+iZN15ch9XW4oyN7IQFQ3YfzTuu12ojb9bHefVM1CzPS8T +cvCk5DcaP3xlseM/Hkqc5t4aO/rifq0J3VATtSXKS8kxUheN49VJZLVOPYNOkOwdqh0YuuXk +n2TqFu0UmmvqdVnTNlzLKUbfJcnKMyW3oPzR1NPFnnOzczcGOtuyQ0t9dWucz4xgeB77n1oO +FXzozT3syF5serQAJdPmrTQeqnInRHbUVbDJ8VSFh2Z5SlBnW/PU3TtQJeAK5oikRXA9+GXS +8jQJPwOBBwQPeDy+f2CopDA/I9wpEiUe7sgT5izcXXd5ZXFxZGxi/Pb1G7fGSkpKMjIygBF8 +8uTJ8vLym0sdr/NQi4eHR1dX17179xITEyH2CAsLe/DgwcjISHBwMDiOgAcCHv8oBwVk7KDX +UAKmEyQaSqHOAFtAyJjCVp4m+SbVwU3AVVEbUJqD1EcAljCsk/rEqOkCGFlq0qAHj1NaEdAR +agqiEbgcmq6gPiv6t+DK4beAWYffhdbzUv8KNwQBDLVrCLxLXz99JdSptuMa/CFSu0Hg/NT9 +CecEHQs3BJ0A6NJ1u/qt8Xj8P4SQV9qSF4asEJ8tFSGRmgc6/TDOtmLSKK6Tdgd5rA/x6SlL +m8qKeLHyyX9zYctnNj994KYoE5Psg+1MYK+JYWkN+aI+UCQoxAqbLm9XIKQbv8cjlzci1ZpA +ItyanApLSLdA+2GCLjsFZWg7Rpy3jzRySbHBBgeFRjS1dy2vPB3xWcYv35q80VqbXxtlW4aW +bXU+dctHcCZcYjxIrsRBPMtcqMj8ZJsD34T36ekgsRt+ki0uUqVY5ZJAy+b8+MnhDsL8NGX0 +hbwjzcrK0goeT3wmAoEAwGP8xo2aykpcWkJBnFtyiGGohzYuN/Hm9cmBgfH6xqac3OzkpOSy +srKGhoa2tjbwGL609FdMDgcfFoAExguR3kbwgJSfnz89PV1VVQVdO8C8W7duhYeHT0xMIOCB +gMc/CjygJ1xgg2BbDz0a09t3kBNYbWDXYA6BnqlX83hUtl6lMYvAslMbdMhnAn5CZeFsoBU4 +2yXXHHAC1GcLuw6oTwxul6HHAxT5ls9p3WEganqBLD548Kd2a6zm8aC+dug0II8H8+BBXQOo +FrwFXTXsNmHo8XgB8KDuK9DE9dsP4TOEnCEwO/0tI0p/GXgsk0hPKIlsZVdIpDnyIYACdyYm +Y+29TMVV9TXOG4lJ2yor259XMhGXF/jFnHWD49csaHnl3P7WsaYk6ba0fzX6fTAQxlYQpR+R +jHXIkrXJ5zKP5HRPlMttTAO1PpmZKSitsHPxdfSOcovKM3ZLVLMO18Cma3tlmnnFxqdm37w+ +Bk0FxVNO48njR+MjvQ0FifmBlsVYxWFv8YVwselA/muYo40WHMWm3CVWAs0uZ8cCFW4HyQz5 +yda4ypa6KjfG2I/WZj6aHINoauVpPI+nAqatr6+3uqK6DldViysoxSXlZEelpSRmXi5KScqN +jo9PTb9cXFRcXl5eXFwM8GNgYGB+fv4v+Lz+aXE8YAUHB4OrBkAIuhogBxsbGxaLHR4eRsAD +AY9/GnjAQw8Qe0DWk94mUrvfYfsFD7jQz/GYmVukcWVAPABXCD1Tg2phw0dTFfVgAbWLhgY8 +aJwq9OABlaXJs0afUA8DMTPHg5oKqAGDSfCgtvXU2dad4/EC4EHjykjFddPPzIEB7A1yejwv +eKyQiHNE8hpUImVB6jKeuIgn4okE/CKp0Smp3jaxvKgamAkJYQFNZUkXezfRfZFb3nf/9j1X +vkPB/S23mjIsutJ+rQ/4tCvsq9a44+UFUa7pVo5FYtaJvC7pohbxMvUdZeRW8Cst3X0uQbGm +rpHOUUUWAQXydulKzjnGPrnW7tFuXiGVFdWL83PQhI2n4y/LK7fu3uluqysNsWhyEhrHHJ4P +FpyJkr/qL9eElSix4C8xPdZof3LAS+xGmOy1IOluN7FatEyFn1FTTsyNoV7YX4Enz2QhCzxT +93T3tzT2Vdc2ldbjcDVFOFxpSUFFblZBbmF2WRWupqa6tqamsbGxt6/37t27hFcbK/2fDh5A +GAwGmLDp6emUlBSGcTyaWzuzcsrCIrNCwnOujx8EFnBwMOo1B4/BwcH2ju6Kqsb8wuoiXP3N +W7L37um8LPDo7unNzi3DuMVoGfhdG98+eYe1pq4ZAY83GjyojSxks6jBg9qKQY/wUIKLw4aS +4eRS2CJD2aA8sLcfIgHY0wK7MhiiDrV/Y7UjDM009BrYembmvcDWGRhferO7LnjQEAuT4EHP +VK8OPGjmpgakNFD7sqAEfyKvwzzhVwQe5JEJPJEScIu0TCTOEslTNJdIhOGrk+XnQx97tRKX +iEO3rtt6oiNjQga7b8rzFH3L4vvDBo/9Xzs3FAwPNsQ3xR3sSfi5LvDj/sSv6rNNipuqbZK0 +fcoFzRMF0aXCrhGaQ8NdUFNjd+4HJhVfwkQ7hBa7hpeaouLOW4aZuqVZeWdaYCIj4zKGh8dI +lDChBNLTaKHg5/17E3VleVlhrhku2jVu8uN+EnNhYjNBwjc9TrXZcpeacFRYcHY5Hb/ue2Yi +WP6Kn1I1Wr7U5XxVrEdvS82T6Sl4lgZ+ZXH2yczk5MzQ9cm2a0PNo70dQ4N9fcN9Pf1Dg91D +Az0jo1fHbtyauvdg/snsMn4ZT56BiyfPgqGcBiV+Kjl+CAEaj4Jmn5IT8emQ1bOwqQh4MAke +QDU1NUNDQ5OTk8nJyV5eXvS2r7e3V+2i036uC00te1+dx6O/v9/YwnvvoQvXxr9aWXn/z3s8 +mpradPQ9pJUcrl0/+1I8HiWlNTaOoadEzTl4zQVl/GXOJ3b37+nsZRWRddUxDoiOy2tp7UDA +400ED5qZBjTgsdr8DXp7yrBCGhMGGWh4PgPUClSQHnVojPUa4EG/0IM6M9QWtfOE+Tke4Fdq +/FgXPGjmZDIJHjSTLl4peNCgEXRFq6W3GTwgs0ogvyBQInQtEwnAyLY3dtdeSpv2GwIUskLC +17U1jIxcuTH+RJg745t3XH7/0HPLO4EpYaO3x4dL4gWv5Xzb4L2hK+FfDbH7r3R0pOBSXVKP +m2SIeFaIumcfd0+4NDb59JQezyzmlTXbuITZeyZ4RBVb+maq2Uadd0qy8s+zcItHecbklzXe +n366cS0Rv0LAk6OkL+KJdx7PdPd1lmVG5PnolTqf7fGQvBUscz9U+m6w5LCrQKMlV7kRe7X5 +0R4Xkeu+Zyf9RPtcRYqxikUBZl1lqfcnrlFisIO0BIBidolwb3np9vLi7cXFezOLM48Wlx7O +L0/PzyziH5EniJAjgiyQFmZJMwTwP4WA8OQBKALoCTxxBVq0S3YKkaex4leIK+R1NHhyDLNn +c2QQ8FgHPNBodEhICLRnXG5uLkCOkpKSiYkJ6t1pQyMzhCXN2TgvAlN7Ws5X18y6sWW7pq5n +bGLuSwSP4LC00xLmu9nPc/JZnpb1D4tXzC06LKmIcXKJ7ujofl7w6O7ujUvMO6fjeviE0VEh +R3HlIHc/9bTMwMamthcDj4HhYQd0hIVt0EEeA15RFwnVKEWdVOVLmUq6aTqWYdoWYfJayXLn +4yRUAhXOeaPd4nGldQh4vJXgAU8toEmwm4JhhfAwCrQmBbaGkG8BGuWh9n7QzAP58+ABzztl +xuNBolpaQm1/4fmo64IHzUDJawgeNE3A4MHww6VZd/NWgQeN/4Mi8Lxfi6sZ9mh5EDRGmiMt +Ls83NdSNXLkyMjZ1ijvxWxbMro+CN7HEWehVPnq80FRs2xO/cTDs+xrfz3rS/11/+dLE2NXU +qhDHQkmjGC5Ulrh7iSQ2Sb2xpxZYfUoTxDv37hdWN2NC0619ku2Dc638c3TRCbrOcRaeqTbe +yejAxMTs0r6ha7Nz5Ogc5IAjoMwKkWzeV/Bzs4/u3xoZ78ANFIW0xNu0BJzv81Ec8ZW77it5 +zVO4H3Oq2eFUlYNwA0qw15m331Wo3f1snbdGXYrvYE/rvak7i0uLRMjNs7JMwC9SArEvEojz +gDGIhBU8nhyGjNwifn6JtPh4+tHdkZt3RsfuXr16Z+zq3aujU6OjU1evLT56Ai0IWiARFiiD +OeQw7URotIr4OoDH5OQksAsjIyOvIXgEBgaGh4fX1dX19/ffvXs3Ly8PHNy4cWNcXFxza6+Z +TbCEIobntD2/hJuYSjh4tFfQSVXUSVPQvgyMrOz5OEnVYCnVgIuGoWj3xMjY3O6evucCj7b2 +rksmfqZWgZJKWB5hB34Jd3GVCFnQijbUSqqCdor8xUQpjUhZjUBzu8jA0Mx1waOgqNrKPlxV +y++MnIegtI+kerTcxWRQG0jgnKU1o+U0Q3XNYuwxCVGxecW42h66c14NPLq7+9V1grRNovVt +C1QuZaoZ5qoaZCvrpQP8AB2ioHVZHvwkp1RlvQzwQsskEQGPtwk8JqYeQ9Mywc/SppE/2ujF +pWU8fYWajn/Y9uiYRghUp6J1Cnhh5l0ADl6//RCqFvwKVQ6O0BQBydgzf2l5BToNAe1I+OBz +gQc4T1W7VPCaXTGgZ3itbSupz+HK9XtyFkk09UNmGpwteJcZ8IB7D6SwjGa45i+PO1L3vC42 +G8rDKuVd23GNYQ/DV3RQwR8+CLoaPgjagg66x1QzDx7ROa3wEiSa3rj/aO4N+nsGd4M/s/EH +tAZk+vF0dUXNnYSRqaBR0jwZPBrqa4eHhq6O3RM8GvsDi//uDbE/siSLHo+euPVg+npnWSD3 +3fxNrYGftcR90Ry7ubvYa55I9M+y868XvRB11CLrVEijgn20ZG5tDEAaineF/Mc8t7CMq223 +dY80dYlxjSlzisBdQMWq2UZY+OegQgtMsdFeoZmt3aMreIoxX6QkUBoPuWeeumqezC8Mj16t +K8nBhTsXu6g1YyXHvETvB5y57ycwgj7abMFeYcJRbnuq2FkuWIc/0/VCSQx2sLF05v4UNJZD +INe6PEeaWSI9JkPEMnkfvUXy6eGfDI9V+MdUBSe2xya2hIS2+Qe2+/o3uXvirB2aAsNW7pG/ +IwtEaDYuNMTyzHP0GoDH6yZq8EhLS2tpaYHil9bX1wcEBEDggcViQyLyRRW8lfTSNIwL1Y0K +VA2yVPUzgZGV10oBCbKwFEJIV9RNU9bLVNJJjU8ufS7waGrpAtwipeqjqJ0MTLm6caGaYY6q +QSaw5hS2gVohJ4ANKpfACWSvCx5Jl3GqujFqBtmaJsVqRnngtFUuZTytDapQJ1VJN11JNw3U +JqUeHh1fyPxQS1hMSUp6JXhRWdMZEFGlY5GtbpivYZKvbpSjop8JOAR0lJJepqFtTmRiXWNz +LwIebxN40Iy2QGsuoKAQNDMhabKBDJAppF5hynAyKj05UA95AJNKvaaD4XKbtcEDOgKog2ZR +DMM+gReV0C87hWdE0KygWQM8aC4TKsVwIIM+GxwMhN55AmUAiAI7lGhKMQ8e1KtaoCgo4MJp +onz8EwSBx/jNG/VV9dNpNx6EXKWAx9wz8Lh7+mjMTyzhrBvifmRJPbIzuLfzOmlpqSpBezj7 +s6HEDyv9/nst43+V4WL3Jm5UNpa4FJ52qRfUDOPC4sT8qgXtIkRru3DkSREEInH56dTNwdGb +3pEZ+k7hdkE5rok1ht5Z8pYROthU5/AyG49UK0xUc+fQs5EXAtn9AYqSiEuU8Y6lp2NF5FCo +8zOPrvV3NOfHV4RY4dDybegz1z2EbviJD3ifbXSTDlLnvHDkm2gDoVpX+UKUXF6QU1tdzd2p ++4AcyKRBDrS+vEgiezyIENgsPGp384kWUx7LKyb29OLLKoh5hcSsnIW01Lsh4bWmVleyiiih +ygB7kJ0mlIghBGibOgQ86BUXF+fi4oJGo4uLi0tKSurq6mgme0DgASysgXV8Vn6jW0CZhiGZ +LjRNizRNARtkQWAAEuANNcN8Jb0MNYMMBw9cR1ff8w61GFnG65hGpWbVJ2U06NvmKumlgwrP +mRVTTHkGaBRqReVStpp+JsqjbF3wyCusi04sr6rtDI6uvmSVo2KQc860WNMEEAiZmkAiV2WY +r2aQ6eRVml3Q2tMzwDx4hEQVJ1z+f7vf2TWQmtV4yQqcXpamSZGWZZ5HUEUhrq2/f/AtmOPR +2dnZ2NiIgAfNaALDOB40dhZeFQsnCDyoj68WqYPepc8wrgUNYDwXeHjF164b+ZPa+jNcL1Pa +NLJ2HA968ABsQHMhoEL65bTQmtm1e5gmA+QbgVegwD3McD3sGnFloYhnb/QEj5cCHkB9A30p +MSkjHs0Pgq8CW7qMX2ysr7kyNHRt/J4od8KPLNG7Pon8mSV159dBZQV9oFRHRVht3GcTxR9U ++34ykfqfhpA9jWWJd+/ds49V8qoXRBWKnA/f710r5FF0xjlabWC8jdwQeQ+3Zcg/8PDJXGph +nalLlKlHkmtCtV14mYZ9rLpVlF1AATa0EOUT19jVP7dEXtxKIC6tEObxxCUKH1HmfeLnifiH +FBIhCxj+R9MPR/o7qosycqI8sz10a11lR/2k0i7u0Tj2M0aDf9RXdjZKrtVDLN1JKjPYvK06 +5/G9u5C3YhYgDWVAB2isvDCMl9/70LFqL/cHpcVTCUkzoRFP/AImvDzuenr1GJmXWzg8GR4n +kWeNrCw8pQ0iAh6riYOD49atW+7u7g0NDcB2Nzc3A9hIpQiKKgaBR1JqhalDMmzdUjIajOzz +VfTSwXP9ObMikDRNi1X1M/WscyMTa1czteuCh7FNkrZJVE3d0ykcldUdGJ9SNYM0gBwAP86b +lQDaAa1gfHC9vYPMzPHIyq1Oy6p7tvBkICu/2dGj6JxJloZxAahQzShP3yYnPK62tqH7BSaX +hsfikikeD2r5BeemZdenZTc1Nncju9O+iQLmCQoWQT0fcmZuCTpIb3RANuhZGI47Sh/cEgr7 +Cce4oB4mgBI1YABTCx9fLZQoyH9aLwqqjb45cIS+2tXeAo/2cHOrOT2YuUZgpumnQKx9IdD+ +blARaKqqd0ItTc/DlcNBUMEL+uuCgntA78IDQ9QRXMFHwPBDZPhxU39wcM1QPW9W9LCXQh3g +RXdfT0td05Bbfb9Fzc3e249mHnS0NY+Ojg4MjgtzxGxiidvxr6BN7yVu+iA8NaKb3G83Wwuj +WW/j3u8I/fdg8Bcjmd/lx8vOzz3KqomzTjgZ3CRhknJUN4Y7pE3BKZPfI8F44j5lhI6wQiBv +d09ucYlAbOi6gg1OMcKEO4cVesRVG7qmqltHGLunOgSkm7sGxuZnXr8HwecSkRwRfZFEntqJ +XyAQnhApO7WQsWSFQBnEIVL2iZt6Mjc81N9Ukl4ag0m2k0uyEC1Dy13zlFgKF8PHn34SxTvg +eaQMJVzu7zRa3TLz+DGBEnsd6Mm1a3EqamgOjvZA/4746L7YqDEfv5u2TrcsbUaszEdNzcZ0 +jUtlVLuCI0mLSwQC/hmtkChzSxHwYDzUEhUVNTQ0BDCjpaVlaWmpuLjY29u7q6sLUEdHR8eu +XbsAeCSklOtbJ9CY+5yCeoULEar6qeoG6WgvXEVN95+cXHrJIv6cQTiu/A8TPnv7B9V1Is8Z +pWoaZWB8Sytru5hf1ZKRXZWUVkNzMC65wtA61calKL+kra9v8MUmlwK1d/R0dvXSrNgNCCti +xsWBgAciRIjeiHEWsp+tsx3cYOdz7/abVNVm1lfUFudkpZfiSjPSi06whv3GkrDtM89NH8b8 +9E6yj00HfnllGf8Ql2bYn/HNePI39a6fXC/6sDR2050bQ4/n7odn26LTBIIalS9EHjfN4Q5s +k7SOlQzN8pyZf0TxM5DHNijb1ZHx48ad+zFpBWbOQbZeSd7xVfbBxWq2UQYeyaiwLEMXf0xo +VH1H78IiJbw7cYmAnycQlmYJxMeU2R+UMZI5EiARytgHZSrJ03Cgj+fmezsaq1IDSgLMSp0U +mlDCA1iee37cs2GnHoTLdLgqljhpVyf6373aS0aHpcUyjJfttgMZ5pZTw1c6i0sqXVxGnbBj +2sbXzuv1XLzQIiPXeko8i+1QIr/QFOQWpoAHZW4HMsdjVfAwMjKqpghgxsjICHjh5+dXUVGR +np4OLOmBAwcAeBQVN/iF5g8O0voTLBySIIPLjLlcFzxCowqDwguaW/9gzds7e40sE5mwxQzA +o6qmFVfeQnMw8XJ5XuHzbVtPYi6AGOgH/9DCjs4+BDwQIUL0drAH+NnU0rSwuDCbNXHff/jR +xOPm9lpvT7f42LiK8mZJrtRfWKK3fY7ZvCH8e5ZMC42m+dn7JNJ8R1VNXTDno6J/1fu915f6 +WUf6f/vaCygsMegWY+hZrObaIK4QudWuVCy4+YJFlFBOTcISZYM68qayK4uExUXiCpl5FpZW +qhs7HNzCzLAx2JgKp7haNaeYS57JmIhyO+9MK3RESgbu1gQ0pZm8KcsKIBDykA2BSCLgyR4P +st8CT6BgycrcCmEZ2ogGgMEsMBnXrgw0FDZlhZaGoIpdLpWhVBoxUn3eon1e/DhrgRSMzmhP +5XBhAXo/b5iI0lhZfU37QHZOcQnK+aqVw4iCVofA2TzuY0nbWVO+3pzw7++8vvq2yMJsaQYi +KMjZ8bqAx2u7nPbq1auzs7Pgep2dnVtaWtrb28PDw/v7+3ft2hUcHMwwcmlaVrWZfTLz5vLF +Aoi1tHYbWCZ2d/W+AHgwVHxKRU5+w6sBj6GAsAL6yS0IeCBChOgNFYFAAOABLPjD1Ot3/YaA +2V5amSspzu/s6JiYfCzHn/UjS+L2z923fBzyA0vuefGyR/dvk0hLk+MPccGyDwrf74nbUBP0 +35sFn9XhrCEb3NDahgrVDWgSti49qBp2zLtaO7BGxD5KvKaznMI6BNLKEhFQCHlbtiVoxujw +2M3g2Ex9p0DbkEzbqBJlu+iLtknOAZWYIJypUxTWP6m+Y2AJDwXtmietPCERlikrbqEwGkTy ++hTC0gp5VOZpwlNt97ayvPRw6uG1wdGemprG9PCqSNPqQOUKV7Vk24vpzqah4uJoTp4r2UW3 +r08FZ9VHZlfWxsR2mDvWnzqb+NMmn+82hnyxOe0/P5Z++UPyf76M2Ml2NS2LvP6Wct6E548g +Bu7ePDw8k5OT/xDwSE1NxePxT548yczM9PHx6erq6u7uHh0dFRERAbQwPj7OEDzMHVL+GvDo +Ws+aMw8eCSkV2XmvxOMxNDRUhGvqQ4ZaECFC9Hroz8TxgNwd4Kbd2UWe2XI/dWzSq5/0hAwe +bW2NV0dHb03clxa4/D1L7q5Pg1g/Cf6JpfAsd+rt6zfJnoqFxepMq+G4z+8UfIfz+vRW9ke1 +GQKzi2SKWF4gpucmOSWcCO0UMLp8WitUOLpd2rP4GCpedWC8m+K6IK9zIayAf3N44ixkux8+ +epxbVm7jFWQTnO0UXaeHSlI3CzP1zHWKqLLwTjfHhqdkl9y9e59SfIm4soJfXsGv4Cmh36FA +XkQibShRBliwvLQ4ff/OjetXbg333a6vildXN9u2vdDRDj8zPXTvkc/l6rCMiuGurmb3kGIh +qYAvPwn49ofEb9mKvv2l6tvvKr798fKXvxTLnH8ydoNIGdd5GqXsNdDrCR7Ozs4DAwM3btyY +nZ3t7OwEHAKOAGu4srLi5+cHDcFc+dP6MyHTX2yo5WWJ9Dx7tbyAkFUtiBAhej3BAzx15ubn +riyvPM68dc//CmmGtLg809BYfWVocOLOA7nTqd+x5O78VwgAj80sxXw7I/u7RqCyo11ZdUG/ +3C/7b0Pwpz0Rnzenbr95cxSq+cGj+4GpJi7ZIkFNarrRXJap7FFd0qh0Eb8Uuzv371DcHotE +4hPyEMkKgfRswgQgiY7hEWvvOFRIkU9clbVPppp1xDmn/2PvPACbqPcHHudDfK73ngtRcYAs +feoT11+f8sSBOFEEZO9N2bultIVSuujee680TZNmp2lGm902aZs23XvvkX33/91dG0NboIgo +4n35Ga+Xu9+Npvf95DsTHMOYLsHkE+eDvANjlYVlZtRHg1QZs2CwAf06/d+uKj383ieH/vN+ +BYUMQyPNw72CInWBvHB4cLiaKmKs353871din5iZ+fQCysyZ2S89z37zHdLr/41ftrpZroLR +cFYcPK4NHm5uboAKmEwm0FxarVYgELS2toI1AwMDABWEQuFvol5x8MDreOCCCy5/LvBQqVTE +rEwBO6/KS9LlXwm+yRtMOgAemrLSjq7+jd+nzyBkzHsgaMEDQS8RmItmBAk5Kmz3vo56buT3 +dZR7KpIfzL30WGnav2R5UUhlDPRdTZ3aNWq/H3uNj2jZ9sh55+hfhso2nIn5Mp7qNzA8iBYT +HbKYzEiRDhNWAHTUcSFRaY86hZx2j/WOYzuH5Wx3jl1/JuyED+liGN3BM+GUS2BqNrujD8wA +j6l9zO9huq7bAyvTil014mBi5LltO5rq5FMlkvb2NBWX5VWo6J11sv6erv7Kdu6Zi5QvPk15 +/FnKrPk5b80nfvph4ufLUr5fowiOM/QMYHVFkPxeC3Q7fAxuW4sHOKX09PT8/HyxWNzZ2alW +q729vZFSGNnZRUVFgENw8MDBA3+M44LLXwc8MPbg8/n1DfXlypLCs0zVUW57RYfOOCxXFFSU +a9o6ejcsT3mGkDJ3WvD8aYGzCcxXHw6hpCgwFa/XmYRUb3n8g13M6Vz3x2pTH2ImrOzpakdR +AAnI4MvynCPXBYt/cmD/b1P4W5d434RKl56NXsoQkUxmNEIC6XiCxIdCyKLJZDEivVPMFlmx +9kJA3EFnf5cw0sW43COXSetOhe88l+AcynYKIh06H3QpNFlZUWsaA4qx6mLQdS8WGov90JRr +N6/ddXKXPTGSolaUV9eo4yJOpfmuYUbv41Bj+5rayzKpmWtXMl5/j/PxstQfPovY8nPc/oN5 +l4MGapEk32E0swayWHDwuAZ4YLXCAHgIBIL4+Pje3t6IiAiwpry8/MKFC8nJyYAZcPDAwQN/ +jOOCy18KPMBzlclkAo1gMVu6k2vUR7g8Ip8npJOz0jlsDovDX/5p8POEpLl/C5k/LWgOgT77 +3ojIy/loPiyi5itKFezAN7o598giHq6Pf5QbOatUyYAR64MBoQGdIZ0aey5hZUDxisOkD3dG +vxZU9Ikvf4lT1BZ5mRpFBhMEDWPAgDbNNUJjfpfGju4YEv3ohaDTl5MvRueeC8/d6hC/6XTM +Cf9sl2jGUc+EE+7hREZe92iDOaQ0KtpN5Re0uLYUlZQt+eyHhQv/t3nrGX5BSW1tcVLw7hSX +t1OdFyUE7q4uV1TKxNF7NlO//ilrk12Ky+ms6KCc+Hh2GrGrFSErHXKN0KixBgeP64GHSCTy +8fGprq4Gn7fS0lK5XA40TlFREe5qwcEDBw9ccPmrgUdzczODwRgaGgLLvWl1HT4VvY39EjnP +x/tSXGysXKnatjplJiFq7t9CFzwQNO+unBcJCU6H6AY0iBQo+N7uIUHM4Uri3XU5D2pCHytL +fTA3/cjQYB9a1hypv9HZ0eObcP4CbZlv4bJdcf+2S/pPuGqlK+U7t9hTtW3NKG8MjlkqsChR +k9VpojOZ8+Ql53xiDl+Icg1nukULjniQ1p0K230x2TmS6RiUceR8gF9EcmlFrdmCRX0gMkX2 +GBgeSclibN53dtXWk/RcWWNdUWbIVqLzgizn2Ule3/PZCYI8VqSrfc5JJ0kijc1hM/PY2ZTs +bAq1ua0NHq1YakFqiUC4xeP64FFQUAAWXF1dOzuRGoYUCmXmzJmAeBsaGnDwwMEDf4zjgstf +CjxUKlV+fr7JhBQU7U6tafPRwHp4RD+Yy2UoFYoRveXYHtoMQujc+8MBeMy/O+cFAmnjt/E9 +3V2Y8jWY4FIOWRI1o1swTR78WDftQWbIO01VQjTpA6lTCgiivLrcKW6tB2+Jd8GPW4I/PE1e +GqZa5ZCyLDz7Uu9gO+pxgcaKcY2yB4T0ox8tDlrb0hmVzjziHHLGM9kzlnsujL3JIW7T6QiH +wOxLkbQzntH2bmHUXHnv4Gj1sKkbPXQWqKS2NT6bx+AWlClYSZ4ro47OjDn6j5RLn4lZiXyh +kELOUHMEEr6aJVEKi4u4+aJMOq2+tQWGb7smcX8K8AgMDOzt7a2srASccP78eQ8Pj/b2dhw8 +cPDAH+O44PLXAQ+goAUCgVKphNE4ydE6HsOwwTwklghK1SUGM2x/iPUsIfSVe8MWTg+efzf1 +BQLt0ze81cVFaMdZJJCjvbJWGPh5G40giPz7UM4j0sjHZQwvk8msRwCiH7YYLBYoV045HvWV +r3itE+PnDcFvXuB/EVq4wj56WVZuFGAeVI1b80MgCK2oajYbjAYDVlh12GDOE6tcvCKPXwi/ +EMa+EC09cDFzw/FQO9dEtyimS3D2ofPRQTFZNdU1SC9bNHD0euyBlRBBNq5q7RCI8ot5GfHn +fww+9FzY4cfTPb4uE7FkMi2FJyhUqYoKq4rUFYUlZQwej8JhdvSgKb1IMg4OHlMCj8zMTKw7 +rYuLS2FhIThJjUZTXFyMMQMOHjh44I9xXHD564CHTqfLyMggEokDA0jr5P7Mxg4fDZJOaxgW +iXglKrUFgl1Ocp4jhMy+N/LV6aHz7ia/SGC+Pcs1i5iFeDbQMAf9oF6Z4qJJuFeS8mBLymNN +mY/kRK1u72pHOs1beiBzC1DSI3p9AivyePw3wYU/HyW/uyVqga9kuT9vpWP4Wqmah54LIAyg +yyELlh5rMZiNIyaD3mjQW8yjQRQ19S3hCaTDTuEnvLI8Y0Rn/ZlbT8dss4+xD6Q7R+aeuBR9 +0dMvTyAaHtFfYfeYQCDQ6IsOgkcAeVQ3txTKZbVyRqrHz6En5kTZv5TuvapWJq4o7WLkK4uq +yxprW2tKK/M4PAaLXdtYj7SoBSdrxM73hv0sf0HwCAsLo1AoERERgYGBly5dAuwBFgYHB80A +Lg2G4ZsW8DEG+Dp8awScpF6vv0WTw2iQ1a0To9F4gxf7IQYeIyNl494Cv7W0tDQcPHDBBZdf +AR5YfxZMKbe2toJvo0Ap8AX87q6uwezmbr9KeAgGD1qxgF+iLgXbeDgzn7079MW7U+f/LXLe +PakvEaiLnvUIC4w1W/SIaQLto6JRslnh86qID8n8H9HRnqCHzc5XphkhoKIBmQxYIMQJ0t7T +E5By7gLpv0FFS3Ynvron/v1g5WY35ncXY7bXNVQh5UXhQQOMJLtAiNViAGnAYsGCTiGrUUGn +N3BFckevkOPnwy6FcC9FSvefJ687Eb3HM905nnfCL+PwhdCYNFoLEv8JLtNotpiQxBMIDT4d +YxHMnQMhWSkIotQ0tIkE+aUF1GS/jWGO86Oc56X5rW8tlbbWd4lkRfXdNeDrOZcuEotkvX19 +o0iDJbP8quiOvyB4YAL4FhBCaWlpfX09WOjt7aXT6W1tbY03LWCSoaGhxlsjgDo6Ojpu0eTg +RjXeSunv77/Bi30PA4/W1oJxb4HPbWxsLA4euOCCy68AD0AdWAQmWC4pKcnLywNaoFhVxKXm +qN15HZ4a2AibTHqJQFBchNTrCL7Mfe6+8BfvIs+7P3r+/cmzCZR3n/P3uRTRO4DEWKIBpHB7 +Zz0t5uemzEeZl/7WQ3yykPivjMxdw8NoSVIEI8xojTC4uqH8QsyGS/TPfOXfbI7497HMpSGq +DeczVoQmufYMNlhggwHJrUVrqkMjmB9kUqmqqw2Lzzx2LtLei+oRKz8ZwNxwNnydU/SJiDzn +KO6hC6FuvuH1Dc2oP8SMGEwsEFZwA7KJIzEjiSkIEXX2DItE8hxiQqzv/ojzn4Wcez8tZOdA +o2qkZ7BUo9U2qDIyM5i0/MbGdr1eZ711v1puEXiAL6TgGU6j0W5b8HBxcUlJSQEfOYC7gDrI +ZLKrqyue1YK7WnDwwAWXv4jFAyOQ/Px8qVQK1gD1XFteUXSJo7Jj1Srrewd6iqQSTVn50PCg +27m0F++PePku6vxpUQvuT5xDoL0zM/iSU2hVTQliNjAhyR0mk0HODKxJf0Lgf1955KMtnH9m +hX3SrNXAWPAGwhJGCCl9YRYo80+F77wsXHkh77PN4W84M38IEW87F706jRtqsGD9VSxI8IgF +uqL0+Ziuh8bMHwPDekae0tEz/tD56AsRdNdo5q7zsetPhx+5TLwQRT/tFXc5LKm9uw9zqiDF +UaHR4BH4lyXE1QLIpKtvpFhdyaQyqMlRpLAL0e674gMPlyv4LXUdMrmKTE/PyszMz1VIChTq +ElV3d/dNssdfqjut02Ti7Ozs5uaWkZGRnp6OgwcOHjh44ILLn07s7OxutOMYpjcHBgY4HI5W +q4VhrOkZ3JfdUH44j58lYfLpmUmJZDJFJBPZHwuf/0j0SwTagumR8/8WO4fA+s8T4e7nYpUK +EdogBR6B9WDnpooideJLpUn3sb3v62U/qgh7RUYJQ9NakJRT2GyEoF6AH0YTnM7NOR61LkD2 +46nsRdsjF/nkr/cVrTkVvk5UjAV7mFDwuOrJm80Wg3G0clhFTWNIUuYhlwB770SfeO4ZP9Km +M6E7XOIdI9gnvJI8Q5JVmprR7vUWK8iMGTxQV4vJbGxoa8+XFbFYAi6dJ6RyeaT07NQgUmoC +KYOeEE9MzUjkMhm51DwWjSMUCZuamrAMIBw8fjV4YAI0Tn19Pd6rBQcPHDxwweWOF6vFo6Wl +hclkglcMPCDY0kuq7/aq6G8dVKglwZcvR0TE1DfXJ8XkvfpExPME6oLpYQsfiH6ZwHnt0Rhv +50xhLtukG7TA5n5ID1S4cXBIkbSklT2N4nt3a9qjPUlPcSLWd/V3IoiAZMdaYIsBRjAE7hsa +CckKdkz7OlDx+eGUd/cmfeBbvMKVuto1yq62QYVCAnSNXBGASCaDGQADhLp5+oeGWUKps2f0 +6QuRnhFUl3D6NqeEn8/EnQ5mHr8YY38xjMbJHxhGXCrW6uYQhJYKAZeMBLtYeof7y6orCxRK +gUAq5Mryc0XCXDqTRs8isUgkJptFL8jLk/LEComiQqvFonBvRnDwwGTmzJnZ2dng44eDxxRF +q1W1tHiB1zsJPMCc3t7e+GMZF1zuePDAvrBrNBo2mz00NISiCFLBvIdU1+lRhhTgMOuEHE5B +vhRsxqYpX3sq9DkCbeGDIfOmhbxI4M5/MNHXhSnk5HU1N5jhwX7YqEdnlmTYtedN58feo/J5 +yEh5LC/8jeIiDpL4YUFriZnRlFmsKmlng0fyXrecrwMkq7bFvHaI+nZo0drzKd+Hp5/p6W8z +WyCjxQRdDT1GvSUAPIYs0BA2YVVdW3R8zgmnAEfflPPR3IM+OVucEi+EM84HEo87BwTHZtY0 +dWC7IvVBzCYI6W+LmGvAPwOkHzD0tQ+0NbY3VtbUlJZpSktKSksq1CXVanUl0ly1qrq1rqm7 +s2tEp4Nt/D44eNwkeLi6ujY1NU2qAaurRRB0H6YEpzBeBxpsyhvf6MgF38tv2eTwLZsZG2d/ +3Y6/G3jgggsufx0B3/UlqIzRCGJjAODRcakU7keCSwslYlVRCXgrly1f9HzYswTmgr8Hzp8e +OIcgevm+ZE8HTgFPWq4uhuCBEchsMqHN5nhx5VmPVFD/JnT622DWQ0XJT9HS7Q2mbqSLigke +DdtA2ANQiK6oin8uatdl9lo3/tJ14S86534UJl3hErcikxNjsphNFv212r4iRzMh+bDQMATr +MRAYGBzJFSnO+0Yfd4s6H8E47JW+xT78tG+mawj5xMUIZ584vqzUYMbaw4EzNiJBp+gZmZFU +Gp0ZHjZA/SPm3kFd/8DgMJitf0A30D8yPKQz6Y1IMzubOBMcPH4r8LjGt3sYvguC7gXfwa87 +dLq1JlP2VLacOMAhwIGusYHZrNDrd059QqPxGZPp8SluDCPptFOd2WB4ESCBXj/vRk4m9Ibu +htn8MA4euOCCy62weIBXg8FAIpHi4+NbWlrMZqw9yi/gYTTqpEJBoaIYbCkVl/x3XvRMAnvh +3/0XTvefSxDPuYe8d01cbFg8l8O2wAakzAai0c0NlUpR1As9vEcK3B+oinywmf54dvji5kYZ +lkkDYYdGAMcAHrdA+TML6PYR64Ly19pTPtoW8cJl8dc+eevORG1uaK8yW4zXugQYa2VrtqDZ +skiHFhRSwP/rmttiUyknz/s7BxEPehHXngzbcz72YkTOWd/Uo+eDk8jczr4hbBKzxZoQC6He +ICMWbop5cGxu1xXL0E0XSMfBYyrgAQSC7gF68Fa7WsAhwIF+Q1dLV9fe/v7lt8LV0trqCpCg +sTHuTnK14IILLn8d8GhoaGAwGFgBST6frynX6PX6vqyGDvcyqB82GEekAn6hoghsWaqqXroo +aQaBteBBXzBeIUhmEbI3fRullMpZXFZ7fx+ijw0jJrNhcKg/L2p1Y8oD9RkPcdwfbqH8XZXy +Ty7pwpBxxALrLRDaggVsbIIgA5JIY7LoxGU8jxQ7T+aPTtSlO2PfO8f93lOwMobhpDfoYSsW +YM1rRxU+EqkxVmcM3cCMpcgCAEGa24J5jUZjY2NzbAb9lG/aySDaER/KTueE/a7xZy6nOXjH +X/CNTaGwtPVNRjMCSxBW4MMyNrAaJ2jSD2qZMWGsZEYKu1qsSTFXjisWryve3t6zZs3Cajj8 +hlJQUACmvRUlnnDwuLPBQ5BfHJ8qSiWJpXI1Dh644ILLVORXVC4FylWhUABVNfrd32xWFik5 +1JwSj7wOjxJ4GAYUIRMKiguRUM/62pafPk1/ipA9/8GghdN95iHgwVzzaWRbc6swn68uKUU1 +r8WCVuAokVEFIa/00p4sCJyhjLxrKOcuZuCHheX5yDa2URtA5ZuMEBprWtOidYk56Ere6M5d +vzVy0TnWR+6U5bSCFAum/k1oFTIzmmA7CgPm67IVdlFypdI3KOLoxdizQSyHAOaOs7E7HKLs +A7LOBKcf8AiLSqe2dXShYGMyIYk5BqzDPXRFC5axemNIPCpKKRPGKBRB1orvf8zH4PYvIIaD +x+0GHnJlySV/9rp9xPX7MzfYZW0+QEwm2RmM9/+e4FFYWGh9EOGCCy53MHgMDQ3xeLySkhKr +AQRo+XptVaErp+QAp1pe29PXVSyVqIpKB4cG8vJE338c9wwhe860wAXT/RYQ8mcR6N+8G1Bf +3VhaquIL+GOWCMRa0NfbxI7+rjH1yeqMp+ju9w5lPSqLeS6LdgF1xVxhIQA8YUH8KYiGl5Tl +O4Tv9mT/6MT8cHvoW76cTc6xq1VVCK5YgM43YvEhWONa81RUu9Un0tnVnUTlnvSKPuOd6BJC +OeKWuvVU+CGP1LMhOcddo7yCE4o11SYkyQcyg38wNLrveIy5Zk+WK40fOHjcJHhoNBoevyA8 +imQ03mcw3ELwEAqloZHEwaFHLJZ7fxPwUCqLGSxBVfXmvr7vfxPwKC5WJ6XknLAPWr/t0p4j +4ckZWwASCEVeKlXJzYMHiSrde4q06UD22j1pa3angLFub8bGA2RnL6eq2pfxdFpccMHltwUP +8DhisVjgcQ2PFjId9S6M0NurjovYaXwqm5yVkkwkZvPyOaSsrJVfxM0gpM++P3jh9MD5d+W9 +SGAsWehXUdLQ0trEYDAMBgNsk6Ur5fjJw2Z1cR5he/+9PurJJspDqbFfNbU02yplaNS9geSv +wLABLDEljDNR3/oKlp5M/cKZvMo1+yuflAMtXbWo0QMzchiRMWWPBhq4gogBMivKK3yiEk5f +Cj3vT3L0oew8HbPPMdUpgH7KPeGUW2ROnmwQbe+COl3MKOFgHWOuwIprmFdsieMP4o47BzxI +FM7G7S5v/t+uzq6H2jv+yWLzbwV4+AYkLf3uyJsf7tNUPDM49ACRxLpJ8JBIFAHBKd+vdkjL +XNLe/tVNgodYrDjhEPi/ZUfe/eTkstX+q3Ykrtubfsn/JACPg6ePrdvu5eGTlMvL/3XgUVhU +6h3CXbsnfcN+EoYcNiMVsMe2w7ExydSyMg0OHrjggstvBR5geyyRFmMAAB4mMxJ/0ZPV0Oul +HWrXKYol/h6XgkPCq+uqensHjuygPUmIeeX+iFenhyy4m/0igf7eLB9lQfVA/2i7DdimIWxT +g4Ye8kkTdXpp9FNiz4d6Wffyo+cVCqlXWiQgFAzQuAo0jlRvMmVwYuwjvwkQ/Hgo4b/BijUO +scuSmf7DZiPaNA5G630Zfulhex2LB2QyIZYMk9lgsSCtuHqHBnO4IhevmDNuiU4+1EPnUref +iT3mmXXmcubR8xHRaYymtu5RcIBMY63qfrF3mK2xJFcfWFEzyx/0Mfizg0dhYbHzhfD/+2Tv +q+/s+PBLp2/Xh/qF773kt+vLFS6rN7n6BaWq1eqbBw8mW7h936XX39/++vt7l3zv/uPmaP+I +/dFJK79ccX7F+gupGfQbBY/y8vJ0ImPvIa//W3Lw/z4/+/WaoJPnHc+5bT52JiSNyCwpKf0V +4HHCIejz704s/tr1h02Ra/ekrd9PHDNKpK7Zk/rzrqRVO+JWbA77fo3b0TOhqRnMMo1miuBR +rCrNpkkP2JNtDR0Tx7p9GRvtss5czMkTFOLggQsuuNw8eAB1rFKppFIptoxoZ0RHIy6M3qyG +TnckxsNsNgg5bKlEjpgOTJDjEfoMQtic+2JeezBy/j05LxJobzzpy2eW6w26vLy8srIy2KY8 +iN5somW6FMc915X5LN1jWiP5nvr4J7jJp4aNVzSN/aV7rAkN/4ChvoGhCKKnc8rnJ9L+72zO +5yGidY6R64UqoRHCXCcjkMWAQIF5Spc51hMOXJnBuk95VWN4EtXBPcrBI/6YR/p2x0S780kO +PhnHz4f6hiaVlVeP7ov0gEO8L1hpdTMa3mFGDC7gNgFOAsxkQS0jyEA2RJJ2kIBZHDxuFDyS +0mmZWax1W5xff2/Hmx8e/HS514qtsev3ZYABvpIDJbh6Z8JPWyO/Wun27arzJxxCBQLJjYKH +urRy/xHvwPD0L789+uq7O95dcnrZ6oBVOxOBQl+3Nx3Tvz/vTFi5LerrlRcPHAugMfKuCx55 +fLFQJPULSv5xjcPr7+/75DuEYcBs4LQBHoBzXrk16uvVHtv2+QaFEQvE8hsCj3XbvJZvCNty +OGfTQfLGA+Ak09bsSvl5V7LVKAHwA9wchEC2x/6wITCDxJ0KeOSLVceccsAZTmbomDD2IKaP +rQczeIIiHDxwwQWXXwEev2h5NMCDRqPx+Xxb44MF1bI95Pr2iyq4DzYa9UqxuLhQjW3j7cJ+ +7t6Al++JX/hA9Ny7iS8RaK//I4SSruof6M3ISOfxeDZ+B+QoRWWFHP9PBklPcSOmKaIeGEp9 +jBn2v4o6JYwWPEe1tI1HwoS4Q2DTCFhq7mj2STzpQl62PeJN77wVntQNF6IOV7dVoiygt5iM +QOtDN6rasdiQsb0G9YY8qcIjJPKIW8Rx78z9LnH7HMMcPOKOOHifcfQSiOQjeiN6njDSksUC +YSeLmHPQVnfoqwn6JdAUMcdACLghmb0wVkQeB48pg8f+I0EL39754ZdO362PAPpu04Gs9fvS +gZ611YDI667kn3cmLl/v/+3PF28UPOKSaO/878Rr7+5eglBNPJh/08EsAAk2qtx6lKQfNgYt +W3H+uuARHkNd9N9973/m8M3aMDDPpoMkFDmumA2s/xmdcMUG98BQ4tTBIyqOGRLFtr9IA6cK +8GPL4Wx0/nRszjGjBHHTQSo46MnzOaKCwqmAx+Ug2urdpJ93p1+fOn4xfRC3HspkcZU4eOCC +Cy43Ax7gEZ2QkBAZGSmVStvb20eVM9pTZRQ8kHRanUwoVKJ1PICE++W+ON33BULCwr/FLrg3 +bTaBuvChKI9zWfkiQXJyEoVCwcI8RmcC8+hNrPBj9QlPlVEfo3tMG8p4QhL9nIgfMGZjGQMP +LDwCNSJAJh0MI84ObW31xdSNpzKW7o5+NzB/k1PiqmjqhSF9O7KrCTKbLDfWjB5CqcM4FrUx +Vou9sa01ico+5RF1/FLkiYtRhx2DV2899f3Pe4/Ye6RmcTq6kO5yFow3ENBAKORKp4plfOiH +0WxBo0qua48BT2/wsL3R9jp3Knh4+GVt3hP48864DXakzYeomw5mbzxI2rA/Y80eVMn+QiCp +6/ZmrN+fufUw9UbBo6BAtn5X5M6DYev3JG6wI246QAFHAap8g13GWsRzkWzV5mv3pG20Q9wQ +1wWPLGqBq2fq7qPJu09kbz5EwU57ox0Rm9DmnNOB7t58kHLEPmnq4OEfRqGzxGCBnVvoHczd +djgD3JktRyibD5E3HsjcdJCM/Hgw3TOQw+Aopx7jUSApOeWStXJr1A9bEhCzydTYY/0+4kGH +nMg4Lg4euOCCyw2Bh600NzczGIyysjIej5eZmVlQUNDb24sp6auBR1K0aO5jfrMISa9NS351 +WjIAj9n3R57an1hTU11XV2MN88DAA1PSaj45P+SlZvqjTI8HqpOfrMl8mJW6rW9gBKWgK8AD +6HaDGa3mZdYj2ALDcTSvi5QN++IXH0//MES0yj78S444FQu2MJtGLJD+hi0eKDWg9guDyaI3 +YyEjZrOsRBMUm+boHrbvpPe7n659a/GqrYfdTrqGBEWmVtY0oKcKoAjpvguZTK0lajWVWkKn +q2k5qpwcNY2uptOLaDlFzNy+pk7E0oGevOV6XHSLCoj9ScEjncTffTg8NIrJylXau+Zs3A9U +f9a2Y/QtR7IRL8O+NJQH0jceyN5gl7VhX/o5D+aviPGwd0ndfSQ8NUPAFxY7e9E32aUDfbrt +KDgKZdOBzPX70gEwrEeySklbDhHd/NjXBY98cZGnHzGdJFAUlsYmC484ZiPGgaO0rUeyATWt +RVwhaRsPAE4g7z5O8gvnAaU/dfDwC6XkMMTWH6VydVQif+vBFHAHAHUcd6FFJwnFUtWNZrU0 +NbX29w8LCzQHTqV+uz5q9c6pgcd+4tKfLn/2nQMGHtr6zvnLPbGx4mi89dcNlsGahJxC64/W +dy9G5oK3cPDABZe/LHgAjV9SUiIUChHNq9eXl5ezWCwqlVpTU4MYQ6iN7W6IqwUBD5GoUKnC +9qJkKF5/OngWIXnh3+Ln3x83m0B76d4Yr3Mc8NbwyDCbzdZoNGN2FazDGzzQ3cqM+Lw+bbo6 +9lFe8CMdOQ8wwj4qRaNBLBBa0WMsXcQM6wxwH0APWAfOCemdUl6ncojaco66bk/c6xfo7/rT +l7uF76+qqUQOYRm0wEOwlVpsrA7jk0rG0GZsG6w8KVq5bDSJB1nb3duXm690uBj25coDX685 +duR8lFsY+bRbuMvlaGlROYwZPmC4raws19dPGRFTEpekiohRBEfKAkPFfkH5l/0ozu6syCTj +wPDoEa9nj8HBwxY8iGTR1v1hMck8TDkWFZUFRPB2HAMwkLHlMHXr0Zztx5kb7Ig7jpJ8Q3Nl +CvWvCy4945K+42B4amYB9mOppiIygb/nZNb6/RlbjuQAzgFjo12muz9risGlADzOe6aRKAVj +KcDlVIb8gg8TnOfWw9TtxxibDpDsL9KTifmFRaU3GlwaHJFDZ10RylIgVrpfzszKkZJpsnHJ +JlMHD21lXV1DT1//yPCwLjSGt2Jz1I/XNH2gMJYBqGPef7Z++JkdBh4KTdP9i04BwMjOKwM4 +AaAC+3WPQ5HF20LAwMEDF1z+4uCB5brqdDqBQFBYWGhdD56r4KGUQ6OWFhe3p1X2eJQD8Bgx +DueLBEVjFg8hV/v+S5HPEVIXTAuaf1/sHILohXtj3E6zYaTnmlEkEmE9X8aiOS1YGQ05w08a +/VQT9WGG+zRt5gMFCbNk7FAINulgNI/FjCSpQGazER6wwMNoRVMkiBOC9CazKZUWczZ229nM +pfsi5vtyVl9M/zmU6Dg40oXktkAj0KghQ49koIw6T5AgT5PV04EGhZqQEiAWm5CQsZQYjFkg +zAeD/FTf1JFBETi6RZ1yCb0Yku2aINrvm37IPYLDl5qB9A4w7c8HrljZQCZbxMV6al4fLa8t +m9WWRu6PT28NjCaeOK0WcscOgls8bgA8UjMFm/YEh8XljtOYB08lrN8bv9Eu49BZchpZcpPp +tMcdU7bsC0lME45bv/tw5LaDyVsPER3dc9i8wqmn04oKihxdk9JJ4yeMiGUdPpvpEchh5ip/ +dTqtXFGsUl2BK5xcWUQc+1eUR7MFj+qahu6egcqqxura1r7+YUVRjd3J1B82xf68axL2wMJu +v1jh9crrG+e+uemjLw7Zggd4HRw2AJwISkVqfwEOwcwdVsDAwQMXXG4rAX+w1q8Jvxt4WGM8 +BgYGGAwGVsHDVlpamwUstuActd5eam4z6Uw6oVhUrFSjrDKQmsh5+/mAWQTiwum+C6fFvEJQ +zLo71sGOYkGdC2VlZRwOx2AwoAcBelpvRrV9V30VM/SjKvKj4sAHJNGPlpGe4idsHuzpHE2L +NUMw4loB4KG7wlCBSm9fXwTJ+1z8ijNJSw5EfeCXu8Y1YSMnP3uUKhDYQMFjLJYTGgMPCwzb +2FIQ9rg6B6B7jL1vMlk0lU2RCZQjziGHLhPPxnOPBaQfvRiiKamqzCB7fviJ62efSny8TVRO +b0x6Q2RiVURMXWBYp4d/v7OX4uDR7LNnRlrRKujXC379i4DHxo0bly9ffl3wYHGlFzzTs8ZM +B1Y5fCaORBFoNFP6dn9d8IiKZ/kGZXFypePWHzgZyxfKr9e+ZBLwUBaWJKVyuHnyCeDBEEuL +pg4G8NQql3J5stBo5s2CR22jQlWfkSXMovB7+4Y1FQ2NTZ0XPLN/3BS5ckeyjekDMXSs2Brz +/menX3lj09w3N8/7z5Zx4DHOvgEWjvvQMLsH5m3BwQOXP5G0dg7scCZafYhg+TecXFvfCf4W +sD8QTACu/7aHmIqAv9xr/BneavBobm6m0+ngKQ2PlfyyjJkERoaGm5IrynbSJclCiUaRJ+JJ +82XKIgWbl5MSz/j8jZhZhLT5030WTIuZS5A9T0g4so2o1yExpS0tLTk5Oa2tregRTBA0YIKM +iNI3mPIzLoljXtJmPsK//FgVcSYn7MOqQhlqrTAgVdBNEFqXFBp3qtgptXTXBxPPnov7/kTM +h+dSv3GM3OzofbquuWXUdIHQh8U0ZuX4xZ1iAx4TI0DH3RR4rAuMtVppd/8IX1rsHRh3/FyA +fUDG8WBS8MXwgG+Xu3/5P2lMWHFcfJ1/SJunb6W9g9bhTPXpU/WHj7XuO9K64yDv+zWa6DjY +Wv7jdweP21BWrlz5008//bqS6UfsEyfSyG9eMv3gqfiJNHIzJdMj41gSafFvDh7gJMOiGTcJ +HmASYYGmtLxJo22pa+ikMaVt7b2FqprwWN6GXTHfb4xdsyd13d40ML5c6fPae3vmvL5+Hkod +E8ED0AX2oMYe2mABIw1sAQcPXP5Egmlk8HkGC9j4bS0D2J8MGHnyGutfhPWv42oCzuc3P43f +Hzys3ha1Wp2XlzdaJh0VazotYo1htXWeK6oVVGXxsj183EP8Q3PzuI2tNbWVHWs+S3+WkIiU +TJ8WNY8gBuCxa3Xi4MAwZkXBwjyg0cqfw2ZIh2W5NJdo6UGfaSkPiDynlUc/Lk14sSA7FAnx +QEwRBhjSm2GjaQIjoeCBnGFtc3lw+lGn6GXr7N/+eO2Cdce/jaPF6UxGjBqQHrcwYi4xWqlj +zJEyWlfdfO0K65C1zQqEVuowYaYUCOpt68xlCM9djjvmlXBxs4P9m29nu59qrSwTZ1AKnFxb +nJxrdu2o2rahetumivUbin5cUfjJUsYrbyd9/q2hue66v4W/Dnhcmz2uDR5HHRIzs0W3Hjzi +OLny2x885AoVkyO9SfCQyYvjEhkZWcKi0qbK6jaeoLhUU5fDEKZnckkUqU8w66ctMT9tjf3g +C4e5b2565Y2NGHKAMf+t7Yu/PDbO1YLxBiAQ8PUNC/YAA3ytA8vW749gYXDYAJ6xtmGoOHjg +cluJbajS1VQ2+CRPaiexNWtMuo0t2Nii+DjwAPuCGWzXgA1uFDzAgX5P8Ji6GAwGoVCIBXjY +xGMgr0gVChjqptZ3XiyFe6GOga7k9GQ6hWk0Ilq+u2Nw+4/pzxCi500D4BE5/+785wnJG7+N +6+lB0k7BNvn5+XK5HMuURdwn0LAORoweugEDJ+GsLPmx0qjpRf5/1xAf4SSs7B4tnw6U/IgZ +1pkn+FnQcupI81qwprpZdiFky6dr31r4+XPfH3vtTMxaoSoHs3kA5BiydbdYfvGgmNEOtqOZ +r9ctdw6hPe6Q+u1Iwi5SGwypC2ZpbO1ikXlOn6yJ3rGnXMbjSBTZ6Qymq2fJsePatWuKPv9U +9OF/yf/+T8zc2THPzEh+dIb/ky8q/XwtI/04eEyFPa7bJG7qcjNN4qbQKf7GmsTdkMA30iTu +JsEDqaWmLuMLC5PSuDxBkaCgRKWuotKFuXnyUk2NtrLp25Xu//ng4Ox/r587ZuhAqGPR9s+/ +OxkYmm4FD/D4wh5xACcwqLC1G1sDP7A8F8wGMu6haitgTm9vb1z94fKHiG1g0kTBjHWYKc8K +z9ZwJmxH8LdgtfVNCtjYnwxG4BhLjAMP7C8FMxJifyngR6tDE9t9Yr6YQFlrPRzG+dhpWH06 +2I7Y9wKwpS14YCuv8Vf5Wwlm4hgaGmIymfX19ePAA6vvCUHmHmpDp2sJ3AUPW3QSuaSkuBTb +fWhw5OCmjJmE8PnTAhdOi5xL4D1PSF/5WWx72+iZY8m5iOUE0AISNzGih/V6lAiq5PmM0De0 +6dMLPO8vSbmLnfB8dWHumNrXW+ARywRXC/o/M+KLQW0bhaVC+0uOW06t3On3uiP5PZ+07a1t +WvCG3gIZLVbbxWRIYUENMNeI9vylEYsZjTU1IRGpYC8j1hUGHiqQXP7oKy03r7yh6XIaI5Gc +lxefLjx+kvHpZ3Eznov8x9NBj80IfurpmKcfJz/1PPGRF5iLvwXfIXHwmAp74ODx+4PHWOpQ +SXIaOzGV19k1wBcqKqsa2bnSQlXN8tXuCxftGEcdb3+0j0zJvXUFxHDB5Q+Ua3g9MLqwmhGA +7k5lFmNUAJat9g3b+A2wfqKZwqrx8+Q1KIHobQ8KmME28dw2L8w6FdjGyvZW4IkmyzEawWwp +AGzgMb8ntiN2XOzcwLvW0xh3XbcaPIA0NzfHxcVZVZ6txQPJL4Us3dSGDgAe3UCnG/IlojK1 +BjMhmEy6c4ezZ90VPvd+AB4R8wic5wnE5YtjWpo7YDRTRigUJiYmjoyMQFhfEwjwh9EAD0Gw +ebh3iJNgJ45/RBHykDLmbmHaw1JaoEWPFfk0g82gyaMxUbsFCgJAlCrNpfCzHuTvQhRLziYt +SWH6mSwG7FhDHW0t5eq2Um1rWXVLpba1sqy1srStUt3f3oxWHL32fbGNDhlryWKBzGZYD1uG +OmpIOzfEr15l1huKW3u8kukJOQJtYSnf63L8p0t9/jEz8O9PRj39ctJTz2c9/SxjxsvCf87P +e/Zd/gkXHDymwh44ePxR4IEJj6+QyKtyhRUKZQWXJy1W1y5f7fHqO7vGwGPrgrd3vf3xXiZb +eEtLpuOCy+0JHuMiQoGm9k/OH+easRoAsQG2nzibrakBbADoxfagmDUD231cXpj1KBixYMyA +YQZ2Mhj8gLes0SO2V2T1itqeBjbV70MdVikqKgoMDGQwGGq1uqenx5ZJMEXfQ23sdtfAPXBL +V0tyRjKdwhgaHsIUc6Abb/bfImbfG7DwgbB5dzGfIxC/+b8Yrba6paVJIBCkpqbGxMT09fWZ +xpJpYaScx5Ae7geqXyNm0UPfKk6YURD8sDRtLjPxcCdat9MIm9EQE2gyIoBQWwwSe4o6PmC+ +POd87Hp/3nJv/o9nEzYU1YjAZsMNrbLEWE7gZV5wBDswihEcwvbzzfXyyL10URAVCY/Zc64P +HhAWa4qmAY/CDqyik+xem5PjfNpgMdb2D/OLyqVlFXqDrig7K2Xj5vD5b0T869nEp1/IeuoF ++tMvMV5cKFjwnuidpbknnXDwmAp74ODxx4IHFjoSl5zrG8LQaJs0FY3fr/JY+PZOAB7z39q+ +YNHOZSvsWWzRrW4Shwsufyx4XM3VMi7KwhY8bLU5UO6YlwQbE9NVxgVXbHRIHQcetrtPavHA +NsNCpwB7AHoBwzWSa33LFiRswcP2uNiP1w64uhWCRWJIJEhJBDqdTqVSAYdY8QOjiyFOe/t5 +VVV+dSaX7OnrFRIQyhfyK6pLjaah1AjFgodjXrzLZ8G00Hn3MGYRsha/GhQfn8Rm06VSWXd3 +t0gkam5uNpqHjVA/aslALCUAPIywaaCjnxt7PD/6aYHfzDSXRWGXlmrKEGwwwCbED2Ka1N4B +G5F3jJAFeUEqkkP9LEm2ffiWi/yf7Sk/xFG9DP39otCY5P272xiUAb60I0fQSmF0p2UOxCYM +RcUUXHBrKdGMXdkUwGOsIDridIFMsMnULFNS/HxUXFpHa52kUKwultfWaHoH29vKi5hn7dMX +f5owY1bWjJncl+cL/v0e98P/pX71OeXQrrIc8h8CHmBCMLNthZbbnD1w8PjDwQMTOkuiLK6r +b+pdvtrz1bd3zV+04613Nrz5/trYtCt69eLggcudJ9r6TkAO2XllN2TxGGdGuPYhxm2z3y3L +NtD0avaHceCBOXFso0rOBrGsM1zN4jERPKyBH7/bHR4ZGWGxWFiAh16vLysry8nJAfgBVBWG +HyODQ3UJ6pIdNFlygbyiMFeQKxFJ1aUlZGqWVJ4bcpnyxuPxLxDCFjwQNv9e1guEnPde9k5N +JnV1dYyZU4q12ioI1pngXsRXgdbUMFp0BmgEMsPlEk6cz8uuux7b/tErTvveUEjiLUgFD7MZ +KWOOmDTG0ktGX8H/EfCA9Ei8BRL1OQg4BcAHRUw7mrDOgfxzaMpJXoRfyIo15z9aUh4dB4mK ++4j0juSU3oSE/vCI4cDQckdXnre/eXAQwsqYm0ZbrFizbK/GHuCf2TICjejgYQBN5prqhlq1 +JCbgULLPTmLECSYnor+zrCI9nrLqZ/Ki95n/WcT+9EvSNyszNmyJOmHHpcb39bb+IeBxu9Xx +uC574OBxm4AHUpZEqSZTxT+s8f73e3vfendtzrrn3vtoRXwGEwcPXO54wSIzrdGbrZ0DGIdM +jPHA1o9DBdt4TiyN69rggZX8tYKHbXMBDIQmxR5rjKj1oJ5xfOv5j4vxwK5lUvCwLliv91eL +nZ3dVDqOgUcQk8kca8uCCHiilpSUsNlsLpdbUqIu4AvEl9g1x4X6mhGg7KVySVkRElza0dFV +Wqb2v5zw5ozI5wnx8x8Mn38P5wUC68M5vkWFWtRZg1xyTU19cXHJaFe2seoZgC7MFiRRt6+v +LShy/fKlj69+e37QiTfzsk7193abkJwUowHJTzFbMIeKxYJ1VcFYxPqfBTJjNUgBxGTLsy5E +7fd333D+q0UeH31MPX1RHJrYHJvR6uVXc8Gp/IKjxsmx+tTZ2kP27O27m3ORUE8TmEMPIWkw +JqxgKlZYDLqqGQQcCsmpMYNtSss661X56T7LspznxTm9FRW5o7omryaPkbh5e9JXK7J+WJu2 +93Cyqzc1Mo6UkCiRFPT29/0hfz5/FvCwsgcOHrcPeGCSTszdauez4tMvKnY+hIMHLn81h8vE +AmJYejiWLWIb3mkLHrZZLZOmiowDAPD9edI+R9juVlsExifWY2FEYX0X7IKZXybOMC7+ZNLT +sJYavpmbNsU6HhqNBgAGlh5rNv/SmF6v1+fk5Li6uWakpVRHq/q8tHA/+K6vE4r4RdIi6+5c +tviDOWEzCeFzHwxacA/jRQLzvRe9RMIilC6QQho9PX0yuRK+0reB2DMso+mxUjn5wtGvvHa+ +zAp8jBn1WXMVuGrzCGwcQUufW8Yar5gxA4XZYqUXzGSBVViHkGQWY5EsO3DDV8defSH52KGu +snJZGkl5yaPV4Wzjnv3aPfuqDhyu3XlQu2or8YPFbLu9hu42pEyHyWgxow1nx1k8JgcPLDnX +BM5Do+mqLeZn+3/Bcn4u/dzC6NAtPCFRymIlObimHnHI8wqUpGTm07kiNo9BpUsksq7ubhw8 +psIejz32GA4etxV4AHELTP2dwQOv44HL7eN2mdTrMZVQTLDvzWSnAq6Y9ChXqw1yNZ/O73m7 +pgIeFotFKBQqFArbYEuAH+CJzefzGQyGVCYp4Asklzj1ZySWFpMeMkkk+WoFUjK9u7dLXSJN +Skpf8kbws3f5v/Kgz4L7yC8S6G8/58Fly1BFjVQPNZksYrF04nGtlVH7OjoY4afzAp9rzSXw +Ip8qz4+DLEakiBjW3gQ9KTDRCBLdAWF1OKwkAGFlNsaMFB25NN+3Pwj65gdZHltcpmQmxfPP +2TeePNGwZlvFj+uU36woWLyUMveNoCdm+M6bp06Igy0mA2zoh00jowaUa5EH5u/BcmwtkKlQ +WV2aT0u++FHGgb/H2j0b6bOJy6cK8qSsNIaUkVcslqqk8kKRpFAq4/PzCqSS9jHfEw4e15Y3 +3niD8BvJ3LlzHR0dCbdGwC19/fXXb9HkhYWFhFspO3bsuKHt737kpWX/918AHgvf/OKu6U+O +ezczMxMHD1xwwWWK4KHX69lstu1m9fX1YE12dnZ+fn57ezvieRkcqk1Qq7dTZWkFBRoFj58r +4YsLC5WZ5HSxLFet1mz8LnXmXR5zpnsvuJ/0MoH72uMegT4pWA0xTCRimcFwRc/6X0qFIJU5 +IDWHKAieNyQhFKfdLyM7GkZ04yqam9BipEbUxnEleEAwWiEEyEhtTfLPG90XflgWRypsqAtg +UkgZGXlel4uPnhR+8W3qwjcjZr0U9tSMiH8+Hjdzpu+/nkj76ofBkhIzbO6EDQMwmrxrulZl +c6znC/auwaDLIjHUfEqs0wfJ++6LO/BknM9mqUIgVpSzuHJ5iVaiLZeVqUvLylRqVQ6DrlAV +9Q0O/CEfg98KPIJSCxZvC/k9o49wuX0khshf+fmXADw++N8qnqTsdzgiDh644HKnggcW4DEw +gOjE1tZWoKRIJJJIJGppaTGZTKPaHYaHuO1tjsoaUSVZkON52TPCPyxfwK+sqdDpR8wm+NgO +2sy7Ls2ednnB/ZmzCcJ/Px7g5hLN4QjE4vyeXsTKpJAru7o6x4EHZmAxowq/v70tL2pjWcrf +y9Ifp/tv7ahsgnR680iPqX/YNKC3DCNuIPCfEQmxMNu2eUXAA62xYRoc4bt6np3zesbxc/qe +EUljq2tKRiqZUcaS5J6+mLR4iesTT7j/4x8hjz+e9NTTpOdnZTzzYvTT82VObsZ+QEiWQTTL +F6nVYe1jO0HMSDH30YMbjCM0OrtayY91/SLpxKMJZ55NDt5eqhaXlNfl5iuLtNUlTbXlzXXF +FWU0DitXyB8eGbFA0G0CHphTDxtTr74Ltrx/0anftk3AX1wmDTnDwQMHD1xwubPBo7Kyks/n +A8wQCoUAOcBrW1sbFu8xRgiI+6GX3tx9SQP3wu29HWkZKdwctl6ns27jepI76/5LL93vveBv +6S8RRK/9IzQ9id/e3pGby6FQMxRKeWFhUUND3VW0OTyIujjqpBSy8ztZZxdGHvqO4u1fEB+f +HxOVFxIDBi80tqkYedYZTSakuAd0BcFgP5bxJadfe8/l/Y+kBQKAOOUd3SQ2nylSdrcZJRHE +jJ9W+bzwUui/ZmQ8+Rzlqedpz8wWzF5EfvE94vLNXdpyExLFil6oZTTH5SqnakECWbHgWMgo +lshLxPw4zzXRTi9HOC9IDd/XWF1YX18vlyubGhu6u9uUpUVkDlNSrBwcGf4DPwYTwQMouxVH +47HSu7b5Vjh4/J5ibWWCgwcOHrjgMonGMZkNI4aRId21h25IZxwxDvUP3yanPRXw4PF4Xl5e +TCazqqpqcHDQbEa+7tsGYGAJpQA8Oi8ilUtHTDqRSKBWqGCs8jiq9RPDRfP/5fLC/Y4LHgx5 +icBY8HBAclwejDSUN/X0dmu15dHRMUqlctITwCqBWXQ6SUJi8Ko1mqigASGzk5LdlZbelZDS +FhvXER5T5R7IP+texRLoh0dMltH28tBoOVHEZwN+bFCVH136w8ZPvhCVKip76/P5xCJOQrmc +0dRc3a4p5zucJf5vacqMubQZrzD+/S71k68zl/5E2Xm4msI2DgxCFgirhGqtFjapIAktkBEh +H+SopvKqWnIGOTHUMSZgTcDFFUmhTk3Vpa2tDSqVXKMq5NMY5AwSV8gvKStraWpGfUvXsXh4 +e3uDJ21jY+OtBg8rRVhTt07708G4EMH9fFc4eGtweNQvlsos3uKYDlYecCdvPZduCx7RZPmu +C5ngrW/sosFKlXY0f4ojqcR2weKrWzr7bQ8BJgTrs3JLx50kWA8Ogc2GpYNNOo9PohAcVFYy +eoucQtjgxxY0zio7rwzMsPpE4g4XIti+qw/5M/RLEsVTlWD9RodU8CNYD84BbIPNOellhmZI +wJwcSZX1MsFb68+kgIWJ95YlrsQmB3OCmbHLRE+p33qG2Hqw5U4XonUzcI3/3RIM7id4xdZY +jwW2Aa/Ww1nvG1gJbk5iTiF2o8CPAmUtDh644HKHCVC+I4O67paeJm1LtbJWI64ok1xtlJdJ +y6sVNSKiOCuW+icCj+HhYXVJCTUnh8Xm1NXV6fQ667VD1pKdMNxDb+64pAbgMWAcFgr5ankx +qvoNaCdYWMAt/mCu0/P3H1rwsOvLhOR5D3slRSO6Y2RkuLq6gsViiAukev0VJuWx8hzYD4Oq +1BSXj74K/PoHyaWTbRlpdcGMJu/wVs+L9RedWs65dDq4lRxw9Fu2OsDRdUhvHOUV1PliQDq3 +jRo9SiqqAsLiSsTKejUvxmtNkstHyeeWEGMPt7XLy1nkuLXryJ9/w1z6XcrWjUm+l+JjQ4ls +StcQoiCQumAQ1lQOdaVclRCMCCWhjAJZjMWlWg4rP49FyWOlMEnJ2YkpGYnJKenJYQnhMYlx +NDK47twcGo1FZ8hE+UhnvOuBx+9Zx2MceGC9h8i8UrDGShcJOYXYNgpNE5bDZX1rhzMRLGMN +o61vYcHbL33tBr7Lg/XgFTOq2B4Cq34zzsxy3IdmPRA24dXmsZ4SPFbhB1vG1mN5bWBysIxl +pQEFDZbB/NYeTFZrA7Z+KpcJNgYqHlsYd28xdxXmLsFCx7FrsZ0ZOyuwmVecwLoZOHnrltga +67Gsvx1sGTsf7FaAZXBbJt5bHDxwweUOEJPB1NnYVS7TasXVxZxSGV0hYcildIWMrrQOqXWB +plAw5SpOkfeRwC2L90Wcj/2zgIdVEfYMD+bLFZnZFI6QW9dUbzAhD1IT0owNDCRftZvd2OAn +M/VbOo16kVBULlGgKtpktiBblhRrvljk8dxdXvOnRcwmEOf+3SfMn97c3Mhm00mkLIWiyIT5 +bsbiMSALrEdKcUFG1LjQp1IGf7/C/pOvNdmk0pwYaZCn9mJg49FzzfsPNRw6VGlnV7Fvv2aX +XeqS7wK22OkNJit4jJYUhUZNL2BujbahpLCiRsUj+/1Ac5mbff7NlPBd+VKqnMXyP3TUf/ue +ZPuzjIRYBpeWTMnIYNPae5EKaRYzYjUZzWixXN3kMVZHDM2ohZpb2+WyIqEgT5DH4efy+Bwe +i8EkU8kkahaLy8nLE/EF4FYJ5XJ5Q139KGzdxuCBaTFbfwrmjrFqW0xRYm/ZkoZVaYK3wJqn +PnG21cvWpgDYISbNAhs3G6aXrz2PFR6sDU8xFY81YbduA8DDtlIxODp4F6urY738a18mVgXo +bBDLCjO2gs0D1ttWGbIeHbst2HWBLV9d4W2bID/OdWU9FtZE3no462zYuYErGvcrw8EDF1zu +AOnvGiiVlGmkWkVuEcIb2GDKkMFQWIeYoZAwZRKGTMkqLmaW+Z0IXvPfbbuXHQ93i79NLuSq +4KGzwMMW5FWPDgNqutDD3U09Mr6YnUpWsgW9da3QsBn5ig82G4SHMmua3HnmHlOv0SgWFmjF +SLasCUI0NvKwbWpctSRsJiF27t3kOQT6Kw8GHDsQzOWylYXi/r5B9JB6tMntWL81CBwcGkHD +Jcy9/bSTjsdfW0R0v1yrLefRMyke58qcz9Ru29u8elvNqk3yn1YyvviU/M67Ec/PY51whK9Z +aqO2tkVcXF4oZxDdPycdeyzx6DPRfpu5uVQxm0+KTQZziwX5IqRAvJjF5rDZnO7uHtja9/YG +xWgwdnd3NzY2VlVXV1RUlJaVlZSUlJaWlpWWaTQarVZbV1fX2tra19en1+unMuHtBh6YVrVa +J2zfGqf1rG8BNgBfycfp5XHAMCl4jHvrGvNg2hycFVYVx3aDia0NMM8Rtg3WBQkLq7DaWK57 +mbbTTuy2AKACK9FjezMxkrF2QLBu+RHqW7GumQgekzZ3sL05YGMcPHDB5Q4T/bChra5dI9Yq +uSoZSyljK2VMhYwhl4PBBEMhZyjkTKUCDPAuMuQKlkKao3A/5Ltu8c6tX9jt/upYmNvtbfEo +N/Qm1Hcl1PUgo74ntqYvvnYQjNhaXVKLPqmjxbNYuCNNvI/UHlA+ENM4Et/Um1zTdZzZ48CE +OyC90SgR5pfJEPDQIxmxZlQFGw6sy3iWEP7KXdQ5BO6cBwLdnFMHBwfH6nwBwNCZzViPlVGz +h8GC1uMwQ5oU0slFH4Rs212vKOHmidPSSCQfX5m9o+KntYJ3P6YteCvhpTkRM56JeeLpiH/M +jPn2B+PQ1et/QlBVZT2vQCHITY9z+jjJ7pEou6fi/TbK5ZxCiZzHYJcVq9XFqqKiYsAHbA6H +yWIBKvjV4DFqHDOZAFfodLqhoaEBVMCFg2Wwxmg0Wq7TBPf3AI/e3l7AHuNq2E4FPKz+FFvl +bssk1u/vtj9azRqDwwZbK8c1FCW2+zhHxtXmsXpSbKv8WU0u42a2BQ/s0qxFj62Xf43LxGDg +uvG3mJXDikbY5OMMKeiF6G03mxQ8Jh4LBw9ccLmDpbO1ixrPIgZnx3mnxHglxXqlgIW0QBI5 +PIcSwaBGMqmRLGzQorlgUKM5OXEcdiLP61jgWoQ6Dm1benD314fDLkXf1uBRMNzpUd3kU9Xq +U93uXdXiqW33qOjxrOjyLu/21vZ61gxcru/2qG5xKW27oCk/KFTuYDSHKPv9C/SZVfAAPGw0 +5Ofnq+VI5JtuNB4TaWFyZk/WC3cHzSEwZhOErzwYEoH2qYEgo9lktiAFvnQWC4RFhBjQ2AwL +Yv6A+pUloct+Orv4M21uXntLd2RKTnQKXUjiChwuUj/5IvAfj/s8+s/Axx+PeeKJrMdn0p58 +OfjlhRpy5tVa2kOQpaq6Ll9RLM3PjnX5IvnoM/HHX04P2VaqzgPEweMjcZ4VWm1VVRWPx6PR +aFqtFmDDddrUXlNuiCv+KPCYKNiXcaDmJlowbLUhpuKtX8Ntgx+A+sZiDLC3bBnmv1uCrUV6 +rdEO11aU2GzWA2E4cbV5rDraVk1r6zuxlZi3BQvYGAcemGsG63Rga6O4xmVaQykm7WoNj/VN +sDp3rI4ka7ay7ZZng1i2m1knx67X9li2h8PBAxdc7mBprm0BsOF93N/rZKDXKTACwGuKd5bX +oSDnnR4uu7yuGDu9nHd7Oe/y9DoY7LzNe8sn+3d8cWj7Fwf3fHU0zC3mtr5OpGoGBPfDcA+M +vA6gy30WU7/ePGCE+0yWHgN4hYcgeMDSV9XBz2Tmcws7q3phNOy016DPKygoViqs2r65uUUh +UZ7YHTfvIf85BM5sgmz29OBQfwYGHmj4BAIe0Gi6KmLuwPJV9f09qQeP7HlyVpajs2VouKNn +IJnGS8wWNmu7C4PjKN8s958xw/upx0OffSZt5nOMx5/n/evl9OcX0Pbs13d2XA08Kqoq8+VK +lZKT4LEq8fSr8WfezA7fV1MlKa2pFCqklQ11LR1tykIlAI+W5maMN341eNju+Es9tDG5ncED +qGmrPd8aI2FVf7ZVwrDS/Zg2HPcWoAVMTdt2KwAiUNZaOxSM66J4jbbLtrNhjHG1eeCxNovj +ZgP8gJlBMFWOBXzudSXZ2hysdhJwXbauE9vLtI3xwN4a15HBVmyPaGussA3SGHdo282snRTG +Hcv2cLb3DVwLuKKp3M87ADwOHDiwatUqXDHhcmdLe1NHgm+a7+kgX/tQX4cQMPwcQtL9sgNO +RXoeCpxkHAn0OBQYeCrm0p6ArUsAeBwEY++yY+G3jatlcukzW7rMg/ltvTl1Q0Xdln7LQGWX +oW1ID5sHYYsJHWakRKfZhMZQdgx1ZUukmfRcsaKora9vwGwWSqVlaqRkent7i1AoIpNyChXF +CWG5i2Z4v4yAh2LOg0HhAUz0YFhXOCB6a/orPFbyvL1O6/zTDxc++VRJJA/pdT2Dnepqjbqq +xqSDO/gy5s7dye+8Hf70M3Ezns+cOZvz/ELR3Ldz3lksOHlmuK3tahfX1NzM4uZRsxIi3DZF +OyyOPLuEEn2mt7umvrtNXl7aPtCjqdbS6fSW5hbEDmO5qYpe4+jiJqnj9wQPXK4hEyNdf4Vg +fpap10i5/eX3Bw9ccPkrSFdbT6Jfhu/pQAw8fOyDwUj1y6JGsHMi2dQIzriRHcmmRHIY0fyL ++303Ldn7ZwEPSDEwmNTY4arq8ahodS4cYndpQ2UD7HqghEfGckmRMAx0YCp0wGjQamvYjFwK +nVkgkbAYTD6XK1dKydSMXC6vtqYRfNVXybWL57vPItBfIsjmPBgQFczCwAMaTRLRI5MaRvu/ +IhVAYGiwv0Mj4FRxmFpFcW1zQ4EwXZAbUVxIbaopMdTXF3h6U5Z9R5zxCvmZ+blvfMT54POs +Jcsytm7rKVYgTHQVi0d/X79criITU1NCnZK8t4c4r0kLO9/SWN3W31NYUSYtUqaRMhlMRqm6 +pL6mdmho+CZR4bcVHDz+KMGMKpghZdLslanLDmciFjQyqWsGBw9ccMHlCktAV39SIPHymQDM +3IGBR5xnSrIPMdknY+JI8slM9CGm+Wef3+29Zcm+Pw14FPT1B1cNnNPoHKv7T5XpaL3V7pLh +7AbYiBo4LGN2CevASmtZ4JGB4dqKaiE7N9TXPzw0RFDAr6rT6nWj+RotjfUrFns/S8h6kVAw +/2HfuAgeutpoBQ9EuWPNUNDZAJGYkFgPeLi3s0SlrdJWZEYcibrwaczlHzLizg40ldeycjPX +bOe+/wXz/z4nL/0hdd3m5BPHMyOCDPqr1mezWEzNDU3igkIeh8ejpXOzQykpfikxoSQSicpi +phAz4pOTMkiZLBaTxWRKC8Tt7R2T2i5w8PgLgoc1KsM2mOTXGUzG9bbGwQMXXHC5Knh090d5 +J/icDfJBwQMbkRfjY92TY8C4lBTjjo5LSdhynFsqWIj3Sju/03Pbn8jV0mTqz+3qPFfatbdo +4HyVWaGv9ZLoqA2QGTVF/FIdY2yY0UiNsTBK/cBQtaa8uqpSb9CNRpaiJTqM+s4DG6KfJ2S9 +QOC9+g+f5FgRotBtwMOCdJtF6nRh3haTBUnVBUtdnR2FxbU1mlJOxLZMlzlJbguj/VeWyCha +oTRq79GYH5Zn7NhGdnSkRIVmUzIzciiDQ8NWWhjv7LCYuzq6lXKNgC8T8nh8HpXLzWHQOZkk +ekpqWkpKMjk7m8Vhs9kcoVBYqlb39fbeVr+ZWwQeYEIwc2FhIf43jgsOHrjgcnuBRw8Aj0Rf +x1/AA3W1kMjh9KxQ2sRBDmGAV0oky2O/39Yl+3d+cXDnnwI8LHCbuk1zWT6Y1tFwuaiT1VgW +JBzg1gAdboRHq4mODQgarUxuGYbNQ5AJi/oY1fJYT3ozBBACqR0K67wcs+fcF/sigfHvfwam +peSjW6F1PhA+MOpheAC26MEMZgQ7TJAFrRQK9XT1KJRVlcWFvPDtWQ7PJjo8E+f1PY+WmM/J +Sw4Kzgz05GcmFuTSckVculhAYeUO9A5cDTyQOuZGc1/vSEN9e3l5lbpErShUSuRqqbxEIpbI +JBKlXFFUVKQp0zQ3Nw8MDGC5wHc8eGB1PE6cOJF7dRmXbItl4F5XJp6qTqe77l6TIlBBQcG1 +9wIbTNwLTHXdw01KYlO5ut4ruRRroXhdGXcnp3gzNRrNpL+4W3EnJ72Z172TJ518Fi96R7Xt +CvCY4uekdwLhT+Vm4qY/XP4S4NE7EOWd5OsY7OMQPGrxsA9OukwkBuZkBFCR4Y+OsWViALI+ +K4Thbue36ZM92z4/AMaeZcdvnzoeUVFRvZN9qR9o7G4VVBsbDN359V2ShhZR1XBtN2S+WpYq +xh6QeVyZc9R1ArjCAJtG0IwXYqL0jX96vEQgvf1kNIUqGd0TrQcK5h5B+tqbAafARiNsMBgh +0xDqdent6JUWqIok+UTv7eH7ZoQfeDrhwhopi5kvllKZVLm0QKGQyeQysUwqLyxkc7j9ff3X +ASsLICTziE4H0KKnp7e9s6utraO9vb2zs7Orq6u3p2d4eBhrSXO7CaYQdTbd934TAVqGcD0Z +V14MY5XrCiCliZdw3b0+/vjjiSc5a9asa+81aWYlmOq6h7sa4F1XxkELuEVT2WvcnZzizdy4 +cePE87xFd3LSmzmVOwmEu+ZBW/CY4udkIv5N5WZO/HThgsudJ+CrdPTlZF/HECt4BJ4L9zgQ +sHvZkb3fHN/79SRj15dHzm508zoQvH7xrs2f7gNj59LDIa63dx0PoJoNSNlQwAHQsAUaNEM6 +pPWZyQiZb7AoBTTap9VkQdrFw0px20fzA58kxH7wXFQBXzUpwEAWM2wC9GE0QRYd1gWms0+U +r1KIxRm+O0IO/Sv8+CPJHivU+fxCVTkzj6cqUaPFQMu0Wq1MKsvLyzOZTNc8JWiydbdRBOkf +Ijf6PR23eOAWjz+vxSMzM/PsBJkIhBj/nL2eTHH+cUKj0Sb+Nm03mPQ3jstfUAb7B2N9U3zP +/mLx8HcMC7SPctru6bzTa9JxbrvH5aNh7nYBaz/evvHTXWBs/3x/8IWI2x08MI+JYaymBpLA +AhnAuJFyWBAyAYS4UowWWIfo9K5208qv4v5JcP/kBc/8TF53Q3N7dX17TXVHtbajurqnttEy +ZECOZbGY0GAPrMF8S2e3SKYpLVJnBu2OPPtklNP0RN+lFUWCisrGPJEE8EZjY0N9fb1MJmMy +mROf6lfDj0kxA1tvLbiBf+ZxwWWK4h7MXLPWSbjzlds8xgMQ1Ouvvz5F69Cvs5ht3LjxunvZ +2dld2842d+7cO+BTAZ6hNU19/IIGfkEdt6CGK6rniGrZwkqWoJL5/+y9d1gcSZboe/943333 +ze7szO7M9ExPt9S923dm2o3pVsuilvfegaAstnxRhZEA4YT33pvyFu+99x6EFUhCICFhJCSE +9/AiK6Xs6sIIkGkEdb7z5ZeVGelORkX8MuLEicK7Gfl30/PupOa2pea0JWW3JmW1JmbeTki/ +HZvaFJPcHJ3cEJXQGJHQII2vk8TckkTXiqNrhJHVgohqLlBxNVtYzRJWhAnKwviVoeyKQHZx +ECcvIr7q6bORjfTPGh0eFQVE+1r9BB4+lsERfvFJ7JxEVhbQJJkqrKdwcxwNPTUOauKPEIDq +HqcGOYStc/CYnJ+ahLtOZHO1z80D5JgZhyJ4rEJm5+fG52emwGnGoU4U2HfDzjz+y/9Noak4 +5/nxCkJZmYHBGUH+mQE+We5eGfZe7amFAHEA7IzB88DKuju6XwxkV9SUFBRGBRmF234Z7viJ +OOhKV3tdd8+zmrr6vr5eABvgAy0pKenevXvzK4j3BaPFwpiibx5nQylK2YRS0/DYxiMXR48F +iqVKLmI8YjNq1+3dwp04Xl5eK2kdWluL2e3bt1971N27d5dpZwNotDGCsrZ2DMRm3hXGAW3h +xjZzottYEbdDJY0h4sYgYWMgt96f2+DDvuUZXuMeWuUaVOkcWOHgV27rXWrtUWLplmfhkn/D +sdDEPvu6TbaxVbaBRQb9RjrVNJ10PZVolKbLTNFiJGrSEjCkWBQ5FqefQLiepH8j3ie05N7D +0XVlh+mZWbxlxK92WcAxkFel/7zizvON8LN82dXiZx0KwEPsFRsXmBYbmLqIBiUDTQxLdzb0 +VN+PwxzWBap9nBK47sFjam56AjADIIU5SKFGiPmZGWi5ihYPGXjMTs5B0TnmJmEv0vni5FKd +v2oIMc6DhVUjxaX9mRlPUhKexMc+EUTccw/OMXN6VN04OzMzBjWVvGxsGZgcK2+pS4iPFAfY +8lzVgh0O8wKZjzrbh4aG2+40d3Z2ZGfnRERElJaWgmcZGRlZPkq5fChRhfVF430pq5X1L7UN +j209cs0cMgvKOiYnZ5QGeW9yr/OZd2gphhqtyUjAUCPRlAgMLVqTmaTJiBbF3Op/ProO7xkG +j0WBYf3IBogGf7ezLyq1PkhYHigqCxaVBvMr/Xnlfpxi3/BS75Byr+Ayz8BSj4BiN79CR98i +e59cG6+cmx6ZVm4ZFq5pZo5p123TrtmkGFmlMs2TGWZxDJNY2rVYilEM0TBKVz9Skx6hSYvE +kCVogviqjkCdyNMxiqLeSKTfSKKZxpOM4hk3YuubH60fa1S3PPqPvdb/vtviV7stVwse36l5 +CgOjFcBD4h2XEJwRH5S+iIakAE1mZTobeKruRaEOagLFHyX42wevc/CYk00CPwcPl517pa+m +e18F5slGyU7Pzk/OAggBpdBoR36a776Tvipnm7jimbLKgeiYoQjJMI8/HMQa8Qkrp93gEhjt +dbdmX43bnYMiow5UtZXm5CbkxsRnSzhR4c7cYL+sjMJbt6rz8pPj4+Ok0oi0tLT8/Hy421dJ +C5tHbt994hZYhKXF4PXjcfQ4PCPB0iWrorZLaZk3l+X/Rb1PhjnSGk1mDMAMDDUKIIe8Yukx +WgZJoBZobutTgsdmA4/B4aniik5ebEVYVHVYZENYRG2otCpYXBskqArgl/lxyn1ZVd6hVV4h +Ze7BJe5B+S4BgD0K7LzzbT1zrd2zLV2zzJzSr9unXbdON7ROZlgkMUxTaGZxVJM4snEswTBK +hxkFwANPjcCQJBiymHgt2sgm1cQh3cQx7Zp9qrFdynW7NBO7rBv20unpqXVik/zqdoAQv9pl +8WsVq48O2a1KD2gHS0Pi/SyC5cGD5SgSuEXzXSMXUTcpULFXjB3N5bKKuvo+jPp+DPawtq9d +wDoHDwg6kPGySKzSuVeBSldeds1B4DEyD3RmZn5s4llzhImu5487c03MC/1DOoURD/yCuhxc +e63sesyse0ysHhhaso6eLQvnzs2+jFUGrvfseX91c15uQUpRallZallBek5yfFaEJE0iEgh4 +AZGRkoyMjKysLLDMycm5f//+BgYP2P1sYJ1FF/mlpKCsQ4vx84qPGgnYA3AIoJHbd54oTfQu +ZHhkIi6tmWKSoGWQDEytgBzyitOPo5mnllY9XFf/SCV4vDsBtURR2V3PwNyb7lk2npk23pk2 +ntnW7rk3PbKs3LPMnTKu2Sabu6Sb2CZdv5lk6pB6Dah9krFdwjXrFCPrZEPrJAOrJAPzZLp5 +AsU0Vo8pJVyP1DOM0KVJdA0jtQ0jdQwitJkR2vpSbaoER5NgqRKmVZKdb4G9V66NWxZ0UY8s +G58sU48MFEN44Ny1gtyIkZHn6wc8gB4mhhVU31+VVjU/ihek+ZkD6vgJPLguUql3/BIaJ/VO +iPZPdqC7nN9z+co+1JX9KI3DeG87v/UOHj8P1YHo/KoKEKjJYnZqbm5Y5mU6PzlaHe5rtvM7 +PpXyora+KiqhyMW7w8X3Ht20h2zURaK16ui2aGASDh5PoxqOP4Y+lMagTp/56dHx3iftbe13 +Gyu7aosai4sKCkoq8gvr87MLivIzi4sLi4qKysvLa2tr29rahoeHN3CZr4xcCsvQ8ERMSpOe +cSKWFr2wvgMcArX260eHCqu6eweVqPC2ZGZmFsDedbt0TWYijh67DHL81PRBi8HR45z9Cpta +e5XgseHBIyu/BU9laRA4KKoQTRFjyDwsmYMl87FkEYYo1DeLtPFM06QKLOwTLB3iwF40RYSi +iHAUHo7Cx1EEQPEUAZYixFD4ukyBo3c6xUxCNZU6eabqMkQYighPFeFoYCnGUURYmhionpHE +1C7Fxb/INajYNajENbTc2DHpEMr1v/cw9pw1SIrwevSwbV2Bh7qpeA2HJ4jSAq3CfF85l3pb +BIk9Y+OD0+OC0hbT1Lig9OTwHCeG29mdFy79qAb06kG0p63vOgePOVlADjiEuXxw9NV1tEAn +mZ6em56U8UpfbqHn3mMuxy5XpxXW1TYXRCem3HRus3K5q6V/X1Wr4uTZuJ07Iv/6l7BPPvf4 +2z8b+FLo2wqwx5zM42RybHR8crh/9llP/6PeljuPWtvaHz+429vV/hDc/6NHj/r7+4eGhsbH +xze2Y4YSPKanZ3OK2g2tU0Hdt7CF/+dVXrQWM4lkkhCV1DQ4NKHEhjeU+uYeB+98vH4cnhG/ +EuSQ48BIGahEB/EqHj5+8UGCR1vbfHX1T/r4sWICsNHBAdK2tkVbKqFd/v7z3d0bFTwmp2er +6x9o0/loqhhDFeAAIVClWKpYhgp8LE2IJvD50or7vaNUY15hRWdFQweOyMHQRFi6AE8X4ugi +PA1SHE2AowmxFP4Nu+jegSmPoCyv4PzH/eNmVpEYsgBPE4K9eJoATxVqyg7BUMRgC8082tG/ +wCW0VNNY8PcjZp/u0P9sN13lvFF6tM/jB60bADzihSnBN1kwePhYBQPwEHnGAMZY3Lk0MCU2 +MC0pLMuJ6XZmx7kLey8DVT2g7mHjtd7BQ4YKC4Ojrwo85qBxMdNTsqEwM/fuJOAwZn/fkctO +aLk3wE3JjYpNzPUNrjO8UXL6SuRX21if/c3/oz8GfPxf7E8+CfrT55LTV4Zabs9AfTRzE7LZ +6JAmlJm5kYnZ0cmpmenJuanx6ampKXlvUiV4bGCpaXh80z0HVHx4/ZXWfVh6rCYzycA6Navg +7uTk9LxSVtNgOS/zxs8rafdnlWFpUZqMRNiDdA0KO53qGsWJYut/WafTtYDH3r3z/+t/zf/l +Lz9pQsLP9iLbQTIdnZ8BCbwdSSMQbEjwiE6pI5pEaZABckjwFCkebpegivAUEZYqwNJ5OBI7 +v7S9tfMZgc5Ky2m53ztAMhCiyRIMxBIiWAFOQEqWoCl8j+DMwYkZK6cEG7fMwck5d78UdQIX +gApOn4+j8/FUgewSAsA2WCrAD4GWgeg4xuOzXbRPduhv3WO0ZTdT5bxhWoz344cbATwSRanB +1qxXE7VA4CH0iI4PTl8KPOIC0pLDsh0M3I5vP3N2z8WzKhcv7VNzs/Zc5+Dxlgqu2fG5ySmA +AYNjNU6ODn/7LOqa6cDTkVsdTzzEkfyUjNvZ+eVmFrH7Djn/5g9+v/sT/5NPRJ/9Of6Trcl/ +/IL1yZflNx1mh15MQSeZUw5U2MzgMTU90w6NniiBKq811X04/XhNRoKFc2Z5zUNlLlq5ZOW1 +2nrkoKnxeGB2WtTakGOh06m+eXJK1i9WHawRPIAi4uPz00+YKJCGDn9/iD1guujuhnZdvDiP +9P8CJgFbVtDuwWQy1dXVP6CsEsAu1jGMx9LEAAY0qWJNGsQGOJoYQ5OggZK4ZrbRvc8nRfEV +GrosF5/0p6PTPqF5Gjo8LA2AhAgD9ZtArIKlSvFUCZbKL6npar7bR2IIyYYRzfeellR34Mkc +wDB4Ol+TLsTSpODkOKoQWtIEeIpEg8L95/Ebn+7S/3Sv/hYVxpbdDJXzRqmxADw2QldLkkQR +PATuUa8Bj9Ase6bbkR9Ont59FuiFHy+5WrltBvCYl7V4gO+m1qJKo23bTf7+1b2UzLnZ+Yf9 +vbE5qelVNc8edzfweVEXLoT/z1/FH/0p/pM/Jv/hT8V/+qLi8+8SvtwpvKA6eLsZasOYnJI5 +uyplM4JHRe1DS5dsbWbsoqMnVqHyfqd3lX6nK5K84ns8abWBVQqOHqWqJ0GRI96cPWCnUzwz +MVRY/bhn6IMEj4wMiB/mZX0oADPkWz9gugD4AcTYGEqm4HUGOGR9u5esTUJ5xQSjOBk2iHBQ +I4YMJ+gSdYpETYdLM+LXND1u63xONRGiAGDocwsq2+93D12ziFTXY6OpEohP6AIMUKoUTRTe +dE5+OjjtFZQO+YGQeZ5BmS9GZkSRFRhCGIbIw5PFeBpILMTSAdhIMTQhgBw0lf/dKatP9+hv ++ZGxRYW5ZZcMPGI2CHgkS9PkwCMEBo9lulpkLR5ZDgbuh7cdP7nzJNBzKudcLF02BXjMzc7J +JqatySt1xesG6RLuFVU+fzHS1VX3oKP0QW/n+OxIR21xvD41ftePcb//Y/yWjzP/+k35dz8W +7jqScOJCvpPjeO9DqHtnanrVsdqV4LEhhCcp1zGI1aDEaZCj3kqVB/ud4mhST2Pre3b7Ou1V +Npfa7bpD/c820q9Xos3E3xQUt9g5i2wcxZ4BaRbOGQA81AiSt/Ii0JRIbcNUIkOy6KXv6P+h +h607NzX+LjLV2sED8fHQ1YX4AYiDw0sCWQmubGgJFhRrG8epE4VXSXw1El+dKACqpsfWILIs +7GNqm7ta7j83tYlS1w5RJwmvEsPoJpz61t6G2z3QRr0wNJEL0l/V46nrscjGvMr6R0G8QnVi +uDpBCJ2TEBrKL+l+NhGdUksx4qN0w9F6HBSRhyZwUUSuBpGPIXHRFPF3p20/2a3/+R7GVhXm +VlmLR9pGBA8fy+DlwSMmCCyTk8Iy7Q1dD2w7dHTn8WM7T5xWOetk6bxOcktPT8/yM5u8IXnM +zUzOzk5PTUxODI7cLq9rrLnTdLdVwjZI8VNPDzPIzAl90N9YmyCNv6yRuv1g3JmLAryWhMGM +srRKZoU+e9Y3Pjc3Oj839V7cNib72p9E3+jhEt+i9grp/UmOb1GjjY7Rfvjf9wTX3+5p1602 +s2+k2+lFmWrzGLggAsqRbIQlct78uxtDjcTRY2n6XCeycQPhv1ZYEW9sbV2wpZj4l3r9/8k3 +2M0y1PQwNjYx9bFylHoF5xhaJWozo68SJBpk6dqQA+CfBkl8QtVzzzGLRW6G8ts28n+0Uf/z +WabPOgKPrVvnCQRIv/tu/uDBl9sXBY+hoeXAY2hoQ4JHILvoul1aRHx1ZFJNRFJNVGJNdGJl +dmHLnXt9I2OTdzv7EtLrJHEVUUlVUUk10qRacWJVfHpNR1f/4OhUbf2D+JSayISaxMyW2qbH +TwZGm1sfSuMqpYnV0Qk1MQk1YEUSX15Q2tg3MPx0YLS26VFSRhO4UFQSuFx1dFK1JK6KZhb9 +3QmrLbvpW/bob93D2GAtHulRWStv8YgOAuyRBMDDztBl/7aDR3aeAHp8zxl7S6fNQcFz87PT +M7LZ7YG0t3XWNTy81XIrIgib4fB1+s3vpSE6pQ2pJdnpArpJjO61zABBelxKZmZOXFJKTHp2 +78jo9LxsPtzp1Q6nWYs8jbNW1j7rX+PM9bC0SDU9CerN2j1w9JgzqIAdB4yLtD9WWhXo8K0k +hX9E+/2fBX4cGZ3MK2wI46QyrgW6eMd5BedhqdJL2sKVc6CM92I0SJKjl9z+uYf21Ta9ExfN +F/4TkVsC5PmOvrYWnZZuFV0tKiov/TQW7WpBEsNYIt/VAtbBFmPjjVfW+4QVOvjnT/6saRqa +BnxqZnJyZqlvW6h0n5qamvlpLo65mdmpqenJpb40Z+fmpkHquWlZrfCqlgGfjXPzNq6p3x22 +3LqbsUVF/zO4xePCxgGPvKQCZFQLHMfjteCRHJZlb+gmA49jQI/vOWlv6bBpwANkkrkx2cDc +jvbO6rqOiqoysdflhBt/jL72schHI6cgLi87P4MtqotJqyqoKSmoLC6uysorScvIHxiQTfQz +JZur7t2Dx+zYiz4xs8vz1HrWIv2vBed+ddfx0ArTb7DKsZ7ySRKX6+6fZmqfdkVHpE6UrKmt +I0adKD560eWrH/S+3Kbb0/t8XimL1wqL/OuePB2URuXTDH3b7nY3tfa4+OWq6gov64heix/A +7BhK5KmrPtv2GQCzf7lNJzAs+cXgyPsHj7WIAngAooC7WuZfOZci7SewcymMIrBzKUiAeJOu +2Ln0gxPf8EJ7n7wXozMjkzMjE3OjE3NjEzOzMn6YnJkbHBofGh0fmZwcnp4dm5ydGJ8dm5ga +HZseHB6dgIKLQuEpx6dmx2dm5mRhsodHpsfAGcZnhydmgI5OzID1F8MTI2NT8LSlIOXwxNzI ++Nzo5CzY9nxo1to59btjN7eokLf+SPtMxXDrHuaeCwapMb5ZuUXj62A42xuCR1F6SfDNcF/L +tYHHUaDH95zYNOAhc9CYmx+FhsNO3r97p7i0uSA/l2t3Ssj4Fdvw9yIfrcryotLShuLsguZb +1RW3Gm7VNTXeasrJy09PyxgeGIRG5EKzxczOKqOgy2QzD6cFWaC9ozeYlaxD8XT3jY1KrMPT +I9SJK2/th5ADrJxU8/5+L/Orbbp7DjOCwpNmZ5XuQ6uWx93PK6ruJKZUPBsYzcxtMbNPvaQt +VNUTLxVQBegFbMjOwyZfQcihdwl1MzWjcqmTfwDgUVj4M7pQGGwr36ABgER+EO7GHU4bxC2i +WyQ4emY4eac5+QBNd/VN40hKqhofDU3O1DV3ePtn2rpn2PumO3lnO/pm2PoluXqmZhc1Dk7O +3LnfHx1f6+GX6xuan1V8u/fFWFF5m51LipNnpqNPqqNPupNPhq1riiCioKd/pO/FREZ+q29o +gZN3hrNPqrNPmotPuoNXuq6x+PuT1lt36X++h7lFxWiLiv7eM/qpMd5HNe1/tcvi4yMOR0nh +rtz88sZfZlzbG4JHeXZlCAQeQYibB8814rVdLQ5Gbge2Hdic4DE9Nz8OIerU/Tvt1RVt1SUF +IuczPNPfhpl/EhlIvFNf13DrfmFhRfOdhub7rW2tbUWFBalpqU1NDdNTUEvH9Pz02DxgYuWA +2s0OHrCMjU0VljR5+kU/6h7IKWzD0qQXtYQaJOnr4meCui/qHCZ4x6FroO4DehXv0PVIObZl ++fbK5WR6erqu/n59Y4esAXw+ObOJZhp7UUug/vN3ASx/RZuz94TVN9sJX23TO3TmOl+SNTa2 +XDy39QgebW2KkcGqq3+2Bfz094egYtHWDDi82Gq8Sj448AgWlOkYJ6jr8q7qsq4QwlUJHDVd +PvipzeT6hBa0dbwoLu8gMAWXtMNV9fiXdTkahODIuMoHvcOShEradQmKEK4ONmpzNMlsS4eo +6qYuW7eky/ggNT3WVQLromagrVvyna7nRdXtN+2TNIk8DT32VbBLj6NO4GjostT1wtSp7O9P +W23Zxdi6x/DjXdQtO/WoBpZpErfdqubIbGuAQD46aPubvVYAQkJiKlo73l8J8IbgUV/aGGbP +8Vk7eBw/sfvUzeu26yS3cDic9zbxx/P+yY6WJz23q2ND1SI8/hLj+XW+hDH1pGOwb6y1pWt4 +dPjJ067GxnogY2NjymJ/UYEnzh4fH9/kdhgbmywpu11b3952r887pFCDKF7K2QBDg9w5Lmux +VI5bfL2dAD63j50zEUfljU9MKbPTW3gR45Ndj5/1PYHi0g8OTQqjqnSYkTL30Ui4V+sMyv/v +O8kAObbvp7n7RvU9eX1psx7B473LhwcevHI9oxQ8NIWKEIroRRPjKGIsRaJBFqJ0uFY2sfe7 +n5c1PtRm8DFUIY7MlsbXPBuZ8Q/Jw+mwsCQ+li6EophSpViyFKUX7hGU1fNs/KZLAgbsIvGt +XZJ6Xkyk57fo0AFmQIHW0bLhtGiqFC0LdqpFE6Gp4u9O3/x4D/XPO8nfHCDr6FsKuS4JEndV +fS9Q3QPeUJiS/rd7rX93wObzU84054T3QCBvCB63a++EOwtWBx7hmfZGrgdkPh6Hdxw5qXJG +yBKvk9zyjuN4IF9NUGv2i4HRrs7evq77zXWpTVWi21WSjua8sYEno4OjfX3PAWx0d3e1t98b +HFROrqGUFcmDrqcTst7bW02PbNwyVHWEGuQIJLwYXPGp6QkOnrX/difpq226O/bTvAJin/a/ +UJru7cqzZ8OdD54+lzllhbDzjl/2BiiIIkuOX/b4dgfpmx90r1uGt95ZaRO3Ejw+SPDgluoZ +x2OhkBpSKHIpRaxFEeBpAhRdDEXn0GU7uscODE2HCIvVCGxrp/j+4SleXLUqgYOmCjRpUHx1 +CFqoEixNiqVLcXRew90nFQ2P8PpCLQNxZUN3Q1uvNp2tQQS8AahGAgUco4sA2KAp0LomTYii +SP95zPazHXqn1A3cPJxiJV6xQpfOjtrZWai1vLzxoSs3/ygp/Dd7rf5w0PbXKlZyEGIGCOSv +591CYioGht7VN90bgsed+naWiyJ4LBVADIBHLACPULjF49Dh7cdO/HjS3sp+YmK9zBzxzsFD +KUp5l9Ld/fxBVz+8nld0R4su1iBJ4VYODZL4mGz0xJfbdL/doWdhy2nv6FZa7N1Jb99Ab++A +q1fSwVOOJy667pT1ah09Z1JS1rSq87xr8Kirq7O2tn5b5V5371BP39sfIfvBgUcgu1CLEYmm +C7CyEOhYSAU4mgBQAUpfpEGX4CmcipqOW629WlRWXHJjd98QzVSsTpFgqZF4iBwEcMhTHE2C +o0lRFH4QK+fFyLSJfYylS+Kz4Wn/0HQNIgtHh86MowvhqeI0qXw8jYeFAplKNIj845fN6cYW +ApZ7gsApgnWzqbZw0Vu91dbtKy7eqx38axXL3x+wkW8D+c99NwEYgATrDTzam++Huwm8X00S +B8CD7xaRGJoZH5wGNCE4HSi8Ds0cF5IWH5KSEp7taOx+4LtDx3aedLR2mpxcR/NVKcFjoahe +EyYVtLyLM9958LTm9iOgYEVp57clAOMfdvV3PXoG1g3NhMcuuKvpcE+r+23bZwC5c3yvQ9T3 +rqptUxrq/Uh13f1r5qIjZ+z+voN4Ts2qpfXBas/wrsHjbc1OOz4xnZF/x9gm7ZptWnbhvYm3 +OnTigwOPxrYez8A8DQIHR42QRUoXo+gSDDRviwQn6xZBEQXSuNre55PU6/zyuq7mtm4tcrgm +RaJFlUKdLDSxbEY5KR6ABzT3itDCKX5wYt4nOD0wNO/ZyKypXTSKIsRDaSCeAXiDoUlkhwhA +YiyVf90iMMjXM1boEcmxiRa61VZlTU+9pqodGBqPyKg/z+QBAgHUgRDIHw7abkf7F1TfXz/g +0dnygOMs9rEM87UKBepjFRLuwBd7RoHHBSqSqRBRzwihhzTCO+4m3enQjqM3DCwmJ9dXz/La +wMOZnff1JQ9YQTW6wUpO8FDcxOpFgQR5aliDIsuQvcAOCntB+uHRlzkf5OGDeiEg18G7wAqw +obKSeovy4sXog65+qgH72DnXQ6dsZe4cupfRtmmZVUrjrE3eZCBZOC/H3IY/s6aAwx8EeFTX +P7Z0ycIzEnD0WBw9DqzcdMupbXy8OcFjfHK6pb1vcmrO0T0BpctGk7kYsgBDEqPIQixJgCVz +MJRwdRLL0DrOn12iSeM6+Wc7+2VgiCywCwsFRedrkAUokgAFlhQeisxBk3gEQ3Egv9TwRqSh +eYwfq1iPKUJR+GAvmsJBkbkaZD5IDJZ4MkvfMMjVPUjC847l2UtZjplJwp6ezlXdPyCQkJiK +z085f3TQFsGPjw7ZAfx4W60fbwgeD1ofRvnGhznyw51gFYQ78sPseeFAHXhhMg1/paHQksNx +ETsYud00tRkeHllvGWZt4DE8OmnikwZsKEqte21iol0sqGrf50MBHngTIloKPAA5wKcFioAE +YgGwEfwEZoETAK4AP+Hz9DwdAgeC9DBCg5/gqJWYTimrla5Hz4LCsxkYxhlVS6Eke3R0QmmT +D07WP3hk5t/F0KIBbKApyHyFkZqMBAw1yp9T/uDRW3DX/4DAIyG/ecsJJ2nGLbD+pH/IwzfG +0Mz3+o1AM/NgE4sgU5mamQeYWgQam/kbGvuYmgcZmfgZmvqbWQTDe8EWsEQSv1w3CzI08jU1 +C7x2I8Dwmp/JjQBTK1l6SyRx4HWLIDv7AE6of5TQRcK6GSvxrKvOGRtde89XeePD80zef+2z +kW/9CIoq+8XBY2hgqKm2ub6ysaGyCWijbLmMQgkqmhqrmybG1mMZuOauFrhiXUnlDtfX7/Oh +Vn5vawAPefqCcUIePOTbMQCEkB3j3vx+5EU5quU1H+lT4x03t0EBwA3+e3qwV2kQJXi8XfAY +HJqQxtdrGyQsOl8hPBOQrlFcRELDi8E3+pN+EODR2vFkr3bwH2StBI6s3OK6jpb7fWB7d09H +TXlmRUFCRWFiRVFyRVFSZWFiZVFCRVHiyy2FMi1KroT2ylYKk2QboSW0EayAZUGy7EBovVx2 +CLwuSw+dtqIgsao4qaootro07kF77fzc26lkO7uf61hH/e6A7b/JBsL8h4qVbUj2LwseG0ze +CnhEZtYT7WLvPHiqek0IKmKwhH0YwBKurEFKeDtyOPjeB1vkE8OSVNCCnAScHCzBmeFd8DrY +CPYiG4Miy+DzAIUdM8DNIFcEipy8oPo+fGYk5VIXXSF4wIiyDHiAdRg8wE2CXW/Fb0QZx2N5 +GSgIR6qtp3HWSoMoweNtgcf0zGx+yX1DqxSt182SjKXFgDSG1im5xe3T02sMT7f+wSM8rupP +h+1eumXuu/nxEQdeUs1Gyoe9/UOgAP+dzPv0P/fZ/OOK15uMulWCx1sHD39pKVwFg42I+8cy +4AGwAe6VAIlhxwkYDwCNgO1gC9gO9iIHytfyQMEuGDxAMuSi8DkBXSwKHvCZQRokJdLTsehF +VwIe4FrypLEQPMA5gWXmX3W1AH3z7hUleCwvoKpCqq1eHklpECV4vBXwaG7rc/TJx+nH4/Xj +VxgpFy9LbO+d33h7LS1v6xk8BobGz+hz/vDKHeJPR+w9BYUbNTcC2PjyosfLJz1sB3BLCR7r +CjxA9SpflSM9C4vW1/JumWAvDBLICtIQoQAeCp4bCmNDwF5ADvOLdW0onFne7URhF3x7y4AH +zDkwosi34cDgAQMMAlQNd3qQvbBPyML2FiV4KMFDKesWPPqeDrPE1Th6tCYzEQkRs/KJgTQZ +ieDYUEFVd+/qHA/WLXiAivhv593+bbcl3A6wHe3f2z+0sTMkeORPjjnAjwxwC3NDsobJX5Tg +8S7AA8ED5AMf+fZXAA+4yoY9MGGFE3Q+fg43WSiwhEKLx8I7AZcDJ4EdSuEECuABswTAIeSK +8D2AA+FdCy+6FHjID0uBIUcBPORHtSAkhgi4B/hYedRRgocSPJSyDsFjfGJGGF1Pvh6vyUzC +0KLXPhUyDUBLMvFafFxq88jI5AcNHqCo3HLcEa5APz5i/+aeDx+KDAyNg2/Jjw5BjTy/+dF6 +n3bwatlDCR7vGjzgunsp8JCvvuW1qLZjYWW9PHgkFbTAJ4d3LQUe8M+FV4THnix0fF2Jjwfc +XyPfdiHf1QI7iiyKSfNyPU1K8FCCh1LWLXikZrfoGKXj9OPWjBw/n5w3FgCMiV16SeWDD3TK +y6TClo+POsC15+ennN9FlK11Lt6iYtgC/77bYrXsoQSPXxY84D6IhScE4AFOuLD3ZBnwUOgl +gZ06FoIH7Nu56KASOOXCi67Ex0PhQRR8POC2FPBQi1pvzSN9lOChBA8leLwf8BBIiy9ig9UJ +QqiHZZWdLEs6fjDiAYG4BRa13fvAQggC6vhU1tYB6tzv1H3eXWjxdS6gYN96wmkN7KEED4X/ +4NomiVszeMB9Igu7IbqfDir4fsB191LgAVf0CE7ID25VAA/AFUuFHIFPIr/rtT4eyE9wWsSr +ZH4x51LYlxW+NyV4KMFDKSsHj3tGW3958JAUnlT1PKPhfxEbCk17R4t6K+wBOX4wEzUZMfXN +H0yLASgV4S/9f9ttuYZehg0mt9q618AeSvB4c1EIILY8eMAOFSDrIrChEE0LpITbHODqGD4n +EqFrKfCAPUngFg+wDrc/wAkW+q/Ce+VHsiDri150hcNpYSPAD7IQPMBd7dcJhkEI3CdIJh9b +bG2RS5XgoQSPzQAedyj/edfgk9G2dzJWYuXgcfqq72kN/7NovwNn7K9oc9BkKeYtNX1gadH6 +FhmJ6fXNbX1v67meDIwVVz9Ky+1IzbuXnHM3Kft+Qta9+MzW2PTWmLS26OTWqORWaWKLJKFZ +FNcojG3kRzfwoho4EXUsUV24uC5EUBXErw7gVASwKvzDynxDS72DSjyCiu288y/qiU/h+Kfw +HDWiyNYlz8Y1z8Yjx8knK5BdWF3fNbf5siioAcWpDda++ebuee7skqScdpm178ZlAGu3xaQC +U9+OTL4tTWgRJzQDUwtiG294ZP2/281Byb8LFRAqrAzhVwfyqiBrh1f4hZX5hJR4AWsHFrsF +FLv6Fjv5FDl65zl45Nu55tu45tp6Zjv7ZfEjK5+/2NQRnBRCpgPwkB/foQAeMCHAXhZI44C8 +pwdYh5kEHn6LbIddMZEmBYVRJAjSIInBXiQBch6k3UMh4DninrHoRSMz6xc+9aKdRAjtwH4d +CjihYSoGFwKKuKTCF1pzvHQleCjBY6PK2PhUfHqzuXN2fmz8s3SPyZ53Nb1OT08PoI7XtvRC +LR5qPsfV/LjS4qs4sx9P255WD7iqJ3wb7AHNm3wOHfQvFWZq5psOsX8+OAY0r+weS1oRKCwL +EVaECCr8eRX+3FJfVrlPaJlXSJlnUKkHqNH8ih39ihx88my9cm56ZFu5Z1q4ZNxwTje1zzCx +SzW+mWJgkcK8EccwjaVdiyMbxxAMo3X0o7XokXhqJJYsRRMlV3WEqjpcLF2qdy2eYppAMooi +GEZ5Bufdud+3eTLqg+6BxKymYGFZkLA8RFgeDFubU+obXu4dWuYJrB0IWdsFWNu3wN4Hwoab +HlmmTqn7cSH7sSFaxlHGNsmGVqlM8ySGWaz+9VjqtTiSUbSeAbB2lCYtEkeNwJAkaIJEVZuv +psfDMyKJJglU0ziCQaSzT5ayoFiVgHpZoXsFnjFtYUr57Supo5eKCArOo+C8AY9/WdjLs8zN +vM3iTnb1N5weTgkeSvDYeDI1PZtb3G5sm/5y6hP9ODvPvLqmX7gnAoDHqau+J9R8jaxi9S2k +Ry57aupzVI5dP4cKQIF6Ya34gaVFY2hRZ1ABX/+g+7fvtGISit7kJp8+G4lKqwEaKq0KldaF +SitDxBXBwppAPqgNS/zZ5T5hVd6hFV7BZR5B4Gu6wAmAh2++nXeejWe2lVuWpasMPBzTTezS +jK3TmObJDNMkumkc7Xoc2SiGYBClw4jSpEvxlEhQFWroCXE0Mdk03tAmxcg2xRCAinWKoWWq +wY1kM7u4pIyKDZ9RR8enK+s6+fEVoZKa0IjaUElFsLgyWFgdwC/355b4sSq8Q6u8Qsq9goC1 +i1wDCp18C+198229cm+6ZwNTmzmlmzikmdimXbNON7BKZtxIYZgmAGsD8CAbxugxI7X1I4G1 +cSCfEMUoglCLEUG3SDSyTTWySTG4mWJolWJgnhzCz3wxOKIsNN6dwPFA3u4UgR+6KMFDCR4b +TGobHtt65uHlYnPB4S8w1Cjv0JJ7Hc9+QfA4rQ51tZxUDzyHZx9T9ZHEVRL0XX48aXtaIwgO +kL7KcbVROHrMZS32nmPmX36v/eX3Wl9t04lNLF706kwmU11dffk77Op+wY+q8eEUQcor82ZX +eoeXe7FKPMLKXIOKnQLyXYIKwEe3o1e+vW+urXeOrXfGTY9MK9ccS+dsC+dMM8dMU7uM67Zp +RnYpBlZJ9BvxFJM4qmEcySSGYBytZxSlaxipox+pTZPiqBIcVQoqQQu37Jtu2VYuGaAatXBL +N3dPu+GRRbFI+vG800lVZmVF1sTE8EbNqI2t3cLoOl9WiQ+3yJcL7FzpzSrzDC/xCC11BowR +mO8cWODgDTTfzgdYO9vWK93aHdgKmDrb3CkDmPqabaqhXTLTPBGYmmYRRzGOoxjFEa5D1tY1 +itIxANaO0KJJsVSxJj0SoJ2VR85NVwgOLV0yLNzTzN3TaVZJ3x+kiETc4aHHc3OzytLjrQjR +LjYosgxxhFjYt6IUJXgowWPDyN2OfoAWUJgLxiKxuUA1rWWQpMWI4Uhrep/+AtUZAh7nsCEX +tNgnr/piqQJtpvikmi+W6HHiipeqNhdLjVpJzwtIA5BDnSA8dM7h2x3Ev/4LD8ADUMcy4LF8 +HI/Z2fmcwmaDGxIthljXIEKmIl2mWJcp1TOI0GFEkI2lZBOpHlNKvyYmG4m0GRJNRoQmU6LN +EOroi4Fqv1xKtekSPFhnCPUMhbpMAdVIpCmbpB5Ph1QTmndejKVJcHQJ0yre3ivPxb/I0TfP +0bfQObDYyjtLlR72zZEbn/xAPqlmGMF3v9tWvfEy6vjEND+imGjA19IX6RgCU0t1DYR6TIku +M0KPCawtpV6XEo2lRKZU30RMMBBrMaXA2lpMkQ5D9MrOYmBnLWBSfTGBKSJdE+EZfJKhkMQU +4WgiHLAz2EWDTI2TWRucwcQ+GRjZxa/Q0Tffya/QOajomkvSD+ds/nGQ4uflkJMa9OzZBzyc +ua6ubv3MOCbvsyHv3aEURPLy8gB7rG0gkhI8lLJOBIAEW1KtyYhe0bwnBklUs6T65p5fFjxO +afidRgefxbGOq/rYucccOONw7Irn0Use0HhbSuQy+AGQAyxPqnr9S4UuQw4tGDnWDB5jE9PB +7DwtGl8DmlBegCFLgWLJAhyFj6XyMWQJmiDgSivSS+7p6nOyS9p5kSUoPQ4a4ARVgKcKcFQh +jiKEllQBFloKUSS2tVMCL7oqkFtcVH6fzBRiyUI8DdoFlniqCNSJoH7EUkQE4wgrt0zP8HIv +dpWRY8p+VafPdutv3UX9dDf5NMYsXuzdWl+8wfLq7Px8GK8QTeKiKMDakHmBYsl8HIWHpQjQ +ZIkOXZRTci9EVMY0ldS19lk5xWkQ+WiqCEfl42nAwiKZwcEKpGhSeLiwtKDqAclIkJrXFhFb +jSNxobdAg1Rmc8AhIpzsKNqNaHuffC92pVt4ua6p9PuTFlt2Uf953CA4wC0z2r3v8QfcF7Dm +OB5KUYoSPJSycpmbm+vsGkjJbnP2L9Y1gsJZrLyrAqTUNUzwCi3NK7nf0/emAbqHh4dBoffa +Dy6BGBrVclLd92WLh7rveVwoWDmh5n0BzwLU4RWShdFzPXLR7RI+8NRVH0AgKDLkOAq7j4J7 +1iCKz6IDfzxh9Y/dFMAbCsixNvDoeTJ0zT5Fg8jDgLqJIoaoQKZQVUURYWhCDJVLNhTdbu/P +Kb2jTQ4vrLjf2N4DvrLRZBGWJoC+r2lQYjyEHGI8BXxfC9AUblRSbUR8rVdwQf/IlINHogaB +iwWVIJ2Po/GhxDSQHtSbYqwMRbSNxIfUXb7Yy/x0l/6WPQZbdjM+3UU5jTaJk3i2NZZssHwb +KixFk4C1ga0k+Jd2gwwIiAJDE6DIbBvn5P7BKX9Orr6x8EHfcGx6HYbAB29HztpC6CiKGE3l +6xoKbt3uKavtxJP4qXl32h89pxgBehHIrM3D0QQyzIMOAVfEUoRa+iIck7/9jBUAvE93MYCp +/3WMERTokhXr2df9AVfcHxB4vPkMa0pRgodSfhGpb+mx987D6cfJHDki1xwBA89IxNCivUKK +73Wu3fdjhcNp+aICBDwuQl0tPgh4nMeHH7/ieVIj6CyOfVkzOCa59NRlU0Ag59CBqjpcCDlI +kqOXXP+xiyzfq7KorhY8OrueE40TcFRQCYo1IQzgQ1RAA5WgVIMq0SAJdajs7KK2h30jTEvw +U3DdNubx8/GEjEYckQN9sNMlGJoYow9qOjGGGgFqQ3Vdtk9IXv/QrLl9vDaNn1N8p6tn2Ngi +Aq3HAtWlJtTyL8bSQTUKDpRioZpRqE5mf3PUdMse/U9/pH+qwtgCVYi0M+jrEHg0vTXwCIos +W4mD3wqTLQeio5PLDGFw9cuXWVukCSEBXxMyuBgNW5vANzQT3+16UVx1H0/noEn8AE7e87E5 +d/9MlC4bQCCWJsWAVwNZW4IBjEfipmTefvx0zNw2CkMUMM0i7j8aLKm4r03jYEkc2SWAtUUy +awNTi2VtJsKzWgH/s5e5RYX+6V79T3czvjvGCA50zorzfNLduXnAA55Sdv7VKFRkJKyCwLPM +v+EIDnlZGCXjTYRoFwvPcrvo3qSClivGAvkHAQoHDFn+qRd9cMBLSFx32GtFfi84rbJHSQke +G1si4mrVSZFYesJbCYIBqnUtZpImI5otqel9shbfj1WCh985XOhFba4MPMJegocmBB4whxxX +9SZdBzfGP3bF8wwq8MhZh5NXPH7YbwiQ42/faS2DHGsFj2e61+IwVCmaIkFTRWiqEE0TAdUg +81V1OXr6vNScxt4X056BGSgCC02XaJBDw4R5/cMzPHExmhgON5VoUIUoCk+dwEURw3xCs3ue +TSVlN2JpfA0SX/+GuOluf9O9pzdsIzV0wtEELpYCUEoIdSuAb3zo412gTuZ/fdTi0z2Mz1UM +tgLdLQMPzHWFFg+4mJUvP1cl8MzjbyvZ8pXLMuEcnf1zMFQJmiJGwdaWLa+SeGo67GtW0vrW +ntsdL4wsAOPx0HSRJj00t7St68morWu8mm44hgwZTYMKdYphyKzY1PonA9O+rGwUiYOigEPY +jj6pfQNTGQWtZEOuug4LS+RiqdALwlAFaAq0BEh5Viv08x+NX1obgMdx/aBA5+zYTQQecIwL +OA4nTAKLwgAcv2upKOVvAsBvi2SQwB1L7f3irMvLXPcqYgkcjmyZp170weEJdgFswE6z4Cj5 +eGXzr4KcKEfuKMFjA0tJZaebfy7ROE5VDxS20rcUgCtGk5lENUtOSG8ZHZt6d+BxSt3vuLrP +cUzwCTWfC4uBB/h5ChV8XpN9QtULAo8z9nuP3vjbd5qvRY41t3gQriWhqVwsmYuicNEkLo4M +KclQ6B2UVd/yuK2z39EzGaUThCWGY0lQfYchBnKEBY+fjKRkNxmZizVJoILja9MkVs6JqXmN +j56ORMRW4knhGBIXQ+Kr6YXRTUQlVe33Hg0KYyqMzaO0SSI8iYcnsXFkNo7ExlPC1UnCbyHw +oG3dQ9+qor91F2PLLqjFI/bn4AF/3IFyDw7MuNqRAusEPFz98zFUHqAvDWBtChdL5OEpXAMz +KV9a2vHoeUlNB9NUBFmbxMaSeShiqB4jLKegpatniCUsAjgB7IYhCoiGEZHJNfcfDXj4panr +hGAoHByJD96dqm6IvXti6/2nt1r7fMOyaUZSTaIQB94piYUjc7AkliaVe1Yr/H9+NNyyh/bZ +Hn0EPKAWj57NAh7yNSYyC/zCVwZvfOvg8RYFhnAEJxbCw3a0n/xTIxFTl3nqRR/8ODl84SXg +SyNtJuC/udR0ckpRgscGkKi4In3jADefBEfvbC1GjKquWOYL8TZmXtOP0zVON2QEZVqhuzxP +rVA9Nf4BwCOSsnP5ZP50IhS5FBW4+zD9i2+OHbrsdg7PuqDNO6nmowAe5/EyIIHB46zDvuOW +K6QOoLaekVevsRfqR1u+/Lff/H6RXUZs45sp4Ns5p6g1q7Als6A5p6gJaGt778TUzOzsfNWt +9uTs+oyC5uyipqzC5rSi1rSilrS8+s6u/rn5+Y6ugdzi25kFLZX1j/uHJ2cByTzsycypTs9v +ySpoATVmelFLam5dQcmt/sGR6fn5h31DRZX3MgtvZ4JrFbZkF99OyGjUM5R8e9hs6x79LXsY +W1SYW3Yv3tUijwRwEEX5XLEwzhJSxsJl42rBA5xNoSG6/8XoSr5VlwcPN/+cqMTanFcWyMpv +KihvfdgDufcPDY3nlTQn59RnFrVkFTUBK6UVt6YWNOcWNw0MjU/NzTe0PAavILuotfFu//js +bH3D3bSs6gzoVM15BS3ZBS1phS1pOdVVt1rHZ2bHZucBgeSWtGUV3s4AFypqyS5p4Ugrz2sG +/d+9hlsA4O2BTP1TV8vmAA+4uUOh7wMOtdFw5yeHc/gTXmG2FLhCBxuBLqyIwRawXZhSu0xi +uBsObEdWFDpHkCwKbgY+dplmBBg84G6RRXth5LcvBA/4qRV8ThZ9cDhkuoLIB3tfbaOHcjjt +xgMPpP8OaFb53aX2LvXBCPIP+JsgLA30irFAIXMiPYYLFS7/FTauoWF8Genre8ERZOiQ3Y1u +hHoGplq5ZGCokWoEyZtHHcfSo89jg3cfMbe/uA95769Vp4P/B/yJBOd+tXwyL9QJGXgEHD5v +89dvjx+84HTggu3+K67HVL0uaLIWAQ81rzPoVYPHD+csPzu+iP6f//rs//n/frtw+1dn7G44 +pz8ZGJMz8KxM52ZmJydnphYN7gA2gh1TUzM/3zg9OTM5Mwv4YpGo54BipqFpdMEu6ChZCmjx +fGSWcSPim/1mW3czt+yR6S7Gp7teAx7g8wrJwDCEyM8nLl/FIJOVyx++TM84vAvO4fLlKrgK ++H5UKL3lqzBwcviWlgcPF/+crt4XCuacm5+ZnpmYmp1eNFz8jCwm3vT0zM/tCTBvZn7xtzM3 +NQNeH7A2/Crn5169kbqWJ5fwAV/sNgZ23irz4/0Oci7dROAhH5B8Xm6ONrBRfmYTuOJWmMEN +mUhFIbPBdS6yC8mi8BQtcGL4JPI+HgpgMP/zaOogs8EJlpoYDjkD3LghX+PD9wN7ZSwDHvBT +K9zDwgeHky11A/JZfZm/lRI8Njx4IP13QHVuRi+1d9GyEe4KRA5HVCHxommQbkH5G4D1XTTB +3bvf4+4dRTHwi00s9Q3Jum6bekVXvDb8wMKRuDRZKsfMv/pB78vvdezP73h34HFI1XP/JfdT +GgH/2on67C97D15yOytr34DB4+RV3/P4cGhFzfsMOujoasDjn7tJZLPwVYKHvZlLVs/AwiE5 +c9Pzc5PTc7Oz8wtAYg7CkrnZqempubmfMAPUnmALAiNzcoeBmhWqOmdnZxYwyYvhWaZZ1DcH +b2zZQ9myl/aZiuHWPYwtu6mnMddipZ5tjaUKpRxCs8hcmci8XfDMnnApDdMIUhpPTs0g4LE8 +CctXE3CRDrdyyL5SJ+QvsRA85Ge7WBI8AnI7ewcXWntybm5qanbuJdYpWBtg3szM9OTcPDJ/ +HECL6ZnZn78SBFQAAgJrQ1afU3h5dc1PLuODv4BaPChb9+p/tofxr+P0oCDn7BivJz0PNgN4 +KEQvR2pY8E7lS0v4LSuAh3wrB9xcAO+Ci004Q06++gMsGsFDHjzgae6RNjT5yWdB/jT3T5cv +k5cBD3hFng3gQCLw9uXBY2FU1YUPDm6A7Bi3EvBYeW+LEjw2NnggzkUrAQ+YruVhA9Y/HbZb +LXjIJ3h3gftAndjY/EAozQX4YesiYYlKyddjL2oJ1Ffs+IGhQsihpsc/cNb+2x2kL7fp7Tqo +HxiW+Oz54MpvYxU+Hup+Z1CBKuedVM45ntEIOHrJZfsB8hFVz13HjY9c9riAZ13U4rwJeOw4 +QI9PXnwYyFI+Hh0P+w1uJkck1Kfm3E7Jbk7NbsnMg7Th9uPBMfBRPVddfy8hrT4puyUptyUt +uy0ltzkprzEltbG2sX1qdn54eKqxpTsj905R9f3uZ8OgzO189Dw141Zyegs4W3JOc1p2a0Ja +Y25R0/OhCQA3dx4+yym6m5x9OzWnCZwqLbc5JrlJz0j87RHzrXuon+9lbFW5tkVF/887CCeu +GsUsAA+QkeD254Vfi3ApilQrIKVCsQ+DB9guTx1IYzhQuOJQKMPl5+fqfjoof4m1gYerf44o +tjYlpyU1uxle5hW33n3QPzE7/2JkLLe4GZgrKfd2cm5Les6d5LzGpKzG9IzG9ke9gDKePh0p +r36QnttW09w1MjVT3/QgMfVWSmYreGvJwJ45zalZrfFpdVV17RMz8y8mZ2619qTntcqs3ZgK +rJ13O1xUeVEr+IsfDbeqUD9XMdiyh/H3g5QAf+esOO9N4lyq0B0gX8MiY0CQul4BPOQFnATJ +CXB6hV4G+eayRcFDAU4QWoC3I43V8CGLdmEg/wI4W8pPm4sw9vLgocDhiz74ysFjGUZSgsem +Ag+gCsXvUuAB8p58A4V8Pi+91blw0kbk5DBpILowzdsaO7aUDA2P5+TfMrEMu932qOPhM5ao +HEORXNISvtbvFCCHbJiq2z/30L78Xu+b7brmNpz2+6uO37gq8DglCyB2UZtzWsN/xxm7A5c9 +T6MCv/7XuUOX3I5q+J7ChwPwuADAQxMCj7OY1YHH9v201YJHZ9dz3evxaAIXpcfR0AtXJ4aj +iVygegZCJ7/UkpqHdzqeefllXdUKUyOwrxL4akS2ml6Ad0DGna7+klsdzt5pJKYAo8fVovDM +7aLi0mrvdw/EJFVpkdlXdcM0SKzL2sFMM0nZrfttD57xRGVMk0gckYsigKuwMAQ2UBQpTJUS +/u1Rs627DD7fbfCJiv4nO4h/30e4dt02WeLe2lC0aFeLfMsDXNzBzbzyRa5CxlNo9F4GPOQP +RNKDjdvRfvKXWBt4OAfkA2tr6LE1COFXieEaBBaGxKOaiIMFhU33ntXc6rpuHn1FK/QqkXuV +wLtCDMOTg6MSqu/3vUjKbrxhF6tD5WF0uUSmQBhTdvdhv29Ihrp2KGRqIkudFH5ZK9jZJ7X1 +wdOqhkfgrZGYYiyR88raLLQeC0UJP6Md8MVew627DD/bw/xkFwmlZSpmuaVHuPR1b4oAYgoZ +QL6G1bSKhOtuhAcUwAPkFvnJYeULN/irDexFHEWQnj5wKgQJFMBD3r1T4aLysU+XKkXl8Rvh +nKDIMuScKwEPOP0yDw4eRAkeSvBYLXgo0PKi4IGMn1pht8hKoOK9gcfLFvvBsbr6Dp4oa+DF +WG3DA7eAvKsE0WUd0VJ+pxha1Cl13237DL7cpvvl9zoEmldl9Rqnr10DeFzQYoP1g5c9jmv4 +nwIrF52OqXp/+/2lb/donrjqe16TfVGL+3bBYykB4KF3LVWTIoVia1P5KJoIQ5ECRZHEV/XY +enRRQkrD05FJX3auBpGDpYlRRE4AK//Z0FRc8i0ijaehx0FBAzaFWLIEpcfHEoKcfVMe9U9k +FbVp0vgYMs/AIqLtwfO61scmN6UobS6KJEBT+WgaWEqgIB5QFAuBOpn77THTT1Tof95J37pD +75iaoZO7S5TII5bnfLthcR8P+c86+Y9N+f6URVs84C7sZQyyFHiAlc7Hz+UTKAAGcubXDact +wkPWFsmsLcRQJcDaGkSBuh7byCymtuFRe8+gsU20BpEPxZmncNLzbvc9n/QLzsYDMiRxgPWw +4FgiIIowYWzV06HpUEEhhsTBUYRg6RaY8WRoKjGrnsjgobT5KDIfQwPWFsqszcNT+Xi68KxW +0H/vY366h/HnHZT9F5kSoVcU1ylF4vq0b7N0tSwFHv7SUvBm5VsP5PcivpRLzTkLz2i/A+OP +bAGHIOHT4S4VBfBA+vLg9hP5i0Zm1st/0CEdi0uBB9LdI9+CsRLwQB5kqQcHt7dvMefS+Z87 +pSjBQwkeCFqADKPAEouCB8g8yMalQsqsc/B42XHQ2dfQ1Dkp84isrO20dEq7rCO4SpDIR/yA +nEhp0YcvOH+1TQ/oFYxdWmblm1x0beABeAPqW9HmAv7Zdc4B7Nq5n/jXf50/ftV33wX7oxp+ +J6/6vB/wIBgn46DoUmI8VYKjSDQpQqA4mghFF2NIAh0COzW7rvvZhKF1lDqJY24b3ftiMiGn +GRotS+RpQrE0oUnfZCGqIrAU0VXdcGe/tP6RaXOnJG2GqKjqwd2uF7TrInU9LhT8CoozJsLQ +RWjANjLa0aJJ1IniL49YfvwD4fsTZMZ1Kz7fJ1rkHMm2ys8SDL54shAJkPIcrMj70sM1PpwG +LkWRorX/xShy+PLssSh4wFcB4CF/CcSFD7n0inw8/ApwsllUAH4Ag+PJYk0qFH4NDYyjx2Ma +8Vvv91be6sbp89AkTigvf2By3iMkR12HjaPwNaFQ8xKgWKoUmFqDGBadUtc3OGXhFK9O5Bta +xjzsG8ssvI0lslBEAYYuRlPFwNTA5iDbo+CoZTTpGTx76x7DLTt1D16hBwS6RbAtEyK9H3bc +mp6e+nALavAfXOHEH0v5eMy/8guS9z5V6HGQf62wS8bCwu04OVxh6BPcOoc4HiscBTcygDyp +0MG3cFzA8uAB50bYoxW5gRWCB7j6Mg8+LxvVsrC/CR75Iv9VizT6KcFjk4NHaEyFQu2/KHgg +kLDC4SfrFjxg6e55/qj7ObyemddKMYnRIEkx1Ch4Otcr2pwfT1h9/YPe4TPX+eLssbGJNy/0 +VgQe4iIF8IADiJ286nsGG3JM1VPlvPORqz6nNAL+8vWRv31/CWx/D+DR8aBfxzBWFgxTgJNN +oSJrheDjaAI0XYzSF2qQBQZmwu6+keiUejSRlZDe1NU7TDGLUCODb3YpqAo14SCcVKhOBPgB +fV9TONmFrayIipueqc+Gp/1DM9UJLCwd4g2whCcv0wRf7jRQOUKEo6bH33bU+BLWyMfbJUHk +HsWxiRV6NFTlTk3Jj7WZl2/llu8NhItNZFyh/MgXJH1VUxfsH4IUyEv5Hcknk/9ABlfZjvZb +9BJw+Y8MtFkePBy9c8BTv7I2MAXU7IMFRqOLgLXViRyvwLTBkRk771Q9fWHLvf6iqnZ1Ck+D +CtGdbIo9OOQpNPWbBpVPuS7q6BpIzW1RI7GF8TV9z8YMbghRZB5ibdklwNvhQxelg2tJTmOC +vj9MJdDMOaEeMTz7kuyYgWePN0+RruBaLF/DDo9OwKUWkrUUuiTkd8Efa8jIa+SESH8NUlPD +4AFfdCF4ILlUfugKSHzNKwX5CYjoteAx/6q7XD5jrxA8YGhZ6sGB2IZkK4QLgwlHob5Y+QBG +JXhsbPAA32jIunxb31LgIf+PkA8UqZCjkPTyowyWSvP+wQPIyMjYw67+vieQj6goovTweber +uoKrBOHBc45/30X+apueJtGt98nbmRtxheAhjig+jw0/hQo4qR54UZsnBx4+FzVZRy97bDth +dUzW87L/jMX3+0lQHA80FEDsnYJH39Ph69ZJV/VY4AMZC5GDCEWHFCub2BRUXiiaFEfml9d0 +Nt19SjJgt91/XlF9F0dk4SmRmtSIl/ORQbHQwQc13PQhUSeyA1g5ablNoqiKZ0PTBuZCDEUI +8QY0cxn/1dwuUIULxfAki4jMQOubTiKuRyzfLoJlm53Ke7LKeUPgpo+l/g5vK1MtdYlVBaIM +F5aqE9gYugQHwYMITROjYWuDdWBtqkTfJOLJ87HIxJrrltLRyXkWPwetx9OiRkLmhQwokGGb +RNY1JsGQw/NL7tx/PEA2YNc2ddc1PcZRwmSNVwBOBD+3NtS9haPyaYberq7OUUL3aO7NzEQW +NNJoM4m8C8TCGlZheOnCLglk4DZ8HnnnUrgMvGDAX5gYCT++EDzglpOFpPrFWRfEK2mZ0azy +dwufSr4JQt4DBC6N5Rte5P8ayz9499NBJEoqogsLdgV8UoLHpgWP+VfDyZEOl4XgIe8TIp+X +FAa5KMDzokNaFk3zi4AHLM8Hhnt6Bzw9Ig+fdj5+3vmHfYZffq/75ffa18xDn/a/eFtXqaur +A/+j1/6JevtemNnGAszQYQp/PGV5DArcAcCDc0LNCwogdtkD/LyozTmm6nEKE3JJh/9+wAPI +495BG+cYtC4LSxJjKCI0VQopBfCGBEfhYWhsDRI3mFeRnHdPh8lLKbgXLizBEFg4igAPJRah +KBI05BYClkI0hYemiFAk4Q3HlHBxhV9ocWr+PV0DCYoqwlAEGCofTRGAdVC9oihiHJmrTQ0z +swllh/nEC1wj2Y6xYt+mxrKpqfENXKSAz2oHt3iULhdLFmOoQjRZiqJC0wHjoRYkDprKwdOF +KTl3g/hldDNpWUOPhUMshsjFUwRYYFiq+JW1xWgKH1qS+AG88oyie2SmMDbtNltSjYZj0b+0 +thAFxWYHh4hwZDaBEebgEiTmeMXzXaQsx9QE9gu5nqzNIwr1o3z9Ozw6qYCXCuAKDgQFGkIR +8mO64UBh4P0iGACHFFMYkLLQYQNsWciu4JsRPuEyWLswaJ7C3SJ7EV8R+S0K/UHLP/gyT4T0 +s6zQwUMJHpsBPOQRAo60r7AXaWdTgASkZXsZqJAHYAUyXw/gAUuR6XFrdfUz56x+2EvTJruX +lDX/UncyMzNTVnm3+lY7ge62/5zLSY3gs3jWqas+rwKIhV3UYh9T9Tx0xesiHDJ9leDx/V5K +XNJaZlV7MTjGFeYTGSF69GCiPgsogRlKYIQSmSEERpAe2M4IIYOf+qEkg1ACM4QIaSiRAake +M1SPATbKlrKf0Hb9EBIDHAuWYGMI0SAMOiF0thA4mS4zxNg00M87QML3iuTYSzl22emivu6H +m6FUefZ82MUrXpsaoKcfSKKzAA8QZDaRWSwYmBoYkAQZMJRkCIwZTIRMB1kVNq8uvCKzOUn2 +UsCrIejL3oh+qMzOoT9ZG3ovIQSDEEurwLAg/yiBWwTbJkrgWlacOjo8uDlL9ZW7IihlxTg9 +ufLmDiV4bBLwQAatgC3wdD9LdbUs2qb3xVmXNbRmrB/w6LRXAa9PqHso0H29lDaFpa0YYqil +S8qBU9cPX3S9qMU5/rIBBBpFe1GT9TJkugw8fjxmsRLq+Ho7YfdhRuwS4MHhcLy8vBbb81N8 +qc6HfZERQgk3BFJemJgXLuGFSrihEl6ImBsi4gSLueFCTpiIGy7bBRKEvVoBW8IkYJ0PbwyT +gDQccGCoiBsm4oRCybhhr5ZAofPHSkLTYvxSYzwKsvjdj1o2W9lSV98ijRSIOcHASi+NxoNM +DRmNEwIZjRsu4AADvrIwV2bhl9YOf3UIsHOYmA2ZWswNFQJr/5QsTLYEJw+R8sMSIoJTY3zS +Yr0qS+KHh7o3ecH+5jPyKEVeiHaxqwpPrQSPzQAe83IdLvKNFfKNG8uMatkY4HHPcMtoW+H6 +eU3Pnw/3Pn1hYOJ/+KLHcXV/WeTSl+BxQRZAbFXg8c12ohrO4c69R/eWiEOyVBwPRVvdqy5I +FwAtyhAWZgiLM0XFmYLiLGERpCLZT3FRpghal2khWM8QylS2IvtZnA1tL5YdDlKCXdCBsvTR +0mA3d2cHF3s3N8fkWHZOKq+6LGV4qH9zFi89j2+X5kQUAmtnCovShWEhXi6udk6u9h5eTnnp +AsjUWeLCV6aDrA1bOB1aFsJmzxZBx2YCU0PWlr0OcfFPh0DrcMqCDCGwdltjydTk+LxSlPKL +CvgOAiVST0+P0hQbGzzmFzhmyO+FA+ciXSoKXZBK8Hh30vGg39Ej2cAs9OB5lzOYsEs6vNWC +x9c/EL7ZQTqnZtn1eDkXxxWCx3sQQLn/ttsSZIzPTzl3vhp8pBRvUfFHh2yBWT46ZKecXny1 +sn///l27dh1YVhZWc3D1t7zU1Sl2H6Slpb32KJBGETJ7eg6sQJycnBb+c18rTCZzoU3U1dVf +e+DCo8ANvPaotVly4aMpZTOAB9LJsuhepNED3mXikwZH7AfY8KfDdqsCD3jiRfnum4UzOSrB +Q15yixqPXfZWJ7D2nbGHXD5eRS6FJ4lbCjy+/kHvmx3kPYeZgWFJg0Ojy19i/YDH+OT0F2dd +4bzxt/NuA0PKD/D5pMKWT487AoP87oCtCydfaZDVip2d3TuqLpXgoQQPJXi8CXjM/zwu+mvn +alnziJX3M0ncRgKPqanZ+OSa5MzqqzjbgxfcT2gEX5BFLl0aPHS/2UH6dgeBynS737Gi5sr1 +Ax7QG+l+/tfzbnDe+LuqV2//0GYuZIKiyv942B6Y4jc/WmNuSJSlrlKUogSPjQQesO/xamen +/dNhO0AO8kFslOChQPsrieOxEhFFlahpBzMthLuPmpxUgyKXLgSPr7cTv9lOxOm5Fpc1Xbhw +YdGPnXUOHjB7bDnh+HIqwzMut9o2qbujVWAG3KL42x+tLxkJlEWuUpSilA8RPOblRm0v3NXz +dGiZvcjhyMxZQJvu9i51/kVnEJBPoDB4XAker5WOzidlVbcvaDicuup/Fht85OxPPh5w38qR +syaSqLypqZczpHt5ea3ETWu9gYdCu8fHR+yFKbWbqmwZn5w+o8/5/UFbuK1DSR1KUYpSPmjw +UMqHCx5Aimo7/u9xp9MaPhc12cfOO0Pg8YMuQI4f9tFcvSP7nymGXwCX/te//tXV1fVhgQfM +Hn9X9fr33RawU6XqNeEmcfkob3z4xVlX2Mn2dwdslT0sSlGKUpTgoQSPXxA8wLewKze/7Fan +KLLsKt5333Hrr7fr0Y0Dmlo6lzqkp6dHR0fngwMPIIA0DhPCfrPXClTBoCL+5JhDREb9xs6Q +/KSaj2QNHUD/fNRB6U2qFKUoRQkeSvD4ZcHjZ/XywKhfUGpBUcNrU6alpamrqy81R+e6BQ9Y +mG5JHx2yg+vi3x+w2Y7236heHwCrfrffBqasz085lzc+VP5DlaIUpSjBQwkevzh4+IqL1xDj +QiKR7Nq16/bt2x8ceMzL4uv+8bA93PQB9A8HbfGWEcjMFxtAEvKb/3reDWCV7Ok2Ub/Se5CK +igprmSwMhglPpfRaURg2C86zkqMW/uvBltceBUqMhY/g5eW1/FGLRh4Gp3rt5RZ+jKzkJhca +c22WlH09Dbz2qLi4uIVP944sueiLAzewkqdTMObaLKkEDyV4rEPwgEPcq5uK13Ds06dP/fz8 +QFZPS0ubnp7+gMADyPTMbFpJ2zWvlP8+7fIfKlb/Z6f5F2dczP0zJGm3uvpefHAZDzxOdcsj +d14hziLio0O2v1ax+tUuC7CkOsXfe9iv/GO+Rdm/fz+TyVSCxyYHj7a2xxevOFtZuSrBQylK +8Hif4CFfjsmPdgGlQVlZ2Qf01oAR/nHFC+AH3ADy0UHbz085r60h6P3LrbZuHeuo/9pv89u9 +1vD9/8deqz8ctLvhn65s5XhH4KGc+EMpYWEZO3cageV6vkk4RNu6Ao+gyDI4yCdYsuIq5Qvh +pSYjXpv0PB0ClzioFwJU9ZpQPkbHexNwA19f8ngPAdU3J3gAAaTx5ZdfviPnk/cjdqE5/7XP +BgkI82sVK/BTlFr3oGdgYnJ6YfqR8anyukep2fdSc9oSs9sSM+8mZLXGZTTFpjVFJzdGJTdG +JDZIExrEcbdEsbeEMbcEUXW8yBquuIYtqWaJK8IEVSGCiiBeWTC7PIhVEhBe7Bda6BNS6BVc +5BlQ5Oaf7+qb6+KV7+iRa+eZ7uSdHJlQMzj8E0gMjkw4hOd+fMThD698R6EAHf8/e2cBHsXx +BfAKhbb8WygtlBYpVShWvLhTnAaJO8Tvklw8uYu768Xd3d2Iu7s7cU8IIcH+cxm63V6EEEJy +gX3f+/bbzM7OSm53fvvmzXsnlQGBYMiBgQcmGHgA4eLiAv0F7YAH7G5gZmHAA+vPqSH52kDv +PIekJ6BBEZ3gyeXgEDACGJLOfsECfMmYRCLHArQDs+Vi4EElHT1Dp+5Zz0tci/7+/qUerLix +rQ8w2JfHAXIogx/tikOkB9MMuww8fJ6Q1egeXOHiD7TE3q/Mwbvc1rPEyr3QwqWI7FBgal9o +ZJunb5Ota5WpbZ6hQU5XN05TMU5V0ktR0E8i6cQRtRJkNBKkVKMllWLE5aNFiZE42QhBqXA+ +yVBesTBukSAOoQAWPl9WIf+74iGCsiGixCBLp6zmjn+J4oKALYIcayesNIauyaNTMRImGHhg +goHHooMHvZQb0inD6OVIkvrJ4DE5h+xkAfUvCtpNtnVA6kDnT6GypUwZ72vKI84mMhh6R8g5 +M1SersHZXO87Ax7zLrKysnR0dNNNeFkSAvpu59C8g6zkVSeUKxu6qLYOP3ycmlvr6JNr4ZZl +5ZFh5ZZh5ZJt5pRJdkg1tcswts40tEzXN0/VMUvWME1WN7mvYhSnpB+joBtN0omU1YqUUY+U +Vo2UUooQVwwnEENF5QJFZAJwUoGCEn68BN97wj5cwt6cOG8WPg9GHhd2vLugbKCwfJgwKVRY +LlhQIlhKMTAkqvDpM8qZnOW1Abzx9WnVe0q+7204Vgw8MFlE8DCziHRwcDh7/iL05RgdpS1L +I02BB+QBBC0AeFwSskfwAA0eoGsGW2EPDskkr+IBYrWA7YB1GPx8/Tk1qo5exiQSNMWvFjDl +aUArBJInDjZ+kNUMHAgeERpkXqCCqyOFsAS0DE8MnCdiUQEK2iF7pSPR2mFMVOSSQWV4CHSD +yHVNPjpNgQdMGjXZpepNBPRZ8/uZHBgYuGfPnvk9yUWRjp6hvsFH6JK6pv7gqFI733Q73wIb +7yIbrzwrzxwrt3wLl2yyc4aZQ6aJXa6hVYaeZYqeRaI2GbBHkppRoopBvKJenLxOrJxWtIxW +lAwFPCLFlEJFiWGisqE42UAh6UB+CX9eMd97or5ceC8OIS8OnKeIfIisRrSsZpSsZoSMZoSU +ejj4U0o1lpHH0tEt8NmzcWWr2ODEMqwLwMADk8UCj11/0IGe/Zdtuz6YEB4BYQw8phOYmB4J +Yw5623vKfhAwAEugwQMWAkKAkAARAmZ/A43Afh/040m59aC/3kVvRDVAA20p8ECImwdQsAsC +LWAr2AQbhIlXoPMJkuEFJroFxwJb4RGRk4SnBNZBg2AJKsDzBM2m5DdAfoD+KlQXBddBOVwH +K0jOF6qj0xp4TJbZZHicHOccyXp54NDRj7744fufds4y8SXAiVcey9HREbyZDx8+PKVH/VKF +kO4hF690Re1wolYkSSeColrRRIpGAjaQVAoVUw6WUQsXk/eXUA4RUwZ/BhIUgsTkQ0RJwaKk +IFFisIhsMF42UFAugF/C966oO4+U911h93t4j7ti3twE77sEL25RL268Jxfekx3ngScFaZql +qBvGq+jHqhjEqRrHqZjFCauHXGAj//SnMI4gl58d/OjRIPb+x8ADk0UEj40bj0LkWPnFKrC8 +wy6Igcd0AnthNHgIagZCrw/Yj8N+GfTmVBYDaOiA2d+Qbh1pc/JQCxo80CnhENgAuALKoWEE +ksPP13XgvshACagDtoI6oAJch+ldqGwpkC4gmcAd0UMtyEVBwECGmeBVg8apyl85TEM74AF/ +Wq8UqlclHLJ5pUwmh4SEhFfupaSkBGqOjo6CcxMQEKA18+McJCaxnKTuz8RryyzgxCzoxirg +zibgyC7gyCboyibgzsrvqqofoaQfyY1zMba6zy/uwSLkzirkyiHkzC7kwiHkyk5Zf7lkFXQW +l/c1tku8J+airBemYxTJiXNlx7lz4P9RIbD0uEvwIGpG6lqk6Vql6ttkalikcUo4/3GZuPFP +3MY/BSXkVOOCTbs6mrD3PwYemCyKmJkFA/C4fEMcwAZ46XlGF4GlsJQyBh6vBR4v/hkZQQwC +sC+GvAEV6eghAEBbwQzgAW0jcBiFCkXgOSAtAwUoggYPaGxBdkHXhPYNtCMKwiEQb2YPHvBP +cDlU5cjRaR883lDma1bLdGJpaXn48OGl+6Ju7xly8U4HjMEi4MaG92THu3IBMMB5c+A8OCm0 +4MKGc7+Lc80rbk3ObRSWdG7vH1PUDmEXBptcOSlLD068OyfebUIpXMHCb+/gnto5+IRA9IpO +qi2r7uLFO02AhxtlF9A+zh3syA6OIuxGUAzQtkwhGcRcZDP88Shh45+iW44JbzwiKEFUTwox +68bAAwMPTBZJtLTcAXiw8+hzCsms/N8qCB46xtY0dZI0BR7Q2jAZPJBeHvbRyGgI1e5w7AP6 +QiBbpwQP2KmhnUsR8IDDPWgmgRgwGTwgvVBNSKECD6QyYo2ZDjzgRQGFuW5hOWQeDDzekhQU +FOzZs2fyqM2SEHWTSDa8G6ugOxsgDSEvLiFPCkgANsC5cQi5s+FdWXGOItKeD7pG/CMK+PAO +lfU9hlbxbDhPNgpITFgwJipz4jw4hCjcwiLkFJ1UXveg/x7exT2gsHNwVFTWjUXQlVJfxHmC +PdwpiALax7mz41zZhJ33XSZtOITbdERs8zHxTUdENx3GSRBVEsMAeGAh0N8j8Jg5zTcmCywy +MuYAPPhELC/cYNm45Vcjx1DQxfuFxGDgMZ3AMRR0r42AB4IKcCvs9CFgQKdNdM8Oe20ID2DH +9efUJlMK1XRaZKiFypQBG5wSPBDHUSQSyGTwgBYYuAvingELkaEipD407MAGEdh4b8GjsKoN +XDheO/itHqW/v//SpUtwCGZpibRyyF2CHwfOk2KywLlx4YG6cFKgwoMV58GG92Tlt3Pyyuge +GidpBbDyOboHZAdGl7LwOrPjXTiEQQVoyvBkx3lx4j2Y+Z1k1QLbe8d8g3PZeJ1J6sHt/Y+9 +g3JZeO0mkMOFS9iDHe8JcIWdgiuuXDiPm7zWv56U2HRUZONxkY1HRSngcQQvQVJKDDfr7sTA +gybAA7qmUyl8WaEn9E1XebqayEcT+uUJ16fz2MdkwQSH0wHgISrrsnv/sZ37jyno2YMuvqSi +FgOPGQR24ogBJD6rFm0PQQcQg06kyHMBXSkQ+wPs0+G6gnk0lQUDCvQFBS1Ajw70JFbQJigE +7cMpJIBqjNxS0KeBbgGcMGgfntjkKGdgE2gHlsMdwV6gELQPCqnqU10UPDSogPyJPvq7DR4L +KQA8Tp8+vbRm2sqpBd8l+LLjfNhxHhz/DIhwCHuy4j0ZBdwZ79rpm0Z0Dj4Jiixkwzmy4N2F +ZF2LqzsFCS6M/M6sOE82YQ9WERc2YTdWIU8mHgeclEdReWdZXbeorDurkBuboINnYPbA8FMj +y1hWHms2gYlxHGEXduGXwzqAcG7z2v16WmrTMZHNxwmbjhJeggdROQGzeNASeCABVSYreHGh +Z+jPUJmqJlhHTNCTa2L/iMUVJmY5AB4kzeCNW369cIMFJ6MJuvjhkUcYeMwg6ABimMyjYOAx +syQkJOzZs2cJBVSX1QjhFPVh5Hdl5HOh53dm4Hdm5AXrzgw8dryiLvZuyc2dw8HRZVyCNkw8 +9kwCLgz3LP1Cc1OyaglyHsx8dix8Toy8Lgw8juxCdir6gUVVncUVXWIKXvQ8Dky87gy8zsz8 +tn5hxc3dI87eGQJizqw89iw8Tiy8zkx8jkx8TuyCTrd5nX87I7vxqMiWo4TNx0Q3U4ZaKOCR +GIqBx+KIo6MjFTyjWQJxRUNsFOgoSejKr6yJuNLByoiD/UKGYcRkOrlyDQ/B45PlKziFZJjv +EVZ+sYrWTpLWwOMFKmQ6Ju8zeDS29R3hsCB7L9wvAXwtnj592tLScmlYPFTDREjB8lrBilrB +RO0gea1ABfVAFe1gB/e00oq2kdFn0feL5dV9iGq+Cpr+ChrBclrB2sYhnT0PG1sH7FwSlScK +jayS49Nrex6OVda06psEyyj7yWsHKmkGyWsES2sEyKt7Rcbm9Y08Ka3rcvbMUtWOUtQMVtAM +VNQKkFX1o+dz2npaatNR/KZjwpuQoRZo8cCGWmhD0OCBuGEMj4wh9gr0uC1SeeaaSPTFKUMh +zWNKC0zmJsdPcQHwEJf3AD27mKLhhRssv/2+CwMPTDDwmI0sgHPpZBkdHRUQEPD09KT9+yOh +6Gflkt4/+Lh/cLR38FE3WA6M9A0PP33x/MWLZ6OPH7f1DHb2P+oeGO0ZetQ9NNI5ONo+8HBg +IqnK+NMXPUOPewYfjTyhRBodf/Gkt6+vq7ePUnNwpK9/tH/gURdoc2Cos6d35PHYc0qdF32P +HnYPgfLhvoePCyu7OfAOW09KUwZZjoqhh1oSMfCgbfB48Y8r2ivBY8qa6DYx0zQNyt79dwB4 +CIrbUiazWPnt3n/s6KkLS/FCMPDAwOM9AQ8ooqKiFRNCy/eHoBhg75Mzqfjp02dPxp6Ojz97 +NtVOz549fzE+Pvbs+VOk5OnTsfEnYzMc6Omz50+ePn3y4glYRQqbO0a4cE5bTwDwENl0THTz +McLmI6KbD2M+HksDPKAf+2zAY8qaaIdSbD7LAkhCQsLRk+fNnV/al9raeo2Mgsemieq89ffL +ADxus6oC8LD1S1733eY7TOyTq4FGMjIq0SVPnj2nvCDeRfCAE68Qfaunza8WAGNrzG13GJUd +bUsEJfC059zmdAKHR9GjqHO4sTNncsHAY/bS3t5+eEICAwNp9v6IKwZYumb1Dj/pHx7rHRrr +HRzvGxwfHB4Dbw/w7hh9/KSzd6i7/2Hv8GjPw8cDQ+MDQ6O9/Y96BoaeTjDJ46eUHUfGx0Hl +J89f9PaPdveO9g+O9Q2OTRhDRvsHxnr6R7t6hh89piRgGX3xrP/hWPfgeO/Q44GHYyWVfVx4 +l62npTcdE9x8XGTzMYkfjopsPCJIIColhJl3d7RgnQXNggecvQIL0V73k8FjuppoHw84k2Xe +X4mYQOnv79/35wkY/3DVmnVlNRSkDwvLBmiRlzfFRBXw+G/ceBRsPf0XHuziHlX4yfIVciTF +yTVVVb2kpBz+/e/n5fOJyAFVUFSikaQS8wgeaG8lKrSegwyPjFn6ZEyX2hUdnnTOzyzaVwoZ +7pzZgQr0mFNOopmBOuBo6Zt4toAjIjFA3iXwYCV6LtbzDoSOjo5AINDm/ZFRCxYmBZDUQ0ka +wST1QKJmIEkjUEUnxM49Nb+8tW9kLC6pRFk9RFo1WFYrhKQeIasdqKIbVFTd3DM0nphaTbZO +UNSIMLKKi0+r6Bp8XF7bZmAWJqMUSFIPImoEkjSDZdVAs/6R9wv7Hj4pqe5w9MhU0QknaQTJ +awYqaAZLqQTS89sC8Nh8RHTLUbGNxyU2HRHaeOAuSV41IdQUCyBGg+Ax2WWU6j02g3Pp5Dfe +5Fkt4D32JlksMZks4CtCgCD35Vfrfvpt5y879m/+ZefJv249e/Z8BvAIiYiD4HH4xN2Pl30i +reMM8MPBwWFm8ACfWuu+20SJr/6/VfsOHV++fIWv3+JPi55f8IDWuXmxeEzOV/tWwQOZ5z5z +m68b1XzOUdAntzPDJPqlOKsFsEdHzyK/yoyMjCYnlKEJ8NAM5xLxZeFxZaLMNLG/w+8wMbHF +jZHXkUfMxcY5s6ntYXhcObuQPT2PEwOf6+27dk5eacU1nVrG4RxCjmAXZl4n1ntOXIJ2Krr+ +OaUPiqs6JBV97nDbMPE5MvDaM/FZ+0cUNXYPufik40U9WXgdmfkcmPgcmPmcWHgdmAXsb/HZ +bD0jufkIYdMRsfWH+Lce5+fgJ7rZG8Z463e1N2K9Bq2BB1rBu2LKOB6zrAkFpoGgqox5fcyj +POgaWrVm3ef/oyRbYeAm2Polf7J8hbGV03TgkZOTwyssvX79PrB1284rADxWfLZy1Zq12dnZ +M4MHgI3te4+JyhugE0wsemTFeQcPql8v6NzBzxUGJ4fdDTIzKyW/AV0HlkN7AqiMROWacpAC +ggfY69Q9K8QEAVPCwcaRZwSG8kCfDxxVmYz6yPkjAzFIshhII4gREn058IgwWW1OaQvcBOOE +UNUfHhmDJ0B1UaFJ5chpg0YaW/vQbaLfA+8SeNCI0OZMW1m1iHuEQE6cF8dEHA92vAc7zpOT +ElPUk0XQje2ek4FRROfQo8CYElZBR3YhV5ykW2ltt7isN+s9Bw6cG7sw3MWbXdCTmddGUNIl +r6ytsrGHQPRiF3TlEHT2Cs7vHn6iT45k4bFj4Xdjw7uzCruxCbuz4jw48W7cwp63eZx+PSP9 +3WGhTUf4z9ARlLR0vD0MfBxV74fbDvZ3YT+bhZeZ43igLRjobFZTWjxmrokIDGSExo95+YbC +BEpgYCAAgN/3Hr3FJgiQwzk0m5VfGqCIu0f8ZPAAryklJSUZGZnftu347vvtYMcVn35++jK9 +jIaFlpZWTU3NdODBxYv/Zv2m0IxGQSmNz//3JQy0/t3mXwaHR94x8IChtNApWZEs9tDADukC +9Kon71m9QIUShQMKECdmCR5gK52YC5K9BdSEs87hVthro3EIsZPMDB5IvhjQ3cMwqrAmFUjA +6Kbw0uDjDFAKifIHgQddHzSLzk8HrwtGcUfuCaijah2HbhOeG1Vu36UOHv1Do6o2cTQyOw96 +fRgZGaFLwOO8mBYP1VBuMR9KPHNKKFEvLkAdQm7cOBd2vBsLJcyXKyuPnaN7Qv/QU3ndEGZ+ +B8+A7KC4Mno+Z1CBUhnnRQmWjvNgF/Zix3sxCjhIKvu29o76hhUw8DvLaYV29o+7+WUy8tiy +4dzZRDzYhD05AKjgPdiEPDjw7lx4j1v3XH8+LrH7NL8AQd7Z3iDQU8/LXvV+hNPwQ0Adz7Fe +g9bAA74Z4FtiyjkpVD4eM9SkEvi5hFTGgiHMl4yOjq7fsPnCDeaE0v7te4/9umN/dF7H5l92 +MjBLUoEHpA60HCdYyFgFIn+qqalRectD8LB1dANIY+4eCyOra1r48klS8CO3uPptM9Ur40W/ +JR8PdKo1qhjjiNsGug4shPlcYH2qoRYY1RMJBIrsBft6pBq0ZsAnBT4jcwaPKZPGotfhUcBj +C+pDlvCJKaKKxjPZCgRTxlDldkETxSE2MrpNuAme0nSfJ5hz6ZsLgUBgYmKCMZpOnz4NnlPw +vC8aeKgEsb+0QriBlQl1Yxd2ncii4s4s4s6M8xCWdm/tGPaPKOQVcaqq7zOyjGPD+XAK+Uwk +hnPlwgEC8eDEA/DwZAVNCdpH3y9taB24K+rgEZTb2ftIVNaZDefKQcko5w5ansgFA+o7g/bZ +cZ4Mdy1vs8vo6GoFuOn5O6r5uWjmpUWNj41i/QUtgwfyUoJv4Ckjl76y5szv9rmFVsZkOnMr +nBXrGV0ECIFLWMHWL/mXrX+iwQNNHcrKynBli2SQUmQDgA2AHMhWtNcoAA8+fkPQppQqGTQO +YIOVXxriB9ne621f1wLH8Zjs40HliUH158/XdcA6uhDdvU5OjIJYVNBNocEDSZ6CBp43Bw+0 +5WFya+j0BxA80M8muj7AJCRLwpRJ5ZDbgm4TA48FE09Pz8OHD/Py8sJh0C1btoCvkkU5k+yC +RjW9UGYeOzYBD06cNzvegxXwg7Anu5AXp5AnB56S3I1LyDW3uC01txkn7dI5MK6iHcIt5MmF +82LDU1LLUbK0ICM1OE9mfkd7j8zOwSeSRPe45NqSqh5uEWdKfhacG4zHTjF3UHK7uLEKuvGK +OWhqm3rYGwW46ng6qESFOLQ0lWPdxJIAD3QEsCkjl85cE6bwpjo0ev4LBh7zKxzcvKvWrAvN +aBSVN4ADLnsPn9u3TwCCR2RkJMIV+vr6L9dUVJcR7gPweDERF1FLSwupg3wrAfD46Zdzl29z +Red1/Lpj/8GTlwF+fPnVOjY+sQW4qEUBD3QJFWnMYPF4JXhQyWTwgPsiLiILAB7wctDGCirz +y+SjI5NTqMAD/cWxi95o8pAKPKXpjKIYeMyXkMlktAuWgMCiRbYBvxNr+1h+EQcWXns2IUd2 +ATdWoIIu7ALO7IL2rIK2zIL2JM0wRe0wLpyjjkUcn5gLu6Aju6ATq6Azi6ALi4ALZUXIkUXA +kVXQiU3ASUTOV9c8jgfvJKceoqQdzo5zZhUC6sgq5MAq6MgysRenkB1R3sLaytzfVdfXQdXX +xSAv6/7jsRGsg1gq4PECFRYM/bKdOYAYUhM9ygwtzMgIOFRsau38Cvi02fTjr8iAy8/b998V +VVm3YS8ADzhgAUVXV9fc3PzlH9qGFItH+EuTSHt7u56eHlITeo0C8Ph+yx+AOs5dY/76203+ +iVU//b5/575jCxPKg9bAYwYfj8nggXZ+mD14QO8I+KSgbSOIt8Z04IFsBSszgAfSGnhOgSJH +BAoKXwkeEI2Q9LvIs4/28WAjeaHbRL8ipnvqMfCYFwEv9tWrV3/wX1mkARfK++Hp0+cFxQ16 +Jl6yiiaKShZKKpaKqpaKKpZKKhZQifJmRJKZkrKlDMlUQZlS4aW+rPbPUpWylJe3IMqZKilb +EBXIRHmygoq5kqrVy/rKFooqQM21tM29nE19XdQ9HdViI5xbmiuxroGWwWP9OTWoVJ8qKlax +sBy8WPzjStCVZ67Z2NYHPnzAn+j5LODPn6/rgPdSbGYN9o+Yd2lubj7w59Fr9Nw+cWVHzlw5 +e0Pgmw079x84LicnpzSjqKmpGRkZWVtb29raamhoIOUqGto//LyHjp3454m/Tl28qWcT+NvO +/QJ4sf6BBZpFuMDg4RNTBBRdArpmp5DcnoF/v5iqGrtACdkrHSyb2vqp6oAlWM8pbUF2hzUn +HwvZq7VzENkFPBegPjgHsIIUtnUPwiOCQmQveCB0kBC4CRZSbQUryHU1tvbB1mDj6MsB1IE+ +mcn3BH0m6HKwI9LI8Mjjnv6H6DbhQcGDL2EQNt2dX3LgMfr4SWJuHbgu2jmlJ0+egAf58OHD +VOwB/lz0UGP9/Z0PmqoeNJQ/aKx40FA5sZxYh9pQ2dJI0Qf/KiisoKz8u0SvVFDqN6DrU7QF +bmoobX9QPfKwH+sRaBw83qogARWx4KULY/fYsOXXE3/dTCjt3/jTrmtcVh8vW37x0lWEJQBX +GBoaqqioUJw6/vH0mFJEJGRXfLbyHB3nnmO3bzALmLvHLlu+Qk3HdCEvB8vV8m4Iv1rAzFHL +luJ02syS5v4hGnVWTEhIEBAQQBPIIjqaYoLJwoMHJvMuGRkZWlpaFy9enPJlkpaV98nyFUQd +u9vsQt9MTJgVVTBQek0hkeS/Wrth255jUrpu6zb97p9Y9fW3m67fZl3gK8XA4z2RJQcegDqW +HyTeU/Kl8fMMDAwED9Gnn366iI6mmGCCgcd00t7eXjAh7u7ujo6OKSkpyKasrCzCVAJqTq5j +YGDg+I+gG3lDgc6fADbAO+TAwT9FCJLCBElOTq4pKwsQiKvWrCMoUxLAbdl2UF7T9HXBQ1RU +9Ot132/6ecfv+y8cPse0fe+xH37dufAvLgw8MPCgTaFZ59IpBbydENMH1fx08GL5YBYCnsTJ +zb5yr9OnT0/eCyDQK3ec7lXwSoGziREBFzubvSZ/wXFycr5yr8kz/dE3k4mJCXuuMfCA0tTU +BNDC19cXQQJ7pTCSgA54QK5d+pvpJgfzLQ48p5QYj7yGONldJ8ZDN9ZTL9ZeI8iQaG9EdDAi +ORjLOxgrOJooOJoqOtlr+QeYJwVaJAdZJnsYR5qruZiruapK6RNF1IiiaiRRNRNV+0jnzCiX +rGjXLD1Fi9MTcu3KdYgo2traAE7Kyspmc+aysrLgx0xSVGtq7+/oGwWaU1j5ww9bpqw8ODyy +5ded33y78au1m4VFJcAD4oiSyMhI8KB5hkSflnXaI+3FYn5/i2QQnVEcVeBl8Aifv3QdPkSf +/29VXd0ixErCwAMDDww83lzAa2f16tVUE9aQx3zmbxB+MUWgBpZuk1MQvvL7BbxtXkz4FSMu +yu3dQ1uvKv18kSQpO9OOU5puQDnY6zqXwgVWeaBgBTby7SkiUFAC1qk+jiZHLppSJneIm/9S +gQ3OIJNxBbmZWyYEe67fW/AAnamhoSHo5a9evAGePrBk/JuNl0lUjlfbTiEUUAdQB5VwR9Vw +J7UIZ41IF80oV60oV+1oN50YBDw89eO8DOK8DeN9jO77Gt/3NUnwM03wN0sMICch4BFslRJs +nRJikxpqmxZmnx7ukB7hmBHhlImAR7Rbdox7dqxHTpRbpr2ht4ORj56SmZKUlpGadaJ/QVJA +YVJgIcAhSCNT5l/LyMj4448/1DT1IHgA3fzDD9P9KxMyixhZuWa4M5EVvR8QEj8QS7zjWAZW +tqhmTlnt/v37Nh4R1bV1i/Lvw8ADAw8MPOYFPObWD06ZION18xQj855eoAJOzsHlj2peJDJv +Cz0FbL5k/Tm1N2lwzjf8HRZRUVEaTCr05lJWVga+5clkMui7zcT9yBL+5pL+uiJOBA5FFQEz +XREHK9kga7lgG2KwDSnEVj50scAjzjM3zis33jvvvk/efd/8BL8CBDxCXBJMNW1U5XR4uQXB +T1dISAhcCxpC+PkFdA1NEfBgYmGH3xRzEMesdgp4EBK5PCrBcr1i+nQ1nz5btAjDGHhg4EGb +UtnQtfKIPJEc9Z6AB4zkj4TQnyHf38zg8WIiRs0cwlYjh4YTt2FAfgw8MFkUGRsbc3d3l5OT +A//oW1cYOW8J4JjllPnICHiYSwVYSAdYSgdayQTRPngkBxWlBBelhhSnhpakh5d624Uaa1r5 +OIRnRZdnxVS4WQX+/vsOiBw3bzMcOPgnJzfvdG4erxSlyAYEPFbLpYIVGvz/YuCBgQcmtAAe +VMF70QFkSmrbpzRfwPmMk8FjugOBdmZGl8nAg8SyowKPyaNCs79euBcGHphQCZLITF/AQ1/Q +k+eOmAyHjrGwt7GIj4mojynB11TM790Aj/SI0ozIssyocggeu3fuDY9JAtQBluu/+46RkXHr +tm0bNmyY220U8K2G4HHVpmSLaiZYaR8ao7X/dUVFxSunAWLggYEHJosCHjDJ4JQ5x2E1JEki +Ah4weDU6uQ86fyg6nTFaYAWqOL1UWyEnpOQ3oIdj0A1SHRemMECGjWD6IWQvDDwweTHhFBoc +HKyqqnrh7F+XL1xX4bbS4/eA4GEg5GWI83rnwUNRSouBkRWaO7Zv3+VhG+xhF6CmoHPzxm3w +I3/dsTOjxBZIHUDXkNJWSCWDlc0qGQ29S2/CHQYeGHgsvLxvQy0w6x9ieUDCUwMYCEksQ0ey +ffHPsAgcE0Fn8ppMMmhTBo+K33R0MfNgCnrrRUE72BqS4hmdKnE6goIeOxA5kB0x8Hhvpays +zNDQ8PL5a0BZr/MKMygqcVrq8Lrr8rm/V+CRElqw4ftNxZWNgDpUNXRZ6bnzEqrzE6sLkmoK +k2oyYoqLUuqKU+tK0upL0+u1tbXj4+OHh4enu6v9j568pA4xynKFZDJQuC4bVr/kfiQYeGDg +sfDy3jqXgk4ZHS8XqYZ069VN3VRZNtBYQgUecC8YXG545DH8c7p86LMBj/Xn1JBQdUgSMdjg +DOCBJGdEdsQsHu+tqLE7892U5rspQ2Q10+R21brrqn3PTZvH7T0ED5bbnIA3AHUA9vh9285o +vzQ0eBQm1yLgUZBcZUd2FcWJXzh/wcLCore3d/KNRdxKP5FIAstl4kmfSibDkj16uRh4YIKB +BwYeVJ0+TMQD+QHt0QGgAj20ATYhKYqQOmgfDzR4IIiCNDidZWOWFg/YIPr00DvOAB6T28fA +4z0R0EVGRkbKy8uzXxNSYXVSZXMC4KHO4azO6aLB5fI+g4eLecDePQdg+A52zntyYsq596um +A4/S9PrSjIayzIaitBpDLbMrl6/w8PDAdG+IMLmUQ8z4TikdrqyUTtmgnPHhhNFjyY22YOCB +gQcGHm8bPGB/TWUZgH+SPdPRFg+YWHk24IFYJGYJHq/08YCWCgw8aFNoLY5HWVmZtrb2+TN/ +MVziFqJTVGK2w8ADDR5H/zzp4RsMqCMuKWvbb9tz4ytnAx7lWY0V2U2Vuc2hPtEBHuHVBf+m +/Vo1MYflM6kUaPH4TjF9DTFtmUTSFzIp4E/LtFYMPDDBwGNmWSoh0+cXPBBUgMMZcL2texAN +HsguyFALlXPpdEMtja19cBOAOqrTQFxBQFPgHGAhWIGHmG6oBfHcgA1S0QUaZqi8QeCObwIe +jo6ORkZG2HNNm+ABkOPyuRvXzt/kvS5DZLBUYnJQZnZUYXHEwAMBDx1F04uXrkGf0r17DziY +eb8ueFTlNVfntwDwqCl8UFv0gEfeEtDF/2SSP5dOXqdAsXgA6viKmPqLRtbKCfCgsy+lnd8q +DFeIgQcGHrTJHjSbJO4tgQeaAUDvDPtuHhU/ZLQFVoP9OCiEoTbg1pmdS0G1g6xmM0QnQ0+T +QXSyvQI6l6KPizSIPivkhGELSFgz9I7zGxgEE9oBD/x1NYmbhgr0dooM9oqM9hh4UIFHYlDe +hu83Qp9SY7L1jcu3c+Iq3xA8uC0zAF18RIj/VcRlh8p96FO6SjaVzr7kD71csL5cMmn0yTMa ++a1icTww8MBkccGDahYq7MFh9w2noK4/p2bpk4GuBme7IF05jDj6yum0oJ2Z45KhJ94is2Ze +/DNPdvJ0WrCCbhAxy8Byqum0SFhUsISXg4HHOwMeY2NjkZGRIte15eisiTdtSLds5O/YYeAx +HXjwsOPEJYmAOpra+zds2BTpnfLm4LFdjQIe64ipy8QSV4jFgfWNMlFXLfNWSqeskEoGS1AS +WdGLgQcmGHjMIB09Q6fuWbuF5y+Js32rlv+27sEpy6ubumcfwgvUnK6dyTVfGRwMiV02JUoh +gzVTbsUexncJPIaHh93d3S+cuXTrPBvhuh4tg4eZvDsaPCR4FST4FCX5FFnucLLe4ZISUAIq +LaiEBg+yirO/ecL8goe/Q/RPP/0KfUp5+XBignLZsRVvCB6JaS+jle7VynKIrDmgnTVh/UhY +LhpjmdYaXNrztXwaKGF1rcDAAxMMPGaQpeVcigkm7xt49Pb22tjYAOS4c4GbcNVA9oYVoA6a +Ag99KUcVYWMBNnH6v1lOnz7Nys5VWNNZVNtVXNdVUt+la2Sua2ShZ2zhFxoXHJ1sbGGnb2Jp +YGJZ86C/9kF/XWt/fduAgBAe7Pg33U12Rm4FgpalpluwbfIbgsfp4+cdXX2gT+kfu/amhBW+ +OXjo+FHms2xVy1hHTP1EImm1LGUW7Ta1jAvGuZ9JJX8qmbxVM3uGhHEYeGCCgQcGHphgQuPg +oa2tDZCD8QKf2BVD6WuWMtetaA08rt+g4+DmJUgSyXbuIXGZ+dUdBdWdaPAore8ua+gpb+yp +aOoFWtncV9XcV93ShwaPhvaBxvbBvJKa6IQ0LV1DQZwwCyvbm4CHl034qdPnoU/p6dPnjTVs +smIq3hw8jutRuOIL6WQBp2LH6JqjE3+umJjbQvIpV/GvOG2U++GEScQtgibe/xh4YOCBgQcm +S04KCgoyMjKw+7Ao4CFxkXz3gqzYJWOpKxbSVy0WHTyMJdxl7mly3uEPjM1OK3mQXtqaUdqW +WdaWVd6WXdGeU9GeV9XxJuDR1DHY3DnY0jXU2j3c1jPc3jvc0fuws28kLSuPjxOnLmvgaR42 +S/CQECSlZhUC6nB09Tlz4gLM1fKG4FGa1wKQgxIaXTHtO/nUTYppa4mUebXr5VPprQr+J528 +TS1zHTH1q4nJtnu41AkEQlNTEwYemGDggYEHJq8lWByPhQeP9vZ2sQtm4n+ZAfCQvGQuedl8 +YcBDmkVv/ZqNU4KHIr8xMx3XpctXhMVlTW08olLLDCzdzvx1TV7daAHAo+FBV3h0vKa2LgMD +I+NtFgNlyyj3zJnBQ4hfHPEpDfdMnhfwcIuqAUTxlWwK4I3LpnkXTXLXyFFcSb+USflZJf0n +lYyrZnn7tLNg4SHdbCtz26tXrpLJ5LGxRUseh4EHBh60KaNjT3SdEgur2rD/HSYYeCwueJSV +lQkJCd0+y7ko4PHl56u3b9mnI+ikzmcHwcNU3EecU+XqxRt3GJiNrd3jc+qSi1pSilrcgxOj +08vXffvdZ5+vDIzJetvg0dU/0j3wqGfgUe/gaHxiipiEJN3NmyRx1RCnxCnBI8T5vqKKJgAP +cUkiLwceyU77huDBbFUAB1aumeUZBVWq+5Xv1aI4l34mmQzY44Z5vmlYjWFoNSAQGE29qLyj +srhOQ1VLX18fAw9MMPDABBMMPGgKPHp7e1VVVc+fvsR5VlrsvOnCg8efv59e/smn+nj3H9b/ +unXzbggeDt5RAngJW/fQxPzmxILmpMJmCB5fr133w0+/GNt4fP3N2h279y4kePQNjfYNj1bV +NWnr6hWWlE8JHn+duZqQmptTWPnjlp+TgvPnBTxK8pq/nBhnIXqW7tLIXCaeBHjjjEEOZTqt +Qpp9TO1hvewVkpSkLX+Z5h3Wo5SrBlZ2NPV2NPdlpeY/e7Y4kT0w8MDAg2bF1CO1sa0P6wcX +RpJy6+ml3KYLL4bd8PcQPCIjIwFyMJ4WEDlrSDhnuijg8cmy5Yzn+BnO8n780cfK9yxE5TRs +PKOCE4rPXLz+zdpv165br6JvBcBDTtVQl+xEVDNctfordh78yXOX1n77nbGN+wKDR//DxwMP +Hw+OjA2NjA0/GovzyYn2zIDgYaphf/jw8Y6+0YsXr2krmMAkcW8OHkaBFZSZs+KJezUzrcKq +6kvbsnOb6czz4ezaL2VSZL3Kais7C4rbtIOrPpeiIMpPKhkQPDpb+rpb+7vbBl5MRGLBwGOp +SH1Tn7ZZkqldelvHEAYe894Pvg+5WmhHYIzT6dK1YDec9gVwwgw5019LfMxjeFjwzKfwgqe1 +Rc6YiJ41WRTw0OR1BLwhw6n7v8+/PHr87F0hqU8//dzY3v+7DZv2HjhCUjfRJbvKqOjfE5IU +kpBftuwTnLjC9l17v/hylYiU0m/bdrByCwDwsHbx57gnICwugyPI8OPEbzGwBsekLQx4VFTX +6eroK0irKkvrXLhwpbii0cMniMAvi2SnfUPwyM1s2iCfulwiic++cJd65gaF1MM6Wd/Jp+7W +oIyqfEtMFXMr3aiYtl0985Bu9jfE1L8tC/brUCa8KAVUocGjpKBSV1vP1NSsqKgIAw/alNHR +8dLKTjf/Qnmd++x4X3a8Hzven1PEX9kg0Te0tLK2e2z8KQYeGHgsjFQ1dgFgOHnP6iCrGdBd +9EbQRhSaVE4v5XbqnhUACVB4T9mvsbUvPKXioqAdl6KPqnUc2PTzdZ1DbGSYjYVZ1gNUg9FN +QR238HzQDlgBSvZKA0tQH1Qrrm6/LuIEo6+D9lPyG963G/4+iNAJQ9wJQ/xJI+FTRiKnjRcR +PKSYdD9d8SkvTvyjjz4ydQw6dPT05i0/+0TnfLxsmaGNd0JeU2J+Mwu30KrVX+mQnZYtW7b3 +4JHzl//+8edfceKk33f8se/QUQAeylomASHRHX2jVQ0dh4+esHDwXjCLx8PR8ZHR8aqa+h9+ +2AKODs4BLyiBJIl7c/C4Z1dIiYUukXTbPN8xsrqupLW+tK2yuPWcUS60eACV9Sprqel6UNtV +Ud6hHVy1e8L94xOJpKqabgQ8etoHezsG66uaxAjigoKC7e3tb/s3RpWrpadvRNc8RUEnNjmj +4ck/cd1BV4WAx0C623v7PI6NPY1NqhVXjuAihLILB7AKeVMph3AAFyFEViMmKaP+6dNnNHXy +GHi8k/0gkogNBgsFN214ZAzeOiRqOsxmC+o4heTCcpjTjV8tAJ3hRcYkElYD66ARJOcLqOAe +UQAUHu6GqNMLVGB2DDzeJWlqajKQdqQd8BCiJ3744YeRmfVfr13PyiNCkNP8+OOPgxKL13+/ +8ceft4YmluiSXb5c9dWqr9ZwC4iBJR0D+w8//rJq9RpevBTAjluMHGjwAMrAxKaua7rA4MHD +y6draAqOXlzZiL83n+CxdmKiyjpi6h7NTDWfcrvw6jsWBWuJqRA8NiikGQRXXTTJW0tKZbcv +so+t43UuWUdK/WZisq1qUBUVePR1DvV3Dbk4ud2ku5mSkrIwP7mRR2Mh0RU4uRAOkUBOkSCg +aoYJBSUv5xR0ByrVSf/S6UF4Pj76fj6Sre2DSnrxnKLB4P5MRg6U+kzcvUAN48TCsnbaOX8s +ZPq71w9CNgC9P1WIcmTQBKayhQnaQDUIHlQpYhF4oBpqQcADIgdSQiJHwWaRbLkYeLwbUlBQ +cO70Ba7j8jQCHnqC7tyceAAeFm4RR09dWLf++5jshk0//MR6F+8RmvbVmm8++OCD5ctXfPbZ +54raZHo2ns9X/k9Z1/ybtd9+/c26mwwcu/YckFHShuDh6OrDK4CHUcoheywYeGRk5eza/QfE +nus3bsoSFOcLPMyDKN4dv6tmRCfV3yTnrZRO/lg8CRCITmBFalYzdC5trupIz3sg7FYK2GOF +JCWiqYBLqV5oNdi6UzNrSvDo7x4uyC0C7JGenv5Wf2/Pnj1PyWqU04jmEg1BelU2nA/4kw3n +a2qXUdfY+54/ktV13VIqUYA6wG2ZkTq8/717BHj30uuaaOLuYbNa3r1+EKLCZLPDlHlmJ4MH +wi0zgwdV2tz159TQbWLg8W5IfHz82dMXWI9LCh7TpxHw0OZ3tnQPX/vtd/sPn/SLL/xk+Qoe +vGx4WpVPdE58bqOhjfdHH30E2MPCJQjOagmOz9+85eeNm7fgJRTWfL0WkIlrQCwEj42bNksS +1S5evo6wh4ae6cKAB6COuKQscNCAkOgTJ09lpRVkRM4PeJyfmLryLTH1J+V0SbeSpPTGupJW +k5Cq6+Q8SjwxscRPJZOO6GYD/MC5libmtLTWdWcWtkl4lm9STF82EdS0sKJzSvAY6BlurGvp +6ewfHX1bdoaSig5N00QOkQBO0SDwtT6pA/XlIoTeFQtw8s7v6n74Hj6PbR1D9h65nCJ+HMKB +s0GO/9w9vC+3WOhdgr+zd35n9/DiXshSBI/CqrbRsScYeEwniMmCyuKBDJpQ1X9D8ICHI3ul +v7c3/F0VSpa3U5e5jioIHNWnHfAITasNS6/Vs/ICgKFqaC+nYXby3JXYnMa43EYAHpx8hE8+ +WQ42yaoYINNpOflEz1/+e9/BI/sPHbtKxwin05raengExeVXd5jbef2XPczeNnhYWdsxsbBD +cwcgkOycvPEnz7ISitIjSt4QPFJTG5ZLJH0kRgmTLulakpjWUFfcCn08TEOqTk0wCSW4h2SS +kGtpQk7Lg9ouAB6t9d1ZRW1EvwoYTd3ufsN04DHY+3Cob2S4f2R8fHx+f2zNrQOWTlkcwn4T +3+Yzfciz4/0BfgjJBAdFlj8cGXvnH8PnE8vunoeufoWCMsHchFB2vN/rUsd/7p5YGJ4YGhJd +sYh3b8mBB6AO0M0JagZi4DGDID4egArgqEp1UzckBKCWPhkIMwyPjM0GPKARA+3jgbZpgK2H +2MgvzYATB8LAg3ZEVFR0Dm6BhoaGF0/euHtEnf+IHu2AR0haDQSPiMy6M5foVq/5Jjq7ISa7 +AQGPrdt3f73222/WrT9x9hICHqnFD1R0zbfv2vv1N+tiMysnx/Ewt/+XPf6+Sa9navv2wONB +e+evv20trmwEx1LT1MMLi4yNPwXg8fTZ8ze3eIg7FwNyuGqSG5VUx+9QtFE+bYd6xmHdbMAh +18l5ZqFVEDzSc1tkvcp+UcnYppZx0zJ/l1bWJsV0YfeykAzKWIyUT8UrwWN44JGNjc28uJv2 +DTzyCCjikQgEOME26y51wnMyVFIlIiGt/gmNeU7OuwSGFYrKh7IJA+QImDNyTOF3qh7d2NKP +gcfsP+cx59JXfKtGFED2QBRyAnQcRUZbYPnM4BGaVI40AiBkSvBA3EVgm6DaYt1wR0dHIyMj +DDbQMoc4HuA2Xj1Bz/unNt9hPdoBDxyDnG98EQIewckV56/cRoNHcELx55+vvHSd/iYj5xdf +rkKDR0hCgYS8prmj33Qh0y0cvCF7AAUrNs4+bwk8hPDCgDegT+lvv23t6OyB4PFo9LGosHhK +aOGbgMdPSpQ093ZhVQA8hJ2KAXj8opK+VzOTCjxqytvJETU3LApWSif/ppb5lVzKJbN8y5i6 +pvqey+SCC6b5swIPK1smJqY3YY+2jqGo+9UipFBusVB2Yf85dKAv/U6NEvKLW2GbA+luPaGa +75jmFDxw8syUVo0Al8zA5zkv7AH9TqVUo6vqejDwwMBjvqS9e0jGJBLgBL2UG2LigJAA8AOU +gyUszyltAaiA1BkeGQN/ouEBTsKF9hNk6/B/zXR2AdnwWGAT1RAPJksOPO4eUuc5pM33py7t +gIc0m87Va38HJJUj4BGZWR+VVY8GD2kl/dVfrdExc7ZwDvpk+XJLlyAEPGaTJE5d15SBiQ3m +TJlgD995B4/UjOwDBw9B0wonN6+pmfnjsaeIxYNEkjfQMZkzeITHUZKz/E86+XfVjJ+U0gF4 +UA21XCe/DCC2lph6wzzfPKIGGWpxiKunsyxYR0o9bpALlrMBj4eDj2ysbRkYGAYGBl7fyjHq +GVTMLxXC9ep5GbPwnJzwOzWxTa8qKqvGf41Mtn03NIdvfWx0hoy8nYKai5FljLRaJCOfF7OA +17zgB6doELdoQGdhAgCAhdR6xT2VGHhgln9MMPD4R+4d0OY5qMN7SJemwIP7prCsqgF6qGUy +ePyx788PUELHwP5a4FFc16Wh9y97XLpCYY/5BY/jJ07CObxxSVm7d/8xOvYEDR75+fkszKzZ +CSVzAw9F9xLIFdo+5dUFLTWFD2qLHkDwiE1rvGtfBLPTAt2nnbVRIU3MvSwjvxWCR1tDT3tj +T1V1F50VJQaIc2LjbMBjZGjUgmzJxcX16NGj1/pNOntlCchEMfL7MgvMy8f7P36non4mwsKl +AmveJfCIEz+dL/JLCIldnKDNJ2ysrOVhaBl3l+DH9MbsAZiNRdDr7A3NdPxWwAALqRQ+xK+p +IXy3tHw88NrBS+JsCQQCExPTgh1ufPxpb/dwdVl7YWYDbWpBRkNJXnN/78PnzzEioDnwqKmp +ubtfmzbB49pfdHa+92cAD2uPiC++XLVu/Xe//LZ9284967/f+Olnn8Vl174WeJTUA/YwQ7OH +rYvffIGHu5fvlas3XvqU7vojMyuXCjyePXt+7dq1pJjMrLjSOYDHHbO8NbIp8h4lv6tmbJBP +FXYq9oqpkfcs/Vk5HaiCV1lOXgsEDzidFoDHJsW0HRqZ2sFV3smNHA7F60ipZ00oKWt3ambN +EjweDT/WUNcAL7rXmuqSX9JiSA5X1IkWkAqi5/VgFpyf73d2vB/ADzlhvSixy7USmxe4M31L +6sB1Fq6UKx4NUBYUENDQM/a1ckzglQi4dddtjqYPnA/HxNjW8YsK2/bdS+X+doFpqlp4bRXu +a2w67dKVJ0+e9nQP15S1ZyXVxAcWRbhlhztnhjum06yGOWZEuOckR5ZVFD3o7RkGL1vsn0gL +4EHJwHLyMtcBNRoED21el/PnLwSn1swAHheu3oKGDoAcn32+Eqx8+OGH94QkXhc8Suu7NfX/ +ZY8jx054B8W8OXh09Axs3vwD9Ck1MbdhZeN49PjJZPAAPbins392YskcwONHxTS8QxEMmS7j +VgLYY5l40lpiqohLcVZOc0NZW2N5OwIezdWdLTVdGfmt7HZFq2RTQE1AILqh1U0NvbphlCEb +56SmWYLHo4ePlZSUSSTS81l/TkTH5fPiDIkqTnqmwZpGsZwifnd4PFgE58X04cMjGXmb28HX +wWOBhw/eksb7/OdCWguSEiITJInWlvYx+uYJTPwed+65v9ato4RVx/neYLU4eEZq234e1gt0 +5YQfFoWpGpT2vrch4JaogEe8q2OwMLMxMawk0jMXwEaEc2aMW1ace1acRzYtazxYumdFuWSC +cwZnnhpdXlbQ0tU++PRdd02nZfAoKysD1MFxQJE2LR4q3FY36G7PAB5W7hErV36+fMVHO3Zv +3Xfw2KXr9EdPXQD4seLTz+Kza18XPMoaeuQU1XkF8DCgOmCP4KikNwQPgrgUSVENNvjrb1vr +G5unBA95eXlHa9eclOLXBY+AqOqPxRKVvUqvmuSulUu5Rc5zi6qpLXrgF1/HYk0JW/qXcS7i +XJpX+EAzsHKHeuYmxTRxj7KkvAdtDT2O8fV0VoXrSKkCrmUwktjswWOwf9jTw6ujo2OW7AE+ +l4pLGhTUnLgF9CTkbCzsY9UM4thw3gy8nm82WcMPgMfZG5q7D+PMbcLe4Yf6fmKhqWVQb99I +Vl4jSTPiNrcrPa/HLJDDl13Y7xaX3dG/SNsP8P2+n1dBRncRmWoJUUdjW98RDguyd8b7at94 +3t0+XFnUlp1QE+dTEO2WE++Rm+idBzTJJz/ROz/RZymo9z9Lr7w4j5xot9xY74L06MqqkvbH +j55gqLDA4DE2NsbBwcFwSOTuPi3aBA9FLvOZwWP/4RMfffTh6tUfbN68fNv2P77+Zt3HHy/7 +dv2GDz74gImTfw7gUd7YgxeTkZAmIewREp08Z/DIzi/auWs39CnlE8Rr6+qPjI5PCR7a2toW +JjY5KUVZsa8HHuf0swF4nNDLNvQvL8ltpvLxqC9tsw6vBuyBxPFgsyuKymhGnEuhj0dHU29V +TTefS+knEwE99CPrZgkeoyNjjx+NjY2O9/e/xvTMJ0+f1da1a+l7kq2DbRwi9clRkspht+66 +Mb7+xA3wFQ+og47D5vB5uW37eLYfuBcQkvpuP9etbX3hUTmpGRW9/SPhMaWipOCb3K7T3To2 +nC+HsD8Dj8upa6o7Dwls28977BwB3PZHjx5jb8jZyNJyLn1zefToUWFhUUlJWVZ6YbBvkqtt +tINZmL1RsJNxiKtZqLt5GFC3payUSyCHuZHDnE1CHIyC3W2jk+/nVlZUl5SU5uUVFBQUjjwa +mf3wMebNOwfwIJPJ146ycO/VolnwULtre/HSlenAg6huCgdZVq368OLFD46fOnSVjukOy71v +1n0LCj9etizkfsEcwKOiqZeKPUKjk2cPHuVVDfXNHRA8rl677ujqA31KDxw81NM/NB14wKEW +CnjElc0ePPwjKaaMHWoZX0onXzXJNQqooAIPq7Dq6+S8LyfCp4OaJw1y1pJSeRxLYORSNHh4 +JDft18k+bkhBlHXyaW2t/a8FHm1tbXMw3tbUtWvqe9wTMnTxuB8QViwoTfFemKXzJOxS79x1 +OnFZacdBfvAVz8Gnl5ZZ9u4Yt6ff9HDkcVFJQ1NLN1gffjjuFZjPI+Z7k9sNHfSVDefDIeLP +LOBx4ZbuH0fx2/bx7vqTV0HNub6xHXs3YuAxndTU1OBvy8vQ60jd0ZK4qUVk0acoqwFKDRdW +DV6pJDYjeXZjebB8fZVjNhCj05Rj0pWh15Zj0rt7RTSvIK+mugYDj7cEHoDtKIMse1VpGTyg +c6lHVO5k8PCKzP5y1Vcff7xs05afAWbs3fvB/gOrvtuwaeX/vti99xA96z1QuO/Q0bmBB1Bh +8f+yR0zyLMFDQBC/7ttvDYxMXT19Lv/jU3rs+MmIqFiYJG5K8AC9cHZyEQCP7Pjy2YPHOX1K +Unvb4MrK3GZD/3I42sJsVaAfUI6Ms5iGVFWVtG1USIMBxPIKW5X8Kn5RzQAq51vuk9zI61wK +nUtjclu7W/t3alLy1WqE1rwWePT29Lm4uMzhV/r48Xjc/QIHl8iW1v6a+i6yfTKbkOctbjeW +6f1O2SY8JJn43M7+rbX7sBD4it9/Aqdj5PO+Ddr2Dzxsbunp7KJMam7rGLJwSGER8AA8Bu4P +u7AfgJArjCb7TxK27efZtu8ev6hJXkE19lbEwGNmqa6ukWLQ0uG2NxJyNhR0MhRwUrxjqkRv +hqj8bRM5OoOFUdItI/Shp1RlBrLU39qiV5QlrqpJXVadrOJX1cSn2QR2kbyhqcpsAS5Ti8vG +FOcucFEmJze7umq2TwoGHq8FHsPDw+dOXmTaL8m1R5PGwYPtbz5NU+fJ4LFr76HPPl+5dccf +n3++8rsN31+8+JGh4TJVXc0bd9hA+YZNW+4wcwP2UNG1mBt4VDb38eMIRAVVGPJr3/6DyVnF +swEPb7/gnbt2c3Lzrlq1OqewEuzu6Opz9foNJDvtlOABqAOCx+yHWvwmzB0rJJLy0htgdtqo +xDp2m4LVMimfSSWvJaYIORUlZzRB51IEPKBzaUFxG96t9Cu51E/Ek35UTlcLqqqq6YZJ4pyT +mqDRo71tYPbgMTz0kJGRcc5JbEUJkgzM+MiYXMAOVTVduuT79DxTeU5OIAdgkkv0hnuPi/y+ +j+f3/fckiDbllU3v7WPe1T3Y1NwDIASss9y1uMFiwSLg+Te71Z9nZX7fz/v7fh4GDvWY+3nY ++/BNwIOV6LkkzvbN+0HwsS/LqqMv4KjNY6vDa2eEc1ZkMFViNIOqQG8sw6yhI2y5AKorYiXH +qUW8Y6DESEZOYLKqMJkLXSZJ3NAg0OsIMOsJUimTrsRtHYnbumCFapMAsy6BXpdwTUXrrq2J +qKsGlzVZ3BN/g5ibl1tThVk83gp4jI2NMewX4/pDg/bBQ5RJmYsXTwUefnGFq9d8veLTz7b8 +vPXzlSullfTbe+irm9a0dN4z9cr0iy1Y/dXX3363YfXX3/7viy/9ozPv5zbhtEMQ8Lgj6T4b +8Khq7rvNwGJCtgHwABDiyLETKdnFrwSP1o6+VatWwVCocILM5s0/1NQ3zwY8XiuOxzk9irmD +wzIfgIecawmMHibhWpyY2lBb9CAmpUHAsRjwxmGdbP3Ayg0T4BGd3mgQUnXaKHctKZXXqQQ6 +l/qnNjHaFq2SSZH8J2T6S6NHWO3swWPs8XhRYTEdHd3rRvaAwsXFBSixta23sbkbTndz9c0F +7MGKyt4y4UHqe53F/OBpSdCfAmXn0UlKK8aedCDtHf15IW4M7KZ/3dA5c0VlxyHK2NNfN2Td +vONHH49h9+cN2aOjZ2nExpwn8NDV43NUZiGrslsaCDmhwYN020AdZxxikxhslfC2Ncw22UjO +Vva27ivBQ/iKAvG65nFlu9WFFWtyy/7VvLLV2UW3+Axu4UxXZxWCP9FbV+WVnlCyk7ympsVt +q8tnR7pjYoRzFf6blJefW1Ndi4HH2wAPjl3qnLs1lgR46PC5Xjx/xc7vPpXF48CRU3/sPwxU +Skk/PrfxloSppc9+c69jApp+tsF5V4Ss9x4+8/1PO/cePEJ29MsobTsvYBeRXgPB44Kg/SzB +o7ql7w7jf9gjNbvklc6lx46/DBcG9/r1t63KqmrTgcej0ceB3uGvCx6J9ylTX5dLJMm6FP+q +nMZpXRAUW1Od3zLZudQzrvaOZcGHYokT0U1T6K0KXePrJzuXdjT3SflUAPzgci6V86+CRo+O +9oHZg8f42BMSkZSTkzNn8HhBcfx43lRbX5WZBNaDI4vp7zpSPEiF/djx/jc5bY9eIG4/AL7i +ea/eIvkHpTx58hR7zBGpEvjCg/MwP5PkmSuKJ/8SNyL7d3X3Y7flvZJ5AQ8ZForFQ1+Qoob/ +tXjI3zGSYVc3lXM0kXV422pGdJLn0Za7rf9K8MBfUZC9qXOPXf9vgjmdKEoJ5n+LkPGMujhm +vb9FzOj+u/VvUXOwi8QNdU0uG2NRFw1uazMxT/wNDDzeoiwh8IC5Wti5+WeIXEoyj2Umeifm +XdB2OCptLA/A4yyfraRRJJ24m5BWsIVfjlN4oaptgrV/jmtkEQCPg2xkEb1QUb0woK8Ej5oH +/VTskZZTMjN4SMuSJGVIEDyAAgjZtPmHXbv/mBI8HBwccYLCrwsejOQ8wAafSSbfNM2NS6iD +Qy2TwSMsqYHVpnAtMRXUBPUP62ZP51wKwKOzpa+2vkcvovaYYe7yiektmmG1rwUelRVV1tbW +z18/SuC/4DE+2qxztoBndWWo/cORp9fpDa4xmNzmsjt1VRV+xR+/QLC0CxscHMGe4sngAbRU +dq+5bWRmTgV2Q+ZF+odGVW3iFjH/6SKAB7OOgaCTmbi7KcHNCO+iSG+K7ugV6I2Jtw0XRkm3 +jZRnpA7E4iF3XfMU0XJtSu66hKx/NTF7bXz6bR69O/xGa2PTwJ/orWsTM0+SrCSvqQHwsJDy +MBRyspTyxl0nToAHNtQyz9Lb28u6S3lpgYe+gMftqyzKupbTgcdpXhu/+xUKFvpneNlP8fDs +YzHdP6EOofn7Wc0AeOC0Q4DidSg6B/ConcQe6bklM4BHSHj0/oOHQH26W/Trvv0WIIcQXnhK +59K29o6bdLfiwpMBdWRGzzZXS0hUFQCDj8UT18ilHNfN8o2qpgKPxLQGKbeSn5XTt6tlqPuV +5+S1THYuhZFLC8s6pgQPGGV9nXxaVWPf7MHjyfhTfT39hw8fvu7PMjAwUElJCax0ehBgB/rA +U7awuJGezfjyTf2j52S37efZc0RATce9+UHXm/z+HR0dT89CCgoK/vM2rqmZzV6RkZHUIyDt +7a/cS0tLa8oX2sxCIBAmg8fVX5Yd/mHlK/el2hGcwGyubnJaQFFR0de9ky8mIha+ci/wb5rh +TiYkJCzkOMt7lasFAQ9TMTcTUVcq8FBkMJW5oy3HpEtk0lsAlWXQId42eCV44K8oyNBpc3Ab +XJew+lvcEq03COaiDLp8rPrXxSyoNoESfraXFg9zSQ8DQUcMPN6eyMvL0x3kW3Lgocpjc+mv +Kx7hWVOCR3xu4w2Ci4ln5sjozy9efFDaYKvjnPLjVZ3U4gfn+G3TS1vP8dtllrVZ++dA8Hit +oRYIHuX1HX9dvubhGwzYIzWrcN+Bg7XNXRW1DxxcPCeDR1tn/5Vr15lZ2e2dXKrqmmB22imH +WmxsbB2sXLOSCinmjvjSWYLH2QnvDnaL/LLMBpugij/UM26a5dmFVuZmNmn7lv+pnbVRPk3A +sTgmtaG+tG1K59IHtV0xmS3sE8HSL5nlW8XUNTX0IkMtwVmtvR2DB/RywC4sDiWvBR5kM3JL +S8vzOaVG6E+yQ2Jrj7VXgZLGpm5z65gbjJrS8ral5Q1z/tlzcXHB9wMGHksdPD744APIqBh4 +LDx4kG4bKvLquRuEuOkFv2111w+xVnYXvaGsPAsfD4nratvJnqvySr7KLER0dXbRmsTMe7dU +TijarMoq+Cqr6N+tWUWr0vP+FjSUuo6Bx1sX8P48d/Ivtl2qSw489AU9Fe+SfbzTpwQPq4Cc +fcymCXlNV/AkeqnbN8XvSRpFAnUIzUeDB6AO64Bc79jSg2xkj+hiz+ji9JIHswSPutb+ioaO +i/+wR1xSlrK69o6du48eOzGbJHFTgkd5RZWYiCSgDgp4JBbPMjutsU8p4IEvpJITE2phyPTS +rEYmi7y1xNQPxRJ/UU7X9a9A+3hMBx7IUIuMT/mPKhlg32sWBejstEnFHSsmBmjC8tpmDx7Z +Wdm5ublzMHo8qs+mJPKYoI6eUE2kvLNrMDQip7au9U1++Qh4vPNDLfWkHe/2ZWLgsdjgoeum +H+KqF/y2FRzFStlN9O9XgwfuirzsLT1JNlNRLrIoJ5WayTOYSDObgJXJm+SYTcX/Y/HwEbom +l4uBx3wL+I64cYiLfaf6UgQPAyEvB/XgKcFjL7MpBA+P6NzMkt/zKtZXNRt6xpSwKfiyK/gC +8MBph1j555wXsMuuaL8p4SqiGyqiF8qt7D/7oRYYQKyy8V/2wItKqmrozRk8ysqrLl+6HOgV +TgGPxMKM6NLZgEd2Uu2PihSEkHEqhJFLPSOq9mtkXjXONfQvT0tvJLqX/DSRG07eszQzu2kG +8EjKfYB3K9ukmH5UP0cntDqntIPDsXiTUrqUb2V+ZTeMXCoz4WX6m3pmZ9fQLMHj6fjTtra2 +2QdRh/JksKNO+hfYdbZaMc/7Lx8DDww8MPCYl6EW6dtacow6coy6C6AyDNoT02lfMdQiek0Z +f0VB8pqa1BXVySp+XU1imk0S19VFr6lg4PG2RUhIiGGP+NIFD2MRb2Nhb3uf2MkWj9O8NgA8 +AH5IGqqf4WUffPhFdGbUj1d1LHyzAXhY+uXImEYdYDUD4KHtlAzjeHhGF78ueDS0D1Q1diLs +ERASPSV4/CWT8ErwuEl3y9zIOjOxMCuhMD2qJCOybDbgIWpXAEhgm3J6dGy1kG3BBlLqH+oZ +buFVVD4e0cn13LZFa4mppwxy9AIrqAKIaQZV7VDPhAHEsora0D4e+eWdADw2K6Uf0MsxiKqr +auj7VT0T7CjmVzV78Hj29Blgj2fPZhvOCzqUwn6zQXn/s0cDGHhg4EEj4PG+OZdWV9VI0Wvr +8ToaC7sa4VwMBJzlb5oq3DZDVPE2WeGW2WRVnG+daJOseIescPs/J0ClimB5y1SOznBuKn/L +RJ3Vmizmoc/naCHuI3hJNicvpxqL4/Fm9g10Bo3e3t6zp86z7VRZuuBhiPPSE3K5dYXxLr+w +T3QO2scDgscZXtvEgubj3KL0Urcj084fYDXRc0kB4OETVw7A46drOucF7JRt4t8EPBrbB++n +5uzYtftB1zAVeADegArejcj6lOCRcb8gITI9M6EgE1BHZEl6ROlswCMutgpONtmikAaQA4BH +THxNeVZjRXbTdLNaHKNq7lgUfCmdDJ1F92hlrSWlstsVRWc2TzmrBRlqic5v43YpWyefdsKY +Mn3mU8nk1PLu1wKP2f9Qu3xlYKdZI74RunYsUfDIq3hQ3dSNgce7BB5LS968H2yobyDyaagL +mmjgTIGq40xV+Axno8po5V0YNZhQyhFVeF/qHBpRFTDSFiWr40y0RMjS3MplFWVNjbMNSEgg +EJiYmLAfHlqo4nhYW1tfO8TBvkNtSYOHsbC3sYiPsoCZJE5BVJykZWznF5MLwcMxJF/GNBqA +h7ZzQkiSoLz5mcKqgwQDsortfQ37JOuA3PCJOB53Vfx1nJN1XZIljCLnAB6+QVG79+zl5cdJ +SJM4uHh4+YUAeFiGVAHG0PUqk5IlDT583Ds42t0/AvPIgHLbiNr2zt7QsAhjE7O02NyM+/kA +PAB1pEcVpkUUp4eXzgY8oqMqf5kYZFknlzLBHqkX9LNF7AvJAeU5aQ3TgQccaqktbdulQTFc +mIRVTfbxoAKP2vresJxW9dAaHteyvTrZH4snfSpJoZ3vFdOTyrpmAx6tD1olJCQGBl5tuBjv +e9BqzQZ7TI+/P39L1DF78DByS/n5ug5Y/vsQ3bMCOsujbL9lcIbXerqtBZWtZK90DDyWFni0 +dA7wqwd4RxW9J+Dx9OnTgYF+RDo6uhvrW8uL6wuzq7MSSzJiizJiChHNBBo7sXyVZqBWMlAr +GVPVnFxnPrQgI7ogPWZCY4syE0ry0ysqShra27v6B/r7gEwswLU/nRCMH+YLPG7/Icq8U+Hd +AA8TUR9Tgq+jRqihiuWNa3RMLBwxWbUJeU2J+c0APJIKm5OLWupawdvpg/Ena3MqC+YWMn06 +iwdVADHEygGkuLavZ+DR6Nh439AoAh5AL126rKWqlxydnREPqCM/OagoJbgoNaQ4NbRkluCx +VYlCHfRmucWpdQnxNTJOhd+RUmHO2c8kk/AORfeT6qcDj8by9sO6lIkw3gn1M4BHSGbLHu1s +2CbQTySSGO2L3VJbBnqGxfwozh6rZFNqHwzOxuIhJCSUlJQ0NDRTvMcngx2gl4TdZSTfLzCO +x+KCh7ZDwvKDRLBEswTQsfGneRUPhkfG2ruHLH0yqMwaSbn17hEFYCsaPEBNWI5UJpGjQAXY +DmIhmdwaBh40BR7vm4/H4MBgTET8/ZjkUL84O9NAM20fUw0vcw0vSy1vGx0fG913R620vcF1 +mev4+rlFp9zPjI9JigqNiwyLAQQyNDj0ApN5Ag/W31XZtqu9S+BhKuZnIRPgZRplZ+ge7BwP +FA0eKUUtfUOnwYtq8OGRtwcekCvSSzs6+0aQFyOQ9p5hNHgkRWWlx+WnA+qIz0+LLnhd8CA5 +FYJ+/xvZlPi4anSSuLDYalaLfDj+AnSrSrqKd2ledvNrgUdjXbdVTN1fZvkIcpwzzSfH1qNz +tXR2De2eYJI79iWzAQ9tLW1/f/+Ojo7pfpzPx0dbDK8gfaUANystg0dKfgMop5dyg3+CdRmT +lzNnAWmAP2E5Ah6AKJASsBXgByhcf04NrCPtg9bgjmDJrxbwJlc3/PBxcFQ5HmdFFFKNkqbD +wOO9BY83l8rKasFrJKkbOtI3dWRu6iowG8kx6MsxGCBKZDRcSJVjNEAffUr9p7LBXJTeQPy6 +FrhYyRtaxNsGHGfx2TnZVZVVLzDBwGN68DAT9yNL+NurhPjZxALwCHG+r6VgKCatYO7oG5tZ +lV1eMP5kLXhXtXRJvFXw6Oh9OXu0eYCCyr2DL80dRmQnWCEtLg+AR1psfkpoQVJg4WuBR2x0 +xdeylOEVVdciquy0cDpt9P3aK8a5y8T/z957gLVxpYvf+z33frv3+d8t3/9uNutNdu/du8lu +yu5m0+zEiZM4jh3b4IILLtg0m14MxnSwqab33nvvvYMQvYvee5FAQkL0KvwdcfDJWBIgMAiw +531e9Ixmzsw5M4zm/OY973lfIiKHUw7VzsntW4JHXFH/JQ8SDGoK9L/0Smwzulu6aHA6LUd2 +2pJW2n+slYysGNkSPAIDAv39/clk8tLSEs+bE/l1dKr+bpHSgSKXHmTwAFBBoU0hqIDWD4QN +cBmCx/TsInRHxJpBsBYPWBh8gvWAYcDyzuweLNYqsaxP0yRDSj1VXDVeUi1ZXCXWxa+8b5Dx +qj7WeEb5wMFjt4Q9q+WWtZ1ckLNqqJNqiKPy2qyWG65IDa456F6xFYSK2OpdtV+r1A3bAA41 +uemucdFc9fwTzfMm2meecKuGkKmGEO9NYJeHF83M73q5PAizkfH3UI9SFNKt2Y5zKS6vM3i4 +a8a7ayX4GCZ5aie6aEab6dsq3FM5++M5cSmZsJiHADzYUcV6U3cdPCBUUOjT4PIGBoeX1K+/ +4BdnV4NutDCpAhYoya4tyaojJpMK40nEhPrtgoeYa82/ifi8+yCVI0kcBI+QsHJPP2J7zWBj +9YBVTOvnlhX/fs4JDcGIepISCD0c4EGoHpIOaPy1TjECld8blGhGt3V107BxPDjAY4oxq5fY +yS78uJTOmN0cPGJiYhwcHAB4LCwscN+ZzLIwFChsuj71GSZk+gEED4ANEDzQemjlAAiBFrCF +0aHAMjRogE+wxi2qDC6gI4BPVAYdhH9p6RizcimSeJAo+SAJpdK7qxwLIERGIzEioWFich5/ +DL6sBaCP+p/HDfXdsl4f8GBnp5UPfCrlZXHPhztXi664hYtuoLPOnqurXvBjGRu961vnalE+ +b6B92VJBwvHWQ9/b6i+qmo/aLbsHtx3AAsemW+o+YBeNi6aW0r6OKsGmdz1d1CO2m6sFl83B +o7Ky8tLn919t8PDQTgDg4aWT5KWbFO2SkxpK8HEI1VEzjI/9iO3ssfTLlr7UXQQPm4haABVa +JmbQuKGuqulk4cOmjqQq8LUkuwZSR1F6LSG+tiC2jhC3DfBIiKoKCykNCy0LDyv7T8XUn1/x +/UrcMzKiIiqyMjqqMia6Kj2JhCwemmZJWOfSvwhZG0Q0v2VYirjit3rFcDrtbZ/6P2DW/0a3 +WCKgMa96mHtWC0/woI1PwwGXpDrK5uCRkZFhZGQEwGN2ljOpysJQAwoURks0QmBwcMADDaN0 +DtAgHmwXPOTNEqBBA5bhCR5gGVQEjgkVOX7wI2O0Gf/IWim1eCn1lLuYBL5IxVXAplQ1w9Rc +YtfSMgt/GOKyHfBgZ6c1uetuJsEjO60ZOzstIcmrYK81zZfoqOvDZ3Zadq6Wx75vVDa+WUr6 +Scvq3yiuuS5jd03R+Y2iavAVu/W3ZaSThj4oO62hqLOjcth2s9Pis1o2B4/k5OQLx8RfH/Dw +0U8OsUqPcc9NDipICy8kD3wF2IO18nNS6RMbE+fLF0Vk5JXMrJ2s7N2sHNzjMwgJGQRSBxkL +HqV17anZRak5RWm5xem5xXHJWY6uXi09IxA8AFFck3eCyDHGmCNGVMDl4qxqIomMXDvyomry +o2sLYrYNHkdFndh6g61/FXF4/4rjsRvOx26u6xdAbzkj8IiPq8GCx1+FrZNT6lJSSR5RVWIe +tb/WKUKkAfXfHxGvedX75/ZsMp2WJ3hMT8x2D0+apHdvafGoq6tTUlIC4MHhX8qaYyKH0iEH +ISwY7Cl4WFpa8vN8gKQBkCA8g4S4AlABGmqBYyhwqAUBBvdQC+QKUBiNyyDwoNCmwHo4vAKH +WmC9fJ7I0vJKSnabsm4Ke2xFJY4bObAKjSEmdvmkZjL+PMSF36EWMWt7hSAHlWAH5WBHFQ6L +h5O2mJm1mqcA1EbdS0/y6VoAMT6y04pYS0nYXdD0vPDoRdVwV75lo3Tb9sJDd85NjzykJdZz +tbg8DLWS8XXXiFLGs9PuKngEBgZe/Fz6IICH4Q0ftasWcpd1FUQMEHjo3HK8KyHFka9BSEhY ++ooKNmS68k09w3uO9qqRW4KHt14yYA8fgxRfw9Qg8/Qo55y+totwzKUs1zPMK8HbMdhQywSq +xB1poAkhWTlxJTnxJbnxpZcvXRG5dEXy7j2k96XkjHTNMmLXo3PQmPOFMaWFyZWFyevIUZhR +TXy+DC74S4LHaSmvsJBSONQirRnhH1CMzdUSE1119r4PAI9zMj5Qz8v65mQ0IvA4LubK1juu +5s5ZfS3k4JzuX2mz8eNPT0rtUzq628c2mU67OXjwGcdjanKqvLwcgMfk5CT2nsQ6lGIDhe01 +ePAvAAng2AdUUa0wthXrOXigoRPoLwooAq2BWyF4QK5AzqUQPFKJrXAZWk6wXqmwFn4kKLpO +Sj1FQjVhc+TAjLzESKmliKvEegRWDo0w8aciPtSyNXhsmp32iair/hUHwajhNWfjW/xmpz2l +43Ekv+IP2aVI38opO5JZdP2+7Q1Zhz9kEP+QU4bdeiSn9KQenp12zy0eF49K7hd4qFwyEzuv +ePnMzfNCQueFhO/LKT0xt/EOjkYjHVXN/VnEamRwaB+gdwwy6juGCkpq2cMcwxO9I8zm7pGn +gMSVVMD/+rLIFdELd+RvPtK7Z7MlePg9TvU3SgNamS0HwING/mvw08zMqCKgWTHFWbHF2Wwt +YVPHc/DITSjNA5pYBjQ/CWh5fnJ5QXI5xImpuSXvkMLxyYWkpMr5xZXUkIqZuSWIHEkhFZTx +OVgMXPYdgwfy8SjOan3nvFVeaiMWPJCPRzWxq6aoq61qwM49D2vx4J7V8jfTcgAeQi61W8bx +2BXwWGWtkteEwfjJyxHrULow1MAxFHJAwAPiBOAK7ERXNNQC1oD1oAC2PCgMXUmxAcTgXFq4 +Eo3FgJVgd+x0WnBMfqJirrBYPf3jjt6lEqqJd5Ri+KQODscPOc2k2JSmqekF/NnIvxwu59KX +t/xvFTLdWUvU4omk/RNJBwGowV0bnas2xnxYPLRFrG4pOJ8zCBDS939BdbzVr1tJSzuc0/Pj +2HROz1f+ji2enXZPwaO4uFjoi9uCBA/Niy4QPMqbRwKj0529QyOT88ubBmvaR9ddLLqwLha0 +5j4aB3iw/SuGGAg8oIvFmn/FFKmlO7ew1MXdOyUjl0KfgeDh8DDMTTNuE/AIMEkvjNdhsf5t +uOfzcJuUMOusaOe8OI/8RJ+CRB9Cki8hI7w4yj4v2iE/xrEg1qkgK6o0O7o0B2hMGVAUryPJ +iQg+xS5IhTkXpnsVRbgSkaEjObiCNrmwbu6IrAFrdgYefzln+Q7Q80CtuPVdIbbGxlSFhJad +k/Epym398rbL5uDxoRkbPH50qhEweKBZLVPVscihFCxz+2AcHPDgFg4fDwHLwDDTwqVIRiMR +wMMOqOMnxw9VtuPHI6MMQmkv/nh8JcFDAEniTBQc4t1z4lyz91rj3XICLWP5zE6recn8I+eI +Nyrqf1dS95OW1r2ZVyZzzeykoc8bJbUvbCqpe4NYdUXREc9Ou6fg0dLScvarKwIAD6XzZrfO +yAmdunLuvBCxtq+saQSARzl7KiuF7djZTtkV8BiiTg3T1uN3AfAYZbAjlgeGhIPb4LaI1ENJ +I2fNCJ7gEWia3l5z/tmzn9FH34lziQy1yg6zzgm3zomwyY20zY20y8OCR6wzIc6FEO9amOBG +THAnQpwItiqCmHFLSIoyvh6eNCOoYmpuCYVJf7b6LDei+uUtHkWZLQAz/PyLSMSugIBinrNa +3hWyDo+o0DRLCo+s0DJP0nqaBMBD2yJZ2zLZzCkLgcdfTMoAeFzzrBMweMDbD+tQSo3V4b5X +cfDYRFy880Xl4m7Kx/D0I92uSj5IknyQWFk7dEgfa/h02n0ED8PrjgbSVr6mUT4me66+ptFO +uv7ql022zk573lDnqs3j646GV2y51O7JDZcNNtk+ueH88JIZZ5K4Whw8XkpIJNL8/Pp8OgqF +cvqE0J6Cx70fdS+cunbh4uXH5nYRyYSSxqHSxmFBggd1YpZMZeYSii2tbIWFhe/dULZW9+MG +j0j7qGnm7wF7gM+0AA/+wSPRowhyxdzCcpBNiaaOAegr0wPK0jyK4fqskMrs0MrssKqc8CoA +HnmRNS8JHlKPIq4rBdUVdualNgICyU9r5AaPL265GNulJyTUaponnZf1BeCh9TQZgsfxO64I +PP5sxAaPW14kwYBHRkZGfHw8BI+NHEoPEXigyKX7UntlTYenf8E91eCLd/3FFKNfnj0AwCjo +pOcX95JHpw/dY03AAcQqmgYBeNw3in29wENp3cfDSTWUw8dD95qNzjVrgamhqOOWPh4AHlSE +HmtcMOWp6hdMH26w6eFFU/WLpmzw0GKDh5d2LJ6ddteFnSFub8BD6rSmyNXrdyXvu/nHEEmD +RfWDxQ1D+wIe7OSwk+ys9EOU8ZCwyBs3b16/eNvbIBELHkFmGTFOEfTRd8AzbHHhl8Up+vyD +R5JnETJrYDUjqAJcYQAe4HO3wMPXl/jOecvirFYAHj9Ke6s9iasv6r6nHVWQ0YQFDxnd6Jtq +Ie01gwA8tMyTsCHTheT9sOChmyqnEJInGPCAkUsheAy7XuHpUIoVS0tL8BM+yD+ffUwARyaP +sy/jyLi7b+5VyQAxpZg7L236EFeJP3PV7todKxw8+GGPianDERHl5fvBjvbOh1fMLSR9beUD +bGT9re756V100L/siNRAxMngsuBUX8QJWztvFXHSu+yge8leb5sKdtEXcTS+6eaoEmwp7eus +Eib3o3Z1TVVnRycOHrslt4D802DXwSOvpj84viAkoYBQx06VckDAgzE1PzE9z5xZKC2vmppd +5ACP4KeZ4TYpIz2fw3kutJEPcsJc+ASPZK/iZO/iFJ+SVN/SNP+y9ICyjMByAB6ZwRW7aPEg +pje/c87SyS2vltBp4ZB57IYzdC41tEw9dtOZI3KphlmisV2GnH7MJuAhEeIOznRk4n+HugYF +AB4wVwsAj9E4Q+RQOtdbtV83P5/TaTcSA7csNFVW8NI3QFlZWR1nTNPGJ+OSqi7f9bl2L2zH +7HFXOVZCNf5bIZP3PpY6JazFUVcqsRXGFYGesUjAGjT5F7rIQkOQ4Ief8Oy0e9oPDg8P2z12 +c33i72q0psb+zo99D6ga+rB1fXldnbatPs5PfN1NA8CZupkEWOs79/T2kEfIArvgr7xYWVld ++VRpt8BD9pRxTjXKSj9g5RocmVbKD3gYWToLEjwmZxbWU9LPLVo/8nXVj4DgEWKRFWqZVZn9 +YG7mvyB+DLR9n+gZc0DA46iok6phbE1BR3hY2TvnrZLjatCslrP3vG+oBEPwOCfj88Utl4+u +2GuaJW0OHmbxpG7a/7Az19A19xo8aFSakJAQoI5BQghyKGWWhe3jzc9nALGN5J2L1ruYzW3b +1u/ekbn55frmwa7esWfPVovL2tR0Ii6I+YjKRm7L6wMUBshxSz781GWLv30s+cFn909f5PS3 +QZOCsVFYAYSgScEQQuAymTa5s5irhwg8RsenvrvvHZZe95qAx9TkZDGhpIRYVpBdnJqQnxSd +mxyTmxKTlxqblxYHNP8AKWhSbN4Ly7HsdvKj7JIxucnROUkxubkZRWXFFSWFZYX5RYWE4snJ +SX4ya+PgwadkZmaePy768uCh9L21yPd3r924nVBQD8EjNrvmyFt/5BM8vvrmlLGl876AR0xc +grDwBetHPgg8Qq2yY5wSWspvrSz/HDzSwGdDsUycS+a+g4fko3DkXIr02E3nH+95g893haye +WKcB8PDwLSzKaW2rGoBDLX8VtsYq1sejv40yOpAOznF19ReUgdJdAY/mFkpuYSd9fIoDPDLS +M/T09IYbSzpU3tjEofQQgQfqczeSTZgEbRpnzu6s9p4+yvzCytLScl8/ZXB4fII5Mzs7n5xW +I6UUePGu/23FaH7wQ0I17o5SzPkbTp+ceACo4/1P720EHpA3EF08W8tnJ2+WgKKXvFbg8bo5 +l7a3dygIG2hdZM9j1b1q++S2o76ovZ4oJiPbDQdB6pYZ4kDb1ouJ7lA1LljqiNhoXrQyuOYg +/r1KVXUl/0nicPDYUqanp7//7tTdf5i8DHhInNQUvnjZyMotvawTWTy+//GSrKpOdkXnpet3 +NwEPZQ19r5D4lPzq377xZm5po+DBY2Z+aZg8Ki0l424YhcADOpcme4cNdX0NTR8zk0dKU0z3 +FzxQHI/E2Jq6wk4SsQsbxyM9iYQNmQ7Bw8Q+w9QhE2vxENMIw4LHQPvoNFOS7dky/9lLgkdz +K8UrsEJBO0laPV7/aXZ6dts4fQaBh4mJSWxYQJfu+8ihdHVpn4fIXwY8UBAwOAYBFmAvDKN+ +wTWwAIoDBvPYolhkoCv3jCk/8oPZzgZrRscYcwusxpahnLzqsKgsyhhzemZuhEwjU+huPjm3 +7vtduxe6Ns02ZgN3jjhx1TgRce8vTmm/94n0e59IAeSAupHFAyaaQacD1gB8Al+xp4yDxysJ +HtC51E4+yPkBO0mcE1eSOP1r9gJKEnfFVu+qHT9J4h5eNFNZSxKn88Nj7dMvqM7pxzBJnM5p +HpvWksSZmot7uaqH28r6ezyMUhLS21aSOBw8uCUwMHBiYoJjtOXWR7o7Bo+73z28fOV6WGpp +VmVvdlUfBA9776h3//ZhQe0AoA4xaSUseNh7hpnaeKQVkiB4BESlAeQgVHU80je9dPXmvoDH +7PxSQ2PLJWERjyfRWPCAzqWFcZaT9D9B/KAOfZwb4bvv4FFL6OQGDw4fDwgeKI4HAg9sHA8I +HsNdHSsrb4Kzm2Jo7Qw8SPVDjl7FkqqxUupp4irx4F1b8kGSlHrKwyfp8enNY7QpAB5CQkKd +1meRQ+ny5Oi+/xZeBjxgPwsjfcFkLpA9oCME5Aq0CXbNKAdcKrEVYYm+6wth0vmXxpbe/sHR +GlJfflF7HaljaXmls2vYNyhjZmZ+dm7B3TdbRSv0xr1AUdkIDscP6M4hej/4GyHjDz+XYQ+v +rBk6tgQP+AmJAjQYLsPrQKFN4eDxaoOH7h1rW/lAc0mvp9I+Di/majG87qgnYelmEOKmH7zX +6mEY+kTOVu8aP0niDHUuW8lKO13TCxLVeUGvaweoitmr3nEECxybrukEyko7wyRxDspBpnc8 +XNS2nSQOBw9u4chOC2XHQy131qgjMrMys7IXCx4yKjpAg+ILjrz1x5yKLrkHupdF7+ZXdf/9 +o0//53/fFb58w9DcMTm/5h//+qyqjXJbUlZKTjWntPHPf3l3v8BjbmE5NS1d+PwF1ychPON4 +kAqVlhZ+CfGjv/UcIdbjlQGPwY5R6nAkPLUJquu2wKOqesDWvUhcJYZXlpAYiQfs8Faq+qmZ +OfWBcscPgkPpXgy1QLqAyVmeYbLFYXttjvUo421jJ2VnwUDq6nt8A1Nj4nJJDV2tnZSmlsG+ +gbHw6PyhEfrc3FJeYV1pZaeTR5a0csDFu3635KMADUJ3jtsKkaevWH/0pRIaW+HQTYZakMUD +nhQK/w44BIFHRz8VoggOHq8WeMAkcR5mEl48ksQpOSZ7FyR55u+1pvoQHbaTJO6koc+bpaQj +xNqftKj294RKURm764pOvy+oBF+xW98sqvnewPt5kjh/Q1EXJ5VtJ4nDZU/BQ/xbLUAdERmV +GRU9HODx9ckfTe18DC1cT529VFg3+Mtf/Topr1ZeTff0uUtoqMXC0ecPb//J1i3QxTfiq29O +1XaM/urXvymq7dwv8FhYWiktrRC7cTfCLodnHI9Ej5TOumuwgwY6O3WkuVwuOzTmFQCPwc4x +xpgLPC/GmA8/4FFW3mfpRAB0AdDi7maJyUBnlyirkeiqeL9U4a8APCZKQ/m8V/d6Ou3uggd3 +mlrs184BGk/wgPaBHYDHyspKQ/NgcnpFSERODam/sWVwmDweGUsgj9IJRbVRsdl+gQmxiSUl +FR0xiRXi8v43ZcPA/0L4lutn36gD5HjvE2lu5AD696MKP1423Ag8oKEDJqNJJbaiISSwFa4E +y7d1I/jPMnNIwWN+cdkmqLC+g/z6gAdMEueoys4Qx50kTuu2uaWqu6XKnquVqoeuxDaSxElK +2p3X8RbSflE1PZVu2SiK2YIFjk3ntb3ALs+TxIVZy/i6P9p2kjhc+AQPNntsHzwSiW3R2bXp +5T3c4PGnP78TGFcgKacuKa+ekFt75K0/FtUPfnPqrLGNOwKP+0qPrt6UUNbQT8mveuvtPwHw ++OfHn4XEZuwjeCwusZaWWZnRxVGOuRvF8cgIjGyvEZuf/S9EILSRT+oI+ql++YcaPIa6qJPj +htDRlD4avRF4gE9icZe5fYG4ShwbOZRj+ZytKf0wVUY5yMXYsX9ogn8w2NMAYnsEHjA7LRw9 +mZ5dRIlodxc8kLR3jsYllpaWN/T2kaPiCFQaMyevPD6xoJbUER2XPUabWFxaNDAOPXPJ6ptz +T97/RPq9j6V4IgekDkk5G+/AdI4qwLmgwSCYmwbbYDii9GwtnQ1YcAwrFvxjDZ9OKwAfD5gk +zlk9lCtJnBs7SZyIgwBUT2R7SeJ+0HJ/O7v0jxnFGC15O61Q9L7tTRmHt1MIf8wswW59O7Po +lK7nSyaJw4VP8FhcXBQ+Lib+kSn/4JFS2pVa2p1W1s0TPKDFQ9vY7twl0cK6wf/67e8yipsf +GVoIXRaF4OEeGPfI4Omf//KurVugV0j8Z8e+OggWDwgeyyuslMDCLQOIlabYDrSdX1n5OcQP +1srPBzuECqKjDy94DHdTpxhakD0mqCEc4DE6zMjN7zCyzlvL7pHCJ3JwpAWRfpgmrR7vFVzV +1Tv+qoIHyk6LEtfCeR97BB5AenpHXTzio+MIWXk1ADxS0ojEkjrKKD0mnj0QA9aYWcecPGf6 +8VcqGxk6PvhM5u/HFDT0vBYXlw/jY03w4OESUdJPZrwmvQYfSeKeGkk7GEk77rUaSzsaitvq +XLXmL0mcpaiS6xmjoLNPAl9QfV/1a1aS9xzPPA7g2HTG0F/ujq3myyWJw4V/i4ehoeGVo3K7 +BR4ScuoyKjo+EZn//ed3ciq67kgrid65n1nS8snR43//6FPhyzd++8abgD0AeJTU90vJqYpJ +yuWUNr719p/20ccDCx4rrNUQywx+Ipem+WfUFejRRj6B+LG0+MvuBvGCmPhDCh4jPbTZ6VvP +J/KoQ/AY7hvPyGw1sMhh+2yo7QQ5OMJjSqunST6Ic/Etbe2kHl7wQLQAX/mx+WThuz8gDR3n +TLQeOkLAEOtoFxhui59ctJvLBHMut6DRO4CdqL2zezA7t5Q6zswrqMwrqKKNT9q5JJ88b/bp +iQc8nTo+PCr/96Py9xTtZ2bmD+ljDffx2EfwMLhmb6rokOCZF++Wu9ea4J4XZBXHf5K4jx3D +f19Sd6Sw5icl1v4hu1T2mtkpfe/fE6vZrh2YTb8vqLyq4IiDh8DAo6ur64dvf5T4lxk/4CEl +orU5eFi6BP/rsy8LagdOnb0kJf8wt7IrLJEAZ7UA9gBPiYTsCmJdX0ZRQ1hiHoCQ7JJGY0vn +s8IiBwQ8mpqab16/zX/I9GSv4tyI2I7ae8gBdYb5P8Ndws3l2qVpoYcLPEZ6acxxu9XVX6xF +jz/R3typZZItqZYMdFfykaHpnGsjNTH2XiUNrZTDCB4HUAYGx2vr+9NymhJSa9o6BuMScgqL +ahmM6ac2cTzB48PPZf9+TPHcFf345OKVlRX88YiDxw7Aw/C6o76UpZdxhJdR+N5rhIO278PL +pnwkiTPQvmJtdNXhySXrJ5dsOFXU+ck13puMRDdIEteBg8fugwcQU1PTS19K8AMe8jL6m4NH +Xk0/AA9tY7tUYtPHnx/HTqf9w1t/+p//fdc9MA5Op716S8LWLRCAx1tv/ykhq+TgWDxkZGQ8 +7QNjHPO2FTI9PypuqFN4afGXyAMEjsLQRz/raZStI7gUxhMOPniQ+8bHKVmstTm27e03bslF +ikiFiPEXk2p7kbqfO4pYuxJJzRQcPHZFSA0Dnv75Du5ZWXkNzS3dE8wZK/t4AB6ffK2KwOPD +z2UAchz7TtXJPYHBmMIfjDh4bAkeDkrBGyeJYw9/CChJ3FVrQ1GnLX08NC6Zqwg9eXiRnQyO +W9Uv8F7/cC1JHAQPj50miVNXV3+ZXAyvG3gsLi46OTkB9pD82HwT8JD56uljS9ctwSMhj3T6 +vAhH5FJHn4jzl0VNbTzOXriKjVx64849j8CYfYlcuhF4lJSU3pOQzYoujnbK30HI9PyotNLU +wNoC69ZKzd5mCXLvOcbop3Mzf1hl/dvy4q+mme/QKcdHekX6WuTbqk1aq6zqi/0aSvyq81Kr +czPLMmr2HTzYzqWDI0y6+9Li+6Nj9TmEJnv3HIVHUTdkgq/fD7utuKv4oRwr8SARgI3swwht +o7Dw2HLBgEdiYqKjo+Mr+TNfWloZGPqgqNRuhDIxRp20cUyG4PHBZzIffi77vbCOloFPdl7N +OH0SfyTuQJq7R/9ywfqJR85rcr6gyzBWsndQ93PSCnDSDHB8FGCp4GGliFVPnmq5B7p2WI8N +VWFN2cue68sKHhbbVLC7jaq3q26wo4a/m26I/v2nLa3N/X39fF4uPI7HtsADiqur64WvxDYB +D7ETGnZeUVuCR37NQEHtAEeSuE+OHnfzjy1rGmHHKS1v268kcfyAx/z8wukfTufElaQEEHcx +V8uPOgRFZ18FhZ95ev6MRPoZ1jDygpGE9YtJ+lGglH6J4W7lvlajtprg9tqQ3QWPoa6GscGE +sSGgidThRCbNbIqhNTWhNT2hPcNUW5z/enHhxNzsqaXlkf6h8a4eyvLKckNTv51Lxo17vhfv ++N+Sj3q5jKgx4qpx4ipx16T9vxUy/vsxub/+SwK8kus+8RMMeOzuKzDy3wjPIPEMCAYdP3Yl +twu3VwkvAZdO6hnb5YPi6pX94yXLT0+ofy+kGRaVN7+wiD8JXx8JDAx8ScBeWloiAxn5SSlk +ysgwubdroL66vTS/vji7tjizpiSrpiy7tiznJy3dB61ZU+zyZlqSXV2UWV2UU1NGqCdVt3W2 +9w4Pj5DXZGR4ZGSE/QmWwRVYXubX7xoHjx2Ax+LiYl1d3SbgcfuEmr1PzA7AIzm/DvQj4veV +7ytq/M//vusVmnSQwYPFWgX3DwCPzIji3QIPQB1AwUXIj66lMWYLYuv+4z9+dvLkz/T9rfvb +FAbaFRhjXzPHjy4v/WojINlIFxf+OMP8cmZyXWeBTgE9DnRuGqMzx6HzxrZ0ebmlp4/a0DIE +75CVlZX2jmFnz6zbMn4X7vjf3Al+xEisIccVSd8T543+cUz+bx8D5FifcKFvHCBI8ECBsLC6 +3YPAWSpwxgo8AoQQCAnYMjrOmS/fZo55NJuDB5Syik6/4Jy5uQX8GbgrUt9Bnj8kM4B2tx+c +nJzr66bWlvcWpDRmRddkhlXmRVblR1UXRFfnH05ltzwKvBVWgXPJjKgipDX1do6xVlefn/Hq +/l7w1wQ8oOwFeMir6X7x9cl7ihoAPCRkVLSfWAkSPECPv0PwiNod8EDUweHjAdbATVgfj6qc +8uaKwJbKoMGOh8PdyuMUoSnGsdmpD7bLDJsra+XX87NfLQCdA/r1NFMeWTymJh5PT+gvL/2T +HSptrmhxcXloeJRQVEdnzOQQmufm2L3q0DDNO6Dgrrw/OzamAn/4sRY8U1wlVkTC5+uzj/9+ +VHYtfuYLczwFDB4w2YqoVhiMbQ6/vgx4ANJAwbU4MGYHodF3CzxebTEyMiIQCAKrDlAHuP6K +FomvCXhQx6j+bmGhnrFeNuGW2r7mmj6W2n62ev52+gH2BgdWA7erDuBTPwCcl4WWn4t5aJRf +UqhXTIBLhJdTwPDIMJVKxcHjZcxuHLlaeAqLxdoIPMRPaFu5hW4XPPIqu/7rjd8B8Pjk6PFP +jx4/c/7y2QtXBQAesE+HPT5a5hM8JO5IA/AA+vLgAeutaBl7tjb1D8jU7AIAD7gMqoYFduxc +2lGb09sc0Qe0JbK/NbK/LWqgLXqwI3qoE2jMUFfMcHfsSE8suSeut7l3cx8Pct/wBM11Zfm/ +IZzMz30P2lxS0ZVX2OgXmOjmGU1q7AH4wZiYLiptnJ2bGyHTPXxzb9/3uSYVeFMuciP8gPG6 +7yrHXhb3+upHfZglhOfsTgGDx0ZdOSQQmI5kenYRRs2CZIKGS8IzSGANwAkd50xsjA54HBhF +HKV04RgfAQtgL23HdI4aKbQpsF7eLAHVAneEVePgwftU8em0e9kPtrd3KAk91r3k8FjU8ckN +Z9M7rvrXHPSvr6vBdQfD604G1xwFo+y6rjui2jfUaw46V211rtiyP7n1Cu9Numub9K7aaV+0 +1b9ir3PR1kjUVeK7BxVVFe1t7Th4CECmp6d//PaS5FEjTufSr58aWrhsFzxUtYz+/tGn9xQf +uvnHRiXZaRoYfnni+2JS/56CB0IONNQCO3qwkh/wyI5lUwf43C3wAFc1LbICfOZH1/7suZDH +Z7ktHvviXEru7ZpiaMHJLEABe0wy7Lva+2tJ7VW1nQUlnZSxqbr6zt5+yvz80gh53CcwvaG5 +l7W6Sh2fDAovNLKIl30QfFUqQFQmnCMpqrhKLACSi3c8vjytC9BiI+Q4UOCBHXkBRAHDhqMc +JQAPciu6YKI3lLIEO9Ty7HkGW2wSW1QFBBWw/p2L1ig7LdwR1gK3ovVoJUpPj4MHDh4C6wfZ +uVrErO0Vg9nZaR+EOKm+GLn0hqvuNRvd6wJSnWvWawHbt5hOqyZszI4hds5Y96S+7vcYXfv6 +SMj0kZCJ7vcG3Fu1zhmrXTC2kPR214iwlQ/w1IxWEsaz0wpUwsPDz3576d4xc47ptGoPTbcF +Hrlr5g4RUfFPjh7/+OO1NK+0fxe5+uFDXdO9Aw/Ym1MnZqem5wF4zMwuYsEDKJ/gkehT+JLg +AavLCa8qbx7Li6yB4FHROAotHnDr/k6nJffVzDAlkfvH0sLnEzRfGLm0p4Pi45/hF5iam19J +pU329NPikqtrST1kCt0vMKOhqZc+MUMbZ8YnF1bWdsWn1jw2j5N9EHTpjs8thai7KrHQ0HHt +XsAXp7QBbGyOHGz9XAaBx16LpaUlmvXGEzyweWNR1jPIDOEZJLeoMuTLAUdqOMCDYxlVAUOb +wn2L6/pQLQhynr0Y5hRVDWpBqWBx8MDBQ6DgwU4SF2B618Nc0suBM0mcg+E9a/+nsf7mMXut +gRbxZiqOetdst87Vct5Q77L1bRWP7zzSTrqlYvU7l2Q5SUdZaZfvXJI4Nn3rliKm4vHoIjtJ +nJ1igNEtN2fV8LUkcbV4dlpBiqurK2CP+188xYKH+LUH2wIP0Tv3wZPh/GVRYxv3xBwilf4p +eFQMDf8/Z8/938zihr0AD2TrAEJjzjX3MuiT86P0af7BIzu2GILHtuJ4cIMHtiWpEetZWaOi +S0BFYM384sr+gsfoQPrc9Hnk9TE/I0QbyeRIEtfZSiEQWoLDcpLS6+ubB6vrOodGGBPM2ZDI +3K6ekZa23tCIjMiYLG+/2OCwjJyCeiqNGZ1QdkPK/bp0wG2FCKFbLh8dV94SOWBkiQ8/lzUw +CRbMvY2N47GRxQNrEsEaN8BXRYtEZKzgdi7dBDxAMWS7gCHTYVY17sLwgPJmCRx2FRw89hc8 +oI+HilXy6wUe8oFmkl5Ppb25wcNEwT7OPSfWNWuvNcEjz1bLg9/stJcsz2t6/jWJ+Ld4wk+a +UPjX2DwxKVsxWUewAL5it76bQBB65KG5Bh62Cv5Pbro6qYapbDM7LQ4euyJmZmbnvhWR+fIp +Ao8b3yj4xRXwCR4ewUngsaCqZWTh6PfF1yd//otf/PaNNxWV/3t2lv1+XVz65/ruht0FD9iV +jzJmqtqp6LkEhH+LR3RMTIBrxMuDB6KO5LCq2fll6M5BrBpOj6oEywWxdevUsR8BxGjDngtz +n0HeWF39xQxTktJf+0IcjxdztfR2jRUVtccllnv4JmbmlLe29YVHF3R0DQ8OjyWnEbNyykco +4/GJeQ2NnSzWKpXGkFNxP33B4puzj9/7RPq9T6Q2RQ52/EywoKzhlkeoIxTVHzTw6BygocT3 +4RkkbvDA+nhsCzz6RxhoqgtP8PCMKUcmEZh+7nUDDwptCpwyMvscBPA4XLJrSeIUgpzV2EMt +HNlpH4s6a998aiLjZHJ/z9VUxlnn9lNDUQf+stNa3ZRzPGEdfsIy7Ce1Cj9hESJzx/q+uN2J +p8Hsr9itlmFgl0cX2SHTXR+F28r7e2hGbzc7LQ4euyX29vZnvjsvfdwUgof0CcPb4vf4AY9U +YtORt/6oa2Iv/0AXLFg6+cEkcSFxOY90jq2w2BnWVlb+X/K4JqlzYNfBAzZ+kMl+ZNEn16mj +f2Zhc/Do7e07d/ZchE8CAA/+Q6ZzgAesgjm9OLuwHB1UCatOiqiOC65A3h2wjIAjl/Y2A7Cw +Wl7603NHjjcnxzWHuzt5BBDjlZ12sIdWXt7pG5DhF5QRm1g6QmG0d/SHhKcWldTRGVMJSQUx +8Xl9A6O9/RTlhz4/CJsf++7RxonJ1pHjH8fkVB+5Vda0C/iu5h88ICqAfh86e8CSblFlEAkA +ivD08UDLoAD0TUVVoIOYeOWCBehxyhM84AKoJZXYejAtHnAACKscSWo4LilHSaBw+ImjMEAy +dGTkSwMK8wyEgoOHIMBDMchFg0fIdHaeuOsuepft9UT2Xi/bG1x12jxeOtbiIfzA+f2IrA9C +MzCa+X5Impi07V0pu/eDUj8Iy8RufT8sXUjDXfPiWsh0dnbaneRqwcGDW0gk0vz8TlJBRURE +APZASeIufH/9sYXLluBx7pLoz3/+iw//+SmgjtjM8pLGIQge5c0j1i4BR7/436Sk/7PuV7D8 +Zg858OXBY316SAM7/nZZM3V0kAnbD5bB0wl8wgIbOZfOzM4rKipZGtnDoZY4t4Ltggc8fpIb +sZc8FRZUmBRUCcAjOagiJawKIQdoDyxGiGPnLRUMePS1kBhjGqyVXz/PZ/fuONlpsGNgw8il +vMCDMTY1QZ0aHWZUV/f4BeXWNw2A9pdXtZaWkWZm5onFtRnZJQNDoyMUupZByCkh8y9OavJO +TLaGHP86rqCp711L6tyX3wIHeEAX0I2GWpDDJ/QvBSUbOykoCy0cDeEGD3hYCAnYKiDAgK9H +fjCDuWt57giKgX4Wm+sWruRu7T6CB7wyPJUjaAnytuVWsAnNQYby7X0vniXhRd5f8OgnM45L +eLhFl7924MErV8tjUSftW08tlN0tlPZcLZXdTWQdNUUs+MlOq3XZ4ryO9xduCV+6xP2krvHH +7SNVr1pcV3Y9xl4Tj9ka/4VTjLSE3UsmicPBg1v4jOPBLaurq+w4bmQyBA+5byyvnLuZVNS2 +OXhEppU6+UQ7+0ZnFDfDXC0IPMpbyJ5B8Z7B8dlE15nnNv/pua86BvN3DB6wNx8eXvflGB2f +GSSzwaOoYRQOtWw+nXZ6Zl5LS0tV4WEWmzqKM6OKox22l6vF0LoIHD/cqSzJvWjdyhFUER1S +kRRUlRRWgagjLLoUgYcALB79bYRJ+g3kOzo/89XYYMDWIdM3Bo8J2jRzfJpBnTQxc4yKLXD2 +yg6LrSyrbM/KKQ0OSxkYHB0apqk88vtBmAd4QOT49ISSgUlQY0vfPv4Wtpurhee7Nj+RSDcq +A17zx5mzO656S8cHAYMHdvYNUmzLsdN80BQhLHugktB7E66E84gBw8DyBwE8XkPn0k3AQ/+q +vbmyU4pPYbIXYa81xbsw1C5J7ZIRP9lpAXh88zTk/eTi9xOIP2li0QdRuYrXLS5oer2XWAi+ +Yje9H1cgJueEZ6c9OOABZWZmBrAHAA+lbxxUvnN00Y7cVsh0DvDAxvEYGLVeej6Rc3xSsrW/ +eVvgsY4co1Owcx9jzI0ymHCZSCKPT86hoY2NAohNzcxpQuqIKYbgwTZ3bHOoBYIHqCvClTg9 +t8S2eIRUUhlzsCUpQdVTc0sonAi4nntq8eio6yL3uk0zzyLf0SnGjaGuHH5ztWwFHuTnUlHV +GhRe+MQiNiS6srNneHJqdnhkXOWRLxxqwSQmkwPI8cVJVRPL0PaOwS1vNktLS/DMPDjgcdhE +0OCBPF6gXwpU7olCHCuh4wqHNQOu5MYMgGooJCwOHgcEPAyvO+nefeqo5e+g6bfXCmqxVHXT +EDHnJzut5mVLk0u2pmefmp7jUIvH1x2NLttyrWer0TUH9YumnNlpcfDYV/B4thZbzMXGS/4b +a+VvHDTPu7npRW0XPJQskwF4OEWWQ/CQNIqDzqUN3R2X1LXhi/kK6zejDEMNh+TY/JbNwcMl +sQ104jTm/CB1CoDH8NAkeXQdOfrJk6MDTI7RDZ7gMT278Jw6iiB4JPoURNjk7sDHAzuNBUl2 +WFXS8+ClgslOSxvWXGX9AkUonaDK9LeVby9J3MbgQSXTyRhhMpmASHv7aVHxFRXVPc/YQWDm +NfSCTgk9B4/PZf5xTPHr0+rWDtG9fRT+wQDPTnsYwWMjxuC5EvrPcIAHRySTrU8VB489Bw+b +jbPTuhlcd9S9Yqt7xU4AqnfV7nkcjw0VgIe2iJWasLHGRTOe+nBNN9qkedliLTttpINSEDs7 +rTAOHvsPHkAqKytPnzwr+a2uyreOqt85Sp7U0TS0SCps5gc8xB/HmvgU/CDv9zSAeFrBD4DH +aUU/NKvFIpBo7B0+NXsK9phP/c5nlPpsDh5sh425pcJ+5uDYzPziSn//JPgcGmbOzC2t4wdz +ijI+Bzv9iWm2fws3eIxQxjQf6GVGF0HwSPApCLfO2Rl4pPmve5amBFXMzS8vLrGQiSM3ohrU +DsADfO4ReAx0eE9Qr688d+SYnTo+NmjR3diyk+y0vMCjqa5VTlY+JCQEUQfnM6pnrLKmp6is +7YF26JmLVgA8Pvhc7th3ao7uCYPD1G3dZjh4vALggY0SzxM80KgKdlwGzhJCM4kOJnjc0Y88 +FPcBiUQqL38pd5T29g7li4+NbrmYSbibirsb33HTFLLSFLZGqnXB5icVfv65h2qtuZVqX7DR +vmD7QsP4VrCv3lV7SxlvYzFXKxnfez88rK6p6mzvfIbLvoIHkPr6ejExMdHvZFW+s1c+aXvt +e2nhi5c9Q1M2Bw8j73wRjbCyphEEHg7hpUfvuh6963ZdM/yBbaq0SbyabZq6XVpLb8TC0l+t +Ar76Xlb8pIzMCWn9/OoibvAAvfk7X0sC2ICMMTw6NTLAHB6dpmAMHUPMmdFJJgIPnhaPjCgi +oA4IHvHeBWHWOS8DHnA6LeINbHbavMiavbB49Ld5Mcauryz/Go2qTFBvdjfUbity6ZbgERed +ICIisgl1IOntpwaFEm9Kupw4o3v+ij6hqGFnYICDx2EEDzR6AsOdbQIe07OLPLkFSyNgPfK/ +PSDgAVs4Oj71mvQa4+PjUYFxsYHJbA1iaxx/Git4DUxiK3Y5MClm25oYG5S03v7A5MiAWMoo +hU6n4/yw7+CxurpKoVDAj/3syQuyJ00efO/88LrlZeEr9+VVEwsaNgIPRcukvKq+KxphADy+ +lvb8ywWbq4/CQ7MaVG1Sw7Mb/ZJqI3MagVoFFUHnUkN3g5C0r2rbjgAFT5eZ+R8odL/uYQoW +PFwT29CIRv/AFGV8dn15lNlPZqLen85k2zo4wINYXGpt7JQRSYTgEW6bHeeRH2qVvSvgwZ2d +dtfBo7shbJwstrz4O0wEsA8p/Y+76kt2EDJ9E/Do7x55qKYhKytbU1MDkYNKpc7NzW1+kwwO +0zNyaumMHT6fDx14iGqFocjqYBlN0wCdFHbO6Y48RQ8BeECX0aN3XNFXDmDYxLmU+7LAYLBY +19NNUuwRCIRdeazhwlOWl5cnGBMTdIwymAdVJ9YUu7xTXTtTxpqCK7CysoLfCfsOHlAWFxez +s7NFRUXFv9fQ+NHF/kG4hpzB+bPC+qa2yYRGnkMtSpbJJj4FMXktQen1IRkNR++6mvsXAvBI +JLadUfTPq+7Nr+79UckfgoeGfXpsfsvgWPTk7NWfcqqyfjM5Iz00VoSGWuYWlgFmjDHmn2c/ +mR4ZZqKQ6TA7LczVgsCjurb+iZHxVZHrbjb+EDyCn2aGWGSFWmYdfPDoJIXSRm4vvcgb5F7D +jtqil8nVshF4xEbGi4iIODg4IEPH6OjoltSxK2BwuMADpYRDnSboTGGAdDhqADaB3pbnvIxX +ADywik1yxw0eHESh45zJ7TLa0U/lPjIM8brvMjE1b+qTxx2oBBdcnq1lYnV0dMSvw96Bx7M1 +X9ORkZGGhgbQH6n/4GJwzcteO0DmrpLqfS1u8IjKbfqLsHVZ04i2c5ayVYquS3ZmebeqTQpA +jtqOUQP3HItAYkBynbpdWmBq3UP79LPKATKmCY8c0o298zuHekcZ9ovLf0W97dLy32hMB9ek +emTWwCpo2xiDPVeRAzxSM7LkFRSEhS480TZPDs1LB9QRSQy3zT744NFSmTg2KLm0+Aa6Aguz +fxkdeNBek7MrSeJ4gkdNeb2SklJ5eTmiDjqdDv7pArhXDyl4YLtjFHoUO46wd7L2f1mFBkl2 +QNpnUivg6+qzdWWtKXvbytpasLyyylp/jwNLu2LxOPKDGTxf7phgHBYP9HUTRw5oLMKyx1bR +SwQ0znKInEtxEbDgcTwEAB5Q5ufnwVsw6JUennaR/9HUUi7I1yw+yCY5yDYZgEd8diUEDxGN +UAgennHVADzAJuhcCsEjIrvxulb4PZN4wCcP7dKsg4ti85tj81viClrOKQcg59LBUeLkjDSL +9RvY+S4ufzDGiOeZnRaAB9biEZeYcumCyO0bd+1M3NLCC9Mj1jSSmBxECLHMPJjgUUso6iS5 +UgYkFube/sm+MfsXSr9qW3X27man5Qke2Nkr4F88MzMjsHtVkNlpdxE8AGzAKKMQNmC4dUH1 +mGycYEzPsVjL0OLBerbyDJEHIIvn1uK5+YWpGbbNamVpcWCENr+y9PIWD3i+PvGV3D4bHOCB +oqjxwx5AUNTWbU11wcEDFxw8Xm3wgG9bQMDrsAiQU2KPLts7qkfYKIUG2ybfE5P/8cxZVQ1d +W4+wb+95AvBQtkpWs0v3jq9xCC+9phlu7l+IZrUcE3dr6KYC8IjJb0ZxPLDgAZ1Le0dGxxj+ +cwun10N/s34/NatBYTRvBB4pIQUulr4+9qGpYYS0sEIAHinBhOTAggjH7EDT9CCzjIMDHtW5 +eX2tOjTyeSxssO0b82+PDUo2V2TuenZaDvAY6KR4uftirRxzc3MMBgMaOrAhrzlCU0JPBmwn +AjsXMm0SLfM/0HAYwQPrEol8EtAcjc0dFV5e5haWYhLyOtkTlllsn6iZmytrRMFiLUEmAZ/z +i4uMybnlpaXwTGJ5M3uGYHVbj71fDH1yes1O8rLgMc6cRddho8iliMGwET84IpdyCPYa4uCx +LXn5WS244OBxYMEDyeLioqurq5CQ0M3TsqrnbLSEPLSFPbyeRj5Wt7x3R/6tr5Ru35U8dt3U +1DPj8zuuADyQxcMioFDaJP6dizaAPW5oR2wOHmg67RgjennlvzHjLx9NzdxsblMMCla5dEFE +Q1knJbgAUAfQ1FACW8PAZ2GcZ16IZYa/UVqASfpBAI/yzLyWSsehznvM8aNY2GCxfjFJPzbc +o9xckbgX2Wk5wKO/nRwZEisqKqqpqQmHz7inrkDeAPwAJy9gE8cjIMGCByiDwGOjkNevmMUD +dEywO0YXB6xBcz22nKOxEzMHe0iFZeQQ7R+ZvzaCsgJunlHapWE6s6yiDRDj/OxyTzc7gsr8 +0nJiZkV9W/8glSqu69g9wp7j7BqZq2IRBIrtgDy4p6UgSEBpaDYCj2cvjtSgleBa9Y8wsLVg +Z8rg4IH3g/gFx8GDW5aXl5ubm62trQF+XD8tpXreSvuCp6tOTJBN8pdX7Iy1Pd87rasgaxKS +0XD1Ubh1YIGQvMuPsu4PbFMjcxphrpaHdmlfiLudVQ44t6ZfSrhvHrm0uz+gueXLpaV/w/ba +QBnUD3tar5FKtQuSgwB1+OgnB1tkBBin+z1OBdSxv+BRV+jT0/RgbOjs/Oxb2DYvLrwxOnCj +q8G8sTR+77LTcoBHR0Ofp4uPiIiInp4e1tbB7cuNTTjC8fYK3+ixfetrCB7YE+cYbtgjfw/o +xtHU1XtCzGx0YhYs51Y2s6l1VcLaN7G5a3B2flHXJvaEmHlSXiMoP0Cm6tqGrjxb1naMdo/J +AWtG6NOf3DKg0CdXnm3b6rF5HI8to4phZ84iCwnY652L1jDBDdZZdyP/UiMjIwKBILB/9OFy +LsX7QfyC77sEBgZOTEwIoKLV1dXp6emenh4vLy/wBv1I2EXnopf+Ve8vz9q46cRYGUaHOaaG +OaVpaYUE2iVIicmeEroH/l9C54Rl5JVk5JW/vfpQQdsSWTxE1APsnDzsnD3tnT3NrezlFVWA +KiiqWFjbx/vlJPjnBjnHGWiYuFr4Z8Q41pep9bVfZNLf5YCQleWfk3v/QSJezwk3iLL3Fzx4 +lCSnNJVaDHaITY7/k6Nty0u/Yox9PdCu0FTqX5pG2rvstNzg0dM8ZGluAxARPL2RlQN6dExN +TXGb36HFA73Co8cvnEMKC6De4fW0eKAktuBCwby0cCW8YnwGxdqOsOEwsaj+W0nb+QX29BAz +32T2TbUirmjss7Sy0DtAfe+czr+umYupezxbXWZMTalZBM6xWFqOMd5JRFB+cnbx6G3DPgqD +9WzbLqY8wQOQJ7c7KE/wePZi1HR4O22UeI4jMAgSPDst3g/iFxwXJCwWC3Re0O8UiO4lLz0R +b6D6V3ys5EI9DeMei/o9ueEf7pIeAdQ1w9821t7IC6iDsbfb0+Aoj8xooJ5Z/nbRWiqGUPXU +jJ3NfNlq7utlEwrBA2hiANC8xMC8JKBB+XHeOTFuKZlhFhVZ4n3NX0wx3uTo6+em/+9Q12ek +QrGccNOsEKuMIMeXB4/CuNDyDLfWSrUu0v2uehk65VP66KdTjL9xVL2eEW/ivZGe6+01JtW5 +iQLITrsReID/C4DD1tZWLHJMTk5uNHUF6+OBLBtwnAV+hZ4eryd4YLtISF/YkOCwd971OB5r +bqOsHvL417fNugdG2f1+egl0LrUNTKtt7e0ZHv/qrpWyUcxNJRfW6kpOcX1WcX3fCFXJyHOY +Ng7KF9d3nVe0np9f2AF4oBAlHLYIbOgSSAvoKwd4TM8uok2QXlBWX+z1BHzCM1HLvoBHRdPg +xNT8obgt8X4Qv+Cvp4C35sXFxZmZGQAhTU1N5iYWajI694Q1H11xhODx5Ka/yZ1AW6UIR7Uo +V+0YN91YD704H+NEH5NEH+MET8N4L8N478cJviaJIXZpQINtUoMsU4KsUoOtUwPMk51Uo50e +xDirxbg9ivPQTXDXjnd7FO+uGe+uleChneCpneilk+SlmxRgFBVl75Xq97QwXr0m725L5YX+ +ti/Hht6bnnhzeuL3gEM4zCMzzN8jZdL+TB3617oOA/2YtqbTzLdnp47MTa+H1Fic/83s1B8m +x/9Kp3wCqIPce3q4W3ikW7i7Qba7UbazTq25zKy2wLs0LZUQW7WnuVp4gkd9WXtCZJqznbu1 +hW0JoRw7YwX8a+h0+vT09MLCwuZOhrDjWFxaeWSfduQHs8ZOtufAbd0IsAw+oYLlx+7ZYH1T +NwX0GqWkfrDsFlkG1gsqfNbWYmlpefPmzV08IOArpNOzC2j9OHMWXKXiuj4IYLv/+2L/xFjg +r661Lzg2d2iEtrjEntUyNn5lena2b5g6t7QcnVpu5pqYklfHYq1OTM4sLS11dQ6NMyZXV5dG +RqgxWWXdI7Rnz3bkXbpngi7mljl8BQweJaR+cFeLG0Th/SAu+AU/RDI7O0sgEMTExM79cEH6 +wkP9G55GtwKMbweaiAWa3AkyvRtkJh5sLhFsLhnyVCrEQjrU8l6o1f0wK5kwa9lwG7lwW/kI +O4UIO8VIe6UoB+UoBB4u6rEuD+NcNeJ4goe3XrKPfrKPQYqvYeqWPh7xblF5kXb5UXb50fYF +MfaV2dot5ZItFWxtrQQq1VbF1orMpyXJzqUpLvsSuZRP8Gip7g32ibgnJQPjgGHHUzYJe745 +eKBl+ArPkZUDvu3C91zwogp4g+csmP2VVzVk+sLSyjI7Ogfb4rHIWoY2jEZSTyaxMbOg6nkp +OM12mbW6zFqfb3uIAzPiSeI27wePHDlCeC7cM1xIJBKBD5mf57Tw9PX1bbkX98g+hULZci9Q +hmMvUPuWe1VXV3OfPj+nBq4Ax17gKvGzI3d1bW1tH3/8MQ4eB1bm5uZGR0eJRKK5ufnAwMBB +A49DETKdH/CoL+0QEhJSU1OLj4/H8gb4aTOZzOXl5e3+42rbhpHFGyAHHDrhGEABBbBrCNU9 +4RkknqPzOHjsgf0DcgUAD8nVVdby8sIUczExpcInvNDdP4dJn2OtLK/Nt11mF1tlsW0lzwQS +Eg4Hj/2Qc+fOYTNlc9/zgEx+xodwz0oA13zLvbh758DAwC33AmW4IWfLvUCPz/Pe2FLAFeDY +C1wlfnbk+VQB699//328iz+4j8jV1dnZWTr9pxzr4GX8wpmrsiLaurdccPDYMXhU5DVkxOWj +q4r13xgbG6NSqTMzM6zD3dXg4LF1bwxDpg+P0k2cMz4XsfjoivHn1y31rOJaWwdftVMVLHj0 +kxnHJTzcog9HcAwOuwRu8dhriwdYDz7x/h0rgplOu11ZWVmBEyhAz5iXl2dtbS0qKip85rLU +5Qe6Yk44ePAJHsT0Klc7b9l7CmfOnMHmkMWaOBYXF/FfwWsFHo1dw//f58rvn3/8nbj1vy5b +//xjFe8YIg4euOCCy2sOHhyyvLwMOkrAnK6urmJiYiIiIgrXdHDw2Ag8ogKSdTQMAKqBCwUe +vykpKQMDAzt24Tg4kpiYuKe9yWsCHu395N+dUA7LqFxeXCqp7H3vwuPkwgYcPHDBBRccPDgE +vJhPTk6OjY3BkQKsP6TWHSu1W8am971fW/AoyazPSyqH4AEuSHx8vL+/P0pYj4ZUNpkSe1gs +EocrSdzBBI8BMvPICQ0RBU+XgIIb6sG//Ey5rY+Kg8fLSHsf9T+PG+q7ZeEdCi64vErggbV+ +zMzMjI+PUygU2KVmZmaCh4zomkhdUda4a2arFPLKg0dcUIanfeATHTOxW+JCQkKANMi8ZHR0 +lEajTU1NcUccxcHj9QSPxYUFFdOIhxaxNgG5mvYpKmbR3T0jOHi8jOBJ4nDB5dUGDySrq6vY +93foiQpe9g0NDc+cOUMkEhF4OKiFvzLgkRCcI3bz7smTJ2VlZcGjFfAGNp45djBlcXFxfn7+ +VXIZxcFjV8BjaXHR3Dmyu3e8vW+otXswKrksv4j0qp0qDh644IKDx94LHIsBb/fIEoIE9NFC +QkKiF+/cv6GqfEfHUNbOVNHNXTvuIINHtE96sFv8U0N7Uz1rJQUVdC4DAwOAqbgtG2NrIsgk +9Th4HFLwoDIYobGFbR1DJbWtpKae7KIGYkXr/NIcQBL2nNrVV+FUBZyrBQcPXHB5PcEDydLS +Eoy6CTpiQCOov87Ly4uPj3d1ddXT01NSUjpz5kx3dzcCj0f3jC3UPNn60Etg4BHnneNvH+3v +EI3AIzO8TERE5OTJk5KSkqCRoLX+/v5lZWU8x1CAgNMEJzs3N/cKjKTg4CEY8Cis6jR3imdM +z66wfyyr8ZnlviGZlLFxdhCPVwU8BCwVTYMAPO4bxeKXAhdcXk/w2Eiw4UG4xdzcXGlNZGVl +T67J1Ys3sOChIfP4keyayj3RlHvy9JGLo0GAk2EAFjxcjINdjYPdTIKdjQJ0VUz0VE2BYsFD +4tY9idv3IFoAAQuwUmxLOOKIIqHRfgotzmKxXgfSwMFjL8AjOavawjmuf4ganUisKO9MyKpJ +yqqqqGxZu7EOWpT0w8QehyVXCy644OAhYFlck6mpqcnJSWgVAZ04z46eY0TD9UXR1NTkZgYl +jKCS2AJ5a4KN37WJQIMGk8mcmZnBo20IADza2tq4gym9KrK6HjJ9eSmTUFta1TZKpg8O08gj +o40dvcSalqq67gVwj8FA6WuhS3H+wAUXXHDwEIAAIJmYmADdPY1GI++lwHnBiC6AcAf0w0XA +4PFKCwuCB405ZWAXVVjaMjU5s8JiMZmT/f1Uv/CcyIRCCo2+VpAdLh0Hj23J6PjUd/e9w9Lr +8EuBCy44eOwFmfAUbBkIEpsUWFxc3EFKFFxw8Hh58OjqHdU2DconNrW3DYbF5iVmVFRUdccl +l+cSG8vrOmZXWAsrK7ifx3YFdy7FBRccPHDBweP1kdXnummh9aGWtIzqtKyKwWFaTUtfcRu5 +tofa1jtGLG/s6h+NS6+o66XWdjD7yfOz8zBt3GElEAKBIMjHGg4euOCyLVFTU+POv4MLLjh4 +HCLwYP0EIAgzuLHhZ4sr4n6xRUGxxKbO0bYBZsvIfNPQRM/YRE5RfVZeXWJmVVUnjdjMKGgg +13bR24en5pfmDyl64HE8cMEFF1xwwcFjr4S1CkljgbVCZi629dNbeqkdg4zukckeymQPebKf +OkOmz4PeeIR2TVTdzco9k9QyVtM6lFnUQizv7uqj5+S1ZOc02brFh6XWtQxOF7SMOsS2n5NL +JDUNrK4uHEa7Bw4euOBySGV6drG2bRjoHh0fHPnDq/ZAN6+CQpsCv2ugGxXoHKDBdkIFXw/s +JYXnaxVAAMuiWmFgGXxuucttwT7QdJwzQaXg86BdPZhgek+Pf3hntZCZC1W9E3lN1JyGsdwG +Wk4DfU3BwlhO41h+0yjojXsGLpk5J7kFFpRWD1fUU9KLerLKuuvaKKRWakY2KTGr1iU4I7di +SFQz/79PBR8TdkpJLWCx5nDw2FLmF5dtggrrOw5xBkZccDkgAvpHgPGgD9o78ADHB8oTPAD2 +wK4ZKCgDO2ue8r2sNzwO1CM/mIEdDyZ+YM8FNht8brnLWUW/PW0VQLvwDBLH9dyyYa+kReWQ +xfFYi7lRUj/sk9pa2EkvaqcXNo4Rm6jEJvA5SmweBctFQJtpZR1U0Bt39pxNzq9PzKyOz6jJ +Lh+JJZJjigdKGsiFFe1eoVnVLRRCRYtjUMl15ZibClb6RkapaRkrK6y1MZxVTsXBAxdccHnl +wANuhT01P+ABSoIFoAA84NcDyB4HEDyQ3QmtAdcNtPAgG45w8MBKXnXvSemoO0aFEYTBktbJ +4mZmcQujuIVW1EIrbmYUsb9OlrQyQG88RL7iH1NeWtU+MDxRVt1d2TTcSV6oaeyvaujxicpu +H2J2DowVlDbllzX5B/qG+Pr39fSsIcYyO5o6VlcP+pwswYOHS0RJP5mB9xq44LLX4LHdgRiO +8ltaPOB62EFvCR6oB69uHoKH5RjFgLWDt3vu9/2NTgRu2rILRkfgODhY09RN4R880JgRT/DY +qJE89+JoHjwFniUR4PHzv9uolj0dksPBY3Nhzo5HJeZckbH9VsLbKJDknNzvmNjlmNTulNLp +nNLjmjpgGtqg71UCemPy2BUn/9SY5NLWdmpDbV9kNMHEKr6Q2NzaRrF2j0/NI1XV9xaUtQQl +EpoHGVWkMSpjDhpWYHSP57rCjjK2eqDnvOA+Hrjg8uqBB3QDgP07WGjspGC9F7Dv0bAv5igP +DfubgwcHV/APHkDkzRKwLQfVYWvHei/A0Ry4CRwBdtCgLnguaBM4IM+qQXnsEVCN2H2x4z4b +gQcogMpjLxHc5dhdNzScBL6mEltR7dhhJuz1hw1AZwGKmXrncR+fo/EQ1TicT0B12Lbpu2ai +hsGLiW0bN9fh4LF3wloL87WwONvb1Z6YnOISnBGU1R1ZOBSe3xde0BtZ2B9BGAonDEUV9lv5 +FoDeeHDkQkx2TX0PndTa3949VlI/6BKQWVTe1NI2QuoaT8qprGzoLq/qik6rKCANWgW2+MdV +jDNmO4cn2gd/0o4hZufQRNcQvY8ySZ9ZZq0+T38MFlhrM2sOwEAMDh644HKQZZM4HhuBB1oP +Oi+4DD5hX496f9Afoa/c5WEPtXfgAZ8D8MhoGRwBEQjsu0HfCncEX7HtR41E5wXUM6Z8o6ph +/wsKY3eHuCJjEodt20bgAdoJFkAVYIGDmsDCkR/MwEoEM9hN8AjYdkKiQG2ABcCZWgYUcB8f +LCNsAAuQr7ANQ1cPHAEcE3yCxkC6QI0Be6HaD6BL6qsKHmsWB9jFs8hjcxXN42Xt4xUdzLI2 +emnruha3TpR3TFV3UBIzy0Bv3Ddy2SKgWtOhJKu8r7Gd0k9eItPnqxo7a5oG+8fmalr76zuH +0gtqajroFn5ZEoZZLhHVBc30/HpqAUbz68egFjRQi1vojT2MUcYc2xWE3RDWAfEAwcEDF1xe +MfCAPQ56JQc91CW1IPjT4+gTYRnu8rAf5wCPpm4Kz2kpOwAP7JEhXSCTBTwpaIXgeEmH7YQe +DqB7RTiE+ISjXnAK8AjcgyOoC56eXeC+FJv7eEBjEbos0OKBjA/ovFDt07OLWDsPB/xw8xLH +8bmHWrAN4z53SEHoXNCF3egq7aLs9ayWw2fxYK20DVJJfcyKFlpRI5XYTCU2ja8p7bmONfTP +RaeV1TT2gN54YORSeHrHI+tiK/+K4prh0GhiQnZjSf1IXtlgSnZ9am59clZdbkVnUEJtYGJ1 +YFJtVdckoZX+4gE5dDy/YaysY6S2a5zURWODEOtAXBkcPHDB5VUCD9BNoxdtqMgJAfWwsAzc +kWd52PlygMc7F63Rq/dLggfqlFHtyPUUNQa0E1UHFTUGgseWAMZh5IECeQZrxsHCxibgAY6G +pvBgj8DhXAoLgBPk7uix7eRuMxwx4T7+5uDBPaUI/Jt4boI17il44NlpOWRx+Znc0wxh9axI +wlhFD72slVbcQgVaxPYsHQefFe3jFc0jsSmlLZ0joDdu7rhg6llGbCAXNQ2T2odTsyvTipur +O0Zr2unVzdS0/IbweGJLH7WsdrC7fyIgutAnqb0QHKFzoqRlvKSFBrS4ZXxN1ysqbR2v7pqO +KBg+K5csrhVBHR99tsQ6CJ4fAgaPw5urBfxsgW4SrGC7B6luHuLnaKAM3EsATIitiJ/zBa9y +sBh6pxOAgP4IO7UQBw+ODnecOQunjVj6E4rr+qA2dLInsEdlN4D139330nZMBwtukWUblQfa +P8LgAI/yhgG4Cdy6LwMeZQ39kGGgNwJoD1iWMIzG1g6qyCrtgGcXk9OA3bS4tALBg0ybhAcU +eRgCSl7XDOWoF57m0TuuqCTWxBGSVgu+TkzNwdOHD6WNwAM20ie+El4WDovHt/e84MFBs8HR +gDZ3jRp55MDaQYPh1gfWyfD68/zf/eWCNc/jbw4esGEyJnHrPd3Syp/OWcCvOHjss7nj2coq +a6W2uV/FNOrEnYArDzPtozu907o9kzvdUzrd0zr8MjsyKsmAH3KLW/KIHaA3bh+4ElsyVNVF +q2oj17YNkbro1R2Mug5qQ8dYXRe9rnuisLY3Lbe2trG/e5Da2Dnw1Kv0gka2nE2xW3q3Z1q7 +V2oXUO+1T68UoJ320S0/Kib/U9jz/G1r/cdWRCJhfv5ApIYX/KwWyvjU8spumnuauingOQaU +w0F9d2XzYAUmXrngCQBfWMBj59v7XsjBbKODXNUIAQ8lflhlE5928JyJzm7YLbLiNsVvDjx8 ++gC8jIDnMOh3gK73WfX98MH++swl3BI84H8NKfhfQP8NaGaH3gXoAiLzAvaO4i4PHRe3nE6L +fUNHDdgIPFAZrKvDM8zwBPRSgM6Q2B2RhwYsgL1XkYUEKE9I5janYK8bWAN+g9j5NRuBB9Zb +A9WIwAOZZThm63DUjm0n9+8a3NU8j4/+C5v7eKCrgWxBOHjsr7B9KVZZy0tLw/29GbklYVnN +KZXDaTXk9GpyWvVIRnV/Vee4TyQxjUhq7aUTitpAb1xUdyazrK+ufaR5cLK4jVbQwh5GKW2h +1nczqtqGajuHG3tp1Y3DecSGqrru+lZqVGplQTPNO707tZaaWTeaCT5raRm1tPSasbRqcmbt +aFrNWFB6m7tHiKeLc3ZW1tjYGIt1IMZaAHXs6agch9R3kMHNr2iRuIvHFED3t2VHDB6MaCQa +PsZ5PoH56c23BR7glLE251cPPATwtDzU4IFFDmyUUY5ZKgiD0S4cToYc5WEHt3nkUrSVQ7lL +ojhjUM8p+XNAAsesFuy/m2NaB/SIgBYPOPbBMceEQ7CzWrBHRv078ohAtz3PyKWohbAN2MsC +zwhtxc4R5q6d+x+BCsubJ/A8/rPnozwIabhntSAAY+8eW859LqjGLQOx4uCxm+jxbHVyfr6l +b6KsjV7WzgAIUdy8NhTSPF7VOVVY3e/ik9DRx2juoBWWNTf2PA1O8X3qVfrIoSowdyCrnpxb +T8utp+aSxgoaxso7R0uaB0id1MYeRnZJa3Jue2hcXXouKY5Q1zC8sDbOQl37hOMstLWK6MWt +tJJuakkjrbC8u6uHApPGrLBeu+S2e+HjsXn3B37F8HUjMrMeO4iA9eniGFZAu4DfO4djGz/M +sMm8e+xBwtLrsEeDLvfw0QQagFqIeAA8xKCLO2oVKAD6C/Dk5DgdnqcPFJ0gOhT2aJuAByiA +mgcH37mvPCzwyD5to9qxXQO64GAlnCOJrQIdBL7kovkLoDz34A7PcwGSX9kNi2Ev7CsGHvzc +ii8Tx0PAAqNYbNQwrI0L+XjAqTdbW1nXinHPJAXHxI7C8HN9Nt+60WTVTTbxefwtz5TPS7Gn +goMHVpYWl5p7qNW944QmOofPZ2ETraydWVhHLmkYaO6drG6hkDr6usgzhEaqkV/tRzdjP7+T +qOVVo+9L0vOtBarrU2MYUOOS1BaQ3eGd0PHYqdjErSwgtbWqYySrvKW6e3oj59LCZmpB82hh +83hJG72mm15cP0Slz7122CFw8ECmWmiBBN0QUA6LBHJvg0827C5Yp3T+wWOTl3TsQc4q+qE2 +oMluqFLumYNYMzXchA0RwF0dOi+0O6wX++6GFjr6qZuAB9ayjQ1TiTUCo6MhBMIa2DkaiU4Q +yy3YKrCefki53R15ngsEDEWLRNSwQx3E4GXA41UVDudSXA6I7DV4JCYmOjo6HparwZyZE5GP +e+zXUNL5/7d37sFVVHke9z+namfArXJ2tGpntBQc1NHCUSlhZyQlpeyMCzgIjkhE16AriouE +AIpCCPIGuQl5EFDCU4KARh6KPBRCEsIjiIDkKYFCzOURcjFjDI5A9pf8an/183Tfvp2b5HIf +30/9Cm5u9zl9um+f098+53d+x7enwrfryLlm+6rZdrb8u7/su72VdYVl3gPV9flHLiQvLOk+ +ZPXY7N0fFHybtbY6b/fpvN3ej3Z/S5ZX7M3bc3bT3pqtJac27D3zzqbS9ftPzv2w7Nlpnxce +rd9fdaHwaC3nbFqz9vDuqvLuOnZ+Wm75XY8uX5u3/4cf62Ptzgyl8BABwMqhR3wGSQ4ycWtn +pcEO9vopL0lYD3CntEvhIY5hAX08RHjIKC0/smXI23banQzHU+HJ6MnL8wqtPg/SV8AdHbyS +V5Nlkh2f49INJQ7Cg4ok+ct8BEN4sKi7td8sw2mfD0r/Wictcv7cj6EP0X/UUslfwk3QZw6V +aR1eN86FrxsLD94kR/fXLwThAeEBwl94RBaXr/z05tydtz7yzhOvfbqu6BTJj91ldUVlpDTq +dpXWFZTWFR09X1B2fnvpubm5Zb2Hbbqu18IHnlmbs6V6f0XdvvILtLXw6PmiFmseQCk9U3j0 +bNGRM7tKawsqzxZUnsnN/6bH0x/GPb9pxorSLV/W7T7qKyqtK2RrPpCPrbD8/LqS00MnFdz4 +5+z7B76dmpn+9fGKWPst2Mdj5Mz1IRAe/O5Mjx7uQH4wIZu73JvUlLcmFbXAmkQHWdIP4kFJ +K6Rv31Z1+IvSYys8rF4c2nnM2GqcrIOPhxGcQQs//e7PGdJj2tnHg4MnSBREQ3joiAq8Sa6k +7UkZgsE4hKgXa/eRPqK/c+GtLDykYAFnXkB4RBBUWx99JQfXAcIjvLl0oqr8zbdX3N4v84H4 +D0dnfJGUdWBM5qExGYcSM75ssUNjsw48Nj7/170Xd/lrzpjskh1H64rKfTsPO8TlOLfjyLnP +v2q2wvKzuTuqew1deUv/Vf1f256Y+cWYjIPNmac3Zz4mg/899Gr6oZ7xa7o+OO+J/5k5MSUl +Z/GC6uPV+G06TnjoTng2eiyyb5V+nOnA0dYk4o6lH8QygUV7agVUHf6EhzXKQduFh3MvkBY5 +boSHhFIU53x/woMf9xJfWj/onYMP6EO4FB7+zgXCAwAIj3Dghwvnv9i/J2vB8ldGZ418fcGI +N1JHvJbx4vj0F8bOfz4p7fmk1OFjZg9I8AyIf3vk2Kyhb3y2dNuJomMXCsvOBxQeBeV1uytr +J8zfmzgx7dlXZgwZ4Rk+Pmv4uFTONiHRwzY80fPcqHlPPj8lcdzkebNSVue+d+jw0Ybvf8BP +09E9HrYyQAIo8biG6AeHJM5DLaI6nENM2AoP6yyYjuvxEMdX6SXgfoNX52zwJzwkgCQPP2nX +WeuVl1ESfz0eVhXX9P8xneQQpBncCA9/58LKB8IjDKFfKmg3G4e00bECGoRHFHKl6WJD4/GK +0o0f5mame9JS56Slzk1Pm5c+f17G/HmZ8z2ZmanZizKzsuanZ+T0GvxulwErR3j2flxyZm/V +d82xxcrOF5c3255mq2Urpn+/9m0+cOal6Ttvemhx8ox5Oe+kL3lnceb8tOac097OoGzTU9kW +pKflZGYtzlm4fNXizz/fdvJszY+XLzZdufozakMcx+NETV3PYVkZ77fnULs8jHiyv8yYkAc6 +uxkcrvRaZQk7QsjT2UjS1OK+GFB4yAs+T8MXcyk8JEIjB6lmJwr3woPL7+DjQVt5YILdTmSY +g5trvg5rth7yJzzk+c5eFrY9HuyDQfmTCtJ9SnJ0OSntZ6IXLNOHsPZ4yCZ/Ph76XLgAUSM8 +ogb2tCGrvdAQdFrrfR7cnG5dT8m0pOE5ZdqMyb+0M485stFnCREG4QHh8TPd0bIqyqVLl8+e +O1tRUVlaWlrWQnl5eWVlBVlV1dfHqo/Rn+UV5Ws3bhnwYvZNjyzqlbB+2tryZTuOL992cun2 +U8s+O7Vs+6nlW0+t3P7te5/VrMg/NW3N0fue+uD6Bxb87YVZ6Z75u4uKqqurKyuIcvq32RTV +x74+efJkjdf7fcP3LWvHhMWkligImS4tjzEDoskSuUinkkeh8b2RxE1cC73ek15f0qXwaPr5 +/BSZoOFGeFAbyHEXrbNajPU05bg6ZoIckZ4FDkMtegTKVnhIhjq0lz4pYwlR68XUh9DCQ1xt +nWe16HPhAkB4hKHw4N8oOOGhHcLbLjyst42xVI2/W1cclbW1ak5uFJOXl9ehTxN6ZBcXR5J/ ++JUW3Ox56fLlGu/JjRvyJkzOenBIZu9nMp5MWvb3xPcGjVn9eOLqQYm5jyfm0ufBSasfH5/b +66n53f8y/amXp06bPfXjT9afPn26NUUKiysTBcJDYjvYvqTwognUmMxbUWD71mOd6SBJ6F1G +miOHEOISbNwwf+9ZnIkRx4NDXlD7Jktp84iPEcncGshi6YYS7mmxvTgSSUO/1knQDDpNOX2H +kOkSK4N2lgLowtAO/A6Y9/lX+uh09TghbdWXznox9SE4BIdsIu3BP4dtHA/bc2lScTz0a2wb +I96DNsJTsdo3bVuEB92WW3ZXGEvKykAn9xOKDjGm29MmcUGH8AhZj0pkrdXSKv55qen0uQt7 +9hQsW54zbcbsSSnTJ6dMeytlSou9NXnK1GZLmTppyqzJKSkzp05PfXvWp1s+Plt35tLlyOtw +wyJx4YZLdxEAIvHeZnnAscJkPjtpQuNupz9ZYepodVpaHK708lZb4SHJ/bmF2IapMYSHrbAJ +6EAOIDyC6RtpCSpK1tDY8M03J0pKSgoKiwqI/HyyXWS7drIV5BcU7NpRWLDrwIED5+vqmsJk +udlIEB5DJ+SiEhnNIDuoSOTqWA4SDqJVdcjAhDzc9biGhMk1JpfZdmvopXINrycdhU+Hi/cn +PGRGla3wEBcs3eMRoTFhIDzCWntcuSIDIVcuX7586dJP9vyT/7t0KYI9i0K/SBxpj9O19ahE +1mZQhps7dD0FAMJEeEgEOe04JA7ePI2FezwM4UFS4YY+b9EmPRTCm/R0Kh3szrbGUUUbn/qJ +sWidFEa/CIiPBy9eL1UVXkMQHiAihAfw1yxjViCwMmrUKK/XGx13uLXHQ/cqGMJDD75Yxzv6 +j1oqLzLWGdbi26PXl/cn9fUyRk0W51JZmU7gpd8cVisAEB4grISHr75xyqLt8PEDwCVRE8fD +QXjo4DB6NpZ0KWjhwVFfZIVrvUlPVdNrG/kTHiRyeE1Y2xC70p1iKy1oq8iP/V99gxu1qWXW +SYeudQ7hAeERHHAuDR/Ywc+2p4UjZmizXdlT5u/Qy6m8YwIIj7YID4ZnY8kgiFYX7ASSMHmd +VXhIz4lx91oLIz4eFSfOcnJxBdFlE4cT50UQlm4owY3ahNVpAYQHCIS1S1nPHbaGJdFtryyn +a3gGAgiPNgoP66iHNX4L7dkjPsO4FUWTGDPCbCWxdi6VUHu8p1E2qQtcMNpZSigxPbbtqcKN +CuEBIDyAS+HBvdmPjV6uw4/LBEPu0NDvnroppjafd6DWGMIDwqNdhAd9aawKRPekITzk/rSO +p4gO4Rz8+X9q4SFyhQdcnNdO0jNuRJP/o+EiblQIDwDhET6Nre2a9S0vYhf1EAa3rtY9+Xvb +wQ7GNrCSGz9V3ZxKh7PRsMs7o26obQe+dUQv5wKD2BQeHBmPrPZCAweLE88K3iTB9lkw8PQu +CWHHaeVWH/LaKt6BQ+XrTToHw3FU4JB04jXKScjopjXKxq0Wb92YX6ozJ6PdcJ9DeIDWEhcX +t2TJkpAdLnacS6lF0p7zMkOWGi5usp6dtEYGOHTob2NEQ79YSWMomVDLySHTdSod9Z1zsJ1R +qPXDiW/rHIRHk13XtG2IszVbD+kCo35BeAAIDwgPAEIDPZ3poU8SS0QFv17JOMXwlHW621ZG +NGS8Q4aeSVQY8QQkE0oS/8Zq/ZTXqaTb2Vl4kNhIyd5mHdcWJz2JsMQFkwmMnETLD16dlqWU +fmcEEB4AwqOD8ufvA+Lz+XSq5ORkN6mMF3OqjG5SWccR3CSkE7GeHWkt51S2YiwuLs5NOYO7 +kta5S3SVWnslQ8yeIyd99Y1RXwf10AM/uI1F3/7RcFGCIrJHPc8T1HMGtbO9eOzz6iTyufZC +g0MqIyqjVXjI4m5aJ1idS0nP6AEdHbhJ9+f0iM/Q69QDCA8A4dFe0PPO1jGAF6cLSGNjozW3 +gBw8+LN+XVIvblJZH81uEtKJWM/O4/E4p6IdrKnoKe+mnMFdSWuLRFeptVcyxKqDnlMJyWuj +vg7So1/Ggv0tc2+dRSjxjqxBF7V/ne1Ksno6oSEhHIQH943YCg/e5BDKgA4n8oOTS/eLdv4H +EB4AwgOAq0WMOJfyabIPBq9f2VrhYZUQboSHVa4EFB5cqoTJ6/TyEzqVeJb6GzrR8a5PfFtH +kkO0FrQHhAeA8AAAwiMEeFYW0Gne2m/Wtj1VG/NL//Olxa0VHrUXGu4a7KHP/ztr/dINJWR9 +R7xLfw5puXT+hEfNue948SxJ1Tsh243wKD125oY+b5HlfLTfmv/hSq8Uhv4cnrKOduD8M1bv +5k1csFWbDxZ8cfzjgnJ2eV358Re459tdeLjp1bR2bFImblLZdvYGTGU7ehuwizj03eZWCZeb +mxvKbvPgrmSHdpsbng8uL6a125yubffu3SE8QBhyoqau57CsjPejf2FHGYOgD+waKrMF9Zqb +xpQT/lNmwhqzWiQigc7ESMWzC/Wh/QkP7poQ94wFa4o5H54zaBSMA1kbnq7WgrHEwvpZHYob +Py6rKxc9TdyksnVvC5gqLi7OmiqgU1zoHQWtEmLAgAGhdBQM7kp2qKOgVYy5uZhWgcQ3WLdu +3VBDAbiK2EbYCAJ/kUDcHFr7tbb72dkWLIjSAgAAACBCmZmzQyaVyJpZ1oAbAAAAQCxQfvzs +v/R8c0LGp7gUHYQOq6jnmwAAAAAxCNZq6Wg25pdyOGgO+4x5JQAAACA8IDwAAAAAAOEBAAAA +gGgidiKXAgAAACBMtEcsrNUCAAAAAAAAAACA2OF0bX3vhIWIpA0AAACAEADnUgAAAABAeAAA +AAAAwgMAEN34fL6HH+lzTeu57fddjTVqAQAAwgOUlZVd+4trg3isjBuXhKsX9WzevLlL11vS +3n19X+X77m1OVtJ//OkB68rsAABgpfHHn2Yv3fllRQ0uReyQl5d319139unba+X6We4fLq8k +xd/f417SLbiA0dkUNDaStvxT3P2bixa2SnLcfmfXfv0f9Xq9uIYAAADaV37krJl6z7135eQs +xtWLMkhP3nf/PaQtg5Ac6OgAAKDHA3Sc/PisJGfAoIcHPzHQ5/Ph6kUH+/btveMPt7nXn5Ac +AIC2AB8PEIT8mO4Z3aXrLcXFxbh0kQ4JyH6P9S08shKSAwAA4QHCWX5sLlrY/Y93wOM0omFX +0g+2pUFyAAAgPEBEyA94nEYo7l1J0959nSTHb37zbx6PZwcAICZp37H1UAoP/HYRxKuvvnrt +L64l+bF+RwY8TqOMVrmS9h/Up0fP7jAYLGbtli6/e+GF59uxCQrZWi30LOvU+Vf4BSPOpntG +w+M0msjMymiVKykMBotxmzRzxNPD4iOxuSPhQU8x/IJRbPA4DWeqqqpmzZ758uhhqYsmFJeu +wu0K82fTPKMmTn9xybpp7Zjntn3vUp7tni0sQoWHt7b+5RkffbTjKIRHe1nuprmtql+0J+1P +lb19izF3wVjKlgoTynPfeXDZxOkjRo99cdGihefOncPjPrLcOWBXxeIe7vHbm280rAMr6ZfL +nHego19zzTUjEp9sx4Mu/3AGB0Bu32xhESo8QubjEc7Cw6jy1A6s25oadG5jJv53q+oX7Un7 +t3tT0/3ebpQtFeaqXFI4fkSiOwfsqhhXVW4EOlp43P3H3wdsmiA8YBAeoREezUtc3X4zf2ij +DIDwgOMH3Dlgra2q9G8IjtXpul9CeMAgPMJHeCxcNbnZh3/wQ1xBqKZAeMDxI0LhFWafGPqo +y8hgsPAUHnEP96DvxyY/918D4+hf/jJlzkj6ko3aK909S3/Kl5xW+m8pOR+ImhrOM6DwkANR +hnqkZuCQh+X7T4qy+XvOnw5nLQyEB4SHwZcVNSQ8Rs5cD+HBwoNlACHVmWofV2GuVgtWJBuu +FHor1UpDeEj19ze0KsKDjshVlWztpx7eSoeTL8moMNZGif+k5LwPlzxMhIeEGtu6dQv0QGgI +boVZWBgKD26aeAduUuTNSHfPUiuks5LxGt6Bc5aWLaAA0AeVTER7UMJO1/1S8pdiW1+g9HlB +eEB4YFaLbUVLnvkS1V/+LLWM64uuyKwQRNJLReattL8WHvEJ/XirIVdshYduK6R66mFf3iRK +w+gRlarNfTXhIzzY/ja4L+KMwY8U5sbHQ/oNpNY/99JAakPovYP/pIZF3jX0416y4lZC99/S +iw/9S5qB0vKfzu0h/UtH/KQo2zgEleG9DbO5weE9uXGD8IDwgPAIQngIXKmlG0FqClVV3pN3 +kEZAejvpG/ogwoNkjJu6Jm8irHaoxaDP9/X8g2gb6czkZkReMSJLeGzalQV3U/iRwhyEh2DU +cXkPMjQA94haa70kN9oEq48HfRaTlyOjYbEqik8Ks6mto+/1nhAeEB7uOVFT13NYVsb7xRAe +t91+M9URa7cGyw+qlVLRuCrRW4mtbwYLDxInRqPB0kXXdH7psFZY+izCo7maF2VTtaXdjCNG +lvCAu2lHO3V07tyJ2gc0kpE71EI1l00aH6OOWwdljAd6a4WHfufSvawOwoMkhx5qgfCA8IBz +adt9PKT/kAWD7sw0xkz9jcyy8BABI/0Vuvbp1sBZePAcf12AyBUebP0efyhCe+3Q4wG7Kj4e +boRHcD0eInX04Iuz8KAPvXrfY90TwgPCA8IjaOGhfaukW0PGO3RVchYe0uOh3byNmu6vJ1OE +B28Sf1FrC4AeDwAfj9gRHuwzRl9K68HDr4aPh7Pw0H2wbqbT6maHM+RN8o7Gf/IYMcGertRg +6oYUwgPCA8LDQXhozw3ZJHNJdFUSxy3ZSq8MelZLq3w8bIUHNyPSUBiNjOFVbkwEho8HZrWg +wYwy4SFPc54Sa/VFDyg8brjxet4h4KwWW+HBBaBMqLUxjk4vR+Iiy2WD8IDwcBYeQyfkQnjo +wRTx8ZBxFl3RuCpJI8DfcF0zZrWIGHAzq8UqPCQ5z6g1hlq4N0YfHbNagLh8II5HpBgPpxpd +o3pSm35Yc4AO3VLprUZW3Cmhe0gGDe3rZjqtzpZ926TZiU/oxz4eY5OfM/aUbl7+UhdGSgLh +AeEh2uN0bX2MCw9teiKJTLDl7416bW0EeFaL1C+eCOMcA9mo11yePn95gLWNeLzTB67Xsqex +lYsqjQwXDHE8YhlELo1WY4fz4FZ2CDqhntXinD9+IAgPTKdtu1FV0j6i7dgIuDHK2SFz561X +3RC5FB6nMBgMwuNnXbL1jVMWbc8vqYbwgMGVFB6nMBgMBudSWCQaVqeFxykMBoPwgPCAhcZe +SYq/v8e9cCWFxykMBoPwsLLnyEkSHgnJayE8YO3lRzpuXBKe8vA4hcFgEB4O2sNX3wjhAYMf +KTxOrRb/3ACquTAYLGbtli6/Gzbs6Qid1dKp86/wC0acTZ41En6ksexxOicr6d9/e+NNN920 +ZMmSHQCAmMTr9UZoW4ffLoJITk7u3LkzCY+AffLwI410j9MPtqW56Wsl+fH0sPjjx4/jugEA +AGhfffjnB3uR5HCItgo/0qjB5/P1e6yvS3dTyA8AAABXS3LAjzRq2Ldvb6vcTVl+DH7i8YMH +D+LqAQAACIK8vLy77r7TpeSAH2n0EUSA06meUbff2bVf/0chPwAAALRWcvTp28vlCy/8SKMb +9vogUUES1L0Nefavd9zRDQoEAACAg9i4/tf/OnrCM+4fLnDngPCA8AAAAADhAQAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +wJn/A5vjFyA= + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + +0.6 0 0 0.6 0 0 e + + + + + +0.5 0 0 0.5 0 0 e + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h + + + + + +-0.5 -0.5 m +0.5 -0.5 l +0.5 0.5 l +-0.5 0.5 l +h + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + + + +-0.43 -0.57 m +0.57 0.43 l +0.43 0.57 l +-0.57 -0.43 l +h + + +-0.43 0.57 m +0.57 -0.43 l +0.43 -0.57 l +-0.57 0.43 l +h + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +-1 0.333 m +0 0 l +-1 -0.333 l + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + +0.6 0 0 0.6 0 0 e + + + + + +0.5 0 0 0.5 0 0 e + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h + + + + + +-0.5 -0.5 m +0.5 -0.5 l +0.5 0.5 l +-0.5 0.5 l +h + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + + + +-0.43 -0.57 m +0.57 0.43 l +0.43 0.57 l +-0.57 -0.43 l +h + + +-0.43 0.57 m +0.57 -0.43 l +0.43 -0.57 l +-0.57 0.43 l +h + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +-1 0.333 m +0 0 l +-1 -0.333 l + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +\renewcommand\rmdefault{cmss} +\makeatletter +\leftmargini 1.5em +\leftmargin \leftmargini +\leftmarginii 1.2em +\leftmarginiii 1em +\def\@listI{\leftmargin\leftmargini + \parsep \z@ + \partopsep 3pt + \topsep \z@ + \itemsep \z@} +\@listI +\def\@listii {\leftmargin\leftmarginii + \labelwidth\leftmarginii + \advance\labelwidth-\labelsep + \topsep \z@ + \parsep \z@ + \itemsep \parsep} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii + \advance\labelwidth-\labelsep + \topsep \z@ + \parsep \z@ + \partopsep \z@ + \itemsep \topsep} +\makeatother + + + + + + + + + +Some Preliminaries +\begin{itemize} +\item This description corresponds to the {\tt RU-RAU-split} branch for RAN infrastructure components (located in {\tt targets/DOCS/oai\_L1\_L2\_procedures.pdf}, editable with {\tt ipe}) +\item we describe +\begin{enumerate} +\item node functions +\item current functional splits and packet formats +\item RAN procedures +\item process scheduling +\end{enumerate} +\end{itemize} + + + + + +NGFI Harmonization in OAI +\small +\begin{itemize} +\item New descriptions for OAI RAN infrastructure Node Functions +\begin{itemize} +\item{\tt NGFI\_RCC} : Radio Cloud Center +\item{\tt NGFI\_RAU} : Radio Aggregation Unit +\item{\tt NGFI\_RRU} : Remote Radio Unit +\item{\tt 3GPP\_BBU} : Baseband Unit +\item{\tt 3GPP\_eNodeB} : Complete eNodeB +\end{itemize} +\end{itemize} +\small Source: China Mobile - {\tt http://www.windriver.com.cn/windforum/download/wf2015\_networking03.pdf} + + + + + +\small\begin{itemize} +\item Current OAI implementation (RRU/RCC) supports either +\begin{itemize} +\item IF5 time-domain fronthaul ($>$ 1 GbE required) +\item IF4.5 split (FFTs) (280 Mbit/s/antenna port fronthaul – 20 MHz carrier) per carrier/sector +\item Soon IF2 (NFAPI) +\item IF1’ for “PDCP/RRC” soon (3GPP Fh-C/Fh-U) +\end{itemize} +\end{itemize} +NGFI split points + + + + + + +OAI RAN Software Architecture + + + + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +528 64 m +528 32 l +640 32 l +640 64 l +h + + +528 64 m +528 32 l +640 32 l +640 64 l +h + + +528 101 m +528 48 l +736 48 l +736 101 l +h + + +392 376 m +392 296 l +512 296 l +512 376 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +392 376 m +392 296 l +512 296 l +512 376 l +h + + +136 312 m +136 272 l +200 272 l +200 312 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + +\tiny\bf LTE\\ +MODEM + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +96 408 m +96 360 l +208 360 l +208 408 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + +\tiny\bf LTE/NR/NB\\ +PDCP + +128 320 m +128 280 l +192 280 l +192 320 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + +\tiny\bf LTE\\ +RRC + +112 464 m +112 440 l +648 440 l +648 464 l +h + + +432 224 m +432 224 l +432 224 l +432 224 l +h + +\bf OSS/BSS/MEC + +192 296 m +232 296 l +232 404 l +256 404 l + + +144 288 m +144 320 l + + +384 368 m +448 368 l + + +384 352 m +448 352 l + + +152 456 m +152 368 l + + +304 456 m +304 408 l + + +456 456 m +456 416 l + + +600 456 m +600 409 l + + +512 368 m +576 368 l + + +512 352 m +576 352 l + + +88 384 m +8 384 l + + +128 264 m +8 264 l + +OAI Functional Splits + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\bf\tiny LTE-L1 + +192 368 m +96 368 l + + +192 368 m +96 368 l + + +192 368 m +96 368 l + +\bf\tiny Management +\bf\tiny data (user/control plane) +\bf\tiny configuration + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\tiny\bf LTE\\ +MAC-RLC + +288 432 m +288 432 l +288 432 l +288 432 l +h + + +240 460 m +240 40 l +520 40 l +520 460 l +h + + +384 416 m +384 416 l +384 416 l +384 416 l +h + + +560 416 m +560 336 l +656 336 l +656 416 l +h + + +88 456 m +88 40 l +216 40 l +216 221 l +216 261 l +216 456 l +100.8 456 l +88 456 l + +\bf\tiny Radio-Cloud Center (RCC) +\tiny\bf Radio-Access Unit (RAU) + +136 248 m +136 208 l +200 208 l +200 248 l +h + + +128 256 m +128 216 l +192 216 l +192 256 l +h + +\tiny\bf NR\\ +RRC + +128 229 m +112 229 l +112 261 l +112 360 l + + +488 368 m +488 304 l +504 304 l +504 368 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +384 368 m +448 368 l + + +384 352 m +448 352 l + + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\bf\tiny NR-L1 +\tiny\bf NR\\ +MAC-RLC + +488 368 m +488 304 l +504 304 l +504 368 l +h + +\tiny PRECODE +\tiny PRECODE + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + +\tiny\bf NR\\ +MODEM + +512 368 m +576 368 l + + +512 352 m +576 352 l + + +560 231 m +560 160 l +656 160 l +656 231 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +336 264 m +536 264 l + + +336 248 m +536 248 l + + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\bf\tiny LTE-L1 + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\tiny\bf LTE\\ +MAC-RLC + +488 368 m +488 304 l +504 304 l +504 368 l +h + +\tiny PRECODE + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + +\tiny\bf LTE\\ +MODEM + +232 264 m +256 264 l + + +256 424 m +224 424 l +224 316 l +256 316 l + + +64 264 m +64 264 l + + +528 288 m +528 208 l +736 208 l +736 288 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\tiny\bf NR\\ +MAC-RLC + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\tiny\bf NB-IoT\\ +MAC-RLC + +128 264 m +8 264 l + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + + +336 264 m +536 264 l + + +336 248 m +536 248 l + + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\bf\tiny NR-L1 + +488 368 m +488 304 l +504 304 l +504 368 l +h + +\tiny PRECODE + +576 384 m +576 336 l +640 336 l +640 384 l +h + + +624 336 m +624 336 l +624 336 l +624 336 l +h + + +608 336 m +608 336 l +608 336 l +608 336 l +h + +\tiny\bf NR\\ +MODEM + +528 288 m +528 208 l +736 208 l +736 288 l +h + +\tiny\bf Remote Radio-Unit (RRU) + +336 72 m +576 72 l + + +336 86 m +576 88 l + + +576 384 m +576 336 l +640 336 l +640 384 l +h + +\tiny\bf NB-IoT\\ +RRC + +128 264 m +8 264 l + + +104 360 m +104 88 l +120 88 l + + +192 88 m +256 88 l + + +528 64 m +528 32 l +640 32 l +640 64 l +h + +\tiny\bf NB-IoT\\ +L1/MODEM + +224 384 m +208 384 l + + +192 240 m +256 240 l + + +232 240 m +232 168 l +256 168 l + + +224 192 m +224 192 l + + +224 192 m +224 192 l + + +224 312 m +224 72 l +256 72 l + + + + + +OAI Functional Splits +\tiny\begin{itemize} +\item OAI currently implements the following entities in openairinterface5g +\begin{itemize} +\item LTE-MODEM (eNB 36.211 OFDM modulation/demodulation) +\item LTE-L1 (eNB 36.211/212/213) +\item LTE-MACRLC (eNB 36.321/322) +\item LTE-PDCP (eNB PDCP/GTPU 36.323) +\item LTE-RRC (eNB RRC/SCTP 36.331) +\end{itemize} +\item Each entity comprises +\begin{itemize} +\item a northbound interface (backhaul/midhaul/fronthaul and configuration) +\item a southbound interface (midaul/fronthaul and configuration) +\item one or two management interfaces +\item Three computing nodes +\begin{itemize} +\item {\bf Radio Cloud Center (RCC)} : multiple RRC/PDCP entities +\item {\bf Radio-Access Unit (RAU)}: multiple MACRLC entities with medium-latency midhaul and L1 entities with low-latency fronthaul. +\item {\bf Remote Radio-Unit (RRU)}: Equipment at radio site. Varying degrees of processing elements depending on fronthaul/midhaul interface. +\end{itemize} +\end{itemize} +\item Each entity has a configuration which is a local file or received via the management interface +\item default interface between all entities is implemented using a UDP socket. Transport is configurable via a dynamically-loadable networking device +\end{itemize} + +288 192 m +288 64 l +432 64 l +432 192 l +h + +OAI entity + +336 171 m +336 208 l + + +384 171 m +384 208 l + + +336 171 m +336 208 l + + +384 171 m +384 208 l + + +240 80 m +288 80 l + + +240 80 m +288 80 l + + +16 0 0 16 288 224 e + + +16 0 0 16 288 224 e + +\tiny\bf Northbound interface +\tiny\bf Southbound interface +\tiny\bf data +\tiny\bf data +\tiny\bf in-band configuration +\tiny\bf in-band configuration +\tiny\bf OSS/BSS +\tiny\bf FlexRAN + +240 80 m +288 80 l + +\tiny\tt .conf + + + + + +511.895 513.539 m +511.895 14.2386 l +734.284 14.2386 l +734.284 513.539 l +h + + +511.895 513.539 m +511.895 14.2386 l +734.284 14.2386 l +734.284 513.539 l +h + + +511.895 513.539 m +511.895 14.2386 l +734.284 14.2386 l +734.284 513.539 l +h + + +16 432 m +16 112 l +192 112 l +192 432 l +h + + +16 432 m +16 112 l +192 112 l +192 432 l +h + +Functional Splits (Current) + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +RRC +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-C +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-U +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX +\end{tiny} + + +384 432 m +384 384 l + + +384 432 m +384 384 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt rf\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +RRC +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-C +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-U +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +3GPP\_eNodeB +3GPP\_BBU +\tiny to MME +\tiny to S-PGw + +384 432 m +384 384 l + + +384 432 m +384 384 l + +\tiny to MME +\tiny to S-PGw + +160 112 m +160 112 l +160 112 l +160 112 l +h + + +144 112 m +144 112 l +144 112 l +144 112 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt USB3 or PCIe} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF5 / ethernet} +\end{tiny} + + +16 432 m +16 112 l +192 112 l +192 432 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +RRC +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-C +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-U +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +upper-PHY RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +NGFI\_RCC (IF4.5) + +384 432 m +384 384 l + + +384 432 m +384 384 l + +\tiny to MME +\tiny to S-PGw + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF4p5 / ethernet} +\end{tiny} + +\setstretch{.5}\begin{tiny} +upper-PHY TX +\end{tiny} + + +384 432 m +384 384 l + +\tiny to NGFI\_RRU + +384 432 m +384 384 l + +\tiny to NGFI\_RRU or RRH\_gw + +384 432 m +384 384 l + +\tiny to RF Device + + + + + +1.83417 462.604 m +1.83417 50.8252 l +207.006 50.8252 l +207.006 462.604 l +h + + +1.83417 462.604 m +1.83417 50.8252 l +207.006 50.8252 l +207.006 462.604 l +h + + +16 432 m +16 112 l +192 112 l +192 432 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +RRC +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-C +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-U +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +NGFI\_RCC (IF1'') + +384 432 m +384 384 l + + +384 432 m +384 384 l + +\tiny to MME +\tiny to S-PGw + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF1pp} / ethernet +\end{tiny} + + +16 432 m +16 112 l +192 112 l +192 432 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +RRC +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-C +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +GTP-U +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +NGFI\_RCC (IF1') + +384 432 m +384 384 l + + +384 432 m +384 384 l + +\tiny to MME +\tiny to S-PGw + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF1p} / ethernet +\end{tiny} + +\tiny to NGFI\_RRU + +384 432 m +384 384 l + +\tiny to NGFI\_RAU + +384 432 m +384 384 l + +\tiny to NGFI\_RAU +Functional Splits (Current) + +1.83417 462.604 m +1.83417 50.8252 l +207.006 50.8252 l +207.006 462.604 l +h + + +16 432 m +16 112 l +192 112 l +192 432 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +upper-PHY RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +NGFI\_RAU(IF1'') + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF4p5 / ethernet} +\end{tiny} + +\setstretch{.5}\begin{tiny} +upper-PHY TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF1pp / ethernet} +\end{tiny} + + +384 432 m +384 384 l + +\tiny to NGFI\_RCC + +384 432 m +384 384 l + +\tiny to NGFI\_RRU + + + + + +1.83417 462.604 m +1.83417 50.8252 l +207.006 50.8252 l +207.006 462.604 l +h + + +1.83417 462.604 m +1.83417 50.8252 l +207.006 50.8252 l +207.006 462.604 l +h + + +1.83417 462.604 m +1.83417 50.8252 l +207.006 50.8252 l +207.006 462.604 l +h + + +16 432 m +16 112 l +192 112 l +192 432 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +NGFI\_RRU (IF5) + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF5/ ethernet} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt rf\_device} +\end{tiny} + +NGFI\_RRU (IF4.5) + +384 432 m +384 384 l + +\tiny to NGFI\_RCC, NGFI\_RAU,3GPP\_BBU + +384 432 m +384 384 l + +\tiny to RF Device + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt USB3, PCIe, CPRI} +\end{tiny} + + +16 432 m +16 112 l +192 112 l +192 432 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF4p5/ ethernet} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt rf\_device} +\end{tiny} + + +384 432 m +384 384 l + +\tiny to NGFI\_RCC, NGFI\_RAU + +384 432 m +384 384 l + +\tiny to RF Device + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt USB3, PCIe, CPRI} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +lower-PHY RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +lower-PHY TX +\end{tiny} + + +16 432 m +16 112 l +192 112 l +192 432 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +\setstretch{.5}\begin{tiny} +upper-PHY TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF1pp\_4P5 / ethernet} +\end{tiny} + + +384 432 m +384 384 l + +\tiny to NGFI\_RCC, NGFI\_RAU + +384 432 m +384 384 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt USB3, PCIe, CPRI} +\end{tiny} + +\tiny to RF Device +Functional Splits (Current) +NGFI\_RRU\par +(IF1'') + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +lower-PHY RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +lower-PHY TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +upper-PHY RX +\end{tiny} + + + + + +Some Notes on usage of splits +\tiny\begin{itemize} +\item IF4p5 corresponds to the split-point at the input (TX) and output (RX) of the OFDM symbol generator (i.e. frequency-domain signals). According to NGFI, IF4 is "Resource mapping and IFFT" and "FFT and Resource demapping". We currently do not try to exploit multiplexing gains for unused spectral components. So, IF4p5 is simply compressed transmitted or received resource elements in the usable channel band. +\item The simplest deployment for DAS (indoor) is one NGFI\_RCC (IF4p5) and many NGFI\_RRU (IF4p5). Spatio-temportal filtering (Precoding, later) is done in RCC and RRU perform IFFT/FFT and signal generation/acquisition. Fronthaul rates in this case are feasible with 1GbE copper links. This allows for PoE in addition to fronthaul data. +\item More complex indoor, for instance with RCC in a common data center with outdoor RRS, could be +\begin{enumerate} + \item RCC-RAU with IF1'', RAU-RRU with IF4p5. Spatio-temporal filtering is done in frequency-domain in RAU along with full TX and RX processing (L1/L2) for the indoor RRS. Note that IF1' fronthaul on TX to RRU would be difficult because spatio-temporal filtering should be used. RRU does only IFFT/FFT and signal generation/acquisition +\item RCC-RAU with IF1', RAU-RRU with IF4p5. Here RCC does L2, RAU does L1 and precoding for RRS. +\end{enumerate} +\item A massive-MIMO solution would consist either of +\begin{enumerate} +\item an embedded RAU with processing (Spatio-temporal in frequency-domain, lower/upper PHY TX/RX) like the IF1' DAS solution above +\item or more simply a high-speed fronthaul (IF4p5) with an RAU for multiple sites +\item directly connected to RCC via high-speed IF4p5 (several virtual cells, precoder and IFFT/FFT in array). +\end{enumerate} +\item RCC solution with IF1'' would cater to evolved-PDCP for heterogenity (4G,5G,WIFI,IoT) +\item Currently supported node functionalities +\begin{enumerate} +\item {\tt 3GPP\_eNodeB} +\item {\tt 3GPP\_eNodeB\_BBU} [NGFI\_IF5] +\item {\tt NGFI\_RCC} [NGFI\_IF4p5] +\item {\tt NGFI\_RRU} [NGFI\_IF5] +\item {\tt NGFI\_RRU} [NGFI\_IF4p5] +\end{enumerate} +\end{itemize} + + + + +RU - L1 negotiation + +64 448 m +64 256 l +256 256 l +256 448 l +h + + +64 448 m +64 256 l +256 256 l +256 448 l +h + +RRU Entity +RAU/RCC Entity + +544 192 m +544 256 l + + +256 320 m +448 320 l + + +448 288 m +256 288 l + + +544 192 m +544 256 l + +\tiny\tt .conf +\tiny\tt .conf +\tiny\tt fronthaul data (IF5,IF4p5) + +256 320 m +448 320 l + + +448 288 m +256 288 l + +\tiny\tt RRU control/config +\begin{small} +Control and Configuration protocol +\begin{enumerate} +\item RAU$\rightarrow$ RRU : heartbeat (capabilities request) +\item RRU$\rightarrow$ RAU: capabilities indication +\item RAU$\rightarrow$ RRU: configuration (band, dl\_Carrier,ul\_Carrier, dl\_RS\_EPRE, rx/tx attenuation) +\end{enumerate} +\end{small} +During steady state, the control port manages the link quality and status (packet losses, synchronization state, start/stop, etc.) + + + + +\begin{small} +\begin{itemize} +\item IF5 interface +\begin{itemize} +\item DL subframes with timestamp (16-bit samples) +\item UL subframes with timestamp (16-bit samples) +\item optional A-law compression (13$\rightarrow$8bit) +\end{itemize} +\item IF4p5 interface +\begin{itemize} +\item DL packets, ofdm symbols with frame/subframe/symbol count +\item UL packets, ofdm symbols with frame/subframe/symbol count (16-bit) +\item UL PRACH packets with frame/subframe count (16-bit) +\item optional A-law compression (13$\rightarrow$8bit) +\end{itemize} +\end{itemize} +\end{small} +RU - L1 data plane + + + + + +544 288 m +544 256 l +704 256 l +704 288 l +h + +IF5 Packet Format (16-bit) + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + +0 +16 +32 +48 +15 +31 +47 +63 + +64 320 m +64 288 l +544 288 l +544 320 l +h + + +544 320 m +544 288 l +704 288 l +704 320 l +h + + +64 288 m +64 256 l +384 256 l +384 288 l +h + + +384 288 m +384 256 l +544 256 l +544 288 l +h + + +544 288 m +544 256 l +704 256 l +704 288 l +h + +\small Destination Address +\small Source +\small Type (0x1234) +\small RF Config +\small Address + +64 160 m +64 128 l +384 128 l +384 160 l +h + +\small Frame Check Sequence + +256 240 m +256 240 l +256 240 l + +\small Timestamp + +5 63.5079 m +5 46.9999 l +645 46.9999 l +645 63.5079 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +256 240 m +256 240 l +256 240 l + + +166 304 m +165.917 272.508 l +166.247 272.508 l + + +486 304 m +486.316 272.508 l +485.986 272.508 l + + +486.316 256 m +486.646 224 l +485.657 224 l + + +486.316 256 m +486.646 224 l +485.657 224 l + +\tiny $I_0$ +\tiny $Q_0$ +\tiny $I_1$ +\tiny $Q_1$ +\tiny $Q_{N-2}$ +\tiny $Q_{N-2}$ +\tiny $I_{N-1}$ +\tiny $Q_{N-1}$ +\tiny +\begin{itemize} +\item {\bf Type:} 2 byte (16 bit) field that specifies the RoE protocol +\item {\bf RX Config:} 16-bit. Currently just antenna index (0-7). Can later be used for gain/timing adjustments. +\item {\bf Timstamp:} Timestamp in samples of the first sample of the received packet. +\end{itemize} +\begin{itemize} +\item {\bf data block :} Uncompressed IQ samples, 16-bit resolution for each real and imaginary component. $N$ complex samples per packet. $N$ can be configured at initialization. +\end{itemize} + + + + +IF5 Packet Format (8-bit) + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + +0 +16 +32 +48 +15 +31 +47 +63 + +64 320 m +64 288 l +544 288 l +544 320 l +h + + +544 320 m +544 288 l +704 288 l +704 320 l +h + + +64 288 m +64 256 l +384 256 l +384 288 l +h + + +384 288 m +384 256 l +544 256 l +544 288 l +h + + +544 288 m +544 256 l +704 256 l +704 288 l +h + + +384 256 m +384 224 l +704 224 l +704 256 l +h + +\small Destination Address +\small Source +\small Type (0xBEEF) +\small RX Flags +\small Address + +544 288 m +544 256 l +704 256 l +704 288 l +h + +\small FIFO\_status + +544 288 m +544 256 l +704 256 l +704 288 l +h + +\tiny SeqNum +\tiny rsvd + +248.997 435.732 m +248.997 403.732 l + +\small Word0 + +5 63.5079 m +5 46.9999 l +645 46.9999 l +645 63.5079 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +166 304 m +165.917 272.508 l +166.247 272.508 l + + +486 304 m +486.316 272.508 l +485.986 272.508 l + + +486.316 256 m +486.646 224 l +485.657 224 l + +\tiny $I_0$ + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + +\tiny $Q_0$ +\tiny $I_1$ +\tiny $Q_1$ +\tiny $I_2$ +\tiny $Q_2$ +\tiny $I_3$ +\tiny $Q_3$ +\tiny $I_{638}$ +\tiny $Q_{638}$ +\tiny $I_{639}$ +\tiny $Q_{639}$ +\tiny +\begin{itemize} +\item {\bf Type:} 2 byte (16 bit) field that specifies the RoE protocol +\item {\bf RX Flags:} overrun indicator. should be '0'. +\item {\bf FIFO status:} 2 bytes. should be '0'. +\item {\bf SeqNum:} 1 byte. Sequence number of the ethernet packet. +\item {\bf rsvd:} 1 byte. shoult be '0'. \item {\bf Word0:} 4 byte (32-bit). should be '0'. +\item {\bf Timstamp:} Timestamp in samples of the first sample of the received packet. \end{itemize} +\begin{itemize} +\item {\bf data block :} Uncompressed IQ samples, 8-bit resolution for each real and imaginary component. 640 complex samples per packet. +\end{itemize} + +384 256 m +384 224 l +704 224 l +704 256 l +h + +\small Timestamp + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +486 304 m +486.316 272.508 l +485.986 272.508 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + +\tiny $I_4$ +\tiny $Q_4$ +\tiny $I_5$ +\tiny $Q_5$ + +64 160 m +64 128 l +384 128 l +384 160 l +h + +\small Frame Check Sequence + + + + +IF4p5 Packet Formats (RAW) + +272 512 m +272 512 l +272 512 l +272 512 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + +0 +16 +32 +48 +15 +31 +47 +63 + +64 320 m +64 288 l +544 288 l +544 320 l +h + + +544 320 m +544 288 l +704 288 l +704 320 l +h + + +64 288 m +64 256 l +384 256 l +384 288 l +h + + +384 288 m +384 256 l +544 256 l +544 288 l +h + + +544 288 m +544 256 l +704 256 l +704 288 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +384 256 m +384 224 l +704 224 l +704 256 l +h + + +64 160 m +64 96 l +704 96 l +704 160 l +h + +\small Destination Address +\small Source +\small Type (0x080A) +\small Subtype (0x0021) +\small Address +\small LTE PRACH Configuration +\small Reserved +\small PRACH data block (one antenna) + +64 160 m +64 128 l +384 128 l +384 160 l +h + +\small Frame Check Sequence + +384 160 m +384 128 l +704 128 l +704 160 l +h + +IF4p5 PRACH Packet (RRU$\rightarrow$ RAU,RCC) +\tiny +\begin{itemize} +\item {\bf Type:} 2 byte (16 bit) field that specifies the RoE protocol +\item {\bf Subtype:} 2 byte (16 bit) field that specifies the packet subtype +\item {\bf Reserved:} 4 byte (32 bit) field reserved +\item {\bf LTE PRACH conf:} 4 byte (32-bit) field that details the configuration of the LTE PRACH packet +\end{itemize} +\vskip 3pt +\begin{tabular}{|c|c|} +\hline +{\bf field (0 is LSB, 31 is MSB)} & {\bf description}\\ \hline +rsvd (0:2) & Reserved.\\ \hline +ant (3:5) & 3-bit Antenna index of LTE PRACH packet\\ \hline +RF Num (6:21) & 16-bit field indicating the Radio Frame number of this received PRACH packet\\ \hline +SF Num (22:25) & 4-bit field indicating the sub-frame number in the radio frame for the LTE PRACH packet\\ + & Valid range of 0 to 9.\\ \hline +Exponent (26:31) & FFT exponent output (0 if unscaled) \\ +\hline +\end{tabular} +\begin{itemize} +\item {\bf PRACH data block:} Uncompressed IQ samples +\end{itemize} + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + +\tiny RE 0 (Real) +\tiny RE 0 (Imag) +\tiny RE 1 (Real) +\tiny RE 1 (Imag) + +166 304 m +165.917 272.508 l +166.247 272.508 l + + +486 304 m +486.316 272.508 l +485.986 272.508 l + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + +\tiny RE 837 (Real) +\tiny RE 837 (Imag) +\tiny RE 838 (Real) +\tiny RE 838 (Imag) + +166 304 m +165.917 272.508 l +166.247 272.508 l + + +486 304 m +486.316 272.508 l +485.986 272.508 l + + +6.00001 47.492 m +6.00001 32 l +646 32 l +646 47.492 l +h + + +528 16 m +528 16 l +528 16 l +528 16 l +h + + +560 16 m +560 16 l +560 16 l +560 16 l +h + + + + + + +64 224 m +64 192 l +224 192 l +224 224 l +h + + +224 224 m +224 192 l +384 192 l +384 224 l +h + + +384 224 m +384 192 l +544 192 l +544 224 l +h + + +544 224 m +544 192 l +704 192 l +704 224 l +h + + +64 192 m +64 160 l +224 160 l +224 192 l +h + + +224 192 m +224 160 l +384 160 l +384 192 l +h + + +384 192 m +384 160 l +544 160 l +544 192 l +h + + +544 192 m +544 160 l +704 160 l +704 192 l +h + +\small Gain 0 +\small Gain 1 +\small Gain 4 +\small Gain 5 +\small Gain 2 +\small Gain 3 +\small Gain 6 +\small Gain 7 + +272 512 m +272 512 l +272 512 l +272 512 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + +0 +16 +32 +48 +15 +31 +47 +63 + +64 320 m +64 288 l +544 288 l +544 320 l +h + + +544 320 m +544 288 l +704 288 l +704 320 l +h + + +64 288 m +64 256 l +384 256 l +384 288 l +h + + +384 288 m +384 256 l +544 256 l +544 288 l +h + + +544 288 m +544 256 l +704 256 l +704 288 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +384 256 m +384 224 l +704 224 l +704 256 l +h + +\small Destination Address +\small Source +\small Type (0x080A) +\small Subtype (0x0019) +\small Address +\small Frame status +\small Reserved + +64 160 m +64 128 l +384 128 l +384 160 l +h + +\small Frame Check Sequence +\tiny +\begin{itemize} +\item {\bf Type:} 2 byte (16 bit) field that specifies the RoE protocol +\item {\bf Subtype:} 2 byte (16 bit) field that specifies the packet subtype +\item {\bf Reserved:} 4 byte (32 bit) field reserved +\item {\bf Frame Status:} 4 byte (32 bit) field +\end{itemize} +\vskip 3pt +\begin{tabular}{|c|c|} +\hline +{\bf field (0 is LSB, 31 is MSB)} & {\bf description}\\ \hline +{\bf ant} (0:2) & The number of Antenna Carriers represented in the packet. Antenna numbers \\ +& range from 0 to 7 with valid inputs being 0,1, 3 and 7 (1,2,4,8 antennas)\\ \hline +{\bf ant start} (3:5) & starting antenna number\\ \hline +{\bf RF Num} (6:21) & 16-bit field indicating the Radio Frame number of the UL\_RE samples\\ \hline +{\bf SF Num} (22:25) & 4-bit field indicating the sub-frame number in the radio frame for the UL\_RE samples\\ + & Valid range of 0 to 9.\\ \hline +{\bf Sym Num:} (26:29) & Symbol number. Valid range of 0 to 13. \\ +{\bf rsvd:} (30:31) & reserved\\ +\hline +\end{tabular} +\begin{itemize} +\item {\bf ULRE data block:} compressed IQ samples (8-bit A-law). $N$ is the number of resource elements $N_{\mathrm{RB}}^{\mathrm{UL}}$. +\end{itemize} + +5 63.5079 m +5 46.9999 l +645 46.9999 l +645 63.5079 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + +IF4p5 Packets : ULRE (RRU$\rightarrow$ RAU,RCC) + +256 240 m +256 240 l +256 240 l + + +166 304 m +165.917 272.508 l +166.247 272.508 l + + +486 304 m +486.316 272.508 l +485.986 272.508 l + + +486.316 256 m +486.646 224 l +485.657 224 l + + +486.316 256 m +486.646 224 l +485.657 224 l + + +258.16 141.771 m +258.16 141.771 l + + +418.597 191.907 m +418.597 191.907 l + + +429.181 79.9357 m +429.181 79.9357 l + +\tiny RE 0\\Ant 1 (Re) +\tiny RE 0\\Ant 1 (Im) +\tiny RE 1\\Ant 1 (Re) +\tiny RE 1\\Ant 1 (Im) +\tiny RE 2\\Ant 1 (Re) +\tiny RE 2\\Ant 1 (Im) +\tiny RE 3\\Ant 1 (Re) +\tiny RE 3\\Ant 1 (Im) +\tiny RE $N-4$\\Ant $R$ (Re) +\tiny RE $N-4$\\Ant $R$ (Im) +\tiny RE $N-3$\\Ant $R$ (Re) +\tiny RE $N-3$\\Ant $R$ (Im) +\tiny RE $N-2$\\Ant $R$ (Re) +\tiny RE $N-2$\\Ant $R$ (Im) +\tiny RE $N-1$\\Ant $R$ (Re) +\tiny RE $N-1$\\Ant $R$ (Im) + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + + + + + +272 512 m +272 512 l +272 512 l +272 512 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + + +64 352 m +64 320 l +224 320 l +224 352 l +h + +0 +16 +32 +48 +15 +31 +47 +63 + +64 320 m +64 288 l +544 288 l +544 320 l +h + + +544 320 m +544 288 l +704 288 l +704 320 l +h + + +64 288 m +64 256 l +384 256 l +384 288 l +h + + +384 288 m +384 256 l +544 256 l +544 288 l +h + + +544 288 m +544 256 l +704 256 l +704 288 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +384 256 m +384 224 l +704 224 l +704 256 l +h + +\small Destination Address +\small Source +\small Type (0x080A) +\small Subtype (0x0020) +\small Address +\small Frame status +\small Reserved + +64 160 m +64 128 l +384 128 l +384 160 l +h + +\small Frame Check Sequence +\tiny +\begin{itemize} +\item {\bf Type:} 2 byte (16 bit) field that specifies the RoE protocol +\item {\bf Subtype:} 2 byte (16 bit) field that specifies the packet subtype +\item {\bf Reserved:} 4 byte (32 bit) field reserved +\item {\bf Frame Status:} 4 byte (32 bit) field +\end{itemize} +\vskip 3pt +\begin{tabular}{|c|c|} +\hline +{\bf field (0 is LSB, 31 is MSB)} & {\bf description}\\ \hline +{\bf ant} (0:2) & The number of Antenna Carriers represented in the packet. Antenna numbers \\ +& range from 0 to 7 with valid inputs being 0,1, 3 and 7 (1,2,4,8 antennas)\\ \hline +{\bf ant start} (3:5) & starting antenna number\\ \hline +{\bf RF Num} (6:21) & 16-bit field indicating the Radio Frame number of this DLRE packet\\ \hline +{\bf SF Num} (22:25) & 4-bit field indicating the sub-frame number in the radio frame for the DLRE packet\\ + & Valid range of 0 to 9.\\ \hline +{\bf Sym Num:} (26:29) & Symbol number. Valid range of 0 to 13. \\ +{\bf rsvd:} (30:31) & reserved\\ +\hline +\end{tabular} +\begin{itemize} +\item DLRE data block : compressed IQ samples (8-bit A-law). $N$ is the number of resource elements $N_{\mathrm{RB}}^{\mathrm{DL}}$. +\end{itemize} +IF4p5 Packets : DLRE (RAU,RCC $\rightarrow$RRU) + +258.16 141.771 m +258.16 141.771 l + + +418.597 191.907 m +418.597 191.907 l + + +429.181 79.9357 m +429.181 79.9357 l + + +5 63.5079 m +5 46.9999 l +645 46.9999 l +645 63.5079 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +64 256 m +64 224 l +384 224 l +384 256 l +h + + +166 304 m +165.917 272.508 l +166.247 272.508 l + + +486 304 m +486.316 272.508 l +485.986 272.508 l + + +486.316 256 m +486.646 224 l +485.657 224 l + + +486.316 256 m +486.646 224 l +485.657 224 l + +\tiny RE 0\\Ant 1 (Re) +\tiny RE 0\\Ant 1 (Im) +\tiny RE 1\\Ant 1 (Re) +\tiny RE 1\\Ant 1 (Im) +\tiny RE 2\\Ant 1 (Re) +\tiny RE 2\\Ant 1 (Im) +\tiny RE 3\\Ant 1 (Re) +\tiny RE 3\\Ant 1 (Im) +\tiny RE $N-4$\\Ant $R$ (Re) +\tiny RE $N-4$\\Ant $R$ (Im) +\tiny RE $N-3$\\Ant $R$ (Re) +\tiny RE $N-3$\\Ant $R$ (Im) +\tiny RE $N-2$\\Ant $R$ (Re) +\tiny RE $N-2$\\Ant $R$ (Im) +\tiny RE $N-1$\\Ant $R$ (Re) +\tiny RE $N-1$\\Ant $R$ (Im) + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + +248.997 435.732 m +248.997 403.732 l + + + + + + +640 128 m +640 32 l +704 32 l +704 128 l +h + + +640 480 m +640 176 l +720 176 l +720 480 l +h + + +328.159 119.72 m +328.159 15.3556 l +554.022 15.3556 l +554.022 119.72 l +h + + +96 784 m +96 496 l +224 496 l +224 784 l +h + + +-192 928 m +-192 944 l +-192 944 l +-192 928 l +h + + +96 784 m +96 496 l +224 496 l +224 784 l +h + +\begin{small}L1 Instance 0\end{small} +LI instance 1 +\begin{small}MAC/RLC/PDCP Instance 0\end{small} + +364 518 m +364 518 l +364 518 l +364 518 l +h + + +96 784 m +96 496 l +224 496 l +224 784 l +h + + +128 768 m +128 704 l +192 704 l +192 768 l +h + +\setstretch{.5}\begin{tiny} +DL/UL Scheduler +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + + +180 460 m +340 460 l + + +180 460 m +340 460 l + +\begin{tiny}1ms TICK\end{tiny} + +392.067 448.35 m +232.502 360 l + +\begin{tiny}$\mathrm{DCI}_0$, Transport Blocks\end{tiny} + +\begin{tiny}$\mathrm{DCI}_1$\end{tiny} + +\begin{tiny}$\mathrm{DCI}_2$\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_0$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_1$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_2$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_0$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_1$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_2$ +\end{tiny} + + +234.502 211.006 m +387 210 l + + +243.386 213.48 m +243.386 213.48 l + + +232.502 250.102 m +387.004 250.371 l + + +232.502 310 m +387 310 l + + +232.502 346.88 m +387 347 l + + +336.917 451.424 m +185.872 274.589 l + + +232.5 410 m +386.079 409.083 l + +\begin{tiny}Transport Blocks\end{tiny} + +\begin{tiny}Transport Blocks\end{tiny} + +\setstretch{.5}\begin{tiny}CQI/SR/ACK/NAK/PHR\\Transport Blocks\end{tiny} +\setstretch{.5}\begin{tiny}CQI/SR/ACK/NAK/PHR\\Transport Blocks\end{tiny} +\setstretch{.5}\begin{tiny}CQI/SR/ACK/NAK/PHR\\Transport Blocks\end{tiny} + +180 460 m +340 460 l + + +180 460 m +340 460 l + +\begin{tiny}1ms TICK\end{tiny} +\begin{tiny}$\mathrm{DCI}_0$, Transport Blocks\end{tiny} + + +184.502 313 m +332 313 l + +\begin{small}MAC/RLC/PDCP Instance 1\end{small} + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX \\ +$\mathrm{eNB}_0$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX \\ +$\mathrm{eNB}_0$ +\end{tiny} + +\setstretch{.5}\begin{tiny}CQI/SR/ACK/NAK/PHR\\Transport Blocks\end{tiny} + +128 768 m +128 704 l +192 704 l +192 768 l +h + +\setstretch{.5}\begin{tiny} +DL/UL Scheduler +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP RX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +MAC TX +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PDCP TX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC RX +\end{tiny} + +\setstretch{.5}\begin{tiny} +RLC TX +\end{tiny} + +RU/L1 Instances and Component Carriers + +96 784 m +96 496 l +224 496 l +224 784 l +h + + +96 784 m +96 496 l +224 496 l +224 784 l +h + + +364 518 m +364 518 l +364 518 l +364 518 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_3$ +\end{tiny} + + +144 480 m +144 32 l +176 32 l +176 480 l +h + + +176 432 m +176 432 l + + +192 464 m +176 464 l + + +190.041 464 m +190.041 464 l + + +190.041 464 m +190.041 464 l + + +192 464 m +176 464 l + + +192 464 m +176 464 l + + +192 464 m +176 464 l + + +192 464 m +176 464 l + + +192 464 m +176 464 l + + +192 464 m +176 464 l + + +192 464 m +176 464 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_0$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_1$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_2$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_4$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_5$ +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_6$ +\end{tiny} + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +144 464 m +129.959 464 l + + +640 400 m +640 400 l +640 400 l +640 400 l +h + + + + + +\small\begin{itemize} +\item {\em Radio Unit} (RU) is +\begin{itemize} +\item an entity managing a set of {\bf physical} antennas. It can have a {\em local RF unit} or {\em remote RF unit} +\item performs precoding of multiple eNB TX streams and OFDM modulation (TX) and demodulation (RX) (part of 36.211) +\end{itemize} +\item {\em L1 Instance} (indexed by {\tt Mod\_id}, or {\tt enb\_mod\_id}) is a separate set of threads and contexts for the eNB/gNB procedures. There is one MAC/RLC entity associated to all :1 component carriers. +\item {\em L1 Component Carrier} (indexed by {\tt CC\_id}) is +\begin{itemize} +\item a software entity managing the L1 procedures (36.213,36.212,36.211) and can act on +\begin{itemize} +\item sectored antenna component +\item Rel10+ component carrier +\item virtual cell for DAS or Massive-MIMO array +\end{itemize} +\item each L1 instance is managed by one or two threads which operate on a subframe (TX and RX) and can have a {\em local RU} or {\em remote RU} +\item if a remote radio unit the eNB performs the 36.213 specifications only (HARQ, etc.) and connects to the remainder via the IF2 midhaul interface. +\end{itemize} +\end{itemize} +RU/L1 Instances and Component Carriers + + + + +RU/L1 Instances and Component Carriers +\small\begin{itemize} +\item RU may have both an {\tt if\_device} for fronthaul and an {\tt rf\_device} for interconnection with a local RF unit +\item if the {\tt rf\_device} is absent, it must have a southbound fronthaul interface (either IF5 or IF4p5) depending on the local processing of the remote RU +\item if the {\tt if\_device} is absent, it must have a southbound RF interface and {\tt rf\_device}. +\item three types of L1 processing are performed by the RU \begin{itemize} +\item subset of common L1 procedures from 36.211 specifications +\item fronthaul compression/decompression +\item framing +\end{itemize} +\item on TX +\begin{itemize} +\item A-law compression for (NGFI\_RAU\_IF4p5, NGFI\_RAU\_IF5) +\item A-law decompression (for NGFI\_RRU\_IF4p5 and NGFI\_RRU\_IF5) +\item OFDM modulation and cyclic prefix insertion (for NGFI\_RRU\_IF4p5,NGFI\_RAU\_IF5,3GPP\_eNodeB\_BBU,3GPP\_eNodeB) +\item Precoding (for NGFI\_RAU\_IF5, NGFI\_RAU\_IF4p5,3GPP\_eNodeB\_BBU,3GPP\_eNodeB) +\end{itemize} +\end{itemize} + + + + +RU/L1 Instances and Component Carriers +\small\begin{itemize} +\item on RX +\begin{itemize} +\item A-law compression for (NGFI\_RRU\_IF4p5, NGFI\_RRU\_IF5) +\item A-law decompression (for NGFI\_RAU\_IF4p5 and 3GPP\_eNodeB\_BBU) +\item cyclic prefix removal, frequency-shifting, OFDM demodulation, PRACH DFT (for NGFI\_RRU\_IF4p5, NGFI\_RAU\_IF5, 3GPP\_eNodeB\_BBU, 3GPP\_eNodeB) +\end{itemize} +\item On TX path +\begin{itemize} +\item L1 instances/component carriers operate on a set of logical antenna ports (0-3 for TM1-6, 4 for eMBMS, 5 for TM7, 6 for positioning, 7-8 for TM8, etc.) +\item each L1 instance has a list of RUs and the logical antenna ports are mapped to the physical antennas attached to the RUs via the precoding function +\end{itemize} +\end{itemize} + + + + +\small\begin{itemize} +\item Example configurations +\begin{itemize} +\item {\em itsolated eNB:} one instance and one or several component carriers (multiple-frequencies or antenna sectors). Potentially multiple radio-units (for CoMP). Here there is a common MACRLC instnance driving multiple L1 procedures +\item {\em indoor DAS system (RCC split with L1/L2 RAU) Multiple layer 2 instances each driving one or more component carriers} here the RAU implements multiple L1/L2 instances and precoding function. Usually with IF2/IF1'' xhaul to RCC or potentially also MAC/RLC in RAU with IF1' xhaul to RCC. +\item {\em massive-MIMO array} same as 2nd indoor DAS system (i.e. integrated L1/L2 RAU with array) +\end{itemize} +\end{itemize} +RU/L1 Instances and Component Carriers + + + + + +288 384 m +288 96 l +672 96 l +672 384 l +h + + +301.83 142.941 m +301.83 103.286 l +648 104 l +648 144 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +301.83 142.941 m +301.83 103.286 l +648 104 l +648 144 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF4p5 / ethernet} +\end{tiny} + +\setstretch{.5}\begin{tiny} +upper-PHY TX (212,213) +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +389.83 375.941 m +389.83 336.286 l +616 336 l +616 376 l +h + +\setstretch{.5}\begin{tiny} +{\tt NFGI\_IF1pp / ethernet} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +\setstretch{.5}\begin{tiny} +TX PRECODING\\RX COMBINING +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + +\small\begin{itemize} +\item Example: RAU with {\tt NGFI\_IF1pp} xhaul (MAC/PHY split) northbound, {\tt NGFI\_IF4p5} fronthaul southbound, 2 vCell logical interfaces (2 L1/L2 instances, or 1 L2 instance and 2 CCs), 4 RRUs with {\tt NGFI\_IF4p5} + +\end{itemize} + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +upper-PHY RX (212,213) +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +upper-PHY RX (212,213) +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +upper-PHY TX (212,213) +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_0$ +\end{tiny} + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_1$ +\end{tiny} + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_2$ +\end{tiny} + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_3$ +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{eNB}_0$ +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{eNB}_1$ +\end{tiny} + +RAU Example (DAS) + + + + + +168 416 m +168 32 l +576 32 l +576 416 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX0 +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +176 176 m +176 136 l +552 136 l +552 176 l +h + +\setstretch{.5}\begin{tiny} +{\tt NGFI\_IF4p5 / ethernet} +\end{tiny} + +\setstretch{.5}\begin{tiny} +PHY TX0 +\end{tiny} + +184 360 m +184 336 l +552 336 l +552 360 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +184 408 m +184 368 l +552 368 l +552 408 l +h + +\setstretch{.5}\begin{tiny} +{\tt NGFI\_IF1p / ethernet} +\end{tiny} + + +184 264 m +184 224 l +552 224 l +552 264 l +h + +\setstretch{.5}\begin{tiny} +TX PRECODING\\RX COMBINING +\end{tiny} + +\small\begin{itemize} +\item Example: massive-MIMO RAU with {\tt NGFI\_IF1p} fronthaul northbound, 8 L1 component carriers,1 L2 instances, many local RRUs with {\tt NGFI\_IF4p5} southbound + +\end{itemize} + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +{\tt if\_device} +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX1 +\end{tiny} + +\setstretch{.5}\begin{tiny} +PHY TX1 +\end{tiny} + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX7 +\end{tiny} + +\setstretch{.5}\begin{tiny} +PHY TX7 +\end{tiny} + +184 320 m +184 288 l +552 288 l +552 320 l +h + +\setstretch{.5}\begin{tiny} +RLC +\end{tiny} + + +184 280 m +184 248 l +552 248 l +552 280 l +h + +\setstretch{.5}\begin{tiny} +MAC +\end{tiny} + + +376 208 m +448 208 l + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{eNB}_0$ +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{eNB}_1$ +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{eNB}_7$ +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_{0\cdots 15}$ +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_{16\cdots 31}$ +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_{32\cdots 47}$ +\end{tiny} + + +184.83 261.941 m +184.83 128 l +272 128 l +272 261.941 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_{48\cdots 63}$ +\end{tiny} + +RAU Example (Massive-MIMO) + + + + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +232 384 m +232 256 l +543.99 256 l +543.99 384 l +h + + +96 136 m +96 48 l +540 48 l +540 136 l +h + + +88 192 m +88 80 l +248 80 l +248 192 l +h + + +88 192 m +88 80 l +248 80 l +248 192 l +h + + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\small\begin{itemize} +\item IF5 transports packets of size equal to a subframe and corresponding to a 1ms chunk of signal in the time-domain. This is done via the functions send\_if5 and recv\_if5, in the layer1 transport procedures ({\tt openair1/PHY/LTE\_TRANSPORT/if5\_tools.c}). A timestamp is given along with the samples, corresponding to the time (in samples) of the first sample of the packet. +\item each block can be compressed with A-law compression, yielding a compression rate of .5. +\end{itemize} +RU Procedures (NGFI\_IF5) + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_2$ (211,212) +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_2$ (211,212) +\end{tiny} + + +144 480 m +144 32 l +176 32 l +176 480 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_0$ +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_1$ (211,212) +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_0$ (211,212) +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_1$ (211,212) +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_0$ (211,212) +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +132 294 m +132 208 l +384 208 l +384 294 l +h + + +144.991 145.396 m +289.432 145.382 l + + +144.991 120.982 m +289.432 121.382 l + +\tiny {\tt RU->ru\_time.rxdata[0]} +\tiny {\tt RU->ru\_time.rxdata[R-1]} + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\setstretch{.5}\tt\tiny slot\_fep\_ul\par36.211 + +153 232 m +153 176 l +228 176 l +228 232 l +h + + +184 268 m +196 268 l + + +184 244 m +196 244 l + +\tiny {\tt eNB->common\_vars.rxdataF[0]} +\tiny {\tt eNB->common\_vars.rxdataF[R-1]} + +273 269 m +412 268 l + + +415.263 120.984 m +575 120.608 l + + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\tiny $\mathrm{Alaw}^{-1}()$ + +56 128 m +110.531 128.542 l + +\tiny from IF5 {\tt if\_device} + +680 104 m +680 104 l +680 104 l +680 104 l +h + + +544 324 m +544 144 l +576 144 l +576 324 l +h + +\setstretch{.5}\tt\tiny P\\R\\E\\C\\O\\D\\I\\N\\G\\ + +632 360 m +632 188 l +660 188 l +660 360 l +h + +\tiny {\tt RU->ru\_time.txdata[0]} + +700 264 m +735.133 264 l + + +632 264.556 m +671.833 265 l + +\setstretch{.5}\tt\tiny do\_ofdm\_mod\_rt()\par 36.211 +\setstretch{.5}\begin{tiny} +{\tt openair1/SCHED/ru-procedures.c} +\end{tiny} + + +517.232 240.387 m +576.078 240 l +576.078 240 l + + +517.232 240.387 m +576.078 240 l +576.078 240 l + + +517.232 240.387 m +576.078 240 l +576.078 240 l + + +517.232 240.387 m +576.078 240 l +576.078 240 l + +\tiny $\mathrm{Alaw}()$ +\tiny to IF5 {\tt if\_device} + +56 240 m +356.214 240.281 l + + +700 264 m +735.133 264 l + +\tiny {\tt RU->ru\_time.txdata[T-1]} +\setstretch{.5}\begin{tiny} +{\tt recv\_IF5()} +\end{tiny} + +\setstretch{.5}\begin{tiny} +{\tt send\_IF5()} +\end{tiny} + +\setstretch{.5}\begin{tiny} +{\tt ru\_fep\_full()} +\end{tiny} + +IF5 RU eNB end +\tiny $\mathrm{7.5kHz}()$ +\setstretch{.5}\begin{tiny} +{\tt ru\_thread()} +\end{tiny} + +\setstretch{.5}\begin{tiny} +{\tt ru\_thread\_asynch\_rxtx()} +\end{tiny} + + + + + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +96 136 m +96 48 l +540 48 l +540 136 l +h + + +88 192 m +88 80 l +248 80 l +248 192 l +h + + +88 192 m +88 80 l +248 80 l +248 192 l +h + + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\small\begin{itemize} +\item IF4p5 transports packets of size equal to an OFDM symbol (for DLRE and ULRE) indexed by the symbol, subframe and frame number. This is done via the functions send\_if4p5 and recv\_if4p5, in the layer1 transport procedures ({\tt openair1/PHY/LTE\_TRANSPORT/if4\_tools.c}). +\item each block are compressed with A-law compression, yielding a compression rate of .5. +\end{itemize} +RU Procedures (NGFI\_IF4p5) + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_2$ (211,212) +\end{tiny} + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_2$ (211,212) +\end{tiny} + + +144 480 m +144 32 l +176 32 l +176 480 l +h + +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_0$ +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_1$ (211,212) +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY RX $n$\\ +$\mathrm{eNB}_0$ (211,212) +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_1$ (211,212) +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\setstretch{.5}\begin{tiny} +PHY TX $n+4$\\ +$\mathrm{eNB}_0$ (211,212) +\end{tiny} + + +371.001 106.337 m +323.502 106.337 l +323.502 106.337 l + + +175.991 137.396 m +575 138.93 l + + +175.991 112.982 m +575 114.329 l + + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\tiny $\mathrm{Alaw}^{-1}()$ + +56 120 m +141.531 120.07 l + +\tiny from IF4p5 {\tt if\_device} + +680 104 m +680 104 l +680 104 l +680 104 l +h + + +544 324 m +544 144 l +576 144 l +576 324 l +h + +\setstretch{.5}\tt\tiny P\\R\\E\\C\\O\\D\\I\\N\\G\\ + +700 264 m +735.133 264 l + +\setstretch{.5}\begin{tiny} +{\tt openair1/SCHED/ru-procedures.c} +\end{tiny} + + +517.232 240.387 m +576.078 240 l +576.078 240 l + + +517.232 240.387 m +576.078 240 l +576.078 240 l + + +517.232 240.387 m +576.078 240 l +576.078 240 l + + +517.232 240.387 m +576.078 240 l +576.078 240 l + +\tiny $\mathrm{Alaw}()$ +\tiny to IF4p5 {\tt if\_device} + +56 240 m +356.214 240.281 l + + +700 264 m +735.133 264 l + +\setstretch{.5}\begin{tiny} +{\tt recv\_IF4p5()} +\end{tiny} + +\setstretch{.5}\begin{tiny} +{\tt send\_IF4p5()} +\end{tiny} + +IF4p5 RU eNB end + +153 232 m +153 176 l +228 176 l +228 232 l +h + + +111.191 120.045 m +112 70 l +142 69.9344 l + + +-36 68 m +-36 68 l + + +175.991 112.982 m +575 114.329 l + +\tiny {\tt eNB->common\_vars.rxdataF[0]} +\tiny {\tt eNB->common\_vars.rxdataF[R-1]} +\tiny {\tt eNB->prach\_vars.prachF[0$\cdots$ R-1]} +\setstretch{.5}\begin{tiny} +{\tt ru\_thread()} +\end{tiny} + + + + + + +330 430 m +330 390 l +380 390 l +380 430 l +h + + +232 384 m +232 256 l +543.99 256 l +543.99 384 l +h + + +96 136 m +96 48 l +540 48 l +540 136 l +h + + +132 294 m +132 208 l +384 208 l +384 294 l +h + + +96 384 m +96 148 l +544 148 l +544 256 l +224 256 l +224 384 l +h + + +444 164 m +444 84.382 l +522.222 84.382 l +522.222 164 l +h + + +132 294 m +132 208 l +384 208 l +384 294 l +h + + +444 164 m +444 84.382 l +522.222 84.382 l +522.222 164 l +h + + +153 232 m +153 176 l +228 176 l +228 232 l +h + +RU Procedures (NGFI\_IF4p5) +\setstretch{.5}\begin{tiny} +$\mathrm{RU}_0$ +\end{tiny} + + +144.991 145.396 m +289.432 145.382 l + + +144.991 120.982 m +289.432 121.382 l + +\tiny {\tt RU->ru\_time.rxdata[0]} +\tiny {\tt RU->ru\_time.rxdata[R-1]} + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\setstretch{.5}\tt\tiny slot\_fep\_ul\par36.211 + +153 232 m +153 176 l +228 176 l +228 232 l +h + + +184 268 m +196 268 l + + +184 244 m +196 244 l + + +273 269 m +412 268 l + + +415.263 120.984 m +575 120.608 l + + +56 128 m +110.531 128.542 l + +\tiny from {\tt rf\_device} + +680 104 m +680 104 l +680 104 l +680 104 l +h + + +632 360 m +632 188 l +660 188 l +660 360 l +h + +\tiny {\tt RU->ru\_time.txdata[0]} + +380.13 336.98 m +149.46 336.349 l + + +632 264.556 m +671.833 265 l + +\setstretch{.5}\tt\tiny do\_ofdm\_mod\_rt()\par 36.211 +\setstretch{.5}\begin{tiny} +{\tt openair1/SCHED/ru-procedures.c} +\end{tiny} + +\tiny to {\tt rf\_device} + +58 240 m +114.121 240.053 l + + +380.45 296 m +149.46 295.058 l + +\tiny {\tt RU->ru\_time.txdata[T-1]} +\setstretch{.5}\begin{tiny} +{\tt ru\_fep\_full()} +\end{tiny} + +IF4p5 RU remote-end + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\tiny $\mathrm{Alaw}^{-1}()$ + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\tiny $\mathrm{Alaw}()$ +\tiny $\mathrm{7.5kHz}()$ + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\setstretch{.5}\begin{tiny} +{\tt recv\_IF4p5()} +\end{tiny} + +\setstretch{.5}\begin{tiny} +{\tt send\_IF4p5()} +\end{tiny} + + +485.71 128.939 m +581.963 129.331 l + +\tiny to {\tt if\_device} +\tiny from {\tt if\_device} + +58 240 m +114.121 240.053 l + + +131 344 m +131 316 l +276 316 l +276 344 l +h + +\setstretch{.5}\tt\tiny ru\_prach\_procedures\par36.211 + +440.514 328 m +477 327.572 l + +\tt\tiny ru\_prach\_procedures() + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\setstretch{.5}\tt\tiny rx\_prachl\par36.211 + +199.412 220.391 m +200 104 l +236.674 103.978 l + + +178.262 196.069 m +179.06 92 l +236.674 91.6468 l + + +65.0054 121.159 m +65.0054 121.159 l +65.0054 121.159 l +65.0054 121.159 l +h + +\setstretch{.5}\begin{tiny} +{\tt ru\_thread\_prach()} +\end{tiny} + +\setstretch{.5}\begin{tiny} +{\tt ru\_thread()} +\end{tiny} + + +65.0054 357.66 m +65.0054 357.66 l +65.0054 357.66 l +65.0054 357.66 l +h + +\setstretch{.5}\begin{tiny} +{\tt ru\_thread\_asynch\_rxtx()} +\end{tiny} + +\tiny to {\tt if\_device} + +485.71 128.939 m +581.963 129.331 l + + + + + + +175.695 380 m +176.42 128 l + +OAI IF1pp Interface +\tiny\begin{itemize} +\item OAI IF1pp is the interface between the 36.213 Physical Layer Procedures (HARQ, SR, CSI, etc.) and the transport/physical channel processing +\item it can be networked, although this is not used as an xhaul interface at the moment. +\end{itemize} + +96 384 m +96 320 l +640 320 l +640 384 l +h + + +128 368 m +128 336 l +352 336 l +352 368 l +h + + +128 368 m +128 336 l +352 336 l +352 368 l +h + +\tiny {\tt phy\_procedures\_lte\_eNB\_TX} +\tiny {\tt phy\_procedures\_lte\_eNB\_RX} + +96 384 m +96 320 l +640 320 l +640 384 l +h + +\small PHY transport and physical channel procedures +\tiny {\tt common\_signal\_procedures()} +\tiny {\tt pmch\_procedures()} +\tiny {\tt generate\_dlsch\_parameters\_from\_dci()} +\tiny {\tt generate\_ulsch\_parameters\_from\_dci()} +\tiny {\tt phy\_config\_dedicated\_step2()} +\tiny {\tt generate\_dci\_top()} +\tiny {\tt generate\_phich\_top()} +\tiny {\tt pdsch\_procedures()} + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + +\tiny {\tt pucch\_procedures()} +\tiny {\tt process\_Msg3()} + +175.695 380 m +176.42 128 l + +\tiny {\tt rx\_ulsch()} + +175.695 380 m +176.42 128 l + +\tiny {\tt ulsch\_decoding()} + +175.695 380 m +176.42 128 l + +\tiny {\tt extract\_cqi()} + +175.695 380 m +176.42 128 l + +\tiny {\tt get\_Msg3\_alloc\_ret()} + +175.695 380 m +176.42 128 l + +\tiny {\tt lte\_est\_timing\_advance\_pusch()} + +175.695 380 m +176.42 128 l + +\tiny {\tt lte\_eNB\_I0\_measurements()} + +175.695 380 m +176.42 128 l + +\tiny {\tt process\_HARQ\_info()} + +175.695 380 m +176.42 128 l + +\small {\tt 36.213}\par +{\tt openair1/SCHED} +\small {\tt 36.211/212}\par +{\tt openair1/PHY} + + + + + +120 528 m +120 0 l +592 0 l +592 528 l +h + + +180 524 m +180 476 l +588 476 l +588 524 l +h + + +248 520 m +248 483.903 l +400 484 l +400 520 l +h + + +180 493.216 m +180 452 l +536 452 l +536 493.216 l +h + + +404 480 m +404 472 l +404 472 l +404 480 l +h + + +340 488 m +340 464 l +444 464 l +444 488 l +h + + +312 456 m +312 432 l +424 432 l +424.001 456 l +h + + +144 448 m +144 360 l +536 360 l +536 448 l +h + + +144 260 m +144 116 l +536 116 l +536 260 l +h + + +144 344 m +144 264 l +536 264 l +536 344 l +h + + +128 440 m +128 384 l +224 384 l +224 440 l +h + +\tt\tiny generate\_dci\_top() + + +0 424 m +0 32 l +48 32 l +48 424 l +h + +M\\ +A\\ +C + +64 416 m +172 416 l + +\tt\tiny DCI\_PDU + +128 440 m +128 384 l +224 384 l +224 440 l +h + +\setstretch{.5}\tt\tiny dlsch\_coding()\par36.212 + +64 416 m +172 416 l + +\tt\tiny DLSCH\_PDU\_0 + +128 440 m +128 384 l +224 384 l +224 440 l +h + + +64 416 m +172 416 l + +\tt\tiny DLSCH\_PDU\_1\_0 + +128 440 m +128 384 l +224 384 l +224 440 l +h + + +64 416 m +172 416 l + +\tt\tiny DLSCH\_PDU\_1\_1 + +312 456 m +312 432 l +424 432 l +424.001 456 l +h + +\setstretch{.5}\tt\tiny generate\_pcfich()\par36.212,36.211 + +304 408 m +304 384 l +400 384 l +400 408 l +h + +\setstretch{.5}\tt\tiny generate\_dci0()\par36.212 + +408 400 m +408 352 l +520 352 l +520 400 l +h + +\setstretch{.5}\tt\tiny pdcch\_scrambling()\par pdcch\_modulation\par pdcch\_interleaving\par36.211 +\setstretch{.5}\tt\tiny dlsch\_coding()\par36.212 +\setstretch{.5}\tt\tiny dlsch\_coding()\par36.212 + +268 426.729 m +293 426.729 l + + +268 399.17 m +293 399.17 l + + +405 397.373 m +421 397.373 l + + +294 320 m +294 296 l +392 296 l +392 320 l +h + +\setstretch{.5}\tt\tiny dlsch\_encoding()\par36.212 + +268 399.17 m +293 399.17 l + + +408 322.774 m +408 288 l +520 288 l +520 322.774 l +h + +\setstretch{.5}\tt\tiny dlsch\_scrambling()\par dlsch\_modulation()\par36.211 + +405 397.373 m +421 397.373 l + + +294 320 m +294 296 l +392 296 l +392 320 l +h + +\setstretch{.5}\tt\tiny dlsch\_encoding()\par36.212 + +408 251 m +408 144 l +520 144 l +520 251 l +h + +\setstretch{.5}\tt\tiny dlsch\_scrambling()\par dlsch\_modulation()\par[2-4 layers]\par 36.211 + +405 397.373 m +421 397.373 l + + +294 320 m +294 296 l +392 296 l +392 320 l +h + +\setstretch{.5}\tt\tiny dlsch\_encoding()\par36.212 + +405 397.373 m +421 397.373 l + + +268 399.17 m +293 399.17 l + + +268 399.17 m +293 399.17 l + + +552 428 m +552 428 l + + +405 409 m +600 408.924 l + + +520 381 m +600 380.885 l + + +521 292.923 m +600 293.648 l + +\tt\tiny openair1/SCHED/phy\_procedures\_lte\_eNb.c:pdsch\_procedures() +\tt\tiny openair1/SCHED/phy\_procedures\_lte\_eNb.c:pdsch\_procedures() +\tt\tiny openair1/PHY/LTE\_TRANSPORT/dci.c + +360 104 m +360 104 l +360 104 l +360 104 l +h + + +144 344 m +144 264 l +536 264 l +536 344 l +h + + +128 440 m +128 384 l +224 384 l +224 440 l +h + +\setstretch{.5}\tt\tiny dlsch\_coding()\par36.212 +\tt\tiny MCH\_PDU + +294 320 m +294 296 l +392 296 l +392 320 l +h + +\setstretch{.5}\tt\tiny dlsch\_encoding()\par36.212 + +268 399.17 m +293 399.17 l + + +408 322.774 m +408 288 l +520 288 l +520 322.774 l +h + +\setstretch{.5}\tt\tiny dlsch\_scrambling()\par mch\_modulation()\par36.211 + +405 397.373 m +421 397.373 l + +\tt\tiny openair1/SCHED/phy\_procedures\_lte\_eNb.c:pmch\_procedures() + +64 416 m +172 416 l + + +128 488 m +128 452 l +172 452 l +172 488 l +h + + +140 472 m +140 472 l +140 472 l +140 472 l +h + +\setstretch{.5}\tt\tiny UL CNTL\\36.213 + +188 476 m +188 460 l +316 460 l +316 476 l +h + +\tt\tiny generate\_phich\_top() + +172 468 m +188 468 l + +\setstretch{.5}\tt\tiny generate\_phich()\par36.212,36.211 + +405 397.373 m +421 397.373 l + + +445 457 m +600 456.672 l + + +520.262 58 m +600 58.7558 l + +\tt\tiny openair1/PHY/LTE\_TRANSPORT/phich.c +\tiny PHICH REs +\tiny PCFICH REs +\tiny PDCCH REs +\tiny PDSCH REs + +104.077 0 0 104.077 528 236 e + +\tiny PMCH REs +\setstretch{.5}\tt\tiny generate\_pilots\_slot()\par generate\_pss/sss/pbch()\par36.211 + +248 488.695 m +248 488.695 l +248 488.695 l +248 488.695 l +h + +\tt\tiny openair1/SCHED/phy\_procedures\_lte\_eNb.c:common\_signal\_procedures() + +401 507 m +600.424 507.963 l + +\tiny CS-RS/PSS/SSS/PBCH REs + +576 332 m +592 324 l + +\tt\tiny openair1/SCHED/phy\_procedures\_lte\_eNb.c:phy\_procedures\_eNB\_TX() +eNB TX Procedures +\tiny eNodeB\_3GPP or NGFI\_RCC\_IF4p5 + +232 276 m +232 240 l +240 240 l +240 276 l +h + +\tt\tiny IF2 split points + +232 276 m +232 240 l +240 240 l +240 276 l +h + + +521 292.923 m +600 293.648 l + + +521 292.923 m +600 293.648 l + + + + + + +539.766 93 m +539.306 79.0026 l +340 79.7439 l + + +447.064 116 m +447.064 92 l +632 92 l +632 116 l +h + + +304 384 m +304 320 l +368 320 l +368 384 l +h + + +225.588 267.631 m +225.588 257.004 l +451.999 257.004 l +451.999 267.631 l +h + + +286.577 417.212 m +286.577 407.581 l +412.989 407.581 l +412.989 417.212 l +h + + +-66.4757 363.53 m +-66.4757 358.467 l +-65.4632 358.467 l +-65.4632 363.53 l +h + + +330 430 m +330 390 l +380 390 l +380 430 l +h + +\begin{tiny} +\tt {\bf phy\_procedures\_eNB\_TX}(sched\_subframe,eNB,abstraction\_flag,r\_type,rn) +\end{tiny} + +\begin{tiny} eNB instance and component carriers \end{tiny} +\begin{tiny} subframe where TX was scheduled \end{tiny} + +293.168 472.33 m +189.522 511.272 l + + +372.849 474.127 m +310.542 512.47 l + +\setstretch{.5}\begin{tiny} Flag to indicate 212/213 Split\\(transport channels, no 211 procedures) \end{tiny} + +432.16 473.528 m +526.22 499.29 l + + +27.6629 0 0 27.6629 531.612 404.032 e + + +526.819 478.92 m +598.712 484.312 l + +\begin{tiny} Experimental (for relays)\end{tiny} +\begin{tiny} +\bf\tt Check for dead UEs +\end{tiny} + +304 384 m +304 320 l +368 320 l +368 384 l +h + + +340.45 451.636 m +340.45 417.212 l + +\begin{tiny}\tt eNB$\rightarrow$CC\_id==0?\end{tiny} +\begin{tiny} +\bf\tt Call eNB\_dlsch\_ulsch\_scheduler [MAC] +\end{tiny} + +340.45 451.636 m +340.45 417.212 l + + +340.45 451.636 m +340.45 417.212 l + + +340.45 451.636 m +340.45 417.212 l + + +418.155 336 m +528 336 l +528 248 l +340 247.665 l + +\tiny no + +225.588 267.631 m +225.588 257.004 l +451.999 257.004 l +451.999 267.631 l +h + +\begin{tiny}\tt is PMCH subframe?\end{tiny} +\begin{tiny} +\bf\tt Call pmch\_procedures +\end{tiny} + +340.45 451.636 m +340.45 417.212 l + + +340 97.4877 m +340 52 l + +\tiny no +\setstretch{.5} +\begin{tiny} +\bf\tt Call common\_signal\_procedures\\ +(CS-RS/PSS/SSS/PBCH) +\end{tiny} + +417.889 180.561 m +540 180 l +539.532 116 l + + +352 0 m +352 12 l +384 12 l +384 12 l +384 0 l +368 -12 l +368 -12 l +h + +eNB TX Flowchart + + + + + +225.588 267.631 m +225.588 257.004 l +451.999 257.004 l +451.999 267.631 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call get\_dci\_sdu [MAC]\\ dci=first\_dci +\end{tiny} + +368.672 502.411 m +368 524 l + + +304 384 m +304 320 l +368 320 l +368 384 l +h + +\setstretch{.5}\begin{tiny}\tt dci not empty and DL dci?\end{tiny} + +368.672 502.411 m +368 524 l + + +368.297 357.206 m +368 380 l + + +260 356 m +260 328 l +476 328 l +476 356 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call generate\_dlsch\_params\_from\_dci\\ +dci=next(dci) +\end{tiny} +\tt\tiny no + +260 342 m +240.242 342 l +240 472 l +368 472 l + + +445.666 417.484 m +512.662 417.484 l +512.662 303.725 l +367.862 303.725 l +367.862 288.454 l + + +260 356 m +260 328 l +476 328 l +476 356 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call phy\_config\_dedicated\_step2\\ +dci=first\_dci +\end{tiny} + +272 200 m +344.961 161.229 l +416 200 l +344.961 235.739 l +h + +\setstretch{.5}\begin{tiny}\tt dci not empty and UL dci?\end{tiny} + +368.297 357.206 m +368 380 l + + +260 356 m +260 328 l +476 328 l +476 356 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call generate\_ulsch\_params\_from\_dci\\ +dci=next(dci) +\end{tiny} +\tt\tiny no + +260 123 m +240.242 123 l +240 252 l +368 252 l + + +416 200 m +488 200 l +489 96 l +345 96 l +344.862 77.0895 l + + +272 80 m +272 48 l +416 48 l +416 80 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call generate\_dci\_top\\ +Call generate\_phich\_top +\end{tiny} + +368.297 357.206 m +368 380 l + + +352 0 m +352 12 l +384 12 l +384 12 l +384 0 l +368 -12 l +368 -12 l +h + + +344 24 m +344 48 l + +\tt\tiny yes +\tt\tiny yes +eNB TX Flowchart + + + + + +240 96 m +240 56 l +496 56 l +496 96 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt dlsch\_eNB[UE].subframe\_active=false\par [no PUCCH ACK to be checked in TTI n+k]\par +UE=next(UE) +\end{tiny} + +288 464 m +368 432 l +448 464 l +368 496 l +h + + +288 464 m +368 432 l +448 464 l +368 496 l +h + + +368 528 m +368 512 l + + +288 464 m +368 432 l +448 464 l +368 496 l +h + +\setstretch{.5}\begin{tiny}\tt is dlsch\_SI active?\end{tiny} + +368 528 m +368 504 l + +\setstretch{.5}\begin{tiny}\tt is dlsch\_P active?\end{tiny} + +368 528 m +368 504 l + +\setstretch{.5}\begin{tiny}\tt is dlsch\_RA active?\end{tiny} +\tt\tiny no +\tt\tiny no +\tt\tiny no + +368 528 m +368 504 l + + +456 480 m +456 464 l +648 464 l +648 480 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call pdsch\_procedures(dlsch\_SI) +\end{tiny} + +448 464 m +536 464 l +536 448 l + + +536 432 m +536 424 l +368 424 l + +\tt\tiny yes + +456 480 m +456 464 l +648 464 l +648 480 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call pdsch\_procedures(dlsch\_P) +\end{tiny} + +448 464 m +536 464 l +536 448 l + + +536 432 m +536 424 l +368 424 l + +\tt\tiny yes + +456 480 m +456 464 l +648 464 l +648 480 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call pdsch\_procedures(dlsch\_RA) +\end{tiny} + +448 464 m +536 464 l +536 448 l + + +536 432 m +536 424 l +368 424 l + +\tt\tiny yes + +256 232 m +256 208 l +480 208 l +480 232 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt UE=first\_UE from UE\_list \par [list of UE with t-CRNTI or CRNTI] +\end{tiny} + +288 464 m +368 432 l +448 464 l +368 496 l +h + +\setstretch{.5}\begin{tiny}\tt is dlsch\_UE active?\end{tiny} + +368 528 m +368 504 l + + +368 528 m +368 504 l + + +456 480 m +456 464 l +648 464 l +648 480 l +h + +\setstretch{.5}\begin{tiny} +\bf\tt Call pdsch\_procedures(dlsch\_UE) +\end{tiny} +\tt\tiny yes + +448 464 m +536 464 l +536 448 l + + +536 432 m +536 424 l +368 424 l + +\tt\tiny no + +416 88 m +416 88 l +416 88 l +416 88 l +h + + +320 32 m +368 16 l +416 32 l +368 48 l +h + +\setstretch{.5}\begin{tiny}\tt UE=NULL?\end{tiny} + +368 72 m +368 56 l + + +320 40 m +224 40 l +224 168 l +288 168 l + +\tt\tiny no + +352 0 m +352 12 l +384 12 l +384 12 l +384 0 l +368 -12 l +368 -12 l +h + + +416 40 m +640 40 l +640 24 l + +\tt\tiny yes + +512 48 m +512 32 l +544 32 l +544 48 l +h + + +528 80 m +528 48 l + +\bf\setstretch{.5}\tiny IF4p5 \par [All Frequency-domain Signals are created] +eNB TX Flowchart + + + + + +130 527 m +130 -1 l +608 0 l +608 528 l +h + + +388 288 m +388 208 l +584 208 l +584 288 l +h + + +141 449 m +141 361 l +580.427 361 l +580 448 l +h + + +464 428 m +464 396 l +576 396 l +576 428 l +h + + +462.358 361 m +462.358 287.368 l +602 287.368 l +602 361 l +h + + +462.358 361 m +462.358 287.368 l +602 287.368 l +602 361 l +h + + +492 200 m +492 16 l +596 16 l +596 200 l +h + + +130 202.157 m +130 16 l +484 16 l +484 204 l +h + +\tt\tiny openair1/SCHED/phy\_procedures\_lte\_eNb.c:phy\_procedures\_eNB\_RX() + +0 424 m +0 32 l +48 32 l +48 424 l +h + +M\\ +A\\ +C + +64 416 m +172 416 l + +\setstretch{.5}\tt\tiny RACH Preamble + +534 125.858 m +688 126 l + +\tt\tiny ULSCH\_SDU(UE\_id) +\tiny eNB\_common\_vars.rxdataF[0] +\tiny eNB\_common\_vars.rxdataF[R-1] + +273 269 m +412 268 l + + +273 245 m +412 244 l + + +184 128 m +184 100 l +276 100 l +276 128 l +h + +\setstretch{.5}\tt\tiny rx\_ulsch(UE\_id)\par36.211 + +208 240 m +208 128 l + +\tt\tiny LTE\_TRANSPORT/prach.c +\tt\tiny openair1/PHY/LTE\_TRANSPORT/ulsch\_demodulation.c + +393 285 m +393 229 l +552 228 l +552 284 l +h + +\tt\tiny lte\_eNB\_I0\_measurements() + + + +280 32 m +280 199 l +308 199 l +308 32 l +h + +\setstretch{.5}\tt\tiny ulsch\_extract\_rbs\_single()\par36.211 + + + + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny lte\_ul\_channel\_estimation()\par36.211 + + + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny ulsch\_detection\_mrc()\par36.211 + + + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny frequency\_equalization()\par36.211 + + + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny lte\_idft()\par36.211 + + + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny ulsch\_XXX\_llr()\par36.211 + + + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny ulsch\_decoding()\par36.212 + + + +332 32 m +332 199 l +360 199 l +360 32 l +h + + +\setstretch{.5}\tt\tiny ulsch\_channel\_compensation()\par36.211 + + + +476 118 m +504.475 118 l + + +564 220 m +564 220 l +564 220 l +564 220 l +h + +\tt\tiny ulsch\_decoding.c + +476 118 m +504.475 118 l + +\tt\tiny ACK/NAK,RI,CQI + +131 344 m +131 316 l +276 316 l +276 344 l +h + +\setstretch{.5}\tt\tiny pucch\_procedures(UE\_id)\par36.211 + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\setstretch{.5}\tt\tiny rx\_pucchl\par36.211 + +476 118 m +504.475 118 l + + +551.76 312.126 m +687 312.231 l + +\tt\tiny ACK/NAK +\tt\tiny SR + +440.514 328 m +477 327.572 l + +\tt\tiny TRANSPORT/pucch.c + +373.112 244.28 m +373.112 316 l + + +344.968 268.786 m +345.381 316 l + + +131 344 m +131 316 l +276 316 l +276 344 l +h + +\setstretch{.5}\tt\tiny prach\_procedures\par36.211 + +405.275 413 m +464 412.625 l + + +440.514 328 m +477 327.572 l + +\tt\tiny openair1/SCHED/phy\_procedures\_lte\_eNb.c:prach\_procedures() + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\setstretch{.5}\tt\tiny rx\_prachl\par36.211 +\setstretch{.5}\tt\tiny E\_PRACH>Lmin\par36.211 +\tt\tiny LTE\_ESTIMATION/lte\_eNB\_I0\_measurements.c +eNB PHY RX Procedures + +0 416 m +144 416 l + +\tiny {\tt eNB->prach\_vars.prachF[0$\cdots$ R-1]} + +160 268 m +160 128 l + + + + + + +0 296 m +0 264 l +736 264 l +736 296 l +h + + +0 296 m +0 264 l +736 264 l +736 296 l +h + + +0 296 m +0 264 l +736 264 l +736 296 l +h + + +0 296 m +0 264 l +736 264 l +736 296 l +h + + +0 296 m +0 264 l +736 264 l +736 296 l +h + + +0 296 m +0 264 l +736 264 l +736 296 l +h + + +0 296 m +0 264 l +736 264 l +736 296 l +h + + +0 296 m +0 264 l +736 264 l +736 296 l +h + + +184 128 m +184 100 l +276 100 l +276 128 l +h + +\setstretch{.5}\tt\tiny rx\_ulsch(UE\_id)\par36.211 +\tiny$\mathbf{R}_{r,l}=\mathrm{DFT}_{N_{\mathrm{fft}}}(\mathbf{r}_{r,l}\odot\mathbf{F}_{7.5}),r=0,1,\cdots,R-1,l=0,1,\cdots,N_{\mathrm{symb}}-1$ (\tt\bf eNB\_common\_vars$\rightarrow$rxdataF[][])%,N_{\mathrm{fft}}=2^{1+\left\lceil\log_2 12N^{\mathrm{RB}}_{\mathrm{DL}}\right\rceil$ + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\setstretch{.5}\tt\tiny slot\_fep\_ul\par36.211 + +144 440 m +176 440 l + + +272 328 m +272 328 l + + +144 440 m +176 440 l + +\tiny $\mathbf{r}_{r,l}$ +\tiny $\mathbf{R}_{r,l}$ +\tiny $\mathbf{R}_{\mathrm{ext},r,l}$ +\tiny $R_{\mathrm{ext},r,l}(n)={R}_{r,l}(12\mathrm{firstPRB}+n),n=0,1,\cdots,12N_{\mathrm{PRB}}-1$ (\tt\bf eNB\_pusch\_vars$\rightarrow$ulsch\_rxdataF\_ext[][]) +\tiny $\mathbf{\hat{H}}_{r,l}$ +\tiny $\mathbf{\hat{H}}_{r,l} = \mathbf{R}_{\mathrm{ext},r,l}\odot\mathbf{DRS}^*_{l}(\mathrm{cyclicShift},n_{\mathrm{DMRS}^{(2)}},n_{\mathrm{PRS}})$, (\tt\bf eNB\_pusch\_vars$\rightarrow$drs\_ch\_estimates[]) +\tiny $\mathbf{R}_{\mathrm{comp},r,l}$ +\tiny $\mathbf{R}_{\mathrm{comp},0,l}$ +\tiny $\mathbf{R}_{\mathrm{comp},0,l}=\frac{1}{R}\sum_{r=0}^{R-1}\mathbf{R}_{\mathrm{comp},r,l}$ +\tiny $\mathbf{R}_{\mathrm{comp},0,l}$ +\tiny $\mathbf{r}_{\mathrm{comp},0,l}$ +\tiny $R_{\mathrm{comp},0,l}(n)=R_{\mathrm{comp},0,l}(n)\dot Q_8\left(\frac{1}{|\hat{H}(n)|^2+I_0}\right), \hat{H}(n)=\sum_{r=0}^{R-1}\hat{H}_{r}(n)$ +\tiny $\mathbf{R}_{\mathrm{comp},r,l}=\mathbf{\hat{H}}_r\odot\mathbf{R}_{\mathrm{ext},r,l}2^{-\log_2|H_\mathrm{max}|}, \mathbf{\hat{H}}_r = \frac{1}{2}(\mathbf{\hat{H}}_{r,3}+\mathbf{\hat{H}}_{r,10})$\par (\tt\bf eNB\_pusch\_vars$\rightarrow$ulsch\_rxdataF\_comp) +\tiny $\mathbf{\lambda}_{l}$ +\tiny QPSK : $\lambda_l(2n)=\mathrm{Re}(r_{\mathrm{comp},0,l}(n)), \lambda_l(2n+1)=\mathrm{Im}(r_{\mathrm{comp},0,l}(n))$ (\tt\bf eNB\_pusch\_vars$\rightarrow$ulsch\_llr) +\tiny ${\mathbf r}_{\mathrm{comp},0,l} = \mathrm{IDFT}_{12N_{\mathrm{PRB}}}({\mathbf R}_{\mathrm{comp},0,l})$ +\tiny 16QAM : $\lambda_l(4n)=\mathrm{Re}(r_{\mathrm{comp},0,l}(n)), \lambda_l(4n+2)=\mathrm{Im}(r_{\mathrm{comp},0,l}(n))$\par$\lambda_l(4n+1)=|\mathrm{Re}(r_{\mathrm{comp},0,l}(n))|-2\overline{|h(n)|},\lambda_l(4n+3)=|\mathrm{Im}(r_{\mathrm{comp},0,l}(n))|-2\overline{|h(n)|}$ + +280 32 m +280 199 l +308 199 l +308 32 l +h + +\setstretch{.5}\tt\tiny ulsch\_extract\_rbs\_single()\par36.211 + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny lte\_ul\_channel\_estimation()\par36.211 + +332 32 m +332 199 l +360 199 l +360 32 l +h + + +\setstretch{.5}\tt\tiny ulsch\_channel\_compensation()\par36.211 + + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny ulsch\_detection\_mrc()\par36.211 + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny frequency\_equalization()\par36.211 + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny lte\_idft()\par36.211 + +332 32 m +332 199 l +360 199 l +360 32 l +h + +\setstretch{.5}\tt\tiny ulsch\_XXX\_llr()\par36.211 + +304 236 m +304 236 l +304 236 l +304 236 l +h + +eNB ULSCH Demodulation + + + + +eNB PRACH Detection + +0 296 m +0 264 l +736 264 l +736 296 l +h + +\tiny$\mathbf{R}_{r}=\mathrm{DFT}_{N_{\mathrm{PRACH}}}(\mathbf{r}_{r}),r=0,1,\cdots,R-1$ (\tt\bf lte\_eNB\_prach\_vars$\rightarrow$rxsigF[])%,N_{\mathrm{fft}}=2^{1+\left\lceil\log_2 12N^{\mathrm{RB}}_{\mathrm{DL}}\right\rceil$ + +0 296 m +0 264 l +736 264 l +736 296 l +h + +\tiny$\mathbf{R}_{\mathrm{comp},r}=\mathbf{R}_{r}\odot \mathbf{X}^*_u[i],r=0,1,\cdots,R-1$ (\tt\bf lte\_eNB\_prach\_vars$\rightarrow$prachF[])%,N_{\mathrm{fft}}=2^{1+\left\lceil\log_2 12N^{\mathrm{RB}}_{\mathrm{DL}}\right\rceil$ + +0 296 m +0 264 l +736 264 l +736 296 l +h + +\tiny$\mathbf{r}_{839,r}=\mathrm{IDFT}_{1024}\left(\mathbf{R}_{\mathrm{comp},r}\right), r=0,1,\cdots,R-1$ (\tt\bf lte\_eNB\_prach\_vars$\rightarrow$prach\_ifft[]) + +112 460 m +112 400 l +176 400 l +176 460 l +h + +\tiny $\mathbf{r}_{r}$ + +144 440 m +176 440 l + +DFT +\tiny $\mathbf{R}_{r}$ + +268 480 m +268 452 l +300 452 l +300 480 l +h + +$\odot$ + +176 428 m +208 428 l +208 456 l +268 456 l + + +208 428 m +208 400 l +268 400 l + +\tiny $\mathbf{X}^*_{u}(0)$ +\tiny $\mathbf{X}^*_{u}(1)$ + +284 480 m +284 468 l + + +284 372 m +284 384 l + + +268 480 m +268 452 l +300 452 l +300 480 l +h + +\tiny$R\times\mathrm{IDFT}_{1024}$ + +300 456 m +336 456 l + + +300 456 m +336 456 l + + +268 480 m +268 452 l +300 452 l +300 480 l +h + +\tiny$R\times\mathrm{IDFT}_{1024}$ + + +268 480 m +268 452 l +300 452 l +300 480 l +h + + + +\tiny$\sum_{r}|\cdot|^2$ + + + + + +268 480 m +268 452 l +300 452 l +300 480 l +h + + + +\tiny$\sum_{r}|\cdot|^2$ + + + + + +268 480 m +268 452 l +300 452 l +300 480 l +h + +\tiny max peak in size $\mathrm{NCS}_2$ window, keep delay + + +412 456 m +440 456 l + + +412 400 m +440 400 l + + +500 460 m +532 460 l + + +500 460 m +532 460 l + + +500 460 m +532 460 l + + +624 456 m +672 456 l + + +624 456 m +672 456 l + + +268 480 m +268 452 l +300 452 l +300 480 l +h + +\tiny max peak in size $\mathrm{NCS}_2$ window, keep delay +\tiny\tt preamble\_energy\_list[]\par preamble\_delay\_list[] +\tiny $\mathbf{r}_{839,r}$ +\small\begin{itemize} +\item PRACH detection is a quasi-optimal non-coherent receiver for vector observations (multiple antennas) +\item correlation is done in the frequency-domain, number of correlations (in the example above 2) depends on {\em zeroCorrelationConfig} configuration parameter +\item peak-detection (for delay estimation) is performed in each NCS time-window +\end{itemize} + + +268 480 m +268 452 l +300 452 l +300 480 l +h + +$\odot$ + + + + + + +340 416 m +340 340 l +564 340 l +564 416 l +h + + +268 480 m +268 452 l +300 452 l +300 480 l +h + +\tiny$\sum_{r,l,i}|\cdot|^2$ +\begin{tiny}$\stackbin{<}{>}\sigma^2[\mathrm{dB}]$\end{tiny} +eNB PUCCH1 Detection + +184 128 m +184 100 l +276 100 l +276 128 l +h + +\setstretch{.5}\tt\tiny rx\_pucch()\par36.211 + +153 232 m +153 176 l +228 176 l +228 232 l +h + +\setstretch{.5}\tt\tiny slot\_fep\_ul\par36.211 + +144 440 m +176 440 l + + +144 440 m +176 440 l + +\tiny $\mathbf{r}_{r,l}$ +\tiny $\mathbf{R}_{r,l}$ +\tiny $\mathbf{Z}^*_{l}e^{-j2\pi f/16},-3\leq f\leq 2$ + +308 448 m +352 448 l + +$\odot$ + +308 448 m +352 448 l + + +392 484 m +392 456 l + + +328 448 m +328 400 l +352 400 l + +$\odot$ + +392 484 m +392 456 l + +\tiny $\mathbf{Z}^*_{l}$ + +288 496 m +288 496 l +288 496 l +288 496 l +h + + +308 448 m +352 448 l + + +412 408 m +412 392 l +464 392 l +464 408 l +h + +\tiny$\mathbf{\hat{H}}$ +$\odot$ + +420 392 m +420 376 l + + +384 400 m +384 368 l +412 368 l + + +428 368 m +464 368 l + +\tiny$\mathrm{sgn}(\mathrm{Re}(\cdot))$ + +444 368 m +444 352 l +464 352 l + +\tiny$\mathrm{sgn}(\mathrm{Im}(\cdot))$ + +532 408 m +532 408 l +532 408 l +532 408 l +h + +\tiny PUCCH1 (Scheduling Request) +\tiny PUCCH1a/1b (ACK/NAK) +\small\begin{itemize} +\item PUCCH1 detection is a quasi-optimal non-coherent receiver (energy detector) for vector observations (multiple antennas) for scheduling request. Care is taken to handle residual frequency-offset. +\item PUCCH1A/1B detection is quasi-coherent based on a rough channel estimate obtained on the 3 symbols without data modulation. \item In both cases, correlation is done in the frequency-domain +\end{itemize} + + + + +\small\begin{itemize} +\item Threads (all in {\tt targets/RT/USER/lte-ru.c}) +\begin{itemize} +\item {\tt ru\_thread}: Thread per RU which sequentially +performs +\begin{itemize} +\item read from south interface (RF or IF fronthaul) +\item RX processing for subframe $n$ (if necessary). +\item wakeup eNBs that are waiting for signal (if necessary) +\item wait for eNB task completion (if necessary) +\item do TX processing for subframe $n+4$ (if necessary). Note that this can spawn multiple worker threads for very high order spatial processing (e.g. massive-MIMO or DAS for UDN) +\item do outgoing fronthaul (RF or IF fronthaul) +\end{itemize} +\item {\tt ru\_thread\_prach}: Thread for PRACH processing in remote RU (DFT on RX, IF4p5 RRU) +\item {\tt ru\_thread\_asynch}: Thread for asynchronous reception from fronthaul interface (TX direction in RRU). %Allows for some jitter so as not to block the RRU real-time processing. +\end{itemize} +\item Synchronization on fronthaul interface +\begin{itemize} +\item {\em synch\_to\_ext\_device} : synchronizes to incoming samples from RF or Fronthaul interface using blocking read +\item {\em synch\_to\_other} : synchronizes via POSIX mechanism to other source (other CC, timer) which maintains real-time. +\end{itemize} +\end{itemize} +RU Threads + + + + +\small\begin{itemize} +\item Threads (all in {\tt targets/RT/USER/lte-enb.c}) +\begin{itemize} +\item multi RX/TX thread mode (optional) +\begin{itemize} +\item {\tt eNB\_thread\_rxtx}: 2 threads per CC/Instance which do both RX procedures for subframe $n$ and TX procedures for subframe $n+4$. One operates on even subframes, one on odd. This allows 1ms subframe processing to use multiple-cores. +\end{itemize} +\item common RU-eNB RX/TX thread (default if single RU/eNB) +\begin{itemize} +\item calls {\tt eNB\_top}: procedure per CC/Instance which sequentially +\begin{itemize} +\item blocks on signal from RU +\item RX/TX processing for subframe $n$ and $n+4$ +\item signals completion to RU +\end{itemize} +\end{itemize} +\item {\tt eNB\_prach}: Thread per CC\_id/Instance for PRACH processing +\end{itemize} +\end{itemize} +eNB Threads + + + + + +400 400 m +400 388 l +520 388 l +520 400 l +h + + +400 432 m +400 420 l +520 420 l +520 432 l +h + + +400 448 m +400 436 l +528 436 l +528 448 l +h + + +400 448 m +400 436 l +528 436 l +528 448 l +h + + +192 388 m +192 364 l +272 364 l +272 388 l +h + + +32 480 m +32 464 l +112 464 l +112 480 l +h + +eNB Timing (multi-thread mode) + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny SF $n+1$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny SF $n+2$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny SF $n+3$ +\tiny $n$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny$n+4$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny SF $n+4$ + +32 480 m +212 572 +352 480 c + + +384 464 m +384 464 l + + +380 472 m +380 472 l + +\tiny\begin{itemize} +\item The current processing requires approximately 1ms peak in each direction (basically 1 core RX, 1core TX). The current architecture will work on a single core if the sum of RX and TX procedures is limited to 1ms. It can fit on 2 cores if the sum of RX,TX and PRACH is less than 2ms. +\item three threads, RX-TX even, RX-TX odd and PRACH. RX-TX blocks until woken by the RU thread with a new RX subframe $n$ that is linked to this eNB process. The RX-TX thread performs ue-specific processing for subframe $n$ and then TX common and ue-specific processing for subframe $n+4$ (frequency-domain generation only). This insures the data dependency between TX $n+4$ and RX $n$ is respected. The duration of this thread should be less than 2ms which can compensate some jitter on the RX processing. +\end{itemize} + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny SF $n$ +\tiny LTE HARQ periodicity (FDD, TDD can be longer) +\tiny PRACH $n$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny $n+1$ +\tiny $n$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny$n+5$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny $n+1$ + +124 424 m +172 416 +152 392 c + + +204 424 m +228 424 +236 416 c + + +192 396 m +196 416 l + + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny $n-1$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny$n+3$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny $n-1$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny $n+2$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + +\tiny$n+6$ + +32 480 m +32 464 l +112 464 l +112 480 l +h + + +284 424 m +308 424 +316 436 c + +\tiny $n+2$ + +268 452 m +276 436 l + +\tiny RU thread +\tiny RX-TX thread (even) + +400 448 m +400 436 l +528 436 l +528 448 l +h + + +400 448 m +400 436 l +528 436 l +528 448 l +h + +\tiny RX-TX thread (odd) +\tiny PRACH + +192 396 m +196 416 l + + + + + + +96 384 m +96 320 l +640 320 l +640 384 l +h + + +96 384 m +96 320 l +640 320 l +640 384 l +h + + +96 384 m +96 320 l +640 320 l +640 384 l +h + + +96 384 m +96 320 l +640 320 l +640 384 l +h + + +128 368 m +128 336 l +352 336 l +352 368 l +h + + +128 368 m +128 336 l +352 336 l +352 368 l +h + + +175.695 380 m +176.42 128 l + +OAI IF1'' Interface (can be NFAPI) +\tiny\begin{itemize} +\item OAI IF1'' is the interface between the 36.321 Medium-Access (MAC) Layer Procedures and the 36.213 Physical Layer Procedures. It links several PHY instances to one MAC instance. +\item It is a configurable (dynamically loadable) module which can implement an (N)FAPI P5/P7 or a simpler interface. +\end{itemize} + +128 368 m +128 336 l +352 336 l +352 368 l +h + +\tiny Random-Access +\tiny Events +\small PHY procedures +\tiny {\tt initiate\_ra\_proc()} +\tiny {\tt terminate\_ra\_proc()} +\tiny {\tt cancel\_ra\_proc()} +\tiny {\tt phy\_config\_dedicated()} +\tiny {\tt phy\_config\_sib1()} +\tiny {\tt phy\_config\_sib2()} +\tiny {\tt phy\_config\_sib13()} + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + +\tiny {\tt eNB\_dlsch\_ulsch\_scheduler()} +\tiny {\tt get\_dcii\_sdu()} + +175.695 380 m +176.42 128 l + +\tiny {\tt get\_dlsch\_sdu()} + +175.695 380 m +176.42 128 l + +\tiny {\tt rx\_sdu()} + +175.695 380 m +176.42 128 l + +\tiny {\tt get\_mch\_sdu()} + +175.695 380 m +176.42 128 l + +\tiny {\tt SR\_indication()} + +175.695 380 m +176.42 128 l + + +128 368 m +128 336 l +352 336 l +352 368 l +h + +\tiny PHY Config +\tiny Scheduling +\small {\tt 36.213/36.321}\\ +{\tt openair2/LAYER2/MAC} +\small {\tt 36.211/212}\par +{\tt openair1/PHY} + +96 384 m +96 320 l +640 320 l +640 384 l +h + +\small OAI MAC interface +\tiny {\tt phy\_config\_mib()} + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + + +175.695 380 m +176.42 128 l + +\small UL-Indication +\small Config-Req +\small Schedule-Resp +\tiny Northbound interface +\tiny Southbound interface + + + + +OAI IF1'' Interface +\tiny\begin{itemize} +\item The PHY end uses three basic messages +\begin{itemize} +\item {\tt CONFIG\_REQ}: this provides the cell configuration and UE-specific configuration to the PHY instances. This comprises the following FAPI P5/P7 messages +\begin{enumerate} +\item CONFIG.request +\item UE\_CONFIG.request (**not used in OAI PHY) +\end{enumerate} +\item {\tt UL\_INDICATION} This is an uplink indication that sends all UL information received in one TTI, including PRACH, if available. It also provides the subframe indication for the DL scheduler. It maps to the following FAPI P7 messages +\begin{enumerate} +\item {\tt SUBFRAME.indication} +\item {\tt HARQ.indication} +\item {\tt CRC.indication } +\item {\tt RX\_ULSCH.indication} +\item {\tt RX\_SR.indication} +\item {\tt RX\_CQI.indication} +\item {\tt RACH.indication} +\item {\tt SRS.indication} +\end{enumerate} +\item {\tt SCHEDULE\_REQUEST} This message contains the scheduling response information and comprises the following FAPI P7 messages +\begin{enumerate} +\item {\tt DL\_CONFIG.request} +\item {\tt UL\_CONFIG.request} +\item {\tt TX.request} +\item {\tt HI\_DCI0.request} +\end{enumerate} +\end{itemize} +\item The module is registered both by PHY and MAC and can implement different types of transport (NFAPI, function call, FAPI over UDP, etc.). During registration, fuction pointers for the different messages are provided for the module to interact with either PHY or MAC or both if they are executing in the same machine. Note that for a networked implementation (e.g. NFAPI), there are north and south components running in different machines. +\end{itemize} + + + + +OAI IF1'' Interface +\small\begin{itemize} +\item The PHY-layer timing is assumed to be +\begin{enumerate} +\item wait for subframe indication $n$ from HW +\item trigger PRACH if $n$ has PRACH (parallel thread) +\item trigger UE specific RX procedures for $n$ if $n$ is UL +\item assemble {\tt UL\_INDICATION} and send to MAC +\item wait for {\tt SCHEDULE\_REQUEST} +\item do TX procedures if $n+4$ is TX and RX programming if $n+4+k$ is UL +\end{enumerate} +\item The MAC-layer timing is assumed to be +\begin{enumerate} +\item do all UL processing for subframe $n$ if $n$ is UL after unraveling of UL\_INDICATION in MAC module +\item wait for call to {\tt eNB\_dlsch\_ulsch\_scheduler} +\item do DL scheduling for $n+4$ if it is DL +\item do UL scheduling for $n+8$ if it is UL +\item return from eNB\_dlsch\_ulsch\_scheduler +\item let MAC module form SCHEDULE\_REQUEST +\end{enumerate} +\end{itemize} + + + + + +96 384 m +96 320 l +640 320 l +640 384 l +h + + +128 368 m +128 336 l +352 336 l +352 368 l +h + + +128 368 m +128 336 l +352 336 l +352 368 l +h + +OAI MAC + +128 368 m +128 336 l +352 336 l +352 368 l +h + +\tiny Random-Access +\tiny Events + +128 368 m +128 336 l +352 336 l +352 368 l +h + +\tiny PHY Config +\tiny Scheduling +\small {\tt 36.321}\\ +{\tt openair2/LAYER2/MAC} + +175.695 380 m +176.42 128 l + + +176 496 m +176 384 l +400 384 l +400 496 l +h + + +176 496 m +176 384 l +400 384 l +400 496 l +h + +\small RRC + +384 384 m +272 144 l + + +384 384 m +384 144 l + + +384 384 m +528 144 l + + +608 384 m +528 144 l + +\small RLC + +176 496 m +176 384 l +400 384 l +400 496 l +h + +\small Preprocessor + +160 256 m +528 144 l + + +272 312 m +608 384 l + + +472 504 m +472 232 l +152 232 l +152 40 l +728 40 l +736 40 l +736 504 l +h + +\small {\tt 36.322}\\ +{\tt openair2/LAYER2/RLC} +\small {\tt user customizable scheduling module} + + + + +TX Precoding +\small\begin{itemize} +\item Spatio-temporal filtering for muli-cell (vCell) and multi-user transmission. Input and output are frequency-domain signals. +\item can be applied to Rel-10/11/12/13 physical channels and Rel-8 common channels +\begin{itemize} +\item UE-specific precoding (TM7-10) +\item vCell-specific precoding (PDCCH + TM1-6) for groups of UEs +\item PMCH vCells +\end{itemize} +\item Precoding applicable to +\begin{enumerate} +\item indoor DAS +\item outdoor co-localized arrays (e,g, Massive-MIMO) +\item outdoor CoMP +\end{enumerate} +\end{itemize} + +208 480 m +208 80 l +512 80 l +512 480 l +h + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +400 160 +480 192 +528 160 +400 160 +400 160 u + + +400 96 +448 128 +512 144 +576 96 +496 80 +400 96 +400 96 u + + +480 160 m +480 160 l + + +496 160 m +496 160 l + + +400 96 +448 128 +512 144 +576 96 +496 80 +400 96 +400 96 u + +\small UE +\small vCell +\small vCell +TX Precoding + + + + + +608 516 m +607 37 l +679 37 l +680 516 l +h + + +632 360 m +632 188 l +660 188 l +660 360 l +h + +TX Precoding (to RF device) + +208 480 m +208 80 l +512 80 l +512 480 l +h + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + +\tt eNB[0] +\tt eNB[1] +\tt eNB[CC\_max] + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +528 464 m +528 416 l +592 416 l +592 464 l +h + +\tiny\tt rf\_device[0] + +528 464 m +528 416 l +592 416 l +592 464 l +h + +\tiny\tt rf\_device[1] + +528 464 m +528 416 l +592 416 l +592 464 l +h + +\tiny\tt rf\_device[N-1] + +192 432 m +192 368 l +272 368 l +272 432 l +h + + +192 432 m +192 368 l +272 368 l +272 432 l +h + + +192 432 m +192 368 l +272 368 l +272 432 l +h + +\tiny\tt common signal precoding(vCell)\\ PBCH,PSS/SSS,PCFICH/PHICH/PDCCH\\ +PDSCH - TM1-6 +\tiny\tt UE-specific signal precoding(vCell)\\ +UE-RS,PDSCH - TM7-10 +\tiny\tt PMCH precoding + +145 413.44 m +192 384 l + + +145 413.44 m +192 288 l + + +145 413.44 m +192 192 l + + +145 349.44 m +192 384 l + + +145 349.44 m +191.982 288.048 l + + +145 349.44 m +191.982 192.084 l + + +145 157.44 m +192 384 l +192 384 l + + +145 157.44 m +191.982 288.048 l + + +145 157.44 m +191.982 192.084 l + + +400 384 m +449 447.637 l + + +400.059 384.077 m +449 431.796 l + + +400.059 384.077 m +449 383.637 l + + +400.059 384.077 m +449 367.763 l + + +400.059 384.077 m +449 143.57 l + + +400.059 384.077 m +449 127.637 l + + +400 288 m +449 383.637 l + + +400.001 288.002 m +449 367.763 l + + +400.001 288.002 m +449 143.57 l + + +400.001 288.002 m +449 127.637 l + + +400 192 m +449 447.637 l + + +400.001 288.002 m +449 447.637 l + + +400.001 288.002 m +448.966 431.763 l + + +400.001 192.005 m +449 367.763 l + + +400.001 192.005 m +449 143.57 l + + +400.001 192.005 m +449 127.637 l + +\tiny phy\_vars\_eNB.txdataF +\tiny phy\_vars\_eNB.txdata + +632 264.556 m +671.833 265 l + +\setstretch{.5}\tt\tiny do\_ofdm\_mod\_rt()\par 36.211 + + + + +TX Precoding (to IF device, NGFI\_IFv4p5) + +208 480 m +208 80 l +512 80 l +512 480 l +h + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + +\tt eNB[0] +\tt eNB[1] +\tt eNB[CC\_max] + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +128 448 m +208 448.44 l + + +528 464 m +528 416 l +592 416 l +592 464 l +h + +\tiny\tt if\_device[0] + +528 464 m +528 416 l +592 416 l +592 464 l +h + +\tiny\tt if\_device[1] + +528 464 m +528 416 l +592 416 l +592 464 l +h + +\tiny\tt if\_device[N-1] + +192 432 m +192 368 l +272 368 l +272 432 l +h + + +192 432 m +192 368 l +272 368 l +272 432 l +h + + +192 432 m +192 368 l +272 368 l +272 432 l +h + +\tiny\tt common signal precoding(vCell)\\ PBCH,PSS/SSS,PCFICH/PHICH/PDCCH\\ +PDSCH - TM1-6 +\tiny\tt UE-specific signal precoding(vCell)\\ +UE-RS,PDSCH - TM7-10 +\tiny\tt PMCH precoding + +145 413.44 m +192 384 l + + +145 413.44 m +192 288 l + + +145 413.44 m +192 192 l + + +145 349.44 m +192 384 l + + +145 349.44 m +191.982 288.048 l + + +145 349.44 m +191.982 192.084 l + + +145 157.44 m +192 384 l +192 384 l + + +145 157.44 m +191.982 288.048 l + + +145 157.44 m +191.982 192.084 l + + +400 384 m +449 447.637 l + + +400.059 384.077 m +449 431.796 l + + +400.059 384.077 m +449 383.637 l + + +400.059 384.077 m +449 367.763 l + + +400.059 384.077 m +449 143.57 l + + +400.059 384.077 m +449 127.637 l + + +400 288 m +449 383.637 l + + +400.001 288.002 m +449 367.763 l + + +400.001 288.002 m +449 143.57 l + + +400.001 288.002 m +449 127.637 l + + +400 192 m +449 447.637 l + + +400.001 288.002 m +449 447.637 l + + +400.001 288.002 m +448.966 431.763 l + + +400.001 192.005 m +449 367.763 l + + +400.001 192.005 m +449 143.57 l + + +400.001 192.005 m +449 127.637 l + + +448 544 m +448 544 l + + +432 544 m +432 544 l + + +624 432 m +672 432 l + + +624 432 m +672 432 l + + +624 432 m +672 432 l + +\tiny NGFI\_IFv4p5 +\tiny NGFI\_IFv4p5 +\tiny NGFI\_IFv4p5 + + diff --git a/targets/DOCS/oai_L1_L2_procedures.pdf b/targets/DOCS/oai_L1_L2_procedures.pdf old mode 100755 new mode 100644 index 369efc3b479b960c74e89b7e73e427a15cea8de9..4e8059f503d8a4fedd634dc014c4f572275a5be8 GIT binary patch literal 1511882 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¬ZrkHke`UyE$Y>bjJnv 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

F=NfSEzXj z>h)Ur?szYrx;-7*RWbMp(q(Oj>j#VL6b~7)T>Ws!W&66>mQqk8DSC$nqznGLdcv8A zS?1U;-K5E5487X#=X2)XWktvd6sH<(Lgy?~n2mkxF>>$K9wTd{Af@~7%@RQ2f41wb)pc>-7a36tDHEVIBWp+ zA`S1Y9!c|J6K~9D^TDKWpM{aJ8G~h>Go(3;OC(R6^%?od9M>sV=jb-Y!^*RMM1q6Z zFQ`r2IR_#ct9UTw9iB&)^L?~%Zl$?#SPi5dZ$AWIbcS!+wjFzR&f-lTLXN$aLq&Im z`m&a4Jrx+EUW~+0%p)H-Fr+$6G$PCHZn)mgK6|jIL_ubJQ$>jHJT%6jXFHST|Kgyr z+*ZKComrfO`A+V77fl{~!M~Nw{xTJ>epN)P)@<9$I#B6qsu>19c2WC~Y+-lP0h?aE zf{|ZrHrZXPXR7u~G#^nyBq*w0<6C;ESHwvBTaK9oREM)?`7E!#6hMia0lUz2%Cx

0@l`n|SKN<2B5pe0J&F=(QJDtmVkwrm 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�hrpRq)G9SBtZ(lfs0F$AlJ2RRcAXb4ilHH#wJ7 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 z%0DQma_|)ZY-y$f{5p;8cs)mHO?i%W8;xPW}2&FN#cZ4@^ zdffPtenzq(>6^^on4$de@UlKpei6AVj9<3r*8XpAH}#vHZdm(~xyOzDyz)VxJ8!?e z51zL0d#Tz_(>!=Ia!0!G;FIr`Uwqp;X`659t2YVQb98FJl1C?IHM{DOD8qr=j=9~l zwRH3i3;M+;_lH3Y??B8O| zwVe}|ojBV4PPy_8#>3^I~|9h>!7Ck19C5_{$D8#=YoYI`^~M zM>d@}+Vj`)>tiS7sy*sq`&tpt%vG6PL4PiPP`SvmJm*`Fm~@~|uPpw>+wM+${npW} zYsV$e+a-RY;B#e~InK8^kh}Sqh{SU`WKWjyYNcrn+iW?~Z)bxCZD#DbzSwzxL&(pQ zUvqWavVHT;w|ygyr}6XnRPSuccquo2&s{lB5y!eFMu(NktnNW&(seKJ?DY5={%ba* z9QCwM;+2OohK?!JM!$Wn(51MCmL_gLyXEH+H+Pijx}(LGqi;8!i<9bd-jYu@UhMYC zdriHX*II7=^Z1UGnYXF_Y8We9> zF@BxADf(vKRJzsWj-Q)&q_5L*W_K;ysoaOIJT(t|9C15EpFcCD@gH2-EBnQ^MPEKU z&?Cpr!XKh5UU9wLkak(3twrN@ZPKCE%_HH9R+U~FXY{O{ey1;;xpt{U4XsCyjw{mM z9sbkz`__0@#veD5C$ErYT)V-cjea;TdEXv=|5c3)?~lLi^~dm9i9JsqnU=F+*WQH! zx^#N;Yt9{?{DYhmckMg#YRQNcc}{qS>^PfeP{wv;k0xw2xO4dd$1f%6m}Tsuz{%FA z$HhB3)2^ttAj6sI>u2}dv%c5QPay-1Jzi&DTSIy^pVF^?*t=waoJJ!<2R3 zQ~q&f$JM{(%jvdvK+BIrmOTzMOj}BwxQ`_BYm z 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 +x}@6oHrN*MuHJPW*ypXaw#X7&&?dck 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 G{{H|TvG2J6 literal 1118156 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

m4lna$D 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%0A(N4(W~ zR@`a%;<;-7U3(aKwF@@T#jSFD2o?COlh4r8?CvW zPYZS_K0D0nzT>N;t43I=P9ykNNolIiP`P$O%!ZX!Y4keGmLh-uH4L}lc`)aAEtU(&G3)8jTHaF5mGp!Yi zqToCSC~=M;_y)+ z!XR`{=iQ?7NZ5_27af#uNQ(vr-fgLCX}i>q(Qap#i?=eXIYN*KK0A36HXq}#Ib}c{ z{C*Vb3=C9{cZKFS^yTv*!&4AsUaP5LW#z^!Vhv@OnISw$7?+`fKgP?cHa}~qN%gBo zI{WC*l~ABwhzDjwxG$Mgh#3t=P=UQcMZCcJAC#TKBqcG+QM%&Jau^POZ7siQC~uT^ z{?&r*Wg*}n>Qj(HHBLP)k-|wINFMv}$gC^&K{Y2okY^IgCl1_0LG}*Uj$R=7q1Nhp zyn{3*4LyfM#?9m87o$8{*Eg+UI_bR98z=liQ6q1dcWVQW?gl`rx_pB)oY7-ShxoGJx38Of%?v~i(ge93RGoLt^tE3TuK*!QK{hEJdn+G_n29=Rhxb6HY0*yx;ePJ4x z%lodnUO!wO+OjMePhr+MQ60z*VyVXQyTCOfp4Qg+)IOFZodXj(yh1enSJmy1hJ`y{ zCZ&Cy5L3B#Y8bVOKgVatr9^bw{+{!gAnlo z3Us=?gZpzny-|tG=tUv|gLc5Lq?e3__=B2VNn~};M}ps**R9~f`NeFoS;ryYsfnm~ zn9SN+i*-*Zi`m}vMT_VVZ0K4EAWa!EIXQrB3t-NcpK0Gz))CK| z2THK^D~1)0%9A&Zksp>+HTRF}3{0sJuU3OAr_pVXp7A1<#>GL^al)H)d<4;)iv<`( zFPEj6)}*6m$bB^iJppSMgyUQ_RwSIGXOjUn=Oi@q+yH-gCGmO16~E}1xwV+Pk9b^b zQx)R2ZuT28y26u*sL$666Vr68Pv7i~0rhrE#cm4$%l&DbsUeTqkeSb5=PLJska}vT zze}x*m2*tnc>Ja1)26OY&iXP%vSYz3wSO;owb_}vjIiGo7tM5Gv!uftN+>A=(Iy?4 z3~1|oVL1{4frT}!`dC=X9R+7Xb(d!;LxB*sz1 zsa5mSV)k7sCdE&-N^4kKjdq9Qg*TF2ac;*&e(y$c`$q7juANOIDYL9bMqId&ZCMC~dl zasG0DCt5KPr72g!{)dsdm*YNZlD)WIjjH|#j~eOwJG$=6N;6W{{M1#`ma)f6|GUgn z(bo%!bizo#DF)Q z5N_|y@CU|kw{1!uYxpTdW5a{TnQ>~?z5OtQ0}7L7%ds3a9Vx(SFN#!K2uKj$VdCt@+I8gb$&G~KKj+!Kb+q|rN_jLian!;UueQNa|M}OP-=uI?;OKn;)AN}Dwv8=F$Nyv4UFC*MG+o&$)CHNVt zaxF$p6Usy**O)~J^`OOb{^x=eI_aum;+dnoC-kgX3*A{JP=c&)3e-#ZZ1Jf)S^s1T^>%{-W6zC)r-OvH7(c zBTfiQuvPZO$;p1(b3@CK5eYfwUDx3g*-<&|v!Jey2;#!XWM(%fyBRCdlzX}TkHHyl&ojdo*Umrj=2=g` zbp)@%k07&doLa8nbSae$4C$=3po*Kv)pt_J=4J3J4y1g8%8MASvZ{t&&g-c4I^pa5~3Udy1#i`S8R=Xpa zw^kIwWK?t{@m7CwFDycv!af%axvDjrqpLZwX!6K)Z3mMS zBW%R+id{378-f-=s0Qz5t9uaou96w7y-IX|C@>j+sNsKj@wOh52&KZWBT`*MbHGKA z@|{#5E}(85Ml+1mb{#%lvV)du{-AvLQGsD@Bzq2Cc&GVz(s7($?`SG(GKfXcpp!DS zsLR3RL|aoOT*oMgh!He#V&98!C%ztg8M;#@Z9k*rCH3CUD9+ETJ0-L7|3u z(kqU3bQjDaJQjTjBQvrxxDL8mu!TqO6Dc)*r=ZR}7qz#LH^R9Vaoan$zS$WHqN-0+ z@YHPUK8}X4?ek0%oG6QfQ`#hBRq(@@_WEKM9zNZRNln?yCDfhPpd>}QQ0){FXEg{B zyu1>RHRt*p$XxWVz@c%*#N3O`aYk3?dKTKHEINl*kGJ+UyA zlJw(5HH@huSmY1{kDXKy4$IjhPGB-t$L*+1iuxn?vj7_CR2QMP*#r`2%d1>AVW9 zR+$^#SxU*FC4cO+SsGq6*=cH_OO(_OdC(uu@(ARz4=}x_BhUHYh>j4OICDa-IU6kJ zr#3PTIxovwVt9+qr*J-5Gj8;#a3W6$uk7V-f8H-hPy`>JVNXJ#FCS(N8f+vNFD9(n z*2ZxI84TS1sDjVU{vzrU#mF~nPP5_wd@jkgKfgB9L0u(SV=tr= zI_M;ah~x=*2EVuO-cE;(`KG*|^s&ipFXRV1xqIH)GB)H+)qO>FPz*fGg1 zD0h~~PU>~*-;lq*UW^rzD}&7Uti-6;sGOF!nZz{X(vJH`ORG#E~=$IHIbDI%ySu~f@6)sc0N5K@BS9U-&->3+l4FG4RKL^XDD zqTB7A)-`0Y989$?2Z7VU6>V`XvsEEQg*6}%s{eA9-g*9!C=_B1U(LG7fKy9MnK%WS z@uWno13tZH+xE*8BMfl zGh>!}84{H&_e72fZ8Tya3JO@`QI_l z4pOu7+*X3S879TNODB_0Pbd=^LTRzAK`CVS*iU{T#%sI2Jj{A;1nvG+5q>+oP4R5h z2>2$&(I8Af6GtfKn4U&=aqFAIZV-ccT#@z-!U5H*{@`6Er#h98iw6=xC2}NN{ zn!nInP1Kas8B^DSXg9O$*L3`<1%b`H`Po>RXdYxeFF+tmz`!j#^X~pMeNmV&x1$gV z*Vad5DQJH;YZmeguHA>euCQ^zRQXM8FAOWMVYK#*j^xgyxM5=9tsw|;MiG1{|KHeD9j0zF)-5l&3@sBHo1Dyi-pr7g>HP%Q&-4$2C&y=)U^gq-6W zPP?<@evTc2GuBa|zJBVfJNHx7B_SuJX4O}GofVgaj$m)*H!@$jxXSVa+dI*mdQBe< zkM}^!KQyODp0bi{hqbYd(gP*a{&*U75oBDqd?4L>g6hQ4Uvt?DouQ@~S)H%UI}WGr zk*F>*nVTvy99G^0u|v|ImFy%}OTANq5~~<<<#YK(s6YI|tK8W#>EaL3>%s$F&ZX1m zYVFdSQFYv8j`oJOH$3=tZ>J5{#Ke;2vYnQ16;OS~FZU-h)iBD%rS(rT$A>+2AY1(Q zpDeLd)g|W8J)2o0cpbE~r#!4<#St^SibA*ZTE?Y5Ku3zYw;hyRktC_+V5q7NWAWn7 zruBTw?r&3@3q81Q=*`eL=b+k1Wz>Upn<<^2GG6oQmhfSE!0lphQ?I(L`EJqz2VtnQ z`3!;=9S)?b5(-NYg4`VRSs~U$si_9hcT~H~Y90y8A(iwSkFwE{s2y$SHB-?KNQlep$Y;}7_V&Q= z?~sEpc8xRi+k{+cjBPqQLe_E!V~7~X zisRC1UqB9R9~8E7T6jg4(mQ0KoqDF$M9$5BFJ{Q?uA!SQ3(3%hstc8k{xP#lLBw#p z^PSEn&dNwbZF!1_JGU=V`f8DT^JaJci&g594?%fHg%tG5($a1~A+mUET(eO5x$zq| z+Ez*QFfNr-nNYn3q^o=>C@Dc12)^TiK|;xVs@p#_oCQa|USAlW)JXS~MN>AVuHDGSaF`NJXNQsD@K ziI(gnn9stP(vz}G5@_L!+wex7=+IRinlMZ{IF6{6S1*0%Qa6iRXl7l1VizW`EiKz$ zFb?w?X}vrcw7^9jnssSi!{L{!b~N3OpQ2is(Rrkc{6Flyby!qg_xMdWQqs~$!!UG% zgdi;lf|N*ihjfE^DIS}2<(IR4Jd&%a& zH(8Q@4;m({wi|Kv{ll7|D1oXJRze{MpN7#mj|9k)(E_4p6Ou9OnI`hprWn}kTWnHD z&ih9`+Nx$j&u?^xIEh*Lk8SUzA!feMu8Dnpcnm9t&~w++n9j>B0+-oEOcFg={o@k2 zou>nzH_=i%B21vN^^6GX`PiL^GArt^vuadH@M3u=sZ{VG@>ck}DMSl{u<8tV*ltj1 zZM-@)%^0+Hu~l9PGo?*qLRF11YeR4z9iOAnM$Z81@2<%_4_vhKt_;MA6_x2ujNur4 zj;J-kD7QO~Vv;FeZ&U3+<^@XS#HT~N&iWj3Xs}wOPV{(Mz8o(4rR;{3cKx2uURNDQ zPZzlK9oIrsQFZ33m&6dw3T4?9chZe}DWA*Ugb7#{K~);=7>G%bD_g+DB?@2OURbeu zHNx#a=6CHwb5muPG6zKDQRbSHNyUr#v1ev4a!;^rIcaq!C$0R*r7+z9a&-h}j_v?K z%6ry_iW(%NW=idW583q?HZp+4w^i=->Hj@x=IK=o$lVa zdw6ffr29n@7hDEo6B(9;W5-j^iB}OKBe%E?#nYr^@_nF&@Y^1Eil8W$m?Oxfehj79 zl4cwgd^n#+N8T0iN3_1aAIvIhOm! z9e5@Ojs+2B*ze`&wZKygLio5Gh(skR^`GNn^=fl-IV-Tya<9J}$7EG`@^By|9X>V@ zjip$Ab7JURb@E+R367*-d!TAp;7Yx`=zV_@c}>~@mLWuowmQuN{o*^~RZNVEw2Hn? z)ZERL*uDYiG2wYl5P^fR{dCJDZmHq^zLUK2%&(zsk;GYSq0D=OsagzYO{n%52v`Gz zy>uOntz&w{`n94H=;}mc^@Ap=^3~b0b{!p)7UCv(q~7~OF$CCKkFqmm>%|R-K28!Lzs0xA*@WMpF^W@iI}l5hWk z3E>1?`4uMQ;^k*d2=L<7cQGLx>|bF*ST1g%uW5O~RG2LT z5^w5)1%M*pK0pbe4A2DeLLOOaY8mNR8|&y=|Kr@!Ku_Nqpasw} zGd42?9ZgI$0T(zCoy+$@P!U}N5Lo1&u|*64MgU`g3BVL!YGA4Z_>36QwA3-Z{1x+y zvroTa{)szc0kE(!v)0jmWc=yv%U7RHFOeiVwmPN&D+7Cg)sNsL0Ea)}NkBR4pRf~u z;3ZftkQSftBp2z>#H^P`4mK7BHsVi5CRS$9`%D}ls0%ZY;h!Jb896|ovamBTFcGr? z85vkWnq>zaIhfc$$4}qo1hO!2g47OzqVttE9haE zI9VBh#4JE&(Ct4R|G570_MbjwW@Q0=`sw_~5BoEpe!9;ecfNeWKbpb_WMC&|y*z$u z^w&o=c2GX~A5CXtW(PeF8zVdD`Tw{E)a(CvzE9r=UBOAr3i=L^n3IVebYurz!Op<~ z`h`F4^y!>~{X#jMj35!SGqHj`WoP09-TTvBfsBk7I{M}@SU5qKf`A`?i1o|a*UkE* zCsq~?&;$OVxv$QdnJymV4^dsd|5aZAa)KWA(`ybE<_q;*Uh(zSpWa~xK}I-z~XHhvWo;pTFX)!hqhsG<7O4#Ut%Mef5ki)3O$DSJJBQD+p zn#DK>1!VzkAyNT!^LRC(a5IzQ6I#X$Wf zO?*oi0fHbU|1M1|#m2|dexnJfat>JiOEoOV;()3o#VskvsR*PAUg*K-LJtuS31k1N z2iEVgJ+7jME5bcMD3|}hn7C|}+&@4V#J~$y+261)esxSNDdWUaeXEJX%kco79@vSD zX)U!&*F{gvM1n>PU!Ipwq6%i=MkwA7UiXQ$F-u)Q20|Ze+{u7G03|78U z#DCE^;l@$@VVpca8>iVU!n5xv;~yc_*T9>rDB~|K?{Adx33v4GwN9)Tjrw{_{I{$V zUJUg=tdqwV>oh_5>^qA1O^?lbMUQ1a3>e-${}Z@OjBto%yh5%5zy^nDBTFA?}-l3oeW_{`D|JL9WH$LW1!Kb~jA;`FZr*}$yFZi@-CDiy% z*Z)m7%XU>a`=6N^v;Eo4{u^fj|6CDtlK*hC#7wt7`&nyY!bjgx#8-ay6P6XULc;x!HL<~ zvBQb^vUm_rAh)w8TCLSPp1bC)tK_nFzFZ!4taYqiXY4oBw-QqkqI0)IWqj)C8=-QY zI5j(!3~6e9er9%lzWJf{0QfBew{t%r&aN9nJ~5oq4hkeLb`tb;3P(+F@6jy5IG$rxaA9A+a`{8W!i~tVm ztYfsH9btM=8+;GK-2|MC7?xN-P1+k{30?Yl-N=vgS6IcsRn6Na#5I~=8Go%$grR8di4oF)HF?pkbO>?F+GRdrR@ z=efK%)8Kn&up@4DLu|DHg|=4H{m`DzCfxi1XF&HSjD$L60#pKS@$o7#A^2d{FkrlS zE9EY}!<&{6XX&$t^gaqx%d1cp5F>T|U`HOtZiTKmllfR{0$>Bp$cxLTnbWmsFeoT> zc-qj=N)RTu9tO59G6H+&&5*dAutO>9{P5WvdBE1*yPmr+y9Y(HLaj{g>YoiCTDHBZ zx~JHub6h#?YSZ&vhzES~1_anObv|`Buv#zySz)NDY$Sq0H)-|ZZ^%^+V1UM9op@8bGS~EN_SQPgC^Tmf_ zx;iM8QmUGwyU_@6DjDaxPoY(A<+_>?6u1%BH8eLjAbR4nsa8QifSD1FI6Q#lJ&!X2 z!=}W6@U8%RICuzQOw52&i*ipEtnTKi$__g^lsT`fuwWt3QMdstA3H=0s_y170DT(9 zyp5NX5G?wHY#Q2}nunAREP9&EqllKD6sNKsbdtjdI(c_-avtENxq=r0*OGte_i*LG z#mTAP0k|qx2wYUa8kxr?E)OZr`wrJII6CG4QK*+CPQr|~64;2ej>IeOMecm;Y*^1i~Kixy7ULw>X zmScY6++KcpFPr*Jw5>Xt6SC_o*XBHU!t0GSWmbp`l{}^EF!24!|&ZKNH`4%m6?5o3Srde>b>y6z4T*9 z{$`!S7LL*sJH+erJ{Itp3fdLw19ohsx2gnms;g&k;2j5HV7AXKZ>_4jxjv)Fb$S6i zivp{J^a}KJn`^EDO4EcPq1f}Qhp=AW`$v!sc&A4|(0{6i1)^)S&X(nhEv?*b@Q#La zz$=T+JkO8Rz@Qu;@)+m!NE9E{7i4>?6wszq^K!6>K0YiumTBzi+o|mcuRQNXdWu%d zIn(jvfM$ZT8q?zC?ZQ@-gWiW`0u3f+ua_dwNyM2n#{7-7D(csmr8ib=dlZ_3>?A5u z8+)Ij7@J5~4!mGpv|wOu7HnU0D&~x+Ap>*|D7h%;+Ibz7xID)|)MTN7h?G={K|v%b zm*T3baaXuvqU%Q;`t=v_@0iefP}!k*$62tLyC(YQ~gv+dFDcP{t-a zuD8$6xKX#PPZVq06?M8V${E(1dV;L8o1zyS;%_{Ph7im-CGRy-n7!!hjIyp@sNd0XiaZ(p^l(!%N8 z);qhy1I8JI+dBmxd|HfwPanYw_LlgO1SqtM-MsIab0r#=bNIB`B-oaGRmmfV7>+{>d{W{O(Ja$UuDsfRBP>#91ZABOJIF zv9@Iu=Nx>aZsXAJN69@)q{c>4=Z{FXT-q$^aJV1ZbE?^L~^Y{1_O>Rl&bd`66SzxPL!Od z!BgFh`)kZmuq^`YJ3`6v)tD=eAFUuMW65}@rCWMW5g+?EsVs=+8l=(OR_4!o0e3w5U}pa3B9I3XxS zXaNjwZJ0BPp*-TPiv|pv+|jVTy67te7($8Ams6%?P_OXcD+ny{l0@C_xup;8^-xRr z-R)E|-6BP$}OQ#$C*@mxXz($>ddSz!~X5Eh5f#@;%F|+1RArEw>3mx>~e;#o?;Oryr8W< zY<${TE8_UNs6w=GreFVfP5+hPNh=Se^bH$hRn(3bmeRMT{o@iO-CXa26ihf=jtX6rJTNty=#8)1 zFyeL%p^MVXBB#Mn{$vWZ{RTE3Dd}~>u1XE+2_|2+87vkR zbZ{cvTNP`Cl@=C@uU&{9O4vq3n+nBa>KZ2FVwT}1>@$NR)a5OSio;K3dmo5h{`&UD^-}BgWO${*X2!v; zsSMGQHcA9Sqo?-*T#88P%oc)em;2P!O5%_8SF2;+c#XP6W_9b@(*^@XS2_6ddJi;1 ztVdty#w{Cm;>S|&IY8c&AKPQ~2t$t@Y~^&oa^#{W%9zIo)G!!UZ5u{!8L+arnDIan z-L|xSpkQW_Ahz@tEFezH2ePqeAE40}(GfrqC21xYAnsuP<}PJ&`J*1)+eSyW2jj&k zcF)<^+#+RUv>O(C)+I4c(M%caXP<4G6-XISt$_6SIxfzdS{K%HP zdy5jTYUipftJDauT^dg(vU_|b#GPN^sk28GWNjYq{2~8dner0$z&~nTn)>Xen(&2UATB&L_$L_m2?D)H)LH7xcww`&oC!9O+3PzIlL1A)kb;emmJQMo^SLUwe*Y zi6bO!HeA=Y@Nv_mwPv;*yEJiQLKq@<8Tkjl*3s7!OJU3r(d&vp^R}e8P*&#W9~f@V zKVLVDFQM$1E_60sTTu>ycz$f~s)e$QU?u5Mn*r_-Lp=O6TUJJrl*_?hGPbhadjX(4 z^h4R<-W>|q7&~}6Q2{4+R_mt;L0MLQsy*$;o$hG*k8s@IJ82!5AXl~Lo$P73_BeOj z4i;8)VXdR?nR4febqb#7kwhhH&`z&~ZibCWlT4KpAdhx`m>g<5yOU;f#-~D+W!DVf zFtMf#K?qHsc$W||>e?1Mii4$@O(sCbaR#ZozaUd1mD)1hrn$X#@%cJ^=)GuV3_LgP zB6blo38~rBUH!3pLQ%SJ78p;EI@zVoJsNbyVnVQG^P-I?u%@1_(uN&gzd`)UG&c^p z`M%%nfVUKu%d}ppoH>K!q61qRjL4I6HxW>#eT|}_U(ISdIjEI~ac7M4BC5Lxy%~)< zEgfTlOT}cIA@IoZ)PA;bu3PnCS(Hy$9)%$J5JFy(eY|FBvZge~fy6jv(*-tmG9 z9~v&@ffF8>J^! zsknDA5i7j2_ab-Cukxwy8MQuw>)Id z?tJKQU;PNj5`~nhfyn(RZkFSON+=;~S-`$ENfI@K7} zC>A2Fre6DK=^6Eo#*^IC+RNwtbjK9~wWL+L(*;rwclwWWMQ=@d_JZG#Q)@q8=C~I& zI0eyn{xW$Y&LdBF=^DZwdqbqs))AQ@?402+^H|7U%5c=3fES~JhW?>)*eiGMSMOv- zJ#K^JUzx$;oQ#Kvifk5bc!wXZAXE%F0acEe@fcQ&C76@o#J(kh0kLSPsb)p}{gevZ z8=QP{q|^iC_LG#;NuFq#)*CDYZ{__BT37?O`$e7^Cf+EevY(UHvSW0>W$qOgH_jHo z4S08Sk3q*dScu?^9uB;DZp$R=P9+TtLUz{j{>xHfrn~t?&qm@jOHEI-IsImf1sm2x zt&J-lYHP~^l=W!)Wsp^tVw&_$VCBYOvZ@>&r9Ry9qB*lD$JjexV$q`(mS#=j3Xp_~PC;03Q##?PwR~p9IBpxKE;-LHGOf<>}np(O{~k9~WQXR|yLS z^(EXVhlnljwGuOK>(;!cQ6vQsg~#q3jE1E?uPIpZROTfzq_*@MC6phmr$x-8nANFqYFr>xHR>D_|6NCz53Md?M+^&gK30cJJ zFL)95`W+W^*I9$$cDOYIi~F7vSf-}T{Fqy<&R~53W_r9@&DH>|HC@^5Br?oR@jCN| z08p>LORcsSPE{6r{TTAUh>=&6PM5)o3+m@F}2}9$Os|#s9L*z zpLYF0ki)5{tSDU9spriqcr({W<73kw-RnRrm(l9J_GqK3kX{{yMyu$Jh0gpAkvWGw z?W0Y@k1I59^l^1o2nDB9p9s!Sz%B9LAxHD8jsLiiQWmKvJ(^_5p*W8eee}Xr6q_ls z9;E|M6^N}h-RziCorpRvct%ZLz>Kh-%I=gMAK}DLAfowHp~ufXC$&Q6Ln0yN6cw;< zi8IGp<0-uGLY3(C6pW%5apY+V`6FsEtK)}#OQHweN4!x0kwo3sYBdpToV~P8LS*p zCo!agz_ViLi{aU0Lu+6x))y)SBxHy6WDEn`zDVvNGdM)a*c>3;lnJBc7Ysl%2>}Cl^Zm=-bJq$)0TvalEzrD41tHoC#ddLy4(kvPf-(7#r3siR7f#)9p0rWkv#dSd>*k zfMhmJeI90Gyxp!Z0UEX$AKvJYzs=lzLde;2`2iU0M;N}S>4t2HH1O!KVX$NI=7*<` z8z$5N0f!@b2(J6l-UV>JmPMs(Jvm9C~iK`6NudTYDW3h}@uTDu+0lu58_Q&%TLiuahc1!u~# z`IW$CTs}0Jp}^Ykj!>JJeJKt#87gnz;;0q8sowD&gmvnSc;++%l%=*Zjn^%c2Zoxk zE|w(ki%v?~9k8VF;!nv|;%1-a?KU0}x2xJSyUTRZSmvakJV$<$!03W8WU!CIO8>~k zQn>M*gTIH`(5r1ay4ys^o?Cg2tgm%tPjBkUh8_{DnJz9Z2-3B+AW%$1;t)YdSCKDT znmvdyvd$;dY**i8b!9hGr2;w-dcbArnCKQ)_7I5bcgDnpP4t|4Q{3*dNYGIs#lWrB zyFV=Rbeo+s&O|ZJcHbS=?;5`mnPD?cEG1c^Wa$f0E@+xK?eNCu*4FF>sw2UoBl3My zX}70`rJIG-*K9|Tmr-72(1=$f#|Vi|TX2}8n@1Ir=y1MU;TbZhkHGAr6YJX_dilyJ z-uF%FfKEo61C4b$`qS8ftJ-KJPX<#66 zW)aa>^t8lc@}|JuKD%<29Y~p`ZFp}7`qP_$lbG)~eoMXThlX2Q%(_K_3}Wi#g9 zR+5uL{P!o7owQoSY2q)zdpP?w96vr3C3=VOKJjDV%L0NK*FF|5nhJYA<|T9X{BlEm z+w=!qTIw3KQk$qRCz_I4`&SQl2O(YM?mws1#DO}} zvTmIj`Pva~1*h;E8}>yfF4f(|VVY+*j5j3J7t8ar;$iHKyZF^96-x3-_tq>;e7Uq6Pyyb*~nyy9#)l+ZqWEq60;8VrbqB3nXB_Zc> zzO5>3@W^MW<`~zlvy(Jg5Rls^kOKS&li$q@9a8olg;>8GfAzXUd*=NB;T($bL(DtT zyAyZ3M;lj9xk6~yNXrRY)~;8G2dj4^zPkhWBvP`r)r=95{*vLm|{rVHk-jAlBSHjH`RS#q$`4a`_LU<9KnQwVV_`mf5#y0dfpxc?fhs+zxzk3{)8r(oZeWtwu&ctt9~?X zSh2{q&#mVk24q%n@@2@C23zmn{g8^xf0_@;qN=UM_G)s7Z9P22oPlp=11{CI5#9@b zxm?>?YCZU!`2&BC`3<#E-hy-&%dy7?ax*s{;Mj$j^zV&1Q_V$$6^+xjDUzi~_vx^w-b)e^!u2~`n;;}dL>TsKmgxhGO?G8(G(jIDmiZ6{%I zb>2V>ZwD?jp#IgJqXh4FXc1|3qd}U{et973J%{jYD&7;Qp}<=ui%{a3&0TMc3xr~G zr;49LO92q?BaD)NFkcGkE3O&Y!!<(bc90xXRpt}XZccYTW?0uscHko3Kn+<&NS`)3ZwK7k4ovA6D!bSk7!L}R5 zaxqcqUNqP7Gkr??N!=+V2pSt?knepA5nMmtF0E%6GD17?Ozt{r%Ej`5I)#2!pASIa z(pFIp6mOlA;U8R7IP}l(w9sz@bfzwFI4;XYtVIUJ+?6uo$6PttF!oS-XUdf78qXxQ zx7IjlJp^}dTT?R*5$P(6z2M}_*7eXL=Wf+J{AfzX&Y&mz`Q(MGt>4r`oJyWNBrE;y<|K*at@8vl%dU^cKSUfZ1Su zSRpZqoVhQTQ&a_7+BL+BR3=<-<}1ju=Iz{_-BsROtaX?#h8pt|((utcC1kUEWbozHwbibf#B%4B3H zObsyrRIYyBahL3QRlFXooS#q{LYU+@T0s1Y=&49)I{+S1y(_oWl^ytDZ&<2?-La>K zc8y?&D2dH&xVubmKGuH6|6wgk#N(s!N_ULSc75vkTslx;9gPNe+-1uXEx9b+WY!`$ z@5kBC!`VhhaS`xj1g+aMo^5Xsr@#?s7Q2^+ELmyJ8&8AzQ*V~C^^Z+?<#q;T_Ox}B zd5B)CThm;3p0QsR9>XP`^z8(!=0XSD_jA%B9vaFm)vHBi6}6kD!=KY}63|cGwWYMf z%8V^rF}q3bg&q-#7q(A%1MrUCY?|ny*WSU;IC)~t@+LlI z#7Ht$@qp?qh~?A>C(9io>Y@e`Ge2xxDl`$o*x6qNN^HP%)tD z-HwtPr5*x3tZq0AT0eZF2%?}cY+<6-mg95y+}Z$4UyQVH^Q>$_X+I0(JGIZIjipQp zA2?$gZMs!1SqzX`k=TX!SiO6S5M?dJ8*M&x44=T%h6DLp3<3f#hA^sDb3<*h*5ZBBlmy1Ex$@)?zWR0jpIA z7XsSbRb@Q^nuno!b`N+Rakda!Vy=Z$IUrIO2%9jq8g)pyA=^2h22Ws3@}Uu@jqfTe zm&Thq=fM;+rrcfg1KhnKWteAAM)Ae~*E=`YU%%d>>lr1@{TQn!lOLtjQF81vgGtd) z(YniHlb+s*ZHa89*bWbpu=dB}Gvs{P>T^1kFkz&5dP0x1>I3kPFrnCeA-u2`PGwA+qsmj+n z&N`c)J;=|ZI~sl3Y)0p8O4m8JINPIvn_gSC(t91>sz9^VLIQ7kJ$!>=ynVp&d|qsM z?io&Nrtxy2{i$zAabrP>GPLI~6^wataHq2!4$lEaTMen;x}C->no?35tWSKK_68Fv z-sm7zi7ZL__|~h!oE_xk76ak8%(%AC!>c*(Ep=HVOri5N^syl)5Zua1_RAaT($$1- zBD~ffzNRwN6u#XmvxxDL(VueDB~^YOyw9}z!y$bAu65BtM|f%`O)#X&2E5hdaO4T< z55h3d<{TUz`0rq-T5=#zWDOr^RnrDwaKDv?SQ}E+edV)dICB$gy{Q;pxd6HwYR_q( zVryLGBRUnApu(`jOH__Z`}oE*0_zov3(pN$IYLl$z zS#c557$o`<$;PJ+8OjhcN+d6pp9wZAiDn+mZL*h~$e>N36xiCNPr(X2%|&5*)IxFw zXrZNpG&A)zj;?u8G0Es_4yPosUygK5z3MhMB~>tvJrRZe@GI;#s?v-i4O-rmTe=hZ zujn<=(%)K#7&Ee(lx=xg;#ACK`B81yyF9qLeeyyH%56>3i*+xN7}?K{)00=3SAfXX zI99-%Sew%lH}%;NBBfX2BE_j?ak4`_bSpYN{3^5y(`$g-`^;gFPAbq;H@xXR^^K>| zjIl(KPQeeeRQS>C0b?!{B|19csi<7SCTRi@&z#VTvMf?u+|K+bM*Bw}P-Z=cl8_wH z*vi*+zd5fYtT+9nuERX9HxtD^(2T<#e6=ix+|vvRcXhOVeK&}J_4Eyb3s{R%J3;r| zJ!&=411Bfl#M_3q5XQ*vQ*UxA&@!XJbcUwPW!}RI<`WTJKcWX`G~?!frVv4qs%ug! zz}1W+WpusaP^Uc=u1Q5R;BbC6tshS*o&xp6eCtVFJiPx z!VkIlf;Y`Y5ZbG2bGwK3HuJA-PvS6X{Ak4eg3PU!BJDCKnU zfmUWzT&<#v5kkUpHt*5UHLboM$4AtY;npvcZGwc)fsh%m z@;sZlD20lbWV_Fi=npH^vCTUn>zJJYVdJmx`FqbK**41t4-6a3y|5RSi~wcXq0D|n zwqplO;hXXI8;9<5o%T3|3prE_RX*JyB%VQ&PB0FNEy+v755$Iuk;Hu}5lKl%B)S$L zD4pbJL-1rnzH#>n55z~ zd6XS&rKOYdl7E?=l#o*Asf(1_=2}?Uq{}V_WHi;kdkM@uZ5i zs4a`BgWwhWH~!r3F^Iz*io3yHMJA0Jq{4u^M9XAo_Nx)U@^;!vjD6N~ymFjvMRJ0F zo!>}PIM*h=_`X(r7qMwGm{d{8qVMX{C$4g%v?E$ z)eqp`u5=&-C&7iY6`F$r<98)l+Q?^wG|uAIqX_Z$Y2kU>c8Hry;%hDzYGr06G|+0Z|x+D&|5*{IMLeAnS4u}*g%qsoV-g(->H8MTu1xoOYrU8&>V zvVM%xs_|?~`fVl^nVf3kc!G5A*HUl&(K!XF=N)Qa!}x3ju9-PYE?y(g>|uab^kXBm zt#?TGllDdS!QD$Qu;F1GM?kQkyYt*uCYIh#9wP4eJWr5(saoPa72pOe2B>P%*P|{Gu;81P>LG@(>)}*h*RHUyW=-9EN7D(3X&2TD z=S=LF*Gi>F9(v4zxH+*$IUTXzV;8)HfTt>UO?X8l)ZFIrDzx-VM_N|#oqk{kF*4urS$@2m zxIt5J5bnb|R5?On=;0X0x{6W3dMnJd#AIDmE0e0OwF=fNOQYMUZSck`zHVg(<00q| zp030r^6>8#)mKQXr-Ke~b_Mnn4*I40)cs5s@}5@0d!VaL`PQXVRj){ukGBaHfNw)= zY4j_KTVc8loON;u!d5bn8h-@D0<2u>C<(|Zmlq@?$sOfZtayH`p+16%rZBd+2c|T z)+q`z4q(PgfISR{Oo+K-MnhoqPiV?aSGb?Gn`TMo3qQ@2@!0@T-q@;qbErXW$1I08lXS5}!|%{Wb7xeqMm*-R zIr$LtkDe`l!)U$2kL^9gtGDnFG9I6pMh0X4ccYF89oE$2cm6@;-8zf*5V-7(dR zCwr>&y>ilBCPln?Q>*C-x=*k<3>uWB(~E~1-RODCa`35VNuMKx)ELdFgfe%$+7q86 zK)ZlH;K5KD!R4 z!5Az*_w7t9?&wv6(zFPcmtp%<42p*BR@boD$@DMkM@r{Z%@gT>jh`-rO~C$jQ)a+G*ZeI;d? z;g@qJ{05k1U|u&-Y{7a=K_u9{uhk~rV>IR3r$<15o0M(N2xY-r$n8(0sk5RKfC#&h zguS^*eOs}a1a>%@R`R4kQY0`HnE_`ju}2$hz@nBGp@gVaaV!w~PL86voWKbT<@#85 zAFSQIiDX5dO?%;4DXZg(<8Mm7%{R%4 z+*!|jhvRi`5*?}1k}On~x8StOz?G@5c63B4zi|LtOd3dGh)!sMJ(3Zmv0CCQgV*nx z&^DbLOD_3(l5}}Thxqj-$1IgT??GiM6`ypA2a~0?yKFF&4GW^eVUA8-!Nvf>HmLwq zo)rDS%)@A+5*L>Gk7IstL%5M$mGHP^2!jKPYawTSJ_!zr$T4R#Ys3V@emga*z=!6H?v6)6vB8t7 zFQSQ>y{Du{&WHupaJzha1n#Kb=C3Ks$L>X2Mv}CCR96rumP0BF3l3*Zc)r$9QYTjn zQR@y)V)tT!Mk8)$a&Zm!#@>UqMg7?jfwenZPmT6yG+{&EtgJN0!)-27-qQZKd6deY zB{Z<$<5iJ`$vggLgAk=6(r~9=s2s)qrMBFY=cX31yz(?lg^6?J3+IN*0%c82y&sbr z-=Lb@D8w}n0Hndk+ec7o8d^Q!@bG4@ z8*E(kd7#t6a&PCTr5zQ~yNP0T)DRRrFNb&6Vn#jaN@>o5%%z3Dg@aocY=xqw?VOq1 zoNlLeFwW)vx_}jS|0ID9&j(8liT|8vH1`1KuUP=>f611+$d0*ys8|}9Tbo&e(s)3x zr8P}-K$sLEWeG_I5US zN!FUi23ogF^^A2ui8cUvYaJ6s5EtVsPz&?LEv^h|`4vcug^i{$00e0T#{$q1}5KG12Go$5a@GR!WHdcTOMvIP>wE>6-^Dn})uw5n=et}M~ z|09!6?WG_%{EK`6{1xWacqD3^WkD-a6%cT*ifxSxwBytob^YiXu+L0?h<$O_*EJ(-TZ zwc1yG`l_jpKca7ZlU)kp)c`?hTPzHWKu`^Mke#zMxy2WL;{^$J_uQ&FJoGD;tfkBmd=W@N-$$N5PVh!N?@wRN;%5k*he+OE5hn(vOgQ# zlp!?OTH`JtA{;iQid}alKZZ8Y1#W-GBm8EjB*-oc%&H7pupr8FWjf#H}yatqb`q{kvk|O@%8UIERO#cx@TsG@#Mf?}d z)6c_eK$ySZQ^pmYJ7~cD{HXX<^K{v$uT}B)&i$8xPCrCzT>)Oh@taPYEY zKl_PaH&2(%`dSqr_w-*dPd^W@0ii{IZ$MntUxUoVKXnt|M7zHVueof|7Zv=k!D~2v z(=T&g)i3{u>+!D<_~oSj^W5Tp4_?Fhn;w|+svh`91do4-$S+&;RUiLfgV%rt-EUbH z5RK>a_kRXn!}Oy$^uNx!UpDKD*#8f}Ye0kXvmk#Z_~g8*oBhwsjW3(^UsuFc;5D4z z^|L>}s>FFkKg$fVGe75Ne`8hYvQb~D;rCXRu2l&l{%KWd0sxI94XYFC8(8a4Pri={ z{P@PpRB^<42n~Cfn9;LDq{l-Sno`=7R zvaaaiL0d*YsVoo+oDsD6`YY=C)T*!a#RB@(ztdN6^~IvC*Riudb*cHp>{+pi0Ob7y zyqp;t6q71Je2w?yNyKj&*6NV9^91^N%;w;N-6hc;n{f>na(H$K^7Y%A;ZYeGsWcgF z@!LKF=4Ue^EmQB61ne9{jl`7#ZyKnr;ZoK=%Oz}xx@r(10QCDrs;cn`pvii$auxT0E7+yR#9J5?YFkoKuOwRhdE4E zbg3daneRk%peJrwq;KZ!QIZ>|)Mx|Q4_?<%cyY z9cxxj?W#85e|i54@s}X93xsZ)S>L z$FzT5?E2L`rBBWJ;^_ZR)N26(f7kVc?D}V0`7{29<}zfO&u@DJ zL4OGNEXpr#=L)ee=wFtfZ}3yP0D1eL9v8o%i_3<6t&9H?JKsQ11pHZ?zow5Xh5?{j zd_S*`U$#@1&H7p!{|7d|flR;a!xM@-rA4;p7Znj-$16{ zb>E=9r_bZ+r_9t(PtkvM2mDi;zKn_gwJmTU)9<=z(C)_7Wd74L^k0|xpXTSk=M?_w zLf}Q6!Cx!k0tD?ad=}a-IRMbA_vah@R8RlW;7o+&Bg-y^vjCKAB8nR(&uEp>Oaaqwd{-Nffsx5zb^au_(j~9 z*zcCs1fT1o@7zHO47`3>K1Uo8fyE{WnME$Z`eFh0I?`^Sl;o#cU0ozJ5Im&GOjs1U zsJMuJlCn@@5Ni~}s0?5!Z8zV2XD-eBT|az<^(yA8`r#kVrN0>xzp*U~ylmE2s`-Cu zUlz#xJ%@dTy*}nE`fE@z)o(+mPXp}J#w-&HNTFW_6g#NI@kOCpPPVHLr*9Y5fuI^} ze>a>=WPsNi7*WTz5kgjb&8tHxl(X~|V93SG`kx?Ran&{KS7-|e3Q|re7wa6uk#E0V z5W;a(&wt$chora$9=K$T9vRo&OK^KVDnukHSUl8U}wvI6~E=I?a&AK(20 ztx$ZH*)KUD(60068~l{enSNI2zp)!~*{UxV?tgRl@3I*EMe+G>Dy3e*yIhv@{^JHe zCHgDOxPNEi{jyh^7pPrRip_;;EgaRRZ_-VSQ`IQGs}^?RgQk0f?c#c8V9+at7Jvj`D> zk|dW-d~^ERa(z{zCY4su**$M!Uk`EFLZY}UwdfV8 zd{U%MvfN?TW3XD#A4|I6QKCI7nB0%e-DzpTqyJ9Js+PsXb^LhOdKN>Ai#z2zChW3m z`d?Ifg+;B)65dx)>5nGv|H^RgQ$6_4e`NSy3g_lCd@jQ|u`l7A_$&5$S1*%n<7=&fD9sc`Efh5NX- z-F}TIhdGZHHlpuq@*53g0~#Vt6ypO*^(Al3KeoM#Pzbvt+o?=auW^@sh$#>10IR!A zODt=EW;D8)!Nf^~EpeP*w}GiyWSo)aAOZgxy*Q>hMS?f=wLLchqoT_Cup3w}8Z?({ z`fQvLgp&YahVy~3r6iF&xI!#JR%71UoY!bsI%C@AH2N6j5=AHza&X^Eg&mxkkn{h4 zDfBN=5xW+8--m6b@@gha`nkrA2Mzc*di zReau+ce<``*Y)eKy4`ZC=kvUt=XuWKoag<(UgcJigJ9_W!Sly)o?Os|B1aY=j&VHq zSM}9pxYu;>gUj$&27$i)RK@4bHB9ZYO)Y~6`|@)Gv+Ms0?fX8%g!_9L`Y-y@58lP#7stnO zH-AIr_%Alz0reOPsquf2YCqWY?`6xsQfmB6T>CAh#v@mbk4uRI@IZSHe=nCla3qdX zIsUbrxZmqVFJPajcG!(UQ8|Vd6bE*j2ScatRE_~0KsH{m>;I|R@nKZlp8Nbk?DV;I zjNZS58j?jGe@6ZlEi-;rFYNV5j5A6#qICKro4mx~;o)?fIs8fO$c-x%6FwX(q9);P zCgjpx1Z)p_B$ZB>JUu_8jP|j)(lLy4oQlnsY1M|Wr_?6-`<4`J3RkowY#T0 zU@CSwav`LK$HmJ5pykVfZ?1zj{M9AoLu|R%5=L={r4F^|AfZROLR!I(#>OHpiudsNjIzWj#8cbS5+L+VGoFL8UDonPlmvv2BW%$wrSJ z=b5R8Mh7lSZ`+Fvgb%i&q!E}n>K|9vsSIQ2j zhTTCSU4oM_s4^9Bg88@a`ERe%LnPKg@udTyMb?26x4(VYe{+={2$4JohD{%JTF4%w z2D(rEdrA2L_i_v!`17*9c$j0(3;Dft;5~uiuPy)UNyO20U?8**I&emR@SJ={2j<~q z1A$B7KO+NwUe{Mf+iNlU!R35F1|}i9#@Qqzk?JIpYRsIJshlrUlyYjq_5Vsns2=+MHmyGW6Udx<%K)uwO0fSEpO|}~lSas(W6{fU6 zHMMxBorser)7e*{`T5*1GIQjWA@+!ogRZ7nydkgdo&hFy>^R-fQRC5^nf686Oy&;F zCi4jw4qlJNilSpD_}>f=$N}-i-qEiXAha+$u$pqvc)wTx{=A|uR{ISFU?9gao8y4c zV(h@;#1S|B=LO);tNLo=!Kd;Er{#O0>^CdG-#|AWjUWi*fY=N7=luem01Si{YzJ1Z zzHJ5|`0eXg%HX~L%*Vz9;Dl2D{k+64cG%Meeq;!%a0PIeJbK;yHXh%!fyQp``G>xw zeP6xFUdxhF?-mucG~7txpqG}fq^De8`-+dD ze7H__79f>#BcGr}IHEa)Y0lYHC2NT<5NIK!5i?kzk-8`)l7X-3*^0VMC&=)8jze4F zIqTf^2L9kKEF7mOgpr0o$k;q6oEo&)Jh0sK9m5`ye1A4||GccP4Et|r1P1Oy<&Kdr z0s&CU?_f#tpRmPY@%{fw?u9}|0fJ+){|(fj$!MTO-GQaQZ`fgTWzkBWunNasGyq-&=K4IpQb*8@KjXg;%_4P>}e<@AOM)~t}m%$xe zuaWjUxUTGXaLvMAy0W2iE)chOsI6dTTGB#Cr$e8zD^Mw#27B=wfN}{o>IOS0gxvkO z)H@)w)VsZ=-lJVDKSx6c?yu;J)qcm^{kVKPAhditaB<>@n|_SkeScM7ZTxSUyF|1qLOpzfAtf5m!vi!QUvH3Hvw z`JCl0QHhDCZ+NaVo;ulR9eXp58vVwkXQN+%B|eQ{=hj6B-A)}BfN|Qh)tvgXVI*V2 znFLlitBlv*J`V}cB73%n0x`S)TrM_CTCwzI1Y6c?Vuxrs-5Crc!gS(TOI8=-1$4P| zseXC&th&46b4}gC5w9fmRE)*vc+4APUNV91AtZCi_G;l3+_-(abEV;f=lc!qjcvMu zEnJ4yv-A)=+HsM3KxmPA;L6&!t$H9>KE~lX1l0rV@e+Py)Ia6~{TqN2z~eIcfFNjt zi0`HNzszcfGW;U}#6C}VT4T1e#Cp)w+qs-M9LSH{=0?KLw>*k1v9M-^h8m2pxJTtd zfK?f2N5tMxr5dLmdng((uIswm3nIHz5N!Ce3n>Rv7HRZ!(;W@|^VkeT<73%OV>$gL zFC@bXaAz2;DcKFJBANqA-`Wu2WY9W#_aX#d(n$0vHjBKsrSbOA1h^&Cp`__6C_9w8qypv|sqL z40wpg_d7wXj{33;2pQP-XViEERRUUIANc9fcg%C(dOD6QaR}M>-)bp30gz2YriNmPBBVA5l)E@_4{}TQ+6@DT;UAd@G)RL~V`Sn>& zg;RznbhbS7fXKcAF3z?M1MUcst^*)&R1qiJse7h9p6S|5PKi=3i4l%NX1QeL^$%N` zTB||0fukMVI(+p{dL>r20y!)gV4L3ap1`0nIBA8|d2zwz(j@xpniB?CiCrHR$hD+1 zz4$lfnyPs98kOI~1|&BzV0Q{zotc2=&1Y+d;13}){h&E;P`=~en__s-cwhU&L!HdW z;4}gcGyVR*;WPp{Aq5=JRF0q}0Rq5{Dc`o~ue{^-m-bc2@f&fsj|yts^G|=Nuz#tz z&~(i~i~QT0Vfk(I{JJ~tV9DdZb;m)*_d($&p~d$Bz*R0WOqx+knB5jeH=Wm^sOnWooTt+olH&;xQDg!$82FQn0#50x1wKfhS#G(ZM4xiCQxT-Zpdmu2dZo^|=6yXQ!Lx#oxr>(4*IlX{u(F)a6<5 zOc0frlXuOH)upmtsj}r>2Zt}godjPaQ^~q^{zRs7@_pP^mi2^%T?Rad5V9PX90&w& z$X^clC}l7JxDV|gFxz1zp zR8#^jcX0oi=QoQq2b|$?GVlF$ePx^fR6_tnI3X07H?(ZRy%EI+kJNWEZ$2J2UT_lj zQzfH;>#eyXf}U^`E`yjvJjo3t1C$eLizT|u`C&c4uaXq`eb1e`arPxPqJxiM-;RCP<>;M~ob#?NaaTEqdS>9wYfa zjCcI6CEt+Ik5JT4p+!Fez%BLvfY}cBkNn4yZ;13qXi5Um;ve^hwtw4fhvLj*fVF^! z@sHr_=STkYU=uGuoTo&9w&zZ6OmHp-5+;B{TxSrRr~+=Rh2N9NqRX zqVYea+d@V;LSr;&H3;xyoo^fMP&js+uA9Rw$Nzt1KgdW(C~OKX5)uG@5%z7H{a@i02_{}){e+}{3|c>bl12}S4#Eq!ud1V5U* zdkkG^e_3CJD*rWI>A0jyAo$7OUv@uIAq@O_@7o9QfcHF(+5Y2A9mj=T0-=Rn0>Do} zziqZd{_{Ax(*DZ6I&lA&nKKl+(s4PMAZR(50Pus!f5sq(;*j5emL~`@AM@yU5eQm7 zCII}T_Mb4u=au~?r{n0l5(pyv5(*g{1TFm%0Df-!&lu!T0b{TC?YGvIKoDV;NAFz% zLCdlPfFCX&G{x7wOT2sX_?KsqJX~y?V08!x00T*(W%_+y*;j{Sk0kg5TUaRyqCFEq zADCA|AnZ$dGv2#Nf^TVdqQ*`BQIrHB+Vtqq+J|7@Q$Cfn^AUu;-a-_&k&$&?V2k1| z+)h#VPc#eD#z&RM)#8s)qph)f;1B1F6iH@+((A$r*N^N`nEQa9T)Tz)#(;1F>WfF| znRtQEN<2k~1mD0dJ|l6FoIvo^GV*W?5bWFj$P!_(Wc4;z*&tHPHo)>7=#+JO;yR6t zC6nemxr>8o?Zpc;!D>}^haY;tM)L^V`QOS02qG^N8oNR(ZGa9-8(-V?*FAUrys)p# z`Y(9y3i>`l^T+QgLC{h&0efJ~qh&+KPzOJ+>nmIQmqZB=L?R{>CkXsuLYE4GA95eG z+1DrN(0fYogK<9aiTjzZ&d&?`+G^kw>_?7KVXvzbyKf2g=3IyE6ENo~;&L~b^TZJ? ze<8mEmY}Mg4$Npi^WL&4#^W4S+#5l7gV_s7(!J43IZeFUYL7z9U%e(cdo7T(HessG z=8?(GGJPgYoxa=lWL-kpV9t{UKZ=xm1K;I%l#t8tQVGK!+uHDR{IH%;@MewOJyR0d zvE_7QtUM#rXL#bPsGNc5>|_5U*7wRwuRtEC7!oUa)P`y)Sos>@CAbq zA_;XDbx%s(Q6 zgGqwJV#MIVQRpW*!@v~!ff#a|3gZOH`a`C z^Io)@h-RjMB}hht)K~$H^Mp4100SWo+Uz^dlZS_m8(a?kIp=w(ui{9L(U0al+ag)} z_MIo?v!1Loe#Oj_8c|ou^2`alGjdsdF)?_8ct(@u-70q3P#hI)-pioDo3P# z(v{9l*{H$p4#{?VDgH4YhJ(gC;5@-E&A!SBxIT|K1J8Nn;DL7jA84O( z`o((!_hhUeoVoOf7v`b>?0_}bV2wdE(^g}8dJVU9-RV?yQnk@+WuE9x<*6Cx$Q|!o zeiUQ+#HMx3>+tty=6ZttUR);Y63g|%H@p*F%Q@iXvPEJ459wJ97jI08Z0U%aTpt$y+ z#f$>LoQ-cAfNKw+^CdI?h9(gSvwzy@*y*^~IOe@(L5=wM)BBSK{gL>IXD)+h4f=2zBx*)`kI)&@MwV&T(TBXfdJyFrDSw#yN00juVp{ zf{Fg8-~k}W7*c3X6x2bH#AjB923R^>fBDqnPRAkpn;m$;l z$JB(?=PPd4ZIutbOOH2M*?tv)TVOwT&f(GfvhE&yGZZ;)6#2Okioi;#ETICW2VNZ| z$*jAQ5AVN{mN4Y-=|M(PINdB!Il`bQpnJANQB_C4t!I*8P0wqV+e%k6?8WLKX*&hlEx( z0TY$JZGc}HKkhH>DUev=W$YOsA;5NTGe-qv)6b3B^3FiVFLiJzCk@o3v?Jq zx>tJr!3oi6dyFayKt~#WqVN%{FUJn{U0m>uB0Ix4I&P)pU-W6CSLI5$$c{g|7|~YN zM{YzTbreZ0&7F|Az}Jp45u!JE1#2sV-*%pHVS3Bk#T;8kH6dF=+6BT~+_`XL;{4lF z?Dtd~DtxF(1sswim4$or*7TZ$oSJk3b^L}dg)j}ePcT3VG4?^8$FULAj8ZTI>L0Sv zp(c*Kn(Pm4B!~vLZ=>o_@`qwZ8;)jbHCTz_dq&C%In_Tp^hUStESxLu9dv_*`}KWz zp#w62Y2_uoSChV_(p5-(!fXcXmN-_x$CC5}8}%W_IOjp{ey1r#0MaW z2NS8f9pI^W^QpPZkA<#Eq*_JB-|`3m8!2_r{W1e8glp!wq*4&nq*5?J?At~#GSIl>FdieMetPNSGo9>lc4X8^p|i zNgJ>eFIZcb(L+P=M3wPUxn$5#IUU0=IF&;jxQxUq@z7U7%X z2ZLWCia*2+0FVs?wPt@9HhP2!H@V^9J{}J2z_qPl(z%YAiAc^SCiRzRx2EXjOQ!WD zBo^iq#PPCk*x6E6vagYy6QR!Aynq~IbQb%Xx-foRe5}2NU<_(W64C3_Om#oW`7~cQ zLgN`3T1+wcnVK9Dg+e(&{Ck?(gZ#894AF_LWQ4gq2yz`6BAJzb?siU8FL?Dni47*B-koQPtLnca{T))macBZJx7m-6IJuU5tE z%B1ZG{HU_B2BfPFqT~UEA`dmNbg#Spn-)HBEV=mDxWR!RCmR>kZCd*r)~`G!_(k=P zJZ5hAenC5M-XoZd$CgV6ltAHFHiGG^sqhCVv8u}IYz_4t+VHIrg~hYj9Sw7MXwOOr zkW)|`XEPZ^+t5j+LA>aOBeliNT;atzoMrb)F^X8Ed}dPQKHTPfg-AD3p_!g!QQLWa zW;4c6I&(BI#rEMGwwn!?x3X5?IWjVlCf~OYK(n>)&@O7Q&oQ`Z#YE}ZGSR*j&To?9 z6fkUm)la{P?D3@Q`Q7wc*(?agJTAx-1U1MMOvn4SF@I%tc9>-P@5|1>(ZXN%*Uvm& z0YOb91w$3TZJYxq?HJm{{<6M0X}@pn3nE(-itYiZ(V}}*`~#luvps(GtParr!oD)W zzoB^%A~6&iV?bLq*_%7~O=BGH5C*Y&Yjc<`WG8g8u;AzVdrZOtk2f^GG-O@j&rw590Q?euYhtZp|mKfFhC zcdoSd!^yHCZFRLUv(#aOD)g;XcU>x^nC2c&@>&Pek=%Zyc~jCqb=t4LV6mgcn0t9n zZi$|2aA}iliEy`;UmVi?bKGD8YR)K_C3(=QU)RF8exU$$7&ZE@6`&wuMWIQPq2`K$ zf8d|7(P6OYzgK{Qhz^CqJ3>tk1^ZA z9{Bl0KY;k8&B>)HO%4f$h{suCxmdw?Da*TnEW2TW+hS6POBVRgR8E+3MPHOvjSAtF z?EqR9e(af|@A2MZahKJavl6Wu)0i!~-OR^uqf_!FmW^4I3rjWIn}w|B0xP>8MDNHd zmR>pC*2qlhoxd}s->`rfAW5wc!OuaYfI?#)Xr+ujMDBsh>uWd11CGJJB*lNo?A&Zz zAON&2G=~tNM|f8L9hpgMuT4hdO9xFnlRCIFhByw~FatYb&`Et7^(6^Xd;ztttNw$h0>m%e>VqAhV06%rqJ(2^b)f0~Ufb{OwI~OnA*8*AbbUkd zSwqd?1jBIukIVdC%K>w3wr_8OZIk_&-|$b@FEp?wDeM#%mXdwqzJ`SL(Aa?JDq=IuMc)S{{4F$nDNzKQxY0L+G|J+0?_O=)K}x-B>V5V z8V{i;|NgzM5B##%XLkwpAno-r??$LGlVAt`k9^nv^xa7R?#o__Iuk;G`GX*0B%%1O zp{7WJ9qB)^*Z=h0Xj=c(UaJurL-?-2hwFcpQt%@SFv1Vq;eCXMtxyvp!My2jZ}tJD zl!u#*53B`nvjKrn*PQm(^_5PyH!TsWGVUKUbyWoI?Tx<7)IE=g2A-)4!rhyxDKu8Y&w=duf7i=_A?z$i>DBPC$Ro28ZsBC<4jHGFnXK99=sBO_zAv?|**p&EsOJM*MT+(+KV$*zPO z#_SR^3@)1Y^`wOBehCpcPg@%sS184_PFQ<0cGNvXpgM;YUh)W*?^)FKp5AhP_1HN6 zC+X|$I3i}Ui29?WqsiOP$*GJn?D9E~dSS-B<=;`wl!n%eFnb5*79ch@ZC8sbF2?io zy}bhBD66RGgwG{^Z$;kvDeE$99)bKj7?W_C#u`LpxK9HdA{3V~Hi|%QE@_@0s zcKBK<3~I^n$P4uOg&at4d8=G``(nMxU~HOTnUo7*5c$Jj+^sM4BI$tJsUU^H6?`=` zva`5D-uUbt)}`cvg4{>s9rXjx>e2Ph4G`fNgIYTI%lTfyd2`cOWB91vD6!cQAxsXy z@0fZqe6!gH<_a|(%tCHWb+0|AQ+~d^U7B-o{>H$m=kpvkr7WgKrwlEuFbc2O`S0r7 z%?yBV{501)K)jPU%Rs87M%rHOofQyv{rx<>Y~mbImnF+=(plwHuei$V!@Ci2K8Y}v zp^0QHiJ>szf-vKzmTe3CmD!KUr?BW=*?iPGF?h$R#0lnADZR)bK}K>ZrHjJ3WHjXA z@nQ7E)veOeY8(Mv+^4nAdQkKcfJON}y9^r%M8+Eoo}^WN0i+_=K8Cr=!qgAltyXZe zSq2t7DzMva*t)q6%xp5N9>92UmwY!Dm!QNE-lfnMW-9hA(a=;a@?)py(BBx1Jv|w<@?h01w40>(Yu7?oZ^2$ZWAFftu?5ny$jF7x_ZKER8 zGPK@CPj~AMDU;vBvt@uu%uuoaN9QuVz-VI@W#>`d|Y2`gdL@ z-wPMHv>2Eez$+I!7Ju3vt#kzdcW!>Lnh6zt@`UMz4eq82qQh0Kv-gDqH%a{lV`i&o zu!{gCT*~3<@%wljna`fI6 zG{rQ9@f){!c{d30Db)(rC;~_0ZWwPI47$v2GLP^?H4Z7E_sE<VIT!#MIB)F1=!h8 zo75qm_0ks7$HbO9r`K7%2S`s_$?aTUjCuJ%?{wTC>c)K`Q%o4YdjW5&-Hg3jrY|Ep zY^lAJwUKP|db%4QSy1HnypL#CJ+BmJ=fv(uZ(k8>Dx*&U8d^qoL|WpXzTRY_7Er55 z0_aW^-Ex;Rtthzap?+VtK-w>iH@Y=cBF<(MO;C1pBW7;#+3K2}+GL(Usm1l_ehr)V zLA7fyfLmR*o81(m3T=?coHs59VCEvV*vHh&_jhhO z)16}{m<-1>kKTQ$bTN@SHZd!6>aFM!hTEdy%ZU>*Pi~UAjB!`vg32-$x$|N#wXw zPSYd`+x#M$AfKq2GyW72fBNkrQt}h@^A%0$FpMkb>2hv0CieAVoJ=*#jfW*He_QBS z=)qrpnRZn9#EwX3_G{u7=S3wm2unEfXjWBTQ@n=1g~`WM`#x5XZ!ALp+UrL>>d^?b zCe`Bp&t@eow{63y&UeIg6X{tebH}(ats1%yE?vOL@SGjwZ)e7a8$3@ zsw^=Sc{*rzk+t(}j;)qIiC~O5Dppd6TRAgA`KUrd+ZpuWd*^H}HVl8%40v_#6ro~S z1fZc#KF8Lp?ILEEq(V#Kv*$B$T3LgO{m=4JU1BqOZ3Z42-4?`Ous<~cN-|)0c(7a*BOK^ds97yXEcJ zo<{vxPA@m9o*n_-6T zJqerbw`|QNA4nQzsjq4A3wP7x<9n6>#|#1uHS5igf}@gjt2<-QkB!f0B+Q=aQNY{Nc*v=pG;zRs1i7d}?;E9QvCfbQnYt-?hqx8f;Ue@eeb zgGmmbY?yPOZkp<2C@V8<*$E6YGD)65_I5vn`+S)GW6D$SV{SiU)2B%(?}$&8nRI@{ z<#%l*7H=l!q`gU zs9Pvz_5~Kp_tz-6!{}x4me>V4eTgFK20t|9y{dG*gdyneW+rS~Bnos) z!r(9*Rb22fFO-$NDEP{NgG%6Hgz)t1^EI?^Q5cp=Gl`$@6}$3-32CsO_`zcN+6`A) zp53BQs7IuaFcC$db`ct`;}yunS$g1HH-^H)T4uIlbb5w;clqX2Ow3b>wP6&@9&@L2_-9QJ9-DQ&r@?*s4uxNsrScQS==2&}5O=~Gk~5`= z&BXPs1A6M|l&7xoOs@&+As2uy3pK`T_99%AkNjGi_BQh zv-gSzs-t7=D;(wStG621hBc@uKV5kGsaaYgU*%%u(^NPddd;Uu3>VJ~Nx1Z^nRqda zSDz+izQ>SUZS&+VIaZ8v_(jx5Z zM&NBmuEU318=4>#zhO_!#!L)Xmu>l3cfNB9Fp1f+FAF0_mR;wvl8Q zCbHBwaKa!JA}uAj@_}7^EeW*;6c-9-j1!Eni?5z1__zRXh8AO8Af^+ONXGW2=8XtR zIhAnMuKMXldHoItsZym2=A9sTg8-~e!x?MCdAT=?U9ySOz6(|tRmswnX%$}qHb=_f z(5lb7G28a$GM0yg)z8W}mG~#XJ0skseCMESj5jiUP8-`x@hyroN*)nPN*r}hfq(A@ zA)0F|-5BD`xjJ==)J{UuJs9Yed5sA61!B&e%dscWv*>t3Qn>_*um{!MU&zY{SifTM zfvXrT3!V>CuT~^heVoyFRc86h_=5xoB(^^? zH$`jW3F;Rn$x>#h%T+zjZut5=vB^el9I_RRzd*FyIjk?kfdC_V*8!`hw$h%@ka41H zM|2+RRS9)lTz=yNKMGAr7mjERGoRBa__>ocr*S2(R7(|^NLgPwH+;#OX0|20wqmlN z|JrLZEw(Y(nzOAIpQ5-WB`mP%BM_9AqQI49 z#_5~pbQZ56xGb%<#k)KRVre>?{XDWZ0K1BSfp~0#Dz1#ag9tuRX0cshBx7!Yqdfln z1ocwHtBWCv^L3J8^I~x~DDbP!Be-!%6lG&rm}%!-8X_tPVeMYaZrPAbcI{J~oladK z9Q)uVWAny)enp_>L~LbdKQexp#EHhvW)78S-Pw4vi=6JdTx?@VuI7{K?t@WFwuf#Xw9TA+9OqZFN2d{KDm0x%)G@14V& z_`64k8UtdUw^WBvW+aP@V z_&SNxY(w#YtHU5);)2Mo0rdmGy$oJeJpvmEtFt`rcS?H5@sr{*?YWPZC)(5L;`rSfdI3f;j=FoB*;uF@>@uI02K^xSyqR@7yFW7CK9VHD?5=FW)! zdeu%(Qtxupa}V1qgRV53p3CcR?az@&>QXMd4w{`6=4EI%nq0ln1H7hSu7Hi7jLkG_ zmqx|Q_hQh3*{DH~FD)&aB3I=Vb+tdipqqoqdk+o%btjDJ5t)%~yv8_3HO5os%l8VJ zH?PTp@+~W{m2#`b`Y`L57;0Lux9>Mku*-(iH#inYJ9E-i&I=Gz(FazlGgrpc4G4rw z8`G?wXB4ztSEc5oycBz0)GD>7v1&%HF5#9aMawCyK%0PBi{%p>?M3l* z^w!DPZh@Ti8k61O;tymkku4=3B&pZqpI(ik&SE!xw-9TY={D(&b4<8+$CA9vsm(= z&6z5_J!!C|KU5v5QzsWJeNv9*r9gBanh&M9ho4Q#Hpegy3r&;Crti}XuheYKyYexD zcb7a|WS*R_F;3B?EF#6(g1;P&-Ps<;FrP-lOY86siCWiW>)vEfJ=SU$^5RYMw)aJM zOC$pDxr%`DtFn^`2s${VRScpO;oZ}|7?dh!b$gEm4~ z0mm-@9`^?}F?& zu;$c_Ru!U+{@4A>WL!wivoiuTUhm|uU)y%>nYX%)KUyL?=SI<)x;9U&#XZwyf1PJO zlcxBCUhw^(XEnu+1TKYXo@`5Dp)X@=&Jqs-RfhX4iXD??9QaIL5DBWptH85HGmvOs zc+*b;UtaB`;buc&AbCydtYh6Y?SsaSCKJBs%eIeC=9{`=X3h=K5seJQoF5L$-{=_V zhqJC2E-5qVLkW3=B_=)=OctP~-sX*@=1W!-7)FU?Fpy&;Bs#Xv9QD9ld0a{1!h4@_ z5+?>9$IWP4mI-l2;Z0coGF=zZEW*Hn8n)W>a%Ms!4D&|~t>ZJ@lu=fgD)$6$1+;}Z zr7^rVRcNF`dL>@uSn%w+#RES` z3#^b)04|@4eqelVws034y_4E2HZmTIFE?GcTbV%lT-^1j`jai`r3iY>$z9dh=g+uF z_*52VX|PXYs(#v9$zzhb9vdt#6A9a_Y}Hk>gSePjMb*`BY_Rjm$bc4Q_D%2``zqY1 zr|Z@!`p-54^(xO;^uk*@tdsWphmJj8odKK>PLMHUZt!}T?~I4#k(9+}p;galO=#|I zJQ0`j?c5nFzkEmri3rWY^0+AtunkpP=z3B^j)~L5vShKa!MZWsYZDZCV$bbm#pp2<~G;q!~DCK#OMTA>~jY$ zp4`6Qu5zONb_rH00-DuhJ?$3qTW5qGrQwK)dSIjzovGe(sJDBdOC*-++r#2Adf=8t()Q2j2`v63M*(@u@*K+B(Zbie8lM&9@6I_-gM_3aM92q$--SK zSi-S8Po>F`#7VH`zNwHfGirryr(2qn@4U52ULd6tesc7qXIQ)cIqFwN_HSIDCLs?~ zeXuvX!#3`x^(v}Rk|(1+D=n2J;e+QE+C!2emAf6vSh2o$}->Q54NF|wrzyIpg`-d}RPVU*XhFwDGh|*h8=~6nt+rGuPQSk70uZ#qv zBHe8_3G!9aygDEyHju+`;yxZ)tK3UPsTSPpMMTpa%rI@nXr}$XlphG*Mm zxzV~<1k0jxo~NIP(33QAycbG={3h5_4qVQrp#q7hg+mrtFH)Cr&P&x}aCDu+E{tuP z7z$BRrq@8D4v5jy_O80p;3+w!BBdM|QLZJ=zA^o5^Ge4G3ZrhA_)g?2?XIiqBijRn zvW2OP%4Zl_V14M8`GaV+Nz{B#~A!Q|@jFRs7F3d~OB?NnPYc&YFxG2->SuVDDfdc4a=qFNK_ zl8M;ZwG0C*m*Q*>Qy9WU6mcWAM@A3ZxK7yc`ylr%kQrqwn?lf5JIbV;PhGvE?MeKhn}(&#*bbIb zo1Zt17mr8OgVl$v>P_5rDd{@?F6{&&!IyH^9uZKyHPO`;cP0#8LBBqs*^r~jhl*!| zv_{U`ZHj9Y$Mpb}qr-3EL;S~?t#LK}Jbo!OL=sJB$41|VOpU9UT6ZF|pD=jW&#KS} zcS;Pr#>9$$E@0v=^8j{t0$;UCh2nk~opAxO3mkSkh6K;!ZjZef1%_vWVM=?v@2B zW%FTdV-I`zBim<)13jxN4Yzfs@M}sHZ`lLhkfKaXjT5`TV7aOBiJy1iJcBeO>mJ&8 z>GkHEtVYz_t?}-pZpG$N+&hetX2g;BL8hlt7Ljero?BSJ6pMYj6d-wvG;)E%_LOR> z6$`Im&{_)q=oL5C6;2}I^61pCt1p7y+D$CSo8M?lMnY%yjKnUvywtCLvvn3=$&;fv z$DpB~K$wdP+dLF)hMf7_lTdE5|9QJmrw*PJ)rzo#Gp9t+V+Nv6sTHZX4J=fi?S-mo zKGRDpF`9#4YJ>Ubw__Vx&E%Y&c80u=-D_w7mYmL@CyeiZ!bROhqd4I)s zK5wv+r4|yv+ke|6!c&=oo)r+4FA|2@0MuO>X-! zy9Nd%!1>N=zBHjyt!AKtMYR|LP@#rUlrYs7)K;occ`pPp&gkMl&sVxFpZpxHeCqUu zKkX$<-4S{IV#FBFEJNLpOMEm2ef3N6Iga#gUPXify*<`&8DiV;e9K~|1T1gpDN0G> z5qPv8n=;BoWDDqb%^?Gfzrb@H@s zu#N=qR^co&>IUUq6kR;aXH_!>(=)~t_!vLa=)zS0tjYcNN#STNJIq-g&3!pp95hJc z_v7k%aUay2;O{8}+`lml*XYlFsVq9a9jC#mQYBEu`xab_=j~~3btP{*>z%lZQq2RG z8N}(>U@*s%r$sSvy>8b(63`mdwk1<{FbouuVVShU~O{Iq!O z-t4+@LD474WI6VPGwNt3!vI&!1{Ih-HtQjCVlGbJhW%I?Uqv+E!JeIQ9sPYAYqF1~ zpR8`uJ%^dcbV342kxuOAZ;hqgA7S&nh+vZ0$YX83V2<&;Q}!KV)!SEH0qRja1ROz< z4KU9mEl%SpTWXx{BTv!DO=+C|;3B$eb2bBR6N8rY+6`EMkpg@Vp|ev$zS-bAwM=awe7-rmW;0$~7h$SeQ(qaj9e5HRYbFSl-@m1mj?E$q zndrVkf_hOwtn$ozf?QHm*Mxy8eKmtRUTgBY>?R`mGKbLlgsMQ^_sME{($+O}uy7sW z;}ofD2)<_73&h>I@+g>|L0iFRJA8E1`~zpA7w1_m%g;-6k2`344UEwDMxbhM=$9cP zn`KOU+;_XB_b81Tmg(Oz?B(O*v2U_<+Fm`L-$`lRQJG-BZoi zbDT4i^j`MnH!Lj2ACyQi)^oqddtH@f*nlv6f9z}(0{^MSfob1&R;7&E12LOvs83?!Yh#;5<`w!>fIfj!GGFq!tJ)IC6Pm}c!sP2x{oZ5sN+*5le}tF zO%)F9LKBpmniQvdFnc!bae2lZXCKn!21)jbs^NQ1p}zOkJ(tVNiF74VeDyloG<(e2 z1;qd<4ldfF(G$w~qaL@AfmR(85k?Q|=nxxm__;>oDQ1%|l*@(}7V<7dD{UaX7D8ZO*K|_UA!xRL7k^ws^IwI z0ij7O7pi8`?V|fEb`IvI9!oQkl~=XTJ#m`L8Raj#X~N59ETMdv<^r%&G}pP1lmP$K zQ!no|<>J(Hoq9pG)vM|sv8ct|T%(w7I)+gtp$mH{TXWUx$d^@p%346UtIkj!xmNB) zLcA#n0|UDE-W^oNruKn_Cugp8VgT?W z;_}9gwrF;NvIk12gg1nEkgj!v?50sW!%@NeKQ-2ExA(4Gl6wp86p-U`B@JHneBg{|Y0Fd!&#JVg15T=Ve5?c1EqBa;?(ql;8U@_L$$f=;Mmcdm6a81e8C zPn>65aq*#!iV)n1dP@;gfCHx!=nzkxd!{c~5N=?r6I%7UE$->Qt4d`woY{dd9@Vhsaq+zXFtdk#`V*8$oRB(K4dg`N3q)bW<0}r zxp8)6d+PMFz64R*3GJpQh}Z@u9@h=b`D0h#Ucj9fbE{srk6gkh)}!u62PEnu^}&*l zNW44se#Py>lWV~yJZoY1JiG1_vee)ysTTo3-Snd!Of_$m1=p@D7O;?)!jTHYMk4sR z5^qEkFOt`3$Zw=_Ja}?e%Q(yX6V6WYYf)oVTje;^ov1FF*obTvB(nLj-pe=3a$ld1 z*3Be}skpHz*{W~WMMuf8cINhrj&^s~SNZ+f#82i`P9>bwkH(ge<_*C!QIwDf z74p86LPLu)0%ykHZO#f=3U`O5t9ndwN@=>t1k$n{b=srA)%Bsb3ifa*aRaE<`Q}2T z)27yoWI*8JfT7)$$d6$H>e&9*W%$g+;6CDXHyP*^*H0{+qphv2slP@kqt+nVoli3% z{ciJvrSILI>DB1zkJ++$uf^Xgwr~<%O%Z#6a_*c!lKdT4w^t$U7kXrTs3nzaL>$zF zolcMe$K3i|)e+l1;*1agXM9GN@1{lQ;j3)TG!;C!>5Bj6Nj9Nen^k7HDyMsiL}%-*@Wr{XlV=dDhCTkp{$8}_0lBOPTq9f&+$N>s?$5u zeS?AX@;bN_VeXElY?AX?fYP2NADlcKL8rINu0?*L0^K()rW0DEmQIJQts1pg^nmF3 zn|4^4(gGB{S}&v8UFCVx^-?E2<&;6HZKDL6=)>E#j_4S-#woVCUQ{`j5*L*^220KR z_Mk0F3^u{jx@=fFh9qocQzDFi1&#zCdcMN)X|*dOJSCA!_>&%FFo1O;NO6c`EnPPIvu+b?B5kNlz0({#r;Mc?b0XH{!Zr2hg;~ zJ0+~vl78H&6lT5XT?uQN;;^!^({-GQu(J&FOStnJPS?ltR7g%o$%j1H+>jJXRz=$) z7iSU|Av)2o%(fCK%&By)8@`zQExcxT(gK2`QifA%E4y{kjJep0>DB;dL_7~U;m)iYP+RYs9g$Jf?{h7ymY&`Ybm;9Qb%E! z#&EMgyfbLwA+~T{gc@4b^MLk3A$;19OB7^1F_H{qFJ4DUv^bR7B=4LudnSa1I0IKQg`+fZBP zObRMeG&L<_e3Y*47>HjOMvVcf$RjDXg!a+)y$?I*INk*G_Lh*jI5)yvI#VjLYih6R zG6OTD27rxaqR9#h@UV$rkAAoCsD*mt(m7J<0JZC@s~O#T3Z5>h*^h2f$|@RR<4)sh zX9Ry}Wl)Lcu!39aSeQe*tV&QN%-JqR{47drm@=Qwp?-vOt!qVp{vPsu^?ANV8?3pw z*IpW}tX_t!6!M6E#@&8X{%UUu`FJhe+CttYx3XN8UFqg!w58p?`rMA@*^`B)r&GrA z>znVwR`JoDGEde>B^gwB`mMH3W8khCLd9aZSo+#Cwr#j0k>w}>uum?;*%~MdVv=4^CY3%})U()lv!Ji_?kSdg)KsTQ z9RzWMLKe^vi}hr-0!TV)*-J3_8(ytHD~<^sc>0l9c~{*6u_KFR_W$m1)t_jG9vViY`{eRh4SW&H0_TCHME;8T7bW7+?s`e!bc`lG_Hf60ThRq?EwAQ~IxN=DiMWc|})k-=S}Sighln!b`ha<`=lzm%8c46p`u{pzR5)fQ9cN z{peKK5-^V};x?s7{tWx71SWfEq`LwJf6{XFQy5IcPzfUKTED2l@|zX8n36z{yiI?b zFuy4*Ii1_c2x_;$t4xtvajMpDELdEr%C-7%F_{sZadZuxN#EIr2sBLZZ`?V>#0w4* z8WR)56ug9K1esy8O1CEtN%CO&m=ydE1m=W@>|d z1ug=6LQS^$&`fSzFT&7j2DqFjj`T0lan+%Sov=}{3Ol2BdQ)z~f2`aORxtbSw-5W- zO}a|*A3109%=dJj+JNF{a(AXs(7xzKYt#=*Gqn1WN%cPEtgq=yB6rrilrQ>d#9tJ&oFUXj6tEq)ST}5tz7^ zt}EkLjWv*Ll!6klPUqEweoNnmbYpl4b2NxC`4^77nD)e__{mP{BW~3~xes){xcL8LvuWa$8}Ly~k_#dr~mk8Tv6_bbKf`ZZG-2GNjW#ts62 z>Mga7q@`w^!l`7No;6sjU>#qDGm)fIXd`2>-u1K+%i@lh)~$(RE)Nf8BgwJzNz0aC zTx|RyKOrTXxa!V$*5|L@9E<51FH_9Z9xlR@TxLgS$KFqDBZ*$GP-&EVl1C#Ig6rf- zYlBxadnjdbXB(nQt)evieJ-6%h$3Hkfw{ecGhLKz;a@`1 zGYCqXH?1;AUZ)9ryt@5wmPLDt;=ek415p)sH}tPWc`^lczn-JjC>3y_`t`b~qK{q7-#2lWJd7>D`h->6f71(! zHmi=BPwknCWptgyP4bEq#w2*Up8j+;o5K4Z{iiC&6TOiNS6e3L3NO#kM0p|Tqi$oO z(o0j{e@Mk+JUf4)VzR&JFB+}Pj7>?+Xcm-th`*&t#N?*7XC2AqAo}(?4yM@U zF6`&>$@2wm*T((-rq}a-3a|fTE)z3zF>$tXbaikB20H`u3PyHjBmi}J9YqN_I#GFf z>3TO$h>l79dPV1xfet^le07+8RGfk3fVVBk1A6Of%k*u})m-j##{7^)5sHFA_P zv$C)RW`W`UfPaJht7BmPS1IjkWNT$2Y;R#}1}p&c#d?tXkC4 z$XV6Qm4q4~1&{_P0F(hL022p0J0pM@z#L%VY-Z$Y<_xd|SOKg7wg6irJ7ZHLfUTK} z3&0-WXy$C?Uwk#Z{{tbK*_#4+oZ(pi zmrS}Y7aJ2J5GKXO&B#T<2_)g-;NW27B;jIZW@IMe1QOP90lBY%rCiL693-6F%>U}x z{=;&x0ZX`nbe6z2TtKiD2?rOJuL)4_5SVZS=MC(}0;JAjW&*19asm@JPDXYT zu7A?Kzzi1)a2 zfR>93=$8|?^2{V`T>lONGYb%~$_4xg+&m_hfA&9J0Gj{-q?|zcVW4FKHfQHx{kPj} zz>U)T-^c3z0FeC$X&^w=&Dhn;5qRJJao_?^yoiyD*?-pjKQ7?^yr``Iag~AKQwb|) z7uSE+1jug&L@pTpSB9Ax2+7g3GIh0d0iN;y0EzwgGydNIS^qaEf`u8VNB_S;5o}ys z|10}HKoJ})K%v_IPf)}Yq*9j6G87!yuwJyR0f9#lY(oP~8O39GhY6!)V|Xz< zxX(Xip58vbCb?5G_uJDA&h*a|M1%{A$4P9VSU_b0&-HM$a5B9>3U6u8LCnoLB+Sh< zJmKKj>9BRTdyB6z@Pw!==o0y71n&zKgiJC#GJiBobY}965s~a!!y6ib*E?RcXCb^2Qw#W~d@O1%SiZT{!8@RVc5HokV+9t*6MID`6YL^q zi}3r!RG>oO(>jQ{6?b4E`0S^_i1QaqKJytrH_4$`O2M0UkUv8W= zADzFtAd@w=K_KF=+!ENx*xrE+-G2?jM_Q)yJpxQPP3Uw@QanO>;W?qCVCcYOw_ZN7 za+)eq(n4Zbi<;6d3=lFu;qEp~oqSl86LSb>H-~XQ>t2Vdvja=7^qx##-?Z$`g)bjB zzq~nG8#!6OVuCZPz*9Q9(~9Vnbk4W1uD(4BvcTuV2j*mEW~RizgSbL~@XIj(oz@-wsAHh`EJ0Ap%maRdDU z!ccv_^CcF54LxImoa zpFloE&@bil&i1B1g3}QP-G2jidkuu;7}FK{0@!Z5`LLe^ZMC$vAiu6H{GP7gRkwV$ zx&jrxSibVi*xcN_E%t7o%wBpbzWM_K@WFzJgjAmoAQNdE65afiM*V7-dUyvf$-j`J z^`_YHpsviy6qY4Tf0+LKSsiGg&^qv&%&**LZFiAVgl-71Ia;%2D6)o@ww5O#h(A&_ zdEPPzkT*e8z$Ap{L_irpWh#fg@bhx&F>Pfl@Z&#Ny%d2F~ws8mC2>i?n$} z{c_`L2ui8z$cTxYeXo#XGKw7MT$*iiy* zaiD28f$U8qG8FSYFFrYI&(7Er3i>Q0k#GShCR7czUAPOgQEE3P@|{NH;j)BTh>6$v z6W>iCWfjeWLYa3c%bweui{ZhO!2}e{NEoAOMvgqP300-+gRU#p{>@EaVT7kqO#unqeofVZVQoh1#4?_ zDL1+pjY=tn6MoogIUx{^t@VDigAU1f$UJ313U_`+m>Wk@-HSsiT zu$CfI=N24KKk2+!svKDu>~2kNXrF1ZEI5fESjQr`N8JgzLTVyb#@Y!^OMZIm*g%Wk zm2Z7P_LdmkH#7_+BEc*sy}RLiSaNMK_I1gYynvtzQ3A33dYwEQv8oC)Fd{bX7;!bGZdlrleO>e3$k4As zE6z&`qO*(^*;(5Q35xd^K5LWZy)2e>>L%a&WD7^E@t4qdCEM>6-c#kAO-waC0|dkw zBlFPSS06aK!Nqlr?(7++GXfd<`5@Y^wgDyzl1q(qKYs6E^ZG+B9N}iQelm?r4E;1@ zLT;jUvMWzLcrsR<31H|6(6`*xX{PntpgxsA^qf?rI(M+$?*-=-!>J8?D|Ysp(`KH* z&cf}7cW%w3-AF+(-b^gRwMnSpWHK(o8G@5yVO9xT>r;n6z1;aVl6c>nrT70EuQY&#@r}ooTX%Ib=R5;?{gD+YyJ6!?My_g z!_Bhdecn76dv6;fvcJ`XIT-`)b0X)N%hefkw)SH@XZr4cvxg{o6FxLmpdj91~$7>h3;iOgCkCTmRr1=8@ z<)esl9X;OPHO&obzqEPtMT193cw-$*u#m==W#{?gQOUnT!jA_ZmUZ8&5jqvhzu~aw zChZLrpmy49o}z&_2;qItt>yTES^a~D-2@8rq`WjfdVaPRc(jGk z^S<(@ITG#7hZ;I$7Z5amx+9MWh8pu|fzL&QI8L^FzTuErOnj?3T4T z)f)>HGJir=_b8E?C)X(GqJQ4#HB4%TN8-&R@eVEZn*aU5;$l8*dWsoA5c|<+G-~Y` zV_FPN{nrLkOv@$fp?rVYCN3#$u!aCmH7^+#4NmXidYl^R8YOfvcno6pr*)rx&60S$ zaCEfs+4NwWlS13mgRYp>^qd_cgZ?ckF@CT^J$E!s-GoaQNysyJQ7u=>iSGKWEFt{{ zSv~p-iAQkP_L6{q*F^onTt9_CE#A<)Lu2jV^gcCRL5<32O?9f2w19nYKZzvcoF0EQ z$Ap0L*I+1-Pw(6&xFv$3zvDzs2H+5i9=m}YI3X(t9d{61=Fo66_iBCwZkWPf>E9*&U~`Ynh}(W2 zWupnJ6Ku?3-YVr}g|gL_u4;_6L&iti$*MSj?9vD9uz@7|PQ|5Vj9)0TV&AcvC` zFF!eBG*~VQ;$O^}rJb=-2xrV3`krS9ImXeFi3|hJFXUQucWUz=QlI`hq%|Hvkt0El zFp{%y{J^ucRXrSmK=2z*J98Be=Gh%X;g^c6Gx98&^v{ADNJ7Q7XUwAV-W8UUB(F>j zg@E7!xuo_wEFv;~!&7w<;t#x6wjV&TOkb9MW6pd0-~FsGG%=JF5%nY6Bl+cxFOKC< zM0EG|{9tw~mC&FJ_@`A%eiJ`~tOqQ|AFMUB0(#o>hrohxl-92 zJGdnRE;L@DoR~cR)bJ8)XJ~?m)K(L}P|ogkDMl~p?R`KUr4?k7kV}@&pP6fa?8KNs z)IFFk0kO^$kp#>eat!lL~v`dG6__N#Y$e01HNSC`vd>AEq# z53oGG3ge~%BsFNHDCm)@A`XxtaYhG&LSVqG-LUW;jS76B^ z`MVeRvO`kQDZzDU67$6EtF8G&o)Sm3@vnq7pET8d%tDEG^y%ci%okNvUtx3C=oNID zoQ6G9qR=Z;NxZGly`(JvGHj=clPNNZ%2Y((bcHml>_ytrc7uL%)@iID#O1{W+N8Q- zjSc81PaK>hh-EJ}7*2pVl}6Gxri0nP##F~c6wSDhfz4P0dn}b$Q>t2X;q~iAr;%0+ ziGx)P`B=@)m#LA;O|{W+E!DA82k|$)P692j$NJ+0gJ)f$)604+LaznqcH?kaupM<` zQ%So74V(1ow=3|P%v*f!e_H*q6;WEE`1XF&3j8ftWwMpnj5B1d zYysFOnQ=(Hij+~;ID|qxGgiuV>#l@)DDsxSoV(}879I;D%o@g$+Q<-VsuSFie``&Z zmNTK$r+Bf?TLnfV%T!3OEqTM&h#G4{ms_hy!V@Q zb+4JY-u>?<7IAAU12fc)Hx|C$_#8W8bHl?%*0Ksc z8yfA4@$x|W!Ss9y4y_6OyG zTYdF*%f2p4kc2RpAI&E&a2rMTun24_0hlaq5M6<{SL`fsK8W_z*$$9s9!R$zs!ntk z;hbSM1WL7ef`fKR`k!bt0~>x(-cC&Bwr_vSc*N#VYHK+K4dvBoE$<=h^_yvZBz7$d zL<~d{o{N%i8Cg)fr&y*bPX=O4QYev8N4`X%dj#{WQxb$W$6*>))vfTE3&iP-j90UG zXYb`O@)kF4LkcAY3R-)z8Cwn6{PIqPqF{!irbXCUQYPWq$+u>2qU6AB+YZl_J(YFR zeo>D64eK3^FJ`t9X*V1;$&To=V2B8rw zn&^yrSBZNPf+K!Kz3?a)c?)x9#&hW+z%OcmqEdfJ90h?aVJq^g9P z+uI)EQwl~)H)=sK;glZ{6LP1XWD_cqw{z?Uj(=(i?1IE#Ve$l@F28~AhpmHM88o9W zSr}!HOV`}BJjRt%^819lC6_buceZSYm@CX~Iq6(>uPOyWa?c~+h(i2OA-*YYzfA$H#y@0*82(aXb!V<;?AlDV3p>rSw=Y1>-q!Ma=-Hi{hoZo1UgfPjMA3zGy_} zPDOhKw_mY4@cKEIb9=~ahYvjj>+WwAk_7nQNg3w>@v=1Osi`k`M@iWneP~G&g+v~2 zhU;~WZEOI)xsc963LUh*MFn3<7Md9Cn3A&ST?atVK5Mb=Cwopk1Nt{Nl5bK!ksEUn zv1W@)8g;5ZJ(xbJ{Nb4y=JxDQt#4C0Hxnc44;L&(Rg@D4+FRo){1_He*D=c)gys1& zcLuvknVz?t6hrc{Mj1z*S#&*Q0G-70)2TaqR!yLlo5a~iZew)mBm@zvloDP?(g4VI zsK2YreZ4Ze&`Qoo%&Oc|b)mfj3Tz$A?MJq)+z@aiX4lZ!#q|Lm@!8TO;$n#ARmP6Z z1>>@a=Tb}in?HWhARGQJLihR=fi(My)Xdkenx5EkL+huH{^N(TEyU1=k;hy1dxaA(&O`r<$CCfP+io(46(~SrzU^xPu2mi~px8iPdu1V;$XA zg4aFn!=HGthP}VFblt)9OZo;}vY}_}mwmsw-r5w?y}b$o>P%_K!s3Ci#^Uuoq*HDe zmSU={xHI~d<|SaDjwu|%1Nh}@x1NXy=gobs-$06TryX#dL0C0sGz?mE2-lD>cX|je zM}6hFY_+OWy)V9X;r|9k6&=q#FrcFcaMUDyXC#wUnHv?z zZwySC{Ox@qb}eo0um!*Y7zm&AR-Z?0XcJor77t>M>d;*aN}KfNQ!7|%o9_}sV_#JS zB|;47TMWI^+n^#5+FDcEVhfurQGED2QrEtpe9Lt?C&$XrTMzU+j33EGSLl#EBIc$5tdFe_d4t?!ZW;4}_Y z)js|b`DH~5mX{fU1Zb+`IdOB`HN;tBq|P;VrvGkP2=>QSda|ON@Ida-1)LEMf4zur z-siMqez7AJpQyuJMVV%&T9)j+a+H^o@VIwV3`Afawp5pKYasFOYjX32->sX~=D-^A zy&C>rs0s_5TwbB2FfpE7>_Y)LTGRcZ>NHAdD9xn(?zuc?29+NDUE&gTBL*$5BW!Ig z0&;y;wjuebdTymo`Y@BvKDbA3_6xRQ)d6He^!Jx>S3Jt1w}o@H8wRC zY=gY#2hgrH24EsW=$|3nYotG>n+*)U7J}c}JJor#F{!M01}0vZ3#rZMs3aXrrxgox zeST?(9w>TPL2UjSEO{>dorvJ)GWiy4)Jb({5sVU(H|he2;P=+|ZKwH`?c=+#@ zJsvYQWOAD(hTXBx^$G@l9~nDA3I@h#5#EA0!`sp{t*){U=4+;ly8)9!7jlg*`9+>l z-pK;d7KOXVPyoe-ZFn=wqDD^GqpiR+w+<%0y8beAMaNGM>pZ`a{LOlrb~K)W_4J6U zEgAQVq#qUHB!)u+gV9rgJ{{(`rn%h>-#&^_o8oaTG*>QPPdXy5*R@zZpZ1Pt5*+5KNW5uhrH@JX1|1mX0>MU$66ki>( zKRbp>;6%&(n^AQtm!qR5gPM|5k!gsXUCv8ywVV8?lC;P1Sr z+H+h%hl6U}#Ivqt?JQon3y7O1sN2Dg=-p@TX8<9$%&;kTQN;mO^#!#kE`i~I=8A4t z3!88e(C?>0IH&-~RR;%=_LBX<={#bUo*3mdj~C~i!YtIY=I?kO2fZi`MxmO6Ph&$E zkWhZKKNv6Q8qlgrm+(Mb!L>b|Is$htBTu)Hcon85HlNFSoY)Vy9j`@D(mv+*2rLjx zHsVc>OFVKD7$QuprMF?Z%_?b1KU8@RB-xFP9j#Qr=xD{j;7Gd zpE2|T(fJIQ%~IOQeV1^FD{NffuN7<&Yq` zjB(3x{lX_RZ;U)0%9lDVO9iRKgRy+?&Ngd71TkHcG{8K!)YyRiSZycot`GW@t17i48NiGF`^mD>`Nr zHh4pG6&uFkhq6*&RIeVNlO@M<{K(!EZ4F+P$gUjHL37 zQ{oyU-8jCJ7`;%WZX-AEKO*y4+-Y0>L|aCdwZPBD-&f;($Biv#pSz6%6uLfVxa!Zx zpaP)2q4%s|AW9xQ!#VZWHQ!6xR^m!#pvLo7xqc4j%t3I9H^<~B%DOzxUUel!qsEH5 zKK*#yB5c<~|J9MfUsqO!NBoL;+}Q#~niBdBF+P^1s_{*Z-)9C~(S>>P{jgemFCd0H zVk%|(An(^z>!FLP$#*K9JF7*rSmuloXkqgTIO-VI z=@7{xMqr$#^}3C&Qqps;$qxLj?UkgVxd$R{ktYU-PXjRycBJ&6cca{4IwNneILRO^ zo|)}TzNIEN8}mN5F?GFTKe%z5P^ecl&Ud~ZkfQXL(va@Iy{9!V0x6g3LE26;A+vZ; zy@eC$0iEaU$28xK1m<)xdg-Ln^DQ%j3~KA6V@c-)k#=wM2fex6?U@8IHm>I>y|Aij zkHiY0TDzvv<0|gqxw)l^AwI+Ns&S(|>>dL~e#y;}%rr8ke~ZrTk)~OCddcMZ2upN; zWkBX{T0#%UkR=J#%udKNXTxkH0LM4vTDFxbfnL?7*k7Li<@z8gZ3(vwxz6Zrj~4I_ zs-a+|ao@T1_5C;VV^qIl=cR0drco@nF8UBH1>7or4}Y}$Yt z$evl>B>L0-p4jPgn<;L~(%`(cJeVK|oenIIGjE79_1)m%ui(!n;^ zG50U;c8kmoIhm%a3H_GwcSJXU1@1Z`Uq(Z$^Nk5QvxZyJ@>=_P(4t@=n^ER`!=N)5 zMXNs&Mv9c-c{4*`=cga}WXf}DMw#nc*)E0V=3oPX`L5-}!TF|c_I;6DvZgG*iwCWK z*bXG}ngDHw+!be`lYZ)9w(E&we|sjU+3Pxion!*uF2>tol|d$NL|2CRWLPD_MbG>sglIwwVf`J3p!<$*&EoCx?xPJcP!{`^I-e z$#botaCN7f*tiO74*C=x!J{&MYvy465qS$fG$_Qqf7IuVk?d(k0tv%ew6H+cWtOib zLGc#Gmbpgy^ZkzV!N@uk^>-EWu4Td>oVm!sDOn8^aO~CUjjdt927DnWtUAju@nc2l za9Xn793a%&l^hq-g09^>CjU4!%*^}XFc+ndKc(p&+3l()Ga%`F1^G1Bj|-Vf!{UyL zo!fvdi*LQUx%#GTY-*sX6{}LUYLVjQxSbfJOJIDVl)pI+aWX(zyd)`9w_fZm&K9>z zTR=#&7Xf!y@;wOF&fN+4x5g#YzYhC5KTD@$p>D^ z2utR7;R<~&F1&#I0t2NGOKRBvGip^!t9yA;IFAitVIFQ17^R}y#pyct+qB8`O z;%6ioY=%*R%cF4!q9wy|;f*K`vk5F7Zz%^(a5G5$rg1CyJ?L3vKPmPcr%X1$+XwS&{dOa4P&P%%1#&;^%S`F@a|8ooaos(3E;=5)%{gq_G8_pTl-i2!!u9r zWgQk*;sN&qv3_?-eP_pU$YOw?IO*aIJYUNI_U`ESn)Zrd<*IIq$ygT2dDqonBF$Zs zz-L3#^aaV89CIg}E@8qVrYl^rlY?8nuSpS)kkw>OkvQ&6r)v^EgZfn4u!gleHgDs@ zZgvZVQrXz3Q@ZaK*@MZ372t$4ScLRVb&s>doz#9_fj^2z-Sem4gFa&Tcc{- zP~36qQONh!4*?Vwdjg!8>rAP`$DatsmI}gu>q3b)J96tP#T&g5{}ci;(w&bfqOvSx z&=dwu`k4@k8S?b;x5|-7TmDG5dckjqHj6&S6$27JPV4Q^t52!5ojfLT*2Mwj*Kz?K z9AEB4MdB>SJ6r}$?Tn)Ymm((R=kBa8E!WLSr=9E0Xob2k87VKMFNtVm;}+2y-0!*! zG@K`+B*t&^Vu zO$68xTa;Zl>rm_1tqByr31Y1@#cF$Cf+W>Gb7&L!NBBn{^|NRv+>89Cm&_b|w$m?$n!X010|x0#3}ldC=9U{Al+bcuXKN_ihstOsoUr!*Ap^N7A^l<%L!QtdB$hTB`+hkj zZBogiIa=0B4pb|Z!K^FiDHw0>_i0)jV)|u=DVArHDj>;i^tXm!A&(kyxc=Z-eP1K9 zg#p(&^&2NW#KwT7Ds<0uDzvz5O@ppnD+*SU+1;ytWF6KkEYCLW$AHt0^*AFP>2}wU z@-YaW_`Lu{h1$>5BZyv;4$t{DZ+x$IQ80lqYQZEJ_B5DY@P)>!2*+c9+zMe=7K^D|=b@_W|UBUqDp%0Dm?wEGLTUiF*;j3)9j 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

pNXaJbVmkKJVxnwbgs&>%-fm{V=PYdh zp(I(GUI{^2K)1kYWaTd}37wQmky)mK_gAp2)7StR6aFlnt^!Djoy@>wm-mHO?D`q6 zcNWD%^}w=M#rC1Gw*A)OWV@kfCObWS@bvWHs`5vN&&N$3i}vX<59f zN&(({LDEe9?_j@MD&OB6-i*gN+MJ8;A>K7SXM%#sK2M_8zMa38M%*}ABHQ1Soi>6F zV<-^LHy~kP5IO1t>rzTiZeaIHAsaX{K7M<3bqu+Bou329$ndeTq3gd02uxxD$H|o6 zi7$_|rqUt(5;6n+vPV__E+oiMHOTrzG(_vaweEQ|)qmx;Mz&SFzAT=->?G)FGy6N| zHV6%1Ya695DQPdamO{|{$}f9fsSv0ki2NR2bjj>~a`umFBs(H_;N-{e?dGWqJnzt( z=i8t6k_|*Kb&)0!8hRAPhqOF2nMh}NUs}Djm{hr2byw;hKQZdL8nkEZv{F<#Q~vSu zbq4J)o3uf^0h!uA?RN1^a5K;FbW1{Il(|sZ@5WstN^39WxrRbYOj6c5ymFMi!<%aZ z^!0kGwixm@^Mv%osBGz#5HzaW>$$-nlTrWF?a&|AE2|>Z)wxz1JEmta1ljprF5;&4 zPpW@KY*$vAJ;WMOmie&>B0t`T_S-K$Axy70y_eZRQ{N)au35Eq?t zPX9v&OioV1!oqUdt)*sVot>V-k-|hnSwljRb`B2_(R*~B=APLp=k#q#_f5lZfnE*m zez9sSkeoJ8{vKGM>%qZcC36*UvfXv+1I03=z8N?-tpPT*aM+oIZJ8_Etl2w%RY!t~ znP499=A(XTlgOM3~fFQa8$rV^I3YMs$Z zE<07yoh^02?!s&1d$>?s14N4L;9g^mp!na~^ukeuM{i?WUvR5R#VP0{H7FFPyY};x zd>CH;3uN0l(x;N;)l0AK3vkiRMwt7+{3_jSmUH% zQ?q%=KvkkTgKFqE-nY$4M*i0gy3qFsvjKS_a==m0xAJ3o}vAGFgtS`|Mju<9Ed z12`f74HSNm$hLjHp5tZrKhRbHDyuK+rDBUN$MnaCy}=kcmJ`sazqeuB>D*>LA@ zOu19P04bXN7R|s_JoZ%&)rHR+%}zTKk-O;j_V)GFyGCPedAaQ8?~aa+IOR{v%Mgsp zPt@VEy9d_y*KWX=J|ghT{npLX9s1q=Xnb$oj|GSTAs#x(&8&{6nrOYk>&eBe;1Lr0 z&0XvA)zZHXd0d?wBd?JD3x3sNT9B%}$7`VO__5Bzkd+F#5$&JTV=GA|DCFU-vFl9g zMfgZxCxZ`rl}GIq&}NWKN_LdqC|2ALGY%1$V^BbUsK{{sh{;!~4wZ2N&6;}=p*3N1 z-;^)21I=sHDboMsgD-$7Tco3IC{$#;?#_+q_2#9D@(Ih|EA{~b8}TYPc9I-bnU$M9_W!0 zh+q}>dDD=i4xv`V;j$S4WYEwH1ww)gczk@^*w_dQL#i%rZ-4C#Muo`!enkJ*_d)@7 zJ132pz(g5*)ox9&o|kL}QsvMUCe+RH*kDBV>AzcE-UJo4_@br>vRGjF3%qQE4Uaup z2r%a#Fv;Mbc5}7zJPcC-Dr0;TNqBy%j`(5!3xv*t&Z5jB_F^?O6}pP(E5vk{=ps

@tr0 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%0ASU{V0vYcyBwu^$s3C57mL_ z{Hh8NsL5h>YHn^==4CoRIa(d=Yqs+{K9%yKw!SJVp~%I%!^QU=-L!{n)J3AT>gcv; zU=j`+`bqmzQtGas!m8kHx zWM*a-z}|JcbWLU=jvl)Va{ScvL5soB@mCG)Xl5r!z#H;c6KOw*(aEbJ339pb=VG)07>h;S4hj>5-L1VHf=0hS`fQ24q` zfunai#Y{pql{$H*>M}$aiU>~?;b>qf#!*CAni!~_k;K$4#l^qKHK^D%sKhn2+}JVc z5X$wx_b~RHHAsr^di1buU4e(Xsdx>CCy3Glt-^d?IhT4{1c^Okfh^wo8=Kqr}=o|~SO@k(EAq37OX zF2^ocrxn)KHWx%ErrdOHvvRqsrGH;ltK#I@xScy9|N57(Pd@kf+dmulQs~dAuwqu48Jf^2- zbBfvxty4kWx3Go(=T%;`7Bh)tk`R^DG&nS&#D+JN`sN-7?|i&|9G(%s66BEMz(^UW zL7>3!BE6t3(Y**(Z9eY zv{chr@b@ETpYG8AY&Tuyyit0z&*KNJ8vs1wg(<-|Sul9`SOo*{5P8M`##r3BG%zJL zFfA!8%ZcfBX2-b;doKf3J)rJk@N za}%=J=#VCqnYodP+0n_Vnd!;7sqyKlsVRAHQYCn7V5w<%eA7J#RD5{-mDYV&daNch z$-p`_tKjbBCy{D!>ncmVxLv#^bYHv`=>EZ{1_GWj9mh zykT05_v42f0Xz~#slnE)R}-~B;34#gjt@>>3OwQh(vrin9Sq!#Z$EQ(&&9JU7ccEo zbF=nb=iu>{3a;7lxydPj0fS>TPL2+L`z-33>A=>OCh4#F6}zjN94ynxn$+F+Ir-msquJVc3RZhkYl0KslIt~O4ct{9jp;NfFk1K z^V3h5D3FE@e}9NQV7ln;hIU=NIFI!I0ww`lR?zOjWHQy&)jy!D62LCjF^tF3!~g~~ zsbWnU#0EH;7(|ej8ag~I4S<9Q1NECgtb(OV z@l*+x$}g$uYQEb?VhG8G5zY6WmQ;7($sE8icsgH`F2vHL;N&=}5L(g%c#1@W!u{v* z8=vmd|8%eZ78S;p-3*oUMyas?JT^jCOOiwpJOu7huK|zHEPJNgksnT;-hCG6g&!}u zTDffo@R*mic!2Mw)}l(IZQD)${?)yd%(>b5hyA^=IjQMYHP0S*H}H8;7cPYV&tJtK z{VD#FKPLa-PsM-wqT=)K629Ciyr4RGyBTW3n4FS1yDDWff=5N|Lra%zZD#DEqbF9O z@_wgxm42rylDy)3JZZIoRSJ$CrK%@Ekt5!mJz%F(JToy=SpB$X=z|20j0}h$=4E{- z05jxUKVZ55_yNS&7)qw#bp|+OeY=;eO+tCa1fw_^Hi&RgBZdqo=n{2`L`{cFGve1Y zJ#OoKPBjst0AT2I3o6_1cMn~&h*Z~Oqp1>zPv`;+P^uJ76y9`BemXeq6_gJ7fslEg zL76W`W<-${7(y6^$itJxcp6A7#L@xSNHH`afE+ZH|J^C8Pxt6=`H`_jg}G&y3_M~s z2zVq*)8xP-1O|^~x>{r{9$5|s?uWM>Ke_WH&~qy1Tr6ES1$fNO&dDaGt;s8O#p?#? z67CgMK7TRN)m8VPqx3;<=lJYMM{RMuJ~e*Vk8!{MWBitnGynQc`FB4S?mCii;zGWY z<9P2wsC#E>deyPomEf@!wQcq*+dv^Oe?Nv6H+U>eS z{m(YiuUDeY#NQMYx7az0Y#ha&0cjS_82~)g2$Hw*BG8mbZNpR|L$c_l@96)bhpjs| zHU2I#)!M-W@$t~rh4=x8gTqS#SqZLeXbBb+Ya7R@6NOhvd^HkZohSgRrpMMGvMlUl zYMZ-S?msuRiBi`NQ6~wn62s^woch+@hTA>RM!hgJkqgpa)#It_vB<`}%KAq^yh3$i zxH>@yos$q6$}j1DHW8gtOEKc3bi>hl92Ajp};N`(1CI~E(lfp9X4P6gxJ9KpC@nbtroK`vOWa+$4a!XH7&+;>y zydina%}mbDPESotP7IFRF0X5>xzlvFRl+t%@l#I^Gsw&debC=nn;?z9tdY9?VBDFD z0=$-l!HlxBN@j&Vd)7BTH#a&zH}ziJHYWSppG4p2;S%4X_6q6!Nsez(qm7Qye)!+_ z1lQm0Y1gebvu~u^=|!1p^BA}w0?LtWge7v`{JR@Njl|JoY5H6zvT+09zgAcgZ)|N{ zu%(#zmwNsG$v4=|GSu`iHa0Q!v2v7p1?L!AC2BLHuM#90Wa-+F1K^(qNqj=pbI&o0 zMQ(=j+cxrlv{C=_S*FiA0*|d*=LrNzzx!_f;K7&M7X^=@q2<71XlO%%MnRANnZVr6z=%bk0DBV&_yJNpvS>m+d%QAt%%Nj1`>T5)1ke0ohsSO4JX zRBio(_>`K+gqp<6mfEJrPXmEgtDnSu1bxhzob*jPA9}06}_ON@iwGTvAF*dUo%~==8j7KHTZm4yRd*JdLwf);{ZBT92>9A?Q17wo9G1Z?MX-p7Kc&m+S7IW@?{yMMtDgl&q<(BSxJlK6=sRs~_~f+@{;p z`+Qz0i`NQ^{Og`P9h64p(+qvv?shk|_PF@vs_F_a>xf>9AHeJwO5~}lKHK&g0JDF& zO(!rc`NiPK`v;G;hyr*3qJXuyZL$fOwOx*tztB6W{Pcd!M`) zqcbCuGb0moqZ4yu6Em|iewdt@8yp%R8XX^*oE)B>9h;n;7@r-Rm>M0M9vmK>fP#xc z;VH+bX2)k{=44^AhexKzz!}D8hbLx$j!w*g^%uhvBV$wWw51^B@WkB6_}u8^EZFvZ zXx7>}^}Ay?x2TY}{z&^w#c=B$=AH`%sWHA;xkcmaU^v?wf=5w$N$|~ZU(2+w7DQZmuq)Q$oLi8@b@Agt;+JE($a?F?1JW7)fKlI zZq+q4-fGIp%TG_s7#IL-BO?jg3mI!_y zEuvc_IC^F{d8aw~08MxGP2)&Psu~{+P0rLccX<0}+PY`h`=&d2XFK|4*!m^8dZuO< zH4aYB+_~Q$9bfC=m+KpvpH+Oj_r+LId7GU}ij!xiqfe@%Pr8#&hOKLgAflkBf28ll zL`HtAZ)ky&cZRc1sk!QZAFCzscETAO%2mi zP)o=3{Pfs7U}EKf+RY9gu#AmO6_zx4`b9tL9>^(d!_uS|wS*cZ>FeTWg1Rs2942_j zp=+S-19}zj(Dg_;wq^PD%H?Ewdb+OuetlzytO0yJIkSmo8hcSop#JlB0W5z-o3rJ-Uv1Mnbmlr=k~KEATs*h+2p(;1ijl#ptADly{Pg#SpkmS13^=^lYP?E5IPeG- zl<62JsO$2s>awm7!c_?zHC;aVsmZUGRx1`JXAT>SKRRZgxW}vNG@|~{dMb+&$?UOW# zJPkeeRj^BsqfX#x=(5!H!qlnk?@wE8*~Qqp$MEA_)Ga&ps0Nm461Ux|=E!VofIvPv zX#1PJRscdmVk%lY-d_puhTu_O+8Acf@mV`~96z!9)XnR*>m;{uIGp!3@yGN2$&QvM zJ-4f4L)9WY{u1N)b-si#^`v94Z>+VYYj||{$_C~G;WIi5;cN{sXaz@A!uan&Jj^lVBUrkVJ z_KShhuFl@RuKUe(sZCX)+f|Z|=De|iC!>R-eSOaXY;<>bwYT3J98^xOp_CQLgRZ9& zvfkTUO^VClw8k@cKe6194?TcSBpRHl3|O1iS&LMgj#Kql*C8pefM0CQXQGHJe*=BUa>-#&W_sIS*W$Vyz!wcH~%Op{5N~8{&3Lt*D6+W5Ml-hl(%t?1L03P#o>z27i!Rn6N#Rxw4U+hnZ1lvJ+jPI(p=V*sY47M(TI}6PZ{I*~ z?|`dU(!o=XCoa0~l=W&IJ!eu<*0iegyle2NtE;oNwtidXUU%c1NqN=Hvt%c1nUhv z+MDl(y9vBsO%eydgYOoR7@8R$oCY)@I2|aw4$T}Fk`^D5k`kWnXzYIAyF>|ecJ+5XdIr`F&4kA;xU1=K zPpkWF+h+i|b9}Eu)c3BcZBrWR{YZ7){cGl;BWLXXzJqv9&8nsK!D`R&uEFDN%}zT$ zF`bcr$Ji$Anr&Kk;k}8sI&|WL1CPeG9?!r$4FU&8jgUo37o+GB3^Z?x1SjhjK@kPg zxZ2+5lho_{^180(wr(wQxF$uSMU_IGEHtrfMmZ@SfCn`9iqOI-esE&mCpbMYH1FBS ztf^fziXy~AX&{~fc!QxyWQPbqVl0(^-6Al^*E3e=5y`QM7P{3|Wlc}Lrm7tn8jr}R zKhNX=0s+*45Xc`6+HObt7gXP0Kj6{X@_^$k_OT4}wF(95V-*taz!!T)fyV_ZlBp0; z&j_K1G{QUXCf(`Kj-xjWEG8${SI_d=z{8oH_w^+YSV1+q!Aef>P~61oMS%o)YFL9J z%aFam4hnlg`r*-+IUnTVgL)w#*TK8M3b3KFl6s5s;>GBLu70Wk``9_xL#J$I?i{+8 z(Y9%sRZ8QmP2OZ6SvW7p+=f51rhvmA1b9@}Kelwq!ZQ+Z^jI7{4y@dC%c*UAyg9*R zd~&*_y>D`A&e1&qrOQT>xfrqlLlUFNLM%yuC37&8aCH*P&^peaU7|_jI{9Zi`(KOm5hn2OI&Ie&D}7Qv5?4%q?xcw4O> zZwMX_S|3LF#)mob!<}Figgf%X?0Mlp9e80f4S%Jf(2~P(5jz;U-88is9v)e58D?$Z zF+4hH;*$n!C`zq+ZDOKbEU0SV=R*M=coQO83OoQgz^4U@fCORzuo3(OW`Pp`t^hyb z^YlC&0tbThFhYZ$;HZ_DPARLEu1C*;!m}9|#u-&hp(J~BbV6y94^GxUcx2|^#n7Sw zY@jK~e1(ykj06ld%AZsI;L%%f*Z+XPBO$+e%LylG#x1b^q<_f6H^$J+_xg=MGxJ~* ziy%{(nwbZfS_B%K`5PMhn3@L}nfMu+`kPqsw?P5G4gPz2uvcjiC3w7D@E9DL zkjB?*8zd|`Um-jbkgic&L_))h!8iJoeh}c%+VNzscJLo$tptv&+~T^9miv8Rdv{Mq zO?hTTK|)1gVntDMMNv{^VPa)bLPb&H%Poa6ElRG0_R3ZYlVlsACA1N&fMr3l>_BL} zTy_Y&E=v!cwxS@hsyL~tD7LyZ?m>I){M_5AWIMZ`>sUwq?ttyT$p*swhl-VLNcJxa z9ve*F3V1|j))Vbw?>u;_dQAu_Vz7jL7{C&)tU*e6J90Sq-UnOc6T^~J(1M%g&i}%%^+6e#w19s}!x*&613z#eg)1)+xEg?bFk1 z3{SWI!6Q7b>Q9I5Ub&3=+r+(h#8l9txft3S&dS zUO*1>i*;=%oLS!OL}3?vd&__a%sDWk$hYCZ-~j^+0#prmdXT-aPsqad7A1Hn!9ywQ z7Cic%4ztA7IC``uGZ6_9v+{|7G#QED*ib=Lckk*P57sSsfQtBU=iUBowehxQT zD6oV=i^sw{0ha?OfgMWW1Pb5*vjo5)Y*kJBlodN%L|&O-k@k zf`?MpEqJ76x9Aw95E(=ck)d@nVhh>$WEK53mFyaA$ zxCIuq-TS~o2mfG0ax@0PRI{#RR9mb6-$L2flng8>$N@}$WL%u#H(a}G3Qd)mleJ@ zC3q;oLn$i7x^ z{eRnSxrSbb4JNnRy4S!SO7M7dQ3xQmJb1tk6(H*(u%Qr53#5eG9N_90J|_~PYbo%6 zJxSme53mlmKfnnV`me%!x*7=g~MrKBft-`5In$L?biv0K?vL@NG2a!Y;BQC zmEfTSkIeuccPRgP*Wi=Uws$gCV&&j*`l|0~4ga%fzXNCNuV{17WGUt?HGN=d(fSq{ ziRtytZGCU+xt%k4ZRAHc@S++x5p^t4UAVX|L{JsPuMXf;1h6Xn!^(U^OTB|iJc5etyz?*WiBIA9 zr|=v#qR7@I&&D;+#v{kcCo7O$SY6*WxB0Rtr~$>P4c5N-=I(j!?2@FMcA2&B#$^C& zx5cCaQ{RqEzAa5?5hpYQQww4nZ+K+=zuV10$-fH~5Gt$;;a3Opsvv8JSNMgM`Gk~s z0c!^qy9E@x`W8F+6ghh5Ie6sTx#rur=GuB@JNsqvBP*Z3*whi66hfv0@Q@$hp#UB* zA;4Z1NaKLKrw3SvnFJnwi)@EoF_9((g;693(jbY!UL*l>9;DqvA>cXUp0VgfBQxt4 zKJ}uVLmXIswaFK>;cW2d=4G-FBN8L=9><& ze?B+{G_UL)OIi^qEDI4WGU|iwfyAt)U}0I1uslRq9t>NXQ|cRD z?j2g@39KCmS=$9z+qb~p2f~J%9$BVNsrzvu`>`Qf#!<#L$%a;`O!Fj$S*-r`Sn9Pn zl2Npt0kC$ICM^<2jlhs3Xo5slo3EzF!!sg@CJ9v2ID$c>vrm??pjefFdRd`+1)ec& zVM_V!E2*QGiU-dur-)RE}LghYCP}dSR{jfu%)bXi;ZS z0bl>1`?v43ViJnp@svnV6>8`SaWpa6G~UoA#mF|r5P*txilJqy!Hr}yySSu`iVdGpN5`it>pJ=I z6`_)v(1_YlNky=@GFVt0z%TdbmiVzMyhE$JLdv~@fVGQU0}7pd3+;XLZM|}Dx@QAZ zn>nSMIHZ}_rd_j6H?T@(+(==VCID*#@E{w;=rJR;^&^3`aUh=%#VCSMixEM$NHnrd zHL^)DxS3*Tm11C?9Kz3hF*u?uG~S)S@j%}06oDVQD8WMs9ve(*8y?$w=HcaHbHU*+ zFw`jT(2{!{&wfGhIIRwKwVYHBJcnl=Q}vO=RTA`FemrS=S|bP!kiN=swNW^F%w;Y1 zo@3@;ey{!I_gY_V(}_(iUi9irCR1Hqefc}=>VCnGs`23zLCP!hW>ESH8V(uB~^Dt#`&vk4!7q982eH3+GHT$4pbZjO(^(Ms_I%R!Q_5 z@f4Fds$m?-B!*xdt!EUaYZ$4cAE`}~;;0fFRSGIW3%Bf>ZrN5Y8K4@qa7#CLPrKof zMX^Zw@x0SXRc2*H*2Ki{M$M>=t=+=tI$u_a54Xsd3+!C!%_{Q@FYyR1bq0(PnC~1| z;NT53-_8eEJKNSP-P#@43Ya?E+$jT?`kHO3pGA!KF%-z#zR!QF6gj zMua9)qRkNM=!=1Bzg$YS=@L9xX9)ESg}O`u)kvf%o1`93hg1`qcV3L8NpN%t(<Hh$k8{?(YMe!u-M8wOO+n>&5;|Q{6IdbW*EVDzuQ*5@iOZ8#56ymm}tP)(iiC% z0#i$M4TO43i7qojj|r?TrCyg3jip4URNq8QFc51orNG)+Opy*l^vcd+U}r60QhhOj zDI#4H;Te3Ap^(HB;b)4}XKEgD|~nowSVAxnW`$pRdOkEQZ4WC@xe;7TjfOYZ6F zbFxd?d66Y3Jq{Y+1XX~i3UE{*jv|DXQ~?%R3Q;7swNnBwx+;)cTvUFa%oJkDLOc!H z1(tZK2-Jz7e#BBl1mg%Rw@lCQaxZq3kz>k!Rj1E(>u=pf{d70^G{!7m?A=;lyutG7 z?EHKfuMkb*qA0-Hka>Y($$T7zhouP6WQh)4lv8pqL{!E!mDIKNSvkdN5cz1T2uJ1P zX~4oFnZdydq-aujxUjUK>H*0}keb&P5nGKTaiO>?qoeXnUW0FLtF{ zc)6~r^!t+*TXs?ZdE6j4z%4V{z3=e{+!wIsI37w-iV{4OvT~W5o9pZvNXc$<_Ak~o zg2Gv>ysHAF)HO`-3N6hmx!=?GrUAN#hlfF-_u3CGffyRqa#G#*Ws8Tp?|ED(SUI8Q zeF4t`)ZrD9h0$|8a?$M)KJe64A3z`|GUPZ4yN`l<)*y<{q62?CVfByQ6u=t_$gwu? z=y@`9%|1ng$islTi6VxmK&DVtMG;|WLJXBlHWb}%@6Rc{qfHJkthnFU-UGg}(PR;p zCV;-LX;5N3gdAc#1$bk(MU#NFfvqI?mv(~; z2#5kh6QIa!8|UQy!6|=EuD-GGLEms}dL4$q2X9Bt+Cu0kiWp7h>lzAf-R>!??ZlJ# zsd;zWA3diS0eTV0tj)vG1TxHn4gpuhQiNLiA{>*y{frd=yia#AfT{m=j1d&*k`?RO z*Zl!k+#e8ly!i}kN>PG`QhpJsZ|Sl3&co@)$s9Q%*Bk)@&q&13qP;?j?{%)-_hW^_ zY5Af81UxQ6T`fKcc$~+FAHU*xQX}Xrj(u4(I3~ID)MZmZAm`A5sybWke!*dhY0 z#{$)*Ce-pT#?nDG3J#QFp_);sPG)~|)O5=p{ZD_Sf2zXR0#%5#GwACOcr?8=@Cb@5 zTZx0;3X?4dqN9_`3}JBf%a>VOqzNGbUlTI87!6ySz&A7#-|c!)Ty-B$=b%aa08ZZX zu{n4DOq4DgKp>VT#ei1>SzCeuj7Q?8WZr)Kbj;i~3PThy%_8nU8Z4=}uTA4%NgUZF zfVD+3YXeh@Wo;(HvswZFvzNI=h5qSY{ZDr@zB|SU4s_0n^L*0Xxp}|?o>F%H)hJYC zB&>qKv&_HY2o8B!7$xIPglHEF&vLuy-lT$-E5-u(2LTEP3|aoE7kzNROGsRI*lR_8 zFF38TM@b1D8(SjcYSl@RSbD-+34#HtbuDI+CL@|Hsp);P7T=Fmf`{KZT}yui`qrM?9WRV50ORq{bde@KG`F;^>&d9CYrL9nIED-vO@j(` ziebpC*wp$b1Jk~&Y!r!uqJTr#jy|b<15+6Vtz<*4x(*9Vrjzq*(;z{8c5*I__tLcT&O++PC z?e`uH3S%ma&7-tQB0PzQC$Vv4Hjc!`Q^M6r!fzq)pl#hl->Ra&br)mHE~v#L_UGUM zf82p`4-U+@+K~e51Uy{*^D$H&pf3$zZ3-7l_SqhN1U#S?kDko}9`ZFN zG7J2|R|ao<>)`Pg1%_}0ClmmwD<%AN)8ueBmYFOCxP2;J>-lbaF~j zg2x7ssJJ41;{Z3G1V`^|Ek=y0u2|*^@it~&(~r|NPB&x(Wm=)TJWs7qJvIITz$22f zbNOWcbRrbF6cxDpF#U^fjvcz}b`HmL0rdl*|( zm|J!)-qj+H1aJ^V`CPFu&Jt3_!e!%X!2_I4p&`2e#pp`DRhI`3H~*Zd#M+!!7RbtP zDkyJ#*aNxu4-Jjyl{6>k)Mpm8WEC|5E2R~;rWQ2k7B>wHjZe+ZH?%wkuOPdqwefEM z`0Q+b!`-y3>I~>q&3Oea*##|Wg)M10)m67z$7g28X6FHc(R6JBAq6u3eM8-XsYh`|=H zU6@k4Ok%hj4s1tO6go$cEDCN0K6aUA1QeQ-Erx`N0D zdtYs%hjKXW#sd$e{|;zY`Q4@VF7?3(@(=i%AS?~^im^Z;b0R&43l%Q^6*jJ+VSE|s z>wCcwWayCHjc$Z`2BuoMWMHU~Y6QufM;*t~qt9c5cONmgzqk*1@2^#-gZ~Hoi3I0< zwR|!!)Cn1Q1ROqZ^Ve^WAH3jn;DYV`E3U^>y)J0776A`6uQTXXgU1i&EI&KGi2k4d z`t1Mt|9-o0`&Vb|ZaAku85ol@@T^SdW@aZRXQmbn?f^D|9aB>?Ki@b#IWsvk3;1G@ zsONxUrlDzc!7k`1SqfOkICf@Y)%+Ku!FmGml@wYQKH3MEBur~ZE=jUF%k-C;Am+%2!>^25=-YWCs{SI<2 z-9+FaACP=rZjLsvQGR9>iTdm>dk6j zI73dp`U5N)!9yNA;A!rWHZ=LkXF>in_fMBEla~PxctxHK;6Nhq z_T|B2VN}(H4-RgC>=?Ha@K||oixNCGHh3V;MJoXhn6Bkv1J*wswp%TD$R~Jrf%`z6 z*x39)D9r`FqkG9~hSS?D^oz zZ(|ic9_oH)P=PAvom9>_p3w+6ddX$`0rC-5&t1ojk6iY+fM;FQ;=BoX>^MM=PhNZ& z$WlHY9S{2rZYD=0)Tid$PRVXg&2GuegS6rH)j^gK1=R&sg^I9qZ~b6R$5LRw>P zQPcCG2>>^D9zM${x|^JRJ2j^XoGLB1IVQPD&q)035%aBksGsj;Y*o3oMMeM5I|wJP z8pSLC50H`I_UDCPi*PB5R4X8*La`5n2iPu89Y|w1P`KhyD8uFF=jwhsD1V8yfrqPq zjwrS^C8s4dyBS{Q6}R4f&_6Ld|6*h;x40RYD=GJOa&Aj{&Yk4E#-yyq^o+*#N4A#(xkH!Sj%xUx!iNL!xB$RI69SL3nAL&D_WiWgf=6f9 zbKUFlXaX0d$I;LWS0{#}iCmz120|yl)RLNqcRHSV`DIb7|figLkE~uuS8%0oqkVPdO|K+b{)3+{ci7h8sbj%BrSXAJae7pCC zpyAHusz$TDeyralvdQ|u&+ZGk@6tcC?XS$xzqo@_`k%57QgI?CnSue@Ah5UeoCBzq$kn`6RGoWlTw{m6U7 z_v4oPSVDI-IHz)ya!CaeuB<2+g#9v`J=)tP7Y*u}taAJ36x(@4W4wEL@K7TB%nQT? z$^KWDHsF9T&t8;3gX0Q~EZfGEigtQ}M<!~=yhnOc!I-SArc!&enQokz{lru zms|US_CLPxoL)2b(R;v}1@1HTnL{^~F5JpN`<^)mT_zbxE_qo0dijf|rnJ(~Lb9T{ zH=LFqS{|(_tA@b#x-zR{a=}3tUr{_NC50>)ZqSHQK01mYlIO1tx>mO#YWX;SM+$Ek zrYre7aM}5Llu@Xh*@-iTK~nqPp4>pGhz6uVh!rfF{rHz>L0#u4a8q%sQ|2ryr#Q7s zIcrGSsDS|Zv$Ix~Y z9T6jGwimWJiBMsZ4;RoIg8SI_cE2YBXKATom4gBE8}wTt4frrgkWCc;(AMU{b2xur zC|3Tz(mA?O5O!%leryO}3_SLuTzaC`0|r@fn_XF&{UyS38C6^Rx7kyvtCqf9DQQgp zDJW0j<6I<{aA1on@Q5hR)W~i>*TmBaiU>jeV?1|&^s?eLjd;4+QFyl$nEx(d@$(ky zV<~w6yxI##N@+-$c8iX*tiZYl=nVLH}DrLZrRXQ)72Bs>2A1w=xcsS{^(J`;1p3=`Db9`J4y2iotHQ# z;S**IALHPxoPEC_@9JEM;;-l(u0(@?C*XNWVTJlr|7!I2_n<72^kf!gOsk)IkV92;CjG zQe`C!z`=Xm;C4*nGu zF|j-%SQm{H2C-413h@Skt7ZqmrIE{f{8)^?GL;_2`-Ao#`-=C&^_I& zZY=);ocxv=DsQh6F8#NU8A6j(Ke!Dipn)xp|M|RBK8kb~WG^Z4M9O?L<@0U>7jsj=ulxn$Wi&-e|*s>+*KCg&3Tu}H4+v4NG})H z$$kET7>~X( zzZS(*cw#l^LtVUCDlrANY4UU`)llvb{mr$7SHi#5M#bb7RLw+GJj?JcVz9$ob8+g! zn79^D%>VIgh)9Q(ejVNN{&k1{du(*=t<)Z9q#>H<3%}03n(BCBOLnHqe#RM2Sgfjz zN%7Md34_0`HpwY<2;rFWJ=Hi<>Z>H0{z}4)@fE)7eIjBLTEa40*){h{C={b z-eW`^wLp1ZtGi4jtn2W=7WRgJ27;F(Y}mrELNVlvdkyXp-ox8N9bpJt_G6uX##>rY z+SkM+AYoNfY0}k2DRzd^<;wu_*x1KrliD5=8`LzPg_lANDa#NfJZ{$mfXvy z+ychAZ@1%X*%WT!P}&4$iA0=t;h4fzAc$rz696PZB48-b80}fvhg);2Z?nykobxLx^DIpBs_!zPI{rj}0^sW8BpHs5L z{PXsF(cM_XgXDUakmEs43>&DRAIRrWs~x-BqTf7=6ysel9vGUD8eaA=Vn{N~_Az^| z_Tn>Ep;9k~^d>S2XZ${e+1@Mp%%%=^$$2z5dX6GHxb(KF$c} z3Ns1OI+*(}OJt0QRWD2;VONus9vC&|4y46J8*RfFqyqbA5GbN(RoUh8XKt z)zl!rmM*^TKR!AHEW3(2)6aX##~425A~4#iG@kyy@LGIUHMbw>mN5v0(Zs8 z*MNTHvE5B6ibK+7PAp}7Yi2rrT}&2KSOkjvwxzuz4!%&9esbPt^~iB$mUa?O_5nNt z;TQzqTjFA7eEvN+$yb^`Jo0Ol2E#VaXqu~AxVgRCrx$TkWQ-WrK@AjAR%+EZL0%d? zCCpZo*)^&-d`%d(k@v$`CiE)_4OUxUe>7HAo#U9418_`BFurR2;OK%ym$D}q&xkK!}h%526 z`N}Q$SI}51KEisguelWub;J%38Rcpt82sh{iqCKW8M!nqV;}v6a)Z@TQ2Ub}^SadU zSqv;%6_kky#l%HHC6|74VcoecX$gI%BSnZL)Fw@8oV7%DG#vX5&3z-W&1=xbZC^0B zLFfC%{LMWF=Cjn~yE|U>u&bup+5a%@T==En4N^jLT|LRi586Q}WwyR#l}P{#R9=g|*4MmA#dv5Fj5tAIejoDjP7V%y=F6sRjnOm&mbK|!>!e*9BUQ|J?P|}0|#Iq4hHe@Hw zA}38kA>&T7L60L-2~zcwTs020A%M%p^w~HuWr+3jY+l~l}cU&Cc!lN5J=Rx}x!~yesr|i|jzWVic z#4uB!*{+rvcGRqoSf^g;%RKAflO`Bm{*BbCvRrv0SbGU*?%7j0BJ$FRh(a#stC@Pu zYtxAh4glLV;QzV%B4&AO`Ti6iI2t~^*D~p74J6x%~ z7~d=^i-K+kCAMQ*S}iMzf^!WOKdi?H(Rh%-A|L32of^bX>1t6KMZvfeCOzJ6S(hPM zd^xHly5oM2}OY8dffVU z+nK*{1HI7eJ+iWJvW=#2h>#p!)7Vv7QJ8?q7en}TA==h{^Hx2q$~%#fokBhXF9&=V z%yMQ?-VHUF>fipy&boA`;=G6_x`?NkjQg}g3U!-towPUJe(+J9DFoh1_*+`+1m2a5 zx_Jc}?#*XH-K2;m9d)7SKfO!Hr?;njcdo;|$apKCL!qo~foegfhnwz%}`uqVv;tO}H z+cWT1W3B6Cw}n&&dJuDoC%R-F$Pywse87yI54WT>+xTEcimcP7qOUkxJYlc z)YTK`2`MPR2PDFFV`t&WhjgZ_n5Ic^D%|J!^P;Ue`jvk6E2vKs>l(gI9Gv3)xtH9pjL=2%Tt3n<*ib^$rXtVGucZ;L z7h~GxO=X}*tmol+-PZkUk;R+3th~JEhB@i|8(!ZpxV4gbd3nSy9_DN+j2^|RaGid0 zU+7?IKTh{eWs9Nvb}5T3Ul3q^yz$7aYz}$T7ES_}KLsqqDu%pkkbsaKx%+>);d~;j z12SgrvE+%SH+oF|jg9P?^$6bF1f|(Yw7X zk`Jca-REtW&d4$oK-fK;EUBI-h7|hrFX$T}YB`sf?}ZEE_H`85zH?_C;^S;v6|Cwi)wMudFS%Qz{>DXyktX-wqtbwH zzz6&9ow(K)FFozEd&aiMrVJ%>|J`tUy~usQOHwc5hL~W0>e3UYnQV32xa@`VI{yR` zQ~2${#W+B&TNBAmj474fRaKdMWpK^MZ^Nn%J;9OEU8AG&r{OFuxz&zjg?SRCGxyI@ z#_iu^6sh3k0WAr8n8rjT7DzJYli16dTg3u7JXKm5ofeaUo`-TuCQ#qZne@;<7P3T` zBV@iT^}WCqAFeHf0aKtr{p*L@4dQz3@;?IGjBfYLE`E0-hWg9nH=hBH>Ei7F{rZ38 z)I@VQC9|!bO{niwuY$Sply&p-mfJ~P+sRx!a*mN`rf6A3g}l7{VJI??CWs%GU@)L* z2~%gFi0)-COGftn^N;DIr?Q+x8yqUhSHE9U$EwwY<;-&b6%g)h2X;SPU-Va+YkZQ@ z9CFb9T3!y%7`O!F4?9tT23gLE)Krb3Cp+-o9C-G;RcS_zP!rI$h4!@;zE3iRBy?V6 z(o5h!_TMSjCk(lZiCx0mm8MHRU2QqJ`MX9<37MMQIe9s+7hk_ZyaEE8&NJSOO_5MY z;$P&xe%ZvaNIyLm)a;x0O^S)ZbjW7Mj=)eazcSJ!6~vluN+~6NIT^@U0--9!g(pJy z_gkJcW8Z_&D!%;PCk}|K-D4yn_i)Nc^B4bbgSEG}hpXQvuy-8AA`8{0RA_S_tg=`A zx7KTAU_mnLHMucMuBQtX>d#M4l6vaO%DDvvFG27`2hM^wQd|?LOM8|0dqK^r_xhpY zp5%kc)H5H$$F|M~Ge1`{AXv?7lK!(9?KIs^sZ491Uc%BeTGxP$87oJYhW18?ju<&~OEC^*iXzi`xhm6tIqP zF(CJNg>lDcpt|URyxz5p$ct7e(;EHT+ zegOd@E($S05D?4G_cP6V=?_zH>Aj0ZUR!3+Fwid@h}dA-X-2n2A1tigzgRvbpI2RU z%2%!2YI&^UH?86GoiW<9{IKO8`6?jCB=r8R(0c|!1p@M6w>H^^wlJPH6iu)0G4k*2 z5gb)^(QJb#y0jrNG-ig}UEnBPd_1#L5~Cvmts^3nJu;2GgTk{vxhFg6XGh5nhuQ!3 z@+q@5_=KMb6tELigu@O4{D!xIb$;^22vo1{d_N$9M$S=TnBlEY#>^aP#4NhZdfn~X zd1%pM!)GZb;Evd?laY;$ji|0JF*kK|+JP4jvd#^&Fg$7ZVE?Vho3*LwX(i{+0gnei zeVNh`gDu8_g8_`B5QOcW9i(T}zd?XgXA3*ae&myxD%$&1$un?d8B>wen|$c_J`|4| zi8N(8U;xQ)JWG~t6sZ}xY2OMe^_EIprsALBjIv4W%gakSsJ6Y~8<2ZBa}*J-qD%cZ zMy3p~fZYXGkS<7CJOY_)?*N;JH|wSby4HU;4NvsU4wgrqYFKUnap`(3;l!tLBk4WUH4dOKy=BjF|m*gMGL-pduauu>OhY9*=Mqbh{@?#==ItAYc zR!q*skU^K6jg5_-o}LS;5JP;V2j|1t?$FvjU8XcPiq6Vb+;@I?ImRbPsSev2w)@GJ z`x%z|DNYAzirxwWEtA}>)BMdUOG4_4Jj%bhRrQ2A>Z}MW%BV|=C{*X8(-vdWG!xVG z;?uNZ@bs~n@MPrnk>qTUT(yEj@B_M0wtNRAOa?degk6XwfbT&h-rZeAjz#r;S==l- z2Al>ObOuU1+zi#QW4?*(y!{r$?(^%9i@r*|XHLR;*kEo$Sr~Uyl&7n!u#g`veHDvT&49br=MH3RMFW> zk+OxLdxnmAsY-~#pQl1Duu}d<73IqC@-dr|l(hZBOu@bQxLk5VL2>VZ{838h*B5A| zme`i3*cKAS868C(m~DoVt<4WB)3MPbB3tHbwCVR^-G~C)m;$*HL9%-JlpM{H7^&_O zv%GG#+C07HIK4D%R50C0nzUTBWl3YP@QNhuv19;7pc&7WZ%MBSgbSCJ3pcMK$}g(+ zeRHi{TCH7JoLyMj7vVc?C4r3O(fK(J*h-U|ZOt-tn70)yk-hPvu8dibwTPoB7gSGz> z<>%KuA<2NC7gik-)Fmkq69AjSG)Z;o0y#t_W5ouNM|ns&{>2A6JD1pdxBXb?J5I=)Q>skl@vc}jz+6VhpWg(tFlHgY9dW6=wGiYxD#kH z3#p!t=4ftSM&aWr2hWEn5~cSH?nhYbyN5WVf=4}(d@cDQ=%3J}>wwFNLjh!02Rg*a z_D4Z0TS?ATA3ZKKu*ku)EZca?2<=D{#g-^3Lo-WW(B3ggj7sFz5YZwelgMM!N=KF? zPMYj~syP{sF*&Jz$%t&IZs?Dy33Cw@88JBB#i)+3TK_F&qffaCV`NxZnEt==vNDuU z2?+@y9t3!JMFN+*lnjgwd1e1*h8-r^p~LJ)KUksDjL8NA!oc!oVMh2=7 zD>gT;BSPvgk32BPYoE4Q(Ltg=e)D^!@S}oeSGmc+NoJs%xiNe6#ec4+$Pdyq#uX^Q z<*MR*Ww=@Hkhnc#Fe&^?G(8%s3dKmkGG43rY+Nu@4l%sL*;2#?gbm(IAtWR`U1|Do zQTa0k&ns0yu$!W$NQ{C8hn9`G zp?B^mtS*SDpklzy$m+2J77k-xAEetO%-1oyEqVoQj))i4d${W8{EnBKP1iCX_6ZSR zXNf{u9qnk^HCYMEzcpoa5)NDQly$u1IaigJ6{7l~h^LD`gaEOio!z2`Wr_S0V#H$S zs zi_z=DUyRzAi=IX{mEjX>bwu3uewTcEqi4F(gD`daT z<6`0nM9%aPwf;h+6JP^)pVj{1dqtU&S= z{|x+nPV5PFH-!9UOd1MTUJj)?!*C7H4`KUmBAl4p{kyLqZP`=DX4fq_US5s`>W0E4 zrKN-|bnttuE z$GPu4aV0Qf*lmVH8lfBEHm0#PVyGCLaZl5=@MUEQ)O$lBXep#etIh}lgPZXNN4rs4l6Y@t4v7Z2I$y3ne=+*Bz?1xQ6eBkQ z-z)^6DT3GpnZ<|DAnL-M%-o7U9L;ECS2G&OtIVc4SiMG#5HZ?`Ab=QtLgS4CdR#+M znMyG_@3xcWNg-1-M+jC~Q>F0b*2KWT@ZV;^K-I}yMBgU7w%q${yXR4S_}LEn*=`T@ zWEvan-Ce?Y<2?Q|e`sLN)+9tw1$?7|#EE^&{w(dG-S`Q^9W>?V&F-fb*UgCyPB@kJ zW_<{j)6E|tGPS}qy8`2?bpONdo}PMY4X_;fxj{d@Nrq%KT?@Wp2dlAnPpkMPsQ9U! zhN!jqblkM2a3meLb}OAV3SV|PcF(N^W(S! zfb}EVxC4r^1Ik#9uiTG=>v%BBw-fi9DXql>tzX!Bv)DSnFq3qzOAkF(|C?CNr?1w7 zxk<&u_UHW(M)oqZ(BO7U?8G?Q8_cVA4lSR99EGb978%-~)=F3^2aKcYZiq0v%v%KU zuB?*na0>Rm=Uyy$bmfL+#j^)_9NUmlQ4!(c!LF{#o*(Ipk3Q_DY`(i|4|Hw*4AT@c zz>T}Y0lxD;e;SGXP?|{Hc8%?Q16T7Q{Y&=cmpK2ti14Ze%+-RfYT|BzL|i7(7mYd| zTr5jY6?k3-_tCCtOVsjkEvpM`4uoow*n3!1HdTDyJ74xt$|vzp1bG94FSdIl6S3I3 zL}0ka>Pp&Zh6ypnkw*ADaN;Tqa-PVx$~Isv{>ILEz-87qWupojuJpY=CpLN6t)(%rnpGniHoRm@C z!kQ1)4?K|~<>yK(J=z=iKDZC`Ti?uYZU#W4k&ux;-n>Myp&4}AUE{txrUso*k)Kde zo>5RzQ-Y9PfUtk0{!e91pDVjwEze-~Gee`uGP}q!r9IDyU(g~7)VRlYE7GXse~e1) zGtHP^-6VS7CfooMu5l7nNoC$Y0)BjXknj2uK`s83!Gg^Hy!Lh5;1&uwo81kLw0@iJ zZvx5uR#7fQMX>H?Vspt8O`Qyv$^7!m*>-G?X^wo7S$IDiLundSbiDsXiDKsKW1iN!thY&i7Ka+q?cR;## z;}=Bk3?t(Ly1G4OWt1<^XNUWj(PN0Z8agG(W%!rqAbXd$tjz_X@Fj2fV55?`N<>xQ zIX%O^s*g$bFK;Cn^D0YQtt2~G6l#B*3uz6ar{j^_d<(O9`-SuOC2klz>yxCJJ$O#m z#3E)yP5LFHNIt-DEm>kmqe!nI$22@GF3{KA;$p+jStV;IE^8!UpvM+g2BNK@sw|<< z(b-t%<1ffEQf*b!_!Y(77!#{rb42cEVzy>yLCjc6sGtR;`-GChA8NZO+4Pcpi}eVS zV5$1&dNrmq2Ungz8FxTqwMSE~LYco@LxL^)$$Cy|HpGv<6{LEz3W0JenhDVUBE+J3 z9}4AJu}%9UE*R=@yeG7|XUG8+zhN|F=gDS=vPlQg-0th21Uxt$a*5rzyx1O&_c@FE z-uR)x(4(V5p>B7>8;P0zbl-NdVM7B0mUb|NLZg%3HQDI8mp0< z5rKT8AKR4D2^J)FW=y|*)l5RXSvy}u%7HO8q6|d-|6JF&&qa7)t9<8%kMe{9-oTE# zvRyfGLkLy&J!RG%W!8P30fZ_G_0;8j#ZjET;~w2|;Z4JJxkB*+a`L%F z$f^hJTQIWrT~c1vdJHH>59k zLX%TdhuGMA0-h!6z1F7L5WsqVt?r9CEpT5AzED6={9oV1=n0A<0u}ZzHX}X&V6{2d z(fYs)5gJqE1`aPD+uJ@wQ$U7{FH&Wk?0$}W5>g0Y`Q(>4+b{~E_Ta#enOWn8jElv>QE+0FU?}b{jras@5zlH zXPrv6kk9ZTvr)4LD#nH_QNCf4YI!81vXnsYZh+WyYAU|=uT;6&_`e0I!J4v%v!(r6 z_m#|Qv#Hrj?=|M%*42J%Y>1S+vLf-^$Md|w zoIV2ul&B}zY&TeMf3_a#YQpSl!02j%r?uzK>w^VtK6wG+^v@fX#j5gmGqZ2fnmxP4 zvHd7@&mz}wZ$4YT%MH)W-h~u#kRCbeX&Zs3z!2(K-oAZHMwY$R`uFbN<6nzWqQZcH2i~5zi13UIJyq48 zp3s4j*jKyfud{LQrC8!;UT@!GH@|Egn4?9?Z}Px`ikoLy43pV!X8UoEk*=zl&J24b z!|}tBG4Yt}FhCY;`B_*gJ*dCJnx?n)mK{pn&>K>xut5sFq_Z1C+|~7rL<;>!Ut#mm zU2F}^=nFtFz?7Olc3K@!hxOh~{vSqV=_jg4XMzF>UFWTGT+p*jX|*8SlvfP+#h;Xn ztXR2!w>yg%xTxXGL#+h%P-52P;*_M4c3u~Tmuo1n-cDt*u_fl0`bxjfYWr;9*#!V* zf=-LtdA~@&xvW}bhjJJh36~ZmH&&y*Jea}?tdFfX2@erO+%U1pkKx`oiCy=$ycf%j z+v_W`;N>uJ5rj&p_;MIn81~Nul4yKu5-7ph@W|hXAho%&Ni(ZGGii1m5Vio5k))bw zFbn13k?~ z56r!Jxs|no0cE(&luQO=2B>s_)m2rRK9e%AdM{681?ztxEczM;qq_@5Ef{@U`-2nT zBHON9-&<;+XSF~z>2A~-S|=`h*u9B`e|0f2=^_CJO3W$hX1jhSR0(y$VBw$NnH9(m8Y(83waKRmE79-{Nwzr)p>W1AUXWw(_W;^E(^oa6)RF z`4HErUBtopvg{-9hgJ~7_v8I>axaG@3A0%f7k z>}@=lI=krz*ZW~3>cN&rbV6o|f*!1FFz}n}KJ!~($pEq{)x^Yvt1Y}8Ny`Q~2q%bg zOs{!~838B}AT#?ljg^ca*CG_YF?IkenF`_WR@hw!pTzi21kMvt0W zT!?|rtZMN9vSL99T7eJ%*t~D)?r?Mkzyr_DFm_7xGcYI*rYY_xt%W!fASa>{z=eK? zB7v6|7lW3w9LB9dbt!Tpsiz_D1$s2>Kw^T3K(#y}vCU8-SZF;{R}x7@5)+^xWj$Vb zOrWiuL!ga}>F>M<_xBR2L5{ug@Jp*9ZLLYo#%3CN0bzB!0D0fUsp$cx6xrMMz15Uz zkn@`lN&&=q6mg?!JfAh(yV@HtJI`Z8>_6pxS*Ad3{{s=Nlnobd=1;fY7*0U|dZN_B zhi=-0;4AE_DF2riEHuz18|8X;&F@;QpZ0|5LP5x!zQDq@Hg$v$c^eysL86C;2d*U@ zoy<4?kYNy>HzbocOcxKiL$9Y!>(>D|OFh8veo<6Vq5-wNQVtR5 zi9z&n%HkaI7NRi@zXdndUQr0=Dbn<5$W3iX>r}`M!%uFx zzucU8r3rGBg;`i#Mf6=o1T{r`u|-(1L0GnOW65&;$-1-As{M+x)A~!`1i%?X1*oKq zYC6HgjtJ?`80%g?>(Ll*1AHE+G&cuVC)T%gmzJa!mquu~PF{8!-qeN~utLv~h={SD z8}mhiNVN#WC$KrD#?Xaz96$Yi!n|uv^YxDzQ=7wd6BomL@#|ww3BRF3e%^G7EW0Z)MSTka( zGh$dXlvs&1qA%=ZQ?gSU%dy9Gq_VZP%X@2YX0*~9(=yv=CbC&sjPZ!ZWPKV#VmeZ) z7bhPkh+|kKf3`IL?8#I0H~l3}wP;13XPm><@I5$Vz#3l6uGA@HWz}n_r|dR(+EtoO z|L}cf`8PnqufOom?y3(2cWcwnNRWn? zVALGB_I~I#fi?=EDN?6hMbdgfaA03nHF=jL#tIu1d+zE()t{iZ1~V*9Qr?jQOw?E_ zH7y=^E2vcqfrP zev9JIc;sGBKR*T=+bwvBJQCcN8VKdG#1q`eH+P5fJlrW-Ia9TBu8Nd1sTTwR?qSaH^!W`h0mASU4_Nhy@PDkU9P|=BY zGph3^W~V?6@r!!ulQ;I1;LU0pM4|?0IhOV9a{c}iLEwf8^WUwzh3^g~demIT0q66& zVQ&%iNy*8pD=RhfL|@LYvb1CwZ1nwFFDR)F3#{8*xUsUjMmddprBz2gX}JKCixL(vk#L#iUD&2% zq~F3X53*EUYp2p%Dk@n-y4)IHRB4m<`i#0P*9xq)I-O4hpZ^saTwk~4e&4b)g|dyn zFOJD?0iYn!3~Gi=?ThmBOKfax6yRJ%VL)e8!q=?-;3H4?1#J@75L;(7VJU3Llx^=|Xt9P;9S%;GGoOn%Z|3HY~g-cqpT1*2eF5 zTJhE}Te$KXkkQe(I`P_adGHxMd*q^&7;W}HYoHF;=zwv-t0LU6BGqEU!+93e?tHuj zz~Yl9%PZy>X+!Xx=kwh%FhcR%#&D|aTg>k;; zIib|(Xbj))@Z4zr*DsXW!KEbgwuHR<#V@dWdvYy;@BBYaIq-?@D%)&XWqAL#ffGj3dBL;vWqc5p^PEAKvO-HrT zF@fB#sFF_%ngRs6j|zuV%$c?JOYGuuu?qz5e|CAeuUG7w(OHR*TwaQ$adhv0Y8sNaDL zUI33=5n6_Gsy1Hl#UpCBlbOmL5k2R`-wn9ZDeJReG6Rd)LV|XVv!uxKiD>2^s-91g z1*+i1UluwI4W!>y5($j*oH<&IpQCbLwSsY`X;R%#JF<-#QGCB|8N(3rtBQ+hkM`@# zx)BQ`>TRBK<1-a?67<*9XbCj{8h~_H`9)Wz7W5DC3M4<7^}jLe|Fsv&Cq)5+uXnq# zce-(Q{p0>Ul5gD#D8l$uVM5B-G)%P6H;(D}j`{djspOw>iR}tO|B^u4S#P$}qJ!j{ zjlJW1y=&#w(u}|M6t{&YClS8SmLOTy*AGxEkYk%r-h!Vh~e&< zc1XubR6HoQk&KZl>k@Lvv6UOMU2P;ljl5cy2s0N7S&96Bs0tm<)ChV>*o z8~W*|`Gls~gf_*_det}mx1Lb?;Nk|-Cip4>PCEOZkPg%Vb$tZ|bQ3Ic>AQPWPaM@Z zFbgZo$Spz-ywO^3Ob8x+2bguhy~paoQ=m}7xEXy24){W)arIx25RpHN9I6fkQzW7%5{a=KV6}v#Ey(S=f;Y4fSme zQHjx&i7W$4I#XvG2#Hrw^KoO1QI%ZMfhA>BF;4NKQ#vTV4HS`_w#> z%S3;>b$<6Y2x>{QXB&0-<#0eoQzzIkQqsJh!rRdFpR8m!J<2YFRA?Yl2zz(8iwp<%3AL4viWH>%%$R2@l=4-(Z8@H9N`xWuo%B&fkk`GlGJ ziPtJ7R_jlU_KDK`ALWIUmX;Q{!yQ}~rJ}3mIkBL-43}rZJ=}&@qn(pNuWv7a;lGvG z0K3=}%?wc^qv9f|its#HRNc@q6r44XMg_TYk(xL|_IRE=I{l8C5EJ2mO_GL}0zS_& z6dM}M@Ilslm>qQXt+GMvawF}ai$%spU}4XDvGb(be?~QT^shJyFk>w*NC?3T;pWbN zZQ8z%pC3ZVxI_olOfs>R_a+*NHWv;Y7#u8VYx{f=FSoArE?EI-(soC&P>FFUMf^+0 z|F{tVG>}fdgvv1TJ>uUv#3Cf|W<)_+mY5__c=e7SLK79jFPv{{ok0v-rg^xU6`Mu? zrLK*_56w5Ta_`^2hntu+nGs0^ zOUxmHwii)fzdjoY@I>zORT0{s->LEV$?+;|mnd^6BG*=*l4sbD&LE<9HqEGdq0hq1Va0;b z-`V-fQZ1pic6_o-GU};Po{c?7qM0R$vHVdIY( zG^QeP!VeS2%|-dyyD7y?n{-WfW>0+T-WQ%m^&!r9Jd^$I)yK^W20Ha&nW4d>aN>@& zwRLiGGTl0;}I0ej6PmnzQ;S6az!`!*JQl5{u^MK ztjX>CKs|`{EAM;$xPUnsC3du_;9DiyPyub{5zvp%7+|>1ADphmmDk~U0;bsR1aX8$ zW_OE`gBc)140nWY?+Fe6xi)TYr{HTKv2s*~p#d9Xn)-YOpF$%0WUkcTJ!ASS`P{o& zg}ARY5W&@#qd#($rvF=VM!+2TjeZ0Yq4&SD|J2HPc- z@0-M6FrHCBu5NBtmzNRt+C74ET^A*9B8ZA`bC7`kEb>H_)`)^`4}FI40?W^dXJ@<;-Dw^)IqFWr!N+G=x{odF zw#0u0TjH>ObQCJS4P?#k*5&h!2y^@Yu_?p$qW~$y*EgTlBAH%Ps@dA#GR;-(p;Di&+_8qKa8^j8$ z(W9JFg23-tS!>c4Ec)kl!cJ+A+hK~s93hOGum8pP{|%fpI_8*nE=AR&z90GYo%c=x%11&J}3S73eRX zGeYNn@hq>4EYA!4S`}aa&9}ZOwm$b*-{iu;!IqdvP{HW{{Rk3Nh9%)Kl>b*NaP_yZ@yc^U)zX&8OvLU;FqQ<_lAPwX>Dx+cxLf`Z(sM;fHE;0ka%*L|0S}LE^4;!&nbpn@YO=7ceOh0+4nr+x4_Lpu;=|eobzqWEBBh&9X5hL49GT%;R z56DEBQ=YTn+^Q6iz+7Xi5oOQQ9WkNtlV5#ERNa@xG))xy(iHCv-##;?$JN;RJT^C3 zY}0NyvU#l4=zmWc-)m@)QwBx;FL<$(TC02J<73sV*1uB0HzGSHBrQE10|R42VzPr7 zdcJ>H)8?{LL4Q;>{Q)pAq_Zxcr@jAYgyJ)47F=p@*W*u0tdUlX(RwIB>B8ia|KrAo z!aD4@@h@x8xy5($;;_mOP|Y)_y`NP~Rv5#^&s+w#MZAh(mI3@}v^ma(Sk8};<_xy8}s_T}M0dj>Ce}j{#w%q-uVv3EQA%1FM_~2=)$h`@8ZRT^tf6)zzvx@wq|Xxo z$@>)dljHLBuUK3W8?akEFdaQTqC0m1F`kHng7Ak<_=Jo%?#CV8kxgF&Jk5868i~vjnhAAQGCZ)T@k6KaW7is* znTo6x{Cuxc@YgPEHB6~8{bD?d2QNo%0(*fSM)vX+aSO-uEfzv~H>j?I*dhz&%6?PU z5Chm$1uUeZMQ%DPszAVy5H`E#h0;wsRQ1?5(+B?YbZSal1rOfq%bTxVIJq|f^w=IniM3W=7R19w;p< z($Y7c`Sq)|vJxE`xSBRMcRoL%CiE)plmB=MG57AK7TYY;9yVX0nG@)L+riN_R^y>ZWd%_$YHLiW{KLtbx7#a}umAZx&E^zryNf8x1qp0?x zT)w*W%9nAp$%+p*{Ee&=I;RTvtB3i`;u;_--6$a|Yf$U3eRuBT+(9X=3%$|4pxA7q zc#(*j#gJLYka<$1-`0LlR}oM023(fq`Ofs5g-h+JG*N=r3tQCl>gs^w-J|TGU$P7S8r2Gtc5&RaKe3|+Ba(-y;wo|tC`KjS-Rucg23bj*nXX-$=M7+NWW%vs5<_lv8JoJSxjZp;yd`fOAuXFo%8=l`s#Q(|M!12 zOdT=Ia4_A?aMaAybayk|99=Wa=IAy|cXtod-F&4s*2?;qlIdOUr{G3>tU+DB{9wIHtC?J%(F(~e`Dybb7)GyJp z?E3(T{w4ZLv4mJV8vg!U4K_v4QW8ytA%=$O+dGYT?7ZKBE12helMEF z)-dq|pcHx=TU(wO&pb*5{vXDG+l}zp)GOfH86Tqk7&H9{fD567QS*VF=lxlY-x-qj z;|x0tu4YRr=bW)4g6SzyA3);IHMUppjN0CGMeF~h_=-Rp>gp}105W~y-95vFc3-ig zjSLneIt8=f)t+X5hJ?)y!J}XJvs_ydhax1e>>`WtAp%T!WN6xke1rN5@|KO9HL&t6 z4-Q=!`6ny0nsQqeVq)l}2i}zzZu5uc)x6f!xVRcF@#a_=bDBxw56$>^u@XwL)Y-P* zU%#T~+^E)}6tqVRBuusV8N(K}OOyWo&qim?t`23J^{9RG}vDb(6j3DiLHqA-w79P4Y ztnGKbxc6hp!bjluxc0NM?)+nV{d&ODXiGW{Me8+1jOx^P_{RQW4-m|wIz;2k_7-Yk zv2(oigwgx^NYHVJ@Xa1JWF(Ynjk2@U>J#JaI^AA*g3_}N@`(L2FvkEpuxt=;glGji0RkE2LED7sh+RTl zNgqvt4A5;n?w*}(vg-W8!*B7pS&vmU7S$l(E{D`u;kK7{Uo_~=)KS{k%~R7_y|wlL z{6Bv!YI_pAtr$Zw{;~tix#rReFxE~un8D8-W&Qjf7pF;eU&`u%4Z~ShTk`3F6kPpT>=!eb>8bA3&6?^8J{F z(`idSP_(`sZLgGN@26zZku?FRj_xvdb(NGG26fDFM%y{#cn#r?DO&k8e2AJld6EL1 zKi%io@f-(waVc{u+ACQ8kS|gtN{U>s>6^kW;$rMu<~WE!1n89r@3-* zmuo^4aB&|(%Sanx@$|)cdxS3fxW^WtzT_= zrUyIf=P&VB@bk;X{{$PM5hA3hu1&UaE|~R*Aj1BQQRq{KkJ*^jlc=gG@|)Xs4e6X5-ZXs>DfzWtImMAj+T}dM__^n zh~t0@7>P=bKNJeAn~DPCKSgMUlOF*JxOc!oen4a$HDOPub0(DRZ#h_ z8|gv)%JK<(H=d@NNRV%tKaio1f8si{dE>DlwnNK<1pI<*SX%OoF9k_=i3UUTwSL1X zEd}?#hqptp3+`%BK&<)<37md6x?S^*ymnt%pi;uo0Q->HCSdbG zpeBUUvjJosa#7F>8JG+;@XrRa(%-OaB8wwL;HbMN@*+aVglHBY#Grr&IR&fj3FVF6 z6mpydh4ZD4&DsTG&?VBs2~u^b5;bAyARGFpS>y6aZnp+!ynBl~SA}G1G>BC^os!{v zLU1JR?w3>((7HDUZ06@NDh5b$8jDe|vN-i_tGY0vFZ5HK-~@LnFZ5f#YFzE3vhbbP z?9Z%(DP*V$ZoL6xCk}N(Qi@LxWF7Jcoy^uHqO`D(``eTpo3pg_Yl4pRBp-}S5qS2dW=&$;3BHE8*03cGs++hSDuE7ay9r`ziF z!YzD_h6}#CyJH(ETYOFLh6<9tAsirH65E-5#m*lFvW)^uAR-j)+U$(cYNt_F3p49g zX%t7=*=Re7LuB-&lzq*WH9bf(iRsZJ+|0HB{iem&nGpNIzP_vd$=vySMPXmd*8`up zFCKWXM~3?!!~+Wd1Tg&ln~!1#Xa*yQ#4|ZB6fh$VGqOh+?aRt`Ouv$OCByqK{~aTz z0J{F8W86{qN3AX-?BX|Ky_Ll@evNg05X4fq!lwOeG!!DD=@3dszegLV8)pw)UsEeo z2V2R{QgTLafoDB?|q5;AE*j zFJ+{xX-X)lpR%@%zlQk&Ob;{(_A$!Do-EftiemvqwyqFmQHZv#k`Xo<=tCw+P(MRo z9p$^!rEbl&!Cw@3eMhpz){0Ebc3!qtql6GJuK1kFJQ8QieA;20@syb?p7u;6NetGX zy(<%vjI1*+U^eIi37NJtRS(w_rjs`D`YRlEd5}~ju!3<_NZ#O2Oz>XUyMBQuVm5iq zJ46?NGC=*k3v=gDSj*R|3Omo9!8Rp&PzT~uJA2`isYHOJzIF%AC)8Wh&-P-FNHy=XC9gV9U92NDEYrVPPD?g z5hO5a#ahUByda7!{|>@3KcJVr`9^0%3Xwl*<-dBdgwggZK{5K;grM%1IQDCgsF%$A z+>NG|ThPl}KqP`B+EiE@=xGLQli!l*<7<;5z)9uU(n47C4^o-R8mJptZPv5085v^|0dz z-xJYA&Lv%Q-|xQu@(A`iZSI^a&;6#^f462*{{i~hb~yk%hwZ-ejfy0!_+7$vM;oeS{c4t88QOwb`YHwYw2c-5I1z|-|q~Kv?iuz z#cnSRy%Y;A5lpPCs59Lz60rj8V3rjv!F|VZB(T;g0jqXEhhLwJh^N!47h)m*=o093 zk#4Iur^h#I?TkqwL+^aH-^_ZyLU3gZo50{jd4g!5kft|ss<;BTM^5@jAwE?=3pU6H8JEIsBHRZ`6E11B}^H&cAAf1m8av1yQ|eJjCR z=)b`sF-0R{ChlBczTwniNOu5E+bG$mfb!TV_!l8Npt*{+HL-_K}6+$xp6p4Wxv+uw|p($@ocr) zPsRD*`Scwmb{iBKABYE6U0VnxjgO6CpgATW%!F7Y2F5s-n(YKHnRkeK?T!v%KcfLu z2q5H17zBivrFE+-F~ED5waCzniD7|DPR>Dxf{XJaPKR2&O7!F4-gA>$)*nM(KW8Z9 zz+`09oir5%vlI>(iI7DvX^#NbC70G5M)m90ujreb&VQF9jLKQFbMyF0{y_bVFmF7*k)y*ny`fuN2boR6+?29P{mgi5QO@A*{XL04#zBNm3PR{1?* zvkw%VCG4IUeSkOI?lk9*jU{f>z_uOGP0^M6r#ShC=*Qf6YY=!x6ZdMA5+71w)Oxyq zi0Us7qJYdyi}O)JyK+ddpuLHsV8|mabHPtaTQXyLMq~a#eypNw6i{i^;n8**C*$A3 z&@@I|*SR<~ZwdvIZ8bh9luqzueo)L&Rx-ik!p5N-*f$QWI(Bg5TAQ1xw>$J*A>wgA zZ=%B2Vq;P~H%iI>kM3CQY{f&^Mc1ZZG5|q5-d&iSqK~RS( z;KM0#$~f(=Z~QVY(Ret`7<^uS+(+TENi8=F0=2NY{ z(tMTFl?5&6sIW#faL@@;D4VaQ4H+cctyo6m)B=I{G4kv>t4$TyWn23HRq0Ls5T@mo0Ul z94(JHkC^B&)Ssl z8k&i94jQtd$h{X>`iYM$0ji@&EPMK=@hbyI23VO2=C1m!`VU^VY8SJ%-{#s#00!l< zxv6PnL;L>r9J=y^f{{FsH20i#&r##glOD6j?kJda@T9cJ0HI60T^V~WuYah*zx}Zu zh*D_2{a**}(lrQT?+6T$f4q~#M6X+{S>BeyXg%j*C{@b>p_%*qjX> zO~X-guLX&_?~3}TTyCh>DwFjorJUf8WahYsrY)gptOI^mhEo^G!H zRp`|V7giA-17C*Q)jckq$Vmbmxd=6+|2SOlkzs_Al`igLirmC=si;@jGd*OMhZ*36 zD(MR_g^1~``6Tz$fS`Cc8%Y=Pwem~W<{9PQ_y7$hZS0bgl7sJZn;G$G*^{~L4kp*Y zqS4D3K=?2wXD|Ia4rkNW$suy=y3vsu=b0qf%r4*_6wysMN4?}Z11VpnM5 zely+J_2`2nqMCEKB$pFjG-_VjV`u%%P0NBy(~K{)M8b)!r!0roz8R^6)r`KsSh~$T zyI1zJl1WVoS1Pt4gWSpl^~4b-*U@V==J<+U2g=Ch7LzdBc%)j6V54MbMd_o8^2nl6 z^kjbB6{5h6>fNJ zyZSGYH9zrk*>}G*eXh=ZjrVHkGKyX2X?A`+pwaYde*O6@it{O#_iRsKqfQDR(L{S7 zMvf@5J#8KBGW*zoj6lNQ9H=H@2G;nX!RDenG)uL*Rf?QLMs`QVXJ!P)(IG~x(fvZA zKbk{(c&LKHGwfdf1T$>tWuz50q!M|@;JHJM@EZ#gqmxhW}Ek3L@q{q5^}#Z+Bi-dNpC zuH@x*HTvqf`^V54&xYioZ)V>k+(vF93&nD8Qcj-r-*0#76UrxV8b_Stg22@YAvbBu zewv|$X=6c))wV4eDwyfb9`0gpuC-0?zYIpi#O#)vh80a|js81Kp`7ke_hku6YYMaY zxAuvM2L2I&McFZ}>xNU-ZmHWJDCaG^E|#scVZ?T>!_TvAHM5J-jkh?C8(*}oi9^IE z^|f~rf2-8Qw-prhIg}1t%e0uAeRCszPESbA(pNW(3hrM<0!14hX0-Arp+WZ%%|?*G zzOgg0#J;VrSoOeTaU2bKIdQSZ^Q3RZ`Qrg@mF6gE0S(>W+TY4bH zViZXRxF5MY4Wvi7D@P)*8{;!9`Z^f6O>Y;72xAlC<9V$SP)V0Z=$eMUabhakTqteS z!I`icL^kYc;rv-p$N^?V?I@1avFTm8_WlkdAL4!S#&?9EnDF**=zm<|@!P4aKNw#K z1>Zk-dEA&c?zG2wBZJ6De)LHh$Nc&JQV$(i=Z-Vg7EE;Gi}ipm+kSSB+nY>kEq{?m zbQ!D0v=_U<3}2i=gff}rU+)G+#hm|a`C!%FDLu0P+Q)uii|e7tL2j-}itA{{ z%dPx~3n1Hn*k}+z&3X&Xch(UG@;oq01|P;eDP)$PZEeP6GRNJ|-f$t#=<4NNJy1I=jP_djm72Rop5fkr82jMAZriHqNkqN z!ubQ-3htDZ-5L=OP2zw)s!oZjI&5+ZitgW=gK*?J4bRGE2Ma5uSDsS4()Zz?H61od zxL*$52VvAk2WQ8pHnlQ$k7Azvk#+iUx=+0SE3y%n^s`*!uLSEnyxvV3FT?-dOu9PA zpSFA}3*_hab@01)0Jn=gezr5824vIac0|0&abcmB z!t11hHa(bxF%U(Wz2JjpdR_pWgI+#|hD-Rj=wBXnJdsd`;~PQc_oe`kOuBpH=HGZ^ z4~x&^0@@0)8pKGUus)*sfqaVj(TiUt1t_rII&|j7xU9tK#!}0ohs3?@`Y)awVX+F> z!@>nJ3#*vA;)e zFBG40_beKL((Lw0Lb1R7PI5l|@tKm6QhEF%!2Lh}Cs0wGI%)*yO=f7RPfjXV6ciNf zhDeu2K2qZ|g!a!GCs96|?y%nEFA-#P*;hEa>Pe`oPR_T-b27Xq>2T#lIHheUG0@Sm zZGRZ{O)Pzd3{vM7BvRF8L8w@8B{t`>_va~COz9&fT29aas4YDdUdc2tVdLgZZjfAc zufIZAE{M7N2dBla?0&wFtwsAaX6DQ$#@?;Nw1WQl`LbnFz3#)F1Oi%~ zLxKt3xuOg-?AQh5RKTTE>bxEtT0d$?To0l!fG~#2=v%)e+RdlxE}mo>lpLl3#hf`@ z&)(jivdo}14vTp=`gRJKf)`((;dw?q){LO1Xa5kN;dM;gSq#(KwGyy-NO~y-FdQ+( zuIdjA^*J4N4#4Bas5j(JWj`kBp5jd1(eIn#=f8X}#on!3-cA{cap~H{!G=cN+JK5Hg(aEzk}=cyy)iQ(tU%94pyLq06Yxp zKoKA%fIwp$$yqKAo5{a59lYvv@R$cxYk88k=afOPsX&oOw#$RROE2U*hS)y2dw5Q! z^^W*9YA7)+l?}1nvXt(xm+MNGPW|^x!k5qz9o(-^ig<>2U2rxSmH;T=tr z5(m?_QxyAN%+C=7Eey#(Y4pRsjc#&@i1IJIS3?7#0v3QPI1uK{S<8$Dg6*%2#I66w zGN;W??(;99iutyN^%e!uWfQJ*x0gX$HC*wvlX-*X4>`*p(xLKW@dvwHPGhsdfVU@#b5M3(L1y1yS0PYdZ@g{xSYb zPGtorx|ZZezF2alwOT&jRvUDL?2vzu7wd9fN`QvA3}c;eVO?lXH8ftWCBexuz*6w1 z0SoVj<$b!3mG%4tTldz%?Q}y!!y<-i_=QDPuF^f}f=7cM_xJ-RAOHa*gou>n9Fl`& zJ=dSYu0LC_vw3iqh^B3fxo6({D3S$AOJ1a<%@EHHvIH0^nx!cc&d*9$7MsA&8>D4r zBTQkpQ?Eeg1Wx9rPQFuSiYA)6sF3}P? z+8TQSIE}3~lB`L(tB<>VeT+jly4oStA(`WbCSW9-9K2d-kOp|#LLApi6xJe?2pe?G z6P59A$h|c`mL|l&cRQI#5CPVFs)=Flh>}v<{Rd4^qGP6AZGK+_^!k#_1ZF*MMLvct zoB(9@NqWE3%Ao#FOC?DQKkpDq*3zDpowPeT7k-D``fkGj2Q6dADUD@CKuY6WKz9QO zLek7|%KRE%1`RKBeh_Dr$p2yDJ**Ku=IqE4IQ%JdHjQmJXMFD~%_%KZPJofK@Lkl_ zxz#nUJNmD+wYA#9vDy<2-4?iM#D7ynuFW1{=Nz3?%Ic8p!`9u2|yZ=yApTRzyB5t%{@kHxT5y9I`{*Ue-zKm&_AR<*N^^nTk&qX;uc7EBpe_^BG)~yHXOyu1t5+n{QJw8hBP_KLWAoQHk&W#0o zmxRY(I0{1(iMw|QIj^aq(i%RwzW`mIU_t>)a2mFh<(DK=WM&e8ifF}!ikRq|nE3NP z@Yh)+!K*bRKT=*=HTM;JygujWQ3_j+RWlu19H)y%;7Q-a9~Pp*{#{)6v?N4wt-Zeb zUkhh73_h`6V3<&*i+g(#wW_9%?(@Cxk!cJJVC1$`IAi}dY3S$@5)%0M_|)6_8ABYweWal?m%R zh=ig}v<5?LuEeVaJTscqm3Qc1ASdc99o7%;GWqi9@hN3nrSpTxv;?mMl{zk`8!o2; zyAwGj75S={OnF^za!VrR@rE zQJHO2gLjm%e=gUp-rW=T2!XAo->ChHE9mLkYJUY2OdcAt?Y5&UCKsL(^ssO|WZ@zoF=`;{Cb%xGQ?*ZT$Xy zxH{hK*x-qNh>U^i3q6Ps#}@0d^HScPw?)6@tFth>jOS9E)>2?u;?J_Ti@^FWRFtQu zr$LL0sVTzobfP;C_mXGF*s0+6$zXtIQjyG2q$vuT1AW7FCJX7mJbv#k)0-w)MFP@! z>lbnrWZHExb_`~lW2r7vo~DzM7u7W2H&SEQHK3pCt88NaouCR)0a zRG(=OQ)^okZyS+&u~e2sULlKHA+&E)P5kZ0!l7Zkap?^1G7=tt^Ff8nq`}oA(dd5+ zOV+=gOTWhyf5$&lG)WF89UVFIX@+3d#-87(z|`JMl`lrSF>_S%LYwUVwc63&zGd*X zWo-HSIsIUnWkp@+VN1w`IkhS!90{_Z+UKM0MG2wSP}!e`U!bFhC(l%N!bz>QLmlh5 zicv_I1}oSHOK2J5v9{!TzuljNgs0ezc1GT|Jy0jo%2A-fVyaw~#m#(2P0X)?G`}3} zB@w>_jJ?L~j_`>i#1y4~OBR9S@V-9QD{-SFu9GKx{oLr`FX`OszlgS#|&VUXjo zDPb&Sl>%aBW(JJnNKiI5Hs|%!ks7WyO!h5eS7Zzp_sD3VAY8yS@AGvB2{V|aDr_>R zi-+%PkaE>O_7WV9Y}z1Y4Rp$Hfi?$kYh9V+pfOB$)UWfWT1zRgsXu+D<$j-IYUTc_oWtudlPm{=Dkg8W!^EM3OKMYN+Tn!=(SvunqGmzEkK%*n{xkM#F! zRmGgL{TJ0F|DMlDtuG&PmZZU!*jq6gDZ5bm3-k}gOh|u46(mh{M6+}kc!?U$&^Dx( zzDgeL&aJ7rnA*EBc0eE|l#t*X`SIKN>2FTr;@`<5Trg)HzNq&Ww=g)hV8Xn;i9)=bc(a3LX;4~{aoxQ0}OkMI%e4Um$Kbkfhefpe* zPaLxD#ZBg3J~!&T&*rZ5N%7UfRz_t1Qtm-c&J!Nmg#&Z3sf7hvm$_#WZ}HGy6;!M@ zpB4B%nm9WH_MBXIya{TsJt<^+lrUQoHE9D#?I6=Yi+)Wk6o8;LuOoXI&||KLGG8UM zrl57m_Gxw%Xz=&U7?{mZ@n8qO-K?Sf-=Xt2A2~8~(~6XniHNY%43?Ty@{cC(7ajFj zd+K>sB=vVVX$W-a%HPWkAFeZ1G;^4HDNf$~`eTbAZoO)>%!~gn#w1dnQ&gMly5Lzm zy;-X#fC1ay-p20lHKsx!CYAB3z5F}NDc(0HF z?tdw?pEbI6Hp^_^NB%Srx%gvyk!y!-)&Q86q%#+MLdye*U7#;NwyMd;`W-8dNF|(v zXb};x((aIc1q3 z!{B+BXT|dj=?z=YA>p?34Wq_LG{M+0ks-#53Xg9{Nv%&SM4I`$s-S#vpohdQRx|xW zM?r4EaN@EJu`fOAtleRm>%M&bSITQl5eCVlpL45kg5cE0oqNnjsQs&*K4pQT0d3i% z!98_Q_y#UjeJP1+vIp@e9DL~hifbDyOylXgknlz$ z9up8%=o{mn8S4Konf5X|8ls#>^4aEjM_9X;xffK1(MozLZL(j}=nA>e3!T$9pXVoY z8WJ?SOJAId=H29P|8yVaF`LhIn@IUDj5|MUFfnZKXh1bZRne~lhvQZuq~C_QvMNUH z!_50~vJEPgpQE#cM1~&M9Uvr_8;_XE`0)L%1>bwb2aesLIgyIpFTQmYUYLDp|>>sr#*MiJD%y-j!hyH_~D3^nY8ABx~adJSK|&`>Ss zY9Kxmf@bFs?Q>!=p_B*f(*WjfiLrb@xffaPOs1z)WmH^65Yv z+zb15Hq0!_-FS`{{h5|hbM#5K*Ve-MD^<1^4$q;;cPx3^#U6?tqITMm-P72@px#7{ zu9y3o0pdw)uWcu>saES+dg!gF(v_e*s$MEPMpx+PXFJ67$Vk!qY+dd?-RizYdv;Ux zemBH`BGV{pnhrXj`0KCU0j}PXu0p+$#m)3*F@Mho!}9Wm?)nmEVt%AH(??Lq(GVw` z3+dn(Tm#6_#W~ZMt^Zz|rjacz2_yz4!(UxmP*hrO+chQ%vO9N%u(Y%F(g5rZ$kBbAH z6dZd~$&HUr#5}9I3NxFLc~3-g7|2E4hUA&00{{GUAa&AZj?5pjcro#(ZUQAe+GZ>D zsp251+ZB6<0j+vs{r(mck{#8T7TEWuIA5f(YNl^hgq}9}V^%PH1Hm<-$m>Xi zz~qwS{5fx0{p`@R_n&im0@qR5*F8YZ@c1b!Y)D$AnT;+HgQHE^ii4G1FvcAKc z_)ns|>B^9%;om=vuy0A3@#oA#4o?>i!@KbF95Ql9fO`o67c^U!U46ECAm(<^N~ZI5zM)v&Hqa4Zpgfvdji8NJhw)g*EJCVNq$381eRx z67KZemKQSOtz{K$62|v$q08`w2q1Wl)_N54H=N*W+L{pnOV(yh%B)AaMdH*C;nj}4 zZXAoO8vIo^`m1iZCq$-70fQ8fCLR!4!V7=v#`N5Q00%kyEfV#An{@0!Y9$>`Qm^mlFh z=9$w$++gVkW~D_CF6 z5_|6E3!tD3D%)+N!#EwA-!A7f(#_bWF=i%Ty@Kal@c|wAxkv>j)Xd<{%Pxeu@aE!#%!sq`2Gc=@KO?1?1Kg7FpawK(Mp(&>ej}7Op+QPUr8igKBT_ zRDODQVCX*4c^ok#(K`sQfomA|zSb9UB6gW-JL9maklv;D^6p5itnZ7GN|Tf7f>8hyNO%B zo>LbHcDjvC4YF4zP1tP2cprZU%oqH1Uqn5pQ)yj`zw7>~HvFCuFv0+*A=tzlbGO(G z3~xbyg#_l(#zuloevsN$5uVqtHx?Annzj)nL~Uf_)6_yt2}QY*Nnf}MP6<5Ns ze%0*BY2SbBqAjHLk^fnrCjLe&NtnK@58#QaiT@D?|E`wpddGK1+A{D_Dh3{&g*dMB zT>{~OK+B?@ZvLBRwsi&np2uMRprUv8RUZD{hM5iJVq?mFtBR;ysV%8!I!7Wmm)9{e z11PQV$~GNcUBf#Ko5n7w>jW1i{vmmBlbv@IsaiuI=v!T3Y(fZwHOZX%)Hu7I_=U$T zEC^0u7E5fKs+sy^;<(#M9e`8kpS4fsCegK3R1{xgYOg3M1Jzj+*(;CRvYjYPs=aA* zDngS&d|=%Aua7+$RAW&Z_o!^ z6vQ59ETcO8+3vcnZJ}L#kDEkiTWib>n}8^P~zi*QS()V?sXn7k0FsQ6?GP zqy_cQY+G>WQbsYE!0) z3aFb_pmldZKX97}(s93=P@Vr@2Y?Y9gj6A39m$AcLOzz)m}d~`4LOywy-+}=x~!$D zzho%vc7%p+=Q?j2{J30D+@m`44juOjEBmcehzvw3u(J)>IF!B%l41`eZurMC*Pq+@ zi$^#HZ_LHxiZmg3$`Bd0OCs-R%INR+0~NwE#d~>q`JG%rSYvIWH|G*R7~{}QFitTA z&EcK(*lF4IZ?U1rze7ODGZwdWhWdpF@rsCKWoXgnzk!}tyg2lI4M0eJ>B9?S|Zr zqW0fR47AI*7?OucWSbJpb5W6}D*PNehY<^3jp}%scB!A+TxHFJTHq1Au?{PeXLa=Sg%22`Lsam&KA%}-|Wi_pa}bi2>}Z{4uV{w3vPv>jFzu?@X-^RaUL_Jvk`-%(7c@$|v4m9#}* zRKN<=EBb@W><0puGfpL&&YQ?f-z-_=?Vy&}K2(M@$wJgQBtI16>cXF){j9IS6U{S9 zVgq-`B61l-+HoJA?5oPk_M^SYfmnHCXrSnIlIo8OL)j;)QB zrIV*76&lF*tjO!-+EnrcDI1U5hMo<&;QKvw37SV7M-4^$l#jekt>FQg5^Q(B+69CH z$B$}K=EL-+1Te-)9YoMrewa&A{H3_$V>X_D2Kh$o8C+Fie;XYHbb6Rzrf3WlkUa(P zug8#*mDMSvHr?#&2@XW|N-El@FRr9o?a*eE)z*$Wh#YpWB9ppHkZC-$}U1RTfT(;c@QTa<`opF`6D& z;cpgDwap)zzPuKH?P@=E-Lb?4)O-d>$u=D_9z zes;s#$5-==G>|Q53|3+iNxY+0or2ciuQA1a5iBH#DyQ~5I zckQH@w~-jf2(6O);#8rlVAp<7h}3}*PQ64+(4g*b)0#e0Ux(-`rY#3^Moa5%iNix* zKU8(|O;ir@8O`cQwr!Fs{_fEFwxBToDW6AxTT0tKw%U@Jl+NL(+o5Q8r% zo%ilpeZf6GWkWpODbVew=jYM(E@jmfUEh3@S0!sb`k~axS%hX>t-sDza<|s?;2rlN zP)e1QG0}lBvd2=nTk27tU4oK;ERl>DfF{qc2B{QJ{BYO}lr!5kbOdjQjh}>>E47Ri zZ!Vh^z83ZUo!kRCy$sH=PxJ|HmO3fTdj5PqobO~VIa%RE=;-J%vzOzyx(NQ|2)Cwy zeS#&7wb)gKq6>?7`i16(aBf+}I0N4l{!uc-+Bo0^ATC+a*gyfDqv3Y70IVfSB z%v2h?Ujpsa*r-H;Fvv^YwQ1k@2%nsWV0fkJ9nX&;zf(p8T?bPJ^$!inOZ{i!>LV@t zNeQ>Ov)a-*1p+2hpoUGomabQ=UJM9+T^&hJPfW=jNxXUSENI!&_44sH>BxG$2z48J zMr7l-jdXvL3rL{_R)FC#2bCdLj=td!4P6y+1=?_<2kq@RkDF|_d4S6zLs3;n=;M75 z#uvi9qM>u1DPeCq}V1AcT&iurs`B`Y7Z=pKyYe*p1!ZebZFB+Ijgq=b(^|#@t$gf_ckeE8J z=zsJ{NlAj2*Ri>qm>TbR87m=T)!9ii1eD35pVM^=^!T{&MBN4t)7_NUUOwHo!}6i; zfjC|{A@Z{>_h^=`=In0jlyvlElMjC`?b$PNb)0cnNgmB{vy@nos6Z)nW4fXVta2IT zz%?Hcilm`z;VZWpFyR^~(s~Ia>wC-YEmE#>*>R#s7T&0i892h$?dUI3yPr_8r@#=| z6Q+#NF)(-|#=-C$%lrb5Ra;8bTgud$8zq8d_em`;oUYJM{%z@gxj#AM`H@aVriW=r z5(eJ@zr7iNA7s5;RFvyyYs)@b_jd?mk^pz}Fl$*t*I#zjh{S>gyt+(d-8-RP(A>~C zhR8RpKe-@ID2|tU;aj~JQHCNK3OKj$$iV0sSIwCI@M-K{Mpx&&SFr&p4CUZ6VuRUP zk>`>Sj3K2c!uh}6RKUqf`1r^eLN;@^Fm=88ksxYQ5xsH3LrkI!zeVv;=Tdb0Ga%OY z=h`gfWWr*%Uv|&>-|$_wk&q^Xw#*d~@C`!MDP^lRhIVu+xy|42kc{uD z?<_W2#i?;A_rBDDg+F%TAAKc#>ll?~P?tW8=El*OJt-2DS=3(Z%O%p7AUrn0S_J(5 z{8C9q>w2VXB<09&$5>{D z#-CNCbj-j(F~@PA%@y`)|GvjSgQTUU0i*6{;J_s?t*t~XL@)UcAbWhj6YnwnJG!%! zZ<7;_4f*V2Gvd+;>?kdhhKWzEtrT0vu@@)dxNBd;<{V_$(eiU&8`0yIC-h)~F;vje z`|XY%rd`tr|Bs}rV2G;g*7VRFBB_8#3rG(o(kioecW8w{`ma+&c>PiL;Ew?2PyA!;mM&h?tNko{tZB}|I#W0O z0)MmO-wP>_&W48f9)^R6wX`Oc&6JMO=}-A?v%=*~RV7h~T&!BOEhl^P7<$!;AG(c# zZ}Xl4XT{$Tsuj2SDR<3q5r^~|xjnJHDBVEngRQNt!3XG8v}g4ceBzSqt|eMfhm*8E zbd1EVF?q>7hp**KjpTpG2qmCNcYk`>49e<6>JJWtT>E8X6(VC!sJ=M*CpYJb#p<_^ zDh`v=f+4aB1n9YsH-v`<2EGKtT+3ub)Esw!y+K|;d2Hu@uK>k^_D*fOUpy3%-o+3v z40Xn#Csabvuzs>43dVk|xTNDGqgl)q2!6|*QHm|@3r)_!Pc)k5IW~Rz$OTOMh+sLd zK56Oc1!oxJSJD8rm|Ijt1oblMelCFQIO%5hpOx|~7lP>p%J|Yh5Ob`5I+)M%mXas-1Bn`)MCqf2Rr2EeAOKK;kIv3FPW|W5i+TwT| ziTv3q_T&%Nw|Q7RU90?&aWux(EAJj?C15PcYdj)m&{ zVD8=^EGm|F)8O96ek{O3mXM0%ey7?;y?i(WP^x5Y|k_xq6E`}?kc3~JjwDc>=OeR%Z- zVWJqac4nB7dA@#+@$YY`XWpEKB}ZJuDc)-4e+~My>blvkTUeioyj)0H#)K7AL{%Xo zs$S%Onp%DTYS=lpKtP~CK)gV_TiYo6$!4_gltyHGV$aY8TG=Y{;e z1!sTiy?mRBieU?5d>BVbDJdzJi57OFWs7`4REO6qOE^J23S}>PDHK=8wi6!RRUX|K z&^Pq+J{GvqGAbNPg~H*@%i)~{>>vN&g3%&~v2o`3L`O1sR%{b}-)4n_zE%T`FfzNT z3G<%1k>kUPbgm>be+Z<30my#d+xsz-dPVvDt*z{=b(GGQtnQ|~4%K_TZ3Z=)1~6_b zg>I;4e|*Wy?*bQ)#426Ayu6d$N7Lh3K+v;~3GFNW7X-A;{;|(dz|7X#wR!qDq+lsn zhs<%z0^PCH6k>H9b*58Qp8@tO`*bU|Gj$*zkr>^*Jg`n)!1kwV{wGoWAbu8y)8_11 z&42DT=(iVdwdf7NKVH$RtMBmeJba;Jcd4*G4bi&%*U4KK8trD>}bb_qD)93 z>V)6ef(pic@W7@nynK8wiLud22{k~CkFk`WDsiA1y(N#X76rLgrh==f3+-E(5~&M8 z^?r|#ThvP|kS=;dDIroz5+yq=GBq#G*Z!;7hY~%N5aoz8t*B5w0FBE@8Mu24+4~ zKtDzSU?$YPa(in3dcg~#zNvj+RMCk4D+&{`Z@i$HHMvMT4yt9T?hvT%;Bw68@`E$^ zm5|vFY3L1o^x0QX=WJrFXlU~BWFYcbImQ_Fwz=tekv%jTNVH)5VLU}|Zigy;XNy|Z zaUb;>k)F=Y?vkC8Me|}(Jiya!<*Mlw1yqaMgXuoxr1^-w*Oc<=c2_Ukx?9 zSI$I)nK(Vs+7Ch^Hymai7Ny+9uV7Bli34;e&hdm$+Gnz~MP94V7*O%dd0cwE5}&ix zvcXONa-vS7`9$adNZOtD$-i3vd7}T2BpmUXwvA)`sgr&JyGgN%+gaLkAa@Gk4eH)g z!C?-J{qwt}X#x@IN1JbYZ9 zx79Iefy4ni>{8mVvYFU^H7aqUe2()0w}Z>^#w?jOgf)<%biSzXQM;oGX<1N+JUE)o zzX^S<#t@r2-S@>Zawav>#>Ak2KLXh4YcZ}Rk{PsyZx{9~O6st15FtI<9%#PFu&3;R zB7A<{fgwWpXZy3J^Qh880h;AKv=2E>Gft?B4e4s7ubhVxUqD9mufDe*UOh9pyH)5r zPfq%Dc!jlOR5wChYVxK&=^Qc}15Y73o{HBc1?Kj++Fjku6-_bQWUqwUFLaHSnxAVf>(yd?hh-K?hNF2@eEiH_9c+m>tEt1S7b>G zd)3&O`+;dERdFqBpQ4ve##UC;-+}BEThQAMgm72Msgl}UIRo+p! zGu(<=2URAkD==>FR)Y)MBe(6@7P$_Aqx4U6_v224Og<8!MoMMwH`{GIF&N6Pm>s?< z?(|e#^|;0BUmi+%V#}WBH|yLmGVSqK!1)rY2cveFo)flfq#cZU)O;a(TK*yt`J{V z?`<@#Xs&u_U#2{=LACJ-o+Rx?A6ACeqS{c1toKmfS&ax>@$Gy$D?E1q#%N;o&%%1^ z*PtK6LG>&@N%jm33co2!$(j$}uMIqg_3lXBE}i>sT<}UVy{GBl0NU4ir5D78Vci~| zC-(NTK&5-4(Q?nohUSy{mMU_SQ|teZ#l-iebGmiRA>r}aVSelh)HxaunSqC9uTGap z>;fZh20FdJq$1|lp8&{A;0+GtP+LO6dKG|UI*}rt3w7$r#=W;LLqfQhF~Cy1)-53~ zCM|RY4!e#+PHk~$Ar!RWODb?aEIL-_bPtpMG}QL9sd`ac6QcV)LSjUmbwC7+21q_j1+S=M~w^JnFoU)<8XjWcd|E4&`p{GYEBCGO$*;udcT>YM94StL> zyT42jqDXo2hon9PnHb-0-yTLSV-n4!!1!!`E&SYR!iWftllM|l332Kf3dFkuH0#2K$9Eh*{;mH&w-e+GF3Hi|3gq{a4@Q;Wxh4=LxgBceF4n&$@F+0tH1~ zFH5Tb^())0uMPDVk@8etUIavhFqUGH8jk__*Xt*rd9j>GW$xF}P+xEugPsND+%DM7X3-dI2s`(d_CJd2_ z19$%Ra&AKZd)q9RmzQ?!VmyIMv7iEpM}A;7M{mD2M1z4m&Ot5z;XB} z^TRU)R2C-ECfow2rPIbKRf{c2#H*0{O9zh+VM@CcM2Eu-O>ZYXpItR=h;dM2kIzq}2J=zQRb_SZ z!_%RgVVFDa17u(%S_wT;fs&ji3f(4WYlgrdfGp%}I3f_?M*kbpt9_7`eg7WiQc7`+J0SR> zDsnIt>3;ZmXB1fML{B$t`H6Ewr=S140Q6zQOf%f5@*USJ-@iZA9O}XEZHYvVHxX8W zehTPfj}QZXZ?7brMWR&1Bu+pV8jVQW$j}G}JG;U2`R;;L;fAn-Fc3KCGfh<*n1WI} zom?9S=%7npvXtSz0NE39%Eef1b5Y20HKIXOVUWIZra=lZ(L_4U%2D`i>LnodBL^SWQH)O&udHSvnd700Z(=iz(B zN$&xZPNku-9z^_)DH&}3`BS7;d~L+?e}EnEg|6e*5nQFErTfCJ)_fR5O>Uf(*)18` zQ}rUy_dilZZ{CaD$=Q($bsKYGg9nWIa-~ml5hwHSXEU}1pZ+yfiejDl;M2o}80bx} zfRy+=YUUb5VTlDfVV$!?4#dya6qw=btXfcJiN^95#un1mr8n`-)6r& zK%z}T_aT{FJB3^~w1kPXnLIQag_HilB|`C*U_(q)@@#s}ymRKoq!1PiXW^}9K&Eug zTVBujSgwzk1B7wqoTbjA18f9@%GA$j>7M`i2|m4(P6xig#`Sr`=TJorE9Di5M@oPK z8@b&g2)Nh_v7?)w^=8zFRro3Qf>6UjkV}FO&VyBx0b}GZIQ{cKkNJ~TM4ZK-c6XkF zP{F1$+Y_ptGEcwSnyR&8)h(*2EGh+lx4fC+Ry_DjB02AX3Jo}WyYaBGc10E=>0mhy z(rk*I<>I#YYfIC|ZnqR_W6)!KwH;wsEG~>hwXwCuf`b6wj~lIayQkN9;*xG3Aob|{ zbMow2ovEKhvS+}D>beeJBV<(~ZJ`$2lfh~zfiL}IhQdpj`ba@RLIPTh>hO@myWJQz zz(-in$Jw(4GYnM1(Ul@B-q2GIjnMu;?FnaLlb+V{RDPX}-I(j|cmnWPUtTq<@{hh; z8E5;GP*6b|!x#@M!OF`!5>KZ$!ha&`PZM>PxL+glOe)R>t@8q|l z4%y(?Wg>#hP4GW9#t>K-=|1-!$c+V?=9}SaAAWjA%Tch78!dodvGE5##PKyVCm}t6 zrr}qL{relZTe5kS|F2;d*Re|5dy<%Un^mlQ%SQQ&a{Ujxyv*Enjkw-fx&-b;k8-=x zaRCrORLP!q0Ek0+$IyC8BOnq|`H{wH(~b7+XiL*SSr;nsSI#e}P+{3rnd79lvEd^{ z1j}@3Q+2CxH@JI3h4?ZA(HnF3sl$kFmMQ|TwYOXMjNZ5*y~ktBzFu@9xBXuV(Nz-1 z338FV;w{J7qOpun=3Daja~p@9z35^In2Hd6oryDKQCPp4GR=&!%>$b3>zw?7^M({R z9>t|UNNJYI{%00^86gV(cMh5-6cp3qqjS>cTLR}{YB=H`*r*L~Gd|gy+?^pDZwn-U zM4*hS`9DKgG5tX{k=~Ae3<1eAe<@d|0KvpTL|F+nlg-q|K2vR$rT)LwP=5JLANtb5 z2q*w4R7^@Hyy}lEf9~x^RiTCNzVnt`VlLmqKM;$FmA@gRzayfTV&~vc&jWMZlvfNi zB>q|vQOcbfe_N}-?z{y8_b~KkUX$N59$mc+ff^zJmm&vQ$+xAyUnbe_(@6;U<6fq# zKaALYy>%v}caBbID(VW_Le34{uPFsTF<;X@2gC|o`d~aEXuQUs zw+uTra#YgC3dd~N4I}f^(C;^u{;5AObcTj`c(|*QJ~0V>dp$@&s%unM zf_*m90r*$YetdbZ`pbT8YiHrl3LQ0F31(&tP0%*~FT1kpAH^kQ2ceLij5u8sKvrvf zIOpS-c!(3;J>{}&D-3N#Lxv`hj*@}LN^l{@SRTyu7_)CJzDt_)d9|c4Wwuga|Zg2f~d3nc=taaLJ^dubo5Bwcg`= zmoKYvycz!;6k|n_x+yhh3m5u7#!3{FSlF3|g!fut5WV$7>&|gOqo1sa12P#(_lS06aHDVap5WY|i@DYcUlJI1$?etYudjLd+LP_MdyLZ^@4r92`bkTIk8) zN<|~X!!AKz@ChgRJskhV(@EqJ(LrMzBMbU=&8bxU0SJWX{^u4$h_kD(m^_`GvqC;S|(yze=@^3 z;MLV(D>!$A^cs{@R5djO-Ix5i5IcN~6f4;Flo#*kZI*4C{ zN&KyDM3mtcWh$y|JnvSXon!_*we7d0f51F(XgaL3u(|&6Q}T&U@}8^UBQZEE&o)Zm zI?~XVF5q~FIdVeIm8Y$bX2Y~Qap7B9|8zA8v`6kwTuh9xurQ-c@6OIn>Qohn`Nzgi z^r8rvoL4(479n23jwphme^a+x@*t^|Y1IJex!(%Z|cr?UHRXm5>x*(4zJh>F4*WBB=mwEQ?cXeuVPRq=T@kjwQr zX29h(4(@F*8B_0>TCEdXp$xJ0ZTO{%E0wsAsEK|>8z*Hc<>yJ9EcnnY;6v0aU&p zI566YgtjxWXg_)C%ecW{*|vj;(-nIa(Cl|V>zPh=`^9JB;(E#G;1B%O8x-Ubk=)>M zL3P4mWzZCfB7Va#An+gmkRdGix~cXWs~HWiCYYKII%fK%hC^`;8YZvm+x8i-+VU0o zMkty?`1lX4QICiXYTjZ+?nf?`2=}SJ3^s_wQiMn?*nQwY?(Noi+my5UFAgji!dt5c z41;0l$}N^B!l&WXV6($?b6QHGb8j+vLVM1x>R#P(WsJ8Y9x>UE^+#~2sE^s?oo zS@&A}3$&A!=wPBOJkIhg%j(Q%4cBml4aB%TfzVvrh<_V*K{I#5%^m#aPt0}(VCD## zStChH_xKmqcR=HFpt3a4g*VAG^Y(K(?R)I1A#ggtqj|l{-1Gs9nR4szV}CpE9hFjt zqmlRJp>6Rd4*lFb2ht48&(8$+*GZap@F4-CICs7-Bo;Jp^p?Izcg{9f8LiSE99u*9 z)t}-ggBatsXV#i-B7aiX4?Eg8xSK}^c2u9AQW8PiB~DV7Bxq=nq2EeQy6L4fre<7J zy%7j>DuDg#avb7jB-ObG$4=6+gmEv5{gR)19f`I0YK82})5(y54uOdg4DNR1i*~G0 zucTX}e3e+~j?L5dgWC1bEXKBumdwX#=LgzxOuw6)I~a~c%~AH32bfcjo_NKxGQl-L zk^-gD7H{1!=-FOia;LUSTo(Mah^U3XL!oCwL~L}1VfXG!O`bE>#D}BPPdE7nmW#eU z_2qPiAJCk+!3dND^{fy5Aclm1`SW*Z)175Gt*56aJ{J0OQTU5Wk#}0})Uljd(Zs0u zTu8ajB*#8JL!j@GehMHRqfHp5qcAlE_O2!Aspvdes)2J}Nd^E>zeiYdNxwqPJBy2p z?{C^HDmqrN^aT=6%)O0ZZD#m^9)81Wr`1T_k!;yni^9I57zCU|Qut+>2lnOjHDnc+ z?~MUhBNFLujzI5UTl)s|{7Fe;!;{s&ww-Guz_pR$t+{d%x(%&9@{i?}UtL#Hz>wvs zDgN~{u?iG$((mq<`5Ft%0Q@HyBJOH05A+W9q6g2I{Cqb%c-MItREL+GUA6FWb(_4T z-^&=VvNWP-fX1dY(2Tk}?JTnGOk-@KIy4PK6mO+bV5dW^sY<;CBmP4th5B>mRYAOp zl7dTxOUB8KRPzoZorN7awA7@)#STah#)%$nECw#tDEBC=JmzG*OpJ&y(ChF{tHPw& z%JkppUMg@gIVw<@w5ND|c3~A6KgeGp(q@DBfFYwpFsvHQHCJ>B~``u)C# zx{z4d!2N`WrLAnB(Gz0|d&S8qAI-aVkFr zX?Ov91Fti;8$cpMufne}dx4u1Q0B9;vdYWLQG<*nxr+S$D&2(@m#V2Gsh+0k?Z?-N zuZWeGGCGld9{+fu+30N^n$$W7t3D)h)&fpEi;C1}h=W;7OO6hqaKjHXrA9aUrrH+C z{HD#pqN3pL%LOUwDI$Nv%4DTFywBk%-q$;XKoJwir*jz zW(<6oo<0Ch&}gBI@Zj@R5ANT0()VFUEr1kDO+^Je|J(HR^uK@qfM?|4;W@^7P?(e5 z{+9NrbHp>c(D<)MpIR@jTAsS*U@&XA-zay z0DeD(zMl==&lW$(5g#t!-=xq9VSoKgUw^UpZjem!_jQLNV0YWclP!abm;ZP5q86IZT#tN* zXs!Lo(rOui^?M-^zWS!BOmvDfN=D~9Ei7gWsU zD>RYm4K^uQjO#Da8Wk-SGbbgUm+9CMdCVaTk2r~2{;gg>*~U9@f_3`1Tk)n>X6?SetIGa3Sw>tM&)Ay=f^{{H zo#HplDAjRKJXH8mi*9P&?i6dqcerb}<&wCqwI%279SFRdZu*4Qr`7_nqn_|Wx@Tr| zIXzU=)Lh?sWA3eoa?*Uv#te$grLSZK4p{{Sv$-TB+~@CwFujv&VHy4D^=!j%Ge~a! zA;=HMi@T0MrPSr%fSUekw<4ulb4ZniYGzkS%{@@pJ#YnEr@zlLU662qYSt%5uQoT& zYz`HgPs~DFkL|oes(`n{0fMTGa(`1zGS$#E+rPjF=;GHLY!8u_okaFb-4`@+odgkg zAS;VQ8n%A_{+*FQjq*ZORdwqXr6Zr{RfGV8iF*X{WaCFie~y$<5w?6Ckl^`DXjz}A zO_*W*J;Rsx4C@%`-B6xx=ut0D`>RhcAP!RDE+4`aA_ZBHgZ!DZ^Z)W)b8-rsqmwioRHP{s=4yjf~Pw8hr4ew7eyy|^Y zDh@y^319N}Yczs>H)?E=u5Zz-uTd*+8Y-*rY+%bkT-d+8jgIt<3b#dcBtAYAPd~TwLDXgbDnw z^z_o?Oj-VbZac7Q28*=fqXh zHyLuH3Aq`+#N@q9nP1@A{LDq+>{5=wKCSzECU&TprGKP|jr)$Y>8tv&{m(;!%TJB0 zEa>YY7QI@6IQ~EwTE5LS?kG@t+7G&}jE}$JLc_N?(;rgw1gvknCI&=h|7$@9Apwz$RwnsV}yZ*Rp zGc!7V-Cs7U%pQ$INbD$k4i=p`oF87)2+E;xQ{Q1RJZuF zwz-wm`M+Ur;_Qey|CPi3zi$%W`xlQk4%O|dk2DP9d>nYxZ&XK19R6kb3)9(u^nMlKpFr#b^IW|v}uh>Sn_iUVyw;2#p-j3a6(#Z=NUGB^nA zNFQ(S>B&hz*)Qt3rQ+iwga(tpiszaF&)<$Inl16IGFkx-<}5wQ*ld51 z@wLhwLJZTx1Y>Ygr~=x*Lz>@fX=qf&rs~IY3h-6w#@|az#ty31Ha6-N{nK$mfF$t6 z*>&=M=79M4SO3%VZjunbtP+-!faay6a;~i!YKf3pn-TxCc*SUl zf{F+K;H)gX7W1-TJP4O-#Inj1Gy!;<@Bovb(uFROir|>%ISOU3k5u}8DGvPlRpM;W zQblO^^}M@>KAJ@jj~lomy)ZX0{_^wZPe6WUPl1{vJertm^}hQ;c6@4T!xoDrKL7I^ zny*t>!b;sIsc@_>{n;5Ah(Z@^6foeC-Wbl-#$Me_&ll*+_C>?Ua9U952NB_9A5&oh zU0Y9P>aXTQ%#SdH)IX;JW%tKUOe&zb5Qm^JW~8U1EQ=?|F&!0k`XXYuLq3AeyJb6( zCrWsDVW0#N8*?fh{RKV&k(w?`-i$8~5855a*?kf3a1+{fljykVKrom7o$D!|tG4cm zy<_E2JZ_+fVrCqZJ5ytmW|0HD>?LU>a^RmqeUEo`>81q<23Q5_8VI6(Z?V{FYioP= zvZQU3(hTm2+Un`!ad0%|^+GUxxPSk*%|9Z5t&=>x-Rw|sQIJ|2zgt@ti?A?MRW@^{ zX{wK2m=TlXblcx$NKmdU*(;iXyt(T?t2uk)vSh(R47B}yz0dz!_tjjQT3YKP9pV2y z8tuzt^9Kw@Z2rcoRl7KjwV*0l>8hR|Bjfd`wu5~ElVk5k=iaMn2I`ucSla67uqMn6 zy|!nZg^Vvo7jLC)5wZCJu*iQ!$QXDytICKvTt%zUx_7qR^%s*yen08L;}4Vj=?AQd ze5>6o7W4s@~<<4m}+M?M-*-rIb)**t;yW4ySw?3Sjz; zfV{&rBid()+;*anLK*yKXkktr;Mz3kf{+;V%I23YLZ0QDh^L$Tsl$Syc6CV^csgxl zzN%B%QB_M=hHB`6s)#OqwRQcV$=5px{#e`@BCJiAlwWm;^ro~X;{2)yn)eo7f7f-C z6J+BponaAXYOqw$=6~u?$7CRbC@FH8S8e?#Z`-0ua|y%U6C-rTk~97&!iaV&A99jU zv>Ugtt)P4iV4p68zJJDSu#RVjhs7hg&`6yuIEP5Y3h!~u-j8l#}OHg~vNR#;S zxKqj0`$+L$iI`j@Nd)5aO#hm#tvg;}W2ElXI}TS{@~RHC)LK3%H}L!RH3ltH!)b{( zU`^d+lliwxil!wF`<0G6C!Ypf87v`$@f2SLH`4@eK(|rXw^tYEWiS5liDioF>Ji;$ zb0Wf{mES8$W`tfn2bSS>maYAsFd5C+&tqUjnLhr4NhVeD*t}F1*42@aiE! z4a0Sz8c$9hDJ-l%IiNmEv=~X0 zXW24Nu6oezT6~?fk-c=3KDU`Zb@+ASU-ra$rl|Szh5REOG(W4;ISSUNsq~GB8Hl5d zi<$LXL=Ss=(%jO5TonYSKFp*ueMR}T4ugd>6GW}^otNE;@VTzJ7i_z^E0M3>FMqog zDFLkJ)7?;z7kbEpn7;k~ck?zX_|Z6=XX`Z)!5u)>1nC_E117*v2hIhWws7k8LUXTzGMD zIyXIgjWnC&>olE#FnR6@mFXCb!5oA1Gh9}DS&B=e8_JNs(2pDMR3NH>L^)FnD}Tjx zKS=J7CK+h|othAQxBFau;Affh4tM2ltXk=7Mgl|3`s-eucz#>4Xx0T#@I>MZ+wHOU zv&3yMKE*r(+j0r@V0=n_Cw?cwPAUBVZS*9YFT(V|Z!#njpNr?)Q6{VhHVts4_Dk#2R1PjqW$C-CX8P&!EE-CNT_1;K?FTvzQ3$+ z#C1fW=||jS?4@v~61?186J$Gi)*V#JilmuyY%MgNXs1=<0GLVXixGkDKc12Ho-{=p z!U@(Td=#X2jK?CEci0cU?O&9ocH5npm)8<}Pz)T3r8LxJN|{q(5lpCLJ7`K2I3JZQ zPMLmt2`msG`~vFN%d}_7@f5q3xjJTV`3_>G_@H1qZ>|IhbaV~$&^2+DwbOX#Vs7be z{=r3OmboD1aSc_(3*2E*R%Z3R-YI)Z)+(HMPs*73zvFLH2aRYot)g=noB zj>*`pQZYHFg@4n-Q?>U|$52aUhPpBcye0T0WAhm6&o*M(0?%*XZCbxaV%0X<1gOq( zu)EMz9%d%KekQ?@##uojO~(*e-y@2h%YcRj>joUe?wvzjNz2SzKtEmS*S78R@t2fQ zRAS0w^3E_TJ>bv$ipfGk92J_`X>I*4B@Xn_Ja^RsxOlv z%e9TQXozr?tOyXf?=v(d(^>q@5~|#-aj}XL=9wOn&$@W+YAVBs$!MaYgidt93D$N} zQ%b_P-iE7IBtp6dF&-l5lknVkqjNzze02si(|>$>cE9ql8745g4rKqrE%;u!?};x@ z4CIX%bXEeLQ%%$Q`~bUCQGJuy@3*@>IUyWG{0D_%ZIjL7U&NNRM3*N;@A<^|*!x2m zJmQQ_W9Wd-z|cr)#HT$iTk6O(TThVOyfaM~-%RKz)2nYn)mGvE4PGzA)lgqw)#0DC zFeh?6ReByKSD&p~W#rdjXV{|WNTqR9r(Q{(pL03RCCUEkNo(%x-o@#mSNHu(i=aoT z?@?6uWt0QgQ>O#2nf{s0Y)BETuiestJ~n6On6FHmkT@u2`khwWi+84d2Bx#N=IU0*I zq)jh5663YH!j@pMc_ocLdQkY>jQ~(ZXN=INV>;0@Y=mw1K29aNuwETKUz!HPV2^k} z1;{TAb(RL+b|pNJP1j&hS-Jb6jk<}&!eE#!rQ1PZ zQQOf*ntxcVO{^|8(?BQ_N5aX0x~}#-v#Qq7!}h@5a9Cf%FRMj9rZ~@O*h*uR?Z#6It+$MFzaz`a z5Of|BLP;ciiQw&xkb&12!sX>2#7<+R8pKEYib^8k1apIEqu4ILM@Y6Ra_$&HaR;+l zkHL>M+l63kheo?PMii?fdZUp*?vg)T=vBa=Cu`@#+1n$iy~yobS%T@z2nx35QmY{O z1lV+1L`Q%5Xzk0`c(46oK1Hg4&?T5a?Idtl=eDna{f!S}X>PWW`e1qS*5^OC&;JaF z$t!1q6mq8i(91y-ojhFq?Tt%j?@M=0 z?7`*3xv!4LF`kDQ#z0ZPJ^68Bjufv^Zt;#cHiYSNi;2i{7)8l1?XyCFULz9(T4|~T za~}6exD+l_nV>f#%~`UUK9!@mn+@xA97{W_{#RU8%$ z(oLmI%k(dqZd;FdB^o_yXF*n8mSdnV&+YKc{xGM^wIE6Kwz-c#Lhe_x*@3)}m1M`4 zl1-h$Bjt&+a?D?QT2{|A);~{CCM~b#jGfH=oa-s)WUQG;*Oy`@6hk*|;q^ICAbUjF$&UGCM!tD>ngfaU9Q07;!L`6mE zQ%e!q8Dz;Y|NU8wiJPYepF@O>wlDpaWU-@NXSoNY*3qt(oOWuwOOwsQj+v!sKORpQ zJ5k~NY(7V9Tm(w&JM2@eCLCX4jV`UQ5IOo-F!?*uE~c1}4YtsCLz^TXyjJ*$QkQA> zj=>jaUMuZ6SsNY(47aZGjZ95y*Tpl0(Iz1GH1R1*Cn83KrvKpSE8TPCW zM(~S{iBUTT3giQ@6bbpz-g~u}A3g|%2a42T2;qnlDyOStiEkaAtL2>F z@8+m>rc%)N#M(v-fh?d|)GnshCa-V5?uQ%nmj3dbg)8};Snq2Z?QpE`I<09E`{hqy;;a0m z^I*1^n||{6`NUKSR+ld#?O>1!8JHRz5S zRM3yJ+ASq0`(Nky4D(uI5kn7OsI0#urZ(MUM6|$w^kQVRCr=Wkh-*Z2#0T>2fZ(oh zhAUDtL&=?-aH1WVMsoVc5zH=h6l~Z>WHjD($6N=i6XH})&MqM!5D_EvLB2KhWbOK# z>d#291lz&Q_o-DYTOx&H{Fq?>jk&S{w}5)D#ZTX?sBi~IK;-n8o8B!PPOL*KS;D*r z^Ln=U)T`7I5>D5R+9QH5#=8Z<<7Z1HzUmT^EbdDizBM0ox7&Soj>n^pf;-hG$HnRE z`J~WZpEO48fTEd4WVpVGX3MC|;S%j}rYG*55clf+V?hRm>uoz9vx1pJn297EW)1dI z(lkkf#p!h^X3w8^b2f;-Q!il?1#fo^fV!CQ3(VNQ+cw1ncp#ie%i9)UUh{J9wFDI zjeO0+mes7&!?T>)37zWcPg%hmHzTH$_2TsV;nFu>a3=zlJiJ8M4(z^BaZX0VFQI*} zf+gs0jT=!knSdnT%i0&EZDYhixCfS4C_V;`=*l`C%f}<90YCSU_Dk z;a?uFW*;b0P8-b?Gt$&FFf=rrc?Se$+Sp(k=uFS{{(_C?ZBlGH3As`qTVATdICoRv zK?@6~He!i9D-e%=ms*1oVs*}UKR1ok%a8jK6rh*(hooMw^_ANhrhRhcTcF zRfrO;O_N}=!qMFOJrzCHC1dQ8V^_E1xr!zQjVL%quDljrEuiaK=_{2HzmE#GM|OO1`p7+UFlCvFxIV!ZG>Ve14G{8-p`xmC%%WDX~k+;;uq`cGkFq$%>uHxaU5ir zT{4zpbM4=czu`=!4;g8i-_2O%{9{zyF_Ft;iY8tobzXWCd}NUQiKI7N##H0(m9oQG z42-0I>3N^!zbMi}hpIMVQbn1L8O1StQB{$^=%jz79N~~uw4JUo!h6E>s~f%B9j^=F z7cSFjBYwOWFN86oonIaxB%@tui55K_KDdL=ot$Zy{)P*7X;m!ZIZQE#h=4Q zDXvYxcVNm^IYZQ8psb&bjlWn;JY!3gd$^fzvLiT*;5+pIm{--P<*{g5^m$K#L2s|&b`>__DAafXv)&$-F~XF&mouV zz>a}|cuaY8C`@ID=^0-}fR1N5t#ldTe2!DED`#owd>ZQjqek{;|Hs~&hf~?LeZbA6 zfus_pZD^njdtcYJhmr;%Ns17nBuS=1MIxdkQxg?JQ7B}ps5EHOB&kGFDMEvaQX2G~ zt2=wG%Li_XUBi{sy!}j<)XAKyI<#W4=IRsWvA>oDhAN)Qa;`QG z&s{$hSYgm{{TMy{`X#=i%YQn+;^*Jttj`eiHV`wRf0=WY{San|otV zZy$f($h@UlRsm>Fd zd6T%)PruJ9iA_V zF{5L%J7@Qmh#Y=T>Y3W*P8*$%pS1=$-f(TQ8rS|r<5`G)(_7Q25?9tOezD8w3;eulfVaj#CrU>er^|`vq6ajv94l<;^{in%R(Kl4Vep+`-e2SJ3h-NIq0# zI6&yz;^j0)|Kbv3r%4AF-oB~)V79B^^%l^$C}-D`k~gtX0j%8`d@UoDZKV^-}Zdk*p6u`I zYkuu}oRwZzYvZ@8X70^rtHwSaIdOVK-qrql2Sz2$xh?H*DE{caAeVkJO1;X`Lfe}^ z^nKaU<$Jubait(DYLw6MC{J^n8^fNer4P?f9_y;vy!iAAI9;Q{R1|t{Pj!ijZ=7ww zc>O!csuKghL@!z<@ujlwjN)j6=iT?$F50S6U^M;S@P|GFP8F8=z3X_R)?U&%J5*mo zRU^&Pul%K_?ZhRAOpNcf^d395*!XMn=NrM z;b70gAbWFdP-om-PuZ%7CHE>`eG+CI8JnHeqW7ji#eY|v zdjC_d*=9SVJ^Do>izLD%f$4|b)u*RhDt4Is?l^iaXN1zJQ3`De z?+)MlJvrLp8xq02sS6jU|_}h1V8dcm}XYW_s`lx7wyZHo9 z^V$ua1LiwV+oYHmDg0dj+G-#aDJtIb?0Av8GJHd#VzRWB_OVlSNx2?h+v=5dXUcmY zIhNa;mmT#rZHuGP=+IQ@cM2MX{l6q6Uf(yo+hSFjLZPjiN=U`kxz`E@eL4JVpmbY; z%-5*?ZaYQelBv~lQGIO`lXI)L=3g!QZZmeL;tZ`5lSfTAeVSgd-fPeS4M0qSMykcq zma+YFWLI1Y?tR!-ZgAVY4Vh`FmQf`o2dqM_3YMJltY4_#yLe}fVU1*;ExTtv9b^0B z)af6!wIiqOsOrY+cP{Kum|*X8J<*LpSdhW`YwR@tDk|Ie`Vi;SjZKSDqL z`6sxh!Pg`3L)f+*=|kWb!7{y?&Cv@p{rU|0B{Z)Gs?qaevr}QD5M)?Gls6c2&;;1D7@ZX!BTLRkh`3Ywx$W-u3FW{OG3} zDXX;WyPOS%Xc@fQwSWJ{$MqXKTkG7KzT32o(>kek?fLUp4po}P!S`$BX#SqlKP{gA zN{k$NdY<>wAeYBMzs7ypR9d_pbb4YP)R=v6)4kG-O^s8oKZ@kdHG8)4_w;nl&|PC% zT6*F2j>HJ3}N;Sw{rmCYRuZww@UbiOZrC4HvkamubSy@F4}xnDA2KM%Bx zu0Q%#6YANDeRmHXSRNGnMN_vxc28e4ZDlq=?pn4rzhXCDdPN^`w62mqeRP&Ln%S9i z%BB613@5eO8$Wm!cu4JrS5SwSQml(aFU|zl=lNe2N=g6RFzo7ylNUC<*UlZ^l^w_NA3Pv(T_Wvs^}&^ws`(|V4YSO+KesM&|0o>da{T!5Rd67a0h7qe$M=Zd-C z_e4LLTtD4p%dP!MR^PqUMdNlPC{$3XA9wX#w0%?hsu#P$n|_$>Ea(cTNEzy)IXFxr zEd28R5saFyVZ~DEhRbE4&b^c$9b7Zc+A-H^kd>NZuH2@{kLKz7&HeIKP^3{78dGi= z=l(uJ>Dj#Sz1lZ3b*c>`ey2B{m)@^CADmrQW>SS&IcXohB+DqtD7A?e zSv>YxVs-t;H5sKd0Fg(-+|CTREqy%B{C=^>JdYXSL+} zl(Mvvgi+2Gr;gS~sT#(A3_j;-G;O_a+tY|A67-(k(;m)d_M0kl&~y5@)&=UO|K8Of&;tp46UB39}bv1 zV95KotET2u#0S=;*G8DN+|W~U+M7ak?(=l$HXmg;uMb%A%1>UwJ{2`c+GCSS#QeOb z57C=EJizdXe5jo)`D#qx+RVpGll8Xv2cL@eJO4l;_i;f+eq5wR^x#p0*XgbpJx43r z$|=0#h1CYhsfUvvy-b=B#F3PqpW$(Ck!6+Mk@q!{#oSx9%0A6G*7Y(aa!MIG@`KA> zx!4zciMAN&aZfvI`^VtRasT{&K(qN0H3h4TZ8w0N|Ez#**By*^Uc7jtbnW=RzsxIW zE;p7{0=rCEclrA!qp6-tWs}=K3b$PbZX5dKiuH5JhTfs$)O8o+jQsty*YT2`9YK-* zu2u5TqpGZqlOG2eCYdHPvO($j@77J7IJx!tmVj5Lg8CvbvB&lbK5+Hz7sJ(d;m@_U z&Rwve?P&=$Fg7@_{iABMZ|nout4dnk#&>=CocHb3jo4RbVb5N@Ebv>iM8NLGwL4Br z&8W(}+}!acAp4}rMvHQ3*jTMiyf4MlYiiDTd7XG_Y7;a#=;fzS3F((_;7=vDov?wj~(6i3S0 zbES{3x3i-M2Y&Keu||qZ3-}xz4*bZ`)s@no@9gQ~yPCt*5puK*UEO`1z2X1vj=s)w zoSnQ@I&<{&r2hGPDZeKkcezqwGY9vtd}i@;_|=~WuZ|6{sjN`lv4b->@~cZXL|MNe6d-Ns)KVKsY zUwCvFh%bT zfZ_1*0DKM~42O5i0Vpn@UpxW@^RFWwf}%hYk3rEO z;X&XlgjMrb4T{gjLoNVjwc03x*<~jf=6!fG!w}06s28BOi3Za0D!JF&_D#3kD?o#Knl@ zgDx17@O!R6JTH9E<)1Z*mJYm&i}4D}pNjztf5XLy6@V@nvM>S{V^#pVV9>&NT#Q<@ zs#Mh+=pc&|KhP9!4~x93F-=7kHS5F^wpQhe6E+F6LoW zBTC|7SaW%x6~;B9C>{njmj_y5WFyMrVQ6!Kmnn>GL}3&LHy4|7eOBG3+aqzJS#pcR33fG0(u9oU*8&<<#&2(&Yx6@hjD zFGZjo7@H!{4p^oLv;${T1lj@G6oGbNZHhoUAe|!64!lhfXonvu0`0)u6oGblg(A=n z+)WW^hc{9L+JU_(0`2g36oGc&Z;C)W3_}rU2L`7Iw8N+rfp*|EtAHW$;wfT`ffwoW@W0D8l{*UAJj|mKXLt{+BVJKj^i}!J~#nKp) zJm7X3V-jt-G{z(kxShtBL|ZV8G06jNr!gkcmP}(z@_^fE%)n@irZEHafZG|&z-Y^6 zFaz^|+Zl{!w1qPm&phCE2ICoR=?um*54fGd42-sT1~V`ZxShdhM_WFF(ar;IXE554 z3BX{q^MKnKjCN!ZFc|GT;C2S19T^A=MmrC^&I4{|Fxrv%z+klVfZG|2 zc4SR380|dZb_Syz85ayjI}f;>A52RXW(`|foGT}K7nW8c0Pe;m^MCvXW(`|foGUSK7nW8c0Pe;m{dN2XW(`|foGUw zK7nW8c0R^4GV%Br&lGSwALAKWe0+>&3b>t*@r(>WKE^Wz+|I{%M)n{dP&&YV>V?0wRR)X=2Y)L-GGX>nv$9P7jB_HFN0&eGH zJR?h!kMT?axAQTck>Sb5c&32c`54d04&`G!Q^4&4jAvw)3NW52;C2DVGqO?z7|#@N zy8z=E8La}0X9~DofbooMSOI2l3b*&CU(0*rR(l;;RA+L47Tz-Xs{+XWcy$lw)V zv{S(C0*rQK{|YeLDd2ViMmsWx1sLrVaJvAb9a+Z$jCKmRU4YS!jAa2vI|bY>z-ULd zvjC%=0&W*zv?EhmfYD9?w+jfg!z%&;?ZE8<0`2fd0fBblb^(EQ_&WiCcHnjafp!>1 zK%gDCT|l56Mimff2W}S-Xon9G5NHQ(7Z7NN&lC`72W}S-Xa^Mp1loby1q9kbBLRVS z;C2Clc2H12pdGkfK%gD;6%c3#ZWj<}2lWL6+JW1J1lr+ggaq1w+l2($;o*b?+JW1J z1lr+Qg#_Ax+l2($;n9Tz+JW1J1lnOHgaq1w+l2($VPb>?+JW1J1lnPqgaq1w+l2($ zVcLWQ+JW1J1lnO1g#?~~+l2(4VN!(zo`Kti1fF4zg#?~~+l2(4VakOBo`Kti1fJm= z5E6I>ZWm%a)9{4|F`jAQb|J2xF24ZWm!pB41F1F-Zfri!dgUYbe5)q=DN-7?a3T6k!IYf!jrx zfsx}V!ic4T+eH|$$d43Z#L~d+B8*t%R*EoUY2bDdMlA9&MHsO(aJvX27CD_Fj941D zT|^)jMimi=1#TA+h=mUk5r_qD7ZHes&lC}e1#TA+hy@iy1Y&{PMFe6&BN2gE;C2y# zSWr+zAQre?L?9OQ6%mL9ZWj@V1@%P)Vu9O51Y+T7LbreWkuLljr+6w@fSu7imfIoBW) z<3W5~hk!lIAINxdq8Pgl0eqNHkg00Ks@-Jft697YytIAmi}>S|H=`U>^V(>jzMSXg(ef zb^?&GegHj?iSdwrczK`*2FS#CpdSFdXR|;d4UmcPKtK2b#jgWYLB{&QjsP+q512_WO~0LmZ}KKqkgR`r-9~;v^sw<01X<`appbkg=5uc#CS+QygnG%BS6OE!COJb=+>9@jx|@v3{^;fJ}^s^dr^>>>BWO6XPNMi1h*c2FQ3kcodNFc(8MTjP-*@ zgS-+R5B3g_v3~HVAQR&u{fPAej}9_19_U9TGg0gbWMVwfk4R{uU=+w$KeT@kNlg@; zg3K1y5A7dBViSd{K*su^{49~&MDZ(-v3_X(AQGG?panA45A7dBk`qO^K*su^{ewt! zqL3Hl*06qP{~(f`CH)(`C;M8XpV#X!dTq5XqMd7>y8$XGwLe-KGe6gC4H>xcFa zBJGLdXpr5*`l0=UNPMEe8pv2b@EbrT#zXoM>jOLopbKI=q#v<9z;^&yJRXY0fh-=6 zkM<8D0g8fikY5y!$4C1Ikpe~0I*^I+kbZc5pzs~Y;`!sF{ewt@qIe$2;`!sF{ewt^ zq5vPrSUK8Gk<7KZsN)3WtJ>p9k$9M7k5jM?uD)51t0d#QTwc1ir!7 z02x0I+CPY#Cm*~GknwnE{~)rSe6)WMX-^bm1sRWr_75WQiGr>m6XPNMF#n?{EXa6% z(EdRrKT%i~a^-k_(EdTBKT(_(Wc<8n|DXtbqy2*-@QwBl6fyYgOruCH$XGw{K0qeM z1O12$Dj)eDL<$wfdLdg+j0gH5@4jbzw0|IfUMz!tM3NOngF(jghxQL5&5FXqAQR&u z{Rn)c{e#G~^3nc5q*_q`8R`YFerW$7lC3DB3^LXa?H@$C6@{2V#`>ZCgGjidm@~*& zKeT@kDOVJP1{r_9X#XIRt|%%E6$@BDw0{t3R}`iO8S97k4+CPZoD~fD`jP*nNM^F0oPpu{VN88kSrK{s?FF%eQNAr(uiGrT6b=XU3&+_*D z^8%;|p+Z_mO9TuIyS^4BfL9kfdPB`9=g-GW>FE*Gu}I^8t&Zgbx&O!V*f^WpxoQ&! z*MGInt2nYX|E`mwfz3+6a~XANXPc#O;mr@R{v#LqGC8|nm$~Xl4DJl6dSllAP0Ee^ zTd!pP9{2s@^{fxl!X%?r*Ir0-%u|N+o@grn=*E@RTVyWx$tu-Tn(@%y0=}j*OUIOYwj!ACiXWEu)lMA zaok|#!QFe+<;}w;nD5{7cy~&*i*ok{uioxl&bEg`wu%N>Z1M3s+O+Ja+Z3fSE5}YM zUv{GV`{Ik;pIje(_&wCk(OG_URMO9JD;?I&ZPZUnkJ{U`mLFq3?9PtCZ7pkiTkSYe zF8yWWQG;zG)i0$EKG=7()c7+-#)m`Z8;q8Ap4lmUwBm$ki#6ZlVDjg}(73~^ypDzP z+|p#!?@l$l`B**LG;qzD%`FMrqiX|3S&y3_jxaJ z@;%5kzT?_#b)-sfNS`;Z!Z#91Yx0{0DHLdo9rC13QE5FLW0YDjLslhp-1X)(=amw# zV5*bH3J;kL+qr+L!_NgvDcx(#M_q&b$>ss|R~gBNDXKpz?t3O_RB|4(8*2q)7X*1J*ui-@O({9db*d>nH8sKwQ=Vx zRkNzkmcA&zARoEypyOq|an-&*8j!DQJ>>kg9M27FJ31xW!-wY9y&H73w5EI4 z=^1%f3xgk>44ODqCcen?mX(`iLP2z8;vNI79n?lU(<5=|!&<)D*1S>+S>&Q6>%V?9 zHzW4KNW1q(V^==#&X3qGFyIn~F8#`=(j@_q`c^wc)7dRr_l3W?7SKgXWf+?RxgvxZvRCJvklAoinF@jTl(mJ}`Iliml7K zR!$5Yoh6r>zpuu4=bPfwPli})oYn8Ve(=~}uNZCPyqFJpoHM@-ASHnXEPri*nvg)N`^%@bZ2 zCRb|tztu*`Ox9y=R@&(8=hpX z^-B6_c%s+D@J$sb%LiFyu6Mj<&%dT_IP`z*eoZ|B(6eyaNW;Jt=x z=32~2YHQ1z-NwjLW(os09?903q@W&Ops`amSs|;slQAzi=xcPk0#;M!(v4RiUpQfS zk<2FxceR!*Aj~GCy1IjOqu%w$8TE3UrZfH?2=!3qIc}Z5PyJe}V>a#5=W@*&iX8L%@57#*d6ZG^Qw_N|K=fAUHPZV%y zd-%IPc?&Lm>!a5lKSMPy)A9CE?tyQjvwd^#HSF(gGAj0wA@@me#)J69>c`Hn%uttAjk{CP9ln-;SeG6fG}o}|ARq`ydR8O6g$JPMV=4FE%JMCSP*$V7`e#j z!O%q>55_L|J484T^dN$P;Oh{fK+uW^1cIMKgaJWEA_xdR4iN$bjfnst_%}rO5A-L3 zf8g5?p+9&UBJc-(4H5Q(XCs1s;L{KxKX_6i;0OK;5$=QMCW3ts3nM~(XbBUMKFDf8 ze}dRCLra>7^FdAtMDZ#>OPq-EK}H8e@j5_Do`~^5J_SVaNo`a2wj9h-e!ZSe*#Ap)HGuwQ+&hiBKEb!iY#47nq$0w6VPn(4QdYI<~ig?QOtd z06U!RZRl|>cx-P2+uP6s2DZ0>?QIbAB-`7-_BLQJKK{y)Krn0>aV!W`u4Uicl z(vS?>+W_-{(>v(+3bwZar!pB-n@S`z+1>_};m5VD4BOj)DjvkCMz*&B_Fp0+%Jw!u zeFfXwAhti)-Ue77Y;S|uKIi{m?QP&{afQ^MqBJcyE&)y!qWD^9^Z3)|Afo=aK8HUk z*`9*Zo>RanNL~LIeGYeHpwHpLSBte3Aqy9tK-|@nRZ`(Us+wSC@`>}Y0IvCCYkC>zT9UP*(GlM-u>eF zlk3}#;(y&!YHj)u<&#mXnQt!Jrj%?mymI<}`}x!% zE8pcRPuSmX?zJbTx0Qm;mwwWl=elndd>xk(ZBcPxvzl(|`E@Sad(W_~9CSW@*wV)5 zH*2E$hCNX*KfiOF#DI4S7EILYoS1=D3XkdM51&7Zf3#q9_suOKD%$fDre|K%dw6oo zW~);pwx(_-jJ|wK%~8XV^<57n97h;hHADyWz3I?4 z#4n&^{2yGmS8mx9{{3?KvU9u)%gTsBqmLyFuG!dZIr;JZen_qP-Rp=Y3B44lZviOF*+-1K#ox59J?#=D`92{+(Lf?Hh@qp;A-awb6 zs}r3UmtGnvkwUlDOdOr{J$<>AHVt3Tw|+-^pZ}(oyLszCD?O2G{BC`l;@7EK?{toZ zxb5Ar^e8uB+MWXo-tYHJkDBMuI?|=}!tmD446Cp^j`J7f%(eJ@{ffc)A{F~WFM}lG zNUN|HNh8!|6mDIeUM?6qD0<3SXUh)is?NT^f)fR?y8HdwmVRrU@_4lR7XQzS7bo&& zY|vk{zWT$?H^Cai-9~$GK8y%zv_82r-pFiB;+}C5V}vSa)+xrQ9#<6dca7RMj=NN2 zYEDNU_pyI>ba{KLtWC*Tv-_o$x6(CR%iE`piG-}Tk}to8@frp+cYOND&rpfM6L zdQ|{7jp36|3}{z5`eUu>BN!`mJ7_aH-}l?9ADw)7?c-9(BX>fdlnk5`*EX&1t*?EHg;92g(-Pm-er@uZ5u5sR znbX-4%Y)-GZiPLk+DFiF&bvnnz7DsX5dV9Q@2Yh?X7?XE0{*GHVLJl;UT^@_CSn^B>QiwIHdLqL=pWRk z;?N&Dy-yrBg}PK+fBom=zMjMj)TH7HYp6)Y1*wpZ!1dKojY^b4u^j;@D$+BBY)3%P zOrTC_3`e#jpl4p#j)0z-U^@cXjsU!qLAMrhum>C>0XG(iX%)_Z08#8J!x0W3;vEe- zwunPLP*W6frU%3r;Kl+x6i_sAq6eHl03sd=nofxGJfQaak-hCeJR8s=$=-G#o(<^sVsAU> znGN=~1NOE9vAM}?0);3s?A0i5~7-gY2fA8bbebj+|F0pc7Dx>%FF?EoL#$DsX#IR1>i?EpGv zh!fG++YX>(hBzV(U6{&t1Q4gav$q`p9&nWv+Y!Ka1i-1SVsG{TY)1fJ3;ODSC!h}i zoj(aT;%dR+tp80v0Ghl1S3dw0kNoF;fF-wM#s~(Vzh~W&6sodklS3#c{OQjjy$cNU zA}^IRezjk0k`R>Xa!O~pnRTR`jY{O2X&o8L9rs>^E8l+oJG}7VUjKl8Dv2gKA?JrE zC&q^KT7L8L`5Aj&xO5Irw=11-A@O;T|K@YWE(@xSF3-*n>GO1BSdElO`oW9xspuW` zXJh%1UW07p+os8eei=XV0Pp7ncRz!(kFHG*(Qw~g(DmVcL)x$dfi2Rq1#f=+nsqZJ zIsN;EehLl!FKjM*el35K+Prvs{+QtoM#V~!UXr@oS6dt&Ejz8f{^ze&hx|;ZC-0eE z87}+p1*~s8JIc;$On1vg%a{OvtsUi_^owy-?jc%g(nGem#?2EjfE^Qshyg{@F+M>R}1J zM(HKZ{@EvAw&JQ(ifaBC8llm<- z&&-j_@%fc?^U9e}n~o==wx0Z&vG+TDN2^O%!_kvgu81(2?ax)-QzLt;E5WSdoNtk4 za;v-91K)&u7k0Vsuju^jI#qpKf%*;iq3w6ZhuAgQZ#lep&YXjtlNw*`&9xoAx|a4H zzFQ-q@4)F$Cbw<$olPfA4uybJhER{^>D~5pNT`~P!ZJ!8z;>=^2^~!gmvMI6_R)J)s2nJ z7uKdKP@aPuqB`QUoeJIUCrOoL{1Ga3Ks z6Airgwp>X~&s(Zw`JwZw#*tHrPR-o*!LC**3nw3Nofds8u2y;NhclaU6z?y3Fg5d} z(}R{Lrpioo47I4v|NWrIlcqIE4>Rl*SqvDXWvC=kV8P5Y88~oF;eaR$vu0n7W7-x& zuKJixcq~8to=@x0x`L@U&W5%)Onm94a>GX7Up>}zhRrRTMJ6RJ&7)hbHjYU9x^PO| z$9E?SM#_2e6+^x?S=8}Xie@zVUKDu+%9UMMTC2(b77@oCa?7CgUb#zli)mZA)C1dv zherIe^sm%R$&Shxm7SMTP^LY>e@Dyk<33NWr!r55?VES=%T`&Rl38aTJqeR8PUXFA zHYgi0YlI`mQUAqg(aNPZ6X&*;(_NLbRh}BC`kt70vE61^!O33zUB-V`SfVdK>UgRJ zGvR5eQ!7s*MB4{eN@4eANY?lTCP~OZNQ8ggOyu-Pb6MC@=8JeZNvxp$lFn^zm+OO@|R33 zAl_2R`R9N^H$Qb6(y_f-W0i?NLwI$ z)_Z?GRp(QveqoxcgT&ft;h#5;{eJ6ht#VWHW`}utk7h1BGCgKUYQrZ@=XuRX=Em_mb0g|!CcUkSFP>M|?^9b` zje+Z!hLwjDS4{Ne=B-Ig=_k1Q^;M-#svV`4G3yDPSA0rKFClrXO3@^Bqp|_*=^1yo z4s1`z(;Hh6_G!iPKfjW2Op<(C?p9V*HX-chyTU0ldY_8=f6B_(pL3zc>|(=_hrjxc z4Ck$}PB{C!Umx{o`F~r}PZ1>iKb-Ra&xzb@O+Q=H-;<|dPx|b=Uf5IqJ=jzJ*;D?-i3)V_30u?O!w#tJiXz$qp%aU^(i2_GLfq)dg%jn73q4V` zgSgL=3-_}S*Lk9gTZr2{xo{#7ahWH&$b~)SU;Hh=r7i3!|2?yTF1jJ^(d5AmF2psO z=;9mV7EK=9;6hxYi7vt+?$G4H4K6)bXlfgJpo?*6d}$C5Zg8RTJuB#<92z&Z@}NhS z#uf#-IEN-1TR|(LwG}#LX?%4M4|-*3e9sEHSck@!2l1d^md5w2po?~Be0>lPdS+>S z&kDMDhsGBO@!$p*8sc2yOSV8OeC`$xZg4@FdGV`IJ&!NI;=v6r488#iUDU(iE3kNQ zgA0T2z(N=IFu1FV2R1i@yQ)woi@{x0JU9;yosrk`xp2}I1J5iLK`Y!2L z!`Aepo7a1w!q)Vod%$~UgRSXDw_5+54YsDAt?9>LfL>g<<64Xj=*1P_Y#0T-xB`49 z9J=*hfG;(q;1)#zz7vju9|ibYLkj9X1^7-l3SJT5iw!Bb!9{=%)u7;w0&G81aF?P0 zpJYJ6-wE*18tC9E0X|%Vf?)*scnu2fQ$&|}_n;j{6<}M1f*TbD*j7PCx&YfM6xi(o zY^xxfU4U&B3hZ_PwpEY`FTl161$Mgt+bYPS7hqe30=r#+Z53qT3$U$1LDWTn*&EsW z0&J^LaJ!-a+bYQX7hqe3g8LPP*j7Q_0DH>6_}gbs`4?h5v#0#Cr~Hd6k7?j`5oTZ- zcwK}UmW@HT@9n{~OXk$CJQa@8S>#pRMU< zYx-%Naze3Q_LP4d#r(fr(+>wNa=BUpE+i}k6s;wM5amBr{q+BO%0G$|{A*P|7Y=>= z&sF`_w__UlgU^5cQ`K)SH{KqV^>-?ctQok~wclQope>Q7)y{aVKNEWS&L!sy2JtN~ zx_ukFF9eF(-*unszf5>8HgU)Ig@t=WabBVii5A8n<_CC~SkEhtmUo_GDZLXG=m)u+40G`~4< z;8%#+r-G}7d!~mA^%LT|zUO~mp{@1eMz_nCk^-k~Zx!mlp8N47cACNZi@zVNG})_J z5i{n-!G-c#`t-*8gVg6NxFNT5(@(ttn`fV`-YZ9+R9_tOmVT-6TUE<&+PIf1rjBfn zqH_dCo6b-6I22c{ki0GSTHIRYfl@E~`Z~Qn`s#yXSpg?S;9I-@$JWBw2PVUfE*iSs zd~)@E$1J6g>Wt?VR@)!s?)82!dX)q(dyL7ptf8}|+%iXGcYbcQ{VtzVaP0k#GWGiY zMUVT3?H;pkjr#U(9g~xz-+RmM-6pg9z;GC?DUbkuZrr{-PWi)q27i?M*nqnw3v2lnKcMW}bit*zsM~?r&ej(dqC(YrV=!ouA3umsn8N)0?8V zb)4!G?BZwoG%Kl{xl@(CZI<`@(c3$9Ogxt?ZF-Y%Z_VKg3;IuYP1A6_F|)}#e6*SG z00l{=EW*}$z|`K~_kEmP@`f9oTtc zK!J_nTcyqG8{fHYp_hNXbbCXs)ULAAa_(D)*$2p_k6NiY;_J|mK%H+I8~oRY^*Q`( zgNwSI{+(U9>!XW?8}^^#<-FT{dR1?m-Zj^@FO1i04ciy9R1`T!s@G%gT*^_hP4UQ! z`fFMj`q9ZLiP!h~%pI2eF4-tjvLb!|0T-9ul`lf3%y3Usmu~Po>@z&Xf9>{R_9;#d zyd}e~cYVGksdeX-&tt!YkSU{UmP}v8*}t_w7~O@1^qn6+)~&+JI-b9gH0pl zH#iTv(>5z2G^i?Wkk-+H#kS>I#)+jd2Q2hA+}X6*_0a0K)(-JEEp^8$h8i`_IZd53 z%{u0JOi`)4W827ad-#4U6l>=$(>{8UuQ0t|fl9}_jUT4?+pO4JZXZuO91ZF$extkc zg6*M+-N(N8mY^~3~t=@Xs+GxUs&PN6xmJiPxLRIIB)bExQ&EKZ@sk@)vs1lifTMy3= z^z}d0!~Y3|vi0z6J$#R0&DO*B%miBx-!l_zJ$%nhK=v9H@BMW`*?M@k9-e0F;l)8r zwjLe|;Kd;-wjQ2C;d&k})DTg)o`)-dx@BBH%!QI78rKhV;kFVYn8RhyxJShYe|H^p z7cz}&%-A#T*?M>}1GDw;aHzeQf!QV3Yy2(!?X49J(~yxy-sXBym&UC*GYh_ z5p)xi09zvz^g0P}Y6)G;1gQl4w@|l?yP42EO#rO;BF=g8Zrd9n~8#6Cjste zq9Ca$fF7-$vTev|3h*6K6l6aIpqcnp&s<+Tu(qjngY%*62BSB+adFTMbHW- zQz^(332-izJ>#COhZkF$6nn_vkIi!iY;i6WaQ1AS>>2lLJv^LgFZSlxGwxx1u=Vg_Yl;!E_3&JD2=m`)2OnZ6 zAdB5nwjLhtfItzUp7~+x;Zgm&IKst;vlZAg?s3qPt%rvaaQ2LQjvW`BaSzQzlt>GD zRJo7@V6?18xhrVYHaXg~mWNV|$~?(!&} zaHs2%Vee-3nWh?QdU93e?zthS4da?pnit&(KYM6g9M8@+ye{g!xv_rIb{X%mVWm=0 zrc_~*DR+B%tbLJ1s_7+nS8j%+$nc}Gk^KD=mufm0JI`x#@6Ju|h&F!fbImsUV96tw z(|7Wx-Yihpxu@vKeHjFl*j_HAIkH zU3oJ^CP1`2;r)fKLg$TV7wH{4bZdkEkFJ+9?MAzf>Rw$U72madPOS4+nRB}iOZ)qO z`<$8V(DCbF_q?*ZR}QPDp4Hv_+b#Iv+XpAD60W)`k2!jC$TXVPwaiO>#(n5IGQ{lN zg~{u_?hEm9TA&oiKPhE$>r>IDan{eAn`S>NiFsrdy766cCG&pW#N%zoD{^-(y1H;* zK~8Q)+{ZqPZtrfJJ~ny=qj7N_Cq=W&(xLRsm21VrJrBxN$yoY`sKQ~b2_~iUD$c% z@sM$wuSA58S4a+iIm_5_z|QdWCQ;G1?Rzg=c5_lZo^1cSx7y6bynkCSEg<0iKh;bB z*>KrhoQaLk@1bnHG+Qr?>p|IiX|`UPt(Ru&rF%>T271oe z^TY9ZAq?Cs#MVm_>jRENVe6%d^Yz(!X;dFA&VjJ?(y%^IFTS`wnyr_HdT6ot!T(dO z!`4fS@d0$-9l8acOL{IZ2Mw(!1Hn>l2{m!ixc+JmlU>is^u`S!}n%x;I7 z)0dr}5S2M5WN6r$tYFiuUMEL=>@T}Z;qxZ{MX?so4i-xKOWxb%cF?6lr7{20;F5U% z*HdOIdEJvq9(}4l_Ns=?4@1S1(UI@xnor*oGUiUax7tM2-4QE!b5|y=DTy9DH|U4S(t|^|Y~>9^X23M|CW!*Six}wtGXF_M2DXhZje6@>j0+ zx))U{Ioj^-+Qws|3HNVkl;0IZsCq2mUzut&c-=y1V=Fi>z}?j5Z}_ zdki$nO~2RPp;8@Pb@N5uzUgLXwTY@#NteDt$$eqV7(@yw*eSK&Rzhd{>0P9hbboor1>q)-D zCcKuoed6?9@6Se(j*nNI%0KPe8kOUA%yEX#$I!L66V+|2)JI)WKC5i{GHv;GtEZy{ z3)cSr*t%$X=^)E3zd!zxUis;R*$i!m-RqtlELJ*H_H^02bsN*Z|G4{DJ@QN)V=kAs z$~EoF<2vuANm2&Z)p>`kX56}1pWtF|YLhZ3z*nF#+1b;2>FQ-WqZdq+e5=x#v*eeg zN35iDf_;$soECxX=891Pb2bm1HR3|I<rVMQil35m1eGuvGT6x`WnmM8TWf4N>|R{2AD^!OX`2<_q{1bbM=oMXlUQ< zlsNgENZwHH(9@=`_vg#m>rOu6K69+}%DxgecD#J$8F>BfoKKG7Auj2|BM!KoYObXs zsQZVElOnq3znm|3?^@>1kNr}s`zsg3s4OY36t3AnZRZ8PY|NMiS{G%4J1x_Il^sx_;XMr4$jSk)~~c3tI@(YGOGah<`<(e(EvcY=)e zOqPtzUl-$AE=MU%K7Q`qg-x!uojpSI4uxq_s5?@dh}pX}7LH8O8L zKGtQB=7;*jF8h>xPq{3i>Q?D5@OaQAI;Lzf_^nRbxYVEZhIfROHxuttn`$-vuj>c| zg@F=}Ci@9D>nB`!9DY9d-6EHJ4|eer1i!9bt2gcLJ$Y_u$G@!<7ZGdxf2tJ!)2hZ+ zinEpCJthWQDc&;^Y^8Y5Ot6*WJu|^pinEpCP#P}Im2%?yA zdd$E)U?UncFpmpW^_YQqKu$DfU><}xXw1MoIK`C449w$EAc`572i#8Mvpjgf?F?pM z9&kH@8JGv$&R_=S0k<=lfqB5~3}#?-f((NhmUTUdw~KJG6AgB|2-_Pp*zF?t)nB`v2D@DZ|B6KhL}DmD zh++?jhM0^9dyB}A6yaO4X^6>)a9=TUD@C}kn1+~)2%iOy`jJKWWCxlCt)RWKM-3Q8 zggY&18nnVU)1Yo;5reg&K`S6f@!x`0xVDL{6lW{N3G@r0l1YbvKX~jQWBd!DQc{Ol z0N}!djIkz!N*5hs34l)zG6pVK^C08#z{v+0FDMb5tf)gQ1MvE}I>b5Z=!^Ga98KLz0&%|E`E0N%mZ(ScI% zS>C>XE5$WMjFu37|6i7h|FQZ1rBs{`5Aq*N#pA4Q#yr%KDQ%v-`Spv__RqZgUk!PX z+STV_xYA+%j?rpCDFu7mWvx>W>NPt5bg-;FC7ic;r0r(AASu^->fL%dnEnT!%wASD^uyJHY3+*s$SbN}r@`Rghc-q-Ttd~Mx7emT8=zWP|5edo8& zvvs)oW23%O+-H93^T&41M;F*s)l|;#aDOKoYQA{WkdTJYwX+9v-$ukub&fcuTrt4# zMaY_h^2E%3&nhFv)H})eD|%b5dMH$VPbWz*(QBkBY8M(}w6QpIn+hr^x-o6Zr`$b?45GS(vGI<=px{ zc@tN-45`STwKnc*XSSiHy!;BE8{FK?^jRJram}6azqYqOxp^>6diYP7{FIYYyggH| zhz<_f9qAtxKP+?Bq7$>HTCUlSi!)F0c2!o>tsu9x(B-Zsn^D;kT30 z+so`TEw^jSR+>6K*}*@O;_RZo!bBn3epA`+^sJ$d2}z&BE{=E3G?Z`=jdtyvGG6uW zA?KCp{(8!l6Z>i}c+?#FtYqKJl%Xo-hQfxX)+>d@7q~_N{@=fwyebYl7qm=g_0I>3 zKWBBPJv*)Q<(jY0vym7JQjYovQ-f~}G6nF+9zP(jz|{=Nq6 ziwd-QBpyiOfFjsOr~s?yH7K*ii5IYqh|mF8M#Pm|U>BhRs-C|CU2xDDVzQ_}>hEh@ z2+8tr#F+~bSspeRxe$=$;dnE|ra=_z1EFOQiJ?Fv9BhWbE_<3bo-4LSnyrx*FFFS5 z$+26+1rLbAUJ<(L2bEv+tWfZWDC`q)`B3GKT_P_0NMVnN3lUWcCserb3K1{hfiuCWR{it#BfR3ppAJ=TW!<&5H`?tvK(QfxHN@bMtS#@0xSCx@+(X0W}%gXkwZd+9Ghp_@Ax zoZIHXt%3{=O|hqGa~RCPJm7W)Gcb>>k!EY8d)5)^nL~l}zsriPk!EY8F&MxXWKYu; zFAXr#1=v=hz-|{{`x)8n0&G81V7Cjf{fta_0k)qhu-gULenu9(0Nc+L*zE$$-pIfg zVD_fKZWrJpBxLUkaE%28+%CZVT*&+v;C?O&>~7Yr)gk$2m=%2 zA^mWOnie4aaF81HEQ5^46C(X^jT>rWhBz`FkFAl0`M?1^wniG^53dgfEZZ*9Qa8<-#w-<3YbW$ap+}GRVYuus+~;XZ(K9 zkBip_13mBX=frqOKfFE|=z0ekj|b2P8IOnZsOS`wzy20mBaP+{$GaI+zdPXd`34}HJbY)5yjfsDTo27SNSaAzP;4>HCJ z#PUJLJe-MdI2JIh2s*^$c2a)V# zP>mar?qpDn8mar@nleq8Y9n}LkKUsU5pq&?BCbZ`O^ z{(e!78;U;m;1Sih@oo84t&!Hzf-of13jG&nY5y@`{-r=# z2wUBMQ6PQWvz{YU|6}r!jkDzCm7blp9A$I#)~LlcYR7Z!PGvoO{-M|PBK3$_F1TT|fQsU)N{E&ggE1lh-_YKek=>;q>_( zvE$-TdcBqVTs=v?-uCe+sZDNjIz`p%bGANH=pUZ5-hOhSdG^A%C6<%b9ilC*j!U(s zKRTOjS!tKHYk_UfZQK5(jFh_7qp5DL5wq``{dC*C!TM8C#5wK6(+-=vMa$`=Ss{H5 zl-rLlug+T7Uvw=bYDVDQ-aiAg<<`k;RXMQt)86qr z;|DR{hPBj0QmVV|&R=T8Nj$XtXRk&J-?72TrWQr2yG$)5R2Qb~jha_0ud#ZNN@AAV zwaOb0XN{WoTQ_^Nrv1hp?xUvZw@TR@=2<+~&Hl>prgkk~dQjq#cgQQFZ8PnU&ksvq zc<^T8nso||y&t{l=v|{=K6Un~3BDVa%evX!dXbryb9RG&`S_#97v5O(CC1})FsHIk zb;!5va_bdk{vY<V>;Kmzlt_u9C>3S=%pXJpO(;X5Qi;e+hKeSdOR3Bhh00XO zOf*MkMU$a4&|pXiW&Evo=X~D#{k`sU-PirQANQa8bgpw*VYlt}xYl#MR=2qI_<25w zU3?j=Qx8R!<$RVsJfm_<_mEx6GQV-tt-3wiSCtoBF=J?Cs-()m=Z!8h^fhoVzsUocE!DsZGL**WC12@HM+|S+Z%L z>iyMf<~eJlevVC?kv!_7Gyg{N?E{|s$83G+|D|+`JH6BH)~jUItE!6Pdrg%r)!#b3 z=~R3seI|Iig85_jotI`l4cmB7>7n)8S!bo<)%D)r+L|=;bwiw1Qu?+J#n!um7YJwV z3pn!g=z+`8T=h9!_h;3X>}Be7`(Atf{Pk@{=2few#dkN&mhL%x!RX@8%|Ev9pQUGU z|3RkcS83)*BLBC=hkoW+ME>}>_=w&lzk};j(k&Mi=5UXx`PJlI`!qgB>g3d?Y~9^* z7hO)%&TC!tJ^poS$n zgp~IrJO`<-NwCPbDdCDhFG<1?f!>jX8v=P*2qy&cu@Ei@c_7Q#W)2~qx* zgP;=z_)|EDIblFdkAsjC28gP15OKnQ++Gd>P8d)OfrEGx2KeteD4fm!QB@9_?F?{L za1e~e08v#AN*rc@>w<$ahZ!KMN`wRc-c_(*HWtiAlL5ovT;#rEU>F?3;Jkg33HvJ+ z%qB+z!{F*D9S6hU7zW3J+2li&g$1(#{zcbw41+^NkrJlFFgV0wY3TT15z$y0C0T-q z$I{V*l|@8k>FCAEB4V<1^kiib$wYMYW@Qn{M0E6MWf93lbo6Rv5y?b^L&h@yGL!Z0|D2MXe27@U}Y zDA^gq;IMuPPt)J)6T{%Jzfc6QFbqy`MQH!WFgS+6|A&IvY!x<}$o1v%;E;j|g4#w_ z9=5JtvVRV6A#H70TUQ%kM}=sA6%^)Sqz1OGc3$>>)G+=t4{l!W+Nd_Ua8S|f`|_zt z{n^UJ(-&71e^+g&MMN7P1`qD^<&0CE%kzmWmc@|pTzlpzZa58*PdlpqHI^T zd8W*?U4MUIx2xpqxf+4ck#1k38_&wt+8*=XUi3IzeCPD5zUOVy_LfiEtXLG7{kil( z;JW70l9RDo`mdyC${DhqCBx(`&bRx?7wEm)XH=S)ZB%pgjZ9POPc@l@2A};VtFCwa zIQ#3@2d|AGUd0Jt-=&T_U@P4aIWw@}mF#kv&G!154!TiSQ!c(1&~6r2fX`WMm!n(A zwY>Lwz3J4j{VP5CJWl(DUyIIcRhU^j_q)HT^Lgt<>+~7(TsjVz#U+QjyQ-fn$$OR5 zKe?Uh#@?d!^Gchj#p?yl52`2K4PG~E!YdYC^Nhg{>6vfVj%Q6ic1V)%pyXcpgwi*` zUGa>$Z9M{h>vl_z4e-_;FDYKvJvAw=v{-Um%B`$zE8nQ+3R?)QZ$2_di@BHcb%oWb zpXU=h+p_vkWnNpW{e9n9sq2D^jy=h7SeQ1h`_5L$=p(Xn^&xy~5_Y<-I%?o08SG@B znh;U1VKaMq)tyrbh7w&vRX?j9*XA}|{CL23B%K>ut6Y@a9)4xR^4uBUu9o%h%kgz& zWghsQar5nlk?-F>tE@kzb0&Vt@Ky7w1n=0S?N4jNIu8BrSZ{iW`^q$8?fq>}^)%k! zI`_UHm*!ZhtXg@u(&a0s=y_6fGY3qcQ9B@vjLh=RZ+Xo;SDHVQRH*O8mbwuu=Pe{Gns zBgL<;_sdwVUi-xB^E?BLmodd7oo-#b7)Tmxi8+K zWNnW`fY!{<|Hx*u;9%!1s(;63|9MPfHXF0qyh|Wvvw0(d*=*iOU^bgK5}3`#Lfrsk zlP+k?X3JusZrnc4<=0zpGIL4LY{_& z=sr5|dn^VWCt;Iuu36Y&JQtkTFR_ zu6W~&*=#mtKEqXuO_|Ri&%~z8XQ0&Cl=+O=Y&J^LWvIbep)6g@W&>YMt}@JKV>TO2 z2DrC#P+mGwO$Q5g^Ufops1Fz2RTvP|;i9_=QR9b;?kWr*F1YBfLX`aBqPq$M#FMya zZzn1Manat+fW4iI_I9Em5Et$34A|Sb=&nN42jZf;3Ik;Kxah7zyh6C>Ho^eWJubS9 zFhG5Xi*6$fklf>qMeg1tv>Nj7+|!KSoF z^bZ9>+3-XJ8}*My^bcNXy#ByL0@!QRKPc4+Hfj$Zk(kX!?_D;*;b1l!%^%|Yz-%^J zFU0wQ*=)4m5QQEn@m4I<{l^{l4?^84u&WRiM>uLK40WR1AA?Q&7RYupRk#f1e~W1o z!_6Z~Nlg1ct9CPtewe6jEcv*2qgqX-ks99$Q5SowSi4<2ZtZY%yk+NX6Mr%4W=v<8 zle6=!_d(U-r&HhPRyRIrG_ z2YxOlal@_GeMDHak1p@UE* z3+03pwH8@O5`+#yl^Ap-hYo|Tgk}qGB4N;#jbJD`z)%=;<;@KSgfrNv6b%FR8#by% z!+>B08-XVb*nTkRN)8?D?QFDrGhlDWpes2zScI5^f`SYTx^mH7g@HwgG3d(MC@|;> zs>9@41B(#LV$hXb8gOsNpes2VM4(v>r5-SeiqL8(_keh@gN>FFq&0v|2C9iCJlN!` zhzW@eG&Pi+K)mU}CcOYmNNoTcwFi%Uuu*%E+yFLe4_^H=HB|qR3F!@BqxQgE12&~S zqJQY>P51@CrnE=&4_&?qM*-NB_K5x=P>JvyfKB#~MSx0b2vj0m2{biyCt(qwk{WWL z5WWSl$^Nk*jSXx{dqn@xtCFQg^ba{v2=4>fWdB%dME{T*g~+=F8?{G(N@~cFLL}nS z)Q~5IMSx0b$dy85=7Np-hee1n=t`-Sia}RcA2iDPz@RIDjVN;sgRZbYW6+g6Kd=Zf z23=_kbU$Ka(3JpN$@?1{gRTVFO5Ru57$8;!<+6u>k)4*Pi>Mr_N93iutV3JGf^5VBzz=>Q95K{BuX=Y?;v4kb6qpWWKwcPFYXi zJHhtQsqPI8kA2dZJx5I>?rM#^8yWc4b%P;)`Y4}Fj!e^>>GN!El&*4^dfI;auHEi4 z+5&RQ4rIn;nNFJ7H0SD@=QHY#+WpR&HSMZ)-RBld!>OxMvTjtKj2S=ao#u(c#2CgL zYunkX3NA1GM3*|x@~s)2ZkuWB=6la=>1dzpIp_N$1rZ_ba)*K})@2;Mzg%(Rp?ck> zh2K}vrn6&hg8O=NhAs(bbWSwhB5$#&#koW(&dC3B(Xg?P$0R+A-e%>PlPPnb>>rY1 z$ro6ha%nzjrste-AVD&1hxw1G#cn6fL+-Rb`FA@Vm0ean(tsQC?4i@I8MLR6%G5_#U{>tG}&y6LK*59tbuy@c_IPooOxa)xWz^v6z z8$2#{zi#-X7=O5_EX(6_{qzscFC;g3Rmw@Y*XZ9GUNConej@D2>VrZ^|BIEw`<| z;O_t7`ULY=KF2F9o~%E*s(0NgJJGoOo37^{x-NSmxBA_z!r0mPk7{E-+fWqGL|z!{k$L*1{L$Ze-Zz9&(iFnAkk7NT768;k(`AFa~pRgl3zBfOZJk8T+b|l>SemVd;*y|$wI?Ro?qjZRg8aP5GQi&^|FdFr+@Q_ zPPumB&H9mu)gNv+Ny^)gw^rTht>i4YAaQRtztwE>^ui&(MWQk34H36$XeSOiMf;yV zbxz|_me$#CSI-)Z-!g5hb-YLAKH2%DUm{~3gbJu{eLps@a(ZxX$J!rn!)4_a=0}{~Qgo<@ z*#2rw;W>VVBfDeHym#Lqlp2|#)>A7cB{U(_nHg2Nb7f+Y?Hpn! zC$n(AoM-HgalzB&B=qWQl){DLkG^@?Fy-UBTX!^*80wGaNlHf5*O=|`4}7J&{GsG0 z|Bo%nDSEbhTAvx!o=*ua2-cgBppmA0ce_-J$Cl%s=KCZom!*0aoXM5)(bVexe(mf# z+H5@q?)3bs)N;E~rm^<>dFyjI!DrvJ9@Ci-64RM?I?!m9M7~H~;zrFwA#ImGhdj1V z-Rqi{*u7V-6O6BgL3%2BLK;oSZuQuyXsj>X*Rmnk=x(3Go1J@fA9BuDynHFLtU@`g zU|$F0=$q(i@)OU=^&DxtdZzz+%;o7`Y2p>%BgB6WyqJCJj92w+smmSysoS1;@4eA@J>)=22zSe3+gG10Egrmc z++-{qcRRV#ab`r#?=^RdBPNb~YC> zZ=DCNh027jrCN$BjMIyl_AY$^gD!K_bB(P&uc~q_^|{mXx$v_5SedT zeG7d0xl#)Z3o<*KeMx)gSVc-}<4;RO6M|l2B`}X;ta(qGk)YRL-1LWiL%{xoD_UIbn3% zGWRon|ClPGPC42CU8=|*-zQEL!KorVpFd6&;f(}N72%BpP8H#e1Wpx!_?9dkh1?)K z1t#gifansKq{9z_M_`igc^br{=qTJqgK!k3WE)6`fQg!dU=&3ZfCjNBiY5RJLQxb+ z0Fc{|r6>Z>XwWMZXQKg%NYMiTmpz!MSAY{!)BvC=A0&g2NHF-b!9=|R(O|&d&PKa8 zP8ET45ArI`fO|U|(P>1EG8@4+47j(mQKBCMr;2b8smXw=2M2+g44f*0Q$@%<2cE(> zRfHT3*imq*2yZlSst8UMAs?PhNb$z0BIMG*sUm6!^(C|%Ak~AstKn1;oGJp|f6`k- zRCNQJ+)G&Cp@(n)IbVn}Z(x&tb{5?A!6tpHMBO*AQG0OP2OG5q*L{d5p!UE|4>oEK z68^xZv{X@P*7L({7axSun zXe$kQ7g;Q#f5^Sag04VR2ero{`iDY1Ea)28sDCV?e<;Yqg06y%eqI*QKNRL+LD#`X zKQH+5!A9-Dj{-LOdD%q&D5+HNqd{B=^^Z;T4?R{{@T1~X5z6|2>Pa|Ngt9(}R6|Pi z6KkTw`lX}ugH4l{2=NAk~Yjg20A~8 z!izKpIzQON`N2Tv2T_R;Y)X63KL$EKh|-K;llu!Bq@!SaNBx7N0BqDhhzNj<+9S>n z23j9j6P*}8wEyE&5tx5CRRpaU;{3p=B7f~S+S)?0vhW|(b+$GRRx8}RWi4ct|J*JA zt0uZKolR2#Scay;BJdwXd^8O`Hgv0vJSt3+DbcQkLp$nuq zUAJ?zvEFf=Cxq@0LkOV@nAwdnwTs>1oM^YhISItllk9fbj4^i-FrLI`UM^Pu4~Q#~ zZ;z5!{uy!oTip*Mt{8FUo&6Yb<&6aK=%TzSi7l19u@Da~>U$C_a`z=3Ta>pXT!knv zNw^46-jQ&OQ(lp938K6q;R=Laki-KEy&s9^6}lZ0k1O)h%ab=@7AVyqe*(h#EgbXm^%3CQ6h;nmK5QM?tfJt7(8Q`km zpb$EPp$;Y)QNf6-EaC0_JHEvLR|-a4$KnSa$L!=3-p_3jT7DikF=|n+FtcDKj1FNB<^??yr0%;}B4;DsT351or zU12qJ0>MS@9X637!9e~UHjyGhc!YS!E|DTZ_<%^8KyVST!X{EA7zkNmgZBt*G~Pst z1Os6!Z15j}joKqpBp3)?VG}754CJ_E6DbmuSSXuFkzkWx5KBPD~}jKg{BSDmtC{-@>hg z7x`b{RwgJm{bvpIkm}TzvZBTPhlF0Ka41~DHWNmA?)%n`)jC6H!*^I~# z5j&Rc?ioJrJMMSSUu5;>%jxe8wRaC5_E^~e?Th&IWN+Km3fhyxqEyB@_Kh{+vu1-z zGdo(=%1loF0KW_)ZPP)SN#y|=N;&5oN>}U{?31onI8j@1J!{9BAG1FB&lSFA5%p=Q z!(@*4T5s*+$IRZFTBSPdG`T=K7jmbqoqwuhV&ek(yRnyh7K)muZhjx(IIqaRWY?bg z7pv4F!gM_{IvswyN`B)%xvA*qJGZjWUTb&%IK1JVx!tY(+?$IEN_w{Kj@kNRb5ioP zM~QK1)Sf3s00!DQmqP6#j1Q&2C?L!DkQFj@{j~c6!o2v8kO=HkoYygO_wS zO>~p$@9w$F~b%lFf=doki%EuWNlV^psv{%_>&g!_Ge0%xn-m7zNE|S<3 zWpjE@!Ucc(3#KQ8=S7^_e=C0Lj`j6UdlA=3QMdfy^5TOd#_{0u#u*k-!8pCXg|KOukDo zfs6@cG#P+oz#_Z6lL8aSm_R1|gP1_Z1TvZom_TMD^$MbZ0T$Wiof?=x#so6LhCyfx zL=ecifeB;|3TYA1E)I%lF+fy{g92I%NZ#h4coqXBwJ?E9P9zY=;3EAY1}2a(fy|p5 zOel_l31o6KKne@ubEF9bfI7+nVS=w*9YF$22l$eK8kI@?2m79iWcj0it$`I${Tyzy_!zbbu)3qK?P`CXfN@ z2pk|PyQrfaY9=AKgLE&5LNDq__yQBim_R0{BtZaR0vRn)f*?~v_Yo!(Mgp5$?}XM9 z*yJOS(1!w>be^$*2!MihWP2uFgH34<2p%f=y`;2p%<*O2Ps? zL9i+95&ffxh=RT#*r0BU=!yDCXmVXfkk#PfegekdEdeWGTcvzH#Cp1#{}~KmOzHY7ZvcG z68JGk?LXqj#EAb3e$0Wl$bZI<&C63?s7-#`ub8oG>c`dFEsk%xt)nzmQB>AzwE%la zd%aY`y876ZRd<39)c@i>-P`W|`R41IC-FCF@=y?o8dxe-qb=P^}- zFIa60u~V%T>G}NfXYA(P>=M`XhsGnjPG#O0&kh`8eR-z;L!mt9y7WyCMV0R8Tz6e; z&{P#^9U;8aEMAD~x;K{Iaq*7BnCkHMPJ`VC>!e? znD-=GOutJpI<>6UuEyrR=+muP4o|!SCB@9FBWh!wxtIxFz49i1!PLC#x80r`oIcHt ztGA_vl!W-)^0+QKHB=CBvn$0oiIVp?s!P_Wu{?Ybiek`!+X zl?N5vec>OqW*u#|-k}?s?j?7LFS+|=dF#o>pi8EHjS+d_^=Q)Y|TZCb_gFm1LGebD@LIbZkl zmHN6ndvx|KUnKIWY_z%@y)lhHpqQmRhU}iX?^s>n=j|{_OuxeZQeet@l9mf zqB-A&xfd2F$<3;gD_QN+FEjs6@RWb#sacez@b7r)KN}S0sWDH@JE$;E%^L~KQ}adw z^VGbNz&tfLfo16^J_9~nFiE!&xM0B~Z@u7Q1(SRv5=F)6C_V#4!el8)%~0bDOw<&3 zYzgthzc0{GVGB%3Q!Fq^cQ3f^Wa-Eo4dto8q%;M+LcVD5Yk`THg3>Z{>roMa<~P2Tg-QHWU{EQPPa!K>%+8n5b6} znWGfxfr2=)lo~yd>r zz<_%@R&*vu1M}1z^jc&LWsUglp-XvIO2Q93dkhz!hABmRZ0 z4(sE8r|8U}kvKK?KjPHHh4x=@YWjbssToE;Ow=}(d|bRyt%hN&#~b4#Z)T-89|YT0Z=dx`Gr^^11Mn9 z1lAU5?9d=|NO`x>K#_)0hzG7{vXnYJG^kUmp}|&7snJ7Y zL9dX;4h^7dN`)R8M8_!wdT794Q|j~3Ky8dto`(iVHl;cb4b;Xc#d&BDbEnkip|PM> z6owmo-b6)Y-e|C)SI7-c1Ad!Qw}-}tUQrls_>fYyhXyq`lb6$v+o*MPaz%`xq348=~V33d0S}FenT+M8_Evh8tRCP#A8Ajx#6>H>O%K)ykW7 zbjVm>qB%*2j0Gl|lXS>fV4^umhl~X#nv--IOO}b|Bposqm}pMYfqY`3IZ20F_DnP< z>5#F&M01i3n-de|70@ALfr(trbl9tys5TlMG8UMK6rsb`MFgw=AyedRtW~- zUvdY=R4Y~qMw0>V?U-u)`+>{ER4b-hu}U!M@L|Da1XHcZ+sz{C%wv^c^6_HpGD8 z^Q6RL z4^Ibw6$|AS5X$i^6m6kH)&dLV77#-6ETj)lhpYu6{y_dg&@1FgphMOI3+clXK53{P zM1C>&saVL(MtG=M$je3tFBJKVM0)vi*6%Kh)HwNZ3L68fU=SoIVMao zOtzBq3U1|Cuaz7POtvCDF-*1s*?{$0$%iQ}Of^Mg{rl1PpRo80f&pl|^;xj(as^Mg{u zl1-c+lp>aF;{2dgv1AkH2c?W9n>arxbu8J$`9UdU$%d&7HhF%qiSvUZ`oo5Y1=y&6 z#Q8yy{b6IW6~+Vk+u1~B1SVU_`v)5yA3(aI`2$)y5Bv#WqxL}ah{i`a9xLh}hv*+BTY2|UHe99ukH}UiW~{=3WbZ#{D~I);(AGb5=3miP*8fhj z6*OBNcEpotYtlcVt-Im~v~`1%GatdW7Ko+&6Wa=T6NtC{H*D))lO40Im~G`PBFwh( zMgp^~yph0cD{mw)+ltv%%(jv@T)6Fm@+x^Dh07|K0W?RXnf!S8fw(=$e6Ev5&DANYBt+MJU%tt)$ z)KQd=2~lWu^jaidd+I1g$AlO(W?RX51(kHvQEnI$v#sg~Phw)W6~(48+X}IH%(jxx zILx*Z>@8X!EFz8yvW2{zl?9jv4PYu{6YL{mH(20E1eUdU_%K1JCDs}02@Mh+<7*9DcGnz@Z5uq+JkQeHWjr8zI(7yd(afvl=g`Jp`(IG zP6nIO9??JK?k2L8!KSoF^bdAaUjK+_D^ZP%w2A(qD-My*3{VE@AECNOLkT=Yf-~5Z z_K5zW6doeu8En))$YchTnbIE7Kcw2nf?Q^>QG4*CfQ|Y`sP56gd(7)E{Aj?kqV@>Y zJoEKV#Q#i_F$_68?^_~Vz`c>{sGnxHl;nHf9QVnf5^5n7z`D{Kk|odRj2(&ww379 zzp$+|H2_CdS2;L)*?PeLJ6n0#>e}vfv$2)c))w;g^02jX5%R7-VP1M(iX(crP0_pR zh?R0<>Pf3{_tbj?`GaI7=iXNRJ-ku;@^tmeFtuZmua#ew_4{w!-6Wmo>$-Hdx7X;~ z2Z!!Xxa#5lP@<|km*4CD$Q^g`CTYhfZa=;C z@mq-xAI{ReL`3FaO-@^CXDK_!W8>2Ng}u{^%{-hdxr z_vM;04RglqT5Z}!-zq6UM;z|GH#7xt-z7XqI-@@ zo~NmP)zH;C72|pOd$YEBd|phsXr;CAL#-!CTPI)1KYyZYr;3b1^5v@M3b7??PAI%v z?0e8Z&-KgnHwLzfGgrU&a$TX?qaB(mMUO3C$UK`Z_k$-4p7u&EyW4Bo~gks;0fa`%r0%g}x3;rRD9! z{rB&>yq@rMrpq>+LvI&L{a&a2Schg?`#EsXNKonPozgqE^e)IWY}%(Q7w9~B@wV@i z)SYK8nzVL+>C+rsoM1IELPJV?=4j0Ob7nKNrHqmdq&}W}kSFcE%B%9LP!PB3+^$A* z1)uIX^>~R(I%|zG^Eft7#U{8ewz#VF+T~TB`vg^5t<^0?;CNFP3%Xp=jt{i)< zU4R*@+g(uG?JjgUCu4Q>%{7#A) zMZH(Oj{S8ju+r;uRoIJ?pisqWo4X?w^E++K;>Snj1%)n-+U{{e!}M!K$U|NFl?S@h zO|I-XxISc0#f#kryLH&PXKK%-c22FluB3cRb(6JTy5Gqy5szvo>{_yIqHBElgoP(r zKg_1=WihlQ9p&{u%zXa2FeBYqW2ypkq3Cg%ykL#P`o4YEV}4kz7yFT^p3mHzI%4wH zr0w&&fTW)R6^91nyFw4BL|o%om4vLmsc|e^I75e4n`yueH1@eO`$@-Kr%5Ny9(mfL zdQZcq<8t8hdZYJU%DZE9%2e+i$ac7Ra)F9{ue;ussxEbhcjgIACgD!zOQyUY9dks0 z&;1`EbOvSj_;(QcpIr|_=omuhy{0jQ&Kn5~q4P!pL+HGbzz{ly&@qHgKBX{(js=#{ zWWWN;6t4&kyb2Vj2u&T(c;pkILB1@-B|-z2G{qxA10foULxcup#3=p{I>^#c+#z%* zB1Z9s&>;z%;tZif2{DQX$ zl!y*)2_^~>VF(>V=%j}YL+BVnN0R|V=tP~nzk}Cw*xNCL&KnI3p<@W0jN4!cU6zBQ z^hDWA4icbZfB+5$=@$}3G&xAVkOA^HT%=ye062$>#CaGXe#1r3E>U2Ui=bTwNZ)Xg zG7nL1llzxe351(m7$AJZMJYr?@l7t0M<5{+Ktc?m{}mcz5)h#p+K(}W4v-3l(8)a*L+G$RFoaGzgR#Ie zhR^{zC!stRhR^}BMi3$kL+BVnrzmt`fn|VzvA{BUezJ)qCMI&>U-__yjhTN?+f6>i?L7P88J5*#@Ypk=G6Z4**m?&0<46X2bLTt5{KxaBzD zi-W?S|B*r`4sjlZ{uf8O$V`emUOu~RWmVU@SlQVMshT_3c-ce880tc* zYiu3t?7aYx;0megxH-FdY}jqJ6TVc}cCW)uTa(o*g#HO*7gAl};N@v#>!IW3vfIto z*40ZEzTd#s)eag4={Y)GNLyQ$1l`-CCvMtc*L2Eo#$3_8%TCHp8LvF0(K^=b=BoiS zm)>l%2FHN0;zcem@3hW&A=37);PipBLW|@4l;i{ygi6-S2G7sQ?zpUaY@L9>#sx#) z+xBI9bJcxab_S^Mf2isNAO}s_l?B0*>ZwnNg#&4p2fAifCDG#gG-a}5G z4ef6JxSZ*wzgya{ueCqu+)WF!@mG9Re0m*=x?9R79n{y?Zz#5QadozFc6DjEWprj=iib83pmY0 zC#clznY*O*!{fmZ5*K7Nt}af!bH00Q(~B2biVSl0 zU*ok!MK|>QuO7cO=-~2W+VXEgMM+OTrw{L&KjT`&-|Y(=EwuE|8S;KTdGCV}8{=Nf z&_ZsukxPth))lkwR2~D(g{7|H=80OLzI~&Dp^^sH`2$j!{Tkv zMlSq(%WO;YDn+OAZsEl;4n5lC!W%Yh5IQkdKc>k;=jX>EL+8F^3w5#HrN0f&SM1EJ z^Ayo~{${d!RmV%`zG{w#ZnEnfRTZ~O{m0^SYmW*)m1!0Tois_tb@<5L_qog?yN*3- zcT#+F_=t#*?t-HggYs-uliu@}X54ljY`MPT<%ZMwN#^@f1tOB`N=Dz7h{hVs{cG$5 zjxyJ{mTcd?rD|7o!@i~FO0VZ~A|~Gn3`|ctA+CSsMr3+mU{cwpH=EP~&KbPWPf@B2 zT`G0iK^K0ImU&K2PGO-Z$~+>rWGAa|Zt2T7rffgkyS+d-w9)9E;O+7IwZE+Dx^{O= z`%KMgzifw@@s*p|POXiPOIz-F;X?XR7jW4XiT zitfC{r{8>iynQcAKQU~s&s3>{@hQUP)7+NhhsD2T;R zP_-GoJ@P`UD){jZeK7 zscbe<5iqdyev)FEonVh^T7TDOneFv+b)$TIW;UoQgq0h)i^l|E}^W#1zEY6ym`{eO=m$+~FT@v1% zf#o*&b*h;R#^OQY*}LQvKl$u6JK23|>FCgg-@BK$cKvo9o$X%NrMYXsr7&1^#@S4_ zTUXeJoPO%Rj0surg}%|#>GTOhLltYoZ5f^WolP9K)I<+^mN%c&4cTXRtTT)Cq3(D3 z{ei*MyODBYljg`oRQ5H^8ks*_SDSI&u7{~(?yYLA(qXB2w(?5OM;nv$P3H_n`TqLH z%SeUeePV+8=E$_rq2FI*?vHN2J8m>{T2Eaq`>Ei~QelmNVx_A+wR&qvP(7uSYLieLtL(0Z>Yy#{f<;23LP_8o}I4UJr)NJ_Aluh+IeH&`bCAgCo8v$U%C0cXl_|v;jOK% zrx%N}wjEEViWI+IBCmZ%dcQHcS0VvwCk=WfOr5=UmJyw`Iw6U*2k*=W;xAzmL;}E={>B z(;agb9^^LM%}&|SX>06rX+qle;`XR#<>~FQ=jZHXzuiC2WcYLE$2Y@rQ5%)_v<`Ok zm3%RIN$(0~IIZ%!ZLX5t`Kv2PUwZksRo|=Hz6<0(H;}IrJo{@s`FJ3fy(w)TeSVIhR+2|r-Beb$COhh^0Ttv$Kg3<7g&oi#H3Uhy68d(#Yr*$tgI%P`! z^D>9ij!q)4el5yncMW!FNjtlAG>BY!GP3{0>FQ#Gx}jx>-o1Vuaoys3XY+TKm@905 z_vXE(Rl9lc(C}!(%XhD;_WX*qKJoKimCPz(nU+lLZjlqsFZx|m+9!5Y8I^n-D<3e6 zeXu!qM0@-CuldgpUaPC#Q!ZSoL0@+@AY*z_^2Xw!nu55*4HfF#Q&d13 zd#%F1Dz@C~sQI*_Ldl>)H(pK|>7|n_o*7e$eiD z<+O4n{+Z?NIXKCvG4f4O>c-WlMJ7An{B2qgXwfr$v{5=CNb;@3yU{`4Bu@>^ zH}&;iLnAdeN428+j~sJ(>v8R%(@XmnrngI2Tysgx-mRt)10jTd{Vygy{l~(r7lgiAUEkX`WK}P zcFO51&M2?HV>-IdP~89N$m}gIBYr+|*Ig4Er)H!3d&l{`SEa)jvu_H1 zUe0SZI=3eFS6khvut)l_MnB5U`lrh#|CGCfd5XS^NBp<+2kwMZc#Kt=xQ|r%sT-5c zg!S_W1H!Bpoj+z~t1!L)UPoN|#M$=+XDDW{4Yr1+Dh%Cd6%86F4d|;4n(iMlVH>Oa zk>_E@q{iDFY}Jo$D-UN|EqeR8X>hf1*4qLX7tZQ*&*7gjMso${G~E+#=5OZb?VbX0 zZXP;5-<+ZwX^4&P2#}Hwy8H&Zupz(uUsTyJ|#E7Va~G7JM0Zz{b%i` z^t<&QGV636u0LVyaBQRe)xol+-JkcyI2>B>Y0ThRai8UPCB-euN3-`8%~%t!WjDw0 zy+i#q@1kk}i<*~4J&NNJs?9AA&il2xcT!zXZBuq^a?Z0|&8?Hx7Pa<{E?%#}ett$z zZ7}Wr)zMS?$EEq4k^j=0D?2SF^0{RGk$oaxwW_KzyB5MhuD5`XkJ+Y?q~rSJ^$9%{ zNvX_PM?#06wplJdK3F*0$s)EgQR_tasS($dO`URO;g(l9LWLHx9KXXl4y+|V*2jN+ zdDFb6up~w`da^)J(Z#pYsk#fp%e@6p)kU9MGrnm5k4qLa8;=e>ii()MGunRq@*K$@ zwV`$seyjVGt;}8h#w6sjb>2E{(Wjwhwl#%{we>YW-i_rml4tFq_k91n=~UsxVD`sYneB5Qr3k$6%(udlraB!v|!4){jQ}YOSO-# zT=-R`w)5VSrI%KE_Fa%@y4t#CL5bOh)Q}}j&)!~qXKSkWymIFE;`xvKUcNhXX1yaH z-;2^3jo(*Azn5>jEL@(urtR0KYvB{Mtv}xV)5Fx@ie&wbb`h1jt`|$2eb>5fQlDHG zl4_(d^7-lazBa4!{gy{yZSuW8^yr{X;*aMQIWM|Dg|zsw4D-IM-V%9X^0cQ1-4bfV z`J=-Vnq`JdjU zVn~yM`Ax$Ws@0O*($}+BxhkZ6S5{WutSs45o|~S2MC(si{aTlFm>q7e=xhBjzj)l< z>v|&zM$OW{YtF}Mi1-$3ExpGIt!Pi@j&%Bd56GUMIOWs%FGIr#&HcW*`wRjaV3P1<3NiKFLl+0~CqpV1KHv;VLsqfD%2=I4f6!2y9%8{!Qd z-rmWMjNDw#lq!>Ob#iL!>=Zcw^WlN!DVtYrFCSM-YSJ{nvglY@_x9+EzP52%C!Al| zRh9lacT1x5b?$@(0-fj5-L0F-1TTLtmYtauxo2I;<`1q~?H?6a*54WP*~Y)}%j)io zeSM4?4>f-uZd1{%rmBS8;w_f~@`l=P=bq^;`J_7O+IiQAr9Kgt7oE)D{}qTm4GE&1Sn4`KH8RKED~;*hKgnq57c47jOwNBB@;h<2d&PXsjId+I6^(uIhjMPb8+z2} z^{eRTr*WZ|7tU1g{T+38NH;^lWv3y(wlJUH$jh}o&vS2FFw{s)o_B^dFpra-BlSCW z{aC&&UeR8|S;V-MOT~xlWzUX7Lq_efgFMG5075n(l*tBLVD~?{|WNOQI z?Aq0_?Ut$U{p(zVe9MD7vnFVZ5NtR*mhre|MX7OWVeBVc2EH@G0L} zpOLI$9Bp;4NMo~kb-)|VFTR@b)}4ha^W%0tnA5xTu;xA~^IkrWaen<{R&}QM2o*Uc zeg1yDD82kn#GY-^11l7Q*S2_Ue>7F*Wrv}{-cRdo*V@oGyL%D#nXeM{>w$_~YW4qb%!`d88kMb{lFZM@gS>#t0UJQyJ?zY{&y{xWoj)6hQ zM80Q_H6nfNYD2U=1z*~Gjh-6PY^rp5ka*0oofss|b)S4r;OC6h0aFtF`KOJ!5< z9;04bY`yn6OW#F8uip|s;=c2lJ0PSap0=Z^rQP z-4Nr0(QeYrf9O0s>}D)-{(LU2Z-h0kuih{^;7;14v%*d74o?QUmtEhL{pRw`0;!ze zADHd@-c2nhyYCwXK-<;-?4h`QDu3bBP`9;0Q*VF^<9P>S_fgQhl2k)=TNpm$* zS|yWrLEr7!*aNPGBEG}RrJnH@3fhmW_hZKhdn-QU&l=;hOzN4ZPHrQ2+U(v2o7Ls9 z1)W82x4wOun5pM#kdffE)q5sq{e+8B3flJLn)&~HBjtnoXG$%_kAGBN@sdkhm%D?* z*UaxPQqPxv1lor`hWx;f&0L*7RZ1e=ElSy{=5>Ggr!T6{wp&jUXe`GJeKzQ;H|_^b@&H_>Nd0m5H((L@)x825vZV2R z&<#Fl^Fg2heDr5h5!3ARV$SsON16A(-g%&NamK9B#s`Cbg*Us;?&Du>ByA);(gNFD ziSW-xzJcPmoI&LgX~Acn5sNU&|&eeN-LxUECxw+(U;yf6Q*a6Mueq;_GBN@O90rJj0|+pl9P0 zn)%_IpmRhE`D1=c8b7L;^0M#D_5#NBOO_th!Yu26rMDZ>EEN|ozqn}}$8)?-_`(LM z{b8WeD6jPiTDZCb6&jK^gDz(IHvYOyZ}pCPyH*WBy^>@ zO8l06GP#T5V!S>r*evnoK!YM@M|)q>%EK!B;L3wxqjn>IOzYSDhgzJF^^%(2sv6-N z72e-?H+jmTxq;=~Y3ugb^wm9>>K`;#E5JqmN_FU~bRU<7z%JKy``GPj?rpul%=h+MPydb?)tW7 z;pxR5IxoYoeg58Y=aSsXMn10JivMR^V^)?6&-##|WW3Qu?Cc|>CU(X5dn0!vrv$6E ztZi#74C^TIICe_SCE>Vu=#<%|8ebinGYSV7rJfgjW@=QP5i7Y7IjH5Z>r<-7OOdLj zgZb{J`Ew;&cE@#^%e6k&kDcr>?meFnY#hz}#7tcVZz#VR${fk~ooQW;RnIqjKYn^% z*7;sRl)NgH43IE(w$Gn#iZS~u_ZBg#omZOPv=co6tTO`(d zttiSgHOuj_iOqtbSs^8AN)!I;AELrJw<)-6zxl=$5x3*z17sDx>+k&48!YuQSMKzc zhLiPs^tY_--Q)9Gev9$egBOav2weB@Szfa2PH+DQ$NUev9eutx+Rg^Q+Q)uydpa@c zq5CkSU?LO0z*jbJxI>subH$WrcC0@_*^THCwsL`{~{>v6OzCBF|DOT>d;DQ+mbtzknDE!4CKi|5 znb18Gh~MS=;TDy3e{IJEzW0p=)&8*4KbttdYx$UaTLgYB@Sg}1@VqXup@itcB#b_2 z=bd#$ETO0O`Pi=NCA=tc;ny8Wzci+KQ}#T`E>> zZ#LUrJZZSB#-nl1mA(!|j)ixtTu}Ui(33a5Iwq(od-uiU6ql|1d#h~gEt_EcUwhGX zz;$=E@QrE3Q{J7eS|Bduoy0k&W4Wd|W5{X4?8rmx-N)muFEiZPaOR8Wjcgb5utQJE z^B#Z9)4Q|0Vspo?7yHuc_3hu@OI7D&Wo;-fV7;xo{rE}B>rYpAKiX%o+d408ji~8l zx3$9UCZ7F!w^dHv_5IYJqk>pxFj9WRQ%!l9>ob9H+cR;FWpQdRa)mPs(tO?GA2;j! zm_+v+RoQ2?U#2`za9WPRl`Qq`veiqqUSz#JdTPb&2H$Dmc%7HIpbmLo>kNq!y z-&_0|)vVVoZWA{aw0d;u3iD`8o@&5{ws#rKoo<%9F2odQ^7lpc>BywToYoqS)XELl zIJ+fxl;1;czpIqvYh{P*xAYm0O^9vo&ocY#NR{PmIoWvnXD&x_w^Ht5k7F_gaZ-;< zzf_!v>=4!*_P)R7OZ*91PeZ15r26&OQ4Lei4or@sJ<4%;Fz!g<5sz!DG)*6yNLGBf z|B`*fAqBSU2&3u$vekW^y1>x4V{P`YkD>{Fs-mZ_YqYF#e-R`yIeN%-dYMh(55K)$ z;XYHBY}>gZFMJhE@X|0Rw(#TboZvB5Lv?jyea5w%4BK1wk2|11?$HUv6#)I6`!(8I zt?6-7n)7wp2H(Dyt`jUwwWqIC@nRX>6s}Csdt{e$BU?n^bu35k%5dv)$;0~>8!lAk z_UBK1zCg`1PRCUsZkM`Q!%WQ-eX%x}>i-{gZy8qQ+O_|p2q=OeA;^@Fl5UvNUDDm% zHBmYQloX`9Q@Wc;3P^X?1f(0J8}<#ZwVt(}=Xv+>9{a!dhy6(o;F#R^72_J`Iez1E zXSqI&E-TN-cRb0jk1LTlZ{jO(!2a`3!lkOg|HoY2t%)+uMkdCeSqh(R6sX%) z?-4&A$p|FBOuc|V!4k#+~7~i@2jIz z_JJn@p6e>#Bh1qD{4Oq|aD#zw)EgiVprq$GrlPU&gw+?miTY->kvC<9^lHEh2A6tb zus&<-K>83EM3&2l6T~PTIJo}4yX;OK@9HtHMy-n2f@}G83$qulgZuLK&}h5>u`kk7RzaUyRzh0 zKGK?-spRDO9NloGncU*Qt|7@l=9+;%eKA2NsiQjH8$kbua#`U)|7Mc;#5saPN;1(& z4?ibZXFtV87G6Y?jtrp3ZoAo%APZ>0cMJOBQYeUyQr(5LSR)UWjCV9r*T8Fj)^ph0>1UGUP`*m>H|H>Z9gdej-#*yn_|(`%075_UGqx^(W{+tKl;M^o zv_^F*@-Qzj)I~hcUB%cg1%|ak6FQWN=^O8(cy6)PytQkH{Q_&XefQN?&IPkv5E*M# z;K9>R?uiK-6wf60+y>eNV@JmvqHU*{dbb>P*+k#yFvOwHBoi3E#XuXiL|;7tYcCed1bKQXFD`n*)DN)=M% z{W)spSBk+|?Xqudc@^`ly>opDoxi|tJ&(9%8bM9m#zq`00O2kP^gg`8O%t)BaeU3* z`(+s{0Ku9y$AI$N|I6sReX_uFXY}d5bw%A=;5o68`Cm08Z}U0i zEIalZVh*;uTDLAI5H})0W!og$BGL*EJzmWs1z}{ zvtVfLP~W)jWq8gr9i86bU$$B1?s`l|_XB=mC$rrDoX}c&fNCd7ZjIxJE?*%9=~!RU z+z}Nj_vA1vtwof1M*hP$IF67s>xvHP^9zS4Zsp5lWw$47Hs9mlzz#_Y#VYBW37!&x z`6R+Xs8mg3GPqRO@**MMaR4s~S8jvFrNc)Yrr@Q<8qH8?^>PIVj{7ZmMDA7hK-s$1 zM3#}|hzqM88DX;?Qk$n}4P+kUMH9Q%w+9j7j?aCS5&7Ybe`KFA*ie-%-rd_8y&Hes z=WtZi;n_W6p%??w?>AQoFVuN!a?2p`Rp#XVZr=yuI-24mWQ#56>+S`i`C^gLj2Hp6 zh(2J=;yQAz?eUT|-ICPs%tjSSX@>S9LcX%IkB`?}wyUp*1ldP6EptDc{>a0~O}#WU z)i$TRnGEvu5aMdgq1d^&xP3cF)mWmqW>$SbVp5g8K=EMn48A#GyEKXSX|V%bAv9Y_ zO`l6wG;i4hS-3xpeuu?xF?E4bUt#v%~Aye&xO*X&%x~AcPs5XqY4qV_6brc`VfXmZM-&rG)7^v%?9x^nKCcfv6=XAHn^}8GhSK;qaIsGkfB&a zfz-zt@g4S~h^=PfY?<0t4@sP-I4@s@NhKxHm_F(%>C4f2nf_~Uo7E`rFI#y@5@FOC z&Mkv`yfP1#1I;#@J(s09 zH0Z#2G`Ujug9p1Gyy4>7sW%;m$uwI9@tlG)W8P{h>~EHs%d|;#=3hh-)ibvr6k-9P zbnq=y??*hA@(A{0%<&_|-7>7xOvbBrNeU{Lmu|*u12-8w48-e%h}_R7=)m7zy1HOi zyf%SmqJGgD4TkBN2~_fs4fkFrE3U@o*Q;x!+pBgLiJ(Y4|F&m}0ZqGrf7gN{wZ{n9 zz+|PCew!v(6~Tw;=bkNBS62^jEPNLC7SHTAURmp{ekJtnlVR!*G2u;A9!wI32&>tR)ZrO z>@=kYXH_zdcQ#KQipYV@+ORD6t*N2;lK~Xa@mG`Bv$)bcCUm`)){`3@m%^xX?(FrT z`BId6s+T_Tm;nbQSKFOQ6K^aYJ>Hvs%WPAeG}cie#(Z)@0z%=|(3AUtFrc82f}@x$ zYZpy2RArYKus(#06W-wAMvheoR8}d>+#)(rU8;{auJY&K4nHni33Y?kV^${0nMQgC z>rt{!Fyen?p>{~)^b%q^o{o<4=$z?osf?i2VwI_lI`zdG;;tg`S!H>BrUuLU9BufD zfNxe*X2kj#*Aj?M+F(ADsG4UuyMKKi?31ZkzX>tue8F8F}fRWd053Aw-C zME~?BqL&V_ACnU*3sd%I?zbjSB-eH2o3X{Of{70s`G~?dBSCF)5cPZ)%cC=kAiUz9Y{I?p0ghamKX#Lp))TpRYSyp>k`mAH$D zc#9ovhDhr(qsUQ?HQ&u=l+?3b?b_6I?d{rX%wNPE zES3v(5#)qMV94VKtz;_6*x1-u@0s^3@$^K=9vckcn-OoMAp0y5I*Z@5(W`!ox5?ny zlC>0lG}lAbIk09d3OR=*n@`%Ck)Dnb7Dp0F_BZHsRAyoZ&HFrPXPp3Z zSfe%`$S98m;yn!ZzYqJ9<}QdcSMc9nPP!?AGs#er5c`39mp6l7_cb&ce)GGy5q`v9y~nM0 znDj9>_=)h?Q-$EOlS(;MPJ`oQ7YgWRpV7Q3q|-=>1Po`YjWlR%f1ggThXB&#Q?&Zs zsaGzP4|C!qv71wcu#C1ONP}~HnW>)xaMa6Omj*CUM#gL z&nvB-ld_2e)Q?=h4E|D?!uvLXE=%^4~t<&l4pB|KcH{XnO3K`gYw6 zNa7#;OTKu)_y$lv@rtIeAp&2($x=Old4=jF=*+kPz>vbcc{Vo zz06rdbb-K`IsjD-ZZO=v;o`Of{rpuQm_oo2zJJquljpaNg?r_Hr)VjnfLG_Z^GJ51 zJ&9szU-7@M#(KmrCyf5c=z*iegHRCQ@_gqU*>v7!fj=r$MjulEan%fE4 zi>^&4Wxej_O*d7Fo~e^ZaSrSLCFT*k19qu`_s%V#9syTh4&mNS<%6(5VH8~)`#uQJ zJV16hDCO>EzNeI>B2*P za<_Y4C7c$=*6E6T-i7az3o_$O;M zQw_qo4?81gJI7E(Aw1t<6bSW_jdi`Q^=R%?v%p=<{|L>;(_^p)Yn~ifS4WZ%mLn{m z1-5g(S1MF7;)g|&77_{*gZ7SP$WM`N4IG2*znN)d^JL<}rGkyp+8xAR2s+r-V8m_i zP5)*UqGCu>*mE@xo&odG?&?XQXXa;~B2_&5QofHKy5@^l+D)dDaaRg3(gU( zn2x7g;bhDGTM<97H$NxDB`0?ksuF#P-w}H|5c1qysKW*)yfskFon%>LsE|Aiq-b*M zw11r&tmtWZ43GwgsI#a~e9I?N33d(WaoSXU3R5tRiBj+7#D2z=Jvp3ysl1=Ce*ay-dDj?O5> z?MwuyZ8FI|%ji(X49;n(0hY=$Zg9<-@9+}?q&?xaaAbt~(S+tSdQuy;o66kaULMd} z0Xg~9?9!bdhtOePOPwETWB&S_?t2Z9CNc!t^G$3NzVkrw=YKCxWN=<^(by6LX^xwC zdj?%hQOi?&Ymwc`OP>ll=<9!(eiF6`0Ii{xF|gLw>%dGZhu_#3i@&fYId;`zxPJbQ z448$D(i& zTbaWg{pReg)Z429ZWPbh?nA+f$Wj1R!yU(QNBe-7x1XO8TWAoHP$h}%)iC(GnwKaA z*>5TY$SFP;OemAxa(L{i&#v2txqBX_{Oz4Y6*qNm{qjx>LT8XMG1%0*r%Xt0tgYvWBIHMz@e7dora60H3tR>-5~k`wKZOvL2dsl_0l-AZmLd1HbqyNPYa?jpexU;4cG+=edTlS;o zwbm@Ld)!iazS<6&qn-6;x+U)9@-ED&(w8bSC;^>1)7nQSogE zeBok`n0>MXHLs1aYy1J#_RG_&vvEbH@{Yx`rdud@ysVug2bOvcNMrW|yyIEM%_fqq zxXpnV>I6RcfHCpOm==tutQht0a>ww$sgu^cVucj>KrIBg2FjAzG0q_OBMa&sL#-PHKGHSDNN-mFul% z=AQ%gChE+RmVUwFX*g*-T7)8Z=6DkSkdJArdQ)%JXD>-f$Gz-7BtqFL2i)BTPqkLa zXyo+%Lr`cku44XD!|Jz_t}PX945USsvv0HtHG-77 zP-A5BiwzW0t@rTJ?vy&u58zbbO3q zaU={`ggsk9Qu!VFNT5R{>6^!TvLdVFbDKA7s~IhAj1h^hx9ND%>5W@S#;O5Q#hY7` zVe>gy@Nn^tYVXf0qIYsqp)^jts4sg9oFLQR?awnM=H!5g=hU<;^1l-zz5In+6N$2s zgbOC3fRUv}BH}dB9v9}iQ@}GW9A8>ZIHkKjg{(nL=ad|OQJ;F?onHRRzbbP{Q7A;Y zCUpCHi#g5Is#RV{dm@htg%9^p&mWkx3CekNk$9DJXqo%uq_*Y$qHvq-&EKKtX{E()gp7q%ILx@eTBNTyqY#EYI1V?55R~0 zSu$2W5@7Gv>)e+*R5>^mDm9vwqd>x8 zPqk1-%>`}26TjlD%y!^gwuV9KRrDXRj+FM;vZy>nt2Q|xBMky(T028j;AI;g6T-TX zP2)=Mw2|*q*~3b+jNhOWF@Z<2^Y~wg)=wJVST;t`k1?j@xB%(ud?Q<4nr^|I0vef0 z19ThIg95TyV7ED+R%4%J6D7(>GQY^v8B=SjCut(qJhj8JbmhM+AYqg?!(ngR;j-)H6T3e7;({k{J*QDnDptg&Io^z(- z0I~rz6g@oW>-dW->s(T!h`MgMg0Xryz3rB&$Y5SuAsg-Ww<8B@1{J$t=S#ulf-;!y zy`-s%#;H!&+31wz`SgdPsiYw>tgZfvE!FVyPd#HA!Lag0$3ugPU)J(MlJiJNbtUHN zk{N&9ni%{JxT+8C`%BK>E97qC<1s!A*GeBj_+=!Hvd~(aW^6OQ5m8<=27nSSLcbJQ z2#(!;aZh{$pfTr_S+z8Qt34}aS3UF7gRTXxq%Mc67R!i3#?q0gS+Mn*b#qIBk9L#R z5=cz`TsEvU+nZh7mo2u6DP_y&8z~;hTy`hws%K+fhdeCg z+aIlQHq65)_Dvki!q$cl8B1eS&<=SSLz(JZcxOoE7x6xJw(HBc zGFC_g+K&&JHgPO_-4#_VSS40O839L8owSdgvp-+~%Ib5e`}u3y%p$J47B_K41t94uXy|1? ze&S%Ku@%JJ%W)Gt)V8`aLd4vG8yd4h8^K<+nYi6rF7361{*YhgWRBV?ih7=;u-+p; z)wMn3AGH*1adr=sCEoQbO3q{jyG3D?#r{X09?BzeV409(pu&;?6`l!w8cgE z;oo9B0F?fnR{&=(Kd>UQLG}yCe~%6%R^O@Y+O%{&=qwMwBN}6^k;5 z(L=rP2GND7w?mt5loDLQTWn1HxU8q56)k*mfPT|JjIe}Oig;p*ps@HfXvH_L@RFC2 zafi93uV$xrhHEy1+uSVV9grGcq4nBU5;$|nWGO+!zD9&dmAp=Txck(62Y?EA7LAr! z$bNM!;7g*S&}#Y7H^!>%utvRS@0jYxLP{wK$W`|K-xg>rTt?BQIB0zSQW(Bk%Go?< zn{9kA|1pXfHW^3VNfemK>RsHcM(Zr1Brhdr`a+%`>`6H?oNqs@CUtW~%UTP2Wd`|$ zp0yKMGW;BExWFq}gs#WlQjUzV^92=m+D*p^L8eHC12pZ}*~lEKcV;G*JWY!=pFAC~ zS$b^dFR9|X>D~aiwl+`-J?K+@2GNxMs4?~_|M3%3z&3aF*KpBr*>jaEaO+3)WH{8u z&$Q@A9Yc~pN3qyzdqbk%^6a8kZe4q3gw$wNPr|X!*iv-Qg(e3U_wB#y8ff>L>bJY$Qbi4n*1(i@K6Y>tsL3#P?x%>5_c<*7WfF$5BC`s0og%M%o(U-_XXK z2wF`DgJg$xzRMn#*-etvlI!%#=;|?-?j8LoLk35!FbWKz0V|X1c?&MJ@z0ID+I2cu z9laI`*KMWbe%M=)AVmCVa>a1ma-|XJQ95u1Pq88y*mNi6hXq|zCcVS)x2gkZ56-%I z$oRwzI`nm*&XkX2sK4@jbRUg6sIoF!5h8?RLO@`-Qp$MKSj7%*ktrlx60_a{sT1WZ z{UKE1hoPeX59%fs7j>DkYIFIR2gQ;V)wusz7)eWi@OSHMDt*QGxrMxHl!f-(u|GhQ z%^U2qKU~4K`Gc4%^9WE?qvQEQAkjE+0Wj4cT}?*@s=@3o21Ym{m+WC}00lz3Lm2^jsMhRL zTBvD^pO|UikE*uoAA-6rC~#mA@h`O@zlBkkgAbL&SHe&RSj603Miq+*4t2lGZI=|^ zO!P1qewnc$$T%I6WrFj6f?R)|%z4)c^QjWL0miys3=la^&rAtO zTI>BpVUi71Mk|B|#_9i@)hAH76@9K{X3P;i zR|O#(H95^e24;b3Sm=M}Y1aEzd^ORzvr#LT(#4V`6F)@n2%#T`f*wtcoti4zwD`2S zy+qm58c@Ux*ff>F>_pw@`AOevW+afY+}8YBa`k7!M&*Enx`ZoL7b=ti@&Rc~TFyP zpW6zX8jJ62i|Jo(q&50c@el5}%1nNIqmySKAa~pnNz&+MrRb<-^j9fB5kdjtW7!8F z*5B^svW1&=!h^e?x6q{D$N zW@2U=$WaHk;ed4a-n$><`oA^&0k9YN&HrP=|FP#!2<3fOX~ke&Cfprq{&OJguZK8- znd%z~GlE3kjwlUSanLEE?aEMz&kRTH0>m^#t}*pjFHwLC(uM94X4lNeeAc?1PfN}~ zYX3739~i0oL_a42p!@+)nwOD@5X!r6d8fk3;BB^iY_XZpm>C`^wM!*hs(kp+yY%UdJjYG%^DgJKCCQ$Y*rD3_ z74BLMiS{Fp))8P z1#sB^4)q6R2_;q(VK!(Cj$kxwwElXrjM#NH!X5Txe`w*2N|5ezmSU}ecZ%c-(K;4+ zJuRk<2W$UxzFlzO-|DWx5h`Ah{IUzU-s4@F^hZ5@2)Fr4SiYW~ip=g5PIAUYB-wxr zaOc6#wDO6TmSTd$(=Zm9Iknymb*lTrtTZ{tfjmL=iAEv&0fc8^MEmap1A^ zJ0Z_hh!q+Rf4lrt8cY8u5eWWsE8k^^;umZoc>`LEG(N77oaYu-pJ&~#)#ajM!T{Sp zN@XHF(#zdTQ!Vc~jpEks5}PoVm{PtrE<}H7peIg5)u~VCR7w=SC1)+_p&A>G@E&ii~K&770y|8HqG&gK7U z+N~txyU`CgQ;-INTW`!p15eCWH(}2lx+#4oCkdKj?-bniE(StZsBAWD@TNZApQw{= z5004^+PAhl4K=upw6)NIjicgl3sr?=F?NMmm#&9waD~#^)I0lyEwxD zzedVhBGEUiF_PhHI;=;D)$_n2`Tamh1=DsJ$FZ|4Jz_WRKk`hV>;0=6o*X$=MYwBk z&!Abb2vclT0wKxre8R5o!4v{S{NjW_a)5+=820nE5*kI;@}( z8XJ9>WB@|g866lcW$fIg|5zxp@u39}n@=>exa*{uSFP4GuE z(btl`$!q^)oPfIP-;S$I!>2JIl#$Yjyg5$ccn_12vt$R~6|2f*n>tmpm%UmlqydkH zY-iMNPw`};?NjN?fq7_SJe*ea_)yTL2PBie{C=5FqDb2<$0{%@dr%7pr~wJAeo3|; z-($V;Rf{{f@Z;_Q0#MpJKHiMCHCXTGWDHYrbl(#wzgl!M7AFIjls%0j!Ypj0O;D>~ zGq;e*g?*vx=i-{|HZZtyv$BPFr>OI`hs}+HEBKW2VLuCO$R1a-X4;0lFAijVeM-0Y z;dQ@6a8Phftw(Y-LaV_BJiaX?vO8!dH=Epki;a?$wye=ckdFF}?jApKlt?S9S9!Cn z6K878_@AAs0>b|gaAiOP56Sqq5~_*%`Yp^t3cALQMcYT+)XScspY68xT6>n;Nx}~F z8yb#1iVqFx(N2s`V8`ii|G>VFlXELx_{&*2pQO1XMlFlKHX76SE{+!D!b- z1Ne*3(5vZXUls!yYfrXin(EQoA3#-rPC+!vTj_UAU~IZFcwCRNZZ2Do@)5tS+OJp; z(`2p6Z;xJ&^0!C7J?IGk&-RKSbB|{5I!0{z%Soa@jnQD;jc^bdv{~>DG&hm}QGyMp z{4PdjD2h+U4DbmGx5bJyAn1V$*;J?!8^bRo8iJFelaH# z+fKOWP9F9_aLU0h#Qs&-t{&y|v;rM?`5=9UN1E-r-m0Pt)wwxN&n|tSQPRxnZ-kKx z?z7`?$w;|r%Q_1TsRawo41b_X7p2w|JGnWIlRcUzh!!Y6 zJ#t{qMt}4d{{uhLELyIQQ_Czys!(jDcJ5anmt*?3)GSq60HO%RMf>;89$N4>rd=ss z(H6_W;ZP*;t`B<6Ah-73C-g41KtGnyfSKS<4Mq4HOp`<-&gVkh%ZU6A$J}^PiSPA3 z=peSbPB4#or*lk?=mKC}BNyA~mvN6vh5i3X-@~VOd{0gk!-0F&V2jW4lF~0qBK@An zRF%(m3av%0v)5-`bq) zW|oRwF3Z&gEIIgP-+Iz5SYWa-X@I}rX|eLvWFbMTJj%3`+L4k8Ie)0-1yZ659c9z8 zIqi;F4Its376(=nO`jLucKgEg=B^i!B}&qnr)*$TuX2ktn#V0=jDW5p(Ns}vs2pNj zi~S_*r=s2tWB8bWx8I?r(cxuxtf!5be%JZ%ODzbsiZ20GEHYIRS<$ zAKG&J)N8x38^L{wgcmEcvf)*gF)r&!ZCj82%_}AaIZvYNxYVf!cl^#>XK||Y2}~9)6^BJ0LeccC^S0WNKvxcbi;(C0 zix)3s;~zg{dsO!$_%kjE-bkQ|m-cbq#6ux0egh#vED8N5`}+F&Na>7^gc1Cak*SD< z`BeG&p38lsv-~_;exA_n0TP?y#tQ4aa823kB1tH>UG1f_?XT|zd+`yWcwqYI z(ZkPt!2jbH8vT&L7M>Xl$HIyCKz9`pZv74^QZRw&%KmodcZKfl_#&Wv8BjWRgplLC z=Bd4F3gf-QgB&FIi8$DkgHF*OZ%2FbrS1t6p|8Iz(Ljcag+AbOTylxW4sPf!ZlwqgZ)?D${x{S(xqRuU@%obGJX8Qf+TcKvLul#dH zVbL1|yxL2Ml?q$sq6Ozh2hgnw$FU^sa-CU&dFO0uNBNy>F#vsrK|3$C*`fT=-cn;* z`^`hW9Y!nIW0e@4sP8(%m!$J}su+>>$gOP#88vXVM7q(ixZkdJkK5jm7dJ?$C)An5 z_R4)stAXR6&c3!ov|4#g2Ezrn`W}{ENUE0IzKF4;0joA}V>(G$^hoj6^mfIQxxvrc zjh6i)4l6K5YgMV8j2m2Oo2=h;CoK=K%#`+o5pumzAABs(@evjfTIWfA8{ueMiCwN` zlX0g9ftLUV6j)L~?ZGC48R?RBO6QqzFiP#4;aGMQdWTit94^k4tiVa`rHU`lb$)bu zh(Q(9C2WeFPSU2_;#(rbI?L8?W0`d>nItA}HmR2p^|lgvttr8X=UQTQNnseL5x0hH zLnijbAp(#u1WAcw3Uvd$p9txGv}v844~Ct+DU*SoG;b89AowOiadA9eJI!ug2w8{Z zD=D&K7(?*03fGoB=vZl8E)AT^;yTZ$vl}<0bbCNi*tBRsvob3WM z=+Kmn*D^UmEh>0Cys@3(Lu@Il63;hm?2lWW6_;EJJjvuK-qMEZ#bH4qMqX|rw??2_ zZrCTHiav5DAMDXl!uccEz_2{kfboEeW#~T zQr$XxtAsIXVmk0K_HkGjD!zir8{7Q0QrN1Epv7q8B{FJTkV{A=>+U*9sXA1y^<4k) zh`TMKQN|$#7j1>#cCWj!r#bakWaI#U?%`CjUxND_)Rprwoay~xgKW19 z%d7PJMj@}kpNzYL%398i)lD&gO~5zNg}VC73aS*Nf;uumjGF~-IXP{r2lq?y1mz+X zRV^f>q1he#vI~bA?44-kWlyt;-x%h4yIUwB+Vt353nC`^*@0RhqKvu!JZQv7`hurqxP*wKhyk&zQVlx< z$_Nyii<+c;l`2m2=WN1i%PEpgXDz! zio_MW&OfN>;8UO0m`D^pW@1APy}>JJQrZ*xAuQTqu`v*+OwbY(XY!4ERX44M6)Km2 z^R|9vLW3tGYh>BCs%yp%qsim6uNavCAeT^UBY>W8U=!CKq-o8aGWl5#xT3T8`ZyrK zRWN{t>GXf#oTD}EIFJPI5`puIXqeK1IDhdK=&yQlK+`TAoN_-FXt~)t)5kA0`m$hE z+IUHi#$<+vWA@jwH6nNEPToc+KGE7Mp!s0=NdNY$7QIYgp0#hPp{?bfF+yNg}N{=KqsRbo-MmwZ)da=MPs9)n2Yy6$_UjH86I}(o-;L zKnX~rV5w-6k!iTW0Z-8avyN?=`Yog&B`9l}mbH!nHQUq4&Ka(}my&(a+J({Lz62*4 zOg>kUmDhbdwVh;y_@Ds-+maFv`y{KwugqE)DpHhST=;8ia9&eL!OiB1Z}(xqm?nKn z9uHMuh%;Is2Ua5P8TqMI4_-qs1D|rK~(w@S@C4qE+Aa+H(cz zyeLqj)yboU5<%#R*b2QZN<{}-Z%qzmpSXm0&3n5f37O~&4~({W&^zb{*1gfiFcKWU zwKr8jjY~|<>Zy>S$xd{7Tk@HbdY}m}UfNUW1D0*JJgfEP3V&(Sjp=@_U$VGOo$^Su z@OOjQY}5MQWwhA-Tt|8{t z67a;Coy?!PK*Pu)pN%8My4m?l@H`_JAaF}9;V>$swfZr4#a67CC*7X|rL$kd&WCFA zD7h(WStBirNcB%(sa%w}%S-rhsmi=ysuP*5P5ss~rji5XM zW0H6vr#z{0bt(mYb9wbiXcBus90>LmA~J2zXr0_c>h9#^$!0Je7hsZNd+t?VkF*km zgQaC4b)>MG`?$Pn(oD^z(uiN~*o-oX7@Yh$4#bzSn>O(zDfvX9!#!OXor9dN&c+8E zt!A)#ch$sCVeX2F(+2MajSj+0H;%x}Or!Oyos2Sc9JYAePbxRS5LK;s6e+)PowVy% zD+L0Z6D4N@n6NG~ULiCFtE{3}ns8+m`wB}(W16T*h)(VBS1%LD)3hu#r=eqiIdLWo z)KRWVhqPPWm}+|1%%g^J6a0DMs1+*kL@kPdW%f&IG)TYfpe&nJkEM;5i<0vVH=Skm zrRDrt-boKC>x3{ZSW%N+$&G^_SR8(RoBYK%cmUtt?-6ZhTapAb4#M6$C zYuoCoI?FWrS2mvk0R@}Iv7j)m7vC%)@I8QS2%N7u4P}()i-62Fa8-li>x^2(M3xG5 zV=nseTgV^N9{SH^6R_ZYsOF{>mbcv#4Jpk+$x2fr>~Q9+k{ZpFlz84#&2jBK%ffli z6kBU7m{t6&58HtclG8}{4w|;=GB&;j1;XfyhE7e_pS1~N12oOiuczA~CdprNt30jL zQrc|YV0Ca7lOE|a0&aNeJc#X&0>PQiSsf8J{Z8At z0r3DAKhA7dU4aER+7m>V)?gzzJY`0Cr#OI==AH}!6d9n&NS51Qs+_~@@jEVzp6Dd1fC1Ha0d=Jf$V@L z2)Np{-XMS>^<0Yt4Feq(fN(P98%21O`Wzkjkk5moeCo*Gdr^B~K#|7u(Wf}zl8b!c z+8?PT=x2V$`&$!!%M`df$@E8y1?;}X;!bP9T>~-_Zju(^^LNjg$BzIpm3nz6pkARD zuR|!|07>SQSyQw+4}ea0dP;j;hm>>l`XSseOW!yU{c&&5^i=~%?8yu}Yu+tbEvj~F zwo!5liaM*$qU$lNT%;nH`z1D=B_G;28Aw zJ2`P|f`j8q;D^{5{1*ikq>Rpewp-~d^A*Cj4S$>CS7yAF3Hd`wQK51EFLV@U`M>KZ zUQNhFvyt>Tjhd8{DD6{vj4tyNhL4$Flb&d42lj34iZbPQDsPf@UN_sOBLorI^>!3K zhEkgz@H&H4G#F>dz+ylp3G~lvi-zL7uH(1qk(fmhXEDusU-{C7g48dp3E$NNis<&R z%2Db`?cwK3;yCe|#VJ4IQ!`|li@pC@M@1yR-FZfufsHweHp_Pn;owa4c@0H?6!<_Hv+$ECyxE+2vqWO%t?D;9FiIXUALO%>PIJC zmOITi8=h<7phf9$5Qnj~oAZvGu(PoE^r>yZ#(Gw>ga`cCCgXX2K7wa$ZEbIemECX2 ztpx}#m%hjK%A{Av6FO~~{`|LPda3(x-^=5+o7B0r&}^tI#HVC;9oEa5UDQKCTJ&Hs zh2+jwILcIoH|KaHKByAROn^8|&(^pl$ZHImPH^0cOxj)tfX; z8cr4)-_QGx)*9{7vk%|s(7pOWbR=ReCfiGizU+4{xsgo|$Yh)0?j`8McNRqX9`m;l zZH{L75Tc{)HKesMSWJ}~4Gv4ml}a`e0bw^o8^MmzsVx((>*=YyG`hSMYt9CH>P|;#!5FRPl_JP6Pi2h43d5) zp~p$+E`L;59#*wmB9+*Ec*`^*B8sYQ1LZHd;E-{)noL~JyQ>8P9btgtI-HoD!yk_j zS;uX9sYqJS(job@4+$>0@7rx=!qJuiksJ94(6$jxThG=Mjgu%sX`qujdeT| z*}bl-ro+D`&asES#$TB!d@R-7|8@;59mBpcbLDI3AJ578Di&36Rm97UJk5G#(UGmr zbD*#8)e8kx>V?c*^~w!dMFC@o^so#MNnAT*2>Y8PQ_1?0L%Yt@ZjSJzlQ5Z2KO3_S zx&~Q7S4mm%?stSsIwRQ14-fFXFRNvb)$2+a(POXbldKQI^}T#=ltb8uup?~*kDbS~ zfHPK6+d3am=Q!<_c)}(e9v;P2H+aF)tPHPCi@e;M##ErAQv~LlBoQDMP_e<*b|24M zt#^5mpvBEZ%)`DXpuL2TmCWGIMZ&~m%VoLyfABKkZ)i0PcqWs<)tiCi0VOOPqNI^zd5uRC}A1n9fY+wQ6 zNnLj#!@6T*DAsN@Ri>O;rlIX_h7MeF9(tLr{jp;X2i+T{2Do{?JU1-d6%{;u@X4ec zm?fF%57h@SByv1so;ojBPHkDIH{0%a_|kwlw9RGT-I;~VgHng%v6TkX;7hz=+0kxP z4mq9ZckiU%ZcU$2k$UOf%E%+sgQyEp=KKq=u(v&ec8*#xKZwUt&*+;aGA;36QA~;t zK$wO7%PuTVBR8I$qh0DKXa~AL(+=vt#cz@2ZjM|W=V{w|5h2#>G$;?}?0Z*(XP!U0 z1msyEjbU054>EMYmBe;W)gXq%XDn|5m?M&yoi0TSNGFe~r*0h7@{0X6E8S!(zu!iE zleYQT>JEM;Mf+kayyIEWn+O)5Ycp}@MEynbeqzQ*kgGKJ59oqL#_Y1KBG^{&%saxS z{AHI~2!i1o0B78g8%sP^P|gfJt!gMGN@KGxMaa6>w7?)P`(ErnE!+#BHuBF$B8tHV z&W5pDL62ca=Sq)>G4AsPod$dDF82e%Xpo^%Vs*odW`d*kSB_1oot7&up+L!yM_0jD z|1A|A7eoAb&oxIeE3}y@(YADBj&iZg!gV!hw{S*Qr94w5-zYrI?>buYHLsDCM|lXH zO_yj#dwItzngVGplbNeU$(SEX3f-vfe77?}n|mbrP4{D|&pOeQofp!*m8ouPFnu~9 zk4gXWR)@28zku+oP!Npo`+F;ag!SW;izwkSU{K#d!{oKFE~5RHb^{ag#$jK0D{ZS- z%Tq)p*>ja4@2jRTy<4BHOp`=4^)e0;%rGpaXR*AYC0l42vZv!#3%(J@vVc&mw2##* zd=(AWe3hIssSJJnTDX!HJuE3Ynm7j3=p~6H^Ga{r;@MrJ;qU8!WbK>OMKG&osRFL7 zb#hSQ_-qf&Hp{LZrs$v2uu59n#UKd#geVX<&Tq2X<`6W03{iEe zpaUOC;&iaSJhY*wWf&?wd>gj!O^^RN#!to=xY4Ik8)En*)9d(wF`?FCc!*a=xhNq; zfwY>11gI3;)JGka7r|^^Br)sUW?mE{qeQ4QF%!)Sb`o!_QfIS(P-&EtuWdb{S(@rF zfcGs&JR?^I2ATCZHwN^vjLSxvzK*roLa_))1rk3-G~1!lE4%^!Ktl^6TQ4%9iW(>D zD{gXV;4mjG2ngmFnk=W!nc$!rk$+Z?Vn&(K6rGvbS?wwJEfY622Jtt~-H94COKhM7_0WB06xDt{;1 z5iz4Ic$tltX%;x8Lu6hI3%y22VdP>^37aGmJKd6rmG45819sq7?xk$~eOuryCWI;P zgo3zIN^m!-+0rgZf;kcUHK*EtDzC2R^4Xa=c`{zGP_ewC+L>6H_lzoJVA7T6BXK`! zNQCw6p9UOYaJgEbO~qxzLYo`bjRAM)auq7M=;!ywlsPLY*Xe{khPSiFRd&vae~5Kl zh}S4NfWhKxQgo(@#tSUBAv4NHGb^UzL)CO5(*+ADA8LkdOHwJEpnJ&x=y8`1YF!S_ z4PFmht@_Q%%rj5n4j{vQ5=nxe9qwvN^E--@ocX>#G8)h6eu7sOC+`>vs*g;XO9;_= z*GJhYfvh&Ik{x1mi0mFvOluXYLmX4!>|`8=%Fm)EJ36=IWYfRX8MLHE69a#$p(9&y zuA4&h#G~W;`-=t5H1C3UXz>ss*&b9zHRq|3c!u~z!sN)L2m+j{8Mi9yk4l#-zVTb> z(IBd#m^>c*Xb{H!66VO!I_BwozVj=#e53|#(=W(gT2tHA&u~WbszG^MBVrJ-M;jod z?nbP>5qSt%;(Svte*!MXU?@SlKDDa$!5jF;t+|}(BkWyzjTyLs{`}C&@afAmf?G90 zJ7T62biNRNxoPIU{T&xGgF2Gcu-UZ3z z<>mD-KkKV(tAeD0I#J!S_YQm(=QlSuZ^FNHryIwa15O=qSZmk7bc1G9)KyOFR7tZr zb`BRLSqR~r*y^O$gC}tnD2T*Mg<2Y}y)GHtED>go{}N@}1Mbu0B(M`$j_eJ)_R;!w z-jIko2cmMuDrAZwe8`DilEtkuICC?2s8f|dv6|2<@f!KHxEiuG|A8?$#CX#63SE}ib66p z$rLgxQmIrV$`lzQLP8;;&}52?Awx8ng%Zj9tWDYXd-#06-{<=Mp68#Z>wR6lEza3z z?fZW1*V^l~*1k`o6m&`VUfPm3MeYBcc4TZA!H%CL& zdqga=*ZI>=f7sB_b6Mb~-;tIxwsFeJ4{t{gXG2*c=T-q-k<9yK%i5^6=ESieIG!6etl)q6CI0GZ}{w_=_s?(g-*M( zT`cQ63#NE{V8ONU=YlfU|Nk{Dn6SfPbSlK=b9|3{_Y24Z$4}~`349pOnWl&($37jM z)^5YgKX1wuPaiLy_xyXFr(RQjQcSt1YnfQ{^w~${OT6|b5KEs0k3ai0e*CFr0t`KF z6YKu@-tAQ`+)+^lr3s9=1(2cw!Ir%|NX#gk8RFN%ghZU zUX3(L2kh$IADnl-&WQU^bLF9$Q!1k^YUSans>e(@eyCd9s$V$qaMRxd!7-znt1iRh zp+Y0Qk!A|1LCHN1@mqx$Hp;=lg>g%At!_ax$ey7t_eP5*g^b*?752T?wL0^LQ^uYh z3$4C+o+Eo_T4{r@(a2jV8<&IC#T-SZyE%LfquK(BBr; z`$EDorz4;9_n34@HP3 ztMkV`+a3?jsGc3Ar08oUs}pQ}IFohg^J(vfhXFh@4vD{5^HclOCri(B+6va;!Xb*Y z{=OlPy&F=NsBRxuW3yr7DhfleO)&Jj@{!b5HZ^VMLl0u5%%bhz#YyB#KjtV~f0>@| zv82V<%V4Shfu!8dPjfC*pHmrJGOx(@a?COFXem7%8=I$oqlHHCp9IVcx2)+T&7PO- z(c+gpe5%%>Wscjmzu&H{P4t~FbgGvqeZI#f?Z!V-qOIDjh-+h`Yqv*X#t{$QYg`(! zXvcX~Cq>ZS;SIZsr0_i%Qu5fT8K3uG+u2lYY!hz$+AaMQU1CrETti)+{p&p*w?;31 zpVui9`GOI2Qa=m6n`q!++*_xu?RM|8DYLfo(WWh*S=*y{ z`h!kgwtiWq@I-OsqAF8}aSIg!1R9V3bX#Zyi5I!-X&L*O+$}5pFetVc~M%PnXKfxMV8f% zB)=>4SDHCgA8)HLIl1I=(F4h}M~g0MzdNRC;az9sTz^WJv!ni&K;cq(|LbP^t?x8_ z`-|94_vcxpwzqZ~r;y{Czpxyvsl8TfCNyoQ>uxjU4XncC?K7edD!gyH-_PcKd$R1xMp^SFQ!;Ub!mh^iWQ1LN<3ut9uaUF&x_S zGw@5WY)yKzLizWNn(NXsj!=UIY+MJTdTLfPwD}UqB281u@bg7rY4ZuKVr*U~axpvP zoBBg7kN>n+F-g1LYLI`^COqP^m8`C$0cG{Fm(zVI)ERBgBXiXQ>J~2LwLYxp< ztBpGJY7AgG=U1#fdYpN!$9p;_>vh9-f#YKr5C5_TK!@PJF?KyNg_T0BZFQ--c zSxIN^NtNzN+Y|iMI6B_L@c2wctIrujl+Ma^)J^2@Pw8*@#0uyCZKLpxZ3&^q{^2^b zsDDp!`6Y~o{T4>)*LlkLr}09E?d- z2;Z#dHFQ4L!J4;vebN#COO11C1_%C1;SgQZX%m5VT>gYxKfz%q#sl;1*b9j0(W_$X zyrkx>0sS$2=#sMeZQg}r2W>VRA#Ku#%Zo=W*EMnZwtBveUq?3wxSu)N9>M0Wn=6FEADw%>CcFdUszrhNUxS2(We zqWyz|{NvH$_gCWY^i7=zU}u;9u<7-bGTml=cERe6KP#^r_n*A`Kv+css<1(A4?e4~ zk3(-9eCQL=J|rhr#;gmzI6`6N;LPo!GiDfv{wQCb?7PP2#F4uBJb|GVhA(c6q&_}s z8u<-M>^F-(atE%5%)nne&n>pLc{2w+O0m}LtAF)hFFK0!Afl~e%sJ3-)LAKwl-Dg& z(|OhBapDaS+W{u)EaAK9((TmLenq&G$Q=337L z{ryP$m!sy7n0~c7=0+Yh_WEnj2s7Fx{VE^d@qA^ny*YJcHhritXQk5yjn^KddfPgp zeuOQaQQ+)+Lhq$RR?iozWckV51*cS6<=4y+DbLrpykOEUBq?kDpoPm({cf*8VD*Mn z$+=ChUti{vKmF;jkjU1Ck87k=B@{ZWWV25WM7H>AwR<**B%GCVFf4YE{C+aZJ-a<# z>3;Li^-^-Nl2+$K=Y#l-*Eo7W(1xUSk2N)ZRPa7N*bsU3Nzl*k=Gq6YW@#cm1?+(y zRS#`{9ODlXUAONwyQOW>m4W699{szVbB~!XyzqRE=LgfaE4h-hOqRd767R5n`OOQN zzU~dxU)ZD=-Bw!4hvEWH?JQ7v|Hz~~Ec!xWT~I`*lLFb}eYo%rJO!M ztsVOywd0mR&02f7s;UX*h3PN3+OSh)Q@?cpV< z$}8;+>-IisRv3;6PKpZ{*>d=G{(^k=oM*-4#?|MX7Hz(6-059t;WdBLOV-jfv*;+f z)uK;Q4C`C#)7iytiDYPtd=wng>X={aeL(n(J-gv8$&6hnn0MI9-*>cd5!dI^RY);- z!)}|a9vSHsUbE!#4r6Gr|5c|z>uh|*M%L|^5Ek?!4sY8NQ1`*R>ALl)>bSXjcdXv9 zCpI?Tnt#{Sq58YXhI?K-rYrKlBgRxgg)wN9}GXzV!8VBT>VYgeI~REJyFJS zqcvkuTQb)>ws@t)r&GxFq&E&mzT&efB)x=ZZGpYjlm+a(J`%GW&=f$|8(K8Jm`StN7UHn8WRYZUxCB z4!5mbT?O7JNFUnh&GRYzh>G&O{tmX(-P}(~Zni$C`w(fiJU`LW^RkZQR{O86xAyr| z$)9wZ{g0T3V5I$!$JbvnZtfkS(T|GNtTxL-Pu?32fFloZaY}e(J`$kKN0bsYnM2`*`hZ+g9!|=VG1LWj0wI_N#`jjq?;o zgGbc+u3UTV(cZXA*4Avx5#b#-c)H(*8mEee9lFlRT@^X%KWPq9kt#yb_0sbQ^~y_Mr_GT`(8odLQi|%JQb>Q{TqZBFk??J}`O9PVa*umKS@tu^oh72+f!33Y0xyeo zemsxT99aW$JgT4AG-x^-B&ylG;?xLwR)wg9~ z{SW?kUnDj+e~^8coL?mN@GXDV0q0eVJ_bvE?kj8w7G07$n*BkL@F=;7ujR1ehm#@c zMdy}R96qG?Rr$z|w;yD#%S`)woevyhYz#lvFYYvEBUIhh<4ZpG z_r|&#-2O`fIQ`5UbernZoKHCOzc}h_!-`oJ(9M^7n?u*~=S~gtA8*Q^RCZo(n{mU@ zz(D`~xp_ZyUq3FmGG?C1Zu)M?{wBG9jh&U-cMU9BWmtQV*Zt%ri^lpa$Bwd6F_&nN z`QQpo=D=mgj&EeZwK11BQnSlpWm%>dDmFA%*};}@znx_o&9P4O+SZ%Atq~RvKj>U} z+!o~Lr*ARTxpG_So_``}Eo1(BQ7i5{pLv8u0#vrUzhX;!9>TpZY}vFkk}hG?X*AXo zSIVs8%1d|TzG-SX*4N6Cxc78=ld!?GU?ac57ak!7&rU2jxmMc6$!U1k-O-`zi95e8 z%DA8WC52kxy-Mj<+UsL2!S^feb(;*yIsJz9RTj7EjP&?zo0Qh>(_9izlEdpDV6IMy z72dvz;bd{Ni`VpvRm6kzn7WeF5;`9}?j?wJ%UjpktG>OS%$2x0=cS+I>zAgRYEAM7 z%IcU-}$^2j-_BwoTY9A~IIL-5e75qeY2f^e6SgiMgELG0vrY%XW1% zIR{rggml(TtG|B6q09~G_vJ+tQTtg$a{j~y1z7C&Mj*XBkcT~qTdvW| z^}I8zFGB|HCc9odFfOe$S*rcDri!CO(4uc68VLcieRG;Sw%H3U$=R=s{J) zX0Q32$$i2bYeQ&Y|LcA=Y}I(VfUAw8?&ihyy;rvLxd|CEFT2asA3Pvd*Xwt^$t|{m zS6JUe*=w)DnLKAdKebItN+-Kl+G?|*5<;`mQNR$3B+?$Wd2hBTRpV}?SN5vK0V$b6 zJxZL%X3j5z&b9W}7HkZ=>q0LFa@E?Cx%M?d^Oo_tgoy%zg^yoZiFr@54{2zgwvv)! zZ{ktq&3nqeR3wY6*-!7{ydFEdbwT}!qITG=GU4N;||)!1#MBK9-le%J>A&OHIdQ!YwM$Dyyveu`^Ks| zFEdU@y9%Q$u_5EI)Vw6{S!iuc>i#i9E<#<<~0&-onaHVdh~rXtG!bjCk+OGeRk3%|YQ zyL(CW%P#9Vd5dohM1w4G#y8cSMbU&O|L4^sMdsEIX82gl^{2s~`Ml-P%?^Hk8A{DH@@^_1reNl;s zE40*3qAz&k#75KV&VhXP#I?uo>3MQoJ0>M6oDdzK4fB}bLU`)!-l^kv4epzg`P-vs zST|YZ){s_yqiw4u^5$`GCdwqOivmvA_wP=BqvL7+WmoU=^o-!s#oQJ2yuar5A%%=N zWsC*4t7jjrknnVC^*r?;DtOa+A(d5m9Nz=VRP_g|%R~g@wuA^9ZOH0A!w?HT7_)uh zslKLyrdfB!5Tbxe zZEIb+jV&!KD9zIF(sXM$Mp1ms9P;ksgXOavgO&3$xtk?}wk>2!E3H3O$}U z(s!@!{-ZKH_8-n^8EEf>1BG$VIjQ=fVmb2d~{#bPzihK8wCtbf zRv5oJrg4^Zb*?LYi+F;@Kvvd?+XYPuPdWy^43EnKiWB-9u?pDwg2q^}e$C~snH~}Q zs|q|^71`XjjjU+8t+)5Y!EinOhQ>>r-8_BTP61YD_Bp@SK2UQxV_@~`nMypq2{I7N zcjvPY^j^so;%u55M$Iv@ZMn!tP1&503;BdGm!eKlpOJ ztCw(_y+Bk12Yi0W@X;;&}S)^kI~??**j(#Gpm?JnW68e>5r{>vZ!ppCfB zl&{^d`j3D(HSHTYE{${|+tqVrFKo-lL*k>jVl4qB)vVazLt& zp*q_)uFCqnfx;303{Npi#cY8Rm6f}5rmgzqE2+$(`|eirLa%jST$d_qtmPXV{StSn?%pS#?qh)~o^tDKxIu_^Tce-{ z0={p|!GIXZt}EH)&Rbs~>a-t%;X7AVpx9wP?yO zLE(e%|4y4Pg#Kj1IZ;wyU!jMeJ6LjbcD6Y}voalhM?DHZQ#Qt@cH54}x2-K(lJzZA zL+4L%$PRr&jki8qSE4m34%n3sS{G*(t2u2SJRP{+;ZW47ST*~MT7Mx4&#(jYm;OCD z0pV=l^$CSQIwDN}gvn89wlb;CD2kEr_6;9%9xtamJ^fvGmH=voojLH)FXg~3CG_@x zj)%X#-qAyIm-)h!%=}?Lt0P_w7n5t33t37Js2*E~qMimkSN6t*!3Y*<*ITuC<#x+1Z4D^R@@5VKl#4 z>tAB!-9VkmSQ$_<5i57U{^toi-Dkf~;E{ZvfB1Fu(64y>=%Md+5onw3sZU$enA^W> zv!UwYi}z1_G#fkjCiB3N1yWq<1)+Cy84;1u>3WYk>oyJ_{b%>_RBdmb8DSkOZ|)IU z(mb=6dQ6pFl&gZHo?XFVhQ5;OmM+rn0wa~=;|k}+O=BhBcYUvAd$Na<_TaY`*OlgvsCa>9W+=zw}t%yTbmD!+g-Ob2K|r{@8`cT6;~FeLR0q!zJ+meq9wi zhvuAM-UWrTxMeLfOls3ckL1l;Sx?Z*PfY*om&0z2orsrZ=p>rb-SX1a4`s|B7|QS4 z;99Tmd2oaEUK1-jcEkDaZi;#>Xe=mx(_U(Ax0lrv&J};$J<@WY8-KQ^OK|TOx*;34 z)ysZ`=K6;@qTAVG_a%UAq99u99aDvSFfD7#)E<{6&0kiu$}LTx@$+X3a$kez{Z{CG z=sH!AVtxM3$rp-g)mIzu=T2K?DA73U89Ubm%z<*oWy839lz?Zahb-Fje6*^SE|u?; zR)-RBSt;4`6H@saeLh*WTl`e*)P}(W(-OaYDdfBRT~tGD-M)zUB(u@5fd5*07wY}{ z`Lic(5jS|khsQi3`o5{C70vt@b^lQ$doA?ZCxOV@v9GqMxP9Y2vvZey-U7eX{p~wC zOI#s6Yjh(_jqpE@-2fh?o^5t`$CL`!Vg<<05uG5sjN^6ZdQ9-#a^Rl6Vt36)ROybDDsP08t z)<-_LvGcQ9IWMFPM9?@nLd|Bzs+jM{D=Y7A=kyb{_*!#byo5wt_(a_D=akgV$7pw*A|zb8A+#@8GDSFaMa*q9A`nXqBi(^@ro@#R|XG zPD@i>sJY&`uk-<5qW}DfTv#F3{g;~W83m7P4zAm6jn+I;;QxWbz`BDAssq%^GwqvZ zdmO5v?_aq1=~+AYTE>6el<%|Ouhy%6*;{fk!+62e{W8h?|Hye76&O4=^Wg9q=LL=K znA*i@YXcJ`;JJ1XpG!Ms))_5%70XLbJ7>4m=5)V1eH%LJlD-y{d$ymGCF@$=*JrAW z+(Co45q`5^Yt`@0FQXIEimMpyQ%dH9s6+iikrVRPu&H~NEhL6kvpMJC zjp$irsD_PH`h+iq?DO5A%nY0{-ib9{%>K2xnds&ke_bm&O$2fHwtB8Z&$Go6=tp7x znvOtpH0HLVBz!?G+LPMQs%{;RgN+VAwbczCJ>W449bhY}{tu}4lPST6Fr+t*XT52q z!4pUQ&*V3{F8q6-zjN#APQGMQUOnMmaragR)RmBI?Z~OxD+|m-8Ouie z&4&9=Om``v-}=C&fnq>GiWZ-Fe_NU6MWhgdJChX%I z6pyYoplMgJ#P4WtDx4Q$To|%KXM@^~DK6s6K5{yVNPc^qyH(^4oPbFDW?8A>nEt*c zmD}#lY7;w-m;I{#H#$Z2S<4I;4Qhxw8zu?=tb1B;h;;GMzlYh43e8V)Nv*P)D>HBS z-a7rgH{RCq=;m{cdjFCVYq0kGTYH#a-yZc$xx8w+R_@{Yk34Dp-Sz1Ka z!rZQQ;5}ey@#9?ba(IS`OG(NB&Oo1F%OZ;)QR}kQfk$z#J(l$O|67CEts-ONfxeW6 zB2F&eiC9mlyR|ByaKBn}bn!pJ{WBEqJ+|&DivM_ZDo^>$vZ;;(Y5OHl6;OA zbLRh7wf;57Mv3p4&b5sS-v^_G^;gIIKAK^9D{#Lq>o12Q;OUESQiIK6@2~Uoj^UM! z3hqCAf}i|fQS4`bhFbg1?y$mj`C|<`wE4T&Mw);49riV3q!xs1rHmH)-aD4Rcsvhh zqC9*6S`;_G{L#3vdGlL1ZctvkmJwJ5)vB_7jlZYiLf%{6`rIKl#Z_yKr|-#GaykwN zsd4^8wtA*kcTSE#U(xR(er32{M0Co`)oL|I|EVt;zwvO*`r-a7O=qVq+WPnHMQvCQ zPvvE;m6{cD=3jVA;VWSz4!){)+T+f>#%a7#@00UR9q3%Oko@3u#<8%ur$1f4boll11)svb81E|QF)|E} zrhPK8&3&!OSe8KCRIosRU*edf`o=$xYrMnlt*ULbo37D)Wu;Z_vg^rar_~$%R~ND^ zi-4p3Z+#mkj&*1Y)iiPuWgA+f-8Mhr{(7L?Xl9HyR6}bKRR)GaQT$C?p=Q zTeDh|qlEYA$7B0${aZsoX~q(+io^qafkDB1->$4t?|!p}L+))G&!WVija0v0Z4qge z54I1SY|mRJ4*So%d!ebWJK=r43N!gxU@MD}cpsYUx-NZY4%n*~cYb>>0&V*L)>F5! z+9iBd{Hz>`Y|q8DV@0DegMIVdcK#H~OiAA6d_^a*`D1_qea1GJp`X~t$S=M1PG8ha zRJQ4<<&|Y_KCQ7%?a{?RD`?E9R-sNe(2viV=T_smQne_JH_dX3dy~}%=Z<-9DLyrV53rSafzigjR0bIvnv9x1C5?`x571mmta{5&qKWosoX z;}_zr>G?qC?`@2FII)Y;G8Z2d>$@d!Vb?}e9H=+ z;;gqnZPn=|3b1{V>*oll+bSV2S}ic%h9~*bo$bwap5SR%xF}r^T(v;AwrB?E@L#P= z?WUy9`kyy8a9JH`?}1Iybfo7$3tcl6+WO9-=Q`jqTh#*o?z$5igM(K^P8yuKa%~`VU*_pP zkJua1=BN2PcUrO)yB|3GxJk7Gj*Q$Bb$IZ;`?%}?H=}D*?Po{1LX&W#LUrF$VO8gZ z*r5YjKMxiRCh^8(Z3?G14e$59@nhc>&oTex2T=isNETw!PrmLrq%ct4U{G;V+w1lI zruQd?1NJ}ZdL=n1-PTt*!XIF}uBm~~r1l(nZ%}_Q?aI=NXBtQEd(jP-UiubNxnyW4 z#CT--AalXrC#vl|-PSfsv$MgesN(ylqS`FQuDfq+HRrc?v^#Sv@TR3ZZ8zacRSB{? za<_2rD?Z_|4#h@;Y-QJgF=5Uz?dB|n(*we*Pk+j5cr312-?(~K&-@X<%%rh4|VR2@}_r}MB^r)<3@(nu4 zgLSic;w=W+{o4wP(=JIf`GOv|e^+u(iM+6MY~QU@N1EBHzgbv(Y8?5dS^CI^e+>R4 z$on|Ya!l*AL^5__WEsOH!+X`MTs~dCxxAxn zqTKSU^bG4Qd|%qOyX&0<#=gDh<+wK%UH_=->fzmD`8$GQR-T$S7G0>@E_BQG!G@>J z9Om^_ZCRRfX0Lzl@(KAFHrS(k`bK%kXoJ|3)xOg4y9x$&arF%BKRIy5{YHG2px9W0 z^c-hRA2ENPtoMo`>y|F)?sCc-Q(D;D7GPJEwT-+XHg5B%?Spnk{pn)Q$T6u@a#vNB za2H)#%STk-4icFG8^d}Ih;l zBbQ(P_}K=xo`&jE35f$v7owKh$B5})_p{O)Nbe9_-ak5+6)jfu=*ehb+p445FNSv2 zTQ$EFV_ABRcBi_wUv_({si3UOnUVChyXF>Kb(zx}cHhpe!G2|*p7s>%KP|aaOH*^m z=)8S_kf`C^Ck#(x;nnq!0HUQiu12D@d>QIit}`i7rvnE*Bp6!V`PjGq{HgwV=Qu|1 zKjv!ru`A$l^YsKxIbo~MVjmeiMZ3k`4nUKY{0L8F=8mV8uQc!Pyv#kOYeln7D`r(S zaq@SyjEZj5E)T5R{eHn)Q*)|B!j@yli!%ESb>HjL!VcWh<@{?KJZkv0j*Q%r;T@58 z!{JQv=RoO`PkfDq+Gq6{)?M2>^7@R^a94LlReXlh{>)7xP5shp+VRYt>lh&w+e7?b zG&~tqe$tVkKz=&1U*#J=ZD@pRc91ULu1a_s!anVtg83ev2{V?C?LR4E{Mq1}g~0&7 z<0B!FZ0^6*2jFVR!Lh!P11nE&Ffa9s2<02=ql%plaTGp(O0&V|Kw_tYv*dPCRJe24 z+y)25;0rwI(&nW(1*Vyw}@Y}+%t`e z9X)0Bt$j%N0rw`vrN6{_^k}|Pma$M|RZoK7$bQZK)Y~62&)kVSSh1j8GpN61c)y_2 zhdxUlm5(Pa3$on=vtIXXa$a0fpYCKDW(bnZ+>@4(iM;z~a(q(SukY^O5xM}SAM<99v>Y$G&EMW=99D* z=hU=P_D0v<{magkM6`Ylp0n#xYx62^9;4Z)*Ij^0g(&Ry^Jh=yyBE>1BCF{I<*^bz zV^&p{P~SUhAN<`m@A2QZ&BOP*&V?E{glG7Y)@i?Wi>HbI)9yj1uwiMf7bknz49t&O z+gKSKG82HGEDoEnk!U2EfVcqsD6nMe~P*T;C< z#a8g8*yTzG6jEJ_&%I3Oq;Y9%+$HnMQz>kt$lGV(ujF5J^3^-1pE)z|JZDAySas&@ z3yLqYJhtaoc{(^$M=VP>I%shC(FtjC&e7G|tnL)fw7latpQLWO-KqAKj~Z)L^5K$u z4QskNdikPutn+_hBEKPk@4e(K=c3TdX$@aau%4R@(H98s&D}PX^>(McsrZ|tA{=&7 zbrn5pDCb{iD~mh}7aO!L3=Rm0X)P1f^f{+%u23N!xpwENSEudQhzQPD<|e|+d+ZBk zvwukbl|;Lg4A~arpn5}xt8Qu8a)ly>mkL-5oZk+Vmbl3566!g8SNT|xxCbeE#X6}C z_YFVn({Xh#;(TivA07XZ;hHt;tK`8m`jzfe!*0&tR2N;oTU42wk+3Ivzu4&V`i$of z#G=mmOPrr>(tUS%hl$Q~`(?9=mY&s$T+cFkz4q`~lO;E9dMPfnN?YJ`nBTqaaHy~4 zfT=LYkJ1{^AEg`N|2I^Bd^5UIdt~X@JzMMhT?JC6nTD0l^&d~U2zd%#6Q^scS#Q6u z>@Hip$Ko}q(NZRL{1 zq}1L8Rn|egmXcN%!anVuCv|W4>&4p!+!tK=$tJtIEc)$&?2ylj+w5-i>OALgDU1K` zp8WM};+BV3vs%3rMih^P_&v|PeaI^((?x2*Fvo^3EXu#)kWRqi-jgQ`1jKe9GBjWl zleI9nF)+8W7Wjo#H8wFd18WOgt0M;12($w5LMw|S>IOCf2gG*EDTwVgaIg_mG=n$G zO#Dw)7rjW{!DhR<4PaS-M5VLf!_?4kWi5_dSgD^lbi@G0f{|p^(I|&(0Q%+vVsZv{ z#zzd)w#(=u=%Y{i^%oMALH<32mg->>gCjQM?;rnIaFmL?rJ`5B0x}~BFn|9@79dUj zOc5Z9|NcEyfHL`engDh3_jCd3_y?h37y{JE*DwWWldoY3&?a9)5*MK1&m{@a&}E%) zf-FFrd^?FEK%aa+I7-I@&;;ms0J;Dj55N$h;{l*88o!Jsz?gg)%!x7iGBQkk@^i>! z0p{fAkSPMp$pOez0VW=RCcwl4&;?j{0EPey55N>);Q?3ztjPf=;sUJ60VpH^lKA8Z z6uAE4lS5D_U`>ueftx0d2cdz5N1+Rl;L`rOloSS7coZgBcoY^`lcT_mB;gxQ1z!la z9DIRG@@q^g_yU*Vw*|hC@hIR6dD0gu_ySY>{Yvl!X7$?wUtk`;E%1dhISK%VL;xB1 zf?);#B4MD>z!!*LzeWK(!HSu*z!wZdfENh^kp{kCC<59@7>hLU1%na5N5W{NgD)74 zfJG9`=tSVj~=#$YCqz$=VqL@8tpXA%j#!gxj$L&kt60SA*Yq7mhgF{DYr z!(@zUL_uT>Y7!Z|!l*`+M8>ctk-;mBYeZ3G3~Uk^yu!#vltsqSCIK%~Ft!neQ82hk zz|0hkZbWGm3~v&J2IeHb5yeq3z)8T)6pV00c@zwB5`_ikB*qa1QZUF#z|a(oazu#~ z40952GzH@vQ6vQeokRt%FwzlaQZUqE!vN;wxgt<})m;_#@5-hRDF}G>mo>@@W|DWZ-rhMmyR9&@kG`!0j}QcC;g)VYHKh+i4i>XoEn* zXeR@=(=gi6eu0M3P6lqLVYH*|0}Z2{4BSq`Xh*vV8b&)AxSfX4jy4xGjCL|`JB@&L zKst?pcHnjz0qyW3jevIGb{YZg@D~~Z?ZE9c0@~q)Gy>Xz+i3)}!~19iv;()(2xy04 zXauwax6?2Kqg@P*fOg<^8UgL_Av6Nof!k>Ww8Ll82xtdxrxDN&F3<>Q2X3bk&<-Ba z2xtdxrxDN&4$=r{2X3bk&<_662xtdxrxVZ)?$Zfq2X3bm&rxWlDSCLM@GjKbdfM>X@Nym7m0JqaI zp3%mWj`2(ZZl_~BqkSkHykDZuRvjCQpD zWni>ZfZG`u?Pxp9z-Xrcw=*!>(e9Xm(M|zwXJE9W%`yX{odVp>z-UK%X9h+)1-PAo z(T=v#42*UPa65y5cK8c}fOg<^1_ABxLIwft!0ikI+Tnc+0@{Jw83eS$Fbo3Pf!i4b zw8N+j0@{Jw83eS$hcF0e2X1E&&<>x;AfO$%ok2i5xWFKw9k`uAKs$KEAfO$%ok2i5 zILIKN9k`uAKs)%$AfO$%ok2i5xX&P<9k`uIKs(HaNkBVrJClHRm>iRUcHnj<0qrnX zCIRih?MwpNVd_i*+JW1d1hm7IU=q*{+|DGR9WD%$fOg<^CIRhmotOl)1Gh5?Xot(j zB%mF*ok>7DTty}U&%o_W0-oWbG6{GFZf6qk4A+=Rz%y_=lYnQqD(UCaJ*fER0E%3$idKsle?lj7gLlvM?s8!0jxINt7wFFauM8+gX@_ zQR2wLh@}FzvoK;&9?8Opr2@CJFk(?!$-;=G0=Kg;Vo{dK!ic2;x3e%}QPRo6h@}Fz zvj~WVQCS4U0=KgWh=mVf5fBU9&LSWdK9fa2EO0xEfLL&WML;ZYJBxr=@Q6h~EO0xE zfLL&lML;ZYJBxr=@RvnEEO0xEfLL&!ML;ZYJBxr=m<@}7Sm1UR0kJSS76Gxq?JNRf zVXiC!Vv(LMPJk@T9qdU#3zgKso)n}}>J0Xz&_+eNx;Um`luLt(JE{3lk+v?5i5Ml< zU=zjzeO;UYd$@jJPl|w4q_K+=fDacGZ0sM>*~JOahbs&=_79jIY&;%Za?p{nf57!% zA^!+V0q!)|gz=Dngv9{29&EyR$UnRska7U_q<=JEf3PRVLs9~0>68A^ zfd9ds91m#=U{Cr-g9rdNVLap?UKKQm0U*W`#zX$$bwPtD05%>EpanJ_58?pW*gt?8 zsQGw2hy-9`{{VVm6UIaS;pKr846q5~fqww--x?;8G{7c|2mZkgocudL6>RJuLs>Y{GcRKfFF@5FubXgz=Dnczw_yMu3gSgO`Gh$Ac&V zHuewR3N;lx9>fW-v41cW*o5(re|UW$0S9ctc*sAzK9HgVHeo#EA7OpKM}v+1gLnZp z9uHiBst)!KA_mxaJa7$c>>tDounFTK{|M^?q6XY_P+{X_ACQ1nEy8Q9oA z6h8=MPo$$kbr1W8;s>GdiG($3ZQqw zc*sAzKIo8HfQ`pP@qn6h8>%PNa{5jXxhU4X_EXNB$A; z4Y>x`cs?k85Ne)u$Tq;n-{2-J)k;V!(9uLJ2Lg5pMu3!_!L;hj@M=C7X z`1+vuK`4GASr%&L`1+vuK`4JBofd37Ulczm1bn0TK_TE9#Sf$y{AwyfN-o&gKgd47 zCX5IE5h|#3lz$LPs7ULDYCT~*@DFA8zsE=M1LgCRHuy&1RwN)pzX0|R#ScQU6)DPKWB*Y6Ae38?#0)m}55*5c!4+xF zU}OJK{2-KEkq8YozP~7b5Q?rym4=Q5>>r9Bgt9A=slmqnq4+^4ydvEiZ0sM3AB55? z60*U@{-O9mD83?P8*JIogQLcWWGoy64hV>h?=6w&386!mO>CQ$ z&G;W+8f20vid3L9iz0!M#vqAOSQL28?n744IVv#j1e=r;q3M|cxcFPsGi(lMP}==( zx}JUazcCj{Wv>s7x@mhZR#+|EImNhCUL)h5JmE-zHP?rzo3;%D7ZuvW0Hd-hA1KmhEo&dlYY-uzcj#IeiW1?wU-8mW-&! z8PZl?MI)nDS;=2J+3l&Ha%QyYo7pFqY>LIIle%0Bxz`oct9m(C#7GyaKV%i%RQdAI zImhN==E4n;JyTm#=jnHAr91spQjClU7nawZySq?P^V#|ZJF-L#K1B1+ROfb^`Dt)U z+2!}SYCI8K!mI~#_u1FV6qb_g-llNc@Xj@MU6E}iT$(Gg{)Nr?qYXK8cOF&Gl72Iv z^NU)x^7(LcdJa=ICO%-+7j}ML&5Cn}_RKH8VwH1{j~cyn&}%Kz$4%Z&t1sO2f%&em zg`Fp4Lj*?Bna#=kCkoTUTQZkyH#WWAExdB!_JPHwGeylrB!@C(F7rrIu(!%G>S{3EJrDZB3#(2iU1*H&enk&CHqaDK9otnA5T7T3-FxYy%E z!`rIR(ZSP>L!S>hbA}CfcBqd1Ur_1vy4Q(Bg@A=R|~!K&EeJ%Y0p+k zoPXEmn8_0NM}_8d!dBnhFx@RXr}df-c>>QVSyG)M{n{-N~l~aacZ&{ zG;C0DQ4g{?ljGCgwYJQ>O2kr+uGd!_I71Kad?#lYU@8%FEkpW2gE{5*6@ zSvN1XGS^P}eEi+TVmVh|*;%259;$gCyvrr|B|huqv^Aa!{#nTHqs;!2A?4cC8|b;* zo#RazQ!^<+eA{!khyzN~SG6ZwQlCn#P*}m-Tluj1R?9ctBbOg|=TIMH`n*yu@y`!A zsntEz)@`X>A(O|pOSEjY#7)n)1 zrJXd32yaH22cs;Xr>)Urlv2LyQGP|W&6j{Tau+Y!OWM*mywiU;P^vXIaQ(h-xo3T{ zlLD0P?71jE6bY{b^yHz}m*LfCu;0ohoLPDsCxr)Mc(%5td>0{#^geuXUT&aJUUB$H%0e zv$gRl<9WScZ<@tarFP!ip*$YTh1!ztPCphxX1Dc;`NZ;#+&{15%C*X-L+urZe3rbK z<)!E6TGKRdMNa1Et{lH=dxOq&vSWPVHQ}CYEYi=)XH@6^(c)c!P>X4R;2g6i>!I^ zs@Zb4Wy;7Gg_I+q1Mc;4imE@;M~-@j_Gt2SE6R&;m9l)rZ@BSIxq7eBf1se|uzE1} ziVdxD@vKPC{veqHJ)#wR?*_TB8>lAq7V_nC4F^qmO;(@dR~{Rqve)8@k=8NY6yFzt zW*n=v7a2QpD0R!ZiwkjUTo}&1KOh{ix@Je^LC>u&zKMD|Gq)>F-)bq9_pE_WZJL$& zmJNx4#w+L9BwIeaKo8$9-@S5ZS_J1DE88W!XB>NX&38-5efYwg%fho;$%B`%j<(4{ ztS@tG`NH(TPaL1*H+|{vjwwq0maq0z`1o>dchv?(jSY#{O6KX~)Hw^zRIP&r|~B12U~$z=DYn58py6!zV( zddolkl)g;WQjXI)WjuO?^IcA?tU28s7IspnDuLa5$v00xd%*$Dw&3OvFZd_kX9=|O&JpFQ@xAan9jdY*#n)-x3_HC=xS^|E= zY<;^X)qZ1K)4I<0S6jb_bnOxjoW4^vVVZZ_i}8Q)XPb-OIB=J>R)EU&pj<# zdabEtL?wNZZnRr|K9nSKWAZn*erGqJ%i>fF)%Yg&)sTVUBn;)?I0Zu)I8MM&{*BWwlzn6I4dvcg znnsy7PQ1o-+sSP{%DQpVHLlrCx-zcVP9_W}-^OwR%C>Q`g>r42YN1RU3vDRR#xgWg zX>pP@o?}n?GM-^iCNSgq^`tN3+4ZC^D7Pj^&nUB*90ldo;K8rkhO%m$R3S~4AUT6C zIH5xMG(m2L>w=RhluKhN4Q0}VL<)StG8)RF2}usFJsW6Y#E~#X{{KxC{xC`MR_uokx`b6k&AL< z3|*8VW9&kHOpuSk4}y3MxiLXH2CoRhG33Pr*%*8zh{li;6C`8sm>?KKK1`5{!GD5S z47o5tDu&q*gks2p2{JLvjUW<34or}UVWtFu81i3&JPh+Dh{K?r5~N|YgbB(pR6*f9 z%VZ*tmNY>Zh8iT8llVnToS+Ir1rW^1b%2&UK@*1h8<>+T0Z{-!5r*m)n3MQJlt9pf zq4oslS+G~2%n;OIsQiG5y#mT0Xu(i-0TX)#r8a^R3{?*>u~(qs5OiRuIe>}10*WE1 zz#tXCc^2#yP!2%@2E83j>=jTDK>-G}8%*pKP!d7^1+5uO>=jTHLHz}#7fkFGP!>V^ z1)UYnvtX})mH8Z=&~f>c7iPX=Pb;h zvoMn(=FeG}KWAYu7+`Du=Pbw>I zm`S1l_2ti5n8~XF`}RL)VSZnYKWAb7oQ0XBO_Y-UISVtnG(cwma~1}JjPC=38hNfpR+Jf!^R2gpR+Ki!jF5QX@AbbppJ)0 z>F>{380ZopR7C%rg@OKxKWAYk%jtj4!od3Ya~5W@NKXHM^(>5txF}sfgarREC@lDw z#$bt382{x#81x|Y-+iRNp8h}nn1KKGAdH8`n`?FS`I$pPHVYQYuNHDkUm`!R*YC@k zOjuwx zyVe}u8S&BV5U2FMkFMqOLPqDzEiUSCg+xAn=Wewu=f~bgdk^u&D8z^yReES- zw^;r#{qlPqrvn$Ps1gqKc6_gC+M<+ii_c%t-gF{lZ+K!yjnD#_MOFKD9*=vop*B|k zt-<3Nz0>B+{aU|Z=e?3Pt6?SgBKZAm-H!>>L zvo|*`Vu|zE=riRsd3hIKV3EvFQ_T(O|yD#hl-94WqeUyZB|ZdZMwmHL=J8Z^Z~r%`lnj+L$e5YPp7*9mhRjn%5>jT#oDd;V z35g74$UGFHgpeq+%%w7gG9*-{4CPtpb!V^rJiqV#T=&2C?{)rjy{v0-UN`XOn9(`qJtf=D zTFO^S9a628RlfIN);8vG5{Wy%Nn7DA=3Af8gH~aAHtwE1GC>?y&z+O9`l17q(r;$0$9!*L;%tl% zKbSk9vAVa}CCPBKN;iGIRbS9L)~-kFKEk@qmKDBxyKk+e>W?_M4jbL?QX6TvpAH&X zZ1l9BebDyFvZ38SEmd#8-{Ss2tR$=Ulb3;X#jmEZ8^*D>H$E{9ape9M_C;FvlU$1Z zy!0PNA9sd|PzUM4OWpF@GAy6n!g&&)V56 zyQCT~R?9ZF-1zJh@+|7-f$cp+iGWL!J~L-us#NBB?|8?NM*do|aC)HVURl5!QF%#0 zekHXqr*3<#W+JnretpWV&6j#~`k(q3|1deyev5Z=%WBI(;r%xgb4sJ-+JY$a`%iRZ zl4V`*XXfO)9zE<@XnUB^hs~ztB5&K(?}FZK!msW6qULORC&ukNGmb3Y&XZ?3Mr0tC zmEld~=Ph?jJkn{YisvmTl`4MGQ?`@sj^kot@We)+OHLWGm9;@dO}m~Lcy9^D9ZyKX zM3fhIp6j|KLmx2LW4L)1H{*PJiL-!5-SN`<_C#Jmcdk<2`n=#{wF&nGh~2ktNqjl% zW{m&C7^Zel_&+i0|Iof`vF5*H*8j_x;eX)pfHLdUd;_2-AtQ|F5mGZ#fSiPc@IP9F zYbi}YO+p43Fq06O1piEs00z7y#3fN?9c9+n+Nn`y{qLPXnf0}hf->tcWdqWkfIEi~ z8fDgLv`SF_2GqZSn!G{UlxTEJFrep%M#cnbTcS}h!GNwK8W9tujfqCX1OxhxXe3OK zwk8?{6AWNqXar1h=;37(~>+0m}cN{tbYsLj4=4 z%pvOE0GKKoc`O2=zfB{Mg?LngF*TkLQ2z#SKcEZ|Vx9@c)QuVH-vHtZjnEe2>WTU{ zKp8m#>fZpEZz$A-`Zs{*gGRXv^=|-rd#HZ{b$^2TH-P7ZruIoh{Tl!S{|{oQj~KM0 z{taM%`oF=yL6V4*k|u%GizP_`4+p@lBUa7?65(ISb+F(5Kge|wDAWHdxPI55>B0`o z*79k?U(Hn|X1=Glt-G=J`)1Yk$x5Q9fBED%v_1-M7FKGv^7`mdR`$FxafjRnCiw&5 z{`-REV|KV^^Vj5TST!E{zC2Z3bC#bank?>o>HVQoE}A#0e=DmAWO@yKuGfUpR&}3p*S=z`q2Oo!9L$pq=W3SB zw*9_t*(zYaBj2BVFH=MvV?55P*3s!bI__h7al_Wrk9kG|KD+3O>pg5qFwWp3D36TH zVe8`aF$>5Td!tU9I z4GU=ot$HVmcShM&{nqlV*Ns&Pmzzo7p&5oywN%s?KLNj>!#QJ+-zJ{5;P; zir-s&vgk$Ek(PBPBNc=%@9&vBrHeau>a}_tu|R+7oMA-a`zzO@a=4XF0pveTO1BxqR{t@(GhJ22kZDl0QoLp$NdG-C zop~Z_#{x_GV@Y*$9|f@|m3g;iWLYc&qeo3Ucb`5Wl(F=A_F!1(M(1aA!fE9s(ab6S z?cQ2fU%t7wq{Z~(T|<4}Sl!nrZ`wDie=7CY&QwzRbx~tSuXBmn@@Ek~jehrjKgm3& zyIP~~*-tynSR4{-_1ny(=ol3GbN%^oUZxAPWk#pZ>M(yil>~m_!l|3q81X%#+?++B z93t0mu{WCY&hw9RXjradygY;sBo&-?wsVo$I5i-$-Lae5DwP_kG;X zV}96X@8M0QcQ+=~Y3xyw|1uw+|6tP>1*en48)rL*?Y`U>tS0HmZ^`a34L99lrhQ1c z{nvi!9v$O2(umo$56toZkmfh?q0rpsoZ4ctFrtOd@6tG!By(P!XhQsz=NlX#6EHAX?MdOCn|tH13iZ z-~>TqE{T{s(0EH?!0Cp@S`smPpmCPO0EI#v%?1MO7;rRO2;i$oV>^kMLD0BPVt}h6 zjp-z!xkBSPi5S|^SWY4eEHsXj7~rT#V>pSJN1)2$YjGH*wE1Yv9#KjgrL?J)PL$F{ zDQ&nIP)ZwdqW+r+Kn!3|N_*{Ypp-UBX;b+Rl+s2iZMYavN}CLQ)o>`KO@_W|D5Z^3 z+SCmdN@)X%QW~YS*S3^+MA;9ew5bI~l+s2iZQ!L!)%zkKPR$s2ASL|c)eKPVzXw#p zKW@z^rA@sbh@Uf!88QKJbVey{xL%OTERA6@N@;^G5R}rU?$3yz0S2YCVHX1tI7p+E zHZ&ARDQ%R}2Fm2r_X!c{@`=p|Fk=#P-?GHhsUa0Xvuo0e-q@7onaZ5r{5P@jy-`mDbX?eP zU_Y`{&F8s?Uk~??4BKT>cSA$o^Z_@UYIvPO*w>g_rQDW>^_HbL<%Mn+`{=yTdc5t1 zxIu`*ce@ae1*1@3*&h;V9k&>(-mP?0*yDT|%`a@dIYYPi`UMNmyM+R=R_nc)?N%;s zat~8jnBTpw{d(2TW6WDbM3p`3`hv^n75po?P3`9u7B2FNe*a#zGyn2dX%RkkkD+?m zBPv$@-@B zV6%OE?j^BJ28B6Mzv!)JG6yx|7+aoQ3V0%vsa7F=&n+f{nZ=sP_LC-;oFDEkevnK4 zI&P%P>DkBpF`l$|)4^LegyTCmwVoN@!#$auHu{iD#4`J-a-L${iPa6>`m9s#;7%aqss5f3gh z%wz9I&A=f#B4O{KIqn~>| z&zx?cuj!X6`&fO!`{&k^Zt4*p_1+)Oyg0Cz%gFUe^S%9X+w`vI3hE_e1sdaLMg4Zh zh`!p(Ew?Mu*LzRFuJR4JM|_@cv+dCrDx?%ynLowM*%}$l=snr8AU)lalob$^AukqC zoxRSsv@OD7*AY1tzDN1n#>OivPpxZUi++@xwYAnbt|PzrMgC?hdE?{3?Y>2yt<4`Z z#&nK2A2i^6Yq51V;oZL3;i~?3*ZwfxEBL(YKT_t%k##LR{5M+QU@rxZtxTvE_?it79OJ3sht=0P|S;PB0e=yb72Lg?bh6n=zoY_xC$NYZ{H^8<+QrQvat47%np)VY8eV}TXG+EplEM7;`_KNfDoQOX>p z%z?oiN|{ri79>QXl=)ihKq+%n3!M5|!B9wic({W=UTJu^g}_jNZaUmUAg?$)+(cld zfo?k7MIf&{nx1s5G|)|l`v{aWM=5jah6Sa}QOX=H29z>KDf6|>2~L{AM}((Alrl#t zbLw6NrOZ*v94-cwGDj)%wYLTy_+p}zIrVOUY&iw?$>Tw~oB}CAJfH|E5F*5bFDZ~A z!~=$q0ue$y_=Ey=Uhy~z7*g{pc<_xBcv{5cf$BCqE#kq?QQ&D2j|a1Yr$yw@Nr6dc zJm~zVz|$gf2BpBXGahvQQ()d1Ig(Of;u#M*|0yu@jGRy@&=?h^%t00#rOe@?MJaQz z9$+yBrOd(eK~ri(wZIWd8onS<${bV{Y08xZMA?g`U`aqJb3h5hk|qJE%hD7z2`FWb zQ03Hv3xSMM=71`vrvFgN9K;tS&-J&ok5cB~`Jj>8LMd~UGDj(Mc#b9_?+==?>;E3g z9E$^#ITq0Y2acd_?w$)8K-q_DAhv<}yy(d%~>+NlB98IUszmo1CR6i``ij7v{GiCedzB;p#p7Q-ht8gPpvj%l8-Mef zqF(ZT)_w1@zwlId^54?rILbJE_P$3!>cZx7o^V!e4LRAnD_1hBUUO)Ml}qG@NhBHR zd~3YKGvL$BnK$>T=kc-hM4#ytLSXQ~cb}5e_X7mpXX}gc2kdL@xnJOCwP(|$T*T1u zx5BKRlLb*}o6aSkl`Nk&v%AXNxN-I2&joK>v-qBK_rHEvJ;- z?7d?u46!dyTkL*$T=u8Zh1^#R`#cVAF;ZN#oe&J$8=vOJIz@Jg32gHs9yLfPKfL#~ zm3ftJynxE5n_-uCx-~qg;k5OcoYT5=eNd*q%KW;&>c(}2vTO~dwX#ZQb!F4%{CC$^ zDB3qi^}M)wPu@Iborsl50)|mnzE5+x7!|;P@|pM z*7KNO2JXpEUJIVD$3LfAuV^w@B$4*YvTlQ=Rw&1&$+mS*qLX=+HvYcx{{FRiwF>>Z zEV`K6vUhHT5xW>tUA*$twzOK*M)7<-J8)Fu{LqM)j?r7M$vKA-y|7E4+&M@KMq2kW zOFqfvurzQEy=eZb&@()Gu6YY{&SXzj_zO&st&mM2iy)gqiSl&p&rJdmgM1mwhPhwY z|Jm?{*<6&L=EK95 zEG*zK@USNfX;H$%O$8PMSaaBwg|sZ;VOtg!c<|z3Ulta)z2RYF78bY?;bCVM77JK& z*qVg}-K2Qfn}r3T3lE#Kuvh{g0d^K*L2nFF^!&T=!2$;c0_@MiV##1g%}!&n6fmUj zC9ybZJ_5|uV!@u90DH8s0J zTyv>IFe}J^V1aTI0Y+df_(lTcKd?wT3GyFU@N)#ne_(+F0|A!1vEVWU*nEfu9gRqZ zYVG%es}f-QAr?3=5MZeS3w{ZKX0?N^Mgq-h2fvd*v)VylBY|eMgDDVbRy*iyB+#sO zFeAhic5ND|=Ps7y!Htr}t4R;`@N;gtxg9l2KpGNs=5KSu@K`0~{h4Rzz3`+or7vQC-?_VTKhVs)eCrOkB{TV1f zO-+6iLD~i7r(qVJ2=YfLKMfP_L{KaMG!QjqMg-LYFox>~lnXF8n0qIJdI1U<|JZY6gHeqQ);GqJ)Tt@t=rjA>v`di3nbuU<~Jn=po`^ z(vparKkzVXNkrZsc$l^%BJU48%v%zX{u{(+>u-t>QPTipI6qXS8{7|Ai27f{PlJC_ z90sAMLE4!>ph)2;I1{D=y5=sH7u@*%S*}cSa(tE-EC4ym1k^oAULYR+!}MZFL>BkP{bkiPqgrW_yM_$eSa0lNO8>!?7Z6JvC>Ukb z{#mf|9NVjPLJGQy`n4+R?cpNZ?!@n`Efx?_+sk$O&=B*FYBlMV=tw0~7uBXupT2Ih zzP^jqvfo*Caa-_JX12}o-IIqGr{WLFS{Jv@ot%^ipZ}t}!~5HQ&czqS7q~CTh_miG z7N?|MeL-e{TR8m9BF+^tyKPI;_qR|nRG?GX(-AY)+a5PP)@#PQNbhBIzdbiqZQ5qs=3Vz#R1<50E`L(; zXwilQ^^eIBC-d8ObR85B8#~;(J+Onm!UX5W$|T7DdGFk&;MehNReL^ks1>?dMhskM z7M=5yFc^O3Q5y4mx=u-Z#7=ONpX<)zb32y{a${@B5@SN)+-Ek6mC5!jG8=uzSG{u% zmHe@1r=?Z0wi5SMyG{1fQ$Jm^WTL*`AwOU6yzUVgEUdh~8*iV5#9xPL9HdjFZ1*Ly#&d+j^Fb-Ca~IoJG`>#mWw z^`x(j@#~^JKldJ&)_f%$E6tnol37xm>o(K1_x(X9bxUnO)m1b+vmZ&~$_d>W;d6?x z+NEo*6jVpVjT;}&y6Sn1M}L$+Qo60*8(lP#Y!}k^fJjczkExot&{kxt!&_p-HE~78 z**~WAoNnsr01h=r-kCej`&qv^3#vMXyK>!DRv8&R{_xwO*vlsuO7qS;*;6hi&%O)V z#`^n_NZ5lD@7^0xp;4g;)WfrwvCx-`=Z#TZLG-iAy`|HRsK=UtA~h_boGf zcDY1*SVVp6Jo_VD*#6<6w|rt>upLL^+>}^L`CT7RM;-s9*zTX^*<>l?6F~V&e*HeR zy)*dfhT}`-Ckh)l6zZ+r=QrQxt!vp&O5+gvflE8N@s4EF591EcZ?_tM=P~4dPWi|; z;bs#oynQ)#Ou;RKi+D+US##mVYR=sqCv}VswXZ7irhiv9%-d%s({@zTh0$v=Ca^I_ z`0#LfnD?aI@hN<7@N|*FBjM``iwDoBXk30$fAZvxpGME-Pd{!`cyRKBjZwb%g0{(3 z@wTdvP}z@fl{XVCv@Wx3?*6>kW6MkEDGH0WIVNW3{zHw`JLh9>zNpMk&dFT9ugg_T z;U7dIe|xIAiyEH~xR%h<)GNQ$tWJD!A?9xM!LQjb`*%LNo^YA_m&((97jqKmIUdZd z_z|2p3g$HO%P*0aU6UL(gyQRNCMQ(fYL1-z?Re&X9}}b8$Aoa##}BSamp}ZPkeeN@ zzu)0ugL;?=NAe9N>xb_fmXp+0w8oa}3QG@h9X)>S^VMU`O~oC*G}=~Q9OpUrAL)MN zRlF9M|2w)L3En8(|91<6()}pi4{P2i-A~=xgOdQHlaO-&gp*Kp^tHQ$s-vqoV8D42 z3u!wHP+3GEI%<3c0`icy!+>~;U~<$?ft)?0?Le*@45`Oq3^;jWVfGgT2v966j(|ik z9~LZ3>ZO3DJ*4e0;8co*nJo+;Kxq{qc~PLkv3bkeI`Oo_9PX<`BaUJmfVnpkoUU zi8;i;1JS%&i#Zf9E4X_=3_TE4JL;!kR78OO8295 zKQ&HbL2M_&=#A{Wh%kC%L2M_&=#6Z|h%kC%L2M_&=#2%jod}~h7Q}Xx?q7Q!p>#h= z_frp3DBTZme(Dhq2TrIYxL3h}Dl7?}7IEOfN`j|F9H_yP;As&D&aWhRTEu}0ED4?# zao{*hg7sk>sK1h6c^C&yw*R7zfV2WLO!-k${Rd z+G~55(HL0}(7h)zRU3lmI$=QFU}!;6dqr@O;piJ)?9#LZ`!Y zJ0f`j#?-VSO7{agn5G0u1m`_4roMksx*wsd;V~Db`$2rcp>+S+euM~=fB?M@pBI$w zN9leVPwM}*>gYr%5~3AGLb!h5x(x(jq!5WKpn4@m!Q%gaL4OK(IM#SlD(DaDE&mSs zpDfD*p#S8k#OX|3rJG%;ECD-uBYLN%*r8>-&3HQ6s^3b@T^E^NveP)7uokV12IK9up*J z^S-Das#8pp-16hCS*K&=BU9n>*dILUKX?oj*54XxoV%nVOy^YCXspwsc*qupRn(C9^>aZ)1xg#e){w#8xc^SKK*TX+iOck zt&C5bXUmHZ9~Pi<`JDW9VzI4JHBitOYl4x8XJ< zyZQA`?ZLZjy1kx*b8Zu3O*~sQN8u^SrjEPHz5>_>UExQqKFC`-V+L4nJlb3)+Or3+ z`ZJi2-|r1H&&6}h-l=0nSbdSYTq5`K%~vuOTKU(XY- zZ@7DZqi^s1^JUh58j?TSY|Hg@UwyFd)ph1@LiGJCU6I#UZ}uGe|1kO{DN?!mTJuc1w+EJG{iVzOd%D;k${4Xjjo9e!?eX=7P~^jU8l+M&iT7~NHN z+b8It9i>zDA4=%{-(=9$%Q%F z+Q`$dDlYPhdvH#@@^RoZ5P1FIGPiW9&>8-I@jO(#Upq+ajtm2i*OItJx%0& zEZpL!bb|6G{J;!{oBp^%LH_)?>Q9Pim|qmggt7ZtvzIwrFkgLkD# zAyq)xkXp0@1uGit6vsyco#Fv9u(s&~Oeqa;3fKa80YDZ|&z2xn1rJhyC56R7K$61J zAmB)0VGs~#uq+4|Qn<4OI0GyR0)7-01OeFq%YmTH4i*E!OBa>`fw~+`ArN?yQYVTk z^{@TQqAdT~oj|&J;eth3{ z-I?RSz8w*Kq7Ff30;VQ#fYwFioT#6I>;z0tAXQC7tcm(5=zD;@u!sXR5vDJ2pa+)- z&x1ISDIvlX1`hP#5@8Yp2Vy%BrZI3xz62&RaNzhvgsBW1aA6_BWCji#rw|FGwON6@ z2@xhVaNu}FgeeUi$ej>rk{aN+MWjhE(Vn4C&TOqjsp4~VD$(A%bKP zVE3tqF(Swop)5Zv`V&DL49fDulP=2gqe}f4Jj7m*tTa&Or{<#nFJSpW1{{Z%B7tPl z{{Z9%Sm6H&@*}Dx{|fS7JK4~}McDeH_1Nqlu`rX67zsYs`0Zad>k4j9zH)f0plMQm zV?~Me!GxyOm_u)i^23_)HBS90`CXBAxamsq^<$_1EV{6pW<`CO@=N z;^#73ad=&EvcA!a-tBeD4KD~|2|jnuZTRrVEL-l%mb~PE6QkTcM~XOIub!Pd;2vm~ z@T2?DgU;PNeVnxT!i%5w%J#$q4GH4Ntn+ZtNBeGk5J^rBDM_x}-;x5>L zdb1Vsgtc$HJA5YdvErmsNC01K%4+8I-K;D_S6&>LzEWzh(bRf{W&gmHU*nxW7kjo| zo0eahcMNbFkX!X^D!Sy?%dOA;;xW%l#qYXV5~I(f#;P|;KA*|JIfh^*9U_z@7_atU zNb>tZs=xeU`nx?wm0{gVF7IL47=b@>a%vC$IJ1g%O3~{Go+%M}t6Ma2cSIOM`C6qy4{8X!d~?Y9p<*guPr|iz503P4`PR!| z>f-W5k~_Z(dOzs7LeSS|e10dxO76%v6CE>gt`hF(cUr|bDGv)J^5qa&PG*<+{J-`>2&kQ5y5Iu6*V<>)Ii7%2zPZ_nP<( zA*BoXC(KFN?Ah!)-L2dAJxV7RwH<7V^yGGqidDRG@h)rp4wlRfcNP2aA%bm3{0|Cr z?AX>P%ke6b+gZO((8z86B%RWmve{^9uLNn)+$~~1>HhRy(#&D!U;nqhOIy!DUlHmZ;2VEcP4N)turc9xl)!N0H@xF?zJK<;}`EH>-DI2+%i zy1ALO?MYi+lN)Oz{oJOkq9>a_h@bUovo2wb&dYrE^@-W>#eO&8F^9J+0eakf8-zbR z`g-!CH?M0}Yuj#{jjE;w#LGjH*Y%FPG1<$T;K_~&|1jUr@930+KO(o-A|a~sswIn5`F9`HA9zqqY&;+BJm#6Y;~{6)uO z7v{xwug0V1AhtQv4Q=$Jt?7b8#*sJI_`QC&|uKk^5$o6K*N07 z#2NMI^mmanB{!_^x$l21Za03GF!>_s{V4HTq!F%^6|gs|%}~08h1!W_MwOQcDZ+tUBP&>5wbxm^ zid<)3Hu-$<*~;vWg1*HOd!3!eQj20{qjw^Aeo&Ry#Psy3pK=qF++{1{(;mc7QPX%Q zm+;`S%a)bU=`nLE^f#iDrr5)p+w=CL@@weWOS}UN|3J_@r zdvDNOy;g@tj65OGj@WoYWn=4v` zxM(}Z+A08tGK3xd8!ymy4B(}Jwqrmb0fSmA;9%Dg+K$18gFzdEwqu~}7;A41)LH@b zUr=i!Xgdbzzo1s;k&a8W9b@fDL9G=~YX$gdpwKJ&kjfyzR0j^UQIlY<1GQE_trg(9LfbLWc8s+!g0^D- zxg%Gag)(0{0tuJeU>C zJ0q|P1ty;Hctqlf`ieo@G0=7lv>k)`I1m6?jgf|>7y@X<17m9NAb@T>kV~h&X9);S zD-8=W1VEO8G0pWrEk_!rPzZoD1!J1)fqITK?5iVyo;)z7h9d%K$^&C~J0?HJT}N(9m!pxuJHUeI<7@cu>eJb%#z zA~<1yF}y$Eh=I0a!2J>0jsf1kH2(F7I1d<8_isdC-U$dO>V6PW>j7i9zJPrv7{m1i zwyI!E-Cq)cfhQQ#To0^28XJ2e$TNX4ydK!ff-$@v8JQnEKqHDjU<|KEM&<{P(1-*O z7}H!2nIFyi2U}k-hVuh9&0tJ(J!F3H9R0tx9YYd>lR`{fB{5P!a|lNO|0N(k3#9)) zR|SyDfGFu-R|OLI$Ntw|3?Bon@LoRVicv$Syr(;Q-oGr$@p|85cjZX>RL(uUqKet+ zZec2I7jl}4 zg|_h?X1UN*wmfI)`GF!~Cb&yQYLh45Lt~Gy#+;qUp1rnc)vwqh7j#^da($%l$0-ky zJ3KYnSBzgX7+3pC2KlG%BTx!#4^}rC)?dc=J~_+cwROCdd2qko99!hX4I3x6g{`tm z#}@YMZu!vbBHC_qZ?fRwK9l?3Vu}c73;7s`Jh?R$Kjz9L#IYJnJ?pYd>USPhw%IGK z5Ppeeu;)34PnQ(aoMG{=t<7Xl1CnolUpKFZ-gMkTEXn z(#xv{S}nni^wke-mNEB`V4dOd%ktPT9f3W_vvgs1N(N zbKbRg&5s=lEu7*E)zo^U+gab1tWhNRk-_qM1n*lOIfmU2#5hm6$EpYC?TEW1X_hH! zUGp0kWNE)sQ7bi#)g*`G_gl=zhv{{k+H$Yg7q?)Z+8J4~x~1o2eonjB+8q&k@)5%o z#bPlpkNi>3eB5^3&VeE|*_W&I+5LOx|08FO1f_rDtdR!@<*ZT8n)*UPW$)Lvq9|v* zb|+BIdhJf2oHa-eqq6tZ?LG#aB(N|$jdIpN=bn0&0p}i6_MZA;MLBCel(SxYkD#12 z%2`u$R9LX*Mmg)XM*|CZ4FXJXp`10!SyOiuSd_CyIqS7Rfy&hZ5In*;NJCFnq^lW>X|9LN4{{QS>l_%v`5~NxG~^`k2Q};teu(bhPHFdq9oHf}0A>H+V_lrb;q@tWP>_a0W z+K4#Vhekxy5pgJIO>MUyY$)k*-W2d5?6jk?c=^WuEB1#MMo(Og;8J!fe#`pS6O>M=*Xp zpK2{G>0O*YKa4r5;$v`|eMz^tJJaJSpMOa9CVEWPPJcSptLY)K?{g;vL-yyNk~!1M z5Kt~`k$W>FFkqX8M_$aX4-3Zn6=CKduD*#d;0)o}B)1-qO^Rxs$!0x5IQ#u{7EWCv zHG=#p&dZmNgZbM&CH~BvclQh4{(5HoYr+WMbr*?WH{VxX(ih1k=&F{DiyF7dSq;;EQuShD>jOsvQwSoO|_=9pK>Q_=A^1e36z+pm0!8GGxF_et<~JS zBQqonHYe&$JQ~jM z#-99qi$8l~!a>uGElr#Cd$_;64>&0+DCZZ5Kde7UZ!taIvV8lvGozYyeZ7~adP<52 z-MIgA6*pBw2c<@rm1FVBACI{*-BC+ykgJjFyX5lOxJ=XL^_<`z2R! zxO3I1YPZxr!h0>js%MziTAp#qBXab9zLYbGmg_5`y;6GX1Y(LW>~9i0-eh%)d+`3< zrqsO}w`|J`obK1G(lvzH;r=7cjbw(_p1tFqPL_NJbj__TnGPsAUU0L#;N}W+c!6{S zc-u1_(6@ATbay#t>B@KTAQK<>Mi<9($1L6Wj1TB4sT??NdCAQL`QOTy+>Rb|Gk3ED zp#Wr~kRJvASJCmjqsuWT^K+Kqr@_xE9z%Z4+|A9>sQll$k| ze?P$>397%BIH_~i&hnhwKR>VH0Blr|4?vV~04XBs*El|!>5pkaX_0v^hs zVL@pb4*@AGkX=Gb)N31cu#-kA($pcC6$GTPpzMs)o2j3ISwY1oR5Tlfxv60jg}DK} zO+BAt0ThB1veq6P@W3H<&D0?{%R*%{L^Ov0h0U-aAxnU|W?1kz5}>RZ7RX)@psE=b zJe>qsY{vo^ga}y_EO=NEU7oey3nVXykVL_P*iM8X3KoDMM986FLCTy6F%&GoK!}h+ z!GgaPsl=>Z89*S2zzubX2SfOKQJ5Qrx!2YP3Ui|{H#IWgfH@fn?p1Io%uR;T8wX-L z8Afj$i0xz;y>TG6lVSA6f!I!l(HjS1I~hiA913%zF!x#nMqzFg=B7qq6y`=@ZWQLG zhDMOH0jYB8!3~AEQJ5QuVp9*c1fW9*#?x#9DH!rTbF zP0jof5z_?}=BCC|6y`=?WXMDj0ojGZ+_1z%1Qjw2lFRrTUs0GF5v7J{cp}nFik#=y z?hgucgZlxCuK)MI+*m1)8N~2mNm4jOJe!0gNnwHN-v5B*CV|DV#*_YKxryKk|H^WQ z{$;sGCCCehS%|EsALa!28!T_W`~0DJs-5@vbT{$#?afb&Lse$zX3opYw)ibi1uPep zmwrlJF7wlg=lT^eCjMupkk3E$<&>3bWzU`1jcJ)ZKfn6=o=V)9S8ip_c2{6g-{2@$ zXlCy1Tm0UtF?Ub0#9%f|@dDVV~Q;QMjN(*IK?cZ~E5){s@L)`cDSf`qjkLK(4kNjW8PDmH8#rv2Q$OUTyD~RJ9~ai zThT9%KTtt&|Kd58tFhN2gDg|{?;C0C*mK~p>om=q26mrc%9gddKbraI5NsKWK41<@lZK z)gRvzVY>^?6g0dStN_dz#k;f_cj>N%wra z8>dwyz z`-W8xt$<_rNDr;*eiLqoWB5s_Lzc5!Z9O6~`qG1zhPatM?KVkm{WWZ+Y|FmNJNx0i z>wm3KW}0v1t^WM!FTi+YkdOCls4r+fAa_G>T25*fjO< z2@YB)HcdThVt|$&!fUMUCQxh|2cbO_n+E7JHOq%;V58VHbupkC*r0Wl8a7dE8pWpJ zqXDXAC^o&eqd+u%P;8odHvnBvglzygEWq($8vx?PLWE^#92Un%q5(;Px+94OB*g;g zmIfpRT8|_ekQ56PlxaXxp!`Up0ZFkyK^fK`Z~%=U!SVwR_#2R*6eSLT5+v9pfCKOZ z2{sAffR`p>;rMq0i36oC5|p6?S#B_-#z`D-i$yiCsrL%Srb#rb9kj%t*fe!*P=F2x z+n8WHB4g?q!n_j!IC^n5^)6};WicO=~G{i#j zs0KEQO-sY=I05W|Q4MVPe4yAgz_u_nZ3T!(6{>+vt*oHfG-xZp(zF$z*ffewW8n#x zh2DR@u08cGm$~EfB>R=C$&SrN%|G2$8%?eAr>racaCDpQ@X@QU zS30C!_-^a^(e}>H&gnnJQ=ar2IIS0RlT{2GG6^?ZPosy!TtEK+_L5L z!1Jpi$*baDS605w>FiGvk2XrB7rf${)?b2y@i+~%}!QW@LtrTAA5An4% z)k@KO`1|OD{cN}3J?#hFCf2;qmLh%ay(kOkvDa$JUrknf%s;mGS0;F5{(g7e&0LcS z=c)3-L$*`n7av)34Exo$BL2_HEsdF5vnf@EE9$y6?{O~pZ!C4zWV|M6>7B#T%*q#D zDq&?6w(GaZPgRMV9i226@lr8$&x{Oj|7G)@mxZyN&MWYbNv znwhD4lHRC%cOvdp7h|_->a0q3mU&zhIUa7Rv@ut1*1P|nTTe+uB=7GT^8>ygIm3eo z*o=qg|5(h9()%7-_dc@0?cfT-iy)7^FMi)T?dDyvD3WUPiT5yrFXx@xvkRP2f%K#C zvyVThevI*c?A}JW)EiTWRv?@F(AlvdKZ z&dc;Q@ERv+WJerWY1@@v`$vYyG&FkDPm;v2r}eN@3*VKFsfJ%UjIK9=Y(?(-;p5t# zb0o5@mUGz5SbcaoUV3H8+xE$*$n>dDqnYjUn}+_3Pp7|0G>f$-SiQM3Cc9X7!v3=H zY~Oi~FKuFR?}=M;{9`}=*Z0)ny6u|p#gG)9c|9v&zVoc^RYTh6i+OaXE*fv}c-g_@ zbgx9@LQZ@MBhSTq_#sE8su;KXlSL7e&oJH7F2%}cu20{fmntvbvM}~omM+Md(Xr!= zu)(Cs*U_#C)|7W8msGYyss>M&EjEXnZ0AfEd`syc<`~-I>p$@1!@_yj-44X|`?!as zSjpMFI&)Y%p9z&=>(9myJvJoKiM>7mod=cCwbZXEyLNnJ~fq}j^1-yC7F+V z=l9bvG1czbX{#RNzZE8W!YS`x zI%$@tQ%m zdp;4{U;I4rOLOPIuD~j#lkJWMzonLYY-dN^ge)&Cg;S>Au#aY}#?JI}`CoXhLvgIQ z&pX$bqc>1-@b{e7$e{(yXhqY*^Bz;jT8te>`@PDBazh54WOi%g9EEkhr++wr{qFdx z;g!bn!KIHI43fwH{P~h(DlgFffPrmrU{=pmM8?I;g#Dj?0%Z2i~AbBso2XtaV>@tVwQ1!%Av)j zj5X5s!J~VV2b;YUgz_g!V~nPnj=w%|U^adWYxGM7D}1-Rl#<1|ZN$}QvwZYFdqc4K zJ-6Lb^2d#d%|04$D${=stXr4pBk^M2&VivBpC2nPc5fN+e#OW`D&vd0tVQYO@%2*a zoxbAx&M%vuktcL(k^Y92pVPH{YV+2YzvQ#BSIiYMdE>)`FC9u@UQKK8?P!y;wMoK1 z)#3ao!ZH~dG_R((oR;j<(H7m^w$xdyvY{-i+S31IYV{X?as9!Z%QX|#O6T_|ACOER zKOuy#IQXfQ>7(-Z`t3_+3{-f_kJuh0iOr>L_0``bFBX`zquO08aP;Ma&* zC!EUQ+{*yo!!V>LW{l6uBca?&Ugp25uNB7gSTIH?UKs4J1rTjGVEaL>v-Yj zOy8S}{BeEdE%PZJgwk)yyE-ZE4kNaG_r^Z72_5gW6uzICZAz)BE(x<;aFP(@N%L&UE_oEZ{CMTDamt*uVb88=STWA*JU>B}lX!+EKXxhTpmn2Vz-uF8VC8?lS2vMy<%PwQT7GgT?r zuu(fuIp-W#Fp>@5mtNay7 zno08aetQm1dYy0d975-fACjJ*FWseJx2oN182K4vTa?-7=;}BqG%}!W_O&=;cq*yD z@5cF@!Zd}Dt|*?o&NFz2-%cO{3H{oHLfIZ znch#gWJ6^<%ks8Ga*)pNsRx89mB=fyua$-DB?$Jh_;oTK9c>P~=nsXQtrE*{W%WO7 zoY?Zg>&N~C(FdLZ7Ksf@mj2t`y9Nhbe*R7SLAaWCFZW;<-LAS}8!RWQ3_F&4JDKP3 zSjNkbDg!C~PHtK)=G-r1t2*k(o7mE1{Zi?+l-OPUwY#cyI4f4|;L8QksXqrlhGcGK z$y;hKA!vzUc3<4*;!LoS{q&lx$51+=3h&eZHKHM_`&!e^Jl+6jwf3k>bRzOqi??cD zUF`DD7G&$Y+7PJukx$|@|I{=^TSPWw|K6wz!{)a}j9<=6sYgh(aVv>%a^8(ieEKQs z)V@#a>8x&hg@xhr|>KDKLw|iE+76Z zm&os78ax%quY1o-J3K6}LFe<+x8tl0dXAUg@*ialYjS+Ca?pF`i{aL$N*TI{)~i!) zi<8GzFLv>2r~W#+<-kufdEfKCo^y>AznF*o7-REs+-&r$NY{!*mv83$JJT71X2{O}sJq*WdqVp)>(>72alSR zyx5z_Y^t4^n#9Uhd1aO7@-(Z=Ir7*r-F4G892-|Abr)gP>?Ga+BJ#m;tvDD8f z_2QXCH=bMXUQTE6@0VVeQK`tD7IrHXzDH;KdJlNN4BvFdarylNzM_TsEX%l^ zzD8DEj~g-e6;oLp{+oB@$%ZUwYZ_Sa^>$w~?Ei5ql;V0`Q=NWii{G>3V%+%;72=qV zR6XFoTlo}w*o|}0Y@S^I>m?^0b3u(HC%LrY+4r8ehXXMzMfkzP%=%1{`G;4^NxE&ddo{mDgQ~Oj^}eGI|-9N>$;Ef8alX&sqSXm%xP$&3%UK0c>1_LiYjz7JA@_*4Ea_sb?fl%6?&k>VEI(_V0&)*X@=;{mRE1@ zDeqV(wf|v6!j?nqsZ*3O`GH$T9?e@eefHoNvUP7QjR|*LUA}nw+@zn!>EWw>-f`Yh z8GmLGPq%UYXaAn4?6QP6}I$+>g+NMKYgs`+D%K}ZB8%t(qkDh<|iu(da?HZ&*m^*2 z)8m*9-8U2GO18ClN(kZkS#)X+Qz6ZN6n%c2cZ#A#(h)F1Iw_FHm61_h4dwQVK zNZy_KbKcpJUn99zzVCkhnpjw8NjZI4Hd!LGtLsq2N~gsapBlx{otMqF7Mw|HA1Am; z<^6v8w#h;AtHw>)o%_bg7v@}yW6~dqYY-i*_BU?vICDZTCCHx3f}Q>5o^{t>e#)He z`;ydZ>Wt-z3_mJjc}rqLwQ*lr)vL!}``S`?^4>Ala;^S90D(Y$zk1UAa&j!mA&D>! zbP!FiOWR@tN(5E4dDkz9HMsY8qX(B#K4ME7!o5C4crsd@sz@p9ldUbrbn&=tZ5Zr% zM?@ynkJ#9TaIcZbi24osGNe!DwipuXahuzyt>4-!B!8slwglRBn%fd+KU#Aetp9GT zZIX#cYHds9qwU&#N^wiIo0>egq<9V764QY&dS>dNGLT!lL9RxlXxzA+#VI{&^%|Tc z)sNcX#D%KHP{RPjtjef`FwF-OGeeCEEaGFiq%$tR3fVt77J)oiZ#|%j?u7LKuyPk{ z2O_+;HY|Z8`ra9_)^ZYctA1r1TlUaYzhYFZ{4K2$eMlGZrwxLVVBsK1adCGJ(u@XzhFT=XI72n8J79n{fT5BF z23XP(xwt64NHs7C%prF_eIk*(OSH+cPzPbCa-Jl=T4zxYsbi^H4fx7KOqvIH2rRbYn(e|gXSP>37Fyng>9wIvoGAyHuv&x7jg#}~ zBTdN#aCeacg4K~JCmzk}I`=oWiYW8g6LOi@DncoLoVM3Y=D*s>jLT{9Ajr(=Z8HDW zLuZoVY9%yD=D!C*XijgR`R`#6n%iWcs}li}lyEiS-!6qa#?Y=tdAA^^5eyIoc; z7W>Q!S$9@0sS?fUJqP}+@^W!~7d(uWPbSd}^5eB%qfL}1o}}op{uqPs81uL4)@`E3 z1T<7zw~3DA;mI-mrxr};U;V!aMXFQhd9VW^R!p0^Cz5XmN0mLhpLS9VSl&^K$;O7# zl;&}0)EctHSxoe-s)*>>c{>TuhAgRob5)6@6#t>4(RIdNTGm8}1!_YHYyl4`q39(g z??7*hoVWL8uUnxaMEHpHwg`7!n?5BOtxjoHaPg$KjUizlx!x8(tn$z<#_cTMBq~H!53^CXadq zD%*UOVG4Y}{TelfB20wmP(4PCA>*_njbUg4Mz^jp+(cK10U|r0DU>^*C}hUmUrizK zKMzM$n9@3?RK59hQoF36b*Kt;poCQ!HdZN7g{ttzT0$iON|H!8qLf;kZT(t8ZtG{Q zl{Ak*f3z0tGOQo$G<*yK^;)na!&NibrDBg%kW8RmrzDv|`_W30QX+4A2XdrJyeuDs z9LWM@IkO9LBxe{=B?#q#V6`z;Donk{#bXpBg_Ko^kqpC`DiR|L1W1NCt#?3zq%N`h z-Aj?1lTfkO?}z8nkg1tsXfW^}5qZ-68ZzxOd1xlwAO5A+wZfT_V(5 zVs-*60c&_5xdm)Xo?t~UZWLgh=FkNETYi%KYF$J+$N$AsWK>g47znYzf1(79KK61) z1Lp?f@ST)~;Bm^LzGWfrQf6#)#{}I>hu=P%P&8dwJzs- z|0n3hM7<_GEs`vd^eIi+a!{UgEqO>3@Y5|Qpb0{y2-kILMiYy(4IeoD+k{9|XZ8mu zD=X4XpaK{knGgwJgMny17#cxGqZ`%H!Pq^HlzL~0^_kKxXHu zbv4w=ako+g6cblciunX-eV%Jcz#Ef~GP0ic-^j{D_4_PIai>dqNK~+#B&9i9DlsnLDng|zty7Rn19Tp|CTW>U zD4s_pw8jDu^-59+l|UBkL5Wf~m84v%rJb?Uq7OIP6Q#J1a+JGyLoVahn1Jd~p@V_c zI|E@BTWrN{i>hk`s$4mS+OTG+!riBeJ<<#v0Cyid&+7y^tJ+C($5TZlGIage?qui( zf$gU^0(N(0XtS-&9b;>f3YsDP|c%e(W(~NSsJXM{c7{&%6mHxmB zY96`z$_7Si!(Exr4u1~L#oDI}# zSS}vBUW4H=z>5>aT`t7Vh~L8SKvC<;GWvPldo2gBYymZ>@R#TnA$JGV%7a=+;pcVl zwH;hj&xm5Cz*-qm#dXYxDp~_0x`P@IguPZiU7$y&`e3j84U3XsHEhq0t36TytaiMg z31ANb?@w;rs!`V4)Xq66FLOj|5&v2owa6Oa+2z zu^UlNN*j|*6ZX^+Mj2}Lu&hX+0bh5gJShCf_3njTNvutaEVgqO1Ps<{eTmvFDL_{^ zpu+^v{aM!OHldTm96*mAV*n0%OITI~J(Pi=W_x~Pr=Rf#kefx_#2D3}VOVb>1nsd( z%ZKDDCO6a~t~=zwg47vjmmYH|@A)ww-^e{w=xUBR1LTubZu^*vKo%By(y_5x+JI`l zJHZ+-ACBpcw29}neZ7!V1Z4{Dglewf4&CVVFRA5T%+eaX;J<$S*!=S9)#sw!fMeMx z;0)`H>@XPFfyr0wPHN^(kI8FyidPa(&BHX;fN%-4gs}kglyH zv$Q_I)rV}Wd3`>gz2Yy($D@XlVc?|MoiWZ# z)A|`_X6<9)oJ(+;$rjYkX)+r=L{<~^JGW;x(_PWEGMnkqVBtgOHuJdwsdkbzqlyPg z)XAFN_PDI$&5HIwBcBlN4D5}F9mAP;Fbo;y=l2Ymu9qR3Q5gQ1IkLH$NVJM7ck4!U znS}46t{yX}$cBOkl+Vd2CX>E=L+{x_QE<_bHWUHH=oaole}{Do@?d?*X-NG5ojp-#c~wdwYxdQ`aW{$q_7+78s}~Ftb3|WSYW})-A1hE!a zD?=ZLijpSt~$C7-6aiS?XcJm|qR5i}K(}O}aJWvs8fbX?=p#5b} z30J(f?-~rL1!Hq9$x8T_qQK2r<-;&l%P`1zYAm8%$PtoO8a?~M! z?rRkDT7KBsXfqBATh)xK5*AM-d>!g^GOa}p?>3{(8>N!&`a7X9NY8mx5CN;IR0Aeb=3+IW47!Xr|0CJ>NGtCwjNC@gfs^4n^NMF@vV zZwGdtx_zMRt^TOMBIi#O4{fnUXxfG0zW)5|0{VvrUYA7iK!)0tTO^ov8U6=gL_f>< zPsw|mT-(AF&gqwgKkg5w(^cf}UdrfSSznbS4 zPKf^LnlN(yV;Z3)kDw(FxS*)lA=As&luSlZy9=Ku@G&B%!#89!9!`htVK3Xy>F=@7 z3Y~d#U_i*x)p#5YroA8Jf37A|(i%*o!JtLDgHH4(NbU`N5RjwRfB<}=F*%RO)gJAR4T>!^d((2%^`_R!On45aH?|6C`G3D=}Z!&?uJ(%wB!p-=iJBG3S!{pgG zYDe8~FxJQ!G6Uib&@%w723V&xZIScd5Tq~|`17DW?2k~oh0ad?Ga36u3(xg=p-|B-vi75T5SjL zD-ekZ>=R(lvH^+s>^lBFd2q-NxTQa8qPL6x6uaie+OXopOy`@m?#`vPys{K@68vWy6;>4QB)dw$hl@@a(n5$VqrD=~?uT z4_EyHfmX{(*TZDM+`E}@Y$I72+?ZR-c=D}NbihcSEmxSpTJ4;|vO``8)#P?DeCrVXh=g0t#vrgYa0$llFEG#&~l%%sO@?m ztQ%x2UI9qy?}1xD{t1=>0dz}BmybbM>ZO{l8&qM6XIn|%)%EOVO_vL(ZEM=M?>hg= z()8ZCjtHUdt?P(n_8z;AFrveq1UoANJKfEh|7YRM(K~uafzAu2&gjlUotHp$#�w ze<^ORi_v{2XaAq2W>1}#YFB}8uS=l)?n2)ddqg#usM;k8qztYyRwD@#A=?#?D5rUZ zzJ}kT@%UI^L1Dyk7s8Q)6Z z`8QpNnZx=06bYE6yE^$|ser2;hI|ooE#wYEUKA+TP$ONVhPZlFDwVt{vxP6jQf3 zH=Jy5)|vq|DE(1!_r{1ZEf-%X$s%-#WN3G4hxCa-Yk>+^ChTNSJ<^)d2Go5VC?*3aoN z`Eb=I`|2lPVdB2xJWzfSvHuq)wQ|_d>U4)O-O0LT!RiXfI*Z3*>?f8^T&x}o@T75( z9jQC;j#F+9{u^{@nscUF9DFYx=l_Ni189U&G|o80Ds(mj&^Ld2_a~U1`iZBoI6nSF zqU5XL)pT?^& zpBZPSVw~+~A?G6)p;A_nb4G?+F{}LA>JCVea~CG%+x=A(_`T+b+k!{O<-6pKmue-YLonLo#-8;YT zt#rTIue+?v$d37S@8Gmc`E~E$yi56Y@8G=4_;v3hnw0VD-bFMiqYQt{JK|;S(RV63G4OiF0T*UO2T}2kv=$2>k5`s zzo#{0>|uFYSF)hWJguoM_OxcyJ_t{1qbo>8Z_$Xfjb!xB|7sx_{c7KLeV=@*S6&0w z*5r9i***3=UX@y}?4oY&FH3>YNOa3hIMYxBCNxhDvpzYW+qAPJJ74Y(@6hknebpLF zujia!KV4=$O%o5-qt!FkQhbH;-l6U>DC+Mf?yYyb57vo{y`+;h} zB{=ZkoQr68FuIyf$a#crsNo9=i*Tv(H0;+4_CmZcNvOi)V0rFH5XZQJjBl=cqCkjaQU>5%KE_@hsJQb=^mWj2{4JU<`y;%NlAeSwgQJD$x7xzEFl zYj1KwZs5NA`Q7Q8dGFm^-`%(%D|y-IwZ0$tI=EebvS%BH`5BS(BvCJN1%u(WFMl`rB6j=4 z^YVKl!+Wxl!ac$3gsUo6V$~K_^87e^_04Dc6&W^qy3TLy;@Ipe^%8eRHR{5CFKb#>)Gd|SJmaDR~6NQ zR9LW4R0Zscx^~d6sBZ`E+xJ~>e48sPPf>Fu zNi)?~JB(o49%hvhI^G;3%NJ1EDbMP-EctFuzl4YNPS3xDr}a+Hzu4m%r_Xj5e~MkN zcN>3-U9fi>e~MkPcY6NCF4^lZ=c;_OOO0BAllErgZp&M{)TmXtZI>Fn694V;%igld zeB*()=h5x26U=m5Njb_pb?tVPuBxTg?&9rN!)P@db%(Cr)h?{MH@R-C&9!rE(J8d_NLz3aEkD*K&Y~+~3wUUEDYk%$deffQK3-UJ(0h&J zg?XcG+etomi0yjGuNq>zZt`%tx8^3l(sR$D_k-{RzaJ|p<*&EPOWDvD{C+H@l$YKv zFJ(h-@cXfpQoeb+yp#?7!SBaXN;!nP8}b2pgx{z2l)GYfdqJD~gx{wHmAh_sdqJCf zh2N(ImAiU&dqJD~h2N(Im2?cxbDrFeuW~g#J6Gjux^|w*6~V*7Ixq9@c3@pi&kokr zbnRe$>#n!x6zWWYp_U7mU=U79j#HG)0&8z%W|c(irN1 zXDeExQC|r|B6Wa3RXLq_I{AgkPL>nV?S`@=+9Aa*oBMgsyFS9deNUa)K{45 z#MzXt23KfdLHj7|XwO+)Tm{cbK+c9QVo<`QC*A%CI?q^T90v5eQ#27mPpM^U+58gQ zvjD-)doa_>)?g6z$T_Sjh<6OFk#2-&f(2+{%0KX@Zi=s8o&mH6o#AkNfHT1g*a*+& z7c^z;yBYe;>$l*Ni@!SkoO}ff86loFV4%@(JcU(WbbD|l5EAv=#I17iZ_CKz=lP;XUq-fy8pqu;QP!#CJXtJ85~;1*w` zqo4sT0qOhUIC9$sdrmy~Ubr4$>!+@*a zli7-;lZM*^>#zGdT`*90!RP6lR!G# z3`7AU&?5lZ%{pE^>2xnHx@|a7@S)v;69fln)fy(3$*=IF1+Jsc(2-m?Pvx;`ZykK| zA^SE06u=F3~NT=I6AAU<5K48IpJR>n>YmrO1ei}dtVPZ1`Na%~3X3OIo!YZMs z@bf8_9(G-Jx&Y6qBa=Yl+DI7@bzld+b?5r`WOaWMeT#63-@4=J6;j`**PFbEcLi3K zTnP?C@RW|ntse)g_6WzBZA{MjOLhzCoVy#o4SPVb8y{aEeRPYujNqFg;9qz8gY1i6 zU&voy{MQLwT_?j&2k|IJ=|wXE@B=-CFRS#Ag4Y3V#wTftiMnq@`tKwL@Sqr}`VRcoOG;-oa8(0qw z*kS13HwE^#)MRGudaVQwl=-28&`6k^H336gVS_8+Z#m14IoNn{`Kma9g+og^mk5I_ zcR7Dnfv(27#D7tsX@revaILq$KB-|nY|gb>g`91$zPTk8 zL|%yy(1EF~FN5hYaLFid=^>uos`oFC4o}}59Xevae$VpHn^3vujVl4`azQq6tC!na zd7c9;B@n9ksA-ot-l#w*#1W~2(B=`m+Yu2UXk21OcTdoi28eUQRTxkh9!@xnDs-L; z2f89_h0ArV5Jy3Rl4&Wk?t}+iQJM^Fm}T&~P&&}o60HMijV$ZVE3_ypWXtTC&>&u; zHZese=dr(1dk91PKmr~s5`Jk;qA83TP1~1$1@by^U{AmK_`*z+hFAg=Myl}G5i7Pr34XSRjkt_D8zZK$PU5&9A) z!3fg($593so z+2ENVrU{)}2DB^k})`njBnC^KL0Hl zDY;*8Ap_9}7nizX!zjxJp8_|qhU}BWdm@^*8@|?Z{*7G#B z;ppW0OZfZ+`GgZhRSkKC!4;D{G+#LH#&BWbyaO9-UEHw9W zrVoYl1<7_5TT})PMpk^2)d`0(7a5w6!!T147$nbnd2*EW7~Dh52B8qF0+`deBo8*A zVJ7Q~_IJ~E*oU|OjRvRZgXhiWUV1c-j*$A^Y%4-XZSG<_8ctA<=3(v!y~Td8ki)sX zi!Gs=dv)ML+!A*4EvZx3Nj5`24081e_u^l~Rtc7*^=}89$_GKNR_(`a2o}AI^UK|5NOKKt#X&M#Euv>l+upHr@@Dc&wn}IBr-DwzuiNdt6}@9$xDM59qw14J=)`;a6ehNB8F zj$FXJL&J-8N$^{$aIlaCqHNu>^1`z$-QE{6&sLDr;hnL^3NdR|(KF2{*Q2 zaEe1+8f8VyZgD3&_*M}%VLXn~7&4`S+qC!DSBe(;N-a6FAZw&hB!jygi(AwsjiEyk zL)T1(%p8AwrgsK>Gx|F;q^QIA9&UTIQcf+X{*ZwdMmY)W6MA z(WjKvw+GhJrdPyL9AQ z*UA^hr2294gkt+ZUpwC2Y_gQP%1z$+Xi%lS+L&YRwK~V`VAL*-^} zYG@s3?Q#xnHFZ;do*c$lC5dvf0yIO}!Rd^79DBi4AQu+a{?V#1I7v8nf5`%Q&%SyISKq3@3bIyjvh)VB$fjg!AbeLSQNDt4HmA5@fye|?XbO-o&^zMaRRxSO z5$Ym)bdC9n7wenGX^|&UdpaCPowQhOnrJ&o-Wv62_%E}^r0qM6zs_ceO|xRdpZD3U zye>WLVx{5PgcI)Wn(VvOr|*ZI=9g~g`UQ66oGQ?cp z9hmE@pRS3|FdaMjx+L)M0H&X0=Uv*93E5B5|2C4;#8_JzmmF`e-*3zV?~*WMTI9&X zGtRT^&P9W{fd_8n&ba#x6CkIVh21OE1Eq5{PO}XAMfeofF1zuM2|nI;;78H`lkWbn zgF}+U9Fsf0{Csdt&R~S3YrM-cOR-yQ~ea$Ws&!DAj_<4LZVjtG6ikCvHc`9 z`uqy73Av0n%PlLjq7*KE&{_A3S+wIE$RxXz{?Zw}_DJ8F5H@h-poio6rMlt*T>#G4 zu|w2!t#KY|mj`Z&v08#>;WKuKsH( zV=`l~5;R8PLd%JkO0!vm7f81Y9u=|67BySc;;tL9L3I!cw(TKHvCXhhT}Lzn(}Bnu zC@~0dYicByvA*HW=p_Ql17)<3iER>)gJES`&4Q3&w1Ev!y4(I10CU7N=K7kqotxNy z#OR8Yc`_3fW?{XQm5K`6WCI)<(Yu4O_Q;s;zMlz}Sz zl(e*3e>EyAQs`3wgak%ro-}Yy1E#BhKE7Fpk!6lJ(9x)nIIQ&_QMPXOh%!~hkR?c< zv$Q+{_Na^l50_83fxiu?rgv}~h>$({+W;s4zq9)w^tUnc>DAl^l+|Q)|MWZgc>3n( zx7Q~her+~Segjnfc0Q+_{aJPskv&neFC0U{u}I%om%Mewr!XGbIC^fO4I! z6p0ot9Egc!+d zvbRe4U#%j%gua{NiKm#(5?ih=w*;h48~EM2+F<$mPw5F4x=?J5a+Mj_gz>;aR7El~ zRDwNNBC*!Qz>GIBU`E-RtQsgSZhy!!@n{CUL{XoAuU+B2z#iUMX_@fkn8l_}i$=nf zJLUT0lT<^}Fu7_0Bq{h`-?z9g7R$1&wQ}it3kIk9{#!6+*Y8#=7+7@@)BN9mI`C`A`+1NucV&P(3V@7Jj>_UWr*>C5NL6 zYc+Z$9@cz*>4r9jV$ul!XG+AN$FKnp@JvgIo2&Ff`N&jycPmeFV3(Dg;UKWfH}@J% z#mPB`uvN02HdIWa7-x~Y?;S)vA8wrnPw5b@yc^9G>o3V_d z=7G(f@T%y*{3vvKU^SDwK)c!I*Nb(Dou+1_ z6N#bbks;lJUP@{2O;VpGjM^$jEF%CL`EV3r^rmV6&iTVp1JJ$V+)Mc>PwT^Xtm$|+ z2rtwF(){Y%C02eQ2(LHQd$C0Cg|Q&9av*Ktw>Q;$fpAp)t+_$jmJJhaY^v&FCIzHO z0Xb`#%>l`iq@j%8Ur4@xc~oAZrAW9m^-gO7)4_kE4iZAG2ylRGw|WOF17I=C_rt5^7yq;7m*cnBKgIJRBiOT} zqryTwOHrhd~(YI)jzJv}I`2BzkJDmU)jKR3*q%a{^ zM=I?r4nf9X&gl??kJH%CMtcY&2f6Xp6CYNavmu@60w6XmzaPG3F5@$}`< z+stHgdp-LxXkWtUN&GVWe=gdsj_#gd4*N_ZECoWfQ_|W zXABZ55Sl&RM^E?B(|vT?`)JnB1rYLo{^#bGR!r3Y`JdDN{9Yfwg(bBkhut&W84RcX zesDP?kY*>q-_J$#S>lx(h#v&x430E9j!v={Nyl9zcmu#<`lBR`3Qh+I7pxbE2^`cWK~{e^V1Z3VXR?Z-f#Ns58lE_@8aXj4pU&D=aLxvwO})8g&PM zBx4AZjNv`zn8~(;DLn?$b7RcA@!x(Z9c$PyHa8HMOeEKP3f;?$b6mrg^ORzGu4UGb zLzDGjm1A@P)a&9D(k$}~i&vwH-;rOe-$3VDrj*mZ;iQ73O5Do8TC;_NeERYO`PA+E z%v{JuHZr{7!FmNDKp@OXYP%J{`M%4*&5u|1dNlLygfvqXdVQ5~)R>a9V`N3?^MV5K zszSiTo$n@OSOH|1s1P!7=er3R{(O}YjLMV_dIIG#V{d;Ilx6GCOIgyrAzlSYVyi5+ z!g8f&=!r#uIeNvdptA8*wWZS_F<7LMT^He;ImSw}$+kO*b^T#Lb6#bKA?|!P55pp4 zl99(z=NV=)9De`#*#IZqJH%gQfx=L5(rk}Q|D?Te?Jq2%-5S9(U6uvmVAxMvz0$u# zD;{&d^sQb2>>E^V0DHcHY!_y;?u0UsY$n@TtfjbMhVoEfrRa-D`)WK!7CobX!Q`b~ z)L*qm@bu3v%s%S zL$$_jWWn3hEBN|5Pz3UQIQ|1=$yTDHa=+|e_*Af0eM~WX`g@Lstvew-U|ld9CWvY< zLzgAC-2$<+JH;NE>uR#p*NacSJFoA-Zea273jC7wCrKLF3y}H}Ii?`Die4sf>p(!T;$_flbC;a|vIwddUPSUcz#F z@Y0}#qNsPEcgb#XujZibw6~KXjE{im4!%W`Y4>Z(P1`5Rbz{c+i;B&0qX&r9Bje!} z99xVDKR*8Sg1|{RA2t9mz>z1PI+$KII`9VwRye+L>X-#ZFaep|gQN`%{|h%zjDLQr znVpKEbrI*%g=6jx)STKPpK9Ok;;Q(DD(^>;y`dJEwQ_TG)qS4LUuJp28`Ho|U{&WC zH)eH)xnSPCU`bZXo9(+#Z^+x1r~iqkx;yN2+ui98K%3XEUyx6)Uppj6{2va!M&pC^ zN+-;iXw0*n+YnFT*6^RHr)tOpwTAJW*I#Umtt+((#%mQ!^;(5_VZkUA79_7?%apkd z^SdAjj=1Hm(AJhoL{PQadT|$l@bvBp%U~pt|J|U5#ky)r%qO zl^m8ipVHeNmONP`S0tiXiHfJ20uLDe2bk5kKT)Ef(v-WV!^ zVQ!53%q};Y8!CRS%ROL|{4j-NncWRlX1h$38?+ovGqsX5y}J~R7g98KM+8mmGCgY) zX~-M7D)QUXlG}{33606t%&m~&Ttj5w8m)|NlIpg%87oI+FgBq^RWYZ0XH~^&CB$a; znX2+aD}S?_XYH2`8I4*+nkt5ncS=+A71&yxZ+I#ad)s}@mKcnbDT=S>J%JJEiQ z!~I$p^Xd3ccn99R-lwELIUt$uCcWXb`Q;+Q6i8@Mf{zpOoF(4j3^gd^Z|>F60x%n&& zm}_&%XKF)nQ{-@{xe`0(QeMGP%G5~>xDmyu@o5!mpgnIHIi`QE1#~X(rhi_OEQp5} zoxUqpx{OyYNWkOO^_|hjUbY(8g8n*%jcbP5?rXh7) z0PyQVgzL0jIkZ~{dwbelNb!WUF~yU&p?Eg~5fFNiex0u_Dl55K3H7r3C=lp=A6*J+ zR#71HI)CMW8f!e1T`6LYDBljSHteaCjh`+e8NTa*m2x5;$GU4Oq80XEPw~56p$`w1GWU5IU925*>Tmb zZYQ=RD+?2wSJ&Jv!n(Be$&#c?mX2z$Su1{{^gxT|dx3g3;~n5d?B}%5G8?ZW0Tf3Q zg(GUNyWGVtN=ctiQ7n4X73%tG35FA#kJAv{u)Srqy{JK4OX z?3-cz=bca1ioSW7SH2E=C}ea&c=`(WZ5P=+*xoSK5{AC8gD~k|!9|-z98( zcXssF;bZelxDiTPyIquALm$Fw_r&$TqkBR(+!m&IZQG($wcAqG;o)w!g%(j0gVa=z z1{X2swQW9pMeLhG6K-|P9;Nf?0ckb~tONmlOH_Qu4UXCu-S%ackiT$$igv)RVX+<9 z!=&B=wsi>f=z(@(u(H41}^ z)UI^+D;kzt8-Qr*M~y%93ON$tu3Tv?y}_^|lrWNp>z^ZuVl@3!VzpGSA$-gxDQmIC zEZ*VhGCXS)rmR)g@?fTZ>%9=>+9d$d*u(F;WZsRD(xMdJWC(#$#eV5;LfRhe_4R$X*APQ8-%4? zv?bczoQVWm@j=JZs%eXtGEzHjOg#((WH;uAa^MT1s%Ob^eF-oAN#xa7^%L%mG&;XG*nH0n&|UFwR>q_}u0_2XQAd|XOV zcUQZuw5zwvOLLRTt2qn*`1ZdK-+g-1{POAa<%hG6zny+M?6kWFQKyNM8}vH7)&H=~+0I>D;O~u!bvPfY)$7$|ZzxbRRE-PTt>gBeIPAhcJH#nubw3C}yh=t0KUqE4H zZc$Mz!JyCY$kB&S@0v|_`gkETSG;GjlXl;?oMWpCFP^ouDi;7rP3$0C1p#EH6lYx4 zBXoob=@xxLHvnROLIcEbWl~rci;)a?M^_TDDzMe>Tyc3L-wJ@23Ih?+Z7YpR^(G|H zD4nP#qzcr0%F#_!69H3e4A!D5tY8@+Xe+yg{dj%0u#SZozffzY1dF5mtX2Y~8;KTM;ABl;@P9dcP$=-1 z9tv?AHHy0f7)}vs+t-%q8HmoJm|PaBJQ2 z)!D@uYY@NSPb_$4zMM=BC-C3seC~Rs>+{3<5IGYlE7O2E|Eah3Q*o#WO3G9`2vI8u zRQEZd*9l$aSQ9v9Va!Yf=ynUA0;@_0umTuDy8WX`r3^HR#al>zdvw+~Jv;n(c6N9M z|9yP5j=s&9JGeH>@paAy=L+^nr(hGsK(o$EJ$x8Ke{RhEr{7muB>YhXI4H{l?wrHX z>%+*Tj+sT1W;rCGDnMg-hJ3S({K~NVk~rd4@vSxX^ADzfVy^Myf)!{XZ@YpJL~bUl zTf%xQ&o8rrq2S(flC*lct()Wp(}>KjzJlf;%W)o?Og8TcBg^5pfpkFwO4Go&-sH;T zm+qSd;u504MZl$KIgj^Ep#f)u#6V)s%%M!C#07>sh%Km2I#`GxfV%$0Rx3o4_)1?8eJy?Q8)RAz`6PCMjU&L)QcW?H4R zL)_^(cqIZZy+ta(7-lEOVkB+7cR)|?`#)|}G;Ad!g;Xd#_Xru;kyTcuT{6-}_Q=jm z!z_|fMpPncASxq~q)@12M5U6#?{Qvle&3J#%3n{9?sLw4uKU{8b>An8YY%czd719} zGe{|Z_F`52zE&43uh?spr?@1|P~Gg(6nE3XYZWobjw0vj?wSBw-XGPZ(n!VZb8bAUD{mh z4~{!PvsR;G=Tm9@cMLKxh;fcoEg#`(CCS$aT~h0pX?`o?M&YS4JJ0b4x;k_cEk4yp4Uvw z+Vjqq&whSt&x3OJD~-{G!xu@`Etc3x59>cD-|AXh;CiLi2(yx4-noZLhIf@K%6G3= zJi({6p|#e9SNpG>;4Sudyne7)Y5pKbud45@!-p*0#B+WqRGg};q4?`f?zubHuT8RD z5ZU^SY2DP3Kb;@zZrnfSMZ`xR?bg;tXVUuI-txG!Q*)2wt)BEWn6RYen5)EigjLtc zz1!uRg!bMY<@!wEV)JOT@W;@L2l+ki0|tlAJu)k_X879vkFVtfR!!cqDD#GX^~K4X zlgxEZEX&P~^pqve@3x`A#BY1h0sY7=g(dAR(gcz(lbT}$)9>w@(R;Gu81q!Eu5pX% z$7UEsAfCb@9cagH;gLVp)5(Y`8MCq zZr5QuPrh;HCRy+3FRAxhPxpk6qIBMG)CAqMjD_=~7xfrlmSw%zS5T6n5H?rok^0o- z+ou${KltWvBRqP4w%w%_9WB?pXXKtdA20ltIlWbL2esrNhk>f=MMK^<Z0KTjuMw~V3$p%B+@v?CP%U>w`uu#-{)M|c=dA3h+tI_WaauhP3@0V}j z4@rmMSU@O)k3Yc{y&n+w$DX#JKYQHr=+4TAbChCi_A8P3t=g zWlG;tmvm5?v8-mJ+Lo`q9$5Yy{@i4C``wefJs;BQ;vU2F{-*agc-T%{k*3z^K%UY@ z_aS`$p1ULaYx=na&7E>HJGWn->%RTWysW*yw{{&r`t6`%yT>8ZJNIZ^(7{l3ll74< zZ9PoqG>wk<=pV;7i!|?OZ#T-wc*uoworT58Ho=Lyc{4h8i~khuUUo&ZzI>YDrswV2 zy!fzh&He5pcCUYOv`=vKiJqBfEMKIooPGAj4Q0a)r>+dNb}oJ%H1u6y@9)iRj7v}E zocX!c{NT&<&Cia%o>H$eZK}Lu&)Qbf?(>hw#)ga=I%MPeU0r0y2gxSbG^(Af8lAl@ zBn?s4i-w((Rpx=8f2u^Lqu#1C^Jbzmg;KDJNFo@Tx%DRRnwy*`^KZgdwX^w zuugU9)N_HWO)~awUeAjOKNAvlqBu6uXRF4(f~woe8wb{8cQ`Y+(+tb~3A6IYS=EOq z{8Za#tJbk_Z&ZK#4^iUy=7|bf5sytC&L28Yd4HZ~M++CP-@6Cp?AW#L-b;t4izbe! z&);#mcTv}hfe%v-uDJf<%7wz>BD?y5!=5Mai#-U)p>i-s+RGea@?+y;rue=jY$) zWg+!blvQ;|y=rXz)?Izv^=HqguiqD_72p4%YX4o%`={^jabieL=BW14Us zR`19e+p|aJ0JAM$J+G{)Kjw3oN*;q?TBsI zj4^HYc~%cPd@m>FvBC@miS~tYoliEMtn74p`?{YUwSP5j(JZy`Sl>2O{mq>vw;$y0 znHL|CUae|1Tutgw=-_=u{n-z%zK1T9)qHIq8gH=l;N;3;&r=oa$2#tJ`26N{-*zJ= zKk2e6<@OoHjd!9N%N&P)S~WSp*sMm>D&n)*fY9FaO6#ny-!SaEc7bVB*rT3nqmG0o zX5TWX{xEmo+Y5KA)uXj;k15@iuhWIMuvGs`zqbS8u1TAVzdD~Usn~qGyK%=3fhVsl zd_7~wsc8X~-TJoKD6Din5f?V+VK>)Nn)}Nv)|rI|bkqx3_T)&xYMzz-n0*h7osK9c zf7n!MSn#>D8M~D|0z8s$YIg5Mhk-m zTjQU*z4rD$`eaIFOkwyj=fdl$4UOKvZd8|jx)JcP*SYG$6P?Gs zl8>11D|A~A^z%~*H-FRh$)k9Oj3A3HJ(@dO>{C8-@B0G-U-Pq}pLfONI`q8KxXiV1 zqNMA#eU1`?lM@9WBjbauVwa2#OFWHb`S2Z?xa$G;FGKF@wu;9Zs)}G{rWQOP7 zNwJ=?Hc^uNZo%7g?d;;ChiEN*6P0r8e&e^4mAdznTRC*FvRn8(p}B02;#4;ytBvaw zM;)|XJ=UysnbM5YQOia~$P!$J+?<&B4z(VmanUEH*=SmyJ=+(CNR|w`Fzfxhn`%~ROA`tP2Kc#MG~ZI)Ibdj3gg_lP za?I*<@mGE0gV&pGe=BP4`sKm680mJK`&F-%%xbEIuG?3x{HFcBWJTY75)=DzT6tP~ zryaMrS7P_e)4j66G__joLxr^LfqB?B^Rkc}*P&NJw|#k#bm9=t%gUwUen@Ql^No^r z25t_1=PV8wj4+?OER@$={^b50@147+X}DLLJ@sC$uRQbk(c9h2UrW(wsJs(S;!$eurWXCmF)e7AS2V}q^5?;bCyZe=w=m~{N6P22D4T~Fxkcr87emVHX} z-E7`YPxZ@vH(%ECy%Uh=l~mAu&9iGW4t5pmS*WFlBNElt)JHjCn88f;}a3SB;9YYCm@S!gn3Ec-j82ob%jqP?2T-%7Z%} zBy=)sZqU~Y_UqHrSMTEM0luLR@81n_)_Jg4E-brytt_(iTfd_{bMU|5D-+f(w6OEI zAV2f=d9e2Tkc#Mjb+=@)A$5M9mSLOrEWRfAykd&LXhEj=)pUN=deys0JI!XLMt-k7 zd|Ujsw)aMVhZT9vc^@sJZx8ukk9!FEg|o)?6F&t=M`g^z1PPWgNhzTKg5Cuo7i$>)chyq#LxsKg=fo)0+Xvc~@MK~J8l`}h-sCVMoh z*68n4HgfBEEM;O%*A<~}y}s>7%CFx=b*4!p;4aKYn&JukcfH9GFvE z6X0>BG$VTMZ5^-VeGdJylT)i-zBoF5&G)XFeoOXU>0%Mv8l6qWANq}JElZned*Z|| ztBXYoCwTU$Pt{64-nQaHr)j5OX67q=%{YJl_0cKzUajRlcU_3CI#`~K=5 zuzu8Qt*HF-+TAW|r+ojh@y4?B*{gT<`ZDd+Z~seQV@{Sf?OD5^aNp%xn}aXMzTaCU zI@`;pNfME_*XrPa3XyT-_CU8KjbQ=Vu0aDIuN+si?8X#9?6nxRn>86V>+%M_((9`= ze}lm@#iaiC4V^sS$7ilfDzlVFWPL5M+nQowwJEayKw)rEO#Pl`I#XkJJ2~y^U(xlW zmZOo+oSRKYhBvIs%HL6nY_j@^W&QW+zxloMc*#;1^{=jBb7l;kQr7OsvC;--!Jv0P zH^+Jl__0N$9n~}BKi)X)=vv*A zy^0qET73pAE@+!p+PJjGm!UCv$LM z?c6`t_kzxssXa<2t{pva%w9qE?8u_RaS;}0mz4KB`z*HK=`lHDR%%P;yqZv*Q0VF{ zk3Up=qwS*DNi%QtvcF}v<(JuT`!M%sO8q(s#m~!6*1tXZD`$aC`7M`21v>U8zMVsg zJWtoX=hjjsjTMV{^QS*5ta$5xLZFxE^=Et62tL9pns5Eb1>mI`T zV9~L;rzOVbfx25}h3&e3Z(*8nb9>DmR@0X&T(SOTWSFa(G;m>Zj(Nm5^R!*fVUt@w z_l{WQ@^SU62adezMX7ZauT{Hl;oq-|-8b)Twq?L{PlKdH+lLD-IFE4h(s(8aiwrw9 zrp&dt@YmezJ$Dk$y79U_<7+N=uk1a%`-T$r4jT7li};osaVaj?y_RV7~Mz9@b( z70piHqc~VCA#CM=%2qyu<>^br$-S(%8H~9femL$x~zObbY7f=Cet7clQjR zttXQQzqQ(Rb8`Eky%V~1n)kv*-&(J8Rqsf_!v)=ACLIpiwS_rV?e!p#~ zU;0u06^HYc`L=wg#C-LHPa3vf4p$S>rp%cenpqL98d&HW8n(*R@W`p(d_}Lt4(?a& zoTHyCHS#{2CHImsIdJQw2l~(tlNo9?>F{l(7@h(BfZs(0?N z>hhKm^KKoBb(r?-(*J>Da(jgoxFw6*ME8G~IbhACeMwe7LenPSP2FXkA}DmsHnMOq z?RqyWCU~*&u2u)nU9Xz4BcZ5rU0}3k&c}mJy0*v9*%%xZZ0IO1+L3O&c=n*YRiSen ziudGu255)QT4oidbSI$J{hr?uX*=OW!RH+r_Bn1nz2_~-3wfxjV3U|Wqi@%&y%W-A zw;i(AX_tfM?}M>ZvImcMv)c0ZjOT9g+dio!^M^JJY;RpS+d~q2M0d31^o`C*U*_A) zC>X8TKHBa08%sCEo*T;F_MV}rXHzqBiPzmljuGEt2TnH9-nOfs!Nl@$OH>p!^@9$( zkNkOiSH~Ml;{unI9uyjm+QCu8usZBq@MTTj&D zdo&(#341ok{nGTADQjwfcbWIHDH*Mj#4#wZ{7Rk!_@%IEGT z#ZmV+Juwg6-Re=4Z<~D~HB&6~D>9s(>F;0ldP!Bv?d#h=mg+w4tUoz=+}JU1PFy}~ z;rmHZZ+lXMpd@|hIQQZ4i*Bl15%(0us~);}u&?N}@t#*Fj3>t6OBg$Rl0zT%-9G81 zv%PLt+rX@^bNR8Gr)u8$Y-S#It=G!g&ikDnr=1(;Iq+*E0+xlfIfWk|HHAeb6%F#< zKDu`g^#IlH@zLw1#$*(1iT~B#VQzh^X~mffybUHe{|Iydw#QJMqmHW0i@G`wxD7eQ{N*y=}WFZ0S78 z`ew}JaZdX+?|=LDZOZbIFSWWmJ1-2?jlB`tb4KWkidpeTw0lP!Y3r{L7a;2}zL$mB zjN^-6d=^msZXF7FzdeUads#6}m z6&*CsWGFp-dSYNhg2CCB`K>z3v>$0~dXn>A>EpBk-M_Z(>N%^8|Do#P%kCM@Y}D)L zwe^0@(h*O5PCQweduh;<#dga1)x)1%dv#vTfBpCTT-}%Bmc)33B%&mF92E_b4rX4o0 z=+fE*L3d#{6KlhBW5;J2JsbWp@K#ry)F~n6R?F2gl&h|pxW{$(FZmSyPSN0YfRcZ^ zveKr8QO_InjbGm!_N)5c&(f*Gho{y*`smy?gI4TXa!#TB!K`TY?ZP`fcOM%dkR2U+OK$L>+X`oo z${f8}Zj(Mc$J!oU_t|-_qe)Kw!zmVHqlO+ypB+81h9H)sMn!TznpPpxG9r0^5fAaDL;s?^bChs)P7Cdp>8xWrN zQ02Y(>YY!S z4;mMo8T`g+{xhvE$Mf{l8^(X#HFRi?pfg6})Dx_dgp14@gQM;nr#1^@T6^A(7gabY zKImDNd;&)zU3M8%Ak_W1H@hsS-+0~nK*ig_?n%9!?_YQkv8L6hrM9wlbTl-d(M`N>t+v;7K-z?P1`bGBG>tYCKRer*JQ^@i;aM~u;N)iko7(AUI! z&eMR#56QQ#8mE3d+NW;8PhZQagX8C09qK6eoT&2bPKZ}-M0)Nb<ncdF?T~_kGD_Ldvwa%r?9|or*YPuBUuL)Jt_D86zu;++s?RTj%m$u z{SL)4o`K!W*fFlH=CzL1zGZWyjyFwXvgX`vr(W}ak9_%f--~-s7l&7P`HUDo^W_bV zi0cZOPs&bK+Fx$ooZLz=yZeiphV?qCqwLJ~j66_2Vt>S!qRJ6-KhOMBvbo#vgNeys zgVN_sKD*{-!l|;JbEdX_kbhg6SUhQLuStfZ63iomHab>XR8B9FwH5f^aGE;0x59vp zlfV0|ukJh4UQ1<<(xsJVANVJhd+IwV3@LVqzq0njoUXd@!i}2_@3=KA%tw9e2-j@S ztP$f4UfEsLSl85d%U8|g@^jIdg-fSD(wj0PR^7wDYHGJl`@-za_PQ*KnzwB3Z>w!L zy2k2u_}QqW++4)nrl8zv^5cQ8~48Z_Jhx~eN1(Y z(%UaLi)_2|$tmNH9*%?TJ^j11wyyncVp{L&r4j7sT_YUtx;-dxqD%YVF7iWRnTC?q z?}ZAHqXz$sxV5t&@7vHZ&vWm!Rrq!9RHIf@--@a(omQA9#&^~joNU6s81*LezIyw< z?Uhc~T$TQQF;Y|Q(1IbIO+q)kACoYmIj?G9jzvUqZfKIqnqI*@LYB?&50Bjyb@)ky zyGd7T|D}6vl9gv|=5LMc>^{%TH9K_6E_?revl0SEgs84nAKY!;?I~@}wYqZm!h8p- z#*B=dZ5P|Rr{+dzs`9s;Puc0ncj~%1?DgI^Lx*m@?^oL^vEQ*vDOVenUfQR`tsat) ztJ$K&K&b6b~Z!y+BGcCknI-2XutWTMK?qENqz%6vSepaPzac_O&`|YaVRn=Yn zQhM_0>E(^>LPK}zPO7hM_vX`v^iPh7_eM5rn5wP!ZI|+0vGVb&l0G+&G>npe4Eo$D z)}vyb#l!tk(;9B9(fwXn7O*+&LB|)_ok&=e25m^=?z`T_JS8x7IYA(x?PP!aWRo5_S|4sYOZ@aA$zfgJAJ!#gnn<24oYt9B~ z`gDB0dVjy^Rdd9aB|!%jl?N$!J@jzQQ|c8Na`i)pyohB_$CqALyMOKSwMq78Uv`(| zmQAg>wz`hD^rF>_-u@@FcHPK(oTpy6D(PUuqH~Ae<{nEhRsP&A<5^@}K*WoHj`|)x z_R+I9#CW;vbXV{^s(fmZQ?G0G8>{t4Y?X&Uw{{a{YxvCUx7FyJircdfRn}Wf z)=L~YVnv+IwKdrxCsucV)Z?yB^zmt(0%kRpw36Ta&~9DaTJPfGUQcshr0fQC;mqPr z*^}!n!iSs=esq6Tsg(y#GI>{*mHh5)>hV`WSDI9szcxRrt$yG9vabCF<&?92&A->D zrWCogn^aos^j#)@{_z^WKymgIKHtE-`&iM%3Pay*Gv<8B)mR+qa5(Rh)r`%fChE`A z&3*dfj{jqx@iXEJ4SieMs5P~uDZSah zP4WlD)|p$ASJs>vcz5!kmtU*hY`n*I@x68Te!=)UkJ5+F_U;Q@vS#-F$fo`3vA2t# z2hMRnwrQ_8X-I7Ome9bdc50*QSB*Tn=;Zg$#`2%0!^V{KXwWXKJvnQ?dqBGp%j)uX zCVbwzR#CgOz)z%@|8QSKhA>Oh#3Kd1 zLk=WFZ#pczGp5hDrK19~JKh!@JM$yw^=X$`Wg)^(4`)8-G=%byqEjMCKh{K^D zJ9e}QSGNk8vB#hyCe1c;)PhF-zSpNhU2pm&3@)^*pRsoRv#fD%_*H{7!u>;cL`^qe z-}S_2vn?t!jMdNns4VL=PSSnq^XXHL3+G72%4e_8_WqjkWXPAMCA_BYcan;iHx#T0 z8<;X?PVt9x-kL79`Gv#W17p(aJ>o-rb;dpI)%#;Xuy4fh96K#9VXCEdrDBHYUZ}&_ zJr@V3j9NKX^P>K;56(+8s+0O|%DAuk+jznlk8MsD5B4{2=VRUFneM^^`KjxNckI2s z*g?@nxOtSduGMAR%Ibmd+zj?it{AOoRonf^(!f)~Uw3@m{hkGS_u68$^>9#@d(hq= zSxXwSH>;f5@OtimBVGz?-<|hzkCEs~Mb*F0Z<-MPt!?iExthZl%`6JIcz(0f@i=?` zcEOGt>f2@(tuH)en02xCz)8KSmoF+bY+hZzV&Y?^*q!y)6ynZW-%Xy_rfA~YEiz1OJHA!llcV|XHx6DpAkXabd0E=a^DCcU8JjV~wby_ty5V+_ z8<&Qx4V)lUD!#H_eMy5?qlx2Z+u1vYot%3CI$Ng%PdU%uB4)hej=)D5o=yWJ{TA!< zJQIQ>pPV;@*Qh&<8yl*%;_da@`WEK9ibkECxk-16!6KU}Pxjw0KCt~|o<-BB?0D0p zZbzr^^zS{d6MX7D;NINU3f)!ALuQOr8{!mPf4_Cv7~Ky^ikB~&&FdM^cE8A|+o157 zdHo)2I&ooT-ytmmHV$8$&ZB@p7+A*M=6q)N6`* zXgy|Xf2Zu5&1ZAlwsZBd4KS+F+F^9cx@^e%{p}1t-iYl}b#9dW?!CPt%TDzsbDoB} zv>sHx@oC81$jW2Ifzy@OWW8hN_~+2$IBbun6x_Z^Y@t5Re?O^t;f!r_cc1B zA}Bm5(im1Hv{-%i(h`LN)6x?M#e?>2n|}1d2HQ2;CfOD0^}au1hVdr*+v`?HAAglD z6N&BILc4aJu*@#S+@i4Wjl}`{rsKyNth>J)Rq?j;`0lk?Mizr(vk&wgct#^}bvupl z6UY24wiWU3y$lGwrYDnnpi`lLL)jResPN9Y zC!G3?(!9T8O~OojGZp74s%HK|_qmqt^5hPEc zeOvUC(q^4i`HhCVPX?=fKeV$@l(F=3((c*QxBa@aM9^pIs#o9qy_J@Q+rHQ{`b%Nk z$J)2Hue@9MY1X^Awz}g*DPgN}8(y|rP=C?jSjzknjf*5HeQXEj_WYF+^khaWpN{&x zI$7_2RmHz{Xf(+t+`9ZqrND2!Q|fj{o09i!^gDNWbP;X7eFyjZ>AUW?ORJOf@~)rR zWLcCtw_^O5$;Y{D^lG%QP?=&rF7}RM!Y+5Wai^qJLD|6vYupvj?44eqcE+=(a@>ny<=!2N zyFE-_ZTYxkzqY-voS71lqm*Vgul46C#c$%fg*CKUuukdsua7ILufFRjw9?zu_;^4Fg0p%ry@K}MA@ z#dm8To9Lsi6&&m292CB<=kbJKJ?EFxGjBX>zFm0l_zI=Y zhW;_f0#rKBa*JPcQQG$CZY9M*%to2$&q3X)rZl`T*JeM2KX>Ys8A^T-W z(S{=d4mtfU7mx5z`dDHh-BPdL!J#C2{QDQ{-+WfSnXWnZs)6HWtKIGF7FvBv^?5mW z@F%O2w|lx?mV8gSAs)Ike_(q{g)icz%e3D3bTyc}??%8Ck)rp#>kdNkw!_yu=DyK8 zXfk{M+ysR|$-yRf4o9y^u1P#@P29H=F0#L&E;dGKoHsq-d& zyJbywiuFB{^5;gVSW3Gl&U8xG>~rSo@2X~#>q&vfZCC0qoPEr=#yv06CZHQP(2zW6#0+eTr5>Cs@3dazs#stQ~x~0B_+F_PfM{VJbC52 zeeZ_Njh|QF5qV{cZZ<5^oFLnB=j+vlABe?}Q}{VQAyiRN@oG!^EjKmWn1^Xc7HwJ;w#{F1?3Sb9 z1-GlJou1rV5u+n|Z9c(MRQJ$Tr^CZi_1agG3!xp3?JQPWC%e93UzkfcCjUQ56HIqZ+ ze}2gLe}4%7{t*BD@prK7?_l}g!ScU@<$nju{|=V_87$`g87$`g87$`g87$`g87$`g z9nAkbnE!V$|9>B3=8O5V|IJ4%;Qjr#$^*n~L#&6xR9ghX4D|6bDC_B|bXChwB(y_$}p# z&BK3;r|TH-2br4k|NIuzY2M6fJ>{>Dv(|936|ZZ24<|NTwC%|-BcE`t9E@pmo)ZZ3kqa}jWJ!Fv9= zj+=|%?_31jT(HD{{>IHk@OLf(ZZ25$KY!!qBKSKOAvYH=!vFpzqv(RhKdJa)xDQF`#HHV=zl}qmwAkJ@O9BK7;7Tn z@g+PlzOoM16v%Pe)Md{9_iub2kI&}`M0o4}^ZXUwF0Ly0NVizTSK36CYQ7CE0cpV>^QkZ z#y(djmqF0~oeOS9FgZ^`<_wJRpPbKUX~=r^CTh>vqr$=oGJRh z*YbH%F}uFNq?{FE#!2PO`to@)zJQT84wI27IkYa?d1X3&#J5I{u9KwI^Cl$eMAefZp4N!`eEj};_xu1;B z`H25ML)HTQWMbBq@dYvo=g%?M%7x^9a@aF=9QdA&6H4hgDJ&}U4Ddb68$zfPmi9uB zlzoPf_n%k#&zymAzBGf$Sslw4LXcQF7s60ejOr^PUn*wbO~{uK9VQg;2~B~qx}7f+ z{O7>`J7N=t1zc}jO^^m|r zAlJ%>ObaD)5#eVkv>1D>6kJ3w36V>bf*yZjm!@+P3VleEbjs%`~o+Y_+}!A7I|ODG+8&O5>}6k#4;{={6{WD zVmZAQwwurZVFh_#h#PsXL`r-CL{XG3QaHTqT%=;kyKw6Wt)x`{iDXp&iDb~m>@z?D zvPLo~@v}uxO@w}Os9yGda()Zr#KdkPA|ZAQ%ge?Pd|+hF#XJG=OJMPcKPko;TI{+Z zkwy4a3^8ZlLk!tx-xuCJks~oee|oK)jq{KblM_FJOEj=+iHMWFhd@H)QjD0BT{p3i zPjshPC?GM8SSTjGj~I_-^(5S4`V1&pmWRY5cpMBL0Hf;$5hOH)$|3Z_B9Xa>;Y_j5 z5Q~W}5#!b9wQ^!F#S$0`_I{EU-b2#Ddq^O_#h;!swpz5)$h|`;iz-!Udx2GmukY*B4fw&IM^Hb}cyEoM2WKq;SqCM*VSk3`F*U5x$qg zAd&TLA@>FGAo(U>geRpf_`tx3d`P8KmjEL%u@rf9!Us|@+{} zyag~4cLS5KzC17~tFuwrCNd3-&+-~DlGg)9-wkSwwdWWoXJZ!u+!A)(;D}1tyc94} z3&f>FK7bKh!C|aE5D4K8G4cTn*?NZdXfI=Z& zEwj&%!qZ_f8Juc@wLp6rvb1CzGG_!MIXrm9G9s6VwphPiAVg}8v6sL|jvJVS^>cuc zdYM3kvL8D?WFpym3dRZ9+A%Ov_v0|4bC9d2_oKCF0auPrWEGwO8#^N_ zKxz&EAl1xzAbY^tX^fMyu?CXpJl017#%Fs|fWZl2pMf$R%Nxkwv-LMzOJXYl!Vj|M zuz0Kwf^ibI9tw=qnFL&}p3oV2Jy!Nn_G5d6a4oWy?7NB4MMW?}2CNa)#jsG6R*+vpQ-mqx-Q>s= zvhv%Ch3(pf_Kmf(e<8H}X?(o(D( z!CND`37rtc4--q|tp6=^FybE|%RtsrBBcHm^72HsxV${O z=16g~wRd<7R8}QO2@)DWRtfFJ0%8{==!s!b;&S?gPmyXS>x=1;Iin4kVq#)1B~ofb5d{$4gpP!kFk%D1X)Rz#wy?5* z(geZeJYpA+YH10he2S2htR-^)te%ATO!O6U|Afw5h{N&~Ft%n5gN()k=G}l1za1?O zY%Ws3EhW3YaHZI~B*uXg*k{n1I=p8d;ax5*#ma&drjfiG%{$_Lr1u;hHl)uIf`!Bs zGe6`G3I9R06P+kSOw7ub40UmK&S)ov0$y%a>+X6=7JY=d`z^Jb*hy5k%+k&qwhy5k*+k&r*Dj4xufl+>efg{gt z!B>{IU~A`chT<6WBnlxWBn3f|81)L zzcp)MB(DsNF44+Og5edM*4?1jO7g>$^op8&S7jX7%&nWa2P9Fz|e5} zFOPE=YooB~g!BmlBYlFvNNxleDqQR{;M+3mi;Na-NXC)+7RC|(k89Is{d-_22D0~q z&&tR&*Ur!K6#`-bYrBEr(d_+@s%PX4lw+a~9 z8w90GZ7m9&geM`sMDHS-Lu8O^5h3rvNe%mM+#3@N*-e7MAtIQZ*dDGRMd&OdHBvA= znnc+9q1Hj30XLh>1uiRj2A7m(?}r2`%WDF$n2im<7)b1qYvpWwj?yuy*>D)K`)D(# zyv8**vd`cGbb_I*Nibv?35Kpu76Yj$M)uyIw2ev=xfWFdf+2b)7|D@w)p(*4xwc#~ z7dXpg-QWbXG~gUcmR4}=2%mD!56drbObEZg$P<16Mr=F`9I?MJTx<;-&3|-#(Z)#D z7lKag0tB7Sx1+6q^lAX3x{2Gm&e9Z>O5(qWAPX#APzfY@5+NAz^^i?ub4$q3irE|r zFf;-%yusD!*!2ZQ^r;Aag6x_DBYrkllVkZ0(H5O^3%n+RO<`pQ88w$eS zgb%nqFs!^G#m)A{qZtzqX5S6kle{lNHCDf1Ukr&GvAvAV!*RRhh%?##7pZ z?^#?dkg>1<&eJbd{2r2^isLuH?_k5o!}e zKg-}V5MGmGG7SCjSi*l?A2Mr?&~r>|EimFoa6QNDb8+Smc{kK1$a>(+AF>{(SCIS* z>J`LShQ~$hG-?=Zo*$iWr0QlxEp_4|c+ndId1j+XIZoDd=7!ItQIS zlzuomi(T^;Y7+?ZNFN^BHlfMcHAl&i<$HuZ#LfUCb_OPZ=r9~fL}UT#l*CbRZArX^ zx&g7Zz=(c9S1z$--1Zs5&+yw>9f7(5r60;_bR6lYfuh6VCoKJtQXtReCP>DSdMGZ0 za{qT6FtS$*7?Q|j9N9;OMI&`4U}Vm~NWPuJ*nBn;9>jmkABr<*;)>;K=Ye#!1-y71)Uf2aCNHK033O7)Q<* z07mln+;JnUZvhP3AJ}IgHA2>xo+-h#KeK);htX?k{|m;!V6xAJn@FCE_?OHNwQ@o~ zm=D6caK{NBz^D*DfMO$aK`D^X8KrGH4qA+P4@5X@94bNx%j!B{Rwj02?VDE=kNy1k$vY!OkqL9d5 z3)h0&kDk|pEe+Hz03&t*sejhTgg}$pEHILX1BR0gnE9bz!Nv>F;w0Y$42(strMd}b zi;b~yE$KDjyes-1=xbqh4tFdQOM7%*5j%rTSY+LRk#$2i9MQYLh~7nQf{l~W&_VW1 z07GEL(gm(4nKRlV35Mh$%cscrvc58uDNG3a473`s_5-yEHvh*Royx`^z{t5)z+^34 zOKkwO5bJYsnu+yKfuUoMoipM$vc5QSkJUricFg*Eoaar~7xG5vf<`Thkvt&+PINo7 z^Mg~(>LIjh5Iu>S1JRRQV+MOa)EtOjLt37!2kHxKoD8NS{ZicaBOVXOrt_dd`yIhL=PcDLG%!wKq< z8FF$hcC-@=U4{&X0Exs*T;M~;;e-`(E!iK6E@UK(*>T)~xdcO1iC{R;gT-KISh|49 zWZj@piJpW~Bzh9U&(?&w?SpKN8yGnslf&q9(T2?GQ!EIPea;LL`hgQzzDG5g-j6E~ zvUI^Q39Q}_Ax0#$LeYji1KSPgwJppUX-qN>`4@6O^P)- z2(94qQ;h7jLua#52LMuC=DQXF1E@);aYlOro%WLQ&BQ}aFPqX)f7e>|`QcmcC z3?88i*ZRTgE7U_tjttpE68FIKCbGb_JF@Qv)*$=`X(M_KofSl{acB6E_vH@JVE7N! zOQQdPQCh*+vieE_ZkS&(4uq%PsH(}!$ zgf84bmM&3##_0Tz?qqERT2n|K7}-g}lgQo^eT8s_$TTn# z`@x!%H3GX3Uy7^8v$RKAkHn3ry_30cXOyw;#?{$bSw$32=*R69WNiQ}EwNGDUP0D2 zqN9!2%NA_&rM@nNid$e~|YK0w>bHtQ1tBWHti80(jSG05I^U~t6P=feDw^+10tnIF!l zVRQt-Eh!tra>uu`F%yTe@(Yae0WdapL5nNN1py;*Eikgr9~hBUVB{P_9D+gm`hX#` z!qAHQI1x)L)cEMT!CfQc=-JT-Ly;C_p8+vv^dH8N?;s%KLC*REM)nv3Bl`k@k#C0m z*CNdF2D0OX4^ZP{bt0}M-!MYZgX4zScWXgDxT6FJ4J0Ig&xPl#?Eyy4E&`n`dX zGf03DzYZA4z|x9KR1=JxV~7TNl1Jh&HYNr}_SZ65bAks z42IMaIiCv{*`ost=8=702{{i1mXXwT5w4Ow16$;<^MVOCG#5M0tPfPjSThro_yG*L14!?8WA{YBF?={d&H+l2Nw2#$Q~2pCFm z|2_i_5;pr1jGR{h?-?w^j6b>p&{vCzDKti$rA#DVE(I5;fW$O@-Odl7@EcZc@KD^h>8E@ zUCuj2@%{ge^YwOcU*h7eGJLp-@htZMm;Zfv*m&l$Wxn{yt)|XQ72`=BuFJT;-~sqA cKA7y|>)`GC-?xgnJ7R_^0|$eP5=M^ From 90731761e370f9f55c5500a98aa8203c65f2922e Mon Sep 17 00:00:00 2001 From: bruno mongazon Date: Tue, 14 Nov 2017 19:03:46 +0100 Subject: [PATCH 05/19] This commit provides the IQ record-playback feature know under issue #272 --- cmake_targets/CMakeLists.txt | 1 + cmake_targets/build_oai | 8 + openair1/PHY/LTE_TRANSPORT/pucch.c | 27 +- openair2/LAYER2/MAC/defs.h | 4 + openair2/LAYER2/MAC/eNB_scheduler_RA.c | 18 + .../LAYER2/MAC/eNB_scheduler_primitives.c | 3 + openair2/LAYER2/PDCP_v10.1.0/pdcp_security.c | 4 +- openair2/RRC/LITE/defs.h | 4 + openair2/RRC/LITE/rrc_eNB_S1AP.c | 4 +- targets/ARCH/COMMON/common_lib.h | 9 + targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 329 +++++++++++++++++- targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.h | 89 +++++ 12 files changed, 490 insertions(+), 10 deletions(-) create mode 100644 targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.h diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 3dbb61b5ae..c5ca88d5b8 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -241,6 +241,7 @@ add_boolean_option(UE_AUTOTEST_TRACE False "Activate UE autotest specific logs add_boolean_option(UE_DEBUG_TRACE False "Activate UE debug trace") add_boolean_option(UE_TIMING_TRACE False "Activate UE timing trace") add_boolean_option(DISABLE_LOG_X False "Deactivate all LOG_* macros") +add_boolean_option(USRP_REC_PLAY False "Enable USRP record playback mode") add_boolean_option(DEBUG_CONSOLE False "makes debugging easier, disables stdout/stderr buffering") diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index d3a13c41c9..d625dfa159 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -66,6 +66,7 @@ UE_AUTOTEST_TRACE="False" UE_DEBUG_TRACE="False" UE_TIMING_TRACE="False" DISABLE_LOG_X="False" +USRP_REC_PLAY="False" BUILD_ECLIPSE=0 trap handle_ctrl_c INT @@ -158,6 +159,8 @@ Options Disable all LOG_* macros --build-eclipse Build eclipse project files. Paths are auto corrected by fixprj.sh +--usrp-recplay + Build for I/Q record-playback modes Usage (first build): oaisim (eNB + UE): ./build_oai -I --oaisim -x --install-system-files Eurecom EXMIMO + COTS UE : ./build_oai -I --eNB -x --install-system-files @@ -350,6 +353,10 @@ function main() { BUILD_TELNETSRV=1 echo_info "Build embedded telnet server" shift ;; + --usrp-recplay) + USRP_REC_PLAY="True" + echo_info "Enabling USRP record playback mode" + shift 1;; -h | --help) print_help exit 1;; @@ -540,6 +547,7 @@ function main() { echo "set (UE_DEBUG_TRACE $UE_DEBUG_TRACE)" >> $cmake_file echo "set (UE_TIMING_TRACE $UE_TIMING_TRACE)" >> $cmake_file echo "set (DISABLE_LOG_X $DISABLE_LOG_X)" >> $cmake_file + echo "set (USRP_REC_PLAY $USRP_REC_PLAY)" >> $cmake_file if [ "$UE" = 1 -a "$NOS1" = "0" ] ; then echo_info "Compiling UE S1 build : enabling Linux and NETLINK" echo "set (LINUX True )" >> $cmake_file diff --git a/openair1/PHY/LTE_TRANSPORT/pucch.c b/openair1/PHY/LTE_TRANSPORT/pucch.c index 61d2cc0e9b..dacafa6b29 100644 --- a/openair1/PHY/LTE_TRANSPORT/pucch.c +++ b/openair1/PHY/LTE_TRANSPORT/pucch.c @@ -1871,6 +1871,23 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB, eNB->pucch1ab_stats_cnt[j][i]=0; } } +#if defined(USRP_REC_PLAY) + // It's probably bad to do this statically only once. + // Looks like the above is incomplete. + // Such reset needs to be done once a UE PHY structure is being used/re-used + // Don't know if this is ever possible in current architecture + for (i=0;i<10240;i++) { + for (j=0;jpucch1_stats[j][i]=0; + eNB->pucch1_stats_thres[j][i]=0; + } + } + for (i=0;i<20480;i++) { + for (j=0;jpucch1ab_stats[j][i]=0; + } + } +#endif first_call=0; } @@ -2289,8 +2306,12 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB, stat_im=0; // Do detection now +#if defined(USRP_REC_PLAY) + // It looks like the value is a bit messy when RF is replayed. + if (sigma2_dB<=(dB_fixed(stat_max)-pucch1_thres+2)) {// +#else if (sigma2_dB<(dB_fixed(stat_max)-pucch1_thres)) {// - +#endif chL = (nsymb>>1)-4; chest_mag=0; cfo = (frame_parms->Ncp==0) ? &cfo_pucch_np[14*phase_max] : &cfo_pucch_ep[12*phase_max]; @@ -2431,7 +2452,11 @@ uint32_t rx_pucch(PHY_VARS_eNB *eNB, if (fmt==pucch_format1b) *(1+payload) = (stat_im<0) ? 1 : 2; } else { // insufficient energy on PUCCH so NAK +#if defined(USRP_REC_PLAY) + LOG_I(PHY,"PUCCH 1a/b: NAK subframe %d : sigma2_dB %d, stat_max %d, pucch1_thres %d\n",subframe,sigma2_dB,dB_fixed(stat_max),pucch1_thres); +#else LOG_I(PHY,"PUCCH 1a/b: subframe %d : sigma2_dB %d, stat_max %d, pucch1_thres %d\n",subframe,sigma2_dB,dB_fixed(stat_max),pucch1_thres); +#endif *payload = 4; // DTX ((int16_t*)&eNB->pucch1ab_stats[UE_id][(subframe<<10) + (eNB->pucch1ab_stats_cnt[UE_id][subframe])])[0] = (int16_t)(stat_re); ((int16_t*)&eNB->pucch1ab_stats[UE_id][(subframe<<10) + (eNB->pucch1ab_stats_cnt[UE_id][subframe])])[1] = (int16_t)(stat_im); diff --git a/openair2/LAYER2/MAC/defs.h b/openair2/LAYER2/MAC/defs.h index ba02a35694..0c9e149820 100644 --- a/openair2/LAYER2/MAC/defs.h +++ b/openair2/LAYER2/MAC/defs.h @@ -128,7 +128,11 @@ /*!\brief Maximum number od control elemenets */ #define MAX_NUM_CE 5 /*!\brief Maximum number of random access process */ +#if defined(USRP_REC_PLAY) +#define NB_RA_PROC_MAX 1 +#else #define NB_RA_PROC_MAX 4 +#endif /*!\brief size of buffer status report table */ #define BSR_TABLE_SIZE 64 /*!\brief The power headroom reporting range is from -23 ...+40 dB and beyond, with step 1 */ diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c index c6df031876..9ddb78e01f 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c @@ -1244,7 +1244,25 @@ void initiate_ra_proc(module_id_t module_idP, RA_template[i].Msg2_subframe = (subframeP+4)%10; /* TODO: find better procedure to allocate RNTI */ do { +#if defined(USRP_REC_PLAY) // deterministic rnti in usrp record/playback mode + static int drnti[NUMBER_OF_UE_MAX] = { 0xbda7, 0x71da, 0x9c40, 0xc350, 0x2710, 0x4e20, 0x7530, 0x1388, 0x3a98, 0x61a8, 0x88b8, 0xafc8, 0xd6d8, 0x1b58, 0x4268, 0x6978 }; + int j = 0; + int nb_ue = 0; + for (j = 0; j < NUMBER_OF_UE_MAX; j++) { + if (UE_RNTI(module_idP, j) > 0) { + nb_ue++; + } else { + break; + } + } + if (nb_ue >= NUMBER_OF_UE_MAX) { + printf("No more free RNTI available, increase NUMBER_OF_UE_MAX\n"); + abort(); + } + RA_template[i].rnti = drnti[nb_ue]; +#else RA_template[i].rnti = taus(); +#endif loop++; } while (loop != 100 && /* TODO: this is not correct, the rnti may be in use without diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c index 19ff3cf39f..08b04f5188 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c @@ -1717,6 +1717,9 @@ int add_new_ue(module_id_t mod_idP, int cc_idP, rnti_t rntiP,int harq_pidP UE_list->ordered_ULCCids[0][UE_id] = cc_idP; UE_list->num_UEs++; UE_list->active[UE_id] = TRUE; +#if defined(USRP_REC_PLAY) // not specific to record/playback ? + UE_list->UE_template[cc_idP][UE_id].pre_assigned_mcs_ul = 0; +#endif #ifdef Rel14 UE_list->UE_template[cc_idP][UE_id].rach_resource_type = rach_resource_type ; diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_security.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_security.c index d395f95981..2554eb145a 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_security.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_security.c @@ -220,7 +220,7 @@ pdcp_validate_security( stream_decrypt(pdcp_pP->cipheringAlgorithm, &decrypt_params, &buffer_decrypted); - +#if !defined(USRP_REC_PLAY) if (srb_flagP) { /* Now check the integrity of the complete PDU */ decrypt_params.message = pdcp_pdu_buffer; @@ -241,7 +241,7 @@ pdcp_validate_security( return -1; } } - +#endif VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_VALIDATE_SECURITY, VCD_FUNCTION_OUT); return 0; diff --git a/openair2/RRC/LITE/defs.h b/openair2/RRC/LITE/defs.h index 0811818c72..9d7f7fdf2d 100644 --- a/openair2/RRC/LITE/defs.h +++ b/openair2/RRC/LITE/defs.h @@ -242,7 +242,11 @@ typedef enum HO_STATE_e { // #define NUM_MAX_CBA_GROUP 4 // in the platform_constants /* TS 36.331: RRC-TransactionIdentifier ::= INTEGER (0..3) */ +#if defined(USRP_REC_PLAY) +#define RRC_TRANSACTION_IDENTIFIER_NUMBER 1 +#else #define RRC_TRANSACTION_IDENTIFIER_NUMBER 3 +#endif typedef struct { unsigned short transport_block_size; /*!< \brief Minimum PDU size in bytes provided by RLC to MAC layer interface */ diff --git a/openair2/RRC/LITE/rrc_eNB_S1AP.c b/openair2/RRC/LITE/rrc_eNB_S1AP.c index 55adb217fa..24ee3c06da 100644 --- a/openair2/RRC/LITE/rrc_eNB_S1AP.c +++ b/openair2/RRC/LITE/rrc_eNB_S1AP.c @@ -390,8 +390,10 @@ rrc_pdcp_config_security( ue_context_pP->ue_context.kenb, &kRRCint); +#if !defined(USRP_REC_PLAY) #define DEBUG_SECURITY 1 - +#endif + #if defined (DEBUG_SECURITY) #undef msg #define msg printf diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h index 6214c81cc6..2dc1650bfd 100644 --- a/targets/ARCH/COMMON/common_lib.h +++ b/targets/ARCH/COMMON/common_lib.h @@ -207,6 +207,15 @@ typedef struct { int iq_rxrescale; //! Configuration file for LMS7002M char *configFilename; +#if defined(USRP_REC_PLAY) + unsigned short sf_mode; // 1=record, 2=replay + char sf_filename[1024]; // subframes file path + unsigned int sf_max; // max number of recorded subframes + unsigned int sf_loops; // number of loops in replay mode + unsigned int sf_read_delay; // read delay in replay mode + unsigned int sf_write_delay; // write delay in replay mode + unsigned int eth_mtu; // ethernet MTU +#endif } openair0_config_t; /*! \brief RF mapping */ diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index 30faf8d2b7..8b62a8e698 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -270,11 +270,53 @@ static int sync_to_gps(openair0_device *device) return EXIT_SUCCESS; } +#if defined(USRP_REC_PLAY) +#include "usrp_lib.h" +static FILE *pFile = NULL; +int mmapfd = 0; +struct stat sb; +iqrec_t *ms_sample = NULL; // memory for all subframes +unsigned int nb_samples = 0; +unsigned int cur_samples = 0; +int64_t wrap_count = 0; +int64_t wrap_ts = 0; +unsigned int u_sf_mode = 0; // 1=record, 2=replay +unsigned int u_sf_record = 0; // record mode +unsigned int u_sf_replay = 0; // replay mode +char u_sf_filename[1024]; // subframes file path +unsigned int u_sf_max = DEF_NB_SF; // max number of recorded subframes +unsigned int u_sf_loops = DEF_SF_NB_LOOP; // number of loops in replay mode +unsigned int u_sf_read_delay = DEF_SF_DELAY_READ; // read delay in replay mode +unsigned int u_sf_write_delay = DEF_SF_DELAY_WRITE; // write delay in replay mode +char *tmp_filename[1]; // use an array of pointer (libconfig does not seems to work with char array yet) + +char config_opt_sf_file[] = CONFIG_OPT_SF_FILE; +char config_def_sf_file[] = DEF_SF_FILE; +char config_hlp_sf_file[] = CONFIG_HLP_SF_FILE; +char config_opt_sf_rec[] = CONFIG_OPT_SF_REC; +char config_hlp_sf_rec[] = CONFIG_HLP_SF_REC; +char config_opt_sf_rep[] = CONFIG_OPT_SF_REP; +char config_hlp_sf_rep[] = CONFIG_HLP_SF_REP; +char config_opt_sf_max[] = CONFIG_OPT_SF_MAX; +char config_hlp_sf_max[] = CONFIG_HLP_SF_MAX; +char config_opt_sf_loops[] = CONFIG_OPT_SF_LOOPS; +char config_hlp_sf_loops[] = CONFIG_HLP_SF_LOOPS; +char config_opt_sf_rdelay[] = CONFIG_OPT_SF_RDELAY; +char config_hlp_sf_rdelay[] = CONFIG_HLP_SF_RDELAY; +char config_opt_sf_wdelay[] = CONFIG_OPT_SF_WDELAY; +char config_hlp_sf_wdelay[] = CONFIG_HLP_SF_WDELAY; + +#endif + /*! \brief Called to start the USRP transceiver. Return 0 if OK, < 0 if error @param device pointer to the device structure specific to the RF hardware target */ static int trx_usrp_start(openair0_device *device) { +#if defined(USRP_REC_PLAY) + if (u_sf_mode != 2) { // not replay mode +#endif + usrp_state_t *s = (usrp_state_t*)device->priv; @@ -313,12 +355,21 @@ static int trx_usrp_start(openair0_device *device) { s->rx_count = 0; s->tx_count = 0; s->rx_timestamp = 0; +#if defined(USRP_REC_PLAY) + } +#endif return 0; } /*! \brief Terminate operation of the USRP transceiver -- free all associated resources * \param device the hardware to use */ static void trx_usrp_end(openair0_device *device) { +#if defined(USRP_REC_PLAY) // For some ugly reason, this can be called several times... + static int done = 0; + if (done == 1) return; + done = 1; + if (u_sf_mode != 2) { // not subframes replay +#endif usrp_state_t *s = (usrp_state_t*)device->priv; s->rx_stream->issue_stream_cmd(uhd::stream_cmd_t::STREAM_MODE_STOP_CONTINUOUS); @@ -326,7 +377,45 @@ static void trx_usrp_end(openair0_device *device) { s->tx_md.end_of_burst = true; s->tx_stream->send("", 0, s->tx_md); s->tx_md.end_of_burst = false; - +#if defined(USRP_REC_PLAY) + } +#endif +#if defined(USRP_REC_PLAY) + if (u_sf_mode == 1) { // subframes store + pFile = fopen (u_sf_filename,"wb+"); + if (pFile == NULL) { + std::cerr << "Cannot open " << u_sf_filename << std::endl; + } else { + unsigned int i = 0; + unsigned int modu = 0; + if ((modu = nb_samples % 10) != 0) { + nb_samples -= modu; // store entire number of frames + } + std::cerr << "Writing " << nb_samples << " subframes to " << u_sf_filename << " ..." << std::endl; + for (i = 0; i < nb_samples; i++) { + fwrite(ms_sample+i, sizeof(unsigned char), sizeof(iqrec_t), pFile); + } + fclose (pFile); + std::cerr << "File " << u_sf_filename << " closed." << std::endl; + } + } + if (u_sf_mode == 1) { // record + if (ms_sample != NULL) { + free((void*)ms_sample); + ms_sample = NULL; + } + } + if (u_sf_mode == 2) { // replay + if (ms_sample != MAP_FAILED) { + munmap(ms_sample, sb.st_size); + ms_sample = NULL; + } + if (mmapfd != 0) { + close(mmapfd); + mmapfd = 0; + } + } +#endif } /*! \brief Called to send samples to the USRP RF target @@ -339,6 +428,9 @@ static void trx_usrp_end(openair0_device *device) { */ static int trx_usrp_write(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps, int cc, int flags) { int ret=0; +#if defined(USRP_REC_PLAY) + if (u_sf_mode != 2) { // not replay mode +#endif usrp_state_t *s = (usrp_state_t*)device->priv; int nsamps2; // aligned to upper 32 or 16 byte boundary @@ -405,6 +497,15 @@ static int trx_usrp_write(openair0_device *device, openair0_timestamp timestamp, if (ret != nsamps) LOG_E(PHY,"[xmit] tx samples %d != %d\n",ret,nsamps); +#if defined(USRP_REC_PLAY) + } else { + struct timespec req; + req.tv_sec = 0; + req.tv_nsec = u_sf_write_delay * 1000; + nanosleep(&req, NULL); + ret = nsamps; + } +#endif return ret; } @@ -421,9 +522,12 @@ static int trx_usrp_write(openair0_device *device, openair0_timestamp timestamp, * \returns the number of sample read */ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps, int cc) { - usrp_state_t *s = (usrp_state_t*)device->priv; - int samples_received=0,i,j; - int nsamps2; // aligned to upper 32 or 16 byte boundary + usrp_state_t *s = (usrp_state_t*)device->priv; + int samples_received=0,i,j; + int nsamps2; // aligned to upper 32 or 16 byte boundary +#if defined(USRP_REC_PLAY) + if (u_sf_mode != 2) { // not replay mode +#endif #if defined(__x86_64) || defined(__i386__) #ifdef __AVX2__ nsamps2 = (nsamps+7)>>3; @@ -490,7 +594,45 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp s->rx_count += nsamps; s->rx_timestamp = s->rx_md.time_spec.to_ticks(s->sample_rate); *ptimestamp = s->rx_timestamp; - return samples_received; +#if defined (USRP_REC_PLAY) + } +#endif +#if defined(USRP_REC_PLAY) + if (u_sf_mode == 1) { // record mode + // Copy subframes to memory (later dump on a file) + if (nb_samples < u_sf_max) { + (ms_sample+nb_samples)->header = BELL_LABS_IQ_HEADER; + (ms_sample+nb_samples)->ts = *ptimestamp; + memcpy((ms_sample+nb_samples)->samples, buff[0], nsamps*4); + nb_samples++; + } + } else if (u_sf_mode == 2) { // replay mode + if (cur_samples == nb_samples) { + cur_samples = 0; + wrap_count++; + if (wrap_count == u_sf_loops) { + std::cerr << "USRP device terminating subframes replay mode after " << u_sf_loops << " loops." << std::endl; + return 0; // should make calling process exit + } + wrap_ts = wrap_count * (nb_samples * (((int)(device->openair0_cfg[0].sample_rate)) / 1000)); + } + if (cur_samples < nb_samples) { + *ptimestamp = (ms_sample[0].ts + (cur_samples * (((int)(device->openair0_cfg[0].sample_rate)) / 1000))) + wrap_ts; + if (cur_samples == 0) { + std::cerr << "starting subframes file with wrap_count=" << wrap_count << " wrap_ts=" << wrap_ts + << " ts=" << *ptimestamp << std::endl; + } + memcpy(buff[0], &ms_sample[cur_samples].samples[0], nsamps*4); + cur_samples++; + } + struct timespec req; + req.tv_sec = 0; + req.tv_nsec = u_sf_read_delay * 1000; + nanosleep(&req, NULL); + return nsamps; + } +#endif + return samples_received; } /*! \brief Compares two variables within precision @@ -684,12 +826,135 @@ int trx_usrp_reset_stats(openair0_device* device) { return(0); } +#if defined(USRP_REC_PLAY) +extern "C" { +/*! \brief Initializer for USRP record/playback config + * \param parameter array description + * \returns 0 on success + */ +int trx_usrp_recplay_config_init(paramdef_t *usrp_recplay_params) { + // --subframes-file + memcpy(usrp_recplay_params[0].optname, config_opt_sf_file, strlen(config_opt_sf_file)); + usrp_recplay_params[0].helpstr = config_hlp_sf_file; + usrp_recplay_params[0].paramflags=PARAMFLAG_NOFREE; + usrp_recplay_params[0].strptr=(char **)&tmp_filename[0]; + usrp_recplay_params[0].defstrval = NULL; + usrp_recplay_params[0].type=TYPE_STRING; + usrp_recplay_params[0].numelt=sizeof(u_sf_filename); + // --subframes-record + memcpy(usrp_recplay_params[1].optname, config_opt_sf_rec, strlen(config_opt_sf_rec)); + usrp_recplay_params[1].helpstr = config_hlp_sf_rec; + usrp_recplay_params[1].paramflags=PARAMFLAG_BOOL; + usrp_recplay_params[1].uptr=&u_sf_record; + usrp_recplay_params[1].defuintval=0; + usrp_recplay_params[1].type=TYPE_UINT; + usrp_recplay_params[1].numelt=0; + // --subframes-replay + memcpy(usrp_recplay_params[2].optname, config_opt_sf_rep, strlen(config_opt_sf_rep)); + usrp_recplay_params[2].helpstr = config_hlp_sf_rep; + usrp_recplay_params[2].paramflags=PARAMFLAG_BOOL; + usrp_recplay_params[2].uptr=&u_sf_replay; + usrp_recplay_params[2].defuintval=0; + usrp_recplay_params[2].type=TYPE_UINT; + usrp_recplay_params[2].numelt=0; + // --subframes-max + memcpy(usrp_recplay_params[3].optname, config_opt_sf_max, strlen(config_opt_sf_max)); + usrp_recplay_params[3].helpstr = config_hlp_sf_max; + usrp_recplay_params[3].paramflags=0; + usrp_recplay_params[3].uptr=&u_sf_max; + usrp_recplay_params[3].defuintval=DEF_NB_SF; + usrp_recplay_params[3].type=TYPE_UINT; + usrp_recplay_params[3].numelt=0; + // --subframes-loops + memcpy(usrp_recplay_params[4].optname, config_opt_sf_loops, strlen(config_opt_sf_loops)); + usrp_recplay_params[4].helpstr = config_hlp_sf_loops; + usrp_recplay_params[4].paramflags=0; + usrp_recplay_params[4].uptr=&u_sf_loops; + usrp_recplay_params[4].defuintval=DEF_SF_NB_LOOP; + usrp_recplay_params[4].type=TYPE_UINT; + usrp_recplay_params[4].numelt=0; + // --subframes-read-delay + memcpy(usrp_recplay_params[5].optname, config_opt_sf_rdelay, strlen(config_opt_sf_rdelay)); + usrp_recplay_params[5].helpstr = config_hlp_sf_rdelay; + usrp_recplay_params[5].paramflags=0; + usrp_recplay_params[5].uptr=&u_sf_read_delay; + usrp_recplay_params[5].defuintval=DEF_SF_DELAY_READ; + usrp_recplay_params[5].type=TYPE_UINT; + usrp_recplay_params[5].numelt=0; + // --subframes-write-delay + memcpy(usrp_recplay_params[6].optname, config_opt_sf_wdelay, strlen(config_opt_sf_wdelay)); + usrp_recplay_params[6].helpstr = config_hlp_sf_wdelay; + usrp_recplay_params[6].paramflags=0; + usrp_recplay_params[6].uptr=&u_sf_write_delay; + usrp_recplay_params[6].defuintval=DEF_SF_DELAY_WRITE; + usrp_recplay_params[6].type=TYPE_UINT; + usrp_recplay_params[6].numelt=0; + + return 0; // always ok +} +} +#endif + extern "C" { /*! \brief Initialize Openair USRP target. It returns 0 if OK * \param device the hardware to use * \param openair0_cfg RF frontend parameters set by application */ int device_init(openair0_device* device, openair0_config_t *openair0_cfg) { +#if defined(USRP_REC_PLAY) + paramdef_t usrp_recplay_params[7]; + // to check + static int done = 0; + if (done == 1) { + return 0; + } // prevent from multiple init + done = 1; + // end to check + memset(usrp_recplay_params, 0, 7*sizeof(paramdef_t)); + memset(&u_sf_filename[0], 0, 1024); + tmp_filename[0] = u_sf_filename; + if (trx_usrp_recplay_config_init(usrp_recplay_params) != 0) { + std::cerr << "USRP device record/replay mode configuration error exiting" << std::endl; + return -1; + } + config_process_cmdline(usrp_recplay_params,sizeof(usrp_recplay_params)/sizeof(paramdef_t),NULL); + + if (strlen(tmp_filename[0]) != 0) { + (void) strcpy(u_sf_filename, tmp_filename[0]); + } else { + (void) strcpy(u_sf_filename, DEF_SF_FILE); + } + + if (u_sf_replay == 1) u_sf_mode = 2; + if (u_sf_record == 1) u_sf_mode = 1; + + if (u_sf_mode == 2) { + // Replay subframes from from file + int bw_gain_adjust=0; + device->openair0_cfg = openair0_cfg; + device->type = USRP_B200_DEV; + openair0_cfg[0].rx_gain_calib_table = calib_table_b210_38; + bw_gain_adjust=1; + openair0_cfg[0].tx_sample_advance = 80; + openair0_cfg[0].tx_bw = 20e6; + openair0_cfg[0].rx_bw = 20e6; + openair0_cfg[0].iq_txshift = 4;//shift + openair0_cfg[0].iq_rxrescale = 15;//rescale iqs + set_rx_gain_offset(&openair0_cfg[0],0,bw_gain_adjust); + device->priv = NULL; + device->trx_start_func = trx_usrp_start; + device->trx_write_func = trx_usrp_write; + device->trx_read_func = trx_usrp_read; + device->trx_get_stats_func = trx_usrp_get_stats; + device->trx_reset_stats_func = trx_usrp_reset_stats; + device->trx_end_func = trx_usrp_end; + device->trx_stop_func = trx_usrp_stop; + device->trx_set_freq_func = trx_usrp_set_freq; + device->trx_set_gains_func = trx_usrp_set_gains; + device->openair0_cfg = openair0_cfg; + std::cerr << "USRP device initialized in subframes replay mode for " << u_sf_loops << " loops." << std::endl; + } else { +#endif uhd::set_thread_priority_safe(1.0); usrp_state_t *s = (usrp_state_t*)calloc(sizeof(usrp_state_t),1); @@ -705,6 +970,11 @@ extern "C" { int vers=0,subvers=0,subsubvers=0; int bw_gain_adjust=0; +#if defined(USRP_REC_PLAY) + if (u_sf_mode == 1) { + std::cerr << "USRP device initialized in subframes record mode" << std::endl; + } +#endif sscanf(uhd::get_version_string().c_str(),"%d.%d.%d",&vers,&subvers,&subsubvers); LOG_I(PHY,"Checking for USRPs : UHD %s (%d.%d.%d)\n", uhd::get_version_string().c_str(),vers,subvers,subsubvers); @@ -742,7 +1012,9 @@ extern "C" { //s->usrp->set_master_clock_rate(usrp_master_clock); openair0_cfg[0].rx_gain_calib_table = calib_table_x310; - +#if defined(USRP_REC_PLAY) + std::cerr << "-- Using calibration table: calib_table_x310" << std::endl; // Bell Labs info +#endif switch ((int)openair0_cfg[0].sample_rate) { case 30720000: // from usrp_time_offset @@ -801,9 +1073,15 @@ extern "C" { if ((vers == 3) && (subvers == 9) && (subsubvers>=2)) { openair0_cfg[0].rx_gain_calib_table = calib_table_b210; bw_gain_adjust=0; +#if defined(USRP_REC_PLAY) + std::cerr << "-- Using calibration table: calib_table_b210" << std::endl; // Bell Labs info +#endif } else { openair0_cfg[0].rx_gain_calib_table = calib_table_b210_38; bw_gain_adjust=1; +#if defined(USRP_REC_PLAY) + std::cerr << "-- Using calibration table: calib_table_b210_38" << std::endl; // Bell Labs info +#endif } switch ((int)openair0_cfg[0].sample_rate) { @@ -965,6 +1243,45 @@ extern "C" { } } +#if defined(USRP_REC_PLAY) + } +#endif +#if defined(USRP_REC_PLAY) + if (u_sf_mode == 1) { // record mode + ms_sample = (iqrec_t*) malloc(u_sf_max * sizeof(iqrec_t)); + if (ms_sample == NULL) { + std::cerr<< "Memory allocation failed for subframe record or replay mode." << std::endl; + exit(-1); + } + memset(ms_sample, 0, u_sf_max * BELL_LABS_IQ_BYTES_PER_SF); + } + if (u_sf_mode == 2) { + // use mmap + mmapfd = open(u_sf_filename, O_RDONLY | O_LARGEFILE); + if (mmapfd != 0) { + fstat(mmapfd, &sb); + std::cerr << "Loading subframes using mmap() from " << u_sf_filename << " size=" << (uint64_t)sb.st_size << " bytes ..." << std::endl; + ms_sample = (iqrec_t*) mmap(NULL, sb.st_size, PROT_WRITE, MAP_PRIVATE, mmapfd, 0); + if (ms_sample != MAP_FAILED) { + nb_samples = (sb.st_size / sizeof(iqrec_t)); + int aligned = (((unsigned long)ms_sample & 31) == 0)? 1:0; + std::cerr<< "Loaded "<< nb_samples << " subframes." << std::endl; + if (aligned == 0) { + std::cerr<< "mmap address is not 32 bytes aligned, exiting." << std::endl; + close(mmapfd); + exit(-1); + } + } else { + std::cerr << "Cannot mmap file, exiting." << std::endl; + close(mmapfd); + exit(-1); + } + } else { + std::cerr << "Cannot open " << u_sf_filename << " , exiting." << std::endl; + exit(-1); + } + } +#endif return 0; } } diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.h b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.h new file mode 100644 index 0000000000..3863571273 --- /dev/null +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.h @@ -0,0 +1,89 @@ +#ifndef __USRP_LIB_H +#define __USRP_LIB_H +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/** usrp_lib.h + * + * \author: bruno.mongazon-cazavet@nokia-bell-labs.com + */ + +#if defined (USRP_REC_PLAY) + +#include +#include +#include +#include +#include "common/config/config_paramdesc.h" +#include "common/config/config_userapi.h" + +#define BELL_LABS_IQ_HEADER 0xabababababababab +#define BELL_LABS_IQ_PER_SF 7680 // Up to 5MHz bw for now +#define BELL_LABS_IQ_BYTES_PER_SF (BELL_LABS_IQ_PER_SF * 4) +typedef struct { + int64_t header; + int64_t ts; + int64_t rfu1; + int64_t rfu2; // pad for 256 bits alignement required by AVX2 + unsigned char samples[BELL_LABS_IQ_BYTES_PER_SF]; // iq's for one subframe +} iqrec_t; +#define DEF_NB_SF 120000 // default nb of sf or ms to capture (2 minutes at 5MHz) +#define DEF_SF_FILE "/home/nokia/iqfile" // default subframes file name +#define DEF_SF_DELAY_READ 860 // default read delay µs (860=real) +#define DEF_SF_DELAY_WRITE 15 // default write delay µs (15=real) +#define DEF_SF_NB_LOOP 5 // default nb loops + + +/* help strings definition for command line options, used in CMDLINE_XXX_DESC macros and printed when -h option is used */ +#define CONFIG_HLP_SF_FILE "Path of the file used for subframes record or replay" +#define CONFIG_HLP_SF_REC "Record subframes from USRP driver into a file for later replay" +#define CONFIG_HLP_SF_REP "Replay subframes into USRP driver from a file" +#define CONFIG_HLP_SF_MAX "Maximum count of subframes to be recorded in subframe file" +#define CONFIG_HLP_SF_LOOPS "Number of loops to replay of the entire subframes file" +#define CONFIG_HLP_SF_RDELAY "Delay in microseconds to read a subframe in replay mode" +#define CONFIG_HLP_SF_WDELAY "Delay in microseconds to write a subframe in replay mode" + +/* keyword strings for command line options, used in CMDLINE_XXX_DESC macros and printed when -h option is used */ +#define CONFIG_OPT_SF_FILE "subframes-file" +#define CONFIG_OPT_SF_REC "subframes-record" +#define CONFIG_OPT_SF_REP "subframes-replay" +#define CONFIG_OPT_SF_MAX "subframes-max" +#define CONFIG_OPT_SF_LOOPS "subframes-loops" +#define CONFIG_OPT_SF_RDELAY "subframes-read-delay" +#define CONFIG_OPT_SF_WDELAY "subframes-write-delay" + +/* For information only - the macro is not usable in C++ */ +/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* command line parameters for USRP record/playback */ +/* optname helpstr paramflags XXXptr defXXXval type numelt */ +/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +#define USRP_RECPLAY_PARAMS_DESC { \ +{"subframes-file", CONFIG_HLP_SF_FILE, 0, strptr:(char **)&u_sf_filename, defstrval:DEF_SF_FILE, TYPE_STRING, sizeof(u_sf_filename)}, \ +{"subframes-record", CONFIG_HLP_SF_REC, PARAMFLAG_BOOL, uptr:&u_sf_record, defuintval:0, TYPE_UINT, 0}, \ +{"subframes-replay", CONFIG_HLP_SF_REP, PARAMFLAG_BOOL, uptr:&u_sf_replay, defuintval:0, TYPE_UINT, 0}, \ +{"subframes-max", CONFIG_HLP_SF_MAX, 0, uptr:&u_sf_max, defintval:DEF_NB_SF, TYPE_UINT, 0}, \ +{"subframes-loops", CONFIG_HLP_SF_LOOPS, 0, uptr:&u_sf_loops, defintval:DEF_SF_NB_LOOP, TYPE_UINT, 0}, \ +{"subframes-read-delay", CONFIG_HLP_SF_RDELAY, 0, uptr:&u_sf_read_delay, defintval:DEF_SF_DELAY_READ, TYPE_UINT, 0}, \ +{"subframes-write-delay", CONFIG_HLP_SF_WDELAY, 0, uptr:&u_sf_write_delay, defintval:DEF_SF_DELAY_WRITE, TYPE_UINT, 0}, \ +} +#endif // BELL_LABS_MUST +#endif // __USRP_LIB_H + From fb9776d2aa3baade283c72fd4f6e2f07b6f20891 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Fri, 17 Nov 2017 07:55:19 -0800 Subject: [PATCH 06/19] adds config module initialization to oaisim target. --- openair2/ENB_APP/enb_config.c | 4 +++- .../GENERIC-LTE-EPC/CONF/rru.oaisim.conf | 17 +++++++++++++++++ targets/SIMU/USER/oaisim_functions.c | 5 ++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index 9141a85d33..f2f89ad1ca 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -2592,7 +2592,9 @@ void RCConfig(void) { /* get global parameters, defined outside any section in the config file */ - + + printf("Getting ENBSParams\n"); + config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL); RC.nb_inst = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.conf index af262223f0..24ae36a0a4 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.conf @@ -17,3 +17,20 @@ RUs = ( } ); +log_config = { + global_log_level ="debug"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="debug"; + phy_log_verbosity ="medium"; + mac_log_level ="debug"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; +}; + diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c index dce104dc0a..778f250a78 100644 --- a/targets/SIMU/USER/oaisim_functions.c +++ b/targets/SIMU/USER/oaisim_functions.c @@ -782,7 +782,10 @@ void get_simulation_options(int argc, char *argv[]) } } - + if ( load_configmodule(argc,argv) == NULL) { + exit_fun("[SOFTMODEM] Error, configuration module init failed\n"); + } + if (RC.config_file_name != NULL) { /* Read eNB configuration file */ RCConfig(); From bcb6f1715fbbbee19c132d0d92abaded7348c2f0 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Wed, 22 Nov 2017 09:56:43 +0100 Subject: [PATCH 07/19] patch from francois UE config --- common/config/config_cmdline.c | 9 ++++--- common/config/config_userapi.c | 10 +++++++- common/config/config_userapi.h | 1 + common/config/libconfig/config_libconfig.c | 29 +++++++++++++++------- openair2/UTIL/LOG/log.h | 4 +-- targets/RT/USER/lte-softmodem.c | 17 +++++++------ 6 files changed, 48 insertions(+), 22 deletions(-) diff --git a/common/config/config_cmdline.c b/common/config/config_cmdline.c index 42ea7259c3..cb24cc5222 100644 --- a/common/config/config_cmdline.c +++ b/common/config/config_cmdline.c @@ -52,9 +52,12 @@ char defbool[2]="1"; switch(cfgoptions->type) { case TYPE_STRING: - config_check_valptr(cfgoptions, (char **)(cfgoptions->strptr), sizeof(char *)); - config_check_valptr(cfgoptions, cfgoptions->strptr, strlen(tmpval+1)); - sprintf(*(cfgoptions->strptr), "%s",tmpval); + if (cfgoptions->numelt == 0 ) { + config_check_valptr(cfgoptions, cfgoptions->strptr, strlen(tmpval)+1); + sprintf(*(cfgoptions->strptr), "%s",tmpval); + } else { + sprintf( (char *)(cfgoptions->strptr), "%s",tmpval); + } printf_cmdl("[CONFIG] %s set to %s from command line\n", cfgoptions->optname, tmpval); optisset=1; break; diff --git a/common/config/config_userapi.c b/common/config/config_userapi.c index ad2e355d52..37c77be93f 100644 --- a/common/config/config_userapi.c +++ b/common/config/config_userapi.c @@ -50,7 +50,11 @@ configmodule_interface_t *config_get_if(void) char * config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length) { - printf_ptrs("-- %s 0x%08lx %i\n",cfgoptions->optname,(uintptr_t)(*ptr),length); + printf_ptrs("[CONFIG] %s ptr: 0x%08lx requested size: %i\n",cfgoptions->optname,(uintptr_t)(ptr),length); + if(cfgoptions->numelt > 0) { /* already allocated */ + return *ptr; + } + if (*ptr == NULL) { *ptr = malloc(length); if ( *ptr != NULL) { @@ -147,3 +151,7 @@ int config_isparamset(paramdef_t *params,int paramidx) return 0; } } + +int config_getparamval_fromparamdefidx(paramdef_t *cfgoptions,int paramidx) { + +} diff --git a/common/config/config_userapi.h b/common/config/config_userapi.h index 6acaacf716..8c8fc9d2bf 100644 --- a/common/config/config_userapi.h +++ b/common/config/config_userapi.h @@ -51,6 +51,7 @@ extern int config_get(paramdef_t *params,int numparams, char *prefix); extern int config_isparamset(paramdef_t *params,int paramidx); extern void config_assign_int(paramdef_t *cfgoptions, char *fullname, int val); extern int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix); +extern int config_getparamval_fromparamdefidx(paramdef_t *cfgoptions,int paramidx); #define config_getlist config_get_if()->getlist #define CONFIG_GETCONFFILE (config_get_if()->cfgP[0]) diff --git a/common/config/libconfig/config_libconfig.c b/common/config/libconfig/config_libconfig.c index 35a70dfcc7..00f5f38b8f 100644 --- a/common/config/libconfig/config_libconfig.c +++ b/common/config/libconfig/config_libconfig.c @@ -104,17 +104,28 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix ) cfgpath,str,cfgoptions[i].numelt); str[strlen(str)-1] = 0; } - config_check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].strptr)), sizeof(char *)); - config_check_valptr(&(cfgoptions[i]), cfgoptions[i].strptr, strlen(str)+1); - sprintf( *(cfgoptions[i].strptr) , "%s", str); - printf_params("[LIBCONFIG] %s: %s\n", cfgpath,*(cfgoptions[i].strptr) ); + if (cfgoptions[i].numelt == 0 ) { + config_check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].strptr)), sizeof(char *)); + config_check_valptr(&(cfgoptions[i]), cfgoptions[i].strptr, strlen(str)+1); + sprintf( *(cfgoptions[i].strptr) , "%s", str); + printf_params("[LIBCONFIG] %s: %s\n", cfgpath,*(cfgoptions[i].strptr) ); + } else { + sprintf( (char *)(cfgoptions[i].strptr) , "%s", str); + printf_params("[LIBCONFIG] %s: %s\n", cfgpath,(char *)cfgoptions[i].strptr ); + } } else { if( cfgoptions[i].defstrval != NULL) { defval=1; - config_check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].strptr)), sizeof(char *)); - config_check_valptr(&(cfgoptions[i]), cfgoptions[i].strptr, strlen(cfgoptions[i].defstrval)+1); - sprintf(*(cfgoptions[i].strptr), "%s",cfgoptions[i].defstrval); - printf_params("[LIBCONFIG] %s set to default value %s\n", cfgpath, *(cfgoptions[i].strptr)); + + if (cfgoptions[i].numelt == 0 ) { + config_check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].strptr)), sizeof(char *)); + config_check_valptr(&(cfgoptions[i]), cfgoptions[i].strptr, strlen(cfgoptions[i].defstrval)+1); + sprintf(*(cfgoptions[i].strptr), "%s",cfgoptions[i].defstrval); + printf_params("[LIBCONFIG] %s set to default value %s\n", cfgpath, *(cfgoptions[i].strptr)); + } else { + sprintf((char *)(cfgoptions[i].strptr), "%s",cfgoptions[i].defstrval); + printf_params("[LIBCONFIG] %s set to default value %s\n", cfgpath, (char *)cfgoptions[i].strptr); + } } else { notfound=1; } @@ -183,7 +194,7 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix ) read_intarray(&cfgoptions[i],setting,cfgpath); } else { if( cfgoptions[i].defintarrayval != NULL) { - config_check_valptr(&(cfgoptions[i]),(char **)&(cfgoptions[i].iptr), sizeof(int32_t)); + config_check_valptr(&(cfgoptions[i]),(char **)&(cfgoptions[i].iptr), sizeof(int32_t*)); cfgoptions[i].iptr=cfgoptions[i].defintarrayval; defval=1; for (int j=0; jonlinelog), defintval:1, TYPE_INT, 0, }, \ {LOG_CONFIG_STRING_GLOBAL_LOG_INFILE, NULL, 0, iptr:&(g_log->filelog), defintval:0, TYPE_INT, 0, }, \ } diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 3dfa2f5936..e23e50eb4a 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -227,6 +227,9 @@ threads_t threads= {-1,-1,-1,-1,-1,-1,-1}; */ uint8_t abstraction_flag=0; +/* forward declarations */ +void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]); + /*---------------------BMC: timespec helpers -----------------------------*/ struct timespec min_diff_time = { .tv_sec = 0, .tv_nsec = 0 }; @@ -609,9 +612,9 @@ static void get_options(void) { if ( (cmdline_uemodeparams[CMDLINE_CALIBUERX_IDX].paramflags & PARAMFLAG_PARAMSET) != 0) mode = rx_calib_ue; if ( (cmdline_uemodeparams[CMDLINE_CALIBUERXMED_IDX].paramflags & PARAMFLAG_PARAMSET) != 0) mode = rx_calib_ue_med; if ( (cmdline_uemodeparams[CMDLINE_CALIBUERXBYP_IDX].paramflags & PARAMFLAG_PARAMSET) != 0) mode = rx_calib_ue_byp; - if ( *(cmdline_uemodeparams[CMDLINE_DEBUGUEPRACH_IDX].uptr) > 0) mode = debug_prach; - if ( *(cmdline_uemodeparams[CMDLINE_NOL2CONNECT_IDX].uptr) > 0) mode = no_L2_connect; - if ( *(cmdline_uemodeparams[CMDLINE_CALIBPRACHTX_IDX].uptr) > 0) mode = calib_prach_tx; + if ( (cmdline_uemodeparams[CMDLINE_DEBUGUEPRACH_IDX].paramflags & PARAMFLAG_PARAMSET) != 0) mode = debug_prach; + if ( (cmdline_uemodeparams[CMDLINE_NOL2CONNECT_IDX].paramflags & PARAMFLAG_PARAMSET) != 0) mode = no_L2_connect; + if ( (cmdline_uemodeparams[CMDLINE_CALIBPRACHTX_IDX].paramflags & PARAMFLAG_PARAMSET) != 0) mode = calib_prach_tx; if (dumpframe > 0) mode = rx_dump_frame; if ( downlink_frequency[0][0] > 0) { @@ -628,7 +631,7 @@ static void get_options(void) { for (CC_id=0; CC_idframe_type = TDD; } - + set_default_frame_parms(frame_parms); if (frame_parms[0]->N_RB_DL !=0) { if ( frame_parms[0]->N_RB_DL < 6 ) { frame_parms[0]->N_RB_DL = 6; @@ -691,7 +694,7 @@ int T_dont_fork = 0; /* default is to fork, see 'T_init' to understand */ #endif -void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]); + void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) { int CC_id; @@ -905,14 +908,14 @@ int main( int argc, char **argv ) // set default parameters - if (UE_flag == 1) set_default_frame_parms(frame_parms); +// if (UE_flag == 1) set_default_frame_parms(frame_parms); logInit(); printf("Reading in command-line options\n"); get_options (); - if (CONFIG_ISFLAGSET(CONFIG_ABORT)) { + if (CONFIG_ISFLAGSET(CONFIG_ABORT) && UE_flag == 0) { fprintf(stderr,"Getting configuration failed\n"); exit(-1); } From 5f25852693c1a1d86b776c2cb0aafe137345f425 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Wed, 22 Nov 2017 09:58:06 +0100 Subject: [PATCH 08/19] fix UE init sequence --- targets/RT/USER/lte-softmodem.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index e23e50eb4a..993a004fc6 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -1133,8 +1133,6 @@ int main( int argc, char **argv ) #if defined(ENABLE_ITTI) - - if ((UE_flag == 1)|| (RC.nb_inst > 0)) { @@ -1152,16 +1150,6 @@ int main( int argc, char **argv ) } #endif - if (phy_test==0) { - if (UE_flag==1) { - printf("Filling UE band info\n"); - fill_ue_band_info(); - dl_phy_sync_success (0, 0, 0, 1); - } - } - - - mlockall(MCL_CURRENT | MCL_FUTURE); @@ -1228,14 +1216,18 @@ int main( int argc, char **argv ) rt_sleep_ns(10*100000000ULL); - - // start the main threads if (UE_flag == 1) { int eMBMS_active = 0; init_UE(1,eMBMS_active,uecap_xer_in); + + if (phy_test==0) { + printf("Filling UE band info\n"); + fill_ue_band_info(); + dl_phy_sync_success (0, 0, 0, 1); + } + number_of_cards = 1; - for(CC_id=0; CC_idrf_map.card=0; PHY_vars_UE_g[0][CC_id]->rf_map.chain=CC_id+chain_offset; From bc54a0d83f2f7db80547896b5bdd3137000da96b Mon Sep 17 00:00:00 2001 From: "Wolfgang A. Mozart" Date: Fri, 10 Nov 2017 09:04:10 +0100 Subject: [PATCH 09/19] making noS1 mode compile --- cmake_targets/CMakeLists.txt | 1 + openair2/RRC/LITE/rrc_eNB.c | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 3dbb61b5ae..4fc2e1ccd3 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -1803,6 +1803,7 @@ add_executable(lte-softmodem-nos1 ${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c ${OPENAIR_TARGETS}/RT/USER/lte-ue.c ${OPENAIR_TARGETS}/RT/USER/lte-enb.c + ${OPENAIR_TARGETS}/RT/USER/lte-ru.c ${OPENAIR_TARGETS}/RT/USER/lte-softmodem.c ${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c ${OPENAIR_TARGETS}/SIMU/USER/init_lte.c diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c index 28d6982652..c8b42d41b3 100644 --- a/openair2/RRC/LITE/rrc_eNB.c +++ b/openair2/RRC/LITE/rrc_eNB.c @@ -627,12 +627,12 @@ void rrc_eNB_emulation_notify_ue_module_id( return; } for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - if (RC.rrc[enb_module_id].carrier[CC_id].sib1 != NULL) { + if (&RC.rrc[enb_module_id]->carrier[CC_id].sib1 != NULL) { if ( - (RC.rrc[enb_module_id].carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[0] == cell_identity_byte0P) && - (RC.rrc[enb_module_id].carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[1] == cell_identity_byte1P) && - (RC.rrc[enb_module_id].carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[2] == cell_identity_byte2P) && - (RC.rrc[enb_module_id].carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[3] == cell_identity_byte3P) + (&RC.rrc[enb_module_id]->carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[0] == cell_identity_byte0P) && + (&RC.rrc[enb_module_id]->carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[1] == cell_identity_byte1P) && + (&RC.rrc[enb_module_id]->carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[2] == cell_identity_byte2P) && + (&RC.rrc[enb_module_id]->carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[3] == cell_identity_byte3P) ) { ue_context_p = rrc_eNB_get_ue_context( RC.rrc[enb_module_id], From 27387ee8c2329a25b55b56bddf06c055a80a1bd9 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Wed, 22 Nov 2017 17:50:04 +0100 Subject: [PATCH 10/19] fixing -C option --- targets/RT/USER/lte-softmodem.c | 30 ++++++++++++------------------ targets/RT/USER/lte-ue.c | 1 + 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 993a004fc6..ea4a182ed5 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -599,7 +599,7 @@ static void get_options(void) { paramdef_t cmdline_uemodeparams[] =CMDLINE_UEMODEPARAMS_DESC; paramdef_t cmdline_ueparams[] =CMDLINE_UEPARAMS_DESC; - + set_default_frame_parms(frame_parms); config_process_cmdline( cmdline_uemodeparams,sizeof(cmdline_uemodeparams)/sizeof(paramdef_t),NULL); config_process_cmdline( cmdline_ueparams,sizeof(cmdline_ueparams)/sizeof(paramdef_t),NULL); @@ -618,20 +618,18 @@ static void get_options(void) { if (dumpframe > 0) mode = rx_dump_frame; if ( downlink_frequency[0][0] > 0) { - for (CC_id=1; CC_iddl_CarrierFreq = downlink_frequency[0][0]; + } + UE_scan=0; } if (tddflag > 0) { for (CC_id=0; CC_idframe_type = TDD; } - set_default_frame_parms(frame_parms); + if (frame_parms[0]->N_RB_DL !=0) { if ( frame_parms[0]->N_RB_DL < 6 ) { frame_parms[0]->N_RB_DL = 6; @@ -681,8 +679,9 @@ static void get_options(void) { } else if (UE_flag == 1 && (CONFIG_GETCONFFILE != NULL)) { // Here the configuration file is the XER encoded UE capabilities // Read it in and store in asn1c data structures - strcpy(uecap_xer,CONFIG_GETCONFFILE); - uecap_xer_in=1; + sprintf(uecap_xer,"%stargets/PROJECTS/GENERIC-LTE-EPC/CONF/UE_config.xml",getenv("OPENAIR_HOME")); + printf("%s\n",uecap_xer); + uecap_xer_in=0; } /* UE with config file */ } @@ -731,12 +730,7 @@ void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) { frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.highSpeedFlag=0; frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.prach_FreqOffset=0; - downlink_frequency[CC_id][0] = 2680000000; // Use float to avoid issue with frequency over 2^31. - downlink_frequency[CC_id][1] = downlink_frequency[CC_id][0]; - downlink_frequency[CC_id][2] = downlink_frequency[CC_id][0]; - downlink_frequency[CC_id][3] = downlink_frequency[CC_id][0]; - //printf("Downlink for CC_id %d frequency set to %u\n", CC_id, downlink_frequency[CC_id][0]); - + frame_parms[CC_id]->dl_CarrierFreq = 2680000000; } } @@ -908,7 +902,7 @@ int main( int argc, char **argv ) // set default parameters -// if (UE_flag == 1) set_default_frame_parms(frame_parms); + //if (UE_flag == 1) set_default_frame_parms(frame_parms); logInit(); diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index cf0754f63d..913ae958fc 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -303,6 +303,7 @@ static void *UE_thread_synch(void *arg) } while (ind < sizeof(eutra_bands) / sizeof(eutra_bands[0])); if (found == 0) { + LOG_E(PHY,"Can't find EUTRA band for frequency %d",UE->frame_parms.dl_CarrierFreq); exit_fun("Can't find EUTRA band for frequency"); return &UE_thread_synch_retval; } From 28c4c6a47801ea356b44a837c451c5aa4a1b4f27 Mon Sep 17 00:00:00 2001 From: oai Date: Wed, 22 Nov 2017 18:09:42 +0100 Subject: [PATCH 11/19] fix config problems preventing UE to start --- common/config/config_load_configmodule.c | 9 +++++---- common/config/config_load_configmodule.h | 1 + common/config/config_userapi.h | 3 +++ targets/RT/USER/lte-softmodem.c | 15 ++++++++------- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/common/config/config_load_configmodule.c b/common/config/config_load_configmodule.c index 8351d4d82c..ff66d22a1c 100644 --- a/common/config/config_load_configmodule.c +++ b/common/config/config_load_configmodule.c @@ -129,20 +129,21 @@ int i; /* default */ if (cfgparam == NULL) { - cfgparam = "libconfig:oaisoftmodem.conf"; + tmpflags = tmpflags | CONFIG_NOOOPT; + cfgparam = DEFAULT_CFGMODE ":" DEFAULT_CFGFILENAME; } /* parse the config parameters to set the config source */ i = sscanf(cfgparam,"%m[^':']:%ms",&cfgmode,&modeparams); if (i< 0) { fprintf(stderr,"[CONFIG] %s, %d, sscanf error parsing config source %s: %s\n", __FILE__, __LINE__,cfgparam, strerror(errno)); - cfgmode=strdup("libconfig"); - modeparams = strdup("oaisoftmodem.conf"); + cfgmode=strdup(DEFAULT_CFGMODE); + modeparams = strdup(DEFAULT_CFGFILENAME); } else if ( i == 1 ) { /* -O argument doesn't contain ":" separator, assume -O option, default cfgmode to libconfig with one parameter, the path to the configuration file */ modeparams=cfgmode; - cfgmode=strdup("libconfig"); + cfgmode=strdup(DEFAULT_CFGMODE); } cfgptr = malloc(sizeof(configmodule_interface_t)); diff --git a/common/config/config_load_configmodule.h b/common/config/config_load_configmodule.h index 71c642f680..76f074cd6c 100644 --- a/common/config/config_load_configmodule.h +++ b/common/config/config_load_configmodule.h @@ -46,6 +46,7 @@ #define CONFIG_DEBUGCMDLINE 4 // print command line processing messages #define CONFIG_HELP 8 // print help message #define CONFIG_ABORT 16 // config failed,abort execution +#define CONFIG_NOOOPT 32 // no -O option found when parsing command line typedef int(*configmodule_initfunc_t)(char *cfgP[],int numP); diff --git a/common/config/config_userapi.h b/common/config/config_userapi.h index 8c8fc9d2bf..5bbc20a950 100644 --- a/common/config/config_userapi.h +++ b/common/config/config_userapi.h @@ -38,6 +38,9 @@ extern "C" { #endif +#define DEFAULT_CFGFILENAME "oaisoftmodem.conf" +#define DEFAULT_CFGMODE "libconfig" + #define CONFIG_GETSOURCE ( (config_get_if()==NULL) ? NULL : config_get_if()->cfgmode ) #define CONFIG_GETNUMP ( (config_get_if()==NULL) ? 0 : config_get_if()->num_cfgP ) #define CONFIG_GETP(P) ( (config_get_if()==NULL) ? NULL : config_get_if()->cfgP[P] ) diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 993a004fc6..28f3d2f25a 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -678,7 +678,7 @@ static void get_options(void) { NB_RU = RC.nb_RU; printf("Configuration: nb_rrc_inst %d, nb_L1_inst %d, nb_ru %d\n",NB_eNB_INST,RC.nb_L1_inst,NB_RU); } - } else if (UE_flag == 1 && (CONFIG_GETCONFFILE != NULL)) { + } else if (UE_flag == 1 && (!(CONFIG_ISFLAGSET(CONFIG_NOOOPT))) ) { // Here the configuration file is the XER encoded UE capabilities // Read it in and store in asn1c data structures strcpy(uecap_xer,CONFIG_GETCONFFILE); @@ -731,12 +731,12 @@ void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) { frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.highSpeedFlag=0; frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.prach_FreqOffset=0; - downlink_frequency[CC_id][0] = 2680000000; // Use float to avoid issue with frequency over 2^31. - downlink_frequency[CC_id][1] = downlink_frequency[CC_id][0]; - downlink_frequency[CC_id][2] = downlink_frequency[CC_id][0]; - downlink_frequency[CC_id][3] = downlink_frequency[CC_id][0]; +// downlink_frequency[CC_id][0] = 2680000000; // Use float to avoid issue with frequency over 2^31. +// downlink_frequency[CC_id][1] = downlink_frequency[CC_id][0]; +// downlink_frequency[CC_id][2] = downlink_frequency[CC_id][0]; +// downlink_frequency[CC_id][3] = downlink_frequency[CC_id][0]; //printf("Downlink for CC_id %d frequency set to %u\n", CC_id, downlink_frequency[CC_id][0]); - + frame_parms[CC_id]->dl_CarrierFreq=downlink_frequency[CC_id][0]; } } @@ -1083,8 +1083,9 @@ int main( int argc, char **argv ) else if (frame_parms[CC_id]->N_RB_DL == 25) UE[CC_id]->N_TA_offset = 624/4; } - + init_openair0(); } + } fill_modeled_runtime_table(runtime_phy_rx,runtime_phy_tx); From 1940750a913ae4b47c588938ab2d68dac2638df1 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Thu, 23 Nov 2017 11:30:42 +0100 Subject: [PATCH 12/19] fixing -r option for UE --- targets/RT/USER/lte-softmodem.c | 56 ++++++++++++++++----------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 51b8ef270d..8dd479c9b9 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -632,38 +632,38 @@ static void get_options(void) { frame_parms[CC_id]->frame_type = TDD; } - if (frame_parms[0]->N_RB_DL !=0) { - if ( frame_parms[0]->N_RB_DL < 6 ) { - frame_parms[0]->N_RB_DL = 6; - printf ( "%i: Invalid number of ressource blocks, adjusted to 6\n",frame_parms[0]->N_RB_DL); - } - if ( frame_parms[0]->N_RB_DL > 100 ) { - frame_parms[0]->N_RB_DL = 100; - printf ( "%i: Invalid number of ressource blocks, adjusted to 100\n",frame_parms[0]->N_RB_DL); - } - if ( frame_parms[0]->N_RB_DL > 50 && frame_parms[0]->N_RB_DL < 100 ) { - frame_parms[0]->N_RB_DL = 50; - printf ( "%i: Invalid number of ressource blocks, adjusted to 50\n",frame_parms[0]->N_RB_DL); - } - if ( frame_parms[0]->N_RB_DL > 25 && frame_parms[0]->N_RB_DL < 50 ) { - frame_parms[0]->N_RB_DL = 25; - printf ( "%i: Invalid number of ressource blocks, adjusted to 25\n",frame_parms[0]->N_RB_DL); - } - UE_scan = 0; - frame_parms[0]->N_RB_UL=frame_parms[0]->N_RB_DL; - for (CC_id=0; CC_idN_RB_DL=n_rb_dl; - frame_parms[CC_id]->N_RB_UL=n_rb_dl; - } + if (n_rb_dl !=0) { + printf("NB_RB set to %d\n",frame_parms[0]->N_RB_DL); + if ( n_rb_dl < 6 ) { + n_rb_dl = 6; + printf ( "%i: Invalid number of ressource blocks, adjusted to 6\n",n_rb_dl); + } + if ( n_rb_dl > 100 ) { + n_rb_dl = 100; + printf ( "%i: Invalid number of ressource blocks, adjusted to 100\n",n_rb_dl); + } + if ( n_rb_dl > 50 && n_rb_dl < 100 ) { + n_rb_dl = 50; + printf ( "%i: Invalid number of ressource blocks, adjusted to 50\n",n_rb_dl); + } + if ( n_rb_dl > 25 && n_rb_dl < 50 ) { + n_rb_dl = 25; + printf ( "%i: Invalid number of ressource blocks, adjusted to 25\n",n_rb_dl); + } + UE_scan = 0; + for (CC_id=0; CC_idN_RB_DL=n_rb_dl; + frame_parms[CC_id]->N_RB_UL=n_rb_dl; + } } - - for (CC_id=1;CC_id 0 */ + #if T_TRACER paramdef_t cmdline_ttraceparams[] =CMDLINE_TTRACEPARAMS_DESC ; config_process_cmdline( cmdline_ttraceparams,sizeof(cmdline_ttraceparams)/sizeof(paramdef_t),NULL); From b0d505d2e8492bbee330ba8205758089d07da624 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 27 Nov 2017 11:19:12 +0100 Subject: [PATCH 13/19] bugfix: always cancel Random Access Process Even if the old UE is not found, we have to cancel the random access. --- openair2/LAYER2/MAC/eNB_scheduler_ulsch.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c index 343d391538..421eab7cd7 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c @@ -268,6 +268,9 @@ rx_sdu(const module_id_t enb_mod_idP, "[eNB %d] Frame %d, Subframe %d CC_id %d MAC CE_LCID %d (ce %d/%d): CRNTI %x (UE_id %d) in Msg3\n", enb_mod_idP, frameP, subframeP, CC_idP, rx_ces[i], i, num_ce, old_rnti, old_UE_id); + /* receiving CRNTI means that the current rnti has to go away */ + cancel_ra_proc(enb_mod_idP, CC_idP, frameP, + current_rnti); if (old_UE_id != -1) { /* TODO: if the UE did random access (followed by a MAC uplink with * CRNTI) because none of its scheduling request was granted, then @@ -288,9 +291,6 @@ rx_sdu(const module_id_t enb_mod_idP, mac_eNB_rrc_ul_in_sync(enb_mod_idP, CC_idP, frameP, subframeP, old_rnti); } - /* receiving CRNTI means that the current rnti has to go away */ - cancel_ra_proc(enb_mod_idP, CC_idP, frameP, - current_rnti); current_rnti = old_rnti; } crnti_rx = 1; From 4526622b3627a5441ab98352c0de226271daa515 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 27 Nov 2017 16:45:01 +0100 Subject: [PATCH 14/19] bugfix: don't check for physicalConfigDedicated at the wrong places physicalConfigDedicated may be legitimately NULL at some places with the current code. A cleaner solution is needed (we should always have a dedicated config, initialized with values from the 3GPP specs, not have a NULL as we do now). --- openair2/LAYER2/MAC/eNB_scheduler.c | 10 +++++----- openair2/LAYER2/MAC/eNB_scheduler_primitives.c | 13 ++++++++----- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c index f7c3f5829d..2c3b88306a 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler.c +++ b/openair2/LAYER2/MAC/eNB_scheduler.c @@ -352,17 +352,17 @@ schedule_SR(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP) ul_req = &RC.mac[module_idP]->UL_req[CC_id].ul_config_request_body; + // drop the allocation if the UE hasn't send RRCConnectionSetupComplete yet + if (mac_eNB_get_rrc_status + (module_idP, UE_RNTI(module_idP, UE_id)) < RRC_CONNECTED) + continue; + AssertFatal(UE_list-> UE_template[CC_id][UE_id].physicalConfigDedicated != NULL, "physicalConfigDedicated is null for UE %d\n", UE_id); - // drop the allocation if the UE hasn't send RRCConnectionSetupComplete yet - if (mac_eNB_get_rrc_status - (module_idP, UE_RNTI(module_idP, UE_id)) < RRC_CONNECTED) - continue; - if ((SRconfig = UE_list-> UE_template[CC_id][UE_id].physicalConfigDedicated-> diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c index 42c50d8063..afbb85425e 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c @@ -1349,9 +1349,14 @@ fill_nfapi_harq_information(module_id_t module_idP, AssertFatal(UE_id >= 0, "UE_id cannot be found, impossible\n"); AssertFatal(UE_list != NULL, "UE_list is null\n"); +#if 0 + /* TODO: revisit, don't use Assert, it's perfectly possible to + * have physicalConfigDedicated NULL here + */ AssertFatal(UE_list->UE_template[CC_idP][UE_id]. physicalConfigDedicated != NULL, "physicalConfigDedicated for rnti %x is null\n", rntiP); +#endif harq_information->harq_information_rel11.num_ant_ports = 1; @@ -3585,11 +3590,9 @@ extract_harq(module_id_t mod_idP, int CC_idP, int UE_id, uint8_t *pdu; #ifdef Rel14 - AssertFatal(UE_list-> - UE_template[pCCid][UE_id].physicalConfigDedicated-> - pucch_ConfigDedicated != NULL, - "pucch_ConfigDedicated is null!\n"); - if ((UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated->ext7) + if (UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated != NULL && + UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated->pucch_ConfigDedicated != NULL && + (UE_list->UE_template[pCCid][UE_id].physicalConfigDedicated->ext7) && (UE_list->UE_template[pCCid][UE_id]. physicalConfigDedicated->ext7->pucch_ConfigDedicated_r13) && From b98a98b95b66881dca5d62308430fb1518f1b9e9 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Tue, 28 Nov 2017 14:42:33 +0100 Subject: [PATCH 15/19] few minor fixes --- openair2/RRC/LITE/L2_interface.c | 5 ++++- targets/RT/USER/lte-softmodem.c | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/openair2/RRC/LITE/L2_interface.c b/openair2/RRC/LITE/L2_interface.c index 408e0e8175..504bf8ee9b 100644 --- a/openair2/RRC/LITE/L2_interface.c +++ b/openair2/RRC/LITE/L2_interface.c @@ -807,7 +807,10 @@ mac_UE_get_rrc_status( ) //------------------------------------------------------------------------------ { - return(UE_rrc_inst[Mod_idP].Info[indexP].State); + if (UE_rrc_inst) + return(UE_rrc_inst[Mod_idP].Info[indexP].State); + else + return(-1); } //-------------------------------------------------------------------------------------------// diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 8dd479c9b9..e90fc4335c 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -633,7 +633,7 @@ static void get_options(void) { } if (n_rb_dl !=0) { - printf("NB_RB set to %d\n",frame_parms[0]->N_RB_DL); + printf("NB_RB set to %d\n",n_rb_dl); if ( n_rb_dl < 6 ) { n_rb_dl = 6; printf ( "%i: Invalid number of ressource blocks, adjusted to 6\n",n_rb_dl); @@ -936,7 +936,7 @@ int main( int argc, char **argv ) printf("configuring for UE\n"); set_comp_log(HW, LOG_DEBUG, LOG_HIGH, 1); - set_comp_log(PHY, LOG_DEBUG, LOG_HIGH, 1); + set_comp_log(PHY, LOG_INFO, LOG_HIGH, 1); set_comp_log(MAC, LOG_INFO, LOG_HIGH, 1); set_comp_log(RLC, LOG_INFO, LOG_HIGH | FLAG_THREAD, 1); set_comp_log(PDCP, LOG_INFO, LOG_HIGH, 1); From 5847a14053e3e5e86e0fc0178bbb604066177ef4 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Thu, 30 Nov 2017 11:45:33 +0100 Subject: [PATCH 16/19] bugfix in phy_procedures_lte_ue making oaisim_nos1 compile --- cmake_targets/CMakeLists.txt | 2 +- openair1/SCHED/phy_procedures_lte_ue.c | 7 +++---- targets/RT/USER/lte-softmodem.c | 2 +- targets/RT/USER/lte-softmodem.h | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 4fc2e1ccd3..be49dd4dc2 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -1934,7 +1934,7 @@ add_executable(oaisim_nos1 ${x2ap_h} ${OPENAIR_BIN_DIR}/messages_xml.h ${OPENAIR_TARGETS}/RT/USER/lte-ue.c - ${OPENAIR_TARGETS}/RT/USER/lte-enb.c + ${OPENAIR_TARGETS}/RT/USER/lte-ru.c ${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c ${OPENAIR_TARGETS}/SIMU/USER/channel_sim.c ${OPENAIR_TARGETS}/SIMU/USER/init_lte.c diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index a1ad4c5375..6094f52940 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -2939,12 +2939,12 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint //dump_dci(&ue->frame_parms, &dci_alloc_rx[i]); ue->UE_mode[eNB_id] = PUSCH; - - } else { + } + } else { LOG_E(PHY,"[UE %d] Frame %d, subframe %d: Problem in DCI!\n",ue->Mod_id,frame_rx,subframe_rx); dump_dci(&ue->frame_parms, &dci_alloc_rx[i]); } - } + } else if ((dci_alloc_rx[i].rnti == SI_RNTI) && ((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) { @@ -2977,7 +2977,6 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint } } - } else if ((dci_alloc_rx[i].rnti == P_RNTI) && ((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) { diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 8dd479c9b9..f9b177365c 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -633,7 +633,7 @@ static void get_options(void) { } if (n_rb_dl !=0) { - printf("NB_RB set to %d\n",frame_parms[0]->N_RB_DL); + printf("NB_RB set to %d\n",n_rb_dl); if ( n_rb_dl < 6 ) { n_rb_dl = 6; printf ( "%i: Invalid number of ressource blocks, adjusted to 6\n",n_rb_dl); diff --git a/targets/RT/USER/lte-softmodem.h b/targets/RT/USER/lte-softmodem.h index c12e275f92..44e35c88a3 100644 --- a/targets/RT/USER/lte-softmodem.h +++ b/targets/RT/USER/lte-softmodem.h @@ -65,7 +65,7 @@ #define CONFIG_HLP_NOSNGLT "Disables single-thread mode in lte-softmodem\n" #define CONFIG_HLP_TADV "Set timing_advance\n" #define CONFIG_HLP_DLF "Set the downlink frequency for all component carriers\n" -#define CONFIG_HLP_CHOFF "Channel id offset" +#define CONFIG_HLP_CHOFF "Channel id offset\n" #define CONFIG_HLP_SOFTS "Enable soft scope and L1 and L2 stats (Xforms)\n" #define CONFIG_HLP_EXMCAL "Calibrate the EXMIMO borad, available files: exmimo2_2arxg.lime exmimo2_2brxg.lime \n" #define CONFIG_HLP_ITTIL "Generate ITTI analyzser logs (similar to wireshark logs but with more details)\n" From 7489644cc111902ffcd2acb1b4eef601e1fb03d5 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Tue, 14 Nov 2017 13:57:34 +0100 Subject: [PATCH 17/19] added .ipe file for L1_L2_procedures slides and updated .pdf file Conflicts: targets/DOCS/oai_L1_L2_procedures.pdf --- targets/DOCS/oai_L1_L2_procedures.pdf | Bin 663552 -> 1511882 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/targets/DOCS/oai_L1_L2_procedures.pdf b/targets/DOCS/oai_L1_L2_procedures.pdf index 28a4416e83a119a8950658dfe93969e8d5e2af6a..4e8059f503d8a4fedd634dc014c4f572275a5be8 100644 GIT binary patch delta 251133 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

  • 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%0A!i(S3$Wn` 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/pTdQGxgUgT}<{9=|?g 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 delta 28 jcmX@LIHuu%Mnel@3sVbo3rh=Y3tJ0&3r7p*5-tS*o$U!x From e68d6bd4c01e476a748b22d20894ae288b593cf9 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Fri, 1 Dec 2017 12:15:07 +0100 Subject: [PATCH 18/19] integration fix: remove compilation warning --- openair2/LAYER2/MAC/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c index fcaab0b80b..534f603dfd 100644 --- a/openair2/LAYER2/MAC/main.c +++ b/openair2/LAYER2/MAC/main.c @@ -210,7 +210,7 @@ void mac_init_cell_params(int Mod_idP, int CC_idP) UE_TEMPLATE *UE_template; LOG_D(MAC, "[MSC_NEW][FRAME 00000][MAC_eNB][MOD %02d][]\n", Mod_idP); - COMMON_channels_t *cc = &RC.mac[Mod_idP]->common_channels[CC_idP]; + //COMMON_channels_t *cc = &RC.mac[Mod_idP]->common_channels[CC_idP]; memset(&RC.mac[Mod_idP]->eNB_stats, 0, sizeof(eNB_STATS)); UE_template = From a7b7de35b9db75220087128365754ade5ee812bf Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Fri, 1 Dec 2017 12:15:34 +0100 Subject: [PATCH 19/19] integration fix: remove compilation warning (not sure -1 is the correct value) --- common/config/config_userapi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/config/config_userapi.c b/common/config/config_userapi.c index 37c77be93f..4e49f2c56a 100644 --- a/common/config/config_userapi.c +++ b/common/config/config_userapi.c @@ -153,5 +153,5 @@ int config_isparamset(paramdef_t *params,int paramidx) } int config_getparamval_fromparamdefidx(paramdef_t *cfgoptions,int paramidx) { - + return -1; }
  • m4lna$D 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%0A(N4(W~ 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%0Df-!&lu!T0b{TC?YGvIKoDV;NAFz% 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%0Dm?wEGLTUiF*;j3)9j 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