summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2021-02-05 18:23:17 +0800
committerGitHub <[email protected]>2021-02-05 18:23:17 +0800
commit25bcd72e1bf6c76ae1d1d56ba2146b6efe2a8b78 (patch)
tree5fe849f41b11fe3ff5066d113d670c5e98301fb0
parentd514fea54ac4e1ba22983ff76b626b2ef81f9fdc (diff)
parentf62d8938dcc273c43ced9127ce41140f37de287e (diff)
Merge pull request #4308 from whj4674672/sdio
[sdio] free memory and enhance performance
-rw-r--r--components/drivers/sdio/sdio.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/components/drivers/sdio/sdio.c b/components/drivers/sdio/sdio.c
index f5d97cdd08..f0d5863a06 100644
--- a/components/drivers/sdio/sdio.c
+++ b/components/drivers/sdio/sdio.c
@@ -250,7 +250,10 @@ rt_int32_t sdio_io_rw_extended_block(struct rt_sdio_function *func,
rt_int32_t ret;
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,22 +578,26 @@ static rt_int32_t sdio_read_cis(struct rt_sdio_function *func)
if (tpl_link < 4)
{
LOG_D("bad CISTPL_MANFID length");
- break;
- }
- if (func->num != 0)
- {
- func->manufacturer = curr->data[0];
- func->manufacturer |= curr->data[1] << 8;
- func->product = curr->data[2];
- func->product |= curr->data[3] << 8;
}
else
{
- card->cis.manufacturer = curr->data[0];
- card->cis.manufacturer |= curr->data[1] << 8;
- card->cis.product = curr->data[2];
- card->cis.product |= curr->data[3] << 8;
+ if (func->num != 0)
+ {
+ func->manufacturer = curr->data[0];
+ func->manufacturer |= curr->data[1] << 8;
+ func->product = curr->data[2];
+ func->product |= curr->data[3] << 8;
+ }
+ else
+ {
+ card->cis.manufacturer = curr->data[0];
+ card->cis.manufacturer |= curr->data[1] << 8;
+ 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;
}
}
}