9
0
Fork 0

Some code cleanup

This commit is contained in:
Wolfgang Denk 2006-04-16 10:51:58 +02:00
parent 807522fc9a
commit cf48eb9abd
17 changed files with 570 additions and 563 deletions

View File

@ -1,19 +1,20 @@
====================================================================== ======================================================================
Changes since U-Boot 1.1.4: Changes since U-Boot 1.1.4:
====================================================================== ======================================================================
* Fix dbau1x00 Board
- Fix dbau1x00 boards broken by dbau1550 patch * Some code cleanup
* Fix dbau1x00 boards broken by dbau1550 patch
PLL:s were not set for boards other than 1550. PLL:s were not set for boards other than 1550.
Flash CFI caused card to hang due to undefined CFG_FLASH_BANKS_LIST. Flash CFI caused card to hang due to undefined CFG_FLASH_BANKS_LIST.
Default boot is now bootp for cards other than 1550. Default boot is now bootp for cards other than 1550.
Patch by Thomas Lange Aug 10 2005 Patch by Thomas Lange, 10 Aug 2005
* Fixes common/cmd_flash.c: * Fixes common/cmd_flash.c:
- fix some compiler/parser error, if using m68k tool chain - fix some compiler/parser error, if using m68k tool chain
- optical fix for protect on/off all messages, if using more - optical fix for protect on/off all messages, if using more
then one bank then one bank
Patch by Jens Scharsig, 28 July 2005 Patch by Jens Scharsig, 28 Jul 2005
* Fix Quad UART mapping on MCC200 board due to new HW revision * Fix Quad UART mapping on MCC200 board due to new HW revision

View File

@ -85,7 +85,7 @@ int board_init (void)
GPCR = 0x000003AB; /* I/O pad driving strength */ GPCR = 0x000003AB; /* I/O pad driving strength */
/* MX1_CS1U = 0x00000A00; *//* SRAM initialization */ /* MX1_CS1U = 0x00000A00; */ /* SRAM initialization */
/* MX1_CS1L = 0x11110601; */ /* MX1_CS1L = 0x11110601; */
MPCTL0 = 0x04632410; /* setting for 150 MHz MCU PLL CLK */ MPCTL0 = 0x04632410; /* setting for 150 MHz MCU PLL CLK */

View File

@ -988,20 +988,22 @@ static ulong load_serial_ymodem (ulong offset)
ulong store_addr = ~0; ulong store_addr = ~0;
ulong addr = 0; ulong addr = 0;
size=0; size = 0;
info.mode=xyzModem_ymodem; info.mode = xyzModem_ymodem;
res=xyzModem_stream_open(&info, &err); res = xyzModem_stream_open (&info, &err);
if (!res) { if (!res) {
while ((res=xyzModem_stream_read(ymodemBuf, 1024, &err)) > 0 ){ while ((res =
xyzModem_stream_read (ymodemBuf, 1024, &err)) > 0) {
store_addr = addr + offset; store_addr = addr + offset;
size+=res; size += res;
addr+=res; addr += res;
#ifndef CFG_NO_FLASH #ifndef CFG_NO_FLASH
if (addr2info(store_addr)) { if (addr2info (store_addr)) {
int rc; int rc;
rc = flash_write((char *)ymodemBuf,store_addr,res); rc = flash_write ((char *) ymodemBuf,
store_addr, res);
if (rc != 0) { if (rc != 0) {
flash_perror (rc); flash_perror (rc);
return (~0); return (~0);
@ -1009,24 +1011,24 @@ static ulong load_serial_ymodem (ulong offset)
} else } else
#endif #endif
{ {
memcpy ((char *)(store_addr), ymodemBuf, res); memcpy ((char *) (store_addr), ymodemBuf,
res);
} }
} }
} } else {
else { printf ("%s\n", xyzModem_error (err));
printf ("%s\n",xyzModem_error(err));
} }
xyzModem_stream_close(&err); xyzModem_stream_close (&err);
xyzModem_stream_terminate(false,&getcxmodem); xyzModem_stream_terminate (false, &getcxmodem);
flush_cache (offset, size); flush_cache (offset, size);
printf("## Total Size = 0x%08x = %d Bytes\n", size, size); printf ("## Total Size = 0x%08x = %d Bytes\n", size, size);
sprintf(buf, "%X", size); sprintf (buf, "%X", size);
setenv("filesize", buf); setenv ("filesize", buf);
return offset; return offset;
} }

View File

@ -1,61 +1,63 @@
//========================================================================== /*
// *==========================================================================
// crc16.c *
// * crc16.c
// 16 bit CRC with polynomial x^16+x^12+x^5+1 *
// * 16 bit CRC with polynomial x^16+x^12+x^5+1
//========================================================================== *
//####ECOSGPLCOPYRIGHTBEGIN#### *==========================================================================
// ------------------------------------------- *####ECOSGPLCOPYRIGHTBEGIN####
// This file is part of eCos, the Embedded Configurable Operating System. * -------------------------------------------
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. * This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 2002 Gary Thomas * 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 * eCos is free software; you can redistribute it and/or modify it under
// Software Foundation; either version 2 or (at your option) any later version. * 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 * eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * WARRANTY; without even the implied warranty of MERCHANTABILITY or
// for more details. * 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., * You should have received a copy of the GNU General Public License along
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * 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 * As a special exception, if other files instantiate templates or use macros
// with other works to produce a work based on this file, this file does not * or inline functions from this file, or you compile this file and link it
// by itself cause the resulting work to be covered by the GNU General Public * with other works to produce a work based on this file, this file does not
// License. However the source code for this file must still be made available * by itself cause the resulting work to be covered by the GNU General Public
// in accordance with section (3) of the GNU General Public License. * 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. * 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/ * Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// ------------------------------------------- * at http: *sources.redhat.com/ecos/ecos-license/
//####ECOSGPLCOPYRIGHTEND#### * -------------------------------------------
//========================================================================== *####ECOSGPLCOPYRIGHTEND####
//#####DESCRIPTIONBEGIN#### *==========================================================================
// *#####DESCRIPTIONBEGIN####
// Author(s): gthomas *
// Contributors: gthomas,asl * Author(s): gthomas
// Date: 2001-01-31 * Contributors: gthomas,asl
// Purpose: * Date: 2001-01-31
// Description: * Purpose:
// * Description:
// This code is part of eCos (tm). *
// * This code is part of eCos (tm).
//####DESCRIPTIONEND#### *
// *####DESCRIPTIONEND####
//========================================================================== *
*==========================================================================
*/
#include "crc.h" #include "crc.h"
// Table of CRC constants - implements x^16+x^12+x^5+1 /* Table of CRC constants - implements x^16+x^12+x^5+1 */
static const uint16_t crc16_tab[] = { static const uint16_t crc16_tab[] = {
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
@ -103,4 +105,3 @@ cyg_crc16(unsigned char *buf, int len)
} }
return cksum; return cksum;
} }

View File

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

View File

@ -426,7 +426,7 @@ static __inline__ unsigned long get_tbms (void)
/* /*
* Initialize all of memory for ECC, then enable errors. * Initialize all of memory for ECC, then enable errors.
*/ */
//#define CONFIG_DDR_ECC_INIT_VIA_DMA /* #define CONFIG_DDR_ECC_INIT_VIA_DMA */
void ddr_enable_ecc(unsigned int dram_size) void ddr_enable_ecc(unsigned int dram_size)
{ {
uint *p; uint *p;

View File

@ -152,5 +152,3 @@ Observe that Single-Bit Error is 'on' which means that Single-Bit Error Counter
reached Single-Bit Error Threshold. Multiple Memory Errors bit is also 'on', that reached Single-Bit Error Threshold. Multiple Memory Errors bit is also 'on', that
is Counter reached Threshold more than one time (it wraps back after reaching is Counter reached Threshold more than one time (it wraps back after reaching
Threshold). Threshold).

View File

@ -1,56 +1,58 @@
//========================================================================== /*
// *==========================================================================
// crc.h *
// * crc.h
// Interface for the CRC algorithms. *
// * Interface for the CRC algorithms.
//========================================================================== *
//####ECOSGPLCOPYRIGHTBEGIN#### *==========================================================================
// ------------------------------------------- *####ECOSGPLCOPYRIGHTBEGIN####
// This file is part of eCos, the Embedded Configurable Operating System. * -------------------------------------------
// Copyright (C) 2002 Andrew Lunn * This file is part of eCos, the Embedded Configurable Operating System.
// * Copyright (C) 2002 Andrew Lunn
// 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 * eCos is free software; you can redistribute it and/or modify it under
// Software Foundation; either version 2 or (at your option) any later version. * 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 * eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * WARRANTY; without even the implied warranty of MERCHANTABILITY or
// for more details. * 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., * You should have received a copy of the GNU General Public License along
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * 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 * As a special exception, if other files instantiate templates or use macros
// with other works to produce a work based on this file, this file does not * or inline functions from this file, or you compile this file and link it
// by itself cause the resulting work to be covered by the GNU General Public * with other works to produce a work based on this file, this file does not
// License. However the source code for this file must still be made available * by itself cause the resulting work to be covered by the GNU General Public
// in accordance with section (3) of the GNU General Public License. * 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. * 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/ * Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// ------------------------------------------- * at http: *sources.redhat.com/ecos/ecos-license/
//####ECOSGPLCOPYRIGHTEND#### * -------------------------------------------
//========================================================================== *####ECOSGPLCOPYRIGHTEND####
//#####DESCRIPTIONBEGIN#### *==========================================================================
// *#####DESCRIPTIONBEGIN####
// Author(s): Andrew Lunn *
// Contributors: Andrew Lunn * Author(s): Andrew Lunn
// Date: 2002-08-06 * Contributors: Andrew Lunn
// Purpose: * Date: 2002-08-06
// Description: * Purpose:
// * Description:
// This code is part of eCos (tm). *
// * This code is part of eCos (tm).
//####DESCRIPTIONEND#### *
// *####DESCRIPTIONEND####
//========================================================================== *
*==========================================================================
*/
#ifndef _SERVICES_CRC_CRC_H_ #ifndef _SERVICES_CRC_CRC_H_
#define _SERVICES_CRC_CRC_H_ #define _SERVICES_CRC_CRC_H_
@ -65,37 +67,34 @@
# endif # endif
#endif #endif
// Compute a CRC, using the POSIX 1003 definition /* Compute a CRC, using the POSIX 1003 definition */
extern uint32_t extern uint32_t
cyg_posix_crc32(unsigned char *s, int len); cyg_posix_crc32(unsigned char *s, int len);
// Gary S. Brown's 32 bit CRC /* Gary S. Brown's 32 bit CRC */
extern uint32_t extern uint32_t
cyg_crc32(unsigned char *s, int len); cyg_crc32(unsigned char *s, int len);
// Gary S. Brown's 32 bit CRC, but accumulate the result from a /* Gary S. Brown's 32 bit CRC, but accumulate the result from a */
// previous CRC calculation /* previous CRC calculation */
extern uint32_t extern uint32_t
cyg_crc32_accumulate(uint32_t crc, unsigned char *s, int len); cyg_crc32_accumulate(uint32_t crc, unsigned char *s, int len);
// Ethernet FCS Algorithm /* Ethernet FCS Algorithm */
extern uint32_t extern uint32_t
cyg_ether_crc32(unsigned char *s, int len); cyg_ether_crc32(unsigned char *s, int len);
// Ethernet FCS algorithm, but accumulate the result from a previous /* Ethernet FCS algorithm, but accumulate the result from a previous */
// CRC calculation. /* CRC calculation. */
extern uint32_t extern uint32_t
cyg_ether_crc32_accumulate(uint32_t crc, unsigned char *s, int len); cyg_ether_crc32_accumulate(uint32_t crc, unsigned char *s, int len);
// 16 bit CRC with polynomial x^16+x^12+x^5+1 /* 16 bit CRC with polynomial x^16+x^12+x^5+1 */
extern uint16_t cyg_crc16(unsigned char *s, int len); extern uint16_t cyg_crc16(unsigned char *s, int len);
#endif // _SERVICES_CRC_CRC_H_ #endif /* _SERVICES_CRC_CRC_H_ */

View File

@ -1,65 +1,67 @@
//========================================================================== /*
// *==========================================================================
// xyzModem.h *
// * xyzModem.h
// RedBoot stream handler for xyzModem protocol *
// * RedBoot stream handler for xyzModem protocol
//========================================================================== *
//####ECOSGPLCOPYRIGHTBEGIN#### *==========================================================================
// ------------------------------------------- *####ECOSGPLCOPYRIGHTBEGIN####
// This file is part of eCos, the Embedded Configurable Operating System. * -------------------------------------------
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. * This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 2002 Gary Thomas * 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 * eCos is free software; you can redistribute it and/or modify it under
// Software Foundation; either version 2 or (at your option) any later version. * 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 * eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * WARRANTY; without even the implied warranty of MERCHANTABILITY or
// for more details. * 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., * You should have received a copy of the GNU General Public License along
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * 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 * As a special exception, if other files instantiate templates or use macros
// with other works to produce a work based on this file, this file does not * or inline functions from this file, or you compile this file and link it
// by itself cause the resulting work to be covered by the GNU General Public * with other works to produce a work based on this file, this file does not
// License. However the source code for this file must still be made available * by itself cause the resulting work to be covered by the GNU General Public
// in accordance with section (3) of the GNU General Public License. * 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. * 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/ * Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// ------------------------------------------- * at http: *sources.redhat.com/ecos/ecos-license/
//####ECOSGPLCOPYRIGHTEND#### * -------------------------------------------
//========================================================================== *####ECOSGPLCOPYRIGHTEND####
//#####DESCRIPTIONBEGIN#### *==========================================================================
// *#####DESCRIPTIONBEGIN####
// Author(s): gthomas *
// Contributors: gthomas * Author(s): gthomas
// Date: 2000-07-14 * Contributors: gthomas
// Purpose: * Date: 2000-07-14
// Description: * Purpose:
// * Description:
// This code is part of RedBoot (tm). *
// * This code is part of RedBoot (tm).
//####DESCRIPTIONEND#### *
// *####DESCRIPTIONEND####
//========================================================================== *
*==========================================================================
*/
#ifndef _XYZMODEM_H_ #ifndef _XYZMODEM_H_
#define _XYZMODEM_H_ #define _XYZMODEM_H_
#define xyzModem_xmodem 1 #define xyzModem_xmodem 1
#define xyzModem_ymodem 2 #define xyzModem_ymodem 2
// Don't define this until the protocol support is in place /* Don't define this until the protocol support is in place */
//#define xyzModem_zmodem 3 /*#define xyzModem_zmodem 3 */
#define xyzModem_access -1 #define xyzModem_access -1
#define xyzModem_noZmodem -2 #define xyzModem_noZmodem -2
@ -109,4 +111,4 @@ void xyzModem_stream_terminate(bool method, int (*getc)(void));
int xyzModem_stream_read(char *buf, int size, int *err); int xyzModem_stream_read(char *buf, int size, int *err);
char *xyzModem_error(int err); char *xyzModem_error(int err);
#endif // _XYZMODEM_H_ #endif /* _XYZMODEM_H_ */