~ubuntu-branches/ubuntu/utopic/xen/utopic

« back to all changes in this revision

Viewing changes to xen/include/asm-ia64/linux/asm/checksum.h

  • Committer: Bazaar Package Importer
  • Author(s): Bastian Blank
  • Date: 2010-05-06 15:47:38 UTC
  • mto: (1.3.1) (15.1.1 sid) (4.1.1 experimental)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20100506154738-agoz0rlafrh1fnq7
Tags: upstream-4.0.0
ImportĀ upstreamĀ versionĀ 4.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef _ASM_IA64_CHECKSUM_H
 
2
#define _ASM_IA64_CHECKSUM_H
 
3
 
 
4
/*
 
5
 * Modified 1998, 1999
 
6
 *      David Mosberger-Tang <davidm@hpl.hp.com>, Hewlett-Packard Co
 
7
 */
 
8
 
 
9
/*
 
10
 * This is a version of ip_compute_csum() optimized for IP headers,
 
11
 * which always checksum on 4 octet boundaries.
 
12
 */
 
13
extern unsigned short ip_fast_csum (unsigned char * iph, unsigned int ihl);
 
14
 
 
15
/*
 
16
 * Computes the checksum of the TCP/UDP pseudo-header returns a 16-bit
 
17
 * checksum, already complemented
 
18
 */
 
19
extern unsigned short int csum_tcpudp_magic (unsigned long saddr,
 
20
                                             unsigned long daddr,
 
21
                                             unsigned short len,
 
22
                                             unsigned short proto,
 
23
                                             unsigned int sum);
 
24
 
 
25
extern unsigned int csum_tcpudp_nofold (unsigned long saddr,
 
26
                                        unsigned long daddr,
 
27
                                        unsigned short len,
 
28
                                        unsigned short proto,
 
29
                                        unsigned int sum);
 
30
 
 
31
/*
 
32
 * Computes the checksum of a memory block at buff, length len,
 
33
 * and adds in "sum" (32-bit)
 
34
 *
 
35
 * returns a 32-bit number suitable for feeding into itself
 
36
 * or csum_tcpudp_magic
 
37
 *
 
38
 * this function must be called with even lengths, except
 
39
 * for the last fragment, which may be odd
 
40
 *
 
41
 * it's best to have buff aligned on a 32-bit boundary
 
42
 */
 
43
extern unsigned int csum_partial (const unsigned char * buff, int len,
 
44
                                  unsigned int sum);
 
45
 
 
46
/*
 
47
 * Same as csum_partial, but copies from src while it checksums.
 
48
 *
 
49
 * Here it is even more important to align src and dst on a 32-bit (or
 
50
 * even better 64-bit) boundary.
 
51
 */
 
52
extern unsigned int csum_partial_copy_from_user (const char *src, char *dst,
 
53
                                                 int len, unsigned int sum,
 
54
                                                 int *errp);
 
55
 
 
56
extern unsigned int csum_partial_copy_nocheck (const char *src, char *dst,
 
57
                                               int len, unsigned int sum);
 
58
 
 
59
/*
 
60
 * This routine is used for miscellaneous IP-like checksums, mainly in
 
61
 * icmp.c
 
62
 */
 
63
extern unsigned short ip_compute_csum (unsigned char *buff, int len);
 
64
 
 
65
/*
 
66
 * Fold a partial checksum without adding pseudo headers.
 
67
 */
 
68
static inline unsigned short
 
69
csum_fold (unsigned int sum)
 
70
{
 
71
        sum = (sum & 0xffff) + (sum >> 16);
 
72
        sum = (sum & 0xffff) + (sum >> 16);
 
73
        return ~sum;
 
74
}
 
75
 
 
76
#endif /* _ASM_IA64_CHECKSUM_H */