]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/xyzModem.c
Some code cleanup
[karo-tx-uboot.git] / common / xyzModem.c
index 3c86b138b36764a3a32d8c60219657de26f4fef4..4a137bffdece8bce9ebfc08756716768c48ed257 100644 (file)
@@ -1,65 +1,67 @@
-//==========================================================================
-//
-//      xyzModem.c
-//
-//      RedBoot stream handler for xyzModem protocol
-//
-//==========================================================================
-//####ECOSGPLCOPYRIGHTBEGIN####
-// -------------------------------------------
-// This file is part of eCos, the Embedded Configurable Operating System.
-// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
-// Copyright (C) 2002 Gary Thomas
-//
-// eCos 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 or (at your option) any later version.
-//
-// eCos 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 eCos; if not, write to the Free Software Foundation, Inc.,
-// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
-//
-// As a special exception, if other files instantiate templates or use macros
-// or inline functions from this file, or you compile this file and link it
-// with other works to produce a work based on this file, this file does not
-// by itself cause the resulting work to be covered by the GNU General Public
-// License. However the source code for this file must still be made available
-// in accordance with section (3) of the GNU General Public License.
-//
-// This exception does not invalidate any other reasons why a work based on
-// this file might be covered by the GNU General Public License.
-//
-// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
-// at http://sources.redhat.com/ecos/ecos-license/
-// -------------------------------------------
-//####ECOSGPLCOPYRIGHTEND####
-//==========================================================================
-//#####DESCRIPTIONBEGIN####
-//
-// Author(s):    gthomas
-// Contributors: gthomas, tsmith, Yoshinori Sato
-// Date:         2000-07-14
-// Purpose:      
-// Description:  
-//              
-// This code is part of RedBoot (tm).
-//
-//####DESCRIPTIONEND####
-//
-//==========================================================================
+/*
+ *==========================================================================
+ *
+ *      xyzModem.c
+ *
+ *      RedBoot stream handler for xyzModem protocol
+ *
+ *==========================================================================
+ *####ECOSGPLCOPYRIGHTBEGIN####
+ * -------------------------------------------
+ * This file is part of eCos, the Embedded Configurable Operating System.
+ * Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+ * Copyright (C) 2002 Gary Thomas
+ *
+ * eCos 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 or (at your option) any later version.
+ *
+ * eCos 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 eCos; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * As a special exception, if other files instantiate templates or use macros
+ * or inline functions from this file, or you compile this file and link it
+ * with other works to produce a work based on this file, this file does not
+ * by itself cause the resulting work to be covered by the GNU General Public
+ * License. However the source code for this file must still be made available
+ * in accordance with section (3) of the GNU General Public License.
+ *
+ * This exception does not invalidate any other reasons why a work based on
+ * this file might be covered by the GNU General Public License.
+ *
+ * Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
+ * at http: *sources.redhat.com/ecos/ecos-license/
+ * -------------------------------------------
+ *####ECOSGPLCOPYRIGHTEND####
+ *==========================================================================
+ *#####DESCRIPTIONBEGIN####
+ *
+ * Author(s):    gthomas
+ * Contributors: gthomas, tsmith, Yoshinori Sato
+ * Date:         2000-07-14
+ * Purpose:
+ * Description:
+ *
+ * This code is part of RedBoot (tm).
+ *
+ *####DESCRIPTIONEND####
+ *
+ *==========================================================================
+ */
 #include <common.h>
 #include <xyzModem.h>
 #include <stdarg.h>
 #include <crc.h>
 
-// Assumption - run xyzModem protocol over the console port
+/* Assumption - run xyzModem protocol over the console port */
 
-// Values magic to the protocol
+/* Values magic to the protocol */
 #define SOH 0x01
 #define STX 0x02
 #define EOT 0x04
 #define BSP 0x08
 #define NAK 0x15
 #define CAN 0x18
-#define EOF 0x1A  // ^Z for DOS officionados
+#define EOF 0x1A  /* ^Z for DOS officionados */
 
 #define USE_YMODEM_LENGTH
 
-// Data & state local to the protocol
+/* Data & state local to the protocol */
 static struct {
 #ifdef REDBOOT
     hal_virtual_comm_table_t* __chan;
@@ -80,7 +82,7 @@ static struct {
 #endif
     unsigned char pkt[1024], *bufp;
     unsigned char blk,cblk,crc1,crc2;
-    unsigned char next_blk;  // Expected block
+    unsigned char next_blk;  /* Expected block */
     int len, mode, total_retries;
     int total_SOH, total_STX, total_CAN;
     bool crc_mode, at_eof, tx_ack;
@@ -89,13 +91,13 @@ static struct {
 #endif
 } xyz;
 
-#define xyzModem_CHAR_TIMEOUT            2000  // 2 seconds
+#define xyzModem_CHAR_TIMEOUT            2000  /* 2 seconds */
 #define xyzModem_MAX_RETRIES             20
 #define xyzModem_MAX_RETRIES_WITH_CRC    10
-#define xyzModem_CAN_COUNT                3    // Wait for 3 CAN before quitting
+#define xyzModem_CAN_COUNT                3    /* Wait for 3 CAN before quitting */
 
 
-#ifndef REDBOOT  //SB
+#ifndef REDBOOT  /*SB */
 typedef int cyg_int32;
 int CYGACC_COMM_IF_GETC_TIMEOUT (char chan,char *c) {
 #define DELAY 20
@@ -115,7 +117,7 @@ void CYGACC_COMM_IF_PUTC(char x,char y) {
        putc(y);
 }
 
-// Validate a hex character
+/* Validate a hex character */
 __inline__ static bool
 _is_hex(char c)
 {
@@ -124,7 +126,7 @@ _is_hex(char c)
             ((c >= 'a') && (c <= 'f')));
 }
 
-// Convert a single hex nibble
+/* Convert a single hex nibble */
 __inline__ static int
 _from_hex(char c)
 {
@@ -140,7 +142,7 @@ _from_hex(char c)
     return ret;
 }
 
-// Convert a character to lower case
+/* Convert a character to lower case */
 __inline__ static char
 _tolower(char c)
 {
@@ -150,11 +152,7 @@ _tolower(char c)
     return c;
 }
 
-
-
-//
-// Parse (scan) a number
-//
+/* Parse (scan) a number */
 bool
 parse_num(char *s, unsigned long *val, char **es, char *delim)
 {
@@ -173,10 +171,10 @@ parse_num(char *s, unsigned long *val, char **es, char *delim)
         first = false;
         c = *s++;
         if (_is_hex(c) && ((digit = _from_hex(c)) < radix)) {
-            // Valid digit
+            /* Valid digit */
 #ifdef CYGPKG_HAL_MIPS
-            // FIXME: tx49 compiler generates 0x2539018 for MUL which
-            // isn't any good.
+            /* FIXME: tx49 compiler generates 0x2539018 for MUL which */
+            /* isn't any good. */
             if (16 == radix)
                 result = result << 4;
             else
@@ -187,12 +185,12 @@ parse_num(char *s, unsigned long *val, char **es, char *delim)
 #endif
         } else {
             if (delim != (char *)0) {
-                // See if this character is one of the delimiters
+                /* See if this character is one of the delimiters */
                 char *dp = delim;
                 while (*dp && (c != *dp)) dp++;
-                if (*dp) break;  // Found a good delimiter
+                if (*dp) break;  /* Found a good delimiter */
             }
-            return false;  // Malformatted number
+            return false;  /* Malformatted number */
         }
     }
     *val = result;
@@ -207,11 +205,11 @@ parse_num(char *s, unsigned long *val, char **es, char *delim)
 #define USE_SPRINTF
 #ifdef DEBUG
 #ifndef USE_SPRINTF
-//
-// Note: this debug setup only works if the target platform has two serial ports
-// available so that the other one (currently only port 1) can be used for debug
-// messages.
-//
+/*
+ * Note: this debug setup only works if the target platform has two serial ports
+ * available so that the other one (currently only port 1) can be used for debug
+ * messages.
+ */
 static int
 zm_dprintf(char *fmt, ...)
 {
@@ -235,9 +233,9 @@ zm_flush(void)
 }
 
 #else
-//
-// Note: this debug setup works by storing the strings in a fixed buffer
-//
+/*
+ * Note: this debug setup works by storing the strings in a fixed buffer
+ */
 #define FINAL
 #ifdef FINAL
 static char *zm_out = (char *)0x00380000;
@@ -308,7 +306,7 @@ zm_dump(int line)
 #define ZM_DEBUG(x)
 #endif
 
-// Wait for the line to go idle
+/* Wait for the line to go idle */
 static void
 xyzModem_flush(void)
 {
@@ -330,7 +328,7 @@ xyzModem_get_hdr(void)
     unsigned short cksum;
 
     ZM_DEBUG(zm_new());
-    // Find the start of a header
+    /* Find the start of a header */
     can_total = 0;
     hdr_chars = 0;
 
@@ -356,11 +354,11 @@ xyzModem_get_hdr(void)
                 if (++can_total == xyzModem_CAN_COUNT) {
                     return xyzModem_cancel;
                 } else {
-                    // Wait for multiple CAN to avoid early quits
+                    /* Wait for multiple CAN to avoid early quits */
                     break;
                 }
             case EOT:
-                // EOT only supported if no noise
+                /* EOT only supported if no noise */
                 if (hdr_chars == 1) {
                     CYGACC_COMM_IF_PUTC(*xyz.__chan, ACK);
                     ZM_DEBUG(zm_dprintf("ACK on EOT #%d\n", __LINE__));
@@ -368,19 +366,19 @@ xyzModem_get_hdr(void)
                     return xyzModem_eof;
                 }
             default:
-                // Ignore, waiting for start of header
+                /* Ignore, waiting for start of header */
                 ;
             }
         } else {
-            // Data stream timed out
-            xyzModem_flush();  // Toss any current input
+            /* Data stream timed out */
+            xyzModem_flush();  /* Toss any current input */
             ZM_DEBUG(zm_dump(__LINE__));
             CYGACC_CALL_IF_DELAY_US((cyg_int32)250000);
             return xyzModem_timeout;
         }
     }
 
-    // Header found, now read the data
+    /* Header found, now read the data */
     res = CYGACC_COMM_IF_GETC_TIMEOUT(*xyz.__chan, &xyz.blk);
     ZM_DEBUG(zm_save(xyz.blk));
     if (!res) {
@@ -420,18 +418,18 @@ xyzModem_get_hdr(void)
         }
     }
     ZM_DEBUG(zm_dump(__LINE__));
-    // Validate the message
+    /* Validate the message */
     if ((xyz.blk ^ xyz.cblk) != (unsigned char)0xFF) {
         ZM_DEBUG(zm_dprintf("Framing error - blk: %x/%x/%x\n", xyz.blk, xyz.cblk, (xyz.blk ^ xyz.cblk)));
         ZM_DEBUG(zm_dump_buf(xyz.pkt, xyz.len));
         xyzModem_flush();
         return xyzModem_frame;
     }
-    // Verify checksum/CRC
+    /* Verify checksum/CRC */
     if (xyz.crc_mode) {
         cksum = cyg_crc16(xyz.pkt, xyz.len);
         if (cksum != ((xyz.crc1 << 8) | xyz.crc2)) {
-            ZM_DEBUG(zm_dprintf("CRC error - recvd: %02x%02x, computed: %x\n", 
+            ZM_DEBUG(zm_dprintf("CRC error - recvd: %02x%02x, computed: %x\n",
                                 xyz.crc1, xyz.crc2, cksum & 0xFFFF));
             return xyzModem_cksum;
         }
@@ -445,18 +443,18 @@ xyzModem_get_hdr(void)
             return xyzModem_cksum;
         }
     }
-    // If we get here, the message passes [structural] muster
+    /* If we get here, the message passes [structural] muster */
     return 0;
 }
 
-int 
+int
 xyzModem_stream_open(connection_info_t *info, int *err)
 {
     int console_chan, stat=0;
     int retries = xyzModem_MAX_RETRIES;
     int crc_retries = xyzModem_MAX_RETRIES_WITH_CRC;
 
-//    ZM_DEBUG(zm_out = zm_out_start);
+/*    ZM_DEBUG(zm_out = zm_out_start); */
 #ifdef xyzModem_zmodem
     if (info->mode == xyzModem_zmodem) {
         *err = xyzModem_noZmodem;
@@ -465,7 +463,7 @@ xyzModem_stream_open(connection_info_t *info, int *err)
 #endif
 
 #ifdef REDBOOT
-    // Set up the I/O channel.  Note: this allows for using a different port in the future
+    /* Set up the I/O channel.  Note: this allows for using a different port in the future */
     console_chan = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT);
     if (info->chan >= 0) {
         CYGACC_CALL_IF_SET_CONSOLE_COMM(info->chan);
@@ -477,9 +475,9 @@ xyzModem_stream_open(connection_info_t *info, int *err)
     CYGACC_CALL_IF_SET_CONSOLE_COMM(console_chan);
     CYGACC_COMM_IF_CONTROL(*xyz.__chan, __COMMCTL_SET_TIMEOUT, xyzModem_CHAR_TIMEOUT);
 #else
-// TODO: CHECK !
+/* TODO: CHECK ! */
     int dummy;
-    xyz.__chan=&dummy; 
+    xyz.__chan=&dummy;
 #endif
     xyz.len = 0;
     xyz.crc_mode = true;
@@ -494,11 +492,11 @@ xyzModem_stream_open(connection_info_t *info, int *err)
     xyz.read_length = 0;
     xyz.file_length = 0;
 #endif
-    
+
     CYGACC_COMM_IF_PUTC(*xyz.__chan, (xyz.crc_mode ? 'C' : NAK));
 
     if (xyz.mode == xyzModem_xmodem) {
-           // X-modem doesn't have an information header - exit here
+           /* X-modem doesn't have an information header - exit here */
             xyz.next_blk = 1;
             return 0;
     }
@@ -506,24 +504,24 @@ xyzModem_stream_open(connection_info_t *info, int *err)
     while (retries-- > 0) {
         stat = xyzModem_get_hdr();
         if (stat == 0) {
-            // Y-modem file information header
+            /* Y-modem file information header */
             if (xyz.blk == 0) {
 #ifdef USE_YMODEM_LENGTH
-                // skip filename
+                /* skip filename */
                 while (*xyz.bufp++);
-                // get the length
+                /* get the length */
                 parse_num(xyz.bufp, &xyz.file_length, NULL, " ");
 #endif
-                // The rest of the file name data block quietly discarded
+                /* The rest of the file name data block quietly discarded */
                 xyz.tx_ack = true;
             }
             xyz.next_blk = 1;
             xyz.len = 0;
             return 0;
-        } else 
+        } else
         if (stat == xyzModem_timeout) {
             if (--crc_retries <= 0) xyz.crc_mode = false;
-            CYGACC_CALL_IF_DELAY_US(5*100000);   // Extra delay for startup
+            CYGACC_CALL_IF_DELAY_US(5*100000);   /* Extra delay for startup */
             CYGACC_COMM_IF_PUTC(*xyz.__chan, (xyz.crc_mode ? 'C' : NAK));
             xyz.total_retries++;
             ZM_DEBUG(zm_dprintf("NAK (%d)\n", __LINE__));
@@ -537,7 +535,7 @@ xyzModem_stream_open(connection_info_t *info, int *err)
     return -1;
 }
 
-int 
+int
 xyzModem_stream_read(char *buf, int size, int *err)
 {
     int stat, total, len;
@@ -545,7 +543,7 @@ xyzModem_stream_read(char *buf, int size, int *err)
 
     total = 0;
     stat = xyzModem_cancel;
-    // Try and get 'size' bytes into the buffer
+    /* Try and get 'size' bytes into the buffer */
     while (!xyz.at_eof && (size > 0)) {
         if (xyz.len == 0) {
             retries = xyzModem_MAX_RETRIES;
@@ -562,8 +560,8 @@ xyzModem_stream_read(char *buf, int size, int *err)
 #else
                         if (1) {
 #endif
-                            // Data blocks can be padded with ^Z (EOF) characters
-                            // This code tries to detect and remove them
+                            /* Data blocks can be padded with ^Z (EOF) characters */
+                            /* This code tries to detect and remove them */
                             if ((xyz.bufp[xyz.len-1] == EOF) &&
                                 (xyz.bufp[xyz.len-2] == EOF) &&
                                 (xyz.bufp[xyz.len-3] == EOF)) {
@@ -574,10 +572,12 @@ xyzModem_stream_read(char *buf, int size, int *err)
                         }
 
 #ifdef USE_YMODEM_LENGTH
-                        // See if accumulated length exceeds that of the file.
-                        // If so, reduce size (i.e., cut out pad bytes)
-                        // Only do this for Y-modem (and Z-modem should it ever
-                        // be supported since it can fall back to Y-modem mode).
+                       /*
+                         * See if accumulated length exceeds that of the file.
+                         * If so, reduce size (i.e., cut out pad bytes)
+                         * Only do this for Y-modem (and Z-modem should it ever
+                         * be supported since it can fall back to Y-modem mode).
+                        */
                         if (xyz.mode != xyzModem_xmodem && 0 != xyz.file_length) {
                             xyz.read_length += xyz.len;
                             if (xyz.read_length > xyz.file_length) {
@@ -587,9 +587,9 @@ xyzModem_stream_read(char *buf, int size, int *err)
 #endif
                         break;
                     } else if (xyz.blk == ((xyz.next_blk - 1) & 0xFF)) {
-                        // Just re-ACK this so sender will get on with it
+                        /* Just re-ACK this so sender will get on with it */
                         CYGACC_COMM_IF_PUTC(*xyz.__chan, ACK);
-                        continue;  // Need new header
+                        continue;  /* Need new header */
                     } else {
                         stat = xyzModem_sequence;
                     }
@@ -604,7 +604,7 @@ xyzModem_stream_read(char *buf, int size, int *err)
                         CYGACC_COMM_IF_PUTC(*xyz.__chan, (xyz.crc_mode ? 'C' : NAK));
                         xyz.total_retries++;
                         ZM_DEBUG(zm_dprintf("Reading Final Header\n"));
-                        stat = xyzModem_get_hdr();                        
+                        stat = xyzModem_get_hdr();
                         CYGACC_COMM_IF_PUTC(*xyz.__chan, ACK);
                         ZM_DEBUG(zm_dprintf("FINAL ACK (%d)\n", __LINE__));
                     }
@@ -621,7 +621,7 @@ xyzModem_stream_read(char *buf, int size, int *err)
                 return total;
             }
         }
-        // Don't "read" data from the EOF protocol package
+        /* Don't "read" data from the EOF protocol package */
         if (!xyz.at_eof) {
             len = xyz.len;
             if (size < len) len = size;
@@ -639,15 +639,15 @@ xyzModem_stream_read(char *buf, int size, int *err)
 void
 xyzModem_stream_close(int *err)
 {
-    diag_printf("xyzModem - %s mode, %d(SOH)/%d(STX)/%d(CAN) packets, %d retries\n", 
+    diag_printf("xyzModem - %s mode, %d(SOH)/%d(STX)/%d(CAN) packets, %d retries\n",
                 xyz.crc_mode ? "CRC" : "Cksum",
                 xyz.total_SOH, xyz.total_STX, xyz.total_CAN,
                 xyz.total_retries);
     ZM_DEBUG(zm_flush());
 }
 
-// Need to be able to clean out the input buffer, so have to take the
-// getc
+/* Need to be able to clean out the input buffer, so have to take the */
+/* getc */
 void xyzModem_stream_terminate(bool abort, int (*getc)(void))
 {
   int c;
@@ -657,8 +657,8 @@ void xyzModem_stream_terminate(bool abort, int (*getc)(void))
       switch (xyz.mode) {
        case xyzModem_xmodem:
        case xyzModem_ymodem:
-         // The X/YMODEM Spec seems to suggest that multiple CAN followed by an equal
-         // number of Backspaces is a friendly way to get the other end to abort.
+         /* The X/YMODEM Spec seems to suggest that multiple CAN followed by an equal */
+         /* number of Backspaces is a friendly way to get the other end to abort. */
          CYGACC_COMM_IF_PUTC(*xyz.__chan,CAN);
          CYGACC_COMM_IF_PUTC(*xyz.__chan,CAN);
          CYGACC_COMM_IF_PUTC(*xyz.__chan,CAN);
@@ -667,29 +667,33 @@ void xyzModem_stream_terminate(bool abort, int (*getc)(void))
          CYGACC_COMM_IF_PUTC(*xyz.__chan,BSP);
          CYGACC_COMM_IF_PUTC(*xyz.__chan,BSP);
          CYGACC_COMM_IF_PUTC(*xyz.__chan,BSP);
-         // Now consume the rest of what's waiting on the line.
+         /* Now consume the rest of what's waiting on the line. */
          ZM_DEBUG(zm_dprintf("Flushing serial line.\n"));
          xyzModem_flush();
           xyz.at_eof = true;
        break;
 #ifdef xyzModem_zmodem
        case xyzModem_zmodem:
-         // Might support it some day I suppose.
+         /* Might support it some day I suppose. */
 #endif
        break;
       }
   } else {
       ZM_DEBUG(zm_dprintf("Engaging cleanup mode...\n"));
-      // Consume any trailing crap left in the inbuffer from
-      // previous recieved blocks. Since very few files are an exact multiple
-      // of the transfer block size, there will almost always be some gunk here.
-      // If we don't eat it now, RedBoot will think the user typed it.
+      /*
+       * Consume any trailing crap left in the inbuffer from
+       * previous recieved blocks. Since very few files are an exact multiple
+       * of the transfer block size, there will almost always be some gunk here.
+       * If we don't eat it now, RedBoot will think the user typed it.
+       */
       ZM_DEBUG(zm_dprintf("Trailing gunk:\n"));
       while ((c = (*getc)()) > -1) ;
       ZM_DEBUG(zm_dprintf("\n"));
-      // Make a small delay to give terminal programs like minicom
-      // time to get control again after their file transfer program
-      // exits.
+      /*
+       * Make a small delay to give terminal programs like minicom
+       * time to get control again after their file transfer program
+       * exits.
+       */
       CYGACC_CALL_IF_DELAY_US((cyg_int32)250000);
   }
 }
@@ -728,12 +732,12 @@ xyzModem_error(int err)
     }
 }
 
-//
-// RedBoot interface
-//
-#if 0 // SB
+/*
+ * RedBoot interface
+ */
+#if 0 /* SB */
 GETC_IO_FUNCS(xyzModem_io, xyzModem_stream_open, xyzModem_stream_close,
               xyzModem_stream_terminate, xyzModem_stream_read, xyzModem_error);
 RedBoot_load(xmodem, xyzModem_io, false, false, xyzModem_xmodem);
 RedBoot_load(ymodem, xyzModem_io, false, false, xyzModem_ymodem);
-#endif 
+#endif