192b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond/*
292b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
392b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * All rights reserved.
492b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond *
592b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * This program is free software; you can redistribute it and/or modify
692b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * it under the terms of the GNU General Public License as published by
792b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * the Free Software Foundation; either version 2 of the License, or
892b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * (at your option) any later version.
992b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond *
1092b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * This program is distributed in the hope that it will be useful,
1192b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * but WITHOUT ANY WARRANTY; without even the implied warranty of
1292b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1392b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * GNU General Public License for more details.
1492b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond *
1592b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * You should have received a copy of the GNU General Public License along
1692b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * with this program; if not, write to the Free Software Foundation, Inc.,
1792b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
1892b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond *
1992b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * File: device.h
2092b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond *
2192b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * Purpose: MAC Data structure
2292b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond *
2392b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * Author: Tevin Chen
2492b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond *
2592b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond * Date: Mar 17, 1997
2692b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond *
2792b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond */
2892b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
2992b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#ifndef __DEVICE_H__
3092b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define __DEVICE_H__
3192b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
3292b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#include <linux/module.h>
3392b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#include <linux/kernel.h>
3492b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#include <linux/slab.h>
3511d404cb56ecd53bb23499897fbe7be1a9ac4827Malcolm Priestley#include <linux/delay.h>
3611d404cb56ecd53bb23499897fbe7be1a9ac4827Malcolm Priestley#include <linux/device.h>
3711d404cb56ecd53bb23499897fbe7be1a9ac4827Malcolm Priestley#include <linux/firmware.h>
3811d404cb56ecd53bb23499897fbe7be1a9ac4827Malcolm Priestley#include <linux/suspend.h>
3992b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#include <linux/if_arp.h>
4011d404cb56ecd53bb23499897fbe7be1a9ac4827Malcolm Priestley#include <linux/wireless.h>
4111d404cb56ecd53bb23499897fbe7be1a9ac4827Malcolm Priestley#include <linux/timer.h>
4292b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#include <linux/usb.h>
43f0fde117c12692f76887e09944f4d923a5470bddMalcolm Priestley#include <linux/crc32.h>
4463b9907f58f1c1b718cd37eeaec074692f00492dMalcolm Priestley#include <net/mac80211.h>
4511d404cb56ecd53bb23499897fbe7be1a9ac4827Malcolm Priestley
4692b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#ifdef SIOCETHTOOL
4792b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define DEVICE_ETHTOOL_IOCTL_SUPPORT
4892b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#include <linux/ethtool.h>
4992b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#else
5092b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#undef DEVICE_ETHTOOL_IOCTL_SUPPORT
5192b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#endif
5292b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
53f07e9fb23d119dabb7e377cf592bfc584a31da30Malcolm Priestley#define RATE_1M		0
54f07e9fb23d119dabb7e377cf592bfc584a31da30Malcolm Priestley#define RATE_2M		1
55f07e9fb23d119dabb7e377cf592bfc584a31da30Malcolm Priestley#define RATE_5M		2
56f07e9fb23d119dabb7e377cf592bfc584a31da30Malcolm Priestley#define RATE_11M	3
57f07e9fb23d119dabb7e377cf592bfc584a31da30Malcolm Priestley#define RATE_6M		4
58f07e9fb23d119dabb7e377cf592bfc584a31da30Malcolm Priestley#define RATE_9M		5
59f07e9fb23d119dabb7e377cf592bfc584a31da30Malcolm Priestley#define RATE_12M	6
60f07e9fb23d119dabb7e377cf592bfc584a31da30Malcolm Priestley#define RATE_18M	7
61f07e9fb23d119dabb7e377cf592bfc584a31da30Malcolm Priestley#define RATE_24M	8
62f07e9fb23d119dabb7e377cf592bfc584a31da30Malcolm Priestley#define RATE_36M	9
63f07e9fb23d119dabb7e377cf592bfc584a31da30Malcolm Priestley#define RATE_48M	10
64f07e9fb23d119dabb7e377cf592bfc584a31da30Malcolm Priestley#define RATE_54M	11
65f07e9fb23d119dabb7e377cf592bfc584a31da30Malcolm Priestley#define RATE_AUTO	12
66f07e9fb23d119dabb7e377cf592bfc584a31da30Malcolm Priestley
674aeaf1538f7179edefcc6e35203828c7cc4f85a5Malcolm Priestley#define MAX_RATE			12
684aeaf1538f7179edefcc6e35203828c7cc4f85a5Malcolm Priestley
69d3e2395154499a846b3210b45b046e9f0d3a5044Andres More/*
70d3e2395154499a846b3210b45b046e9f0d3a5044Andres More * device specific
71d3e2395154499a846b3210b45b046e9f0d3a5044Andres More */
7292b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
7392b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#include "wcmd.h"
7492b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#include "desc.h"
7592b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#include "key.h"
7692b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#include "card.h"
7792b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
785008c456c1cdcb8ef7265dcb6d20317f54d3e8eeOtavio Salvador#define VNT_USB_VENDOR_ID                     0x160a
7992b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define VNT_USB_PRODUCT_ID                    0x3184
8092b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
814aeaf1538f7179edefcc6e35203828c7cc4f85a5Malcolm Priestley#define DEVICE_NAME			"vt6656"
824aeaf1538f7179edefcc6e35203828c7cc4f85a5Malcolm Priestley#define DEVICE_FULL_DRV_NAM		"VIA Networking Wireless LAN USB Driver"
834aeaf1538f7179edefcc6e35203828c7cc4f85a5Malcolm Priestley
84feab48107651c411dcf4b1aa3c9d7f496f467e13Malcolm Priestley#define DEVICE_VERSION			"mac80211"
854aeaf1538f7179edefcc6e35203828c7cc4f85a5Malcolm Priestley
864aeaf1538f7179edefcc6e35203828c7cc4f85a5Malcolm Priestley#define CONFIG_PATH			"/etc/vntconfiguration.dat"
874aeaf1538f7179edefcc6e35203828c7cc4f85a5Malcolm Priestley
884aeaf1538f7179edefcc6e35203828c7cc4f85a5Malcolm Priestley#define MAX_UINTS			8
894aeaf1538f7179edefcc6e35203828c7cc4f85a5Malcolm Priestley#define OPTION_DEFAULT			{ [0 ... MAX_UINTS-1] = -1}
904aeaf1538f7179edefcc6e35203828c7cc4f85a5Malcolm Priestley
9192b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define DUPLICATE_RX_CACHE_LENGTH       5
9292b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
9392b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define AUTO_FB_NONE            0
9492b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define AUTO_FB_0               1
9592b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define AUTO_FB_1               2
9692b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
9792b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define FB_RATE0                0
9892b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define FB_RATE1                1
9992b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
100d3e2395154499a846b3210b45b046e9f0d3a5044Andres More/* Antenna Mode */
10192b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define ANT_A                   0
10292b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define ANT_B                   1
10392b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define ANT_DIVERSITY           2
10492b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define ANT_RXD_TXA             3
10592b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define ANT_RXD_TXB             4
10692b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define ANT_UNKNOWN             0xFF
10792b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define ANT_TXA                 0
10892b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define ANT_TXB                 1
10992b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define ANT_RXA                 2
11092b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define ANT_RXB                 3
11192b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
11292b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define BB_VGA_LEVEL            4
11392b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#define BB_VGA_CHANGE_THRESHOLD 3
11492b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
11515baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_MAX_CONTEXT_SIZE    256
11615baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley
11715baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley/* Contents in the EEPROM */
11815baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_PAR		0x0
11915baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_ANTENNA		0x17
12015baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_RADIOCTL	0x18
12115baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_RFTYPE		0x1b
12215baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_MINCHANNEL	0x1c
12315baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_MAXCHANNEL	0x1d
12415baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_SIGNATURE	0x1e
12515baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_ZONETYPE	0x1f
12615baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_RFTABLE		0x20
12715baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_PWR_CCK		0x20
12815baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_SETPT_CCK	0x21
12915baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_PWR_OFDMG	0x23
13015baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley
13115baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_CALIB_TX_IQ	0x24
13215baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_CALIB_TX_DC	0x25
13315baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_CALIB_RX_IQ	0x26
13415baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley
13515baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_MAJOR_VER	0x2e
13615baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_MINOR_VER	0x2f
13715baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley
13815baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_CCK_PWR_TBL	0x30
13915baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_OFDM_PWR_TBL	0x40
14015baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_OFS_OFDMA_PWR_TBL	0x50
14115baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley
14215baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley/* Bits in EEP_OFS_ANTENNA */
14315baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_ANTENNA_MAIN	0x1
14415baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_ANTENNA_AUX		0x2
14515baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_ANTINV		0x4
14615baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley
14715baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley/* Bits in EEP_OFS_RADIOCTL */
14815baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley#define EEP_RADIOCTL_ENABLE	0x80
14915baf4ff626c2f89104f93197e1495b87618189fMalcolm Priestley
15060f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley/* control commands */
15160f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_READ		0x1
15260f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_WRITE		0x0
15360f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_LOCK_OR		0x2
15460f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_LOCK_AND		0x3
15560f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_WRITE_MASK		0x4
15660f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_CARDINIT		0x5
15760f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_INIT_RSP		0x6
15860f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_MACSHUTDOWN	0x7
15960f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_SETKEY		0x8
16060f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_CLRKEYENTRY	0x9
16160f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_WRITE_MISCFF	0xa
16260f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_SET_ANTMD		0xb
16360f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_SELECT_CHANNLE	0xc
16460f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_SET_TSFTBTT	0xd
16560f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_SET_SSTIFS		0xe
16660f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_CHANGE_BBTYPE	0xf
16760f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_DISABLE_PS		0x10
16860f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_TYPE_WRITE_IFRF		0x11
16960f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley
17060f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley/* command read/write(index) */
17160f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_REQUEST_MEM		0x1
17260f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_REQUEST_BBREG		0x2
17360f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_REQUEST_MACREG		0x3
17460f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_REQUEST_EEPROM		0x4
17560f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_REQUEST_TSF		0x5
17660f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_REQUEST_TBTT		0x6
17760f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_REQUEST_BBAGC		0x7
17860f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_REQUEST_VERSION		0x8
17960f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_REQUEST_RF_INIT		0x9
18060f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_REQUEST_RF_INIT2	0xa
18160f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_REQUEST_RF_CH0		0xb
18260f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_REQUEST_RF_CH1		0xc
18360f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define MESSAGE_REQUEST_RF_CH2		0xd
18460f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley
18560f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley/* USB registers */
18660f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley#define USB_REG4			0x604
18760f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley
188302433daf47aeb7d21d66e55fb84d6a8fffd4aedMalcolm Priestley#define DEVICE_INIT_COLD	0x0 /* cold init */
189302433daf47aeb7d21d66e55fb84d6a8fffd4aedMalcolm Priestley#define DEVICE_INIT_RESET	0x1 /* reset init or Dx to D0 power remain */
190302433daf47aeb7d21d66e55fb84d6a8fffd4aedMalcolm Priestley#define DEVICE_INIT_DXPL	0x2 /* Dx to D0 power lost init */
19192b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
19260f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley/* Device init */
19360f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestleystruct vnt_cmd_card_init {
19460f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley	u8 init_class;
19560f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley	u8 exist_sw_net_addr;
19660f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley	u8 sw_net_addr[6];
19760f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley	u8 short_retry_limit;
19860f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley	u8 long_retry_limit;
19960f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley};
20060f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley
20160f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestleystruct vnt_rsp_card_init {
20260f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley	u8 status;
20360f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley	u8 net_addr[6];
20460f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley	u8 rf_type;
20560f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley	u8 min_channel;
20660f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley	u8 max_channel;
20760f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley};
20860f8ce8dd6feb2d921a5513e79eaf9d6884abc09Malcolm Priestley
209d3e2395154499a846b3210b45b046e9f0d3a5044Andres More/* USB */
21092b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
211d3e2395154499a846b3210b45b046e9f0d3a5044Andres More/*
212d3e2395154499a846b3210b45b046e9f0d3a5044Andres More * Enum of context types for SendPacket
213d3e2395154499a846b3210b45b046e9f0d3a5044Andres More */
2141450ba62db65db9ad8696e369a67f5dc963a98b1Malcolm Priestleyenum {
2151450ba62db65db9ad8696e369a67f5dc963a98b1Malcolm Priestley	CONTEXT_DATA_PACKET = 1,
216d38b13aa7884021ddb06fb6f248da265b8a6fbeeMalcolm Priestley	CONTEXT_MGMT_PACKET,
217d38b13aa7884021ddb06fb6f248da265b8a6fbeeMalcolm Priestley	CONTEXT_BEACON_PACKET
2181450ba62db65db9ad8696e369a67f5dc963a98b1Malcolm Priestley};
21992b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
220d3e2395154499a846b3210b45b046e9f0d3a5044Andres More/* RCB (Receive Control Block) */
221115cac2e7a8d06aa347bf233b4cb94828eb0509aMalcolm Priestleystruct vnt_rcb {
222325de98424fd5f6bf7e12f598dc1c54b4595a760Malcolm Priestley	void *priv;
223325de98424fd5f6bf7e12f598dc1c54b4595a760Malcolm Priestley	struct urb *urb;
224dd0a774fc727ee793780197beb3f2cf80bfefa99Malcolm Priestley	struct sk_buff *skb;
225325de98424fd5f6bf7e12f598dc1c54b4595a760Malcolm Priestley	int in_use;
226115cac2e7a8d06aa347bf233b4cb94828eb0509aMalcolm Priestley};
22792b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
228d3e2395154499a846b3210b45b046e9f0d3a5044Andres More/* used to track bulk out irps */
229dcdf1d0323a4eea3bc0a1131057f78234d082079Malcolm Priestleystruct vnt_usb_send_context {
23030a05b397ce410685532120e97c6cc378dd31a1fMalcolm Priestley	void *priv;
23130a05b397ce410685532120e97c6cc378dd31a1fMalcolm Priestley	struct sk_buff *skb;
23230a05b397ce410685532120e97c6cc378dd31a1fMalcolm Priestley	struct urb *urb;
2331622c8fc5c88d64599130710537fe20977637962Malcolm Priestley	struct ieee80211_hdr *hdr;
23430a05b397ce410685532120e97c6cc378dd31a1fMalcolm Priestley	unsigned int buf_len;
2350f5567cb2f0d71e89badd1b090b3e0693b71d860Malcolm Priestley	u32 frame_len;
2361622c8fc5c88d64599130710537fe20977637962Malcolm Priestley	u16 tx_hdr_size;
237798f06011f17c47ec8b5d11a5d37d2ab1eed8c05Malcolm Priestley	u16 tx_rate;
2381450ba62db65db9ad8696e369a67f5dc963a98b1Malcolm Priestley	u8 type;
23971d764aefeb6010b496f2c47ea06d9389fa9b780Malcolm Priestley	u8 pkt_no;
240e8c9875c77e59fe6af7c24949c4900a0f069b130Malcolm Priestley	u8 pkt_type;
2412eca8dbb4cfb571a179f691f514ef35073d926baMalcolm Priestley	u8 need_ack;
24271d764aefeb6010b496f2c47ea06d9389fa9b780Malcolm Priestley	u8 fb_option;
24330a05b397ce410685532120e97c6cc378dd31a1fMalcolm Priestley	bool in_use;
24430a05b397ce410685532120e97c6cc378dd31a1fMalcolm Priestley	unsigned char data[MAX_TOTAL_SIZE_WITH_ALL_HEADERS];
245dcdf1d0323a4eea3bc0a1131057f78234d082079Malcolm Priestley};
24692b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
247d3e2395154499a846b3210b45b046e9f0d3a5044Andres More/*
248d3e2395154499a846b3210b45b046e9f0d3a5044Andres More * Structure to keep track of USB interrupt packets
249d3e2395154499a846b3210b45b046e9f0d3a5044Andres More */
250f764e00d16495800526fbfb4dc03160e64c9081aMalcolm Priestleystruct vnt_interrupt_buffer {
251f764e00d16495800526fbfb4dc03160e64c9081aMalcolm Priestley	u8 *data_buf;
252f764e00d16495800526fbfb4dc03160e64c9081aMalcolm Priestley	bool in_use;
253f764e00d16495800526fbfb4dc03160e64c9081aMalcolm Priestley};
25492b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
255d3e2395154499a846b3210b45b046e9f0d3a5044Andres More/*++ NDIS related */
25692b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
257879be45aeaa433daa5b848e5c3bc66f85ed6bf4aPeter Senna Tschudinenum {
258879be45aeaa433daa5b848e5c3bc66f85ed6bf4aPeter Senna Tschudin	STATUS_SUCCESS = 0,
259879be45aeaa433daa5b848e5c3bc66f85ed6bf4aPeter Senna Tschudin	STATUS_FAILURE,
260879be45aeaa433daa5b848e5c3bc66f85ed6bf4aPeter Senna Tschudin	STATUS_RESOURCES,
261879be45aeaa433daa5b848e5c3bc66f85ed6bf4aPeter Senna Tschudin	STATUS_PENDING,
262879be45aeaa433daa5b848e5c3bc66f85ed6bf4aPeter Senna Tschudin};
26392b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
264d3e2395154499a846b3210b45b046e9f0d3a5044Andres More/* flags for options */
2652746321ef4779608e4c0696c41b442936959ef47Malcolm Priestley#define DEVICE_FLAGS_UNPLUG		BIT(0)
2662746321ef4779608e4c0696c41b442936959ef47Malcolm Priestley#define DEVICE_FLAGS_DISCONNECTED	BIT(1)
26792b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
26814c5ef57714d21ff8234aa9a756765e9cb38f837Malcolm Priestleystruct vnt_private {
26963b9907f58f1c1b718cd37eeaec074692f00492dMalcolm Priestley	/* mac80211 */
27063b9907f58f1c1b718cd37eeaec074692f00492dMalcolm Priestley	struct ieee80211_hw *hw;
271db8f37fa3355f249e34446eac0d08c1b89c2ed77Malcolm Priestley	struct ieee80211_vif *vif;
27230816f838a6589a76bca6d2afd73cafd02343429Malcolm Priestley	u8 mac_hw;
27361462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	/* netdev */
27461462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	struct usb_device *usb;
27592b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
27663b9907f58f1c1b718cd37eeaec074692f00492dMalcolm Priestley	u64 tsf_time;
27763b9907f58f1c1b718cd37eeaec074692f00492dMalcolm Priestley	u8 rx_rate;
27863b9907f58f1c1b718cd37eeaec074692f00492dMalcolm Priestley
27961462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	u32 rx_buf_sz;
280db8f37fa3355f249e34446eac0d08c1b89c2ed77Malcolm Priestley	int mc_list_count;
28192b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
28261462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	spinlock_t lock;
283c91b1869fb6f6d58f6321b8a88bd39577b0413a7Malcolm Priestley	struct mutex usb_lock;
28492b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
2852746321ef4779608e4c0696c41b442936959ef47Malcolm Priestley	unsigned long flags;
28692b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
28761462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	/* USB */
2883d582487beb83d650fbd25cb65688b0fbedc97f1Malcolm Priestley	struct urb *interrupt_urb;
28961462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	u32 int_interval;
29092b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
29161462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	/* Variables to track resources for the BULK In Pipe */
2928577011c7a97df032e2a08f3b00296c4a7f3a12eMalcolm Priestley	struct vnt_rcb *rcb[CB_MAX_RX_DESC];
2936da4738f068cbf826104ef5e8971c255d6d6d437Malcolm Priestley	u32 num_rcb;
29492b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
29561462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	/* Variables to track resources for the BULK Out Pipe */
296f7e4a8f45c133f4deefef9656e93222c0431caa1Malcolm Priestley	struct vnt_usb_send_context *tx_context[CB_MAX_TX_DESC];
29703b7e3548c2a327c287e0fcb1908e4f7b013ab13Malcolm Priestley	u32 num_tx_context;
29892b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
29961462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	/* Variables to track resources for the Interrupt In Pipe */
300f764e00d16495800526fbfb4dc03160e64c9081aMalcolm Priestley	struct vnt_interrupt_buffer int_buf;
30192b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
30261462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	/* Version control */
3038a73f9da4803721fd96d99d686430ee303486d49Malcolm Priestley	u16 firmware_version;
304f1945a15d6ace5420a55d14ba60a2bcdc3653b50Malcolm Priestley	u8 local_id;
3056242ecaeb6e3b6e3a864e9e6878817e3f5c0cb84Malcolm Priestley	u8 rf_type;
306cd5856aee597892073a95fbd7ae4d2709ace043cMalcolm Priestley	u8 bb_rx_conf;
30792b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
308748bf69c155607b6413206fcbce4d90097bac723Malcolm Priestley	struct vnt_cmd_card_init init_command;
309748bf69c155607b6413206fcbce4d90097bac723Malcolm Priestley	struct vnt_rsp_card_init init_response;
310ebf9b312389a01763ae7388ff3e8f37e82261a92Malcolm Priestley	u8 current_net_addr[ETH_ALEN];
31141e8321a6d3b775a05e94fecd4ea5b4711e12729Malcolm Priestley	u8 permanent_net_addr[ETH_ALEN];
31292b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
31335cc8f94e6e4841c6dd2e8d8fd8d49ebddd56859Malcolm Priestley	u8 exist_sw_net_addr;
31492b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
315113f0b915b387debd0bf797f1d527da467984ebaMalcolm Priestley	u64 current_tsf;
31661462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
31761462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	/* 802.11 MAC specific */
318125cfc634403f7715e9fcd0780995d395ab266c5Malcolm Priestley	u32 current_rssi;
31961462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
32061462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	/* Antenna Diversity */
3212044dbdb0b337ab7ddc36c45fc792b76913b57e8Malcolm Priestley	int tx_rx_ant_inv;
3222044dbdb0b337ab7ddc36c45fc792b76913b57e8Malcolm Priestley	u32 rx_antenna_sel;
3232044dbdb0b337ab7ddc36c45fc792b76913b57e8Malcolm Priestley	u8 rx_antenna_mode;
3242044dbdb0b337ab7ddc36c45fc792b76913b57e8Malcolm Priestley	u8 tx_antenna_mode;
3252044dbdb0b337ab7ddc36c45fc792b76913b57e8Malcolm Priestley	u8 radio_ctl;
32661462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
327cc856e61ee4ffb150ff352e3d6940978a2f819e8Andres More	/* IFS & Cw */
328ff5fee22294da7d60ebb8c7b0b3f24aeb1307a7bMalcolm Priestley	u32 sifs;  /* Current SIFS */
329ff5fee22294da7d60ebb8c7b0b3f24aeb1307a7bMalcolm Priestley	u32 difs;  /* Current DIFS */
330ff5fee22294da7d60ebb8c7b0b3f24aeb1307a7bMalcolm Priestley	u32 eifs;  /* Current EIFS */
331ff5fee22294da7d60ebb8c7b0b3f24aeb1307a7bMalcolm Priestley	u32 slot;  /* Current SlotTime */
33261462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
33361462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	/* Rate */
33465df77e2ca31a77db13cc37d3c3d34886aeaa607Malcolm Priestley	u8 bb_type; /* 0: 11A, 1:11B, 2:11G */
335e12471db917981a3f7dd115203697201d3a2adcfMalcolm Priestley	u8 packet_type; /* 0:11a 1:11b 2:11gb 3:11ga */
33693a7355883f87ee16481ae79d7b471752ffb0347Malcolm Priestley	u32 basic_rates;
3373c8a5b25980907d4e096f23a95252bf4018816baMalcolm Priestley	u8 top_ofdm_basic_rate;
338d80bf43c82e75794f640e46b82bc417a7b78829bMalcolm Priestley	u8 top_cck_basic_rate;
33961462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
340bbb112639d492be6e1bf264a782fae75399d0aeeMalcolm Priestley	u8 eeprom[EEP_MAX_CONTEXT_SIZE];  /*u32 alignment */
34161462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
34298e93fe5ba0b82c788a9ac038f250e2cc02fa05bMalcolm Priestley	u8 preamble_type;
34361462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
34461462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	/* For RF Power table */
3455a97491c333a523f2f72fe24cec78748a6258550Malcolm Priestley	u8 cck_pwr;
3465a97491c333a523f2f72fe24cec78748a6258550Malcolm Priestley	u8 ofdm_pwr_g;
3475a97491c333a523f2f72fe24cec78748a6258550Malcolm Priestley	u8 ofdm_pwr_a;
3485a97491c333a523f2f72fe24cec78748a6258550Malcolm Priestley	u8 power;
3495a97491c333a523f2f72fe24cec78748a6258550Malcolm Priestley	u8 cck_pwr_tbl[14];
3505a97491c333a523f2f72fe24cec78748a6258550Malcolm Priestley	u8 ofdm_pwr_tbl[14];
3515a97491c333a523f2f72fe24cec78748a6258550Malcolm Priestley	u8 ofdm_a_pwr_tbl[42];
35261462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
3538b84c1da02f3de5c362a68fab1951c771192a806Malcolm Priestley	u16 current_rate;
354f84cdf65a79b808217d9e8b82ea12d170cf66b3dMalcolm Priestley	u16 tx_rate_fb0;
355f84cdf65a79b808217d9e8b82ea12d170cf66b3dMalcolm Priestley	u16 tx_rate_fb1;
356f84cdf65a79b808217d9e8b82ea12d170cf66b3dMalcolm Priestley
357388e5cb8ddcf48a3831b5b3ed52e1080aa160357Malcolm Priestley	u8 short_retry_limit;
358388e5cb8ddcf48a3831b5b3ed52e1080aa160357Malcolm Priestley	u8 long_retry_limit;
359a0ad27765a5f4c9dc90fabe6a4b04a8656d7fae3Malcolm Priestley
360a0ad27765a5f4c9dc90fabe6a4b04a8656d7fae3Malcolm Priestley	enum nl80211_iftype op_mode;
361a0ad27765a5f4c9dc90fabe6a4b04a8656d7fae3Malcolm Priestley
362a641c9ec886a1fd2cb3419959c8014f14983d379Malcolm Priestley	int short_slot_time;
36361462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
36461462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	/* Power save */
365db8f37fa3355f249e34446eac0d08c1b89c2ed77Malcolm Priestley	u16 current_aid;
36661462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
36761462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	/* Beacon releated */
3681b2bc0aa8df1fcdb0dd52f7ea54c0029e8cc0f70Malcolm Priestley	u16 seq_counter;
36961462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
370ad74e91d06225e9f649baad786faf0992e996050Malcolm Priestley	enum vnt_cmd_state command_state;
37161462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
37280f0d0923f7a8f580db2415e30580585e5d7f272Malcolm Priestley	enum vnt_cmd command;
37361462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
37461462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	/* 802.11 counter */
37561462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
376b595f9b89c609476de8165ee081f8fb5d25d02f7Malcolm Priestley	enum vnt_cmd cmd_queue[CMD_Q_SIZE];
37733a60b87b65eb69bc31adb12ee92cf0664a2ad3bMalcolm Priestley	u32 cmd_dequeue_idx;
37833a60b87b65eb69bc31adb12ee92cf0664a2ad3bMalcolm Priestley	u32 cmd_enqueue_idx;
37933a60b87b65eb69bc31adb12ee92cf0664a2ad3bMalcolm Priestley	u32 free_cmd_queue;
38033a60b87b65eb69bc31adb12ee92cf0664a2ad3bMalcolm Priestley	int cmd_running;
38161462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
382d1eb5003d78cd791ff1f214163030e993d53f49bMalcolm Priestley	unsigned long key_entry_inuse;
38361462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
384a6177aef3c2ba01b038981ddb3195761d5ffe682Malcolm Priestley	u8 auto_fb_ctrl;
38561462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
38661462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	/* For Update BaseBand VGA Gain Offset */
387c37cbd3706bda2dd440a6fd036569412774a9f6cMalcolm Priestley	u8 bb_vga[BB_VGA_LEVEL];
38861462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
38912687222c96438bc64b76705813f45da26183d53Malcolm Priestley	u8 bb_pre_ed_rssi;
39043fd1924be1ca94290af7d27ab4d9d7e4f9f3bc6Malcolm Priestley	u8 bb_pre_ed_index;
39161462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley
39261462ab32f8b5a3d133b734455c3a8d6b6d1de7cMalcolm Priestley	/* command timer */
39394488a7ebfbc95c4b8fbfe39644e97b926a550a7Malcolm Priestley	struct delayed_work run_command_work;
39492b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
3951786384e13e9e380ee3a0507d041663ff0ca124cMalcolm Priestley	struct ieee80211_low_level_stats low_stats;
39614c5ef57714d21ff8234aa9a756765e9cb38f837Malcolm Priestley};
39792b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
398dbf0a03b66e0d26795a7582ffa4be0fff5e00254Peter Senna Tschudin#define ADD_ONE_WITH_WRAP_AROUND(uVar, uModulo) {	\
399dbf0a03b66e0d26795a7582ffa4be0fff5e00254Peter Senna Tschudin	if ((uVar) >= ((uModulo) - 1))			\
400dbf0a03b66e0d26795a7582ffa4be0fff5e00254Peter Senna Tschudin		(uVar) = 0;				\
401dbf0a03b66e0d26795a7582ffa4be0fff5e00254Peter Senna Tschudin	else						\
402dbf0a03b66e0d26795a7582ffa4be0fff5e00254Peter Senna Tschudin		(uVar)++;				\
40392b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond}
40492b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
40530816f838a6589a76bca6d2afd73cafd02343429Malcolm Priestleyint vnt_init(struct vnt_private *priv);
40692b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond
40792b96797118e5836294a6d42a5a8e10b86f50e3fForest Bond#endif
408