This section describes the API between the FLASH IO library the FLASH device drivers.
This structure keeps all the information about a single driver.
struct cyg_flash_dev { const struct cyg_flash_dev_funs *funs; // Function pointers cyg_uint32 flags; // Device characteristics cyg_flashaddr_t start; // First address cyg_flashaddr_t end; // Last address cyg_uint32 num_block_infos; // Number of entries const cyg_flash_block_info_t *block_info; // Info about one block size const void *priv; // Devices private data // The following are only written to by the FLASH IO layer. cyg_flash_printf *pf; // Pointer to diagnostic printf bool init; // Device has been initialised #ifdef CYGPKG_KERNEL cyg_mutex_t mutex; // Mutex for thread safeness #endif #if (CYGHWR_IO_FLASH_DEVICE > 1) struct cyg_flash_dev *next; // Pointer to next device #endif }; struct cyg_flash_dev_funs { int (*flash_init) (struct cyg_flash_dev *dev); size_t (*flash_query) (struct cyg_flash_dev *dev, void * data, size_t len); int (*flash_erase_block) (struct cyg_flash_dev *dev, cyg_flashaddr_t block_base); int (*flash_program) (struct cyg_flash_dev *dev, cyg_flashaddr_t base, const void* data, size_t len); int (*flash_read) (struct cyg_flash_dev *dev, const cyg_flashaddr_t base, void* data, size_t len); #ifdef CYGHWR_IO_FLASH_BLOCK_LOCKING int (*flash_block_lock) (struct cyg_flash_dev *dev, const cyg_flashaddr_t block_base); int (*flash_block_unlock) (struct cyg_flash_dev *dev, const cyg_flashaddr_t block_base); #endif }; |
The FLASH IO layer will only pass requests for operations on a single block.