OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-alpha/] [checksum.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
#ifndef _ALPHA_CHECKSUM_H
2
#define _ALPHA_CHECKSUM_H
3
 
4
 
5
/*
6
 *      This is a version of ip_compute_csum() optimized for IP headers,
7
 *      which always checksum on 4 octet boundaries.
8
 */
9
extern unsigned short ip_fast_csum(unsigned char * iph, unsigned int ihl);
10
 
11
/*
12
 * computes the checksum of the TCP/UDP pseudo-header
13
 * returns a 16-bit checksum, already complemented
14
 */
15
extern unsigned short int csum_tcpudp_magic(unsigned long saddr,
16
                                           unsigned long daddr,
17
                                           unsigned short len,
18
                                           unsigned short proto,
19
                                           unsigned int sum);
20
 
21
unsigned int csum_tcpudp_nofold(unsigned long saddr, unsigned long daddr,
22
                                unsigned short len, unsigned short proto,
23
                                unsigned int sum);
24
 
25
/*
26
 * computes the checksum of a memory block at buff, length len,
27
 * and adds in "sum" (32-bit)
28
 *
29
 * returns a 32-bit number suitable for feeding into itself
30
 * or csum_tcpudp_magic
31
 *
32
 * this function must be called with even lengths, except
33
 * for the last fragment, which may be odd
34
 *
35
 * it's best to have buff aligned on a 32-bit boundary
36
 */
37
extern unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum);
38
 
39
/*
40
 * the same as csum_partial, but copies from src while it
41
 * checksums
42
 *
43
 * here even more important to align src and dst on a 32-bit (or even
44
 * better 64-bit) boundary
45
 */
46
unsigned int csum_partial_copy(const char *src, char *dst, int len, unsigned int sum);
47
 
48
/*
49
 * the same as csum_partial, but copies from user space (but on the alpha
50
 * we have just one address space, so this is identical to the above)
51
 *
52
 * this is obsolete and will go away.
53
 */
54
#define csum_partial_copy_fromuser csum_partial_copy
55
 
56
/*
57
 * this is a new version of the above that records errors it finds in *errp,
58
 * but continues and zeros the rest of the buffer.
59
 */
60
unsigned int csum_partial_copy_from_user(const char *src, char *dst, int len, unsigned int sum, int *errp);
61
 
62
unsigned int csum_partial_copy_nocheck(const char *src, char *dst, int len, unsigned int sum);
63
 
64
 
65
/*
66
 * this routine is used for miscellaneous IP-like checksums, mainly
67
 * in icmp.c
68
 */
69
 
70
extern unsigned short ip_compute_csum(unsigned char * buff, int len);
71
 
72
/*
73
 *      Fold a partial checksum without adding pseudo headers
74
 */
75
 
76
static inline unsigned short csum_fold(unsigned int sum)
77
{
78
        sum = (sum & 0xffff) + (sum >> 16);
79
        sum = (sum & 0xffff) + (sum >> 16);
80
        return ~sum;
81
}
82
 
83
#define _HAVE_ARCH_IPV6_CSUM
84
extern unsigned short int csum_ipv6_magic(struct in6_addr *saddr,
85
                                          struct in6_addr *daddr,
86
                                          __u32 len,
87
                                          unsigned short proto,
88
                                          unsigned int sum);
89
 
90
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.