diff options
author | cognet <cognet@FreeBSD.org> | 2005-05-24 21:44:34 +0000 |
---|---|---|
committer | cognet <cognet@FreeBSD.org> | 2005-05-24 21:44:34 +0000 |
commit | f58c9faa71e25ff5e86f284b7f92cc6887793ad4 (patch) | |
tree | 0867d087cc9514931f073ae844050dec7d2346f3 /sys/arm/include | |
parent | 59b5bfef855bbefd3e6fafaa39f8287eb80cb0e0 (diff) | |
download | FreeBSD-src-f58c9faa71e25ff5e86f284b7f92cc6887793ad4.zip FreeBSD-src-f58c9faa71e25ff5e86f284b7f92cc6887793ad4.tar.gz |
Use asm versions of in_cksum() and friends.
Diffstat (limited to 'sys/arm/include')
-rw-r--r-- | sys/arm/include/in_cksum.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/sys/arm/include/in_cksum.h b/sys/arm/include/in_cksum.h index 26f448a..2086842 100644 --- a/sys/arm/include/in_cksum.h +++ b/sys/arm/include/in_cksum.h @@ -43,9 +43,19 @@ #ifdef _KERNEL u_short in_cksum(struct mbuf *m, int len); -u_int in_cksum_hdr(const struct ip *ip); u_short in_addword(u_short sum, u_short b); u_short in_pseudo(u_int sum, u_int b, u_int c); u_short in_cksum_skip(struct mbuf *m, int len, int skip); +u_int do_cksum(const void *, int); +static __inline u_int +in_cksum_hdr(const struct ip *ip) +{ + u_int sum = do_cksum(ip, sizeof(struct ip)); + + sum = (sum & 0xffff) + (sum >> 16); + if (sum > 0xffff) + sum -= 0xffff; + return (~sum & 0xffff); +} #endif /* _KERNEL */ #endif /* _MACHINE_IN_CKSUM_H_ */ |