123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- #ifndef NRF_BLOCK_DEV_QSPI_H__
- #define NRF_BLOCK_DEV_QSPI_H__
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include "nrf_block_dev.h"
- #include "nrf_drv_qspi.h"
- #include "nrf_log_instance.h"
- extern const nrf_block_dev_ops_t nrf_block_device_qspi_ops;
- #define NRF_BLOCK_DEV_QSPI_ERASE_UNIT_SIZE (4096)
- typedef enum {
- NRF_BLOCK_DEV_QSPI_STATE_DISABLED = 0,
- NRF_BLOCK_DEV_QSPI_STATE_IDLE,
- NRF_BLOCK_DEV_QSPI_STATE_READ_EXEC,
- NRF_BLOCK_DEV_QSPI_STATE_EUNIT_LOAD,
- NRF_BLOCK_DEV_QSPI_STATE_WRITE_ERASE,
- NRF_BLOCK_DEV_QSPI_STATE_WRITE_EXEC,
- } nrf_block_dev_qspi_state_t;
- typedef struct {
- volatile nrf_block_dev_qspi_state_t state;
- nrf_block_dev_geometry_t geometry;
- nrf_block_dev_ev_handler ev_handler;
- void const * p_context;
- nrf_block_req_t req;
- nrf_block_req_t left_req;
- bool cache_flushing;
- bool writeback_mode;
- bool erase_required;
- uint32_t erase_unit_idx;
- uint32_t erase_unit_dirty_blocks;
- uint8_t p_erase_unit_buff[NRF_BLOCK_DEV_QSPI_ERASE_UNIT_SIZE];
- } nrf_block_dev_qspi_work_t;
- typedef enum {
- NRF_BLOCK_DEV_QSPI_FLAG_CACHE_WRITEBACK = (1u << 0)
- } nrf_block_dev_qspi_flag_t;
- #define NRF_BLOCK_DEV_QSPI_LOG_NAME block_dev_qspi
- #define NRF_BLOCK_DEV_QSPI_CONFIG(blk_size, blk_flags, qspi_drv_config) { \
- .block_size = (blk_size), \
- .flags = (blk_flags), \
- .qspi_config = qspi_drv_config \
- }
- typedef struct {
- uint32_t block_size;
- uint32_t flags;
- nrf_drv_qspi_config_t qspi_config;
- } nrf_block_dev_qspi_config_t;
- typedef struct {
- nrf_block_dev_t block_dev;
- nrf_block_dev_info_strings_t info_strings;
- nrf_block_dev_qspi_config_t qspi_bdev_config;
- nrf_block_dev_qspi_work_t * p_work;
- NRF_LOG_INSTANCE_PTR_DECLARE(p_log)
- } nrf_block_dev_qspi_t;
- #define NRF_BLOCK_DEV_QSPI_DEFINE(name, config, info) \
- static nrf_block_dev_qspi_work_t CONCAT_2(name, _work); \
- NRF_LOG_INSTANCE_REGISTER(NRF_BLOCK_DEV_QSPI_LOG_NAME, name, \
- NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR, \
- NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR, \
- NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL, \
- NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED ? \
- NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL : NRF_LOG_SEVERITY_NONE); \
- static const nrf_block_dev_qspi_t name = { \
- .block_dev = { .p_ops = &nrf_block_device_qspi_ops }, \
- .info_strings = BRACKET_EXTRACT(info), \
- .qspi_bdev_config = config, \
- .p_work = &CONCAT_2(name, _work), \
- NRF_LOG_INSTANCE_PTR_INIT(p_log, NRF_BLOCK_DEV_QSPI_LOG_NAME, name) \
- }
- static inline nrf_block_dev_t const *
- nrf_block_dev_qspi_ops_get(nrf_block_dev_qspi_t const * p_blk_qspi)
- {
- return &p_blk_qspi->block_dev;
- }
- #ifdef __cplusplus
- }
- #endif
- #endif
|