update rkwifi driver to version 4.80.WFD.OOB
authorhwg <hwg@rock-chips.com>
Thu, 19 Jun 2014 07:34:41 +0000 (15:34 +0800)
committerhwg <hwg@rock-chips.com>
Thu, 19 Jun 2014 07:40:20 +0000 (15:40 +0800)
 use pre alloc memory for driver, solve memory alloc fail problem

drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile
drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd.h [changed mode: 0644->0755]
drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/linux_osl.c [changed mode: 0644->0755]
drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/rkversion.c
drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_android.c [changed mode: 0644->0755]
drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_android.h
drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfg80211.c [changed mode: 0644->0755]
net/rfkill/rfkill-wlan.c

index 54f6c9b2b93ed9b5c2f245fe96ca5bb6ab114774..1893be4ad7ccdd9b28cb4c7e03fcaae04587a08c 100644 (file)
@@ -36,6 +36,8 @@ $(MODULE_NAME)-y += $(DHDOFILES)
 
 DHDCFLAGS += -DCUSTOMER_HW
 
+DHDCFLAGS += -DSTATIC_WL_PRIV_STRUCT -DCONFIG_DHD_USE_STATIC_BUF -DENHANCED_STATIC_BUF 
+
 ifeq ($(CONFIG_BCMDHD_OOB),y)
 DHDCFLAGS += -DOOB_INTR_ONLY -DHW_OOB -DCUSTOMER_OOB
 else
old mode 100644 (file)
new mode 100755 (executable)
index b682cbc..5736430
@@ -727,7 +727,7 @@ osl_pktget_static(osl_t *osh, uint len)
        struct sk_buff *skb;
 
        if (len > DHD_SKB_MAX_BUFSIZE) {
-               printk("%s: attempt to allocate huge packet (0x%x)\n", __FUNCTION__, len);
+               //printk("%s: attempt to allocate huge packet (0x%x)\n", __FUNCTION__, len);
                return osl_pktget(osh, len);
        }
 
index 4540186395ac87d7178e4d926ea6f9a783a2d7bc..abce9c663e764e3691e5d981a4d1f5f349ddc653 100644 (file)
@@ -10,7 +10,7 @@
  */
 
 
-const char RKWIFI_DRV_VERSION[] = "4.79.WFD.OOB";
+const char RKWIFI_DRV_VERSION[] = "4.80.WFD.OOB";
 
 const char WIFI_MODULE_NAME[] = "";
 const char CONFIG_BCMDHD_FW_PATH[] = "";
old mode 100644 (file)
new mode 100755 (executable)
index b2958d9..f675cfd
@@ -1782,6 +1782,24 @@ wl_genl_handle_msg(
 }
 #endif /* WL_GENL */
 
+extern void *rockchip_mem_prealloc(int section, unsigned long size);
+void* wl_android_prealloc(int section, unsigned long size)
+{
+       void *alloc_ptr = NULL;
+       //if (wifi_control_data && wifi_control_data->mem_prealloc) {
+               alloc_ptr = rockchip_mem_prealloc(section, size);
+               if (alloc_ptr) {
+                       ANDROID_INFO(("success alloc section %d\n", section));
+                       if (size != 0L)
+                               bzero(alloc_ptr, size);
+                       return alloc_ptr;
+               }
+       //}
+
+       ANDROID_ERROR(("can't alloc section %d\n", section));
+       return NULL;
+}
+
 /**
  * Functions for Android WiFi card detection
  */
index 981889711f81815f91376d3afe7cec8ebbd0cf7e..b0ef17eda0c5d8e02875c019fb547e83a4c496cd 100644 (file)
@@ -41,6 +41,7 @@ void wl_android_post_init(void);
 int wl_android_wifi_on(struct net_device *dev);
 int wl_android_wifi_off(struct net_device *dev);
 int wl_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd);
+void* wl_android_prealloc(int section, unsigned long size);
 
 #if defined(CONFIG_WIFI_CONTROL_FUNC)
 int wl_android_wifictrl_func_add(void);
@@ -174,4 +175,4 @@ void wl_run_bss_cache_timer(wl_bss_cache_ctrl_t *bss_cache_ctrl, int kick_off);
 void wl_release_bss_cache_ctrl(wl_bss_cache_ctrl_t *bss_cache_ctrl);
 int wl_init_bss_cache_ctrl(wl_bss_cache_ctrl_t *bss_cache_ctrl);
 #endif
-#endif /* _wl_android_ */
\ No newline at end of file
+#endif /* _wl_android_ */
index bcc4b286c8e46d120beb9fb2f94f4dd6df7b1833..629e6471d55e4558f21c0aa1e57f1d041f6331b8 100755 (executable)
@@ -34,6 +34,7 @@
 #include <linux/gpio.h>
 #include <linux/rockchip/iomap.h>
 #include <dt-bindings/gpio/gpio.h>
+#include <linux/skbuff.h>
 #ifdef CONFIG_OF
 #include <linux/of.h>
 #include <linux/of_device.h>
@@ -94,56 +95,70 @@ static const char wlan_name[] =
  * Broadcom Wifi Static Memory
  * 
  **********************************************************/
+#ifdef CONFIG_RKWIFI
+#define BCM_STATIC_MEMORY_SUPPORT 1
+#else
 #define BCM_STATIC_MEMORY_SUPPORT 0
+#endif
 //===========================
 #if BCM_STATIC_MEMORY_SUPPORT
 #define PREALLOC_WLAN_SEC_NUM           4
 #define PREALLOC_WLAN_BUF_NUM           160
-#define PREALLOC_WLAN_SECTION_HEADER    24
+#define PREALLOC_WLAN_SECTION_HEADER    0
 #define WLAN_SKB_BUF_NUM        16
 
-#define WLAN_SECTION_SIZE_0     (PREALLOC_WLAN_BUF_NUM * 128)
-#define WLAN_SECTION_SIZE_1     (PREALLOC_WLAN_BUF_NUM * 128)
-#define WLAN_SECTION_SIZE_2     (PREALLOC_WLAN_BUF_NUM * 512)
-#define WLAN_SECTION_SIZE_3     (PREALLOC_WLAN_BUF_NUM * 1024)
-#define WLAN_SECTION_SIZE_5     (PREALLOC_WLAN_BUF_NUM * 512)
+#define WLAN_SECTION_SIZE_0     (12 * 1024)
+#define WLAN_SECTION_SIZE_1     (12 * 1024)
+#define WLAN_SECTION_SIZE_2     (32 * 1024)
+#define WLAN_SECTION_SIZE_3     (136* 1024)
+#define WLAN_SECTION_SIZE_4     (4  * 1024)
+#define WLAN_SECTION_SIZE_5     (64 * 1024)
+#define WLAN_SECTION_SIZE_6     (4  * 1024)
+#define WLAN_SECTION_SIZE_7     (4  * 1024)
 
-static struct sk_buff *wlan_static_skb[WLAN_SKB_BUF_NUM];
+static struct sk_buff *wlan_static_skb[WLAN_SKB_BUF_NUM+1];
 
 struct wifi_mem_prealloc {
     void *mem_ptr;
     unsigned long size;
 };
 
-static struct wifi_mem_prealloc wifi_mem_array[5] = {
-    {NULL, (WLAN_SECTION_SIZE_0 + PREALLOC_WLAN_SECTION_HEADER)},
-    {NULL, (WLAN_SECTION_SIZE_1 + PREALLOC_WLAN_SECTION_HEADER)},
-    {NULL, (WLAN_SECTION_SIZE_2 + PREALLOC_WLAN_SECTION_HEADER)},
-    {NULL, (WLAN_SECTION_SIZE_3 + PREALLOC_WLAN_SECTION_HEADER)},
-    {NULL, (WLAN_SECTION_SIZE_5 + PREALLOC_WLAN_SECTION_HEADER)}
+static struct wifi_mem_prealloc wifi_mem_array[8] = {
+    {NULL, (WLAN_SECTION_SIZE_0)},
+    {NULL, (WLAN_SECTION_SIZE_1)},
+    {NULL, (WLAN_SECTION_SIZE_2)},
+    {NULL, (WLAN_SECTION_SIZE_3)},
+    {NULL, (WLAN_SECTION_SIZE_4)},
+    {NULL, (WLAN_SECTION_SIZE_5)},
+    {NULL, (WLAN_SECTION_SIZE_6)},
+    {NULL, (WLAN_SECTION_SIZE_7)}
 };
 
-static int __init rockchip_init_wifi_mem(void)
+static int rockchip_init_wifi_mem(void)
 {
     int i;
     int j;
 
     for (i = 0 ; i < WLAN_SKB_BUF_NUM ; i++) {
         wlan_static_skb[i] = dev_alloc_skb(
-               ((i < (WLAN_SKB_BUF_NUM / 2)) ? 4096 : 8192));
+               ((i < (WLAN_SKB_BUF_NUM / 2)) ? (PAGE_SIZE*1) : (PAGE_SIZE*2)));
 
         if (!wlan_static_skb[i])
             goto err_skb_alloc;
     }
 
-    for (i = 0 ; i < 5; i++) {
+    wlan_static_skb[i] = dev_alloc_skb((PAGE_SIZE*4));
+    if (!wlan_static_skb[i])
+        goto err_skb_alloc;
+
+    for (i = 0 ; i <= 7; i++) {
         wifi_mem_array[i].mem_ptr =
                kmalloc(wifi_mem_array[i].size, GFP_KERNEL);
 
         if (!wifi_mem_array[i].mem_ptr)
             goto err_mem_alloc;
-        }
-        return 0;
+    }
+    return 0;
 
 err_mem_alloc:
     pr_err("Failed to mem_alloc for WLAN\n");
@@ -154,21 +169,20 @@ err_skb_alloc:
     pr_err("Failed to skb_alloc for WLAN\n");
     for (j = 0 ; j < i ; j++)
         dev_kfree_skb(wlan_static_skb[j]);
+    dev_kfree_skb(wlan_static_skb[j]);
 
     return -ENOMEM;
 }
 
 void *rockchip_mem_prealloc(int section, unsigned long size)
 {
+    //printk("rockchip_mem_prealloc: section = %d, size = %d\n", section, size);
     if (section == PREALLOC_WLAN_SEC_NUM)
         return wlan_static_skb;
 
-    if ((section < 0) || (section > 5))
+    if ((section < 0) || (section > 7))
         return NULL;
 
-    if (section == 5)
-        return wifi_mem_array[4].mem_ptr;
-
     if (wifi_mem_array[section].size < size)
         return NULL;