summaryrefslogtreecommitdiffstats
path: root/src/drivers
diff options
context:
space:
mode:
authorJulius Werner <jwerner@chromium.org>2024-01-30 16:51:05 -0800
committerJulius Werner <jwerner@chromium.org>2024-02-02 22:48:27 +0000
commitde37109767b6b415778f34cbac196c8418f7e371 (patch)
tree44ede1025fd6058c09cc99c8e7d7122a64203641 /src/drivers
parent416cc665929e4e66bcab3e395daa031401a61fe8 (diff)
downloadcoreboot-de37109767b6b415778f34cbac196c8418f7e371.tar.gz
coreboot-de37109767b6b415778f34cbac196c8418f7e371.tar.bz2
coreboot-de37109767b6b415778f34cbac196c8418f7e371.zip
lib: Move IP checksum to commonlib
This patch moves the IP checksum algorithm into commonlib to prepare for it being shared with libpayload. The current implementation is ancient and pretty hard to read (and does some unnecessary questionable things like the type-punning stuff which leads to suboptimal code generation), so this reimplements it from scratch (that also helps with the licensing). This algorithm is prepared to take in a pre-calculated "wide" checksum in a machine-register-sized data type which is then narrowed down to 16 bits (see RFC 1071 for why that's valid). This isn't used yet (and the code will get optimized out), but will be used later in this patch series for architecture-specific optimization. Change-Id: Ic04c714c00439a17fc04a8a6e730cc2aa19b8e68 Signed-off-by: Julius Werner <jwerner@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/80251 Reviewed-by: Yidi Lin <yidilin@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Jakub Czapiga <czapiga@google.com>
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/elog/boot_count.c6
-rw-r--r--src/drivers/intel/fsp1_1/hob.c1
-rw-r--r--src/drivers/net/ne2k.c4
3 files changed, 5 insertions, 6 deletions
diff --git a/src/drivers/elog/boot_count.c b/src/drivers/elog/boot_count.c
index 17d928a4511f..9d618f9500e6 100644
--- a/src/drivers/elog/boot_count.c
+++ b/src/drivers/elog/boot_count.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: GPL-2.0-only */
+#include <commonlib/bsd/ipchksum.h>
#include <console/console.h>
-#include <ip_checksum.h>
#include <pc80/mc146818rtc.h>
#include <stdint.h>
#include <elog.h>
@@ -47,7 +47,7 @@ static int boot_count_cmos_read(struct boot_count *bc)
}
/* Verify checksum over signature and counter only */
- csum = compute_ip_checksum(bc, offsetof(struct boot_count, checksum));
+ csum = ipchksum(bc, offsetof(struct boot_count, checksum));
if (csum != bc->checksum) {
printk(BIOS_DEBUG, "Boot Count checksum mismatch\n");
@@ -63,7 +63,7 @@ static void boot_count_cmos_write(struct boot_count *bc)
u8 i, *p;
/* Checksum over signature and counter only */
- bc->checksum = compute_ip_checksum(
+ bc->checksum = ipchksum(
bc, offsetof(struct boot_count, checksum));
for (p = (u8 *)bc, i = 0; i < sizeof(*bc); i++, p++)
diff --git a/src/drivers/intel/fsp1_1/hob.c b/src/drivers/intel/fsp1_1/hob.c
index e7c5fb439343..7522df120ced 100644
--- a/src/drivers/intel/fsp1_1/hob.c
+++ b/src/drivers/intel/fsp1_1/hob.c
@@ -3,7 +3,6 @@
#include <arch/hlt.h>
#include <console/console.h>
#include <fsp/util.h>
-#include <ip_checksum.h>
#include <string.h>
/* Compares two EFI GUIDs. Returns true of the GUIDs match, false otherwise. */
diff --git a/src/drivers/net/ne2k.c b/src/drivers/net/ne2k.c
index 4479a767424e..70ef0efc3954 100644
--- a/src/drivers/net/ne2k.c
+++ b/src/drivers/net/ne2k.c
@@ -28,11 +28,11 @@ SMC8416 PIO support added by Andrew Bettison (andrewb@zip.com.au) on 4/3/02
*/
#include <arch/io.h>
+#include <commonlib/bsd/ipchksum.h>
#include <console/ne2k.h>
#include <device/device.h>
#include <device/pci.h>
#include <device/pci_ops.h>
-#include <ip_checksum.h>
#include "ns8390.h"
@@ -184,7 +184,7 @@ static void ns8390_tx_header(unsigned int eth_nic_base, int pktlen)
hdr[38] = (8 + pktlen) >> 8;
hdr[39] = 8 + pktlen;
- chksum = compute_ip_checksum(&hdr[14], 20);
+ chksum = ipchksum(&hdr[14], 20);
hdr[25] = chksum >> 8;
hdr[24] = chksum;