1 /** @file moal_cfgvendor.h 2 * 3 * @brief This file contains the CFG80211 vendor specific defines. 4 * 5 * Copyright (C) 2011-2017, Marvell International Ltd. 6 * 7 * This software file (the "File") is distributed by Marvell International 8 * Ltd. under the terms of the GNU General Public License Version 2, June 1991 9 * (the "License"). You may use, redistribute and/or modify this File in 10 * accordance with the terms and conditions of the License, a copy of which 11 * is available by writing to the Free Software Foundation, Inc., 12 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the 13 * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. 14 * 15 * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE 17 * ARE EXPRESSLY DISCLAIMED. The License provides additional details about 18 * this warranty disclaimer. 19 * 20 */ 21 22 #ifndef _MOAL_CFGVENDOR_H_ 23 #define _MOAL_CFGVENDOR_H_ 24 25 #include "moal_main.h" 26 27 #if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 14, 0) 28 29 #define ATTRIBUTE_U32_LEN (nla_total_size(NLA_HDRLEN + 4)) 30 #define VENDOR_ID_OVERHEAD ATTRIBUTE_U32_LEN 31 #define VENDOR_SUBCMD_OVERHEAD ATTRIBUTE_U32_LEN 32 #define VENDOR_DATA_OVERHEAD (nla_total_size(NLA_HDRLEN)) 33 34 #define VENDOR_REPLY_OVERHEAD (VENDOR_ID_OVERHEAD + \ 35 VENDOR_SUBCMD_OVERHEAD + \ 36 VENDOR_DATA_OVERHEAD) 37 38 /* Feature enums */ 39 #define WIFI_FEATURE_INFRA 0x0001 // Basic infrastructure mode 40 #define WIFI_FEATURE_INFRA_5G 0x0002 // Support for 5 GHz Band 41 #define WIFI_FEATURE_HOTSPOT 0x0004 // Support for GAS/ANQP 42 #define WIFI_FEATURE_P2P 0x0008 // Wifi-Direct 43 #define WIFI_FEATURE_SOFT_AP 0x0010 // Soft AP 44 #define WIFI_FEATURE_GSCAN 0x0020 // Google-Scan APIs 45 #define WIFI_FEATURE_NAN 0x0040 // Neighbor Awareness Networking 46 #define WIFI_FEATURE_D2D_RTT 0x0080 // Device-to-device RTT 47 #define WIFI_FEATURE_D2AP_RTT 0x0100 // Device-to-AP RTT 48 #define WIFI_FEATURE_BATCH_SCAN 0x0200 // Batched Scan (legacy) 49 #define WIFI_FEATURE_PNO 0x0400 // Preferred network offload 50 #define WIFI_FEATURE_ADDITIONAL_STA 0x0800 // Support for two STAs 51 #define WIFI_FEATURE_TDLS 0x1000 // Tunnel directed link setup 52 #define WIFI_FEATURE_TDLS_OFFCHANNEL 0x2000 // Support for TDLS off channel 53 #define WIFI_FEATURE_EPR 0x4000 // Enhanced power reporting 54 #define WIFI_FEATURE_AP_STA 0x8000 // Support for AP STA Concurrency 55 #define WIFI_FEATURE_LINK_LAYER_STATS 0x10000 // Link layer stats collection 56 #define WIFI_FEATURE_LOGGER 0x20000 // WiFi Logger 57 #define WIFI_FEATURE_HAL_EPNO 0x40000 // WiFi PNO enhanced 58 #define WIFI_FEATURE_RSSI_MONITOR 0x80000 // RSSI Monitor 59 #define WIFI_FEATURE_MKEEP_ALIVE 0x100000 // WiFi mkeep_alive 60 #define WIFI_FEATURE_CONFIG_NDO 0x200000 // ND offload configure 61 #define WIFI_FEATURE_TX_TRANSMIT_POWER 0x400000 // Capture Tx transmit power levels 62 #define WIFI_FEATURE_CONTROL_ROAMING 0x800000 // Enable/Disable firmware roaming 63 #define WIFI_FEATURE_IE_WHITELIST 0x1000000 // Support Probe IE white listing 64 #define WIFI_FEATURE_SCAN_RAND 0x2000000 // Support MAC & Probe Sequence Number randomization 65 // Add more features here 66 67 #define MAX_CHANNEL_NUM 200 68 69 /** Wifi Band */ 70 typedef enum { 71 WIFI_BAND_UNSPECIFIED, 72 /** 2.4 GHz */ 73 WIFI_BAND_BG = 1, 74 /** 5 GHz without DFS */ 75 WIFI_BAND_A = 2, 76 /** 5 GHz DFS only */ 77 WIFI_BAND_A_DFS = 4, 78 /** 5 GHz with DFS */ 79 WIFI_BAND_A_WITH_DFS = 6, 80 /** 2.4 GHz + 5 GHz; no DFS */ 81 WIFI_BAND_ABG = 3, 82 /** 2.4 GHz + 5 GHz with DFS */ 83 WIFI_BAND_ABG_WITH_DFS = 7, 84 85 /** Keep it last */ 86 WIFI_BAND_LAST, 87 WIFI_BAND_MAX = WIFI_BAND_LAST - 1, 88 } wifi_band; 89 90 typedef enum wifi_attr { 91 ATTR_FEATURE_SET_INVALID = 0, 92 ATTR_FEATURE_SET = 2, 93 ATTR_NODFS_VALUE = 3, 94 ATTR_COUNTRY_CODE = 4, 95 ATTR_CHANNELS_BAND = 5, 96 ATTR_NUM_CHANNELS = 6, 97 ATTR_CHANNEL_LIST = 7, 98 ATTR_GET_CONCURRENCY_MATRIX_SET_SIZE_MAX = 8, 99 ATTR_GET_CONCURRENCY_MATRIX_SET_SIZE = 9, 100 ATTR_GET_CONCURRENCY_MATRIX_SET = 10, 101 ATTR_WIFI_MAX, 102 } wifi_attr_t; 103 104 enum mrvl_wlan_vendor_attr_wifi_logger { 105 MRVL_WLAN_VENDOR_ATTR_NAME = 10, 106 }; 107 108 /**vendor event*/ 109 enum vendor_event { 110 event_hang = 0, 111 event_rssi_monitor = 0x1501, 112 fw_roam_success = 0x10002, 113 event_dfs_radar_detected = 0x10004, 114 event_dfs_cac_started = 0x10005, 115 event_dfs_cac_finished = 0x10006, 116 event_dfs_cac_aborted = 0x10007, 117 event_dfs_nop_finished = 0x10008, 118 event_max, 119 }; 120 121 /** struct dfs_event */ 122 typedef struct _dfs_event { 123 int freq; 124 int ht_enabled; 125 int chan_offset; 126 enum nl80211_chan_width chan_width; 127 int cf1; 128 int cf2; 129 } dfs_event; 130 131 void woal_cfg80211_dfs_vendor_event(moal_private *priv, int event, 132 struct cfg80211_chan_def *chandef); 133 134 enum ATTR_RSSI_MONITOR { 135 ATTR_RSSI_MONITOR_CONTROL, 136 ATTR_RSSI_MONITOR_MIN_RSSI, 137 ATTR_RSSI_MONITOR_MAX_RSSI, 138 ATTR_RSSI_MONITOR_CUR_BSSID, 139 ATTR_RSSI_MONITOR_CUR_RSSI, 140 ATTR_RSSI_MONITOR_MAX, 141 }; 142 void woal_cfg80211_rssi_monitor_event(moal_private *priv, t_s16 rssi); 143 144 /**vendor sub command*/ 145 enum vendor_sub_command { 146 sub_cmd_set_drvdbg = 0, 147 sub_cmd_set_roaming_offload_key = 0x0002, 148 sub_cmd_dfs_capability = 0x0005, 149 sub_cmd_get_correlated_time = 0x0006, 150 sub_cmd_nd_offload = 0x0100, 151 sub_cmd_get_valid_channels = 0x1009, 152 sub_cmd_get_wifi_supp_feature_set = 0x100a, 153 sub_cmd_set_country_code = 0x100d, 154 sub_cmd_get_fw_version = 0x1404, 155 sub_cmd_get_drv_version = 0x1406, 156 sub_cmd_rssi_monitor = 0x1500, 157 /*Sub-command for wifi hal */ 158 sub_cmd_get_roaming_capability = 0x1700, 159 sub_cmd_fw_roaming_enable = 0x1701, 160 sub_cmd_fw_roaming_config = 0x1702, 161 /*Sub-command for wpa_supplicant */ 162 sub_cmd_fw_roaming_support = 0x0010, 163 sub_cmd_max, 164 }; 165 166 void woal_register_cfg80211_vendor_command(struct wiphy *wiphy); 167 int woal_cfg80211_vendor_event(IN moal_private *priv, 168 IN int event, IN t_u8 *data, IN int len); 169 170 enum mrvl_wlan_vendor_attr { 171 MRVL_WLAN_VENDOR_ATTR_INVALID = 0, 172 /* Used by MRVL_NL80211_VENDOR_SUBCMD_DFS_CAPABILITY */ 173 MRVL_WLAN_VENDOR_ATTR_DFS = 1, 174 MRVL_WLAN_VENDOR_ATTR_AFTER_LAST, 175 176 MRVL_WLAN_VENDOR_ATTR_MAX = MRVL_WLAN_VENDOR_ATTR_AFTER_LAST - 1, 177 }; 178 179 typedef enum { 180 ATTR_ND_OFFLOAD_INVALID = 0, 181 ATTR_ND_OFFLOAD_CONTROL, 182 ATTR_ND_OFFLOAD_MAX, 183 } ND_OFFLOAD_ATTR; 184 185 int woal_roam_ap_info(IN moal_private *priv, IN t_u8 *data, IN int len); 186 #endif /*endif CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 14, 0) */ 187 188 typedef struct { 189 u32 max_blacklist_size; 190 u32 max_whitelist_size; 191 } wifi_roaming_capabilities; 192 193 typedef struct { 194 u32 num_bssid; 195 t_u8 mac_addr[MAX_AP_LIST][MLAN_MAC_ADDR_LENGTH]; 196 } wifi_bssid_params; 197 198 typedef struct { 199 u32 length; 200 char ssid[MLAN_MAX_SSID_LENGTH]; 201 } ssid_t; 202 203 typedef struct { 204 u32 num_ssid; 205 ssid_t whitelist_ssid[MAX_SSID_NUM]; 206 } wifi_ssid_params; 207 208 /*Attribute for wifi hal*/ 209 enum mrvl_wlan_vendor_attr_fw_roaming { 210 MRVL_WLAN_VENDOR_ATTR_FW_ROAMING_INVALID = 0, 211 MRVL_WLAN_VENDOR_ATTR_FW_ROAMING_CAPA, 212 MRVL_WLAN_VENDOR_ATTR_FW_ROAMING_CONTROL, 213 MRVL_WLAN_VENDOR_ATTR_FW_ROAMING_CONFIG_BSSID, 214 MRVL_WLAN_VENDOR_ATTR_FW_ROAMING_CONFIG_SSID, 215 /* keep last */ 216 MRVL_WLAN_VENDOR_ATTR_FW_ROAMING_AFTER_LAST, 217 MRVL_WLAN_VENDOR_ATTR_FW_ROAMING_MAX = 218 MRVL_WLAN_VENDOR_ATTR_FW_ROAMING_AFTER_LAST - 1 219 }; 220 221 /*Attribute for wpa_supplicant*/ 222 enum mrvl_wlan_vendor_attr_roam_auth { 223 MRVL_WLAN_VENDOR_ATTR_ROAM_AUTH_INVALID = 0, 224 MRVL_WLAN_VENDOR_ATTR_ROAM_AUTH_BSSID, 225 MRVL_WLAN_VENDOR_ATTR_ROAM_AUTH_REQ_IE, 226 MRVL_WLAN_VENDOR_ATTR_ROAM_AUTH_RESP_IE, 227 MRVL_WLAN_VENDOR_ATTR_ROAM_AUTH_AUTHORIZED, 228 MRVL_WLAN_VENDOR_ATTR_ROAM_AUTH_KEY_REPLAY_CTR, 229 MRVL_WLAN_VENDOR_ATTR_ROAM_AUTH_PTK_KCK, 230 MRVL_WLAN_VENDOR_ATTR_ROAM_AUTH_PTK_KEK, 231 MRVL_WLAN_VENDOR_ATTR_ROAM_AUTH_SUBNET_STATUS, 232 MRVL_WLAN_VENDOR_ATTR_FW_ROAMING_SUPPORT, 233 /* keep last */ 234 MRVL_WLAN_VENDOR_ATTR_ROAM_AUTH_AFTER_LAST, 235 MRVL_WLAN_VENDOR_ATTR_ROAM_AUTH_MAX = 236 MRVL_WLAN_VENDOR_ATTR_ROAM_AUTH_AFTER_LAST - 1 237 }; 238 239 #define PROPRIETARY_TLV_BASE_ID 0x100 240 #define TLV_TYPE_APINFO (PROPRIETARY_TLV_BASE_ID + 249) 241 #define TLV_TYPE_KEYINFO (PROPRIETARY_TLV_BASE_ID + 250) 242 #define TLV_TYPE_ASSOC_REQ_IE (PROPRIETARY_TLV_BASE_ID + 292) 243 244 /** MrvlIEtypesHeader_t */ 245 typedef struct MrvlIEtypesHeader { 246 /** Header type */ 247 t_u16 type; 248 /** Header length */ 249 t_u16 len; 250 } __ATTRIB_PACK__ MrvlIEtypesHeader_t; 251 252 typedef struct _key_info_tlv { 253 /** Header */ 254 MrvlIEtypesHeader_t header; 255 /** kck, kek, key_replay*/ 256 mlan_ds_misc_gtk_rekey_data key; 257 } key_info; 258 259 typedef struct _apinfo_tlv { 260 /** Header */ 261 MrvlIEtypesHeader_t header; 262 /** Assoc response buffer */ 263 t_u8 rsp_ie[1]; 264 } apinfo; 265 266 #endif /* _MOAL_CFGVENDOR_H_ */ 267