X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fflash%2Fnor%2Fdriver.h;h=0ae4d8e20453991ad55fb2247d15e518f3a05144;hp=de71a39bf1b9f9ce12f4f0027d4429306d04e1cc;hb=b9ee6dd4655310c0553f4eef853213b11c1df28f;hpb=ae6374e25dae7b02636e440549b87040d03cc5aa diff --git a/src/flash/nor/driver.h b/src/flash/nor/driver.h index de71a39bf1..0ae4d8e204 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 * @@ -15,12 +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; @@ -47,13 +47,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 +79,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 +108,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. @@ -127,6 +135,20 @@ struct flash_driver * @returns ERROR_OK if successful; otherwise, an error code. */ int (*write)(struct flash_bank *bank, + const 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); /** @@ -176,7 +198,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 +211,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 +221,4 @@ struct flash_driver */ struct flash_driver *flash_driver_find_by_name(const char *name); -#endif // FLASH_NOR_DRIVER_H +#endif /* OPENOCD_FLASH_NOR_DRIVER_H */