diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/chipdrivers.h | 4 | ||||
-rw-r--r-- | include/flash.h | 75 |
2 files changed, 41 insertions, 38 deletions
diff --git a/include/chipdrivers.h b/include/chipdrivers.h index 470d1fe2..3b07afe3 100644 --- a/include/chipdrivers.h +++ b/include/chipdrivers.h @@ -52,8 +52,8 @@ int spi_block_erase_d7(struct flashctx *flash, unsigned int addr, unsigned int b int spi_block_erase_d8(struct flashctx *flash, unsigned int addr, unsigned int blocklen); int spi_block_erase_db(struct flashctx *flash, unsigned int addr, unsigned int blocklen); int spi_block_erase_dc(struct flashctx *flash, unsigned int addr, unsigned int blocklen); -erasefunc_t *spi_get_erasefn_from_opcode(uint8_t opcode); -uint8_t spi_get_opcode_from_erasefn(erasefunc_t *func); +enum block_erase_func spi_get_erasefn_from_opcode(uint8_t opcode); +uint8_t spi_get_opcode_from_erasefn(enum block_erase_func func); int spi_chip_write_1(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len); int spi_nbyte_read(struct flashctx *flash, unsigned int addr, uint8_t *bytes, unsigned int len); int spi_read_chunked(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len, unsigned int chunksize); diff --git a/include/flash.h b/include/flash.h index 03c1e2c6..238d0101 100644 --- a/include/flash.h +++ b/include/flash.h @@ -268,41 +268,44 @@ enum read_func { typedef int (read_func_t)(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len); int read_flash(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len); -#define NO_BLOCK_ERASE_FUNC NULL -#define SPI_BLOCK_ERASE_EMULATION &spi_block_erase_emulation -#define SPI_BLOCK_ERASE_20 &spi_block_erase_20 -#define SPI_BLOCK_ERASE_21 &spi_block_erase_21 -#define SPI_BLOCK_ERASE_40 &spi_block_erase_40 -#define SPI_BLOCK_ERASE_50 &spi_block_erase_50 -#define SPI_BLOCK_ERASE_52 &spi_block_erase_52 -#define SPI_BLOCK_ERASE_53 &spi_block_erase_53 -#define SPI_BLOCK_ERASE_5C &spi_block_erase_5c -#define SPI_BLOCK_ERASE_60 &spi_block_erase_60 -#define SPI_BLOCK_ERASE_62 &spi_block_erase_62 -#define SPI_BLOCK_ERASE_81 &spi_block_erase_81 -#define SPI_BLOCK_ERASE_C4 &spi_block_erase_c4 -#define SPI_BLOCK_ERASE_C7 &spi_block_erase_c7 -#define SPI_BLOCK_ERASE_D7 &spi_block_erase_d7 -#define SPI_BLOCK_ERASE_D8 &spi_block_erase_d8 -#define SPI_BLOCK_ERASE_DB &spi_block_erase_db -#define SPI_BLOCK_ERASE_DC &spi_block_erase_dc -#define S25FL_BLOCK_ERASE &s25fl_block_erase -#define S25FS_BLOCK_ERASE_D8 &s25fs_block_erase_d8 -#define JEDEC_SECTOR_ERASE &erase_sector_jedec -#define JEDEC_BLOCK_ERASE &erase_block_jedec -#define JEDEC_CHIP_BLOCK_ERASE &erase_chip_block_jedec -#define OPAQUE_ERASE &erase_opaque -#define SPI_ERASE_AT45CS_SECTOR &spi_erase_at45cs_sector -#define SPI_ERASE_AT45DB_BLOCK &spi_erase_at45db_block -#define SPI_ERASE_AT45DB_CHIP &spi_erase_at45db_chip -#define SPI_ERASE_AT45DB_PAGE &spi_erase_at45db_page -#define SPI_ERASE_AT45DB_SECTOR &spi_erase_at45db_sector -#define ERASE_CHIP_28SF040 &erase_chip_28sf040 -#define ERASE_SECTOR_28SF040 &erase_sector_28sf040 -#define ERASE_BLOCK_82802AB &erase_block_82802ab -#define ERASE_SECTOR_49LFXXXC &erase_sector_49lfxxxc -#define STM50_SECTOR_ERASE &erase_sector_stm50 -#define EDI_CHIP_BLOCK_ERASE &edi_chip_block_erase +enum block_erase_func { + NO_BLOCK_ERASE_FUNC = 0, /* 0 indicates no block erase function set. */ + SPI_BLOCK_ERASE_EMULATION = 1, + SPI_BLOCK_ERASE_20, + SPI_BLOCK_ERASE_21, + SPI_BLOCK_ERASE_40, + SPI_BLOCK_ERASE_50, + SPI_BLOCK_ERASE_52, + SPI_BLOCK_ERASE_53, + SPI_BLOCK_ERASE_5C, + SPI_BLOCK_ERASE_60, + SPI_BLOCK_ERASE_62, + SPI_BLOCK_ERASE_81, + SPI_BLOCK_ERASE_C4, + SPI_BLOCK_ERASE_C7, + SPI_BLOCK_ERASE_D7, + SPI_BLOCK_ERASE_D8, + SPI_BLOCK_ERASE_DB, + SPI_BLOCK_ERASE_DC, + S25FL_BLOCK_ERASE, + S25FS_BLOCK_ERASE_D8, + JEDEC_SECTOR_ERASE, + JEDEC_BLOCK_ERASE, + JEDEC_CHIP_BLOCK_ERASE, + OPAQUE_ERASE, + SPI_ERASE_AT45CS_SECTOR, + SPI_ERASE_AT45DB_BLOCK, + SPI_ERASE_AT45DB_CHIP, + SPI_ERASE_AT45DB_PAGE, + SPI_ERASE_AT45DB_SECTOR, + ERASE_CHIP_28SF040, + ERASE_SECTOR_28SF040, + ERASE_BLOCK_82802AB, + ERASE_SECTOR_49LFXXXC, + STM50_SECTOR_ERASE, + EDI_CHIP_BLOCK_ERASE, + TEST_ERASE_INJECTOR, /* special case must come last. */ +}; struct flashchip { const char *vendor; @@ -366,7 +369,7 @@ struct flashchip { } eraseblocks[NUM_ERASEREGIONS]; /* a block_erase function should try to erase one block of size * 'blocklen' at address 'blockaddr' and return 0 on success. */ - int (*block_erase) (struct flashctx *flash, unsigned int blockaddr, unsigned int blocklen); + enum block_erase_func block_erase; } block_erasers[NUM_ERASEFUNCTIONS]; int (*printlock) (struct flashctx *flash); |