]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/cmd_load.c
I2C: adding new "i2c bus" Command to the I2C Subsystem.
[karo-tx-uboot.git] / common / cmd_load.c
index 31fef8151b76da3b5750a24c26cf6dc017c856bc..1351fe22cac02d47d330cba238b90dbd4a482645 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#if (CONFIG_COMMANDS & CFG_CMD_LOADS)
-static ulong load_serial (ulong offset);
+#if defined(CONFIG_CMD_LOADB)
 static ulong load_serial_ymodem (ulong offset);
+#endif
+
+#if defined(CONFIG_CMD_LOADS)
+static ulong load_serial (long offset);
 static int read_record (char *buf, ulong len);
-# if (CONFIG_COMMANDS & CFG_CMD_SAVES)
+# if defined(CONFIG_CMD_SAVES)
 static int save_serial (ulong offset, ulong size);
 static int write_record (char *buf);
-# endif /* CFG_CMD_SAVES */
+#endif
 
 static int do_echo = 1;
-#endif /* CFG_CMD_LOADS */
+#endif
 
 /* -------------------------------------------------------------------- */
 
-#if (CONFIG_COMMANDS & CFG_CMD_LOADS)
+#if defined(CONFIG_CMD_LOADS)
 int do_load_serial (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
-       ulong offset = 0;
+       long offset = 0;
        ulong addr;
        int i;
        char *env_echo;
@@ -69,7 +72,7 @@ int do_load_serial (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 #ifdef CFG_LOADS_BAUD_CHANGE
        if (argc >= 2) {
-               offset = simple_strtoul(argv[1], NULL, 16);
+               offset = simple_strtol(argv[1], NULL, 16);
        }
        if (argc == 3) {
                load_baudrate = (int)simple_strtoul(argv[2], NULL, 10);
@@ -92,7 +95,7 @@ int do_load_serial (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        }
 #else  /* ! CFG_LOADS_BAUD_CHANGE */
        if (argc == 2) {
-               offset = simple_strtoul(argv[1], NULL, 16);
+               offset = simple_strtol(argv[1], NULL, 16);
        }
 #endif /* CFG_LOADS_BAUD_CHANGE */
 
@@ -138,7 +141,7 @@ int do_load_serial (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 }
 
 static ulong
-load_serial (ulong offset)
+load_serial (long offset)
 {
        char    record[SREC_MAXRECLEN + 1];     /* buffer for one S-Record      */
        char    binbuf[SREC_MAXBINLEN];         /* buffer for binary data       */
@@ -250,7 +253,7 @@ read_record (char *buf, ulong len)
        return (p - buf);
 }
 
-#if (CONFIG_COMMANDS & CFG_CMD_SAVES)
+#if defined(CONFIG_CMD_SAVES)
 
 int do_save_serial (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
@@ -396,13 +399,15 @@ write_record (char *buf)
        }
        return (0);
 }
-# endif /* CFG_CMD_SAVES */
-
-#endif /* CFG_CMD_LOADS */
+# endif
 
+#endif
 
-#if (CONFIG_COMMANDS & CFG_CMD_LOADB)  /* loadb command (load binary) included */
 
+#if defined(CONFIG_CMD_LOADB)
+/*
+ * loadb command (load binary) included
+ */
 #define XON_CHAR        17
 #define XOFF_CHAR       19
 #define START_CHAR      0x01
@@ -418,9 +423,6 @@ write_record (char *buf)
 #define tochar(x) ((char) (((x) + SPACE) & 0xff))
 #define untochar(x) ((int) (((x) - SPACE) & 0xff))
 
-extern int os_data_count;
-extern int os_data_header[8];
-
 static void set_kerm_bin_mode(unsigned long *);
 static int k_recv(void);
 static ulong load_serial_bin (ulong offset);
@@ -516,8 +518,15 @@ int do_load_serial_bin (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                char *s;
 
                if (((s = getenv("autoscript")) != NULL) && (strcmp(s,"yes") == 0)) {
-                       printf("Running autoscript at addr 0x%08lX ...\n", load_addr);
-                       rcode = autoscript (load_addr);
+                       printf ("Running autoscript at addr 0x%08lX", load_addr);
+
+                       s = getenv ("autoscript_uname");
+                       if (s)
+                               printf (":%s ...\n", s);
+                       else
+                               puts (" ...\n");
+
+                       rcode = autoscript (load_addr, s);
                }
        }
 #endif
@@ -619,46 +628,39 @@ void send_nack (int n)
 }
 
 
-/* os_data_* takes an OS Open image and puts it into memory, and
-   puts the boot header in an array named os_data_header
-
-   if image is binary, no header is stored in os_data_header.
-*/
 void (*os_data_init) (void);
 void (*os_data_char) (char new_char);
 static int os_data_state, os_data_state_saved;
-int os_data_count;
-static int os_data_count_saved;
 static char *os_data_addr, *os_data_addr_saved;
 static char *bin_start_address;
-int os_data_header[8];
+
 static void bin_data_init (void)
 {
        os_data_state = 0;
-       os_data_count = 0;
        os_data_addr = bin_start_address;
 }
+
 static void os_data_save (void)
 {
        os_data_state_saved = os_data_state;
-       os_data_count_saved = os_data_count;
        os_data_addr_saved = os_data_addr;
 }
+
 static void os_data_restore (void)
 {
        os_data_state = os_data_state_saved;
-       os_data_count = os_data_count_saved;
        os_data_addr = os_data_addr_saved;
 }
+
 static void bin_data_char (char new_char)
 {
        switch (os_data_state) {
        case 0:                                 /* data */
                *os_data_addr++ = new_char;
-               --os_data_count;
                break;
        }
 }
+
 static void set_kerm_bin_mode (unsigned long *addr)
 {
        bin_start_address = (char *) addr;
@@ -674,16 +676,19 @@ void k_data_init (void)
        k_data_escape = 0;
        os_data_init ();
 }
+
 void k_data_save (void)
 {
        k_data_escape_saved = k_data_escape;
        os_data_save ();
 }
+
 void k_data_restore (void)
 {
        k_data_escape = k_data_escape_saved;
        os_data_restore ();
 }
+
 void k_data_char (char new_char)
 {
        if (k_data_escape) {
@@ -802,7 +807,6 @@ static int k_recv (void)
        int done;
        int length;
        int n, last_n;
-       int z = 0;
        int len_lo, len_hi;
 
        /* initialize some protocol parameters */
@@ -967,13 +971,12 @@ START:
                        if (k_state == BREAK_TYPE)
                                done = 1;
                }
-               ++z;
        }
        return ((ulong) os_data_addr - (ulong) bin_start_address);
 }
 
 static int getcxmodem(void) {
-       if (tstc()) 
+       if (tstc())
                return (getc());
        return -1;
 }
@@ -984,58 +987,60 @@ static ulong load_serial_ymodem (ulong offset)
        int err;
        int res;
        connection_info_t info;
-       char    ymodemBuf[1024];
-       ulong   store_addr = ~0;
-       ulong   addr = 0;
+       char ymodemBuf[1024];
+       ulong store_addr = ~0;
+       ulong addr = 0;
 
-       size=0; 
-       info.mode=xyzModem_ymodem;
-       res=xyzModem_stream_open(&info, &err);
+       size = 0;
+       info.mode = xyzModem_ymodem;
+       res = xyzModem_stream_open (&info, &err);
        if (!res) {
-          
-          while ((res=xyzModem_stream_read(ymodemBuf, 1024, &err)) > 0 ){
-                   store_addr = addr + offset;
-                   size+=res;
-                   addr+=res; 
-#ifndef CFG_NO_FLASH
-                   if (addr2info(store_addr)) {
-                       int rc;
 
-                       rc = flash_write((char *)ymodemBuf,store_addr,res);
-                       if (rc != 0) {
-                               flash_perror (rc);
-                               return (~0);
-                       }
-                   } else
+               while ((res =
+                       xyzModem_stream_read (ymodemBuf, 1024, &err)) > 0) {
+                       store_addr = addr + offset;
+                       size += res;
+                       addr += res;
+#ifndef CFG_NO_FLASH
+                       if (addr2info (store_addr)) {
+                               int rc;
+
+                               rc = flash_write ((char *) ymodemBuf,
+                                                 store_addr, res);
+                               if (rc != 0) {
+                                       flash_perror (rc);
+                                       return (~0);
+                               }
+                       } else
 #endif
-                   {
-                       memcpy ((char *)(store_addr), ymodemBuf, res);
-                   }
-       
-          }
-       } 
-       else {
-               printf ("%s\n",xyzModem_error(err));
+                       {
+                               memcpy ((char *) (store_addr), ymodemBuf,
+                                       res);
+                       }
+
+               }
+       else {
+               printf ("%s\n", xyzModem_error (err));
        }
-       
-       xyzModem_stream_close(&err);
-       xyzModem_stream_terminate(false,&getcxmodem);   
+
+       xyzModem_stream_close (&err);
+       xyzModem_stream_terminate (false, &getcxmodem);
 
 
        flush_cache (offset, size);
 
-       printf("## Total Size      = 0x%08x = %d Bytes\n", size, size);
-       sprintf(buf, "%X", size);
-       setenv("filesize", buf);
+       printf ("## Total Size      = 0x%08x = %d Bytes\n", size, size);
+       sprintf (buf, "%X", size);
+       setenv ("filesize", buf);
 
        return offset;
 }
 
-#endif /* CFG_CMD_LOADB */
+#endif
 
 /* -------------------------------------------------------------------- */
 
-#if (CONFIG_COMMANDS & CFG_CMD_LOADS)
+#if defined(CONFIG_CMD_LOADS)
 
 #ifdef CFG_LOADS_BAUD_CHANGE
 U_BOOT_CMD(
@@ -1060,7 +1065,7 @@ U_BOOT_CMD(
  */
 
 
-#if (CONFIG_COMMANDS & CFG_CMD_SAVES)
+#if defined(CONFIG_CMD_SAVES)
 #ifdef CFG_LOADS_BAUD_CHANGE
 U_BOOT_CMD(
        saves, 4, 0,    do_save_serial,
@@ -1077,11 +1082,11 @@ U_BOOT_CMD(
        "    - save S-Record file over serial line with offset 'off' and size 'size'\n"
 );
 #endif /* CFG_LOADS_BAUD_CHANGE */
-#endif /* CFG_CMD_SAVES */
-#endif /* CFG_CMD_LOADS */
+#endif
+#endif
 
 
-#if (CONFIG_COMMANDS & CFG_CMD_LOADB)
+#if defined(CONFIG_CMD_LOADB)
 U_BOOT_CMD(
        loadb, 3, 0,    do_load_serial_bin,
        "loadb   - load binary file over serial line (kermit mode)\n",
@@ -1098,11 +1103,11 @@ U_BOOT_CMD(
        " with offset 'off' and baudrate 'baud'\n"
 );
 
-#endif /* CFG_CMD_LOADB */
+#endif
 
 /* -------------------------------------------------------------------- */
 
-#if (CONFIG_COMMANDS & CFG_CMD_HWFLOW)
+#if defined(CONFIG_CMD_HWFLOW)
 int do_hwflow (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
        extern int hwflow_onoff(int);
@@ -1128,4 +1133,4 @@ U_BOOT_CMD(
        "[on|off]\n - change RTS/CTS hardware flow control over serial line\n"
 );
 
-#endif /* CFG_CMD_HWFLOW */
+#endif