diff options
author | wdenk | 2003-06-19 23:40:20 +0000 |
---|---|---|
committer | wdenk | 2003-06-19 23:40:20 +0000 |
commit | 6dd652fa4d8591a32e2707a91f4582ed13011b17 (patch) | |
tree | 52d7c375a3a33d634e7c30908a75bf9616d92854 /board/hymod/fetch.c | |
parent | 52f52c1494eedaeacccad6e2331f4f638b48f5ab (diff) |
Patches by Murray Jensen, 17 Jun 2003:
- Hymod board database mods: add "who" field and new xilinx chip types
- provide new "init_cmd_timeout()" function so code external to
"common/main.c" can use the "reset_cmd_timeout()" function before
entering the main loop
- add DTT support for adm1021 (new file dtt/adm1021.c; config
slightly different. see include/configs/hymod.h for an example
(requires CONFIG_DTT_ADM1021, CONFIG_DTT_SENSORS, and
CFG_DTT_ADM1021 defined)
- add new "eeprom_probe()" function which has similar args and
behaves in a similar way to "eeprom_read()" etc.
- add 8260 FCC ethernet loopback code (new "eth_loopback_test()"
function which is enabled by defining CONFIG_ETHER_LOOPBACK_TEST)
- gdbtools copyright update
- ensure that set_msr() executes the "sync" and "isync" instructions
after the "mtmsr" instruction in cpu/mpc8260/interrupts.c
- 8260 I/O ports fix: Open Drain should be set last when configuring
- add SIU IRQ defines for 8260
- allow LDSCRIPT override and OBJCFLAGS initialization: change to
config.mk to allow board configurations to override the GNU
linker script, selected via the LDSCRIPT, make variable, and to
give an initial value to the OBJCFLAGS make variable
- 8260 i2c enhancement:
o correctly extends the timeout depending on the size of all
queued messages for both transmit and receive
o will not continue with receive if transmit times out
o ensures that the error callback is done for all queued tx
and rx messages
o correctly detects both tx and rx timeouts, only delivers one to
the callback, and does not overwrite an earlier error
o logic in i2c_probe now correct
- add "vprintf()" function so that "panic()" function can be
technically correct
- many Hymod board changes
Diffstat (limited to 'board/hymod/fetch.c')
-rw-r--r-- | board/hymod/fetch.c | 157 |
1 files changed, 61 insertions, 96 deletions
diff --git a/board/hymod/fetch.c b/board/hymod/fetch.c index dcbda3174af..e121d5565e6 100644 --- a/board/hymod/fetch.c +++ b/board/hymod/fetch.c @@ -1,7 +1,6 @@ /* * (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. @@ -25,118 +24,84 @@ #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; + 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); } - 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; - } - } - - 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); - } + copy_filename (BootFile, fn, sizeof (BootFile)); + load_addr = addr; + NetBootFileXferSize = 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; - - if (*fp == '#' || *fp == '\n') { - while (fp < efp && *fp++ != '\n') - ; - continue; + if (NetLoop (TFTP) == 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); } |