Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
staging
vt6656
tether.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2003 VIA Networking, Inc. All rights reserved.
3
*
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; either version 2 of the License, or
7
* (at your option) any later version.
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License along
15
* with this program; if not, write to the Free Software Foundation, Inc.,
16
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17
*
18
*
19
* File: tether.c
20
*
21
* Purpose:
22
*
23
* Author: Tevin Chen
24
*
25
* Date: May 21, 1996
26
*
27
* Functions:
28
* ETHbyGetHashIndexByCrc32 - Calculate multicast hash value by CRC32
29
* ETHbIsBufferCrc32Ok - Check CRC value of the buffer if Ok or not
30
*
31
* Revision History:
32
*
33
*/
34
35
#include "
device.h
"
36
#include "
tmacro.h
"
37
#include "
tcrc.h
"
38
#include "
tether.h
"
39
40
/*--------------------- Static Definitions -------------------------*/
41
42
/*--------------------- Static Classes ----------------------------*/
43
44
/*--------------------- Static Variables --------------------------*/
45
46
/*--------------------- Static Functions --------------------------*/
47
48
/*--------------------- Export Variables --------------------------*/
49
50
51
52
/*
53
* Description: Calculate multicast hash value by CRC32
54
*
55
* Parameters:
56
* In:
57
* pbyMultiAddr - Multicast Address
58
* Out:
59
* none
60
*
61
* Return Value: Hash value
62
*
63
*/
64
BYTE
ETHbyGetHashIndexByCrc32
(
PBYTE
pbyMultiAddr)
65
{
66
int
ii;
67
BYTE
byTmpHash;
68
BYTE
byHash = 0;
69
70
/* get the least 6-bits from CRC generator */
71
byTmpHash = (
BYTE
)(
CRCdwCrc32
(pbyMultiAddr,
ETH_ALEN
,
72
0xFFFFFFFFL) & 0x3F);
73
/* reverse most bit to least bit */
74
for
(ii = 0; ii < (
sizeof
(byTmpHash) * 8); ii++) {
75
byHash <<= 1;
76
if
(byTmpHash & 0x01)
77
byHash |= 1;
78
byTmpHash >>= 1;
79
}
80
81
/* adjust 6-bits to the right most */
82
return
byHash >> 2;
83
}
84
85
86
/*
87
* Description: Check CRC value of the buffer if Ok or not
88
*
89
* Parameters:
90
* In:
91
* pbyBuffer - pointer of buffer (normally is rx buffer)
92
* cbFrameLength - length of buffer, including CRC portion
93
* Out:
94
* none
95
*
96
* Return Value: TRUE if ok; FALSE if error.
97
*
98
*/
99
BOOL
ETHbIsBufferCrc32Ok
(
PBYTE
pbyBuffer,
unsigned
int
cbFrameLength)
100
{
101
DWORD
dwCRC;
102
103
dwCRC =
CRCdwGetCrc32
(pbyBuffer, cbFrameLength - 4);
104
if
(
cpu_to_le32
(*((
PDWORD
)(pbyBuffer + cbFrameLength - 4))) != dwCRC)
105
return
FALSE
;
106
return
TRUE
;
107
}
108
Generated on Thu Jan 10 2013 14:32:30 for Linux Kernel by
1.8.2