1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
4  * All rights reserved.
5  *
6  * Purpose: driver entry for initial, open, close, tx and rx.
7  *
8  * Author: Lyndon Chen
9  *
10  * Date: Jan 8, 2003
11  *
12  * Functions:
13  *
14  *   vt6655_probe - module initial (insmod) driver entry
15  *   vt6655_remove - module remove entry
16  *   device_free_info - device structure resource free function
17  *   device_print_info - print out resource
18  *   device_rx_srv - rx service function
19  *   device_alloc_rx_buf - rx buffer pre-allocated function
20  *   device_free_rx_buf - free rx buffer function
21  *   device_free_tx_buf - free tx buffer function
22  *   device_init_rd0_ring - initial rd dma0 ring
23  *   device_init_rd1_ring - initial rd dma1 ring
24  *   device_init_td0_ring - initial tx dma0 ring buffer
25  *   device_init_td1_ring - initial tx dma1 ring buffer
26  *   device_init_registers - initial MAC & BBP & RF internal registers.
27  *   device_init_rings - initial tx/rx ring buffer
28  *   device_free_rings - free all allocated ring buffer
29  *   device_tx_srv - tx interrupt service function
30  *
31  * Revision History:
32  */
33 
34 #include <linux/file.h>
35 #include "device.h"
36 #include "card.h"
37 #include "channel.h"
38 #include "baseband.h"
39 #include "mac.h"
40 #include "power.h"
41 #include "rxtx.h"
42 #include "dpc.h"
43 #include "rf.h"
44 #include <linux/delay.h>
45 #include <linux/kthread.h>
46 #include <linux/slab.h>
47 
48 /*---------------------  Static Definitions -------------------------*/
49 /*
50  * Define module options
51  */
52 MODULE_AUTHOR("VIA Networking Technologies, Inc., <lyndonchen@vntek.com.tw>");
53 MODULE_LICENSE("GPL");
54 MODULE_DESCRIPTION("VIA Networking Solomon-A/B/G Wireless LAN Adapter Driver");
55 
56 #define DEVICE_PARAM(N, D)
57 
58 #define RX_DESC_MIN0     16
59 #define RX_DESC_MAX0     128
60 #define RX_DESC_DEF0     32
61 DEVICE_PARAM(RxDescriptors0, "Number of receive descriptors0");
62 
63 #define RX_DESC_MIN1     16
64 #define RX_DESC_MAX1     128
65 #define RX_DESC_DEF1     32
66 DEVICE_PARAM(RxDescriptors1, "Number of receive descriptors1");
67 
68 #define TX_DESC_MIN0     16
69 #define TX_DESC_MAX0     128
70 #define TX_DESC_DEF0     32
71 DEVICE_PARAM(TxDescriptors0, "Number of transmit descriptors0");
72 
73 #define TX_DESC_MIN1     16
74 #define TX_DESC_MAX1     128
75 #define TX_DESC_DEF1     64
76 DEVICE_PARAM(TxDescriptors1, "Number of transmit descriptors1");
77 
78 #define INT_WORKS_DEF   20
79 #define INT_WORKS_MIN   10
80 #define INT_WORKS_MAX   64
81 
82 DEVICE_PARAM(int_works, "Number of packets per interrupt services");
83 
84 #define RTS_THRESH_DEF     2347
85 
86 #define FRAG_THRESH_DEF     2346
87 
88 #define SHORT_RETRY_MIN     0
89 #define SHORT_RETRY_MAX     31
90 #define SHORT_RETRY_DEF     8
91 
92 DEVICE_PARAM(ShortRetryLimit, "Short frame retry limits");
93 
94 #define LONG_RETRY_MIN     0
95 #define LONG_RETRY_MAX     15
96 #define LONG_RETRY_DEF     4
97 
98 DEVICE_PARAM(LongRetryLimit, "long frame retry limits");
99 
100 /* BasebandType[] baseband type selected
101  * 0: indicate 802.11a type
102  * 1: indicate 802.11b type
103  * 2: indicate 802.11g type
104  */
105 #define BBP_TYPE_MIN     0
106 #define BBP_TYPE_MAX     2
107 #define BBP_TYPE_DEF     2
108 
109 DEVICE_PARAM(BasebandType, "baseband type");
110 
111 /*
112  * Static vars definitions
113  */
114 static const struct pci_device_id vt6655_pci_id_table[] = {
115 	{ PCI_VDEVICE(VIA, 0x3253) },
116 	{ 0, }
117 };
118 
119 /*---------------------  Static Functions  --------------------------*/
120 
121 static int  vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent);
122 static void device_free_info(struct vnt_private *priv);
123 static void device_print_info(struct vnt_private *priv);
124 
125 static int device_init_rd0_ring(struct vnt_private *priv);
126 static int device_init_rd1_ring(struct vnt_private *priv);
127 static int device_init_td0_ring(struct vnt_private *priv);
128 static int device_init_td1_ring(struct vnt_private *priv);
129 
130 static int  device_rx_srv(struct vnt_private *priv, unsigned int idx);
131 static int  device_tx_srv(struct vnt_private *priv, unsigned int idx);
132 static bool device_alloc_rx_buf(struct vnt_private *, struct vnt_rx_desc *);
133 static void device_free_rx_buf(struct vnt_private *priv,
134 			       struct vnt_rx_desc *rd);
135 static void device_init_registers(struct vnt_private *priv);
136 static void device_free_tx_buf(struct vnt_private *, struct vnt_tx_desc *);
137 static void device_free_td0_ring(struct vnt_private *priv);
138 static void device_free_td1_ring(struct vnt_private *priv);
139 static void device_free_rd0_ring(struct vnt_private *priv);
140 static void device_free_rd1_ring(struct vnt_private *priv);
141 static void device_free_rings(struct vnt_private *priv);
142 
143 /*---------------------  Export Variables  --------------------------*/
144 
145 /*---------------------  Export Functions  --------------------------*/
146 
147 static void vt6655_remove(struct pci_dev *pcid)
148 {
149 	struct vnt_private *priv = pci_get_drvdata(pcid);
150 
151 	if (!priv)
152 		return;
153 	device_free_info(priv);
154 }
155 
156 static void device_get_options(struct vnt_private *priv)
157 {
158 	struct vnt_options *opts = &priv->opts;
159 
160 	opts->rx_descs0 = RX_DESC_DEF0;
161 	opts->rx_descs1 = RX_DESC_DEF1;
162 	opts->tx_descs[0] = TX_DESC_DEF0;
163 	opts->tx_descs[1] = TX_DESC_DEF1;
164 	opts->int_works = INT_WORKS_DEF;
165 
166 	opts->short_retry = SHORT_RETRY_DEF;
167 	opts->long_retry = LONG_RETRY_DEF;
168 	opts->bbp_type = BBP_TYPE_DEF;
169 }
170 
171 static void
172 device_set_options(struct vnt_private *priv)
173 {
174 	priv->byShortRetryLimit = priv->opts.short_retry;
175 	priv->byLongRetryLimit = priv->opts.long_retry;
176 	priv->byBBType = priv->opts.bbp_type;
177 	priv->byPacketType = priv->byBBType;
178 	priv->byAutoFBCtrl = AUTO_FB_0;
179 	priv->bUpdateBBVGA = true;
180 	priv->preamble_type = 0;
181 
182 	pr_debug(" byShortRetryLimit= %d\n", (int)priv->byShortRetryLimit);
183 	pr_debug(" byLongRetryLimit= %d\n", (int)priv->byLongRetryLimit);
184 	pr_debug(" preamble_type= %d\n", (int)priv->preamble_type);
185 	pr_debug(" byShortPreamble= %d\n", (int)priv->byShortPreamble);
186 	pr_debug(" byBBType= %d\n", (int)priv->byBBType);
187 }
188 
189 /*
190  * Initialisation of MAC & BBP registers
191  */
192 
193 static void device_init_registers(struct vnt_private *priv)
194 {
195 	unsigned long flags;
196 	unsigned int ii;
197 	unsigned char byValue;
198 	unsigned char byCCKPwrdBm = 0;
199 	unsigned char byOFDMPwrdBm = 0;
200 
201 	MACbShutdown(priv);
202 	bb_software_reset(priv);
203 
204 	/* Do MACbSoftwareReset in MACvInitialize */
205 	MACbSoftwareReset(priv);
206 
207 	priv->bAES = false;
208 
209 	/* Only used in 11g type, sync with ERP IE */
210 	priv->bProtectMode = false;
211 
212 	priv->bNonERPPresent = false;
213 	priv->bBarkerPreambleMd = false;
214 	priv->wCurrentRate = RATE_1M;
215 	priv->byTopOFDMBasicRate = RATE_24M;
216 	priv->byTopCCKBasicRate = RATE_1M;
217 
218 	/* init MAC */
219 	MACvInitialize(priv);
220 
221 	/* Get Local ID */
222 	priv->local_id = ioread8(priv->port_offset + MAC_REG_LOCALID);
223 
224 	spin_lock_irqsave(&priv->lock, flags);
225 
226 	SROMvReadAllContents(priv->port_offset, priv->abyEEPROM);
227 
228 	spin_unlock_irqrestore(&priv->lock, flags);
229 
230 	/* Get Channel range */
231 	priv->byMinChannel = 1;
232 	priv->byMaxChannel = CB_MAX_CHANNEL;
233 
234 	/* Get Antena */
235 	byValue = SROMbyReadEmbedded(priv->port_offset, EEP_OFS_ANTENNA);
236 	if (byValue & EEP_ANTINV)
237 		priv->bTxRxAntInv = true;
238 	else
239 		priv->bTxRxAntInv = false;
240 
241 	byValue &= (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN);
242 	/* if not set default is All */
243 	if (byValue == 0)
244 		byValue = (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN);
245 
246 	if (byValue == (EEP_ANTENNA_AUX | EEP_ANTENNA_MAIN)) {
247 		priv->byAntennaCount = 2;
248 		priv->byTxAntennaMode = ANT_B;
249 		priv->dwTxAntennaSel = 1;
250 		priv->dwRxAntennaSel = 1;
251 
252 		if (priv->bTxRxAntInv)
253 			priv->byRxAntennaMode = ANT_A;
254 		else
255 			priv->byRxAntennaMode = ANT_B;
256 	} else  {
257 		priv->byAntennaCount = 1;
258 		priv->dwTxAntennaSel = 0;
259 		priv->dwRxAntennaSel = 0;
260 
261 		if (byValue & EEP_ANTENNA_AUX) {
262 			priv->byTxAntennaMode = ANT_A;
263 
264 			if (priv->bTxRxAntInv)
265 				priv->byRxAntennaMode = ANT_B;
266 			else
267 				priv->byRxAntennaMode = ANT_A;
268 		} else {
269 			priv->byTxAntennaMode = ANT_B;
270 
271 			if (priv->bTxRxAntInv)
272 				priv->byRxAntennaMode = ANT_A;
273 			else
274 				priv->byRxAntennaMode = ANT_B;
275 		}
276 	}
277 
278 	/* Set initial antenna mode */
279 	bb_set_tx_antenna_mode(priv, priv->byTxAntennaMode);
280 	bb_set_rx_antenna_mode(priv, priv->byRxAntennaMode);
281 
282 	/* zonetype initial */
283 	priv->byOriginalZonetype = priv->abyEEPROM[EEP_OFS_ZONETYPE];
284 
285 	if (!priv->bZoneRegExist)
286 		priv->byZoneType = priv->abyEEPROM[EEP_OFS_ZONETYPE];
287 
288 	pr_debug("priv->byZoneType = %x\n", priv->byZoneType);
289 
290 	/* Init RF module */
291 	RFbInit(priv);
292 
293 	/* Get Desire Power Value */
294 	priv->byCurPwr = 0xFF;
295 	priv->byCCKPwr = SROMbyReadEmbedded(priv->port_offset, EEP_OFS_PWR_CCK);
296 	priv->byOFDMPwrG = SROMbyReadEmbedded(priv->port_offset,
297 					      EEP_OFS_PWR_OFDMG);
298 
299 	/* Load power Table */
300 	for (ii = 0; ii < CB_MAX_CHANNEL_24G; ii++) {
301 		priv->abyCCKPwrTbl[ii + 1] =
302 			SROMbyReadEmbedded(priv->port_offset,
303 					   (unsigned char)(ii + EEP_OFS_CCK_PWR_TBL));
304 		if (priv->abyCCKPwrTbl[ii + 1] == 0)
305 			priv->abyCCKPwrTbl[ii + 1] = priv->byCCKPwr;
306 
307 		priv->abyOFDMPwrTbl[ii + 1] =
308 			SROMbyReadEmbedded(priv->port_offset,
309 					   (unsigned char)(ii + EEP_OFS_OFDM_PWR_TBL));
310 		if (priv->abyOFDMPwrTbl[ii + 1] == 0)
311 			priv->abyOFDMPwrTbl[ii + 1] = priv->byOFDMPwrG;
312 
313 		priv->abyCCKDefaultPwr[ii + 1] = byCCKPwrdBm;
314 		priv->abyOFDMDefaultPwr[ii + 1] = byOFDMPwrdBm;
315 	}
316 
317 	/* recover 12,13 ,14channel for EUROPE by 11 channel */
318 	for (ii = 11; ii < 14; ii++) {
319 		priv->abyCCKPwrTbl[ii] = priv->abyCCKPwrTbl[10];
320 		priv->abyOFDMPwrTbl[ii] = priv->abyOFDMPwrTbl[10];
321 	}
322 
323 	/* Load OFDM A Power Table */
324 	for (ii = 0; ii < CB_MAX_CHANNEL_5G; ii++) {
325 		priv->abyOFDMPwrTbl[ii + CB_MAX_CHANNEL_24G + 1] =
326 			SROMbyReadEmbedded(priv->port_offset,
327 					   (unsigned char)(ii + EEP_OFS_OFDMA_PWR_TBL));
328 
329 		priv->abyOFDMDefaultPwr[ii + CB_MAX_CHANNEL_24G + 1] =
330 			SROMbyReadEmbedded(priv->port_offset,
331 					   (unsigned char)(ii + EEP_OFS_OFDMA_PWR_dBm));
332 	}
333 
334 	if (priv->local_id > REV_ID_VT3253_B1) {
335 		MACvSelectPage1(priv->port_offset);
336 
337 		iowrite8(MSRCTL1_TXPWR | MSRCTL1_CSAPAREN, priv->port_offset + MAC_REG_MSRCTL + 1);
338 
339 		MACvSelectPage0(priv->port_offset);
340 	}
341 
342 	/* use relative tx timeout and 802.11i D4 */
343 	MACvWordRegBitsOn(priv->port_offset,
344 			  MAC_REG_CFG, (CFG_TKIPOPT | CFG_NOTXTIMEOUT));
345 
346 	/* set performance parameter by registry */
347 	MACvSetShortRetryLimit(priv, priv->byShortRetryLimit);
348 	MACvSetLongRetryLimit(priv, priv->byLongRetryLimit);
349 
350 	/* reset TSF counter */
351 	iowrite8(TFTCTL_TSFCNTRST, priv->port_offset + MAC_REG_TFTCTL);
352 	/* enable TSF counter */
353 	iowrite8(TFTCTL_TSFCNTREN, priv->port_offset + MAC_REG_TFTCTL);
354 
355 	/* initialize BBP registers */
356 	bb_vt3253_init(priv);
357 
358 	if (priv->bUpdateBBVGA) {
359 		priv->byBBVGACurrent = priv->abyBBVGA[0];
360 		priv->byBBVGANew = priv->byBBVGACurrent;
361 		bb_set_vga_gain_offset(priv, priv->abyBBVGA[0]);
362 	}
363 
364 	bb_set_rx_antenna_mode(priv, priv->byRxAntennaMode);
365 	bb_set_tx_antenna_mode(priv, priv->byTxAntennaMode);
366 
367 	/* Set BB and packet type at the same time. */
368 	/* Set Short Slot Time, xIFS, and RSPINF. */
369 	priv->wCurrentRate = RATE_54M;
370 
371 	priv->radio_off = false;
372 
373 	priv->byRadioCtl = SROMbyReadEmbedded(priv->port_offset,
374 					      EEP_OFS_RADIOCTL);
375 	priv->hw_radio_off = false;
376 
377 	if (priv->byRadioCtl & EEP_RADIOCTL_ENABLE) {
378 		/* Get GPIO */
379 		priv->byGPIO = ioread8(priv->port_offset + MAC_REG_GPIOCTL1);
380 
381 		if (((priv->byGPIO & GPIO0_DATA) &&
382 		     !(priv->byRadioCtl & EEP_RADIOCTL_INV)) ||
383 		     (!(priv->byGPIO & GPIO0_DATA) &&
384 		     (priv->byRadioCtl & EEP_RADIOCTL_INV)))
385 			priv->hw_radio_off = true;
386 	}
387 
388 	if (priv->hw_radio_off || priv->bRadioControlOff)
389 		CARDbRadioPowerOff(priv);
390 
391 	/* get Permanent network address */
392 	SROMvReadEtherAddress(priv->port_offset, priv->abyCurrentNetAddr);
393 	pr_debug("Network address = %pM\n", priv->abyCurrentNetAddr);
394 
395 	/* reset Tx pointer */
396 	CARDvSafeResetRx(priv);
397 	/* reset Rx pointer */
398 	CARDvSafeResetTx(priv);
399 
400 	if (priv->local_id <= REV_ID_VT3253_A1)
401 		MACvRegBitsOn(priv->port_offset, MAC_REG_RCR, RCR_WPAERR);
402 
403 	/* Turn On Rx DMA */
404 	MACvReceive0(priv->port_offset);
405 	MACvReceive1(priv->port_offset);
406 
407 	/* start the adapter */
408 	iowrite8(HOSTCR_MACEN | HOSTCR_RXON | HOSTCR_TXON, priv->port_offset + MAC_REG_HOSTCR);
409 }
410 
411 static void device_print_info(struct vnt_private *priv)
412 {
413 	dev_info(&priv->pcid->dev, "MAC=%pM IO=0x%lx Mem=0x%lx IRQ=%d\n",
414 		 priv->abyCurrentNetAddr, (unsigned long)priv->ioaddr,
415 		 (unsigned long)priv->port_offset, priv->pcid->irq);
416 }
417 
418 static void device_free_info(struct vnt_private *priv)
419 {
420 	if (!priv)
421 		return;
422 
423 	if (priv->mac_hw)
424 		ieee80211_unregister_hw(priv->hw);
425 
426 	if (priv->port_offset)
427 		iounmap(priv->port_offset);
428 
429 	if (priv->pcid)
430 		pci_release_regions(priv->pcid);
431 
432 	if (priv->hw)
433 		ieee80211_free_hw(priv->hw);
434 }
435 
436 static bool device_init_rings(struct vnt_private *priv)
437 {
438 	void *vir_pool;
439 
440 	/*allocate all RD/TD rings a single pool*/
441 	vir_pool = dma_alloc_coherent(&priv->pcid->dev,
442 				      priv->opts.rx_descs0 * sizeof(struct vnt_rx_desc) +
443 				      priv->opts.rx_descs1 * sizeof(struct vnt_rx_desc) +
444 				      priv->opts.tx_descs[0] * sizeof(struct vnt_tx_desc) +
445 				      priv->opts.tx_descs[1] * sizeof(struct vnt_tx_desc),
446 				      &priv->pool_dma, GFP_ATOMIC);
447 	if (!vir_pool) {
448 		dev_err(&priv->pcid->dev, "allocate desc dma memory failed\n");
449 		return false;
450 	}
451 
452 	priv->aRD0Ring = vir_pool;
453 	priv->aRD1Ring = vir_pool +
454 		priv->opts.rx_descs0 * sizeof(struct vnt_rx_desc);
455 
456 	priv->rd0_pool_dma = priv->pool_dma;
457 	priv->rd1_pool_dma = priv->rd0_pool_dma +
458 		priv->opts.rx_descs0 * sizeof(struct vnt_rx_desc);
459 
460 	priv->tx0_bufs = dma_alloc_coherent(&priv->pcid->dev,
461 					    priv->opts.tx_descs[0] * PKT_BUF_SZ +
462 					    priv->opts.tx_descs[1] * PKT_BUF_SZ +
463 					    CB_BEACON_BUF_SIZE +
464 					    CB_MAX_BUF_SIZE,
465 					    &priv->tx_bufs_dma0, GFP_ATOMIC);
466 	if (!priv->tx0_bufs) {
467 		dev_err(&priv->pcid->dev, "allocate buf dma memory failed\n");
468 
469 		dma_free_coherent(&priv->pcid->dev,
470 				  priv->opts.rx_descs0 * sizeof(struct vnt_rx_desc) +
471 				  priv->opts.rx_descs1 * sizeof(struct vnt_rx_desc) +
472 				  priv->opts.tx_descs[0] * sizeof(struct vnt_tx_desc) +
473 				  priv->opts.tx_descs[1] * sizeof(struct vnt_tx_desc),
474 				  vir_pool, priv->pool_dma);
475 		return false;
476 	}
477 
478 	priv->td0_pool_dma = priv->rd1_pool_dma +
479 		priv->opts.rx_descs1 * sizeof(struct vnt_rx_desc);
480 
481 	priv->td1_pool_dma = priv->td0_pool_dma +
482 		priv->opts.tx_descs[0] * sizeof(struct vnt_tx_desc);
483 
484 	/* vir_pool: pvoid type */
485 	priv->apTD0Rings = vir_pool
486 		+ priv->opts.rx_descs0 * sizeof(struct vnt_rx_desc)
487 		+ priv->opts.rx_descs1 * sizeof(struct vnt_rx_desc);
488 
489 	priv->apTD1Rings = vir_pool
490 		+ priv->opts.rx_descs0 * sizeof(struct vnt_rx_desc)
491 		+ priv->opts.rx_descs1 * sizeof(struct vnt_rx_desc)
492 		+ priv->opts.tx_descs[0] * sizeof(struct vnt_tx_desc);
493 
494 	priv->tx1_bufs = priv->tx0_bufs +
495 		priv->opts.tx_descs[0] * PKT_BUF_SZ;
496 
497 	priv->tx_beacon_bufs = priv->tx1_bufs +
498 		priv->opts.tx_descs[1] * PKT_BUF_SZ;
499 
500 	priv->pbyTmpBuff = priv->tx_beacon_bufs +
501 		CB_BEACON_BUF_SIZE;
502 
503 	priv->tx_bufs_dma1 = priv->tx_bufs_dma0 +
504 		priv->opts.tx_descs[0] * PKT_BUF_SZ;
505 
506 	priv->tx_beacon_dma = priv->tx_bufs_dma1 +
507 		priv->opts.tx_descs[1] * PKT_BUF_SZ;
508 
509 	return true;
510 }
511 
512 static void device_free_rings(struct vnt_private *priv)
513 {
514 	dma_free_coherent(&priv->pcid->dev,
515 			  priv->opts.rx_descs0 * sizeof(struct vnt_rx_desc) +
516 			  priv->opts.rx_descs1 * sizeof(struct vnt_rx_desc) +
517 			  priv->opts.tx_descs[0] * sizeof(struct vnt_tx_desc) +
518 			  priv->opts.tx_descs[1] * sizeof(struct vnt_tx_desc),
519 			  priv->aRD0Ring, priv->pool_dma);
520 
521 	if (priv->tx0_bufs)
522 		dma_free_coherent(&priv->pcid->dev,
523 				  priv->opts.tx_descs[0] * PKT_BUF_SZ +
524 				  priv->opts.tx_descs[1] * PKT_BUF_SZ +
525 				  CB_BEACON_BUF_SIZE +
526 				  CB_MAX_BUF_SIZE,
527 				  priv->tx0_bufs, priv->tx_bufs_dma0);
528 }
529 
530 static int device_init_rd0_ring(struct vnt_private *priv)
531 {
532 	int i;
533 	dma_addr_t      curr = priv->rd0_pool_dma;
534 	struct vnt_rx_desc *desc;
535 	int ret;
536 
537 	/* Init the RD0 ring entries */
538 	for (i = 0; i < priv->opts.rx_descs0;
539 	     i ++, curr += sizeof(struct vnt_rx_desc)) {
540 		desc = &priv->aRD0Ring[i];
541 		desc->rd_info = kzalloc(sizeof(*desc->rd_info), GFP_KERNEL);
542 		if (!desc->rd_info) {
543 			ret = -ENOMEM;
544 			goto err_free_desc;
545 		}
546 
547 		if (!device_alloc_rx_buf(priv, desc)) {
548 			dev_err(&priv->pcid->dev, "can not alloc rx bufs\n");
549 			ret = -ENOMEM;
550 			goto err_free_rd;
551 		}
552 
553 		desc->next = &priv->aRD0Ring[(i + 1) % priv->opts.rx_descs0];
554 		desc->next_desc = cpu_to_le32(curr + sizeof(struct vnt_rx_desc));
555 	}
556 
557 	if (i > 0)
558 		priv->aRD0Ring[i - 1].next_desc = cpu_to_le32(priv->rd0_pool_dma);
559 	priv->pCurrRD[0] = &priv->aRD0Ring[0];
560 
561 	return 0;
562 
563 err_free_rd:
564 	kfree(desc->rd_info);
565 
566 err_free_desc:
567 	while (--i) {
568 		desc = &priv->aRD0Ring[i];
569 		device_free_rx_buf(priv, desc);
570 		kfree(desc->rd_info);
571 	}
572 
573 	return ret;
574 }
575 
576 static int device_init_rd1_ring(struct vnt_private *priv)
577 {
578 	int i;
579 	dma_addr_t      curr = priv->rd1_pool_dma;
580 	struct vnt_rx_desc *desc;
581 	int ret;
582 
583 	/* Init the RD1 ring entries */
584 	for (i = 0; i < priv->opts.rx_descs1;
585 	     i ++, curr += sizeof(struct vnt_rx_desc)) {
586 		desc = &priv->aRD1Ring[i];
587 		desc->rd_info = kzalloc(sizeof(*desc->rd_info), GFP_KERNEL);
588 		if (!desc->rd_info) {
589 			ret = -ENOMEM;
590 			goto err_free_desc;
591 		}
592 
593 		if (!device_alloc_rx_buf(priv, desc)) {
594 			dev_err(&priv->pcid->dev, "can not alloc rx bufs\n");
595 			ret = -ENOMEM;
596 			goto err_free_rd;
597 		}
598 
599 		desc->next = &priv->aRD1Ring[(i + 1) % priv->opts.rx_descs1];
600 		desc->next_desc = cpu_to_le32(curr + sizeof(struct vnt_rx_desc));
601 	}
602 
603 	if (i > 0)
604 		priv->aRD1Ring[i - 1].next_desc = cpu_to_le32(priv->rd1_pool_dma);
605 	priv->pCurrRD[1] = &priv->aRD1Ring[0];
606 
607 	return 0;
608 
609 err_free_rd:
610 	kfree(desc->rd_info);
611 
612 err_free_desc:
613 	while (--i) {
614 		desc = &priv->aRD1Ring[i];
615 		device_free_rx_buf(priv, desc);
616 		kfree(desc->rd_info);
617 	}
618 
619 	return ret;
620 }
621 
622 static void device_free_rd0_ring(struct vnt_private *priv)
623 {
624 	int i;
625 
626 	for (i = 0; i < priv->opts.rx_descs0; i++) {
627 		struct vnt_rx_desc *desc = &priv->aRD0Ring[i];
628 
629 		device_free_rx_buf(priv, desc);
630 		kfree(desc->rd_info);
631 	}
632 }
633 
634 static void device_free_rd1_ring(struct vnt_private *priv)
635 {
636 	int i;
637 
638 	for (i = 0; i < priv->opts.rx_descs1; i++) {
639 		struct vnt_rx_desc *desc = &priv->aRD1Ring[i];
640 
641 		device_free_rx_buf(priv, desc);
642 		kfree(desc->rd_info);
643 	}
644 }
645 
646 static int device_init_td0_ring(struct vnt_private *priv)
647 {
648 	int i;
649 	dma_addr_t  curr;
650 	struct vnt_tx_desc *desc;
651 	int ret;
652 
653 	curr = priv->td0_pool_dma;
654 	for (i = 0; i < priv->opts.tx_descs[0];
655 	     i++, curr += sizeof(struct vnt_tx_desc)) {
656 		desc = &priv->apTD0Rings[i];
657 		desc->td_info = kzalloc(sizeof(*desc->td_info), GFP_KERNEL);
658 		if (!desc->td_info) {
659 			ret = -ENOMEM;
660 			goto err_free_desc;
661 		}
662 
663 		desc->td_info->buf = priv->tx0_bufs + i * PKT_BUF_SZ;
664 		desc->td_info->buf_dma = priv->tx_bufs_dma0 + i * PKT_BUF_SZ;
665 
666 		desc->next = &(priv->apTD0Rings[(i + 1) % priv->opts.tx_descs[0]]);
667 		desc->next_desc = cpu_to_le32(curr +
668 					      sizeof(struct vnt_tx_desc));
669 	}
670 
671 	if (i > 0)
672 		priv->apTD0Rings[i - 1].next_desc = cpu_to_le32(priv->td0_pool_dma);
673 	priv->apTailTD[0] = priv->apCurrTD[0] = &priv->apTD0Rings[0];
674 
675 	return 0;
676 
677 err_free_desc:
678 	while (--i) {
679 		desc = &priv->apTD0Rings[i];
680 		kfree(desc->td_info);
681 	}
682 
683 	return ret;
684 }
685 
686 static int device_init_td1_ring(struct vnt_private *priv)
687 {
688 	int i;
689 	dma_addr_t  curr;
690 	struct vnt_tx_desc *desc;
691 	int ret;
692 
693 	/* Init the TD ring entries */
694 	curr = priv->td1_pool_dma;
695 	for (i = 0; i < priv->opts.tx_descs[1];
696 	     i++, curr += sizeof(struct vnt_tx_desc)) {
697 		desc = &priv->apTD1Rings[i];
698 		desc->td_info = kzalloc(sizeof(*desc->td_info), GFP_KERNEL);
699 		if (!desc->td_info) {
700 			ret = -ENOMEM;
701 			goto err_free_desc;
702 		}
703 
704 		desc->td_info->buf = priv->tx1_bufs + i * PKT_BUF_SZ;
705 		desc->td_info->buf_dma = priv->tx_bufs_dma1 + i * PKT_BUF_SZ;
706 
707 		desc->next = &(priv->apTD1Rings[(i + 1) % priv->opts.tx_descs[1]]);
708 		desc->next_desc = cpu_to_le32(curr + sizeof(struct vnt_tx_desc));
709 	}
710 
711 	if (i > 0)
712 		priv->apTD1Rings[i - 1].next_desc = cpu_to_le32(priv->td1_pool_dma);
713 	priv->apTailTD[1] = priv->apCurrTD[1] = &priv->apTD1Rings[0];
714 
715 	return 0;
716 
717 err_free_desc:
718 	while (--i) {
719 		desc = &priv->apTD1Rings[i];
720 		kfree(desc->td_info);
721 	}
722 
723 	return ret;
724 }
725 
726 static void device_free_td0_ring(struct vnt_private *priv)
727 {
728 	int i;
729 
730 	for (i = 0; i < priv->opts.tx_descs[0]; i++) {
731 		struct vnt_tx_desc *desc = &priv->apTD0Rings[i];
732 		struct vnt_td_info *td_info = desc->td_info;
733 
734 		dev_kfree_skb(td_info->skb);
735 		kfree(desc->td_info);
736 	}
737 }
738 
739 static void device_free_td1_ring(struct vnt_private *priv)
740 {
741 	int i;
742 
743 	for (i = 0; i < priv->opts.tx_descs[1]; i++) {
744 		struct vnt_tx_desc *desc = &priv->apTD1Rings[i];
745 		struct vnt_td_info *td_info = desc->td_info;
746 
747 		dev_kfree_skb(td_info->skb);
748 		kfree(desc->td_info);
749 	}
750 }
751 
752 /*-----------------------------------------------------------------*/
753 
754 static int device_rx_srv(struct vnt_private *priv, unsigned int idx)
755 {
756 	struct vnt_rx_desc *rd;
757 	int works = 0;
758 
759 	for (rd = priv->pCurrRD[idx];
760 	     rd->rd0.owner == OWNED_BY_HOST;
761 	     rd = rd->next) {
762 		if (works++ > 15)
763 			break;
764 
765 		if (!rd->rd_info->skb)
766 			break;
767 
768 		if (vnt_receive_frame(priv, rd)) {
769 			if (!device_alloc_rx_buf(priv, rd)) {
770 				dev_err(&priv->pcid->dev,
771 					"can not allocate rx buf\n");
772 				break;
773 			}
774 		}
775 		rd->rd0.owner = OWNED_BY_NIC;
776 	}
777 
778 	priv->pCurrRD[idx] = rd;
779 
780 	return works;
781 }
782 
783 static bool device_alloc_rx_buf(struct vnt_private *priv,
784 				struct vnt_rx_desc *rd)
785 {
786 	struct vnt_rd_info *rd_info = rd->rd_info;
787 
788 	rd_info->skb = dev_alloc_skb((int)priv->rx_buf_sz);
789 	if (!rd_info->skb)
790 		return false;
791 
792 	rd_info->skb_dma =
793 		dma_map_single(&priv->pcid->dev,
794 			       skb_put(rd_info->skb, skb_tailroom(rd_info->skb)),
795 			       priv->rx_buf_sz, DMA_FROM_DEVICE);
796 	if (dma_mapping_error(&priv->pcid->dev, rd_info->skb_dma)) {
797 		dev_kfree_skb(rd_info->skb);
798 		rd_info->skb = NULL;
799 		return false;
800 	}
801 
802 	*((unsigned int *)&rd->rd0) = 0; /* FIX cast */
803 
804 	rd->rd0.res_count = cpu_to_le16(priv->rx_buf_sz);
805 	rd->rd0.owner = OWNED_BY_NIC;
806 	rd->rd1.req_count = cpu_to_le16(priv->rx_buf_sz);
807 	rd->buff_addr = cpu_to_le32(rd_info->skb_dma);
808 
809 	return true;
810 }
811 
812 static void device_free_rx_buf(struct vnt_private *priv,
813 			       struct vnt_rx_desc *rd)
814 {
815 	struct vnt_rd_info *rd_info = rd->rd_info;
816 
817 	dma_unmap_single(&priv->pcid->dev, rd_info->skb_dma,
818 			 priv->rx_buf_sz, DMA_FROM_DEVICE);
819 	dev_kfree_skb(rd_info->skb);
820 }
821 
822 static const u8 fallback_rate0[5][5] = {
823 	{RATE_18M, RATE_18M, RATE_12M, RATE_12M, RATE_12M},
824 	{RATE_24M, RATE_24M, RATE_18M, RATE_12M, RATE_12M},
825 	{RATE_36M, RATE_36M, RATE_24M, RATE_18M, RATE_18M},
826 	{RATE_48M, RATE_48M, RATE_36M, RATE_24M, RATE_24M},
827 	{RATE_54M, RATE_54M, RATE_48M, RATE_36M, RATE_36M}
828 };
829 
830 static const u8 fallback_rate1[5][5] = {
831 	{RATE_18M, RATE_18M, RATE_12M, RATE_6M, RATE_6M},
832 	{RATE_24M, RATE_24M, RATE_18M, RATE_6M, RATE_6M},
833 	{RATE_36M, RATE_36M, RATE_24M, RATE_12M, RATE_12M},
834 	{RATE_48M, RATE_48M, RATE_24M, RATE_12M, RATE_12M},
835 	{RATE_54M, RATE_54M, RATE_36M, RATE_18M, RATE_18M}
836 };
837 
838 static int vnt_int_report_rate(struct vnt_private *priv,
839 			       struct vnt_td_info *context, u8 tsr0, u8 tsr1)
840 {
841 	struct vnt_tx_fifo_head *fifo_head;
842 	struct ieee80211_tx_info *info;
843 	struct ieee80211_rate *rate;
844 	u16 fb_option;
845 	u8 tx_retry = (tsr0 & TSR0_NCR);
846 	s8 idx;
847 
848 	if (!context)
849 		return -ENOMEM;
850 
851 	if (!context->skb)
852 		return -EINVAL;
853 
854 	fifo_head = (struct vnt_tx_fifo_head *)context->buf;
855 	fb_option = (le16_to_cpu(fifo_head->fifo_ctl) &
856 			(FIFOCTL_AUTO_FB_0 | FIFOCTL_AUTO_FB_1));
857 
858 	info = IEEE80211_SKB_CB(context->skb);
859 	idx = info->control.rates[0].idx;
860 
861 	if (fb_option && !(tsr1 & TSR1_TERR)) {
862 		u8 tx_rate;
863 		u8 retry = tx_retry;
864 
865 		rate = ieee80211_get_tx_rate(priv->hw, info);
866 		tx_rate = rate->hw_value - RATE_18M;
867 
868 		if (retry > 4)
869 			retry = 4;
870 
871 		if (fb_option & FIFOCTL_AUTO_FB_0)
872 			tx_rate = fallback_rate0[tx_rate][retry];
873 		else if (fb_option & FIFOCTL_AUTO_FB_1)
874 			tx_rate = fallback_rate1[tx_rate][retry];
875 
876 		if (info->band == NL80211_BAND_5GHZ)
877 			idx = tx_rate - RATE_6M;
878 		else
879 			idx = tx_rate;
880 	}
881 
882 	ieee80211_tx_info_clear_status(info);
883 
884 	info->status.rates[0].count = tx_retry;
885 
886 	if (!(tsr1 & TSR1_TERR)) {
887 		info->status.rates[0].idx = idx;
888 
889 		if (info->flags & IEEE80211_TX_CTL_NO_ACK)
890 			info->flags |= IEEE80211_TX_STAT_NOACK_TRANSMITTED;
891 		else
892 			info->flags |= IEEE80211_TX_STAT_ACK;
893 	}
894 
895 	return 0;
896 }
897 
898 static int device_tx_srv(struct vnt_private *priv, unsigned int idx)
899 {
900 	struct vnt_tx_desc *desc;
901 	int                      works = 0;
902 	unsigned char byTsr0;
903 	unsigned char byTsr1;
904 
905 	for (desc = priv->apTailTD[idx]; priv->iTDUsed[idx] > 0; desc = desc->next) {
906 		if (desc->td0.owner == OWNED_BY_NIC)
907 			break;
908 		if (works++ > 15)
909 			break;
910 
911 		byTsr0 = desc->td0.tsr0;
912 		byTsr1 = desc->td0.tsr1;
913 
914 		/* Only the status of first TD in the chain is correct */
915 		if (desc->td1.tcr & TCR_STP) {
916 			if ((desc->td_info->flags & TD_FLAGS_NETIF_SKB) != 0) {
917 				if (!(byTsr1 & TSR1_TERR)) {
918 					if (byTsr0 != 0) {
919 						pr_debug(" Tx[%d] OK but has error. tsr1[%02X] tsr0[%02X]\n",
920 							 (int)idx, byTsr1,
921 							 byTsr0);
922 					}
923 				} else {
924 					pr_debug(" Tx[%d] dropped & tsr1[%02X] tsr0[%02X]\n",
925 						 (int)idx, byTsr1, byTsr0);
926 				}
927 			}
928 
929 			if (byTsr1 & TSR1_TERR) {
930 				if ((desc->td_info->flags & TD_FLAGS_PRIV_SKB) != 0) {
931 					pr_debug(" Tx[%d] fail has error. tsr1[%02X] tsr0[%02X]\n",
932 						 (int)idx, byTsr1, byTsr0);
933 				}
934 			}
935 
936 			vnt_int_report_rate(priv, desc->td_info, byTsr0, byTsr1);
937 
938 			device_free_tx_buf(priv, desc);
939 			priv->iTDUsed[idx]--;
940 		}
941 	}
942 
943 	priv->apTailTD[idx] = desc;
944 
945 	return works;
946 }
947 
948 static void device_error(struct vnt_private *priv, unsigned short status)
949 {
950 	if (status & ISR_FETALERR) {
951 		dev_err(&priv->pcid->dev, "Hardware fatal error\n");
952 
953 		MACbShutdown(priv);
954 		return;
955 	}
956 }
957 
958 static void device_free_tx_buf(struct vnt_private *priv,
959 			       struct vnt_tx_desc *desc)
960 {
961 	struct vnt_td_info *td_info = desc->td_info;
962 	struct sk_buff *skb = td_info->skb;
963 
964 	if (skb)
965 		ieee80211_tx_status_irqsafe(priv->hw, skb);
966 
967 	td_info->skb = NULL;
968 	td_info->flags = 0;
969 }
970 
971 static void vnt_check_bb_vga(struct vnt_private *priv)
972 {
973 	long dbm;
974 	int i;
975 
976 	if (!priv->bUpdateBBVGA)
977 		return;
978 
979 	if (priv->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)
980 		return;
981 
982 	if (!(priv->vif->bss_conf.assoc && priv->current_rssi))
983 		return;
984 
985 	RFvRSSITodBm(priv, (u8)priv->current_rssi, &dbm);
986 
987 	for (i = 0; i < BB_VGA_LEVEL; i++) {
988 		if (dbm < priv->dbm_threshold[i]) {
989 			priv->byBBVGANew = priv->abyBBVGA[i];
990 			break;
991 		}
992 	}
993 
994 	if (priv->byBBVGANew == priv->byBBVGACurrent) {
995 		priv->uBBVGADiffCount = 1;
996 		return;
997 	}
998 
999 	priv->uBBVGADiffCount++;
1000 
1001 	if (priv->uBBVGADiffCount == 1) {
1002 		/* first VGA diff gain */
1003 		bb_set_vga_gain_offset(priv, priv->byBBVGANew);
1004 
1005 		dev_dbg(&priv->pcid->dev,
1006 			"First RSSI[%d] NewGain[%d] OldGain[%d] Count[%d]\n",
1007 			(int)dbm, priv->byBBVGANew,
1008 			priv->byBBVGACurrent,
1009 			(int)priv->uBBVGADiffCount);
1010 	}
1011 
1012 	if (priv->uBBVGADiffCount >= BB_VGA_CHANGE_THRESHOLD) {
1013 		dev_dbg(&priv->pcid->dev,
1014 			"RSSI[%d] NewGain[%d] OldGain[%d] Count[%d]\n",
1015 			(int)dbm, priv->byBBVGANew,
1016 			priv->byBBVGACurrent,
1017 			(int)priv->uBBVGADiffCount);
1018 
1019 		bb_set_vga_gain_offset(priv, priv->byBBVGANew);
1020 	}
1021 }
1022 
1023 static void vnt_interrupt_process(struct vnt_private *priv)
1024 {
1025 	struct ieee80211_low_level_stats *low_stats = &priv->low_stats;
1026 	int             max_count = 0;
1027 	u32 mib_counter;
1028 	u32 isr;
1029 	unsigned long flags;
1030 
1031 	isr = ioread32(priv->port_offset + MAC_REG_ISR);
1032 
1033 	if (isr == 0)
1034 		return;
1035 
1036 	if (isr == 0xffffffff) {
1037 		pr_debug("isr = 0xffff\n");
1038 		return;
1039 	}
1040 
1041 	spin_lock_irqsave(&priv->lock, flags);
1042 
1043 	/* Read low level stats */
1044 	mib_counter = ioread32(priv->port_offset + MAC_REG_MIBCNTR);
1045 
1046 	low_stats->dot11RTSSuccessCount += mib_counter & 0xff;
1047 	low_stats->dot11RTSFailureCount += (mib_counter >> 8) & 0xff;
1048 	low_stats->dot11ACKFailureCount += (mib_counter >> 16) & 0xff;
1049 	low_stats->dot11FCSErrorCount += (mib_counter >> 24) & 0xff;
1050 
1051 	/*
1052 	 * TBD....
1053 	 * Must do this after doing rx/tx, cause ISR bit is slow
1054 	 * than RD/TD write back
1055 	 * update ISR counter
1056 	 */
1057 	while (isr && priv->vif) {
1058 		MACvWriteISR(priv->port_offset, isr);
1059 
1060 		if (isr & ISR_FETALERR) {
1061 			pr_debug(" ISR_FETALERR\n");
1062 			iowrite8(0, priv->port_offset + MAC_REG_SOFTPWRCTL);
1063 			VNSvOutPortW(priv->port_offset +
1064 				     MAC_REG_SOFTPWRCTL, SOFTPWRCTL_SWPECTI);
1065 			device_error(priv, isr);
1066 		}
1067 
1068 		if (isr & ISR_TBTT) {
1069 			if (priv->op_mode != NL80211_IFTYPE_ADHOC)
1070 				vnt_check_bb_vga(priv);
1071 
1072 			priv->bBeaconSent = false;
1073 			if (priv->bEnablePSMode)
1074 				PSbIsNextTBTTWakeUp((void *)priv);
1075 
1076 			if ((priv->op_mode == NL80211_IFTYPE_AP ||
1077 			    priv->op_mode == NL80211_IFTYPE_ADHOC) &&
1078 			    priv->vif->bss_conf.enable_beacon)
1079 				MACvOneShotTimer1MicroSec(priv,
1080 							  (priv->vif->bss_conf.beacon_int -
1081 							   MAKE_BEACON_RESERVED) << 10);
1082 
1083 			/* TODO: adhoc PS mode */
1084 		}
1085 
1086 		if (isr & ISR_BNTX) {
1087 			if (priv->op_mode == NL80211_IFTYPE_ADHOC) {
1088 				priv->bIsBeaconBufReadySet = false;
1089 				priv->cbBeaconBufReadySetCnt = 0;
1090 			}
1091 
1092 			priv->bBeaconSent = true;
1093 		}
1094 
1095 		if (isr & ISR_RXDMA0)
1096 			max_count += device_rx_srv(priv, TYPE_RXDMA0);
1097 
1098 		if (isr & ISR_RXDMA1)
1099 			max_count += device_rx_srv(priv, TYPE_RXDMA1);
1100 
1101 		if (isr & ISR_TXDMA0)
1102 			max_count += device_tx_srv(priv, TYPE_TXDMA0);
1103 
1104 		if (isr & ISR_AC0DMA)
1105 			max_count += device_tx_srv(priv, TYPE_AC0DMA);
1106 
1107 		if (isr & ISR_SOFTTIMER1) {
1108 			if (priv->vif->bss_conf.enable_beacon)
1109 				vnt_beacon_make(priv, priv->vif);
1110 		}
1111 
1112 		/* If both buffers available wake the queue */
1113 		if (AVAIL_TD(priv, TYPE_TXDMA0) &&
1114 		    AVAIL_TD(priv, TYPE_AC0DMA) &&
1115 		    ieee80211_queue_stopped(priv->hw, 0))
1116 			ieee80211_wake_queues(priv->hw);
1117 
1118 		isr = ioread32(priv->port_offset + MAC_REG_ISR);
1119 
1120 		MACvReceive0(priv->port_offset);
1121 		MACvReceive1(priv->port_offset);
1122 
1123 		if (max_count > priv->opts.int_works)
1124 			break;
1125 	}
1126 
1127 	spin_unlock_irqrestore(&priv->lock, flags);
1128 }
1129 
1130 static void vnt_interrupt_work(struct work_struct *work)
1131 {
1132 	struct vnt_private *priv =
1133 		container_of(work, struct vnt_private, interrupt_work);
1134 
1135 	if (priv->vif)
1136 		vnt_interrupt_process(priv);
1137 
1138 	MACvIntEnable(priv->port_offset, IMR_MASK_VALUE);
1139 }
1140 
1141 static irqreturn_t vnt_interrupt(int irq,  void *arg)
1142 {
1143 	struct vnt_private *priv = arg;
1144 
1145 	schedule_work(&priv->interrupt_work);
1146 
1147 	MACvIntDisable(priv->port_offset);
1148 
1149 	return IRQ_HANDLED;
1150 }
1151 
1152 static int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb)
1153 {
1154 	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1155 	struct vnt_tx_desc *head_td;
1156 	u32 dma_idx;
1157 	unsigned long flags;
1158 
1159 	spin_lock_irqsave(&priv->lock, flags);
1160 
1161 	if (ieee80211_is_data(hdr->frame_control))
1162 		dma_idx = TYPE_AC0DMA;
1163 	else
1164 		dma_idx = TYPE_TXDMA0;
1165 
1166 	if (AVAIL_TD(priv, dma_idx) < 1) {
1167 		spin_unlock_irqrestore(&priv->lock, flags);
1168 		ieee80211_stop_queues(priv->hw);
1169 		return -ENOMEM;
1170 	}
1171 
1172 	head_td = priv->apCurrTD[dma_idx];
1173 
1174 	head_td->td1.tcr = 0;
1175 
1176 	head_td->td_info->skb = skb;
1177 
1178 	if (dma_idx == TYPE_AC0DMA)
1179 		head_td->td_info->flags = TD_FLAGS_NETIF_SKB;
1180 
1181 	priv->apCurrTD[dma_idx] = head_td->next;
1182 
1183 	spin_unlock_irqrestore(&priv->lock, flags);
1184 
1185 	vnt_generate_fifo_header(priv, dma_idx, head_td, skb);
1186 
1187 	spin_lock_irqsave(&priv->lock, flags);
1188 
1189 	priv->bPWBitOn = false;
1190 
1191 	/* Set TSR1 & ReqCount in TxDescHead */
1192 	head_td->td1.tcr |= (TCR_STP | TCR_EDP | EDMSDU);
1193 	head_td->td1.req_count = cpu_to_le16(head_td->td_info->req_count);
1194 
1195 	head_td->buff_addr = cpu_to_le32(head_td->td_info->buf_dma);
1196 
1197 	/* Poll Transmit the adapter */
1198 	wmb();
1199 	head_td->td0.owner = OWNED_BY_NIC;
1200 	wmb(); /* second memory barrier */
1201 
1202 	if (head_td->td_info->flags & TD_FLAGS_NETIF_SKB)
1203 		MACvTransmitAC0(priv->port_offset);
1204 	else
1205 		MACvTransmit0(priv->port_offset);
1206 
1207 	priv->iTDUsed[dma_idx]++;
1208 
1209 	spin_unlock_irqrestore(&priv->lock, flags);
1210 
1211 	return 0;
1212 }
1213 
1214 static void vnt_tx_80211(struct ieee80211_hw *hw,
1215 			 struct ieee80211_tx_control *control,
1216 			 struct sk_buff *skb)
1217 {
1218 	struct vnt_private *priv = hw->priv;
1219 
1220 	if (vnt_tx_packet(priv, skb))
1221 		ieee80211_free_txskb(hw, skb);
1222 }
1223 
1224 static int vnt_start(struct ieee80211_hw *hw)
1225 {
1226 	struct vnt_private *priv = hw->priv;
1227 	int ret;
1228 
1229 	priv->rx_buf_sz = PKT_BUF_SZ;
1230 	if (!device_init_rings(priv))
1231 		return -ENOMEM;
1232 
1233 	ret = request_irq(priv->pcid->irq, vnt_interrupt,
1234 			  IRQF_SHARED, "vt6655", priv);
1235 	if (ret) {
1236 		dev_dbg(&priv->pcid->dev, "failed to start irq\n");
1237 		goto err_free_rings;
1238 	}
1239 
1240 	dev_dbg(&priv->pcid->dev, "call device init rd0 ring\n");
1241 	ret = device_init_rd0_ring(priv);
1242 	if (ret)
1243 		goto err_free_irq;
1244 	ret = device_init_rd1_ring(priv);
1245 	if (ret)
1246 		goto err_free_rd0_ring;
1247 	ret = device_init_td0_ring(priv);
1248 	if (ret)
1249 		goto err_free_rd1_ring;
1250 	ret = device_init_td1_ring(priv);
1251 	if (ret)
1252 		goto err_free_td0_ring;
1253 
1254 	device_init_registers(priv);
1255 
1256 	dev_dbg(&priv->pcid->dev, "call MACvIntEnable\n");
1257 	MACvIntEnable(priv->port_offset, IMR_MASK_VALUE);
1258 
1259 	ieee80211_wake_queues(hw);
1260 
1261 	return 0;
1262 
1263 err_free_td0_ring:
1264 	device_free_td0_ring(priv);
1265 err_free_rd1_ring:
1266 	device_free_rd1_ring(priv);
1267 err_free_rd0_ring:
1268 	device_free_rd0_ring(priv);
1269 err_free_irq:
1270 	free_irq(priv->pcid->irq, priv);
1271 err_free_rings:
1272 	device_free_rings(priv);
1273 	return ret;
1274 }
1275 
1276 static void vnt_stop(struct ieee80211_hw *hw)
1277 {
1278 	struct vnt_private *priv = hw->priv;
1279 
1280 	ieee80211_stop_queues(hw);
1281 
1282 	cancel_work_sync(&priv->interrupt_work);
1283 
1284 	MACbShutdown(priv);
1285 	MACbSoftwareReset(priv);
1286 	CARDbRadioPowerOff(priv);
1287 
1288 	device_free_td0_ring(priv);
1289 	device_free_td1_ring(priv);
1290 	device_free_rd0_ring(priv);
1291 	device_free_rd1_ring(priv);
1292 	device_free_rings(priv);
1293 
1294 	free_irq(priv->pcid->irq, priv);
1295 }
1296 
1297 static int vnt_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
1298 {
1299 	struct vnt_private *priv = hw->priv;
1300 
1301 	priv->vif = vif;
1302 
1303 	switch (vif->type) {
1304 	case NL80211_IFTYPE_STATION:
1305 		break;
1306 	case NL80211_IFTYPE_ADHOC:
1307 		MACvRegBitsOff(priv->port_offset, MAC_REG_RCR, RCR_UNICAST);
1308 
1309 		MACvRegBitsOn(priv->port_offset, MAC_REG_HOSTCR, HOSTCR_ADHOC);
1310 
1311 		break;
1312 	case NL80211_IFTYPE_AP:
1313 		MACvRegBitsOff(priv->port_offset, MAC_REG_RCR, RCR_UNICAST);
1314 
1315 		MACvRegBitsOn(priv->port_offset, MAC_REG_HOSTCR, HOSTCR_AP);
1316 
1317 		break;
1318 	default:
1319 		return -EOPNOTSUPP;
1320 	}
1321 
1322 	priv->op_mode = vif->type;
1323 
1324 	return 0;
1325 }
1326 
1327 static void vnt_remove_interface(struct ieee80211_hw *hw,
1328 				 struct ieee80211_vif *vif)
1329 {
1330 	struct vnt_private *priv = hw->priv;
1331 
1332 	switch (vif->type) {
1333 	case NL80211_IFTYPE_STATION:
1334 		break;
1335 	case NL80211_IFTYPE_ADHOC:
1336 		MACvRegBitsOff(priv->port_offset, MAC_REG_TCR, TCR_AUTOBCNTX);
1337 		MACvRegBitsOff(priv->port_offset,
1338 			       MAC_REG_TFTCTL, TFTCTL_TSFCNTREN);
1339 		MACvRegBitsOff(priv->port_offset, MAC_REG_HOSTCR, HOSTCR_ADHOC);
1340 		break;
1341 	case NL80211_IFTYPE_AP:
1342 		MACvRegBitsOff(priv->port_offset, MAC_REG_TCR, TCR_AUTOBCNTX);
1343 		MACvRegBitsOff(priv->port_offset,
1344 			       MAC_REG_TFTCTL, TFTCTL_TSFCNTREN);
1345 		MACvRegBitsOff(priv->port_offset, MAC_REG_HOSTCR, HOSTCR_AP);
1346 		break;
1347 	default:
1348 		break;
1349 	}
1350 
1351 	priv->op_mode = NL80211_IFTYPE_UNSPECIFIED;
1352 }
1353 
1354 static int vnt_config(struct ieee80211_hw *hw, u32 changed)
1355 {
1356 	struct vnt_private *priv = hw->priv;
1357 	struct ieee80211_conf *conf = &hw->conf;
1358 	u8 bb_type;
1359 
1360 	if (changed & IEEE80211_CONF_CHANGE_PS) {
1361 		if (conf->flags & IEEE80211_CONF_PS)
1362 			PSvEnablePowerSaving(priv, conf->listen_interval);
1363 		else
1364 			PSvDisablePowerSaving(priv);
1365 	}
1366 
1367 	if ((changed & IEEE80211_CONF_CHANGE_CHANNEL) ||
1368 	    (conf->flags & IEEE80211_CONF_OFFCHANNEL)) {
1369 		set_channel(priv, conf->chandef.chan);
1370 
1371 		if (conf->chandef.chan->band == NL80211_BAND_5GHZ)
1372 			bb_type = BB_TYPE_11A;
1373 		else
1374 			bb_type = BB_TYPE_11G;
1375 
1376 		if (priv->byBBType != bb_type) {
1377 			priv->byBBType = bb_type;
1378 
1379 			CARDbSetPhyParameter(priv, priv->byBBType);
1380 		}
1381 	}
1382 
1383 	if (changed & IEEE80211_CONF_CHANGE_POWER) {
1384 		if (priv->byBBType == BB_TYPE_11B)
1385 			priv->wCurrentRate = RATE_1M;
1386 		else
1387 			priv->wCurrentRate = RATE_54M;
1388 
1389 		RFbSetPower(priv, priv->wCurrentRate,
1390 			    conf->chandef.chan->hw_value);
1391 	}
1392 
1393 	return 0;
1394 }
1395 
1396 static void vnt_bss_info_changed(struct ieee80211_hw *hw,
1397 				 struct ieee80211_vif *vif,
1398 				 struct ieee80211_bss_conf *conf, u32 changed)
1399 {
1400 	struct vnt_private *priv = hw->priv;
1401 
1402 	priv->current_aid = conf->aid;
1403 
1404 	if (changed & BSS_CHANGED_BSSID && conf->bssid) {
1405 		unsigned long flags;
1406 
1407 		spin_lock_irqsave(&priv->lock, flags);
1408 
1409 		MACvWriteBSSIDAddress(priv->port_offset, conf->bssid);
1410 
1411 		spin_unlock_irqrestore(&priv->lock, flags);
1412 	}
1413 
1414 	if (changed & BSS_CHANGED_BASIC_RATES) {
1415 		priv->basic_rates = conf->basic_rates;
1416 
1417 		CARDvUpdateBasicTopRate(priv);
1418 
1419 		dev_dbg(&priv->pcid->dev,
1420 			"basic rates %x\n", conf->basic_rates);
1421 	}
1422 
1423 	if (changed & BSS_CHANGED_ERP_PREAMBLE) {
1424 		if (conf->use_short_preamble) {
1425 			MACvEnableBarkerPreambleMd(priv->port_offset);
1426 			priv->preamble_type = true;
1427 		} else {
1428 			MACvDisableBarkerPreambleMd(priv->port_offset);
1429 			priv->preamble_type = false;
1430 		}
1431 	}
1432 
1433 	if (changed & BSS_CHANGED_ERP_CTS_PROT) {
1434 		if (conf->use_cts_prot)
1435 			MACvEnableProtectMD(priv->port_offset);
1436 		else
1437 			MACvDisableProtectMD(priv->port_offset);
1438 	}
1439 
1440 	if (changed & BSS_CHANGED_ERP_SLOT) {
1441 		if (conf->use_short_slot)
1442 			priv->short_slot_time = true;
1443 		else
1444 			priv->short_slot_time = false;
1445 
1446 		CARDbSetPhyParameter(priv, priv->byBBType);
1447 		bb_set_vga_gain_offset(priv, priv->abyBBVGA[0]);
1448 	}
1449 
1450 	if (changed & BSS_CHANGED_TXPOWER)
1451 		RFbSetPower(priv, priv->wCurrentRate,
1452 			    conf->chandef.chan->hw_value);
1453 
1454 	if (changed & BSS_CHANGED_BEACON_ENABLED) {
1455 		dev_dbg(&priv->pcid->dev,
1456 			"Beacon enable %d\n", conf->enable_beacon);
1457 
1458 		if (conf->enable_beacon) {
1459 			vnt_beacon_enable(priv, vif, conf);
1460 
1461 			MACvRegBitsOn(priv->port_offset, MAC_REG_TCR,
1462 				      TCR_AUTOBCNTX);
1463 		} else {
1464 			MACvRegBitsOff(priv->port_offset, MAC_REG_TCR,
1465 				       TCR_AUTOBCNTX);
1466 		}
1467 	}
1468 
1469 	if (changed & (BSS_CHANGED_ASSOC | BSS_CHANGED_BEACON_INFO) &&
1470 	    priv->op_mode != NL80211_IFTYPE_AP) {
1471 		if (conf->assoc && conf->beacon_rate) {
1472 			CARDbUpdateTSF(priv, conf->beacon_rate->hw_value,
1473 				       conf->sync_tsf);
1474 
1475 			CARDbSetBeaconPeriod(priv, conf->beacon_int);
1476 
1477 			CARDvSetFirstNextTBTT(priv, conf->beacon_int);
1478 		} else {
1479 			iowrite8(TFTCTL_TSFCNTRST, priv->port_offset + MAC_REG_TFTCTL);
1480 			iowrite8(TFTCTL_TSFCNTREN, priv->port_offset + MAC_REG_TFTCTL);
1481 		}
1482 	}
1483 }
1484 
1485 static u64 vnt_prepare_multicast(struct ieee80211_hw *hw,
1486 				 struct netdev_hw_addr_list *mc_list)
1487 {
1488 	struct vnt_private *priv = hw->priv;
1489 	struct netdev_hw_addr *ha;
1490 	u64 mc_filter = 0;
1491 	u32 bit_nr = 0;
1492 
1493 	netdev_hw_addr_list_for_each(ha, mc_list) {
1494 		bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26;
1495 
1496 		mc_filter |= 1ULL << (bit_nr & 0x3f);
1497 	}
1498 
1499 	priv->mc_list_count = mc_list->count;
1500 
1501 	return mc_filter;
1502 }
1503 
1504 static void vnt_configure(struct ieee80211_hw *hw,
1505 			  unsigned int changed_flags,
1506 			  unsigned int *total_flags, u64 multicast)
1507 {
1508 	struct vnt_private *priv = hw->priv;
1509 	u8 rx_mode = 0;
1510 
1511 	*total_flags &= FIF_ALLMULTI | FIF_OTHER_BSS | FIF_BCN_PRBRESP_PROMISC;
1512 
1513 	rx_mode = ioread8(priv->port_offset + MAC_REG_RCR);
1514 
1515 	dev_dbg(&priv->pcid->dev, "rx mode in = %x\n", rx_mode);
1516 
1517 	if (changed_flags & FIF_ALLMULTI) {
1518 		if (*total_flags & FIF_ALLMULTI) {
1519 			unsigned long flags;
1520 
1521 			spin_lock_irqsave(&priv->lock, flags);
1522 
1523 			if (priv->mc_list_count > 2) {
1524 				MACvSelectPage1(priv->port_offset);
1525 
1526 				VNSvOutPortD(priv->port_offset +
1527 					     MAC_REG_MAR0, 0xffffffff);
1528 				VNSvOutPortD(priv->port_offset +
1529 					    MAC_REG_MAR0 + 4, 0xffffffff);
1530 
1531 				MACvSelectPage0(priv->port_offset);
1532 			} else {
1533 				MACvSelectPage1(priv->port_offset);
1534 
1535 				VNSvOutPortD(priv->port_offset +
1536 					     MAC_REG_MAR0, (u32)multicast);
1537 				VNSvOutPortD(priv->port_offset +
1538 					     MAC_REG_MAR0 + 4,
1539 					     (u32)(multicast >> 32));
1540 
1541 				MACvSelectPage0(priv->port_offset);
1542 			}
1543 
1544 			spin_unlock_irqrestore(&priv->lock, flags);
1545 
1546 			rx_mode |= RCR_MULTICAST | RCR_BROADCAST;
1547 		} else {
1548 			rx_mode &= ~(RCR_MULTICAST | RCR_BROADCAST);
1549 		}
1550 	}
1551 
1552 	if (changed_flags & (FIF_OTHER_BSS | FIF_BCN_PRBRESP_PROMISC)) {
1553 		rx_mode |= RCR_MULTICAST | RCR_BROADCAST;
1554 
1555 		if (*total_flags & (FIF_OTHER_BSS | FIF_BCN_PRBRESP_PROMISC))
1556 			rx_mode &= ~RCR_BSSID;
1557 		else
1558 			rx_mode |= RCR_BSSID;
1559 	}
1560 
1561 	iowrite8(rx_mode, priv->port_offset + MAC_REG_RCR);
1562 
1563 	dev_dbg(&priv->pcid->dev, "rx mode out= %x\n", rx_mode);
1564 }
1565 
1566 static int vnt_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1567 		       struct ieee80211_vif *vif, struct ieee80211_sta *sta,
1568 		       struct ieee80211_key_conf *key)
1569 {
1570 	struct vnt_private *priv = hw->priv;
1571 
1572 	switch (cmd) {
1573 	case SET_KEY:
1574 		if (vnt_set_keys(hw, sta, vif, key))
1575 			return -EOPNOTSUPP;
1576 		break;
1577 	case DISABLE_KEY:
1578 		if (test_bit(key->hw_key_idx, &priv->key_entry_inuse))
1579 			clear_bit(key->hw_key_idx, &priv->key_entry_inuse);
1580 		break;
1581 	default:
1582 		break;
1583 	}
1584 
1585 	return 0;
1586 }
1587 
1588 static int vnt_get_stats(struct ieee80211_hw *hw,
1589 			 struct ieee80211_low_level_stats *stats)
1590 {
1591 	struct vnt_private *priv = hw->priv;
1592 
1593 	memcpy(stats, &priv->low_stats, sizeof(*stats));
1594 
1595 	return 0;
1596 }
1597 
1598 static u64 vnt_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
1599 {
1600 	struct vnt_private *priv = hw->priv;
1601 	u64 tsf;
1602 
1603 	tsf = vt6655_get_current_tsf(priv);
1604 
1605 	return tsf;
1606 }
1607 
1608 static void vnt_set_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
1609 			u64 tsf)
1610 {
1611 	struct vnt_private *priv = hw->priv;
1612 
1613 	CARDvUpdateNextTBTT(priv, tsf, vif->bss_conf.beacon_int);
1614 }
1615 
1616 static void vnt_reset_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
1617 {
1618 	struct vnt_private *priv = hw->priv;
1619 
1620 	/* reset TSF counter */
1621 	iowrite8(TFTCTL_TSFCNTRST, priv->port_offset + MAC_REG_TFTCTL);
1622 }
1623 
1624 static const struct ieee80211_ops vnt_mac_ops = {
1625 	.tx			= vnt_tx_80211,
1626 	.start			= vnt_start,
1627 	.stop			= vnt_stop,
1628 	.add_interface		= vnt_add_interface,
1629 	.remove_interface	= vnt_remove_interface,
1630 	.config			= vnt_config,
1631 	.bss_info_changed	= vnt_bss_info_changed,
1632 	.prepare_multicast	= vnt_prepare_multicast,
1633 	.configure_filter	= vnt_configure,
1634 	.set_key		= vnt_set_key,
1635 	.get_stats		= vnt_get_stats,
1636 	.get_tsf		= vnt_get_tsf,
1637 	.set_tsf		= vnt_set_tsf,
1638 	.reset_tsf		= vnt_reset_tsf,
1639 };
1640 
1641 static int vnt_init(struct vnt_private *priv)
1642 {
1643 	SET_IEEE80211_PERM_ADDR(priv->hw, priv->abyCurrentNetAddr);
1644 
1645 	vnt_init_bands(priv);
1646 
1647 	if (ieee80211_register_hw(priv->hw))
1648 		return -ENODEV;
1649 
1650 	priv->mac_hw = true;
1651 
1652 	CARDbRadioPowerOff(priv);
1653 
1654 	return 0;
1655 }
1656 
1657 static int
1658 vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent)
1659 {
1660 	struct vnt_private *priv;
1661 	struct ieee80211_hw *hw;
1662 	struct wiphy *wiphy;
1663 	int         rc;
1664 
1665 	dev_notice(&pcid->dev,
1666 		   "%s Ver. %s\n", DEVICE_FULL_DRV_NAM, DEVICE_VERSION);
1667 
1668 	dev_notice(&pcid->dev,
1669 		   "Copyright (c) 2003 VIA Networking Technologies, Inc.\n");
1670 
1671 	hw = ieee80211_alloc_hw(sizeof(*priv), &vnt_mac_ops);
1672 	if (!hw) {
1673 		dev_err(&pcid->dev, "could not register ieee80211_hw\n");
1674 		return -ENOMEM;
1675 	}
1676 
1677 	priv = hw->priv;
1678 	priv->pcid = pcid;
1679 
1680 	spin_lock_init(&priv->lock);
1681 
1682 	priv->hw = hw;
1683 
1684 	SET_IEEE80211_DEV(priv->hw, &pcid->dev);
1685 
1686 	if (pci_enable_device(pcid)) {
1687 		device_free_info(priv);
1688 		return -ENODEV;
1689 	}
1690 
1691 	dev_dbg(&pcid->dev,
1692 		"Before get pci_info memaddr is %x\n", priv->memaddr);
1693 
1694 	pci_set_master(pcid);
1695 
1696 	priv->memaddr = pci_resource_start(pcid, 0);
1697 	priv->ioaddr = pci_resource_start(pcid, 1);
1698 	priv->port_offset = ioremap(priv->memaddr & PCI_BASE_ADDRESS_MEM_MASK,
1699 				   256);
1700 	if (!priv->port_offset) {
1701 		dev_err(&pcid->dev, ": Failed to IO remapping ..\n");
1702 		device_free_info(priv);
1703 		return -ENODEV;
1704 	}
1705 
1706 	rc = pci_request_regions(pcid, DEVICE_NAME);
1707 	if (rc) {
1708 		dev_err(&pcid->dev, ": Failed to find PCI device\n");
1709 		device_free_info(priv);
1710 		return -ENODEV;
1711 	}
1712 
1713 	if (dma_set_mask(&pcid->dev, DMA_BIT_MASK(32))) {
1714 		dev_err(&pcid->dev, ": Failed to set dma 32 bit mask\n");
1715 		device_free_info(priv);
1716 		return -ENODEV;
1717 	}
1718 
1719 	INIT_WORK(&priv->interrupt_work, vnt_interrupt_work);
1720 
1721 	/* do reset */
1722 	if (!MACbSoftwareReset(priv)) {
1723 		dev_err(&pcid->dev, ": Failed to access MAC hardware..\n");
1724 		device_free_info(priv);
1725 		return -ENODEV;
1726 	}
1727 	/* initial to reload eeprom */
1728 	MACvInitialize(priv);
1729 	MACvReadEtherAddress(priv->port_offset, priv->abyCurrentNetAddr);
1730 
1731 	/* Get RFType */
1732 	priv->byRFType = SROMbyReadEmbedded(priv->port_offset, EEP_OFS_RFTYPE);
1733 	priv->byRFType &= RF_MASK;
1734 
1735 	dev_dbg(&pcid->dev, "RF Type = %x\n", priv->byRFType);
1736 
1737 	device_get_options(priv);
1738 	device_set_options(priv);
1739 
1740 	wiphy = priv->hw->wiphy;
1741 
1742 	wiphy->frag_threshold = FRAG_THRESH_DEF;
1743 	wiphy->rts_threshold = RTS_THRESH_DEF;
1744 	wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
1745 		BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP);
1746 
1747 	ieee80211_hw_set(priv->hw, TIMING_BEACON_ONLY);
1748 	ieee80211_hw_set(priv->hw, SIGNAL_DBM);
1749 	ieee80211_hw_set(priv->hw, RX_INCLUDES_FCS);
1750 	ieee80211_hw_set(priv->hw, REPORTS_TX_ACK_STATUS);
1751 	ieee80211_hw_set(priv->hw, SUPPORTS_PS);
1752 
1753 	priv->hw->max_signal = 100;
1754 
1755 	if (vnt_init(priv)) {
1756 		device_free_info(priv);
1757 		return -ENODEV;
1758 	}
1759 
1760 	device_print_info(priv);
1761 	pci_set_drvdata(pcid, priv);
1762 
1763 	return 0;
1764 }
1765 
1766 /*------------------------------------------------------------------*/
1767 
1768 static int __maybe_unused vt6655_suspend(struct device *dev_d)
1769 {
1770 	struct vnt_private *priv = dev_get_drvdata(dev_d);
1771 	unsigned long flags;
1772 
1773 	spin_lock_irqsave(&priv->lock, flags);
1774 
1775 	MACbShutdown(priv);
1776 
1777 	spin_unlock_irqrestore(&priv->lock, flags);
1778 
1779 	return 0;
1780 }
1781 
1782 static int __maybe_unused vt6655_resume(struct device *dev_d)
1783 {
1784 	device_wakeup_disable(dev_d);
1785 
1786 	return 0;
1787 }
1788 
1789 MODULE_DEVICE_TABLE(pci, vt6655_pci_id_table);
1790 
1791 static SIMPLE_DEV_PM_OPS(vt6655_pm_ops, vt6655_suspend, vt6655_resume);
1792 
1793 static struct pci_driver device_driver = {
1794 	.name = DEVICE_NAME,
1795 	.id_table = vt6655_pci_id_table,
1796 	.probe = vt6655_probe,
1797 	.remove = vt6655_remove,
1798 	.driver.pm = &vt6655_pm_ops,
1799 };
1800 
1801 module_pci_driver(device_driver);
1802