From: Luis R. Rodriguez Date: Wed, 21 Dec 2011 02:04:18 +0000 (-0800) Subject: crda: move country2rd() and its helper to reglib.c X-Git-Tag: upstream/1.1.3~10 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0d421c2851d55ed644b96060cdc2be10217e74bd;p=platform%2Fupstream%2Fcrda.git crda: move country2rd() and its helper to reglib.c Start cleaning the way we deal with reglib.c as the goal is to make that stuff a library to be shared first in userspace with the regulatory simulator [0]. We start off by moving country2rd() and its helper over to reglib.c. [0] git://github.com/mcgrof/regsim.git Signed-off-by: Luis R. Rodriguez --- diff --git a/print-regdom.c b/print-regdom.c index f34a8db..a3bedeb 100644 --- a/print-regdom.c +++ b/print-regdom.c @@ -4,67 +4,6 @@ #include #include "reglib.h" -static void reg_rule2rd(uint8_t *db, int dblen, - uint32_t ruleptr, struct ieee80211_reg_rule *rd_reg_rule) -{ - struct regdb_file_reg_rule *rule; - struct regdb_file_freq_range *freq; - struct regdb_file_power_rule *power; - - struct ieee80211_freq_range *rd_freq_range = &rd_reg_rule->freq_range; - struct ieee80211_power_rule *rd_power_rule = &rd_reg_rule->power_rule; - - rule = crda_get_file_ptr(db, dblen, sizeof(*rule), ruleptr); - freq = crda_get_file_ptr(db, dblen, sizeof(*freq), rule->freq_range_ptr); - power = crda_get_file_ptr(db, dblen, sizeof(*power), rule->power_rule_ptr); - - rd_freq_range->start_freq_khz = ntohl(freq->start_freq); - rd_freq_range->end_freq_khz = ntohl(freq->end_freq); - rd_freq_range->max_bandwidth_khz = ntohl(freq->max_bandwidth); - - rd_power_rule->max_antenna_gain = ntohl(power->max_antenna_gain); - rd_power_rule->max_eirp = ntohl(power->max_eirp); - - rd_reg_rule->flags = ntohl(rule->flags); -} - -/* Converts a file regdomain to ieee80211_regdomain, easier to manage */ -struct ieee80211_regdomain *country2rd(uint8_t *db, int dblen, - struct regdb_file_reg_country *country) -{ - struct regdb_file_reg_rules_collection *rcoll; - struct ieee80211_regdomain *rd; - int i, num_rules, size_of_rd; - - rcoll = crda_get_file_ptr(db, dblen, sizeof(*rcoll), - country->reg_collection_ptr); - num_rules = ntohl(rcoll->reg_rule_num); - /* re-get pointer with sanity checking for num_rules */ - rcoll = crda_get_file_ptr(db, dblen, - sizeof(*rcoll) + num_rules * sizeof(uint32_t), - country->reg_collection_ptr); - - size_of_rd = sizeof(struct ieee80211_regdomain) + - num_rules * sizeof(struct ieee80211_reg_rule); - - rd = malloc(size_of_rd); - if (!rd) - return NULL; - - memset(rd, 0, size_of_rd); - - rd->alpha2[0] = country->alpha2[0]; - rd->alpha2[1] = country->alpha2[1]; - rd->n_reg_rules = num_rules; - - for (i = 0; i < num_rules; i++) { - reg_rule2rd(db, dblen, rcoll->reg_rule_ptrs[i], - &rd->reg_rules[i]); - } - - return rd; -} - static void print_reg_rule(struct ieee80211_reg_rule *rule) { struct ieee80211_freq_range *freq; diff --git a/reglib.c b/reglib.c index ebf0fb1..5d66481 100644 --- a/reglib.c +++ b/reglib.c @@ -151,3 +151,64 @@ out: return 1; #endif } + +static void reg_rule2rd(uint8_t *db, int dblen, + uint32_t ruleptr, struct ieee80211_reg_rule *rd_reg_rule) +{ + struct regdb_file_reg_rule *rule; + struct regdb_file_freq_range *freq; + struct regdb_file_power_rule *power; + + struct ieee80211_freq_range *rd_freq_range = &rd_reg_rule->freq_range; + struct ieee80211_power_rule *rd_power_rule = &rd_reg_rule->power_rule; + + rule = crda_get_file_ptr(db, dblen, sizeof(*rule), ruleptr); + freq = crda_get_file_ptr(db, dblen, sizeof(*freq), rule->freq_range_ptr); + power = crda_get_file_ptr(db, dblen, sizeof(*power), rule->power_rule_ptr); + + rd_freq_range->start_freq_khz = ntohl(freq->start_freq); + rd_freq_range->end_freq_khz = ntohl(freq->end_freq); + rd_freq_range->max_bandwidth_khz = ntohl(freq->max_bandwidth); + + rd_power_rule->max_antenna_gain = ntohl(power->max_antenna_gain); + rd_power_rule->max_eirp = ntohl(power->max_eirp); + + rd_reg_rule->flags = ntohl(rule->flags); +} + +/* Converts a file regdomain to ieee80211_regdomain, easier to manage */ +struct ieee80211_regdomain *country2rd(uint8_t *db, int dblen, + struct regdb_file_reg_country *country) +{ + struct regdb_file_reg_rules_collection *rcoll; + struct ieee80211_regdomain *rd; + int i, num_rules, size_of_rd; + + rcoll = crda_get_file_ptr(db, dblen, sizeof(*rcoll), + country->reg_collection_ptr); + num_rules = ntohl(rcoll->reg_rule_num); + /* re-get pointer with sanity checking for num_rules */ + rcoll = crda_get_file_ptr(db, dblen, + sizeof(*rcoll) + num_rules * sizeof(uint32_t), + country->reg_collection_ptr); + + size_of_rd = sizeof(struct ieee80211_regdomain) + + num_rules * sizeof(struct ieee80211_reg_rule); + + rd = malloc(size_of_rd); + if (!rd) + return NULL; + + memset(rd, 0, size_of_rd); + + rd->alpha2[0] = country->alpha2[0]; + rd->alpha2[1] = country->alpha2[1]; + rd->n_reg_rules = num_rules; + + for (i = 0; i < num_rules; i++) { + reg_rule2rd(db, dblen, rcoll->reg_rule_ptrs[i], + &rd->reg_rules[i]); + } + + return rd; +}