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

📄 tether.c

📁 VIA VT6656 USB linux source code.
💻 C
字号:
/* * Copyright (c) 2003 VIA Networking, Inc. All rights reserved. * * This software is copyrighted by and is the sole property of * VIA Networking, 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, 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, Inc. be * liable for any direct, indirect, incidental, special, exemplary, or * consequential damages. * * * File: tether.c * * Purpose: * * Author: Tevin Chen * * Date: May 21, 1996 * * Functions:  *      ETHbyGetHashIndexByCrc32 - Caculate multicast hash value by CRC32 *      ETHbIsBufferCrc32Ok - Check CRC value of the buffer if Ok or not * * Revision History: * */#if !defined(__DEVICE_H__)#include "device.h"#endif#if !defined(__TMACRO_H__)#include "tmacro.h"#endif#if !defined(__TBIT_H__)#include "tbit.h"#endif#if !defined(__TCRC_H__)#include "tcrc.h"#endif#if !defined(__TETHER_H__)#include "tether.h"#endif/*---------------------  Static Definitions -------------------------*//*---------------------  Static Classes  ----------------------------*//*---------------------  Static Variables  --------------------------*//*---------------------  Static Functions  --------------------------*//*---------------------  Export Variables  --------------------------*//*  * Description: Caculate multicast hash value by CRC32 * * Parameters: *  In: *		pbyMultiAddr    - Multicast Address *  Out: *      none * * Return Value: Hash value * */BYTE ETHbyGetHashIndexByCrc32 (PBYTE pbyMultiAddr){    int     ii;    BYTE    byTmpHash;    BYTE    byHash = 0;    // get the least 6-bits from CRC generator    byTmpHash = (BYTE)(CRCdwCrc32(pbyMultiAddr, U_ETHER_ADDR_LEN,             0xFFFFFFFFL) & 0x3F);    // reverse most bit to least bit    for (ii = 0; ii < (sizeof(byTmpHash) * 8); ii++) {        byHash <<= 1;        if (BITbIsBitOn(byTmpHash, 0x01))             byHash |= 1;        byTmpHash >>= 1;    }    // adjust 6-bits to the right most    return (byHash >> 2);}/*  * Description: Check CRC value of the buffer if Ok or not * * Parameters: *  In: *		pbyBuffer	    - pointer of buffer (normally is rx buffer) *		cbFrameLength	- length of buffer, including CRC portion *  Out: *      none * * Return Value: TRUE if ok; FALSE if error. * */BOOL ETHbIsBufferCrc32Ok (PBYTE pbyBuffer, UINT cbFrameLength){    DWORD dwCRC;    dwCRC = CRCdwGetCrc32(pbyBuffer, cbFrameLength - 4);    if (cpu_to_le32(*((PDWORD)(pbyBuffer + cbFrameLength - 4))) != dwCRC) {        return FALSE;    }    return TRUE;}

⌨️ 快捷键说明

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