move nand drivers to src/flash/nand/
[fw/openocd] / src / flash / ocl.c
index 06cbbaadd81d9b5854e493e73136006e83ff1458..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, uint32_t offset, uint32_t 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,9 +67,9 @@ 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;
        uint32_t dcc_buffer[3];
 
@@ -154,14 +122,14 @@ static int ocl_erase(struct flash_bank_s *bank, int first, int last)
        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, uint32_t offset, uint32_t 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;
        uint32_t *dcc_buffer;
        uint32_t *dcc_bufptr;
@@ -200,7 +168,7 @@ static int ocl_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t offset
                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++)
                        {
@@ -266,9 +234,9 @@ static int ocl_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t offset
        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;
        uint32_t dcc_buffer[1];
        int sectsize;
@@ -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)
                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,
+       };