use COMMAND_REGISTER macro
[fw/openocd] / src / flash / stm32x.c
index a9b4fb3fd0d99a69310209f5e5c180ec4b5feaee..c628f1878cc029802c7d59d2aa3f5eab0805d1b3 100644 (file)
 #include "stm32x.h"
 #include "armv7m.h"
 #include "binarybuffer.h"
+#include "algorithm.h"
 
 
-static int stm32x_mass_erase(struct flash_bank_s *bank);
+static int stm32x_mass_erase(struct flash_bank *bank);
 
 /* flash bank stm32x <base> <size> 0 0 <target#>
  */
@@ -37,7 +38,7 @@ FLASH_BANK_COMMAND_HANDLER(stm32x_flash_bank_command)
 {
        struct stm32x_flash_bank *stm32x_info;
 
-       if (argc < 6)
+       if (CMD_ARGC < 6)
        {
                LOG_WARNING("incomplete flash_bank stm32x configuration");
                return ERROR_FLASH_BANK_INVALID;
@@ -52,7 +53,7 @@ FLASH_BANK_COMMAND_HANDLER(stm32x_flash_bank_command)
        return ERROR_OK;
 }
 
-static uint32_t stm32x_get_flash_status(flash_bank_t *bank)
+static uint32_t stm32x_get_flash_status(struct flash_bank *bank)
 {
        struct target *target = bank->target;
        uint32_t status;
@@ -62,7 +63,7 @@ static uint32_t stm32x_get_flash_status(flash_bank_t *bank)
        return status;
 }
 
-static uint32_t stm32x_wait_status_busy(flash_bank_t *bank, int timeout)
+static uint32_t stm32x_wait_status_busy(struct flash_bank *bank, int timeout)
 {
        struct target *target = bank->target;
        uint32_t status;
@@ -81,7 +82,7 @@ static uint32_t stm32x_wait_status_busy(flash_bank_t *bank, int timeout)
        return status;
 }
 
-static int stm32x_read_options(struct flash_bank_s *bank)
+static int stm32x_read_options(struct flash_bank *bank)
 {
        uint32_t optiondata;
        struct stm32x_flash_bank *stm32x_info = NULL;
@@ -109,7 +110,7 @@ static int stm32x_read_options(struct flash_bank_s *bank)
        return ERROR_OK;
 }
 
-static int stm32x_erase_options(struct flash_bank_s *bank)
+static int stm32x_erase_options(struct flash_bank *bank)
 {
        struct stm32x_flash_bank *stm32x_info = NULL;
        struct target *target = bank->target;
@@ -146,7 +147,7 @@ static int stm32x_erase_options(struct flash_bank_s *bank)
        return ERROR_OK;
 }
 
-static int stm32x_write_options(struct flash_bank_s *bank)
+static int stm32x_write_options(struct flash_bank *bank)
 {
        struct stm32x_flash_bank *stm32x_info = NULL;
        struct target *target = bank->target;
@@ -230,7 +231,7 @@ static int stm32x_write_options(struct flash_bank_s *bank)
        return ERROR_OK;
 }
 
-static int stm32x_protect_check(struct flash_bank_s *bank)
+static int stm32x_protect_check(struct flash_bank *bank)
 {
        struct target *target = bank->target;
        struct stm32x_flash_bank *stm32x_info = bank->driver_priv;
@@ -302,7 +303,7 @@ static int stm32x_protect_check(struct flash_bank_s *bank)
        return ERROR_OK;
 }
 
-static int stm32x_erase(struct flash_bank_s *bank, int first, int last)
+static int stm32x_erase(struct flash_bank *bank, int first, int last)
 {
        struct target *target = bank->target;
        int i;
@@ -343,7 +344,7 @@ static int stm32x_erase(struct flash_bank_s *bank, int first, int last)
        return ERROR_OK;
 }
 
-static int stm32x_protect(struct flash_bank_s *bank, int set, int first, int last)
+static int stm32x_protect(struct flash_bank *bank, int set, int first, int last)
 {
        struct stm32x_flash_bank *stm32x_info = NULL;
        struct target *target = bank->target;
@@ -430,7 +431,7 @@ static int stm32x_protect(struct flash_bank_s *bank, int set, int first, int las
        return stm32x_write_options(bank);
 }
 
-static int stm32x_write_block(struct flash_bank_s *bank, uint8_t *buffer, uint32_t offset, uint32_t count)
+static int stm32x_write_block(struct flash_bank *bank, uint8_t *buffer, uint32_t offset, uint32_t count)
 {
        struct stm32x_flash_bank *stm32x_info = bank->driver_priv;
        struct target *target = bank->target;
@@ -549,7 +550,7 @@ static int stm32x_write_block(struct flash_bank_s *bank, uint8_t *buffer, uint32
        return retval;
 }
 
-static int stm32x_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t offset, uint32_t count)
+static int stm32x_write(struct flash_bank *bank, uint8_t *buffer, uint32_t offset, uint32_t count)
 {
        struct target *target = bank->target;
        uint32_t words_remaining = (count / 2);
@@ -654,7 +655,7 @@ static int stm32x_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t off
        return ERROR_OK;
 }
 
-static int stm32x_probe(struct flash_bank_s *bank)
+static int stm32x_probe(struct flash_bank *bank)
 {
        struct target *target = bank->target;
        struct stm32x_flash_bank *stm32x_info = bank->driver_priv;
@@ -771,7 +772,7 @@ static int stm32x_probe(struct flash_bank_s *bank)
        return ERROR_OK;
 }
 
-static int stm32x_auto_probe(struct flash_bank_s *bank)
+static int stm32x_auto_probe(struct flash_bank *bank)
 {
        struct stm32x_flash_bank *stm32x_info = bank->driver_priv;
        if (stm32x_info->probed)
@@ -786,7 +787,7 @@ COMMAND_HANDLER(stm32x_handle_part_id_command)
 }
 #endif
 
-static int stm32x_info(struct flash_bank_s *bank, char *buf, int buf_size)
+static int stm32x_info(struct flash_bank *bank, char *buf, int buf_size)
 {
        struct target *target = bank->target;
        uint32_t device_id;
@@ -897,14 +898,14 @@ COMMAND_HANDLER(stm32x_handle_lock_command)
        struct target *target = NULL;
        struct stm32x_flash_bank *stm32x_info = NULL;
 
-       if (argc < 1)
+       if (CMD_ARGC < 1)
        {
-               command_print(cmd_ctx, "stm32x lock <bank>");
+               command_print(CMD_CTX, "stm32x lock <bank>");
                return ERROR_OK;
        }
 
-       flash_bank_t *bank;
-       int retval = flash_command_get_bank_by_num(cmd_ctx, args[0], &bank);
+       struct flash_bank *bank;
+       int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
        if (ERROR_OK != retval)
                return retval;
 
@@ -920,7 +921,7 @@ COMMAND_HANDLER(stm32x_handle_lock_command)
 
        if (stm32x_erase_options(bank) != ERROR_OK)
        {
-               command_print(cmd_ctx, "stm32x failed to erase options");
+               command_print(CMD_CTX, "stm32x failed to erase options");
                return ERROR_OK;
        }
 
@@ -929,11 +930,11 @@ COMMAND_HANDLER(stm32x_handle_lock_command)
 
        if (stm32x_write_options(bank) != ERROR_OK)
        {
-               command_print(cmd_ctx, "stm32x failed to lock device");
+               command_print(CMD_CTX, "stm32x failed to lock device");
                return ERROR_OK;
        }
 
-       command_print(cmd_ctx, "stm32x locked");
+       command_print(CMD_CTX, "stm32x locked");
 
        return ERROR_OK;
 }
@@ -943,14 +944,14 @@ COMMAND_HANDLER(stm32x_handle_unlock_command)
        struct target *target = NULL;
        struct stm32x_flash_bank *stm32x_info = NULL;
 
-       if (argc < 1)
+       if (CMD_ARGC < 1)
        {
-               command_print(cmd_ctx, "stm32x unlock <bank>");
+               command_print(CMD_CTX, "stm32x unlock <bank>");
                return ERROR_OK;
        }
 
-       flash_bank_t *bank;
-       int retval = flash_command_get_bank_by_num(cmd_ctx, args[0], &bank);
+       struct flash_bank *bank;
+       int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
        if (ERROR_OK != retval)
                return retval;
 
@@ -966,17 +967,17 @@ COMMAND_HANDLER(stm32x_handle_unlock_command)
 
        if (stm32x_erase_options(bank) != ERROR_OK)
        {
-               command_print(cmd_ctx, "stm32x failed to unlock device");
+               command_print(CMD_CTX, "stm32x failed to unlock device");
                return ERROR_OK;
        }
 
        if (stm32x_write_options(bank) != ERROR_OK)
        {
-               command_print(cmd_ctx, "stm32x failed to lock device");
+               command_print(CMD_CTX, "stm32x failed to lock device");
                return ERROR_OK;
        }
 
-       command_print(cmd_ctx, "stm32x unlocked");
+       command_print(CMD_CTX, "stm32x unlocked");
 
        return ERROR_OK;
 }
@@ -987,14 +988,14 @@ COMMAND_HANDLER(stm32x_handle_options_read_command)
        struct target *target = NULL;
        struct stm32x_flash_bank *stm32x_info = NULL;
 
-       if (argc < 1)
+       if (CMD_ARGC < 1)
        {
-               command_print(cmd_ctx, "stm32x options_read <bank>");
+               command_print(CMD_CTX, "stm32x options_read <bank>");
                return ERROR_OK;
        }
 
-       flash_bank_t *bank;
-       int retval = flash_command_get_bank_by_num(cmd_ctx, args[0], &bank);
+       struct flash_bank *bank;
+       int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
        if (ERROR_OK != retval)
                return retval;
 
@@ -1009,30 +1010,30 @@ COMMAND_HANDLER(stm32x_handle_options_read_command)
        }
 
        target_read_u32(target, STM32_FLASH_OBR, &optionbyte);
-       command_print(cmd_ctx, "Option Byte: 0x%" PRIx32 "", optionbyte);
+       command_print(CMD_CTX, "Option Byte: 0x%" PRIx32 "", optionbyte);
 
        if (buf_get_u32((uint8_t*)&optionbyte, OPT_ERROR, 1))
-               command_print(cmd_ctx, "Option Byte Complement Error");
+               command_print(CMD_CTX, "Option Byte Complement Error");
 
        if (buf_get_u32((uint8_t*)&optionbyte, OPT_READOUT, 1))
-               command_print(cmd_ctx, "Readout Protection On");
+               command_print(CMD_CTX, "Readout Protection On");
        else
-               command_print(cmd_ctx, "Readout Protection Off");
+               command_print(CMD_CTX, "Readout Protection Off");
 
        if (buf_get_u32((uint8_t*)&optionbyte, OPT_RDWDGSW, 1))
-               command_print(cmd_ctx, "Software Watchdog");
+               command_print(CMD_CTX, "Software Watchdog");
        else
-               command_print(cmd_ctx, "Hardware Watchdog");
+               command_print(CMD_CTX, "Hardware Watchdog");
 
        if (buf_get_u32((uint8_t*)&optionbyte, OPT_RDRSTSTOP, 1))
-               command_print(cmd_ctx, "Stop: No reset generated");
+               command_print(CMD_CTX, "Stop: No reset generated");
        else
-               command_print(cmd_ctx, "Stop: Reset generated");
+               command_print(CMD_CTX, "Stop: Reset generated");
 
        if (buf_get_u32((uint8_t*)&optionbyte, OPT_RDRSTSTDBY, 1))
-               command_print(cmd_ctx, "Standby: No reset generated");
+               command_print(CMD_CTX, "Standby: No reset generated");
        else
-               command_print(cmd_ctx, "Standby: Reset generated");
+               command_print(CMD_CTX, "Standby: Reset generated");
 
        return ERROR_OK;
 }
@@ -1043,14 +1044,14 @@ COMMAND_HANDLER(stm32x_handle_options_write_command)
        struct stm32x_flash_bank *stm32x_info = NULL;
        uint16_t optionbyte = 0xF8;
 
-       if (argc < 4)
+       if (CMD_ARGC < 4)
        {
-               command_print(cmd_ctx, "stm32x options_write <bank> <SWWDG | HWWDG> <RSTSTNDBY | NORSTSTNDBY> <RSTSTOP | NORSTSTOP>");
+               command_print(CMD_CTX, "stm32x options_write <bank> <SWWDG | HWWDG> <RSTSTNDBY | NORSTSTNDBY> <RSTSTOP | NORSTSTOP>");
                return ERROR_OK;
        }
 
-       flash_bank_t *bank;
-       int retval = flash_command_get_bank_by_num(cmd_ctx, args[0], &bank);
+       struct flash_bank *bank;
+       int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
        if (ERROR_OK != retval)
                return retval;
 
@@ -1064,7 +1065,7 @@ COMMAND_HANDLER(stm32x_handle_options_write_command)
                return ERROR_TARGET_NOT_HALTED;
        }
 
-       if (strcmp(args[1], "SWWDG") == 0)
+       if (strcmp(CMD_ARGV[1], "SWWDG") == 0)
        {
                optionbyte |= (1 << 0);
        }
@@ -1073,7 +1074,7 @@ COMMAND_HANDLER(stm32x_handle_options_write_command)
                optionbyte &= ~(1 << 0);
        }
 
-       if (strcmp(args[2], "NORSTSTNDBY") == 0)
+       if (strcmp(CMD_ARGV[2], "NORSTSTNDBY") == 0)
        {
                optionbyte |= (1 << 1);
        }
@@ -1082,7 +1083,7 @@ COMMAND_HANDLER(stm32x_handle_options_write_command)
                optionbyte &= ~(1 << 1);
        }
 
-       if (strcmp(args[3], "NORSTSTOP") == 0)
+       if (strcmp(CMD_ARGV[3], "NORSTSTOP") == 0)
        {
                optionbyte |= (1 << 2);
        }
@@ -1093,7 +1094,7 @@ COMMAND_HANDLER(stm32x_handle_options_write_command)
 
        if (stm32x_erase_options(bank) != ERROR_OK)
        {
-               command_print(cmd_ctx, "stm32x failed to erase options");
+               command_print(CMD_CTX, "stm32x failed to erase options");
                return ERROR_OK;
        }
 
@@ -1101,16 +1102,16 @@ COMMAND_HANDLER(stm32x_handle_options_write_command)
 
        if (stm32x_write_options(bank) != ERROR_OK)
        {
-               command_print(cmd_ctx, "stm32x failed to write options");
+               command_print(CMD_CTX, "stm32x failed to write options");
                return ERROR_OK;
        }
 
-       command_print(cmd_ctx, "stm32x write options complete");
+       command_print(CMD_CTX, "stm32x write options complete");
 
        return ERROR_OK;
 }
 
-static int stm32x_mass_erase(struct flash_bank_s *bank)
+static int stm32x_mass_erase(struct flash_bank *bank)
 {
        struct target *target = bank->target;
        uint32_t status;
@@ -1152,14 +1153,14 @@ COMMAND_HANDLER(stm32x_handle_mass_erase_command)
 {
        int i;
 
-       if (argc < 1)
+       if (CMD_ARGC < 1)
        {
-               command_print(cmd_ctx, "stm32x mass_erase <bank>");
+               command_print(CMD_CTX, "stm32x mass_erase <bank>");
                return ERROR_OK;
        }
 
-       flash_bank_t *bank;
-       int retval = flash_command_get_bank_by_num(cmd_ctx, args[0], &bank);
+       struct flash_bank *bank;
+       int retval = CALL_COMMAND_HANDLER(flash_command_get_bank, 0, &bank);
        if (ERROR_OK != retval)
                return retval;
 
@@ -1171,34 +1172,34 @@ COMMAND_HANDLER(stm32x_handle_mass_erase_command)
                        bank->sectors[i].is_erased = 1;
                }
 
-               command_print(cmd_ctx, "stm32x mass erase complete");
+               command_print(CMD_CTX, "stm32x mass erase complete");
        }
        else
        {
-               command_print(cmd_ctx, "stm32x mass erase failed");
+               command_print(CMD_CTX, "stm32x mass erase failed");
        }
 
        return ERROR_OK;
 }
 
-static int stm32x_register_commands(struct command_context_s *cmd_ctx)
+static int stm32x_register_commands(struct command_context *cmd_ctx)
 {
-       command_t *stm32x_cmd = register_command(cmd_ctx, NULL, "stm32x",
+       struct command *stm32x_cmd = COMMAND_REGISTER(cmd_ctx, NULL, "stm32x",
                        NULL, COMMAND_ANY, "stm32x flash specific commands");
 
-       register_command(cmd_ctx, stm32x_cmd, "lock",
+       COMMAND_REGISTER(cmd_ctx, stm32x_cmd, "lock",
                        stm32x_handle_lock_command, COMMAND_EXEC,
                        "lock device");
-       register_command(cmd_ctx, stm32x_cmd, "unlock",
+       COMMAND_REGISTER(cmd_ctx, stm32x_cmd, "unlock",
                        stm32x_handle_unlock_command, COMMAND_EXEC,
                        "unlock protected device");
-       register_command(cmd_ctx, stm32x_cmd, "mass_erase",
+       COMMAND_REGISTER(cmd_ctx, stm32x_cmd, "mass_erase",
                        stm32x_handle_mass_erase_command, COMMAND_EXEC,
                        "mass erase device");
-       register_command(cmd_ctx, stm32x_cmd, "options_read",
+       COMMAND_REGISTER(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",
+       COMMAND_REGISTER(cmd_ctx, stm32x_cmd, "options_write",
                        stm32x_handle_options_write_command, COMMAND_EXEC,
                        "write device option bytes");