blob: 45fc8a0b9b5cceebe9d7d2fa50ba37805fb10ba9 [file] [log] [blame]
Forest Bond5449c682009-04-25 10:30:44 -04001/*
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
Forest Bond5449c682009-04-25 10:30:44 -040032#include <linux/module.h>
Forest Bond5449c682009-04-25 10:30:44 -040033#include <linux/types.h>
Forest Bond5449c682009-04-25 10:30:44 -040034#include <linux/mm.h>
35#include <linux/errno.h>
36#include <linux/ioport.h>
37#include <linux/pci.h>
38#include <linux/kernel.h>
39#include <linux/netdevice.h>
40#include <linux/etherdevice.h>
41#include <linux/skbuff.h>
42#include <linux/delay.h>
43#include <linux/timer.h>
44#include <linux/slab.h>
45#include <linux/interrupt.h>
Forest Bond5449c682009-04-25 10:30:44 -040046#include <linux/string.h>
47#include <linux/wait.h>
48#include <linux/if_arp.h>
49#include <linux/sched.h>
Charles Clémentcf160bc2010-06-03 09:15:54 -070050#include <linux/io.h>
Forest Bond5449c682009-04-25 10:30:44 -040051#include <linux/if.h>
52//#include <linux/config.h>
Charles Clémentcf160bc2010-06-03 09:15:54 -070053#include <linux/uaccess.h>
Forest Bond5449c682009-04-25 10:30:44 -040054#include <linux/proc_fs.h>
55#include <linux/inetdevice.h>
56#include <linux/reboot.h>
57#ifdef SIOCETHTOOL
58#define DEVICE_ETHTOOL_IOCTL_SUPPORT
59#include <linux/ethtool.h>
60#else
61#undef DEVICE_ETHTOOL_IOCTL_SUPPORT
62#endif
63/* Include Wireless Extension definition and check version - Jean II */
64#include <linux/wireless.h>
Forest Bond5449c682009-04-25 10:30:44 -040065#include <net/iw_handler.h> // New driver API
Forest Bond5449c682009-04-25 10:30:44 -040066
67//2008-0409-07, <Add> by Einsn Liu
Forest Bond5449c682009-04-25 10:30:44 -040068#ifndef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
69#define WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
70#endif
Forest Bond5449c682009-04-25 10:30:44 -040071
Forest Bond5449c682009-04-25 10:30:44 -040072//
Jim Lieb612822f2009-08-12 14:54:03 -070073// device specific
74//
75
Forest Bond5449c682009-04-25 10:30:44 -040076#include "device_cfg.h"
Forest Bond5449c682009-04-25 10:30:44 -040077#include "ttype.h"
Forest Bond5449c682009-04-25 10:30:44 -040078#include "80211hdr.h"
Forest Bond5449c682009-04-25 10:30:44 -040079#include "tether.h"
Forest Bond5449c682009-04-25 10:30:44 -040080#include "wmgr.h"
Forest Bond5449c682009-04-25 10:30:44 -040081#include "wcmd.h"
Forest Bond5449c682009-04-25 10:30:44 -040082#include "mib.h"
Forest Bond5449c682009-04-25 10:30:44 -040083#include "srom.h"
Forest Bond5449c682009-04-25 10:30:44 -040084#include "rc4.h"
Forest Bond5449c682009-04-25 10:30:44 -040085#include "desc.h"
Forest Bond5449c682009-04-25 10:30:44 -040086#include "key.h"
Forest Bond5449c682009-04-25 10:30:44 -040087#include "mac.h"
Forest Bond5449c682009-04-25 10:30:44 -040088
Forest Bond5449c682009-04-25 10:30:44 -040089/*--------------------- Export Definitions -------------------------*/
90
91#define MAC_MAX_CONTEXT_REG (256+128)
92
93#define MAX_MULTICAST_ADDRESS_NUM 32
Charles Clément078b0782010-05-14 19:37:32 -070094#define MULTICAST_ADDRESS_LIST_SIZE (MAX_MULTICAST_ADDRESS_NUM * ETH_ALEN)
Forest Bond5449c682009-04-25 10:30:44 -040095
Forest Bond5449c682009-04-25 10:30:44 -040096#define DUPLICATE_RX_CACHE_LENGTH 5
97
98#define NUM_KEY_ENTRY 11
99
100#define TX_WEP_NONE 0
101#define TX_WEP_OTF 1
102#define TX_WEP_SW 2
103#define TX_WEP_SWOTP 3
104#define TX_WEP_OTPSW 4
105#define TX_WEP_SW232 5
106
107#define KEYSEL_WEP40 0
108#define KEYSEL_WEP104 1
109#define KEYSEL_TKIP 2
110#define KEYSEL_CCMP 3
111
Forest Bond5449c682009-04-25 10:30:44 -0400112#define AUTO_FB_NONE 0
113#define AUTO_FB_0 1
114#define AUTO_FB_1 2
115
116#define FB_RATE0 0
117#define FB_RATE1 1
118
119// Antenna Mode
120#define ANT_A 0
121#define ANT_B 1
122#define ANT_DIVERSITY 2
123#define ANT_RXD_TXA 3
124#define ANT_RXD_TXB 4
125#define ANT_UNKNOWN 0xFF
126
127#define MAXCHECKHANGCNT 4
128
129#define BB_VGA_LEVEL 4
130#define BB_VGA_CHANGE_THRESHOLD 16
131
Forest Bond5449c682009-04-25 10:30:44 -0400132#ifndef RUN_AT
133#define RUN_AT(x) (jiffies+(x))
134#endif
135
136// DMA related
137#define RESERV_AC0DMA 4
138
Forest Bond5449c682009-04-25 10:30:44 -0400139// BUILD OBJ mode
Forest Bond5449c682009-04-25 10:30:44 -0400140
Joe Perches4ec4aa42013-03-18 10:44:45 -0700141#define AVAIL_TD(p, q) ((p)->sOpts.nTxDescs[(q)] - ((p)->iTDUsed[(q)]))
Forest Bond5449c682009-04-25 10:30:44 -0400142
143//PLICE_DEBUG ->
144#define NUM 64
145//PLICE_DEUBG <-
146
Jim Lieb7e809a92009-07-30 10:27:21 -0700147#define PRIVATE_Message 0
148
Forest Bond5449c682009-04-25 10:30:44 -0400149/*--------------------- Export Types ------------------------------*/
150
Guido Martínezc720dad2014-04-02 14:53:01 -0300151#define DBG_PRT(l, p, args...) \
152do { \
153 if (l <= msglevel) \
154 printk(p, ##args); \
155} while (0)
156
157#define PRINT_K(p, args...) \
158do { \
159 if (PRIVATE_Message) \
160 printk(p, ##args); \
161} while (0)
Jim Lieb7e809a92009-07-30 10:27:21 -0700162
Forest Bond5449c682009-04-25 10:30:44 -0400163//0:11A 1:11B 2:11G
164typedef enum _VIA_BB_TYPE
165{
Joe Perches4ec4aa42013-03-18 10:44:45 -0700166 BB_TYPE_11A = 0,
167 BB_TYPE_11B,
168 BB_TYPE_11G
Forest Bond5449c682009-04-25 10:30:44 -0400169} VIA_BB_TYPE, *PVIA_BB_TYPE;
170
171//0:11a,1:11b,2:11gb(only CCK in BasicRate),3:11ga(OFDM in Basic Rate)
172typedef enum _VIA_PKT_TYPE
173{
Joe Perches4ec4aa42013-03-18 10:44:45 -0700174 PK_TYPE_11A = 0,
175 PK_TYPE_11B,
176 PK_TYPE_11GB,
177 PK_TYPE_11GA
Forest Bond5449c682009-04-25 10:30:44 -0400178} VIA_PKT_TYPE, *PVIA_PKT_TYPE;
179
Forest Bond5449c682009-04-25 10:30:44 -0400180typedef enum __device_msg_level {
Joe Perches4ec4aa42013-03-18 10:44:45 -0700181 MSG_LEVEL_ERR = 0, //Errors that will cause abnormal operation.
182 MSG_LEVEL_NOTICE = 1, //Some errors need users to be notified.
183 MSG_LEVEL_INFO = 2, //Normal message.
184 MSG_LEVEL_VERBOSE = 3, //Will report all trival errors.
185 MSG_LEVEL_DEBUG = 4 //Only for debug purpose.
Forest Bond5449c682009-04-25 10:30:44 -0400186} DEVICE_MSG_LEVEL, *PDEVICE_MSG_LEVEL;
187
188typedef enum __device_init_type {
Joe Perches4ec4aa42013-03-18 10:44:45 -0700189 DEVICE_INIT_COLD = 0, // cold init
190 DEVICE_INIT_RESET, // reset init or Dx to D0 power remain init
191 DEVICE_INIT_DXPL // Dx to D0 power lost init
Forest Bond5449c682009-04-25 10:30:44 -0400192} DEVICE_INIT_TYPE, *PDEVICE_INIT_TYPE;
193
Forest Bond5449c682009-04-25 10:30:44 -0400194//++ NDIS related
195
196#define MAX_BSSIDINFO_4_PMKID 16
197#define MAX_PMKIDLIST 5
198//Flags for PMKID Candidate list structure
199#define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01
200
201// PMKID Structures
Charles Clément5c9824e2010-06-02 09:51:59 -0700202typedef unsigned char NDIS_802_11_PMKID_VALUE[16];
Forest Bond5449c682009-04-25 10:30:44 -0400203
Forest Bond5449c682009-04-25 10:30:44 -0400204typedef enum _NDIS_802_11_WEP_STATUS
205{
Joe Perches4ec4aa42013-03-18 10:44:45 -0700206 Ndis802_11WEPEnabled,
207 Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,
208 Ndis802_11WEPDisabled,
209 Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled,
210 Ndis802_11WEPKeyAbsent,
211 Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,
212 Ndis802_11WEPNotSupported,
213 Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,
214 Ndis802_11Encryption2Enabled,
215 Ndis802_11Encryption2KeyAbsent,
216 Ndis802_11Encryption3Enabled,
217 Ndis802_11Encryption3KeyAbsent
Forest Bond5449c682009-04-25 10:30:44 -0400218} NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS,
Joe Perches4ec4aa42013-03-18 10:44:45 -0700219 NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS;
Forest Bond5449c682009-04-25 10:30:44 -0400220
Forest Bond5449c682009-04-25 10:30:44 -0400221typedef enum _NDIS_802_11_STATUS_TYPE
222{
Joe Perches4ec4aa42013-03-18 10:44:45 -0700223 Ndis802_11StatusType_Authentication,
224 Ndis802_11StatusType_MediaStreamMode,
225 Ndis802_11StatusType_PMKID_CandidateList,
226 Ndis802_11StatusTypeMax // not a real type, defined as an upper bound
Forest Bond5449c682009-04-25 10:30:44 -0400227} NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE;
228
229//Added new types for PMKID Candidate lists.
230typedef struct _PMKID_CANDIDATE {
Joe Perches4ec4aa42013-03-18 10:44:45 -0700231 NDIS_802_11_MAC_ADDRESS BSSID;
232 unsigned long Flags;
Forest Bond5449c682009-04-25 10:30:44 -0400233} PMKID_CANDIDATE, *PPMKID_CANDIDATE;
234
Forest Bond5449c682009-04-25 10:30:44 -0400235typedef struct _BSSID_INFO
236{
Joe Perches4ec4aa42013-03-18 10:44:45 -0700237 NDIS_802_11_MAC_ADDRESS BSSID;
238 NDIS_802_11_PMKID_VALUE PMKID;
Forest Bond5449c682009-04-25 10:30:44 -0400239} BSSID_INFO, *PBSSID_INFO;
240
241typedef struct tagSPMKID {
Joe Perches4ec4aa42013-03-18 10:44:45 -0700242 unsigned long Length;
243 unsigned long BSSIDInfoCount;
244 BSSID_INFO BSSIDInfo[MAX_BSSIDINFO_4_PMKID];
Forest Bond5449c682009-04-25 10:30:44 -0400245} SPMKID, *PSPMKID;
246
247typedef struct tagSPMKIDCandidateEvent {
Joe Perches4ec4aa42013-03-18 10:44:45 -0700248 NDIS_802_11_STATUS_TYPE StatusType;
249 unsigned long Version; // Version of the structure
250 unsigned long NumCandidates; // No. of pmkid candidates
251 PMKID_CANDIDATE CandidateList[MAX_PMKIDLIST];
Jim Lieba8848472009-08-12 14:54:07 -0700252} SPMKIDCandidateEvent, *PSPMKIDCandidateEvent;
Forest Bond5449c682009-04-25 10:30:44 -0400253
Forest Bond5449c682009-04-25 10:30:44 -0400254//--
255
256//++ 802.11h related
257#define MAX_QUIET_COUNT 8
258
259typedef struct tagSQuietControl {
Joe Perches4ec4aa42013-03-18 10:44:45 -0700260 bool bEnable;
261 unsigned long dwStartTime;
262 unsigned char byPeriod;
263 unsigned short wDuration;
Jim Lieba8848472009-08-12 14:54:07 -0700264} SQuietControl, *PSQuietControl;
Forest Bond5449c682009-04-25 10:30:44 -0400265
266//--
Joe Perches4ec4aa42013-03-18 10:44:45 -0700267typedef struct __chip_info_tbl {
268 CHIP_TYPE chip_id;
269 char *name;
270 int io_size;
271 int nTxQueue;
272 u32 flags;
Forest Bond5449c682009-04-25 10:30:44 -0400273} CHIP_INFO, *PCHIP_INFO;
274
Forest Bond5449c682009-04-25 10:30:44 -0400275typedef enum {
Joe Perches4ec4aa42013-03-18 10:44:45 -0700276 OWNED_BY_HOST = 0,
277 OWNED_BY_NIC = 1
Forest Bond5449c682009-04-25 10:30:44 -0400278} DEVICE_OWNER_TYPE, *PDEVICE_OWNER_TYPE;
279
Forest Bond5449c682009-04-25 10:30:44 -0400280// The receive duplicate detection cache entry
Joe Perches4ec4aa42013-03-18 10:44:45 -0700281typedef struct tagSCacheEntry {
282 unsigned short wFmSequence;
283 unsigned char abyAddr2[ETH_ALEN];
Forest Bond5449c682009-04-25 10:30:44 -0400284} SCacheEntry, *PSCacheEntry;
285
Joe Perches4ec4aa42013-03-18 10:44:45 -0700286typedef struct tagSCache {
Forest Bond5449c682009-04-25 10:30:44 -0400287/* The receive cache is updated circularly. The next entry to be written is
288 * indexed by the "InPtr".
Joe Perches4ec4aa42013-03-18 10:44:45 -0700289 */
290 unsigned int uInPtr; // Place to use next
291 SCacheEntry asCacheEntry[DUPLICATE_RX_CACHE_LENGTH];
Forest Bond5449c682009-04-25 10:30:44 -0400292} SCache, *PSCache;
293
294#define CB_MAX_RX_FRAG 64
295// DeFragment Control Block, used for collecting fragments prior to reassembly
296typedef struct tagSDeFragControlBlock
297{
Joe Perches4ec4aa42013-03-18 10:44:45 -0700298 unsigned short wSequence;
299 unsigned short wFragNum;
300 unsigned char abyAddr2[ETH_ALEN];
301 unsigned int uLifetime;
302 struct sk_buff *skb;
303 unsigned char *pbyRxBuffer;
304 unsigned int cbFrameLength;
305 bool bInUse;
Jim Lieba8848472009-08-12 14:54:07 -0700306} SDeFragControlBlock, *PSDeFragControlBlock;
Forest Bond5449c682009-04-25 10:30:44 -0400307
Forest Bond5449c682009-04-25 10:30:44 -0400308//flags for options
309#define DEVICE_FLAGS_IP_ALIGN 0x00000001UL
310#define DEVICE_FLAGS_PREAMBLE_TYPE 0x00000002UL
311#define DEVICE_FLAGS_OP_MODE 0x00000004UL
312#define DEVICE_FLAGS_PS_MODE 0x00000008UL
313#define DEVICE_FLAGS_80211h_MODE 0x00000010UL
314#define DEVICE_FLAGS_DiversityANT 0x00000020UL
315
316//flags for driver status
317#define DEVICE_FLAGS_OPENED 0x00010000UL
318#define DEVICE_FLAGS_WOL_ENABLED 0x00080000UL
Justin P. Mattock789d1ae2012-08-20 08:43:13 -0700319//flags for capabilities
Forest Bond5449c682009-04-25 10:30:44 -0400320#define DEVICE_FLAGS_TX_ALIGN 0x01000000UL
321#define DEVICE_FLAGS_HAVE_CAM 0x02000000UL
322#define DEVICE_FLAGS_FLOW_CTRL 0x04000000UL
323
324//flags for MII status
325#define DEVICE_LINK_FAIL 0x00000001UL
326#define DEVICE_SPEED_10 0x00000002UL
327#define DEVICE_SPEED_100 0x00000004UL
328#define DEVICE_SPEED_1000 0x00000008UL
329#define DEVICE_DUPLEX_FULL 0x00000010UL
330#define DEVICE_AUTONEG_ENABLE 0x00000020UL
331#define DEVICE_FORCED_BY_EEPROM 0x00000040UL
332//for device_set_media_duplex
333#define DEVICE_LINK_CHANGE 0x00000001UL
334
Forest Bond5449c682009-04-25 10:30:44 -0400335//PLICE_DEBUG->
336
Forest Bond5449c682009-04-25 10:30:44 -0400337typedef struct _RxManagementQueue
338{
339 int packet_num;
Joe Perches4ec4aa42013-03-18 10:44:45 -0700340 int head, tail;
Forest Bond5449c682009-04-25 10:30:44 -0400341 PSRxMgmtPacket Q[NUM];
Joe Perches4ec4aa42013-03-18 10:44:45 -0700342} RxManagementQueue, *PSRxManagementQueue;
Forest Bond5449c682009-04-25 10:30:44 -0400343
Forest Bond5449c682009-04-25 10:30:44 -0400344//PLICE_DEBUG<-
345
Forest Bond5449c682009-04-25 10:30:44 -0400346typedef struct __device_opt {
Joe Perches4ec4aa42013-03-18 10:44:45 -0700347 int nRxDescs0; //Number of RX descriptors0
348 int nRxDescs1; //Number of RX descriptors1
349 int nTxDescs[2]; //Number of TX descriptors 0, 1
350 int int_works; //interrupt limits
351 int rts_thresh; //rts threshold
352 int frag_thresh;
353 int data_rate;
354 int channel_num;
355 int short_retry;
356 int long_retry;
357 int bbp_type;
358 u32 flags;
Forest Bond5449c682009-04-25 10:30:44 -0400359} OPTIONS, *POPTIONS;
360
Forest Bond5449c682009-04-25 10:30:44 -0400361typedef struct __device_info {
Joe Perches4ec4aa42013-03-18 10:44:45 -0700362 struct __device_info *next;
363 struct __device_info *prev;
Forest Bond5449c682009-04-25 10:30:44 -0400364
Joe Perches4ec4aa42013-03-18 10:44:45 -0700365 struct pci_dev *pcid;
Forest Bond5449c682009-04-25 10:30:44 -0400366
Larry Finger9fada0a2011-05-05 18:52:56 -0500367#ifdef CONFIG_PM
Joe Perches4ec4aa42013-03-18 10:44:45 -0700368 u32 pci_state[16];
Forest Bond5449c682009-04-25 10:30:44 -0400369#endif
370
371// netdev
Joe Perches4ec4aa42013-03-18 10:44:45 -0700372 struct net_device *dev;
373 struct net_device *next_module;
374 struct net_device_stats stats;
Forest Bond5449c682009-04-25 10:30:44 -0400375
376//dma addr, rx/tx pool
Joe Perches4ec4aa42013-03-18 10:44:45 -0700377 dma_addr_t pool_dma;
378 dma_addr_t rd0_pool_dma;
379 dma_addr_t rd1_pool_dma;
Forest Bond5449c682009-04-25 10:30:44 -0400380
Joe Perches4ec4aa42013-03-18 10:44:45 -0700381 dma_addr_t td0_pool_dma;
382 dma_addr_t td1_pool_dma;
Forest Bond5449c682009-04-25 10:30:44 -0400383
Joe Perches4ec4aa42013-03-18 10:44:45 -0700384 dma_addr_t tx_bufs_dma0;
385 dma_addr_t tx_bufs_dma1;
386 dma_addr_t tx_beacon_dma;
Forest Bond5449c682009-04-25 10:30:44 -0400387
Joe Perches4ec4aa42013-03-18 10:44:45 -0700388 unsigned char *tx0_bufs;
389 unsigned char *tx1_bufs;
390 unsigned char *tx_beacon_bufs;
Forest Bond5449c682009-04-25 10:30:44 -0400391
Joe Perches4ec4aa42013-03-18 10:44:45 -0700392 CHIP_TYPE chip_id;
Forest Bond5449c682009-04-25 10:30:44 -0400393
Joe Perches4ec4aa42013-03-18 10:44:45 -0700394 unsigned long PortOffset;
395 unsigned long dwIsr;
396 u32 memaddr;
397 u32 ioaddr;
398 u32 io_size;
Forest Bond5449c682009-04-25 10:30:44 -0400399
Joe Perches4ec4aa42013-03-18 10:44:45 -0700400 unsigned char byRevId;
401 unsigned short SubSystemID;
402 unsigned short SubVendorID;
Forest Bond5449c682009-04-25 10:30:44 -0400403
Joe Perches4ec4aa42013-03-18 10:44:45 -0700404 int nTxQueues;
405 volatile int iTDUsed[TYPE_MAXTD];
Forest Bond5449c682009-04-25 10:30:44 -0400406
Joe Perches4ec4aa42013-03-18 10:44:45 -0700407 volatile PSTxDesc apCurrTD[TYPE_MAXTD];
408 volatile PSTxDesc apTailTD[TYPE_MAXTD];
Forest Bond5449c682009-04-25 10:30:44 -0400409
Joe Perches4ec4aa42013-03-18 10:44:45 -0700410 volatile PSTxDesc apTD0Rings;
411 volatile PSTxDesc apTD1Rings;
Forest Bond5449c682009-04-25 10:30:44 -0400412
Joe Perches4ec4aa42013-03-18 10:44:45 -0700413 volatile PSRxDesc aRD0Ring;
414 volatile PSRxDesc aRD1Ring;
415 volatile PSRxDesc pCurrRD[TYPE_MAXRD];
416 SCache sDupRxCache;
Forest Bond5449c682009-04-25 10:30:44 -0400417
Joe Perches4ec4aa42013-03-18 10:44:45 -0700418 SDeFragControlBlock sRxDFCB[CB_MAX_RX_FRAG];
419 unsigned int cbDFCB;
420 unsigned int cbFreeDFCB;
421 unsigned int uCurrentDFCBIdx;
Forest Bond5449c682009-04-25 10:30:44 -0400422
Joe Perches4ec4aa42013-03-18 10:44:45 -0700423 OPTIONS sOpts;
Forest Bond5449c682009-04-25 10:30:44 -0400424
Joe Perches4ec4aa42013-03-18 10:44:45 -0700425 u32 flags;
Forest Bond5449c682009-04-25 10:30:44 -0400426
Joe Perches4ec4aa42013-03-18 10:44:45 -0700427 u32 rx_buf_sz;
428 int multicast_limit;
429 unsigned char byRxMode;
Forest Bond5449c682009-04-25 10:30:44 -0400430
Joe Perches4ec4aa42013-03-18 10:44:45 -0700431 spinlock_t lock;
Forest Bond5449c682009-04-25 10:30:44 -0400432//PLICE_DEBUG->
Joe Perches4ec4aa42013-03-18 10:44:45 -0700433 struct tasklet_struct RxMngWorkItem;
Forest Bond5449c682009-04-25 10:30:44 -0400434 RxManagementQueue rxManeQueue;
435//PLICE_DEBUG<-
436//PLICE_DEBUG ->
Joe Perches4ec4aa42013-03-18 10:44:45 -0700437 pid_t MLMEThr_pid;
438 struct completion notify;
439 struct semaphore mlme_semaphore;
Forest Bond5449c682009-04-25 10:30:44 -0400440//PLICE_DEBUG <-
441
Joe Perches4ec4aa42013-03-18 10:44:45 -0700442 u32 rx_bytes;
Forest Bond5449c682009-04-25 10:30:44 -0400443
Joe Perches4ec4aa42013-03-18 10:44:45 -0700444 // Version control
445 unsigned char byLocalID;
446 unsigned char byRFType;
Forest Bond5449c682009-04-25 10:30:44 -0400447
Joe Perches4ec4aa42013-03-18 10:44:45 -0700448 unsigned char byMaxPwrLevel;
449 unsigned char byZoneType;
450 bool bZoneRegExist;
451 unsigned char byOriginalZonetype;
452 unsigned char abyMacContext[MAC_MAX_CONTEXT_REG];
453 bool bLinkPass; // link status: OK or fail
454 unsigned char abyCurrentNetAddr[ETH_ALEN];
Forest Bond5449c682009-04-25 10:30:44 -0400455
Joe Perches4ec4aa42013-03-18 10:44:45 -0700456 // Adapter statistics
457 SStatCounter scStatistic;
458 // 802.11 counter
459 SDot11Counters s802_11Counter;
Forest Bond5449c682009-04-25 10:30:44 -0400460
Joe Perches4ec4aa42013-03-18 10:44:45 -0700461 // 802.11 management
462 PSMgmtObject pMgmt;
463 SMgmtObject sMgmtObj;
Forest Bond5449c682009-04-25 10:30:44 -0400464
Joe Perches4ec4aa42013-03-18 10:44:45 -0700465 // 802.11 MAC specific
466 unsigned int uCurrRSSI;
467 unsigned char byCurrSQ;
Forest Bond5449c682009-04-25 10:30:44 -0400468
Joe Perches4ec4aa42013-03-18 10:44:45 -0700469 unsigned long dwTxAntennaSel;
470 unsigned long dwRxAntennaSel;
471 unsigned char byAntennaCount;
472 unsigned char byRxAntennaMode;
473 unsigned char byTxAntennaMode;
474 bool bTxRxAntInv;
Forest Bond5449c682009-04-25 10:30:44 -0400475
Joe Perches4ec4aa42013-03-18 10:44:45 -0700476 unsigned char *pbyTmpBuff;
477 unsigned int uSIFS; //Current SIFS
478 unsigned int uDIFS; //Current DIFS
479 unsigned int uEIFS; //Current EIFS
480 unsigned int uSlot; //Current SlotTime
481 unsigned int uCwMin; //Current CwMin
482 unsigned int uCwMax; //CwMax is fixed on 1023.
483 // PHY parameter
484 unsigned char bySIFS;
485 unsigned char byDIFS;
486 unsigned char byEIFS;
487 unsigned char bySlot;
488 unsigned char byCWMaxMin;
489 CARD_PHY_TYPE eCurrentPHYType;
Forest Bond5449c682009-04-25 10:30:44 -0400490
Joe Perches4ec4aa42013-03-18 10:44:45 -0700491 VIA_BB_TYPE byBBType; //0: 11A, 1:11B, 2:11G
492 VIA_PKT_TYPE byPacketType; //0:11a,1:11b,2:11gb(only CCK in BasicRate),3:11ga(OFDM in Basic Rate)
493 unsigned short wBasicRate;
494 unsigned char byACKRate;
495 unsigned char byTopOFDMBasicRate;
496 unsigned char byTopCCKBasicRate;
Forest Bond5449c682009-04-25 10:30:44 -0400497
Joe Perches4ec4aa42013-03-18 10:44:45 -0700498 unsigned char byMinChannel;
499 unsigned char byMaxChannel;
500 unsigned int uConnectionRate;
Forest Bond5449c682009-04-25 10:30:44 -0400501
Joe Perches4ec4aa42013-03-18 10:44:45 -0700502 unsigned char byPreambleType;
503 unsigned char byShortPreamble;
Forest Bond5449c682009-04-25 10:30:44 -0400504
Joe Perches4ec4aa42013-03-18 10:44:45 -0700505 unsigned short wCurrentRate;
506 unsigned short wRTSThreshold;
507 unsigned short wFragmentationThreshold;
508 unsigned char byShortRetryLimit;
509 unsigned char byLongRetryLimit;
510 CARD_OP_MODE eOPMode;
511 unsigned char byOpMode;
512 bool bBSSIDFilter;
513 unsigned short wMaxTransmitMSDULifetime;
514 unsigned char abyBSSID[ETH_ALEN];
515 unsigned char abyDesireBSSID[ETH_ALEN];
516 unsigned short wCTSDuration; // update while speed change
517 unsigned short wACKDuration; // update while speed change
518 unsigned short wRTSTransmitLen; // update while speed change
519 unsigned char byRTSServiceField; // update while speed change
520 unsigned char byRTSSignalField; // update while speed change
Forest Bond5449c682009-04-25 10:30:44 -0400521
Joe Perches4ec4aa42013-03-18 10:44:45 -0700522 unsigned long dwMaxReceiveLifetime; // dot11MaxReceiveLifetime
Forest Bond5449c682009-04-25 10:30:44 -0400523
Joe Perches4ec4aa42013-03-18 10:44:45 -0700524 bool bCCK;
525 bool bEncryptionEnable;
526 bool bLongHeader;
527 bool bShortSlotTime;
528 bool bProtectMode;
529 bool bNonERPPresent;
530 bool bBarkerPreambleMd;
Forest Bond5449c682009-04-25 10:30:44 -0400531
Joe Perches4ec4aa42013-03-18 10:44:45 -0700532 unsigned char byERPFlag;
533 unsigned short wUseProtectCntDown;
Forest Bond5449c682009-04-25 10:30:44 -0400534
Joe Perches4ec4aa42013-03-18 10:44:45 -0700535 bool bRadioControlOff;
536 bool bRadioOff;
537 bool bEnablePSMode;
538 unsigned short wListenInterval;
539 bool bPWBitOn;
540 WMAC_POWER_MODE ePSMode;
Forest Bond5449c682009-04-25 10:30:44 -0400541
Joe Perches4ec4aa42013-03-18 10:44:45 -0700542 // GPIO Radio Control
543 unsigned char byRadioCtl;
544 unsigned char byGPIO;
545 bool bHWRadioOff;
546 bool bPrvActive4RadioOFF;
547 bool bGPIOBlockRead;
Forest Bond5449c682009-04-25 10:30:44 -0400548
Joe Perches4ec4aa42013-03-18 10:44:45 -0700549 // Beacon related
550 unsigned short wSeqCounter;
551 unsigned short wBCNBufLen;
552 bool bBeaconBufReady;
553 bool bBeaconSent;
554 bool bIsBeaconBufReadySet;
555 unsigned int cbBeaconBufReadySetCnt;
556 bool bFixRate;
557 unsigned char byCurrentCh;
558 unsigned int uScanTime;
Forest Bond5449c682009-04-25 10:30:44 -0400559
Joe Perches4ec4aa42013-03-18 10:44:45 -0700560 CMD_STATE eCommandState;
Forest Bond5449c682009-04-25 10:30:44 -0400561
Joe Perches4ec4aa42013-03-18 10:44:45 -0700562 CMD_CODE eCommand;
563 bool bBeaconTx;
Forest Bond5449c682009-04-25 10:30:44 -0400564
Joe Perches4ec4aa42013-03-18 10:44:45 -0700565 bool bStopBeacon;
566 bool bStopDataPkt;
567 bool bStopTx0Pkt;
568 unsigned int uAutoReConnectTime;
Forest Bond5449c682009-04-25 10:30:44 -0400569
Joe Perches4ec4aa42013-03-18 10:44:45 -0700570 // 802.11 counter
Forest Bond5449c682009-04-25 10:30:44 -0400571
Joe Perches4ec4aa42013-03-18 10:44:45 -0700572 CMD_ITEM eCmdQueue[CMD_Q_SIZE];
573 unsigned int uCmdDequeueIdx;
574 unsigned int uCmdEnqueueIdx;
575 unsigned int cbFreeCmdQueue;
576 bool bCmdRunning;
577 bool bCmdClear;
Forest Bond5449c682009-04-25 10:30:44 -0400578
Joe Perches4ec4aa42013-03-18 10:44:45 -0700579 bool bRoaming;
580 //WOW
581 unsigned char abyIPAddr[4];
Forest Bond5449c682009-04-25 10:30:44 -0400582
Joe Perches4ec4aa42013-03-18 10:44:45 -0700583 unsigned long ulTxPower;
584 NDIS_802_11_WEP_STATUS eEncryptionStatus;
585 bool bTransmitKey;
Forest Bond5449c682009-04-25 10:30:44 -0400586//2007-0925-01<Add>by MikeLiu
587//mike add :save old Encryption
Joe Perches4ec4aa42013-03-18 10:44:45 -0700588 NDIS_802_11_WEP_STATUS eOldEncryptionStatus;
Jim Lieb612822f2009-08-12 14:54:03 -0700589
Joe Perches4ec4aa42013-03-18 10:44:45 -0700590 SKeyManagement sKey;
591 unsigned long dwIVCounter;
Forest Bond5449c682009-04-25 10:30:44 -0400592
Joe Perches4ec4aa42013-03-18 10:44:45 -0700593 QWORD qwPacketNumber; //For CCMP and TKIP as TSC(6 bytes)
594 unsigned int uCurrentWEPMode;
Forest Bond5449c682009-04-25 10:30:44 -0400595
Joe Perches4ec4aa42013-03-18 10:44:45 -0700596 RC4Ext SBox;
597 unsigned char abyPRNG[WLAN_WEPMAX_KEYLEN+3];
598 unsigned char byKeyIndex;
599 unsigned int uKeyLength;
600 unsigned char abyKey[WLAN_WEP232_KEYLEN];
Forest Bond5449c682009-04-25 10:30:44 -0400601
Joe Perches4ec4aa42013-03-18 10:44:45 -0700602 bool bAES;
603 unsigned char byCntMeasure;
Forest Bond5449c682009-04-25 10:30:44 -0400604
Joe Perches4ec4aa42013-03-18 10:44:45 -0700605 // for AP mode
606 unsigned int uAssocCount;
607 bool bMoreData;
Forest Bond5449c682009-04-25 10:30:44 -0400608
Joe Perches4ec4aa42013-03-18 10:44:45 -0700609 // QoS
610 bool bGrpAckPolicy;
Forest Bond5449c682009-04-25 10:30:44 -0400611
Joe Perches4ec4aa42013-03-18 10:44:45 -0700612 // for OID_802_11_ASSOCIATION_INFORMATION
613 bool bAssocInfoSet;
Forest Bond5449c682009-04-25 10:30:44 -0400614
Joe Perches4ec4aa42013-03-18 10:44:45 -0700615 unsigned char byAutoFBCtrl;
Forest Bond5449c682009-04-25 10:30:44 -0400616
Joe Perches4ec4aa42013-03-18 10:44:45 -0700617 bool bTxMICFail;
618 bool bRxMICFail;
Forest Bond5449c682009-04-25 10:30:44 -0400619
Joe Perches4ec4aa42013-03-18 10:44:45 -0700620 unsigned int uRATEIdx;
Forest Bond5449c682009-04-25 10:30:44 -0400621
Joe Perches4ec4aa42013-03-18 10:44:45 -0700622 // For Update BaseBand VGA Gain Offset
623 bool bUpdateBBVGA;
624 unsigned int uBBVGADiffCount;
625 unsigned char byBBVGANew;
626 unsigned char byBBVGACurrent;
627 unsigned char abyBBVGA[BB_VGA_LEVEL];
628 long ldBmThreshold[BB_VGA_LEVEL];
Forest Bond5449c682009-04-25 10:30:44 -0400629
Joe Perches4ec4aa42013-03-18 10:44:45 -0700630 unsigned char byBBPreEDRSSI;
631 unsigned char byBBPreEDIndex;
Forest Bond5449c682009-04-25 10:30:44 -0400632
Joe Perches4ec4aa42013-03-18 10:44:45 -0700633 bool bRadioCmd;
634 unsigned long dwDiagRefCount;
Forest Bond5449c682009-04-25 10:30:44 -0400635
Joe Perches4ec4aa42013-03-18 10:44:45 -0700636 // For FOE Tuning
637 unsigned char byFOETuning;
Forest Bond5449c682009-04-25 10:30:44 -0400638
Joe Perches4ec4aa42013-03-18 10:44:45 -0700639 // For Auto Power Tunning
Forest Bond5449c682009-04-25 10:30:44 -0400640
Joe Perches4ec4aa42013-03-18 10:44:45 -0700641 unsigned char byAutoPwrTunning;
642 short sPSetPointCCK;
643 short sPSetPointOFDMG;
644 short sPSetPointOFDMA;
645 long lPFormulaOffset;
646 short sPThreshold;
647 char cAdjustStep;
648 char cMinTxAGC;
Forest Bond5449c682009-04-25 10:30:44 -0400649
Joe Perches4ec4aa42013-03-18 10:44:45 -0700650 // For RF Power table
651 unsigned char byCCKPwr;
652 unsigned char byOFDMPwrG;
653 unsigned char byCurPwr;
654 char byCurPwrdBm;
655 unsigned char abyCCKPwrTbl[CB_MAX_CHANNEL_24G+1];
656 unsigned char abyOFDMPwrTbl[CB_MAX_CHANNEL+1];
657 char abyCCKDefaultPwr[CB_MAX_CHANNEL_24G+1];
658 char abyOFDMDefaultPwr[CB_MAX_CHANNEL+1];
659 char abyRegPwr[CB_MAX_CHANNEL+1];
660 char abyLocalPwr[CB_MAX_CHANNEL+1];
Forest Bond5449c682009-04-25 10:30:44 -0400661
Joe Perches4ec4aa42013-03-18 10:44:45 -0700662 // BaseBand Loopback Use
663 unsigned char byBBCR4d;
664 unsigned char byBBCRc9;
665 unsigned char byBBCR88;
666 unsigned char byBBCR09;
Forest Bond5449c682009-04-25 10:30:44 -0400667
Joe Perches4ec4aa42013-03-18 10:44:45 -0700668 // command timer
669 struct timer_list sTimerCommand;
Forest Bond5449c682009-04-25 10:30:44 -0400670#ifdef TxInSleep
Joe Perches4ec4aa42013-03-18 10:44:45 -0700671 struct timer_list sTimerTxData;
672 unsigned long nTxDataTimeCout;
673 bool fTxDataInSleep;
674 bool IsTxDataTrigger;
Forest Bond5449c682009-04-25 10:30:44 -0400675#endif
676
677#ifdef WPA_SM_Transtatus
Joe Perches4ec4aa42013-03-18 10:44:45 -0700678 bool fWPA_Authened; //is WPA/WPA-PSK or WPA2/WPA2-PSK authen??
Forest Bond5449c682009-04-25 10:30:44 -0400679#endif
Joe Perches4ec4aa42013-03-18 10:44:45 -0700680 unsigned char byReAssocCount; //mike add:re-association retry times!
681 unsigned char byLinkWaitCount;
Forest Bond5449c682009-04-25 10:30:44 -0400682
Joe Perches4ec4aa42013-03-18 10:44:45 -0700683 unsigned char abyNodeName[17];
Forest Bond5449c682009-04-25 10:30:44 -0400684
Joe Perches4ec4aa42013-03-18 10:44:45 -0700685 bool bDiversityRegCtlON;
686 bool bDiversityEnable;
687 unsigned long ulDiversityNValue;
688 unsigned long ulDiversityMValue;
689 unsigned char byTMax;
690 unsigned char byTMax2;
691 unsigned char byTMax3;
692 unsigned long ulSQ3TH;
Forest Bond5449c682009-04-25 10:30:44 -0400693
694// ANT diversity
Joe Perches4ec4aa42013-03-18 10:44:45 -0700695 unsigned long uDiversityCnt;
696 unsigned char byAntennaState;
697 unsigned long ulRatio_State0;
698 unsigned long ulRatio_State1;
Forest Bond5449c682009-04-25 10:30:44 -0400699
Joe Perches4ec4aa42013-03-18 10:44:45 -0700700 //SQ3 functions for antenna diversity
701 struct timer_list TimerSQ3Tmax1;
702 struct timer_list TimerSQ3Tmax2;
703 struct timer_list TimerSQ3Tmax3;
Forest Bond5449c682009-04-25 10:30:44 -0400704
Joe Perches4ec4aa42013-03-18 10:44:45 -0700705 unsigned long uNumSQ3[MAX_RATE];
706 unsigned short wAntDiversityMaxRate;
Forest Bond5449c682009-04-25 10:30:44 -0400707
Joe Perches4ec4aa42013-03-18 10:44:45 -0700708 SEthernetHeader sTxEthHeader;
709 SEthernetHeader sRxEthHeader;
710 unsigned char abyBroadcastAddr[ETH_ALEN];
711 unsigned char abySNAP_RFC1042[ETH_ALEN];
712 unsigned char abySNAP_Bridgetunnel[ETH_ALEN];
713 unsigned char abyEEPROM[EEP_MAX_CONTEXT_SIZE]; //unsigned long alignment
714 // Pre-Authentication & PMK cache
715 SPMKID gsPMKID;
716 SPMKIDCandidateEvent gsPMKIDCandidate;
Forest Bond5449c682009-04-25 10:30:44 -0400717
Joe Perches4ec4aa42013-03-18 10:44:45 -0700718 // for 802.11h
719 bool b11hEnable;
720 unsigned char abyCountryCode[3];
721 // for 802.11h DFS
722 unsigned int uNumOfMeasureEIDs;
723 PWLAN_IE_MEASURE_REQ pCurrMeasureEID;
724 bool bMeasureInProgress;
725 unsigned char byOrgChannel;
726 unsigned char byOrgRCR;
727 unsigned long dwOrgMAR0;
728 unsigned long dwOrgMAR4;
729 unsigned char byBasicMap;
730 unsigned char byCCAFraction;
731 unsigned char abyRPIs[8];
732 unsigned long dwRPIs[8];
733 bool bChannelSwitch;
734 unsigned char byNewChannel;
735 unsigned char byChannelSwitchCount;
736 bool bQuietEnable;
737 bool bEnableFirstQuiet;
738 unsigned char byQuietStartCount;
739 unsigned int uQuietEnqueue;
740 unsigned long dwCurrentQuietEndTime;
741 SQuietControl sQuiet[MAX_QUIET_COUNT];
742 // for 802.11h TPC
743 bool bCountryInfo5G;
744 bool bCountryInfo24G;
Forest Bond5449c682009-04-25 10:30:44 -0400745
Joe Perches4ec4aa42013-03-18 10:44:45 -0700746 unsigned short wBeaconInterval;
Forest Bond5449c682009-04-25 10:30:44 -0400747
Joe Perches4ec4aa42013-03-18 10:44:45 -0700748 //WPA supplicant deamon
Forest Bond5449c682009-04-25 10:30:44 -0400749 struct net_device *wpadev;
Charles Clément7b6a0012010-08-01 17:15:50 +0200750 bool bWPADEVUp;
Joe Perches4ec4aa42013-03-18 10:44:45 -0700751 struct sk_buff *skb;
Forest Bond5449c682009-04-25 10:30:44 -0400752#ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT
Joe Perches4ec4aa42013-03-18 10:44:45 -0700753 unsigned int bwextcount;
754 bool bWPASuppWextEnabled;
Forest Bond5449c682009-04-25 10:30:44 -0400755#endif
756
Joe Perches4ec4aa42013-03-18 10:44:45 -0700757 //--
Forest Bond5449c682009-04-25 10:30:44 -0400758#ifdef HOSTAP
Joe Perches4ec4aa42013-03-18 10:44:45 -0700759 // user space daemon: hostapd, is used for HOSTAP
Charles Clément7b6a0012010-08-01 17:15:50 +0200760 bool bEnableHostapd;
761 bool bEnable8021x;
762 bool bEnableHostWEP;
Forest Bond5449c682009-04-25 10:30:44 -0400763 struct net_device *apdev;
764 int (*tx_80211)(struct sk_buff *skb, struct net_device *dev);
765#endif
Joe Perches4ec4aa42013-03-18 10:44:45 -0700766 unsigned int uChannel;
767 bool bMACSuspend;
Forest Bond5449c682009-04-25 10:30:44 -0400768
Forest Bond5449c682009-04-25 10:30:44 -0400769 struct iw_statistics wstats; // wireless stats
Joe Perches4ec4aa42013-03-18 10:44:45 -0700770 bool bCommit;
Forest Bond5449c682009-04-25 10:30:44 -0400771} DEVICE_INFO, *PSDevice;
772
Forest Bond5449c682009-04-25 10:30:44 -0400773//PLICE_DEBUG->
774
Joe Perches4ec4aa42013-03-18 10:44:45 -0700775inline static void EnQueue(PSDevice pDevice, PSRxMgmtPacket pRxMgmtPacket)
Forest Bond5449c682009-04-25 10:30:44 -0400776{
Joe Perches5e0cc8a2013-03-18 20:55:37 -0700777 if ((pDevice->rxManeQueue.tail+1) % NUM == pDevice->rxManeQueue.head) {
Joe Perches4ec4aa42013-03-18 10:44:45 -0700778 return;
Joe Perches5e0cc8a2013-03-18 20:55:37 -0700779 } else {
Joe Perches4ec4aa42013-03-18 10:44:45 -0700780 pDevice->rxManeQueue.tail = (pDevice->rxManeQueue.tail + 1) % NUM;
Forest Bond5449c682009-04-25 10:30:44 -0400781 pDevice->rxManeQueue.Q[pDevice->rxManeQueue.tail] = pRxMgmtPacket;
782 pDevice->rxManeQueue.packet_num++;
Forest Bond5449c682009-04-25 10:30:44 -0400783 }
784}
785
Joe Perches4ec4aa42013-03-18 10:44:45 -0700786inline static PSRxMgmtPacket DeQueue(PSDevice pDevice)
Forest Bond5449c682009-04-25 10:30:44 -0400787{
788 PSRxMgmtPacket pRxMgmtPacket;
Joe Perches5e0cc8a2013-03-18 20:55:37 -0700789 if (pDevice->rxManeQueue.tail == pDevice->rxManeQueue.head) {
Forest Bond5449c682009-04-25 10:30:44 -0400790 printk("Queue is Empty\n");
791 return NULL;
Joe Perches5e0cc8a2013-03-18 20:55:37 -0700792 } else {
Forest Bond5449c682009-04-25 10:30:44 -0400793 int x;
794 //x=pDevice->rxManeQueue.head = (pDevice->rxManeQueue.head+1)%NUM;
795 pDevice->rxManeQueue.head = (pDevice->rxManeQueue.head+1)%NUM;
796 x = pDevice->rxManeQueue.head;
Forest Bond5449c682009-04-25 10:30:44 -0400797 pRxMgmtPacket = pDevice->rxManeQueue.Q[x];
798 pDevice->rxManeQueue.packet_num--;
799 return pRxMgmtPacket;
800 }
801}
802
Charles Clément6b35b7b2010-05-07 12:30:19 -0700803void InitRxManagementQueue(PSDevice pDevice);
Forest Bond5449c682009-04-25 10:30:44 -0400804
Forest Bond5449c682009-04-25 10:30:44 -0400805//PLICE_DEBUG<-
806
Charles Clément7b6a0012010-08-01 17:15:50 +0200807inline static bool device_get_ip(PSDevice pInfo) {
Joe Perches4ec4aa42013-03-18 10:44:45 -0700808 struct in_device *in_dev = (struct in_device *)pInfo->dev->ip_ptr;
809 struct in_ifaddr *ifa;
Forest Bond5449c682009-04-25 10:30:44 -0400810
Joe Perches4ec4aa42013-03-18 10:44:45 -0700811 if (in_dev != NULL) {
812 ifa = (struct in_ifaddr *)in_dev->ifa_list;
813 if (ifa != NULL) {
814 memcpy(pInfo->abyIPAddr, &ifa->ifa_address, 4);
815 return true;
816 }
817 }
818 return false;
Forest Bond5449c682009-04-25 10:30:44 -0400819}
820
Devendra Naga8473f652013-01-08 12:52:33 -0500821static inline PDEVICE_RD_INFO alloc_rd_info(void)
822{
823 return kzalloc(sizeof(DEVICE_RD_INFO), GFP_ATOMIC);
Forest Bond5449c682009-04-25 10:30:44 -0400824}
825
Devendra Nagad1b46e72013-01-08 12:52:34 -0500826static inline PDEVICE_TD_INFO alloc_td_info(void)
827{
828 return kzalloc(sizeof(DEVICE_TD_INFO), GFP_ATOMIC);
Forest Bond5449c682009-04-25 10:30:44 -0400829}
830
831/*--------------------- Export Functions --------------------------*/
832
Charles Clément7b6a0012010-08-01 17:15:50 +0200833bool device_dma0_xmit(PSDevice pDevice, struct sk_buff *skb, unsigned int uNodeIndex);
834bool device_alloc_frag_buf(PSDevice pDevice, PSDeFragControlBlock pDeF);
835int Config_FileOperation(PSDevice pDevice, bool fwrite, unsigned char *Parameter);
Forest Bond5449c682009-04-25 10:30:44 -0400836#endif