From: hwg Date: Thu, 19 Jun 2014 07:34:41 +0000 (+0800) Subject: update rkwifi driver to version 4.80.WFD.OOB X-Git-Tag: firefly_0821_release~5068 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=01c70c399b0d1199cf8511f132e7566f767e8e73;p=firefly-linux-kernel-4.4.55.git update rkwifi driver to version 4.80.WFD.OOB use pre alloc memory for driver, solve memory alloc fail problem --- diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile index 54f6c9b2b93e..1893be4ad7cc 100644 --- a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile @@ -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 diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd.h old mode 100644 new mode 100755 diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/linux_osl.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/linux_osl.c old mode 100644 new mode 100755 index b682cbca91f6..573643039a0f --- a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/linux_osl.c +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/linux_osl.c @@ -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); } diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/rkversion.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/rkversion.c index 4540186395ac..abce9c663e76 100644 --- a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/rkversion.c +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/rkversion.c @@ -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[] = ""; diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_android.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_android.c old mode 100644 new mode 100755 index b2958d9860cf..f675cfdf8de5 --- a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_android.c +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_android.c @@ -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 */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_android.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_android.h index 981889711f81..b0ef17eda0c5 100644 --- a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_android.h +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_android.h @@ -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_ */ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfg80211.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfg80211.c old mode 100644 new mode 100755 diff --git a/net/rfkill/rfkill-wlan.c b/net/rfkill/rfkill-wlan.c index bcc4b286c8e4..629e6471d55e 100755 --- a/net/rfkill/rfkill-wlan.c +++ b/net/rfkill/rfkill-wlan.c @@ -34,6 +34,7 @@ #include #include #include +#include #ifdef CONFIG_OF #include #include @@ -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;