X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fflash%2Fnor%2Fdriver.h;h=a899dbbd03956746e1a4640a5f02d5f8134b8a95;hb=9e001244da2a2c472038ce1af0df32cfb2329569;hp=de71a39bf1b9f9ce12f4f0027d4429306d04e1cc;hpb=ae6374e25dae7b02636e440549b87040d03cc5aa;p=openocd.git diff --git a/src/flash/nor/driver.h b/src/flash/nor/driver.h index de71a39bf1..a899dbbd03 100644 --- a/src/flash/nor/driver.h +++ b/src/flash/nor/driver.h @@ -3,6 +3,7 @@ * Copyright (C) 2007,2008 Øyvind Harboe * * Copyright (C) 2008 by Spencer Oliver * * Copyright (C) 2009 Zachary T Welch * + * Copyright (C) 2010 by Antonio Borneo * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -19,6 +20,7 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ + #ifndef FLASH_NOR_DRIVER_H #define FLASH_NOR_DRIVER_H @@ -47,13 +49,17 @@ struct flash_bank; * corresponding static flash_driver_callback() * routine in flash.c. */ -struct flash_driver -{ +struct flash_driver { /** * Gives a human-readable name of this flash driver, * This field is used to select and initialize the driver. */ - char *name; + const char *name; + + /** + * Gives a human-readable description of arguments. + */ + const char *usage; /** * An array of driver-specific commands to register. When called @@ -75,11 +81,12 @@ struct flash_driver * CMD_ARGV[2] = baseaddress * CMD_ARGV[3] = lengthbytes * CMD_ARGV[4] = chip_width_in bytes - * CMD_ARGV[5] = bus_width_bytes + * CMD_ARGV[5] = bus_width_in_bytes * CMD_ARGV[6] = driver-specific parameters * @endcode * - * For example, CMD_ARGV[4] = 16 bit flash, CMD_ARGV[5] = 32bit bus. + * For example, CMD_ARGV[4] = 2 (for 16 bit flash), + * CMD_ARGV[5] = 4 (for 32 bit bus). * * If extra arguments are provided (@a CMD_ARGC > 6), they will * start in @a CMD_ARGV[6]. These can be used to implement @@ -103,9 +110,12 @@ struct flash_driver /** * Bank/sector protection routine (target-specific). - * When called, the driver should disable 'flash write' bits (or - * enable 'erase protection' bits) for the given @a bank and @a - * sectors. + * + * When called, the driver should enable/disable protection + * for MINIMUM the range covered by first..last sectors + * inclusive. Some chips have alignment requirements will + * cause the actual range to be protected / unprotected to + * be larger than the first..last range. * * @param bank The bank to protect or unprotect. * @param set If non-zero, enable protection; if 0, disable it. @@ -129,6 +139,20 @@ struct flash_driver int (*write)(struct flash_bank *bank, uint8_t *buffer, uint32_t offset, uint32_t count); + /** + * Read data from the flash. Note CPU address will be + * "bank->base + offset", while the physical address is + * dependent upon current target MMU mappings. + * + * @param bank The bank to read. + * @param buffer The data bytes read. + * @param offset The offset into the chip to read. + * @param count The number of bytes to read. + * @returns ERROR_OK if successful; otherwise, an error code. + */ + int (*read)(struct flash_bank *bank, + uint8_t *buffer, uint32_t offset, uint32_t count); + /** * Probe to determine what kind of flash is present. * This is invoked by the "probe" script command. @@ -176,7 +200,7 @@ struct flash_driver /** * A more gentle flavor of filash_driver_s::probe, performing * setup with less noise. Generally, driver routines should test - * to seee if the bank has already been probed; if it has, the + * to see if the bank has already been probed; if it has, the * driver probably should not perform its probe a second time. * * This callback is often called from the inside of other @@ -189,7 +213,8 @@ struct flash_driver int (*auto_probe)(struct flash_bank *bank); }; -#define FLASH_BANK_COMMAND_HANDLER(name) static __FLASH_BANK_COMMAND(name) +#define FLASH_BANK_COMMAND_HANDLER(name) \ + static __FLASH_BANK_COMMAND(name) /** * Find a NOR flash driver by its name. @@ -198,4 +223,4 @@ struct flash_driver */ struct flash_driver *flash_driver_find_by_name(const char *name); -#endif // FLASH_NOR_DRIVER_H +#endif /* FLASH_NOR_DRIVER_H */