X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fflash%2Fnor%2Ftcl.c;h=b00516d9d7aea73c9ed1bd93ac4e4fee1c34407b;hp=8c13241ddd9b198827cc1431a68e5d8579920afc;hb=c65d94f7d0e0c511794ea1f42ddf01e66f97e236;hpb=3cb0b56005059314c8d09d2f8574042a4352dab4 diff --git a/src/flash/nor/tcl.c b/src/flash/nor/tcl.c index 8c13241ddd..b00516d9d7 100644 --- a/src/flash/nor/tcl.c +++ b/src/flash/nor/tcl.c @@ -44,84 +44,65 @@ COMMAND_HANDLER(handle_flash_bank_command) } const char *driver_name = CMD_ARGV[0]; - for (unsigned i = 0; flash_drivers[i]; i++) + struct flash_driver *driver = flash_driver_find_by_name(driver_name); + if (NULL == driver) { - if (strcmp(driver_name, flash_drivers[i]->name) != 0) - continue; - - /* register flash specific commands */ - if (NULL != flash_drivers[i]->commands) - { - int retval = register_commands(CMD_CTX, NULL, - flash_drivers[i]->commands); - if (ERROR_OK != retval) - { - LOG_ERROR("couldn't register '%s' commands", - driver_name); - return ERROR_FAIL; - } - } + /* no matching flash driver found */ + LOG_ERROR("flash driver '%s' not found", driver_name); + return ERROR_FAIL; + } - struct flash_bank *p, *c; - c = malloc(sizeof(struct flash_bank)); - c->name = strdup(bank_name); - c->target = target; - c->driver = flash_drivers[i]; - c->driver_priv = NULL; - COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], c->base); - COMMAND_PARSE_NUMBER(u32, CMD_ARGV[2], c->size); - COMMAND_PARSE_NUMBER(int, CMD_ARGV[3], c->chip_width); - COMMAND_PARSE_NUMBER(int, CMD_ARGV[4], c->bus_width); - c->num_sectors = 0; - c->sectors = NULL; - c->next = NULL; - - int retval; - retval = CALL_COMMAND_HANDLER(flash_drivers[i]->flash_bank_command, c); + /* register flash specific commands */ + if (NULL != driver->commands) + { + int retval = register_commands(CMD_CTX, NULL, + driver->commands); if (ERROR_OK != retval) { - LOG_ERROR("'%s' driver rejected flash bank at 0x%8.8" PRIx32, - driver_name, c->base); - free(c); - return retval; - } - - /* put flash bank in linked list */ - if (flash_banks) - { - int bank_num = 0; - /* find last flash bank */ - for (p = flash_banks; p && p->next; p = p->next) bank_num++; - if (p) - p->next = c; - c->bank_number = bank_num + 1; - } - else - { - flash_banks = c; - c->bank_number = 0; + LOG_ERROR("couldn't register '%s' commands", + driver_name); + return ERROR_FAIL; } + } - return ERROR_OK; + struct flash_bank *c = malloc(sizeof(*c)); + c->name = strdup(bank_name); + c->target = target; + c->driver = driver; + c->driver_priv = NULL; + COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], c->base); + COMMAND_PARSE_NUMBER(u32, CMD_ARGV[2], c->size); + COMMAND_PARSE_NUMBER(int, CMD_ARGV[3], c->chip_width); + COMMAND_PARSE_NUMBER(int, CMD_ARGV[4], c->bus_width); + c->num_sectors = 0; + c->sectors = NULL; + c->next = NULL; + + int retval; + retval = CALL_COMMAND_HANDLER(driver->flash_bank_command, c); + if (ERROR_OK != retval) + { + LOG_ERROR("'%s' driver rejected flash bank at 0x%8.8" PRIx32, + driver_name, c->base); + free(c); + return retval; } - /* no matching flash driver found */ - LOG_ERROR("flash driver '%s' not found", driver_name); - return ERROR_FAIL; + return ERROR_OK; + } static int jim_flash_banks(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { - struct flash_bank *p; - if (argc != 1) { Jim_WrongNumArgs(interp, 1, argv, "no arguments to flash_banks command"); return JIM_ERR; } Jim_Obj *list = Jim_NewListObj(interp, NULL, 0); - for (p = flash_banks; p; p = p->next) + + for (struct flash_bank *p = flash_bank_list(); p; p = p->next) { Jim_Obj *elem = Jim_NewListObj(interp, NULL, 0);