|
|
|
@ -424,7 +424,7 @@ static bool get_env_from_cache(const char *name, size_t name_len, uint32_t *addr
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
static uint32_t continue_ff_addr(uint32_t start, uint32_t end)
|
|
|
|
static uint32_t continue_ff_addr(uint32_t start, uint32_t end)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
uint8_t buf[EF_READ_BUF_SIZE], last_data = 0x00;
|
|
|
|
uint8_t buf[32], last_data = 0x00;
|
|
|
|
size_t i, addr = start, read_size;
|
|
|
|
size_t i, addr = start, read_size;
|
|
|
|
|
|
|
|
|
|
|
|
for (; start < end; start += sizeof(buf)) {
|
|
|
|
for (; start < end; start += sizeof(buf)) {
|
|
|
|
@ -522,7 +522,7 @@ static uint32_t get_next_env_addr(sector_meta_data_t sector, env_node_obj_t pre_
|
|
|
|
static EfErrCode read_env(env_node_obj_t env)
|
|
|
|
static EfErrCode read_env(env_node_obj_t env)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
struct env_hdr_data env_hdr;
|
|
|
|
struct env_hdr_data env_hdr;
|
|
|
|
uint8_t buf[EF_READ_BUF_SIZE];
|
|
|
|
uint8_t buf[32];
|
|
|
|
uint32_t calc_crc32 = 0, crc_data_len, env_name_addr;
|
|
|
|
uint32_t calc_crc32 = 0, crc_data_len, env_name_addr;
|
|
|
|
EfErrCode result = EF_NO_ERR;
|
|
|
|
EfErrCode result = EF_NO_ERR;
|
|
|
|
size_t len, size;
|
|
|
|
size_t len, size;
|
|
|
|
@ -1194,11 +1194,16 @@ static uint32_t new_env(sector_meta_data_t sector, size_t env_size)
|
|
|
|
|
|
|
|
|
|
|
|
__retry:
|
|
|
|
__retry:
|
|
|
|
|
|
|
|
|
|
|
|
if ((empty_env = alloc_env(sector, env_size)) == FAILED_ADDR && gc_request && !already_gc) {
|
|
|
|
if ((empty_env = alloc_env(sector, env_size)) == FAILED_ADDR) {
|
|
|
|
|
|
|
|
if (gc_request && !already_gc) {
|
|
|
|
EF_DEBUG("Warning: Alloc an ENV (size %d) failed when new ENV. Now will GC then retry.\n", env_size);
|
|
|
|
EF_DEBUG("Warning: Alloc an ENV (size %d) failed when new ENV. Now will GC then retry.\n", env_size);
|
|
|
|
gc_collect();
|
|
|
|
gc_collect();
|
|
|
|
already_gc = true;
|
|
|
|
already_gc = true;
|
|
|
|
goto __retry;
|
|
|
|
goto __retry;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
EF_DEBUG("Error: Alloc an ENV (size %d) failed after GC. ENV full.\n", env_size);
|
|
|
|
|
|
|
|
gc_request = false;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return empty_env;
|
|
|
|
return empty_env;
|
|
|
|
@ -1286,13 +1291,9 @@ static EfErrCode align_write(uint32_t addr, const uint32_t *buf, size_t size)
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
memset(align_data, 0xFF, align_data_size);
|
|
|
|
memset(align_data, 0xFF, align_data_size);
|
|
|
|
align_remain = EF_WG_ALIGN_DOWN(size);//use align_remain temporary to save aligned size.
|
|
|
|
result = ef_port_write(addr, buf, EF_WG_ALIGN_DOWN(size));
|
|
|
|
|
|
|
|
|
|
|
|
if(align_remain > 0){//it may be 0 in this function.
|
|
|
|
|
|
|
|
result = ef_port_write(addr, buf, align_remain);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
align_remain = size - align_remain;
|
|
|
|
align_remain = size - EF_WG_ALIGN_DOWN(size);
|
|
|
|
if (result == EF_NO_ERR && align_remain) {
|
|
|
|
if (result == EF_NO_ERR && align_remain) {
|
|
|
|
memcpy(align_data, (uint8_t *)buf + EF_WG_ALIGN_DOWN(size), align_remain);
|
|
|
|
memcpy(align_data, (uint8_t *)buf + EF_WG_ALIGN_DOWN(size), align_remain);
|
|
|
|
result = ef_port_write(addr + EF_WG_ALIGN_DOWN(size), (uint32_t *) align_data, align_data_size);
|
|
|
|
result = ef_port_write(addr + EF_WG_ALIGN_DOWN(size), (uint32_t *) align_data, align_data_size);
|
|
|
|
|