diff options
author | codeworkx <codeworkx@cyanogenmod.com> | 2012-10-19 19:14:29 +0200 |
---|---|---|
committer | codeworkx <codeworkx@cyanogenmod.com> | 2012-10-19 19:31:14 +0200 |
commit | 400f867149041da36a769e5a22415231dcbd7fff (patch) | |
tree | 23902b39ae058bddb21217f5169887d137f092f8 /drivers/net/wireless/bcmdhd/wl_cfg80211.h | |
parent | 95661c37c0cfde204ea56c63f97b6bb9c5244625 (diff) | |
download | kernel_samsung_smdk4412-400f867149041da36a769e5a22415231dcbd7fff.zip kernel_samsung_smdk4412-400f867149041da36a769e5a22415231dcbd7fff.tar.gz kernel_samsung_smdk4412-400f867149041da36a769e5a22415231dcbd7fff.tar.bz2 |
bcmdhd: restore state from edd8a9171858fad7713b8fc07b158df5114b3c1a (samsung update 4)
Change-Id: I5f216c0b67ce9a956d2af26f58fa0744cdc1d7f5
Diffstat (limited to 'drivers/net/wireless/bcmdhd/wl_cfg80211.h')
-rwxr-xr-x | drivers/net/wireless/bcmdhd/wl_cfg80211.h | 841 |
1 files changed, 0 insertions, 841 deletions
diff --git a/drivers/net/wireless/bcmdhd/wl_cfg80211.h b/drivers/net/wireless/bcmdhd/wl_cfg80211.h deleted file mode 100755 index 30c8620..0000000 --- a/drivers/net/wireless/bcmdhd/wl_cfg80211.h +++ /dev/null @@ -1,841 +0,0 @@ -/* - * Linux cfg80211 driver - * - * Copyright (C) 1999-2012, 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. - * - * $Id: wl_cfg80211.h 353885 2012-08-29 05:21:34Z $ - */ - -#ifndef _wl_cfg80211_h_ -#define _wl_cfg80211_h_ - -#include <linux/wireless.h> -#include <typedefs.h> -#include <proto/ethernet.h> -#include <wlioctl.h> -#include <linux/wireless.h> -#include <net/cfg80211.h> -#include <linux/rfkill.h> - -#include <wl_cfgp2p.h> - -struct wl_conf; -struct wl_iface; -struct wl_priv; -struct wl_security; -struct wl_ibss; - - -#define htod32(i) i -#define htod16(i) i -#define dtoh32(i) i -#define dtoh16(i) i -#define htodchanspec(i) i -#define dtohchanspec(i) i - -#define WL_DBG_NONE 0 -#define WL_DBG_P2P_ACTION (1 << 5) -#define WL_DBG_TRACE (1 << 4) -#define WL_DBG_SCAN (1 << 3) -#define WL_DBG_DBG (1 << 2) -#define WL_DBG_INFO (1 << 1) -#define WL_DBG_ERR (1 << 0) - -/* 0 invalidates all debug messages. default is 1 */ -#define WL_DBG_LEVEL 0xFF - -#if defined(DHD_DEBUG) -#define WL_ERR(args) \ -do { \ - if (wl_dbg_level & WL_DBG_ERR) { \ - printk(KERN_INFO "CFG80211-INFO2) %s : ", __func__); \ - printk args; \ - } \ -} while (0) -#else /* defined(DHD_DEBUG) */ -#define WL_ERR(args) \ -do { \ - if ((wl_dbg_level & WL_DBG_ERR) && net_ratelimit()) { \ - printk(KERN_INFO "CFG80211-INFO2) %s : ", __func__); \ - printk args; \ - } \ -} while (0) -#endif /* defined(DHD_DEBUG) */ - -#ifdef WL_INFO -#undef WL_INFO -#endif -#define WL_INFO(args) \ -do { \ - if (wl_dbg_level & WL_DBG_INFO) { \ - printk(KERN_INFO "CFG80211-INFO) %s : ", __func__); \ - printk args; \ - } \ -} while (0) -#ifdef WL_SCAN -#undef WL_SCAN -#endif -#define WL_SCAN(args) \ -do { \ - if (wl_dbg_level & WL_DBG_SCAN) { \ - printk(KERN_INFO "CFG80211-SCAN) %s :", __func__); \ - printk args; \ - } \ -} while (0) -#ifdef WL_TRACE -#undef WL_TRACE -#endif -#define WL_TRACE(args) \ -do { \ - if (wl_dbg_level & WL_DBG_TRACE) { \ - printk(KERN_INFO "CFG80211-TRACE) %s :", __func__); \ - printk args; \ - } \ -} while (0) -#ifdef WL_TRACE_HW4 -#undef WL_TRACE_HW4 -#endif -#ifdef CUSTOMER_HW4 -#define WL_TRACE_HW4(args) \ -do { \ - if (wl_dbg_level & WL_DBG_ERR) { \ - printk(KERN_INFO "CFG80211-TRACE) %s : ", __func__); \ - printk args; \ - } \ -} while (0) -#else -#define WL_TRACE_HW4 WL_TRACE -#endif /* CUSTOMER_HW4 */ -#if (WL_DBG_LEVEL > 0) -#define WL_DBG(args) \ -do { \ - if (wl_dbg_level & WL_DBG_DBG) { \ - printk(KERN_DEBUG "CFG80211-DEBUG) %s :", __func__); \ - printk args; \ - } \ -} while (0) -#else /* !(WL_DBG_LEVEL > 0) */ -#define WL_DBG(args) -#endif /* (WL_DBG_LEVEL > 0) */ - - -#define WL_SCAN_RETRY_MAX 3 -#define WL_NUM_PMKIDS_MAX MAXPMKID -#define WL_SCAN_BUF_MAX (1024 * 8) -#define WL_TLV_INFO_MAX 1500 -#define WL_SCAN_IE_LEN_MAX 2048 -#define WL_BSS_INFO_MAX 2048 -#define WL_ASSOC_INFO_MAX 512 -#define WL_IOCTL_LEN_MAX 1024 -#define WL_EXTRA_BUF_MAX 2048 -#define WL_ISCAN_BUF_MAX 2048 -#define WL_ISCAN_TIMER_INTERVAL_MS 3000 -#define WL_SCAN_ERSULTS_LAST (WL_SCAN_RESULTS_NO_MEM+1) -#define WL_AP_MAX 256 -#define WL_FILE_NAME_MAX 256 -#define WL_DWELL_TIME 200 -#define WL_MED_DWELL_TIME 400 -#define WL_MIN_DWELL_TIME 100 -#define WL_LONG_DWELL_TIME 1000 -#define IFACE_MAX_CNT 2 -#define WL_SCAN_CONNECT_DWELL_TIME_MS 200 -#define WL_SCAN_JOIN_PROBE_INTERVAL_MS 20 -#define WL_AF_TX_MAX_RETRY 5 - -#define WL_SCAN_TIMER_INTERVAL_MS 8000 /* Scan timeout */ -#define WL_CHANNEL_SYNC_RETRY 5 -#define WL_INVALID -1 - -/* Bring down SCB Timeout to 20secs from 60secs default */ -#ifndef WL_SCB_TIMEOUT -#define WL_SCB_TIMEOUT 20 -#endif - -/* driver status */ -enum wl_status { - WL_STATUS_READY = 0, - WL_STATUS_SCANNING, - WL_STATUS_SCAN_ABORTING, - WL_STATUS_CONNECTING, - WL_STATUS_CONNECTED, - WL_STATUS_DISCONNECTING, - WL_STATUS_AP_CREATING, - WL_STATUS_AP_CREATED, - /* whole sending action frame procedure: - * includes a) 'finding common channel' for public action request frame - * and b) 'sending af via 'actframe' iovar' - */ - WL_STATUS_SENDING_ACT_FRM, - /* find a peer to go to a common channel before sending public action req frame */ - WL_STATUS_FINDING_COMMON_CHANNEL, - /* waiting for next af to sync time of supplicant. - * it includes SENDING_ACT_FRM and WAITING_NEXT_ACT_FRM_LISTEN - */ - WL_STATUS_WAITING_NEXT_ACT_FRM, -#ifdef WL_CFG80211_SYNC_GON - /* go to listen state to wait for next af after SENDING_ACT_FRM */ - WL_STATUS_WAITING_NEXT_ACT_FRM_LISTEN, -#endif /* WL_CFG80211_SYNC_GON */ - /* it will be set when upper layer requests listen and succeed in setting listen mode. - * if set, other scan request can abort current listen state - */ - WL_STATUS_REMAINING_ON_CHANNEL, -#ifdef WL_CFG80211_VSDB_PRIORITIZE_SCAN_REQUEST - /* it's fake listen state to keep current scan state. - * it will be set when upper layer requests listen but scan is running. then just run - * a expire timer without actual listen state. - * if set, other scan request does not need to abort scan. - */ - WL_STATUS_FAKE_REMAINING_ON_CHANNEL -#endif /* WL_CFG80211_VSDB_PRIORITIZE_SCAN_REQUEST */ -}; - -/* wi-fi mode */ -enum wl_mode { - WL_MODE_BSS, - WL_MODE_IBSS, - WL_MODE_AP -}; - -/* driver profile list */ -enum wl_prof_list { - WL_PROF_MODE, - WL_PROF_SSID, - WL_PROF_SEC, - WL_PROF_IBSS, - WL_PROF_BAND, - WL_PROF_CHAN, - WL_PROF_BSSID, - WL_PROF_ACT, - WL_PROF_BEACONINT, - WL_PROF_DTIMPERIOD -}; - -/* driver iscan state */ -enum wl_iscan_state { - WL_ISCAN_STATE_IDLE, - WL_ISCAN_STATE_SCANING -}; - -/* donlge escan state */ -enum wl_escan_state { - WL_ESCAN_STATE_IDLE, - WL_ESCAN_STATE_SCANING -}; -/* fw downloading status */ -enum wl_fw_status { - WL_FW_LOADING_DONE, - WL_NVRAM_LOADING_DONE -}; - -enum wl_management_type { - WL_BEACON = 0x1, - WL_PROBE_RESP = 0x2, - WL_ASSOC_RESP = 0x4 -}; -/* beacon / probe_response */ -struct beacon_proberesp { - __le64 timestamp; - __le16 beacon_int; - __le16 capab_info; - u8 variable[0]; -} __attribute__ ((packed)); - -/* driver configuration */ -struct wl_conf { - u32 frag_threshold; - u32 rts_threshold; - u32 retry_short; - u32 retry_long; - s32 tx_power; - struct ieee80211_channel channel; -}; - -typedef s32(*EVENT_HANDLER) (struct wl_priv *wl, - struct net_device *ndev, const wl_event_msg_t *e, void *data); - -/* bss inform structure for cfg80211 interface */ -struct wl_cfg80211_bss_info { - u16 band; - u16 channel; - s16 rssi; - u16 frame_len; - u8 frame_buf[1]; -}; - -/* basic structure of scan request */ -struct wl_scan_req { - struct wlc_ssid ssid; -}; - -/* basic structure of information element */ -struct wl_ie { - u16 offset; - u8 buf[WL_TLV_INFO_MAX]; -}; - -/* event queue for cfg80211 main event */ -struct wl_event_q { - struct list_head eq_list; - u32 etype; - wl_event_msg_t emsg; - s8 edata[1]; -}; - -/* security information with currently associated ap */ -struct wl_security { - u32 wpa_versions; - u32 auth_type; - u32 cipher_pairwise; - u32 cipher_group; - u32 wpa_auth; -}; - -/* ibss information for currently joined ibss network */ -struct wl_ibss { - u8 beacon_interval; /* in millisecond */ - u8 atim; /* in millisecond */ - s8 join_only; - u8 band; - u8 channel; -}; - -/* wl driver profile */ -struct wl_profile { - u32 mode; - s32 band; - u32 channel; - struct wlc_ssid ssid; - struct wl_security sec; - struct wl_ibss ibss; - u8 bssid[ETHER_ADDR_LEN]; - u16 beacon_interval; - u8 dtim_period; - bool active; -}; - -struct net_info { - struct net_device *ndev; - struct wireless_dev *wdev; - struct wl_profile profile; - s32 mode; - s32 roam_off; - unsigned long sme_state; - bool pm_block; - struct list_head list; /* list of all net_info structure */ -}; -typedef s32(*ISCAN_HANDLER) (struct wl_priv *wl); - -/* iscan controller */ -struct wl_iscan_ctrl { - struct net_device *dev; - struct timer_list timer; - u32 timer_ms; - u32 timer_on; - s32 state; - struct task_struct *tsk; - struct semaphore sync; - ISCAN_HANDLER iscan_handler[WL_SCAN_ERSULTS_LAST]; - void *data; - s8 ioctl_buf[WLC_IOCTL_SMLEN]; - s8 scan_buf[WL_ISCAN_BUF_MAX]; -}; - -/* association inform */ -#define MAX_REQ_LINE 1024 -struct wl_connect_info { - u8 req_ie[MAX_REQ_LINE]; - s32 req_ie_len; - u8 resp_ie[MAX_REQ_LINE]; - s32 resp_ie_len; -}; - -/* firmware /nvram downloading controller */ -struct wl_fw_ctrl { - const struct firmware *fw_entry; - unsigned long status; - u32 ptr; - s8 fw_name[WL_FILE_NAME_MAX]; - s8 nvram_name[WL_FILE_NAME_MAX]; -}; - -/* assoc ie length */ -struct wl_assoc_ielen { - u32 req_len; - u32 resp_len; -}; - -/* wpa2 pmk list */ -struct wl_pmk_list { - pmkid_list_t pmkids; - pmkid_t foo[MAXPMKID - 1]; -}; - - -#define ESCAN_BUF_SIZE (64 * 1024) - -struct escan_info { - u32 escan_state; -#if defined(STATIC_WL_PRIV_STRUCT) -#ifndef CONFIG_DHD_USE_STATIC_BUF -#error STATIC_WL_PRIV_STRUCT should be used with CONFIG_DHD_USE_STATIC_BUF -#endif -#if defined(DUAL_ESCAN_RESULT_BUFFER) - u8 *escan_buf[2]; -#else - u8 *escan_buf; -#endif -#else -#if defined(DUAL_ESCAN_RESULT_BUFFER) - u8 escan_buf[2][ESCAN_BUF_SIZE]; -#else - u8 escan_buf[ESCAN_BUF_SIZE]; -#endif -#endif /* STATIC_WL_PRIV_STRUCT */ -#if defined(DUAL_ESCAN_RESULT_BUFFER) - u8 cur_sync_id; -#endif - struct wiphy *wiphy; - struct net_device *ndev; -}; - -struct ap_info { -/* Structure to hold WPS, WPA IEs for a AP */ - u8 probe_res_ie[VNDR_IES_MAX_BUF_LEN]; - u8 beacon_ie[VNDR_IES_MAX_BUF_LEN]; - u32 probe_res_ie_len; - u32 beacon_ie_len; - u8 *wpa_ie; - u8 *rsn_ie; - u8 *wps_ie; - bool security_mode; -}; -struct btcoex_info { - struct timer_list timer; - u32 timer_ms; - u32 timer_on; - u32 ts_dhcp_start; /* ms ts ecord time stats */ - u32 ts_dhcp_ok; /* ms ts ecord time stats */ - bool dhcp_done; /* flag, indicates that host done with - * dhcp before t1/t2 expiration - */ - s32 bt_state; - struct work_struct work; - struct net_device *dev; -}; - -struct sta_info { - /* Structure to hold WPS IE for a STA */ - u8 probe_req_ie[VNDR_IES_BUF_LEN]; - u8 assoc_req_ie[VNDR_IES_BUF_LEN]; - u32 probe_req_ie_len; - u32 assoc_req_ie_len; -}; - -struct afx_hdl { - wl_af_params_t *pending_tx_act_frm; - struct ether_addr tx_dst_addr; - struct net_device *dev; - struct work_struct work; - u32 bssidx; - u32 retry; - s32 peer_chan; - s32 peer_listen_chan; /* search channel: configured by upper layer */ - s32 my_listen_chan; /* listen chanel: extract it from prb req or gon req */ - bool is_listen; - bool ack_recv; - bool is_active; -}; - -struct parsed_ies { - wpa_ie_fixed_t *wps_ie; - u32 wps_ie_len; - wpa_ie_fixed_t *wpa_ie; - u32 wpa_ie_len; - bcm_tlv_t *wpa2_ie; - u32 wpa2_ie_len; -}; - -#ifdef WL11U -/* Max length of Interworking element */ -#define IW_IES_MAX_BUF_LEN 9 -#endif - -/* private data of cfg80211 interface */ -struct wl_priv { - struct wireless_dev *wdev; /* representing wl cfg80211 device */ - - struct wireless_dev *p2p_wdev; /* representing wl cfg80211 device for P2P */ - struct net_device *p2p_net; /* reference to p2p0 interface */ - - struct wl_conf *conf; - struct cfg80211_scan_request *scan_request; /* scan request object */ - EVENT_HANDLER evt_handler[WLC_E_LAST]; - struct list_head eq_list; /* used for event queue */ - struct list_head net_list; /* used for struct net_info */ - spinlock_t eq_lock; /* for event queue synchronization */ - spinlock_t cfgdrv_lock; /* to protect scan status (and others if needed) */ - struct completion act_frm_scan; - struct completion iface_disable; - struct completion wait_next_af; - struct mutex usr_sync; /* maily for up/down synchronization */ - struct wl_scan_results *bss_list; - struct wl_scan_results *scan_results; - - /* scan request object for internal purpose */ - struct wl_scan_req *scan_req_int; - /* information element object for internal purpose */ -#if defined(STATIC_WL_PRIV_STRUCT) - struct wl_ie *ie; -#else - struct wl_ie ie; -#endif - struct wl_iscan_ctrl *iscan; /* iscan controller */ - - /* association information container */ -#if defined(STATIC_WL_PRIV_STRUCT) - struct wl_connect_info *conn_info; -#else - struct wl_connect_info conn_info; -#endif - - struct wl_pmk_list *pmk_list; /* wpa2 pmk list */ - tsk_ctl_t event_tsk; /* task of main event handler thread */ - void *pub; - u32 iface_cnt; - u32 channel; /* current channel */ - u32 af_sent_channel; /* channel action frame is sent */ - /* next af subtype to cancel the remained dwell time in rx process */ - u8 next_af_subtype; -#ifdef WL_CFG80211_SYNC_GON - ulong af_tx_sent_jiffies; -#endif /* WL_CFG80211_SYNC_GON */ - bool iscan_on; /* iscan on/off switch */ - bool iscan_kickstart; /* indicate iscan already started */ - bool escan_on; /* escan on/off switch */ - struct escan_info escan_info; /* escan information */ - bool active_scan; /* current scan mode */ - bool ibss_starter; /* indicates this sta is ibss starter */ - bool link_up; /* link/connection up flag */ - - /* indicate whether chip to support power save mode */ - bool pwr_save; - bool roam_on; /* on/off switch for self-roaming */ - bool scan_tried; /* indicates if first scan attempted */ - bool wlfc_on; - bool vsdb_mode; - bool roamoff_on_concurrent; - u8 *ioctl_buf; /* ioctl buffer */ - struct mutex ioctl_buf_sync; - u8 *escan_ioctl_buf; - u8 *extra_buf; /* maily to grab assoc information */ - struct dentry *debugfsdir; - struct rfkill *rfkill; - bool rf_blocked; - struct ieee80211_channel remain_on_chan; - enum nl80211_channel_type remain_on_chan_type; - u64 send_action_id; - u64 last_roc_id; - wait_queue_head_t netif_change_event; - struct completion send_af_done; - struct afx_hdl *afx_hdl; - struct ap_info *ap_info; - struct sta_info *sta_info; - struct p2p_info *p2p; - bool p2p_supported; - struct btcoex_info *btcoex_info; - struct timer_list scan_timeout; /* Timer for catch scan event timeout */ -#ifdef WL_CFG80211_GON_COLLISION - u8 block_gon_req_tx_count; - u8 block_gon_req_rx_count; -#endif /* WL_CFG80211_GON_COLLISION */ - s32(*state_notifier) (struct wl_priv *wl, - struct net_info *_net_info, enum wl_status state, bool set); - unsigned long interrested_state; - wlc_ssid_t hostapd_ssid; -#ifdef WL11U - bool wl11u; - u8 iw_ie[IW_IES_MAX_BUF_LEN]; - u32 iw_ie_len; -#endif /* WL11U */ -}; - - -static inline struct wl_bss_info *next_bss(struct wl_scan_results *list, struct wl_bss_info *bss) -{ - return bss = bss ? - (struct wl_bss_info *)((uintptr) bss + dtoh32(bss->length)) : list->bss_info; -} -static inline s32 -wl_alloc_netinfo(struct wl_priv *wl, struct net_device *ndev, - struct wireless_dev * wdev, s32 mode, bool pm_block) -{ - struct net_info *_net_info; - s32 err = 0; - if (wl->iface_cnt == IFACE_MAX_CNT) - return -ENOMEM; - _net_info = kzalloc(sizeof(struct net_info), GFP_KERNEL); - if (!_net_info) - err = -ENOMEM; - else { - _net_info->mode = mode; - _net_info->ndev = ndev; - _net_info->wdev = wdev; - _net_info->pm_block = pm_block; - _net_info->roam_off = WL_INVALID; - wl->iface_cnt++; - list_add(&_net_info->list, &wl->net_list); - } - return err; -} -static inline void -wl_dealloc_netinfo(struct wl_priv *wl, struct net_device *ndev) -{ - struct net_info *_net_info, *next; - - list_for_each_entry_safe(_net_info, next, &wl->net_list, list) { - if (ndev && (_net_info->ndev == ndev)) { - list_del(&_net_info->list); - wl->iface_cnt--; - if (_net_info->wdev) { - kfree(_net_info->wdev); - ndev->ieee80211_ptr = NULL; - } - kfree(_net_info); - } - } - -} -static inline void -wl_delete_all_netinfo(struct wl_priv *wl) -{ - struct net_info *_net_info, *next; - - list_for_each_entry_safe(_net_info, next, &wl->net_list, list) { - list_del(&_net_info->list); - if (_net_info->wdev) - kfree(_net_info->wdev); - kfree(_net_info); - } - wl->iface_cnt = 0; -} -static inline u32 -wl_get_status_all(struct wl_priv *wl, s32 status) - -{ - struct net_info *_net_info, *next; - u32 cnt = 0; - list_for_each_entry_safe(_net_info, next, &wl->net_list, list) { - if (_net_info->ndev && - test_bit(status, &_net_info->sme_state)) - cnt++; - } - return cnt; -} -static inline void -wl_set_status_all(struct wl_priv *wl, s32 status, u32 op) -{ - struct net_info *_net_info, *next; - list_for_each_entry_safe(_net_info, next, &wl->net_list, list) { - switch (op) { - case 1: - return; /* set all status is not allowed */ - case 2: - clear_bit(status, &_net_info->sme_state); - if (wl->state_notifier && - test_bit(status, &(wl->interrested_state))) - wl->state_notifier(wl, _net_info, status, false); - break; - case 4: - return; /* change all status is not allowed */ - default: - return; /* unknown operation */ - } - } -} -static inline void -wl_set_status_by_netdev(struct wl_priv *wl, s32 status, - struct net_device *ndev, u32 op) -{ - - struct net_info *_net_info, *next; - - list_for_each_entry_safe(_net_info, next, &wl->net_list, list) { - if (ndev && (_net_info->ndev == ndev)) { - switch (op) { - case 1: - set_bit(status, &_net_info->sme_state); - if (wl->state_notifier && - test_bit(status, &(wl->interrested_state))) - wl->state_notifier(wl, _net_info, status, true); - break; - case 2: - clear_bit(status, &_net_info->sme_state); - if (wl->state_notifier && - test_bit(status, &(wl->interrested_state))) - wl->state_notifier(wl, _net_info, status, false); - break; - case 4: - change_bit(status, &_net_info->sme_state); - break; - } - } - - } - -} - -static inline u32 -wl_get_status_by_netdev(struct wl_priv *wl, s32 status, - struct net_device *ndev) -{ - struct net_info *_net_info, *next; - - list_for_each_entry_safe(_net_info, next, &wl->net_list, list) { - if (ndev && (_net_info->ndev == ndev)) - return test_bit(status, &_net_info->sme_state); - } - return 0; -} - -static inline s32 -wl_get_mode_by_netdev(struct wl_priv *wl, struct net_device *ndev) -{ - struct net_info *_net_info, *next; - - list_for_each_entry_safe(_net_info, next, &wl->net_list, list) { - if (ndev && (_net_info->ndev == ndev)) - return _net_info->mode; - } - return -1; -} - - -static inline void -wl_set_mode_by_netdev(struct wl_priv *wl, struct net_device *ndev, - s32 mode) -{ - struct net_info *_net_info, *next; - - list_for_each_entry_safe(_net_info, next, &wl->net_list, list) { - if (ndev && (_net_info->ndev == ndev)) - _net_info->mode = mode; - } -} -static inline struct wl_profile * -wl_get_profile_by_netdev(struct wl_priv *wl, struct net_device *ndev) -{ - struct net_info *_net_info, *next; - - list_for_each_entry_safe(_net_info, next, &wl->net_list, list) { - if (ndev && (_net_info->ndev == ndev)) - return &_net_info->profile; - } - return NULL; -} -static inline struct net_info * -wl_get_netinfo_by_netdev(struct wl_priv *wl, struct net_device *ndev) -{ - struct net_info *_net_info, *next; - - list_for_each_entry_safe(_net_info, next, &wl->net_list, list) { - if (ndev && (_net_info->ndev == ndev)) - return _net_info; - } - return NULL; -} -#define wl_to_wiphy(w) (w->wdev->wiphy) -#define wl_to_prmry_ndev(w) (w->wdev->netdev) -#define ndev_to_wl(n) (wdev_to_wl(n->ieee80211_ptr)) -#define wl_to_sr(w) (w->scan_req_int) -#if defined(STATIC_WL_PRIV_STRUCT) -#define wl_to_ie(w) (w->ie) -#define wl_to_conn(w) (w->conn_info) -#else -#define wl_to_ie(w) (&w->ie) -#define wl_to_conn(w) (&w->conn_info) -#endif -#define iscan_to_wl(i) ((struct wl_priv *)(i->data)) -#define wl_to_iscan(w) (w->iscan) -#define wiphy_from_scan(w) (w->escan_info.wiphy) -#define wl_get_drv_status_all(wl, stat) \ - (wl_get_status_all(wl, WL_STATUS_ ## stat)) -#define wl_get_drv_status(wl, stat, ndev) \ - (wl_get_status_by_netdev(wl, WL_STATUS_ ## stat, ndev)) -#define wl_set_drv_status(wl, stat, ndev) \ - (wl_set_status_by_netdev(wl, WL_STATUS_ ## stat, ndev, 1)) -#define wl_clr_drv_status(wl, stat, ndev) \ - (wl_set_status_by_netdev(wl, WL_STATUS_ ## stat, ndev, 2)) -#define wl_clr_drv_status_all(wl, stat) \ - (wl_set_status_all(wl, WL_STATUS_ ## stat, 2)) -#define wl_chg_drv_status(wl, stat, ndev) \ - (wl_set_status_by_netdev(wl, WL_STATUS_ ## stat, ndev, 4)) - -#define for_each_bss(list, bss, __i) \ - for (__i = 0; __i < list->count && __i < WL_AP_MAX; __i++, bss = next_bss(list, bss)) - -#define for_each_ndev(wl, iter, next) \ - list_for_each_entry_safe(iter, next, &wl->net_list, list) - - -/* In case of WPS from wpa_supplicant, pairwise siute and group suite is 0. - * In addtion to that, wpa_version is WPA_VERSION_1 - */ -#define is_wps_conn(_sme) \ - ((wl_cfgp2p_find_wpsie((u8 *)_sme->ie, _sme->ie_len) != NULL) && \ - (!_sme->crypto.n_ciphers_pairwise) && \ - (!_sme->crypto.cipher_group)) -extern s32 wl_cfg80211_attach(struct net_device *ndev, void *data); -extern s32 wl_cfg80211_attach_post(struct net_device *ndev); -extern void wl_cfg80211_detach(void *para); - -extern void wl_cfg80211_event(struct net_device *ndev, const wl_event_msg_t *e, - void *data); -void wl_cfg80211_set_parent_dev(void *dev); -struct device *wl_cfg80211_get_parent_dev(void); - -extern s32 wl_cfg80211_up(void *para); -extern s32 wl_cfg80211_down(void *para); -extern s32 wl_cfg80211_notify_ifadd(struct net_device *ndev, s32 idx, s32 bssidx, - void* _net_attach); -extern s32 wl_cfg80211_ifdel_ops(struct net_device *net); -extern s32 wl_cfg80211_notify_ifdel(void); -extern s32 wl_cfg80211_is_progress_ifadd(void); -extern s32 wl_cfg80211_is_progress_ifchange(void); -extern s32 wl_cfg80211_is_progress_ifadd(void); -extern s32 wl_cfg80211_notify_ifchange(void); -extern void wl_cfg80211_dbg_level(u32 level); -extern s32 wl_cfg80211_get_p2p_dev_addr(struct net_device *net, struct ether_addr *p2pdev_addr); -extern s32 wl_cfg80211_set_p2p_noa(struct net_device *net, char* buf, int len); -extern s32 wl_cfg80211_get_p2p_noa(struct net_device *net, char* buf, int len); -extern s32 wl_cfg80211_set_wps_p2p_ie(struct net_device *net, char *buf, int len, - enum wl_management_type type); -extern s32 wl_cfg80211_set_p2p_ps(struct net_device *net, char* buf, int len); -extern int wl_cfg80211_hang(struct net_device *dev, u16 reason); -extern s32 wl_mode_to_nl80211_iftype(s32 mode); -int wl_cfg80211_do_driver_init(struct net_device *net); -void wl_cfg80211_enable_trace(int level); -extern s32 wl_update_wiphybands(struct wl_priv *wl); -extern s32 wl_cfg80211_if_is_group_owner(void); -extern chanspec_t wl_ch_host_to_driver(u16 channel); -extern s32 wl_add_remove_eventmsg(struct net_device *ndev, u16 event, bool add); -extern void wl_stop_wait_next_action_frame(struct wl_priv *wl, struct net_device *ndev); -#endif /* _wl_cfg80211_h_ */ |