]> git.sur5r.net Git - openocd/blobdiff - src/flash/nor/core.h
flash/nor: Add erased_value to drivers and pass it to targets
[openocd] / src / flash / nor / core.h
index 929ebdbea025cd0c81d67fd280b846636b6c942f..338363e2acad9713bfeccb1b786ab686e84cb529 100644 (file)
@@ -46,6 +46,8 @@ struct flash_sector {
        /**
         * Indication of erasure status: 0 = not erased, 1 = erased,
         * other = unknown.  Set by @c flash_driver_s::erase_check.
+        *
+        * Flag is not used in protection block
         */
        int is_erased;
        /**
@@ -56,6 +58,9 @@ struct flash_sector {
         * This information must be considered stale immediately.
         * A million things could make it stale: power cycle,
         * reset of target, code running on target, etc.
+        *
+        * If a flash_bank uses an extra array of protection blocks,
+        * protection flag is not valid in sector array
         */
        int is_protected;
 };
@@ -85,6 +90,9 @@ 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) */
 
+       /** Erased value. Defaults to 0xFF. */
+       uint8_t erased_value;
+
        /** Default padded value used, normally this matches the  flash
         * erased value. Defaults to 0xFF. */
        uint8_t default_padded_value;
@@ -95,9 +103,19 @@ struct flash_bank {
         * 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 initialized by the flash driver */
        struct flash_sector *sectors;
 
+       /**
+        * The number of protection blocks in this bank. This value
+        * is set intially to 0 and sectors are used as protection blocks.
+        * Driver probe can set protection blocks array to work with
+        * protection granularity different than sector size.
+        */
+       int num_prot_blocks;
+       /** Array of protection blocks, allocated and initilized by the flash driver */
+       struct flash_sector *prot_blocks;
+
        struct flash_bank *next; /**< The next flash bank on this chip */
 };
 
@@ -205,5 +223,13 @@ struct flash_bank *get_flash_bank_by_num_noprobe(int num);
  */
 int get_flash_bank_by_addr(struct target *target, uint32_t addr, bool check,
                struct flash_bank **result_bank);
+/**
+ * Allocate and fill an array of sectors or protection blocks.
+ * @param offset Offset of first block.
+ * @param size Size of each block.
+ * @param num_blocks Number of blocks in array.
+ * @returns A struct flash_sector pointer or NULL when allocation failed.
+ */
+struct flash_sector *alloc_block_array(uint32_t offset, uint32_t size, int num_blocks);
 
 #endif /* OPENOCD_FLASH_NOR_CORE_H */