xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/rockchip_wlan/mvl88w8977/mlinux/moal_cfgvendor.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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