1 /****************************************************************************** 2 * 3 * Copyright(c) 2007 - 2014 Realtek Corporation. All rights reserved. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of version 2 of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 * more details. 13 * 14 * You should have received a copy of the GNU General Public License along with 15 * this program; if not, write to the Free Software Foundation, Inc., 16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 17 * 18 * 19 ******************************************************************************/ 20 21 #ifndef _RTW_CFGVENDOR_H_ 22 #define _RTW_CFGVENDOR_H_ 23 24 #define OUI_SSV 0x00E04C 25 #define OUI_GOOGLE 0x001A11 26 #define ATTRIBUTE_U32_LEN (NLA_HDRLEN + 4) 27 #define VENDOR_ID_OVERHEAD ATTRIBUTE_U32_LEN 28 #define VENDOR_SUBCMD_OVERHEAD ATTRIBUTE_U32_LEN 29 #define VENDOR_DATA_OVERHEAD (NLA_HDRLEN) 30 31 #define SCAN_RESULTS_COMPLETE_FLAG_LEN ATTRIBUTE_U32_LEN 32 #define SCAN_INDEX_HDR_LEN (NLA_HDRLEN) 33 #define SCAN_ID_HDR_LEN ATTRIBUTE_U32_LEN 34 #define SCAN_FLAGS_HDR_LEN ATTRIBUTE_U32_LEN 35 #define GSCAN_NUM_RESULTS_HDR_LEN ATTRIBUTE_U32_LEN 36 #define GSCAN_RESULTS_HDR_LEN (NLA_HDRLEN) 37 #define GSCAN_BATCH_RESULT_HDR_LEN (SCAN_INDEX_HDR_LEN + SCAN_ID_HDR_LEN + \ 38 SCAN_FLAGS_HDR_LEN + \ 39 GSCAN_NUM_RESULTS_HDR_LEN + \ 40 GSCAN_RESULTS_HDR_LEN) 41 42 #define VENDOR_REPLY_OVERHEAD (VENDOR_ID_OVERHEAD + \ 43 VENDOR_SUBCMD_OVERHEAD + \ 44 VENDOR_DATA_OVERHEAD) 45 typedef enum { 46 /* don't use 0 as a valid subcommand */ 47 VENDOR_NL80211_SUBCMD_UNSPECIFIED, 48 49 /* define all vendor startup commands between 0x0 and 0x0FFF */ 50 VENDOR_NL80211_SUBCMD_RANGE_START = 0x0001, 51 VENDOR_NL80211_SUBCMD_RANGE_END = 0x0FFF, 52 53 /* define all GScan related commands between 0x1000 and 0x10FF */ 54 ANDROID_NL80211_SUBCMD_GSCAN_RANGE_START = 0x1000, 55 ANDROID_NL80211_SUBCMD_GSCAN_RANGE_END = 0x10FF, 56 57 /* define all NearbyDiscovery related commands between 0x1100 and 0x11FF */ 58 ANDROID_NL80211_SUBCMD_NBD_RANGE_START = 0x1100, 59 ANDROID_NL80211_SUBCMD_NBD_RANGE_END = 0x11FF, 60 61 /* define all RTT related commands between 0x1100 and 0x11FF */ 62 ANDROID_NL80211_SUBCMD_RTT_RANGE_START = 0x1100, 63 ANDROID_NL80211_SUBCMD_RTT_RANGE_END = 0x11FF, 64 65 ANDROID_NL80211_SUBCMD_LSTATS_RANGE_START = 0x1200, 66 ANDROID_NL80211_SUBCMD_LSTATS_RANGE_END = 0x12FF, 67 68 ANDROID_NL80211_SUBCMD_TDLS_RANGE_START = 0x1300, 69 ANDROID_NL80211_SUBCMD_TDLS_RANGE_END = 0x13FF, 70 /* This is reserved for future usage */ 71 72 } ANDROID_VENDOR_SUB_COMMAND; 73 74 enum wl_vendor_subcmd { 75 RTK_VENDOR_SCMD_UNSPEC, 76 RTK_VENDOR_SCMD_PRIV_STR, 77 GSCAN_SUBCMD_GET_CAPABILITIES = ANDROID_NL80211_SUBCMD_GSCAN_RANGE_START, 78 GSCAN_SUBCMD_SET_CONFIG, 79 GSCAN_SUBCMD_SET_SCAN_CONFIG, 80 GSCAN_SUBCMD_ENABLE_GSCAN, 81 GSCAN_SUBCMD_GET_SCAN_RESULTS, 82 GSCAN_SUBCMD_SCAN_RESULTS, 83 GSCAN_SUBCMD_SET_HOTLIST, 84 GSCAN_SUBCMD_SET_SIGNIFICANT_CHANGE_CONFIG, 85 GSCAN_SUBCMD_ENABLE_FULL_SCAN_RESULTS, 86 GSCAN_SUBCMD_GET_CHANNEL_LIST, 87 ANDR_WIFI_SUBCMD_GET_FEATURE_SET, 88 ANDR_WIFI_SUBCMD_GET_FEATURE_SET_MATRIX, 89 RTT_SUBCMD_SET_CONFIG = ANDROID_NL80211_SUBCMD_RTT_RANGE_START, 90 RTT_SUBCMD_CANCEL_CONFIG, 91 RTT_SUBCMD_GETCAPABILITY, 92 /* Add more sub commands here */ 93 VENDOR_SUBCMD_MAX 94 }; 95 96 enum gscan_attributes { 97 GSCAN_ATTRIBUTE_NUM_BUCKETS = 10, 98 GSCAN_ATTRIBUTE_BASE_PERIOD, 99 GSCAN_ATTRIBUTE_BUCKETS_BAND, 100 GSCAN_ATTRIBUTE_BUCKET_ID, 101 GSCAN_ATTRIBUTE_BUCKET_PERIOD, 102 GSCAN_ATTRIBUTE_BUCKET_NUM_CHANNELS, 103 GSCAN_ATTRIBUTE_BUCKET_CHANNELS, 104 GSCAN_ATTRIBUTE_NUM_AP_PER_SCAN, 105 GSCAN_ATTRIBUTE_REPORT_THRESHOLD, 106 GSCAN_ATTRIBUTE_NUM_SCANS_TO_CACHE, 107 GSCAN_ATTRIBUTE_BAND = GSCAN_ATTRIBUTE_BUCKETS_BAND, 108 109 GSCAN_ATTRIBUTE_ENABLE_FEATURE = 20, 110 GSCAN_ATTRIBUTE_SCAN_RESULTS_COMPLETE, 111 GSCAN_ATTRIBUTE_FLUSH_FEATURE, 112 GSCAN_ATTRIBUTE_ENABLE_FULL_SCAN_RESULTS, 113 GSCAN_ATTRIBUTE_REPORT_EVENTS, 114 /* remaining reserved for additional attributes */ 115 GSCAN_ATTRIBUTE_NUM_OF_RESULTS = 30, 116 GSCAN_ATTRIBUTE_FLUSH_RESULTS, 117 GSCAN_ATTRIBUTE_SCAN_RESULTS, /* flat array of wifi_scan_result */ 118 GSCAN_ATTRIBUTE_SCAN_ID, /* indicates scan number */ 119 GSCAN_ATTRIBUTE_SCAN_FLAGS, /* indicates if scan was aborted */ 120 GSCAN_ATTRIBUTE_AP_FLAGS, /* flags on significant change event */ 121 GSCAN_ATTRIBUTE_NUM_CHANNELS, 122 GSCAN_ATTRIBUTE_CHANNEL_LIST, 123 124 /* remaining reserved for additional attributes */ 125 126 GSCAN_ATTRIBUTE_SSID = 40, 127 GSCAN_ATTRIBUTE_BSSID, 128 GSCAN_ATTRIBUTE_CHANNEL, 129 GSCAN_ATTRIBUTE_RSSI, 130 GSCAN_ATTRIBUTE_TIMESTAMP, 131 GSCAN_ATTRIBUTE_RTT, 132 GSCAN_ATTRIBUTE_RTTSD, 133 134 /* remaining reserved for additional attributes */ 135 136 GSCAN_ATTRIBUTE_HOTLIST_BSSIDS = 50, 137 GSCAN_ATTRIBUTE_RSSI_LOW, 138 GSCAN_ATTRIBUTE_RSSI_HIGH, 139 GSCAN_ATTRIBUTE_HOSTLIST_BSSID_ELEM, 140 GSCAN_ATTRIBUTE_HOTLIST_FLUSH, 141 142 /* remaining reserved for additional attributes */ 143 GSCAN_ATTRIBUTE_RSSI_SAMPLE_SIZE = 60, 144 GSCAN_ATTRIBUTE_LOST_AP_SAMPLE_SIZE, 145 GSCAN_ATTRIBUTE_MIN_BREACHING, 146 GSCAN_ATTRIBUTE_SIGNIFICANT_CHANGE_BSSIDS, 147 GSCAN_ATTRIBUTE_SIGNIFICANT_CHANGE_FLUSH, 148 GSCAN_ATTRIBUTE_MAX 149 }; 150 151 enum gscan_bucket_attributes { 152 GSCAN_ATTRIBUTE_CH_BUCKET_1, 153 GSCAN_ATTRIBUTE_CH_BUCKET_2, 154 GSCAN_ATTRIBUTE_CH_BUCKET_3, 155 GSCAN_ATTRIBUTE_CH_BUCKET_4, 156 GSCAN_ATTRIBUTE_CH_BUCKET_5, 157 GSCAN_ATTRIBUTE_CH_BUCKET_6, 158 GSCAN_ATTRIBUTE_CH_BUCKET_7 159 }; 160 161 enum gscan_ch_attributes { 162 GSCAN_ATTRIBUTE_CH_ID_1, 163 GSCAN_ATTRIBUTE_CH_ID_2, 164 GSCAN_ATTRIBUTE_CH_ID_3, 165 GSCAN_ATTRIBUTE_CH_ID_4, 166 GSCAN_ATTRIBUTE_CH_ID_5, 167 GSCAN_ATTRIBUTE_CH_ID_6, 168 GSCAN_ATTRIBUTE_CH_ID_7 169 }; 170 171 enum rtt_attributes { 172 RTT_ATTRIBUTE_TARGET_CNT, 173 RTT_ATTRIBUTE_TARGET_INFO, 174 RTT_ATTRIBUTE_TARGET_MAC, 175 RTT_ATTRIBUTE_TARGET_TYPE, 176 RTT_ATTRIBUTE_TARGET_PEER, 177 RTT_ATTRIBUTE_TARGET_CHAN, 178 RTT_ATTRIBUTE_TARGET_MODE, 179 RTT_ATTRIBUTE_TARGET_INTERVAL, 180 RTT_ATTRIBUTE_TARGET_NUM_MEASUREMENT, 181 RTT_ATTRIBUTE_TARGET_NUM_PKT, 182 RTT_ATTRIBUTE_TARGET_NUM_RETRY 183 }; 184 185 typedef enum wl_vendor_event { 186 RTK_VENDOR_EVENT_UNSPEC, 187 RTK_VENDOR_EVENT_PRIV_STR, 188 GOOGLE_GSCAN_SIGNIFICANT_EVENT, 189 GOOGLE_GSCAN_GEOFENCE_FOUND_EVENT, 190 GOOGLE_GSCAN_BATCH_SCAN_EVENT, 191 GOOGLE_SCAN_FULL_RESULTS_EVENT, 192 GOOGLE_RTT_COMPLETE_EVENT, 193 GOOGLE_SCAN_COMPLETE_EVENT, 194 GOOGLE_GSCAN_GEOFENCE_LOST_EVENT 195 } wl_vendor_event_t; 196 197 enum andr_wifi_feature_set_attr { 198 ANDR_WIFI_ATTRIBUTE_NUM_FEATURE_SET, 199 ANDR_WIFI_ATTRIBUTE_FEATURE_SET 200 }; 201 202 typedef enum wl_vendor_gscan_attribute { 203 ATTR_START_GSCAN, 204 ATTR_STOP_GSCAN, 205 ATTR_SET_SCAN_BATCH_CFG_ID, /* set batch scan params */ 206 ATTR_SET_SCAN_GEOFENCE_CFG_ID, /* set list of bssids to track */ 207 ATTR_SET_SCAN_SIGNIFICANT_CFG_ID, /* set list of bssids, rssi threshold etc.. */ 208 ATTR_SET_SCAN_CFG_ID, /* set common scan config params here */ 209 ATTR_GET_GSCAN_CAPABILITIES_ID, 210 /* Add more sub commands here */ 211 ATTR_GSCAN_MAX 212 } wl_vendor_gscan_attribute_t; 213 214 typedef enum gscan_batch_attribute { 215 ATTR_GSCAN_BATCH_BESTN, 216 ATTR_GSCAN_BATCH_MSCAN, 217 ATTR_GSCAN_BATCH_BUFFER_THRESHOLD 218 } gscan_batch_attribute_t; 219 220 typedef enum gscan_geofence_attribute { 221 ATTR_GSCAN_NUM_HOTLIST_BSSID, 222 ATTR_GSCAN_HOTLIST_BSSID 223 } gscan_geofence_attribute_t; 224 225 typedef enum gscan_complete_event { 226 WIFI_SCAN_BUFFER_FULL, 227 WIFI_SCAN_COMPLETE 228 } gscan_complete_event_t; 229 230 /* Capture the RTK_VENDOR_SUBCMD_PRIV_STRINGS* here */ 231 #define RTK_VENDOR_SCMD_CAPA "cap" 232 233 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) || defined(SSV_VENDOR_EXT_SUPPORT) 234 extern int ssv_cfgvendor_attach(struct wiphy *wiphy); 235 extern int ssv_cfgvendor_detach(struct wiphy *wiphy); 236 extern int ssv_cfgvendor_send_async_event(struct wiphy *wiphy, 237 struct net_device *dev, int event_id, const void *data, int len); 238 #if defined(GSCAN_SUPPORT) && 0 239 extern int wl_cfgvendor_send_hotlist_event(struct wiphy *wiphy, 240 struct net_device *dev, void *data, int len, wl_vendor_event_t event); 241 #endif 242 #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) || defined(RTW_VENDOR_EXT_SUPPORT) */ 243 244 #endif /* _RTW_CFGVENDOR_H_ */ 245 246