Commit 0e6e84c3 authored by Cedric Roux's avatar Cedric Roux

carrier aggregation preparatory work:

- mac_rrc_data_req/mac_rrc_data_ind API modification
- ITTI message RRC_MAC_CCCH_DATA_IND updated
- substructure "carrier" introduced in "eNB_rrc_inst"
- ASN.1 messages SIB1/SIB23 adapted
- handover not correctly handled (CC_id not used)


git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7456 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent 0abc8883
......@@ -99,6 +99,7 @@ typedef struct RrcMacCcchDataInd_s {
uint32_t sdu_size;
uint8_t sdu[CCCH_SDU_SIZE];
uint8_t enb_index;
int CC_id;
} RrcMacCcchDataInd;
typedef struct RrcMacMcchDataReq_s {
......
......@@ -109,6 +109,7 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un
// Get RRCConnectionSetup for Piggyback
rrc_sdu_length = mac_rrc_data_req(module_idP,
CC_id,
frameP,
CCCH,
1, // 1 transport block
......
......@@ -93,6 +93,7 @@ schedule_SI(
BCCH_alloc_pdu=(void*)&eNB->common_channels[CC_id].BCCH_alloc_pdu;
bcch_sdu_length = mac_rrc_data_req(module_idP,
CC_id,
frameP,
BCCH,1,
&eNB->common_channels[CC_id].BCCH_pdu.payload[0],
......
......@@ -425,6 +425,7 @@ int schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP, sub_fra
module_idP,frameP, subframeP, i, j);
mcch_sdu_length = mac_rrc_data_req(module_idP,
CC_id,
frameP,
MCCH,1,
&eNB_mac_inst[module_idP].common_channels[CC_id].MCCH_pdu.payload[0],
......
......@@ -225,6 +225,7 @@ void rx_sdu(
if (Is_rrc_registered == 1)
mac_rrc_data_ind(
enb_mod_idP,
CC_idP,
frameP,
rntiP,
CCCH,
......
......@@ -294,6 +294,7 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP,int CC_id,frame_t frameP,
printf("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,
......
......@@ -421,6 +421,7 @@ ue_send_sdu(
LOG_T(MAC,"\n");
#endif
mac_rrc_data_ind(module_idP,
CC_id,
frameP,
UE_mac_inst[module_idP].crnti,
CCCH,
......@@ -498,6 +499,7 @@ void ue_decode_si(module_id_t module_idP,int CC_id,frame_t frameP, uint8_t eNB_i
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,
SI_RNTI,
BCCH,
......@@ -590,6 +592,7 @@ void ue_send_mch_sdu(module_id_t module_idP, uint8_t CC_id, frame_t frameP, uint
} 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,
M_RNTI,
MCCH,
......
......@@ -90,6 +90,7 @@
int8_t
mac_rrc_data_req(
const module_id_t module_idP,
const int CC_idP,
const frame_t frameP,
const rb_id_t srb_idP,
const uint8_t nb_tbP,
......@@ -102,6 +103,7 @@ mac_rrc_data_req(
{
return(mac_rrc_lite_data_req(
module_idP,
CC_idP,
frameP,
srb_idP,
nb_tbP,
......@@ -116,6 +118,7 @@ mac_rrc_data_req(
int8_t
mac_rrc_data_ind(
const module_id_t module_idP,
const int CC_idP,
const frame_t frameP,
const rnti_t rntiP,
const rb_id_t srb_idP,
......@@ -129,6 +132,7 @@ mac_rrc_data_ind(
{
return(mac_rrc_lite_data_ind(
module_idP,
CC_idP,
frameP,
rntiP,
srb_idP,
......
......@@ -44,6 +44,7 @@
int8_t
mac_rrc_data_req(
const module_id_t module_idP,
const int CC_idP,
const frame_t frameP,
const rb_id_t srb_idP,
const uint8_t nb_tbP,
......@@ -56,6 +57,7 @@ mac_rrc_data_req(
int8_t
mac_rrc_data_ind(
const module_id_t module_idP,
const int CC_idP,
const frame_t frameP,
const rnti_t rntiP,
const rb_id_t srb_idP,
......
......@@ -69,6 +69,7 @@ mui_t mui=0;
int8_t
mac_rrc_lite_data_req(
const module_id_t Mod_idP,
const int CC_id,
const frame_t frameP,
const rb_id_t Srb_id,
const uint8_t Nb_tb,
......@@ -90,23 +91,25 @@ mac_rrc_lite_data_req(
if( enb_flagP == ENB_FLAG_YES) {
if((Srb_id & RAB_OFFSET) == BCCH) {
if(eNB_rrc_inst[Mod_idP].SI.Active==0) {
if(eNB_rrc_inst[Mod_idP].carrier[CC_id].SI.Active==0) {
return 0;
}
// All even frames transmit SIB in SF 5
if (eNB_rrc_inst[Mod_idP].sizeof_SIB1 == 255) {
if (eNB_rrc_inst[Mod_idP].carrier[CC_id].sizeof_SIB1 == 255) {
LOG_E(RRC,"[eNB %d] MAC Request for SIB1 and SIB1 not initialized\n",Mod_idP);
mac_xface->macphy_exit("mac_rrc_lite_data_req: MAC Request for SIB1 and SIB1 not initialized");
}
if ((frameP%2) == 0) {
memcpy(&buffer_pP[0],eNB_rrc_inst[Mod_idP].SIB1,eNB_rrc_inst[Mod_idP].sizeof_SIB1);
memcpy(&buffer_pP[0],
eNB_rrc_inst[Mod_idP].carrier[CC_id].SIB1,
eNB_rrc_inst[Mod_idP].carrier[CC_id].sizeof_SIB1);
#if defined(ENABLE_ITTI)
{
MessageDef *message_p;
int sib1_size = eNB_rrc_inst[Mod_idP].sizeof_SIB1;
int sib1_size = eNB_rrc_inst[Mod_idP].carrier[CC_id].sizeof_SIB1;
int sdu_size = sizeof(RRC_MAC_BCCH_DATA_REQ (message_p).sdu);
if (sib1_size > sdu_size) {
......@@ -118,7 +121,9 @@ mac_rrc_lite_data_req(
RRC_MAC_BCCH_DATA_REQ (message_p).frame = frameP;
RRC_MAC_BCCH_DATA_REQ (message_p).sdu_size = sib1_size;
memset (RRC_MAC_BCCH_DATA_REQ (message_p).sdu, 0, BCCH_SDU_SIZE);
memcpy (RRC_MAC_BCCH_DATA_REQ (message_p).sdu, eNB_rrc_inst[Mod_idP].SIB1, sib1_size);
memcpy (RRC_MAC_BCCH_DATA_REQ (message_p).sdu,
eNB_rrc_inst[Mod_idP].carrier[CC_id].SIB1,
sib1_size);
RRC_MAC_BCCH_DATA_REQ (message_p).enb_index = eNB_index;
itti_send_msg_to_task (TASK_MAC_ENB, ENB_MODULE_ID_TO_INSTANCE(Mod_idP), message_p);
......@@ -128,22 +133,24 @@ mac_rrc_lite_data_req(
#ifdef DEBUG_RRC
LOG_T(RRC,"[eNB %d] Frame %d : BCCH request => SIB 1\n",Mod_idP,frameP);
for (i=0; i<eNB_rrc_inst[Mod_idP].sizeof_SIB1; i++) {
for (i=0; i<eNB_rrc_inst[Mod_idP].carrier[CC_id].sizeof_SIB1; i++) {
LOG_T(RRC,"%x.",buffer_pP[i]);
}
LOG_T(RRC,"\n");
#endif
return (eNB_rrc_inst[Mod_idP].sizeof_SIB1);
return (eNB_rrc_inst[Mod_idP].carrier[CC_id].sizeof_SIB1);
} // All RFN mod 8 transmit SIB2-3 in SF 5
else if ((frameP%8) == 1) {
memcpy(&buffer_pP[0],eNB_rrc_inst[Mod_idP].SIB23,eNB_rrc_inst[Mod_idP].sizeof_SIB23);
memcpy(&buffer_pP[0],
eNB_rrc_inst[Mod_idP].carrier[CC_id].SIB23,
eNB_rrc_inst[Mod_idP].carrier[CC_id].sizeof_SIB23);
#if defined(ENABLE_ITTI)
{
MessageDef *message_p;
int sib23_size = eNB_rrc_inst[Mod_idP].sizeof_SIB23;
int sib23_size = eNB_rrc_inst[Mod_idP].carrier[CC_id].sizeof_SIB23;
int sdu_size = sizeof(RRC_MAC_BCCH_DATA_REQ (message_p).sdu);
if (sib23_size > sdu_size) {
......@@ -155,7 +162,9 @@ mac_rrc_lite_data_req(
RRC_MAC_BCCH_DATA_REQ (message_p).frame = frameP;
RRC_MAC_BCCH_DATA_REQ (message_p).sdu_size = sib23_size;
memset (RRC_MAC_BCCH_DATA_REQ (message_p).sdu, 0, BCCH_SDU_SIZE);
memcpy (RRC_MAC_BCCH_DATA_REQ (message_p).sdu, eNB_rrc_inst[Mod_idP].SIB23, sib23_size);
memcpy (RRC_MAC_BCCH_DATA_REQ (message_p).sdu,
eNB_rrc_inst[Mod_idP].carrier[CC_id].SIB23,
sib23_size);
RRC_MAC_BCCH_DATA_REQ (message_p).enb_index = eNB_index;
itti_send_msg_to_task (TASK_MAC_ENB, ENB_MODULE_ID_TO_INSTANCE(Mod_idP), message_p);
......@@ -165,13 +174,13 @@ mac_rrc_lite_data_req(
#ifdef DEBUG_RRC
LOG_T(RRC,"[eNB %d] Frame %d BCCH request => SIB 2-3\n",Mod_idP,frameP);
for (i=0; i<eNB_rrc_inst[Mod_idP].sizeof_SIB23; i++) {
for (i=0; i<eNB_rrc_inst[Mod_idP].carrier[CC_id].sizeof_SIB23; i++) {
LOG_T(RRC,"%x.",buffer_pP[i]);
}
LOG_T(RRC,"\n");
#endif
return(eNB_rrc_inst[Mod_idP].sizeof_SIB23);
return(eNB_rrc_inst[Mod_idP].carrier[CC_id].sizeof_SIB23);
} else {
return(0);
}
......@@ -180,12 +189,12 @@ mac_rrc_lite_data_req(
if( (Srb_id & RAB_OFFSET ) == CCCH) {
LOG_T(RRC,"[eNB %d] Frame %d CCCH request (Srb_id %d)\n",Mod_idP,frameP, Srb_id);
if(eNB_rrc_inst[Mod_idP].Srb0.Active==0) {
if(eNB_rrc_inst[Mod_idP].carrier[CC_id].Srb0.Active==0) {
LOG_E(RRC,"[eNB %d] CCCH Not active\n",Mod_idP);
return -1;
}
Srb_info=&eNB_rrc_inst[Mod_idP].Srb0;
Srb_info=&eNB_rrc_inst[Mod_idP].carrier[CC_id].Srb0;
// check if data is there for MAC
if(Srb_info->Tx_buffer.payload_size>0) { //Fill buffer
......@@ -224,7 +233,7 @@ mac_rrc_lite_data_req(
#ifdef Rel10
if((Srb_id & RAB_OFFSET) == MCCH) {
if(eNB_rrc_inst[Mod_idP].MCCH_MESS[mbsfn_sync_area].Active==0) {
if(eNB_rrc_inst[Mod_idP].carrier[CC_id].MCCH_MESS[mbsfn_sync_area].Active==0) {
return 0; // this parameter is set in function init_mcch in rrc_eNB.c
}
......@@ -238,7 +247,7 @@ mac_rrc_lite_data_req(
#if defined(ENABLE_ITTI)
{
MessageDef *message_p;
int mcch_size = eNB_rrc_inst[Mod_idP].sizeof_MCCH_MESSAGE[mbsfn_sync_area];
int mcch_size = eNB_rrc_inst[Mod_idP].carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area];
int sdu_size = sizeof(RRC_MAC_MCCH_DATA_REQ (message_p).sdu);
if (mcch_size > sdu_size) {
......@@ -250,7 +259,9 @@ mac_rrc_lite_data_req(
RRC_MAC_MCCH_DATA_REQ (message_p).frame = frameP;
RRC_MAC_MCCH_DATA_REQ (message_p).sdu_size = mcch_size;
memset (RRC_MAC_MCCH_DATA_REQ (message_p).sdu, 0, MCCH_SDU_SIZE);
memcpy (RRC_MAC_MCCH_DATA_REQ (message_p).sdu, eNB_rrc_inst[Mod_idP].MCCH_MESSAGE[mbsfn_sync_area], mcch_size);
memcpy (RRC_MAC_MCCH_DATA_REQ (message_p).sdu,
eNB_rrc_inst[Mod_idP].carrier[CC_id].MCCH_MESSAGE[mbsfn_sync_area],
mcch_size);
RRC_MAC_MCCH_DATA_REQ (message_p).enb_index = eNB_index;
RRC_MAC_MCCH_DATA_REQ (message_p).mbsfn_sync_area = mbsfn_sync_area;
......@@ -259,20 +270,20 @@ mac_rrc_lite_data_req(
#endif
memcpy(&buffer_pP[0],
eNB_rrc_inst[Mod_idP].MCCH_MESSAGE[mbsfn_sync_area],
eNB_rrc_inst[Mod_idP].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
eNB_rrc_inst[Mod_idP].carrier[CC_id].MCCH_MESSAGE[mbsfn_sync_area],
eNB_rrc_inst[Mod_idP].carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
#ifdef DEBUG_RRC
LOG_D(RRC,"[eNB %d] Frame %d : MCCH request => MCCH_MESSAGE \n",Mod_idP,frameP);
for (i=0; i<eNB_rrc_inst[Mod_idP].sizeof_MCCH_MESSAGE[mbsfn_sync_area]; i++) {
for (i=0; i<eNB_rrc_inst[Mod_idP].carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]; i++) {
LOG_T(RRC,"%x.",buffer_pP[i]);
}
LOG_T(RRC,"\n");
#endif
return (eNB_rrc_inst[Mod_idP].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
return (eNB_rrc_inst[Mod_idP].carrier[CC_id].sizeof_MCCH_MESSAGE[mbsfn_sync_area]);
// }
//else
//return(0);
......@@ -328,6 +339,7 @@ mac_rrc_lite_data_req(
int8_t
mac_rrc_lite_data_ind(
const module_id_t module_idP,
const int CC_id,
const frame_t frameP,
const rnti_t rntiP,
const rb_id_t srb_idP,
......@@ -446,7 +458,7 @@ mac_rrc_lite_data_ind(
#endif // Rel10
} else { // This is an eNB
Srb_info = &eNB_rrc_inst[module_idP].Srb0;
Srb_info = &eNB_rrc_inst[module_idP].carrier[CC_id].Srb0;
LOG_T(RRC,"[eNB %d] Received SDU for CCCH on SRB %d\n",module_idP,Srb_info->Srb_id);
#if defined(ENABLE_ITTI)
......@@ -465,6 +477,7 @@ mac_rrc_lite_data_ind(
RRC_MAC_CCCH_DATA_IND (message_p).frame = frameP;
RRC_MAC_CCCH_DATA_IND (message_p).rnti = rntiP;
RRC_MAC_CCCH_DATA_IND (message_p).sdu_size = sdu_size;
RRC_MAC_CCCH_DATA_IND (message_p).CC_id = CC_id;
memset (RRC_MAC_CCCH_DATA_IND (message_p).sdu, 0, CCCH_SDU_SIZE);
memcpy (RRC_MAC_CCCH_DATA_IND (message_p).sdu, sduP, sdu_size);
itti_send_msg_to_task (TASK_RRC_ENB, ctxt.instance, message_p);
......@@ -475,7 +488,7 @@ mac_rrc_lite_data_ind(
if (sdu_lenP > 0) {
memcpy(Srb_info->Rx_buffer.Payload,sduP,sdu_lenP);
Srb_info->Rx_buffer.payload_size = sdu_lenP;
rrc_eNB_decode_ccch(&ctxt,Srb_info);
rrc_eNB_decode_ccch(&ctxt, Srb_info, CC_id);
}
#endif
......
......@@ -407,7 +407,8 @@ uint8_t do_MIB(uint8_t Mod_id, LTE_DL_FRAME_PARMS *frame_parms, uint32_t frame,
*/
}
uint8_t do_SIB1(uint8_t Mod_id, LTE_DL_FRAME_PARMS *frame_parms, uint8_t *buffer,
uint8_t do_SIB1(uint8_t Mod_id, int CC_id,
LTE_DL_FRAME_PARMS *frame_parms, uint8_t *buffer,
BCCH_DL_SCH_Message_t *bcch_message,
SystemInformationBlockType1_t **sib1
#if defined(ENABLE_ITTI)
......@@ -533,7 +534,7 @@ uint8_t do_SIB1(uint8_t Mod_id, LTE_DL_FRAME_PARMS *frame_parms, uint8_t *buffer
//*((*sib1)->p_Max) = 23;
(*sib1)->freqBandIndicator =
#if defined(ENABLE_ITTI)
configuration->eutra_band[0];
configuration->eutra_band[CC_id];
#else
7;
#endif
......@@ -549,21 +550,21 @@ uint8_t do_SIB1(uint8_t Mod_id, LTE_DL_FRAME_PARMS *frame_parms, uint8_t *buffer
#if defined(ENABLE_ITTI)
if (configuration->frame_type[0] == TDD)
if (configuration->frame_type[CC_id] == TDD)
#endif
{
(*sib1)->tdd_Config = CALLOC(1,sizeof(struct TDD_Config));
(*sib1)->tdd_Config->subframeAssignment =
#if defined(ENABLE_ITTI)
configuration->tdd_config[0];
configuration->tdd_config[CC_id];
#else
frame_parms->tdd_config;
#endif
(*sib1)->tdd_Config->specialSubframePatterns =
#if defined(ENABLE_ITTI)
configuration->tdd_config_s[0];
configuration->tdd_config_s[CC_id];
#else
frame_parms->tdd_config_S;
#endif
......@@ -614,6 +615,7 @@ uint8_t do_SIB1(uint8_t Mod_id, LTE_DL_FRAME_PARMS *frame_parms, uint8_t *buffer
}
uint8_t do_SIB23(uint8_t Mod_id,
int CC_id,
LTE_DL_FRAME_PARMS *frame_parms,
uint8_t *buffer,
BCCH_DL_SCH_Message_t *bcch_message,
......@@ -693,100 +695,100 @@ uint8_t do_SIB23(uint8_t Mod_id,
#if defined(ENABLE_ITTI)
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.numberOfRA_Preambles = configuration->rach_numberOfRA_Preambles[0];
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.numberOfRA_Preambles = configuration->rach_numberOfRA_Preambles[CC_id];
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig = NULL;
if (configuration->rach_preamblesGroupAConfig[0]) {
if (configuration->rach_preamblesGroupAConfig[CC_id]) {
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig
= CALLOC(1,sizeof(struct RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig));
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig->sizeOfRA_PreamblesGroupA
= configuration->rach_sizeOfRA_PreamblesGroupA[0];
= configuration->rach_sizeOfRA_PreamblesGroupA[CC_id];
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig->messageSizeGroupA
= configuration->rach_messageSizeGroupA[0];
= configuration->rach_messageSizeGroupA[CC_id];
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.preamblesGroupAConfig->messagePowerOffsetGroupB
= configuration->rach_messagePowerOffsetGroupB[0];
= configuration->rach_messagePowerOffsetGroupB[CC_id];
}
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.powerRampingStep = configuration->rach_powerRampingStep[0];
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.powerRampingStep = configuration->rach_powerRampingStep[CC_id];
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.powerRampingParameters.preambleInitialReceivedTargetPower =
configuration->rach_preambleInitialReceivedTargetPower[0];
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.preambleTransMax = configuration->rach_preambleTransMax[0];
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.ra_ResponseWindowSize = configuration->rach_raResponseWindowSize[0];
configuration->rach_preambleInitialReceivedTargetPower[CC_id];
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.preambleTransMax = configuration->rach_preambleTransMax[CC_id];
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.ra_ResponseWindowSize = configuration->rach_raResponseWindowSize[CC_id];
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.ra_SupervisionInfo.mac_ContentionResolutionTimer =
configuration->rach_macContentionResolutionTimer[0];
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.maxHARQ_Msg3Tx = configuration->rach_maxHARQ_Msg3Tx[0];
configuration->rach_macContentionResolutionTimer[CC_id];
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.maxHARQ_Msg3Tx = configuration->rach_maxHARQ_Msg3Tx[CC_id];
// BCCH-Config
(*sib2)->radioResourceConfigCommon.bcch_Config.modificationPeriodCoeff
= configuration->bcch_modificationPeriodCoeff[0];
= configuration->bcch_modificationPeriodCoeff[CC_id];
// PCCH-Config
(*sib2)->radioResourceConfigCommon.pcch_Config.defaultPagingCycle
= configuration->pcch_defaultPagingCycle[0];
= configuration->pcch_defaultPagingCycle[CC_id];
(*sib2)->radioResourceConfigCommon.pcch_Config.nB
= configuration->pcch_nB[0];
= configuration->pcch_nB[CC_id];
// PRACH-Config
(*sib2)->radioResourceConfigCommon.prach_Config.rootSequenceIndex
= configuration->prach_root[0];
= configuration->prach_root[CC_id];
(*sib2)->radioResourceConfigCommon.prach_Config.prach_ConfigInfo.prach_ConfigIndex
= configuration->prach_config_index[0];
= configuration->prach_config_index[CC_id];
(*sib2)->radioResourceConfigCommon.prach_Config.prach_ConfigInfo.highSpeedFlag
= configuration->prach_high_speed[0];
= configuration->prach_high_speed[CC_id];
(*sib2)->radioResourceConfigCommon.prach_Config.prach_ConfigInfo.zeroCorrelationZoneConfig
= configuration->prach_zero_correlation[0];
= configuration->prach_zero_correlation[CC_id];
(*sib2)->radioResourceConfigCommon.prach_Config.prach_ConfigInfo.prach_FreqOffset
= configuration->prach_freq_offset[0];
= configuration->prach_freq_offset[CC_id];
// PDSCH-Config
(*sib2)->radioResourceConfigCommon.pdsch_ConfigCommon.referenceSignalPower
= configuration->pdsch_referenceSignalPower[0];
= configuration->pdsch_referenceSignalPower[CC_id];
(*sib2)->radioResourceConfigCommon.pdsch_ConfigCommon.p_b
= configuration->pdsch_p_b[0];
= configuration->pdsch_p_b[CC_id];
// PUSCH-Config
(*sib2)->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.n_SB
= configuration->pusch_n_SB[0];
= configuration->pusch_n_SB[CC_id];
(*sib2)->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.hoppingMode
= configuration->pusch_hoppingMode[0];
= configuration->pusch_hoppingMode[CC_id];
(*sib2)->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.pusch_HoppingOffset
= configuration->pusch_hoppingOffset[0];
= configuration->pusch_hoppingOffset[CC_id];
(*sib2)->radioResourceConfigCommon.pusch_ConfigCommon.pusch_ConfigBasic.enable64QAM
= configuration->pusch_enable64QAM[0];
= configuration->pusch_enable64QAM[CC_id];
(*sib2)->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupHoppingEnabled
= configuration->pusch_groupHoppingEnabled[0];
= configuration->pusch_groupHoppingEnabled[CC_id];
(*sib2)->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH
= configuration->pusch_groupAssignment[0];
= configuration->pusch_groupAssignment[CC_id];
(*sib2)->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled
= configuration->pusch_sequenceHoppingEnabled[0];
= configuration->pusch_sequenceHoppingEnabled[CC_id];
(*sib2)->radioResourceConfigCommon.pusch_ConfigCommon.ul_ReferenceSignalsPUSCH.cyclicShift
= configuration->pusch_nDMRS1[0];
= configuration->pusch_nDMRS1[CC_id];
// PUCCH-Config
(*sib2)->radioResourceConfigCommon.pucch_ConfigCommon.deltaPUCCH_Shift
= configuration->pucch_delta_shift[0];
= configuration->pucch_delta_shift[CC_id];
(*sib2)->radioResourceConfigCommon.pucch_ConfigCommon.nRB_CQI
= configuration->pucch_nRB_CQI[0];
= configuration->pucch_nRB_CQI[CC_id];
(*sib2)->radioResourceConfigCommon.pucch_ConfigCommon.nCS_AN
= configuration->pucch_nCS_AN[0];
= configuration->pucch_nCS_AN[CC_id];
#ifndef Rel10
(*sib2)->radioResourceConfigCommon.pucch_ConfigCommon.n1PUCCH_AN
= configuration->pucch_n1_AN[0];
= configuration->pucch_n1_AN[CC_id];
#endif
// SRS Config
if (configuration->srs_enable[0]) {
if (configuration->srs_enable[CC_id]) {
(*sib2)->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.present
= SoundingRS_UL_ConfigCommon_PR_setup;
(*sib2)->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_BandwidthConfig
= configuration->srs_BandwidthConfig[0];
= configuration->srs_BandwidthConfig[CC_id];
(*sib2)->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig
= configuration->srs_SubframeConfig[0];
= configuration->srs_SubframeConfig[CC_id];
(*sib2)->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission
= configuration->srs_ackNackST[0];
= configuration->srs_ackNackST[CC_id];
if (configuration->srs_MaxUpPts[0]) {
if (configuration->srs_MaxUpPts[CC_id]) {
(*sib2)->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts
= CALLOC(1,sizeof(long));
*(*sib2)->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts=1;
......@@ -801,40 +803,40 @@ uint8_t do_SIB23(uint8_t Mod_id,
// uplinkPowerControlCommon
(*sib2)->radioResourceConfigCommon.uplinkPowerControlCommon.p0_NominalPUSCH
= configuration->pusch_p0_Nominal[0];
= configuration->pusch_p0_Nominal[CC_id];
(*sib2)->radioResourceConfigCommon.uplinkPowerControlCommon.p0_NominalPUCCH
= configuration->pucch_p0_Nominal[0];
= configuration->pucch_p0_Nominal[CC_id];
(*sib2)->radioResourceConfigCommon.uplinkPowerControlCommon.alpha
= configuration->pusch_alpha[0];
= configuration->pusch_alpha[CC_id];
(*sib2)->radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1
= configuration->pucch_deltaF_Format1[0];
= configuration->pucch_deltaF_Format1[CC_id];
(*sib2)->radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format1b
= configuration->pucch_deltaF_Format1b[0];
= configuration->pucch_deltaF_Format1b[CC_id];
(*sib2)->radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2
= configuration->pucch_deltaF_Format2[0];
= configuration->pucch_deltaF_Format2[CC_id];
(*sib2)->radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2a
= configuration->pucch_deltaF_Format2a[0];
= configuration->pucch_deltaF_Format2a[CC_id];
(*sib2)->radioResourceConfigCommon.uplinkPowerControlCommon.deltaFList_PUCCH.deltaF_PUCCH_Format2b
= configuration->pucch_deltaF_Format2b[0];
= configuration->pucch_deltaF_Format2b[CC_id];
(*sib2)->radioResourceConfigCommon.uplinkPowerControlCommon.deltaPreambleMsg3
= configuration->msg3_delta_Preamble[0];
= configuration->msg3_delta_Preamble[CC_id];
(*sib2)->radioResourceConfigCommon.ul_CyclicPrefixLength
= configuration->ul_CyclicPrefixLength[0];
= configuration->ul_CyclicPrefixLength[CC_id];
// UE Timers and Constants
(*sib2)->ue_TimersAndConstants.t300
= configuration->ue_TimersAndConstants_t300[0];
= configuration->ue_TimersAndConstants_t300[CC_id];
(*sib2)->ue_TimersAndConstants.t301
= configuration->ue_TimersAndConstants_t301[0];
= configuration->ue_TimersAndConstants_t301[CC_id];
(*sib2)->ue_TimersAndConstants.t310
= configuration->ue_TimersAndConstants_t310[0];
= configuration->ue_TimersAndConstants_t310[CC_id];
(*sib2)->ue_TimersAndConstants.n310
= configuration->ue_TimersAndConstants_n310[0];
= configuration->ue_TimersAndConstants_n310[CC_id];
(*sib2)->ue_TimersAndConstants.t311
= configuration->ue_TimersAndConstants_t311[0];
= configuration->ue_TimersAndConstants_t311[CC_id];
(*sib2)->ue_TimersAndConstants.n311
= configuration->ue_TimersAndConstants_n311[0];
= configuration->ue_TimersAndConstants_n311[CC_id];
#else
(*sib2)->radioResourceConfigCommon.rach_ConfigCommon.preambleInfo.numberOfRA_Preambles=RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n64;
......
......@@ -74,7 +74,8 @@ uint8_t get_adjacent_cell_mod_id(uint16_t phyCellId);
@param sib1 Pointer to asn1c C representation of SIB1
@return size of encoded bit stream in bytes*/
uint8_t do_SIB1(uint8_t Mod_id, LTE_DL_FRAME_PARMS *frame_parms, uint8_t *buffer,
uint8_t do_SIB1(uint8_t Mod_id, int CC_id,
LTE_DL_FRAME_PARMS *frame_parms, uint8_t *buffer,
BCCH_DL_SCH_Message_t *bcch_message,
SystemInformationBlockType1_t **sib1
#if defined(ENABLE_ITTI)
......@@ -94,6 +95,7 @@ uint8_t do_SIB1(uint8_t Mod_id, LTE_DL_FRAME_PARMS *frame_parms, uint8_t *buffer
@return size of encoded bit stream in bytes*/
uint8_t do_SIB23(uint8_t Mod_id,
int CC_id,
LTE_DL_FRAME_PARMS *frame_parms,
uint8_t *buffer,
BCCH_DL_SCH_Message_t *systemInformation,
......
......@@ -377,7 +377,7 @@ typedef struct rrc_eNB_ue_context_s {
struct eNB_RRC_UE_s ue_context;