-flash_bank_t *flash_banks;
-static command_t *flash_cmd;
-
-/* wafer thin wrapper for invoking the flash driver */
-static int flash_driver_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count)
-{
- int retval;
-
- retval=bank->driver->write(bank, buffer, offset, count);
- if (retval!=ERROR_OK)
- {
- LOG_ERROR("error writing to flash at address 0x%08x at offset 0x%8.8x (%d)", bank->base, offset, retval);
- }
-
- return retval;
-}
-
-static int flash_driver_erase(struct flash_bank_s *bank, int first, int last)
-{
- int retval;
-
- retval=bank->driver->erase(bank, first, last);
- if (retval!=ERROR_OK)
- {
- LOG_ERROR("failed erasing sectors %d to %d (%d)", first, last, retval);
- }
-
- return retval;
-}
-
-int flash_driver_protect(struct flash_bank_s *bank, int set, int first, int last)
-{
- int retval;
-
- retval=bank->driver->protect(bank, set, first, last);
- if (retval!=ERROR_OK)
- {
- LOG_ERROR("failed setting protection for areas %d to %d (%d)", first, last, retval);
- }
-
- return retval;
-}
-
-int flash_register_commands(struct command_context_s *cmd_ctx)
-{
- flash_cmd = register_command(cmd_ctx, NULL, "flash", NULL, COMMAND_ANY, NULL);
-
- register_command(cmd_ctx, flash_cmd, "bank", handle_flash_bank_command, COMMAND_CONFIG, "flash_bank <driver> <base> <size> <chip_width> <bus_width> <target> [driver_options ...]");
- return ERROR_OK;
-}
-
-static int jim_flash_banks(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
-{
- flash_bank_t *p;
-
- if (argc != 1) {
- Jim_WrongNumArgs(interp, 1, argv, "no arguments to flash_banks command");
- return JIM_ERR;
- }
-
- if (!flash_banks)
- {
- return JIM_ERR;
- }
-
- Jim_Obj *list=Jim_NewListObj(interp, NULL, 0);
- for (p = flash_banks; p; p = p->next)
- {
- Jim_Obj *elem=Jim_NewListObj(interp, NULL, 0);
-
- Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, "name", -1));
- Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, p->driver->name, -1));
- Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, "base", -1));
- Jim_ListAppendElement(interp, elem, Jim_NewIntObj(interp, p->base));
- Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, "size", -1));
- Jim_ListAppendElement(interp, elem, Jim_NewIntObj(interp, p->size));
- Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, "bus_width", -1));
- Jim_ListAppendElement(interp, elem, Jim_NewIntObj(interp, p->bus_width));
- Jim_ListAppendElement(interp, elem, Jim_NewStringObj(interp, "chip_width", -1));
- Jim_ListAppendElement(interp, elem, Jim_NewIntObj(interp, p->chip_width));
-
- Jim_ListAppendElement(interp, list, elem);
- }
-
- Jim_SetResult(interp, list);
-
- return JIM_OK;
-}
-
-int flash_init_drivers(struct command_context_s *cmd_ctx)
-{
- if (flash_banks)
- {
- register_jim(cmd_ctx, "ocd_flash_banks", jim_flash_banks, "return information about the flash banks");
-
- register_command(cmd_ctx, flash_cmd, "info", handle_flash_info_command, COMMAND_EXEC,
- "print info about flash bank <num>");
- register_command(cmd_ctx, flash_cmd, "probe", handle_flash_probe_command, COMMAND_EXEC,
- "identify flash bank <num>");
- register_command(cmd_ctx, flash_cmd, "erase_check", handle_flash_erase_check_command, COMMAND_EXEC,
- "check erase state of sectors in flash bank <num>");
- register_command(cmd_ctx, flash_cmd, "protect_check", handle_flash_protect_check_command, COMMAND_EXEC,
- "check protection state of sectors in flash bank <num>");
- register_command(cmd_ctx, flash_cmd, "erase_sector", handle_flash_erase_command, COMMAND_EXEC,
- "erase sectors at <bank> <first> <last>");
- register_command(cmd_ctx, flash_cmd, "erase_address", handle_flash_erase_address_command, COMMAND_EXEC,
- "erase address range <address> <length>");
-
- register_command(cmd_ctx, flash_cmd, "fillw", handle_flash_fill_command, COMMAND_EXEC,
- "fill with pattern <address> <word_pattern> <count>");
- register_command(cmd_ctx, flash_cmd, "fillh", handle_flash_fill_command, COMMAND_EXEC,
- "fill with pattern <address> <halfword_pattern> <count>");
- register_command(cmd_ctx, flash_cmd, "fillb", handle_flash_fill_command, COMMAND_EXEC,
- "fill with pattern <address> <byte_pattern> <count>");
-
- register_command(cmd_ctx, flash_cmd, "write_bank", handle_flash_write_bank_command, COMMAND_EXEC,
- "write binary data to <bank> <file> <offset>");
- register_command(cmd_ctx, flash_cmd, "write_image", handle_flash_write_image_command, COMMAND_EXEC,
- "write_image [erase] <file> [offset] [type]");
- register_command(cmd_ctx, flash_cmd, "protect", handle_flash_protect_command, COMMAND_EXEC,
- "set protection of sectors at <bank> <first> <last> <on|off>");
- }