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