mirror of https://github.com/PentHertz/srsLTE.git
Fix memory alignment in PUCCH processing. Fixes #94
This commit is contained in:
parent
9ae21dfd5d
commit
79b0ca81d0
|
@ -57,8 +57,8 @@ typedef struct SRSLTE_API {
|
|||
} srslte_uci_cqi_pusch_t;
|
||||
|
||||
typedef struct SRSLTE_API {
|
||||
uint8_t cqi_table[16][32];
|
||||
int16_t cqi_table_s[16][32]; // aligned for simd
|
||||
uint8_t *cqi_table[16];
|
||||
int16_t *cqi_table_s[16];
|
||||
} srslte_uci_cqi_pucch_t;
|
||||
|
||||
typedef struct SRSLTE_API {
|
||||
|
@ -85,7 +85,9 @@ typedef struct {
|
|||
|
||||
SRSLTE_API void srslte_uci_cqi_pucch_init(srslte_uci_cqi_pucch_t *q);
|
||||
|
||||
SRSLTE_API int srslte_uci_encode_cqi_pucch(uint8_t *cqi_data,
|
||||
SRSLTE_API void srslte_uci_cqi_pucch_free(srslte_uci_cqi_pucch_t *q);
|
||||
|
||||
SRSLTE_API int srslte_uci_encode_cqi_pucch(uint8_t *cqi_data,
|
||||
uint32_t cqi_len,
|
||||
uint8_t b_bits[SRSLTE_UCI_CQI_CODED_PUCCH_B]);
|
||||
|
||||
|
|
|
@ -452,7 +452,17 @@ void srslte_pucch_free(srslte_pucch_t *q) {
|
|||
}
|
||||
free(q->users);
|
||||
}
|
||||
|
||||
srslte_uci_cqi_pucch_free(&q->cqi);
|
||||
if (q->z) {
|
||||
free(q->z);
|
||||
}
|
||||
if (q->z_tmp) {
|
||||
free(q->z_tmp);
|
||||
}
|
||||
if (q->ce) {
|
||||
free(q->ce);
|
||||
}
|
||||
|
||||
srslte_modem_table_free(&q->mod);
|
||||
bzero(q, sizeof(srslte_pucch_t));
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#include <stdbool.h>
|
||||
#include <assert.h>
|
||||
#include <math.h>
|
||||
#include <srslte/phy/phch/uci.h>
|
||||
|
||||
#include "srslte/phy/phch/uci.h"
|
||||
#include "srslte/phy/fec/cbsegm.h"
|
||||
|
@ -109,7 +110,9 @@ void srslte_uci_cqi_pucch_init(srslte_uci_cqi_pucch_t *q) {
|
|||
|
||||
uint32_t nwords = 16;
|
||||
for (uint32_t w=0;w<nwords;w++) {
|
||||
uint8_t *ptr = word;
|
||||
q->cqi_table[w] = srslte_vec_malloc(SRSLTE_UCI_CQI_CODED_PUCCH_B*sizeof(int8_t));
|
||||
q->cqi_table_s[w] = srslte_vec_malloc(SRSLTE_UCI_CQI_CODED_PUCCH_B*sizeof(int16_t));
|
||||
uint8_t *ptr = word;
|
||||
srslte_bit_unpack(w, &ptr, 4);
|
||||
srslte_uci_encode_cqi_pucch(word, 4, q->cqi_table[w]);
|
||||
for (int j=0;j<SRSLTE_UCI_CQI_CODED_PUCCH_B;j++) {
|
||||
|
@ -118,6 +121,18 @@ void srslte_uci_cqi_pucch_init(srslte_uci_cqi_pucch_t *q) {
|
|||
}
|
||||
}
|
||||
|
||||
void srslte_uci_cqi_pucch_free(srslte_uci_cqi_pucch_t *q) {
|
||||
uint32_t nwords = 16;
|
||||
for (uint32_t w=0;w<nwords;w++) {
|
||||
if (q->cqi_table[w]) {
|
||||
free(q->cqi_table[w]);
|
||||
}
|
||||
if (q->cqi_table_s[w]) {
|
||||
free(q->cqi_table_s[w]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Encode UCI CQI/PMI as described in 5.2.3.3 of 36.212
|
||||
*/
|
||||
int srslte_uci_encode_cqi_pucch(uint8_t *cqi_data, uint32_t cqi_len, uint8_t b_bits[SRSLTE_UCI_CQI_CODED_PUCCH_B])
|
||||
|
|
Loading…
Reference in New Issue