From: Erik M. <er...@us...> - 2002-01-06 18:59:44
|
Update of /cvsroot/blob/blob/src/blob In directory usw-pr-cvs1:/tmp/cvs-serv26911/src/blob Modified Files: main.c Log Message: MD5 support by Chris Hoover Index: main.c =================================================================== RCS file: /cvsroot/blob/blob/src/blob/main.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- main.c 2002/01/05 20:21:49 1.21 +++ main.c 2002/01/06 18:59:40 1.22 @@ -46,6 +46,8 @@ #include <blob/init.h> #include <blob/led.h> #include <blob/main.h> +#include <blob/md5.h> +#include <blob/md5support.h> #include <blob/memory.h> #include <blob/param_block.h> #include <blob/sa1100.h> @@ -184,13 +186,15 @@ static int set_download_parameters(char *name, u32 *startAddress, - int *bufLen, int **numRead) + int *bufLen, int **numRead, + u32 **digest) { if(strncmp(name, "blob", 5) == 0) { /* download blob */ *startAddress = BLOB_RAM_BASE; *bufLen = BLOB_FLASH_LEN; *numRead = &blob_status.blobSize; + *digest = blob_status.blob_md5_digest; blob_status.blobType = fromDownload; #ifdef PARAM_START } else if(strncmp(name, "param", 6) == 0) { @@ -198,6 +202,7 @@ *startAddress = PARAM_RAM_BASE; *bufLen = PARAM_FLASH_LEN; *numRead = &blob_status.paramSize; + *digest = blob_status.param_md5_digest; blob_status.paramType = fromDownload; #endif } else if(strncmp(name, "kernel", 7) == 0) { @@ -205,12 +210,14 @@ *startAddress = KERNEL_RAM_BASE; *bufLen = KERNEL_FLASH_LEN; *numRead = &blob_status.kernelSize; + *digest = blob_status.kernel_md5_digest; blob_status.kernelType = fromDownload; } else if(strncmp(name, "ramdisk", 8) == 0) { /* download ramdisk */ *startAddress = RAMDISK_RAM_BASE; *bufLen = RAMDISK_FLASH_LEN; *numRead = &blob_status.ramdiskSize; + *digest = blob_status.ramdisk_md5_digest; blob_status.ramdiskType = fromDownload; } else { printerror(-EINVAL, name); @@ -223,18 +230,29 @@ +static void do_md5sum(u32 *addr, size_t len, u32 *digest) +{ +#ifdef CONFIG_MD5_SUPPORT + md5_buffer((const char *)addr, len, digest); +#endif +} + + + + static int Download(int argc, char *argv[]) { - u32 startAddress = 0; + u32 startAddress; int bufLen; - int *numRead = 0; + int *numRead; int retval; + u32 *digest; if(argc < 2) return -ENOPARAMS; retval = set_download_parameters(argv[1], &startAddress, - &bufLen, &numRead); + &bufLen, &numRead, &digest); if (blob_status.terminalSpeed != blob_status.downloadSpeed) { SerialOutputString("Switching to "); @@ -269,6 +287,9 @@ serial_init(blob_status.terminalSpeed); return retval; } + + do_md5sum((u32 *)startAddress, *numRead, digest); + SerialOutputString("Received "); SerialOutputDec(*numRead); SerialOutputString(" (0x"); @@ -277,8 +298,12 @@ #ifdef BLOB_DEBUG SerialOutputString(" at 0x"); SerialOutputHex((u32) startAddress); +#ifdef CONFIG_MD5_SUPPORT + SerialOutputString(", MD5: "); + print_md5_digest(digest); #endif - SerialOutputString(".\n"); +#endif + serial_write('\n'); serial_init(blob_status.terminalSpeed); @@ -296,16 +321,17 @@ static int xdownload(int argc, char *argv[]) { - u32 startAddress = 0; + u32 startAddress; int bufLen; - int *numRead = 0; + int *numRead; int retval; + u32 *digest; if(argc < 2) return -ENOPARAMS; retval = set_download_parameters(argv[1], &startAddress, - &bufLen, &numRead); + &bufLen, &numRead, &digest); if (blob_status.terminalSpeed != blob_status.downloadSpeed) { SerialOutputString("Switching to "); @@ -343,6 +369,9 @@ serial_init(blob_status.terminalSpeed); return retval; } + + do_md5sum((u32 *)startAddress, *numRead, digest); + SerialOutputString("Received "); SerialOutputDec(*numRead); SerialOutputString(" (0x"); @@ -351,8 +380,12 @@ #ifdef BLOB_DEBUG SerialOutputString(" at 0x"); SerialOutputHex((u32) startAddress); +#ifdef CONFIG_MD5_SUPPORT + SerialOutputString(", MD5: "); + print_md5_digest(digest); #endif - SerialOutputString(".\n"); +#endif + serial_write('\n'); serial_init(blob_status.terminalSpeed); @@ -513,68 +546,88 @@ { SerialOutputString(version_str); - SerialOutputString("Download speed : "); + SerialOutputString("Download speed : "); PrintSerialSpeed(blob_status.downloadSpeed); SerialOutputString(" baud\n"); - SerialOutputString("Terminal speed : "); + SerialOutputString("Terminal speed : "); PrintSerialSpeed(blob_status.terminalSpeed); SerialOutputString(" baud\n"); - SerialOutputString("blob "); + SerialOutputString("blob (0x"); SerialOutputHex(BLOB_FLASH_BASE); - SerialOutputString(": "); + SerialOutputString("): "); if(blob_status.blobType == fromFlash) { SerialOutputString("from flash\n"); } else { - SerialOutputString("downloaded at "); + SerialOutputString("downloaded at 0x"); SerialOutputHex(BLOB_RAM_BASE); SerialOutputString(", "); SerialOutputDec(blob_status.blobSize); SerialOutputString(" bytes\n"); +#ifdef CONFIG_MD5_SUPPORT + SerialOutputString(" MD5: "); + print_md5_digest(blob_status.blob_md5_digest); + serial_write('\n'); +#endif } #ifdef PARAM_START - SerialOutputString("param "); + SerialOutputString("param (0x"); SerialOutputHex(PARAM_FLASH_BASE); - SerialOutputString(": "); + SerialOutputString("): "); if(blob_status.paramType == fromFlash) { SerialOutputString("from flash\n"); } else { - SerialOutputString("downloaded at "); + SerialOutputString("downloaded at 0x"); SerialOutputHex(PARAM_RAM_BASE); SerialOutputString(", "); SerialOutputDec(blob_status.paramSize); SerialOutputString(" bytes\n"); +#ifdef CONFIG_MD5_SUPPORT + SerialOutputString(" MD5: "); + print_md5_digest(blob_status.param_md5_digest); + serial_write('\n'); +#endif } #else - SerialOutputString("param : Not available\n"); + SerialOutputString("param : Not available\n"); #endif - SerialOutputString("kernel "); + SerialOutputString("kernel (0x"); SerialOutputHex(KERNEL_FLASH_BASE); - SerialOutputString(": "); + SerialOutputString("): "); if(blob_status.kernelType == fromFlash) { SerialOutputString("from flash\n"); } else { - SerialOutputString("downloaded at "); + SerialOutputString("downloaded at 0x"); SerialOutputHex(KERNEL_RAM_BASE); SerialOutputString(", "); SerialOutputDec(blob_status.kernelSize); SerialOutputString(" bytes\n"); +#ifdef CONFIG_MD5_SUPPORT + SerialOutputString(" MD5: "); + print_md5_digest(blob_status.kernel_md5_digest); + serial_write('\n'); +#endif } - SerialOutputString("ramdisk "); + SerialOutputString("ramdisk (0x"); SerialOutputHex(RAMDISK_FLASH_BASE); - SerialOutputString(": "); + SerialOutputString("): "); if(blob_status.ramdiskType == fromFlash) { SerialOutputString("from flash\n"); } else { - SerialOutputString("downloaded at "); + SerialOutputString("downloaded at 0x"); SerialOutputHex(RAMDISK_RAM_BASE); SerialOutputString(", "); SerialOutputDec(blob_status.ramdiskSize); SerialOutputString(" bytes\n"); +#ifdef CONFIG_MD5_SUPPORT + SerialOutputString(" MD5: "); + print_md5_digest(blob_status.ramdisk_md5_digest); + serial_write('\n'); +#endif } return 0; |