flash/nor: improved API of flash_driver.info & fixed buffer overruns
[openocd.git] / src / flash / nor / cfi.h
index 953b7baefc9d185e39d29b3efcf06acbebe4e133..80633f49400d176cf9c8e09c5b7d8eac52b1e7ac 100644 (file)
  *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
-#ifndef CFI_H
-#define CFI_H
+#ifndef OPENOCD_FLASH_NOR_CFI_H
+#define OPENOCD_FLASH_NOR_CFI_H
 
 #define CFI_STATUS_POLL_MASK_DQ5_DQ6_DQ7 0xE0 /* DQ5..DQ7 */
 #define CFI_STATUS_POLL_MASK_DQ6_DQ7     0xC0 /* DQ6..DQ7 */
 
 struct cfi_flash_bank {
-       int x16_as_x8;
-       int jedec_probe;
-       int not_cfi;
-       int probed;
+       bool x16_as_x8;
+       bool jedec_probe;
+       bool not_cfi;
+       bool probed;
 
        enum target_endianness endianness;
+       bool data_swap;
 
        uint16_t manufacturer;
        uint16_t device_id;
@@ -72,6 +73,12 @@ struct cfi_flash_bank {
        unsigned buf_write_timeout;
        unsigned block_erase_timeout;
        unsigned chip_erase_timeout;
+
+       /* memory accessors */
+       int (*write_mem)(struct flash_bank *bank, target_addr_t addr,
+                        uint32_t count, const uint8_t *buffer);
+       int (*read_mem)(struct flash_bank *bank, target_addr_t addr,
+                       uint32_t count, uint8_t *buffer);
 };
 
 /* Intel primary extended query table
@@ -147,6 +154,25 @@ struct cfi_fixup {
        const void *param;
 };
 
+int cfi_erase(struct flash_bank *bank, unsigned int first, unsigned int last);
+int cfi_protect(struct flash_bank *bank, int set, unsigned int first,
+               unsigned int last);
+int cfi_probe(struct flash_bank *bank);
+int cfi_auto_probe(struct flash_bank *bank);
+int cfi_protect_check(struct flash_bank *bank);
+int cfi_get_info(struct flash_bank *bank, struct command_invocation *cmd);
+int cfi_flash_bank_cmd(struct flash_bank *bank, unsigned int argc, const char **argv);
+
+uint32_t cfi_flash_address(struct flash_bank *bank, int sector, uint32_t offset);
+int cfi_spansion_unlock_seq(struct flash_bank *bank);
+int cfi_send_command(struct flash_bank *bank, uint8_t cmd, uint32_t address);
+int cfi_write_word(struct flash_bank *bank, uint8_t *word, uint32_t address);
+int cfi_spansion_wait_status_busy(struct flash_bank *bank, int timeout);
+int cfi_reset(struct flash_bank *bank);
+
+int cfi_target_read_memory(struct flash_bank *bank, target_addr_t addr,
+                          uint32_t count, uint8_t *buffer);
+
 #define CFI_MFR_AMD            0x0001
 #define CFI_MFR_FUJITSU        0x0004
 #define CFI_MFR_ATMEL  0x001F
@@ -159,4 +185,7 @@ struct cfi_fixup {
 #define CFI_MFR_ANY            0xffff
 #define CFI_ID_ANY             0xffff
 
-#endif /* CFI_H */
+#define CFI_MAX_BUS_WIDTH       4
+#define CFI_MAX_CHIP_WIDTH      4
+
+#endif /* OPENOCD_FLASH_NOR_CFI_H */

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)