X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fecosboard.c;h=937da9220047760165a2c4f2471ad5e3c5a7e916;hp=11b786cb882112dbd27035386306e8955822914f;hb=dc575dc5bf8cb597a0e9a47794744ae6b1928087;hpb=42532ddeaab011992b501d28da9d9358b5bc49c2 diff --git a/src/ecosboard.c b/src/ecosboard.c index 11b786cb88..937da92200 100644 --- a/src/ecosboard.c +++ b/src/ecosboard.c @@ -26,6 +26,7 @@ #include "jtag.h" #include "configuration.h" #include "xsvf.h" +#include "svf.h" #include "target.h" #include "flash.h" #include "nand.h" @@ -38,8 +39,6 @@ #include #include -#include -#include #include #include #include @@ -83,6 +82,8 @@ #include #include + + #define MAX_IFS 64 #if defined(CYGPKG_NET_FREEBSD_STACK) #include @@ -92,7 +93,7 @@ struct tftpd_fileops fileops = (int (*)(const char *, int))open, close, (int (*)(int, const void *, int))write, - ( int (*)(int, void *, int))read + (int (*)(int, void *, int))read }; #endif @@ -147,7 +148,6 @@ void start_profile(void) } #endif -extern int eth0_up; static FILE *log; static char reboot_stack[2048]; @@ -190,7 +190,6 @@ int zy1000_configuration_output_handler_log(struct command_context_s *context, } #ifdef CYGPKG_PROFILE_GPROF -extern void start_profile(void); int eCosBoard_handle_eCosBoard_profile_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) { @@ -254,11 +253,11 @@ void copyfile(char *name2, char *name1); void copydir(char *name, char *destdir); #if 0 -MTAB_ENTRY( romfs_mte1, +MTAB_ENTRY(romfs_mte1, "/rom", "romfs", "", - (CYG_ADDRWORD) &filedata[0] ); + (CYG_ADDRWORD) &filedata[0]); #endif void openocd_sleep_prelude(void) @@ -296,18 +295,16 @@ void format(void) } cyg_io_flash_getconfig_erase_t e; - void *err_addr; len = sizeof(e); e.offset = 0; e.len = ds.dev_size; - e.err_address = &err_addr; - diag_printf("Formatting 0x%08x bytes\n", ds.dev_size); + diag_printf("Formatting 0x%08x bytes\n", (int)ds.dev_size); err = cyg_io_get_config(handle, CYG_IO_GET_CONFIG_FLASH_ERASE, &e, &len); if (err != ENOERR) { - diag_printf("Flash erase error %d offset 0x%p\n", err, err_addr); + diag_printf("Flash erase error %d offset 0x%08x\n", err, e.err_address); reboot(); } @@ -420,8 +417,6 @@ static int zylinjtag_Jim_Command_reboot(Jim_Interp *interp, int argc, } -extern Jim_Interp *interp; - static void zylinjtag_startNetwork(void) { // Bring TCP/IP up immediately before we're ready to accept commands. @@ -635,9 +630,9 @@ static void zylinjtag_uart(cyg_addrword_t data) #ifdef CYGPKG_PROFILE_GPROF start_profile(); #endif - int actual = 0; - int actual2 = 0; - int pos, pos2; + size_t actual = 0; + size_t actual2 = 0; + size_t pos, pos2; pos = 0; pos2 = 0; cur = 0; @@ -670,9 +665,11 @@ static void zylinjtag_uart(cyg_addrword_t data) if (actual2 <= 0) { memset(backwardBuffer, 's', sizeof(backwardBuffer)); - actual2 = read(serHandle, backwardBuffer, + int t; + t = read(serHandle, backwardBuffer, sizeof(backwardBuffer)); - if (actual2 < 0) + actual2 = t; + if (t < 0) { if (errno != EAGAIN) { @@ -683,8 +680,8 @@ static void zylinjtag_uart(cyg_addrword_t data) pos2 = 0; } - int x = actual2; - int y = 0; + size_t x = actual2; + size_t y = 0; if (actual2 > 0) { int written = write(session, backwardBuffer + pos2, actual2); @@ -859,7 +856,7 @@ int boolParam(char *var); command_context_t *setup_command_handler(void); -extern const char *zylin_config_dir; +static const char *zylin_config_dir="/config/settings"; int add_default_dirs(void) { @@ -869,6 +866,8 @@ int add_default_dirs(void) return ERROR_OK; } +int ioutil_init(struct command_context_s *cmd_ctx); + int main(int argc, char *argv[]) { /* ramblockdevice will be the same address every time. The deflate app uses a buffer 16mBytes out, so we @@ -976,10 +975,13 @@ int main(int argc, char *argv[]) } mkdir(zylin_config_dir, 0777); - char *dirname=alloc_printf("%s/target", zylin_config_dir); + char *dirname = alloc_printf("%s/target", zylin_config_dir); + mkdir(dirname, 0777); + free(dirname); + dirname = alloc_printf("%s/board", zylin_config_dir); mkdir(dirname, 0777); free(dirname); - dirname=alloc_printf("%s/event", zylin_config_dir); + dirname = alloc_printf("%s/event", zylin_config_dir); mkdir(dirname, 0777); free(dirname); @@ -1001,6 +1003,14 @@ int main(int argc, char *argv[]) command_set_output_handler(cmd_ctx, configuration_output_handler, NULL); command_context_mode(cmd_ctx, COMMAND_CONFIG); +#if BUILD_IOUTIL + if (ioutil_init(cmd_ctx) != ERROR_OK) + { + return EXIT_FAILURE; + } +#endif + + #ifdef CYGPKG_PROFILE_GPROF register_command(cmd_ctx, NULL, "ecosboard_profile", eCosBoard_handle_eCosBoard_profile_command, COMMAND_ANY, NULL); @@ -1026,12 +1036,15 @@ int main(int argc, char *argv[]) if (logAllToSerial) { diag_printf( - "%s/logserial=1 => sending log output to serial port using \"debug_level 3\" as default.\n", zylin_config_dir); + "%s/logserial = 1 => sending log output to serial port using \"debug_level 3\" as default.\n", zylin_config_dir); command_run_line(cmd_ctx, "debug_level 3"); } command_run_linef(cmd_ctx, "script /rom/openocd.cfg"); + /* we MUST always run the init command as it will launch telnet sessions */ + command_run_line(cmd_ctx, "init"); + // FIX!!! Yuk! // diag_printf() is really invoked from many more places than we trust it // not to cause instabilities(e.g. invoking fputc() from an interrupt is *BAD*). @@ -1083,20 +1096,7 @@ CYG_HTTPD_MIME_TABLE_ENTRY(bin_mime_label, "bin", "application/octet-stream"); #include // base kernel types #include // tracing macros #include // assertion macros -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - #include - #include #include @@ -1130,7 +1130,7 @@ static int tftpfs_fo_lseek(struct CYG_FILE_TAG *fp, off_t *apos, int whence); // For simplicity we use _FILESYSTEM synchronization for all accesses since // we should never block in any filesystem operations. #if 1 -FSTAB_ENTRY( tftpfs_fste, "tftpfs", 0, +FSTAB_ENTRY(tftpfs_fste, "tftpfs", 0, CYG_SYNCMODE_NONE, tftpfs_mount, tftpfs_umount, @@ -1151,12 +1151,12 @@ FSTAB_ENTRY( tftpfs_fste, "tftpfs", 0, // mtab entry. // This defines a single ROMFS loaded into ROM at the configured address // -// MTAB_ENTRY( rom_mte, // structure name +// MTAB_ENTRY(rom_mte, // structure name // "/rom", // mount point // "romfs", // FIlesystem type // "", // hardware device // (CYG_ADDRWORD) CYGNUM_FS_ROM_BASE_ADDRESS // Address in ROM -// ); +//); // ------------------------------------------------------------------------- @@ -1459,8 +1459,8 @@ static int logfs_fo_close(struct CYG_FILE_TAG *fp); // This defines the entry in the filesystem table. // For simplicity we use _FILESYSTEM synchronization for all accesses since // we should never block in any filesystem operations. -FSTAB_ENTRY( logfs_fste, "logfs", 0, - CYG_SYNCMODE_FILE_FILESYSTEM|CYG_SYNCMODE_IO_FILESYSTEM, +FSTAB_ENTRY(logfs_fste, "logfs", 0, + CYG_SYNCMODE_FILE_FILESYSTEM | CYG_SYNCMODE_IO_FILESYSTEM, logfs_mount, logfs_umount, logfs_open, @@ -1547,3 +1547,26 @@ static int logfs_fo_close(struct CYG_FILE_TAG *fp) return ENOERR; } +int loadFile(const char *fileName, void **data, int *len); + +/* boolean parameter stored on config */ +int boolParam(char *var) +{ + bool result = false; + char *name = alloc_printf("%s/%s", zylin_config_dir, var); + if (name == NULL) + return result; + + void *data; + int len; + if (loadFile(name, &data, &len) == ERROR_OK) + { + if (len > 1) + len = 1; + result = strncmp((char *) data, "1", len) == 0; + free(data); + } + free(name); + return result; +} +