flash/nor: Add Infineon XMC1000 flash driver
[fw/openocd] / src / flash / nor / core.h
index 17f1c53f9276da5ad4d9e6298a8c053a07736856..726dd957ececc37802d2f072d793aee3654d63fe 100644 (file)
@@ -18,8 +18,9 @@
  *   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.             *
+ *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.           *
  ***************************************************************************/
+
 #ifndef FLASH_NOR_CORE_H
 #define FLASH_NOR_CORE_H
 
@@ -39,11 +40,10 @@ struct image;
  * within a flash bank.  A single bank typically consists of multiple
  * sectors, each of which can be erased and protected independently.
  */
-struct flash_sector
-{
-       /// Bus offset from start of the flash chip (in bytes).
+struct flash_sector {
+       /** Bus offset from start of the flash chip (in bytes). */
        uint32_t offset;
-       /// Number of bytes in this flash sector.
+       /** Number of bytes in this flash sector. */
        uint32_t size;
        /**
         * Indication of erasure status: 0 = not erased, 1 = erased,
@@ -72,9 +72,8 @@ struct flash_sector
  * may use the @c driver_priv member to store additional data on a
  * per-bank basis, if required.
  */
-struct flash_bank
-{
-       char *name;
+struct flash_bank {
+       const char *name;
 
        struct target *target; /**< Target to which this bank belongs. */
 
@@ -88,19 +87,23 @@ struct flash_bank
        int chip_width; /**< Width of the chip in bytes (1,2,4 bytes) */
        int bus_width; /**< Maximum bus width, in bytes (1,2,4 bytes) */
 
+       /** Default padded value used, normally this matches the  flash
+        * erased value. Defaults to 0xFF. */
+       uint8_t default_padded_value;
+
        /**
         * The number of sectors on this chip.  This value will
         * be set intially to 0, and the flash driver must set this to
         * some non-zero value during "probe()" or "auto_probe()".
         */
        int num_sectors;
-       /// Array of sectors, allocated and initilized by the flash driver
+       /** Array of sectors, allocated and initilized by the flash driver */
        struct flash_sector *sectors;
 
        struct flash_bank *next; /**< The next flash bank on this chip */
 };
 
-/// Registers the 'flash' subsystem commands
+/** Registers the 'flash' subsystem commands */
 int flash_register_commands(struct command_context *cmd_ctx);
 
 /**
@@ -134,7 +137,7 @@ int flash_write(struct target *target,
  * This routine must be called when the system may modify the status.
  */
 void flash_set_dirty(void);
-/// @returns The number of flash banks currently defined.
+/** @returns The number of flash banks currently defined. */
 int flash_get_bank_count(void);
 /**
  * Provides default read implementation for flash memory.
@@ -153,13 +156,6 @@ int default_flash_read(struct flash_bank *bank,
  * @returns ERROR_OK if successful; otherwise, an error code.
  */
 int default_flash_blank_check(struct flash_bank *bank);
-/**
- * Provides a default blank flash memory check.  Ensures the contents
- * of the given bank have truly been erased.
- * @param bank The flash bank.
- * @returns ERROR_OK if successful; otherwise, an error code.
- */
-int default_flash_mem_blank_check(struct flash_bank *bank);
 
 /**
  * Returns the flash bank specified by @a name, which matches the
@@ -168,7 +164,7 @@ int default_flash_mem_blank_check(struct flash_bank *bank);
  * bank number: when two str9x banks are defined, then 'str9x.1' refers
  * to the second.
  */
-struct flash_bank *get_flash_bank_by_name(const char *name);
+int get_flash_bank_by_name(const char *name, struct flash_bank **bank_result);
 /**
  * Returns the flash bank specified by @a name, which matches the
  * driver name and a suffix (option) specify the driver-specific
@@ -206,8 +202,10 @@ struct flash_bank *get_flash_bank_by_num_noprobe(int num);
  * Returns the flash bank located at a specified address.
  * @param target The target, presumed to contain one or more banks.
  * @param addr An address that is within the range of the bank.
+ * @param check return ERROR_OK and result_bank NULL if the bank does not exist
  * @returns The struct flash_bank located at @a addr, or NULL.
  */
-struct flash_bank *get_flash_bank_by_addr(struct target *target, uint32_t addr);
+int get_flash_bank_by_addr(struct target *target, uint32_t addr, bool check,
+               struct flash_bank **result_bank);
 
-#endif // FLASH_NOR_CORE_H
+#endif /* FLASH_NOR_CORE_H */