12c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos/****************************************************************************** 22c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 3171e7b2f1f50f112d3ce8a829a3e79c5739b3132Zhu Yi Copyright(c) 2003 - 2006 Intel Corporation. All rights reserved. 42c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 52c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos This program is free software; you can redistribute it and/or modify it 62c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos under the terms of version 2 of the GNU General Public License as 72c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos published by the Free Software Foundation. 82c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 92c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos This program is distributed in the hope that it will be useful, but WITHOUT 102c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 112c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 122c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos more details. 132c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 142c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos You should have received a copy of the GNU General Public License along with 152c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos this program; if not, write to the Free Software Foundation, Inc., 59 162c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos Temple Place - Suite 330, Boston, MA 02111-1307, USA. 172c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 182c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos The full GNU General Public License is included in this distribution in the 192c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos file called LICENSE. 202c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 212c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos Contact Information: 22c1eb2c82e5ccc9b691f737c3150e746c9af3ffabReinette Chatre Intel Linux Wireless <ilw@linux.intel.com> 232c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 242c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 252c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos******************************************************************************/ 262c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#ifndef _IPW2100_H 272c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define _IPW2100_H 282c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 292c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#include <linux/sched.h> 302c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#include <linux/interrupt.h> 312c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#include <linux/netdevice.h> 322c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#include <linux/etherdevice.h> 332c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#include <linux/list.h> 342c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#include <linux/delay.h> 352c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#include <linux/skbuff.h> 362c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#include <asm/io.h> 372c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#include <linux/socket.h> 382c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#include <linux/if_arp.h> 392c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#include <linux/wireless.h> 402c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#include <net/iw_handler.h> // new driver API 412c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 4215745a7dd1ac6bf1ef7959040f864c78a95aa35bStefan Rompf#ifdef CONFIG_IPW2100_MONITOR 4315745a7dd1ac6bf1ef7959040f864c78a95aa35bStefan Rompf#include <net/ieee80211_radiotap.h> 4415745a7dd1ac6bf1ef7959040f864c78a95aa35bStefan Rompf#endif 4515745a7dd1ac6bf1ef7959040f864c78a95aa35bStefan Rompf 462c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#include <linux/workqueue.h> 473234eeec18315356166cd89bd93fc4630192eeceZhu Yi#include <linux/mutex.h> 482c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 49b0a4e7d8a291de63f35b04464de9ab4a83d38a7cJohn W. Linville#include "libipw.h" 50f3734ee6df3ac57151e02d091f47d5e52e646539Dan Williams 512c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_priv; 522c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_tx_packet; 532c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_rx_packet; 542c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 552c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_UNINIT 0x80000000 562c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_NONE 0x00000000 572c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_ALL 0x7FFFFFFF 582c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 592c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos/* 602c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * To use the debug system; 612c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * 622c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * If you are defining a new debug classification, simply add it to the #define 632c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * list here in the form of: 642c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * 652c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * #define IPW_DL_xxxx VALUE 662c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * 672c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * shifting value to the left one bit from the previous entry. xxxx should be 682c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * the name of the classification (for example, WEP) 692c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * 702c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * You then need to either add a IPW2100_xxxx_DEBUG() macro definition for your 712c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * classification, or use IPW_DEBUG(IPW_DL_xxxx, ...) whenever you want 722c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * to send output to that classification. 732c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * 742c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * To add your debug level to the list of levels seen when you perform 752c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * 762c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * % cat /proc/net/ipw2100/debug_level 772c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * 782c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * you simply need to add your entry to the ipw2100_debug_levels array. 792c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * 802c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * If you do not see debug_level in /proc/net/ipw2100 then you do not have 810f52bf905884c6dd7f994c9e2f533b2c02f0bd4bBrice Goglin * CONFIG_IPW2100_DEBUG defined in your kernel configuration 822c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * 832c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos */ 842c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 852c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_ERROR (1<<0) 862c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_WARNING (1<<1) 872c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_INFO (1<<2) 882c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_WX (1<<3) 892c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_HC (1<<5) 902c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_STATE (1<<6) 912c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 922c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_NOTIF (1<<10) 932c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_SCAN (1<<11) 942c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_ASSOC (1<<12) 952c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_DROP (1<<13) 962c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 972c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_IOCTL (1<<14) 982c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_RF_KILL (1<<17) 992c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1002c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_MANAGE (1<<15) 1012c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_FW (1<<16) 1022c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1032c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_FRAG (1<<21) 1042c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_WEP (1<<22) 1052c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_TX (1<<23) 1062c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_RX (1<<24) 1072c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_ISR (1<<25) 1082c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_IO (1<<26) 1092c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DL_TRACE (1<<28) 1102c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1112c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_ERROR(f, a...) printk(KERN_ERR DRV_NAME ": " f, ## a) 1122c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_WARNING(f, a...) printk(KERN_WARNING DRV_NAME ": " f, ## a) 1132c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_INFO(f...) IPW_DEBUG(IPW_DL_INFO, ## f) 1142c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_WX(f...) IPW_DEBUG(IPW_DL_WX, ## f) 1152c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_SCAN(f...) IPW_DEBUG(IPW_DL_SCAN, ## f) 1162c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_NOTIF(f...) IPW_DEBUG(IPW_DL_NOTIF, ## f) 1172c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_TRACE(f...) IPW_DEBUG(IPW_DL_TRACE, ## f) 1182c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_RX(f...) IPW_DEBUG(IPW_DL_RX, ## f) 1192c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_TX(f...) IPW_DEBUG(IPW_DL_TX, ## f) 1202c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_ISR(f...) IPW_DEBUG(IPW_DL_ISR, ## f) 1212c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_MANAGEMENT(f...) IPW_DEBUG(IPW_DL_MANAGE, ## f) 1222c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_WEP(f...) IPW_DEBUG(IPW_DL_WEP, ## f) 1232c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_HC(f...) IPW_DEBUG(IPW_DL_HC, ## f) 1242c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_FRAG(f...) IPW_DEBUG(IPW_DL_FRAG, ## f) 1252c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_FW(f...) IPW_DEBUG(IPW_DL_FW, ## f) 1262c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_RF_KILL(f...) IPW_DEBUG(IPW_DL_RF_KILL, ## f) 1272c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_DROP(f...) IPW_DEBUG(IPW_DL_DROP, ## f) 1282c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_IO(f...) IPW_DEBUG(IPW_DL_IO, ## f) 1292c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_IOCTL(f...) IPW_DEBUG(IPW_DL_IOCTL, ## f) 1302c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_STATE(f, a...) IPW_DEBUG(IPW_DL_STATE | IPW_DL_ASSOC | IPW_DL_INFO, f, ## a) 1312c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DEBUG_ASSOC(f, a...) IPW_DEBUG(IPW_DL_ASSOC | IPW_DL_INFO, f, ## a) 1322c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1332c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosenum { 1342c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_HW_STATE_DISABLED = 1, 1352c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_HW_STATE_ENABLED = 0 1362c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos}; 1372c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1382c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ssid_context { 1392c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos char ssid[IW_ESSID_MAX_SIZE + 1]; 1402c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int ssid_len; 1412c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos unsigned char bssid[ETH_ALEN]; 1422c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int port_type; 1432c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int channel; 1442c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1452c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos}; 1462c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1472c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosextern const char *port_type_str[]; 1482c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosextern const char *band_str[]; 1492c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1502c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define NUMBER_OF_BD_PER_COMMAND_PACKET 1 1512c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define NUMBER_OF_BD_PER_DATA_PACKET 2 1522c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1532c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MAX_BDS 6 1542c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define NUMBER_OF_OVERHEAD_BDS_PER_PACKETR 2 1552c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define NUMBER_OF_BDS_TO_LEAVE_FOR_COMMANDS 1 1562c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1572c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define REQUIRED_SPACE_IN_RING_FOR_COMMAND_PACKET \ 1582c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos (IPW_BD_QUEUE_W_R_MIN_SPARE + NUMBER_OF_BD_PER_COMMAND_PACKET) 1592c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1602c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct bd_status { 1612c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos union { 162ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos struct { 163ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos u8 nlf:1, txType:2, intEnabled:1, reserved:4; 164ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos } fields; 1652c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 field; 1662c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos } info; 167ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet} __packed; 1682c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1692c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_bd { 1702c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 host_addr; 1712c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 buf_length; 1722c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct bd_status status; 173ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos /* number of fragments for frame (should be set only for 1742c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * 1st TBD) */ 1752c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 num_fragments; 1762c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 reserved[6]; 177ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet} __packed; 1782c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1792c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_BD_QUEUE_LENGTH(n) (1<<n) 1802c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_BD_ALIGNMENT(L) (L*sizeof(struct ipw2100_bd)) 1812c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1822c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_BD_STATUS_TX_FRAME_802_3 0x00 1832c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_BD_STATUS_TX_FRAME_NOT_LAST_FRAGMENT 0x01 1842c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_BD_STATUS_TX_FRAME_COMMAND 0x02 1852c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_BD_STATUS_TX_FRAME_802_11 0x04 1862c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_BD_STATUS_TX_INTERRUPT_ENABLE 0x08 1872c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1882c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_bd_queue { 1892c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos /* driver (virtual) pointer to queue */ 1902c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct ipw2100_bd *drv; 1912c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1922c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos /* firmware (physical) pointer to queue */ 1932c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos dma_addr_t nic; 1942c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1952c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos /* Length of phy memory allocated for BDs */ 1962c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 size; 1972c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1982c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos /* Number of BDs in queue (and in array) */ 1992c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 entries; 2002c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2012c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos /* Number of available BDs (invalid for NIC BDs) */ 2022c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 available; 2032c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2042c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos /* Offset of oldest used BD in array (next one to 2052c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * check for completion) */ 2062c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 oldest; 2072c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2082c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos /* Offset of next available (unused) BD */ 2092c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 next; 2102c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos}; 2112c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2122c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define RX_QUEUE_LENGTH 256 2132c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TX_QUEUE_LENGTH 256 2142c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define HW_QUEUE_LENGTH 256 2152c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2162c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TX_PENDED_QUEUE_LENGTH (TX_QUEUE_LENGTH / NUMBER_OF_BD_PER_DATA_PACKET) 2172c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2182c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define STATUS_TYPE_MASK 0x0000000f 2192c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define COMMAND_STATUS_VAL 0 2202c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define STATUS_CHANGE_VAL 1 2212c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define P80211_DATA_VAL 2 2222c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define P8023_DATA_VAL 3 2232c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define HOST_NOTIFICATION_VAL 4 2242c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2252c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_RSSI_TO_DBM (-98) 2262c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2272c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_status { 2282c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 frame_size; 2292c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u16 status_fields; 2302c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 flags; 2312c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_STATUS_FLAG_DECRYPTED (1<<0) 2322c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_STATUS_FLAG_WEP_ENCRYPTED (1<<1) 2332c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_STATUS_FLAG_CRC_ERROR (1<<2) 2342c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 rssi; 235ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet} __packed; 2362c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2372c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_status_queue { 2382c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos /* driver (virtual) pointer to queue */ 2392c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct ipw2100_status *drv; 2402c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2412c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos /* firmware (physical) pointer to queue */ 2422c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos dma_addr_t nic; 2432c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2442c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos /* Length of phy memory allocated for BDs */ 2452c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 size; 2462c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos}; 2472c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2482c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define HOST_COMMAND_PARAMS_REG_LEN 100 2492c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define CMD_STATUS_PARAMS_REG_LEN 3 2502c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2512c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_WPA_CAPABILITIES 0x1 2522c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_WPA_LISTENINTERVAL 0x2 2532c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_WPA_AP_ADDRESS 0x4 2542c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2552c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MAX_VAR_IE_LEN ((HOST_COMMAND_PARAMS_REG_LEN - 4) * sizeof(u32)) 2562c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2572c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_wpa_assoc_frame { 2582c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u16 fixed_ie_mask; 2592c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct { 2602c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u16 capab_info; 2612c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u16 listen_interval; 2622c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 current_ap[ETH_ALEN]; 2632c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos } fixed_ies; 2642c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 var_ie_len; 2652c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 var_ie[IPW_MAX_VAR_IE_LEN]; 2662c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos}; 2672c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2682c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_BSS 1 2692c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MONITOR 2 2702c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_IBSS 3 2712c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2722c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos/** 2732c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * @struct _tx_cmd - HWCommand 2742c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * @brief H/W command structure. 2752c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos */ 2762c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_cmd_header { 2772c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 host_command_reg; 2782c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 host_command_reg1; 2792c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 sequence; 2802c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 host_command_len_reg; 2812c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 host_command_params_reg[HOST_COMMAND_PARAMS_REG_LEN]; 2822c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 cmd_status_reg; 2832c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 cmd_status_params_reg[CMD_STATUS_PARAMS_REG_LEN]; 2842c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 rxq_base_ptr; 2852c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 rxq_next_ptr; 2862c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 rxq_host_ptr; 2872c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 txq_base_ptr; 2882c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 txq_next_ptr; 2892c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 txq_host_ptr; 2902c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 tx_status_reg; 2912c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 reserved; 2922c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 status_change_reg; 2932c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 reserved1[3]; 2942c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 *ordinal1_ptr; 2952c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 *ordinal2_ptr; 296ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet} __packed; 2972c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 2982c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_data_header { 2992c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 host_command_reg; 3002c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 host_command_reg1; 301ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos u8 encrypted; // BOOLEAN in win! TRUE if frame is enc by driver 3022c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 needs_encryption; // BOOLEAN in win! TRUE if frma need to be enc in NIC 3032c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 wep_index; // 0 no key, 1-4 key index, 0xff immediate key 304ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos u8 key_size; // 0 no imm key, 0x5 64bit encr, 0xd 128bit encr, 0x10 128bit encr and 128bit IV 3052c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 key[16]; 3062c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 reserved[10]; // f/w reserved 3072c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 src_addr[ETH_ALEN]; 3082c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 dst_addr[ETH_ALEN]; 3092c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u16 fragment_size; 310ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet} __packed; 3112c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 312070d01651296d3c87bca94f3b1313447e9e06c2fPavel Machek/* Host command data structure */ 3132c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct host_command { 314ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos u32 host_command; // COMMAND ID 315ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos u32 host_command1; // COMMAND ID 3162c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 host_command_sequence; // UNIQUE COMMAND NUMBER (ID) 3172c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 host_command_length; // LENGTH 3182c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 host_command_parameters[HOST_COMMAND_PARAMS_REG_LEN]; // COMMAND PARAMETERS 319ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet} __packed; 3202c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 3212c86c275015c880e810830304a3a4ab94803b38bJames Ketrenostypedef enum { 3222c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos POWER_ON_RESET, 3232c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos EXIT_POWER_DOWN_RESET, 3242c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos SW_RESET, 3252c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos EEPROM_RW, 3262c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos SW_RE_INIT 3272c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos} ipw2100_reset_event; 3282c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 3292c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosenum { 3302c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos COMMAND = 0xCAFE, 3312c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos DATA, 3322c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos RX 3332c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos}; 3342c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 3352c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_tx_packet { 3362c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int type; 3372c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int index; 3382c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos union { 339ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos struct { /* COMMAND */ 340ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos struct ipw2100_cmd_header *cmd; 3412c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos dma_addr_t cmd_phys; 3422c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos } c_struct; 343ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos struct { /* DATA */ 344ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos struct ipw2100_data_header *data; 3452c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos dma_addr_t data_phys; 346b0a4e7d8a291de63f35b04464de9ab4a83d38a7cJohn W. Linville struct libipw_txb *txb; 3472c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos } d_struct; 3482c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos } info; 3492c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int jiffy_start; 3502c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 3512c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct list_head list; 3522c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos}; 3532c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 3542c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_rx_packet { 3552c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct ipw2100_rx *rxp; 3562c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos dma_addr_t dma_addr; 3572c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int jiffy_start; 3582c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct sk_buff *skb; 3592c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct list_head list; 3602c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos}; 3612c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 3622c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define FRAG_DISABLED (1<<31) 3632c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define RTS_DISABLED (1<<31) 3642c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define MAX_RTS_THRESHOLD 2304U 3652c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define MIN_RTS_THRESHOLD 1U 3662c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define DEFAULT_RTS_THRESHOLD 1000U 3672c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 3682c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define DEFAULT_BEACON_INTERVAL 100U 3692c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define DEFAULT_SHORT_RETRY_LIMIT 7U 3702c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define DEFAULT_LONG_RETRY_LIMIT 4U 3712c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 3722c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_ordinals { 3732c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 table1_addr; 3742c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 table2_addr; 3752c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 table1_size; 3762c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 table2_size; 3772c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos}; 3782c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 3792c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos/* Host Notification header */ 3802c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_notification { 3812c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 hnhdr_subtype; /* type of host notification */ 3822c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 hnhdr_size; /* size in bytes of data 3832c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos or number of entries, if table. 3842c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos Does NOT include header */ 385ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet} __packed; 3862c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 3872c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define MAX_KEY_SIZE 16 3882c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define MAX_KEYS 8 3892c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 3902c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_WEP_ENABLE (1<<1) 3912c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_WEP_DROP_CLEAR (1<<2) 3922c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 3932c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_NONE_CIPHER (1<<0) 3942c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_WEP40_CIPHER (1<<1) 3952c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_TKIP_CIPHER (1<<2) 3962c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_CCMP_CIPHER (1<<4) 3972c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_WEP104_CIPHER (1<<5) 3982c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_CKIP_CIPHER (1<<6) 3992c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 400cbbdd03fadeddd02efec05ccfd4e6870ed913762Zhu Yi#define IPW_AUTH_OPEN 0 401cbbdd03fadeddd02efec05ccfd4e6870ed913762Zhu Yi#define IPW_AUTH_SHARED 1 402cbbdd03fadeddd02efec05ccfd4e6870ed913762Zhu Yi#define IPW_AUTH_LEAP 2 403cbbdd03fadeddd02efec05ccfd4e6870ed913762Zhu Yi#define IPW_AUTH_LEAP_CISCO_ID 0x80 4042c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 4052c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct statistic { 4062c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int value; 4072c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int hi; 4082c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int lo; 4092c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos}; 4102c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 4112c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define INIT_STAT(x) do { \ 4122c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos (x)->value = (x)->hi = 0; \ 4132c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos (x)->lo = 0x7fffffff; \ 4142c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos} while (0) 4152c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define SET_STAT(x,y) do { \ 4162c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos (x)->value = y; \ 4172c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos if ((x)->value > (x)->hi) (x)->hi = (x)->value; \ 4182c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos if ((x)->value < (x)->lo) (x)->lo = (x)->value; \ 4192c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos} while (0) 4202c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define INC_STAT(x) do { if (++(x)->value > (x)->hi) (x)->hi = (x)->value; } \ 4212c86c275015c880e810830304a3a4ab94803b38bJames Ketrenoswhile (0) 4222c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define DEC_STAT(x) do { if (--(x)->value < (x)->lo) (x)->lo = (x)->value; } \ 4232c86c275015c880e810830304a3a4ab94803b38bJames Ketrenoswhile (0) 4242c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 4252c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_ERROR_QUEUE 5 4262c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 4272c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos/* Power management code: enable or disable? */ 4282c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosenum { 4292c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#ifdef CONFIG_PM 4302c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW2100_PM_DISABLED = 0, 4312c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos PM_STATE_SIZE = 16, 4322c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#else 4332c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW2100_PM_DISABLED = 1, 4342c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos PM_STATE_SIZE = 0, 4352c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#endif 4362c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos}; 4372c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 4382c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define STATUS_POWERED (1<<0) 439ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#define STATUS_CMD_ACTIVE (1<<1) /**< host command in progress */ 440ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#define STATUS_RUNNING (1<<2) /* Card initialized, but not enabled */ 441ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#define STATUS_ENABLED (1<<3) /* Card enabled -- can scan,Tx,Rx */ 442ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#define STATUS_STOPPING (1<<4) /* Card is in shutdown phase */ 443ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#define STATUS_INITIALIZED (1<<5) /* Card is ready for external calls */ 444ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#define STATUS_ASSOCIATING (1<<9) /* Associated, but no BSSID yet */ 445ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#define STATUS_ASSOCIATED (1<<10) /* Associated and BSSID valid */ 4462c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define STATUS_INT_ENABLED (1<<11) 4472c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define STATUS_RF_KILL_HW (1<<12) 4482c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define STATUS_RF_KILL_SW (1<<13) 4492c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define STATUS_RF_KILL_MASK (STATUS_RF_KILL_HW | STATUS_RF_KILL_SW) 4502c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define STATUS_EXIT_PENDING (1<<14) 4512c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 4522c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define STATUS_SCAN_PENDING (1<<23) 4532c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define STATUS_SCANNING (1<<24) 4542c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define STATUS_SCAN_ABORTING (1<<25) 4552c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define STATUS_SCAN_COMPLETE (1<<26) 4562c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define STATUS_WX_EVENT_PENDING (1<<27) 4572c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define STATUS_RESET_PENDING (1<<29) 458ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#define STATUS_SECURITY_UPDATED (1<<30) /* Security sync needed */ 4592c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 4602c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos/* Internal NIC states */ 4612c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_STATE_INITIALIZED (1<<0) 4622c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_STATE_COUNTRY_FOUND (1<<1) 4632c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_STATE_ASSOCIATED (1<<2) 4642c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_STATE_ASSN_LOST (1<<3) 4652c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_STATE_ASSN_CHANGED (1<<4) 4662c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_STATE_SCAN_COMPLETE (1<<5) 4672c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_STATE_ENTERED_PSP (1<<6) 4682c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_STATE_LEFT_PSP (1<<7) 4692c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_STATE_RF_KILL (1<<8) 4702c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_STATE_DISABLED (1<<9) 4712c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_STATE_POWER_DOWN (1<<10) 4722c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_STATE_SCANNING (1<<11) 4732c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 474ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#define CFG_STATIC_CHANNEL (1<<0) /* Restrict assoc. to single channel */ 475ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#define CFG_STATIC_ESSID (1<<1) /* Restrict assoc. to single SSID */ 476ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#define CFG_STATIC_BSSID (1<<2) /* Restrict assoc. to single BSSID */ 4772c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define CFG_CUSTOM_MAC (1<<3) 4782c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define CFG_LONG_PREAMBLE (1<<4) 4792c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define CFG_ASSOCIATE (1<<6) 4802c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define CFG_FIXED_RATE (1<<7) 4812c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define CFG_ADHOC_CREATE (1<<8) 4822c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define CFG_PASSIVE_SCAN (1<<10) 483823283549da144ff49e65c6e4a670b7784203e0bJames Ketrenos#ifdef CONFIG_IPW2100_MONITOR 484823283549da144ff49e65c6e4a670b7784203e0bJames Ketrenos#define CFG_CRC_CHECK (1<<11) 485823283549da144ff49e65c6e4a670b7784203e0bJames Ketrenos#endif 4862c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 487ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#define CAP_SHARED_KEY (1<<0) /* Off = OPEN */ 488ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#define CAP_PRIVACY_ON (1<<1) /* Off = No privacy */ 4892c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 4902c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_priv { 4912c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 492ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos int stop_hang_check; /* Set 1 when shutting down to kill hang_check */ 493ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos int stop_rf_kill; /* Set 1 when shutting down to kill rf_kill */ 4942c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 495b0a4e7d8a291de63f35b04464de9ab4a83d38a7cJohn W. Linville struct libipw_device *ieee; 4962c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos unsigned long status; 4972c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos unsigned long config; 4982c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos unsigned long capability; 4992c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5002c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos /* Statistics */ 5012c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int resets; 5022c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int reset_backoff; 5032c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5042c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos /* Context */ 5052c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 essid[IW_ESSID_MAX_SIZE]; 5062c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 essid_len; 5072c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 bssid[ETH_ALEN]; 5082c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 channel; 5092c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int last_mode; 5102c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5112c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos unsigned long connect_start; 5122c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos unsigned long last_reset; 5132c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5142c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 channel_mask; 5152c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 fatal_error; 5162c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 fatal_errors[IPW2100_ERROR_QUEUE]; 5172c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 fatal_index; 5182c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int eeprom_version; 5192c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int firmware_version; 5202c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos unsigned long hw_features; 5212c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int hangs; 5222c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 last_rtc; 523ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos int dump_raw; /* 1 to dump raw bytes in /sys/.../memory */ 524ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos u8 *snapshot[0x30]; 5252c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5262c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 mandatory_bssid_mac[ETH_ALEN]; 5272c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u8 mac_addr[ETH_ALEN]; 5282c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5292c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int power_mode; 5302c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5312c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int messages_sent; 5322c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5332c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int short_retry_limit; 5342c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int long_retry_limit; 5352c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5362c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 rts_threshold; 5372c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 frag_threshold; 5382c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5392c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int in_isr; 5402c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5412c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 tx_rates; 5422c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int tx_power; 5432c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 beacon_interval; 5442c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5452c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos char nick[IW_ESSID_MAX_SIZE + 1]; 5462c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5472c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct ipw2100_status_queue status_queue; 5482c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5492c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct statistic txq_stat; 5502c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct statistic rxq_stat; 5512c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct ipw2100_bd_queue rx_queue; 5522c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct ipw2100_bd_queue tx_queue; 5532c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct ipw2100_rx_packet *rx_buffers; 5542c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5552c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct statistic fw_pend_stat; 5562c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct list_head fw_pend_list; 5572c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5582c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct statistic msg_free_stat; 5592c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct statistic msg_pend_stat; 5602c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct list_head msg_free_list; 5612c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct list_head msg_pend_list; 5622c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct ipw2100_tx_packet *msg_buffers; 5632c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5642c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct statistic tx_free_stat; 5652c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct statistic tx_pend_stat; 5662c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct list_head tx_free_list; 5672c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct list_head tx_pend_list; 5682c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct ipw2100_tx_packet *tx_buffers; 5692c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5702c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct ipw2100_ordinals ordinals; 5712c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5722c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct pci_dev *pci_dev; 5732c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5742c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct proc_dir_entry *dir_dev; 5752c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 5762c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct net_device *net_dev; 5772c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct iw_statistics wstats; 5782c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 579eaf8f53bc001d20aa59aa4519b71f11a1cc7f945James Ketrenos struct iw_public_data wireless_data; 580eaf8f53bc001d20aa59aa4519b71f11a1cc7f945James Ketrenos 5812c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct tasklet_struct irq_tasklet; 5822c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 583c4028958b6ecad064b1a6303a6a5906d4fe48d73David Howells struct delayed_work reset_work; 584c4028958b6ecad064b1a6303a6a5906d4fe48d73David Howells struct delayed_work security_work; 585c4028958b6ecad064b1a6303a6a5906d4fe48d73David Howells struct delayed_work wx_event_work; 586c4028958b6ecad064b1a6303a6a5906d4fe48d73David Howells struct delayed_work hang_check; 587c4028958b6ecad064b1a6303a6a5906d4fe48d73David Howells struct delayed_work rf_kill; 588d20c678a450a25c1c12925f60c1b4cc040acc17dDan Williams struct work_struct scan_event_now; 589d20c678a450a25c1c12925f60c1b4cc040acc17dDan Williams struct delayed_work scan_event_later; 590d20c678a450a25c1c12925f60c1b4cc040acc17dDan Williams 591d20c678a450a25c1c12925f60c1b4cc040acc17dDan Williams int user_requested_scan; 5922c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 593c3d72b968129ad4aec86c5fc8d2380f01ebebc53Dan Williams /* Track time in suspend */ 594c3d72b968129ad4aec86c5fc8d2380f01ebebc53Dan Williams unsigned long suspend_at; 595c3d72b968129ad4aec86c5fc8d2380f01ebebc53Dan Williams unsigned long suspend_time; 596c3d72b968129ad4aec86c5fc8d2380f01ebebc53Dan Williams 5972c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 interrupts; 5982c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int tx_interrupts; 5992c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int rx_interrupts; 6002c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int inta_other; 6012c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 6022c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos spinlock_t low_lock; 603752e377bfdad61482e39cafedb3a6bb1b5bb0289Ingo Molnar struct mutex action_mutex; 604752e377bfdad61482e39cafedb3a6bb1b5bb0289Ingo Molnar struct mutex adapter_mutex; 6052c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 6062c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos wait_queue_head_t wait_command_queue; 6072c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos}; 6082c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 6092c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos/********************************************************* 6102c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * Host Command -> From Driver to FW 6112c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos *********************************************************/ 6122c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 6132c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos/** 6142c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos * Host command identifiers 6152c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos */ 6162c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define HOST_COMPLETE 2 6172c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define SYSTEM_CONFIG 6 6182c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define SSID 8 6192c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define MANDATORY_BSSID 9 6202c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define AUTHENTICATION_TYPE 10 6212c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define ADAPTER_ADDRESS 11 6222c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define PORT_TYPE 12 6232c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define INTERNATIONAL_MODE 13 6242c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define CHANNEL 14 6252c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define RTS_THRESHOLD 15 6262c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define FRAG_THRESHOLD 16 6272c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define POWER_MODE 17 6282c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TX_RATES 18 6292c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define BASIC_TX_RATES 19 6302c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define WEP_KEY_INFO 20 6312c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define WEP_KEY_INDEX 25 6322c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define WEP_FLAGS 26 6332c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define ADD_MULTICAST 27 6342c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define CLEAR_ALL_MULTICAST 28 6352c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define BEACON_INTERVAL 29 6362c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define ATIM_WINDOW 30 6372c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define CLEAR_STATISTICS 31 6382c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define SEND 33 6392c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TX_POWER_INDEX 36 6402c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define BROADCAST_SCAN 43 6412c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define CARD_DISABLE 44 6422c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define PREFERRED_BSSID 45 6432c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define SET_SCAN_OPTIONS 46 6442c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define SCAN_DWELL_TIME 47 6452c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define SWEEP_TABLE 48 6462c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define AP_OR_STATION_TABLE 49 6472c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define GROUP_ORDINALS 50 6482c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define SHORT_RETRY_LIMIT 51 6492c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define LONG_RETRY_LIMIT 52 6502c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 6512c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define HOST_PRE_POWER_DOWN 58 6522c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define CARD_DISABLE_PHY_OFF 61 6532c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define MSDU_TX_RATES 62 6542c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 655070d01651296d3c87bca94f3b1313447e9e06c2fPavel Machek/* Rogue AP Detection */ 6562c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define SET_STATION_STAT_BITS 64 6572c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define CLEAR_STATIONS_STAT_BITS 65 6582c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define LEAP_ROGUE_MODE 66 //TODO tbw replaced by CFG_LEAP_ROGUE_AP 6592c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define SET_SECURITY_INFORMATION 67 6602c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define DISASSOCIATION_BSSID 68 6612c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define SET_WPA_IE 69 6622c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 663070d01651296d3c87bca94f3b1313447e9e06c2fPavel Machek/* system configuration bit mask: */ 6642c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_CFG_MONITOR 0x00004 6652c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_CFG_PREAMBLE_AUTO 0x00010 6662c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_CFG_IBSS_AUTO_START 0x00020 6672c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_CFG_LOOPBACK 0x00100 6682c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_CFG_ANSWER_BCSSID_PROBE 0x00800 6692c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_CFG_BT_SIDEBAND_SIGNAL 0x02000 6702c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_CFG_802_1x_ENABLE 0x04000 6712c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_CFG_BSS_MASK 0x08000 6722c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_CFG_IBSS_MASK 0x10000 6732c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 6742c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_SCAN_NOASSOCIATE (1<<0) 6752c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_SCAN_MIXED_CELL (1<<1) 6762c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos/* RESERVED (1<<2) */ 6772c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_SCAN_PASSIVE (1<<3) 6782c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 6792c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_NIC_FATAL_ERROR 0x2A7F0 6802c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_ERROR_ADDR(x) (x & 0x3FFFF) 6812c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_ERROR_CODE(x) ((x & 0xFF000000) >> 24) 6822c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_ERR_C3_CORRUPTION (0x10 << 24) 6832c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_ERR_MSG_TIMEOUT (0x11 << 24) 6842c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_ERR_FW_LOAD (0x12 << 24) 6852c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 6862c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MEM_SRAM_HOST_SHARED_LOWER_BOUND 0x200 6872c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MEM_SRAM_HOST_INTERRUPT_AREA_LOWER_BOUND IPW_MEM_SRAM_HOST_SHARED_LOWER_BOUND + 0x0D80 6882c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 6892c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MEM_HOST_SHARED_RX_BD_BASE (IPW_MEM_SRAM_HOST_SHARED_LOWER_BOUND + 0x40) 6902c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MEM_HOST_SHARED_RX_STATUS_BASE (IPW_MEM_SRAM_HOST_SHARED_LOWER_BOUND + 0x44) 6912c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MEM_HOST_SHARED_RX_BD_SIZE (IPW_MEM_SRAM_HOST_SHARED_LOWER_BOUND + 0x48) 6922c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MEM_HOST_SHARED_RX_READ_INDEX (IPW_MEM_SRAM_HOST_SHARED_LOWER_BOUND + 0xa0) 6932c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 6942c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MEM_HOST_SHARED_TX_QUEUE_BD_BASE (IPW_MEM_SRAM_HOST_SHARED_LOWER_BOUND + 0x00) 6952c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MEM_HOST_SHARED_TX_QUEUE_BD_SIZE (IPW_MEM_SRAM_HOST_SHARED_LOWER_BOUND + 0x04) 6962c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MEM_HOST_SHARED_TX_QUEUE_READ_INDEX (IPW_MEM_SRAM_HOST_SHARED_LOWER_BOUND + 0x80) 6972c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 6982c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MEM_HOST_SHARED_RX_WRITE_INDEX \ 6992c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos (IPW_MEM_SRAM_HOST_INTERRUPT_AREA_LOWER_BOUND + 0x20) 7002c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7012c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MEM_HOST_SHARED_TX_QUEUE_WRITE_INDEX \ 7022c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos (IPW_MEM_SRAM_HOST_INTERRUPT_AREA_LOWER_BOUND) 7032c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7042c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MEM_HOST_SHARED_ORDINALS_TABLE_1 (IPW_MEM_SRAM_HOST_SHARED_LOWER_BOUND + 0x180) 7052c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MEM_HOST_SHARED_ORDINALS_TABLE_2 (IPW_MEM_SRAM_HOST_SHARED_LOWER_BOUND + 0x184) 7062c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7072c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_INTA_TX_TRANSFER (0x00000001) // Bit 0 (LSB) 7082c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_INTA_RX_TRANSFER (0x00000002) // Bit 1 7092c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_INTA_TX_COMPLETE (0x00000004) // Bit 2 710ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#define IPW2100_INTA_EVENT_INTERRUPT (0x00000008) // Bit 3 7112c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_INTA_STATUS_CHANGE (0x00000010) // Bit 4 7122c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_INTA_BEACON_PERIOD_EXPIRED (0x00000020) // Bit 5 7132c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_INTA_SLAVE_MODE_HOST_COMMAND_DONE (0x00010000) // Bit 16 7142c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_INTA_FW_INIT_DONE (0x01000000) // Bit 24 7152c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_INTA_FW_CALIBRATION_CALC (0x02000000) // Bit 25 7162c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_INTA_FATAL_ERROR (0x40000000) // Bit 30 7172c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_INTA_PARITY_ERROR (0x80000000) // Bit 31 (MSB) 7182c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7192c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_AUX_HOST_RESET_REG_PRINCETON_RESET (0x00000001) 7202c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_AUX_HOST_RESET_REG_FORCE_NMI (0x00000002) 7212c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_AUX_HOST_RESET_REG_PCI_HOST_CLUSTER_FATAL_NMI (0x00000004) 7222c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_AUX_HOST_RESET_REG_CORE_FATAL_NMI (0x00000008) 7232c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_AUX_HOST_RESET_REG_SW_RESET (0x00000080) 7242c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_AUX_HOST_RESET_REG_MASTER_DISABLED (0x00000100) 7252c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_AUX_HOST_RESET_REG_STOP_MASTER (0x00000200) 7262c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7272c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_AUX_HOST_GP_CNTRL_BIT_CLOCK_READY (0x00000001) // Bit 0 (LSB) 7282c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_AUX_HOST_GP_CNTRL_BIT_HOST_ALLOWS_STANDBY (0x00000002) // Bit 1 7292c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_AUX_HOST_GP_CNTRL_BIT_INIT_DONE (0x00000004) // Bit 2 7302c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_AUX_HOST_GP_CNTRL_BITS_SYS_CONFIG (0x000007c0) // Bits 6-10 7312c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_AUX_HOST_GP_CNTRL_BIT_BUS_TYPE (0x00000200) // Bit 9 7322c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_AUX_HOST_GP_CNTRL_BIT_BAR0_BLOCK_SIZE (0x00000400) // Bit 10 7332c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_AUX_HOST_GP_CNTRL_BIT_USB_MODE (0x20000000) // Bit 29 7342c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_AUX_HOST_GP_CNTRL_BIT_HOST_FORCES_SYS_CLK (0x40000000) // Bit 30 7352c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_AUX_HOST_GP_CNTRL_BIT_FW_FORCES_SYS_CLK (0x80000000) // Bit 31 (MSB) 7362c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7372c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_BIT_GPIO_GPIO1_MASK 0x0000000C 7382c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_BIT_GPIO_GPIO3_MASK 0x000000C0 7392c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_BIT_GPIO_GPIO1_ENABLE 0x00000008 7402c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_BIT_GPIO_RF_KILL 0x00010000 7412c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7422c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_BIT_GPIO_LED_OFF 0x00002000 // Bit 13 = 1 7432c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7442c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_DOMAIN_0_OFFSET 0x0000 7452c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_DOMAIN_1_OFFSET IPW_MEM_SRAM_HOST_SHARED_LOWER_BOUND 7462c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7472c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_INTA IPW_REG_DOMAIN_0_OFFSET + 0x0008 7482c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_INTA_MASK IPW_REG_DOMAIN_0_OFFSET + 0x000C 7492c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_INDIRECT_ACCESS_ADDRESS IPW_REG_DOMAIN_0_OFFSET + 0x0010 7502c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_INDIRECT_ACCESS_DATA IPW_REG_DOMAIN_0_OFFSET + 0x0014 7512c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_AUTOINCREMENT_ADDRESS IPW_REG_DOMAIN_0_OFFSET + 0x0018 7522c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_AUTOINCREMENT_DATA IPW_REG_DOMAIN_0_OFFSET + 0x001C 7532c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_RESET_REG IPW_REG_DOMAIN_0_OFFSET + 0x0020 7542c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_GP_CNTRL IPW_REG_DOMAIN_0_OFFSET + 0x0024 7552c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_GPIO IPW_REG_DOMAIN_0_OFFSET + 0x0030 7562c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_FW_TYPE IPW_REG_DOMAIN_1_OFFSET + 0x0188 7572c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_FW_VERSION IPW_REG_DOMAIN_1_OFFSET + 0x018C 7582c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_FW_COMPATABILITY_VERSION IPW_REG_DOMAIN_1_OFFSET + 0x0190 7592c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7602c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_INDIRECT_ADDR_MASK 0x00FFFFFC 7612c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7622c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_INTERRUPT_MASK 0xC1010013 7632c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7642c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_CONTROL_REG 0x220000 7652c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_CONTROL_PHY_OFF 0x8 7662c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7672c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_COMMAND 0x00300004 7682c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_COMMAND_PHY_ON 0x0 7692c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW2100_COMMAND_PHY_OFF 0x1 7702c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7712c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos/* in DEBUG_AREA, values of memory always 0xd55555d5 */ 7722c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_DOA_DEBUG_AREA_START IPW_REG_DOMAIN_0_OFFSET + 0x0090 7732c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_REG_DOA_DEBUG_AREA_END IPW_REG_DOMAIN_0_OFFSET + 0x00FF 7742c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_DATA_DOA_DEBUG_VALUE 0xd55555d5 7752c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7762c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_INTERNAL_REGISTER_HALT_AND_RESET 0x003000e0 7772c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7782c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_WAIT_CLOCK_STABILIZATION_DELAY 50 // micro seconds 7792c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_WAIT_RESET_ARC_COMPLETE_DELAY 10 // micro seconds 7802c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_WAIT_RESET_MASTER_ASSERT_COMPLETE_DELAY 10 // micro seconds 7812c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7822c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos// BD ring queue read/write difference 7832c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_BD_QUEUE_W_R_MIN_SPARE 2 7842c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7852c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_CACHE_LINE_LENGTH_DEFAULT 0x80 7862c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7872c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_CARD_DISABLE_PHY_OFF_COMPLETE_WAIT 100 // 100 milli 7882c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_PREPARE_POWER_DOWN_COMPLETE_WAIT 100 // 100 milli 7892c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 790b0a4e7d8a291de63f35b04464de9ab4a83d38a7cJohn W. Linville#define IPW_HEADER_802_11_SIZE sizeof(struct libipw_hdr_3addr) 7912c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MAX_80211_PAYLOAD_SIZE 2304U 7922c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MAX_802_11_PAYLOAD_LENGTH 2312 7932c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MAX_ACCEPTABLE_TX_FRAME_LENGTH 1536 7942c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MIN_ACCEPTABLE_RX_FRAME_LENGTH 60 7952c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_MAX_ACCEPTABLE_RX_FRAME_LENGTH \ 7962c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos (IPW_MAX_ACCEPTABLE_TX_FRAME_LENGTH + IPW_HEADER_802_11_SIZE - \ 7972c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos sizeof(struct ethhdr)) 7982c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 7992c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_802_11_FCS_LENGTH 4 8002c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_RX_NIC_BUFFER_LENGTH \ 8012c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos (IPW_MAX_802_11_PAYLOAD_LENGTH + IPW_HEADER_802_11_SIZE + \ 8022c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_802_11_FCS_LENGTH) 8032c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8042c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_802_11_PAYLOAD_OFFSET \ 805b0a4e7d8a291de63f35b04464de9ab4a83d38a7cJohn W. Linville (sizeof(struct libipw_hdr_3addr) + \ 806b0a4e7d8a291de63f35b04464de9ab4a83d38a7cJohn W. Linville sizeof(struct libipw_snap_hdr)) 8072c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8082c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_rx { 8092c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos union { 8102c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos unsigned char payload[IPW_RX_NIC_BUFFER_LENGTH]; 811b0a4e7d8a291de63f35b04464de9ab4a83d38a7cJohn W. Linville struct libipw_hdr_4addr header; 8122c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos u32 status; 8132c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct ipw2100_notification notification; 8142c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct ipw2100_cmd_header command; 8152c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos } rx_data; 816ba2d3587912f82d1ab4367975b1df460db60fb1eEric Dumazet} __packed; 8172c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 818070d01651296d3c87bca94f3b1313447e9e06c2fPavel Machek/* Bit 0-7 are for 802.11b tx rates - . Bit 5-7 are reserved */ 8192c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TX_RATE_1_MBIT 0x0001 8202c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TX_RATE_2_MBIT 0x0002 8212c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TX_RATE_5_5_MBIT 0x0004 8222c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TX_RATE_11_MBIT 0x0008 8232c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TX_RATE_MASK 0x000F 8242c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define DEFAULT_TX_RATES 0x000F 8252c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8262c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_POWER_MODE_CAM 0x00 //(always on) 8272c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_POWER_INDEX_1 0x01 8282c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_POWER_INDEX_2 0x02 8292c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_POWER_INDEX_3 0x03 8302c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_POWER_INDEX_4 0x04 8312c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_POWER_INDEX_5 0x05 8322c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_POWER_AUTO 0x06 8332c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_POWER_MASK 0x0F 8342c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_POWER_ENABLED 0x10 8352c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_POWER_LEVEL(x) ((x) & IPW_POWER_MASK) 8362c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8372c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_TX_POWER_AUTO 0 8382c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_TX_POWER_ENHANCED 1 8392c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8402c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_TX_POWER_DEFAULT 32 8412c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_TX_POWER_MIN 0 8422c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_TX_POWER_MAX 16 8432c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_TX_POWER_MIN_DBM (-12) 8442c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_TX_POWER_MAX_DBM 16 8452c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 846ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#define FW_SCAN_DONOT_ASSOCIATE 0x0001 // Dont Attempt to Associate after Scan 847ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#define FW_SCAN_PASSIVE 0x0008 // Force PASSSIVE Scan 8482c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8492c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define REG_MIN_CHANNEL 0 8502c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define REG_MAX_CHANNEL 14 8512c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8522c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define REG_CHANNEL_MASK 0x00003FFF 8532c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_IBSS_11B_DEFAULT_MASK 0x87ff 8542c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8552c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define DIVERSITY_EITHER 0 // Use both antennas 8562c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define DIVERSITY_ANTENNA_A 1 // Use antenna A 8572c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define DIVERSITY_ANTENNA_B 2 // Use antenna B 8582c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8592c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define HOST_COMMAND_WAIT 0 8602c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define HOST_COMMAND_NO_WAIT 1 8612c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8622c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define LOCK_NONE 0 8632c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define LOCK_DRIVER 1 8642c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define LOCK_FW 2 8652c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8662c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TYPE_SWEEP_ORD 0x000D 8672c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TYPE_IBSS_STTN_ORD 0x000E 8682c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TYPE_BSS_AP_ORD 0x000F 8692c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TYPE_RAW_BEACON_ENTRY 0x0010 8702c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TYPE_CALIBRATION_DATA 0x0011 8712c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TYPE_ROGUE_AP_DATA 0x0012 8722c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TYPE_ASSOCIATION_REQUEST 0x0013 8732c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define TYPE_REASSOCIATION_REQUEST 0x0014 8742c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 875823283549da144ff49e65c6e4a670b7784203e0bJames Ketrenos#define HW_FEATURE_RFKILL 0x0001 876823283549da144ff49e65c6e4a670b7784203e0bJames Ketrenos#define RF_KILLSWITCH_OFF 1 877823283549da144ff49e65c6e4a670b7784203e0bJames Ketrenos#define RF_KILLSWITCH_ON 0 8782c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8792c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_COMMAND_POOL_SIZE 40 8802c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8812c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_START_ORD_TAB_1 1 8822c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_START_ORD_TAB_2 1000 8832c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8842c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_ORD_TAB_1_ENTRY_SIZE sizeof(u32) 8852c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8862c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IS_ORDINAL_TABLE_ONE(mgr,id) \ 8872c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos ((id >= IPW_START_ORD_TAB_1) && (id < mgr->table1_size)) 8882c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IS_ORDINAL_TABLE_TWO(mgr,id) \ 8892c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos ((id >= IPW_START_ORD_TAB_2) && (id < (mgr->table2_size + IPW_START_ORD_TAB_2))) 8902c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8912c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define BSS_ID_LENGTH 6 8922c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 8932c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos// Fixed size data: Ordinal Table 1 8942c86c275015c880e810830304a3a4ab94803b38bJames Ketrenostypedef enum _ORDINAL_TABLE_1 { // NS - means Not Supported by FW 8952c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos// Transmit statistics 896ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_HOST_REQUESTS = 1, // # of requested Host Tx's (MSDU) 8972c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_HOST_COMPLETE, // # of successful Host Tx's (MSDU) 8982c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_DIR_DATA, // # of successful Directed Tx's (MSDU) 8992c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 9002c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_DIR_DATA1 = 4, // # of successful Directed Tx's (MSDU) @ 1MB 9012c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_DIR_DATA2, // # of successful Directed Tx's (MSDU) @ 2MB 9022c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_DIR_DATA5_5, // # of successful Directed Tx's (MSDU) @ 5_5MB 9032c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_DIR_DATA11, // # of successful Directed Tx's (MSDU) @ 11MB 9042c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_DIR_DATA22, // # of successful Directed Tx's (MSDU) @ 22MB 9052c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 906ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_NODIR_DATA1 = 13, // # of successful Non_Directed Tx's (MSDU) @ 1MB 9072c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_NODIR_DATA2, // # of successful Non_Directed Tx's (MSDU) @ 2MB 9082c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_NODIR_DATA5_5, // # of successful Non_Directed Tx's (MSDU) @ 5.5MB 9092c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_NODIR_DATA11, // # of successful Non_Directed Tx's (MSDU) @ 11MB 9102c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 9112c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_NULL_DATA = 21, // # of successful NULL data Tx's 912ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_RTS, // # of successful Tx RTS 913ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_CTS, // # of successful Tx CTS 914ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_ACK, // # of successful Tx ACK 915ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_ASSN, // # of successful Association Tx's 9162c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_ASSN_RESP, // # of successful Association response Tx's 917ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_REASSN, // # of successful Reassociation Tx's 9182c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_REASSN_RESP, // # of successful Reassociation response Tx's 919ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_PROBE, // # of probes successfully transmitted 9202c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_PROBE_RESP, // # of probe responses successfully transmitted 921ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_BEACON, // # of tx beacon 922ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_ATIM, // # of Tx ATIM 9232c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_DISASSN, // # of successful Disassociation TX 924ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_AUTH, // # of successful Authentication Tx 925ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_DEAUTH, // # of successful Deauthentication TX 9262c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 927ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_TOTAL_BYTES = 41, // Total successful Tx data bytes 928ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_RETRIES, // # of Tx retries 929ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_RETRY1, // # of Tx retries at 1MBPS 930ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_RETRY2, // # of Tx retries at 2MBPS 931ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_RETRY5_5, // # of Tx retries at 5.5MBPS 932ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_RETRY11, // # of Tx retries at 11MBPS 9332c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 9342c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_FAILURES = 51, // # of Tx Failures 9352c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_ABORT_AT_HOP, //NS // # of Tx's aborted at hop time 936ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_MAX_TRIES_IN_HOP, // # of times max tries in a hop failed 9372c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_ABORT_LATE_DMA, //NS // # of times tx aborted due to late dma setup 9382c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_ABORT_STX, //NS // # of times backoff aborted 9392c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_DISASSN_FAIL, // # of times disassociation failed 940ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_ERR_CTS, // # of missed/bad CTS frames 941ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_TX_BPDU, //NS // # of spanning tree BPDUs sent 9422c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_TX_ERR_ACK, // # of tx err due to acks 9432c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 9442c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos // Receive statistics 9452c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_HOST = 61, // # of packets passed to host 9462c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_DIR_DATA, // # of directed packets 9472c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_DIR_DATA1, // # of directed packets at 1MB 9482c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_DIR_DATA2, // # of directed packets at 2MB 9492c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_DIR_DATA5_5, // # of directed packets at 5.5MB 9502c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_DIR_DATA11, // # of directed packets at 11MB 9512c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_DIR_DATA22, // # of directed packets at 22MB 9522c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 953ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_RX_NODIR_DATA = 71, // # of nondirected packets 9542c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_NODIR_DATA1, // # of nondirected packets at 1MB 9552c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_NODIR_DATA2, // # of nondirected packets at 2MB 9562c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_NODIR_DATA5_5, // # of nondirected packets at 5.5MB 9572c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_NODIR_DATA11, // # of nondirected packets at 11MB 9582c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 9592c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_NULL_DATA = 80, // # of null data rx's 9602c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_POLL, //NS // # of poll rx 9612c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_RTS, // # of Rx RTS 9622c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_CTS, // # of Rx CTS 9632c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_ACK, // # of Rx ACK 9642c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_CFEND, // # of Rx CF End 9652c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_CFEND_ACK, // # of Rx CF End + CF Ack 9662c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_ASSN, // # of Association Rx's 9672c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_ASSN_RESP, // # of Association response Rx's 9682c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_REASSN, // # of Reassociation Rx's 9692c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_REASSN_RESP, // # of Reassociation response Rx's 9702c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_PROBE, // # of probe Rx's 9712c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_PROBE_RESP, // # of probe response Rx's 9722c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_BEACON, // # of Rx beacon 9732c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_ATIM, // # of Rx ATIM 9742c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_DISASSN, // # of disassociation Rx 9752c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_AUTH, // # of authentication Rx 9762c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_DEAUTH, // # of deauthentication Rx 9772c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 978ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_RX_TOTAL_BYTES = 101, // Total rx data bytes received 979ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_RX_ERR_CRC, // # of packets with Rx CRC error 980ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_RX_ERR_CRC1, // # of Rx CRC errors at 1MB 981ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_RX_ERR_CRC2, // # of Rx CRC errors at 2MB 982ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_RX_ERR_CRC5_5, // # of Rx CRC errors at 5.5MB 983ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_RX_ERR_CRC11, // # of Rx CRC errors at 11MB 9842c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 985ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_RX_DUPLICATE1 = 112, // # of duplicate rx packets at 1MB 986ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_RX_DUPLICATE2, // # of duplicate rx packets at 2MB 987ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_RX_DUPLICATE5_5, // # of duplicate rx packets at 5.5MB 988ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_RX_DUPLICATE11, // # of duplicate rx packets at 11MB 989ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_RX_DUPLICATE = 119, // # of duplicate rx packets 9902c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 9912c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_PERS_DB_LOCK = 120, // # locking fw permanent db 9922c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_PERS_DB_SIZE, // # size of fw permanent db 9932c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_PERS_DB_ADDR, // # address of fw permanent db 9942c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_INVALID_PROTOCOL, // # of rx frames with invalid protocol 9952c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_SYS_BOOT_TIME, // # Boot time 9962c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_NO_BUFFER, // # of rx frames rejected due to no buffer 9972c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_ABORT_LATE_DMA, //NS // # of rx frames rejected due to dma setup too late 9982c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_ABORT_AT_HOP, //NS // # of rx frames aborted due to hop 9992c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_MISSING_FRAG, // # of rx frames dropped due to missing fragment 10002c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_ORPHAN_FRAG, // # of rx frames dropped due to non-sequential fragment 10012c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_ORPHAN_FRAME, // # of rx frames dropped due to unmatched 1st frame 10022c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_FRAG_AGEOUT, // # of rx frames dropped due to uncompleted frame 10032c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_BAD_SSID, //NS // Bad SSID (unused) 10042c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RX_ICV_ERRORS, // # of ICV errors during decryption 10052c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 10062c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos// PSP Statistics 1007ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_PSP_SUSPENSION = 137, // # of times adapter suspended 10082c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_PSP_BCN_TIMEOUT, // # of beacon timeout 10092c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_PSP_POLL_TIMEOUT, // # of poll response timeouts 1010ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_PSP_NONDIR_TIMEOUT, // # of timeouts waiting for last broadcast/muticast pkt 10112c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_PSP_RX_DTIMS, // # of PSP DTIMs received 10122c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_PSP_RX_TIMS, // # of PSP TIMs received 10132c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_PSP_STATION_ID, // PSP Station ID 10142c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 10152c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos// Association and roaming 10162c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_LAST_ASSN_TIME = 147, // RTC time of last association 1017ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos IPW_ORD_STAT_PERCENT_MISSED_BCNS, // current calculation of % missed beacons 10182c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_PERCENT_RETRIES, // current calculation of % missed tx retries 10192c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_ASSOCIATED_AP_PTR, // If associated, this is ptr to the associated 10202c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos // AP table entry. set to 0 if not associated 10212c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_AVAILABLE_AP_CNT, // # of AP's decsribed in the AP table 10222c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_AP_LIST_PTR, // Ptr to list of available APs 10232c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_AP_ASSNS, // # of associations 10242c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_ASSN_FAIL, // # of association failures 10252c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_ASSN_RESP_FAIL, // # of failuresdue to response fail 10262c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_FULL_SCANS, // # of full scans 10272c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 10282c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_CARD_DISABLED, // # Card Disabled 10292c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_ROAM_INHIBIT, // # of times roaming was inhibited due to ongoing activity 10302c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_FILLER_40, 10312c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_RSSI_AT_ASSN = 160, // RSSI of associated AP at time of association 10322c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_ASSN_CAUSE1, // # of reassociations due to no tx from AP in last N 10332c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos // hops or no prob_ responses in last 3 minutes 10342c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_ASSN_CAUSE2, // # of reassociations due to poor tx/rx quality 10352c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_ASSN_CAUSE3, // # of reassociations due to tx/rx quality with excessive 10362c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos // load at the AP 10372c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_ASSN_CAUSE4, // # of reassociations due to AP RSSI level fell below 10382c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos // eligible group 10392c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_ASSN_CAUSE5, // # of reassociations due to load leveling 10402c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_ASSN_CAUSE6, //NS // # of reassociations due to dropped by Ap 10412c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_FILLER_41, 10422c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_FILLER_42, 10432c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_FILLER_43, 10442c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_AUTH_FAIL, // # of times authentication failed 10452c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_AUTH_RESP_FAIL, // # of times authentication response failed 10462c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STATION_TABLE_CNT, // # of entries in association table 10472c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 10482c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos// Other statistics 10492c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_RSSI_AVG_CURR = 173, // Current avg RSSI 10502c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STEST_RESULTS_CURR, //NS // Current self test results word 10512c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STEST_RESULTS_CUM, //NS // Cummulative self test results word 10522c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_SELF_TEST_STATUS, //NS // 10532c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_POWER_MGMT_MODE, // Power mode - 0=CAM, 1=PSP 10542c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_POWER_MGMT_INDEX, //NS // 10552c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_COUNTRY_CODE, // IEEE country code as recv'd from beacon 10562c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_COUNTRY_CHANNELS, // channels suported by country 10572c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos// IPW_ORD_COUNTRY_CHANNELS: 10582c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos// For 11b the lower 2-byte are used for channels from 1-14 10592c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos// and the higher 2-byte are not used. 10602c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_RESET_CNT, // # of adapter resets (warm) 10612c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_BEACON_INTERVAL, // Beacon interval 10622c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 10632c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_PRINCETON_VERSION = 184, //NS // Princeton Version 10642c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_ANTENNA_DIVERSITY, // TRUE if antenna diversity is disabled 10652c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_CCA_RSSI, //NS // CCA RSSI value (factory programmed) 10662c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_EEPROM_UPDATE, //NS // # of times config EEPROM updated 10672c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_DTIM_PERIOD, // # of beacon intervals between DTIMs 10682c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_OUR_FREQ, // current radio freq lower digits - channel ID 10692c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 10702c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_RTC_TIME = 190, // current RTC time 10712c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_PORT_TYPE, // operating mode 10722c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_CURRENT_TX_RATE, // current tx rate 10732c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_SUPPORTED_RATES, // Bitmap of supported tx rates 10742c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_ATIM_WINDOW, // current ATIM Window 10752c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_BASIC_RATES, // bitmap of basic tx rates 10762c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_NIC_HIGHEST_RATE, // bitmap of basic tx rates 10772c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_AP_HIGHEST_RATE, // bitmap of basic tx rates 10782c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_CAPABILITIES, // Management frame capability field 10792c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_AUTH_TYPE, // Type of authentication 10802c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_RADIO_TYPE, // Adapter card platform type 10812c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_RTS_THRESHOLD = 201, // Min length of packet after which RTS handshaking is used 10822c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_INT_MODE, // International mode 10832c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_FRAGMENTATION_THRESHOLD, // protocol frag threshold 10842c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_EEPROM_SRAM_DB_BLOCK_START_ADDRESS, // EEPROM offset in SRAM 10852c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_EEPROM_SRAM_DB_BLOCK_SIZE, // EEPROM size in SRAM 10862c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_EEPROM_SKU_CAPABILITY, // EEPROM SKU Capability 206 = 10872c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_EEPROM_IBSS_11B_CHANNELS, // EEPROM IBSS 11b channel set 10882c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 10892c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_MAC_VERSION = 209, // MAC Version 10902c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_MAC_REVISION, // MAC Revision 10912c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_RADIO_VERSION, // Radio Version 10922c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_NIC_MANF_DATE_TIME, // MANF Date/Time STAMP 10932c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_UCODE_VERSION, // Ucode Version 10942c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_HW_RF_SWITCH_STATE = 214, // HW RF Kill Switch State 10952c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos} ORDINALTABLE1; 10962c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 10972c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos// ordinal table 2 10982c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos// Variable length data: 10992c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_FIRST_VARIABLE_LENGTH_ORDINAL 1001 11002c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 11012c86c275015c880e810830304a3a4ab94803b38bJames Ketrenostypedef enum _ORDINAL_TABLE_2 { // NS - means Not Supported by FW 11022c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_BASE = 1000, // contains number of variable ORDs 11032c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_ADAPTER_MAC = 1001, // 6 bytes: our adapter MAC address 11042c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_PREFERRED_BSSID = 1002, // 6 bytes: BSSID of the preferred AP 11052c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_MANDATORY_BSSID = 1003, // 6 bytes: BSSID of the mandatory AP 11062c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_FILL_1, //NS // 11072c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_COUNTRY_TEXT = 1005, // 36 bytes: Country name text, First two bytes are Country code 11082c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_ASSN_SSID = 1006, // 32 bytes: ESSID String 11092c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STATION_TABLE = 1007, // ? bytes: Station/AP table (via Direct SSID Scans) 11102c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_SWEEP_TABLE = 1008, // ? bytes: Sweep/Host Table table (via Broadcast Scans) 11112c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_ROAM_LOG = 1009, // ? bytes: Roaming log 11122c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_RATE_LOG = 1010, //NS // 0 bytes: Rate log 11132c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_FIFO = 1011, //NS // 0 bytes: Fifo buffer data structures 11142c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_FW_VER_NUM = 1012, // 14 bytes: fw version ID string as in (a.bb.ccc; "0.08.011") 11152c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_FW_DATE = 1013, // 14 bytes: fw date string (mmm dd yyyy; "Mar 13 2002") 11162c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_ASSN_AP_BSSID = 1014, // 6 bytes: MAC address of associated AP 11172c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_DEBUG = 1015, //NS // ? bytes: 11182c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_NIC_BPA_NUM = 1016, // 11 bytes: NIC BPA number in ASCII 11192c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_STAT_UCODE_DATE = 1017, // 5 bytes: uCode date 11202c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos IPW_ORD_SECURITY_NGOTIATION_RESULT = 1018, 11212c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos} ORDINALTABLE2; // NS - means Not Supported by FW 11222c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 11232c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_LAST_VARIABLE_LENGTH_ORDINAL 1018 11242c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 11252c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#ifndef WIRELESS_SPY 11262c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define WIRELESS_SPY // enable iwspy support 11272c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#endif 11282c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 11292c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_HOST_FW_SHARED_AREA0 0x0002f200 11302c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_HOST_FW_SHARED_AREA0_END 0x0002f510 // 0x310 bytes 11312c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 11322c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_HOST_FW_SHARED_AREA1 0x0002f610 11332c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_HOST_FW_SHARED_AREA1_END 0x0002f630 // 0x20 bytes 11342c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 11352c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_HOST_FW_SHARED_AREA2 0x0002fa00 11362c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_HOST_FW_SHARED_AREA2_END 0x0002fa20 // 0x20 bytes 11372c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 11382c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_HOST_FW_SHARED_AREA3 0x0002fc00 11392c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_HOST_FW_SHARED_AREA3_END 0x0002fc10 // 0x10 bytes 11402c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 11412c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_HOST_FW_INTERRUPT_AREA 0x0002ff80 11422c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define IPW_HOST_FW_INTERRUPT_AREA_END 0x00030000 // 0x80 bytes 11432c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 11442c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_fw_chunk { 11452c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos unsigned char *buf; 11462c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos long len; 11472c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos long pos; 11482c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct list_head list; 11492c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos}; 11502c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 11512c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_fw_chunk_set { 1152ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos const void *data; 11532c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos unsigned long size; 11542c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos}; 11552c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 11562c86c275015c880e810830304a3a4ab94803b38bJames Ketrenosstruct ipw2100_fw { 11572c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos int version; 11582c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct ipw2100_fw_chunk_set fw; 11592c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos struct ipw2100_fw_chunk_set uc; 11602c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos const struct firmware *fw_entry; 11612c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos}; 11622c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 11632c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos#define MAX_FW_VERSION_LEN 14 11642c86c275015c880e810830304a3a4ab94803b38bJames Ketrenos 1165ee8e365aa6395e721399127ccf3d28d269136f0eJames Ketrenos#endif /* _IPW2100_H */ 1166