tests/mtd_mapper: implement pagewise functions
This commit is contained in:
parent
43ee53a059
commit
5d3de413b3
@ -42,6 +42,8 @@
|
||||
|
||||
#define REGION_FLASH_SIZE MEMORY_SIZE / 2
|
||||
|
||||
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
|
||||
|
||||
static uint8_t _dummy_memory[MEMORY_SIZE];
|
||||
|
||||
static uint8_t _buffer[PAGE_SIZE];
|
||||
@ -65,6 +67,25 @@ static int _read(mtd_dev_t *dev, void *buff, uint32_t addr, uint32_t size)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int _read_page(mtd_dev_t *dev, void *buff, uint32_t page, uint32_t offset, uint32_t size)
|
||||
{
|
||||
uint32_t addr = page * dev->page_size + offset;
|
||||
|
||||
if (page >= dev->sector_count * dev->pages_per_sector) {
|
||||
return -EOVERFLOW;
|
||||
}
|
||||
|
||||
if (offset > dev->page_size) {
|
||||
return -EOVERFLOW;
|
||||
}
|
||||
|
||||
size = MIN(dev->page_size - offset, size);
|
||||
|
||||
memcpy(buff, _dummy_memory + addr, size);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
static int _write(mtd_dev_t *dev, const void *buff, uint32_t addr,
|
||||
uint32_t size)
|
||||
{
|
||||
@ -81,6 +102,25 @@ static int _write(mtd_dev_t *dev, const void *buff, uint32_t addr,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int _write_page(mtd_dev_t *dev, const void *buff, uint32_t page, uint32_t offset, uint32_t size)
|
||||
{
|
||||
uint32_t addr = page * dev->page_size + offset;
|
||||
|
||||
if (page >= dev->sector_count * dev->pages_per_sector) {
|
||||
return -EOVERFLOW;
|
||||
}
|
||||
|
||||
if (offset > dev->page_size) {
|
||||
return -EOVERFLOW;
|
||||
}
|
||||
|
||||
size = MIN(dev->page_size - offset, size);
|
||||
|
||||
memcpy(_dummy_memory + addr, buff, size);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
static int _erase(mtd_dev_t *dev, uint32_t addr, uint32_t size)
|
||||
{
|
||||
(void)dev;
|
||||
@ -99,6 +139,20 @@ static int _erase(mtd_dev_t *dev, uint32_t addr, uint32_t size)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int _erase_sector(mtd_dev_t *dev, uint32_t sector, uint32_t count)
|
||||
{
|
||||
uint32_t addr = sector * dev->page_size * dev->pages_per_sector;
|
||||
|
||||
if (sector + count > dev->sector_count) {
|
||||
return -EOVERFLOW;
|
||||
}
|
||||
|
||||
memset(_dummy_memory + addr, 0xff,
|
||||
count * dev->page_size * dev->pages_per_sector);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int _power(mtd_dev_t *dev, enum mtd_power_state power)
|
||||
{
|
||||
(void)dev;
|
||||
@ -112,6 +166,9 @@ static const mtd_desc_t driver = {
|
||||
.write = _write,
|
||||
.erase = _erase,
|
||||
.power = _power,
|
||||
.read_page = _read_page,
|
||||
.write_page = _write_page,
|
||||
.erase_sector = _erase_sector,
|
||||
};
|
||||
|
||||
static mtd_dev_t dev = {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user