dhd_rtt.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. /*
  2. * Broadcom Dongle Host Driver (DHD), RTT
  3. *
  4. * Portions of this code are copyright (c) 2020 Cypress Semiconductor Corporation
  5. *
  6. * Copyright (C) 1999-2020, Broadcom Corporation
  7. *
  8. * Unless you and Broadcom execute a separate written software license
  9. * agreement governing use of this software, this software is licensed to you
  10. * under the terms of the GNU General Public License version 2 (the "GPL"),
  11. * available at http://www.broadcom.com/licenses/GPLv2.php, with the
  12. * following added to such license:
  13. *
  14. * As a special exception, the copyright holders of this software give you
  15. * permission to link this software with independent modules, and to copy and
  16. * distribute the resulting executable under terms of your choice, provided that
  17. * you also meet, for each linked independent module, the terms and conditions of
  18. * the license of that module. An independent module is a module which is not
  19. * derived from this software. The special exception does not apply to any
  20. * modifications of the software.
  21. *
  22. * Notwithstanding the above, under no circumstances may you combine this
  23. * software in any way with any other Broadcom software provided under a license
  24. * other than the GPL, without Broadcom's express prior written consent.
  25. *
  26. *
  27. * <<Broadcom-WL-IPTag/Open:>>
  28. *
  29. * $Id$
  30. */
  31. #ifndef __DHD_RTT_H__
  32. #define __DHD_RTT_H__
  33. #include "dngl_stats.h"
  34. #define RTT_MAX_TARGET_CNT 50
  35. #define RTT_MAX_FRAME_CNT 25
  36. #define RTT_MAX_RETRY_CNT 10
  37. #define DEFAULT_FTM_CNT 6
  38. #define DEFAULT_RETRY_CNT 6
  39. #define DEFAULT_FTM_FREQ 5180
  40. #define DEFAULT_FTM_CNTR_FREQ0 5210
  41. #define RTT_MAX_GEOFENCE_TARGET_CNT 8
  42. #define TARGET_INFO_SIZE(count) (sizeof(rtt_target_info_t) * count)
  43. #define TARGET_TYPE(target) (target->type)
  44. #define RTT_IS_ENABLED(rtt_status) (rtt_status->status == RTT_ENABLED)
  45. #define RTT_IS_STOPPED(rtt_status) (rtt_status->status == RTT_STOPPED)
  46. #ifndef BIT
  47. #define BIT(x) (1 << (x))
  48. #endif // endif
  49. /* DSSS, CCK and 802.11n rates in [500kbps] units */
  50. #define WL_MAXRATE 108 /* in 500kbps units */
  51. #define WL_RATE_1M 2 /* in 500kbps units */
  52. #define WL_RATE_2M 4 /* in 500kbps units */
  53. #define WL_RATE_5M5 11 /* in 500kbps units */
  54. #define WL_RATE_11M 22 /* in 500kbps units */
  55. #define WL_RATE_6M 12 /* in 500kbps units */
  56. #define WL_RATE_9M 18 /* in 500kbps units */
  57. #define WL_RATE_12M 24 /* in 500kbps units */
  58. #define WL_RATE_18M 36 /* in 500kbps units */
  59. #define WL_RATE_24M 48 /* in 500kbps units */
  60. #define WL_RATE_36M 72 /* in 500kbps units */
  61. #define WL_RATE_48M 96 /* in 500kbps units */
  62. #define WL_RATE_54M 108 /* in 500kbps units */
  63. #define GET_RTTSTATE(dhd) ((rtt_status_info_t *)dhd->rtt_state)
  64. /* RTT Retry Timer Interval */
  65. #define DHD_RTT_RETRY_TIMER_INTERVAL_MS 3000u
  66. #define DHD_RTT_INVALID_TARGET_INDEX -1
  67. enum rtt_role {
  68. RTT_INITIATOR = 0,
  69. RTT_TARGET = 1
  70. };
  71. enum rtt_status {
  72. RTT_STOPPED = 0,
  73. RTT_STARTED = 1,
  74. RTT_ENABLED = 2
  75. };
  76. typedef int64_t wifi_timestamp; /* In microseconds (us) */
  77. typedef int64_t wifi_timespan;
  78. typedef int32 wifi_rssi_rtt;
  79. typedef enum {
  80. RTT_INVALID,
  81. RTT_ONE_WAY,
  82. RTT_TWO_WAY,
  83. RTT_AUTO
  84. } rtt_type_t;
  85. /* RTT peer type */
  86. typedef enum {
  87. RTT_PEER_AP = 0x1,
  88. RTT_PEER_STA = 0x2,
  89. RTT_PEER_P2P_GO = 0x3,
  90. RTT_PEER_P2P_CLIENT = 0x4,
  91. RTT_PEER_NAN = 0x5,
  92. RTT_PEER_INVALID = 0x6
  93. } rtt_peer_type_t;
  94. /* Ranging status */
  95. typedef enum rtt_reason {
  96. RTT_STATUS_SUCCESS = 0,
  97. RTT_STATUS_FAILURE = 1, // general failure status
  98. RTT_STATUS_FAIL_NO_RSP = 2, // target STA does not respond to request
  99. RTT_STATUS_FAIL_REJECTED = 3, // request rejected. Applies to 2-sided RTT only
  100. RTT_STATUS_FAIL_NOT_SCHEDULED_YET = 4,
  101. RTT_STATUS_FAIL_TM_TIMEOUT = 5, // timing measurement times out
  102. RTT_STATUS_FAIL_AP_ON_DIFF_CHANNEL = 6, // Target on different channel, cannot range
  103. RTT_STATUS_FAIL_NO_CAPABILITY = 7, // ranging not supported
  104. RTT_STATUS_ABORTED = 8, // request aborted for unknown reason
  105. RTT_STATUS_FAIL_INVALID_TS = 9, // Invalid T1-T4 timestamp
  106. RTT_STATUS_FAIL_PROTOCOL = 10, // 11mc protocol failed
  107. RTT_STATUS_FAIL_SCHEDULE = 11, // request could not be scheduled
  108. RTT_STATUS_FAIL_BUSY_TRY_LATER = 12, // responder cannot collaborate at time of request
  109. RTT_STATUS_INVALID_REQ = 13, // bad request args
  110. RTT_STATUS_NO_WIFI = 14, // WiFi not enabled Responder overrides param info
  111. // cannot range with new params
  112. RTT_STATUS_FAIL_FTM_PARAM_OVERRIDE = 15
  113. } rtt_reason_t;
  114. enum {
  115. RTT_CAP_ONE_WAY = BIT(0),
  116. /* IEEE802.11mc */
  117. RTT_CAP_FTM_WAY = BIT(1)
  118. };
  119. enum {
  120. RTT_FEATURE_LCI = BIT(0),
  121. RTT_FEATURE_LCR = BIT(1),
  122. RTT_FEATURE_PREAMBLE = BIT(2),
  123. RTT_FEATURE_BW = BIT(3)
  124. };
  125. enum {
  126. RTT_PREAMBLE_LEGACY = BIT(0),
  127. RTT_PREAMBLE_HT = BIT(1),
  128. RTT_PREAMBLE_VHT = BIT(2)
  129. };
  130. enum {
  131. RTT_BW_5 = BIT(0),
  132. RTT_BW_10 = BIT(1),
  133. RTT_BW_20 = BIT(2),
  134. RTT_BW_40 = BIT(3),
  135. RTT_BW_80 = BIT(4),
  136. RTT_BW_160 = BIT(5)
  137. };
  138. enum rtt_rate_bw {
  139. RTT_RATE_20M,
  140. RTT_RATE_40M,
  141. RTT_RATE_80M,
  142. RTT_RATE_160M
  143. };
  144. typedef enum ranging_type {
  145. RTT_TYPE_INVALID = 0,
  146. RTT_TYPE_LEGACY = 1,
  147. RTT_TYPE_NAN_DIRECTED = 2,
  148. RTT_TYPE_NAN_GEOFENCE = 3
  149. } ranging_type_t;
  150. #define FTM_MAX_NUM_BURST_EXP 14
  151. #define HAS_11MC_CAP(cap) (cap & RTT_CAP_FTM_WAY)
  152. #define HAS_ONEWAY_CAP(cap) (cap & RTT_CAP_ONE_WAY)
  153. #define HAS_RTT_CAP(cap) (HAS_ONEWAY_CAP(cap) || HAS_11MC_CAP(cap))
  154. typedef struct wifi_channel_info {
  155. wifi_channel_width_t width;
  156. wifi_channel center_freq; /* primary 20 MHz channel */
  157. wifi_channel center_freq0; /* center freq (MHz) first segment */
  158. wifi_channel center_freq1; /* center freq (MHz) second segment valid for 80 + 80 */
  159. } wifi_channel_info_t;
  160. typedef struct wifi_rate {
  161. uint32 preamble :3; /* 0: OFDM, 1: CCK, 2 : HT, 3: VHT, 4..7 reserved */
  162. uint32 nss :2; /* 1 : 1x1, 2: 2x2, 3: 3x3, 4: 4x4 */
  163. uint32 bw :3; /* 0: 20Mhz, 1: 40Mhz, 2: 80Mhz, 3: 160Mhz */
  164. /* OFDM/CCK rate code would be as per IEEE std in the unit of 0.5 mb
  165. * HT/VHT it would be mcs index
  166. */
  167. uint32 rateMcsIdx :8;
  168. uint32 reserved :16; /* reserved */
  169. uint32 bitrate; /* unit of 100 Kbps */
  170. } wifi_rate_t;
  171. typedef struct rtt_target_info {
  172. struct ether_addr addr;
  173. struct ether_addr local_addr;
  174. rtt_type_t type; /* rtt_type */
  175. rtt_peer_type_t peer; /* peer type */
  176. wifi_channel_info_t channel; /* channel information */
  177. chanspec_t chanspec; /* chanspec for channel */
  178. bool disable; /* disable for RTT measurement */
  179. /*
  180. * Time interval between bursts (units: 100 ms).
  181. * Applies to 1-sided and 2-sided RTT multi-burst requests.
  182. * Range: 0-31, 0: no preference by initiator (2-sided RTT)
  183. */
  184. uint32 burst_period;
  185. /*
  186. * Total number of RTT bursts to be executed. It will be
  187. * specified in the same way as the parameter "Number of
  188. * Burst Exponent" found in the FTM frame format. It
  189. * applies to both: 1-sided RTT and 2-sided RTT. Valid
  190. * values are 0 to 15 as defined in 802.11mc std.
  191. * 0 means single shot
  192. * The implication of this parameter on the maximum
  193. * number of RTT results is the following:
  194. * for 1-sided RTT: max num of RTT results = (2^num_burst)*(num_frames_per_burst)
  195. * for 2-sided RTT: max num of RTT results = (2^num_burst)*(num_frames_per_burst - 1)
  196. */
  197. uint16 num_burst;
  198. /*
  199. * num of frames per burst.
  200. * Minimum value = 1, Maximum value = 31
  201. * For 2-sided this equals the number of FTM frames
  202. * to be attempted in a single burst. This also
  203. * equals the number of FTM frames that the
  204. * initiator will request that the responder send
  205. * in a single frame
  206. */
  207. uint32 num_frames_per_burst;
  208. /*
  209. * num of frames in each RTT burst
  210. * for single side, measurement result num = frame number
  211. * for 2 side RTT, measurement result num = frame number - 1
  212. */
  213. uint32 num_retries_per_ftm; /* retry time for RTT measurment frame */
  214. /* following fields are only valid for 2 side RTT */
  215. uint32 num_retries_per_ftmr;
  216. uint8 LCI_request;
  217. uint8 LCR_request;
  218. /*
  219. * Applies to 1-sided and 2-sided RTT. Valid values will
  220. * be 2-11 and 15 as specified by the 802.11mc std for
  221. * the FTM parameter burst duration. In a multi-burst
  222. * request, if responder overrides with larger value,
  223. * the initiator will return failure. In a single-burst
  224. * request if responder overrides with larger value,
  225. * the initiator will sent TMR_STOP to terminate RTT
  226. * at the end of the burst_duration it requested.
  227. */
  228. uint32 burst_duration;
  229. uint32 burst_timeout;
  230. uint8 preamble; /* 1 - Legacy, 2 - HT, 4 - VHT */
  231. uint8 bw; /* 5, 10, 20, 40, 80, 160 */
  232. } rtt_target_info_t;
  233. typedef struct rtt_goefence_target_info {
  234. bool valid;
  235. struct ether_addr peer_addr;
  236. } rtt_geofence_target_info_t;
  237. typedef struct rtt_config_params {
  238. int8 rtt_target_cnt;
  239. rtt_target_info_t *target_info;
  240. } rtt_config_params_t;
  241. typedef struct rtt_geofence_cfg {
  242. int8 geofence_target_cnt;
  243. bool rtt_in_progress;
  244. bool role_concurr_state;
  245. int8 cur_target_idx;
  246. rtt_geofence_target_info_t geofence_target_info[RTT_MAX_GEOFENCE_TARGET_CNT];
  247. } rtt_geofence_cfg_t;
  248. /*
  249. * Keep Adding more reasons
  250. * going forward if needed
  251. */
  252. enum rtt_schedule_reason {
  253. RTT_SCHED_HOST_TRIGGER = 1, /* On host command for directed RTT */
  254. RTT_SCHED_SUB_MATCH = 2, /* on Sub Match for svc with range req */
  255. RTT_SCHED_DIR_TRIGGER_FAIL = 3, /* On failure of Directed RTT Trigger */
  256. RTT_SCHED_DP_END = 4, /* ON NDP End event from fw */
  257. RTT_SCHED_DP_REJECTED = 5, /* On receving reject dp event from fw */
  258. RTT_SCHED_RNG_RPT_DIRECTED = 6, /* On Ranging report for directed RTT */
  259. RTT_SCHED_RNG_TERM = 7, /* On Range Term Indicator */
  260. RTT_SHCED_HOST_DIRECTED_TERM = 8, /* On host terminating directed RTT sessions */
  261. RTT_SCHED_RNG_RPT_GEOFENCE = 9, /* On Ranging report for geofence RTT */
  262. RTT_SCHED_RTT_RETRY_GEOFENCE = 10 /* On Geofence Retry */
  263. };
  264. /*
  265. * Keep Adding more invalid RTT states
  266. * going forward if needed
  267. */
  268. enum rtt_invalid_state {
  269. RTT_STATE_VALID = 0, /* RTT state is valid */
  270. RTT_STATE_INV_REASON_NDP_EXIST = 1 /* RTT state invalid as ndp exists */
  271. };
  272. typedef struct rtt_status_info {
  273. dhd_pub_t *dhd;
  274. int8 status; /* current status for the current entry */
  275. int8 txchain; /* current device tx chain */
  276. int pm; /* to save current value of pm */
  277. int8 pm_restore; /* flag to reset the old value of pm */
  278. int8 cur_idx; /* current entry to do RTT */
  279. bool all_cancel; /* cancel all request once we got the cancel requet */
  280. uint32 flags; /* indicate whether device is configured as initiator or target */
  281. struct capability {
  282. int32 proto :8;
  283. int32 feature :8;
  284. int32 preamble :8;
  285. int32 bw :8;
  286. } rtt_capa; /* rtt capability */
  287. struct mutex rtt_mutex;
  288. struct mutex geofence_mutex;
  289. rtt_config_params_t rtt_config;
  290. rtt_geofence_cfg_t geofence_cfg;
  291. struct work_struct work;
  292. struct list_head noti_fn_list;
  293. struct list_head rtt_results_cache; /* store results for RTT */
  294. int rtt_sched_reason; /* rtt_schedule_reason: what scheduled RTT */
  295. struct delayed_work proxd_timeout; /* Proxd Timeout work */
  296. struct delayed_work rtt_retry_timer; /* Timer for retry RTT after all targets done */
  297. } rtt_status_info_t;
  298. typedef struct rtt_report {
  299. struct ether_addr addr;
  300. unsigned int burst_num; /* # of burst inside a multi-burst request */
  301. unsigned int ftm_num; /* total RTT measurement frames attempted */
  302. unsigned int success_num; /* total successful RTT measurement frames */
  303. uint8 num_per_burst_peer; /* max number of FTM number per burst the peer support */
  304. rtt_reason_t status; /* raging status */
  305. /* in s, 11mc only, only for RTT_REASON_FAIL_BUSY_TRY_LATER, 1- 31s */
  306. uint8 retry_after_duration;
  307. rtt_type_t type; /* rtt type */
  308. wifi_rssi_rtt rssi; /* average rssi in 0.5 dB steps e.g. 143 implies -71.5 dB */
  309. wifi_rssi_rtt rssi_spread; /* rssi spread in 0.5 db steps e.g. 5 implies 2.5 spread */
  310. /*
  311. * 1-sided RTT: TX rate of RTT frame.
  312. * 2-sided RTT: TX rate of initiator's Ack in response to FTM frame.
  313. */
  314. wifi_rate_t tx_rate;
  315. /*
  316. * 1-sided RTT: TX rate of Ack from other side.
  317. * 2-sided RTT: TX rate of FTM frame coming from responder.
  318. */
  319. wifi_rate_t rx_rate;
  320. wifi_timespan rtt; /* round trip time in 0.1 nanoseconds */
  321. wifi_timespan rtt_sd; /* rtt standard deviation in 0.1 nanoseconds */
  322. wifi_timespan rtt_spread; /* difference between max and min rtt times recorded */
  323. int distance; /* distance in cm (optional) */
  324. int distance_sd; /* standard deviation in cm (optional) */
  325. int distance_spread; /* difference between max and min distance recorded (optional) */
  326. wifi_timestamp ts; /* time of the measurement (in microseconds since boot) */
  327. int burst_duration; /* in ms, how long the FW time is to fininish one burst measurement */
  328. int negotiated_burst_num; /* Number of bursts allowed by the responder */
  329. bcm_tlv_t *LCI; /* LCI Report */
  330. bcm_tlv_t *LCR; /* Location Civic Report */
  331. } rtt_report_t;
  332. #define RTT_REPORT_SIZE (sizeof(rtt_report_t))
  333. /* rtt_results_header to maintain rtt result list per mac address */
  334. typedef struct rtt_results_header {
  335. struct ether_addr peer_mac;
  336. uint32 result_cnt;
  337. uint32 result_tot_len; /* sum of report_len of rtt_result */
  338. struct list_head list;
  339. struct list_head result_list;
  340. } rtt_results_header_t;
  341. struct rtt_result_detail {
  342. uint8 num_ota_meas;
  343. uint32 result_flags;
  344. };
  345. /* rtt_result to link all of rtt_report */
  346. typedef struct rtt_result {
  347. struct list_head list;
  348. struct rtt_report report;
  349. int32 report_len; /* total length of rtt_report */
  350. struct rtt_result_detail rtt_detail;
  351. int32 detail_len;
  352. } rtt_result_t;
  353. /* RTT Capabilities */
  354. typedef struct rtt_capabilities {
  355. uint8 rtt_one_sided_supported; /* if 1-sided rtt data collection is supported */
  356. uint8 rtt_ftm_supported; /* if ftm rtt data collection is supported */
  357. uint8 lci_support; /* location configuration information */
  358. uint8 lcr_support; /* Civic Location */
  359. uint8 preamble_support; /* bit mask indicate what preamble is supported */
  360. uint8 bw_support; /* bit mask indicate what BW is supported */
  361. } rtt_capabilities_t;
  362. /* RTT responder information */
  363. typedef struct wifi_rtt_responder {
  364. wifi_channel_info channel; /* channel of responder */
  365. uint8 preamble; /* preamble supported by responder */
  366. } wifi_rtt_responder_t;
  367. typedef void (*dhd_rtt_compl_noti_fn)(void *ctx, void *rtt_data);
  368. /* Linux wrapper to call common dhd_rtt_set_cfg */
  369. int
  370. dhd_dev_rtt_set_cfg(struct net_device *dev, void *buf);
  371. int
  372. dhd_dev_rtt_cancel_cfg(struct net_device *dev, struct ether_addr *mac_list, int mac_cnt);
  373. int
  374. dhd_dev_rtt_register_noti_callback(struct net_device *dev, void *ctx,
  375. dhd_rtt_compl_noti_fn noti_fn);
  376. int
  377. dhd_dev_rtt_unregister_noti_callback(struct net_device *dev, dhd_rtt_compl_noti_fn noti_fn);
  378. int
  379. dhd_dev_rtt_capability(struct net_device *dev, rtt_capabilities_t *capa);
  380. int
  381. dhd_dev_rtt_avail_channel(struct net_device *dev, wifi_channel_info *channel_info);
  382. int
  383. dhd_dev_rtt_enable_responder(struct net_device *dev, wifi_channel_info *channel_info);
  384. int
  385. dhd_dev_rtt_cancel_responder(struct net_device *dev);
  386. /* export to upper layer */
  387. chanspec_t
  388. dhd_rtt_convert_to_chspec(wifi_channel_info_t channel);
  389. int
  390. dhd_rtt_idx_to_burst_duration(uint idx);
  391. int
  392. dhd_rtt_set_cfg(dhd_pub_t *dhd, rtt_config_params_t *params);
  393. void dhd_rtt_set_role_concurrency_state(dhd_pub_t *dhd, bool state);
  394. bool dhd_rtt_get_role_concurrency_state(dhd_pub_t *dhd);
  395. int8 dhd_rtt_get_geofence_target_cnt(dhd_pub_t *dhd);
  396. #ifdef WL_NAN
  397. void dhd_rtt_set_geofence_rtt_state(dhd_pub_t *dhd, bool state);
  398. bool dhd_rtt_get_geofence_rtt_state(dhd_pub_t *dhd);
  399. rtt_geofence_target_info_t*
  400. dhd_rtt_get_geofence_target_head(dhd_pub_t *dhd);
  401. rtt_geofence_target_info_t*
  402. dhd_rtt_get_geofence_current_target(dhd_pub_t *dhd);
  403. rtt_geofence_target_info_t*
  404. dhd_rtt_get_geofence_target(dhd_pub_t *dhd, struct ether_addr* peer_addr,
  405. int8 *index);
  406. int
  407. dhd_rtt_add_geofence_target(dhd_pub_t *dhd, rtt_geofence_target_info_t *target);
  408. int
  409. dhd_rtt_remove_geofence_target(dhd_pub_t *dhd, struct ether_addr *peer_addr);
  410. int
  411. dhd_rtt_delete_geofence_target_list(dhd_pub_t *dhd);
  412. int
  413. dhd_rtt_delete_nan_session(dhd_pub_t *dhd);
  414. #endif /* WL_NAN */
  415. uint8
  416. dhd_rtt_invalid_states(struct net_device *ndev, struct ether_addr *peer_addr);
  417. void
  418. dhd_rtt_schedule_rtt_work_thread(dhd_pub_t *dhd, int sched_reason);
  419. int
  420. dhd_rtt_stop(dhd_pub_t *dhd, struct ether_addr *mac_list, int mac_cnt);
  421. int
  422. dhd_rtt_register_noti_callback(dhd_pub_t *dhd, void *ctx, dhd_rtt_compl_noti_fn noti_fn);
  423. int
  424. dhd_rtt_unregister_noti_callback(dhd_pub_t *dhd, dhd_rtt_compl_noti_fn noti_fn);
  425. int
  426. dhd_rtt_event_handler(dhd_pub_t *dhd, wl_event_msg_t *event, void *event_data);
  427. int
  428. dhd_rtt_capability(dhd_pub_t *dhd, rtt_capabilities_t *capa);
  429. int
  430. dhd_rtt_avail_channel(dhd_pub_t *dhd, wifi_channel_info *channel_info);
  431. int
  432. dhd_rtt_enable_responder(dhd_pub_t *dhd, wifi_channel_info *channel_info);
  433. int
  434. dhd_rtt_cancel_responder(dhd_pub_t *dhd);
  435. int
  436. dhd_rtt_init(dhd_pub_t *dhd);
  437. int
  438. dhd_rtt_deinit(dhd_pub_t *dhd);
  439. #ifdef WL_CFG80211
  440. int dhd_rtt_handle_nan_rtt_session_end(dhd_pub_t *dhd,
  441. struct ether_addr *peer);
  442. void dhd_rtt_move_geofence_cur_target_idx_to_next(dhd_pub_t *dhd);
  443. int8 dhd_rtt_get_geofence_cur_target_idx(dhd_pub_t *dhd);
  444. #endif /* WL_CFG80211 */
  445. #endif /* __DHD_RTT_H__ */