#pragma once #include #include struct flash_dev; struct flash_ops { size_t (* get_size)(struct flash_dev *dev); size_t (* get_capacity)(struct flash_dev *dev); int (* read)(struct flash_dev *dev, uint32_t addr, void *data, size_t len); int (* write)(struct flash_dev *dev, uint32_t addr, const void *data, size_t len); int (* copy)(struct flash_dev *dev, uint32_t dst, uint32_t src, size_t len); int (* erase)(struct flash_dev *dev, uint32_t addr, size_t block_size); }; struct flash_dev { struct flash_ops *ops; void *priv; }; struct flash_dev *flash_probe(void); void flash_release(struct flash_dev *dev); size_t flash_get_size(struct flash_dev *dev); size_t flash_get_capacity(struct flash_dev *dev); int flash_read(struct flash_dev *dev, uint32_t addr, void *data, size_t len); int flash_write(struct flash_dev *dev, uint32_t addr, const void *data, size_t len); int flash_copy(struct flash_dev *dev, uint32_t dst, uint32_t src, size_t len); int flash_erase(struct flash_dev *dev, uint32_t addr, size_t block_size);