xref: /wlan-dirver/qca-wifi-host-cmn/umac/regulatory/core/src/reg_db.h (revision ad85c389289a03e320cd08dea21861f9857892fc)
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 /**
29  * struct regulatory_rule
30  * @start_freq: start frequency
31  * @end_freq: end frequency
32  * @max_bw: maximum bandwidth
33  * @reg_power: regulatory power
34  * @flags: regulatory flags
35  */
36 struct regulatory_rule {
37 	uint16_t start_freq;
38 	uint16_t end_freq;
39 	uint16_t max_bw;
40 	uint8_t reg_power;
41 	uint16_t flags;
42 };
43 
44 /**
45  * struct regdomain
46  * @ctl_val: CTL value
47  * @dfs_region: dfs region
48  * @min_bw: minimum bandwidth
49  * @num_reg_rules: number of regulatory rules
50  * @reg_rules_id: regulatory rule index
51  */
52 struct regdomain   {
53 	uint8_t ctl_val;
54 	enum dfs_reg dfs_region;
55 	uint16_t min_bw;
56 	uint8_t ant_gain;
57 	uint8_t num_reg_rules;
58 	uint8_t reg_rule_id[MAX_REG_RULES];
59 };
60 
61 /**
62  * struct country_code_to_reg_domain
63  * @country_code: country code
64  * @reg_dmn_pair_id: reg domainpair id
65  * @alpha2: iso-3166 alpha2
66  * @max_bw_2g: maximum 2g bandwidth
67  * @max_bw_5g: maximum 5g bandwidth
68  * @phymode_bitmap: phymodes not supported
69  */
70 struct country_code_to_reg_domain   {
71 	uint16_t country_code;
72 	uint16_t reg_dmn_pair_id;
73 	uint8_t alpha2[REG_ALPHA2_LEN + 1];
74 	uint16_t max_bw_2g;
75 	uint16_t max_bw_5g;
76 	uint16_t phymode_bitmap;
77 };
78 
79 /**
80  * struct reg_domain_pair
81  * @reg_dmn_pair_id: reg domainpiar value
82  * @dmn_id_5g: 5g reg domain value
83  * @dmn_id_2g: 2g regdomain value
84  */
85 struct reg_domain_pair {
86 	uint16_t reg_dmn_pair_id;
87 	uint8_t dmn_id_5g;
88 	uint8_t dmn_id_2g;
89 };
90 
91 /**
92  * enum ctl_value - CTL value
93  * @CTL_FCC: CTL FCC
94  * @CTL_MKK: CTL MKK
95  * @CTL_ETSI: CTL ETSI
96  * @CTL_KOR: CTL KOR
97  * @CTL_CHN: CTL CHINA
98  * @CTL_USER_DEF: CTL USER_DEF
99  * @CTL_NONE: CTL NONE
100  */
101 enum ctl_value {
102 	CTL_FCC = 0x10,
103 	CTL_ETSI = 0x30,
104 	CTL_MKK = 0x40,
105 	CTL_KOR = 0x50,
106 	CTL_CHN = 0x60,
107 	CTL_USER_DEF = 0x70,
108 	CTL_NONE = 0xff
109 };
110 
111 QDF_STATUS reg_get_num_countries(int *num_countries);
112 
113 QDF_STATUS reg_get_num_reg_dmn_pairs(int *num_reg_dmn);
114 
115 QDF_STATUS reg_get_default_country(uint16_t *default_country);
116 
117 /**
118  * reg_etsi13_regdmn () - Checks if the reg domain is ETSI13 or not
119  * @reg_dmn: reg domain
120  *
121  * Return: true or false
122  */
123 bool reg_etsi13_regdmn(uint8_t reg_dmn);
124 #endif
125