From: Stefan E. <se...@us...> - 2001-10-29 11:49:23
|
Update of /cvsroot/blob/blob/src/blob In directory usw-pr-cvs1:/tmp/cvs-serv10446 Modified Files: debug.c Log Message: - added byte, word and long poke modes - cleanups, mostly cosmetic Index: debug.c =================================================================== RCS file: /cvsroot/blob/blob/src/blob/debug.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- debug.c 2001/10/07 23:01:08 1.3 +++ debug.c 2001/10/29 11:49:20 1.4 @@ -36,10 +36,14 @@ #include <blob/serial.h> #include <blob/command.h> +#include <blob/debug.h> + /********************************************************************** * defines */ +#define CHKMEM_DEBUG 1 + /* this will send a cold shiver through erik's spine ... */ #define ERR( x ) { ret = x; goto DONE; } @@ -50,6 +54,16 @@ * program globals */ +char memcpyhelp[] = "memcpy [source] [dest] [len]\n" +"copy memory blocks\n"; + +char pokehelp[] = "poke address value\n"; + +char peekhelp[] = "peek address\n"; + +char bitchghelp[] = "bitchg address value {and|or|xor|set|clear}\n"; + + /********************************************************************** * module globals */ @@ -58,29 +72,17 @@ * prototypes */ -void perror( int errno, char *func ) -{ - printerrprefix(); - - if ( errno < 0 ) - errno = -errno; - - if ( func != NULL) { - SerialOutputString(func); - SerialOutputString(": "); - } - SerialOutputString(strerror(errno)); - - SerialOutputByte('\n'); -} +static void perror( int errno, char *func ); /********************************************************************** * exported functions */ -/********************************************************************** - * static functions - */ +/* Commandlist stuff */ +__commandlist(CmdMemcpy, "memcpy", memcpyhelp); +__commandlist(Poke, "poke", pokehelp ); +__commandlist(Peek, "peek", peekhelp ); +__commandlist(BitChange, "bitchg", bitchghelp ); /********************************************************************* * CmdMemcpy @@ -91,7 +93,7 @@ * Command wrapper for memcpy utility function. * */ -static int CmdMemcpy( int argc, char *argv[] ) +int CmdMemcpy( int argc, char *argv[] ) { int ret = 0; u32 src = 0L; @@ -136,10 +138,6 @@ return ret; } -static char memcpyhelp[] = "memcpy [source] [dest] [len]\n" -"copy memory blocks\n"; -__commandlist(CmdMemcpy, "memcpy", memcpyhelp); - /********************************************************************* * Poke * @@ -154,6 +152,7 @@ int ret = 0; u32 address; u32 value; + char type = 'l'; if ( argc < 3 ) ERR( -EINVAL ); @@ -163,16 +162,43 @@ ret = strtou32(argv[2], &value); if ( ret < 0 ) ERR( -EINVAL ); + if ( argc >= 3 ) { + type = argv[3][0]; + } + #if CHKMEM_DEBUG SerialOutputString("adr=0x"); SerialOutputHex(address); SerialOutputString(" val=0x"); SerialOutputHex(value); + SerialOutputString(" type="); + SerialOutputByte(type); SerialOutputString("\n"); #endif - MEM( address ) = value; +#define mem_b(adr) ( ((volatile unsigned char*)0)[adr] ) +#define mem_w(adr) ( ((volatile unsigned short int*)0)[(adr)/2] ) +#define mem_dw(adr) ( ((volatile unsigned long*)(0)) [(adr)/4] ) + switch( type | 0x20 ) { + case 'b': + mem_b( address ) = value & 0xff; + //(*((u8 *)address)) = value & 0xff; + break; + case 'w': + mem_w( address ) = value & 0xffff; + //(*((u16 *)address)) = value & 0xffff; + break; + case 'l': + mem_dw( address ) = value; + //(*((u32 *)address)) = value; + break; + default: + ERR( -EINVAL ); + break; + } + + ret = 0; DONE: if ( ret != 0 ) { @@ -180,9 +206,6 @@ } return ret; } -static char pokehelp[] = "poke address value\n"; -__commandlist(Poke, "poke", pokehelp ); - /********************************************************************* * Peek * @@ -221,9 +244,6 @@ } return ret; } -static char peekhelp[] = "peek address\n"; -__commandlist(Peek, "peek", peekhelp ); - /********************************************************************* * BitChange @@ -280,6 +300,23 @@ } return ret; } -static char bitchghelp[] = "bitchg address value {and|or|xor|set|clear}\n"; -__commandlist(BitChange, "bitchg", bitchghelp ); +/********************************************************************** + * static functions + */ + +static void perror( int errno, char *func ) +{ + printerrprefix(); + + if ( errno < 0 ) + errno = -errno; + + if ( func != NULL) { + SerialOutputString(func); + SerialOutputString(": "); + } + SerialOutputString(strerror(errno)); + + SerialOutputByte('\n'); +} |