1/* 2 * Linux Wireless Extensions support 3 * 4 * Copyright (C) 1999-2012, Broadcom Corporation 5 * 6 * Unless you and Broadcom execute a separate written software license 7 * agreement governing use of this software, this software is licensed to you 8 * under the terms of the GNU General Public License version 2 (the "GPL"), 9 * available at http://www.broadcom.com/licenses/GPLv2.php, with the 10 * following added to such license: 11 * 12 * As a special exception, the copyright holders of this software give you 13 * permission to link this software with independent modules, and to copy and 14 * distribute the resulting executable under terms of your choice, provided that 15 * you also meet, for each linked independent module, the terms and conditions of 16 * the license of that module. An independent module is a module which is not 17 * derived from this software. The special exception does not apply to any 18 * modifications of the software. 19 * 20 * Notwithstanding the above, under no circumstances may you combine this 21 * software in any way with any other Broadcom software provided under a license 22 * other than the GPL, without Broadcom's express prior written consent. 23 * 24 * $Id: wl_iw.h 291086 2011-10-21 01:17:24Z $ 25 */ 26 27#ifndef _wl_iw_h_ 28#define _wl_iw_h_ 29 30#include <linux/wireless.h> 31 32#include <typedefs.h> 33#include <proto/ethernet.h> 34#include <wlioctl.h> 35 36#define WL_SCAN_PARAMS_SSID_MAX 10 37#define GET_SSID "SSID=" 38#define GET_CHANNEL "CH=" 39#define GET_NPROBE "NPROBE=" 40#define GET_ACTIVE_ASSOC_DWELL "ACTIVE=" 41#define GET_PASSIVE_ASSOC_DWELL "PASSIVE=" 42#define GET_HOME_DWELL "HOME=" 43#define GET_SCAN_TYPE "TYPE=" 44 45#define BAND_GET_CMD "GETBAND" 46#define BAND_SET_CMD "SETBAND" 47#define DTIM_SKIP_GET_CMD "DTIMSKIPGET" 48#define DTIM_SKIP_SET_CMD "DTIMSKIPSET" 49#define SETSUSPEND_CMD "SETSUSPENDOPT" 50#define PNOSSIDCLR_SET_CMD "PNOSSIDCLR" 51 52#define PNOSETUP_SET_CMD "PNOSETUP " 53#define PNOENABLE_SET_CMD "PNOFORCE" 54#define PNODEBUG_SET_CMD "PNODEBUG" 55#define TXPOWER_SET_CMD "TXPOWER" 56 57#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5] 58#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x" 59 60 61typedef struct wl_iw_extra_params { 62 int target_channel; 63} wl_iw_extra_params_t; 64 65struct cntry_locales_custom { 66 char iso_abbrev[WLC_CNTRY_BUF_SZ]; 67 char custom_locale[WLC_CNTRY_BUF_SZ]; 68 int32 custom_locale_rev; 69}; 70 71 72#define WL_IW_RSSI_MINVAL -200 73#define WL_IW_RSSI_NO_SIGNAL -91 74#define WL_IW_RSSI_VERY_LOW -80 75#define WL_IW_RSSI_LOW -70 76#define WL_IW_RSSI_GOOD -68 77#define WL_IW_RSSI_VERY_GOOD -58 78#define WL_IW_RSSI_EXCELLENT -57 79#define WL_IW_RSSI_INVALID 0 80#define MAX_WX_STRING 80 81#define SSID_FMT_BUF_LEN ((4 * 32) + 1) 82#define isprint(c) bcm_isprint(c) 83#define WL_IW_SET_ACTIVE_SCAN (SIOCIWFIRSTPRIV+1) 84#define WL_IW_GET_RSSI (SIOCIWFIRSTPRIV+3) 85#define WL_IW_SET_PASSIVE_SCAN (SIOCIWFIRSTPRIV+5) 86#define WL_IW_GET_LINK_SPEED (SIOCIWFIRSTPRIV+7) 87#define WL_IW_GET_CURR_MACADDR (SIOCIWFIRSTPRIV+9) 88#define WL_IW_SET_STOP (SIOCIWFIRSTPRIV+11) 89#define WL_IW_SET_START (SIOCIWFIRSTPRIV+13) 90 91#define G_SCAN_RESULTS 8*1024 92#define WE_ADD_EVENT_FIX 0x80 93#define G_WLAN_SET_ON 0 94#define G_WLAN_SET_OFF 1 95 96 97typedef struct wl_iw { 98 char nickname[IW_ESSID_MAX_SIZE]; 99 100 struct iw_statistics wstats; 101 102 int spy_num; 103 uint32 pwsec; 104 uint32 gwsec; 105 bool privacy_invoked; 106 struct ether_addr spy_addr[IW_MAX_SPY]; 107 struct iw_quality spy_qual[IW_MAX_SPY]; 108 void *wlinfo; 109} wl_iw_t; 110 111struct wl_ctrl { 112 struct timer_list *timer; 113 struct net_device *dev; 114 long sysioc_pid; 115 struct semaphore sysioc_sem; 116 struct completion sysioc_exited; 117}; 118 119 120#if WIRELESS_EXT > 12 121#include <net/iw_handler.h> 122extern const struct iw_handler_def wl_iw_handler_def; 123#endif 124 125extern int wl_iw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); 126extern void wl_iw_event(struct net_device *dev, wl_event_msg_t *e, void* data); 127extern int wl_iw_get_wireless_stats(struct net_device *dev, struct iw_statistics *wstats); 128int wl_iw_attach(struct net_device *dev, void * dhdp); 129int wl_iw_send_priv_event(struct net_device *dev, char *flag); 130 131void wl_iw_detach(void); 132 133#define CSCAN_COMMAND "CSCAN " 134#define CSCAN_TLV_PREFIX 'S' 135#define CSCAN_TLV_VERSION 1 136#define CSCAN_TLV_SUBVERSION 0 137#define CSCAN_TLV_TYPE_SSID_IE 'S' 138#define CSCAN_TLV_TYPE_CHANNEL_IE 'C' 139#define CSCAN_TLV_TYPE_NPROBE_IE 'N' 140#define CSCAN_TLV_TYPE_ACTIVE_IE 'A' 141#define CSCAN_TLV_TYPE_PASSIVE_IE 'P' 142#define CSCAN_TLV_TYPE_HOME_IE 'H' 143#define CSCAN_TLV_TYPE_STYPE_IE 'T' 144 145#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) 146#define IWE_STREAM_ADD_EVENT(info, stream, ends, iwe, extra) \ 147 iwe_stream_add_event(info, stream, ends, iwe, extra) 148#define IWE_STREAM_ADD_VALUE(info, event, value, ends, iwe, event_len) \ 149 iwe_stream_add_value(info, event, value, ends, iwe, event_len) 150#define IWE_STREAM_ADD_POINT(info, stream, ends, iwe, extra) \ 151 iwe_stream_add_point(info, stream, ends, iwe, extra) 152#else 153#define IWE_STREAM_ADD_EVENT(info, stream, ends, iwe, extra) \ 154 iwe_stream_add_event(stream, ends, iwe, extra) 155#define IWE_STREAM_ADD_VALUE(info, event, value, ends, iwe, event_len) \ 156 iwe_stream_add_value(event, value, ends, iwe, event_len) 157#define IWE_STREAM_ADD_POINT(info, stream, ends, iwe, extra) \ 158 iwe_stream_add_point(stream, ends, iwe, extra) 159#endif 160 161#endif 162