| /* | 
 |  * Linux cfg80211 driver - Android commands functions | 
 |  * | 
 |  * Copyright (C) 1999-2016, Broadcom Corporation | 
 |  * | 
 |  *      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. | 
 |  * | 
 |  *      Notwithstanding the above, under no circumstances may you combine this | 
 |  * software in any way with any other Broadcom software provided under a license | 
 |  * other than the GPL, without Broadcom's express prior written consent. | 
 |  * | 
 |  * | 
 |  * <<Broadcom-WL-IPTag/Open:>> | 
 |  * | 
 |  * $Id: wl_android.h 608194 2015-12-24 04:34:35Z $ | 
 |  */ | 
 |  | 
 | #ifndef _wl_android_cmd_ | 
 | #define _wl_android_cmd_ | 
 |  | 
 | #include <linux/module.h> | 
 | #include <linux/netdevice.h> | 
 | #include <wldev_common.h> | 
 | #include <wl_android.h> | 
 |  | 
 | /* If any feature uses the Generic Netlink Interface, put it here to enable WL_GENL | 
 |  * automatically | 
 |  */ | 
 | #if defined(BT_WIFI_HANDOVER) || defined(WL_NAN) | 
 | #define WL_GENL | 
 | #endif | 
 |  | 
 | int wl_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd); | 
 | #ifdef WL_EXT_IAPSTA | 
 | int wl_android_ext_attach_netdev(struct net_device *net, uint8 bssidx); | 
 | int wl_android_ext_dettach_netdev(void); | 
 | void wl_android_ext_iapsta_disconnect_sta(struct net_device *dev, u32 channel); | 
 | #endif | 
 | int wl_android_ext_priv_cmd(struct net_device *net, char *command, int total_len, | 
 | 	int *bytes_written); | 
 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)) | 
 | #define strnicmp(str1, str2, len) strncasecmp((str1), (str2), (len)) | 
 | #endif | 
 |  | 
 | typedef enum IF_STATE { | 
 | 	IF_STATE_INIT = 1, | 
 | 	IF_STATE_DISALBE, | 
 | 	IF_STATE_ENABLE | 
 | } if_state_t; | 
 |  | 
 | typedef enum APSTAMODE { | 
 | 	ISTAONLY_MODE = 1, | 
 | 	IAPONLY_MODE, | 
 | 	IAPSTA_MODE, | 
 | 	IDUALAP_MODE, | 
 | 	IGOSTA_MODE, | 
 | 	IGCSTA_MODE | 
 | } apstamode_t; | 
 |  | 
 | typedef enum IFMODE { | 
 | 	ISTA_MODE = 1, | 
 | 	IAP_MODE | 
 | } ifmode_t; | 
 |  | 
 | typedef enum BGNMODE { | 
 | 	IEEE80211B = 1, | 
 | 	IEEE80211G, | 
 | 	IEEE80211BG, | 
 | 	IEEE80211BGN, | 
 | 	IEEE80211BGNAC | 
 | } bgnmode_t; | 
 |  | 
 | typedef enum AUTHMODE { | 
 | 	AUTH_OPEN, | 
 | 	AUTH_SHARED, | 
 | 	AUTH_WPAPSK, | 
 | 	AUTH_WPA2PSK, | 
 | 	AUTH_WPAWPA2PSK | 
 | } authmode_t; | 
 |  | 
 | typedef enum ENCMODE { | 
 | 	ENC_NONE, | 
 | 	ENC_WEP, | 
 | 	ENC_TKIP, | 
 | 	ENC_AES, | 
 | 	ENC_TKIPAES | 
 | } encmode_t; | 
 |  | 
 | /* i/f query */ | 
 | typedef struct wl_if_info { | 
 | 	struct net_device *dev; | 
 | 	if_state_t ifstate; | 
 | 	ifmode_t ifmode; | 
 | 	uint bssidx; | 
 | 	char ifname[IFNAMSIZ+1]; | 
 | 	char ssid[DOT11_MAX_SSID_LEN]; | 
 | 	struct ether_addr bssid; | 
 | 	bgnmode_t bgnmode; | 
 | 	int hidden; | 
 | 	int maxassoc; | 
 | 	uint16 channel; | 
 | 	authmode_t amode; | 
 | 	encmode_t emode; | 
 | 	char key[100]; | 
 | } wl_apsta_if_t; | 
 |  | 
 | typedef struct wl_apsta_params { | 
 | 	struct wl_if_info pif; // primary device | 
 | 	struct wl_if_info vif; // virtual device | 
 | 	int ioctl_ver; | 
 | 	bool init; | 
 | 	apstamode_t apstamode; | 
 | } wl_apsta_params_t; | 
 |  | 
 | s32 wl_netlink_send_msg(int pid, int type, int seq, void *data, size_t size); | 
 |  | 
 | /* hostap mac mode */ | 
 | #define MACLIST_MODE_DISABLED   0 | 
 | #define MACLIST_MODE_DENY       1 | 
 | #define MACLIST_MODE_ALLOW      2 | 
 |  | 
 | /* max number of assoc list */ | 
 | #define MAX_NUM_OF_ASSOCLIST    64 | 
 |  | 
 | /* Bandwidth */ | 
 | #define WL_CH_BANDWIDTH_20MHZ 20 | 
 | #define WL_CH_BANDWIDTH_40MHZ 40 | 
 | #define WL_CH_BANDWIDTH_80MHZ 80 | 
 | /* max number of mac filter list | 
 |  * restrict max number to 10 as maximum cmd string size is 255 | 
 |  */ | 
 | #define MAX_NUM_MAC_FILT        10 | 
 |  | 
 | /* terence: | 
 |  * BSSCACHE: Cache bss list | 
 |  * RSSAVG: Average RSSI of BSS list | 
 |  * RSSIOFFSET: RSSI offset | 
 |  * SORT_BSS_BY_RSSI: Sort BSS by RSSI | 
 |  */ | 
 | //#define BSSCACHE | 
 | //#define RSSIAVG | 
 | //#define RSSIOFFSET | 
 | //#define RSSIOFFSET_NEW | 
 | //#define SORT_BSS_BY_RSSI | 
 |  | 
 | #define RSSI_MAXVAL -2 | 
 | #define RSSI_MINVAL -200 | 
 |  | 
 | #if defined(ESCAN_RESULT_PATCH) | 
 | #define REPEATED_SCAN_RESULT_CNT	2 | 
 | #else | 
 | #define REPEATED_SCAN_RESULT_CNT	1 | 
 | #endif | 
 |  | 
 | #if defined(RSSIAVG) | 
 | #define RSSIAVG_LEN (4*REPEATED_SCAN_RESULT_CNT) | 
 | #define RSSICACHE_TIMEOUT 15 | 
 |  | 
 | typedef struct wl_rssi_cache { | 
 | 	struct wl_rssi_cache *next; | 
 | 	int dirty; | 
 | 	struct timeval tv; | 
 | 	struct ether_addr BSSID; | 
 | 	int16 RSSI[RSSIAVG_LEN]; | 
 | } wl_rssi_cache_t; | 
 |  | 
 | typedef struct wl_rssi_cache_ctrl { | 
 | 	wl_rssi_cache_t *m_cache_head; | 
 | } wl_rssi_cache_ctrl_t; | 
 |  | 
 | void wl_free_rssi_cache(wl_rssi_cache_ctrl_t *rssi_cache_ctrl); | 
 | void wl_delete_dirty_rssi_cache(wl_rssi_cache_ctrl_t *rssi_cache_ctrl); | 
 | void wl_delete_disconnected_rssi_cache(wl_rssi_cache_ctrl_t *rssi_cache_ctrl, u8 *bssid); | 
 | void wl_reset_rssi_cache(wl_rssi_cache_ctrl_t *rssi_cache_ctrl); | 
 | void wl_update_rssi_cache(wl_rssi_cache_ctrl_t *rssi_cache_ctrl, wl_scan_results_t *ss_list); | 
 | int wl_update_connected_rssi_cache(struct net_device *net, wl_rssi_cache_ctrl_t *rssi_cache_ctrl, int *rssi_avg); | 
 | int16 wl_get_avg_rssi(wl_rssi_cache_ctrl_t *rssi_cache_ctrl, void *addr); | 
 | #endif | 
 |  | 
 | #if defined(RSSIOFFSET) | 
 | #define RSSI_OFFSET	5 | 
 | #if defined(RSSIOFFSET_NEW) | 
 | #define RSSI_OFFSET_MAXVAL -80 | 
 | #define RSSI_OFFSET_MINVAL -94 | 
 | #define RSSI_OFFSET_INTVAL ((RSSI_OFFSET_MAXVAL-RSSI_OFFSET_MINVAL)/RSSI_OFFSET) | 
 | #endif | 
 | #define BCM4330_CHIP_ID		0x4330 | 
 | #define BCM4330B2_CHIP_REV      4 | 
 | int wl_update_rssi_offset(struct net_device *net, int rssi); | 
 | #endif | 
 |  | 
 | #if defined(BSSCACHE) | 
 | #define BSSCACHE_TIMEOUT	15 | 
 |  | 
 | typedef struct wl_bss_cache { | 
 | 	struct wl_bss_cache *next; | 
 | 	int dirty; | 
 | 	struct timeval tv; | 
 | 	wl_scan_results_t results; | 
 | } wl_bss_cache_t; | 
 |  | 
 | typedef struct wl_bss_cache_ctrl { | 
 | 	wl_bss_cache_t *m_cache_head; | 
 | } wl_bss_cache_ctrl_t; | 
 |  | 
 | void wl_free_bss_cache(wl_bss_cache_ctrl_t *bss_cache_ctrl); | 
 | void wl_delete_dirty_bss_cache(wl_bss_cache_ctrl_t *bss_cache_ctrl); | 
 | void wl_delete_disconnected_bss_cache(wl_bss_cache_ctrl_t *bss_cache_ctrl, u8 *bssid); | 
 | void wl_reset_bss_cache(wl_bss_cache_ctrl_t *bss_cache_ctrl); | 
 | void wl_update_bss_cache(wl_bss_cache_ctrl_t *bss_cache_ctrl, | 
 | #if defined(RSSIAVG) | 
 | 	wl_rssi_cache_ctrl_t *rssi_cache_ctrl, | 
 | #endif | 
 | 	wl_scan_results_t *ss_list); | 
 | void wl_release_bss_cache_ctrl(wl_bss_cache_ctrl_t *bss_cache_ctrl); | 
 | #endif | 
 | #endif /* _wl_android_cmd_ */ |