xref: /wlan-dirver/qca-wifi-host-cmn/umac/regulatory/core/src/reg_db.h (revision 6d768494e5ce14eb1603a695c86739d12ecc6ec2)
1 /*
2  * Copyright (c) 2017-2020 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  * @max_bw: maximum bandwidth
53  * @num_reg_rules: number of regulatory rules
54  * @reg_rules_id: regulatory rule index
55  */
56 struct regdomain   {
57 	uint8_t ctl_val;
58 	enum dfs_reg dfs_region;
59 	uint16_t min_bw;
60 	uint16_t max_bw;
61 	uint8_t ant_gain;
62 	uint8_t num_reg_rules;
63 	uint8_t reg_rule_id[MAX_REG_RULES];
64 };
65 
66 /**
67  * struct country_code_to_reg_domain
68  * @country_code: country code
69  * @reg_dmn_pair_id: reg domainpair id
70  * @alpha2: iso-3166 alpha2
71  * @max_bw_2g: maximum 2g bandwidth
72  * @max_bw_5g: maximum 5g bandwidth
73  * @phymode_bitmap: phymodes not supported
74  */
75 struct country_code_to_reg_domain   {
76 	uint16_t country_code;
77 	uint16_t reg_dmn_pair_id;
78 	uint8_t alpha2[REG_ALPHA2_LEN + 1];
79 	uint16_t max_bw_2g;
80 	uint16_t max_bw_5g;
81 	uint16_t phymode_bitmap;
82 };
83 
84 /**
85  * struct reg_domain_pair
86  * @reg_dmn_pair_id: reg domainpiar value
87  * @dmn_id_5g: 5g reg domain value
88  * @dmn_id_2g: 2g regdomain value
89  */
90 struct reg_domain_pair {
91 	uint16_t reg_dmn_pair_id;
92 	uint8_t dmn_id_5g;
93 	uint8_t dmn_id_2g;
94 };
95 
96 QDF_STATUS reg_get_num_countries(int *num_countries);
97 
98 QDF_STATUS reg_get_num_reg_dmn_pairs(int *num_reg_dmn);
99 
100 QDF_STATUS reg_get_default_country(uint16_t *default_country);
101 
102 /**
103  * reg_etsi13_regdmn () - Checks if the reg domain is ETSI13 or not
104  * @reg_dmn: reg domain
105  *
106  * Return: true or false
107  */
108 bool reg_etsi13_regdmn(uint8_t reg_dmn);
109 
110 /**
111  * reg_en302_502_regdmn() - Check if the reg domain is en302_502 applicable.
112  * @reg_dmn: Regulatory domain pair ID.
113  *
114  * Return: True if EN302_502 applicable, else false.
115  */
116 bool reg_en302_502_regdmn(uint16_t reg_dmn);
117 #endif
118