#include "image.h"
-static int faux_register_commands(struct command_context_s *cmd_ctx);
-static int faux_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct flash_bank_s *bank);
-static int faux_erase(struct flash_bank_s *bank, int first, int last);
-static int faux_protect(struct flash_bank_s *bank, int set, int first, int last);
-static int faux_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t offset, uint32_t count);
-static int faux_probe(struct flash_bank_s *bank);
-static int faux_protect_check(struct flash_bank_s *bank);
-static int faux_info(struct flash_bank_s *bank, char *buf, int buf_size);
-
-flash_driver_t faux_flash =
+struct faux_flash_bank
{
- .name = "faux",
- .register_commands = faux_register_commands,
- .flash_bank_command = faux_flash_bank_command,
- .erase = faux_erase,
- .protect = faux_protect,
- .write = faux_write,
- .probe = faux_probe,
- .auto_probe = faux_probe,
- .erase_check = default_flash_blank_check,
- .protect_check = faux_protect_check,
- .info = faux_info
-};
-
-typedef struct faux_flash_bank_s
-{
- struct target_s *target;
+ struct target *target;
uint8_t *memory;
uint32_t start_address;
-} faux_flash_bank_t;
+};
static const int sectorSize = 0x10000;
/* flash bank faux <base> <size> <chip_width> <bus_width> <target#> <driverPath>
*/
-static int faux_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct flash_bank_s *bank)
+FLASH_BANK_COMMAND_HANDLER(faux_flash_bank_command)
{
- faux_flash_bank_t *info;
+ struct faux_flash_bank *info;
if (argc < 6)
{
return ERROR_FLASH_BANK_INVALID;
}
- info = malloc(sizeof(faux_flash_bank_t));
+ info = malloc(sizeof(struct faux_flash_bank));
if (info == NULL)
{
LOG_ERROR("no memory for flash bank info");
int i = 0;
uint32_t offset = 0;
bank->num_sectors = bank->size/sectorSize;
- bank->sectors = malloc(sizeof(flash_sector_t) * bank->num_sectors);
+ bank->sectors = malloc(sizeof(struct flash_sector) * bank->num_sectors);
for (i = 0; i < bank->num_sectors; i++)
{
bank->sectors[i].offset = offset;
static int faux_erase(struct flash_bank_s *bank, int first, int last)
{
- faux_flash_bank_t *info = bank->driver_priv;
+ struct faux_flash_bank *info = bank->driver_priv;
memset(info->memory + first*sectorSize, 0xff, sectorSize*(last-first + 1));
return ERROR_OK;
}
static int faux_write(struct flash_bank_s *bank, uint8_t *buffer, uint32_t offset, uint32_t count)
{
- faux_flash_bank_t *info = bank->driver_priv;
+ struct faux_flash_bank *info = bank->driver_priv;
memcpy(info->memory + offset, buffer, count);
return ERROR_OK;
}
{
return ERROR_OK;
}
+
+struct flash_driver faux_flash = {
+ .name = "faux",
+ .register_commands = &faux_register_commands,
+ .flash_bank_command = &faux_flash_bank_command,
+ .erase = &faux_erase,
+ .protect = &faux_protect,
+ .write = &faux_write,
+ .probe = &faux_probe,
+ .auto_probe = &faux_probe,
+ .erase_check = &default_flash_blank_check,
+ .protect_check = &faux_protect_check,
+ .info = &faux_info
+ };