diff options
| author | wdenk <wdenk> | 2003-06-19 23:40:20 +0000 | 
|---|---|---|
| committer | wdenk <wdenk> | 2003-06-19 23:40:20 +0000 | 
| commit | 6dd652fa4d8591a32e2707a91f4582ed13011b17 (patch) | |
| tree | 52d7c375a3a33d634e7c30908a75bf9616d92854 /board/hymod/fetch.c | |
| parent | 52f52c1494eedaeacccad6e2331f4f638b48f5ab (diff) | |
| download | olio-uboot-2014.01-6dd652fa4d8591a32e2707a91f4582ed13011b17.tar.xz olio-uboot-2014.01-6dd652fa4d8591a32e2707a91f4582ed13011b17.zip | |
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 | 151 | 
1 files changed, 58 insertions, 93 deletions
| diff --git a/board/hymod/fetch.c b/board/hymod/fetch.c index dcbda3174..e121d5565 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; +	char *ethaddr; +	uchar *fp, *efp; +	int rc, count = 0; -    while ((ethaddr = getenv("ethaddr")) == NULL || *ethaddr == '\0') { +	while ((ethaddr = getenv ("ethaddr")) == NULL || *ethaddr == '\0') { -	puts("*** Ethernet address is not set\n"); +		printf ("*** Ethernet address is%s not set\n", +			count == 0 ? "" : " STILL"); -	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; +		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); -    } - -    if (NetBootFileXferSize == 0) { -	printf("can't determine size of file '%s'\n", fn); -	return (0); -    } -    fp = (uchar *)load_addr; -    efp = fp + NetBootFileXferSize; +	copy_filename (BootFile, fn, sizeof (BootFile)); +	load_addr = addr; +	NetBootFileXferSize = 0; -    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);  } |