• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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