2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
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.
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.
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.
22 * Purpose: MAC routines
41 //static int msglevel =MSG_LEVEL_DEBUG;
42 static int msglevel =MSG_LEVEL_INFO;
46 * Write MAC Multicast Address Mask
50 * mc_filter (mac filter)
57 void MACvWriteMultiAddr(struct vnt_private *pDevice, u64 mc_filter)
59 __le64 le_mc = cpu_to_le64(mc_filter);
61 CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_WRITE, MAC_REG_MAR0,
62 MESSAGE_REQUEST_MACREG, sizeof(le_mc), (u8 *)&le_mc);
76 void MACbShutdown(struct vnt_private *pDevice)
78 CONTROLnsRequestOutAsyn(pDevice,
79 MESSAGE_TYPE_MACSHUTDOWN,
87 void MACvSetBBType(struct vnt_private *pDevice, u8 byType)
92 pbyData[1] = EnCFG_BBType_MASK;
94 CONTROLnsRequestOut(pDevice,
95 MESSAGE_TYPE_WRITE_MASK,
97 MESSAGE_REQUEST_MACREG,
105 * Disable the Key Entry by MISCFIFO
109 * dwIoBase - Base Address for MAC
117 void MACvDisableKeyEntry(struct vnt_private *pDevice, u32 uEntryIdx)
121 byData = (u8) uEntryIdx;
123 //issue write misc fifo command to device
124 CONTROLnsRequestOut(pDevice,
125 MESSAGE_TYPE_CLRKEYENTRY,
135 * Set the Key by MISCFIFO
139 * dwIoBase - Base Address for MAC
147 void MACvSetKeyEntry(struct vnt_private *pDevice, u16 wKeyCtl, u32 uEntryIdx,
148 u32 uKeyIdx, u8 *pbyAddr, u32 *pdwKey)
152 u32 dwData1, dwData2;
156 if (pDevice->byLocalID <= MAC_REVISION_A1)
157 if (pDevice->vnt_mgmt.byCSSPK == KEY_CTL_CCMP)
160 wOffset = MISCFIFO_KEYETRY0;
161 wOffset += (uEntryIdx * MISCFIFO_KEYENTRYSIZE);
166 dwData1 |= MAKEWORD(*(pbyAddr+4), *(pbyAddr+5));
168 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"1. wOffset: %d, Data: %X,"\
169 " KeyCtl:%X\n", wOffset, dwData1, wKeyCtl);
172 dwData2 |= *(pbyAddr+3);
174 dwData2 |= *(pbyAddr+2);
176 dwData2 |= *(pbyAddr+1);
178 dwData2 |= *(pbyAddr+0);
180 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"2. wOffset: %d, Data: %X\n",
183 pbyKey = (u8 *)pdwKey;
185 pbyData[0] = (u8)dwData1;
186 pbyData[1] = (u8)(dwData1>>8);
187 pbyData[2] = (u8)(dwData1>>16);
188 pbyData[3] = (u8)(dwData1>>24);
189 pbyData[4] = (u8)dwData2;
190 pbyData[5] = (u8)(dwData2>>8);
191 pbyData[6] = (u8)(dwData2>>16);
192 pbyData[7] = (u8)(dwData2>>24);
193 for (ii = 8; ii < 24; ii++)
194 pbyData[ii] = *pbyKey++;
196 CONTROLnsRequestOut(pDevice,
206 void MACvRegBitsOff(struct vnt_private *pDevice, u8 byRegOfs, u8 byBits)
213 CONTROLnsRequestOut(pDevice,
214 MESSAGE_TYPE_WRITE_MASK,
216 MESSAGE_REQUEST_MACREG,
222 void MACvRegBitsOn(struct vnt_private *pDevice, u8 byRegOfs, u8 byBits)
229 CONTROLnsRequestOut(pDevice,
230 MESSAGE_TYPE_WRITE_MASK,
232 MESSAGE_REQUEST_MACREG,
238 void MACvWriteWord(struct vnt_private *pDevice, u8 byRegOfs, u16 wData)
242 pbyData[0] = (u8)(wData & 0xff);
243 pbyData[1] = (u8)(wData >> 8);
245 CONTROLnsRequestOut(pDevice,
248 MESSAGE_REQUEST_MACREG,
255 void MACvWriteBSSIDAddress(struct vnt_private *pDevice, u8 *pbyEtherAddr)
259 pbyData[0] = *((u8 *)pbyEtherAddr);
260 pbyData[1] = *((u8 *)pbyEtherAddr+1);
261 pbyData[2] = *((u8 *)pbyEtherAddr+2);
262 pbyData[3] = *((u8 *)pbyEtherAddr+3);
263 pbyData[4] = *((u8 *)pbyEtherAddr+4);
264 pbyData[5] = *((u8 *)pbyEtherAddr+5);
266 CONTROLnsRequestOut(pDevice,
269 MESSAGE_REQUEST_MACREG,
275 void MACvEnableProtectMD(struct vnt_private *pDevice)
279 pbyData[0] = EnCFG_ProtectMd;
280 pbyData[1] = EnCFG_ProtectMd;
282 CONTROLnsRequestOut(pDevice,
283 MESSAGE_TYPE_WRITE_MASK,
285 MESSAGE_REQUEST_MACREG,
291 void MACvDisableProtectMD(struct vnt_private *pDevice)
296 pbyData[1] = EnCFG_ProtectMd;
298 CONTROLnsRequestOut(pDevice,
299 MESSAGE_TYPE_WRITE_MASK,
301 MESSAGE_REQUEST_MACREG,
307 void MACvEnableBarkerPreambleMd(struct vnt_private *pDevice)
311 pbyData[0] = EnCFG_BarkerPream;
312 pbyData[1] = EnCFG_BarkerPream;
314 CONTROLnsRequestOut(pDevice,
315 MESSAGE_TYPE_WRITE_MASK,
317 MESSAGE_REQUEST_MACREG,
323 void MACvDisableBarkerPreambleMd(struct vnt_private *pDevice)
328 pbyData[1] = EnCFG_BarkerPream;
330 CONTROLnsRequestOut(pDevice,
331 MESSAGE_TYPE_WRITE_MASK,
333 MESSAGE_REQUEST_MACREG,
339 void MACvWriteBeaconInterval(struct vnt_private *pDevice, u16 wInterval)
343 pbyData[0] = (u8)(wInterval & 0xff);
344 pbyData[1] = (u8)(wInterval >> 8);
346 CONTROLnsRequestOut(pDevice,
349 MESSAGE_REQUEST_MACREG,