diff options
author | Tom Rini <trini@konsulko.com> | 2022-03-10 08:24:45 -0500 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2022-03-10 08:24:45 -0500 |
commit | 6e7de8fd3eccf3119570581569d899809508d8df (patch) | |
tree | f9d040341823bf6267a0d65fc5c8539bbe04f555 /net | |
parent | 0bf4e0bb935e5c7fc016142e0228882610ecbf39 (diff) | |
parent | 8c187d667c897971a663e2cb21ff901a9e4b60e6 (diff) | |
download | u-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/Kconfig | 11 | ||||
-rw-r--r-- | net/arp.c | 18 | ||||
-rw-r--r-- | net/bootp.c | 9 | ||||
-rw-r--r-- | net/nfs.c | 9 | ||||
-rw-r--r-- | net/rarp.c | 7 | ||||
-rw-r--r-- | net/tftp.c | 10 |
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 @@ -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 */ @@ -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(); } @@ -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 { @@ -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, |