diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile index 6ef3dfd8b1db..39c1984e8ad4 100644 --- a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile @@ -23,7 +23,7 @@ DHDCFLAGS = -Wall -Wstrict-prototypes -Dlinux -DBCMDRIVER \ -DKEEP_ALIVE -DPKT_FILTER_SUPPORT -DDHDTCPACK_SUPPRESS \ -DDHD_DONOT_FORWARD_BCMEVENT_AS_NETWORK_PKT \ -DMULTIPLE_SUPPLICANT -DTSQ_MULTIPLIER -DMFP -DDHD_8021X_DUMP \ - -DWL_EXT_IAPSTA -DWL_ESCAN \ + -DWL_EXT_IAPSTA -DWL_ESCAN -DCCODE_LIST \ -DENABLE_INSMOD_NO_FW_LOAD -DDHD_UNSUPPORT_IF_CNTS \ -Idrivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd \ -Idrivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/include @@ -33,7 +33,7 @@ DHDOFILES = aiutils.o siutils.o sbutils.o bcmutils.o bcmwifi_channels.o \ dhd_common.o dhd_ip.o dhd_linux_wq.o dhd_custom_gpio.o \ bcmevent.o hndpmu.o linux_osl.o wldev_common.o wl_android.o bcmxtlv.o \ dhd_debug_linux.o dhd_debug.o dhd_mschdbg.o hnd_pktq.o hnd_pktpool.o \ - dhd_config.o wl_event.o wl_android_ext.o wl_escan.o + dhd_config.o dhd_ccode.o wl_event.o wl_android_ext.o wl_escan.o #BCMDHD_SDIO ifneq ($(CONFIG_BCMDHD_SDIO),) diff --git a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_ccode.c b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_ccode.c new file mode 100644 index 000000000000..0cdacef5ac3b --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_ccode.c @@ -0,0 +1,306 @@ +// SPDX-License-Identifier: GPL-2.0 +#ifdef CCODE_LIST +#ifdef CONFIG_COMPAT +#include +#endif /* COMFIG_COMPAT */ +#include +#include + +#ifdef BCMSDIO +#define CCODE_43438 +#define CCODE_43436 +#define CCODE_43455C0 +#define CCODE_43456C5 +#endif +#if defined(BCMSDIO) || defined(BCMPCIE) +#define CCODE_4356A2 +#define CCODE_4359C0 +#endif +#if defined(BCMPCIE) +#define CCODE_4375B4 +#endif +#ifdef BCMDBUS +#define CCODE_4358U +#endif + +#ifdef BCMSDIO +#ifdef CCODE_43438 +const char ccode_43438[] = "RU/13"; +#else +const char ccode_43438[] = ""; +#endif + +#ifdef CCODE_43436 +const char ccode_43436[] = \ +"AE/1 AR/1 AT/1 AU/2 "\ +"BE/1 BG/1 BN/1 "\ +"CA/2 CH/1 CN/38 CY/1 CZ/1 "\ +"DE/3 DK/1 "\ +"EE/1 ES/1 "\ +"FI/1 FR/1 "\ +"GB/1 GR/1 "\ +"HR/1 HU/1 "\ +"ID/5 IE/1 IS/1 IT/1 "\ +"JP/3 "\ +"KR/4 KW/1 "\ +"LI/1 LT/1 LU/1 LV/1 "\ +"MA/1 MT/1 MX/1 "\ +"NL/1 NO/1 "\ +"PL/1 PT/1 PY/1 "\ +"RO/1 RU/5 "\ +"SE/1 SI/1 SK/1 "\ +"TR/7 TW/2 "\ +"US/26 "\ +"XZ/11"; +#else +const char ccode_43436[] = ""; +#endif + +#ifdef CCODE_43455C0 +const char ccode_43455c0[] = \ +"AE/6 AG/2 AI/1 AL/2 AS/12 AT/4 AU/6 AW/2 AZ/2 "\ +"BA/2 BD/1 BE/4 BG/4 BH/4 BM/12 BN/4 BR/2 BS/2 BY/3 "\ +"CA/2 CH/4 CN/38 CO/17 CR/17 CY/4 CZ/4 "\ +"DE/7 DK/4 "\ +"EC/21 EE/4 EG/13 ES/4 ET/2 "\ +"FI/4 FR/5 "\ +"GB/6 GD/2 GF/2 GP/2 GR/4 GT/1 GU/30 "\ +"HK/2 HR/4 HU/4 "\ +"ID/1 IE/5 IL/14 IN/3 IS/4 IT/4 "\ +"JO/3 JP/58 "\ +"KH/2 KR/96 KW/5 KY/3 "\ +"LA/2 LB/5 LI/4 LK/1 LS/2 LT/4 LU/3 LV/4 "\ +"MA/2 MC/1 MD/2 ME/2 MK/2 MN/1 MQ/2 MR/2 MT/4 MU/2 MV/3 MW/1 MX/44 MY/3 "\ +"NI/2 NL/4 NO/4 NZ/4 "\ +"OM/4 "\ +"PA/17 PE/20 PH/5 PL/4 PR/38 PT/4 PY/2 "\ +"Q2/993 "\ +"RE/2 RO/4 RS/2 RU/13 "\ +"SE/4 SI/4 SK/4 SV/25 "\ +"TH/5 TN/1 TR/7 TT/3 TW/65 "\ +"UA/8 US/988 "\ +"VA/2 VE/3 VG/2 VN/4 "\ +"XZ/11 "\ +"YT/2 "\ +"ZA/6"; +#else +const char ccode_43455c0[] = ""; +#endif + +#ifdef CCODE_43456C5 +const char ccode_43456c5[] = \ +"AE/6 AG/2 AI/1 AL/2 AS/12 AT/4 AU/6 AW/2 AZ/2 "\ +"BA/2 BD/1 BE/4 BG/4 BH/4 BM/12 BN/4 BR/4 BS/2 BY/3 "\ +"CA/2 CH/4 CN/38 CO/17 CR/17 CY/4 CZ/4 "\ +"DE/7 DK/4 "\ +"EC/21 EE/4 EG/13 ES/4 ET/2 "\ +"FI/4 FR/5 "\ +"GB/6 GD/2 GF/2 GP/2 GR/4 GT/1 GU/30 "\ +"HK/2 HR/4 HU/4 "\ +"ID/1 IE/5 IL/14 IN/3 IS/4 IT/4 "\ +"JO/3 JP/58 "\ +"KH/2 KR/96 KW/5 KY/3 "\ +"LA/2 LB/5 LI/4 LK/1 LS/2 LT/4 LU/3 LV/4 "\ +"MA/2 MC/1 MD/2 ME/2 MK/2 MN/1 MQ/2 MR/2 MT/4 MU/2 MV/3 MW/1 MX/44 MY/3 "\ +"NI/2 NL/4 NO/4 NZ/4 "\ +"OM/4 "\ +"PA/17 PE/20 PH/5 PL/4 PR/38 PT/4 PY/2 "\ +"Q2/993 "\ +"RE/2 RO/4 RS/2 RU/13 "\ +"SE/4 SI/4 SK/4 SV/25 "\ +"TH/5 TN/1 TR/7 TT/3 TW/65 "\ +"UA/8 US/988 "\ +"VA/2 VE/3 VG/2 VN/4 "\ +"XZ/11 "\ +"YT/2 "\ +"ZA/6"; +#else +const char ccode_43456c5[] = ""; +#endif +#endif + +#ifdef CCODE_4356A2 +const char ccode_4356a2[] = \ +"AE/6 AG/2 AI/1 AL/2 AN/2 AR/21 AS/12 AT/4 AU/6 AW/2 AZ/2 "\ +"BA/2 BD/2 BE/4 BG/4 BH/4 BM/12 BN/4 BR/4 BS/2 BY/3 "\ +"CA/31 CH/4 CN/38 CO/17 CR/17 CY/4 CZ/4 "\ +"DE/7 DK/4 DZ/1 "\ +"EC/21 EE/4 ES/4 ET/2 "\ +"FI/4 FR/5 "\ +"GB/6 GD/2 GF/2 GP/2 GR/4 GT/1 GU/12 "\ +"HK/2 HR/4 HU/4 "\ +"ID/13 IE/5 IL/7 IN/28 IS/4 IT/4 "\ +"JO/3 JP/58 "\ +"KH/2 KR/57 KW/5 KY/3 "\ +"LA/2 LB/5 LI/4 LK/1 LS/2 LT/4 LU/3 LV/4 "\ +"MA/2 MC/1 MD/2 ME/2 MK/2 MN/1 MO/2 MR/2 MT/4 MQ/2 MU/2 MV/3 MW/1 MX/20 MY/16 "\ +"NI/2 NL/4 NO/4 NP/3 NZ/4 "\ +"OM/4 "\ +"PA/17 PE/20 PG/2 PH/5 PL/4 PR/20 PT/4 PY/2 "\ +"RE/2 RO/4 RS/2 RU/986 "\ +"SE/4 SG/19 SI/4 SK/4 SN/2 SV/19 "\ +"TH/9 TN/1 TR/7 TT/3 TW/1 "\ +"UA/8 UG/2 US/1 UY/1 "\ +"VA/2 VE/3 VG/2 VI/13 VN/4 "\ +"XZ/11 "\ +"YT/2 "\ +"ZM/2 "\ +"E0/32"; +#else +const char ccode_4356a2[] = ""; +#endif + +#ifdef CCODE_4359C0 +const char ccode_4359c0[] = \ +"AD/1 AE/6 AG/2 AI/1 AL/3 AS/12 AT/21 AU/6 AW/2 AZ/8 "\ +"BA/4 BD/1 BE/19 BG/18 BH/4 BM/12 BN/4 BR/2 BS/2 BY/3 "\ +"CA/2 CN/38 CO/17 CR/17 CY/18 CZ/18 "\ +"DE/30 DK/19 "\ +"E0/32 EC/21 EE/18 EG/13 ES/21 ET/2 "\ +"FI/19 FR/21 "\ +"GB/996 GD/2 GE/1 GF/2 GP/2 GR/18 GT/1 GU/30 "\ +"HK/2 HR/18 HU/18 "\ +"ID/1 IE/21 IL/276 IN/3 IS/17 IT/20 "\ +"JO/3 JP/967 "\ +"KH/2 KR/70 KW/5 KY/3 "\ +"LA/2 LB/5 LI/17 LK/1 LS/2 LT/18 LU/18 LV/18 "\ +"MA/2 MC/2 MD/3 ME/5 MK/4 MN/1 MQ/2 MR/2 MT/18 MU/2 MV/3 MW/1 MX/44 MY/3 "\ +"NI/2 NL/19 NO/18 NZ/4 "\ +"OM/4 "\ +"PA/17 PE/20 PH/5 PL/18 PR/38 PT/20 PY/2 "\ +"Q1/947 Q2/993 "\ +"RE/2 RO/18 RS/4 RU/986 "\ +"SE/19 SI/18 SK/18 SM/1 SV/25 "\ +"TH/5 TN/1 TR/18 TT/3 TW/980 "\ +"UA/16 US/988 "\ +"VA/3 VE/3 VG/2 VN/4 "\ +"XZ/11 "\ +"YT/2 "\ +"ZA/6"; +#else +const char ccode_4359c0[] = ""; +#endif + +#ifdef CCODE_4375B4 +const char ccode_4375b4[] = \ +"AE/6 AL/2 AM/1 AN/5 AR/21 AT/4 AU/6 AZ/2"\ +"BA/2 BE/4 BG/4 BH/4 BN/4 BO/5 BR/17 BY/3"\ +"CA/2 CH/4 CL/7 CN/38 CO/17 CR/17 CY/4 CZ/4"\ +"DE/7 DK/4 DZ/2 EC/18 EE/4 EG/13 ES/4"\ +"FI/4 FR/5"\ +"GB/6 GR/4"\ +"HK/999 HN/8 HR/4 HU/4"\ +"ID/5 IE/5 IL/7 IN/3 IS/4 IT/4"\ +"JO/3 JP/72"\ +"KE/1 KR/96 KW/5 KZ/5"\ +"LA/2 LB/5 LI/4 LK/2 LT/4 LU/4 LV/4"\ +"MA/7 MC/1 ME/2 MK/2 MO/4 MT/4 MX/20 MY/19"\ +"NL/4 NO/4 NZ/4"\ +"OM/4"\ +"PA/17 PE/20 PH/5 PK/2 PL/4 PR/20 PT/4"\ +"RO/4 RU/62"\ +"SA/5 SE/4 SG/12 SI/4 SK/4 SV/17"\ +"TH/5 TN/1 TR/7 TT/3 TW/65"\ +"UA/16 US/140 UY/10"\ +"VE/3 VN/4"\ +"ZA/19"; +#else +const char ccode_4375b4[] = ""; +#endif + +#ifdef CCODE_4358U +const char ccode_4358u[] = \ +"BE/4 BR/4 "\ +"CA/2 CH/4 CN/38 CY/4 "\ +"DE/7 DK/4 "\ +"ES/4 "\ +"FI/4 FR/5 "\ +"GB/6 GR/4 "\ +"HK/2 HU/4 "\ +"IE/5 IL/7 IS/4 IT/4 "\ +"JP/72 "\ +"KE/0 KR/4 "\ +"MY/3 "\ +"NL/4 "\ +"PT/4 "\ +"SA/5 SE/4 SG/0 SZ/0 "\ +"TH/5 TR/7 TW/230 "\ +"US/0 "\ +"VN/4"; +#else +const char ccode_4358u[] = ""; +#endif + +typedef struct ccode_list_map_t { + uint chip; + uint chiprev; + const char *ccode_list; + const char *ccode_ww; +} ccode_list_map_t; + +extern const char ccode_43438[]; +extern const char ccode_43455c0[]; +extern const char ccode_43456c5[]; +extern const char ccode_4356a2[]; +extern const char ccode_4359c0[]; +extern const char ccode_4358u[]; + +const ccode_list_map_t ccode_list_map[] = { + /* ChipID Chiprev ccode */ +#ifdef BCMSDIO + {BCM43430_CHIP_ID, 0, ccode_43438, ""}, + {BCM43430_CHIP_ID, 1, ccode_43438, ""}, + {BCM43430_CHIP_ID, 2, ccode_43436, ""}, + {BCM4345_CHIP_ID, 6, ccode_43455c0, "XZ/11"}, + {BCM43454_CHIP_ID, 6, ccode_43455c0, "XZ/11"}, + {BCM4345_CHIP_ID, 9, ccode_43456c5, "XZ/11"}, + {BCM43454_CHIP_ID, 9, ccode_43456c5, "XZ/11"}, + {BCM4354_CHIP_ID, 2, ccode_4356a2, "XZ/11"}, + {BCM4356_CHIP_ID, 2, ccode_4356a2, "XZ/11"}, + {BCM4371_CHIP_ID, 2, ccode_4356a2, "XZ/11"}, + {BCM4359_CHIP_ID, 9, ccode_4359c0, "XZ/11"}, +#endif +#ifdef BCMPCIE + {BCM4354_CHIP_ID, 2, ccode_4356a2, "XZ/11"}, + {BCM4356_CHIP_ID, 2, ccode_4356a2, "XZ/11"}, + {BCM4359_CHIP_ID, 9, ccode_4359c0, "XZ/11"}, + {BCM4375_CHIP_ID, 5, ccode_4375b4, "XZ/11"}, +#endif +#ifdef BCMDBUS + {BCM43569_CHIP_ID, 2, ccode_4358u, "XW/0"}, +#endif +}; + +int +dhd_ccode_map_country_list(dhd_pub_t *dhd, wl_country_t *cspec) +{ + int bcmerror = -1, i; + uint chip = dhd->conf->chip, chiprev = dhd->conf->chiprev; + const char *ccode_list = NULL, *ccode_ww = NULL; + char *pch; + + for (i=0; ichip == chip && row->chiprev == chiprev) { + ccode_list = row->ccode_list; + ccode_ww = row->ccode_ww; + break; + } + } + + if (ccode_list) { + pch = strstr(ccode_list, cspec->ccode); + if (pch) { + cspec->rev = (int)simple_strtol(pch+strlen(cspec->ccode)+1, NULL, 0); + bcmerror = 0; + } + } + + if (bcmerror && ccode_ww && strlen(ccode_ww)>=4) { + memcpy(cspec->ccode, ccode_ww, 2); + cspec->rev = (int)simple_strtol(ccode_ww+3, NULL, 0); + } + + return bcmerror; +} +#endif 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 dc80027e906d..908ac1a6abef 100644 --- a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.c +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.c @@ -862,6 +862,10 @@ dhd_conf_map_country_list(dhd_pub_t *dhd, wl_country_t *cspec) struct dhd_conf *conf = dhd->conf; country_list_t *country = conf->country_head; +#ifdef CCODE_LIST + bcmerror = dhd_ccode_map_country_list(dhd, cspec); +#endif + while (country != NULL) { if (!strncmp("**", country->cspec.country_abbrev, 2)) { memcpy(cspec->ccode, country->cspec.ccode, WLC_CNTRY_BUF_SZ); 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 414f8f1b00f6..a32ba1e8f291 100644 --- a/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.h +++ b/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.h @@ -284,6 +284,9 @@ int dhd_conf_get_band(dhd_pub_t *dhd); int dhd_conf_set_country(dhd_pub_t *dhd, wl_country_t *cspec); int dhd_conf_get_country(dhd_pub_t *dhd, wl_country_t *cspec); int dhd_conf_map_country_list(dhd_pub_t *dhd, wl_country_t *cspec); +#ifdef CCODE_LIST +int dhd_ccode_map_country_list(dhd_pub_t *dhd, wl_country_t *cspec); +#endif int dhd_conf_fix_country(dhd_pub_t *dhd); bool dhd_conf_match_channel(dhd_pub_t *dhd, uint32 channel); void dhd_conf_set_wme(dhd_pub_t *dhd, int ifidx, int mode);