1/** 2 * This header file contains global constant/enum definitions, 3 * global variable declaration. 4 */ 5#ifndef _WLAN_DEFS_H_ 6#define _WLAN_DEFS_H_ 7 8#include <linux/spinlock.h> 9 10#ifdef CONFIG_LIBERTAS_DEBUG 11#define DEBUG 12#define PROC_DEBUG 13#endif 14 15#ifndef DRV_NAME 16#define DRV_NAME "libertas" 17#endif 18 19 20#define LBS_DEB_ENTER 0x00000001 21#define LBS_DEB_LEAVE 0x00000002 22#define LBS_DEB_MAIN 0x00000004 23#define LBS_DEB_NET 0x00000008 24#define LBS_DEB_MESH 0x00000010 25#define LBS_DEB_WEXT 0x00000020 26#define LBS_DEB_IOCTL 0x00000040 27#define LBS_DEB_SCAN 0x00000080 28#define LBS_DEB_ASSOC 0x00000100 29#define LBS_DEB_JOIN 0x00000200 30#define LBS_DEB_11D 0x00000400 31#define LBS_DEB_DEBUGFS 0x00000800 32#define LBS_DEB_ETHTOOL 0x00001000 33#define LBS_DEB_HOST 0x00002000 34#define LBS_DEB_CMD 0x00004000 35#define LBS_DEB_RX 0x00008000 36#define LBS_DEB_TX 0x00010000 37#define LBS_DEB_USB 0x00020000 38#define LBS_DEB_CS 0x00040000 39#define LBS_DEB_FW 0x00080000 40#define LBS_DEB_THREAD 0x00100000 41#define LBS_DEB_HEX 0x00200000 42 43extern unsigned int libertas_debug; 44 45#ifdef DEBUG 46#define LBS_DEB_LL(grp, fmt, args...) \ 47do { if ((libertas_debug & (grp)) == (grp)) \ 48 printk(KERN_DEBUG DRV_NAME "%s: " fmt, \ 49 in_interrupt() ? " (INT)" : "", ## args); } while (0) 50#else 51#define LBS_DEB_LL(grp, fmt, args...) do {} while (0) 52#endif 53 54#define lbs_deb_enter(grp) \ 55 LBS_DEB_LL(grp | LBS_DEB_ENTER, "%s():%d enter\n", __FUNCTION__, __LINE__); 56#define lbs_deb_enter_args(grp, fmt, args...) \ 57 LBS_DEB_LL(grp | LBS_DEB_ENTER, "%s(" fmt "):%d\n", __FUNCTION__, ## args, __LINE__); 58#define lbs_deb_leave(grp) \ 59 LBS_DEB_LL(grp | LBS_DEB_LEAVE, "%s():%d leave\n", __FUNCTION__, __LINE__); 60#define lbs_deb_leave_args(grp, fmt, args...) \ 61 LBS_DEB_LL(grp | LBS_DEB_LEAVE, "%s():%d leave, " fmt "\n", \ 62 __FUNCTION__, __LINE__, ##args); 63#define lbs_deb_main(fmt, args...) LBS_DEB_LL(LBS_DEB_MAIN, fmt, ##args) 64#define lbs_deb_net(fmt, args...) LBS_DEB_LL(LBS_DEB_NET, fmt, ##args) 65#define lbs_deb_mesh(fmt, args...) LBS_DEB_LL(LBS_DEB_MESH, fmt, ##args) 66#define lbs_deb_wext(fmt, args...) LBS_DEB_LL(LBS_DEB_WEXT, fmt, ##args) 67#define lbs_deb_ioctl(fmt, args...) LBS_DEB_LL(LBS_DEB_IOCTL, fmt, ##args) 68#define lbs_deb_scan(fmt, args...) LBS_DEB_LL(LBS_DEB_SCAN, fmt, ##args) 69#define lbs_deb_assoc(fmt, args...) LBS_DEB_LL(LBS_DEB_ASSOC, fmt, ##args) 70#define lbs_deb_join(fmt, args...) LBS_DEB_LL(LBS_DEB_JOIN, fmt, ##args) 71#define lbs_deb_11d(fmt, args...) LBS_DEB_LL(LBS_DEB_11D, fmt, ##args) 72#define lbs_deb_debugfs(fmt, args...) LBS_DEB_LL(LBS_DEB_DEBUGFS, fmt, ##args) 73#define lbs_deb_ethtool(fmt, args...) LBS_DEB_LL(LBS_DEB_ETHTOOL, fmt, ##args) 74#define lbs_deb_host(fmt, args...) LBS_DEB_LL(LBS_DEB_HOST, fmt, ##args) 75#define lbs_deb_cmd(fmt, args...) LBS_DEB_LL(LBS_DEB_CMD, fmt, ##args) 76#define lbs_deb_rx(fmt, args...) LBS_DEB_LL(LBS_DEB_RX, fmt, ##args) 77#define lbs_deb_tx(fmt, args...) LBS_DEB_LL(LBS_DEB_TX, fmt, ##args) 78#define lbs_deb_fw(fmt, args...) LBS_DEB_LL(LBS_DEB_FW, fmt, ##args) 79#define lbs_deb_usb(fmt, args...) LBS_DEB_LL(LBS_DEB_USB, fmt, ##args) 80#define lbs_deb_usbd(dev, fmt, args...) LBS_DEB_LL(LBS_DEB_USB, "%s:" fmt, (dev)->bus_id, ##args) 81#define lbs_deb_cs(fmt, args...) LBS_DEB_LL(LBS_DEB_CS, fmt, ##args) 82#define lbs_deb_thread(fmt, args...) LBS_DEB_LL(LBS_DEB_THREAD, fmt, ##args) 83 84#define lbs_pr_info(format, args...) \ 85 printk(KERN_INFO DRV_NAME": " format, ## args) 86#define lbs_pr_err(format, args...) \ 87 printk(KERN_ERR DRV_NAME": " format, ## args) 88#define lbs_pr_alert(format, args...) \ 89 printk(KERN_ALERT DRV_NAME": " format, ## args) 90 91#ifdef DEBUG 92static inline void lbs_dbg_hex(char *prompt, u8 * buf, int len) 93{ 94 int i = 0; 95 96 if (!(libertas_debug & LBS_DEB_HEX)) 97 return; 98 99 printk(KERN_DEBUG "%s: ", prompt); 100 for (i = 1; i <= len; i++) { 101 printk("%02x ", (u8) * buf); 102 buf++; 103 } 104 printk("\n"); 105} 106#else 107#define lbs_dbg_hex(x,y,z) do {} while (0) 108#endif 109 110 111 112/** Buffer Constants */ 113 114/* The size of SQ memory PPA, DPA are 8 DWORDs, that keep the physical 115* addresses of TxPD buffers. Station has only 8 TxPD available, Whereas 116* driver has more local TxPDs. Each TxPD on the host memory is associated 117* with a Tx control node. The driver maintains 8 RxPD descriptors for 118* station firmware to store Rx packet information. 119* 120* Current version of MAC has a 32x6 multicast address buffer. 121* 122* 802.11b can have up to 14 channels, the driver keeps the 123* BSSID(MAC address) of each APs or Ad hoc stations it has sensed. 124*/ 125 126#define MRVDRV_MAX_MULTICAST_LIST_SIZE 32 127#define MRVDRV_NUM_OF_CMD_BUFFER 10 128#define MRVDRV_SIZE_OF_CMD_BUFFER (2 * 1024) 129#define MRVDRV_MAX_CHANNEL_SIZE 14 130#define MRVDRV_ASSOCIATION_TIME_OUT 255 131#define MRVDRV_SNAP_HEADER_LEN 8 132 133#define WLAN_UPLD_SIZE 2312 134#define DEV_NAME_LEN 32 135 136/** Misc constants */ 137/* This section defines 802.11 specific contants */ 138 139#define MRVDRV_MAX_BSS_DESCRIPTS 16 140#define MRVDRV_MAX_REGION_CODE 6 141 142#define MRVDRV_IGNORE_MULTIPLE_DTIM 0xfffe 143#define MRVDRV_MIN_MULTIPLE_DTIM 1 144#define MRVDRV_MAX_MULTIPLE_DTIM 5 145#define MRVDRV_DEFAULT_MULTIPLE_DTIM 1 146 147#define MRVDRV_DEFAULT_LISTEN_INTERVAL 10 148 149#define MRVDRV_CHANNELS_PER_SCAN 4 150#define MRVDRV_MAX_CHANNELS_PER_SCAN 14 151 152#define MRVDRV_DEBUG_RX_PATH 0x00000001 153#define MRVDRV_DEBUG_TX_PATH 0x00000002 154 155#define MRVDRV_MIN_BEACON_INTERVAL 20 156#define MRVDRV_MAX_BEACON_INTERVAL 1000 157#define MRVDRV_BEACON_INTERVAL 100 158 159/** INT status Bit Definition*/ 160#define his_cmddnldrdy 0x01 161#define his_cardevent 0x02 162#define his_cmdupldrdy 0x04 163 164#define SBI_EVENT_CAUSE_SHIFT 3 165 166/** TxPD status */ 167 168/* Station firmware use TxPD status field to report final Tx transmit 169* result, Bit masks are used to present combined situations. 170*/ 171 172#define MRVDRV_TxPD_POWER_MGMT_NULL_PACKET 0x01 173#define MRVDRV_TxPD_POWER_MGMT_LAST_PACKET 0x08 174 175/** Tx mesh flag */ 176/* Currently we are using normal WDS flag as mesh flag. 177 * TODO: change to proper mesh flag when MAC understands it. 178 */ 179#define TxPD_CONTROL_WDS_FRAME (1<<17) 180#define TxPD_MESH_FRAME TxPD_CONTROL_WDS_FRAME 181 182/** RxPD status */ 183 184#define MRVDRV_RXPD_STATUS_OK 0x0001 185 186/** RxPD status - Received packet types */ 187/** Rx mesh flag */ 188/* Currently we are using normal WDS flag as mesh flag. 189 * TODO: change to proper mesh flag when MAC understands it. 190 */ 191#define RxPD_CONTROL_WDS_FRAME (0x40) 192#define RxPD_MESH_FRAME RxPD_CONTROL_WDS_FRAME 193 194/** RSSI-related defines */ 195/* RSSI constants are used to implement 802.11 RSSI threshold 196* indication. if the Rx packet signal got too weak for 5 consecutive 197* times, miniport driver (driver) will report this event to wrapper 198*/ 199 200#define MRVDRV_NF_DEFAULT_SCAN_VALUE (-96) 201 202/** RTS/FRAG related defines */ 203#define MRVDRV_RTS_MIN_VALUE 0 204#define MRVDRV_RTS_MAX_VALUE 2347 205#define MRVDRV_FRAG_MIN_VALUE 256 206#define MRVDRV_FRAG_MAX_VALUE 2346 207 208/* This is for firmware specific length */ 209#define EXTRA_LEN 36 210 211#define MRVDRV_ETH_TX_PACKET_BUFFER_SIZE \ 212 (ETH_FRAME_LEN + sizeof(struct txpd) + EXTRA_LEN) 213 214#define MRVDRV_ETH_RX_PACKET_BUFFER_SIZE \ 215 (ETH_FRAME_LEN + sizeof(struct rxpd) \ 216 + MRVDRV_SNAP_HEADER_LEN + EXTRA_LEN) 217 218#define CMD_F_HOSTCMD (1 << 0) 219#define FW_CAPINFO_WPA (1 << 0) 220 221/** WPA key LENGTH*/ 222#define MRVL_MAX_KEY_WPA_KEY_LENGTH 32 223 224#define KEY_LEN_WPA_AES 16 225#define KEY_LEN_WPA_TKIP 32 226#define KEY_LEN_WEP_104 13 227#define KEY_LEN_WEP_40 5 228 229#define RF_ANTENNA_1 0x1 230#define RF_ANTENNA_2 0x2 231#define RF_ANTENNA_AUTO 0xFFFF 232 233#define BAND_B (0x01) 234#define BAND_G (0x02) 235#define ALL_802_11_BANDS (BAND_B | BAND_G) 236 237/** MACRO DEFINITIONS */ 238#define CAL_NF(NF) ((s32)(-(s32)(NF))) 239#define CAL_RSSI(SNR, NF) ((s32)((s32)(SNR) + CAL_NF(NF))) 240#define SCAN_RSSI(RSSI) (0x100 - ((u8)(RSSI))) 241 242#define DEFAULT_BCN_AVG_FACTOR 8 243#define DEFAULT_DATA_AVG_FACTOR 8 244#define AVG_SCALE 100 245#define CAL_AVG_SNR_NF(AVG, SNRNF, N) \ 246 (((AVG) == 0) ? ((u16)(SNRNF) * AVG_SCALE) : \ 247 ((((int)(AVG) * (N -1)) + ((u16)(SNRNF) * \ 248 AVG_SCALE)) / N)) 249 250#define B_SUPPORTED_RATES 8 251#define G_SUPPORTED_RATES 14 252 253#define WLAN_SUPPORTED_RATES 14 254 255#define MAX_LEDS 8 256 257#define IS_MESH_FRAME(x) (x->cb[6]) 258#define SET_MESH_FRAME(x) (x->cb[6]=1) 259#define UNSET_MESH_FRAME(x) (x->cb[6]=0) 260 261/** Global Variable Declaration */ 262typedef struct _wlan_private wlan_private; 263typedef struct _wlan_adapter wlan_adapter; 264extern const char libertas_driver_version[]; 265extern u16 libertas_region_code_to_index[MRVDRV_MAX_REGION_CODE]; 266 267extern u8 libertas_supported_rates[G_SUPPORTED_RATES]; 268 269extern u8 libertas_adhoc_rates_g[G_SUPPORTED_RATES]; 270 271extern u8 libertas_adhoc_rates_b[4]; 272 273/** ENUM definition*/ 274/** SNRNF_TYPE */ 275enum SNRNF_TYPE { 276 TYPE_BEACON = 0, 277 TYPE_RXPD, 278 MAX_TYPE_B 279}; 280 281/** SNRNF_DATA*/ 282enum SNRNF_DATA { 283 TYPE_NOAVG = 0, 284 TYPE_AVG, 285 MAX_TYPE_AVG 286}; 287 288/** WLAN_802_11_POWER_MODE */ 289enum WLAN_802_11_POWER_MODE { 290 wlan802_11powermodecam, 291 wlan802_11powermodemax_psp, 292 wlan802_11Powermodefast_psp, 293 /*not a real mode, defined as an upper bound */ 294 wlan802_11powemodemax 295}; 296 297/** PS_STATE */ 298enum PS_STATE { 299 PS_STATE_FULL_POWER, 300 PS_STATE_AWAKE, 301 PS_STATE_PRE_SLEEP, 302 PS_STATE_SLEEP 303}; 304 305/** DNLD_STATE */ 306enum DNLD_STATE { 307 DNLD_RES_RECEIVED, 308 DNLD_DATA_SENT, 309 DNLD_CMD_SENT 310}; 311 312/** WLAN_MEDIA_STATE */ 313enum WLAN_MEDIA_STATE { 314 libertas_connected, 315 libertas_disconnected 316}; 317 318/** WLAN_802_11_PRIVACY_FILTER */ 319enum WLAN_802_11_PRIVACY_FILTER { 320 wlan802_11privfilteracceptall, 321 wlan802_11privfilter8021xWEP 322}; 323 324/** mv_ms_type */ 325enum mv_ms_type { 326 MVMS_DAT = 0, 327 MVMS_CMD = 1, 328 MVMS_TXDONE = 2, 329 MVMS_EVENT 330}; 331 332/** SNMP_MIB_INDEX_e */ 333enum SNMP_MIB_INDEX_e { 334 desired_bsstype_i = 0, 335 op_rateset_i, 336 bcnperiod_i, 337 dtimperiod_i, 338 assocrsp_timeout_i, 339 rtsthresh_i, 340 short_retrylim_i, 341 long_retrylim_i, 342 fragthresh_i, 343 dot11d_i, 344 dot11h_i, 345 manufid_i, 346 prodID_i, 347 manuf_oui_i, 348 manuf_name_i, 349 manuf_prodname_i, 350 manuf_prodver_i, 351}; 352 353/** KEY_TYPE_ID */ 354enum KEY_TYPE_ID { 355 KEY_TYPE_ID_WEP = 0, 356 KEY_TYPE_ID_TKIP, 357 KEY_TYPE_ID_AES 358}; 359 360/** KEY_INFO_WPA (applies to both TKIP and AES/CCMP) */ 361enum KEY_INFO_WPA { 362 KEY_INFO_WPA_MCAST = 0x01, 363 KEY_INFO_WPA_UNICAST = 0x02, 364 KEY_INFO_WPA_ENABLED = 0x04 365}; 366 367/** SNMP_MIB_VALUE_e */ 368enum SNMP_MIB_VALUE_e { 369 SNMP_MIB_VALUE_INFRA = 1, 370 SNMP_MIB_VALUE_ADHOC 371}; 372 373/* Default values for fwt commands. */ 374#define FWT_DEFAULT_METRIC 0 375#define FWT_DEFAULT_DIR 1 376/* Default Rate, 11Mbps */ 377#define FWT_DEFAULT_RATE 3 378#define FWT_DEFAULT_SSN 0xffffffff 379#define FWT_DEFAULT_DSN 0 380#define FWT_DEFAULT_HOPCOUNT 0 381#define FWT_DEFAULT_TTL 0 382#define FWT_DEFAULT_EXPIRATION 0 383#define FWT_DEFAULT_SLEEPMODE 0 384#define FWT_DEFAULT_SNR 0 385 386#endif /* _WLAN_DEFS_H_ */ 387