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
mn10300
include
asm
checksum.h
Go to the documentation of this file.
1
/* MN10300 Optimised checksumming code
2
*
3
* Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
4
* Written by David Howells (
[email protected]
)
5
*
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public Licence
8
* as published by the Free Software Foundation; either version
9
* 2 of the Licence, or (at your option) any later version.
10
*/
11
#ifndef _ASM_CHECKSUM_H
12
#define _ASM_CHECKSUM_H
13
14
extern
__wsum
csum_partial
(
const
void
*buff,
int
len,
__wsum
sum
);
15
extern
__wsum
csum_partial_copy_nocheck
(
const
void
*
src
,
void
*
dst
,
16
int
len,
__wsum
sum
);
17
extern
__wsum
csum_partial_copy_from_user
(
const
void
*
src
,
void
*
dst
,
18
int
len,
__wsum
sum
,
19
int
*err_ptr);
20
extern
__sum16
ip_fast_csum
(
const
void
*iph,
unsigned
int
ihl);
21
extern
__wsum
csum_partial
(
const
void
*buff,
int
len,
__wsum
sum
);
22
extern
__sum16
ip_compute_csum
(
const
void
*buff,
int
len);
23
24
#define csum_partial_copy_fromuser csum_partial_copy
25
extern
__wsum
csum_partial_copy
(
const
void
*
src
,
void
*
dst
,
int
len,
26
__wsum
sum
);
27
28
static
inline
__sum16
csum_fold(
__wsum
sum
)
29
{
30
asm
(
31
" add %1,%0 \n"
32
" addc 0xffff,%0 \n"
33
:
"=r"
(
sum
)
34
:
"r"
(sum << 16),
"0"
(sum & 0xffff0000)
35
:
"cc"
36
);
37
return
(~sum) >> 16;
38
}
39
40
static
inline
__wsum
csum_tcpudp_nofold
(
unsigned
long
saddr
,
41
unsigned
long
daddr
,
42
unsigned
short
len,
43
unsigned
short
proto
,
44
__wsum
sum)
45
{
46
__wsum
tmp
;
47
48
tmp = (
__wsum
)
ntohs
(len) << 16;
49
tmp += (
__wsum
) proto << 8;
50
51
asm
(
52
" add %1,%0 \n"
53
" addc %2,%0 \n"
54
" addc %3,%0 \n"
55
" addc 0,%0 \n"
56
:
"=r"
(
sum
)
57
:
"r"
(daddr),
"r"
(
saddr
),
"r"
(tmp),
"0"
(
sum
)
58
:
"cc"
59
);
60
return
sum
;
61
}
62
63
/*
64
* computes the checksum of the TCP/UDP pseudo-header
65
* returns a 16-bit checksum, already complemented
66
*/
67
static
inline
__sum16
csum_tcpudp_magic
(
unsigned
long
saddr,
68
unsigned
long
daddr,
69
unsigned
short
len,
70
unsigned
short
proto,
71
__wsum
sum)
72
{
73
return
csum_fold(
csum_tcpudp_nofold
(saddr, daddr, len, proto, sum));
74
}
75
76
#undef _HAVE_ARCH_IPV6_CSUM
77
78
/*
79
* Copy and checksum to user
80
*/
81
#define HAVE_CSUM_COPY_USER
82
extern
__wsum
csum_and_copy_to_user
(
const
void
*
src
,
void
*
dst
,
int
len,
83
__wsum
sum,
int
*err_ptr);
84
85
86
#endif
/* _ASM_CHECKSUM_H */
Generated on Thu Jan 10 2013 12:49:16 for Linux Kernel by
1.8.2