]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - board/hymod/fetch.c
Merge git://git.denx.de/u-boot-arm
[karo-tx-uboot.git] / board / hymod / fetch.c
index dcbda3174afd58bcf9bda25663d753131c5efed9..da9373ffb0f4281dc53f6d4d1d86c964f2ddce53 100644 (file)
 /*
  * (C) Copyright 2001
- * Murray Jensen, CSIRO Manufacturing Science and Technology,
- * <Murray.Jensen@cmst.csiro.au>
+ * Murray Jensen, CSIRO-MIT, <Murray.Jensen@csiro.au>
  *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
 #include <net.h>
 
-/* imports from common/main.c */
-extern char console_buffer[CFG_CBSIZE];
+/* imports from input.c */
+extern int hymod_get_ethaddr (void);
 
 int
-fetch_and_parse(bd_t *bd, char *fn, ulong addr, int (*cback)(uchar *, uchar *))
+fetch_and_parse (char *fn, ulong addr, int (*cback)(uchar *, uchar *))
 {
-    char *ethaddr;
-    uchar *fp, *efp;
-
-    while ((ethaddr = getenv("ethaddr")) == NULL || *ethaddr == '\0') {
-
-       puts("*** Ethernet address is not set\n");
-
-       for (;;) {
-           int n;
-
-           n = readline("Enter board ethernet address: ");
-
-           if (n < 0) {
-               puts("\n");
-               return (0);
-           }
-
-           if (n == 0)
-               continue;
-
-           if (n == 17) {
-               int i;
-               char *p, *q;
-               uchar ea[6];
-
-               /* see if it looks like an ethernet address */
-
-               p = console_buffer;
-
-               for (i = 0; i < 6; i++) {
-                   char term = (i == 5 ? '\0' : ':');
-
-                   ea[i] = simple_strtol(p, &q, 16);
-
-                   if ((q - p) != 2 || *q++ != term)
-                       break;
-
-                   p = q;
-               }
-
-               if (i == 6) {
-                   /* it looks ok - set it */
-                   printf("Setting ethernet address to %s\n", console_buffer);
-                   setenv("ethaddr", console_buffer);
-
-                   puts("Remember to do a 'saveenv' to make it permanent\n");
-                   break;
+       char *ethaddr;
+       uchar *fp, *efp;
+       int rc, count = 0;
+
+       while ((ethaddr = getenv ("ethaddr")) == NULL || *ethaddr == '\0') {
+
+               printf ("*** Ethernet address is%s not set\n",
+                       count == 0 ? "" : " STILL");
+
+               if ((rc = hymod_get_ethaddr ()) < 0) {
+                       if (rc == -1)
+                               puts ("\n*** interrupted!");
+                       else
+                               puts ("\n*** timeout!");
+                       printf (" - fetch of '%s' aborted\n", fn);
+                       return (0);
                }
-           }
 
-           printf("Invalid ethernet address (%s) - please re-enter\n",
-               console_buffer);
+               count++;
        }
-    }
-
-    copy_filename(BootFile, fn, sizeof (BootFile));
-    load_addr = addr;
-
-    if (NetLoop(TFTP) <= 0) {
-       printf("tftp transfer of file '%s' failed\n", fn);
-       return (0);
-    }
-
-    if (NetBootFileXferSize == 0) {
-       printf("can't determine size of file '%s'\n", fn);
-       return (0);
-    }
-
-    fp = (uchar *)load_addr;
-    efp = fp + NetBootFileXferSize;
 
-    do {
-       uchar *name, *value;
+       copy_filename (BootFile, fn, sizeof (BootFile));
+       load_addr = addr;
+       NetBootFileXferSize = 0;
 
-       if (*fp == '#' || *fp == '\n') {
-           while (fp < efp && *fp++ != '\n')
-               ;
-           continue;
+       if (NetLoop(TFTPGET) == 0) {
+               printf ("tftp transfer of file '%s' failed\n", fn);
+               return (0);
        }
 
-       name = fp;
+       if (NetBootFileXferSize == 0) {
+               printf ("can't determine size of file '%s'\n", fn);
+               return (0);
+       }
 
-       while (fp < efp && *fp != '=')
-           if (*fp++ == '\n')
-               name = fp;
+       fp = (uchar *)load_addr;
+       efp = fp + NetBootFileXferSize;
 
-       if (fp >= efp)
-           break;
+       do {
+               uchar *name, *value;
 
-       *fp++ = '\0';
+               if (*fp == '#' || *fp == '\n') {
+                       /* skip this line */
+                       while (fp < efp && *fp++ != '\n')
+                               ;
+                       continue;
+               }
 
-       value = fp;
+               name = fp;
 
-       while (fp < efp && *fp != '\n')
-           fp++;
+               while (fp < efp && *fp != '=' && *fp != '\n')
+                       fp++;
+               if (fp >= efp)
+                       break;
+               if (*fp == '\n') {
+                       fp++;
+                       continue;
+               }
+               *fp++ = '\0';
 
-       /* ok if we go off the end here */
+               value = fp;
 
-       if (fp[-1] == '\r')
-           fp[-1] = '\0';
-       *fp++ = '\0';
+               while (fp < efp && *fp != '\n')
+                       fp++;
+               if (fp[-1] == '\r')
+                       fp[-1] = '\0';
+               *fp++ = '\0';   /* ok if we go off the end here */
 
-       if ((*cback)(name, value) == 0)
-           return (0);
+               if ((*cback)(name, value) == 0)
+                       return (0);
 
-    } while (fp < efp);
+       } while (fp < efp);
 
-    return (1);
+       return (1);
 }