net: Move the checksum functions to lib/
authorSimon Glass <sjg@chromium.org>
Sat, 7 Dec 2019 04:41:39 +0000 (21:41 -0700)
committerBin Meng <bmeng.cn@gmail.com>
Sun, 15 Dec 2019 03:43:57 +0000 (11:43 +0800)
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 in SPL/TPL only if
CONFIG_SPL/TPL_NET are defined. Many boards do not enable those 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 <sjg@chromium.org>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
lib/Makefile
lib/net_utils.c
net/Makefile
net/checksum.c [deleted file]

index 7a713a54dcc53595fb7d854354ec9581bb8101f5..6b7b9ce85c54789fe9dbd1bffeb60149cef7daf1 100644 (file)
@@ -78,7 +78,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
index ed5044c3deca90a05fee272cf119c4a4512dd2ed..8af77829705db9f5b3fefc45c2027d4358e5b54c 100644 (file)
@@ -56,3 +56,51 @@ void string_to_enetaddr(const char *addr, uint8_t *enetaddr)
                        addr = (*end) ? end + 1 : end;
        }
 }
+
+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);
+}
index 2a700c8401c4c1e84f45dafa17b08db80a7709e7..fef71b940a0fa45b853ec5e6a3b27c7b126f22d8 100644 (file)
@@ -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 (file)
index 16ef416..0000000
+++ /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 <cm@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);
-}