Merge branch 'next' into novolk

This commit is contained in:
Ismael Gomez 2017-02-09 17:47:18 +01:00
commit a7345ae1c7
7 changed files with 55 additions and 25 deletions

View File

@ -106,6 +106,7 @@ typedef struct SRSLTE_API {
uint32_t Qm2;
srslte_ra_mcs_t mcs;
srslte_ra_mcs_t mcs2;
uint32_t nof_tb;
} srslte_ra_dl_grant_t;
/** Unpacked DCI message for DL grant */
@ -134,7 +135,7 @@ typedef struct SRSLTE_API {
uint8_t tpc_pucch;
uint32_t nof_tb;
bool tb_en[2];
bool dci_is_1a;
bool dci_is_1c;

View File

@ -40,7 +40,7 @@
#define TB_ITER 3
#define DEFAULT_GAIN 16
#define DEFAULT_GAIN 32
//#undef LV_HAVE_SSE
@ -99,8 +99,8 @@ int decode37_sse(void *o, uint8_t *symbols, uint8_t *data, uint32_t frame_length
chainback_viterbi37_sse(q->ptr, q->tmp, TB_ITER*frame_length, best_state);
memcpy(data, &q->tmp[((int) (TB_ITER/2))*frame_length], frame_length*sizeof(uint8_t));
} else {
update_viterbi37_blk_sse(q->ptr, symbols, frame_length+q->K-1, &best_state);
chainback_viterbi37_sse(q->ptr, data, frame_length, best_state);
update_viterbi37_blk_sse(q->ptr, symbols, frame_length+q->K-1, NULL);
chainback_viterbi37_sse(q->ptr, data, frame_length, 0);
}
return q->framebits;

View File

@ -625,7 +625,8 @@ int dci_format1_unpack(srslte_dci_msg_t *msg, srslte_ra_dl_dci_t *data, uint32_t
// TPC not implemented
data->nof_tb = 1;
data->tb_en[0] = true;
data->tb_en[1] = false;
return SRSLTE_SUCCESS;
}
@ -814,7 +815,8 @@ int dci_format1As_unpack(srslte_dci_msg_t *msg, srslte_ra_dl_dci_t *data, uint32
data->type2_alloc.n_prb1a = *y++; // LSB indicates N_prb_1a for TBS
}
data->nof_tb = 1;
data->tb_en[0] = true;
data->tb_en[1] = false;
return SRSLTE_SUCCESS;
}
@ -860,7 +862,8 @@ int dci_format1B_unpack(srslte_dci_msg_t *msg, srslte_ra_dl_dci_t *data, uint32_
data->pinfo = srslte_bit_pack(&y, tpmi_bits(nof_ports));
data->pconf = *y++ ? true : false;
data->nof_tb = 1;
data->tb_en[0] = true;
data->tb_en[1] = false;
return SRSLTE_SUCCESS;
}
@ -955,7 +958,8 @@ int dci_format1Cs_unpack(srslte_dci_msg_t *msg, srslte_ra_dl_dci_t *data, uint32
msg->nof_bits = (y - msg->data);
data->nof_tb = 1;
data->tb_en[0] = true;
data->tb_en[1] = false;
return SRSLTE_SUCCESS;
}
@ -1001,7 +1005,8 @@ int dci_format1D_unpack(srslte_dci_msg_t *msg, srslte_ra_dl_dci_t *data, uint32_
data->pinfo = srslte_bit_pack(&y, tpmi_bits(nof_ports));
data->power_offset = *y++ ? true : false;
data->nof_tb = 1;
data->tb_en[0] = true;
data->tb_en[1] = false;
return SRSLTE_SUCCESS;
}
@ -1051,16 +1056,23 @@ int dci_format2AB_unpack(srslte_dci_msg_t *msg, srslte_ra_dl_dci_t *data, uint32
/* unpack MCS according to 7.1.7 of 36.213 */
data->mcs_idx = srslte_bit_pack(&y, 5);
data->ndi = *y++ ? true : false;
// rv version
data->rv_idx = srslte_bit_pack(&y, 2);
if (data->mcs_idx == 0 && data->rv_idx == 1) {
data->tb_en[0] = false;
} else {
data->tb_en[0] = true;
}
// same for tb1
data->mcs_idx_1 = srslte_bit_pack(&y, 5);
data->ndi_1 = *y++ ? true : false;
data->rv_idx_1 = srslte_bit_pack(&y, 2);
if (data->mcs_idx_1 == 0 && data->rv_idx_1 == 1) {
data->tb_en[1] = false;
} else {
data->tb_en[1] = true;
}
// Precoding information
if (msg->format == SRSLTE_DCI_FORMAT2A) {
@ -1069,7 +1081,6 @@ int dci_format2AB_unpack(srslte_dci_msg_t *msg, srslte_ra_dl_dci_t *data, uint32
data->pinfo = srslte_bit_pack(&y, precoding_bits_f2a(nof_ports));
}
data->nof_tb = 2;
return SRSLTE_SUCCESS;
}

View File

@ -172,6 +172,7 @@ int srslte_ra_ul_dci_to_grant_prb_allocation(srslte_ra_ul_dci_t *dci, srslte_ra_
srslte_mod_t last_mod[8];
uint32_t last_ul_tbs_idx[8];
uint32_t last_dl_tbs[8];
uint32_t last_dl_tbs2[8];
static int ul_dci_to_grant_mcs(srslte_ra_ul_dci_t *dci, srslte_ra_ul_grant_t *grant, uint32_t harq_pid) {
int tbs = -1;
@ -459,21 +460,38 @@ static int dl_dci_to_grant_mcs(srslte_ra_dl_dci_t *dci, srslte_ra_dl_grant_t *gr
grant->mcs.tbs = (uint32_t) tbs;
} else {
n_prb = grant->nof_prb;
grant->mcs.idx = dci->mcs_idx;
tbs = dl_fill_ra_mcs(&grant->mcs, n_prb);
if (tbs) {
last_dl_tbs[dci->harq_process%8] = tbs;
grant->nof_tb = 0;
if (dci->tb_en[0]) {
grant->mcs.idx = dci->mcs_idx;
tbs = dl_fill_ra_mcs(&grant->mcs, n_prb);
if (tbs) {
last_dl_tbs[dci->harq_process%8] = tbs;
} else {
// For mcs>=29, set last TBS received for this PID
grant->mcs.tbs = last_dl_tbs[dci->harq_process%8];
}
grant->nof_tb++;
} else {
// For mcs>=29, set last TBS received for this PID
grant->mcs.tbs = last_dl_tbs[dci->harq_process%8];
grant->mcs.tbs = 0;
}
if (dci->nof_tb == 2) {
if (dci->tb_en[1]) {
grant->mcs2.idx = dci->mcs_idx_1;
tbs = dl_fill_ra_mcs(&grant->mcs2, n_prb);
if (tbs) {
last_dl_tbs2[dci->harq_process%8] = tbs;
} else {
// For mcs>=29, set last TBS received for this PID
grant->mcs2.tbs = last_dl_tbs2[dci->harq_process%8];
}
grant->nof_tb++;
} else {
grant->mcs2.tbs = 0;
}
}
grant->Qm = srslte_mod_bits_x_symbol(grant->mcs.mod);
if (dci->nof_tb == 2) {
if (dci->tb_en[0]) {
grant->Qm = srslte_mod_bits_x_symbol(grant->mcs.mod);
}
if (dci->tb_en[1]) {
grant->Qm2 = srslte_mod_bits_x_symbol(grant->mcs2.mod);
}
if (tbs < 0) {

View File

@ -137,6 +137,7 @@ int main(int argc, char **argv) {
dci.mcs_idx = mcs;
dci.rv_idx = rv_idx;
dci.type0_alloc.rbg_bitmask = 0xffffffff;
dci.tb_en[0] = true;
if (srslte_ra_dl_dci_to_grant(&dci, cell.nof_prb, rnti, &grant)) {
fprintf(stderr, "Error computing resource allocation\n");
return ret;

View File

@ -33,7 +33,6 @@ if(RF_FOUND)
list(APPEND SOURCES_RF rf_blade_imp.c)
endif (BLADERF_FOUND)
add_compile_options(-march=native -mfpmath=sse -mno-avx -msse4.1)
add_library(srslte_rf SHARED ${SOURCES_RF})
@ -47,4 +46,4 @@ if(RF_FOUND)
INSTALL(TARGETS srslte_rf DESTINATION ${LIBRARY_DIR})
SRSLTE_SET_PIC(srslte_rf)
endif(RF_FOUND)
endif(RF_FOUND)

View File

@ -376,7 +376,7 @@ static int dci_blind_search(srslte_ue_dl_t *q, dci_blind_search_t *search_space,
int srslte_ue_dl_find_ul_dci(srslte_ue_dl_t *q, uint32_t cfi, uint32_t sf_idx, uint16_t rnti, srslte_dci_msg_t *dci_msg)
{
if (rnti && cfi > 1 && cfi < 4) {
if (rnti && cfi > 0 && cfi < 4) {
/* Do not search if an UL DCI is already pending */
if (q->pending_ul_dci_rnti == rnti) {
q->pending_ul_dci_rnti = 0;