command_handler: change 'cmd_ctx' to CMD_CTX
[fw/openocd] / src / flash / ocl.c
index d6a382c874d4fd708a0872b06a0abedee931e774..388395f0533b3c66e3238675800fcbabce4bc28b 100644 (file)
 #include "embeddedice.h"
 
 
-static int ocl_register_commands(struct command_context_s *cmd_ctx);
-static int ocl_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct flash_bank_s *bank);
-static int ocl_erase(struct flash_bank_s *bank, int first, int last);
-static int ocl_protect(struct flash_bank_s *bank, int set, int first, int last);
-static int ocl_write(struct flash_bank_s *bank, uint8_t *buffer, u32 offset, u32 count);
-static int ocl_probe(struct flash_bank_s *bank);
-static int ocl_erase_check(struct flash_bank_s *bank);
-static int ocl_protect_check(struct flash_bank_s *bank);
-static int ocl_info(struct flash_bank_s *bank, char *buf, int buf_size);
-static int ocl_auto_probe(struct flash_bank_s *bank);
-
-flash_driver_t ocl_flash =
+struct ocl_priv
 {
-       .name = "ocl",
-       .register_commands = ocl_register_commands,
-       .flash_bank_command = ocl_flash_bank_command,
-       .erase = ocl_erase,
-       .protect = ocl_protect,
-       .write = ocl_write,
-       .probe = ocl_probe,
-       .erase_check = ocl_erase_check,
-       .protect_check = ocl_protect_check,
-       .info = ocl_info,
-       .auto_probe = ocl_auto_probe
-};
-
-typedef struct ocl_priv_s
-{
-       arm_jtag_t *jtag_info;
+       struct arm_jtag *jtag_info;
        unsigned int buflen;
        unsigned int bufalign;
-} ocl_priv_t;
-
-static int ocl_register_commands(struct command_context_s *cmd_ctx)
-{
-       return ERROR_OK;
-}
+};
 
-static int ocl_erase_check(struct flash_bank_s *bank)
+static int ocl_erase_check(struct flash_bank *bank)
 {
        return ERROR_OK;
 }
 
-static int ocl_protect_check(struct flash_bank_s *bank)
+static int ocl_protect_check(struct flash_bank *bank)
 {
        return ERROR_OK;
 }
 
 /* flash_bank ocl 0 0 0 0 <target#> */
-static int ocl_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct flash_bank_s *bank)
+FLASH_BANK_COMMAND_HANDLER(ocl_flash_bank_command)
 {
-       int retval;
-       armv4_5_common_t *armv4_5;
-       arm7_9_common_t *arm7_9;
-       ocl_priv_t *ocl;
+       struct arm7_9_common *arm7_9;
+       struct ocl_priv *ocl;
 
-       if (argc < 6)
+       if (CMD_ARGC < 6)
        {
                LOG_WARNING("incomplete flash_bank ocl configuration");
                return ERROR_FLASH_BANK_INVALID;
        }
 
-       if ((retval = arm7_9_get_arch_pointers(bank->target, &armv4_5, &arm7_9)) != ERROR_OK)
-               return retval;
+       arm7_9 = target_to_arm7_9(bank->target);
+       if (!is_arm7_9(arm7_9))
+               return ERROR_TARGET_INVALID;
 
-       ocl = bank->driver_priv = malloc(sizeof(ocl_priv_t));
+       ocl = bank->driver_priv = malloc(sizeof(struct ocl_priv));
        ocl->jtag_info = &arm7_9->jtag_info;
        ocl->buflen = 0;
        ocl->bufalign = 1;
@@ -99,11 +67,11 @@ static int ocl_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd,
        return ERROR_OK;
 }
 
-static int ocl_erase(struct flash_bank_s *bank, int first, int last)
+static int ocl_erase(struct flash_bank *bank, int first, int last)
 {
-       ocl_priv_t *ocl = bank->driver_priv;
+       struct ocl_priv *ocl = bank->driver_priv;
        int retval;
-       u32 dcc_buffer[3];
+       uint32_t dcc_buffer[3];
 
        /* check preconditions */
        if (bank->num_sectors == 0)
@@ -139,40 +107,40 @@ static int ocl_erase(struct flash_bank_s *bank, int first, int last)
        }
 
        /* receive response */
-       if ((retval = embeddedice_receive(ocl->jtag_info, dcc_buffer+1, 1) != ERROR_OK))
+       if ((retval = embeddedice_receive(ocl->jtag_info, dcc_buffer + 1, 1) != ERROR_OK))
                return retval;
 
        if (dcc_buffer[1] != OCL_CMD_DONE)
        {
                if (dcc_buffer[0] == OCL_ERASE_ALL)
-                       LOG_ERROR("loader response to OCL_ERASE_ALL 0x%08X", dcc_buffer[1]);
+                       LOG_ERROR("loader response to OCL_ERASE_ALL 0x%08" PRIx32 "", dcc_buffer[1]);
                else
-                       LOG_ERROR("loader response to OCL_ERASE_BLOCK 0x%08X", dcc_buffer[1]);
+                       LOG_ERROR("loader response to OCL_ERASE_BLOCK 0x%08" PRIx32 "", dcc_buffer[1]);
                return ERROR_FLASH_OPERATION_FAILED;
        }
 
        return ERROR_OK;
 }
 
-static int ocl_protect(struct flash_bank_s *bank, int set, int first, int last)
+static int ocl_protect(struct flash_bank *bank, int set, int first, int last)
 {
        return ERROR_OK;
 }
 
-static int ocl_write(struct flash_bank_s *bank, uint8_t *buffer, u32 offset, u32 count)
+static int ocl_write(struct flash_bank *bank, uint8_t *buffer, uint32_t offset, uint32_t count)
 {
-       ocl_priv_t *ocl = bank->driver_priv;
+       struct ocl_priv *ocl = bank->driver_priv;
        int retval;
-       u32 *dcc_buffer;
-       u32 *dcc_bufptr;
+       uint32_t *dcc_buffer;
+       uint32_t *dcc_bufptr;
        int byteofs;
        int runlen;
-       u32 chksum;
+       uint32_t chksum;
 
        int i;
 
        /* check preconditions */
-       if (ocl->buflen == 0 || ocl->bufalign==0)
+       if (ocl->buflen == 0 || ocl->bufalign == 0)
                return ERROR_FLASH_BANK_NOT_PROBED;
 
        if (bank->target->state != TARGET_RUNNING)
@@ -182,7 +150,7 @@ static int ocl_write(struct flash_bank_s *bank, uint8_t *buffer, u32 offset, u32
        }
 
        /* allocate buffer for max. ocl buffer + overhead */
-       dcc_buffer = malloc(sizeof(u32)*(ocl->buflen/4+3));
+       dcc_buffer = malloc(sizeof(uint32_t)*(ocl->buflen/4 + 3));
 
        while (count)
        {
@@ -200,7 +168,7 @@ static int ocl_write(struct flash_bank_s *bank, uint8_t *buffer, u32 offset, u32
                chksum = OCL_CHKS_INIT;
 
                /* copy data to DCC buffer in proper byte order and properly aligned */
-               for (i=0; i<runlen; i++)
+               for (i = 0; i < runlen; i++)
                {
                        switch (byteofs++)
                        {
@@ -208,13 +176,13 @@ static int ocl_write(struct flash_bank_s *bank, uint8_t *buffer, u32 offset, u32
                                        *dcc_bufptr &= *(buffer++) | 0xffffff00;
                                        break;
                                case 1:
-                                       *dcc_bufptr &= ((*(buffer++))<<8) | 0xffff00ff;
+                                       *dcc_bufptr &= ((*(buffer++)) << 8) | 0xffff00ff;
                                        break;
                                case 2:
-                                       *dcc_bufptr &= ((*(buffer++))<<16) | 0xff00ffff;
+                                       *dcc_bufptr &= ((*(buffer++)) << 16) | 0xff00ffff;
                                        break;
                                case 3:
-                                       *dcc_bufptr &= ((*(buffer++))<<24) | 0x00ffffff;
+                                       *dcc_bufptr &= ((*(buffer++)) << 24) | 0x00ffffff;
                                        chksum ^= *(dcc_bufptr++);
                                        *dcc_bufptr = 0xffffffff;
                                        byteofs = 0;
@@ -253,7 +221,7 @@ static int ocl_write(struct flash_bank_s *bank, uint8_t *buffer, u32 offset, u32
 
                if (dcc_buffer[0] != OCL_CMD_DONE)
                {
-                       LOG_ERROR("loader response to OCL_FLASH_BLOCK 0x%08X", dcc_buffer[0]);
+                       LOG_ERROR("loader response to OCL_FLASH_BLOCK 0x%08" PRIx32 "", dcc_buffer[0]);
                        free(dcc_buffer);
                        return ERROR_FLASH_OPERATION_FAILED;
                }
@@ -266,11 +234,11 @@ static int ocl_write(struct flash_bank_s *bank, uint8_t *buffer, u32 offset, u32
        return ERROR_OK;
 }
 
-static int ocl_probe(struct flash_bank_s *bank)
+static int ocl_probe(struct flash_bank *bank)
 {
-       ocl_priv_t *ocl = bank->driver_priv;
+       struct ocl_priv *ocl = bank->driver_priv;
        int retval;
-       u32 dcc_buffer[1];
+       uint32_t dcc_buffer[1];
        int sectsize;
        int i;
 
@@ -295,7 +263,7 @@ static int ocl_probe(struct flash_bank_s *bank)
 
        if (dcc_buffer[0] != OCL_CMD_DONE)
        {
-               LOG_ERROR("loader response to OCL_PROBE 0x%08X", dcc_buffer[0]);
+               LOG_ERROR("loader response to OCL_PROBE 0x%08" PRIx32 "", dcc_buffer[0]);
                return ERROR_FLASH_OPERATION_FAILED;
        }
 
@@ -321,7 +289,7 @@ static int ocl_probe(struct flash_bank_s *bank)
        ocl->buflen = dcc_buffer[0] & 0xffff;
        ocl->bufalign = dcc_buffer[0] >> 16;
 
-       bank->sectors = realloc(bank->sectors, sizeof(flash_sector_t)*bank->num_sectors);
+       bank->sectors = realloc(bank->sectors, sizeof(struct flash_sector)*bank->num_sectors);
        if (bank->num_sectors == 0)
        {
                LOG_ERROR("number of sectors shall be non zero value");
@@ -332,7 +300,7 @@ static int ocl_probe(struct flash_bank_s *bank)
                return ERROR_FLASH_BANK_INVALID;
        }
        sectsize = bank->size / bank->num_sectors;
-       for (i=0; i<bank->num_sectors; i++)
+       for (i = 0; i < bank->num_sectors; i++)
        {
                bank->sectors[i].offset = i * sectsize;
                bank->sectors[i].size = sectsize;
@@ -364,17 +332,30 @@ static int ocl_probe(struct flash_bank_s *bank)
        return ERROR_OK;
 }
 
-static int ocl_info(struct flash_bank_s *bank, char *buf, int buf_size)
+static int ocl_info(struct flash_bank *bank, char *buf, int buf_size)
 {
        return ERROR_OK;
 }
 
-static int ocl_auto_probe(struct flash_bank_s *bank)
+static int ocl_auto_probe(struct flash_bank *bank)
 {
-       ocl_priv_t *ocl = bank->driver_priv;
+       struct ocl_priv *ocl = bank->driver_priv;
 
-       if (ocl->buflen == 0 || ocl->bufalign==0)
+       if (ocl->buflen == 0 || ocl->bufalign == 0)
                return ERROR_FLASH_BANK_NOT_PROBED;
 
        return ERROR_OK;
 }
+
+struct flash_driver ocl_flash = {
+               .name = "ocl",
+               .flash_bank_command = &ocl_flash_bank_command,
+               .erase = &ocl_erase,
+               .protect = &ocl_protect,
+               .write = &ocl_write,
+               .probe = &ocl_probe,
+               .erase_check = &ocl_erase_check,
+               .protect_check = &ocl_protect_check,
+               .info = &ocl_info,
+               .auto_probe = &ocl_auto_probe,
+       };