Support erasing of more than one erase unit in the exhaustible block device

pull/7375/head
David Saada 2018-06-03 16:12:12 +03:00 committed by adbridge
parent 2c4a868734
commit dc3092fd9a
1 changed files with 17 additions and 10 deletions

View File

@ -68,7 +68,6 @@ int ExhaustibleBlockDevice::program(const void *buffer, bd_addr_t addr, bd_size_
MBED_ASSERT(is_valid_program(addr, size)); MBED_ASSERT(is_valid_program(addr, size));
if (_erase_array[addr / get_erase_size()] == 0) { if (_erase_array[addr / get_erase_size()] == 0) {
// TODO possibly something more destructive here
return 0; return 0;
} }
@ -79,17 +78,25 @@ int ExhaustibleBlockDevice::erase(bd_addr_t addr, bd_size_t size)
{ {
MBED_ASSERT(is_valid_erase(addr, size)); MBED_ASSERT(is_valid_erase(addr, size));
// use an erase cycle bd_size_t eu_size = get_erase_size();
if (_erase_array[addr / get_erase_size()] > 0) { while (size) {
_erase_array[addr / get_erase_size()] -= 1; // use an erase cycle
if (_erase_array[addr / eu_size] > 0) {
_erase_array[addr / eu_size] -= 1;
}
if (_erase_array[addr / eu_size] > 0) {
int err = _bd->erase(addr, eu_size);
if (err) {
return err;
}
}
addr += eu_size;
size -= eu_size;
} }
if (_erase_array[addr / get_erase_size()] == 0) { return 0;
// TODO possibly something more destructive here
return 0;
}
return _bd->erase(addr, size);
} }
bd_size_t ExhaustibleBlockDevice::get_read_size() const bd_size_t ExhaustibleBlockDevice::get_read_size() const