X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fflash%2Fnor%2Fdriver.h;h=e29d4f5280a5f50cedadad0bbc1ff4744c31062c;hb=e44539d66c8929679321704768125df9ba7d5f67;hp=a899dbbd03956746e1a4640a5f02d5f8134b8a95;hpb=87a9ee3625c942d86db76b2d9be67c9e17e3bd63;p=fw%2Fopenocd diff --git a/src/flash/nor/driver.h b/src/flash/nor/driver.h index a899dbbd0..e29d4f528 100644 --- a/src/flash/nor/driver.h +++ b/src/flash/nor/driver.h @@ -16,13 +16,11 @@ * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * along with this program. If not, see . * ***************************************************************************/ -#ifndef FLASH_NOR_DRIVER_H -#define FLASH_NOR_DRIVER_H +#ifndef OPENOCD_FLASH_NOR_DRIVER_H +#define OPENOCD_FLASH_NOR_DRIVER_H struct flash_bank; @@ -106,11 +104,14 @@ struct flash_driver { * @param last The number of the last sector to erase, typically N-1. * @returns ERROR_OK if successful; otherwise, an error code. */ - int (*erase)(struct flash_bank *bank, int first, int last); + int (*erase)(struct flash_bank *bank, unsigned int first, + unsigned int last); /** * Bank/sector protection routine (target-specific). * + * If protection is not implemented, set method to NULL + * * When called, the driver should enable/disable protection * for MINIMUM the range covered by first..last sectors * inclusive. Some chips have alignment requirements will @@ -119,11 +120,12 @@ struct flash_driver { * * @param bank The bank to protect or unprotect. * @param set If non-zero, enable protection; if 0, disable it. - * @param first The first sector to (un)protect, typicaly 0. + * @param first The first sector to (un)protect, typically 0. * @param last The last sector to (un)project, typically N-1. * @returns ERROR_OK if successful; otherwise, an error code. */ - int (*protect)(struct flash_bank *bank, int set, int first, int last); + int (*protect)(struct flash_bank *bank, int set, unsigned int first, + unsigned int last); /** * Program data into the flash. Note CPU address will be @@ -137,7 +139,7 @@ struct flash_driver { * @returns ERROR_OK if successful; otherwise, an error code. */ int (*write)(struct flash_bank *bank, - uint8_t *buffer, uint32_t offset, uint32_t count); + const uint8_t *buffer, uint32_t offset, uint32_t count); /** * Read data from the flash. Note CPU address will be @@ -153,6 +155,20 @@ struct flash_driver { int (*read)(struct flash_bank *bank, uint8_t *buffer, uint32_t offset, uint32_t count); + /** + * Verify data in 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 verify + * @param buffer The data bytes to verify against. + * @param offset The offset into the chip to verify. + * @param count The number of bytes to verify. + * @returns ERROR_OK if successful; otherwise, an error code. + */ + int (*verify)(struct flash_bank *bank, + const 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. @@ -180,6 +196,8 @@ struct flash_driver { * flash_sector_s::is_protected field for each of the flash * bank's sectors. * + * If protection is not implemented, set method to NULL + * * @param bank - the bank to check * @returns ERROR_OK if successful; otherwise, an error code. */ @@ -198,19 +216,27 @@ struct flash_driver { int (*info)(struct flash_bank *bank, char *buf, int buf_size); /** - * A more gentle flavor of filash_driver_s::probe, performing + * A more gentle flavor of flash_driver_s::probe, performing * setup with less noise. Generally, driver routines should test * 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 * routines (e.g. GDB flash downloads) to autoprobe the flash as - * it is programing the flash. + * it is programming the flash. * * @param bank - the bank to probe * @returns ERROR_OK if successful; otherwise, an error code. */ int (*auto_probe)(struct flash_bank *bank); + + /** + * Deallocates private driver structures. + * Use default_flash_free_driver_priv() to simply free(bank->driver_priv) + * + * @param bank - the bank being destroyed + */ + void (*free_driver_priv)(struct flash_bank *bank); }; #define FLASH_BANK_COMMAND_HANDLER(name) \ @@ -221,6 +247,6 @@ struct flash_driver { * @param name The name of the requested driver. * @returns The flash_driver called @c name, or NULL if not found. */ -struct flash_driver *flash_driver_find_by_name(const char *name); +const struct flash_driver *flash_driver_find_by_name(const char *name); -#endif /* FLASH_NOR_DRIVER_H */ +#endif /* OPENOCD_FLASH_NOR_DRIVER_H */