Merge branch 'BSR_fixes_fabrice' into 'develop1B'
Bsr fixes fabrice Merge feature BSR stabilization to develop1B See merge request !15
This commit is contained in:
@@ -70,6 +70,9 @@ void ue_mac_reset(module_id_t module_idP,uint8_t eNB_index)
|
||||
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;
|
||||
|
||||
// stop ongoing RACH procedure
|
||||
|
||||
// discard explicitly signaled ra_PreambleIndex and ra_RACH_MaskIndex, if any
|
||||
@@ -178,8 +181,14 @@ rrc_mac_config_req(
|
||||
if (logicalChannelConfig->ul_SpecificParameters) {
|
||||
UE_mac_inst[Mod_idP].scheduling_info.bucket_size[logicalChannelIdentity]=logicalChannelConfig->ul_SpecificParameters->prioritisedBitRate *
|
||||
logicalChannelConfig->ul_SpecificParameters->bucketSizeDuration; // set the max bucket size
|
||||
UE_mac_inst[Mod_idP].scheduling_info.LCGID[logicalChannelIdentity]=*logicalChannelConfig->ul_SpecificParameters->logicalChannelGroup;
|
||||
LOG_D(MAC,"[CONFIG][UE %d] LCID %d is attached to the LCGID %d\n",Mod_idP,logicalChannelIdentity,*logicalChannelConfig->ul_SpecificParameters->logicalChannelGroup);
|
||||
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 %d is attached to the LCGID %d\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;
|
||||
} else {
|
||||
LOG_E(MAC,"[CONFIG][UE %d] LCID %d NULL ul_SpecificParameters\n",Mod_idP,logicalChannelIdentity);
|
||||
mac_xface->macphy_exit("NULL ul_SpecificParameters");
|
||||
@@ -225,12 +234,34 @@ rrc_mac_config_req(
|
||||
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 = (uint16_t) 0;
|
||||
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 = get_sf_periodicBSRTimer(UE_mac_inst[Mod_idP].scheduling_info.periodicBSR_Timer);
|
||||
UE_mac_inst[Mod_idP].scheduling_info.retxBSR_SF = get_sf_retxBSRTimer(UE_mac_inst[Mod_idP].scheduling_info.retxBSR_Timer);
|
||||
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;
|
||||
@@ -252,6 +283,7 @@ rrc_mac_config_req(
|
||||
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,
|
||||
|
||||
@@ -133,10 +133,18 @@
|
||||
/*!\brief maximum value for channel quality indicator */
|
||||
#define MAX_CQI_VALUE 15
|
||||
|
||||
/*!\brief value for indicating BSR Timer is not running */
|
||||
#define MAC_UE_BSR_TIMER_NOT_RUNNING (0xFFFF)
|
||||
|
||||
#define LCID_EMPTY 0
|
||||
#define LCID_NOT_EMPTY 1
|
||||
|
||||
/*!\brief minimum RLC PDU size to be transmitted = min RLC Status PDU or RLC UM PDU SN 5 bits */
|
||||
#define MIN_RLC_PDU_SIZE (2)
|
||||
|
||||
/*!\brief minimum MAC data needed for transmitting 1 min RLC PDU size + 1 byte MAC subHeader */
|
||||
#define MIN_MAC_HDR_RLC_SIZE (1 + MIN_RLC_PDU_SIZE)
|
||||
|
||||
/*
|
||||
* eNB part
|
||||
*/
|
||||
@@ -222,11 +230,10 @@ typedef struct {
|
||||
typedef BSR_SHORT BSR_TRUNCATED;
|
||||
/*!\brief mac control element: long buffer status report for all logical channel group ID*/
|
||||
typedef struct {
|
||||
uint32_t Buffer_size3:6;
|
||||
uint32_t Buffer_size2:6;
|
||||
uint32_t Buffer_size1:6;
|
||||
uint32_t Buffer_size0:6;
|
||||
uint32_t padding:8;
|
||||
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))
|
||||
@@ -336,6 +343,12 @@ typedef struct {
|
||||
#define SHORT_BSR 29
|
||||
/*!\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 */
|
||||
|
||||
|
||||
/*! \brief Downlink SCH PDU Structure */
|
||||
typedef struct {
|
||||
@@ -945,8 +958,12 @@ typedef enum {
|
||||
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 lcid
|
||||
uint16_t BSR_bytes[MAX_NUM_LCGID];
|
||||
/// 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
|
||||
@@ -958,11 +975,11 @@ typedef struct {
|
||||
/// retxBSR-Timer, default value is sf2560
|
||||
uint16_t retxBSR_Timer;
|
||||
/// retxBSR_SF, number of subframe before triggering a regular BSR
|
||||
int16_t retxBSR_SF;
|
||||
uint16_t retxBSR_SF;
|
||||
/// periodicBSR-Timer, default to infinity
|
||||
uint16_t periodicBSR_Timer;
|
||||
/// periodicBSR_SF, number of subframe before triggering a periodic BSR
|
||||
int16_t periodicBSR_SF;
|
||||
uint16_t periodicBSR_SF;
|
||||
/// default value is 0: not configured
|
||||
uint16_t sr_ProhibitTimer;
|
||||
/// sr ProhibitTime running
|
||||
@@ -987,6 +1004,12 @@ typedef struct {
|
||||
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;
|
||||
|
||||
//Bj bucket usage per lcid
|
||||
int16_t Bj[MAX_NUM_LCID];
|
||||
// Bucket size per lcid
|
||||
@@ -1074,6 +1097,13 @@ typedef struct {
|
||||
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
|
||||
|
||||
@@ -46,6 +46,8 @@
|
||||
|
||||
extern const uint32_t BSR_TABLE[BSR_TABLE_SIZE];
|
||||
//extern uint32_t EBSR_Level[63];
|
||||
extern const uint32_t Extended_BSR_TABLE[BSR_TABLE_SIZE];
|
||||
//extern uint32_t Extended_BSR_TABLE[63]; ----currently not used
|
||||
|
||||
extern UE_MAC_INST *UE_mac_inst;
|
||||
extern eNB_MAC_INST *eNB_mac_inst;
|
||||
|
||||
@@ -538,21 +538,6 @@ UE_L2_STATE_t ue_scheduler(
|
||||
*/
|
||||
int cba_access(module_id_t module_idP,frame_t frameP,sub_frame_t subframe, uint8_t eNB_index,uint16_t buflen);
|
||||
|
||||
/*! \fn int get_bsr_lcgid (module_id_t module_idP);
|
||||
\brief determine the lcgid for the bsr
|
||||
\param[in] Mod_id instance of the UE
|
||||
\param[out] lcgid
|
||||
*/
|
||||
int get_bsr_lcgid (module_id_t module_idP);
|
||||
|
||||
/*! \fn uint8_t get_bsr_len (module_id_t module_idP,uint16_t bufflen);
|
||||
\brief determine whether the bsr is short or long assuming that the MAC pdu is built
|
||||
\param[in] Mod_id instance of the UE
|
||||
\param[in] bufflen size of phy transport block
|
||||
\param[out] bsr_len size of bsr control element
|
||||
*/
|
||||
uint8_t get_bsr_len (module_id_t module_idP, uint16_t buflen);
|
||||
|
||||
/*! \fn BSR_SHORT * get_bsr_short(module_id_t module_idP, uint8_t bsr_len)
|
||||
\brief get short bsr level
|
||||
\param[in] Mod_id instance of the UE
|
||||
@@ -569,22 +554,21 @@ BSR_SHORT *get_bsr_short(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, uint8_t lcid)
|
||||
/*! \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
|
||||
\param[in] lcid logical channel identifier
|
||||
*/
|
||||
boolean_t update_bsr(module_id_t module_idP, frame_t frameP, eNB_index_t eNB_index, uint8_t lcid, uint8_t lcgid);
|
||||
boolean_t update_bsr(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP,eNB_index_t eNB_index);
|
||||
|
||||
/*! \fn locate (int *table, int size, int value)
|
||||
/*! \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.
|
||||
\param[in] *table Pointer to BSR table
|
||||
\param[in] size Size of the table
|
||||
\param[in] value Value of the buffer
|
||||
\return the index in the BSR_LEVEL table
|
||||
*/
|
||||
uint8_t locate (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)
|
||||
|
||||
@@ -391,7 +391,7 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP,int CC_id,frame_t frameP,
|
||||
1); //post_padding
|
||||
return(&UE_mac_inst[module_idP].RA_prach_resources);
|
||||
|
||||
} else if (UE_mac_inst[module_idP].scheduling_info.BSR_bytes[DCCH] > 0) {
|
||||
} 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,ENB_FLAG_NO,MBMS_FLAG_NO,
|
||||
@@ -412,7 +412,12 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP,int CC_id,frame_t frameP,
|
||||
(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, eNB_indexP,DCCH,UE_mac_inst[module_idP].scheduling_info.LCGID[DCCH]);
|
||||
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;
|
||||
|
||||
+788
-349
File diff suppressed because it is too large
Load Diff
@@ -45,6 +45,15 @@ const uint32_t BSR_TABLE[BSR_TABLE_SIZE]= {0,10,12,14,17,19,22,26,31,36,42,49,57
|
||||
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};
|
||||
|
||||
//uint32_t EBSR_Level[63]={0,10,13,16,19,23,29,35,43,53,65,80,98,120,147,181};
|
||||
|
||||
|
||||
@@ -341,6 +341,7 @@ rlc_am_get_pdus (
|
||||
if (pdu) {
|
||||
list_add_tail_eurecom (pdu, &rlc_pP->pdus_to_mac_layer);
|
||||
rlc_pP->status_requested = 0;
|
||||
rlc_pP->status_buffer_occupancy = 0;
|
||||
rlc_am_start_timer_status_prohibit(ctxt_pP, rlc_pP);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -122,6 +122,8 @@ char smbv_ip[16];
|
||||
//#define K 2 /* averaging coefficient */
|
||||
//#define TARGET_SF_TIME_NS 1000000 /* 1ms = 1000000 ns */
|
||||
|
||||
uint8_t usim_test = 0;
|
||||
|
||||
frame_t frame = 0;
|
||||
char stats_buffer[16384];
|
||||
channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][MAX_NUM_CCs];
|
||||
|
||||
Reference in New Issue
Block a user