libpayload: Switch to commonlib ipchksum() algorithm
This patch moves libpayload over to the commonlib implementation for calculating the IP checksum. Change-Id: Ie8d323ce9f8d946758619761b4b22d54bce222b6 Signed-off-by: Julius Werner <jwerner@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/80253 Reviewed-by: Jakub Czapiga <czapiga@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Arthur Heymans <arthur@aheymans.xyz> Reviewed-by: Yidi Lin <yidilin@google.com>
This commit is contained in:
		| @@ -30,7 +30,7 @@ | |||||||
| #define _COREBOOT_TABLES_H | #define _COREBOOT_TABLES_H | ||||||
|  |  | ||||||
| #include <arch/types.h> | #include <arch/types.h> | ||||||
| #include <ipchksum.h> | #include <commonlib/bsd/ipchksum.h> | ||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
|  |  | ||||||
| enum { | enum { | ||||||
|   | |||||||
| @@ -1,39 +0,0 @@ | |||||||
| /* |  | ||||||
|  * |  | ||||||
|  * Copyright (c) 2012 The ChromiumOS Authors. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without |  | ||||||
|  * modification, are permitted provided that the following conditions |  | ||||||
|  * are met: |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright |  | ||||||
|  *    notice, this list of conditions and the following disclaimer. |  | ||||||
|  * 2. Redistributions in binary form must reproduce the above copyright |  | ||||||
|  *    notice, this list of conditions and the following disclaimer in the |  | ||||||
|  *    documentation and/or other materials provided with the distribution. |  | ||||||
|  * 3. The name of the author may not be used to endorse or promote products |  | ||||||
|  *    derived from this software without specific prior written permission. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |  | ||||||
|  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |  | ||||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |  | ||||||
|  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |  | ||||||
|  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |  | ||||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |  | ||||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |  | ||||||
|  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |  | ||||||
|  * SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef __IPCHKSUM_H__ |  | ||||||
| #define __IPCHKSUM_H__ |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * @defgroup ipchecksum IP checksum functions |  | ||||||
|  * @{ |  | ||||||
|  */ |  | ||||||
| unsigned short ipchksum(const void *ptr, unsigned long nbytes); |  | ||||||
| /** @} */ |  | ||||||
|  |  | ||||||
| #endif |  | ||||||
| @@ -48,12 +48,12 @@ | |||||||
| #include <commonlib/bsd/elog.h> | #include <commonlib/bsd/elog.h> | ||||||
| #include <commonlib/bsd/fmap_serialized.h> | #include <commonlib/bsd/fmap_serialized.h> | ||||||
| #include <commonlib/bsd/helpers.h> | #include <commonlib/bsd/helpers.h> | ||||||
|  | #include <commonlib/bsd/ipchksum.h> | ||||||
| #include <commonlib/bsd/mem_chip_info.h> | #include <commonlib/bsd/mem_chip_info.h> | ||||||
| #include <ctype.h> | #include <ctype.h> | ||||||
| #include <die.h> | #include <die.h> | ||||||
| #include <endian.h> | #include <endian.h> | ||||||
| #include <fmap.h> | #include <fmap.h> | ||||||
| #include <ipchksum.h> |  | ||||||
| #include <kconfig.h> | #include <kconfig.h> | ||||||
| #include <stddef.h> | #include <stddef.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ | |||||||
| ## | ## | ||||||
|  |  | ||||||
| libc-$(CONFIG_LP_LIBC) += malloc.c printf.c console.c string.c | libc-$(CONFIG_LP_LIBC) += malloc.c printf.c console.c string.c | ||||||
| libc-$(CONFIG_LP_LIBC) += memory.c ctype.c ipchecksum.c lib.c libgcc.c | libc-$(CONFIG_LP_LIBC) += memory.c ctype.c lib.c libgcc.c | ||||||
| libc-$(CONFIG_LP_LIBC) += rand.c time.c exec.c | libc-$(CONFIG_LP_LIBC) += rand.c time.c exec.c | ||||||
| libc-$(CONFIG_LP_LIBC) += readline.c getopt_long.c sysinfo.c | libc-$(CONFIG_LP_LIBC) += readline.c getopt_long.c sysinfo.c | ||||||
| libc-$(CONFIG_LP_LIBC) += args.c | libc-$(CONFIG_LP_LIBC) += args.c | ||||||
| @@ -47,4 +47,5 @@ endif | |||||||
| ifeq ($(CONFIG_LP_LIBC),y) | ifeq ($(CONFIG_LP_LIBC),y) | ||||||
| libc-srcs += $(coreboottop)/src/commonlib/bsd/elog.c | libc-srcs += $(coreboottop)/src/commonlib/bsd/elog.c | ||||||
| libc-srcs += $(coreboottop)/src/commonlib/bsd/gcd.c | libc-srcs += $(coreboottop)/src/commonlib/bsd/gcd.c | ||||||
|  | libc-srcs += $(coreboottop)/src/commonlib/bsd/ipchksum.c | ||||||
| endif | endif | ||||||
|   | |||||||
| @@ -1,52 +0,0 @@ | |||||||
| /* |  | ||||||
|  * |  | ||||||
|  * It has originally been taken from the FreeBSD project. |  | ||||||
|  * |  | ||||||
|  * Copyright (c) 2001 Charles Mott <cm@linktel.net> |  | ||||||
|  * Copyright (c) 2008 coresystems GmbH |  | ||||||
|  * All rights reserved. |  | ||||||
|  * |  | ||||||
|  * Redistribution and use in source and binary forms, with or without |  | ||||||
|  * modification, are permitted provided that the following conditions |  | ||||||
|  * are met: |  | ||||||
|  * 1. Redistributions of source code must retain the above copyright |  | ||||||
|  *    notice, this list of conditions and the following disclaimer. |  | ||||||
|  * 2. Redistributions in binary form must reproduce the above copyright |  | ||||||
|  *    notice, this list of conditions and the following disclaimer in the |  | ||||||
|  *    documentation and/or other materials provided with the distribution. |  | ||||||
|  * |  | ||||||
|  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |  | ||||||
|  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |  | ||||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |  | ||||||
|  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |  | ||||||
|  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |  | ||||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |  | ||||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |  | ||||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |  | ||||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |  | ||||||
|  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |  | ||||||
|  * SUCH DAMAGE. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #include <libpayload.h> |  | ||||||
|  |  | ||||||
| unsigned short ipchksum(const void *vptr, unsigned long nbytes) |  | ||||||
| { |  | ||||||
| 	int sum, oddbyte; |  | ||||||
| 	const unsigned short *ptr = vptr; |  | ||||||
|  |  | ||||||
| 	sum = 0; |  | ||||||
| 	while (nbytes > 1) { |  | ||||||
| 		sum += *ptr++; |  | ||||||
| 		nbytes -= 2; |  | ||||||
| 	} |  | ||||||
| 	if (nbytes == 1) { |  | ||||||
| 		oddbyte = 0; |  | ||||||
| 		((u8 *) & oddbyte)[0] = *(u8 *) ptr; |  | ||||||
| 		((u8 *) & oddbyte)[1] = 0; |  | ||||||
| 		sum += oddbyte; |  | ||||||
| 	} |  | ||||||
| 	sum = (sum >> 16) + (sum & 0xffff); |  | ||||||
| 	sum += (sum >> 16); |  | ||||||
| 	return (~sum); |  | ||||||
| } |  | ||||||
		Reference in New Issue
	
	Block a user