diff options
author | Julius Werner <jwerner@chromium.org> | 2024-01-30 17:22:34 -0800 |
---|---|---|
committer | Julius Werner <jwerner@chromium.org> | 2024-02-02 22:48:48 +0000 |
commit | 177aee2c1f40ddc46e0037123ef811bd2fad1cc7 (patch) | |
tree | 619c4da751903b8b45971932de414930ec288cef | |
parent | d385113cc4d5ccaf1558c1984d63251c5c82b123 (diff) | |
download | coreboot-177aee2c1f40ddc46e0037123ef811bd2fad1cc7.tar.gz coreboot-177aee2c1f40ddc46e0037123ef811bd2fad1cc7.tar.bz2 coreboot-177aee2c1f40ddc46e0037123ef811bd2fad1cc7.zip |
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>
-rw-r--r-- | payloads/libpayload/include/coreboot_tables.h | 2 | ||||
-rw-r--r-- | payloads/libpayload/include/ipchksum.h | 39 | ||||
-rw-r--r-- | payloads/libpayload/include/libpayload.h | 2 | ||||
-rw-r--r-- | payloads/libpayload/libc/Makefile.mk | 3 | ||||
-rw-r--r-- | payloads/libpayload/libc/ipchecksum.c | 52 |
5 files changed, 4 insertions, 94 deletions
diff --git a/payloads/libpayload/include/coreboot_tables.h b/payloads/libpayload/include/coreboot_tables.h index 5c3f0c47ec30..5b19ca842235 100644 --- a/payloads/libpayload/include/coreboot_tables.h +++ b/payloads/libpayload/include/coreboot_tables.h @@ -30,7 +30,7 @@ #define _COREBOOT_TABLES_H #include <arch/types.h> -#include <ipchksum.h> +#include <commonlib/bsd/ipchksum.h> #include <stdint.h> enum { diff --git a/payloads/libpayload/include/ipchksum.h b/payloads/libpayload/include/ipchksum.h deleted file mode 100644 index 391fefbf2a92..000000000000 --- a/payloads/libpayload/include/ipchksum.h +++ /dev/null @@ -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 diff --git a/payloads/libpayload/include/libpayload.h b/payloads/libpayload/include/libpayload.h index 06c6de429e1a..6da456473449 100644 --- a/payloads/libpayload/include/libpayload.h +++ b/payloads/libpayload/include/libpayload.h @@ -48,12 +48,12 @@ #include <commonlib/bsd/elog.h> #include <commonlib/bsd/fmap_serialized.h> #include <commonlib/bsd/helpers.h> +#include <commonlib/bsd/ipchksum.h> #include <commonlib/bsd/mem_chip_info.h> #include <ctype.h> #include <die.h> #include <endian.h> #include <fmap.h> -#include <ipchksum.h> #include <kconfig.h> #include <stddef.h> #include <stdio.h> diff --git a/payloads/libpayload/libc/Makefile.mk b/payloads/libpayload/libc/Makefile.mk index 2d277da3b5b0..306bebfd9797 100644 --- a/payloads/libpayload/libc/Makefile.mk +++ b/payloads/libpayload/libc/Makefile.mk @@ -28,7 +28,7 @@ ## 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) += readline.c getopt_long.c sysinfo.c libc-$(CONFIG_LP_LIBC) += args.c @@ -47,4 +47,5 @@ endif ifeq ($(CONFIG_LP_LIBC),y) libc-srcs += $(coreboottop)/src/commonlib/bsd/elog.c libc-srcs += $(coreboottop)/src/commonlib/bsd/gcd.c +libc-srcs += $(coreboottop)/src/commonlib/bsd/ipchksum.c endif diff --git a/payloads/libpayload/libc/ipchecksum.c b/payloads/libpayload/libc/ipchecksum.c deleted file mode 100644 index 118a6946e059..000000000000 --- a/payloads/libpayload/libc/ipchecksum.c +++ /dev/null @@ -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); -} |