| /* |
| * FTM module IOCTL structure definitions. |
| * |
| * Copyright (C) 2024, Broadcom. |
| * |
| * Unless you and Broadcom execute a separate written software license |
| * agreement governing use of this software, this software is licensed to you |
| * under the terms of the GNU General Public License version 2 (the "GPL"), |
| * available at http://www.broadcom.com/licenses/GPLv2.php, with the |
| * following added to such license: |
| * |
| * As a special exception, the copyright holders of this software give you |
| * permission to link this software with independent modules, and to copy and |
| * distribute the resulting executable under terms of your choice, provided that |
| * you also meet, for each linked independent module, the terms and conditions of |
| * the license of that module. An independent module is a module which is not |
| * derived from this software. The special exception does not apply to any |
| * modifications of the software. |
| * |
| * |
| * <<Broadcom-WL-IPTag/Dual:>> |
| */ |
| |
| #ifndef _ftm_ioctl_h |
| #define _ftm_ioctl_h |
| |
| #include <typedefs.h> |
| |
| typedef uint16 wl_ftm_session_id_t; |
| typedef int16 wl_ftm_result_flags_t; |
| typedef int16 wl_ftm_method_t; |
| #ifndef BCMUTILS_ERR_CODES |
| typedef int32 wl_ftm_status_t; |
| #endif /* BCMUTILS_ERR_CODES */ |
| |
| /** 11az ftm types */ |
| enum wl_ftm_type { |
| WL_FTM_TYPE_NONE = 0, /* ftm type unspecified */ |
| WL_FTM_TYPE_MC = 1, /* Legacy MC ftm */ |
| WL_FTM_TYPE_TB = 2, /* 11az Trigger based */ |
| WL_FTM_TYPE_NTB = 3, /* 11az Non-trigger based */ |
| WL_FTM_TYPE_MAX |
| }; |
| typedef uint8 wl_ftm_type_t; |
| |
| /** session flags for 11AZ */ |
| |
| /** global and method configuration flags */ |
| enum wl_ftm_flags { |
| WL_FTM_FLAG_NONE = 0x00000000, |
| WL_FTM_FLAG_RX_ENABLED = 0x00000001, /* respond to requests, per bss */ |
| WL_FTM_FLAG_RX_RANGE_REQ = 0x00000002, /* 11mc range requests enabled */ |
| WL_FTM_FLAG_TX_LCI = 0x00000004, /* tx lci, if known */ |
| WL_FTM_FLAG_TX_CIVIC = 0x00000008, /* tx civic, if known */ |
| WL_FTM_FLAG_RX_AUTO_BURST = 0x00000010, /* auto respond w/o host action */ |
| WL_FTM_FLAG_TX_AUTO_BURST = 0x00000020, /* continue tx w/o host action */ |
| WL_FTM_FLAG_TX_ENABLED = 0x00000040, /* per bss */ |
| WL_FTM_FLAG_RESERVED = 0x00000080, /* reserve. obsolete sched w/ avail */ |
| WL_FTM_FLAG_ASAP_CAPABLE = 0x00000100, /* ASAP capable */ |
| WL_FTM_FLAG_MBURST_FOLLOWUP = 0x00000200, /* new multi-burst algorithm */ |
| WL_FTM_FLAG_SECURE = 0x00000400, /* per bsscfg option */ |
| WL_FTM_FLAG_NO_TSF_SYNC = 0x00000800, /* disable tsf sync, per bss */ |
| WL_FTM_FLAG_ALL = 0xffffffff |
| }; |
| typedef uint32 wl_ftm_flags_t; |
| |
| /* mask for per bss global configuration flags */ |
| #define WL_FTM_FLAG_BSS_MASK \ |
| (WL_FTM_FLAG_RX_ENABLED \ |
| | WL_FTM_FLAG_TX_ENABLED \ |
| | WL_FTM_FLAG_SECURE \ |
| | WL_FTM_FLAG_NO_TSF_SYNC) |
| |
| /** session flags */ |
| #define WL_FTM_SESSION_FLAG_NONE 0x0000000000000000llu /* no flags */ |
| #define WL_FTM_SESSION_FLAG_INITIATOR 0x0000000000000001llu /* local is initiator */ |
| #define WL_FTM_SESSION_FLAG_TARGET 0x0000000000000002llu /* local is target */ |
| #define WL_FTM_SESSION_FLAG_CORE_ROTATE 0x0000000000000004llu /* initiator core rotate */ |
| #define WL_FTM_SESSION_FLAG_AUTO_BURST 0x0000000000000008llu /* rx_auto_burst */ |
| #define WL_FTM_SESSION_FLAG_PERSIST 0x0000000000000010llu /* good until cancelled */ |
| #define WL_FTM_SESSION_FLAG_RTT_DETAIL 0x0000000000000020llu /* rtt detail results */ |
| #define WL_FTM_SESSION_FLAG_SECURE 0x0000000000000040llu /* session is secure */ |
| #define WL_FTM_SESSION_FLAG_AOA 0x0000000000000080llu /* AOA along w/ RTT */ |
| #define WL_FTM_SESSION_FLAG_SEC_LTF_SUPPORTED 0x0000000000000100llu /* 11AZ sec LTF supported */ |
| #define WL_FTM_SESSION_FLAG_SEC_LTF_REQUIRED 0x0000000000000200llu /* 11AZ sec LTF required */ |
| #define WL_FTM_SESSION_FLAG_NAN_BSS 0x0000000000000400llu /* NAN BSS */ |
| #define WL_FTM_SESSION_FLAG_ASAP_CAPABLE 0x0000000000000800llu /* ASAP-capable */ |
| #define WL_FTM_SESSION_FLAG_RANDMAC 0x0000000000001000llu /* use random mac */ |
| #define WL_FTM_SESSION_FLAG_REPORT_FAILURE 0x0000000000002000llu /* failure to target */ |
| #define WL_FTM_SESSION_FLAG_INITIATOR_RPT 0x0000000000004000llu /* ISTA to RSTA report */ |
| #define WL_FTM_SESSION_FLAG_NOCHANSWT 0x0000000000008000llu /* reserved in comp ? */ |
| #define WL_FTM_SESSION_FLAG_RSVD1 0x0000000000010000llu /* reserved */ |
| #define WL_FTM_SESSION_FLAG_SEQ_EN 0x0000000000020000llu /* Toast */ |
| #define WL_FTM_SESSION_FLAG_NO_PARAM_OVRD 0x0000000000040000llu /* no override from tgt */ |
| #define WL_FTM_SESSION_FLAG_ASAP 0x0000000000080000llu /* ASAP session */ |
| #define WL_FTM_SESSION_FLAG_REQ_LCI 0x0000000000100000llu /* tx LCI req */ |
| #define WL_FTM_SESSION_FLAG_REQ_CIV 0x0000000000200000llu /* tx civic loc req */ |
| #define WL_FTM_SESSION_FLAG_PRE_SCAN 0x0000000000400000llu /* pre-scan for asap=1 */ |
| #define WL_FTM_SESSION_FLAG_AUTO_VHTACK 0x0000000000800000llu /* vhtack based on brcmie */ |
| #define WL_FTM_SESSION_FLAG_VHTACK 0x0000000001000000llu /* vht ack is in use */ |
| #define WL_FTM_SESSION_FLAG_BDUR_NOPREF 0x0000000002000000llu /* burst-duration no pref */ |
| #define WL_FTM_SESSION_FLAG_NUM_FTM_NOPREF 0x0000000004000000llu /* num of FTM: no pref */ |
| #define WL_FTM_SESSION_FLAG_FTM_SEP_NOPREF 0x0000000008000000llu /* time btw FTM: no pref */ |
| #define WL_FTM_SESSION_FLAG_NUM_BURST_NOPREF 0x0000000010000000llu /* num of bursts: no pref */ |
| #define WL_FTM_SESSION_FLAG_BURST_PERIOD_NOPREF 0x0000000020000000llu /* burst period: no pref */ |
| #define WL_FTM_SESSION_FLAG_MBURST_FOLLOWUP 0x0000000040000000llu /* new mburst algo */ |
| #define WL_FTM_SESSION_FLAG_MBURST_NODELAY 0x0000000080000000llu /* good until cancelled */ |
| #define WL_FTM_SESSION_FLAG_FULL_BW 0x0000000100000000llu /* use all bandwidth */ |
| #define WL_FTM_SESSION_FLAG_R2I_TOA_PHASE_SHIFT 0x0000000200000000llu /* phase shft average toa */ |
| #define WL_FTM_SESSION_FLAG_I2R_TOA_PHASE_SHIFT 0x0000000400000000llu /* phase shft average toa */ |
| #define WL_FTM_SESSION_FLAG_I2R_IMMEDIATE_RPT 0x0000000800000000llu /* immediate I2R feedback */ |
| #define WL_FTM_SESSION_FLAG_R2I_IMMEDIATE_RPT 0x0000001000000000llu /* immediate R2R report */ |
| #define WL_FTM_SESSION_FLAG_DEV_CLASS_A 0x0000002000000000llu /* class A device */ |
| #define WL_FTM_SESSION_FLAG_RX_ENABLED 0x0000004000000000llu /* respond to requests */ |
| #define WL_FTM_SESSION_FLAG_I2R_LMR_POLICY 0x0000008000000000llu /* I2R LMR policy */ |
| #define WL_FTM_SESSION_FLAG_TX_LCI 0x0000010000000000llu /* tx lci, if known */ |
| #define WL_FTM_SESSION_FLAG_TX_CIVIC 0x0000020000000000llu /* tx civic, if known */ |
| #define WL_FTM_SESSION_FLAG_I2R_REQ_ACCEPT 0x0000040000000000llu /* ISTA flag to honor |
| * i2r request from RSTA |
| * even when its LMR |
| * feedback is false. |
| */ |
| #define WL_FTM_SESSION_FLAG_RNM_MFP_REQ 0x0000080000000000llu /* Ranging mgmt/meas frame |
| * protection required |
| */ |
| #define WL_FTM_SESSION_FLAG_TX_HE_LMR 0x0000100000000000llu /* TX LMR with HE rate */ |
| #define WL_FTM_SESSION_FLAG_NO_TSF_SYNC 0x0000200000000000llu /* disable tsf sync */ |
| #define WL_FTM_SESSION_FLAG_CONT_ON_BURST_ERR 0x0000400000000000llu /* continue to subsequent |
| * burst(s) on error. |
| */ |
| #define WL_FTM_SESSION_FLAG_PASSIVE_TB_RANGING 0x0000800000000000llu /* Passive TB ranging */ |
| #define WL_FTM_SESSION_FLAG_ONE_WAY 0x0001000000000000llu /* ONE_WAY RTT */ |
| #define WL_FTM_SESSION_FLAG_PASSIVE_STA 0x0002000000000000llu /* Passive STA */ |
| #define WL_FTM_SESSION_FLAG_DONT_USE_SCAN_CACHE 0x0004000000000000llu /* Don't use scan cache for |
| * ranging scan |
| */ |
| #define WL_FTM_SESSION_FLAG_DONT_SCAN 0x0008000000000000llu /* Don't scan when both |
| * peers are already known. |
| */ |
| |
| #define WL_FTM_SESSION_FLAG_ALL 0xffffffffffffffffllu |
| typedef uint64 wl_ftm_session_flags_t; |
| |
| /* flags common across mc/ntb/tb. |
| * Explicit for the ones that are currently used. |
| * Currently not used ones still reserve their bits in above. |
| */ |
| #define FTM_COMMON_CONFIG_MASK \ |
| (WL_FTM_SESSION_FLAG_INITIATOR \ |
| | WL_FTM_SESSION_FLAG_TARGET \ |
| | WL_FTM_SESSION_FLAG_SECURE \ |
| | WL_FTM_SESSION_FLAG_CORE_ROTATE \ |
| | WL_FTM_SESSION_FLAG_RANDMAC \ |
| | WL_FTM_SESSION_FLAG_REQ_LCI \ |
| | WL_FTM_SESSION_FLAG_REQ_CIV \ |
| | WL_FTM_SESSION_FLAG_RTT_DETAIL \ |
| | WL_FTM_SESSION_FLAG_NO_PARAM_OVRD \ |
| | WL_FTM_SESSION_FLAG_AUTO_BURST \ |
| | WL_FTM_SESSION_FLAG_NAN_BSS \ |
| | WL_FTM_SESSION_FLAG_NO_TSF_SYNC \ |
| | WL_FTM_SESSION_FLAG_CONT_ON_BURST_ERR \ |
| | WL_FTM_SESSION_FLAG_DONT_USE_SCAN_CACHE \ |
| | WL_FTM_SESSION_FLAG_DONT_SCAN) |
| |
| /* flags relevant to MC sessions */ |
| #define FTM_MC_CONFIG_MASK \ |
| (WL_FTM_SESSION_FLAG_AUTO_VHTACK \ |
| | WL_FTM_SESSION_FLAG_INITIATOR_RPT \ |
| | WL_FTM_SESSION_FLAG_MBURST_NODELAY \ |
| | WL_FTM_SESSION_FLAG_ASAP_CAPABLE \ |
| | WL_FTM_SESSION_FLAG_ASAP \ |
| | WL_FTM_SESSION_FLAG_VHTACK \ |
| | WL_FTM_SESSION_FLAG_BDUR_NOPREF \ |
| | WL_FTM_SESSION_FLAG_NUM_FTM_NOPREF \ |
| | WL_FTM_SESSION_FLAG_FTM_SEP_NOPREF \ |
| | WL_FTM_SESSION_FLAG_NUM_BURST_NOPREF \ |
| | WL_FTM_SESSION_FLAG_BURST_PERIOD_NOPREF \ |
| | WL_FTM_SESSION_FLAG_SEQ_EN \ |
| | WL_FTM_SESSION_FLAG_NOCHANSWT \ |
| | WL_FTM_SESSION_FLAG_MBURST_FOLLOWUP \ |
| | WL_FTM_SESSION_FLAG_ONE_WAY) |
| |
| /* flags common for TB/NTB sessions */ |
| #define FTM_TB_NTB_COMMON_CONFIG_MASK \ |
| (WL_FTM_SESSION_FLAG_INITIATOR_RPT \ |
| | WL_FTM_SESSION_FLAG_R2I_TOA_PHASE_SHIFT \ |
| | WL_FTM_SESSION_FLAG_I2R_TOA_PHASE_SHIFT \ |
| | WL_FTM_SESSION_FLAG_I2R_IMMEDIATE_RPT \ |
| | WL_FTM_SESSION_FLAG_R2I_IMMEDIATE_RPT \ |
| | WL_FTM_SESSION_FLAG_I2R_LMR_POLICY \ |
| | WL_FTM_SESSION_FLAG_I2R_REQ_ACCEPT \ |
| | WL_FTM_SESSION_FLAG_RNM_MFP_REQ \ |
| | WL_FTM_SESSION_FLAG_SEC_LTF_SUPPORTED \ |
| | WL_FTM_SESSION_FLAG_SEC_LTF_REQUIRED \ |
| | WL_FTM_SESSION_FLAG_TX_HE_LMR) |
| |
| /* flags relevant to NTB sessions */ |
| #define FTM_NTB_CONFIG_MASK FTM_TB_NTB_COMMON_CONFIG_MASK |
| |
| /* flags relevant to TB sessions. */ |
| #define FTM_TB_SPECIFIC_CONFIG_MASK \ |
| (WL_FTM_SESSION_FLAG_FULL_BW \ |
| | WL_FTM_SESSION_FLAG_DEV_CLASS_A \ |
| | WL_FTM_SESSION_FLAG_PASSIVE_TB_RANGING \ |
| | WL_FTM_SESSION_FLAG_PASSIVE_STA) |
| #define FTM_TB_CONFIG_MASK (FTM_TB_NTB_COMMON_CONFIG_MASK | FTM_TB_SPECIFIC_CONFIG_MASK) |
| |
| typedef uint64 wl_ftm_session_mask_t; |
| |
| /* wl_ftm_ftm_session_status_t core_info stores the following local core info. */ |
| #define WL_FTM_SESSION_STATUS_CORE_INFO_CORE_SHIFT 8u |
| #define WL_FTM_SESSION_STATUS_CORE_INFO_CORE_MASK 0xff00u |
| #define WL_FTM_SESSION_STATUS_CORE_INFO_NUM_CORE_SHIFT 0u |
| #define WL_FTM_SESSION_STATUS_CORE_INFO_NUM_CORE_MASK 0x00ffu |
| |
| /** time units - mc supports up to 0.1ns resolution */ |
| enum wl_ftm_tmu { |
| WL_FTM_TMU_TU = 0, /**< 1024us */ |
| WL_FTM_TMU_SEC = 1, |
| WL_FTM_TMU_MILLI_SEC = 2, |
| WL_FTM_TMU_MICRO_SEC = 3, |
| WL_FTM_TMU_NANO_SEC = 4, |
| WL_FTM_TMU_PICO_SEC = 5 |
| }; |
| typedef int16 wl_ftm_tmu_t; |
| |
| typedef struct wl_ftm_intvl { |
| uint32 intvl; |
| wl_ftm_tmu_t tmu; |
| uint8 pad[2]; |
| } wl_ftm_intvl_t; |
| |
| /** commands that can apply to proxd, method or a session */ |
| enum wl_ftm_cmd { |
| WL_FTM_CMD_NONE = 0, |
| WL_FTM_CMD_GET_VERSION = 1, |
| WL_FTM_CMD_ENABLE = 2, |
| WL_FTM_CMD_DISABLE = 3, |
| WL_FTM_CMD_CONFIG = 4, |
| WL_FTM_CMD_START_SESSION = 5, |
| WL_FTM_CMD_BURST_REQUEST = 6, |
| WL_FTM_CMD_STOP_SESSION = 7, |
| WL_FTM_CMD_DELETE_SESSION = 8, |
| WL_FTM_CMD_GET_RESULT = 9, |
| WL_FTM_CMD_GET_INFO = 10, |
| WL_FTM_CMD_GET_STATUS = 11, |
| WL_FTM_CMD_GET_SESSIONS = 12, |
| WL_FTM_CMD_GET_COUNTERS = 13, |
| WL_FTM_CMD_CLEAR_COUNTERS = 14, |
| WL_FTM_CMD_COLLECT = 15, /* not supported, see 'wl proxd_collect' */ |
| WL_FTM_CMD_TUNE = 16, /* not supported, see 'wl proxd_tune' */ |
| WL_FTM_CMD_DUMP = 17, |
| WL_FTM_CMD_START_RANGING = 18, |
| WL_FTM_CMD_STOP_RANGING = 19, |
| WL_FTM_CMD_GET_RANGING_INFO = 20, |
| WL_FTM_CMD_IS_TLV_SUPPORTED = 21, |
| WL_FTM_CMD_TEST_MODE = 22, /* for test mode (i.e. WFA CTT) */ |
| WL_FTM_CMD_DBG_EVENT_CHECK = 23, /* for debugging */ |
| |
| WL_FTM_CMD_MAX |
| }; |
| typedef int16 wl_ftm_cmd_t; |
| |
| enum wl_ftm_event_type { |
| WL_FTM_EVENT_NONE = 0, /* reserved */ |
| WL_FTM_EVENT_SESSION_CREATE = 1, |
| WL_FTM_EVENT_RES_WAIT = 2, /* wait for resources (SESSION_START) */ |
| WL_FTM_EVENT_FTM_REQ = 3, |
| WL_FTM_EVENT_BURST_START = 4, |
| WL_FTM_EVENT_BURST_END = 5, |
| WL_FTM_EVENT_SESSION_END = 6, |
| WL_FTM_EVENT_SESSION_RESET = 7, |
| WL_FTM_EVENT_BURST_RESCHED = 8, /* burst rescheduled-e.g. partial TSF */ |
| WL_FTM_EVENT_SESSION_DESTROY = 9, |
| WL_FTM_EVENT_RANGE_REQ = 10, |
| WL_FTM_EVENT_FTM_FRAME = 11, |
| WL_FTM_EVENT_USER_WAIT = 12, /* was DELAY */ |
| WL_FTM_EVENT_VS_INITIATOR_RPT = 13, /* target rx initiator-report */ |
| WL_FTM_EVENT_RANGING = 14, |
| WL_FTM_EVENT_LCI_MEAS_REP = 15, /* LCI measurement report */ |
| WL_FTM_EVENT_CIVIC_MEAS_REP = 16, /* civic measurement report */ |
| WL_FTM_EVENT_COLLECT = 17, |
| /* |
| * WL_FTM_EVENT_START_WAIT(18) is reserved |
| */ |
| WL_FTM_EVENT_MF_STATS = 19, /* mf stats event */ |
| WL_FTM_EVENT_RESERVED20 = 20, /* reserved */ |
| WL_FTM_EVENT_SESSION_READY = 21, /* ready for burst */ |
| WL_FTM_EVENT_CSI_DUMP = 22, /* dump RAW CSI data for debug */ |
| WL_FTM_EVENT_SESSION_STOPPING = 23, |
| WL_FTM_EVENT_LMR_FRAME = 24, |
| WL_FTM_EVENT_TIMESTAMP_DUMP = 25 |
| }; |
| typedef uint16 wl_ftm_event_type_t; |
| |
| /* up to 32 events */ |
| typedef uint32 wl_ftm_event_mask_t; |
| |
| #define WL_FTM_EVENT_MASK_ALL 0xfffffffe |
| #define WL_FTM_EVENT_TYPE2MASK(_evt_type) (1u << (_evt_type)) |
| #define WL_FTM_EVENT_ENABLED(_evt_mask, _evt_type) \ |
| (((_evt_mask) & WL_FTM_EVENT_TYPE2MASK(_evt_type)) != 0) |
| |
| /** FTM session states */ |
| enum wl_ftm_session_state { |
| WL_FTM_SESSION_STATE_NONE = 0, |
| WL_FTM_SESSION_STATE_CREATED = 1, |
| WL_FTM_SESSION_STATE_CONFIGURED = 2, |
| WL_FTM_SESSION_STATE_RSVD = 3, |
| WL_FTM_SESSION_STATE_RES_WAIT = 4, |
| WL_FTM_SESSION_STATE_USER_WAIT = 5, |
| WL_FTM_SESSION_STATE_RSVD2 = 6, |
| WL_FTM_SESSION_STATE_BURST = 7, |
| WL_FTM_SESSION_STATE_STOPPING = 8, |
| WL_FTM_SESSION_STATE_ENDED = 9, |
| WL_FTM_SESSION_STATE_RSVD3 = 10, |
| WL_FTM_SESSION_STATE_READY = 11, |
| WL_FTM_SESSION_STATE_DESTROYING = -2, |
| WL_FTM_SESSION_STATE_INVALID = -1 |
| }; |
| typedef int16 wl_ftm_session_state_t; |
| |
| |
| /* FTM TLV IDs. Mirror of existing legacy PROXD with added entries for |
| * new 11AZ ranging parameters. |
| */ |
| typedef enum { |
| WL_FTM_TLV_ID_NONE = 0, |
| WL_FTM_TLV_ID_METHOD = 1, |
| WL_FTM_TLV_ID_FLAGS = 2, |
| WL_FTM_TLV_ID_CHANSPEC = 3, /**< note: uint32 */ |
| WL_FTM_TLV_ID_TX_POWER = 4, |
| WL_FTM_TLV_ID_RATESPEC = 5, |
| WL_FTM_TLV_ID_BURST_DURATION = 6, /**< intvl - length of burst */ |
| WL_FTM_TLV_ID_BURST_PERIOD = 7, /**< intvl - between bursts */ |
| WL_FTM_TLV_ID_BURST_FTM_SEP = 8, /**< intvl - between FTMs */ |
| WL_FTM_TLV_ID_BURST_NUM_MEAS = 9, /**< uint16 - per burst */ |
| WL_FTM_TLV_ID_NUM_BURST = 10, /**< uint16 */ |
| WL_FTM_TLV_ID_FTM_RETRIES = 11, /**< uint16 at FTM level */ |
| WL_FTM_TLV_ID_BSS_INDEX = 12, /**< uint8 */ |
| WL_FTM_TLV_ID_BSSID = 13, |
| WL_FTM_TLV_ID_INIT_DELAY = 14, /**< intvl - optional,non-standalone only */ |
| WL_FTM_TLV_ID_BURST_TIMEOUT = 15, /**< expect response within - intvl */ |
| WL_FTM_TLV_ID_EVENT_MASK = 16, /**< interested events - in/out */ |
| WL_FTM_TLV_ID_FLAGS_MASK = 17, /**< interested flags - in only */ |
| WL_FTM_TLV_ID_PEER_MAC = 18, /**< mac address of peer */ |
| WL_FTM_TLV_ID_FTM_REQ = 19, /**< dot11_ftm_req */ |
| WL_FTM_TLV_ID_LCI_REQ = 20, |
| WL_FTM_TLV_ID_LCI = 21, |
| WL_FTM_TLV_ID_CIVIC_REQ = 22, |
| WL_FTM_TLV_ID_CIVIC = 23, |
| WL_FTM_TLV_ID_AVAIL24 = 24, /**< ROM compatibility */ |
| WL_FTM_TLV_ID_SESSION_FLAGS = 25, /**< 64 bits */ |
| WL_FTM_TLV_ID_SESSION_FLAGS_MASK = 26, /**< 64 bits. in only */ |
| WL_FTM_TLV_ID_RX_MAX_BURST = 27, /**< uint16 - limit bursts per session */ |
| WL_FTM_TLV_ID_RANGING_INFO = 28, /**< ranging info */ |
| WL_FTM_TLV_ID_RANGING_FLAGS = 29, /**< uint16 */ |
| WL_FTM_TLV_ID_RANGING_FLAGS_MASK = 30, /**< uint16, in only */ |
| WL_FTM_TLV_ID_NAN_MAP_ID = 31, |
| WL_FTM_TLV_ID_DEV_ADDR = 32, |
| WL_FTM_TLV_ID_AVAIL = 33, /**< wl_proxd_avail_t */ |
| WL_FTM_TLV_ID_TLV_ID = 34, /* uint16 tlv-id */ |
| WL_FTM_TLV_ID_FTM_REQ_RETRIES = 35, /* uint16 FTM request retries */ |
| WL_FTM_TLV_ID_TPK = 36, /* 32byte TPK */ |
| WL_FTM_TLV_ID_RI_RR = 36, /* RI_RR */ |
| WL_FTM_TLV_ID_TUNE = 37, /* wl_proxd_pararms_tof_tune_t */ |
| WL_FTM_TLV_ID_CUR_ETHER_ADDR = 38, /* Source Address used for Tx */ |
| |
| /* TB and NTB TLVs */ |
| WL_FTM_TLV_ID_MIN_DELTA = 39, /* Minimum time between NDPAs */ |
| WL_FTM_TLV_ID_MAX_DELTA = 40, /* Maximum time between NDPAs */ |
| WL_FTM_TLV_ID_MAX_I2R_REP = 41, /* Maximum repetitions in I2R NDP */ |
| WL_FTM_TLV_ID_MAX_R2I_REP = 42, /* Maximum repetitions in R2I NDP */ |
| WL_FTM_TLV_ID_MAX_I2R_STS_LEQ_80 = 43, /* Maximum streams <= 80mhz in I2R NDP */ |
| WL_FTM_TLV_ID_MAX_R2I_STS_LEQ_80 = 44, /* Maximum streams <= 80mhz in R2I NDP */ |
| WL_FTM_TLV_ID_MAX_I2R_STS_GT_80 = 45, /* Maximum streams > 80mhz in I2R NDP */ |
| WL_FTM_TLV_ID_MAX_R2I_STS_GT_80 = 46, /* Maximum streams > 80mhz in R2I NDP */ |
| WL_FTM_TLV_ID_FORMAT_BW = 47, /* Format and bandwidth */ |
| WL_FTM_TLV_ID_MAX_I2R_TOTAL_LTF = 48, /* Max LFT number in all I2R NDP streams */ |
| WL_FTM_TLV_ID_MAX_R2I_TOTAL_LTF = 49, /* Max LFT number in all R2I NDP streams */ |
| WL_FTM_TLV_ID_LMR_FRAME = 50, /* dot11_ftm_lmr_t */ |
| WL_FTM_TLV_ID_TF_MAC_PAD_DUR = 51, /* Trigger Frame MAC padding duration */ |
| WL_FTM_TLV_ID_TB_ISTA_AW = 52, /* TB ISTA Availabilty Window */ |
| WL_FTM_TLV_ID_AZ_NDP_MCS = 53, /* MCS index of HE Ranging NDP frame */ |
| |
| /* Extra common TLV IDs */ |
| WL_FTM_TLV_ID_TYPE_FLAGS = 128, |
| |
| /* output - 512 + x */ |
| WL_FTM_TLV_ID_STATUS = 512, |
| WL_FTM_TLV_ID_COUNTERS_V1 = 513, /* wl_proxd_counters_t */ |
| WL_FTM_TLV_ID_INFO = 514, |
| WL_FTM_TLV_ID_RTT_RESULT = 515, |
| WL_FTM_TLV_ID_AOA_RESULT = 516, |
| WL_FTM_TLV_ID_SESSION_INFO = 517, |
| WL_FTM_TLV_ID_SESSION_STATUS = 518, |
| WL_FTM_TLV_ID_SESSION_ID_LIST = 519, |
| WL_FTM_TLV_ID_RTT_RESULT_V2 = 520, |
| WL_FTM_TLV_ID_RTT_RESULT_V3 = 521, |
| WL_FTM_TLV_ID_COUNTERS_V2 = 522, /* wl_ftm_counters_v2_t */ |
| WL_FTM_TLV_ID_AZ_RTT_SAMPLE_V1 = 523, /* wl_ftm_az_rtt_sample_v1_t */ |
| WL_FTM_TLV_ID_AZ_RTT_RESULT_V1 = 524, /* wl_ftm_az_rtt_result_v1_t */ |
| WL_FTM_TLV_ID_AZ_COUNTERS_V1 = 525, /* wl_ftm_az_counters_v1_t */ |
| WL_FTM_TLV_ID_HAL_COUNTERS_V1 = 526, /* wl_ftm_hal_counters_v1_t */ |
| WL_FTM_TLV_ID_AZ_COUNTERS_V2 = 527, /* wl_ftm_az_counters_v2_t */ |
| WL_FTM_TLV_ID_AZ_RTT_RESULT_V2 = 528, /* wl_ftm_az_rtt_result_v2_t */ |
| |
| /* debug tlvs can be added starting 1024 */ |
| WL_FTM_TLV_ID_DEBUG_MASK = 1024, |
| WL_FTM_TLV_ID_COLLECT = 1025, /**< output only */ |
| WL_FTM_TLV_ID_STRBUF = 1026, |
| |
| WL_FTM_TLV_ID_COLLECT_HEADER = 1025, /* wl_proxd_collect_header_t */ |
| WL_FTM_TLV_ID_COLLECT_INFO = 1028, /* wl_proxd_collect_info_t */ |
| WL_FTM_TLV_ID_COLLECT_DATA = 1029, /* wl_proxd_collect_data_t */ |
| WL_FTM_TLV_ID_COLLECT_CHAN_DATA = 1030, /* wl_proxd_collect_data_t */ |
| WL_FTM_TLV_ID_MF_STATS_DATA = 1031, /* mf_stats_buffer */ |
| |
| WL_FTM_TLV_ID_COLLECT_INLINE_HEADER = 1032, |
| WL_FTM_TLV_ID_COLLECT_INLINE_FRAME_INFO = 1033, |
| WL_FTM_TLV_ID_COLLECT_INLINE_FRAME_DATA = 1034, |
| WL_FTM_TLV_ID_COLLECT_INLINE_RESULTS = 1035, |
| |
| WL_FTM_TLV_ID_TEST_MODE = 1036, /* wl_ftm_test_mode_t */ |
| WL_FTM_TLV_ID_CSI_DUMP = 1037, /* wl_ftm_csi_dump_t */ |
| WL_FTM_TLV_ID_CSI_RANGING_PARAMS = 1038, /* wl_ftm_csi_ranging_params_t */ |
| WL_FTM_TLV_ID_CSI_PROC_RESULT = 1039, /* wl_ftm_csi_proc_result_t */ |
| WL_FTM_TLV_ID_CSI_PROC_RTT = 1040, /* wl_ftm_csi_proc_rtt_t */ |
| WL_FTM_TLV_ID_TIMESTAMP_DUMP_V1 = 1041, /* wl_ftm_timestamp_dump_t */ |
| |
| /* security */ |
| WL_FTM_TLV_ID_SECURITY_KEY_IDLE_TIME = 1042, /* ftm security key_idle time */ |
| WL_FTM_TLV_ID_SECURITY_KEY_LIFE_TIME = 1043, /* ftm security key life time */ |
| WL_FTM_TLV_ID_SECURITY_AKM = 1044, /* ftm security AKM */ |
| WL_FTM_TLV_ID_SECURITY_PASSPHRASE = 1045, /* ftm security passphrase */ |
| WL_FTM_TLV_ID_SECURITY_PASSPHRASE_LEN = 1046, /* ftm security passphrase len */ |
| WL_FTM_TLV_ID_SECURITY_CIPHER_TYPE = 1047, /* ftm security cipher type */ |
| WL_FTM_TLV_ID_SECURITY_LTF_REQD = 1048, /* ftm security, secure ltf needed */ |
| |
| WL_FTM_TLV_ID_TX_COREMASK = 1049 /* tx coremask for ranging frm tx */ |
| } wl_ftm_tlv_types_t; |
| |
| enum wl_ftm_wait_reason { |
| WL_FTM_WAIT_NONE = 0x0000, |
| WL_FTM_WAIT_KEY = 0x0001, |
| WL_FTM_WAIT_SCHED = 0x0002, |
| WL_FTM_WAIT_TSF = 0x0004 |
| }; |
| typedef uint16 wl_ftm_wait_reason_t; |
| |
| /** global stats */ |
| typedef struct wl_ftm_counters_v2 { |
| uint32 tx; /* tx frame count */ |
| uint32 rx; /* rx frame count */ |
| uint32 burst; /* total number of burst */ |
| uint32 sessions; /* total number of sessions */ |
| uint32 max_sessions; /* max concurrency */ |
| uint32 sched_fail; /* scheduling failures */ |
| uint32 timeouts; /* timeouts */ |
| uint32 protoerr; /* protocol errors */ |
| uint32 noack; /* tx w/o ack */ |
| uint32 txfail; /* any tx falure */ |
| uint32 lci_req_tx; /* tx LCI requests */ |
| uint32 lci_req_rx; /* rx LCI requests */ |
| uint32 lci_rep_tx; /* tx LCI reports */ |
| uint32 lci_rep_rx; /* rx LCI reports */ |
| uint32 civic_req_tx; /* tx civic requests */ |
| uint32 civic_req_rx; /* rx civic requests */ |
| uint32 civic_rep_tx; /* tx civic reports */ |
| uint32 civic_rep_rx; /* rx civic reports */ |
| uint32 rctx; /* ranging contexts created */ |
| uint32 rctx_done; /* count of ranging done */ |
| uint32 publish_err; /* availability publishing errors */ |
| uint32 on_chan; /* count of scheduler onchan */ |
| uint32 off_chan; /* count of scheduler offchan */ |
| uint32 tsf_lo; /* local tsf or session tsf */ |
| uint32 tsf_hi; |
| uint32 num_meas; /* number of measurements */ |
| uint32 num_ready; /* number of entrances to ready state */ |
| uint32 response_time; /* in ms. |
| * ISTA: time between FTMR tx and FTM1 rx. |
| * RSTA: time between FTMR rx and FTM1 tx. |
| */ |
| } wl_ftm_counters_v2_t; |
| |
| enum wl_test_mode_flag { |
| /* WFA CTT device behavior */ |
| WL_FTM_TEST_MODE_FLAG_CTT_STA = 0x00000001u, |
| WL_FTM_TEST_MODE_FLAG_CTT_AP = 0x00000002u, |
| WL_FTM_TEST_MODE_FLAG_NOPFTIVCHK = 0x00000004u, |
| WL_FTM_TEST_MODE_FLAG_NOMFP = 0x00000008u, |
| WL_FTM_TEST_MODE_FLAG_NO_SLTF_ELMT = 0x00000010u, |
| WL_FTM_TEST_MODE_FLAG_BAD_SAC = 0x00000020u, |
| WL_FTM_TEST_MODE_FLAG_NULL_SAC = 0x00000040u, |
| WL_FTM_TEST_MODE_FLAG_SKIP_LMR_TX = 0x00000080u, |
| WL_FTM_TEST_MODE_FLAG_BAD_SLTF_SEQ = 0x00000100u, |
| /* add new CTT device behavior here */ |
| WL_FTM_TEST_MODE_FLAG_WFA_CTT_MASK = 0x0000FFFFu, |
| |
| /* for internal testing purpose */ |
| WL_FTM_TEST_MODE_FLAG_TRAP_ON_CSI_TMO = 0x00010000u, |
| WL_FTM_TEST_MODE_FLAG_NO_TS_IN_LMR = 0x00020000u |
| }; |
| typedef uint32 wl_test_mode_flag_t; |
| |
| /* WL_FTM_TLV_ID_TEST_MODE */ |
| typedef struct wl_ftm_test_mode { |
| uint32 flags; /* wl_test_mode_flag_t */ |
| } wl_ftm_test_mode_t; |
| |
| /* WL_FTM_TLV_ID_TB_ISTA_AW */ |
| typedef struct wl_ftm_tb_ista_aw { |
| uint16 slot_cnt; /* number of valid slots in the bitmap */ |
| uint8 bitmap_len; /* len of bitmap array */ |
| uint8 pad; |
| uint8 bitmap[]; |
| } wl_ftm_tb_ista_aw_t; |
| |
| /* WL_FTM_TLV_ID_CSI_DUMP */ |
| enum wl_ftm_csi_dump_flags { |
| CSI_DUMP_FLAG_NONE = 0x00, /* None */ |
| CSI_DUMP_FLAG_RX_CSI_DATA = 0x01, /* RX CSI data */ |
| CSI_DUMP_FLAG_I2R_NDP = 0x02, /* I2R NDP CSI data */ |
| CSI_DUMP_FLAG_R2I_NDP = 0x04, /* R2I NDP CSI data */ |
| CSI_DUMP_FLAG_PASSIVE_STA = 0x08, /* dump CSI data as passive device */ |
| CSI_DUMP_FLAG_START = 0x80 /* start of CSI data */ |
| }; |
| typedef uint8 wl_ftm_csi_dump_flags_t; |
| |
| typedef struct wl_ftm_csi_dump { |
| uint16 sid; |
| uint8 seq; /* seq # of measurement (++ for a measurement) */ |
| uint8 flags; /* wl_ftm_csi_dump_flags */ |
| uint32 csi_tot_len; /* size of complete CSI data */ |
| uint16 data_len; /* size of partial CSI data in this TLV (< 64K since in XTLV) */ |
| uint8 csi_hdr_ver; /* version of CSI hdr in payload (from Phy) */ |
| uint8 dtoken; /* sounding dialog token of measurement */ |
| uint8 data[]; |
| } wl_ftm_csi_dump_t; |
| |
| /* WL_FTM_TLV_ID_CSI_RANGING_PARAMS */ |
| enum wl_ftm_csi_ranging_params_flags { |
| CSI_RNG_PARAM_FLAG_BIT_ISTA = 0u, /* ranging as ISTA */ |
| CSI_RNG_PARAM_FLAG_BIT_SLTF = 1u, /* secure LTF */ |
| CSI_RNG_PARAM_FLAG_BIT_NTB = 2u, /* 11az NTB ranging */ |
| CSI_RNG_PARAM_FLAG_BIT_TB = 3u, /* 11az TB ranging */ |
| CSI_RNG_PARAM_FLAG_BIT_PSV = 4u, /* 11az Passive ranging */ |
| CSI_RNG_PARAM_FLAG_BIT_MC = 5u /* 11mc ranging */ |
| }; |
| #define CSI_RNG_PARAM_FLAG(_bit) (1u << CSI_RNG_PARAM_FLAG_BIT_##_bit) |
| |
| #define CSI_RNG_ISTA(_params) ((_params)->flags & CSI_RNG_PARAM_FLAG(ISTA)) |
| #define CSI_RNG_SLTF(_params) ((_params)->flags & CSI_RNG_PARAM_FLAG(SLTF)) |
| #define CSI_RNG_NTB(_params) ((_params)->flags & CSI_RNG_PARAM_FLAG(NTB)) |
| #define CSI_RNG_TB(_params) ((_params)->flags & CSI_RNG_PARAM_FLAG(TB)) |
| #define CSI_RNG_PSV(_params) ((_params)->flags & CSI_RNG_PARAM_FLAG(PSV)) |
| #define CSI_RNG_MC(_params) ((_params)->flags & CSI_RNG_PARAM_FLAG(MC)) |
| |
| /* negotiated ranging parameters for CSI data */ |
| typedef struct wl_ftm_csi_ranging_params { |
| uint32 flags; /* wl_ftm_csi_ranging_params_flags */ |
| uint8 bw; |
| uint8 tx_sts; /* # of stream (1x ~ Nx) */ |
| uint8 rx_sts; |
| uint8 tx_rep; /* # of repetition (0 ~ N) */ |
| uint8 rx_rep; |
| uint8 PAD[3]; |
| } wl_ftm_csi_ranging_params_t; |
| |
| /* WL_FTM_TLV_ID_CSI_PROC_RESULT */ |
| /* CSI processing result of local device */ |
| typedef struct wl_ftm_csi_proc_result { |
| uint32 ts_tx; |
| uint32 ts_rx; |
| } wl_ftm_csi_proc_result_t; |
| |
| /* WL_FTM_TLV_ID_CSI_PROC_RTT */ |
| /* time stamp and rtt of CSI data */ |
| typedef struct wl_ftm_csi_proc_rtt { |
| uint64 t1; |
| uint64 t2; |
| uint64 t3; |
| uint64 t4; |
| uint64 rtt; |
| uint8 dtoken; |
| uint8 PAD[3]; |
| } wl_ftm_csi_proc_rtt_t; |
| |
| typedef struct wl_ftm_tlv { |
| uint16 id; |
| uint16 len; |
| uint8 data[1]; |
| } wl_ftm_tlv_t; |
| |
| /** proxd iovar - applies to proxd, method or session */ |
| typedef struct wl_ftm_iov { |
| uint16 version; |
| uint16 len; |
| wl_ftm_cmd_t cmd; |
| wl_ftm_method_t method; |
| wl_ftm_session_id_t sid; |
| wl_ftm_type_t ftm_type; /* 11az ftm type. valid for PROXD ver >= 0x0400 */ |
| uint8 PAD[1]; |
| wl_ftm_tlv_t tlvs[BCM_FLEX_ARRAY]; /**< variable */ |
| } wl_ftm_iov_t; |
| |
| typedef struct wl_ftm_event { |
| uint16 version; |
| uint16 len; |
| wl_ftm_event_type_t type; |
| wl_ftm_method_t method; |
| wl_ftm_session_id_t sid; |
| uint8 pad[2]; /* This field is used fragmentation purpose */ |
| wl_ftm_tlv_t tlvs[BCM_FLEX_ARRAY]; /**< variable */ |
| } wl_ftm_event_t; |
| |
| /* 11az RTT sample flags */ |
| enum wl_ftm_az_rtt_sample_flags { |
| WL_FTM_AZ_RTT_SAMPLE_FLAG_NONE = 0x0000u, |
| WL_FTM_AZ_RTT_SAMPLE_FLAG_VALID = 0x0001u, |
| /* add new flag here */ |
| WL_FTM_AZ_RTT_SAMPLE_FLAG_ALL = 0xffffu |
| }; |
| typedef uint16 wl_ftm_az_rtt_sample_flags_t; |
| |
| /* 802.11az-2022 Table 9-322al */ |
| /* WL_FTM_TLV_ID_FORMAT_BW */ |
| enum wl_ftm_ranging_format_bw { |
| WL_FTM_FMT_BW_HE_20 = 0u, |
| WL_FTM_FMT_BW_HE_40 = 1u, |
| WL_FTM_FMT_BW_HE_80 = 2u, |
| WL_FTM_FMT_BW_HE_80_80 = 3u, |
| WL_FTM_FMT_BW_HE_2RF_160 = 4u, |
| WL_FTM_FMT_BW_HE_1RF_160 = 5u, |
| /* determined by ranging chanspec configuration */ |
| WL_FTM_FMT_BW_AUTO = 255u |
| }; |
| typedef uint8 wl_ftm_ranging_format_bw_t; |
| |
| |
| /* WL_FTM_TLV_ID_AZ_RTT_SAMPLE_V1 |
| * 11az RTT sample from a measurement |
| */ |
| typedef struct wl_ftm_az_rtt_sample_v1 { |
| wl_ftm_az_rtt_sample_flags_t flags; |
| uint8 sdt; /* OTA sounding dialog token of sample */ |
| uint8 pad; |
| uint32 rtt; /* RTT in ps unit */ |
| uint32 dist; /* distance in cm unit */ |
| int8 rssi[WL_RSSI_ANT_MAX]; |
| } wl_ftm_az_rtt_sample_v1_t; |
| |
| #define WL_FTM_AZ_RTT_SAMPLE_VALID(_sp) \ |
| (((_sp)->flags & WL_FTM_AZ_RTT_SAMPLE_FLAG_VALID) != 0u) |
| |
| /* 11az RTT result flags */ |
| enum wl_ftm_az_rtt_result_flags { |
| WL_FTM_AZ_RTT_RESULT_FLAG_NONE = 0x00000000u, |
| WL_FTM_AZ_RTT_RESULT_FLAG_RTT_IN_100PS = 0x00000001u, /* RTT in 100 ps unit */ |
| WL_FTM_AZ_RTT_RESULT_FLAG_DIST_IN_4CM = 0x00000002u, /* Distance in 1/256 m unit */ |
| WL_FTM_AZ_RTT_RESULT_FLAG_SLTF = 0x00000004u, /* Secure LTF */ |
| /* add new flag here */ |
| WL_FTM_AZ_RTT_RESULT_FLAG_ALL = 0xffffffffu |
| }; |
| typedef uint32 wl_ftm_az_rtt_result_flags_t; |
| |
| #define WL_FTM_AZ_RTT_RESULT_RTT_IN_100PS(_rp) \ |
| (((_rp)->flags & WL_FTM_AZ_RTT_RESULT_FLAG_RTT_IN_100PS) != 0u) |
| #define WL_FTM_AZ_RTT_RESULT_DIST_IN_4CM(_rp) \ |
| (((_rp)->flags & WL_FTM_AZ_RTT_RESULT_FLAG_DIST_IN_4CM) != 0u) |
| #define WL_FTM_AZ_RTT_RESULT_SLTF(_rp) \ |
| (((_rp)->flags & WL_FTM_AZ_RTT_RESULT_FLAG_SLTF) != 0u) |
| |
| /* WL_FTM_TLV_ID_AZ_RTT_RESULT_V1 |
| * 11az RTT result from a session |
| */ |
| typedef struct wl_ftm_az_rtt_result_v1 { |
| wl_ftm_session_id_t sid; |
| struct ether_addr peer; |
| wl_ftm_az_rtt_result_flags_t flags; |
| wl_ftm_status_t status; /* session status */ |
| wl_ftm_session_state_t state; /* session state */ |
| uint16 max_num_meas; /* configured num of measurement */ |
| uint16 num_meas; /* num of measurement done */ |
| uint16 num_rtt; /* num of rtt */ |
| uint32 rtt_mean; /* mean RTT (in ps by default) */ |
| uint32 rtt_sd; /* standard deviation of RTT */ |
| uint32 dist; /* Distance (in cm unit by default) */ |
| int8 rssi_mean[WL_RSSI_ANT_MAX]; |
| uint16 num_sample; /* number of rtt sample */ |
| uint16 sample_fmt; /* format of rtt sample (TLV ID) */ |
| uint8 rtt_samples[]; /* optional variable length fields */ |
| } wl_ftm_az_rtt_result_v1_t; |
| |
| /* WL_FTM_TLV_ID_AZ_RTT_RESULT_V2 |
| * 11az RTT result from a session |
| */ |
| typedef struct wl_ftm_az_rtt_result_v2 { |
| wl_ftm_session_id_t sid; |
| struct ether_addr peer; |
| wl_ftm_az_rtt_result_flags_t flags; |
| wl_ftm_status_t status; /* session status */ |
| wl_ftm_session_state_t state; /* session state */ |
| uint16 max_num_meas; /* configured num of measurement */ |
| uint16 num_meas; /* num of measurement done */ |
| uint16 num_rtt; /* num of rtt */ |
| uint32 rtt_mean; /* mean RTT (in ps by default) */ |
| uint32 rtt_sd; /* standard deviation of RTT */ |
| uint32 dist; /* Distance (in cm unit by default) */ |
| int8 rssi_mean[WL_RSSI_ANT_MAX]; |
| wl_ftm_intvl_t min_delta; /* min delta bet meas for ntb ranging */ |
| wl_ftm_intvl_t max_delta; /* min delta bet meas for ntb ranging */ |
| uint8 i2r_ltf_rep; /* initiator to responder ltf repetitions */ |
| uint8 r2i_ltf_rep; /* responder to initiator ltf repetitions */ |
| uint16 num_sample; /* number of rtt sample */ |
| uint16 sample_fmt; /* format of rtt sample (TLV ID) */ |
| chanspec_t chanspec; /* ranging chanspec */ |
| wl_ftm_ranging_format_bw_t format_bw; /* format bw used for ranging */ |
| uint8 i2r_sts; /* initiator to responder spatial stream */ |
| uint8 r2i_sts; /* responder to initiator spatial stream */ |
| uint8 pad; |
| uint8 rtt_samples[]; /* optional variable length fields */ |
| } wl_ftm_az_rtt_result_v2_t; |
| |
| |
| /* WL_FTM_TLV_ID_AZ_COUNTERS_V1 |
| * 11az ranging counters |
| */ |
| typedef struct wl_ftm_az_counters_v1 { |
| uint32 active; /* 11az measurement activation */ |
| uint32 meas; /* successful measurement */ |
| uint32 timeout; /* measurement timeout */ |
| uint32 rtt; /* rtt from measurement */ |
| uint32 txndpa; /* TX NDPA */ |
| uint32 rxndpa; /* RX NDPA */ |
| uint32 txndp; /* TX NDP */ |
| uint32 rxndp; /* RX NDP */ |
| uint32 txlmr; /* TX LMR */ |
| uint32 rxlmr; /* RX LMR */ |
| uint32 rxrtfpoll; /* RX Ranging TF Poll */ |
| uint32 rxrtfsnd; /* RX Ranging TF Sounding */ |
| uint32 rxrtfssnd; /* RX Ranging TF Secure Sounding */ |
| uint32 rxrtfrpt; /* RX Ranging TF Report */ |
| uint32 rxrtfpsnd; /* RX Ranging TF Passive Sounding */ |
| } wl_ftm_az_counters_v1_t; |
| |
| /* WL_FTM_TLV_ID_AZ_COUNTERS_V2 |
| * 11az ranging counters |
| */ |
| typedef struct wl_ftm_az_counters_v2 { |
| uint32 active; /* 11az measurement activation */ |
| uint32 meas; /* successful measurement */ |
| uint32 timeout; /* measurement timeout */ |
| uint32 rtt; /* rtt from measurement */ |
| uint32 txndpa; /* TX NDPA */ |
| uint32 rxndpa; /* RX NDPA */ |
| uint32 txndp; /* TX NDP */ |
| uint32 rxndp; /* RX NDP */ |
| uint32 txlmr; /* TX LMR */ |
| uint32 rxlmr; /* RX LMR */ |
| uint32 rxrtfpoll; /* RX Ranging TF Poll */ |
| uint32 rxrtfsnd; /* RX Ranging TF Sounding */ |
| uint32 rxrtfssnd; /* RX Ranging TF Secure Sounding */ |
| uint32 rxrtfrpt; /* RX Ranging TF Report */ |
| uint32 rxrtfpsnd; /* RX Ranging TF Passive Sounding */ |
| uint32 ndpatxtmo; /* NDPA TX timeout */ |
| uint32 dtmismatch; /* Dialog Token mismatch */ |
| } wl_ftm_az_counters_v2_t; |
| |
| /* WL_FTM_TLV_ID_HAL_COUNTERS_V1 |
| * ftm HAL counters |
| */ |
| typedef struct wl_ftm_hal_counters_v1 { |
| uint32 mcsetup; /* 11mc HAL setup */ |
| uint32 mcsetupfail; /* 11mc HAL setup fail */ |
| uint32 mccleanup; /* 11mc HAL clean up */ |
| uint32 azsetup; /* 11az HAL setup */ |
| uint32 azsetupfail; /* 11az HAL setup fail */ |
| uint32 azcleanup; /* 11az HAL clean up */ |
| uint32 phyazsetup; /* phy 11az setup */ |
| uint32 phyazcleanup; /* phy 11az cleanup */ |
| uint32 phyazprocess; /* phy 11az csi processing */ |
| uint32 phycal; /* Phy calibration */ |
| uint32 csiwait; /* CSI data wait */ |
| uint32 csitimeout; /* CSI data timeout */ |
| uint32 csifrm_tx; /* CSI loopback frames */ |
| uint32 csifrm_rx; /* CSI RX frames */ |
| uint32 csifrm_txfrag; /* CSI loopback fragments */ |
| uint32 csifrm_rxfrag; /* CSI RX fragments */ |
| uint32 csifrm_txbytes; /* CSI loopback bytes total */ |
| uint32 csifrm_rxbytes; /* CSI RX bytes total */ |
| uint32 csifrm_total; /* total CSI frames */ |
| uint32 csifrm_good; /* CSI frames successully handled */ |
| uint32 csifrm_bad; /* CSI frames unsuccessully handled */ |
| uint32 csifrm_discard; /* CSI frames discarded */ |
| uint32 csifrm_first; /* first CSI frames */ |
| uint32 csifrm_last; /* last CSI frames */ |
| uint32 csifrm_phyerr; /* CSI frame with error from phy */ |
| uint32 csifrm_bmfull; /* BM overflow while receiving CSI frame */ |
| uint32 csifrm_coll; /* Collision happened while receiving CSI frame */ |
| } wl_ftm_hal_counters_v1_t; |
| |
| typedef struct wl_ftm_timestamps { |
| uint16 tx_id; /* Dialog tocken of received FTM frame */ |
| uint16 pad; |
| uint32 t1; /* TOD at responder */ |
| uint32 t2; /* TOA at initiator */ |
| uint32 t3; /* TOD at initiator */ |
| uint32 t4; /* TOA at responder */ |
| } wl_ftm_timestamps_t; |
| |
| #define WL_FTM_TIMESTAMP_DUMP_VERSION_1 1 |
| |
| typedef struct wl_ftm_timestamp_dump_v1 { |
| uint16 version; |
| uint16 len; |
| uint16 sid; /* Session id */ |
| uint16 type; /* Session type (e.g mc, az) */ |
| uint16 list_entries; /* No of timestamp entries */ |
| uint16 pad; |
| wl_ftm_timestamps_t timestamps_list[]; /* list of timestamps for each list entry */ |
| } wl_ftm_timestamp_dump_v1_t; |
| |
| |
| #endif /* _ftm_ioctl_h */ |