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