| /* |
| * Linux cfg80211 Vendor Extension Code |
| * |
| * Copyright 1999-2016, Broadcom Corporation |
| * All rights reserved, |
| * |
| * Redistribution and use in source and binary forms, with or without modification, |
| * are permitted provided that the following conditions are met: |
| * 1. Redistributions of source code must retain the above copyright notice, |
| * this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright notice, |
| * this list of conditions and the following disclaimer in the documentation |
| * and/or other materials provided with the distribution. |
| * |
| * This software is provided by the copyright holder "as is" and any express or |
| * implied warranties, including, but not limited to, the implied warranties of |
| * merchantability and fitness for a particular purpose are disclaimed. In no event |
| * shall copyright holder be liable for any direct, indirect, incidental, special, |
| * exemplary, or consequential damages (including, but not limited to, procurement |
| * of substitute goods or services; loss of use, data, or profits; or business |
| * interruption) however caused and on any theory of liability, whether in |
| * contract, strict liability, or tort (including negligence or otherwise) arising |
| * in any way out of the use of this software, even if advised of the possibility |
| * of such damage |
| * |
| * |
| * <<Broadcom-WL-IPTag/Open:>> |
| * |
| * $Id: wl_cfgvendor.h 605796 2015-12-11 13:45:36Z $ |
| */ |
| |
| |
| #ifndef _wl_cfgvendor_h_ |
| #define _wl_cfgvendor_h_ |
| |
| #define OUI_BRCM 0x001018 |
| #define OUI_GOOGLE 0x001A11 |
| #define BRCM_VENDOR_SUBCMD_PRIV_STR 1 |
| #define ATTRIBUTE_U32_LEN (NLA_HDRLEN + 4) |
| #define VENDOR_ID_OVERHEAD ATTRIBUTE_U32_LEN |
| #define VENDOR_SUBCMD_OVERHEAD ATTRIBUTE_U32_LEN |
| #define VENDOR_DATA_OVERHEAD (NLA_HDRLEN) |
| |
| #define SCAN_RESULTS_COMPLETE_FLAG_LEN ATTRIBUTE_U32_LEN |
| #define SCAN_INDEX_HDR_LEN (NLA_HDRLEN) |
| #define SCAN_ID_HDR_LEN ATTRIBUTE_U32_LEN |
| #define SCAN_FLAGS_HDR_LEN ATTRIBUTE_U32_LEN |
| #define GSCAN_NUM_RESULTS_HDR_LEN ATTRIBUTE_U32_LEN |
| #define GSCAN_RESULTS_HDR_LEN (NLA_HDRLEN) |
| #define GSCAN_BATCH_RESULT_HDR_LEN (SCAN_INDEX_HDR_LEN + SCAN_ID_HDR_LEN + \ |
| SCAN_FLAGS_HDR_LEN + \ |
| GSCAN_NUM_RESULTS_HDR_LEN + \ |
| GSCAN_RESULTS_HDR_LEN) |
| |
| #define VENDOR_REPLY_OVERHEAD (VENDOR_ID_OVERHEAD + \ |
| VENDOR_SUBCMD_OVERHEAD + \ |
| VENDOR_DATA_OVERHEAD) |
| |
| #define GSCAN_ATTR_SET1 10 |
| #define GSCAN_ATTR_SET2 20 |
| #define GSCAN_ATTR_SET3 30 |
| #define GSCAN_ATTR_SET4 40 |
| #define GSCAN_ATTR_SET5 50 |
| #define GSCAN_ATTR_SET6 60 |
| |
| typedef enum { |
| /* don't use 0 as a valid subcommand */ |
| VENDOR_NL80211_SUBCMD_UNSPECIFIED, |
| |
| /* define all vendor startup commands between 0x0 and 0x0FFF */ |
| VENDOR_NL80211_SUBCMD_RANGE_START = 0x0001, |
| VENDOR_NL80211_SUBCMD_RANGE_END = 0x0FFF, |
| |
| /* define all GScan related commands between 0x1000 and 0x10FF */ |
| ANDROID_NL80211_SUBCMD_GSCAN_RANGE_START = 0x1000, |
| ANDROID_NL80211_SUBCMD_GSCAN_RANGE_END = 0x10FF, |
| |
| /* define all NearbyDiscovery related commands between 0x1100 and 0x11FF */ |
| ANDROID_NL80211_SUBCMD_NBD_RANGE_START = 0x1100, |
| ANDROID_NL80211_SUBCMD_NBD_RANGE_END = 0x11FF, |
| |
| /* define all RTT related commands between 0x1100 and 0x11FF */ |
| ANDROID_NL80211_SUBCMD_RTT_RANGE_START = 0x1100, |
| ANDROID_NL80211_SUBCMD_RTT_RANGE_END = 0x11FF, |
| |
| ANDROID_NL80211_SUBCMD_LSTATS_RANGE_START = 0x1200, |
| ANDROID_NL80211_SUBCMD_LSTATS_RANGE_END = 0x12FF, |
| |
| ANDROID_NL80211_SUBCMD_TDLS_RANGE_START = 0x1300, |
| ANDROID_NL80211_SUBCMD_TDLS_RANGE_END = 0x13FF, |
| |
| /* define all wifi stats related commands between 0x1900 and 0x191F */ |
| ANDROID_NL80211_SUBCMD_WIFI_STATS_RANGE_START = 0x1900, |
| ANDROID_NL80211_SUBCMD_WIFI_STATS_RANGE_END = 0x191F, |
| |
| /* define all GWifi related commands between 0x1920 and 0x19FF */ |
| GWIFI_NL80211_SUBCMD_RANGE_START = 0x1920, |
| GWIFI_NL80211_SUBCMD_RANGE_END = 0x19FF, |
| |
| /* define all Qos control related commands between 0x1A20 and 0x1AFF */ |
| ANDROID_NL80211_SUBCMD_WIFI_QOS_RANGE_START = 0x1A00, |
| ANDROID_NL80211_SUBCMD_WIFI_QOS_RANGE_END = 0x1AFF, |
| |
| /* This is reserved for future usage */ |
| } ANDROID_VENDOR_SUB_COMMAND; |
| |
| enum andr_vendor_subcmd { |
| GSCAN_SUBCMD_GET_CAPABILITIES = ANDROID_NL80211_SUBCMD_GSCAN_RANGE_START, |
| GSCAN_SUBCMD_SET_CONFIG, |
| GSCAN_SUBCMD_SET_SCAN_CONFIG, |
| GSCAN_SUBCMD_ENABLE_GSCAN, |
| GSCAN_SUBCMD_GET_SCAN_RESULTS, |
| GSCAN_SUBCMD_SCAN_RESULTS, |
| GSCAN_SUBCMD_SET_HOTLIST, |
| GSCAN_SUBCMD_SET_SIGNIFICANT_CHANGE_CONFIG, |
| GSCAN_SUBCMD_ENABLE_FULL_SCAN_RESULTS, |
| GSCAN_SUBCMD_GET_CHANNEL_LIST, |
| /* ANDR_WIFI_XXX although not related to gscan are defined here */ |
| ANDR_WIFI_SUBCMD_GET_FEATURE_SET, |
| ANDR_WIFI_SUBCMD_GET_FEATURE_SET_MATRIX, |
| ANDR_WIFI_PNO_RANDOM_MAC_OUI, |
| ANDR_WIFI_NODFS_CHANNELS, |
| RTT_SUBCMD_SET_CONFIG = ANDROID_NL80211_SUBCMD_RTT_RANGE_START, |
| RTT_SUBCMD_CANCEL_CONFIG, |
| RTT_SUBCMD_GETCAPABILITY, |
| RTT_SUBCMD_GETAVAILCHANNEL, |
| RTT_SUBCMD_SET_RESPONDER, |
| RTT_SUBCMD_CANCEL_RESPONDER, |
| LSTATS_SUBCMD_GET_INFO = ANDROID_NL80211_SUBCMD_LSTATS_RANGE_START, |
| |
| /* WifiStats related */ |
| WIFI_STATS_GET_TDLS_PEERS = ANDROID_NL80211_SUBCMD_WIFI_STATS_RANGE_START, |
| WIFI_STATS_GET_NUM_FRAME_CHECK_SEQ_ERRORS, |
| WIFI_STATS_CLEAR_HISTOGRAMS, |
| WIFI_STATS_GET_HISTOGRAMS, |
| |
| /* GWifi related */ |
| GWIFI_SUBCMD_INTERFACE_OPERATION = GWIFI_NL80211_SUBCMD_RANGE_START, |
| GWIFI_SUBCMD_STATION_GET_MCS_DATA, |
| GWIFI_SUBCMD_INTERFACE_GET_FOURADDR_SUPPORT, |
| GWIFI_SUBCMD_STATION_SET_PS_MONITOR, |
| GWIFI_SUBCMD_STATION_GET_PS_STATE, |
| GWIFI_SUBCMD_CSI_GET_DUMP_PATH, |
| GWIFI_SUBCMD_CSI_SET_CONFIG, |
| GWIFI_SUBCMD_CSI_CANCEL_CONFIG, |
| GWIFI_SUBCMD_CSI_GET_CONFIG, |
| GWIFI_SUBCMD_CSI_GET_CAPABILITY, |
| GWIFI_SUBCMD_INTERFACE_GET_COMBINATION_LIMIT, |
| |
| /* QOS control related */ |
| WIFI_SUBCMD_QOS_START = ANDROID_NL80211_SUBCMD_WIFI_QOS_RANGE_START, |
| WIFI_SUBCMD_SET_PKT_LIFETIME, |
| WIFI_SUBCMD_SET_AC_SRL, |
| WIFI_SUBCMD_SET_AC_LRL, |
| WIFI_SUBCMD_SET_WME_NOACK, |
| WIFI_SUBCMD_SET_WME_APSD, |
| WIFI_SUBCMD_SET_AMPDU_MPDU, |
| WIFI_SUBCMD_SET_AMPDU_RTS, |
| WIFI_SUBCMD_SET_AMPDU_TID, |
| WIFI_SUBCMD_SET_RTSTHRESH, |
| WIFI_SUBCMD_SET_2G_RATE, |
| WIFI_SUBCMD_SET_5G_RATE, |
| WIFI_SUBCMD_GET_PKT_LIFETIME, |
| WIFI_SUBCMD_GET_AC_SRL, |
| WIFI_SUBCMD_GET_AC_LRL, |
| WIFI_SUBCMD_GET_WME_NOACK, |
| WIFI_SUBCMD_GET_WME_APSD, |
| WIFI_SUBCMD_GET_AMPDU_MPDU, |
| WIFI_SUBCMD_GET_AMPDU_RTS, |
| WIFI_SUBCMD_GET_AMPDU_TID, |
| WIFI_SUBCMD_GET_RTSTHRESH, |
| WIFI_SUBCMD_GET_2G_RATE, |
| WIFI_SUBCMD_GET_5G_RATE, |
| |
| /* Add more sub commands here */ |
| VENDOR_SUBCMD_MAX |
| }; |
| |
| enum gscan_attributes { |
| GSCAN_ATTRIBUTE_NUM_BUCKETS = GSCAN_ATTR_SET1, |
| GSCAN_ATTRIBUTE_BASE_PERIOD, |
| GSCAN_ATTRIBUTE_BUCKETS_BAND, |
| GSCAN_ATTRIBUTE_BUCKET_ID, |
| GSCAN_ATTRIBUTE_BUCKET_PERIOD, |
| GSCAN_ATTRIBUTE_BUCKET_NUM_CHANNELS, |
| GSCAN_ATTRIBUTE_BUCKET_CHANNELS, |
| GSCAN_ATTRIBUTE_NUM_AP_PER_SCAN, |
| GSCAN_ATTRIBUTE_REPORT_THRESHOLD, |
| GSCAN_ATTRIBUTE_NUM_SCANS_TO_CACHE, |
| GSCAN_ATTRIBUTE_BAND = GSCAN_ATTRIBUTE_BUCKETS_BAND, |
| |
| GSCAN_ATTRIBUTE_ENABLE_FEATURE = GSCAN_ATTR_SET2, |
| GSCAN_ATTRIBUTE_SCAN_RESULTS_COMPLETE, |
| GSCAN_ATTRIBUTE_FLUSH_FEATURE, |
| GSCAN_ATTRIBUTE_ENABLE_FULL_SCAN_RESULTS, |
| GSCAN_ATTRIBUTE_REPORT_EVENTS, |
| /* remaining reserved for additional attributes */ |
| GSCAN_ATTRIBUTE_NUM_OF_RESULTS = GSCAN_ATTR_SET3, |
| GSCAN_ATTRIBUTE_FLUSH_RESULTS, |
| GSCAN_ATTRIBUTE_SCAN_RESULTS, /* flat array of wifi_scan_result */ |
| GSCAN_ATTRIBUTE_SCAN_ID, /* indicates scan number */ |
| GSCAN_ATTRIBUTE_SCAN_FLAGS, /* indicates if scan was aborted */ |
| GSCAN_ATTRIBUTE_AP_FLAGS, /* flags on significant change event */ |
| GSCAN_ATTRIBUTE_NUM_CHANNELS, |
| GSCAN_ATTRIBUTE_CHANNEL_LIST, |
| |
| /* remaining reserved for additional attributes */ |
| |
| GSCAN_ATTRIBUTE_SSID = GSCAN_ATTR_SET4, |
| GSCAN_ATTRIBUTE_BSSID, |
| GSCAN_ATTRIBUTE_CHANNEL, |
| GSCAN_ATTRIBUTE_RSSI, |
| GSCAN_ATTRIBUTE_TIMESTAMP, |
| GSCAN_ATTRIBUTE_RTT, |
| GSCAN_ATTRIBUTE_RTTSD, |
| |
| /* remaining reserved for additional attributes */ |
| |
| GSCAN_ATTRIBUTE_HOTLIST_BSSIDS = GSCAN_ATTR_SET5, |
| GSCAN_ATTRIBUTE_RSSI_LOW, |
| GSCAN_ATTRIBUTE_RSSI_HIGH, |
| GSCAN_ATTRIBUTE_HOSTLIST_BSSID_ELEM, |
| GSCAN_ATTRIBUTE_HOTLIST_FLUSH, |
| |
| /* remaining reserved for additional attributes */ |
| GSCAN_ATTRIBUTE_RSSI_SAMPLE_SIZE = GSCAN_ATTR_SET6, |
| GSCAN_ATTRIBUTE_LOST_AP_SAMPLE_SIZE, |
| GSCAN_ATTRIBUTE_MIN_BREACHING, |
| GSCAN_ATTRIBUTE_SIGNIFICANT_CHANGE_BSSIDS, |
| GSCAN_ATTRIBUTE_SIGNIFICANT_CHANGE_FLUSH, |
| GSCAN_ATTRIBUTE_MAX |
| }; |
| |
| enum gscan_bucket_attributes { |
| GSCAN_ATTRIBUTE_CH_BUCKET_1, |
| GSCAN_ATTRIBUTE_CH_BUCKET_2, |
| GSCAN_ATTRIBUTE_CH_BUCKET_3, |
| GSCAN_ATTRIBUTE_CH_BUCKET_4, |
| GSCAN_ATTRIBUTE_CH_BUCKET_5, |
| GSCAN_ATTRIBUTE_CH_BUCKET_6, |
| GSCAN_ATTRIBUTE_CH_BUCKET_7 |
| }; |
| |
| enum gscan_ch_attributes { |
| GSCAN_ATTRIBUTE_CH_ID_1, |
| GSCAN_ATTRIBUTE_CH_ID_2, |
| GSCAN_ATTRIBUTE_CH_ID_3, |
| GSCAN_ATTRIBUTE_CH_ID_4, |
| GSCAN_ATTRIBUTE_CH_ID_5, |
| GSCAN_ATTRIBUTE_CH_ID_6, |
| GSCAN_ATTRIBUTE_CH_ID_7 |
| }; |
| |
| enum rtt_attributes { |
| RTT_ATTRIBUTE_TARGET_CNT, |
| RTT_ATTRIBUTE_TARGET_INFO, |
| RTT_ATTRIBUTE_TARGET_MAC, |
| RTT_ATTRIBUTE_TARGET_TYPE, |
| RTT_ATTRIBUTE_TARGET_PEER, |
| RTT_ATTRIBUTE_TARGET_CHAN, |
| RTT_ATTRIBUTE_TARGET_PERIOD, |
| RTT_ATTRIBUTE_TARGET_NUM_BURST, |
| RTT_ATTRIBUTE_TARGET_NUM_FTM_BURST, |
| RTT_ATTRIBUTE_TARGET_NUM_RETRY_FTM, |
| RTT_ATTRIBUTE_TARGET_NUM_RETRY_FTMR, |
| RTT_ATTRIBUTE_TARGET_LCI, |
| RTT_ATTRIBUTE_TARGET_LCR, |
| RTT_ATTRIBUTE_TARGET_BURST_DURATION, |
| RTT_ATTRIBUTE_TARGET_PREAMBLE, |
| RTT_ATTRIBUTE_TARGET_BW, |
| RTT_ATTRIBUTE_RESULTS_COMPLETE = 30, |
| RTT_ATTRIBUTE_RESULTS_PER_TARGET, |
| RTT_ATTRIBUTE_RESULT_CNT, |
| RTT_ATTRIBUTE_RESULT |
| }; |
| |
| enum wifi_sae_key_attr { |
| BRCM_SAE_KEY_ATTR_BSSID, |
| BRCM_SAE_KEY_ATTR_PMK, |
| BRCM_SAE_KEY_ATTR_PMKID |
| }; |
| |
| enum gwifi_iface_ops { |
| GWIFI_INTERFACE_OP_CREATE, |
| GWIFI_INTERFACE_OP_REMOVE |
| }; |
| |
| typedef enum wl_vendor_event { |
| BRCM_VENDOR_EVENT_UNSPEC, |
| BRCM_VENDOR_EVENT_PRIV_STR, |
| GOOGLE_GSCAN_SIGNIFICANT_EVENT, |
| GOOGLE_GSCAN_GEOFENCE_FOUND_EVENT, |
| GOOGLE_GSCAN_BATCH_SCAN_EVENT, |
| GOOGLE_SCAN_FULL_RESULTS_EVENT, |
| GOOGLE_RTT_COMPLETE_EVENT, |
| GOOGLE_SCAN_COMPLETE_EVENT, |
| GOOGLE_GSCAN_GEOFENCE_LOST_EVENT, |
| BRCM_VENDOR_EVENT_IDSUP_STATUS, |
| BRCM_VENDOR_EVENT_DRIVER_STATUS, |
| #ifdef WL_SAE |
| /* Need to sync vendor event with WPA_SUPPLICANT */ |
| BRCM_VENDOR_EVENT_SAE_KEY = 11, |
| #endif /* WL_SAE */ |
| } wl_vendor_event_t; |
| |
| enum andr_wifi_attr { |
| ANDR_WIFI_ATTRIBUTE_NUM_FEATURE_SET, |
| ANDR_WIFI_ATTRIBUTE_FEATURE_SET, |
| ANDR_WIFI_ATTRIBUTE_PNO_RANDOM_MAC_OUI, |
| ANDR_WIFI_ATTRIBUTE_NODFS_SET, |
| ANDR_WIFI_ATTRIBUTE_COUNTRY, |
| ANDR_WIFI_ATTRIBUTE_ND_OFFLOAD_VALUE, |
| ANDR_WIFI_ATTRIBUTE_TCPACK_SUP_VALUE, |
| ANDR_WIFI_ATTRIBUTE_IFACE_OP_CODE, |
| ANDR_WIFI_ATTRIBUTE_IFACE_NAME_VALUE, |
| ANDR_WIFI_ATTRIBUTE_IFACE_INDEX, |
| ANDR_WIFI_ATTRIBUTE_IFACE_TYPE_VALUE, |
| ANDR_WIFI_ATTRIBUTE_IFACE_4ADDR_VALUE, |
| ANDR_WIFI_ATTRIBUTE_STATION_MAC, |
| ANDR_WIFI_ATTRIBUTE_MONITOR_STA_PS |
| }; |
| |
| typedef enum wl_vendor_gscan_attribute { |
| ATTR_START_GSCAN, |
| ATTR_STOP_GSCAN, |
| ATTR_SET_SCAN_BATCH_CFG_ID, /* set batch scan params */ |
| ATTR_SET_SCAN_GEOFENCE_CFG_ID, /* set list of bssids to track */ |
| ATTR_SET_SCAN_SIGNIFICANT_CFG_ID, /* set list of bssids, rssi threshold etc.. */ |
| ATTR_SET_SCAN_CFG_ID, /* set common scan config params here */ |
| ATTR_GET_GSCAN_CAPABILITIES_ID, |
| /* Add more sub commands here */ |
| ATTR_GSCAN_MAX |
| } wl_vendor_gscan_attribute_t; |
| |
| typedef enum gscan_batch_attribute { |
| ATTR_GSCAN_BATCH_BESTN, |
| ATTR_GSCAN_BATCH_MSCAN, |
| ATTR_GSCAN_BATCH_BUFFER_THRESHOLD |
| } gscan_batch_attribute_t; |
| |
| typedef enum gscan_geofence_attribute { |
| ATTR_GSCAN_NUM_HOTLIST_BSSID, |
| ATTR_GSCAN_HOTLIST_BSSID |
| } gscan_geofence_attribute_t; |
| |
| typedef enum gscan_complete_event { |
| WIFI_SCAN_BUFFER_FULL, |
| WIFI_SCAN_COMPLETE |
| } gscan_complete_event_t; |
| |
| /* Capture the BRCM_VENDOR_SUBCMD_PRIV_STRINGS* here */ |
| #define BRCM_VENDOR_SCMD_CAPA "cap" |
| |
| #if defined(WL_VENDOR_EXT_SUPPORT) || defined(CONFIG_BCMDHD_VENDOR_EXT) |
| extern int wl_cfgvendor_attach(struct wiphy *wiphy); |
| extern int wl_cfgvendor_detach(struct wiphy *wiphy); |
| extern int wl_cfgvendor_send_async_event(struct wiphy *wiphy, |
| struct net_device *dev, int event_id, const void *data, int len); |
| extern int wl_cfgvendor_send_hotlist_event(struct wiphy *wiphy, |
| struct net_device *dev, void *data, int len, wl_vendor_event_t event); |
| #else |
| static INLINE int cfgvendor_attach(struct wiphy *wiphy) { return 0; } |
| static INLINE int cfgvendor_detach(struct wiphy *wiphy) { return 0; } |
| #endif /* defined(WL_VENDOR_EXT_SUPPORT) */ |
| |
| #endif /* _wl_cfgvendor_h_ */ |