xref: /wlan-dirver/qca-wifi-host-cmn/umac/regulatory/core/src/reg_db.h (revision 11f5a63a6cbdda84849a730de22f0a71e635d58c)
1 /*
2  * Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
3  *
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 /**
21  * DOC: reg_db.h
22  * This file contains regulatory component data structures
23  */
24 
25 #ifndef __REG_DB_H
26 #define __REG_DB_H
27 
28 /* Alpha2 code for world reg domain */
29 #define REG_WORLD_ALPHA2 "00"
30 
31 /**
32  * struct regulatory_rule
33  * @start_freq: start frequency
34  * @end_freq: end frequency
35  * @max_bw: maximum bandwidth
36  * @reg_power: regulatory power
37  * @flags: regulatory flags
38  */
39 struct regulatory_rule {
40 	uint16_t start_freq;
41 	uint16_t end_freq;
42 	uint16_t max_bw;
43 	uint8_t reg_power;
44 	uint16_t flags;
45 };
46 
47 /**
48  * struct regdomain
49  * @ctl_val: CTL value
50  * @dfs_region: dfs region
51  * @min_bw: minimum bandwidth
52  * @num_reg_rules: number of regulatory rules
53  * @reg_rules_id: regulatory rule index
54  */
55 struct regdomain   {
56 	uint8_t ctl_val;
57 	enum dfs_reg dfs_region;
58 	uint16_t min_bw;
59 	uint8_t ant_gain;
60 	uint8_t num_reg_rules;
61 	uint8_t reg_rule_id[MAX_REG_RULES];
62 };
63 
64 /**
65  * struct country_code_to_reg_domain
66  * @country_code: country code
67  * @reg_dmn_pair_id: reg domainpair id
68  * @alpha2: iso-3166 alpha2
69  * @max_bw_2g: maximum 2g bandwidth
70  * @max_bw_5g: maximum 5g bandwidth
71  * @phymode_bitmap: phymodes not supported
72  */
73 struct country_code_to_reg_domain   {
74 	uint16_t country_code;
75 	uint16_t reg_dmn_pair_id;
76 	uint8_t alpha2[REG_ALPHA2_LEN + 1];
77 	uint16_t max_bw_2g;
78 	uint16_t max_bw_5g;
79 	uint16_t phymode_bitmap;
80 };
81 
82 /**
83  * struct reg_domain_pair
84  * @reg_dmn_pair_id: reg domainpiar value
85  * @dmn_id_5g: 5g reg domain value
86  * @dmn_id_2g: 2g regdomain value
87  */
88 struct reg_domain_pair {
89 	uint16_t reg_dmn_pair_id;
90 	uint8_t dmn_id_5g;
91 	uint8_t dmn_id_2g;
92 };
93 
94 QDF_STATUS reg_get_num_countries(int *num_countries);
95 
96 QDF_STATUS reg_get_num_reg_dmn_pairs(int *num_reg_dmn);
97 
98 QDF_STATUS reg_get_default_country(uint16_t *default_country);
99 
100 /**
101  * reg_etsi13_regdmn () - Checks if the reg domain is ETSI13 or not
102  * @reg_dmn: reg domain
103  *
104  * Return: true or false
105  */
106 bool reg_etsi13_regdmn(uint8_t reg_dmn);
107 
108 /**
109  * reg_en302_502_regdmn() - Check if the reg domain is en302_502 applicable.
110  * @reg_dmn: Regulatory domain pair ID.
111  *
112  * Return: True if EN302_502 applicable, else false.
113  */
114 bool reg_en302_502_regdmn(uint16_t reg_dmn);
115 #endif
116