0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039 #include "mac.h"
0040
0041 void vt6655_mac_reg_bits_on(void __iomem *iobase, const u8 reg_offset, const u8 bit_mask)
0042 {
0043 unsigned char reg_value;
0044
0045 reg_value = ioread8(iobase + reg_offset);
0046 iowrite8(reg_value | bit_mask, iobase + reg_offset);
0047 }
0048
0049 void vt6655_mac_word_reg_bits_on(void __iomem *iobase, const u8 reg_offset, const u16 bit_mask)
0050 {
0051 unsigned short reg_value;
0052
0053 reg_value = ioread16(iobase + reg_offset);
0054 iowrite16(reg_value | (bit_mask), iobase + reg_offset);
0055 }
0056
0057 void vt6655_mac_reg_bits_off(void __iomem *iobase, const u8 reg_offset, const u8 bit_mask)
0058 {
0059 unsigned char reg_value;
0060
0061 reg_value = ioread8(iobase + reg_offset);
0062 iowrite8(reg_value & ~(bit_mask), iobase + reg_offset);
0063 }
0064
0065 void vt6655_mac_word_reg_bits_off(void __iomem *iobase, const u8 reg_offset, const u16 bit_mask)
0066 {
0067 unsigned short reg_value;
0068
0069 reg_value = ioread16(iobase + reg_offset);
0070 iowrite16(reg_value & ~(bit_mask), iobase + reg_offset);
0071 }
0072
0073 static void vt6655_mac_clear_stck_ds(void __iomem *iobase)
0074 {
0075 u8 reg_value;
0076
0077 reg_value = ioread8(iobase + MAC_REG_STICKHW);
0078 reg_value = reg_value & 0xFC;
0079 iowrite8(reg_value, iobase + MAC_REG_STICKHW);
0080 }
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097 bool MACbIsRegBitsOff(struct vnt_private *priv, unsigned char byRegOfs,
0098 unsigned char byTestBits)
0099 {
0100 void __iomem *io_base = priv->port_offset;
0101
0102 return !(ioread8(io_base + byRegOfs) & byTestBits);
0103 }
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118 bool MACbIsIntDisable(struct vnt_private *priv)
0119 {
0120 void __iomem *io_base = priv->port_offset;
0121
0122 if (ioread32(io_base + MAC_REG_IMR))
0123 return false;
0124
0125 return true;
0126 }
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142 void MACvSetShortRetryLimit(struct vnt_private *priv,
0143 unsigned char byRetryLimit)
0144 {
0145 void __iomem *io_base = priv->port_offset;
0146
0147 iowrite8(byRetryLimit, io_base + MAC_REG_SRT);
0148 }
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164 void MACvSetLongRetryLimit(struct vnt_private *priv,
0165 unsigned char byRetryLimit)
0166 {
0167 void __iomem *io_base = priv->port_offset;
0168
0169 iowrite8(byRetryLimit, io_base + MAC_REG_LRT);
0170 }
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186 void MACvSetLoopbackMode(struct vnt_private *priv, unsigned char byLoopbackMode)
0187 {
0188 void __iomem *io_base = priv->port_offset;
0189
0190 byLoopbackMode <<= 6;
0191
0192 iowrite8((ioread8(io_base + MAC_REG_TEST) & 0x3f) | byLoopbackMode,
0193 io_base + MAC_REG_TEST);
0194 }
0195
0196
0197
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209 void MACvSaveContext(struct vnt_private *priv, unsigned char *cxt_buf)
0210 {
0211 void __iomem *io_base = priv->port_offset;
0212
0213
0214 memcpy_fromio(cxt_buf, io_base, MAC_MAX_CONTEXT_SIZE_PAGE0);
0215
0216 MACvSelectPage1(io_base);
0217
0218
0219 memcpy_fromio(cxt_buf + MAC_MAX_CONTEXT_SIZE_PAGE0, io_base,
0220 MAC_MAX_CONTEXT_SIZE_PAGE1);
0221
0222 MACvSelectPage0(io_base);
0223 }
0224
0225
0226
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239 void MACvRestoreContext(struct vnt_private *priv, unsigned char *cxt_buf)
0240 {
0241 void __iomem *io_base = priv->port_offset;
0242
0243 MACvSelectPage1(io_base);
0244
0245 memcpy_toio(io_base, cxt_buf + MAC_MAX_CONTEXT_SIZE_PAGE0,
0246 MAC_MAX_CONTEXT_SIZE_PAGE1);
0247
0248 MACvSelectPage0(io_base);
0249
0250
0251 memcpy_toio(io_base + MAC_REG_RCR, cxt_buf + MAC_REG_RCR,
0252 MAC_REG_ISR - MAC_REG_RCR);
0253
0254
0255 memcpy_toio(io_base + MAC_REG_LRT, cxt_buf + MAC_REG_LRT,
0256 MAC_REG_PAGE1SEL - MAC_REG_LRT);
0257
0258 iowrite8(*(cxt_buf + MAC_REG_CFG), io_base + MAC_REG_CFG);
0259
0260
0261 memcpy_toio(io_base + MAC_REG_PSCFG, cxt_buf + MAC_REG_PSCFG,
0262 MAC_REG_BBREGCTL - MAC_REG_PSCFG);
0263
0264
0265 iowrite32(*(u32 *)(cxt_buf + MAC_REG_TXDMAPTR0),
0266 io_base + MAC_REG_TXDMAPTR0);
0267 iowrite32(*(u32 *)(cxt_buf + MAC_REG_AC0DMAPTR),
0268 io_base + MAC_REG_AC0DMAPTR);
0269 iowrite32(*(u32 *)(cxt_buf + MAC_REG_BCNDMAPTR),
0270 io_base + MAC_REG_BCNDMAPTR);
0271 iowrite32(*(u32 *)(cxt_buf + MAC_REG_RXDMAPTR0),
0272 io_base + MAC_REG_RXDMAPTR0);
0273 iowrite32(*(u32 *)(cxt_buf + MAC_REG_RXDMAPTR1),
0274 io_base + MAC_REG_RXDMAPTR1);
0275 }
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290 bool MACbSoftwareReset(struct vnt_private *priv)
0291 {
0292 void __iomem *io_base = priv->port_offset;
0293 unsigned short ww;
0294
0295
0296 iowrite8(0x01, io_base + MAC_REG_HOSTCR);
0297
0298 for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
0299 if (!(ioread8(io_base + MAC_REG_HOSTCR) & HOSTCR_SOFTRST))
0300 break;
0301 }
0302 if (ww == W_MAX_TIMEOUT)
0303 return false;
0304 return true;
0305 }
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321 bool MACbSafeSoftwareReset(struct vnt_private *priv)
0322 {
0323 unsigned char abyTmpRegData[MAC_MAX_CONTEXT_SIZE_PAGE0 + MAC_MAX_CONTEXT_SIZE_PAGE1];
0324 bool bRetVal;
0325
0326
0327
0328
0329
0330
0331 MACvSaveContext(priv, abyTmpRegData);
0332
0333 bRetVal = MACbSoftwareReset(priv);
0334
0335 MACvRestoreContext(priv, abyTmpRegData);
0336
0337 return bRetVal;
0338 }
0339
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349
0350
0351
0352
0353 bool MACbSafeRxOff(struct vnt_private *priv)
0354 {
0355 void __iomem *io_base = priv->port_offset;
0356 unsigned short ww;
0357
0358
0359
0360
0361 iowrite32(DMACTL_CLRRUN, io_base + MAC_REG_RXDMACTL0);
0362 iowrite32(DMACTL_CLRRUN, io_base + MAC_REG_RXDMACTL1);
0363 for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
0364 if (!(ioread32(io_base + MAC_REG_RXDMACTL0) & DMACTL_RUN))
0365 break;
0366 }
0367 if (ww == W_MAX_TIMEOUT) {
0368 pr_debug(" DBG_PORT80(0x10)\n");
0369 return false;
0370 }
0371 for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
0372 if (!(ioread32(io_base + MAC_REG_RXDMACTL1) & DMACTL_RUN))
0373 break;
0374 }
0375 if (ww == W_MAX_TIMEOUT) {
0376 pr_debug(" DBG_PORT80(0x11)\n");
0377 return false;
0378 }
0379
0380
0381 vt6655_mac_reg_bits_off(io_base, MAC_REG_HOSTCR, HOSTCR_RXON);
0382
0383 for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
0384 if (!(ioread8(io_base + MAC_REG_HOSTCR) & HOSTCR_RXONST))
0385 break;
0386 }
0387 if (ww == W_MAX_TIMEOUT) {
0388 pr_debug(" DBG_PORT80(0x12)\n");
0389 return false;
0390 }
0391 return true;
0392 }
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406
0407 bool MACbSafeTxOff(struct vnt_private *priv)
0408 {
0409 void __iomem *io_base = priv->port_offset;
0410 unsigned short ww;
0411
0412
0413
0414 iowrite32(DMACTL_CLRRUN, io_base + MAC_REG_TXDMACTL0);
0415
0416 iowrite32(DMACTL_CLRRUN, io_base + MAC_REG_AC0DMACTL);
0417
0418 for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
0419 if (!(ioread32(io_base + MAC_REG_TXDMACTL0) & DMACTL_RUN))
0420 break;
0421 }
0422 if (ww == W_MAX_TIMEOUT) {
0423 pr_debug(" DBG_PORT80(0x20)\n");
0424 return false;
0425 }
0426 for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
0427 if (!(ioread32(io_base + MAC_REG_AC0DMACTL) & DMACTL_RUN))
0428 break;
0429 }
0430 if (ww == W_MAX_TIMEOUT) {
0431 pr_debug(" DBG_PORT80(0x21)\n");
0432 return false;
0433 }
0434
0435
0436 vt6655_mac_reg_bits_off(io_base, MAC_REG_HOSTCR, HOSTCR_TXON);
0437
0438
0439 for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
0440 if (!(ioread8(io_base + MAC_REG_HOSTCR) & HOSTCR_TXONST))
0441 break;
0442 }
0443 if (ww == W_MAX_TIMEOUT) {
0444 pr_debug(" DBG_PORT80(0x24)\n");
0445 return false;
0446 }
0447 return true;
0448 }
0449
0450
0451
0452
0453
0454
0455
0456
0457
0458
0459
0460
0461
0462
0463 bool MACbSafeStop(struct vnt_private *priv)
0464 {
0465 void __iomem *io_base = priv->port_offset;
0466
0467 vt6655_mac_reg_bits_off(io_base, MAC_REG_TCR, TCR_AUTOBCNTX);
0468
0469 if (!MACbSafeRxOff(priv)) {
0470 pr_debug(" MACbSafeRxOff == false)\n");
0471 MACbSafeSoftwareReset(priv);
0472 return false;
0473 }
0474 if (!MACbSafeTxOff(priv)) {
0475 pr_debug(" MACbSafeTxOff == false)\n");
0476 MACbSafeSoftwareReset(priv);
0477 return false;
0478 }
0479
0480 vt6655_mac_reg_bits_off(io_base, MAC_REG_HOSTCR, HOSTCR_MACEN);
0481
0482 return true;
0483 }
0484
0485
0486
0487
0488
0489
0490
0491
0492
0493
0494
0495
0496
0497
0498 bool MACbShutdown(struct vnt_private *priv)
0499 {
0500 void __iomem *io_base = priv->port_offset;
0501
0502 iowrite32(0, io_base + MAC_REG_IMR);
0503 MACvSetLoopbackMode(priv, MAC_LB_INTERNAL);
0504
0505 if (!MACbSafeStop(priv)) {
0506 MACvSetLoopbackMode(priv, MAC_LB_NONE);
0507 return false;
0508 }
0509 MACvSetLoopbackMode(priv, MAC_LB_NONE);
0510 return true;
0511 }
0512
0513
0514
0515
0516
0517
0518
0519
0520
0521
0522
0523
0524
0525
0526 void MACvInitialize(struct vnt_private *priv)
0527 {
0528 void __iomem *io_base = priv->port_offset;
0529
0530 vt6655_mac_clear_stck_ds(io_base);
0531
0532 iowrite8(PME_OVR, io_base + MAC_REG_PMC1);
0533
0534
0535
0536 MACbSoftwareReset(priv);
0537
0538
0539 iowrite8(TFTCTL_TSFCNTRST, io_base + MAC_REG_TFTCTL);
0540
0541 iowrite8(TFTCTL_TSFCNTREN, io_base + MAC_REG_TFTCTL);
0542 }
0543
0544
0545
0546
0547
0548
0549
0550
0551
0552
0553
0554
0555
0556
0557
0558 void MACvSetCurrRx0DescAddr(struct vnt_private *priv, u32 curr_desc_addr)
0559 {
0560 void __iomem *io_base = priv->port_offset;
0561 unsigned short ww;
0562 unsigned char org_dma_ctl;
0563
0564 org_dma_ctl = ioread8(io_base + MAC_REG_RXDMACTL0);
0565 if (org_dma_ctl & DMACTL_RUN)
0566 iowrite8(DMACTL_RUN, io_base + MAC_REG_RXDMACTL0 + 2);
0567
0568 for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
0569 if (!(ioread8(io_base + MAC_REG_RXDMACTL0) & DMACTL_RUN))
0570 break;
0571 }
0572
0573 iowrite32(curr_desc_addr, io_base + MAC_REG_RXDMAPTR0);
0574 if (org_dma_ctl & DMACTL_RUN)
0575 iowrite8(DMACTL_RUN, io_base + MAC_REG_RXDMACTL0);
0576 }
0577
0578
0579
0580
0581
0582
0583
0584
0585
0586
0587
0588
0589
0590
0591
0592 void MACvSetCurrRx1DescAddr(struct vnt_private *priv, u32 curr_desc_addr)
0593 {
0594 void __iomem *io_base = priv->port_offset;
0595 unsigned short ww;
0596 unsigned char org_dma_ctl;
0597
0598 org_dma_ctl = ioread8(io_base + MAC_REG_RXDMACTL1);
0599 if (org_dma_ctl & DMACTL_RUN)
0600 iowrite8(DMACTL_RUN, io_base + MAC_REG_RXDMACTL1 + 2);
0601
0602 for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
0603 if (!(ioread8(io_base + MAC_REG_RXDMACTL1) & DMACTL_RUN))
0604 break;
0605 }
0606
0607 iowrite32(curr_desc_addr, io_base + MAC_REG_RXDMAPTR1);
0608 if (org_dma_ctl & DMACTL_RUN)
0609 iowrite8(DMACTL_RUN, io_base + MAC_REG_RXDMACTL1);
0610 }
0611
0612
0613
0614
0615
0616
0617
0618
0619
0620
0621
0622
0623
0624
0625
0626 void MACvSetCurrTx0DescAddrEx(struct vnt_private *priv,
0627 u32 curr_desc_addr)
0628 {
0629 void __iomem *io_base = priv->port_offset;
0630 unsigned short ww;
0631 unsigned char org_dma_ctl;
0632
0633 org_dma_ctl = ioread8(io_base + MAC_REG_TXDMACTL0);
0634 if (org_dma_ctl & DMACTL_RUN)
0635 iowrite8(DMACTL_RUN, io_base + MAC_REG_TXDMACTL0 + 2);
0636
0637 for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
0638 if (!(ioread8(io_base + MAC_REG_TXDMACTL0) & DMACTL_RUN))
0639 break;
0640 }
0641
0642 iowrite32(curr_desc_addr, io_base + MAC_REG_TXDMAPTR0);
0643 if (org_dma_ctl & DMACTL_RUN)
0644 iowrite8(DMACTL_RUN, io_base + MAC_REG_TXDMACTL0);
0645 }
0646
0647
0648
0649
0650
0651
0652
0653
0654
0655
0656
0657
0658
0659
0660
0661
0662 void MACvSetCurrAC0DescAddrEx(struct vnt_private *priv,
0663 u32 curr_desc_addr)
0664 {
0665 void __iomem *io_base = priv->port_offset;
0666 unsigned short ww;
0667 unsigned char org_dma_ctl;
0668
0669 org_dma_ctl = ioread8(io_base + MAC_REG_AC0DMACTL);
0670 if (org_dma_ctl & DMACTL_RUN)
0671 iowrite8(DMACTL_RUN, io_base + MAC_REG_AC0DMACTL + 2);
0672
0673 for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
0674 if (!(ioread8(io_base + MAC_REG_AC0DMACTL) & DMACTL_RUN))
0675 break;
0676 }
0677 if (ww == W_MAX_TIMEOUT)
0678 pr_debug(" DBG_PORT80(0x26)\n");
0679 iowrite32(curr_desc_addr, io_base + MAC_REG_AC0DMAPTR);
0680 if (org_dma_ctl & DMACTL_RUN)
0681 iowrite8(DMACTL_RUN, io_base + MAC_REG_AC0DMACTL);
0682 }
0683
0684 void MACvSetCurrTXDescAddr(int iTxType, struct vnt_private *priv,
0685 u32 curr_desc_addr)
0686 {
0687 if (iTxType == TYPE_AC0DMA)
0688 MACvSetCurrAC0DescAddrEx(priv, curr_desc_addr);
0689 else if (iTxType == TYPE_TXDMA0)
0690 MACvSetCurrTx0DescAddrEx(priv, curr_desc_addr);
0691 }
0692
0693
0694
0695
0696
0697
0698
0699
0700
0701
0702
0703
0704
0705
0706
0707 void MACvTimer0MicroSDelay(struct vnt_private *priv, unsigned int uDelay)
0708 {
0709 void __iomem *io_base = priv->port_offset;
0710 unsigned char byValue;
0711 unsigned int uu, ii;
0712
0713 iowrite8(0, io_base + MAC_REG_TMCTL0);
0714 iowrite32(uDelay, io_base + MAC_REG_TMDATA0);
0715 iowrite8((TMCTL_TMD | TMCTL_TE), io_base + MAC_REG_TMCTL0);
0716 for (ii = 0; ii < 66; ii++) {
0717 for (uu = 0; uu < uDelay; uu++) {
0718 byValue = ioread8(io_base + MAC_REG_TMCTL0);
0719 if ((byValue == 0) ||
0720 (byValue & TMCTL_TSUSP)) {
0721 iowrite8(0, io_base + MAC_REG_TMCTL0);
0722 return;
0723 }
0724 }
0725 }
0726 iowrite8(0, io_base + MAC_REG_TMCTL0);
0727 }
0728
0729
0730
0731
0732
0733
0734
0735
0736
0737
0738
0739
0740
0741
0742
0743 void MACvOneShotTimer1MicroSec(struct vnt_private *priv,
0744 unsigned int uDelayTime)
0745 {
0746 void __iomem *io_base = priv->port_offset;
0747
0748 iowrite8(0, io_base + MAC_REG_TMCTL1);
0749 iowrite32(uDelayTime, io_base + MAC_REG_TMDATA1);
0750 iowrite8((TMCTL_TMD | TMCTL_TE), io_base + MAC_REG_TMCTL1);
0751 }
0752
0753 void MACvSetMISCFifo(struct vnt_private *priv, unsigned short offset,
0754 u32 data)
0755 {
0756 void __iomem *io_base = priv->port_offset;
0757
0758 if (offset > 273)
0759 return;
0760 iowrite16(offset, io_base + MAC_REG_MISCFFNDEX);
0761 iowrite32(data, io_base + MAC_REG_MISCFFDATA);
0762 iowrite16(MISCFFCTL_WRITE, io_base + MAC_REG_MISCFFCTL);
0763 }
0764
0765 bool MACbPSWakeup(struct vnt_private *priv)
0766 {
0767 void __iomem *io_base = priv->port_offset;
0768 unsigned int ww;
0769
0770 if (MACbIsRegBitsOff(priv, MAC_REG_PSCTL, PSCTL_PS))
0771 return true;
0772
0773
0774 vt6655_mac_reg_bits_off(io_base, MAC_REG_PSCTL, PSCTL_PSEN);
0775
0776
0777 for (ww = 0; ww < W_MAX_TIMEOUT; ww++) {
0778 if (ioread8(io_base + MAC_REG_PSCTL) & PSCTL_WAKEDONE)
0779 break;
0780 }
0781 if (ww == W_MAX_TIMEOUT) {
0782 pr_debug(" DBG_PORT80(0x33)\n");
0783 return false;
0784 }
0785 return true;
0786 }
0787
0788
0789
0790
0791
0792
0793
0794
0795
0796
0797
0798
0799
0800
0801
0802
0803 void MACvSetKeyEntry(struct vnt_private *priv, unsigned short wKeyCtl,
0804 unsigned int uEntryIdx, unsigned int uKeyIdx,
0805 unsigned char *pbyAddr, u32 *pdwKey,
0806 unsigned char local_id)
0807 {
0808 void __iomem *io_base = priv->port_offset;
0809 unsigned short offset;
0810 u32 data;
0811 int ii;
0812
0813 if (local_id <= 1)
0814 return;
0815
0816 offset = MISCFIFO_KEYETRY0;
0817 offset += (uEntryIdx * MISCFIFO_KEYENTRYSIZE);
0818
0819 data = 0;
0820 data |= wKeyCtl;
0821 data <<= 16;
0822 data |= MAKEWORD(*(pbyAddr + 4), *(pbyAddr + 5));
0823 pr_debug("1. offset: %d, Data: %X, KeyCtl:%X\n",
0824 offset, data, wKeyCtl);
0825
0826 iowrite16(offset, io_base + MAC_REG_MISCFFNDEX);
0827 iowrite32(data, io_base + MAC_REG_MISCFFDATA);
0828 iowrite16(MISCFFCTL_WRITE, io_base + MAC_REG_MISCFFCTL);
0829 offset++;
0830
0831 data = 0;
0832 data |= *(pbyAddr + 3);
0833 data <<= 8;
0834 data |= *(pbyAddr + 2);
0835 data <<= 8;
0836 data |= *(pbyAddr + 1);
0837 data <<= 8;
0838 data |= *pbyAddr;
0839 pr_debug("2. offset: %d, Data: %X\n", offset, data);
0840
0841 iowrite16(offset, io_base + MAC_REG_MISCFFNDEX);
0842 iowrite32(data, io_base + MAC_REG_MISCFFDATA);
0843 iowrite16(MISCFFCTL_WRITE, io_base + MAC_REG_MISCFFCTL);
0844 offset++;
0845
0846 offset += (uKeyIdx * 4);
0847 for (ii = 0; ii < 4; ii++) {
0848
0849 pr_debug("3.(%d) offset: %d, Data: %X\n",
0850 ii, offset + ii, *pdwKey);
0851 iowrite16(offset + ii, io_base + MAC_REG_MISCFFNDEX);
0852 iowrite32(*pdwKey++, io_base + MAC_REG_MISCFFDATA);
0853 iowrite16(MISCFFCTL_WRITE, io_base + MAC_REG_MISCFFCTL);
0854 }
0855 }
0856
0857
0858
0859
0860
0861
0862
0863
0864
0865
0866
0867
0868
0869
0870
0871 void MACvDisableKeyEntry(struct vnt_private *priv, unsigned int uEntryIdx)
0872 {
0873 void __iomem *io_base = priv->port_offset;
0874 unsigned short offset;
0875
0876 offset = MISCFIFO_KEYETRY0;
0877 offset += (uEntryIdx * MISCFIFO_KEYENTRYSIZE);
0878
0879 iowrite16(offset, io_base + MAC_REG_MISCFFNDEX);
0880 iowrite32(0, io_base + MAC_REG_MISCFFDATA);
0881 iowrite16(MISCFFCTL_WRITE, io_base + MAC_REG_MISCFFCTL);
0882 }