X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fflash%2Fstm32x.c;h=1b2486dcadb91156045430546863b7f9029a3207;hb=43483e5054c78e0fdfaebed5e14c14246af07c97;hp=158f2643a0fbed14ccfc1e171b9893caa9ba63f2;hpb=aa9351ba46d0959555a4b293627ea14b5b42344f;p=openocd.git diff --git a/src/flash/stm32x.c b/src/flash/stm32x.c index 158f2643a0..1b2486dcad 100644 --- a/src/flash/stm32x.c +++ b/src/flash/stm32x.c @@ -29,61 +29,13 @@ #include "binarybuffer.h" -static int stm32x_register_commands(struct command_context_s *cmd_ctx); -static int stm32x_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct flash_bank_s *bank); -static int stm32x_erase(struct flash_bank_s *bank, int first, int last); -static int stm32x_protect(struct flash_bank_s *bank, int set, int first, int last); -static int stm32x_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t offset, uint32_t count); -static int stm32x_probe(struct flash_bank_s *bank); -static int stm32x_auto_probe(struct flash_bank_s *bank); -//static int stm32x_handle_part_id_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int stm32x_protect_check(struct flash_bank_s *bank); -static int stm32x_info(struct flash_bank_s *bank, char *buf, int buf_size); - -static int stm32x_handle_lock_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int stm32x_handle_unlock_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int stm32x_handle_options_read_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int stm32x_handle_options_write_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -static int stm32x_handle_mass_erase_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); static int stm32x_mass_erase(struct flash_bank_s *bank); -flash_driver_t stm32x_flash = -{ - .name = "stm32x", - .register_commands = stm32x_register_commands, - .flash_bank_command = stm32x_flash_bank_command, - .erase = stm32x_erase, - .protect = stm32x_protect, - .write = stm32x_write, - .probe = stm32x_probe, - .auto_probe = stm32x_auto_probe, - .erase_check = default_flash_mem_blank_check, - .protect_check = stm32x_protect_check, - .info = stm32x_info -}; - -static int stm32x_register_commands(struct command_context_s *cmd_ctx) -{ - command_t *stm32x_cmd = register_command(cmd_ctx, NULL, "stm32x", NULL, COMMAND_ANY, "stm32x flash specific commands"); - - register_command(cmd_ctx, stm32x_cmd, "lock", stm32x_handle_lock_command, COMMAND_EXEC, - "lock device"); - register_command(cmd_ctx, stm32x_cmd, "unlock", stm32x_handle_unlock_command, COMMAND_EXEC, - "unlock protected device"); - register_command(cmd_ctx, stm32x_cmd, "mass_erase", stm32x_handle_mass_erase_command, COMMAND_EXEC, - "mass erase device"); - register_command(cmd_ctx, stm32x_cmd, "options_read", stm32x_handle_options_read_command, COMMAND_EXEC, - "read device option bytes"); - register_command(cmd_ctx, stm32x_cmd, "options_write", stm32x_handle_options_write_command, COMMAND_EXEC, - "write device option bytes"); - return ERROR_OK; -} - /* flash bank stm32x 0 0 */ -static int stm32x_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct flash_bank_s *bank) +FLASH_BANK_COMMAND_HANDLER(stm32x_flash_bank_command) { - stm32x_flash_bank_t *stm32x_info; + struct stm32x_flash_bank *stm32x_info; if (argc < 6) { @@ -91,7 +43,7 @@ static int stm32x_flash_bank_command(struct command_context_s *cmd_ctx, char *cm return ERROR_FLASH_BANK_INVALID; } - stm32x_info = malloc(sizeof(stm32x_flash_bank_t)); + stm32x_info = malloc(sizeof(struct stm32x_flash_bank)); bank->driver_priv = stm32x_info; stm32x_info->write_algorithm = NULL; @@ -132,7 +84,7 @@ static uint32_t stm32x_wait_status_busy(flash_bank_t *bank, int timeout) static int stm32x_read_options(struct flash_bank_s *bank) { uint32_t optiondata; - stm32x_flash_bank_t *stm32x_info = NULL; + struct stm32x_flash_bank *stm32x_info = NULL; target_t *target = bank->target; stm32x_info = bank->driver_priv; @@ -159,7 +111,7 @@ static int stm32x_read_options(struct flash_bank_s *bank) static int stm32x_erase_options(struct flash_bank_s *bank) { - stm32x_flash_bank_t *stm32x_info = NULL; + struct stm32x_flash_bank *stm32x_info = NULL; target_t *target = bank->target; uint32_t status; @@ -196,7 +148,7 @@ static int stm32x_erase_options(struct flash_bank_s *bank) static int stm32x_write_options(struct flash_bank_s *bank) { - stm32x_flash_bank_t *stm32x_info = NULL; + struct stm32x_flash_bank *stm32x_info = NULL; target_t *target = bank->target; uint32_t status; @@ -281,7 +233,7 @@ static int stm32x_write_options(struct flash_bank_s *bank) static int stm32x_protect_check(struct flash_bank_s *bank) { target_t *target = bank->target; - stm32x_flash_bank_t *stm32x_info = bank->driver_priv; + struct stm32x_flash_bank *stm32x_info = bank->driver_priv; uint32_t protection; int i, s; @@ -393,7 +345,7 @@ static int stm32x_erase(struct flash_bank_s *bank, int first, int last) static int stm32x_protect(struct flash_bank_s *bank, int set, int first, int last) { - stm32x_flash_bank_t *stm32x_info = NULL; + struct stm32x_flash_bank *stm32x_info = NULL; target_t *target = bank->target; uint16_t prot_reg[4] = {0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF}; int i, reg, bit; @@ -480,7 +432,7 @@ static int stm32x_protect(struct flash_bank_s *bank, int set, int first, int las static int stm32x_write_block(struct flash_bank_s *bank, uint8_t *buffer, uint32_t offset, uint32_t count) { - stm32x_flash_bank_t *stm32x_info = bank->driver_priv; + struct stm32x_flash_bank *stm32x_info = bank->driver_priv; target_t *target = bank->target; uint32_t buffer_size = 16384; working_area_t *source; @@ -705,7 +657,7 @@ static int stm32x_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t off static int stm32x_probe(struct flash_bank_s *bank) { target_t *target = bank->target; - stm32x_flash_bank_t *stm32x_info = bank->driver_priv; + struct stm32x_flash_bank *stm32x_info = bank->driver_priv; int i; uint16_t num_pages; uint32_t device_id; @@ -804,7 +756,7 @@ static int stm32x_probe(struct flash_bank_s *bank) bank->base = 0x08000000; bank->size = (num_pages * page_size); bank->num_sectors = num_pages; - bank->sectors = malloc(sizeof(flash_sector_t) * num_pages); + bank->sectors = malloc(sizeof(struct flash_sector) * num_pages); for (i = 0; i < num_pages; i++) { @@ -821,14 +773,14 @@ static int stm32x_probe(struct flash_bank_s *bank) static int stm32x_auto_probe(struct flash_bank_s *bank) { - stm32x_flash_bank_t *stm32x_info = bank->driver_priv; + struct stm32x_flash_bank *stm32x_info = bank->driver_priv; if (stm32x_info->probed) return ERROR_OK; return stm32x_probe(bank); } #if 0 -static int stm32x_handle_part_id_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +COMMAND_HANDLER(stm32x_handle_part_id_command) { return ERROR_OK; } @@ -940,10 +892,10 @@ static int stm32x_info(struct flash_bank_s *bank, char *buf, int buf_size) return ERROR_OK; } -static int stm32x_handle_lock_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +COMMAND_HANDLER(stm32x_handle_lock_command) { target_t *target = NULL; - stm32x_flash_bank_t *stm32x_info = NULL; + struct stm32x_flash_bank *stm32x_info = NULL; if (argc < 1) { @@ -986,10 +938,10 @@ static int stm32x_handle_lock_command(struct command_context_s *cmd_ctx, char *c return ERROR_OK; } -static int stm32x_handle_unlock_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +COMMAND_HANDLER(stm32x_handle_unlock_command) { target_t *target = NULL; - stm32x_flash_bank_t *stm32x_info = NULL; + struct stm32x_flash_bank *stm32x_info = NULL; if (argc < 1) { @@ -1029,11 +981,11 @@ static int stm32x_handle_unlock_command(struct command_context_s *cmd_ctx, char return ERROR_OK; } -static int stm32x_handle_options_read_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +COMMAND_HANDLER(stm32x_handle_options_read_command) { uint32_t optionbyte; target_t *target = NULL; - stm32x_flash_bank_t *stm32x_info = NULL; + struct stm32x_flash_bank *stm32x_info = NULL; if (argc < 1) { @@ -1085,10 +1037,10 @@ static int stm32x_handle_options_read_command(struct command_context_s *cmd_ctx, return ERROR_OK; } -static int stm32x_handle_options_write_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +COMMAND_HANDLER(stm32x_handle_options_write_command) { target_t *target = NULL; - stm32x_flash_bank_t *stm32x_info = NULL; + struct stm32x_flash_bank *stm32x_info = NULL; uint16_t optionbyte = 0xF8; if (argc < 4) @@ -1196,7 +1148,7 @@ static int stm32x_mass_erase(struct flash_bank_s *bank) return ERROR_OK; } -static int stm32x_handle_mass_erase_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +COMMAND_HANDLER(stm32x_handle_mass_erase_command) { int i; @@ -1228,3 +1180,41 @@ static int stm32x_handle_mass_erase_command(struct command_context_s *cmd_ctx, c return ERROR_OK; } + +static int stm32x_register_commands(struct command_context_s *cmd_ctx) +{ + command_t *stm32x_cmd = register_command(cmd_ctx, NULL, "stm32x", + NULL, COMMAND_ANY, "stm32x flash specific commands"); + + register_command(cmd_ctx, stm32x_cmd, "lock", + stm32x_handle_lock_command, COMMAND_EXEC, + "lock device"); + register_command(cmd_ctx, stm32x_cmd, "unlock", + stm32x_handle_unlock_command, COMMAND_EXEC, + "unlock protected device"); + register_command(cmd_ctx, stm32x_cmd, "mass_erase", + stm32x_handle_mass_erase_command, COMMAND_EXEC, + "mass erase device"); + register_command(cmd_ctx, stm32x_cmd, "options_read", + stm32x_handle_options_read_command, COMMAND_EXEC, + "read device option bytes"); + register_command(cmd_ctx, stm32x_cmd, "options_write", + stm32x_handle_options_write_command, COMMAND_EXEC, + "write device option bytes"); + + return ERROR_OK; +} + +struct flash_driver stm32x_flash = { + .name = "stm32x", + .register_commands = &stm32x_register_commands, + .flash_bank_command = &stm32x_flash_bank_command, + .erase = &stm32x_erase, + .protect = &stm32x_protect, + .write = &stm32x_write, + .probe = &stm32x_probe, + .auto_probe = &stm32x_auto_probe, + .erase_check = &default_flash_mem_blank_check, + .protect_check = &stm32x_protect_check, + .info = &stm32x_info, + };