Mercurial > nand-ecoscentric
diff packages/redboot/current/src/load.c @ 210:d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
| author | jlarmour |
|---|---|
| date | Thu, 23 May 2002 22:59:51 +0000 |
| parents | e0c0827131d1 |
| children | 6eb55882e01c |
line wrap: on
line diff
--- a/packages/redboot/current/src/load.c +++ b/packages/redboot/current/src/load.c @@ -34,7 +34,7 @@ // 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 +// at http://sources.redhat.com/ecos/ecos-license/ // ------------------------------------------- //####ECOSGPLCOPYRIGHTEND#### //========================================================================== @@ -58,6 +58,9 @@ #ifdef CYGPKG_REDBOOT_DISK #include <fs/disk.h> #endif +#ifdef CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD +#include <net/http.h> +#endif // Buffers, data used by redboot_getc #define BUF_SIZE 256 @@ -78,7 +81,15 @@ static char usage[] = "[-r] [-v] " #ifdef CYGPKG_COMPRESS_ZLIB "[-d] " #endif - "[-h <host>] [-m {TFTP | xyzMODEM" + "[-h <host>] [-m {TFTP " +#ifdef CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD + "| HTTP" +#endif +#ifdef xyzModem_zmodem + "| {x|y|z}MODEM" +#else + "| {x|y}MODEM" +#endif #ifdef CYGPKG_REDBOOT_DISK " | disk" #endif @@ -508,8 +519,13 @@ redboot_getc_close(void) #define MODE_TFTP 0 #define MODE_XMODEM xyzModem_xmodem // 1 #define MODE_YMODEM xyzModem_ymodem // 2 +#ifdef xyzModem_zmodem #define MODE_ZMODEM xyzModem_zmodem // 3 +#endif #define MODE_DISK 4 +#ifdef CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD +#define MODE_HTTP 5 +#endif void do_load(int argc, char *argv[]) @@ -602,9 +618,11 @@ do_load(int argc, char *argv[]) case 'y': mode = MODE_YMODEM; break; +#ifdef xyzModem_zmodem case 'z': mode = MODE_ZMODEM; break; +#endif default: diag_printf("Invalid 'mode': %s\n", mode_str); return; @@ -616,6 +634,10 @@ do_load(int argc, char *argv[]) } else if (strcasecmp(mode_str, "disk") == 0) { mode = MODE_DISK; #endif +#ifdef CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD + } else if (strcasecmp(mode_str, "http") == 0) { + mode = MODE_HTTP; +#endif #ifdef CYGPKG_REDBOOT_NETWORKING } else if (strcasecmp(mode_str, "tftp") == 0) { mode = MODE_TFTP; @@ -638,8 +660,16 @@ do_load(int argc, char *argv[]) #endif #if CYGNUM_HAL_VIRTUAL_VECTOR_NUM_CHANNELS > 1 if (chan_set) { - if ((mode != MODE_XMODEM) && (mode != MODE_YMODEM) && (mode != MODE_ZMODEM)) { + if ((mode != MODE_XMODEM) && +#ifdef MODE_ZMODEM + (mode != MODE_ZMODEM) && +#endif + (mode != MODE_YMODEM)) { +#ifdef xyzModem_zmodem diag_printf("I/O channel can only be used with {xyz}Modem\n"); +#else + diag_printf("I/O channel can only be used with {xy}Modem\n"); +#endif return; } if (chan >= CYGNUM_HAL_VIRTUAL_VECTOR_NUM_CHANNELS) { @@ -683,6 +713,17 @@ do_load(int argc, char *argv[]) redboot_getc_init(disk_stream_read, verbose, decompress); } #endif +#ifdef CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD + else if (mode == MODE_HTTP) { + res = http_stream_open(filename, &host, &err); + if (res < 0) { + + diag_printf("Can't load '%s': %s\n", filename, http_error(err)); + return; + } + redboot_getc_init(http_stream_read, verbose, decompress); + } +#endif else { res = xyzModem_stream_open(filename, mode, chan, &err); if (res < 0) { @@ -762,6 +803,11 @@ do_load(int argc, char *argv[]) disk_stream_close(&err); break; #endif +#ifdef CYGSEM_REDBOOT_NET_HTTP_DOWNLOAD + case MODE_HTTP: + http_stream_close(&err); + break; +#endif #ifdef CYGPKG_REDBOOT_NETWORKING case MODE_TFTP: tftp_stream_close(&err);
