From 6dd652fa4d8591a32e2707a91f4582ed13011b17 Mon Sep 17 00:00:00 2001 From: wdenk Date: Thu, 19 Jun 2003 23:40:20 +0000 Subject: 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 --- board/hymod/fetch.c | 157 ++++++++++++++++++++-------------------------------- 1 file changed, 61 insertions(+), 96 deletions(-) (limited to 'board/hymod/fetch.c') diff --git a/board/hymod/fetch.c b/board/hymod/fetch.c index dcbda3174a..e121d5565e 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, CSIRO-MIT, * * See file CREDITS for list of people who contributed to this * project. @@ -25,118 +24,84 @@ #include #include -/* 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); } -- cgit v1.2.3