qcacmn: Move edge extrabins at the end of bin_pwr array

Move the left band and right band edge extra bins to
the end of the Spectral bin_pwr array.

CRs-Fixed: 3002177
Change-Id: Iea93879763a7e2c56cdb5f4d3d163e2d4b082b26
This commit is contained in:
Jhalak Naik
2021-08-09 10:22:24 +05:30
gecommit door Madan Koyyalamudi
bovenliggende 9165949820
commit e59d430af2
2 gewijzigde bestanden met toevoegingen van 94 en 20 verwijderingen

Bestand weergeven

@@ -102,6 +102,7 @@ target_if_spectral_fill_samp_msg(struct target_if_spectral *spectral,
uint16_t *binptr_16;
uint16_t pwr_16;
size_t pwr_count;
uint16_t num_edge_bins;
uint16_t idx;
uint16_t start_bin_index;
@@ -127,10 +128,7 @@ target_if_spectral_fill_samp_msg(struct target_if_spectral *spectral,
rb_edge_bins->start_bin_idx =
map_det_info->rb_extrabins_start_idx;
rb_edge_bins->num_bins = map_det_info->rb_extrabins_num;
if (lb_edge_bins->num_bins)
start_bin_index = lb_edge_bins->start_bin_idx;
else
start_bin_index = detector_info->start_bin_idx;
start_bin_index = detector_info->start_bin_idx;
detector_info->rssi = params->rssi;
@@ -155,10 +153,9 @@ target_if_spectral_fill_samp_msg(struct target_if_spectral *spectral,
bin_pwr_data = &params->bin_pwr_data
[map_det_info->src_start_bin_idx];
pwr_count = detector_info->end_bin_idx -
detector_info->start_bin_idx +
lb_edge_bins->num_bins +
rb_edge_bins->num_bins + 1;
spec_samp_msg->bin_pwr_count += pwr_count;
detector_info->start_bin_idx + 1;
num_edge_bins = lb_edge_bins->num_bins +
rb_edge_bins->num_bins;
/*
* To check whether FFT bin values exceed 8 bits, we add a
* check before copying values to samp_data->bin_pwr.
@@ -171,6 +168,19 @@ target_if_spectral_fill_samp_msg(struct target_if_spectral *spectral,
if (swar->fftbin_size_war ==
SPECTRAL_FFTBIN_SIZE_WAR_4BYTE_TO_1BYTE) {
binptr_32 = (uint32_t *)bin_pwr_data;
if (lb_edge_bins->num_bins > 0) {
for (idx = 0; idx < lb_edge_bins->num_bins;
idx++) {
/* Read only the first 2 bytes of the DWORD */
pwr_16 = *((uint16_t *)binptr_32++);
if (qdf_unlikely(pwr_16 >
MAX_FFTBIN_VALUE))
pwr_16 = MAX_FFTBIN_VALUE;
spec_samp_msg->bin_pwr
[lb_edge_bins->start_bin_idx + idx]
= pwr_16;
}
}
for (idx = 0; idx < pwr_count; idx++) {
/* Read only the first 2 bytes of the DWORD */
pwr_16 = *((uint16_t *)binptr_32++);
@@ -179,9 +189,34 @@ target_if_spectral_fill_samp_msg(struct target_if_spectral *spectral,
spec_samp_msg->bin_pwr[start_bin_index + idx]
= pwr_16;
}
if (rb_edge_bins->num_bins > 0) {
for (idx = 0; idx < rb_edge_bins->num_bins;
idx++) {
/* Read only the first 2 bytes of the DWORD */
pwr_16 = *((uint16_t *)binptr_32++);
if (qdf_unlikely(pwr_16 >
MAX_FFTBIN_VALUE))
pwr_16 = MAX_FFTBIN_VALUE;
spec_samp_msg->bin_pwr
[rb_edge_bins->start_bin_idx + idx]
= pwr_16;
}
}
} else if (swar->fftbin_size_war ==
SPECTRAL_FFTBIN_SIZE_WAR_2BYTE_TO_1BYTE) {
binptr_16 = (uint16_t *)bin_pwr_data;
if (lb_edge_bins->num_bins > 0) {
for (idx = 0; idx < lb_edge_bins->num_bins;
idx++) {
pwr_16 = *(binptr_16++);
if (qdf_unlikely(pwr_16 >
MAX_FFTBIN_VALUE))
pwr_16 = MAX_FFTBIN_VALUE;
spec_samp_msg->bin_pwr
[lb_edge_bins->start_bin_idx + idx]
= pwr_16;
}
}
for (idx = 0; idx < pwr_count; idx++) {
pwr_16 = *(binptr_16++);
if (qdf_unlikely(pwr_16 > MAX_FFTBIN_VALUE))
@@ -189,10 +224,35 @@ target_if_spectral_fill_samp_msg(struct target_if_spectral *spectral,
spec_samp_msg->bin_pwr[start_bin_index + idx]
= pwr_16;
}
if (rb_edge_bins->num_bins > 0) {
for (idx = 0; idx < rb_edge_bins->num_bins;
idx++) {
pwr_16 = *(binptr_16++);
if (qdf_unlikely(pwr_16 >
MAX_FFTBIN_VALUE))
pwr_16 = MAX_FFTBIN_VALUE;
spec_samp_msg->bin_pwr
[rb_edge_bins->start_bin_idx + idx]
= pwr_16;
}
}
} else {
if (lb_edge_bins->num_bins > 0)
qdf_mem_copy(&spec_samp_msg->bin_pwr
[lb_edge_bins->start_bin_idx],
&bin_pwr_data[0],
lb_edge_bins->num_bins);
qdf_mem_copy(&spec_samp_msg->bin_pwr[start_bin_index],
bin_pwr_data, pwr_count);
&bin_pwr_data[lb_edge_bins->num_bins],
pwr_count);
if (rb_edge_bins->num_bins > 0)
qdf_mem_copy(&spec_samp_msg->bin_pwr
[rb_edge_bins->start_bin_idx],
&bin_pwr_data[pwr_count +
lb_edge_bins->num_bins],
rb_edge_bins->num_bins);
}
spec_samp_msg->bin_pwr_count += (pwr_count + num_edge_bins);
}
if (det_map->send_to_upper_layers) {

Bestand weergeven

@@ -1069,6 +1069,8 @@ target_if_populate_fft_bins_info(struct target_if_spectral *spectral,
detector_list = &spectral->detector_list[smode][ch_width];
for (det = 0; det < detector_list->num_detectors; det++) {
uint16_t lb_extrabins_offset = 0;
det_map = &spectral->det_map
[detector_list->detectors[det]];
dest_det_info = &det_map->dest_det_info[0];
@@ -1079,12 +1081,14 @@ target_if_populate_fft_bins_info(struct target_if_spectral *spectral,
if (ch_width == CH_WIDTH_160MHZ &&
is_fragmentation_160 &&
spectral->report_info[smode].pri20_freq >
spectral->report_info[smode].sscan_cfreq1)
start_bin = num_fft_bins +
spectral->report_info[smode].sscan_cfreq1) {
start_bin = num_fft_bins;
lb_extrabins_offset =
dest_det_info->lb_extrabins_num +
dest_det_info->rb_extrabins_num;
else
} else {
start_bin = 0;
}
break;
case 1:
if (ch_width == CH_WIDTH_160MHZ &&
@@ -1092,24 +1096,34 @@ target_if_populate_fft_bins_info(struct target_if_spectral *spectral,
spectral->report_info[smode].pri20_freq >
spectral->report_info[smode].sscan_cfreq1)
start_bin = 0;
else
start_bin = num_fft_bins +
else {
start_bin = num_fft_bins;
lb_extrabins_offset =
dest_det_info->lb_extrabins_num +
dest_det_info->rb_extrabins_num;
}
break;
default:
return QDF_STATUS_E_FAILURE;
}
dest_det_info->dest_start_bin_idx = start_bin +
dest_det_info->lb_extrabins_num;
dest_det_info->dest_start_bin_idx = start_bin;
dest_det_info->dest_end_bin_idx =
dest_det_info->dest_start_bin_idx +
num_fft_bins - 1;
if (dest_det_info->lb_extrabins_num)
dest_det_info->lb_extrabins_start_idx = start_bin;
if (dest_det_info->lb_extrabins_num) {
if (is_ch_width_160_or_80p80(ch_width)) {
dest_det_info->lb_extrabins_start_idx =
2 * num_fft_bins +
lb_extrabins_offset;
} else {
dest_det_info->lb_extrabins_start_idx =
num_fft_bins;
}
}
if (dest_det_info->rb_extrabins_num)
dest_det_info->rb_extrabins_start_idx = 1 +
dest_det_info->dest_end_bin_idx;
dest_det_info->rb_extrabins_start_idx =
dest_det_info->lb_extrabins_start_idx +
dest_det_info->lb_extrabins_num;
dest_det_info->src_start_bin_idx = 0;
}