These functions are used by code outside the network support, so move them
to lib/ to be more accessible.

Without this, the functions are only accessible if CONFIG_NET is defined.
Many boards do not enable that option but still want to do checksums in
this format.

Fix up a few code-style nits while we are here.

Signed-off-by: Simon Glass <s...@chromium.org>
---

Changes in v5: None
Changes in v4:
- Expand commit message to better explain the need to checksum functions

Changes in v3: None
Changes in v2: None

 lib/Makefile    |  2 +-
 lib/net_utils.c | 48 ++++++++++++++++++++++++++++++++++++++++
 net/Makefile    |  1 -
 net/checksum.c  | 59 -------------------------------------------------
 4 files changed, 49 insertions(+), 61 deletions(-)
 delete mode 100644 net/checksum.c

diff --git a/lib/Makefile b/lib/Makefile
index 0c89b4896f..505527d58a 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -76,7 +76,7 @@ endif
 ifdef CONFIG_SPL_BUILD
 obj-$(CONFIG_SPL_YMODEM_SUPPORT) += crc16.o
 obj-$(CONFIG_$(SPL_TPL_)HASH_SUPPORT) += crc16.o
-obj-$(CONFIG_SPL_NET_SUPPORT) += net_utils.o
+obj-y += net_utils.o
 endif
 obj-$(CONFIG_ADDR_MAP) += addr_map.o
 obj-y += qsort.o
diff --git a/lib/net_utils.c b/lib/net_utils.c
index 9fb9d4a4b0..252290210f 100644
--- a/lib/net_utils.c
+++ b/lib/net_utils.c
@@ -41,3 +41,51 @@ struct in_addr string_to_ip(const char *s)
        addr.s_addr = htonl(addr.s_addr);
        return addr;
 }
+
+uint compute_ip_checksum(const void *vptr, uint 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);
+       sum = ~sum & 0xffff;
+
+       return sum;
+}
+
+uint add_ip_checksums(uint offset, uint sum, uint new)
+{
+       ulong checksum;
+
+       sum = ~sum & 0xffff;
+       new = ~new & 0xffff;
+       if (offset & 1) {
+               /*
+                * byte-swap the sum if it came from an odd offset; since the
+                * computation is endian-independent this works.
+                */
+               new = ((new >> 8) & 0xff) | ((new << 8) & 0xff00);
+       }
+       checksum = sum + new;
+       if (checksum > 0xffff)
+               checksum -= 0xffff;
+
+       return (~checksum) & 0xffff;
+}
+
+int ip_checksum_ok(const void *addr, uint nbytes)
+{
+       return !(compute_ip_checksum(addr, nbytes) & 0xfffe);
+}
diff --git a/net/Makefile b/net/Makefile
index 2a700c8401..fef71b940a 100644
--- a/net/Makefile
+++ b/net/Makefile
@@ -5,7 +5,6 @@
 
 #ccflags-y += -DDEBUG
 
-obj-y += checksum.o
 obj-$(CONFIG_NET)      += arp.o
 obj-$(CONFIG_CMD_BOOTP) += bootp.o
 obj-$(CONFIG_CMD_CDP)  += cdp.o
diff --git a/net/checksum.c b/net/checksum.c
deleted file mode 100644
index 16ef416356..0000000000
--- a/net/checksum.c
+++ /dev/null
@@ -1,59 +0,0 @@
-// SPDX-License-Identifier: BSD-2-Clause
-/*
- * This file was originally taken from the FreeBSD project.
- *
- * Copyright (c) 2001 Charles Mott <c...@linktel.net>
- * Copyright (c) 2008 coresystems GmbH
- * All rights reserved.
- */
-
-#include <common.h>
-#include <net.h>
-
-unsigned compute_ip_checksum(const void *vptr, unsigned 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);
-       sum = ~sum & 0xffff;
-
-       return sum;
-}
-
-unsigned add_ip_checksums(unsigned offset, unsigned sum, unsigned new)
-{
-       unsigned long checksum;
-
-       sum = ~sum & 0xffff;
-       new = ~new & 0xffff;
-       if (offset & 1) {
-               /*
-                * byte-swap the sum if it came from an odd offset; since the
-                * computation is endian independant this works.
-                */
-               new = ((new >> 8) & 0xff) | ((new << 8) & 0xff00);
-       }
-       checksum = sum + new;
-       if (checksum > 0xffff)
-               checksum -= 0xffff;
-
-       return (~checksum) & 0xffff;
-}
-
-int ip_checksum_ok(const void *addr, unsigned nbytes)
-{
-       return !(compute_ip_checksum(addr, nbytes) & 0xfffe);
-}
-- 
2.24.0.432.g9d3f5f5b63-goog

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to