| .. | .. |
|---|
| 1 | | -/* SPDX-License-Identifier: GPL-2.0 */ |
|---|
| 2 | 1 | /* |
|---|
| 3 | 2 | * Broadcom Dongle Host Driver (DHD), RTT |
|---|
| 4 | 3 | * |
|---|
| 5 | | - * Copyright (C) 1999-2019, Broadcom Corporation |
|---|
| 6 | | - * |
|---|
| 4 | + * Portions of this code are copyright (c) 2022 Cypress Semiconductor Corporation |
|---|
| 5 | + * |
|---|
| 6 | + * Copyright (C) 1999-2017, Broadcom Corporation |
|---|
| 7 | + * |
|---|
| 7 | 8 | * Unless you and Broadcom execute a separate written software license |
|---|
| 8 | 9 | * agreement governing use of this software, this software is licensed to you |
|---|
| 9 | 10 | * under the terms of the GNU General Public License version 2 (the "GPL"), |
|---|
| 10 | 11 | * available at http://www.broadcom.com/licenses/GPLv2.php, with the |
|---|
| 11 | 12 | * following added to such license: |
|---|
| 12 | | - * |
|---|
| 13 | + * |
|---|
| 13 | 14 | * As a special exception, the copyright holders of this software give you |
|---|
| 14 | 15 | * permission to link this software with independent modules, and to copy and |
|---|
| 15 | 16 | * distribute the resulting executable under terms of your choice, provided that |
|---|
| .. | .. |
|---|
| 17 | 18 | * the license of that module. An independent module is a module which is not |
|---|
| 18 | 19 | * derived from this software. The special exception does not apply to any |
|---|
| 19 | 20 | * modifications of the software. |
|---|
| 20 | | - * |
|---|
| 21 | + * |
|---|
| 21 | 22 | * Notwithstanding the above, under no circumstances may you combine this |
|---|
| 22 | 23 | * software in any way with any other Broadcom software provided under a license |
|---|
| 23 | 24 | * other than the GPL, without Broadcom's express prior written consent. |
|---|
| 24 | 25 | * |
|---|
| 25 | | - * $Id: dhd_rtt.h 578013 2015-08-10 05:56:41Z $ |
|---|
| 26 | + * |
|---|
| 27 | + * <<Broadcom-WL-IPTag/Open:>> |
|---|
| 28 | + * |
|---|
| 29 | + * $Id$ |
|---|
| 26 | 30 | */ |
|---|
| 27 | 31 | #ifndef __DHD_RTT_H__ |
|---|
| 28 | 32 | #define __DHD_RTT_H__ |
|---|
| 29 | 33 | |
|---|
| 30 | 34 | #include "dngl_stats.h" |
|---|
| 31 | 35 | |
|---|
| 32 | | -#define RTT_MAX_TARGET_CNT 50 |
|---|
| 33 | | -#define RTT_MAX_FRAME_CNT 25 |
|---|
| 34 | | -#define RTT_MAX_RETRY_CNT 10 |
|---|
| 35 | | -#define DEFAULT_FTM_CNT 6 |
|---|
| 36 | | -#define DEFAULT_RETRY_CNT 6 |
|---|
| 36 | +#define RTT_MAX_TARGET_CNT 50 |
|---|
| 37 | +#define RTT_MAX_FRAME_CNT 25 |
|---|
| 38 | +#define RTT_MAX_RETRY_CNT 10 |
|---|
| 39 | +#define DEFAULT_FTM_CNT 6 |
|---|
| 40 | +#define DEFAULT_RETRY_CNT 6 |
|---|
| 41 | +#define DEFAULT_FTM_FREQ 5180 |
|---|
| 42 | +#define DEFAULT_FTM_CNTR_FREQ0 5210 |
|---|
| 43 | +#define RTT_MAX_GEOFENCE_TARGET_CNT 8 |
|---|
| 44 | + |
|---|
| 37 | 45 | #define TARGET_INFO_SIZE(count) (sizeof(rtt_target_info_t) * count) |
|---|
| 38 | 46 | |
|---|
| 39 | 47 | #define TARGET_TYPE(target) (target->type) |
|---|
| 40 | 48 | |
|---|
| 49 | +#define RTT_IS_ENABLED(rtt_status) (rtt_status->status == RTT_ENABLED) |
|---|
| 50 | +#define RTT_IS_STOPPED(rtt_status) (rtt_status->status == RTT_STOPPED) |
|---|
| 51 | + |
|---|
| 41 | 52 | #ifndef BIT |
|---|
| 42 | 53 | #define BIT(x) (1 << (x)) |
|---|
| 43 | | -#endif |
|---|
| 54 | +#endif // endif |
|---|
| 44 | 55 | |
|---|
| 45 | 56 | /* DSSS, CCK and 802.11n rates in [500kbps] units */ |
|---|
| 46 | 57 | #define WL_MAXRATE 108 /* in 500kbps units */ |
|---|
| .. | .. |
|---|
| 56 | 67 | #define WL_RATE_36M 72 /* in 500kbps units */ |
|---|
| 57 | 68 | #define WL_RATE_48M 96 /* in 500kbps units */ |
|---|
| 58 | 69 | #define WL_RATE_54M 108 /* in 500kbps units */ |
|---|
| 70 | +#define GET_RTTSTATE(dhd) ((rtt_status_info_t *)dhd->rtt_state) |
|---|
| 59 | 71 | |
|---|
| 72 | +/* RTT Retry Timer Interval */ |
|---|
| 73 | +#define DHD_RTT_RETRY_TIMER_INTERVAL_MS 3000u |
|---|
| 74 | + |
|---|
| 75 | +#define DHD_RTT_INVALID_TARGET_INDEX -1 |
|---|
| 60 | 76 | |
|---|
| 61 | 77 | enum rtt_role { |
|---|
| 62 | 78 | RTT_INITIATOR = 0, |
|---|
| 63 | 79 | RTT_TARGET = 1 |
|---|
| 64 | 80 | }; |
|---|
| 65 | | - |
|---|
| 66 | 81 | enum rtt_status { |
|---|
| 67 | 82 | RTT_STOPPED = 0, |
|---|
| 68 | 83 | RTT_STARTED = 1, |
|---|
| 69 | 84 | RTT_ENABLED = 2 |
|---|
| 70 | 85 | }; |
|---|
| 71 | | - |
|---|
| 72 | 86 | typedef int64_t wifi_timestamp; /* In microseconds (us) */ |
|---|
| 73 | 87 | typedef int64_t wifi_timespan; |
|---|
| 74 | | -typedef int32 wifi_rssi; |
|---|
| 88 | +typedef int32 wifi_rssi_rtt; |
|---|
| 75 | 89 | |
|---|
| 76 | 90 | typedef enum { |
|---|
| 77 | 91 | RTT_INVALID, |
|---|
| .. | .. |
|---|
| 80 | 94 | RTT_AUTO |
|---|
| 81 | 95 | } rtt_type_t; |
|---|
| 82 | 96 | |
|---|
| 97 | +/* RTT peer type */ |
|---|
| 83 | 98 | typedef enum { |
|---|
| 84 | | - RTT_PEER_STA, |
|---|
| 85 | | - RTT_PEER_AP, |
|---|
| 86 | | - RTT_PEER_P2P, |
|---|
| 87 | | - RTT_PEER_NAN, |
|---|
| 88 | | - RTT_PEER_INVALID |
|---|
| 99 | + RTT_PEER_AP = 0x1, |
|---|
| 100 | + RTT_PEER_STA = 0x2, |
|---|
| 101 | + RTT_PEER_P2P_GO = 0x3, |
|---|
| 102 | + RTT_PEER_P2P_CLIENT = 0x4, |
|---|
| 103 | + RTT_PEER_NAN = 0x5, |
|---|
| 104 | + RTT_PEER_INVALID = 0x6 |
|---|
| 89 | 105 | } rtt_peer_type_t; |
|---|
| 90 | 106 | |
|---|
| 107 | +/* Ranging status */ |
|---|
| 91 | 108 | typedef enum rtt_reason { |
|---|
| 92 | | - RTT_REASON_SUCCESS, |
|---|
| 93 | | - RTT_REASON_FAILURE, |
|---|
| 94 | | - RTT_REASON_FAIL_NO_RSP, |
|---|
| 95 | | - RTT_REASON_FAIL_INVALID_TS, /* Invalid timestamp */ |
|---|
| 96 | | - RTT_REASON_FAIL_PROTOCOL, /* 11mc protocol failed */ |
|---|
| 97 | | - RTT_REASON_FAIL_REJECTED, |
|---|
| 98 | | - RTT_REASON_FAIL_NOT_SCHEDULED_YET, |
|---|
| 99 | | - RTT_REASON_FAIL_SCHEDULE, /* schedule failed */ |
|---|
| 100 | | - RTT_REASON_FAIL_TM_TIMEOUT, |
|---|
| 101 | | - RTT_REASON_FAIL_AP_ON_DIFF_CHANNEL, |
|---|
| 102 | | - RTT_REASON_FAIL_NO_CAPABILITY, |
|---|
| 103 | | - RTT_REASON_FAIL_BUSY_TRY_LATER, |
|---|
| 104 | | - RTT_REASON_ABORTED |
|---|
| 109 | + RTT_STATUS_SUCCESS = 0, |
|---|
| 110 | + RTT_STATUS_FAILURE = 1, // general failure status |
|---|
| 111 | + RTT_STATUS_FAIL_NO_RSP = 2, // target STA does not respond to request |
|---|
| 112 | + RTT_STATUS_FAIL_REJECTED = 3, // request rejected. Applies to 2-sided RTT only |
|---|
| 113 | + RTT_STATUS_FAIL_NOT_SCHEDULED_YET = 4, |
|---|
| 114 | + RTT_STATUS_FAIL_TM_TIMEOUT = 5, // timing measurement times out |
|---|
| 115 | + RTT_STATUS_FAIL_AP_ON_DIFF_CHANNEL = 6, // Target on different channel, cannot range |
|---|
| 116 | + RTT_STATUS_FAIL_NO_CAPABILITY = 7, // ranging not supported |
|---|
| 117 | + RTT_STATUS_ABORTED = 8, // request aborted for unknown reason |
|---|
| 118 | + RTT_STATUS_FAIL_INVALID_TS = 9, // Invalid T1-T4 timestamp |
|---|
| 119 | + RTT_STATUS_FAIL_PROTOCOL = 10, // 11mc protocol failed |
|---|
| 120 | + RTT_STATUS_FAIL_SCHEDULE = 11, // request could not be scheduled |
|---|
| 121 | + RTT_STATUS_FAIL_BUSY_TRY_LATER = 12, // responder cannot collaborate at time of request |
|---|
| 122 | + RTT_STATUS_INVALID_REQ = 13, // bad request args |
|---|
| 123 | + RTT_STATUS_NO_WIFI = 14, // WiFi not enabled Responder overrides param info |
|---|
| 124 | + // cannot range with new params |
|---|
| 125 | + RTT_STATUS_FAIL_FTM_PARAM_OVERRIDE = 15 |
|---|
| 105 | 126 | } rtt_reason_t; |
|---|
| 106 | 127 | |
|---|
| 107 | 128 | enum { |
|---|
| .. | .. |
|---|
| 132 | 153 | RTT_BW_160 = BIT(5) |
|---|
| 133 | 154 | }; |
|---|
| 134 | 155 | |
|---|
| 156 | +enum rtt_rate_bw { |
|---|
| 157 | + RTT_RATE_20M, |
|---|
| 158 | + RTT_RATE_40M, |
|---|
| 159 | + RTT_RATE_80M, |
|---|
| 160 | + RTT_RATE_160M |
|---|
| 161 | +}; |
|---|
| 162 | + |
|---|
| 163 | +typedef enum ranging_type { |
|---|
| 164 | + RTT_TYPE_INVALID = 0, |
|---|
| 165 | + RTT_TYPE_LEGACY = 1, |
|---|
| 166 | + RTT_TYPE_NAN_DIRECTED = 2, |
|---|
| 167 | + RTT_TYPE_NAN_GEOFENCE = 3 |
|---|
| 168 | +} ranging_type_t; |
|---|
| 169 | + |
|---|
| 135 | 170 | #define FTM_MAX_NUM_BURST_EXP 14 |
|---|
| 136 | 171 | #define HAS_11MC_CAP(cap) (cap & RTT_CAP_FTM_WAY) |
|---|
| 137 | 172 | #define HAS_ONEWAY_CAP(cap) (cap & RTT_CAP_ONE_WAY) |
|---|
| .. | .. |
|---|
| 145 | 180 | } wifi_channel_info_t; |
|---|
| 146 | 181 | |
|---|
| 147 | 182 | typedef struct wifi_rate { |
|---|
| 148 | | - uint32 preamble :3; /* 0: OFDM, 1: CCK, 2 : HT, 3: VHT, 4..7 reserved */ |
|---|
| 183 | + uint32 preamble :3; /* 0: OFDM, 1: CCK, 2 : HT, 3: VHT, 4..7 reserved */ |
|---|
| 149 | 184 | uint32 nss :2; /* 1 : 1x1, 2: 2x2, 3: 3x3, 4: 4x4 */ |
|---|
| 150 | 185 | uint32 bw :3; /* 0: 20Mhz, 1: 40Mhz, 2: 80Mhz, 3: 160Mhz */ |
|---|
| 151 | 186 | /* OFDM/CCK rate code would be as per IEEE std in the unit of 0.5 mb |
|---|
| .. | .. |
|---|
| 158 | 193 | |
|---|
| 159 | 194 | typedef struct rtt_target_info { |
|---|
| 160 | 195 | struct ether_addr addr; |
|---|
| 196 | + struct ether_addr local_addr; |
|---|
| 161 | 197 | rtt_type_t type; /* rtt_type */ |
|---|
| 162 | 198 | rtt_peer_type_t peer; /* peer type */ |
|---|
| 163 | 199 | wifi_channel_info_t channel; /* channel information */ |
|---|
| .. | .. |
|---|
| 192 | 228 | * in a single frame |
|---|
| 193 | 229 | */ |
|---|
| 194 | 230 | uint32 num_frames_per_burst; |
|---|
| 195 | | - /* num of frames in each RTT burst |
|---|
| 231 | + /* |
|---|
| 232 | + * num of frames in each RTT burst |
|---|
| 196 | 233 | * for single side, measurement result num = frame number |
|---|
| 197 | 234 | * for 2 side RTT, measurement result num = frame number - 1 |
|---|
| 198 | 235 | */ |
|---|
| .. | .. |
|---|
| 212 | 249 | * at the end of the burst_duration it requested. |
|---|
| 213 | 250 | */ |
|---|
| 214 | 251 | uint32 burst_duration; |
|---|
| 252 | + uint32 burst_timeout; |
|---|
| 215 | 253 | uint8 preamble; /* 1 - Legacy, 2 - HT, 4 - VHT */ |
|---|
| 216 | 254 | uint8 bw; /* 5, 10, 20, 40, 80, 160 */ |
|---|
| 217 | 255 | } rtt_target_info_t; |
|---|
| 256 | + |
|---|
| 257 | +typedef struct rtt_goefence_target_info { |
|---|
| 258 | + bool valid; |
|---|
| 259 | + struct ether_addr peer_addr; |
|---|
| 260 | +} rtt_geofence_target_info_t; |
|---|
| 261 | + |
|---|
| 262 | +typedef struct rtt_config_params { |
|---|
| 263 | + int8 rtt_target_cnt; |
|---|
| 264 | + rtt_target_info_t *target_info; |
|---|
| 265 | +} rtt_config_params_t; |
|---|
| 266 | + |
|---|
| 267 | +typedef struct rtt_geofence_cfg { |
|---|
| 268 | + int8 geofence_target_cnt; |
|---|
| 269 | + bool rtt_in_progress; |
|---|
| 270 | + bool role_concurr_state; |
|---|
| 271 | + int8 cur_target_idx; |
|---|
| 272 | + rtt_geofence_target_info_t geofence_target_info[RTT_MAX_GEOFENCE_TARGET_CNT]; |
|---|
| 273 | +} rtt_geofence_cfg_t; |
|---|
| 274 | + |
|---|
| 275 | +/* |
|---|
| 276 | + * Keep Adding more reasons |
|---|
| 277 | + * going forward if needed |
|---|
| 278 | + */ |
|---|
| 279 | +enum rtt_schedule_reason { |
|---|
| 280 | + RTT_SCHED_HOST_TRIGGER = 1, /* On host command for directed RTT */ |
|---|
| 281 | + RTT_SCHED_SUB_MATCH = 2, /* on Sub Match for svc with range req */ |
|---|
| 282 | + RTT_SCHED_DIR_TRIGGER_FAIL = 3, /* On failure of Directed RTT Trigger */ |
|---|
| 283 | + RTT_SCHED_DP_END = 4, /* ON NDP End event from fw */ |
|---|
| 284 | + RTT_SCHED_DP_REJECTED = 5, /* On receving reject dp event from fw */ |
|---|
| 285 | + RTT_SCHED_RNG_RPT_DIRECTED = 6, /* On Ranging report for directed RTT */ |
|---|
| 286 | + RTT_SCHED_RNG_TERM = 7, /* On Range Term Indicator */ |
|---|
| 287 | + RTT_SHCED_HOST_DIRECTED_TERM = 8, /* On host terminating directed RTT sessions */ |
|---|
| 288 | + RTT_SCHED_RNG_RPT_GEOFENCE = 9, /* On Ranging report for geofence RTT */ |
|---|
| 289 | + RTT_SCHED_RTT_RETRY_GEOFENCE = 10 /* On Geofence Retry */ |
|---|
| 290 | +}; |
|---|
| 291 | + |
|---|
| 292 | +/* |
|---|
| 293 | + * Keep Adding more invalid RTT states |
|---|
| 294 | + * going forward if needed |
|---|
| 295 | + */ |
|---|
| 296 | +enum rtt_invalid_state { |
|---|
| 297 | + RTT_STATE_VALID = 0, /* RTT state is valid */ |
|---|
| 298 | + RTT_STATE_INV_REASON_NDP_EXIST = 1 /* RTT state invalid as ndp exists */ |
|---|
| 299 | +}; |
|---|
| 300 | + |
|---|
| 301 | +typedef struct rtt_status_info { |
|---|
| 302 | + dhd_pub_t *dhd; |
|---|
| 303 | + int8 status; /* current status for the current entry */ |
|---|
| 304 | + int8 txchain; /* current device tx chain */ |
|---|
| 305 | + int pm; /* to save current value of pm */ |
|---|
| 306 | + int8 pm_restore; /* flag to reset the old value of pm */ |
|---|
| 307 | + int8 cur_idx; /* current entry to do RTT */ |
|---|
| 308 | + bool all_cancel; /* cancel all request once we got the cancel requet */ |
|---|
| 309 | + uint32 flags; /* indicate whether device is configured as initiator or target */ |
|---|
| 310 | + struct capability { |
|---|
| 311 | + int32 proto :8; |
|---|
| 312 | + int32 feature :8; |
|---|
| 313 | + int32 preamble :8; |
|---|
| 314 | + int32 bw :8; |
|---|
| 315 | + } rtt_capa; /* rtt capability */ |
|---|
| 316 | + struct mutex rtt_mutex; |
|---|
| 317 | + struct mutex geofence_mutex; |
|---|
| 318 | + rtt_config_params_t rtt_config; |
|---|
| 319 | + rtt_geofence_cfg_t geofence_cfg; |
|---|
| 320 | + struct work_struct work; |
|---|
| 321 | + struct list_head noti_fn_list; |
|---|
| 322 | + struct list_head rtt_results_cache; /* store results for RTT */ |
|---|
| 323 | + int rtt_sched_reason; /* rtt_schedule_reason: what scheduled RTT */ |
|---|
| 324 | + struct delayed_work proxd_timeout; /* Proxd Timeout work */ |
|---|
| 325 | + struct delayed_work rtt_retry_timer; /* Timer for retry RTT after all targets done */ |
|---|
| 326 | +} rtt_status_info_t; |
|---|
| 218 | 327 | |
|---|
| 219 | 328 | typedef struct rtt_report { |
|---|
| 220 | 329 | struct ether_addr addr; |
|---|
| .. | .. |
|---|
| 226 | 335 | /* in s, 11mc only, only for RTT_REASON_FAIL_BUSY_TRY_LATER, 1- 31s */ |
|---|
| 227 | 336 | uint8 retry_after_duration; |
|---|
| 228 | 337 | rtt_type_t type; /* rtt type */ |
|---|
| 229 | | - wifi_rssi rssi; /* average rssi in 0.5 dB steps e.g. 143 implies -71.5 dB */ |
|---|
| 230 | | - wifi_rssi rssi_spread; /* rssi spread in 0.5 db steps e.g. 5 implies 2.5 spread */ |
|---|
| 338 | + wifi_rssi_rtt rssi; /* average rssi in 0.5 dB steps e.g. 143 implies -71.5 dB */ |
|---|
| 339 | + wifi_rssi_rtt rssi_spread; /* rssi spread in 0.5 db steps e.g. 5 implies 2.5 spread */ |
|---|
| 231 | 340 | /* |
|---|
| 232 | 341 | * 1-sided RTT: TX rate of RTT frame. |
|---|
| 233 | 342 | * 2-sided RTT: TX rate of initiator's Ack in response to FTM frame. |
|---|
| .. | .. |
|---|
| 250 | 359 | bcm_tlv_t *LCI; /* LCI Report */ |
|---|
| 251 | 360 | bcm_tlv_t *LCR; /* Location Civic Report */ |
|---|
| 252 | 361 | } rtt_report_t; |
|---|
| 253 | | - |
|---|
| 254 | 362 | #define RTT_REPORT_SIZE (sizeof(rtt_report_t)) |
|---|
| 255 | 363 | |
|---|
| 256 | 364 | /* rtt_results_header to maintain rtt result list per mac address */ |
|---|
| .. | .. |
|---|
| 261 | 369 | struct list_head list; |
|---|
| 262 | 370 | struct list_head result_list; |
|---|
| 263 | 371 | } rtt_results_header_t; |
|---|
| 264 | | - |
|---|
| 372 | +struct rtt_result_detail { |
|---|
| 373 | + uint8 num_ota_meas; |
|---|
| 374 | + uint32 result_flags; |
|---|
| 375 | +}; |
|---|
| 265 | 376 | /* rtt_result to link all of rtt_report */ |
|---|
| 266 | 377 | typedef struct rtt_result { |
|---|
| 267 | 378 | struct list_head list; |
|---|
| 268 | 379 | struct rtt_report report; |
|---|
| 269 | 380 | int32 report_len; /* total length of rtt_report */ |
|---|
| 381 | + struct rtt_result_detail rtt_detail; |
|---|
| 382 | + int32 detail_len; |
|---|
| 270 | 383 | } rtt_result_t; |
|---|
| 271 | 384 | |
|---|
| 272 | 385 | /* RTT Capabilities */ |
|---|
| .. | .. |
|---|
| 279 | 392 | uint8 bw_support; /* bit mask indicate what BW is supported */ |
|---|
| 280 | 393 | } rtt_capabilities_t; |
|---|
| 281 | 394 | |
|---|
| 282 | | -typedef struct rtt_config_params { |
|---|
| 283 | | - int8 rtt_target_cnt; |
|---|
| 284 | | - rtt_target_info_t *target_info; |
|---|
| 285 | | -} rtt_config_params_t; |
|---|
| 395 | +/* RTT responder information */ |
|---|
| 396 | +typedef struct wifi_rtt_responder { |
|---|
| 397 | + wifi_channel_info channel; /* channel of responder */ |
|---|
| 398 | + uint8 preamble; /* preamble supported by responder */ |
|---|
| 399 | +} wifi_rtt_responder_t; |
|---|
| 286 | 400 | |
|---|
| 287 | 401 | typedef void (*dhd_rtt_compl_noti_fn)(void *ctx, void *rtt_data); |
|---|
| 288 | | - |
|---|
| 289 | | -#ifdef RTT_SUPPORT |
|---|
| 290 | 402 | /* Linux wrapper to call common dhd_rtt_set_cfg */ |
|---|
| 291 | 403 | int |
|---|
| 292 | 404 | dhd_dev_rtt_set_cfg(struct net_device *dev, void *buf); |
|---|
| .. | .. |
|---|
| 304 | 416 | int |
|---|
| 305 | 417 | dhd_dev_rtt_capability(struct net_device *dev, rtt_capabilities_t *capa); |
|---|
| 306 | 418 | |
|---|
| 419 | +int |
|---|
| 420 | +dhd_dev_rtt_avail_channel(struct net_device *dev, wifi_channel_info *channel_info); |
|---|
| 421 | + |
|---|
| 422 | +int |
|---|
| 423 | +dhd_dev_rtt_enable_responder(struct net_device *dev, wifi_channel_info *channel_info); |
|---|
| 424 | + |
|---|
| 425 | +int |
|---|
| 426 | +dhd_dev_rtt_cancel_responder(struct net_device *dev); |
|---|
| 307 | 427 | /* export to upper layer */ |
|---|
| 308 | 428 | chanspec_t |
|---|
| 309 | 429 | dhd_rtt_convert_to_chspec(wifi_channel_info_t channel); |
|---|
| .. | .. |
|---|
| 314 | 434 | int |
|---|
| 315 | 435 | dhd_rtt_set_cfg(dhd_pub_t *dhd, rtt_config_params_t *params); |
|---|
| 316 | 436 | |
|---|
| 437 | +void dhd_rtt_set_role_concurrency_state(dhd_pub_t *dhd, bool state); |
|---|
| 438 | + |
|---|
| 439 | +bool dhd_rtt_get_role_concurrency_state(dhd_pub_t *dhd); |
|---|
| 440 | + |
|---|
| 441 | +int8 dhd_rtt_get_geofence_target_cnt(dhd_pub_t *dhd); |
|---|
| 442 | + |
|---|
| 443 | +#ifdef WL_NAN |
|---|
| 444 | +void dhd_rtt_set_geofence_rtt_state(dhd_pub_t *dhd, bool state); |
|---|
| 445 | + |
|---|
| 446 | +bool dhd_rtt_get_geofence_rtt_state(dhd_pub_t *dhd); |
|---|
| 447 | + |
|---|
| 448 | +rtt_geofence_target_info_t* |
|---|
| 449 | +dhd_rtt_get_geofence_target_head(dhd_pub_t *dhd); |
|---|
| 450 | + |
|---|
| 451 | +rtt_geofence_target_info_t* |
|---|
| 452 | +dhd_rtt_get_geofence_current_target(dhd_pub_t *dhd); |
|---|
| 453 | + |
|---|
| 454 | +rtt_geofence_target_info_t* |
|---|
| 455 | +dhd_rtt_get_geofence_target(dhd_pub_t *dhd, struct ether_addr* peer_addr, |
|---|
| 456 | + int8 *index); |
|---|
| 457 | + |
|---|
| 458 | +int |
|---|
| 459 | +dhd_rtt_add_geofence_target(dhd_pub_t *dhd, rtt_geofence_target_info_t *target); |
|---|
| 460 | + |
|---|
| 461 | +int |
|---|
| 462 | +dhd_rtt_remove_geofence_target(dhd_pub_t *dhd, struct ether_addr *peer_addr); |
|---|
| 463 | + |
|---|
| 464 | +int |
|---|
| 465 | +dhd_rtt_delete_geofence_target_list(dhd_pub_t *dhd); |
|---|
| 466 | + |
|---|
| 467 | +int |
|---|
| 468 | +dhd_rtt_delete_nan_session(dhd_pub_t *dhd); |
|---|
| 469 | +#endif /* WL_NAN */ |
|---|
| 470 | + |
|---|
| 471 | +uint8 |
|---|
| 472 | +dhd_rtt_invalid_states(struct net_device *ndev, struct ether_addr *peer_addr); |
|---|
| 473 | + |
|---|
| 474 | +void |
|---|
| 475 | +dhd_rtt_schedule_rtt_work_thread(dhd_pub_t *dhd, int sched_reason); |
|---|
| 476 | + |
|---|
| 317 | 477 | int |
|---|
| 318 | 478 | dhd_rtt_stop(dhd_pub_t *dhd, struct ether_addr *mac_list, int mac_cnt); |
|---|
| 319 | | - |
|---|
| 320 | 479 | |
|---|
| 321 | 480 | int |
|---|
| 322 | 481 | dhd_rtt_register_noti_callback(dhd_pub_t *dhd, void *ctx, dhd_rtt_compl_noti_fn noti_fn); |
|---|
| .. | .. |
|---|
| 331 | 490 | dhd_rtt_capability(dhd_pub_t *dhd, rtt_capabilities_t *capa); |
|---|
| 332 | 491 | |
|---|
| 333 | 492 | int |
|---|
| 493 | +dhd_rtt_avail_channel(dhd_pub_t *dhd, wifi_channel_info *channel_info); |
|---|
| 494 | + |
|---|
| 495 | +int |
|---|
| 496 | +dhd_rtt_enable_responder(dhd_pub_t *dhd, wifi_channel_info *channel_info); |
|---|
| 497 | + |
|---|
| 498 | +int |
|---|
| 499 | +dhd_rtt_cancel_responder(dhd_pub_t *dhd); |
|---|
| 500 | + |
|---|
| 501 | +int |
|---|
| 334 | 502 | dhd_rtt_init(dhd_pub_t *dhd); |
|---|
| 335 | 503 | |
|---|
| 336 | 504 | int |
|---|
| 337 | 505 | dhd_rtt_deinit(dhd_pub_t *dhd); |
|---|
| 338 | | -#endif /* RTT_SUPPORT */ |
|---|
| 506 | + |
|---|
| 507 | +#ifdef WL_CFG80211 |
|---|
| 508 | +int dhd_rtt_handle_nan_rtt_session_end(dhd_pub_t *dhd, |
|---|
| 509 | + struct ether_addr *peer); |
|---|
| 510 | + |
|---|
| 511 | +void dhd_rtt_move_geofence_cur_target_idx_to_next(dhd_pub_t *dhd); |
|---|
| 512 | + |
|---|
| 513 | +int8 dhd_rtt_get_geofence_cur_target_idx(dhd_pub_t *dhd); |
|---|
| 514 | +#endif /* WL_CFG80211 */ |
|---|
| 515 | + |
|---|
| 339 | 516 | #endif /* __DHD_RTT_H__ */ |
|---|