aboutsummaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2022-03-10 08:24:45 -0500
committerTom Rini <trini@konsulko.com>2022-03-10 08:24:45 -0500
commit6e7de8fd3eccf3119570581569d899809508d8df (patch)
treef9d040341823bf6267a0d65fc5c8539bbe04f555 /net
parent0bf4e0bb935e5c7fc016142e0228882610ecbf39 (diff)
parent8c187d667c897971a663e2cb21ff901a9e4b60e6 (diff)
downloadu-boot-next.zip
u-boot-next.tar.gz
u-boot-next.tar.bz2
Merge branch '2022-03-09-events-subsystem' into nextnext
To quote the author: It is a common need in U-Boot to have one subsystem notify another when something happens. An example is reading a partition table when a new block device is set up. It is also common to add weak functions and 'hook' functions to modify how U-Boot works. See for example ft_board_setup() and the like. U-Boot would benefit from a generic mechanism to handle these cases, with the ability to hook into various 'events' in a subsystem-independent and transparent way. This series provides a way to create and dispatch events, with a way of registering a 'spy' which watches for events of different types. This allows 'hook' functions to be created in a generic way. It also includes a script to list the hooks in an image, which is a bit easier to debug than weak functions, as well as an 'event' command to do the same from within U-Boot. These 'static' events can be used to replace hooks like misc_init_f(), for example. Also included is basic support for 'dynamic' events, where a spy can be registered at runtime. The need for this is still being figured out.
Diffstat (limited to 'net')
-rw-r--r--net/Kconfig11
-rw-r--r--net/arp.c18
-rw-r--r--net/bootp.c9
-rw-r--r--net/nfs.c9
-rw-r--r--net/rarp.c7
-rw-r--r--net/tftp.c10
6 files changed, 20 insertions, 44 deletions
diff --git a/net/Kconfig b/net/Kconfig
index 2ae9d6a..2e32b55 100644
--- a/net/Kconfig
+++ b/net/Kconfig
@@ -8,6 +8,17 @@ menuconfig NET
if NET
+config ARP_TIMEOUT
+ int "Milliseconds before trying ARP again"
+ default 5000
+
+config NET_RETRY_COUNT
+ int "Number of timeouts before giving up"
+ default 5
+ help
+ This variable defines the number of retries for network operations
+ like ARP, RARP, TFTP, or BOOTP before giving up the operation.
+
config PROT_UDP
bool "Enable generic udp framework"
help
diff --git a/net/arp.c b/net/arp.c
index 0b086dc..37848ad 100644
--- a/net/arp.c
+++ b/net/arp.c
@@ -17,20 +17,6 @@
#include "arp.h"
-#ifndef CONFIG_ARP_TIMEOUT
-/* Milliseconds before trying ARP again */
-# define ARP_TIMEOUT 5000UL
-#else
-# define ARP_TIMEOUT CONFIG_ARP_TIMEOUT
-#endif
-
-
-#ifndef CONFIG_NET_RETRY_COUNT
-# define ARP_TIMEOUT_COUNT 5 /* # of timeouts before giving up */
-#else
-# define ARP_TIMEOUT_COUNT CONFIG_NET_RETRY_COUNT
-#endif
-
struct in_addr net_arp_wait_packet_ip;
static struct in_addr net_arp_wait_reply_ip;
/* MAC address of waiting packet's destination */
@@ -109,10 +95,10 @@ int arp_timeout_check(void)
t = get_timer(0);
/* check for arp timeout */
- if ((t - arp_wait_timer_start) > ARP_TIMEOUT) {
+ if ((t - arp_wait_timer_start) > CONFIG_ARP_TIMEOUT) {
arp_wait_try++;
- if (arp_wait_try >= ARP_TIMEOUT_COUNT) {
+ if (arp_wait_try >= CONFIG_NET_RETRY_COUNT) {
puts("\nARP Retry count exceeded; starting again\n");
arp_wait_try = 0;
net_set_state(NETLOOP_FAIL);
diff --git a/net/bootp.c b/net/bootp.c
index a896e1e..a544bfc 100644
--- a/net/bootp.c
+++ b/net/bootp.c
@@ -31,7 +31,7 @@
/*
* The timeout for the initial BOOTP/DHCP request used to be described by a
- * counter of fixed-length timeout periods. TIMEOUT_COUNT represents
+ * counter of fixed-length timeout periods. CONFIG_NET_RETRY_COUNT represents
* that counter
*
* Now that the timeout periods are variable (exponential backoff and retry)
@@ -39,12 +39,7 @@
* execute that many retries, and keep sending retry packets until that time
* is reached.
*/
-#ifndef CONFIG_NET_RETRY_COUNT
-# define TIMEOUT_COUNT 5 /* # of timeouts before giving up */
-#else
-# define TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT)
-#endif
-#define TIMEOUT_MS ((3 + (TIMEOUT_COUNT * 5)) * 1000)
+#define TIMEOUT_MS ((3 + (CONFIG_NET_RETRY_COUNT * 5)) * 1000)
#define PORT_BOOTPS 67 /* BOOTP server UDP port */
#define PORT_BOOTPC 68 /* BOOTP client UDP port */
diff --git a/net/nfs.c b/net/nfs.c
index 70d0e08..3c01ceb 100644
--- a/net/nfs.c
+++ b/net/nfs.c
@@ -40,11 +40,6 @@
#define HASHES_PER_LINE 65 /* Number of "loading" hashes per line */
#define NFS_RETRY_COUNT 30
-#ifndef CONFIG_NFS_TIMEOUT
-# define NFS_TIMEOUT 2000UL
-#else
-# define NFS_TIMEOUT CONFIG_NFS_TIMEOUT
-#endif
#define NFS_RPC_ERR 1
#define NFS_RPC_DROP 124
@@ -53,7 +48,7 @@ static int fs_mounted;
static unsigned long rpc_id;
static int nfs_offset = -1;
static int nfs_len;
-static ulong nfs_timeout = NFS_TIMEOUT;
+static const ulong nfs_timeout = CONFIG_NFS_TIMEOUT;
static char dirfh[NFS_FHSIZE]; /* NFSv2 / NFSv3 file handle of directory */
static char filefh[NFS3_FHSIZE]; /* NFSv2 / NFSv3 file handle */
@@ -733,7 +728,7 @@ static void nfs_timeout_handler(void)
} else {
puts("T ");
net_set_timeout_handler(nfs_timeout +
- NFS_TIMEOUT * nfs_timeout_count,
+ nfs_timeout * nfs_timeout_count,
nfs_timeout_handler);
nfs_send();
}
diff --git a/net/rarp.c b/net/rarp.c
index a676a42..231b623 100644
--- a/net/rarp.c
+++ b/net/rarp.c
@@ -14,11 +14,6 @@
#include "rarp.h"
#define TIMEOUT 5000UL /* Milliseconds before trying BOOTP again */
-#ifndef CONFIG_NET_RETRY_COUNT
-#define TIMEOUT_COUNT 5 /* # of timeouts before giving up */
-#else
-#define TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT)
-#endif
int rarp_try;
@@ -57,7 +52,7 @@ void rarp_receive(struct ip_udp_hdr *ip, unsigned len)
*/
static void rarp_timeout_handler(void)
{
- if (rarp_try >= TIMEOUT_COUNT) {
+ if (rarp_try >= CONFIG_NET_RETRY_COUNT) {
puts("\nRetry count exceeded; starting again\n");
net_start_again();
} else {
diff --git a/net/tftp.c b/net/tftp.c
index 62a9648..e1e3597 100644
--- a/net/tftp.c
+++ b/net/tftp.c
@@ -27,12 +27,6 @@ DECLARE_GLOBAL_DATA_PTR;
#define WELL_KNOWN_PORT 69
/* Millisecs to timeout for lost pkt */
#define TIMEOUT 5000UL
-#ifndef CONFIG_NET_RETRY_COUNT
-/* # of timeouts before giving up */
-# define TIMEOUT_COUNT 10
-#else
-# define TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT * 2)
-#endif
/* Number of "loading" hashes per line (for checking the image size) */
#define HASHES_PER_LINE 65
@@ -47,7 +41,7 @@ DECLARE_GLOBAL_DATA_PTR;
#define TFTP_OACK 6
static ulong timeout_ms = TIMEOUT;
-static int timeout_count_max = TIMEOUT_COUNT;
+static int timeout_count_max = (CONFIG_NET_RETRY_COUNT * 2);
static ulong time_start; /* Record time we started tftp */
/*
@@ -60,7 +54,7 @@ static ulong time_start; /* Record time we started tftp */
* non-standard timeout behavior when initiating a TFTP transfer.
*/
ulong tftp_timeout_ms = TIMEOUT;
-int tftp_timeout_count_max = TIMEOUT_COUNT;
+int tftp_timeout_count_max = (CONFIG_NET_RETRY_COUNT * 2);
enum {
TFTP_ERR_UNDEFINED = 0,