Merge remote-tracking branch 'origin/develop-nr' into nr-rrc-additions
This commit is contained in:
@@ -79,8 +79,13 @@ typedef struct {
|
||||
uint8_t redundancy_version;
|
||||
uint8_t harq_process;
|
||||
uint8_t tpc_command;
|
||||
|
||||
uint8_t padding_bits;
|
||||
uint8_t ul_sul_ind;
|
||||
uint8_t ul_sch_indicator;
|
||||
|
||||
uint8_t random_access_preamble_index;
|
||||
uint8_t ss_pbch_index;
|
||||
uint8_t prach_mask_index;
|
||||
|
||||
uint8_t carrier_indicator;
|
||||
uint8_t bwp_indndicator;
|
||||
@@ -100,6 +105,9 @@ typedef struct {
|
||||
uint8_t pdsch_to_harq_feedback_timing_indicator;
|
||||
|
||||
uint8_t short_messages_indicator;
|
||||
uint8_t short_messages;
|
||||
uint8_t tb_scaling;
|
||||
|
||||
|
||||
uint8_t prb_bundling_size_indicator; // 38.214 chapter 5.1.2.3
|
||||
uint8_t rate_matching_indicator;
|
||||
@@ -113,11 +121,12 @@ typedef struct {
|
||||
uint8_t preemption_indication_count;
|
||||
uint8_t *preemption_indications; // 38.213 chapter 11.2
|
||||
|
||||
uint8_t block_number_count; // for F22 and F23
|
||||
uint8_t *block_numbers; // for F22 and F23
|
||||
uint8_t closed_loop_indicator;
|
||||
|
||||
uint8_t tpc_command_count;
|
||||
uint8_t *tpc_command_numbers;
|
||||
|
||||
uint8_t block_number_count;
|
||||
uint8_t *block_numbers;
|
||||
uint8_t dci2_3_srs_request; // 38.212 table 7.3.1.1.2-5
|
||||
uint8_t dci2_3_tpc_command;
|
||||
|
||||
|
||||
@@ -183,7 +183,7 @@ uint8_t nr_pbch_payload_interleaving_pattern[32] = {16, 23, 18, 17, 8, 30, 10, 6
|
||||
uint8_t nr_pbch_payload_interleaver(uint8_t i) {
|
||||
uint8_t j_sfn=0, j_hrf=10, j_ssb=11, j_other=14;
|
||||
|
||||
if (24<=i && i<=27) //Sfn bits
|
||||
if (18<=i && i<=27) //Sfn bits
|
||||
return nr_pbch_payload_interleaving_pattern[j_sfn + i -24];
|
||||
else if (i==28) // Hrf bit
|
||||
return nr_pbch_payload_interleaving_pattern[j_hrf];
|
||||
@@ -206,7 +206,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
|
||||
NR_DL_FRAME_PARMS *frame_parms)
|
||||
{
|
||||
|
||||
int k,l,m;
|
||||
int j,k,l,m;
|
||||
int16_t a;
|
||||
int16_t mod_pbch_e[NR_POLAR_PBCH_E];
|
||||
uint8_t idx=0;
|
||||
@@ -225,7 +225,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
|
||||
#ifdef DEBUG_PBCH_ENCODING
|
||||
printf("Byte endian fix:\n");
|
||||
for (int i=0; i<4; i++)
|
||||
printf("pbch_a[%d]: 0x%04x\n", i, pbch->pbch_a[i]);
|
||||
printf("pbch_a[%d]: 0x%02x\n", i, pbch->pbch_a[i]);
|
||||
#endif
|
||||
|
||||
// Extra byte generation
|
||||
@@ -242,18 +242,24 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
|
||||
#ifdef DEBUG_PBCH_ENCODING
|
||||
printf("Extra byte:\n");
|
||||
for (int i=0; i<4; i++)
|
||||
printf("pbch_a[%d]: 0x%04x\n", i, pbch->pbch_a[i]);
|
||||
printf("pbch_a[%d]: 0x%02x\n", i, pbch->pbch_a[i]);
|
||||
#endif
|
||||
|
||||
// Payload interleaving
|
||||
uint32_t* input = (uint32_t*)pbch->pbch_a;
|
||||
uint32_t* output = (uint32_t*)pbch->pbch_a_interleaved;
|
||||
for (int i=0; i<32; i++)
|
||||
(*output) |= (((*input)>>i)&1)<<(nr_pbch_payload_interleaver(i));
|
||||
uint8_t *in = &pbch->pbch_a[3];
|
||||
uint8_t *out = &pbch->pbch_a_interleaved[3];
|
||||
for (int i=0; i<32; i++) {
|
||||
j = i&7;
|
||||
if (!j) {
|
||||
in--;
|
||||
out--;
|
||||
}
|
||||
(*out) |= (((*in)>>j)&1)<<((nr_pbch_payload_interleaver(i))&7);
|
||||
}
|
||||
#ifdef DEBUG_PBCH_ENCODING
|
||||
printf("Interleaving:\n");
|
||||
for (int i=0; i<4; i++)
|
||||
printf("pbch_a_interleaved[%d]: 0x%04x\n", i, pbch->pbch_a_interleaved[i]);
|
||||
printf("pbch_a_interleaved[%d]: 0x%02x\n", i, pbch->pbch_a_interleaved[i]);
|
||||
#endif
|
||||
|
||||
// Scrambling
|
||||
@@ -263,7 +269,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
|
||||
#ifdef DEBUG_PBCH_ENCODING
|
||||
printf("Payload scrambling:\n");
|
||||
for (int i=0; i<4; i++)
|
||||
printf("pbch_a_prime[%d]: 0x%04x\n", i, pbch->pbch_a_prime[i]);
|
||||
printf("pbch_a_prime[%d]: 0x%02x\n", i, pbch->pbch_a_prime[i]);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -272,7 +278,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
|
||||
#ifdef DEBUG_PBCH_ENCODING
|
||||
printf("Channel coding:\n");
|
||||
for (int i=0; i<NR_POLAR_PBCH_E>>3; i++)
|
||||
printf("pbch_e[%d]: 0x%04x\t", i, pbch->pbch_e[i]);
|
||||
printf("pbch_e[%d]: 0x%02x\t", i, pbch->pbch_e[i]);
|
||||
printf("\n");
|
||||
#endif
|
||||
|
||||
@@ -283,7 +289,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
|
||||
#ifdef DEBUG_PBCH_ENCODING
|
||||
printf("Scrambling:\n");
|
||||
for (int i=0; i<NR_POLAR_PBCH_E>>3; i++)
|
||||
printf("pbch_e[%d]: 0x%04x\t", i, pbch->pbch_e[i]);
|
||||
printf("pbch_e[%d]: 0x%02x\t", i, pbch->pbch_e[i]);
|
||||
printf("\n");
|
||||
#endif
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#define __PHY_EXTERN_UE__H__
|
||||
|
||||
#include "PHY/defs_nr_UE.h"
|
||||
#include "common/ran_context.h"
|
||||
//#include "common/ran_context.h"
|
||||
|
||||
extern char* namepointer_chMag ;
|
||||
extern char* namepointer_log2;
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
#endif
|
||||
|
||||
#include "LAYER2/NR_MAC_UE/extern.h"
|
||||
#include "LAYER2/NR_MAC_UE/defs.h"
|
||||
#include "LAYER2/NR_MAC_UE/mac_defs.h"
|
||||
#include "UTIL/LOG/log.h"
|
||||
|
||||
#ifdef EMOS
|
||||
|
||||
@@ -34,8 +34,8 @@
|
||||
|
||||
/*@}*/
|
||||
|
||||
#ifndef __LAYER2_MAC_DEFS_H__
|
||||
#define __LAYER2_MAC_DEFS_H__
|
||||
#ifndef __LAYER2_NR_UE_MAC_DEFS_H__
|
||||
#define __LAYER2_NR_UE_MAC_DEFS_H__
|
||||
|
||||
|
||||
|
||||
@@ -43,40 +43,6 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "COMMON/platform_constants.h"
|
||||
#include "BCCH-BCH-Message.h"
|
||||
#include "RadioResourceConfigCommon.h"
|
||||
#include "RadioResourceConfigCommonSIB.h"
|
||||
#include "RadioResourceConfigDedicated.h"
|
||||
#include "MeasGapConfig.h"
|
||||
#include "SchedulingInfoList.h"
|
||||
#include "TDD-Config.h"
|
||||
#include "RACH-ConfigCommon.h"
|
||||
#include "MeasObjectToAddModList.h"
|
||||
#include "MobilityControlInfo.h"
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
#include "MBSFN-AreaInfoList-r9.h"
|
||||
#include "MBSFN-SubframeConfigList.h"
|
||||
#include "PMCH-InfoList-r9.h"
|
||||
#include "SCellToAddMod-r10.h"
|
||||
#endif
|
||||
#ifdef Rel14
|
||||
#include "SystemInformationBlockType1-v1310-IEs.h"
|
||||
#endif
|
||||
|
||||
#include "nfapi_interface.h"
|
||||
#include "PHY_INTERFACE/IF_Module.h"
|
||||
|
||||
#include "PHY/TOOLS/time_meas.h"
|
||||
|
||||
#include "PHY/defs_common.h" // for PRACH_RESOURCES_t
|
||||
|
||||
#include "targets/ARCH/COMMON/common_lib.h"
|
||||
|
||||
//solve implicit declaration
|
||||
#include "PHY/LTE_ESTIMATION/lte_estimation.h"
|
||||
#include "PHY/LTE_TRANSPORT/transport_proto.h"
|
||||
#include "PHY/LTE_TRANSPORT/transport_common_proto.h"
|
||||
|
||||
/** @defgroup _mac MAC
|
||||
* @ingroup _oai2
|
||||
@@ -89,4 +55,24 @@
|
||||
/*!\brief Values of PCCH logical channel (fake) */
|
||||
#define NR_BCCH_BCH 5 // MIB
|
||||
/*@}*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*!\brief UE layer 2 status */
|
||||
typedef enum {
|
||||
CONNECTION_OK = 0,
|
||||
CONNECTION_LOST,
|
||||
PHY_RESYNCH,
|
||||
PHY_HO_PRACH
|
||||
} UE_L2_STATE_t;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /*__LAYER2_MAC_DEFS_H__ */
|
||||
|
||||
@@ -1,57 +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 LAYER2/MAC/proto.h
|
||||
* \brief MAC functions prototypes for eNB and UE
|
||||
* \author Navid Nikaein and Raymond Knopp
|
||||
* \date 2010 - 2014
|
||||
* \email navid.nikaein@eurecom.fr
|
||||
* \version 1.0
|
||||
*/
|
||||
#ifndef __LAYER2_MAC_PROTO_H__
|
||||
#define __LAYER2_MAC_PROTO_H__
|
||||
|
||||
#include "mac_defs.h"
|
||||
|
||||
/**\brief decode mib pdu in NR_UE, from if_module ul_ind with P7 tx_ind message
|
||||
\param module_id module id
|
||||
\param CC_id component carrier id
|
||||
\param gNB_index gNB index
|
||||
\param extra_bits extra bits for frame calculation
|
||||
\param ssb_index SSB index for frame calculation
|
||||
\param frameP pointer to frame for revising after frame calculation
|
||||
\param pduP pointer to pdu
|
||||
\param pdu_length length of pdu*/
|
||||
void nr_ue_decode_mib(module_id_t module_id, int CC_id, uint8_t gNB_index, uint8_t extra_bits, uint32_t ssb_index, uint32_t *frameP, void *pduP, uint16_t pdu_len);
|
||||
|
||||
|
||||
/**\brief primitive from RRC layer to MAC layer for configuration L1/L2, now supported 4 rrc messages: MIB, cell_group_config for MAC/PHY, spcell_config(serving cell config)
|
||||
\param module_id module id
|
||||
\param CC_id component carrier id
|
||||
\param gNB_index gNB index
|
||||
\param mibP pointer to RRC message MIB
|
||||
\param mac_cell_group_configP pointer to RRC message MAC-related in cell group config
|
||||
\param phy_cell_group_configP pointer to RRC message PHY-related in cell group config
|
||||
\param spcell_configP pointer to RRC message serving cell config*/
|
||||
int nr_rrc_mac_config_req_ue( module_id_t module_id, int CC_id, uint8_t gNB_index, NR_MIB_t *mibP, NR_MAC_CellGroupConfig_t *mac_cell_group_configP, NR_PhysicalCellGroupConfig_t *phy_cell_group_configP, NR_SpCellConfig_t *spcell_configP ){
|
||||
|
||||
#endif
|
||||
/** @}*/
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
*/
|
||||
|
||||
#include "defs.h"
|
||||
#include "mac_defs.h"
|
||||
|
||||
NR_UE_MAC_INST_t UE_mac_inst; //[NB_MODULE_MAX];
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
#ifndef __LAYER2_MAC_PROTO_H__
|
||||
#define __LAYER2_MAC_PROTO_H__
|
||||
|
||||
#include "defs.h"
|
||||
#include "mac_defs.h"
|
||||
|
||||
/**\brief decode mib pdu in NR_UE, from if_module ul_ind with P7 tx_ind message
|
||||
\param module_id module id
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include "rrc_proto.h"
|
||||
|
||||
int nr_l3_init_ue(void){
|
||||
LOG_I(RRC, "[MAIN] NR UE MAC initialization...\n");
|
||||
//LOG_I(RRC, "[MAIN] NR UE MAC initialization...\n");
|
||||
|
||||
openair_rrc_top_init_ue_nr();
|
||||
|
||||
|
||||
+15
-21
@@ -71,21 +71,21 @@ int8_t nr_rrc_ue_process_rrcReconfiguration(NR_RRCReconfiguration_t *rrcReconfig
|
||||
|
||||
switch(rrcReconfiguration->criticalExtensions.present){
|
||||
case NR_RRCReconfiguration__criticalExtensions_PR_rrcReconfiguration:
|
||||
if(rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration.radioBearerConfig != NULL){
|
||||
if(rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration->radioBearerConfig != NULL){
|
||||
if(NR_UE_rrc_inst->radio_bearer_config == NULL){
|
||||
NR_UE_rrc_inst->radio_bearer_config = rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration.radioBearerConfig;
|
||||
NR_UE_rrc_inst->radio_bearer_config = rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration->radioBearerConfig;
|
||||
}else{
|
||||
nr_rrc_ue_process_radio_bearer_config(rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration.radioBearerConfig);
|
||||
nr_rrc_ue_process_radio_bearer_config(rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration->radioBearerConfig);
|
||||
}
|
||||
}
|
||||
|
||||
if(rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration.secondaryCellGroup != NULL){
|
||||
if(rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration->secondaryCellGroup != NULL){
|
||||
NR_CellGroupConfig_t *cellGroupConfig = NULL;
|
||||
uper_decode(NULL,
|
||||
&asn_DEF_NR_CellGroupConfig, //might be added prefix later
|
||||
(void **)&cellGroupConfig,
|
||||
(uint8_t *)rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration.secondaryCellGroup->buf,
|
||||
rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration.secondaryCellGroup->size, 0, 0);
|
||||
(uint8_t *)rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration->secondaryCellGroup->buf,
|
||||
rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration->secondaryCellGroup->size, 0, 0);
|
||||
|
||||
if(NR_UE_rrc_inst->cell_group_config == NULL){
|
||||
// first time receive the configuration, just use the memory allocated from uper_decoder. TODO this is not good implementation, need to maintain RRC_INST own structure every time.
|
||||
@@ -100,21 +100,21 @@ int8_t nr_rrc_ue_process_rrcReconfiguration(NR_RRCReconfiguration_t *rrcReconfig
|
||||
|
||||
}
|
||||
|
||||
if(rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration.measConfig != NULL){
|
||||
if(rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration->measConfig != NULL){
|
||||
if(NR_UE_rrc_inst->meas_config == NULL){
|
||||
NR_UE_rrc_inst->meas_config = rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration.measConfig;
|
||||
NR_UE_rrc_inst->meas_config = rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration->measConfig;
|
||||
}else{
|
||||
// if some element need to be updated
|
||||
nr_rrc_ue_process_meas_config(rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration.measConfig);
|
||||
nr_rrc_ue_process_meas_config(rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration->measConfig);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration.lateNonCriticalExtension != NULL){
|
||||
if(rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration->lateNonCriticalExtension != NULL){
|
||||
// unuse now
|
||||
}
|
||||
|
||||
if(rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration.nonCriticalExtension != NULL){
|
||||
if(rrcReconfiguration->criticalExtensions.choice.rrcReconfiguration->nonCriticalExtension != NULL){
|
||||
// unuse now
|
||||
}
|
||||
break;
|
||||
@@ -298,10 +298,7 @@ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message(
|
||||
buffer_len );
|
||||
|
||||
if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) {
|
||||
LOG_E( RRC, "[UE %"PRIu8"] Failed to decode BCCH_DLSCH_MESSAGE (%zu bits)\n",
|
||||
module_id,
|
||||
dec_rval.consumed );
|
||||
|
||||
|
||||
for (i=0; i<buffer_len; i++)
|
||||
printf("%02x ",bufferP[i]);
|
||||
|
||||
@@ -312,7 +309,7 @@ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message(
|
||||
}
|
||||
|
||||
// link to rrc instance
|
||||
mib = &bcch_message->message.choice.mib;
|
||||
mib = bcch_message->message.choice.mib;
|
||||
//memcpy( (void *)mib,
|
||||
// (void *)&bcch_message->message.choice.mib,
|
||||
// sizeof(NR_MIB_t) );
|
||||
@@ -340,9 +337,6 @@ int8_t nr_rrc_ue_decode_NR_DL_DCCH_Message(
|
||||
buffer_len, 0, 0);
|
||||
|
||||
if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) {
|
||||
LOG_E( RRC, "[UE %"PRIu8"] Failed to decode NR_DL_DCCH_Message (%zu bits)\n",
|
||||
module_id,
|
||||
dec_rval.consumed );
|
||||
|
||||
for (i=0; i<buffer_len; i++)
|
||||
printf("%02x ",bufferP[i]);
|
||||
@@ -357,9 +351,9 @@ int8_t nr_rrc_ue_decode_NR_DL_DCCH_Message(
|
||||
switch(nr_dl_dcch_msg->message.present){
|
||||
case NR_DL_DCCH_MessageType_PR_c1:
|
||||
|
||||
switch(nr_dl_dcch_msg->message.choice.c1.present){
|
||||
switch(nr_dl_dcch_msg->message.choice.c1->present){
|
||||
case NR_DL_DCCH_MessageType__c1_PR_rrcReconfiguration:
|
||||
nr_rrc_ue_process_rrcReconfiguration(&nr_dl_dcch_msg->message.choice.c1.choice.rrcReconfiguration);
|
||||
nr_rrc_ue_process_rrcReconfiguration(nr_dl_dcch_msg->message.choice.c1->choice.rrcReconfiguration);
|
||||
break;
|
||||
|
||||
case NR_DL_DCCH_MessageType__c1_PR_NOTHING:
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
#ifndef _RRC_LIST_H_
|
||||
#define _RRC_LIST_H_
|
||||
|
||||
|
||||
#define RRC_LIST_TYPE(T, N) \
|
||||
struct { \
|
||||
T *entries[N]; \
|
||||
int next[N]; \
|
||||
int prev[N]; \
|
||||
int start; \
|
||||
int count; \
|
||||
}
|
||||
|
||||
// initial function for the certain list, storage number of entry, initial pointer and corresponding links
|
||||
#define RRC_LIST_INIT(list, c) \
|
||||
do { \
|
||||
int iterator; \
|
||||
(list).count = (c); \
|
||||
for(iterator=0; iterator<c; ++iterator){ \
|
||||
(list).entries[iterator] = NULL; \
|
||||
(list).next[iterator] = -1; \
|
||||
(list).prev[iterator] = -1; \
|
||||
(list).start = -1; \
|
||||
} \
|
||||
}while(0)
|
||||
|
||||
|
||||
// check the entry by id first then update or create new entry.
|
||||
#define RRC_LIST_MOD_ADD(list, new, id_name) \
|
||||
do { \
|
||||
int iterator; \
|
||||
for(iterator=(list).start; iterator!=-1; iterator=(list).next[iterator]){ \
|
||||
if((new)->id_name == (list).entries[iterator]->id_name){ \
|
||||
(list).entries[iterator] = (new); \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
if(iterator==-1){ \
|
||||
for(iterator=0; iterator<(list).count; ++iterator){ \
|
||||
if((list).entries[iterator] == NULL){ \
|
||||
(list).next[iterator] = (list).start; \
|
||||
(list).prev[iterator] = -1; \
|
||||
if((list).start != -1){ \
|
||||
(list).prev[list.start] = iterator; \
|
||||
} \
|
||||
(list).start = iterator; \
|
||||
(list).entries[iterator] = (new); \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
}while(0)
|
||||
|
||||
// search entries by id, unlink from the list and output free pointer for upper function to release memory
|
||||
#define RRC_LIST_MOD_REL(list, id_name, id, free) \
|
||||
do{ \
|
||||
int iterator; \
|
||||
for(iterator=(list).start; iterator!=-1; iterator=(list).next[iterator]){ \
|
||||
if(id == (list).entries[iterator]->id_name){ \
|
||||
if((list).prev[iterator] == -1){ \
|
||||
(list).start = (list).next[iterator]; \
|
||||
}else{ \
|
||||
(list).next[(list).prev[iterator]] = (list).next[iterator]; \
|
||||
} \
|
||||
if((list).next[iterator] != -1){ \
|
||||
(list).prev[(list).next[iterator]] = (list).prev[iterator]; \
|
||||
} \
|
||||
(free) = (list).entries[iterator]; \
|
||||
(list).entries[iterator] = NULL; \
|
||||
break; \
|
||||
} \
|
||||
} \
|
||||
}while(0)
|
||||
|
||||
|
||||
#define RRC_LIST_FOREACH(list, i) \
|
||||
for((i)=(list).start; (i) != -1; (i)=(list).next[i])
|
||||
|
||||
#define RRC_LIST_ENTRY(list, i) \
|
||||
list.entries[i]
|
||||
|
||||
#endif
|
||||
@@ -33,16 +33,16 @@
|
||||
|
||||
#include "rt_wrapper.h"
|
||||
|
||||
#include "LAYER2/MAC/mac.h"
|
||||
#include "RRC/LTE/rrc_extern.h"
|
||||
#include "LAYER2/NR_MAC_UE/mac.h"
|
||||
//#include "RRC/LTE/rrc_extern.h"
|
||||
#include "PHY_INTERFACE/phy_interface_extern.h"
|
||||
|
||||
#undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all
|
||||
//#undef FRAME_LENGTH_COMPLEX_SAMPLES //there are two conflicting definitions, so we better make sure we don't use it at all
|
||||
|
||||
#include "PHY/phy_extern_nr_ue.h"
|
||||
#include "LAYER2/MAC/mac_extern.h"
|
||||
#include "LAYER2/MAC/mac_proto.h"
|
||||
//#include "LAYER2/NR_MAC_UE/extern.h"
|
||||
#include "LAYER2/NR_MAC_UE/proto.h"
|
||||
|
||||
#include "SCHED_NR/extern.h"
|
||||
//#ifndef NO_RAT_NR
|
||||
@@ -734,7 +734,7 @@ void *UE_thread(void *arg) {
|
||||
init_UE_threads(UE);
|
||||
|
||||
#ifdef NAS_UE
|
||||
MessageDef *message_p;
|
||||
//MessageDef *message_p;
|
||||
//message_p = itti_alloc_new_message(TASK_NAS_UE, INITIALIZE_MESSAGE);
|
||||
//itti_send_msg_to_task (TASK_NAS_UE, UE->Mod_id + NB_eNB_INST, message_p);
|
||||
#endif
|
||||
@@ -1037,6 +1037,7 @@ void init_UE_threads(PHY_VARS_NR_UE *UE) {
|
||||
|
||||
|
||||
#ifdef OPENAIR2
|
||||
/*
|
||||
void fill_ue_band_info(void) {
|
||||
|
||||
UE_EUTRA_Capability_t *UE_EUTRA_Capability = UE_rrc_inst[0].UECap->UE_EUTRA_Capability;
|
||||
@@ -1063,7 +1064,7 @@ void fill_ue_band_info(void) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
#endif
|
||||
|
||||
int setup_ue_buffers(PHY_VARS_NR_UE **phy_vars_ue, openair0_config_t *openair0_cfg) {
|
||||
|
||||
Reference in New Issue
Block a user