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
arch
cris
include
arch-v32
arch
checksum.h
Go to the documentation of this file.
1
#ifndef _ASM_CRIS_ARCH_CHECKSUM_H
2
#define _ASM_CRIS_ARCH_CHECKSUM_H
3
4
/*
5
* Check values used in TCP/UDP headers.
6
*
7
* The gain of doing this in assembler instead of C, is that C doesn't
8
* generate carry-additions for the 32-bit components of the
9
* checksum. Which means it would be necessary to split all those into
10
* 16-bit components and then add.
11
*/
12
static
inline
__wsum
13
csum_tcpudp_nofold
(
__be32
saddr
,
__be32
daddr
,
14
unsigned
short
len,
unsigned
short
proto
,
__wsum
sum
)
15
{
16
__wsum
res
;
17
18
__asm__
__volatile__ (
"add.d %2, %0\n\t"
19
"addc %3, %0\n\t"
20
"addc %4, %0\n\t"
21
"addc 0, %0\n\t"
22
:
"=r"
(res)
23
:
"0"
(sum),
"r"
(daddr),
"r"
(saddr), \
24
"r"
((len + proto) << 8));
25
26
return
res
;
27
}
28
29
#endif
/* _ASM_CRIS_ARCH_CHECKSUM_H */
Generated on Thu Jan 10 2013 12:49:16 for Linux Kernel by
1.8.2