1 /*
2 * Copyright (C) 2021 HiSilicon (Shanghai) Technologies CO., LIMITED.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 */
18
19 #ifndef __MAC_REGDOMAIN_H__
20 #define __MAC_REGDOMAIN_H__
21
22 /* ****************************************************************************
23 1 其他头文件包含
24 **************************************************************************** */
25 #include "oal_ext_if.h"
26 #include "wlan_types.h"
27
28 #ifdef __cplusplus
29 #if __cplusplus
30 extern "C" {
31 #endif
32 #endif
33
34 /* ****************************************************************************
35 2 宏定义
36 **************************************************************************** */
37 /* 默认管制域最大发送功率 */
38 #define MAC_RC_DEFAULT_MAX_TX_PWR 20 /* 20dBm */
39 #define MAC_INVALID_RC 255 /* 无效的管制类索引值 */
40
41 #define MAC_AFFECTED_CHAN_OFFSET_START_FREQ_5 0
42 #define MAC_AFFECTED_CHAN_OFFSET_START_FREQ_2 3
43
44 /* ****************************************************************************
45 3 枚举定义
46 **************************************************************************** */
47 /* 一个管制类的起始频率枚举 */
48 typedef enum {
49 MAC_RC_START_FREQ_2 = WLAN_BAND_2G, /* 2.407 */
50 MAC_RC_START_FREQ_BUTT,
51 } mac_rc_start_freq_enum;
52 typedef hi_u8 mac_rc_start_freq_enum_uint8;
53
54 /* 管制类信道间距 */
55 typedef enum {
56 MAC_CH_SPACING_5MHZ = 0,
57 MAC_CH_SPACING_10MHZ,
58 MAC_CH_SPACING_20MHZ,
59 MAC_CH_SPACING_25MHZ,
60 MAC_CH_SPACING_40MHZ,
61
62 MAC_CH_SPACING_BUTT
63 } mac_ch_spacing_enum;
64 typedef hi_u8 mac_ch_spacing_enum_uint8;
65
66 /* 雷达认证标准枚举 */
67 typedef enum {
68 MAC_DFS_DOMAIN_NULL = 0,
69 MAC_DFS_DOMAIN_FCC = 1,
70 MAC_DFS_DOMAIN_ETSI = 2,
71 MAC_DFS_DOMAIN_MKK = 3,
72 MAC_DFS_DOMAIN_KOREA = 4,
73
74 MAC_DFS_DOMAIN_BUTT
75 } mac_dfs_domain_enum;
76 typedef hi_u8 mac_dfs_domain_enum_uint8;
77
78 /* 5GHz频段: 信道号对应的信道索引值 */
79 typedef enum {
80 MAC_CHANNEL36 = 0,
81 MAC_CHANNEL40 = 1,
82 MAC_CHANNEL44 = 2,
83 MAC_CHANNEL48 = 3,
84 MAC_CHANNEL52 = 4,
85 MAC_CHANNEL56 = 5,
86 MAC_CHANNEL60 = 6,
87 MAC_CHANNEL64 = 7,
88 MAC_CHANNEL100 = 8,
89 MAC_CHANNEL104 = 9,
90 MAC_CHANNEL108 = 10,
91 MAC_CHANNEL112 = 11,
92 MAC_CHANNEL116 = 12,
93 MAC_CHANNEL120 = 13,
94 MAC_CHANNEL124 = 14,
95 MAC_CHANNEL128 = 15,
96 MAC_CHANNEL132 = 16,
97 MAC_CHANNEL136 = 17,
98 MAC_CHANNEL140 = 18,
99 MAC_CHANNEL144 = 19,
100 MAC_CHANNEL149 = 20,
101 MAC_CHANNEL153 = 21,
102 MAC_CHANNEL157 = 22,
103 MAC_CHANNEL161 = 23,
104 MAC_CHANNEL165 = 24,
105 MAC_CHANNEL184 = 25,
106 MAC_CHANNEL188 = 26,
107 MAC_CHANNEL192 = 27,
108 MAC_CHANNEL196 = 28,
109 MAC_CHANNEL_FREQ_5_BUTT = 29,
110 } mac_channel_freq_5_enum;
111 typedef hi_u8 mac_channel_freq_5_enum_uint8;
112
113 /* 2.4GHz频段: 信道号对应的信道索引值 */
114 typedef enum {
115 MAC_CHANNEL1 = 0,
116 MAC_CHANNEL2 = 1,
117 MAC_CHANNEL3 = 2,
118 MAC_CHANNEL4 = 3,
119 MAC_CHANNEL5 = 4,
120 MAC_CHANNEL6 = 5,
121 MAC_CHANNEL7 = 6,
122 MAC_CHANNEL8 = 7,
123 MAC_CHANNEL9 = 8,
124 MAC_CHANNEL10 = 9,
125 MAC_CHANNEL11 = 10,
126 MAC_CHANNEL12 = 11,
127 MAC_CHANNEL13 = 12,
128 MAC_CHANNEL14 = 13,
129 MAC_CHANNEL_FREQ_2_BUTT = 14,
130 } mac_channel_freq_2_enum;
131 typedef hi_u8 mac_channel_freq_2_enum_uint8;
132
133 typedef enum {
134 MAC_RC_DFS = BIT0,
135 } mac_behaviour_bmap_enum;
136
137 #define MAC_MAX_SUPP_CHANNEL MAC_CHANNEL_FREQ_2_BUTT
138
139 /* ****************************************************************************
140 STRUCT定义
141 **************************************************************************** */
142 /* 管制类结构体: 每个管制类保存的信息 */
143 typedef struct {
144 mac_rc_start_freq_enum_uint8 start_freq; /* 起始频率 */
145 mac_ch_spacing_enum_uint8 ch_spacing; /* 信道间距 */
146 hi_u8 behaviour_bmap; /* 允许的行为位图 位图定义见mac_behaviour_bmap_enum */
147 hi_u8 coverage_class; /* 覆盖类 */
148 hi_u8 max_reg_tx_pwr; /* 管制类规定的最大发送功率, 单位dBm */
149 /* 实际使用的最大发送功率, 单位dBm,此值命令可配,可以比管制域规定功率大,TPC算法用此值作为最大发送功率 */
150 hi_u8 max_tx_pwr;
151 hi_u8 auc_resv[2]; /* 2 BYTE保留字段 */
152 hi_u32 channel_bmap; /* 支持信道位图,例 0011表示支持的信道的index为0 1 */
153 } mac_regclass_info_stru;
154
155 /* 管制域信息结构体 */
156 /* 管制类值、管制类位图与管制类信息 数组下表的关系
157 管制类取值 : .... 7 6 5 4 3 2 1 0
158 管制类位图 : .... 1 1 0 1 1 1 0 1
159 管制类信息数组下标: .... 5 4 x 3 2 1 x 0
160 */
161 typedef struct {
162 hi_char ac_country[WLAN_COUNTRY_STR_LEN]; /* 国家字符串 */
163 hi_u8 dfs_domain:4; /* DFS 雷达标准 mac_dfs_domain_enum_uint8 */
164 hi_u8 regclass_num:4; /* 管制类个数 */
165 mac_regclass_info_stru ast_regclass[WLAN_MAX_RC_NUM]; /* 管制域包含的管制类信息,注意 此成员只能放在最后一项! */
166 } mac_regdomain_info_stru;
167
168 /* channel info结构体 */
169 typedef struct {
170 hi_u8 chan_number; /* 信道号 */
171 hi_u8 reg_class; /* 管制类在管制域中的索引号 */
172 } mac_channel_info_stru;
173
174 /* ****************************************************************************
175 函数声明
176 **************************************************************************** */
177 hi_void mac_init_channel_list(hi_void);
178 hi_void mac_init_regdomain(hi_void);
179 hi_void mac_regdomain_set_max_power(hi_u8 pwr, hi_u8 exceed_reg);
180 hi_void mac_get_channel_num_from_idx(hi_u8 band, hi_u8 idx, hi_u8 *puc_channel_num);
181 hi_void mac_set_country_ie_2g(mac_regdomain_info_stru *rd_info, hi_u8 *puc_buffer, hi_u8 *puc_len);
182 hi_char *mac_regdomain_get_country(hi_void);
183 hi_u32 mac_is_channel_idx_valid(hi_u8 band, hi_u8 ch_idx, hi_u8 *reg_class);
184 hi_u32 mac_is_channel_num_valid(hi_u8 band, hi_u8 ch_num);
185 hi_u32 mac_get_channel_idx_from_num(hi_u8 band, hi_u8 channel_num, hi_u8 *puc_channel_idx);
186 mac_regdomain_info_stru *mac_get_regdomain_info(hi_void);
187 mac_regclass_info_stru *mac_get_channel_num_rc_info(hi_u8 band, hi_u8 ch_num);
188
189 /* ****************************************************************************
190 功能描述 : 通过信道号找到频段,由调用者保证输入的信道号合法,从而降低本接口的复杂性,提高效率
191 输入参数 : hi_u8 uc_channel_num
192 返 回 值 : wlan_channel_band_enum_uint8
193 修改历史 :
194 1.日 期 : 2015年8月31日
195 作 者 : HiSilicon
196 修改内容 : 新生成函数
197 **************************************************************************** */
mac_get_band_by_channel_num(hi_u8 channel_num)198 static inline wlan_channel_band_enum_uint8 mac_get_band_by_channel_num(hi_u8 channel_num)
199 {
200 return (wlan_channel_band_enum_uint8)((channel_num <= MAC_CHANNEL_FREQ_2_BUTT) ? WLAN_BAND_2G : WLAN_BAND_BUTT);
201 }
202
203 /* ****************************************************************************
204 功能描述 : 获取当前频段所支持的最大信道数目
205 输入参数 : en_band: 频段
206 返 回 值 : 当前频段所支持的最大信道数目
207 修改历史 :
208 1.日 期 : 2014年3月12日
209 作 者 : HiSilicon
210 修改内容 : 新生成函数
211 **************************************************************************** */
mac_get_num_supp_channel(wlan_channel_band_enum_uint8 band)212 static inline hi_u8 mac_get_num_supp_channel(wlan_channel_band_enum_uint8 band)
213 {
214 switch (band) {
215 case WLAN_BAND_2G: /* 2.4GHz */
216 return (hi_u8)MAC_CHANNEL_FREQ_2_BUTT;
217 default:
218 return 0;
219 }
220 }
221
222 /* ****************************************************************************
223 功能描述 : 获取受影响的信道偏移值
224 **************************************************************************** */
mac_get_affected_ch_idx_offset(wlan_channel_band_enum_uint8 band)225 static inline hi_u8 mac_get_affected_ch_idx_offset(wlan_channel_band_enum_uint8 band)
226 {
227 switch (band) {
228 case WLAN_BAND_2G: /* 2.4GHz */
229 return (hi_u8)MAC_AFFECTED_CHAN_OFFSET_START_FREQ_2;
230 default:
231 return 0;
232 }
233 }
234
235 #ifdef __cplusplus
236 #if __cplusplus
237 }
238 #endif
239 #endif
240
241 #endif /* __MAC_REGDOMAIN_H__ */
242