⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mac.c

📁 VIA VT6656 USB linux source code.
💻 C
字号:
/* * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. * All rights reserved. * * This software is copyrighted by and is the sole property of * VIA Networking Technologies, Inc. This software may only be used * in accordance with the corresponding license agreement. Any unauthorized * use, duplication, transmission, distribution, or disclosure of this * software is expressly forbidden. * * This software is provided by VIA Networking Technologies, Inc. "as is" * and any express or implied warranties, including, but not limited to, the * implied warranties of merchantability and fitness for a particular purpose * are disclaimed. In no event shall VIA Networking Technologies, Inc. * be liable for any direct, indirect, incidental, special, exemplary, or * consequential damages. * * * File: mac.c * * Purpose:  MAC routines * * Author: Tevin Chen * * Date: May 21, 1996 * * Functions: * * Revision History: */#if !defined(__TMACRO_H__)#include "tmacro.h"#endif#if !defined(__TBIT_H__)#include "tbit.h"#endif#if !defined(__TETHER_H__)#include "tether.h"#endif#if !defined(__DESC_H__)#include "desc.h"#endif#if !defined(__MAC_H__)#include "mac.h"#endif#if !defined(__80211hdr_H__)#include "80211hdr.h"#endif#if !defined(__RNDIS_H__)#include "rndis.h"#endif#if !defined(__CONTROL_H__)#include "control.h"#endif/*---------------------  Static Definitions -------------------------*///static int          msglevel                =MSG_LEVEL_DEBUG;static int          msglevel                =MSG_LEVEL_INFO;/*---------------------  Static Classes  ----------------------------*//*---------------------  Static Variables  --------------------------*//*---------------------  Static Functions  --------------------------*//*---------------------  Export Variables  --------------------------*//*---------------------  Export Functions  --------------------------*//* * Description: *      Set this hash index into multicast address register bit * * Parameters: *  In: *      byHashIdx   - Hash index to set *  Out: *      none * * Return Value: none * */void MACvSetMultiAddrByHash (PSDevice pDevice, BYTE byHashIdx){    UINT            uByteIdx;    BYTE            byBitMask;    BYTE            pbyData[2];    // calculate byte position    uByteIdx = byHashIdx / 8;    // calculate bit position    byBitMask = 1;    byBitMask <<= (byHashIdx % 8);    // turn on the bit    pbyData[0] = byBitMask;    pbyData[1] = byBitMask;      CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_WRITE_MASK,                        (WORD) (MAC_REG_MAR0 + uByteIdx),                        MESSAGE_REQUEST_MACREG,                        2,                        pbyData);}/* * Description: *      Write MAC Multicast Address Mask * * Parameters: *  In: *      uByteidx    - Index of Mask *      byData      - Mask Value to write *  Out: *      none * * Return Value: none * */VOID MACvWriteMultiAddr (PSDevice pDevice, UINT uByteIdx, BYTE byData){    BYTE            byData1;        byData1 = byData;    CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_WRITE,                        (WORD) (MAC_REG_MAR0 + uByteIdx),                        MESSAGE_REQUEST_MACREG,                        1,                        &byData1);}/* * Description: *      Shut Down MAC * * Parameters: *  In: *  Out: *      none * * Return Value: TRUE if success; otherwise FALSE * */BOOL MACbShutdown (PSDevice pDevice){    CONTROLnsRequestOutAsyn(pDevice,                        MESSAGE_TYPE_MACSHUTDOWN,                        0,                        0,                        0,                        NULL                        );    return TRUE;}void MACvSetBBType(PSDevice pDevice,BYTE byType){BYTE            pbyData[2];    pbyData[0] = byType;    pbyData[1] = EnCFG_BBType_MASK;    CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_WRITE_MASK,                        MAC_REG_ENCFG0,                        MESSAGE_REQUEST_MACREG,                        2,                        pbyData                        );}void MACvSetMISCFifo (PSDevice pDevice, WORD wOffset, DWORD dwData){BYTE    pbyData[4];    if (wOffset > 273)        return;    pbyData[0] = (BYTE)dwData;    pbyData[1] = (BYTE)(dwData>>8);    pbyData[2] = (BYTE)(dwData>>16);    pbyData[3] = (BYTE)(dwData>>24);        CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_WRITE_MISCFF,                        wOffset,                        0,                        4,                        pbyData                        );}/* * Description: *      Disable the Key Entry by MISCFIFO * * Parameters: *  In: *      dwIoBase        - Base Address for MAC * *  Out: *      none * * Return Value: none * */void MACvDisableKeyEntry (PSDevice pDevice, UINT uEntryIdx){WORD    wOffset;BYTE            byData;    byData = (BYTE) uEntryIdx;    wOffset = MISCFIFO_KEYETRY0;    wOffset += (uEntryIdx * MISCFIFO_KEYENTRYSIZE);    //VNSvOutPortW(dwIoBase + MAC_REG_MISCFFNDEX, wOffset);    //VNSvOutPortD(dwIoBase + MAC_REG_MISCFFDATA, 0);    //VNSvOutPortW(dwIoBase + MAC_REG_MISCFFCTL, MISCFFCTL_WRITE);        //issue write misc fifo command to device    CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_CLRKEYENTRY,                        0,                        0,                        1,                        &byData                        );}/* * Description: *      Set the Key by MISCFIFO * * Parameters: *  In: *      dwIoBase        - Base Address for MAC * *  Out: *      none * * Return Value: none * */void MACvSetKeyEntry (PSDevice pDevice, WORD wKeyCtl, UINT uEntryIdx, UINT uKeyIdx, PBYTE pbyAddr, PDWORD pdwKey){PBYTE           pbyKey;WORD            wOffset;DWORD           dwData1,dwData2;int             ii;BYTE            pbyData[24];        if ( pDevice->byLocalID <= MAC_REVISION_A1 ) {        if ( pDevice->sMgmtObj.byCSSPK == KEY_CTL_CCMP )            return;    }        wOffset = MISCFIFO_KEYETRY0;    wOffset += (uEntryIdx * MISCFIFO_KEYENTRYSIZE);    dwData1 = 0;    dwData1 |= wKeyCtl;    dwData1 <<= 16;    dwData1 |= MAKEWORD(*(pbyAddr+4), *(pbyAddr+5));    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"1. wOffset: %d, Data: %lX, KeyCtl:%X\n", wOffset, dwData1, wKeyCtl);    //VNSvOutPortW(dwIoBase + MAC_REG_MISCFFNDEX, wOffset);    //VNSvOutPortD(dwIoBase + MAC_REG_MISCFFDATA, dwData);    //VNSvOutPortW(dwIoBase + MAC_REG_MISCFFCTL, MISCFFCTL_WRITE);    //wOffset++;    dwData2 = 0;    dwData2 |= *(pbyAddr+3);    dwData2 <<= 8;    dwData2 |= *(pbyAddr+2);    dwData2 <<= 8;    dwData2 |= *(pbyAddr+1);    dwData2 <<= 8;    dwData2 |= *(pbyAddr+0);    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"2. wOffset: %d, Data: %lX\n", wOffset, dwData2);    //VNSvOutPortW(dwIoBase + MAC_REG_MISCFFNDEX, wOffset);    //VNSvOutPortD(dwIoBase + MAC_REG_MISCFFDATA, dwData);    //VNSvOutPortW(dwIoBase + MAC_REG_MISCFFCTL, MISCFFCTL_WRITE);        //wOffset++;    //wOffset += (uKeyIdx * 4);/*    for (ii=0;ii<4;ii++) {        // alway push 128 bits        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"3.(%d) wOffset: %d, Data: %lX\n", ii, wOffset+ii, *pdwKey);        VNSvOutPortW(dwIoBase + MAC_REG_MISCFFNDEX, wOffset+ii);        VNSvOutPortD(dwIoBase + MAC_REG_MISCFFDATA, *pdwKey++);        VNSvOutPortW(dwIoBase + MAC_REG_MISCFFCTL, MISCFFCTL_WRITE);    }*/    pbyKey = (PBYTE)pdwKey;    pbyData[0] = (BYTE)dwData1;    pbyData[1] = (BYTE)(dwData1>>8);    pbyData[2] = (BYTE)(dwData1>>16);    pbyData[3] = (BYTE)(dwData1>>24);    pbyData[4] = (BYTE)dwData2;    pbyData[5] = (BYTE)(dwData2>>8);     pbyData[6] = (BYTE)(dwData2>>16);    pbyData[7] = (BYTE)(dwData2>>24);    for(ii=8;ii<24;ii++)        pbyData[ii] = *pbyKey++;    CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_SETKEY,                        wOffset,                        (WORD)uKeyIdx,                        24,                        pbyData                        );}void MACvRegBitsOff(PSDevice pDevice, BYTE byRegOfs, BYTE byBits){                                           BYTE            pbyData[2];    pbyData[0] = 0;    pbyData[1] = byBits;    CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_WRITE_MASK,                        byRegOfs,                        MESSAGE_REQUEST_MACREG,                        2,                        pbyData                        );}void MACvRegBitsOn(PSDevice pDevice, BYTE byRegOfs, BYTE byBits){                                           BYTE            pbyData[2];    pbyData[0] = byBits;    pbyData[1] = byBits;    CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_WRITE_MASK,                        byRegOfs,                        MESSAGE_REQUEST_MACREG,                        2,                        pbyData                        );}void MACvWriteWord(PSDevice pDevice, BYTE byRegOfs, WORD wData){BYTE            pbyData[2];    pbyData[0] = (BYTE)(wData & 0xff);    pbyData[1] = (BYTE)(wData >> 8);        CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_WRITE,                        byRegOfs,                        MESSAGE_REQUEST_MACREG,                        2,                        pbyData                        );    }void MACvWriteBSSIDAddress(PSDevice pDevice, PBYTE pbyEtherAddr){BYTE            pbyData[6];    pbyData[0] = *((PBYTE)pbyEtherAddr);    pbyData[1] = *((PBYTE)pbyEtherAddr+1);    pbyData[2] = *((PBYTE)pbyEtherAddr+2);    pbyData[3] = *((PBYTE)pbyEtherAddr+3);    pbyData[4] = *((PBYTE)pbyEtherAddr+4);    pbyData[5] = *((PBYTE)pbyEtherAddr+5);    CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_WRITE,                        MAC_REG_BSSID0,                        MESSAGE_REQUEST_MACREG,                        6,                        pbyData                        );}void MACvEnableProtectMD(PSDevice pDevice){BYTE            pbyData[2];    pbyData[0] = EnCFG_ProtectMd;    pbyData[1] = EnCFG_ProtectMd;    CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_WRITE_MASK,                        MAC_REG_ENCFG0,                        MESSAGE_REQUEST_MACREG,                        2,                        pbyData                        );}                                                       void MACvDisableProtectMD(PSDevice pDevice){BYTE            pbyData[2];    pbyData[0] = 0;    pbyData[1] = EnCFG_ProtectMd;    CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_WRITE_MASK,                        MAC_REG_ENCFG0,                        MESSAGE_REQUEST_MACREG,                        2,                        pbyData                        );}                                                       void MACvEnableBarkerPreambleMd(PSDevice pDevice){BYTE            pbyData[2];    pbyData[0] = EnCFG_BarkerPream;    pbyData[1] = EnCFG_BarkerPream;    CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_WRITE_MASK,                        MAC_REG_ENCFG2,                        MESSAGE_REQUEST_MACREG,                        2,                        pbyData                        );}void MACvDisableBarkerPreambleMd(PSDevice pDevice){BYTE            pbyData[2];    pbyData[0] = 0;    pbyData[1] = EnCFG_BarkerPream;    CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_WRITE_MASK,                        MAC_REG_ENCFG2,                        MESSAGE_REQUEST_MACREG,                        2,                        pbyData                        );}void MACvWriteBeaconInterval(PSDevice pDevice, WORD wInterval){BYTE            pbyData[2];    pbyData[0] = (BYTE) (wInterval & 0xff);    pbyData[1] = (BYTE) (wInterval >> 8);    CONTROLnsRequestOut(pDevice,                        MESSAGE_TYPE_WRITE,                        MAC_REG_BI,                        MESSAGE_REQUEST_MACREG,                        2,                        pbyData                        );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -