armv4_5_common_t -> struct arm
[fw/openocd] / src / flash / ocl.c
index 8f2a54456c836ed08f8f08659227c71b8b9ef46b..0a2496dac6afedc67c17ce3e29d4b514ebf3b4cb 100644 (file)
 #include "config.h"
 #endif
 
-#include "replacements.h"
-
 #include "ocl.h"
-
 #include "flash.h"
-#include "target.h"
-#include "log.h"
-#include "binarybuffer.h"
-#include "types.h"
 #include "embeddedice.h"
-#include "arm7_9_common.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.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, u8 *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 =
-{
-       .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;
-       int buflen;
-       int bufalign;
-} ocl_priv_t;
 
-static int ocl_register_commands(struct command_context_s *cmd_ctx)
+struct ocl_priv
 {
-       return ERROR_OK;
-}
+       struct arm_jtag *jtag_info;
+       unsigned int buflen;
+       unsigned int bufalign;
+};
 
 static int ocl_erase_check(struct flash_bank_s *bank)
 {
@@ -86,12 +44,12 @@ static int ocl_protect_check(struct flash_bank_s *bank)
 }
 
 /* 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 arm *armv4_5;
+       struct arm7_9_common *arm7_9;
+       struct ocl_priv *ocl;
 
        if (argc < 6)
        {
@@ -102,7 +60,7 @@ static int ocl_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd,
        if ((retval = arm7_9_get_arch_pointers(bank->target, &armv4_5, &arm7_9)) != ERROR_OK)
                return retval;
 
-       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;
@@ -112,20 +70,20 @@ static int ocl_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd,
 
 static int ocl_erase(struct flash_bank_s *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)
                return ERROR_FLASH_BANK_NOT_PROBED;
-               
+
        if (bank->target->state != TARGET_RUNNING)
        {
                LOG_ERROR("target has to be running to communicate with the loader");
                return ERROR_TARGET_NOT_RUNNING;
        }
-               
+
        if ((first == 0) && (last == bank->num_sectors - 1))
        {
                dcc_buffer[0] = OCL_ERASE_ALL;
@@ -150,15 +108,15 @@ 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;
        }
 
@@ -170,20 +128,20 @@ static int ocl_protect(struct flash_bank_s *bank, int set, int first, int last)
        return ERROR_OK;
 }
 
-static int ocl_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count)
+static int ocl_write(struct flash_bank_s *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)
@@ -193,7 +151,7 @@ static int ocl_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 coun
        }
 
        /* 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)
        {
@@ -211,7 +169,7 @@ static int ocl_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 coun
                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++)
                        {
@@ -219,13 +177,13 @@ static int ocl_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 coun
                                        *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;
@@ -238,7 +196,7 @@ static int ocl_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 coun
                        chksum ^= *(dcc_bufptr++);
 
                *(dcc_bufptr++) = chksum;
-               
+
                /* send the data */
                if ((retval = embeddedice_send(ocl->jtag_info, dcc_buffer, dcc_bufptr-dcc_buffer)) != ERROR_OK)
                {
@@ -264,7 +222,7 @@ static int ocl_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 coun
 
                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;
                }
@@ -279,9 +237,9 @@ static int ocl_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 coun
 
 static int ocl_probe(struct flash_bank_s *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;
 
@@ -303,10 +261,10 @@ static int ocl_probe(struct flash_bank_s *bank)
        /* receive response */
        if ((retval = embeddedice_receive(ocl->jtag_info, dcc_buffer, 1) != ERROR_OK))
                return retval;
-               
+
        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;
        }
 
@@ -332,7 +290,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");
@@ -343,7 +301,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;
@@ -382,10 +340,23 @@ static int ocl_info(struct flash_bank_s *bank, char *buf, int buf_size)
 
 static int ocl_auto_probe(struct flash_bank_s *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,
+       };