]> git.sur5r.net Git - openocd/blobdiff - src/flash/nor/core.h
flash/nor: implement protection blocks of different size than erase sector
[openocd] / src / flash / nor / core.h
index 929ebdbea025cd0c81d67fd280b846636b6c942f..60d4483ae5ed7bde99bd6fcbab8b00392a879703 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;
 };
@@ -95,9 +100,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 +220,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 */