1 /*
2 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 * Description: dmac ftm head
15 * Create: 2020-7-5
16 */
17
18 #ifndef HMAC_FTM_H
19 #define HMAC_FTM_H
20
21 /*****************************************************************************
22 其他头文件包含
23 *****************************************************************************/
24 #include "mac_vap_ext.h"
25 #include "hmac_feature_main.h"
26 #include "mac_frame.h"
27 #include "hal_ext_if.h"
28
29 #ifdef __cplusplus
30 #if __cplusplus
31 extern "C" {
32 #endif
33 #endif
34
35 /*****************************************************************************
36 宏定义
37 *****************************************************************************/
38 #ifdef _PRE_WLAN_FEATURE_FTM
39 #define MAC_FTM_TIMER_CNT 4
40 #define MAX_FTM_RANGE_ENTRY_COUNT 15
41 #define MAX_FTM_ERROR_ENTRY_COUNT 11
42 #define MAX_MINIMUN_AP_COUNT 14
43 #define MAX_REPEATER_NUM 3 /* 支持的最大定位ap数量 */
44
45 /* FTM命令使能标志位 */
46 #define FTM_INITIATOR BIT0
47 #define FTM_ENABLE BIT1
48 #define FTM_CALI BIT2
49 #define FTM_RESPONDER BIT3
50 #define FTM_SEND_FTM BIT4
51 #define FTM_SEND_IFTMR BIT5
52 #define FTM_SET_CORRECT_TIME BIT6
53 #define FTM_SET_M2S BIT7
54 #define FTM_DBG_AUTO_BANDWIDTH BIT8
55 #define FTM_RANGE BIT9
56 #define FTM_SEND_RANGE BIT10
57 #define FTM_ADD_TSF BIT11
58
59 #define PERIOD_OF_FTM_TIMER 12 // 80M:12500 160M:6250 /* 皮秒 当前为fpga版本*/
60
61 #define PHY_TX_ADJUTST_VAL 0 /* 发送phy至connector时间 */
62 #define PHY_RX_ADJUTST_VAL 0 /* 接收connector至phy时间 */
63
64 #define T1_FINE_ADJUST_VAL 0 /* 实际测量校准值 */
65 #define T2_FINE_ADJUST_VAL 0
66 #define T3_FINE_ADJUST_VAL 0
67 #define T4_FINE_ADJUST_VAL 0
68
69 #define FTM_FRAME_DIALOG_TOKEN_OFFSET 2 /* ftm帧dialog token偏移 */
70 #define FTM_FRAME_IE_OFFSET 3 /* ftm req帧ie偏移 */
71 #define FTM_FRAME_FOLLOWUP_DIALOG_TOKEN_OFFSET 3 /* ftm帧follow up dialog token偏移 */
72 #define FTM_FRAME_TOD_OFFSET 4 /* ftm帧tod偏移 */
73 #define FTM_FRAME_TOA_OFFSET 10 /* ftm帧toa偏移 */
74 #define FTM_FRAME_OPTIONAL_IE_OFFSET 20
75 #define FTM_FRAME_TSF_SYNC_INFO_OFFSET 3
76 #define FTM_RANGE_IE_OFFSET 3
77 #define FTM_REQ_TRIGGER_OFFSET 2 /* ftm req帧Trigger偏移 */
78
79 #define FTM_WAIT_TIMEOUT 1000 /* 等待接收FTM_1的时间 */
80 #define FTM_MAX_SESSION_TIMEOUT 4000 /* 会话有效时间 */
81
82 #define FTM_MIN_DETECTABLE_DISTANCE 0 /* FTM最小可检测范围 */
83 #define FTM_MAX_DETECTABLE_DISTANCE 8192000 /* FTM最大可检测范围 2km 换算单位为1/4096m */
84
85 #define FTM_FRAME_TOD_LENGTH 6
86 #define FTM_FRAME_TOA_LENGTH 6
87 #define FTM_FRAME_TOD_ERROR_LENGTH 2
88 #define FTM_FRAME_TOA_ERROR_LENGTH 2
89 #define FTM_TMIE_MASK 0xFFFFFFFFFFFF /* 48位 */
90
91 /* 默认ftm交互的参数 */
92 /* 一个会话ftm的帧 */
93 #define FTM_PER_BURST 2
94 /* FTM帧之间的间隙 */
95 #define FTM_MIN_DELTA 200 /* 单位100us,即20ms */
96 /* FTM 一个会话中ftm有效交互时间 */
97 #define FTM_BURST_DURATION 15 /* No preference */ // 11 /*128ms*/
98 /* FTM 一个会话时间 */
99 #define FTM_BURST_PERIOD 4 /* 单位100ms,即400ms */
100 /* FTM 时钟同步时,t1时间记录点(每个回合的第二帧) */
101 #define FTM_TIME_SYNC_FTM2 2
102 /* 最大FTM同时在线的会话 */
103 #define MAX_FTM_SESSION 8
104 /* 默认FTM同时在线的会话 */
105 #define DEFAULT_FTM_SESSION 4
106
107 /*****************************************************************************
108 枚举定义
109 *****************************************************************************/
110 typedef enum {
111 MAC_FTM_DISABLE_MODE = 0,
112 MAC_FTM_RESPONDER_MODE = 1,
113 MAC_FTM_INITIATOR_MODE = 2,
114 MAC_FTM_MIX_MODE = 3,
115
116 MAC_FTM_MODE_BUTT,
117 } mac_ftm_mode_enum;
118 typedef osal_u8 mac_ftm_mode_enum_uint8;
119
120 typedef enum {
121 FTM_BW_20M = 0,
122 FTM_BW_40M = 1,
123 FTM_BW_80M = 2,
124 FTM_BW_160M = 3,
125
126 FTM_BW_BUTT,
127 } ftm_time_enum;
128
129 typedef enum {
130 FTM_FORMAT_NO_PREFERENCE = 0,
131 FTM_FORMAT_NO_HT_5M = 4,
132 FTM_FORMAT_NO_HT_10M = 6,
133 FTM_FORMAT_NO_HT_20M = 8,
134 FTM_FORMAT_HT_MIXED_20M,
135 FTM_FORMAT_VHT_20M,
136 FTM_FORMAT_HT_MIXED_40M,
137 FTM_FORMAT_VHT_40M,
138 FTM_FORMAT_VHT_80M,
139 FTM_FORMAT_VHT_80PLUS80M,
140 FTM_FORMAT_VHT_160M_TWO_RF,
141 FTM_FORMAT_VHT_160M_SINGLE_RF,
142 FTM_FORMAT_DMG_2160 = 31
143 } ftm_format_and_bandwidth_enum;
144
145 typedef enum {
146 NO_LOCATION = 0,
147 ROOT_AP = 1,
148 REPEATER = 2,
149 STA = 3,
150 LOCATION_TYPE_BUTT
151 } oal_location_type_enum;
152 typedef osal_u8 oal_location_type_enum_uint8;
153
154 typedef struct {
155 osal_u64 t1;
156 osal_u64 t2;
157 osal_u64 t3;
158 osal_u64 t4;
159
160 osal_u8 dialog_token;
161 osal_char rssi_dbm;
162 osal_u8 rsv[2]; /* 保留2个字节用于对齐 */
163
164 union {
165 osal_u32 reg_value;
166 struct {
167 osal_u32 rpt_ftm_phase_incr : 13;
168 osal_u32 reserved0 : 3;
169 osal_u32 rpt_ftm_snr : 13;
170 osal_u32 reserved1 : 3;
171 } reg0;
172 } ftm_rpt_reg0;
173
174 union {
175 osal_u32 reg_value;
176 struct {
177 osal_u32 rpt_ftm_max_power : 13;
178 osal_u32 reserved0 : 3;
179 osal_u32 rpt_ftm_max_pre_power : 13;
180 osal_u32 reserved1 : 3;
181 } reg1;
182 } ftm_rpt_reg1;
183
184 union {
185 osal_u32 reg_value;
186 struct {
187 osal_u32 rpt_ftm_max_next_power : 13;
188 osal_u32 reserved0 : 3;
189 osal_u32 rpt_ftm_max_pre1_power : 13;
190 osal_u32 reserved1 : 3;
191 } reg2;
192 } ftm_rpt_reg2;
193
194 union {
195 osal_u32 reg_value;
196 struct {
197 osal_u32 rpt_ftm_max_pre2_power : 13;
198 osal_u32 reserved0 : 3;
199 osal_u32 rpt_ftm_max_pre3_power : 13;
200 osal_u32 reserved1 : 3;
201 } reg3;
202 } ftm_rpt_reg3;
203
204 union {
205 osal_u32 reg_value;
206 struct {
207 osal_u32 rpt_ftm_max_pre4_power : 13;
208 osal_u32 reserved0 : 3;
209 osal_u32 rpt_ftm_max_pre5_power : 13;
210 osal_u32 reserved1 : 3;
211 } reg4;
212 } ftm_rpt_reg4;
213 } ftm_timer_stru;
214
215 typedef struct {
216 osal_void *hmac_vap;
217 osal_u8 session_id;
218 osal_u8 auc_resv[3]; /* 保留3个字节用于对齐 */
219 } ftm_timeout_arg_stru;
220
221 typedef struct {
222 /* 获取帧体内容 */
223 osal_u16 burst_cnt; /* 回合个数 */
224 osal_u8 min_delta_ftm; /* FTM帧之间的间隙 */
225 osal_u8 burst_duration; /* FTM 一个会话中ftm有效交互时间 */
226
227 osal_u64 time_syn_delta_t1;
228 osal_u8 dialog_token;
229 osal_u8 follow_up_dialog_token;
230 osal_u8 bssid[WLAN_MAC_ADDR_LEN]; /* FTM交互AP的BSSID */
231
232 osal_u32 tsf_sync_info;
233
234 osal_u16 partial_tsf_timer;
235 osal_u16 burst_period; /* FTM 一个会话时间 */
236
237 osal_u8 prot_format : 4; /* 指示 协议类型 */
238 osal_u8 band_cap : 4; /* 指示 带宽 */
239
240 osal_u8 ftms_per_burst : 5; /* 每个回合FTM帧的个数 */
241 osal_u8 asap : 1; /* ?? as soon as posible */
242 osal_u8 en_asap : 1; /* 指示 as soon as posible 能力 */
243
244 /* 命令控制 */
245 osal_u8 ftm_initiator : 1; /* STA that supports fine timing measurement as an initiator */
246 osal_u8 lci_ie : 1; /* 指示 携带LCI Measurement request/response elements */
247 osal_u8 location_civic_ie : 1; /* 指示 携带Location Civic Measurement request/response elements */
248 osal_u8 ftms_per_burst_cmd : 5; /* 命令设置每个回合FTM帧的个数 */
249
250 /* 其他 */
251 osal_u8 iftmr : 1; /* 将要发送的是第一帧ftm req */
252 osal_u8 ftm_trigger : 1; /* 将要发送的是后面ftm req */
253 osal_u8 timer_syn : 1; /* 是否启用同步功能 0:measure disstance 1: time syn */
254 osal_u8 clock_calibrated : 1; /* 标记是否做过时钟校准 */
255 osal_u8 time_syn_count : 5; /* 时钟同步时,接收FTM帧个数 */
256 osal_u32 range; /* 记录本次测量的距离和误差 */
257
258 frw_timeout_stru ftm_tsf_timer; /* ftm回合开始定时器 */
259 frw_timeout_stru ftm_all_burst; /* ftm整个回合时器 */
260 mac_channel_stru channel_ftm; /* FTM交互所在信道 */
261
262 ftm_timer_stru ftm_timer[MAC_FTM_TIMER_CNT]; /* 记录时间 */
263 ftm_timeout_arg_stru arg; /* 定时器超时函数的入参 */
264 } hmac_ftm_initiator_stru;
265
266 typedef struct {
267 /* 获取帧体内容 */
268 osal_u16 burst_cnt; /* 回合个数 */
269 osal_u8 min_delta_ftm; /* FTM帧之间的间隙 */
270 osal_u8 burst_duration; /* FTM 一个会话中ftm有效交互时间 */
271
272 osal_u8 mac_ra[WLAN_MAC_ADDR_LEN];
273 osal_u8 dialog_token;
274 osal_u8 follow_up_dialog_token;
275
276 osal_u16 burst_period; /* FTM 一个会话时间 */
277 osal_u8 dialog_token_ack; /* 指示 发送完成中断对应的ftm帧 */
278 osal_u8 prot_format : 4; /* 指示 协议类型 */
279 osal_u8 band_cap : 4; /* 指示 带宽 */
280
281 osal_u8 ftms_per_burst : 5; /* 每个回合FTM帧的个数 */
282 osal_u8 asap : 1; /* 指示 as soon as posible */
283 osal_u8 received_iftmr : 1; /* 指示 是否接受过第一帧ftm req */
284
285 /* 命令控制 */
286 osal_u8 lci_ie : 1;
287
288 osal_u8 location_civic_ie : 1;
289 osal_u8 ftm_parameters : 1;
290 osal_u8 ftm_synchronization_information : 1;
291 osal_u8 ftm_responder : 1; /* STA that supports fine timing measurement as an responder */
292 osal_u8 resv0 : 4;
293
294 /* 其他 */
295 osal_u8 ftms_per_burst_varied : 5; /* 每个回合FTM帧的个数,用于发送 */
296 osal_u8 resv1 : 3;
297 osal_u8 resv2;
298
299 mac_channel_stru channel_ftm; /* FTM交互所在信道 */
300 frw_timeout_stru ftm_tsf_timer; /* ftm回合开始定时器 */
301 frw_timeout_stru ftm_all_burst; /* ftm整个回合时器 */
302 osal_u64 tod; /* 填写tod */
303 osal_u64 toa; /* 填写toa */
304
305 osal_u16 tod_error; /* 填写tod_error */
306 osal_u16 toa_error; /* 填写toa_error */
307
308 osal_u32 tsf; /* 填写tsf */
309 ftm_timer_stru ftm_timer[MAC_FTM_TIMER_CNT]; /* 记录时间 */
310 ftm_timeout_arg_stru arg; /* 定时器超时函数的入参 */
311 } hmac_ftm_responder_stru;
312
313 typedef struct {
314 osal_u32 measurement_start_time;
315 osal_u8 bssid[WLAN_MAC_ADDR_LEN];
316 osal_u8 resv[2]; /* 保留2个字节用于对齐 */
317 osal_u32 range : 24;
318 osal_u32 max_range_error_exponent : 8;
319 } ftm_range_entry_stru;
320
321 typedef struct {
322 osal_u32 measurement_start_time;
323 osal_u8 bssid[WLAN_MAC_ADDR_LEN];
324 osal_u8 error_code;
325 osal_u8 resv[1]; /* 保留1个字节用于对齐 */
326 } ftm_error_entry_stru;
327
328 typedef struct {
329 osal_u8 range_entry_count;
330 osal_u8 error_entry_count;
331 osal_u8 resv[2]; /* 保留2个字节用于对齐 */
332
333 ftm_range_entry_stru ftm_range_entry[MAX_FTM_RANGE_ENTRY_COUNT];
334 ftm_error_entry_stru ftm_error_entry[MAX_FTM_ERROR_ENTRY_COUNT];
335 } ftm_range_rpt_stru;
336
337 typedef struct {
338 osal_u8 mac[WLAN_MAC_ADDR_LEN];
339 osal_u8 dialog_token;
340 osal_u8 meas_token;
341
342 osal_u16 num_rpt;
343 osal_u16 start_delay;
344
345 osal_u8 bssid[MAX_MINIMUN_AP_COUNT][WLAN_MAC_ADDR_LEN];
346 osal_u8 channel[MAX_MINIMUN_AP_COUNT];
347 osal_u8 minimum_ap_count;
348 osal_u8 resv[1]; /* 保留1个字节用于对齐 */
349 } ftm_range_req_stru;
350
351 typedef struct {
352 hmac_ftm_initiator_stru *ftm_init;
353 hmac_ftm_responder_stru *ftm_rspder;
354 oal_bool_enum_uint8 cali;
355 osal_u8 cali_phy_freq; /* 记录射频校准时,phy时钟频率 */
356 osal_u8 cali_adc_freq; /* 记录射频校准时,adc采样频率 */
357 oal_bool_enum_uint8 auto_bandwidth; /* 使用协商模式和速率发帧,还是OFMD格式和6M速率发帧 */
358 ftm_range_req_stru send_ftm_range; /* 设置ftm range命令 */
359 ftm_range_rpt_stru ftm_range_rpt;
360 osal_s16 add_tsf; /* 认证预留 tsf时间 */
361 osal_u8 initor_session_id;
362 osal_u8 tx_chain_selection;
363 osal_u8 session_num; /* 记录session申请的个数 */
364 osal_u8 auc_resv[3]; /* 保留3个字节用于对齐 */
365
366 osal_u32 ftm_cali_time;
367 } hmac_ftm_stru;
368
369 typedef struct {
370 /* 测距 */
371 osal_u64 ftm_rtt; /* FTM帧传输时间 */
372 osal_u64 distance; /* FTM传输距离 */
373 /* 同步 */
374 osal_u64 t1_delta; /* 两个burst之间的时间 */
375 osal_u64 time_offset; /* 两个设备的时钟偏差 */
376 osal_s64 clock_time; /* 两个设备的晶振偏差 */
377 osal_u8 time_sync; /* 时间同步标志位 */
378 osal_u8 auc_resv[3]; /* 保留3个字节用于对齐 */
379 } hmac_ftm_data_report;
380 /* FTM调试开关相关的结构体 */
381 typedef struct {
382 osal_u8 channel_num;
383 osal_u8 burst_num;
384 oal_bool_enum_uint8 measure_req;
385 osal_u8 ftms_per_burst;
386
387 oal_bool_enum_uint8 asap;
388 osal_u8 resv[1];
389 osal_u8 bssid[WLAN_MAC_ADDR_LEN];
390 } mac_send_iftmr_stru;
391
392 typedef struct {
393 osal_u8 resv[2];
394 osal_u8 mac[WLAN_MAC_ADDR_LEN];
395 } mac_send_ftm_stru;
396
397 typedef struct {
398 oal_bool_enum_uint8 enable;
399 osal_u8 session_num;
400 osal_u8 reserve[2]; /* 预留2字节对齐 */
401 } mac_ftm_enable_stru;
402
403 typedef struct {
404 osal_u8 tx_chain_selection;
405 oal_bool_enum_uint8 is_mimo;
406 osal_u8 reserve[2]; /* 预留2字节对齐 */
407 } ftm_m2s_stru;
408
409 typedef struct {
410 osal_u8 mac[WLAN_MAC_ADDR_LEN];
411 osal_u8 dialog_token;
412 osal_u8 meas_token;
413 osal_u16 num_rpt;
414 osal_u16 start_delay;
415 osal_u8 bssid[MAX_MINIMUN_AP_COUNT][WLAN_MAC_ADDR_LEN];
416 osal_u8 channel[MAX_MINIMUN_AP_COUNT];
417 osal_u8 minimum_ap_count;
418 osal_u8 resv[1];
419 } mac_send_ftm_range_req_stru;
420
421 typedef struct {
422 osal_u32 ftm_correct_time1;
423 osal_u32 ftm_correct_time2;
424 osal_u32 ftm_correct_time3;
425 osal_u32 ftm_correct_time4;
426 } mac_set_ftm_time_stru;
427
428 typedef struct {
429 osal_u32 cmd_bit_map;
430 oal_bool_enum_uint8 ftm_initiator; /* ftm_initiator命令 */
431 oal_bool_enum_uint8 cali; /* FTM 环回 */
432 oal_bool_enum_uint8 auto_bandwidth; /* FTM使能协商带宽发帧 */
433 oal_bool_enum_uint8 ftm_resp; /* ftm_resp命令 */
434 oal_bool_enum_uint8 ftm_range; /* ftm_range命令 */
435 osal_u8 resv[1]; /* 预留1字节对齐 */
436 osal_s16 add_tsf; /* 认证预留 增加的tsf时间 */
437
438 mac_ftm_enable_stru ftm_enable; /* 使能FTM */
439 mac_send_ftm_stru send_ftm; /* 发送ftm命令 */
440 mac_send_iftmr_stru send_iftmr; /* 发送iftmr命令 */
441 mac_set_ftm_time_stru ftm_time; /* 设置ftm校准时间 */
442 mac_send_ftm_range_req_stru send_ftm_range; /* 设置ftm range命令 */
443 ftm_m2s_stru m2s;
444 } mac_ftm_debug_switch_stru;
445
446 /*****************************************************************************
447 函数声明
448 *****************************************************************************/
449 osal_s32 hmac_config_ftm_dbg(hmac_vap_stru *hmac_vap, frw_msg *msg);
450 osal_u32 hmac_config_d2h_ftm_info(const hmac_vap_stru *hmac_vap, const hmac_ftm_data_report *d2h_data);
451 osal_s32 hmac_process_ftm_ack_complete(hmac_vap_stru *hmac_vap, frw_msg *msg);
452 osal_s32 hmac_process_send_ftm_complete(hmac_vap_stru *hmac_vap, frw_msg *msg);
453 osal_u32 hmac_save_tx_ftm_complete_time(hmac_vap_stru *hmac_vap, osal_u8 session_id, osal_u64 ftm_t1,
454 osal_u64 ftm_t4);
455 osal_u32 hmac_process_ftm_ack_complete_process(hmac_ftm_initiator_stru *ftm_init,
456 hmac_vap_stru *hmac_vap, const hal_wlan_ftm_t2t3_rx_event_stru *ftm_t2t3, osal_u8 index);
457 osal_char hmac_ftm_interpolate(osal_u16 right, osal_u16 max, osal_u16 left);
458 osal_u32 hmac_ftm_get_distance(hmac_vap_stru *hmac_vap, osal_u64 *distance, osal_u8 session_id);
459 osal_u32 hmac_ftm_get_delta(hmac_vap_stru *hmac_vap, osal_u8 session_id);
460 osal_u32 hmac_ftm_initor_rx_ftm(hmac_vap_stru *hmac_vap, const oal_netbuf_stru *netbuf);
461 osal_void hmac_ftm_handle_freq(hmac_vap_stru *hmac_vap,
462 osal_u32 *time_sync_enable, osal_u32 *phy_freq, osal_u32 *intp_freq);
463 osal_u32 hmac_check_tx_ftm_complete(hmac_vap_stru *hmac_vap, dmac_tx_ftm_frame_stru *ftm_info);
464 osal_u32 hmac_ftm_initor_send_ftm_req(hmac_vap_stru *hmac_vap, osal_u8 session_id);
465 osal_u32 hmac_ftm_rspder_send_ftm(hmac_vap_stru *hmac_vap, osal_u8 session_id);
466 osal_u32 hmac_ftm_initor_send_trigger(hmac_vap_stru *hmac_vap, osal_u8 session_id);
467 osal_u32 hmac_ftm_initor_wait_start_burst_timeout(osal_void *arg);
468 osal_u16 hmac_encap_ftm_mgmt(hmac_vap_stru *hmac_vap, const oal_netbuf_stru *buffer, osal_u8 session_id);
469 osal_void hmac_ftm_rspder_rx_ftm_req(hmac_vap_stru *hmac_vap, const oal_netbuf_stru *netbuf);
470 osal_void hmac_tx_set_ftm_ctrl_dscr(hmac_vap_stru *hmac_vap, hal_tx_dscr_stru *tx_dscr, const oal_netbuf_stru *netbuf);
471 osal_void hmac_ftm_start_cali(hmac_vap_stru *hmac_vap, wlan_phy_protocol_enum prot_format,
472 wlan_bw_cap_enum band_cap);
473 osal_u32 hmac_set_ftm_correct_time(mac_set_ftm_time_stru ftm_time);
474 osal_u32 hmac_ftm_rspder_set_parameter(hmac_vap_stru *hmac_vap, osal_u8 session_id);
475 osal_void hmac_ftm_initor_start_bust(hmac_vap_stru *hmac_vap, osal_u8 session_id);
476 osal_u32 hmac_vap_ftm_init(hmac_vap_stru *hmac_vap, osal_u8 session_num);
477 osal_void hmac_vap_ftm_deinit(hmac_vap_stru *hmac_vap);
478 osal_s8 hmac_ftm_find_session_index(hmac_vap_stru *hmac_vap, mac_ftm_mode_enum_uint8 ftm_mode,
479 const osal_u8 peer_mac[WLAN_MAC_ADDR_LEN]);
480 osal_void hmac_ftm_enable_session_index(hmac_vap_stru *hmac_vap, mac_ftm_mode_enum_uint8 ftm_mode,
481 const osal_u8 peer_mac[WLAN_MAC_ADDR_LEN], osal_u8 session_id);
482 oal_bool_enum_uint8 hmac_check_ftm_switch_channel(hmac_vap_stru *hmac_vap, osal_u8 chan_number);
483 osal_u32 hmac_ftm_rspder_send(hmac_vap_stru *hmac_vap, const osal_u8 mac[WLAN_MAC_ADDR_LEN],
484 wlan_phy_protocol_enum prot_format, wlan_bw_cap_enum band_cap);
485 wlan_phy_protocol_enum_uint8 hmac_ftm_get_phy_mode(wlan_protocol_enum_uint8 protocol,
486 wlan_channel_band_enum_uint8 band);
487 wlan_bw_cap_enum_uint8 hmac_ftm_get_band_cap(wlan_channel_bandwidth_enum_uint8 en_bandwidth);
488 osal_u32 hmac_ftm_initor_send(hmac_vap_stru *hmac_vap, mac_send_iftmr_stru *send_iftmr);
489 osal_void hmac_ftm_initor_wait_end_ftm(hmac_vap_stru *hmac_vap, osal_u8 session_id);
490 osal_void hmac_ftm_initor_end_session(hmac_ftm_initiator_stru *ftm_init);
491 osal_void hmac_ftm_rspder_end_session(hmac_ftm_responder_stru *ftm_rspder);
492 osal_void hmac_ftm_get_cali(hmac_vap_stru *hmac_vap, osal_u32 phy_freq, osal_u32 intp_freq);
493 osal_void hmac_set_ftm_m2s(hmac_vap_stru *hmac_vap, ftm_m2s_stru m2s);
494
495 osal_u32 hmac_save_ftm_range(hmac_vap_stru *hmac_vap, osal_u8 session_id);
496 osal_u32 hmac_ftm_rrm_proc_rm_request(hmac_vap_stru *hmac_vap, oal_netbuf_stru *netbuf);
497 osal_u32 hmac_save_error_ftm_session(hmac_vap_stru *hmac_vap, mac_ftm_parameters_ie_stru *mac_ftmp,
498 osal_u8 session_id, osal_u8 *data);
499 osal_u32 hmac_send_ftm_range_req(hmac_vap_stru *hmac_vap, mac_send_ftm_range_req_stru *ftm_range);
500 osal_u32 hmac_send_ftm_req_adjust_param(hmac_vap_stru *hmac_vap, hmac_ftm_initiator_stru *ftm_init,
501 osal_u8 session_id);
502
mac_check_ftm_enable(const hmac_vap_stru * hmac_vap)503 static INLINE__ mac_ftm_mode_enum_uint8 mac_check_ftm_enable(const hmac_vap_stru *hmac_vap)
504 {
505 if ((mac_mib_get_fine_timing_msmt_init_activated(hmac_vap) == OSAL_FALSE) &&
506 (mac_mib_get_fine_timing_msmt_resp_activated(hmac_vap) == OSAL_FALSE)) {
507 return MAC_FTM_DISABLE_MODE;
508 } else if ((mac_mib_get_fine_timing_msmt_init_activated(hmac_vap) == OSAL_FALSE) &&
509 (mac_mib_get_fine_timing_msmt_resp_activated(hmac_vap) == OSAL_TRUE)) {
510 return MAC_FTM_RESPONDER_MODE;
511 } else if ((mac_mib_get_fine_timing_msmt_init_activated(hmac_vap) == OSAL_TRUE) &&
512 (mac_mib_get_fine_timing_msmt_resp_activated(hmac_vap) == OSAL_FALSE)) {
513 return MAC_FTM_INITIATOR_MODE;
514 } else {
515 return MAC_FTM_MIX_MODE;
516 }
517 }
518 #endif /* _PRE_WLAN_FEATURE_FTM */
519
520 #ifdef __cplusplus
521 #if __cplusplus
522 }
523 #endif
524 #endif
525
526 #endif /* end of hmac_ftm.h */
527