flash: implement a default function for copying data

This commit is contained in:
S.J.R. van Schaik 2017-06-16 15:40:02 +02:00
parent 1ba4e77dd6
commit a8beb53fa0
2 changed files with 28 additions and 0 deletions

View file

@ -24,6 +24,8 @@ struct flash_dev {
}; };
int default_flash_is_erased(struct flash_dev *dev, uint32_t addr); int default_flash_is_erased(struct flash_dev *dev, uint32_t addr);
size_t default_flash_copy(struct flash_dev *dev, uint32_t dst, uint32_t src,
size_t len);
struct flash_dev *flash_probe(void); struct flash_dev *flash_probe(void);
void flash_release(struct flash_dev *dev); void flash_release(struct flash_dev *dev);

View file

@ -29,6 +29,32 @@ int default_flash_is_erased(struct flash_dev *dev, uint32_t addr)
return 1; return 1;
} }
size_t default_flash_copy(struct flash_dev *dev, uint32_t dst, uint32_t src,
size_t len)
{
uint8_t data[32];
size_t nbytes, ret = 0;
while (len) {
nbytes = min(sizeof data, len);
if (flash_read(dev, src, data, nbytes) == 0)
return -1;
if (flash_write(dev, dst, data, nbytes) == 0)
return -1;
dst += nbytes;
src += nbytes;
len -= nbytes;
ret += nbytes;
}
return ret;
}
void flash_release(struct flash_dev *dev) void flash_release(struct flash_dev *dev)
{ {
if (!dev) if (!dev)