瀏覽代碼

[sdio] free memory and enhance performance

wanghaijing 4 年之前
父節點
當前提交
f62d8938dc
共有 1 個文件被更改,包括 20 次插入16 次删除
  1. 20 16
      components/drivers/sdio/sdio.c

+ 20 - 16
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;
             }
         }
     }