1/* 2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. 3 * All rights reserved. 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * File: device.h 20 * 21 * Purpose: MAC Data structure 22 * 23 * Author: Tevin Chen 24 * 25 * Date: Mar 17, 1997 26 * 27 */ 28 29#ifndef __DEVICE_H__ 30#define __DEVICE_H__ 31 32#include <linux/module.h> 33#include <linux/types.h> 34#include <linux/pci.h> 35#include <linux/etherdevice.h> 36#include <linux/skbuff.h> 37#include <linux/interrupt.h> 38#include <linux/crc32.h> 39#include <net/mac80211.h> 40 41/* device specific */ 42 43#include "device_cfg.h" 44#include "card.h" 45#include "srom.h" 46#include "desc.h" 47#include "key.h" 48#include "mac.h" 49 50/*--------------------- Export Definitions -------------------------*/ 51 52#define RATE_1M 0 53#define RATE_2M 1 54#define RATE_5M 2 55#define RATE_11M 3 56#define RATE_6M 4 57#define RATE_9M 5 58#define RATE_12M 6 59#define RATE_18M 7 60#define RATE_24M 8 61#define RATE_36M 9 62#define RATE_48M 10 63#define RATE_54M 11 64#define MAX_RATE 12 65 66#define AUTO_FB_NONE 0 67#define AUTO_FB_0 1 68#define AUTO_FB_1 2 69 70#define FB_RATE0 0 71#define FB_RATE1 1 72 73/* Antenna Mode */ 74#define ANT_A 0 75#define ANT_B 1 76#define ANT_DIVERSITY 2 77#define ANT_RXD_TXA 3 78#define ANT_RXD_TXB 4 79#define ANT_UNKNOWN 0xFF 80 81#define BB_VGA_LEVEL 4 82#define BB_VGA_CHANGE_THRESHOLD 16 83 84#define MAKE_BEACON_RESERVED 10 /* (us) */ 85 86/* BUILD OBJ mode */ 87 88#define AVAIL_TD(p, q) ((p)->opts.tx_descs[(q)] - ((p)->iTDUsed[(q)])) 89 90/* 0:11A 1:11B 2:11G */ 91#define BB_TYPE_11A 0 92#define BB_TYPE_11B 1 93#define BB_TYPE_11G 2 94 95/* 0:11a, 1:11b, 2:11gb (only CCK in BasicRate), 3:11ga (OFDM in BasicRate) */ 96#define PK_TYPE_11A 0 97#define PK_TYPE_11B 1 98#define PK_TYPE_11GB 2 99#define PK_TYPE_11GA 3 100 101#define OWNED_BY_HOST 0 102#define OWNED_BY_NIC 1 103 104struct vnt_options { 105 int rx_descs0; /* Number of RX descriptors0 */ 106 int rx_descs1; /* Number of RX descriptors1 */ 107 int tx_descs[2]; /* Number of TX descriptors 0, 1 */ 108 int int_works; /* interrupt limits */ 109 int short_retry; 110 int long_retry; 111 int bbp_type; 112 u32 flags; 113}; 114 115struct vnt_private { 116 struct pci_dev *pcid; 117 /* mac80211 */ 118 struct ieee80211_hw *hw; 119 struct ieee80211_vif *vif; 120 unsigned long key_entry_inuse; 121 u32 basic_rates; 122 u16 current_aid; 123 int mc_list_count; 124 u8 mac_hw; 125 126/* dma addr, rx/tx pool */ 127 dma_addr_t pool_dma; 128 dma_addr_t rd0_pool_dma; 129 dma_addr_t rd1_pool_dma; 130 131 dma_addr_t td0_pool_dma; 132 dma_addr_t td1_pool_dma; 133 134 dma_addr_t tx_bufs_dma0; 135 dma_addr_t tx_bufs_dma1; 136 dma_addr_t tx_beacon_dma; 137 138 unsigned char *tx0_bufs; 139 unsigned char *tx1_bufs; 140 unsigned char *tx_beacon_bufs; 141 142 void __iomem *PortOffset; 143 u32 memaddr; 144 u32 ioaddr; 145 146 unsigned char byRxMode; 147 148 spinlock_t lock; 149 150 volatile int iTDUsed[TYPE_MAXTD]; 151 152 struct vnt_tx_desc *apCurrTD[TYPE_MAXTD]; 153 struct vnt_tx_desc *apTailTD[TYPE_MAXTD]; 154 155 struct vnt_tx_desc *apTD0Rings; 156 struct vnt_tx_desc *apTD1Rings; 157 158 struct vnt_rx_desc *aRD0Ring; 159 struct vnt_rx_desc *aRD1Ring; 160 struct vnt_rx_desc *pCurrRD[TYPE_MAXRD]; 161 162 struct vnt_options opts; 163 164 u32 flags; 165 166 u32 rx_buf_sz; 167 u8 rx_rate; 168 169 u32 rx_bytes; 170 171 /* Version control */ 172 unsigned char byLocalID; 173 unsigned char byRFType; 174 175 unsigned char byMaxPwrLevel; 176 unsigned char byZoneType; 177 bool bZoneRegExist; 178 unsigned char byOriginalZonetype; 179 180 unsigned char abyCurrentNetAddr[ETH_ALEN]; __aligned(2) 181 bool bLinkPass; /* link status: OK or fail */ 182 183 unsigned int uCurrRSSI; 184 unsigned char byCurrSQ; 185 186 unsigned long dwTxAntennaSel; 187 unsigned long dwRxAntennaSel; 188 unsigned char byAntennaCount; 189 unsigned char byRxAntennaMode; 190 unsigned char byTxAntennaMode; 191 bool bTxRxAntInv; 192 193 unsigned char *pbyTmpBuff; 194 unsigned int uSIFS; /* Current SIFS */ 195 unsigned int uDIFS; /* Current DIFS */ 196 unsigned int uEIFS; /* Current EIFS */ 197 unsigned int uSlot; /* Current SlotTime */ 198 unsigned int uCwMin; /* Current CwMin */ 199 unsigned int uCwMax; /* CwMax is fixed on 1023. */ 200 /* PHY parameter */ 201 unsigned char bySIFS; 202 unsigned char byDIFS; 203 unsigned char byEIFS; 204 unsigned char bySlot; 205 unsigned char byCWMaxMin; 206 207 u8 byBBType; /* 0:11A, 1:11B, 2:11G */ 208 u8 byPacketType; /* 209 * 0:11a,1:11b,2:11gb (only CCK 210 * in BasicRate), 3:11ga (OFDM in 211 * Basic Rate) 212 */ 213 unsigned short wBasicRate; 214 unsigned char byACKRate; 215 unsigned char byTopOFDMBasicRate; 216 unsigned char byTopCCKBasicRate; 217 218 unsigned char byMinChannel; 219 unsigned char byMaxChannel; 220 221 unsigned char byPreambleType; 222 unsigned char byShortPreamble; 223 224 unsigned short wCurrentRate; 225 unsigned char byShortRetryLimit; 226 unsigned char byLongRetryLimit; 227 enum nl80211_iftype op_mode; 228 bool bBSSIDFilter; 229 unsigned short wMaxTransmitMSDULifetime; 230 231 bool bEncryptionEnable; 232 bool bLongHeader; 233 bool bShortSlotTime; 234 bool bProtectMode; 235 bool bNonERPPresent; 236 bool bBarkerPreambleMd; 237 238 bool bRadioControlOff; 239 bool bRadioOff; 240 bool bEnablePSMode; 241 unsigned short wListenInterval; 242 bool bPWBitOn; 243 244 /* GPIO Radio Control */ 245 unsigned char byRadioCtl; 246 unsigned char byGPIO; 247 bool bHWRadioOff; 248 bool bPrvActive4RadioOFF; 249 bool bGPIOBlockRead; 250 251 /* Beacon related */ 252 unsigned short wSeqCounter; 253 unsigned short wBCNBufLen; 254 bool bBeaconBufReady; 255 bool bBeaconSent; 256 bool bIsBeaconBufReadySet; 257 unsigned int cbBeaconBufReadySetCnt; 258 bool bFixRate; 259 u16 byCurrentCh; 260 261 bool bAES; 262 263 unsigned char byAutoFBCtrl; 264 265 /* For Update BaseBand VGA Gain Offset */ 266 bool bUpdateBBVGA; 267 unsigned int uBBVGADiffCount; 268 unsigned char byBBVGANew; 269 unsigned char byBBVGACurrent; 270 unsigned char abyBBVGA[BB_VGA_LEVEL]; 271 long ldBmThreshold[BB_VGA_LEVEL]; 272 273 unsigned char byBBPreEDRSSI; 274 unsigned char byBBPreEDIndex; 275 276 unsigned long dwDiagRefCount; 277 278 /* For FOE Tuning */ 279 unsigned char byFOETuning; 280 281 /* For RF Power table */ 282 unsigned char byCCKPwr; 283 unsigned char byOFDMPwrG; 284 unsigned char byCurPwr; 285 char byCurPwrdBm; 286 unsigned char abyCCKPwrTbl[CB_MAX_CHANNEL_24G+1]; 287 unsigned char abyOFDMPwrTbl[CB_MAX_CHANNEL+1]; 288 char abyCCKDefaultPwr[CB_MAX_CHANNEL_24G+1]; 289 char abyOFDMDefaultPwr[CB_MAX_CHANNEL+1]; 290 char abyRegPwr[CB_MAX_CHANNEL+1]; 291 char abyLocalPwr[CB_MAX_CHANNEL+1]; 292 293 /* BaseBand Loopback Use */ 294 unsigned char byBBCR4d; 295 unsigned char byBBCRc9; 296 unsigned char byBBCR88; 297 unsigned char byBBCR09; 298 299 unsigned char abyEEPROM[EEP_MAX_CONTEXT_SIZE]; /* unsigned long alignment */ 300 301 unsigned short wBeaconInterval; 302 u16 wake_up_count; 303 304 struct work_struct interrupt_work; 305 306 struct ieee80211_low_level_stats low_stats; 307}; 308 309#endif 310