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