]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - net/net.c
net: Use env callbacks for net variables
[karo-tx-uboot.git] / net / net.c
index f8bf252f878dcebde403ab33943348275fa0d84d..552d8d17baa74352cbdac1ffaa4d9bf61732baae 100644 (file)
--- 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);