From 83605c3fa83dcdb3ce37dffdf99e38d989c30403 Mon Sep 17 00:00:00 2001 From: Alex Zhao Date: Mon, 6 Nov 2017 16:46:48 +0800 Subject: [PATCH] net: wireless: rockchip_wlan: fix country code setup failed Change-Id: I8cc1b7c3bfd6dc941e0f6f771fcfd3f7eb15cc8e Signed-off-by: Alex Zhao --- .../rockchip_wlan/rkwifi/bcmdhd/Makefile | 5 +- .../rockchip_wlan/rkwifi/bcmdhd/dhd_config.c | 49 +++++++++---------- .../rockchip_wlan/rkwifi/bcmdhd/dhd_config.h | 5 +- .../rockchip_wlan/rkwifi/bcmdhd/dhd_gpio.c | 4 ++ .../rockchip_wlan/rkwifi/bcmdhd/wl_cfg80211.c | 2 +- 5 files changed, 33 insertions(+), 32 deletions(-) diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile index 01ba8166efd5..77d7fbcc5946 100644 --- a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile @@ -17,8 +17,7 @@ DHDCFLAGS = -Wall -Wstrict-prototypes -Dlinux -DBCMDRIVER -DSDTEST \ -DWIFI_ACT_FRAME -DARP_OFFLOAD_SUPPORT -DSUPPORT_PM2_ONLY \ -DKEEP_ALIVE -DPKT_FILTER_SUPPORT -DPNO_SUPPORT -DDHDTCPACK_SUPPRESS \ -DDHD_DONOT_FORWARD_BCMEVENT_AS_NETWORK_PKT -DRXFRAME_THREAD \ - -DTSQ_MULTIPLIER -DMFP \ - -DBCMSDIOH_TXGLOM_EXT -DWL_EXT_IAPSTA \ + -DTSQ_MULTIPLIER -DMFP -DWL_EXT_IAPSTA \ -DENABLE_INSMOD_NO_FW_LOAD \ -Idrivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd \ -Idrivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/include @@ -32,7 +31,7 @@ DHDOFILES = aiutils.o siutils.o sbutils.o bcmutils.o bcmwifi_channels.o \ ifneq ($(CONFIG_BCMDHD_SDIO),) DHDCFLAGS += \ -DBCMSDIO -DMMC_SDIO_ABORT -DBCMLXSDMMC -DUSE_SDIOFIFO_IOVAR \ - -DBDC -DDHD_USE_IDLECOUNT -DBCMSDIOH_TXGLOM \ + -DBDC -DDHD_USE_IDLECOUNT -DBCMSDIOH_TXGLOM -DBCMSDIOH_TXGLOM_EXT \ -DCUSTOM_SDIO_F2_BLKSIZE=256 DHDOFILES += bcmsdh.o bcmsdh_linux.o bcmsdh_sdmmc.o bcmsdh_sdmmc_linux.o \ diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.c index 39b91c2aaf21..c54ebba0c80d 100644 --- a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.c +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.c @@ -514,8 +514,7 @@ dhd_conf_set_fw_name_by_chip(dhd_pub_t *dhd, char *fw_path, char *nv_path) if (chiprev == BCM43455C0_CHIP_REV) { strcpy(&fw_path[i+1], FW_BCM43455C0); strcpy(&nv_path[j + 1], "nvram_ap6255.txt"); - } - else if (chiprev == BCM43455C5_CHIP_REV) { + } else if (chiprev == BCM43456C5_CHIP_REV) { strcpy(&fw_path[i+1], FW_BCM43456C5); } break; @@ -730,7 +729,7 @@ dhd_conf_set_conf_name_by_chip(dhd_pub_t *dhd, char *conf_path) case BCM4345_CHIP_ID: if (chiprev == BCM43455C0_CHIP_REV) strcpy(&conf_path[i+1], CONFIG_BCM43455C0); - else if (chiprev == BCM43455C5_CHIP_REV) + else if (chiprev == BCM43456C5_CHIP_REV) strcpy(&conf_path[i+1], CONFIG_BCM43456C5); break; case BCM4339_CHIP_ID: @@ -1160,7 +1159,7 @@ void dhd_conf_add_pkt_filter(dhd_pub_t *dhd) { int i, j; - char str[12]; + char str[16]; #define MACS "%02x%02x%02x%02x%02x%02x" /* @@ -1181,17 +1180,17 @@ dhd_conf_add_pkt_filter(dhd_pub_t *dhd) } dhd->pktfilter_count += i; - for(i=0; iconf->magic_pkt_filter_add.count; i++) { - strcat(&dhd->conf->magic_pkt_filter_add.filter[i][0], " 0x"); - strcat(&dhd->conf->magic_pkt_filter_add.filter[i][0], "FFFFFFFFFFFF"); + if (dhd->conf->magic_pkt_filter_add) { + strcat(dhd->conf->magic_pkt_filter_add, " 0x"); + strcat(dhd->conf->magic_pkt_filter_add, "FFFFFFFFFFFF"); for (j=0; j<16; j++) - strcat(&dhd->conf->magic_pkt_filter_add.filter[i][0], "FFFFFFFFFFFF"); - strcat(&dhd->conf->magic_pkt_filter_add.filter[i][0], " 0x"); - strcat(&dhd->conf->magic_pkt_filter_add.filter[i][0], "FFFFFFFFFFFF"); + strcat(dhd->conf->magic_pkt_filter_add, "FFFFFFFFFFFF"); + strcat(dhd->conf->magic_pkt_filter_add, " 0x"); + strcat(dhd->conf->magic_pkt_filter_add, "FFFFFFFFFFFF"); sprintf(str, MACS, MAC2STRDBG(dhd->mac.octet)); for (j=0; j<16; j++) - strcat(&dhd->conf->magic_pkt_filter_add.filter[i][0], str); - dhd->pktfilter[i+dhd->pktfilter_count] = dhd->conf->magic_pkt_filter_add.filter[i]; + strncat(dhd->conf->magic_pkt_filter_add, str, 12); + dhd->pktfilter[dhd->pktfilter_count] = dhd->conf->magic_pkt_filter_add; dhd->pktfilter_count += 1; } } @@ -1839,16 +1838,12 @@ dhd_conf_read_pkt_filter(dhd_pub_t *dhd, char *full_param, uint len_param) printf("\n"); } else if (!strncmp("magic_pkt_filter_add=", full_param, len_param)) { - pick_tmp = data; - pch = bcmstrtok(&pick_tmp, ",.-", 0); - i=0; - while (pch != NULL && imagic_pkt_filter_add.filter[i][0], pch); - printf("%s: magic_pkt_filter_add[%d][] = %s\n", __FUNCTION__, i, &conf->magic_pkt_filter_add.filter[i][0]); - pch = bcmstrtok(&pick_tmp, ",.-", 0); - i++; + if (!(conf->magic_pkt_filter_add = kmalloc(MAGIC_PKT_FILTER_LEN, GFP_KERNEL))) { + CONFIG_ERROR(("%s: kmalloc failed\n", __FUNCTION__)); + } else { + strcpy(conf->magic_pkt_filter_add, data); + printf("%s: magic_pkt_filter_add = %s\n", __FUNCTION__, conf->magic_pkt_filter_add); } - conf->magic_pkt_filter_add.count = i; } else return false; @@ -2043,10 +2038,7 @@ dhd_conf_read_sdio_params(dhd_pub_t *dhd, char *full_param, uint len_param) printf("%s: deferred_tx_len = %d\n", __FUNCTION__, conf->deferred_tx_len); } else if (!strncmp("txctl_tmo_fix=", full_param, len_param)) { - if (!strncmp(data, "0", 1)) - conf->txctl_tmo_fix = FALSE; - else - conf->txctl_tmo_fix = TRUE; + conf->txctl_tmo_fix = (int)simple_strtol(data, NULL, 10); printf("%s: txctl_tmo_fix = %d\n", __FUNCTION__, conf->txctl_tmo_fix); } else if (!strncmp("tx_in_rx=", full_param, len_param)) { @@ -2470,6 +2462,8 @@ dhd_conf_preinit(dhd_pub_t *dhd) dhd_conf_free_mac_list(&conf->nv_by_mac); dhd_conf_free_chip_nv_path_list(&conf->nv_by_chip); #endif + if (conf->magic_pkt_filter_add) + kfree(conf->magic_pkt_filter_add); memset(&conf->country_list, 0, sizeof(conf_country_list_t)); conf->band = -1; conf->mimo_bw_cap = -1; @@ -2526,7 +2520,6 @@ dhd_conf_preinit(dhd_pub_t *dhd) #ifdef PKT_FILTER_SUPPORT memset(&conf->pkt_filter_add, 0, sizeof(conf_pkt_filter_add_t)); memset(&conf->pkt_filter_del, 0, sizeof(conf_pkt_filter_del_t)); - memset(&conf->magic_pkt_filter_add, 0, sizeof(conf_pkt_filter_del_t)); #endif conf->srl = -1; conf->lrl = -1; @@ -2641,6 +2634,8 @@ dhd_conf_reset(dhd_pub_t *dhd) dhd_conf_free_mac_list(&dhd->conf->nv_by_mac); dhd_conf_free_chip_nv_path_list(&dhd->conf->nv_by_chip); #endif + if (dhd->conf->magic_pkt_filter_add) + kfree(dhd->conf->magic_pkt_filter_add); memset(dhd->conf, 0, sizeof(dhd_conf_t)); return 0; } @@ -2684,6 +2679,8 @@ dhd_conf_detach(dhd_pub_t *dhd) dhd_conf_free_mac_list(&dhd->conf->nv_by_mac); dhd_conf_free_chip_nv_path_list(&dhd->conf->nv_by_chip); #endif + if (dhd->conf->magic_pkt_filter_add) + kfree(dhd->conf->magic_pkt_filter_add); MFREE(dhd->osh, dhd->conf, sizeof(dhd_conf_t)); } dhd->conf = NULL; diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.h b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.h index 6d875e3935c0..0a194936f35a 100644 --- a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.h +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.h @@ -31,7 +31,7 @@ extern uint dhd_slpauto; #define BCM4335A0_CHIP_REV 2 #define BCM4339A0_CHIP_REV 1 #define BCM43455C0_CHIP_REV 6 -#define BCM43455C5_CHIP_REV 9 +#define BCM43456C5_CHIP_REV 9 #define BCM4354A1_CHIP_REV 1 #define BCM4359B1_CHIP_REV 5 #define BCM4359C0_CHIP_REV 9 @@ -82,6 +82,7 @@ typedef struct wmes_param { #ifdef PKT_FILTER_SUPPORT #define DHD_CONF_FILTER_MAX 8 #define PKT_FILTER_LEN 300 +#define MAGIC_PKT_FILTER_LEN 450 typedef struct conf_pkt_filter_add { uint32 count; char filter[DHD_CONF_FILTER_MAX][PKT_FILTER_LEN]; @@ -127,7 +128,7 @@ typedef struct dhd_conf { #ifdef PKT_FILTER_SUPPORT conf_pkt_filter_add_t pkt_filter_add; conf_pkt_filter_del_t pkt_filter_del; - conf_pkt_filter_add_t magic_pkt_filter_add; + char *magic_pkt_filter_add; #endif int srl; int lrl; diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_gpio.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_gpio.c index 8746c804e784..a4ae259d8df5 100644 --- a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_gpio.c +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_gpio.c @@ -170,14 +170,18 @@ static int dhd_wlan_get_mac_addr(unsigned char *buf) static struct cntry_locales_custom brcm_wlan_translate_custom_table[] = { /* Table should be filled out based on custom platform regulatory requirement */ +#ifdef EXAMPLE_TABLE {"", "XT", 49}, /* Universal if Country code is unknown or empty */ {"US", "US", 0}, +#endif /* EXMAPLE_TABLE */ }; #ifdef CUSTOM_FORCE_NODFS_FLAG struct cntry_locales_custom brcm_wlan_translate_nodfs_table[] = { +#ifdef EXAMPLE_TABLE {"", "XT", 50}, /* Universal if Country code is unknown or empty */ {"US", "US", 0}, +#endif /* EXMAPLE_TABLE */ }; #endif diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfg80211.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfg80211.c index 3ab00b13d5c3..88508d645dbb 100644 --- a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfg80211.c +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/wl_cfg80211.c @@ -3778,7 +3778,7 @@ wl_customer6_legacy_chip_check(struct bcm_cfg80211 *cfg, dtoh32(revinfo.deviceid), dtoh32(revinfo.vendorid), dtoh32(revinfo.chipnum))); chipnum = revinfo.chipnum; if ((chipnum == BCM4350_CHIP_ID) || (chipnum == BCM4355_CHIP_ID) || - (chipnum == BCM4345_CHIP_ID)) { + (chipnum == BCM4345_CHIP_ID) || (chipnum == BCM43430_CHIP_ID)) { /* WAR required */ return true; }