main.c 16.6 KB
Newer Older
1
/*! \file main.c
2
 * \brief top init of Layer 2
3
 * \author  Navid Nikaein and Raymond Knopp
4
 * \date 2010 - 2014
5
 * \version 1.0
6 7
 * \email: navid.nikaein@eurecom.fr
 * @ingroup _mac
8

9
 */
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

#ifdef USER_MODE
#include "LAYER2/register.h"
#else
#ifdef KERNEL2_6
//#include <linux/config.h>
#include <linux/slab.h>
#endif

#ifdef KERNEL2_4
#include <linux/malloc.h>
#include <linux/wrapper.h>
#endif


#endif //USER_MODE

#include "defs.h"
28
#include "proto.h"
29
#include "extern.h"
Lionel Gauthier's avatar
Lionel Gauthier committed
30
#include "assertions.h"
31 32 33 34
#include "PHY_INTERFACE/extern.h"
#include "PHY_INTERFACE/defs.h"
#include "PHY/defs.h"
#include "SCHED/defs.h"
Lionel Gauthier's avatar
Lionel Gauthier committed
35
#include "LAYER2/PDCP_v10.1.0/pdcp.h"
36 37 38 39 40 41 42 43 44
#include "RRC/LITE/defs.h"
#include "UTIL/LOG/log.h"
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
#ifdef PHY_EMUL
#include "SIMULATION/simulation_defs.h"
#endif //PHY_EMUL

#include "SCHED/defs.h"

45
void dl_phy_sync_success(module_id_t   module_idP,
46 47 48 49
                         frame_t       frameP,
                         unsigned char eNB_index,
                         uint8_t            first_sync)   //init as MR
{
50
  LOG_D(MAC,"[UE %d] Frame %d: PHY Sync to eNB_index %d successful \n", module_idP, frameP, eNB_index);
51
#if ! defined(ENABLE_USE_MME)
52

53
  if (first_sync==1) {
54 55 56
    layer2_init_UE(module_idP);
    openair_rrc_ue_init(module_idP,eNB_index);
  } else
57 58
#endif
  {
59
    rrc_in_sync_ind(module_idP,frameP,eNB_index);
60
  }
61

62 63
}

64 65
void mrbch_phy_sync_failure(module_id_t module_idP, frame_t frameP, uint8_t free_eNB_index) //init as CH
{
66

67 68 69
  LOG_I(MAC,"[eNB %d] Frame %d: PHY Sync failure \n",module_idP,frameP);
  layer2_init_eNB(module_idP, free_eNB_index);
  openair_rrc_eNB_init(module_idP);
70 71
}

72 73
char layer2_init_eNB(module_id_t module_idP, unsigned char eNB_index)
{
74 75 76 77 78

  return 0;

}

79 80
char layer2_init_UE(module_id_t module_idP)
{
81

82 83 84
  return 0;
}

85 86
void mac_UE_out_of_sync_ind(module_id_t module_idP, frame_t frameP, uint16_t eNB_index)
{
87

88
  //  Mac_rlc_xface->mac_out_of_sync_ind(Mod_id, frameP, eNB_index);
89 90 91
}


92 93
int mac_top_init(int eMBMS_active, char *uecap_xer, uint8_t cba_group_active, uint8_t HO_active)
{
94

95
  module_id_t    Mod_id,i,j;
96 97
  RA_TEMPLATE *RA_template;
  UE_TEMPLATE *UE_template;
98
  int size_bytes1,size_bytes2,size_bits1,size_bits2;
Raymond Knopp's avatar
 
Raymond Knopp committed
99 100 101
  int CC_id;
  int list_el;
  UE_list_t *UE_list;
102 103

  LOG_I(MAC,"[MAIN] Init function start:Nb_UE_INST=%d\n",NB_UE_INST);
104

105
  if (NB_UE_INST>0) {
106
    UE_mac_inst = (UE_MAC_INST*)malloc16(NB_UE_INST*sizeof(UE_MAC_INST));
107

108 109 110 111
    if (UE_mac_inst == NULL) {
      LOG_C(MAC,"[MAIN] Can't ALLOCATE %d Bytes for %d UE_MAC_INST with size %d \n",NB_UE_INST*sizeof(UE_MAC_INST),NB_UE_INST,sizeof(UE_MAC_INST));
      mac_xface->macphy_exit("[MAC][MAIN] not enough memory for UEs \n");
    }
112

113 114 115 116
    LOG_D(MAC,"[MAIN] ALLOCATE %d 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));

117
    for(i=0; i<NB_UE_INST; i++) {
118
      ue_init_mac(i);
119 120
    }
  } else {
121
    UE_mac_inst = NULL;
122
  }
123

124
  LOG_I(MAC,"[MAIN] Init function start:Nb_eNB_INST=%d\n",NB_eNB_INST);
125

126
  if (NB_eNB_INST>0) {
127 128 129 130 131 132 133 134 135
    eNB_mac_inst = (eNB_MAC_INST*)malloc16(NB_eNB_INST*sizeof(eNB_MAC_INST));

    if (eNB_mac_inst == NULL) {
      LOG_D(MAC,"[MAIN] can't ALLOCATE %d Bytes for %d eNB_MAC_INST with size %d \n",NB_eNB_INST*sizeof(eNB_MAC_INST*),NB_eNB_INST,sizeof(eNB_MAC_INST));
      mac_xface->macphy_exit("[MAC][MAIN] not enough memory for eNB \n");
    } else {
      LOG_D(MAC,"[MAIN] ALLOCATE %d Bytes for %d eNB_MAC_INST @ %p\n",sizeof(eNB_MAC_INST),NB_eNB_INST,eNB_mac_inst);
      bzero(eNB_mac_inst,NB_eNB_INST*sizeof(eNB_MAC_INST));
    }
136
  } else {
137
    eNB_mac_inst = NULL;
138
  }
139

Raymond Knopp's avatar
 
Raymond Knopp committed
140
  // Initialize Linked-List for Active UEs
141
  for(Mod_id=0; Mod_id<NB_eNB_INST; Mod_id++) {
Raymond Knopp's avatar
 
Raymond Knopp committed
142 143 144 145
    UE_list = &eNB_mac_inst[Mod_id].UE_list;

    UE_list->num_UEs=0;
    UE_list->head=-1;
146
    UE_list->head_ul=-1;
Raymond Knopp's avatar
 
Raymond Knopp committed
147
    UE_list->avail=0;
148 149

    for (list_el=0; list_el<NUMBER_OF_UE_MAX-1; list_el++) {
Raymond Knopp's avatar
 
Raymond Knopp committed
150
      UE_list->next[list_el]=list_el+1;
151
      UE_list->next_ul[list_el]=list_el+1;
Raymond Knopp's avatar
 
Raymond Knopp committed
152
    }
153

Raymond Knopp's avatar
 
Raymond Knopp committed
154
    UE_list->next[list_el]=-1;
155
    UE_list->next_ul[list_el]=-1;
156

157
#ifdef PHY_EMUL
Raymond Knopp's avatar
 
Raymond Knopp committed
158
    Mac_rlc_xface->Is_cluster_head[Mod_id]=2;//0: MR, 1: CH, 2: not CH neither MR
159
#endif
160
    /*#ifdef Rel10
161 162
    int n;
    for (n=0;n<4096;n++)
163
    eNB_mac_inst[Mod_id].MCH_pdu.payload[n] = taus();
164
    //    Mac_rlc_xface->Node_id[Mod_id]=NODE_ID[Mod_id];
165
    #endif*/
166
  }
167

168 169 170
  //  Mac_rlc_xface->frame=Mac_rlc_xface->frame;


171 172
  if (Is_rrc_registered == 1) {
    LOG_I(MAC,"[MAIN] calling RRC\n");
173
#ifndef CELLULAR //nothing to be done yet for cellular
174
    openair_rrc_top_init(eMBMS_active, uecap_xer, cba_group_active,HO_active);
175
#endif
176 177
  } else {
    LOG_I(MAC,"[MAIN] Running without an RRC\n");
178
  }
179

180 181 182
#ifndef USER_MODE
#ifndef PHY_EMUL
  LOG_I(MAC,"[MAIN] add openair2 proc\n");
183
  ////  add_openair2_stats();
184 185 186
#endif
#endif

187
  //init_transport_channels(2);
188 189 190

  // Set up DCIs for TDD 5MHz Config 1..6

191 192
  for (i=0; i<NB_eNB_INST; i++)
    for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
193
      LOG_D(MAC,"[MAIN][eNB %d] CC_id %d initializing RA_template\n",i, CC_id);
194 195
      LOG_D(MAC, "[MSC_NEW][FRAME 00000][MAC_eNB][MOD %02d][]\n", i);

Raymond Knopp's avatar
 
Raymond Knopp committed
196
      RA_template = (RA_TEMPLATE *)&eNB_mac_inst[i].common_channels[CC_id].RA_template[0];
197

198
      for (j=0; j<NB_RA_PROC_MAX; j++) {
199 200
        if (mac_xface->frame_parms->frame_type == TDD) {
          switch (mac_xface->frame_parms->N_RB_DL) {
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234
          case 6:
            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 25:
            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 50:
            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 100:
            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;
235
          }
236 237

        } else {
238
          switch (mac_xface->frame_parms->N_RB_DL) {
239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
          case 6:
            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 25:
            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 50:
            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 100:
            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;
273
          }
274 275 276 277 278 279 280 281 282 283 284
        }

        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;
285
      }
286 287

      memset (&eNB_mac_inst[i].eNB_stats,0,sizeof(eNB_STATS));
Raymond Knopp's avatar
 
Raymond Knopp committed
288
      UE_template = (UE_TEMPLATE *)&eNB_mac_inst[i].UE_list.UE_template[CC_id][0];
289 290 291 292 293

      for (j=0; j<NUMBER_OF_UE_MAX; j++) {
        UE_template[j].rnti=0;
        // initiallize the eNB to UE statistics
        memset (&eNB_mac_inst[i].UE_list.eNB_UE_stats[CC_id][j],0,sizeof(eNB_UE_STATS));
294
      }
Raymond Knopp's avatar
 
Raymond Knopp committed
295
    }
296 297


298
  //ICIC init param
299
#ifdef ICIC
300
  uint8_t SB_size;
301
  SB_size=mac_xface->get_SB_size(mac_xface->frame_parms->N_RB_DL);
302 303 304

  srand (time(NULL));

305 306
  for(j=0; j<NB_eNB_INST; j++)
    for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
Raymond Knopp's avatar
 
Raymond Knopp committed
307 308 309 310
      eNB_mac_inst[j][CC_id].sbmap_conf.first_subframe=0;
      eNB_mac_inst[j][CC_id].sbmap_conf.periodicity=10;
      eNB_mac_inst[j][CC_id].sbmap_conf.sb_size=SB_size;
      eNB_mac_inst[j][CC_id].sbmap_conf.nb_active_sb=1;
311

312
      for(i=0; i<NUMBER_OF_SUBBANDS; i++) {
Raymond Knopp's avatar
 
Raymond Knopp committed
313
        eNB_mac_inst[j][CC_id].sbmap_conf.sbmap[i]=1;
314
      }
315

Raymond Knopp's avatar
 
Raymond Knopp committed
316
      eNB_mac_inst[j][CC_id].sbmap_conf.sbmap[rand()%NUMBER_OF_SUBBANDS]=0;
317

318 319
    }

320
#endif
321
  //end ALU's algo
322

323
  LOG_I(MAC,"[MAIN][INIT] Init function finished\n");
324 325 326 327 328 329

  return(0);

}


330 331
int mac_init_global_param(void)
{
332

333

334 335 336
  Mac_rlc_xface = NULL;
  LOG_I(MAC,"[MAIN] CALLING RLC_MODULE_INIT...\n");

337
  if (rlc_module_init()!=0) {
338
    return(-1);
339
  }
340 341 342 343 344 345

  LOG_I(MAC,"[MAIN] RLC_MODULE_INIT OK, malloc16 for mac_rlc_xface...\n");

  Mac_rlc_xface = (MAC_RLC_XFACE*)malloc16(sizeof(MAC_RLC_XFACE));
  bzero(Mac_rlc_xface,sizeof(MAC_RLC_XFACE));

346 347 348
  if(Mac_rlc_xface == NULL) {
    LOG_E(MAC,"[MAIN] FATAL EROOR: Could not allocate memory for Mac_rlc_xface !!!\n");
    return (-1);
349 350 351 352 353 354 355 356

  }

  LOG_I(MAC,"[MAIN] malloc16 OK, mac_rlc_xface @ %p\n",(void *)Mac_rlc_xface);

  //  mac_xface->macphy_data_ind=macphy_data_ind;
  mac_xface->mrbch_phy_sync_failure=mrbch_phy_sync_failure;
  mac_xface->dl_phy_sync_success=dl_phy_sync_success;
357
  mac_xface->out_of_sync_ind=rrc_out_of_sync_ind;
358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379

  //  Mac_rlc_xface->macphy_exit=  mac_xface->macphy_exit;
  //  Mac_rlc_xface->frame = 0;
  //  Mac_rlc_xface->mac_config_req=mac_config_req;
  //  Mac_rlc_xface->mac_meas_req=mac_meas_req;
  //  Mac_rlc_xface->rrc_rlc_config_req=rrc_rlc_config_req;
  //  Mac_rlc_xface->rrc_rlc_data_req=rrc_rlc_data_req;
  //  Mac_rlc_xface->rrc_rlc_register_rrc=rrc_rlc_register_rrc;

  //  Mac_rlc_xface->rrc_mac_config_req=rrc_mac_config_req;

  //  LOG_I(MAC,"[MAIN] INIT_GLOBAL_PARAM: Mac_rlc_xface=%p,rrc_rlc_register_rrc =%p\n",Mac_rlc_xface,Mac_rlc_xface->rrc_rlc_register_rrc);

  //  Mac_rlc_xface->mac_rlc_data_req=mac_rlc_data_req;
  //  Mac_rlc_xface->mac_rlc_data_ind=mac_rlc_data_ind;
  //  Mac_rlc_xface->mac_rlc_status_ind=mac_rlc_status_ind;
  //  Mac_rlc_xface->pdcp_data_req=pdcp_data_req;
  //  Mac_rlc_xface->mrbch_phy_sync_failure=mrbch_phy_sync_failure;
  //  Mac_rlc_xface->dl_phy_sync_success=dl_phy_sync_success;

  LOG_I(MAC,"[MAIN] RLC interface setup and init\n");
  rrc_init_global_param();
380

381 382 383 384 385 386 387 388 389 390 391 392
#ifdef USER_MODE
  pdcp_layer_init ();
#else
  pdcp_module_init ();
#endif

  LOG_I(MAC,"[MAIN] Init Global Param Done\n");

  return 0;
}


393 394
void mac_top_cleanup(void)
{
395

396 397 398
#ifndef USER_MODE
  pdcp_module_cleanup ();
#endif
399

400
  if (NB_UE_INST>0) {
401
    free (UE_mac_inst);
402
  }
403

404
  if (NB_eNB_INST>0) {
405
    free(eNB_mac_inst);
406
  }
407

408 409 410
  free( Mac_rlc_xface);
}

411 412
int l2_init(LTE_DL_FRAME_PARMS *frame_parms,int eMBMS_active, char *uecap_xer,uint8_t cba_group_active, uint8_t HO_active)
{
413 414 415 416 417 418 419



  LOG_I(MAC,"[MAIN] MAC_INIT_GLOBAL_PARAM IN...\n");
  //    NB_NODE=2;
  //    NB_INST=2;

420
  Is_rrc_registered=0;
421
  mac_init_global_param();
422
  Is_rrc_registered=1;
423

Cedric Roux's avatar
Cedric Roux committed
424
  mac_xface->macphy_init = mac_top_init;
425 426 427 428 429 430 431 432 433 434 435 436
#ifndef USER_MODE
  mac_xface->macphy_exit = openair_sched_exit;
#else
  mac_xface->macphy_exit=(void (*)(const char*)) exit;
#endif
  LOG_I(MAC,"[MAIN] init eNB MAC functions  \n");
  mac_xface->eNB_dlsch_ulsch_scheduler = eNB_dlsch_ulsch_scheduler;
  mac_xface->get_dci_sdu               = get_dci_sdu;
  mac_xface->fill_rar                  = fill_rar;
  mac_xface->initiate_ra_proc          = initiate_ra_proc;
  mac_xface->cancel_ra_proc            = cancel_ra_proc;
  mac_xface->SR_indication             = SR_indication;
437
  mac_xface->UL_failure_indication     = UL_failure_indication;
438 439
  mac_xface->rx_sdu                    = rx_sdu;
  mac_xface->get_dlsch_sdu             = get_dlsch_sdu;
440
  mac_xface->get_eNB_UE_stats          = get_UE_stats;
441 442 443
  mac_xface->get_transmission_mode     = get_transmission_mode;
  mac_xface->get_rballoc               = get_rballoc;
  mac_xface->get_nb_rb                 = conv_nprb;
444
  mac_xface->get_prb                   = get_prb;
445
  //  mac_xface->get_SB_size               = Get_SB_size;
446 447 448 449 450
  mac_xface->get_subframe_direction    = get_subframe_direction;
  mac_xface->Msg3_transmitted          = Msg3_tx;
  mac_xface->Msg1_transmitted          = Msg1_tx;
  mac_xface->ra_failed                 = ra_failed;
  mac_xface->ra_succeeded              = ra_succeeded;
451
  mac_xface->mac_phy_remove_ue         = mac_phy_remove_ue;
452 453 454

  LOG_I(MAC,"[MAIN] init UE MAC functions \n");
  mac_xface->ue_decode_si              = ue_decode_si;
455
  mac_xface->ue_decode_p               = ue_decode_p;
456 457 458 459 460 461 462 463 464 465 466 467 468 469
  mac_xface->ue_send_sdu               = ue_send_sdu;
#ifdef Rel10
  mac_xface->ue_send_mch_sdu           = ue_send_mch_sdu;
  mac_xface->ue_query_mch              = ue_query_mch;
#endif
  mac_xface->ue_get_SR                 = ue_get_SR;
  mac_xface->ue_get_sdu                = ue_get_sdu;
  mac_xface->ue_get_rach               = ue_get_rach;
  mac_xface->ue_process_rar            = ue_process_rar;
  mac_xface->ue_scheduler              = ue_scheduler;
  mac_xface->process_timing_advance    = process_timing_advance;


  LOG_I(MAC,"[MAIN] PHY Frame configuration \n");
470
  mac_xface->frame_parms = frame_parms;
471 472 473

  mac_xface->get_ue_active_harq_pid = get_ue_active_harq_pid;
  mac_xface->get_PL                 = get_PL;
474 475 476 477 478
  mac_xface->get_RSRP               = get_RSRP;
  mac_xface->get_RSRQ               = get_RSRQ;
  mac_xface->get_RSSI               = get_RSSI;
  mac_xface->get_n_adj_cells        = get_n_adj_cells;
  mac_xface->get_rx_total_gain_dB   = get_rx_total_gain_dB;
479 480 481 482 483 484 485
  mac_xface->get_Po_NOMINAL_PUSCH   = get_Po_NOMINAL_PUSCH;
  mac_xface->get_num_prach_tdd      = get_num_prach_tdd;
  mac_xface->get_fid_prach_tdd      = get_fid_prach_tdd;
  mac_xface->get_deltaP_rampup      = get_deltaP_rampup;
  mac_xface->computeRIV             = computeRIV;
  mac_xface->get_TBS_DL             = get_TBS_DL;
  mac_xface->get_TBS_UL             = get_TBS_UL;
486
  mac_xface->get_nCCE_max           = get_nCCE_mac;
487
  mac_xface->get_nCCE_offset        = get_nCCE_offset;
488 489 490 491 492 493
  mac_xface->get_ue_mode            = get_ue_mode;
  mac_xface->phy_config_sib1_eNB    = phy_config_sib1_eNB;
  mac_xface->phy_config_sib1_ue     = phy_config_sib1_ue;

  mac_xface->phy_config_sib2_eNB        = phy_config_sib2_eNB;
  mac_xface->phy_config_sib2_ue         = phy_config_sib2_ue;
494
  mac_xface->phy_config_afterHO_ue      = phy_config_afterHO_ue;
495 496 497 498 499 500
#ifdef Rel10
  mac_xface->phy_config_sib13_eNB        = phy_config_sib13_eNB;
  mac_xface->phy_config_sib13_ue         = phy_config_sib13_ue;
#endif
#ifdef CBA
  mac_xface->phy_config_cba_rnti         = phy_config_cba_rnti ;
501
#endif
502
  mac_xface->estimate_ue_tx_power        = estimate_ue_tx_power;
503
  mac_xface->phy_config_meas_ue          = phy_config_meas_ue;
504
  mac_xface->phy_reset_ue    = phy_reset_ue;
505 506 507 508

  mac_xface->phy_config_dedicated_eNB    = phy_config_dedicated_eNB;
  mac_xface->phy_config_dedicated_ue     = phy_config_dedicated_ue;

509 510 511
  mac_xface->get_lte_frame_parms        = get_lte_frame_parms;
  mac_xface->get_mu_mimo_mode           = get_mu_mimo_mode;

512
  mac_xface->get_hundred_times_delta_TF = get_hundred_times_delta_IF_mac;
513 514 515 516 517
  mac_xface->get_target_pusch_rx_power     = get_target_pusch_rx_power;
  mac_xface->get_target_pucch_rx_power     = get_target_pucch_rx_power;

  mac_xface->get_prach_prb_offset       = get_prach_prb_offset;
  mac_xface->is_prach_subframe          = is_prach_subframe;
518

519 520
#ifdef Rel10
  mac_xface->get_mch_sdu                 = get_mch_sdu;
521 522
  mac_xface->phy_config_dedicated_scell_eNB= phy_config_dedicated_scell_eNB;
  mac_xface->phy_config_dedicated_scell_ue= phy_config_dedicated_scell_ue;
523

524 525 526 527 528
#endif

  mac_xface->get_PHR = get_PHR;
  LOG_D(MAC,"[MAIN] ALL INIT OK\n");

Raymond Knopp's avatar
 
Raymond Knopp committed
529
  mac_xface->macphy_init(eMBMS_active,uecap_xer,cba_group_active,HO_active);
530 531 532 533

  //Mac_rlc_xface->Is_cluster_head[0] = 1;
  //Mac_rlc_xface->Is_cluster_head[1] = 0;

534

535 536 537
  return(1);
}