[sdio] free memory and enhance performance
@@ -251,6 +251,9 @@ rt_int32_t sdio_io_rw_extended_block(struct rt_sdio_function *func,
rt_uint32_t left_size;
rt_uint32_t max_blks, blks;
+ RT_ASSERT(func != RT_NULL);
+ RT_ASSERT(func->card != RT_NULL);
+
left_size = len;
/* Do the bulk of the transfer using block mode (if supported). */
@@ -575,8 +578,9 @@ static rt_int32_t sdio_read_cis(struct rt_sdio_function *func)
if (tpl_link < 4)
{
LOG_D("bad CISTPL_MANFID length");
- break;
}
+ else
+ {
if (func->num != 0)
{
func->manufacturer = curr->data[0];
@@ -591,6 +595,9 @@ static rt_int32_t sdio_read_cis(struct rt_sdio_function *func)
card->cis.product = curr->data[2];
card->cis.product |= curr->data[3] << 8;
}
+ }
+
+ rt_free(curr);
break;
case CISTPL_FUNCE:
if (func->num != 0)
@@ -930,9 +937,6 @@ err3:
sdio_free_cis(host->card->sdio_function[i]);
rt_free(host->card->sdio_function[i]);
host->card->sdio_function[i] = RT_NULL;
- rt_free(host->card);
- host->card = RT_NULL;
- break;
}
}
}
