Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.13-rc4 359 lines 8.5 kB view raw
1/* 2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. 3 * All rights reserved. 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * 20 * File: mac.c 21 * 22 * Purpose: MAC routines 23 * 24 * Author: Tevin Chen 25 * 26 * Date: May 21, 1996 27 * 28 * Functions: 29 * 30 * Revision History: 31 */ 32 33#include "tmacro.h" 34#include "tether.h" 35#include "desc.h" 36#include "mac.h" 37#include "80211hdr.h" 38#include "rndis.h" 39#include "control.h" 40 41//static int msglevel =MSG_LEVEL_DEBUG; 42static int msglevel =MSG_LEVEL_INFO; 43 44/* 45 * Description: 46 * Write MAC Multicast Address Mask 47 * 48 * Parameters: 49 * In: 50 * uByteidx - Index of Mask 51 * byData - Mask Value to write 52 * Out: 53 * none 54 * 55 * Return Value: none 56 * 57 */ 58void MACvWriteMultiAddr(struct vnt_private *pDevice, u32 uByteIdx, u8 byData) 59{ 60 u8 byData1; 61 62 byData1 = byData; 63 CONTROLnsRequestOut(pDevice, 64 MESSAGE_TYPE_WRITE, 65 (u16) (MAC_REG_MAR0 + uByteIdx), 66 MESSAGE_REQUEST_MACREG, 67 1, 68 &byData1); 69} 70 71/* 72 * Description: 73 * Shut Down MAC 74 * 75 * Parameters: 76 * In: 77 * Out: 78 * none 79 * 80 * 81 */ 82void MACbShutdown(struct vnt_private *pDevice) 83{ 84 CONTROLnsRequestOutAsyn(pDevice, 85 MESSAGE_TYPE_MACSHUTDOWN, 86 0, 87 0, 88 0, 89 NULL 90 ); 91} 92 93void MACvSetBBType(struct vnt_private *pDevice, u8 byType) 94{ 95 u8 pbyData[2]; 96 97 pbyData[0] = byType; 98 pbyData[1] = EnCFG_BBType_MASK; 99 100 CONTROLnsRequestOut(pDevice, 101 MESSAGE_TYPE_WRITE_MASK, 102 MAC_REG_ENCFG0, 103 MESSAGE_REQUEST_MACREG, 104 ARRAY_SIZE(pbyData), 105 pbyData 106 ); 107} 108 109/* 110 * Description: 111 * Disable the Key Entry by MISCFIFO 112 * 113 * Parameters: 114 * In: 115 * dwIoBase - Base Address for MAC 116 * 117 * Out: 118 * none 119 * 120 * Return Value: none 121 * 122 */ 123void MACvDisableKeyEntry(struct vnt_private *pDevice, u32 uEntryIdx) 124{ 125 u8 byData; 126 127 byData = (u8) uEntryIdx; 128 129 //issue write misc fifo command to device 130 CONTROLnsRequestOut(pDevice, 131 MESSAGE_TYPE_CLRKEYENTRY, 132 0, 133 0, 134 1, 135 &byData 136 ); 137} 138 139/* 140 * Description: 141 * Set the Key by MISCFIFO 142 * 143 * Parameters: 144 * In: 145 * dwIoBase - Base Address for MAC 146 * 147 * Out: 148 * none 149 * 150 * Return Value: none 151 * 152 */ 153void MACvSetKeyEntry(struct vnt_private *pDevice, u16 wKeyCtl, u32 uEntryIdx, 154 u32 uKeyIdx, u8 *pbyAddr, u32 *pdwKey) 155{ 156 u8 *pbyKey; 157 u16 wOffset; 158 u32 dwData1, dwData2; 159 int ii; 160 u8 pbyData[24]; 161 162 if (pDevice->byLocalID <= MAC_REVISION_A1) 163 if (pDevice->vnt_mgmt.byCSSPK == KEY_CTL_CCMP) 164 return; 165 166 wOffset = MISCFIFO_KEYETRY0; 167 wOffset += (uEntryIdx * MISCFIFO_KEYENTRYSIZE); 168 169 dwData1 = 0; 170 dwData1 |= wKeyCtl; 171 dwData1 <<= 16; 172 dwData1 |= MAKEWORD(*(pbyAddr+4), *(pbyAddr+5)); 173 174 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"1. wOffset: %d, Data: %X,"\ 175 " KeyCtl:%X\n", wOffset, dwData1, wKeyCtl); 176 177 dwData2 = 0; 178 dwData2 |= *(pbyAddr+3); 179 dwData2 <<= 8; 180 dwData2 |= *(pbyAddr+2); 181 dwData2 <<= 8; 182 dwData2 |= *(pbyAddr+1); 183 dwData2 <<= 8; 184 dwData2 |= *(pbyAddr+0); 185 186 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"2. wOffset: %d, Data: %X\n", 187 wOffset, dwData2); 188 189 pbyKey = (u8 *)pdwKey; 190 191 pbyData[0] = (u8)dwData1; 192 pbyData[1] = (u8)(dwData1>>8); 193 pbyData[2] = (u8)(dwData1>>16); 194 pbyData[3] = (u8)(dwData1>>24); 195 pbyData[4] = (u8)dwData2; 196 pbyData[5] = (u8)(dwData2>>8); 197 pbyData[6] = (u8)(dwData2>>16); 198 pbyData[7] = (u8)(dwData2>>24); 199 for (ii = 8; ii < 24; ii++) 200 pbyData[ii] = *pbyKey++; 201 202 CONTROLnsRequestOut(pDevice, 203 MESSAGE_TYPE_SETKEY, 204 wOffset, 205 (u16)uKeyIdx, 206 ARRAY_SIZE(pbyData), 207 pbyData 208 ); 209 210} 211 212void MACvRegBitsOff(struct vnt_private *pDevice, u8 byRegOfs, u8 byBits) 213{ 214 u8 pbyData[2]; 215 216 pbyData[0] = 0; 217 pbyData[1] = byBits; 218 219 CONTROLnsRequestOut(pDevice, 220 MESSAGE_TYPE_WRITE_MASK, 221 byRegOfs, 222 MESSAGE_REQUEST_MACREG, 223 ARRAY_SIZE(pbyData), 224 pbyData 225 ); 226} 227 228void MACvRegBitsOn(struct vnt_private *pDevice, u8 byRegOfs, u8 byBits) 229{ 230 u8 pbyData[2]; 231 232 pbyData[0] = byBits; 233 pbyData[1] = byBits; 234 235 CONTROLnsRequestOut(pDevice, 236 MESSAGE_TYPE_WRITE_MASK, 237 byRegOfs, 238 MESSAGE_REQUEST_MACREG, 239 ARRAY_SIZE(pbyData), 240 pbyData 241 ); 242} 243 244void MACvWriteWord(struct vnt_private *pDevice, u8 byRegOfs, u16 wData) 245{ 246 u8 pbyData[2]; 247 248 pbyData[0] = (u8)(wData & 0xff); 249 pbyData[1] = (u8)(wData >> 8); 250 251 CONTROLnsRequestOut(pDevice, 252 MESSAGE_TYPE_WRITE, 253 byRegOfs, 254 MESSAGE_REQUEST_MACREG, 255 ARRAY_SIZE(pbyData), 256 pbyData 257 ); 258 259} 260 261void MACvWriteBSSIDAddress(struct vnt_private *pDevice, u8 *pbyEtherAddr) 262{ 263 u8 pbyData[6]; 264 265 pbyData[0] = *((u8 *)pbyEtherAddr); 266 pbyData[1] = *((u8 *)pbyEtherAddr+1); 267 pbyData[2] = *((u8 *)pbyEtherAddr+2); 268 pbyData[3] = *((u8 *)pbyEtherAddr+3); 269 pbyData[4] = *((u8 *)pbyEtherAddr+4); 270 pbyData[5] = *((u8 *)pbyEtherAddr+5); 271 272 CONTROLnsRequestOut(pDevice, 273 MESSAGE_TYPE_WRITE, 274 MAC_REG_BSSID0, 275 MESSAGE_REQUEST_MACREG, 276 ARRAY_SIZE(pbyData), 277 pbyData 278 ); 279} 280 281void MACvEnableProtectMD(struct vnt_private *pDevice) 282{ 283 u8 pbyData[2]; 284 285 pbyData[0] = EnCFG_ProtectMd; 286 pbyData[1] = EnCFG_ProtectMd; 287 288 CONTROLnsRequestOut(pDevice, 289 MESSAGE_TYPE_WRITE_MASK, 290 MAC_REG_ENCFG0, 291 MESSAGE_REQUEST_MACREG, 292 ARRAY_SIZE(pbyData), 293 pbyData 294 ); 295} 296 297void MACvDisableProtectMD(struct vnt_private *pDevice) 298{ 299 u8 pbyData[2]; 300 301 pbyData[0] = 0; 302 pbyData[1] = EnCFG_ProtectMd; 303 304 CONTROLnsRequestOut(pDevice, 305 MESSAGE_TYPE_WRITE_MASK, 306 MAC_REG_ENCFG0, 307 MESSAGE_REQUEST_MACREG, 308 ARRAY_SIZE(pbyData), 309 pbyData 310 ); 311} 312 313void MACvEnableBarkerPreambleMd(struct vnt_private *pDevice) 314{ 315 u8 pbyData[2]; 316 317 pbyData[0] = EnCFG_BarkerPream; 318 pbyData[1] = EnCFG_BarkerPream; 319 320 CONTROLnsRequestOut(pDevice, 321 MESSAGE_TYPE_WRITE_MASK, 322 MAC_REG_ENCFG2, 323 MESSAGE_REQUEST_MACREG, 324 ARRAY_SIZE(pbyData), 325 pbyData 326 ); 327} 328 329void MACvDisableBarkerPreambleMd(struct vnt_private *pDevice) 330{ 331 u8 pbyData[2]; 332 333 pbyData[0] = 0; 334 pbyData[1] = EnCFG_BarkerPream; 335 336 CONTROLnsRequestOut(pDevice, 337 MESSAGE_TYPE_WRITE_MASK, 338 MAC_REG_ENCFG2, 339 MESSAGE_REQUEST_MACREG, 340 ARRAY_SIZE(pbyData), 341 pbyData 342 ); 343} 344 345void MACvWriteBeaconInterval(struct vnt_private *pDevice, u16 wInterval) 346{ 347 u8 pbyData[2]; 348 349 pbyData[0] = (u8)(wInterval & 0xff); 350 pbyData[1] = (u8)(wInterval >> 8); 351 352 CONTROLnsRequestOut(pDevice, 353 MESSAGE_TYPE_WRITE, 354 MAC_REG_BI, 355 MESSAGE_REQUEST_MACREG, 356 ARRAY_SIZE(pbyData), 357 pbyData 358 ); 359}