aboutsummaryrefslogtreecommitdiff
path: root/net/net.c
diff options
context:
space:
mode:
authorJoe Hershberger2015-05-20 14:27:23 -0500
committerTom Rini2015-05-21 09:13:20 -0400
commitfd3056337e6fcc140f400e11edd33f6f1cb37de1 (patch)
treed6c39687cff48c4f4600d63468814a4cf51fef37 /net/net.c
parent73c2bbeea3d09bb8c81adc8769fc53493b6c0351 (diff)
net: Use env callbacks for net variables
Instead of checking for changes to the env each time we enter the net_loop, use the env callbacks to update the values of the variables. Don't update the variables when the source was programmatic, since the variables were the source of the new value. Signed-off-by: Joe Hershberger <joe.hershberger@ni.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'net/net.c')
-rw-r--r--net/net.c105
1 files changed, 89 insertions, 16 deletions
diff --git a/net/net.c b/net/net.c
index a365df05862..67e0ad297cf 100644
--- a/net/net.c
+++ b/net/net.c
@@ -208,6 +208,9 @@ int __maybe_unused net_busy_flag;
static int on_bootfile(const char *name, const char *value, enum env_op op,
int flags)
{
+ if (flags & H_PROGRAMMATIC)
+ return 0;
+
switch (op) {
case env_op_create:
case env_op_overwrite:
@@ -222,6 +225,92 @@ static int on_bootfile(const char *name, const char *value, enum env_op op,
}
U_BOOT_ENV_CALLBACK(bootfile, on_bootfile);
+static int on_ipaddr(const char *name, const char *value, enum env_op op,
+ int flags)
+{
+ if (flags & H_PROGRAMMATIC)
+ return 0;
+
+ net_ip = string_to_ip(value);
+
+ return 0;
+}
+U_BOOT_ENV_CALLBACK(ipaddr, on_ipaddr);
+
+static int on_gatewayip(const char *name, const char *value, enum env_op op,
+ int flags)
+{
+ if (flags & H_PROGRAMMATIC)
+ return 0;
+
+ net_gateway = string_to_ip(value);
+
+ return 0;
+}
+U_BOOT_ENV_CALLBACK(gatewayip, on_gatewayip);
+
+static int on_netmask(const char *name, const char *value, enum env_op op,
+ int flags)
+{
+ if (flags & H_PROGRAMMATIC)
+ return 0;
+
+ net_netmask = string_to_ip(value);
+
+ return 0;
+}
+U_BOOT_ENV_CALLBACK(netmask, on_netmask);
+
+static int on_serverip(const char *name, const char *value, enum env_op op,
+ int flags)
+{
+ if (flags & H_PROGRAMMATIC)
+ return 0;
+
+ net_server_ip = string_to_ip(value);
+
+ return 0;
+}
+U_BOOT_ENV_CALLBACK(serverip, on_serverip);
+
+static int on_nvlan(const char *name, const char *value, enum env_op op,
+ int flags)
+{
+ if (flags & H_PROGRAMMATIC)
+ return 0;
+
+ net_native_vlan = string_to_vlan(value);
+
+ return 0;
+}
+U_BOOT_ENV_CALLBACK(nvlan, on_nvlan);
+
+static int on_vlan(const char *name, const char *value, enum env_op op,
+ int flags)
+{
+ if (flags & H_PROGRAMMATIC)
+ return 0;
+
+ net_our_vlan = string_to_vlan(value);
+
+ return 0;
+}
+U_BOOT_ENV_CALLBACK(vlan, on_vlan);
+
+#if defined(CONFIG_CMD_DNS)
+static int on_dnsip(const char *name, const char *value, enum env_op op,
+ int flags)
+{
+ if (flags & H_PROGRAMMATIC)
+ return 0;
+
+ net_dns_server = string_to_ip(value);
+
+ return 0;
+}
+U_BOOT_ENV_CALLBACK(dnsip, on_dnsip);
+#endif
+
/*
* Check if autoload is enabled. If so, use either NFS or TFTP to download
* the boot file.
@@ -252,22 +341,6 @@ void net_auto_load(void)
static void net_init_loop(void)
{
- static int env_changed_id;
- int env_id = get_env_id();
-
- /* update only when the environment has changed */
- if (env_changed_id != env_id) {
- net_ip = getenv_ip("ipaddr");
- net_gateway = getenv_ip("gatewayip");
- net_netmask = getenv_ip("netmask");
- net_server_ip = getenv_ip("serverip");
- net_native_vlan = getenv_vlan("nvlan");
- net_our_vlan = getenv_vlan("vlan");
-#if defined(CONFIG_CMD_DNS)
- net_dns_server = getenv_ip("dnsip");
-#endif
- env_changed_id = env_id;
- }
if (eth_get_dev())
memcpy(net_ethaddr, eth_get_ethaddr(), 6);