qcacmn: Parse function is split to modularize code

Instead of having a large function, the parse function is
split into 3 for A)Country ISO B)CountryCode and
C)RegDomain Pair ID.

Change-Id: I5b3574cd54644d1eac13e3eff762eb7cbdd35a73
CRs-Fixed: 2002892
This commit is contained in:
Baila, Shashikala Prabhu 2017-05-02 11:23:51 +05:30 • committed by Gerrit - the friendly Code Review server
commit 38dba64552
3 changed files with 232 additions and 104 deletions

View file

@ -26,11 +26,6 @@
#include "reg_db_parser.h"
#include <qdf_mem.h>
int reg_create_master_chan_list(uint8_t *event_buf)
{
return 0;
}
QDF_STATUS reg_is_country_code_valid(uint8_t alpha[3])
{
uint16_t i;
@ -83,115 +78,246 @@ QDF_STATUS reg_regrules_assign(uint8_t dmn_id_2g,
return QDF_STATUS_SUCCESS;
}
/* Given a country code the function
* finds current regulatory information
*/
QDF_STATUS reg_get_cur_reginfo(uint8_t *alpha,
uint32_t max_rules,
struct cur_regulatory_info *reg_info)
QDF_STATUS reg_get_rdpair_from_country_iso(uint8_t *alpha,
uint16_t *country_index,
uint16_t *regdmn_pair)
{
uint16_t i, j;
uint8_t rgalpha[3];
int num_countries;
int num_reg_dmn;
int default_country_2g;
int default_country_5g;
rgalpha[0] = alpha[0];
rgalpha[1] = alpha[1];
rgalpha[2] = 0;
get_num_countries(&num_countries);
get_num_reg_dmn_pairs(&num_reg_dmn);
if (reg_is_country_code_valid(rgalpha)) {
for (i = 0; i < num_countries; i++) {
if ((g_all_countries[i].alpha2[0] == alpha[0]) &&
for (i = 0; i < num_countries; i++) {
if ((g_all_countries[i].alpha2[0] == alpha[0]) &&
(g_all_countries[i].alpha2[1] == alpha[1]) &&
(g_all_countries[i].alpha2[2] == alpha[2]))
break;
else
continue;
}
for (j = 0; j < num_reg_dmn; j++) {
if (g_reg_dmn_pairs[j].reg_dmn_pair_id ==
break;
}
if (i == num_countries) {
*country_index = -1;
return QDF_STATUS_E_FAILURE;
}
for (j = 0; j < num_reg_dmn; j++) {
if (g_reg_dmn_pairs[j].reg_dmn_pair_id ==
g_all_countries[i].reg_dmn_pair_id)
break;
else
continue;
}
break;
}
if ((max_rules >= regdomains_2g[
g_reg_dmn_pairs[j].dmn_id_2g].num_reg_rules +
regdomains_5g[
g_reg_dmn_pairs[j].dmn_id_5g].num_reg_rules)) {
if (j == num_reg_dmn) {
*regdmn_pair = -1;
return QDF_STATUS_E_FAILURE;
}
reg_info->dfs_region = regdomains_5g[
g_reg_dmn_pairs[j].dmn_id_5g].dfs_region;
reg_info->phybitmap = g_all_countries[i].phymode_bitmap;
reg_info->max_bw_2g = g_all_countries[i].max_bw_2g;
reg_info->max_bw_5g = g_all_countries[i].max_bw_5g;
reg_info->min_bw_2g = regdomains_2g[
g_reg_dmn_pairs[j].dmn_id_2g].min_bw;
reg_info->min_bw_5g = regdomains_5g[
g_reg_dmn_pairs[j].dmn_id_5g].min_bw;
reg_info->num_2g_reg_rules = regdomains_2g[
g_reg_dmn_pairs[j].dmn_id_2g].num_reg_rules;
reg_info->num_5g_reg_rules = regdomains_5g[
g_reg_dmn_pairs[j].dmn_id_5g].num_reg_rules;
reg_info->reg_rules_2g_ptr = (struct cur_reg_rule *)
qdf_mem_malloc((reg_info->num_2g_reg_rules) *
sizeof(struct cur_reg_rule));
*country_index = i;
*regdmn_pair = j;
reg_info->reg_rules_5g_ptr = (struct cur_reg_rule *)
qdf_mem_malloc((reg_info->num_5g_reg_rules) *
sizeof(struct cur_reg_rule));
return QDF_STATUS_SUCCESS;
}
reg_regrules_assign(g_reg_dmn_pairs[j].dmn_id_2g,
g_reg_dmn_pairs[j].dmn_id_5g, reg_info);
QDF_STATUS reg_get_rdpair_from_country_code(uint16_t cc,
uint16_t *country_index,
uint16_t *regdmn_pair)
{
uint16_t i, j;
int num_countries;
int num_reg_dmn;
alpha[0] = g_all_countries[i].alpha2_11d[0];
alpha[1] = g_all_countries[i].alpha2_11d[1];
get_num_countries(&num_countries);
get_num_reg_dmn_pairs(&num_reg_dmn);
return QDF_STATUS_SUCCESS;
} else if (!((max_rules >= regdomains_2g[
g_reg_dmn_pairs[j].dmn_id_2g].num_reg_rules +
regdomains_5g[
g_reg_dmn_pairs[j].dmn_id_5g].num_reg_rules)))
return QDF_STATUS_E_NOMEM;
} else {
get_default_country_2g(&default_country_2g);
get_default_country_5g(&default_country_5g);
for (i = 0; i < num_countries; i++) {
if (g_all_countries[i].country_code == cc)
break;
}
if ((max_rules >=
regdomains_2g[default_country_2g].num_reg_rules +
regdomains_5g[default_country_5g].num_reg_rules)) {
reg_info->dfs_region =
regdomains_5g[default_country_5g].dfs_region;
reg_info->phybitmap = 0;
reg_info->max_bw_2g = 40;
reg_info->max_bw_5g = 160;
reg_info->min_bw_2g =
regdomains_2g[default_country_2g].min_bw;
reg_info->min_bw_5g =
regdomains_5g[default_country_5g].min_bw;
reg_info->num_2g_reg_rules =
regdomains_2g[default_country_2g].num_reg_rules;
reg_info->num_5g_reg_rules =
regdomains_5g[default_country_5g].num_reg_rules;
if (i == num_countries) {
*country_index = -1;
return QDF_STATUS_E_FAILURE;
}
reg_regrules_assign(default_country_2g,
default_country_5g, reg_info);
for (j = 0; j < num_reg_dmn; j++) {
if (g_reg_dmn_pairs[j].reg_dmn_pair_id ==
g_all_countries[i].reg_dmn_pair_id)
break;
}
alpha[0] = '0';
alpha[1] = '0';
if (j == num_reg_dmn) {
*regdmn_pair = -1;
return QDF_STATUS_E_FAILURE;
}
return QDF_STATUS_SUCCESS;
} else if (!((max_rules >= regdomains_2g[
default_country_2g].num_reg_rules +
regdomains_5g[default_country_5g].num_reg_rules)
))
return QDF_STATUS_E_NOMEM;
*country_index = i;
*regdmn_pair = j;
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS reg_get_reginfo_form_country_code_and_regdmn_pair(
uint32_t max_rules,
struct cur_regulatory_info *reg_info,
uint16_t country_index,
uint16_t regdmn_pair)
{
uint16_t i, j;
i = country_index;
j = regdmn_pair;
if ((max_rules >=
regdomains_2g[g_reg_dmn_pairs[j].dmn_id_2g].num_reg_rules +
regdomains_5g[g_reg_dmn_pairs[j].dmn_id_5g].num_reg_rules)
) {
reg_info->dfs_region =
regdomains_5g[g_reg_dmn_pairs[j].dmn_id_5g].dfs_region;
reg_info->phybitmap = g_all_countries[i].phymode_bitmap;
reg_info->max_bw_2g = g_all_countries[i].max_bw_2g;
reg_info->max_bw_5g = g_all_countries[i].max_bw_5g;
reg_info->min_bw_2g =
regdomains_2g[g_reg_dmn_pairs[j].dmn_id_2g].min_bw;
reg_info->min_bw_5g =
regdomains_5g[g_reg_dmn_pairs[j].dmn_id_5g].min_bw;
reg_info->num_2g_reg_rules =
regdomains_2g[g_reg_dmn_pairs[j].dmn_id_2g].num_reg_rules;
reg_info->num_5g_reg_rules =
regdomains_5g[g_reg_dmn_pairs[j].dmn_id_5g].num_reg_rules;
reg_info->reg_rules_2g_ptr = (struct cur_reg_rule *)
qdf_mem_malloc((reg_info->num_2g_reg_rules) *
sizeof(struct cur_reg_rule));
reg_info->reg_rules_5g_ptr = (struct cur_reg_rule *)
qdf_mem_malloc((reg_info->num_5g_reg_rules) *
sizeof(struct cur_reg_rule));
reg_regrules_assign(g_reg_dmn_pairs[j].dmn_id_2g,
g_reg_dmn_pairs[j].dmn_id_5g, reg_info);
return QDF_STATUS_SUCCESS;
} else if (!((max_rules >= regdomains_2g[
g_reg_dmn_pairs[j].dmn_id_2g].num_reg_rules +
regdomains_5g[
g_reg_dmn_pairs[j].dmn_id_5g].num_reg_rules)))
return QDF_STATUS_E_NOMEM;
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS reg_get_reginfo_form_regdmn_pair(
uint32_t max_rules,
struct cur_regulatory_info *reg_info,
uint16_t regdmn_pair)
{
uint16_t j;
j = regdmn_pair;
if ((max_rules >=
regdomains_2g[g_reg_dmn_pairs[j].dmn_id_2g].num_reg_rules +
regdomains_5g[g_reg_dmn_pairs[j].dmn_id_5g].num_reg_rules)
) {
reg_info->dfs_region =
regdomains_5g[g_reg_dmn_pairs[j].dmn_id_5g].dfs_region;
reg_info->phybitmap = 0;
reg_info->max_bw_2g = 40;
reg_info->max_bw_5g = 160;
reg_info->min_bw_2g =
regdomains_2g[g_reg_dmn_pairs[j].dmn_id_2g].min_bw;
reg_info->min_bw_5g =
regdomains_5g[g_reg_dmn_pairs[j].dmn_id_5g].min_bw;
reg_info->num_2g_reg_rules =
regdomains_2g[g_reg_dmn_pairs[j].dmn_id_2g].num_reg_rules;
reg_info->num_5g_reg_rules =
regdomains_5g[g_reg_dmn_pairs[j].dmn_id_5g].num_reg_rules;
reg_info->reg_rules_2g_ptr = (struct cur_reg_rule *)
qdf_mem_malloc((reg_info->num_2g_reg_rules) *
sizeof(struct cur_reg_rule));
reg_info->reg_rules_5g_ptr = (struct cur_reg_rule *)
qdf_mem_malloc((reg_info->num_5g_reg_rules) *
sizeof(struct cur_reg_rule));
reg_regrules_assign(g_reg_dmn_pairs[j].dmn_id_2g,
g_reg_dmn_pairs[j].dmn_id_5g, reg_info);
return QDF_STATUS_SUCCESS;
} else if (!((max_rules >= regdomains_2g[
g_reg_dmn_pairs[j].dmn_id_2g].num_reg_rules +
regdomains_5g[
g_reg_dmn_pairs[j].dmn_id_5g].num_reg_rules)))
return QDF_STATUS_E_NOMEM;
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS reg_get_reginfo_for_default_regdmn_pair(
uint32_t max_rules,
struct cur_regulatory_info *reg_info)
{
int default_country_2g;
int default_country_5g;
get_default_country_2g(&default_country_2g);
get_default_country_5g(&default_country_5g);
if ((max_rules >= regdomains_2g[default_country_2g].num_reg_rules +
regdomains_5g[default_country_5g].num_reg_rules)) {
reg_info->dfs_region =
regdomains_5g[default_country_5g].dfs_region;
reg_info->phybitmap = 0;
reg_info->max_bw_2g = 40;
reg_info->max_bw_5g = 160;
reg_info->min_bw_2g = regdomains_2g[default_country_2g].min_bw;
reg_info->min_bw_5g = regdomains_5g[default_country_5g].min_bw;
reg_info->num_2g_reg_rules =
regdomains_2g[default_country_2g].num_reg_rules;
reg_info->num_5g_reg_rules =
regdomains_5g[default_country_5g].num_reg_rules;
reg_info->reg_rules_2g_ptr = (struct cur_reg_rule *)
qdf_mem_malloc((reg_info->num_2g_reg_rules) *
sizeof(struct cur_reg_rule));
reg_info->reg_rules_5g_ptr = (struct cur_reg_rule *)
qdf_mem_malloc((reg_info->num_5g_reg_rules) *
sizeof(struct cur_reg_rule));
reg_regrules_assign(default_country_2g,
default_country_5g, reg_info);
return QDF_STATUS_SUCCESS;
} else if (!((max_rules >=
regdomains_2g[default_country_2g].num_reg_rules +
regdomains_5g[default_country_5g].num_reg_rules)))
return QDF_STATUS_E_NOMEM;
return QDF_STATUS_SUCCESS;
}
/* Given a country code the function finds current regulatory information */
QDF_STATUS reg_get_cur_reginfo(uint32_t max_rules,
struct cur_regulatory_info *reg_info,
uint16_t country_index,
uint16_t regdmn_pair)
{
if ((country_index != (uint16_t)(-1)) &&
(regdmn_pair != (uint16_t)(-1)))
reg_get_reginfo_form_country_code_and_regdmn_pair(
max_rules,
reg_info,
country_index,
regdmn_pair);
else {
if (regdmn_pair != (uint16_t)(-1))
reg_get_reginfo_form_regdmn_pair(
max_rules,
reg_info,
regdmn_pair);
else
reg_get_reginfo_for_default_regdmn_pair(
max_rules,
reg_info);
}
return QDF_STATUS_SUCCESS;

View file

@ -37,9 +37,10 @@ QDF_STATUS reg_regrules_assign(uint8_t dmn_id_2g,
uint8_t dmn_id_5g,
struct cur_regulatory_info *reg_info);
QDF_STATUS reg_get_cur_reginfo(uint8_t *alpha,
uint32_t max_rules,
struct cur_regulatory_info *reg_info);
QDF_STATUS reg_get_cur_reginfo(uint32_t max_rules,
struct cur_regulatory_info *reg_info,
uint16_t country_index,
uint16_t regdmn_pair);
QDF_STATUS reg_get_rdpair_from_country_iso(uint8_t *alpha,
uint16_t *country_index,

View file

@ -32,6 +32,7 @@
#include "reg_services.h"
#include "reg_priv.h"
#include "reg_db_parser.h"
#define MAX_PWR_FCC_CHAN_12 8
#define MAX_PWR_FCC_CHAN_13 2