aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorLarry Finger <Larry.Finger@lwfinger.net>2016-10-12 14:54:04 -0400
committerKalle Valo <kvalo@codeaurora.org>2016-10-13 06:22:13 -0400
commitcf4747d7535a936105f0abe8d8109d3fe339162b (patch)
treed917050c5469791075420082a2cdb88cd95eda3a /drivers/net/wireless
parent29d5e6fbd65be89dcd32f070fc45ee0e3b2f82b6 (diff)
rtlwifi: Fix regression caused by commit d86e64768859
In commit d86e64768859 ("rtlwifi: rtl818x: constify local structures"), the configuration struct for most of the drivers was changed to be constant. The problem is that five of the modified drivers need to be able to update the firmware name based on the exact model of the card. As the file names were stored in one of the members of that struct, these drivers would fail with a kernel BUG splat when they tried to update the firmware name. Rather than reverting the previous commit, I used a suggestion by Johannes Berg and made the firmware file name pointers be local to the routines that update the software variables. The configuration struct of rtl8192cu, which was not touched in the previous patch, is now constantfied. Fixes: d86e64768859 ("rtlwifi: rtl818x: constify local structures") Suggested-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Cc: Stable <stable@vger.kernel.org> # 4.8 Cc: Julia Lawall <Julia.Lawall@lip6.fr> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/core.c2
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c8
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c13
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c12
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c6
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c8
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c9
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c12
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c6
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c18
-rw-r--r--drivers/net/wireless/realtek/rtlwifi/wifi.h2
11 files changed, 45 insertions, 51 deletions
diff --git a/drivers/net/wireless/realtek/rtlwifi/core.c b/drivers/net/wireless/realtek/rtlwifi/core.c
index f95760c13c56..8e7f23c11680 100644
--- a/drivers/net/wireless/realtek/rtlwifi/core.c
+++ b/drivers/net/wireless/realtek/rtlwifi/core.c
@@ -111,7 +111,7 @@ static void rtl_fw_do_work(const struct firmware *firmware, void *context,
111 if (!err) 111 if (!err)
112 goto found_alt; 112 goto found_alt;
113 } 113 }
114 pr_err("Firmware %s not available\n", rtlpriv->cfg->fw_name); 114 pr_err("Selected firmware is not available\n");
115 rtlpriv->max_fw_size = 0; 115 rtlpriv->max_fw_size = 0;
116 return; 116 return;
117 } 117 }
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
index e7b11b40e68d..f361808def47 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
@@ -86,6 +86,7 @@ int rtl88e_init_sw_vars(struct ieee80211_hw *hw)
86 struct rtl_priv *rtlpriv = rtl_priv(hw); 86 struct rtl_priv *rtlpriv = rtl_priv(hw);
87 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); 87 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
88 u8 tid; 88 u8 tid;
89 char *fw_name;
89 90
90 rtl8188ee_bt_reg_init(hw); 91 rtl8188ee_bt_reg_init(hw);
91 rtlpriv->dm.dm_initialgain_enable = 1; 92 rtlpriv->dm.dm_initialgain_enable = 1;
@@ -169,10 +170,10 @@ int rtl88e_init_sw_vars(struct ieee80211_hw *hw)
169 return 1; 170 return 1;
170 } 171 }
171 172
172 rtlpriv->cfg->fw_name = "rtlwifi/rtl8188efw.bin"; 173 fw_name = "rtlwifi/rtl8188efw.bin";
173 rtlpriv->max_fw_size = 0x8000; 174 rtlpriv->max_fw_size = 0x8000;
174 pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name); 175 pr_info("Using firmware %s\n", fw_name);
175 err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, 176 err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
176 rtlpriv->io.dev, GFP_KERNEL, hw, 177 rtlpriv->io.dev, GFP_KERNEL, hw,
177 rtl_fw_cb); 178 rtl_fw_cb);
178 if (err) { 179 if (err) {
@@ -284,7 +285,6 @@ static const struct rtl_hal_cfg rtl88ee_hal_cfg = {
284 .bar_id = 2, 285 .bar_id = 2,
285 .write_readback = true, 286 .write_readback = true,
286 .name = "rtl88e_pci", 287 .name = "rtl88e_pci",
287 .fw_name = "rtlwifi/rtl8188efw.bin",
288 .ops = &rtl8188ee_hal_ops, 288 .ops = &rtl8188ee_hal_ops,
289 .mod_params = &rtl88ee_mod_params, 289 .mod_params = &rtl88ee_mod_params,
290 290
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c
index 87aa209ae325..8b6e37ce3f66 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c
@@ -96,6 +96,7 @@ int rtl92c_init_sw_vars(struct ieee80211_hw *hw)
96 struct rtl_priv *rtlpriv = rtl_priv(hw); 96 struct rtl_priv *rtlpriv = rtl_priv(hw);
97 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); 97 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
98 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 98 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
99 char *fw_name = "rtlwifi/rtl8192cfwU.bin";
99 100
100 rtl8192ce_bt_reg_init(hw); 101 rtl8192ce_bt_reg_init(hw);
101 102
@@ -167,15 +168,12 @@ int rtl92c_init_sw_vars(struct ieee80211_hw *hw)
167 } 168 }
168 169
169 /* request fw */ 170 /* request fw */
170 if (IS_VENDOR_UMC_A_CUT(rtlhal->version) && 171 if (IS_81XXC_VENDOR_UMC_B_CUT(rtlhal->version))
171 !IS_92C_SERIAL(rtlhal->version)) 172 fw_name = "rtlwifi/rtl8192cfwU_B.bin";
172 rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cfwU.bin";
173 else if (IS_81XXC_VENDOR_UMC_B_CUT(rtlhal->version))
174 rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cfwU_B.bin";
175 173
176 rtlpriv->max_fw_size = 0x4000; 174 rtlpriv->max_fw_size = 0x4000;
177 pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name); 175 pr_info("Using firmware %s\n", fw_name);
178 err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, 176 err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
179 rtlpriv->io.dev, GFP_KERNEL, hw, 177 rtlpriv->io.dev, GFP_KERNEL, hw,
180 rtl_fw_cb); 178 rtl_fw_cb);
181 if (err) { 179 if (err) {
@@ -262,7 +260,6 @@ static const struct rtl_hal_cfg rtl92ce_hal_cfg = {
262 .bar_id = 2, 260 .bar_id = 2,
263 .write_readback = true, 261 .write_readback = true,
264 .name = "rtl92c_pci", 262 .name = "rtl92c_pci",
265 .fw_name = "rtlwifi/rtl8192cfw.bin",
266 .ops = &rtl8192ce_hal_ops, 263 .ops = &rtl8192ce_hal_ops,
267 .mod_params = &rtl92ce_mod_params, 264 .mod_params = &rtl92ce_mod_params,
268 265
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
index 7c6f7f0d18c6..f953320f0e23 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
@@ -59,6 +59,7 @@ static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw)
59{ 59{
60 struct rtl_priv *rtlpriv = rtl_priv(hw); 60 struct rtl_priv *rtlpriv = rtl_priv(hw);
61 int err; 61 int err;
62 char *fw_name;
62 63
63 rtlpriv->dm.dm_initialgain_enable = true; 64 rtlpriv->dm.dm_initialgain_enable = true;
64 rtlpriv->dm.dm_flag = 0; 65 rtlpriv->dm.dm_flag = 0;
@@ -77,18 +78,18 @@ static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw)
77 } 78 }
78 if (IS_VENDOR_UMC_A_CUT(rtlpriv->rtlhal.version) && 79 if (IS_VENDOR_UMC_A_CUT(rtlpriv->rtlhal.version) &&
79 !IS_92C_SERIAL(rtlpriv->rtlhal.version)) { 80 !IS_92C_SERIAL(rtlpriv->rtlhal.version)) {
80 rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cufw_A.bin"; 81 fw_name = "rtlwifi/rtl8192cufw_A.bin";
81 } else if (IS_81XXC_VENDOR_UMC_B_CUT(rtlpriv->rtlhal.version)) { 82 } else if (IS_81XXC_VENDOR_UMC_B_CUT(rtlpriv->rtlhal.version)) {
82 rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cufw_B.bin"; 83 fw_name = "rtlwifi/rtl8192cufw_B.bin";
83 } else { 84 } else {
84 rtlpriv->cfg->fw_name = "rtlwifi/rtl8192cufw_TMSC.bin"; 85 fw_name = "rtlwifi/rtl8192cufw_TMSC.bin";
85 } 86 }
86 /* provide name of alternative file */ 87 /* provide name of alternative file */
87 rtlpriv->cfg->alt_fw_name = "rtlwifi/rtl8192cufw.bin"; 88 rtlpriv->cfg->alt_fw_name = "rtlwifi/rtl8192cufw.bin";
88 pr_info("Loading firmware %s\n", rtlpriv->cfg->fw_name); 89 pr_info("Loading firmware %s\n", fw_name);
89 rtlpriv->max_fw_size = 0x4000; 90 rtlpriv->max_fw_size = 0x4000;
90 err = request_firmware_nowait(THIS_MODULE, 1, 91 err = request_firmware_nowait(THIS_MODULE, 1,
91 rtlpriv->cfg->fw_name, rtlpriv->io.dev, 92 fw_name, rtlpriv->io.dev,
92 GFP_KERNEL, hw, rtl_fw_cb); 93 GFP_KERNEL, hw, rtl_fw_cb);
93 return err; 94 return err;
94} 95}
@@ -187,7 +188,6 @@ static struct rtl_hal_usbint_cfg rtl92cu_interface_cfg = {
187 188
188static struct rtl_hal_cfg rtl92cu_hal_cfg = { 189static struct rtl_hal_cfg rtl92cu_hal_cfg = {
189 .name = "rtl92c_usb", 190 .name = "rtl92c_usb",
190 .fw_name = "rtlwifi/rtl8192cufw.bin",
191 .ops = &rtl8192cu_hal_ops, 191 .ops = &rtl8192cu_hal_ops,
192 .mod_params = &rtl92cu_mod_params, 192 .mod_params = &rtl92cu_mod_params,
193 .usb_interface_cfg = &rtl92cu_interface_cfg, 193 .usb_interface_cfg = &rtl92cu_interface_cfg,
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
index 0538a4d09568..1ebfee18882f 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
@@ -92,6 +92,7 @@ static int rtl92d_init_sw_vars(struct ieee80211_hw *hw)
92 u8 tid; 92 u8 tid;
93 struct rtl_priv *rtlpriv = rtl_priv(hw); 93 struct rtl_priv *rtlpriv = rtl_priv(hw);
94 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); 94 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
95 char *fw_name = "rtlwifi/rtl8192defw.bin";
95 96
96 rtlpriv->dm.dm_initialgain_enable = true; 97 rtlpriv->dm.dm_initialgain_enable = true;
97 rtlpriv->dm.dm_flag = 0; 98 rtlpriv->dm.dm_flag = 0;
@@ -181,10 +182,10 @@ static int rtl92d_init_sw_vars(struct ieee80211_hw *hw)
181 182
182 rtlpriv->max_fw_size = 0x8000; 183 rtlpriv->max_fw_size = 0x8000;
183 pr_info("Driver for Realtek RTL8192DE WLAN interface\n"); 184 pr_info("Driver for Realtek RTL8192DE WLAN interface\n");
184 pr_info("Loading firmware file %s\n", rtlpriv->cfg->fw_name); 185 pr_info("Loading firmware file %s\n", fw_name);
185 186
186 /* request fw */ 187 /* request fw */
187 err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, 188 err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
188 rtlpriv->io.dev, GFP_KERNEL, hw, 189 rtlpriv->io.dev, GFP_KERNEL, hw,
189 rtl_fw_cb); 190 rtl_fw_cb);
190 if (err) { 191 if (err) {
@@ -266,7 +267,6 @@ static const struct rtl_hal_cfg rtl92de_hal_cfg = {
266 .bar_id = 2, 267 .bar_id = 2,
267 .write_readback = true, 268 .write_readback = true,
268 .name = "rtl8192de", 269 .name = "rtl8192de",
269 .fw_name = "rtlwifi/rtl8192defw.bin",
270 .ops = &rtl8192de_hal_ops, 270 .ops = &rtl8192de_hal_ops,
271 .mod_params = &rtl92de_mod_params, 271 .mod_params = &rtl92de_mod_params,
272 272
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c
index ac299cbe59b0..46b605de36e7 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c
@@ -91,6 +91,7 @@ int rtl92ee_init_sw_vars(struct ieee80211_hw *hw)
91 struct rtl_priv *rtlpriv = rtl_priv(hw); 91 struct rtl_priv *rtlpriv = rtl_priv(hw);
92 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); 92 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
93 int err = 0; 93 int err = 0;
94 char *fw_name;
94 95
95 rtl92ee_bt_reg_init(hw); 96 rtl92ee_bt_reg_init(hw);
96 rtlpci->msi_support = rtlpriv->cfg->mod_params->msi_support; 97 rtlpci->msi_support = rtlpriv->cfg->mod_params->msi_support;
@@ -170,11 +171,11 @@ int rtl92ee_init_sw_vars(struct ieee80211_hw *hw)
170 } 171 }
171 172
172 /* request fw */ 173 /* request fw */
173 rtlpriv->cfg->fw_name = "rtlwifi/rtl8192eefw.bin"; 174 fw_name = "rtlwifi/rtl8192eefw.bin";
174 175
175 rtlpriv->max_fw_size = 0x8000; 176 rtlpriv->max_fw_size = 0x8000;
176 pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name); 177 pr_info("Using firmware %s\n", fw_name);
177 err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, 178 err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
178 rtlpriv->io.dev, GFP_KERNEL, hw, 179 rtlpriv->io.dev, GFP_KERNEL, hw,
179 rtl_fw_cb); 180 rtl_fw_cb);
180 if (err) { 181 if (err) {
@@ -266,7 +267,6 @@ static const struct rtl_hal_cfg rtl92ee_hal_cfg = {
266 .bar_id = 2, 267 .bar_id = 2,
267 .write_readback = true, 268 .write_readback = true,
268 .name = "rtl92ee_pci", 269 .name = "rtl92ee_pci",
269 .fw_name = "rtlwifi/rtl8192eefw.bin",
270 .ops = &rtl8192ee_hal_ops, 270 .ops = &rtl8192ee_hal_ops,
271 .mod_params = &rtl92ee_mod_params, 271 .mod_params = &rtl92ee_mod_params,
272 272
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
index 5e8e02d5de8a..3e1eaeac4fdc 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
@@ -89,12 +89,13 @@ static void rtl92se_fw_cb(const struct firmware *firmware, void *context)
89 struct ieee80211_hw *hw = context; 89 struct ieee80211_hw *hw = context;
90 struct rtl_priv *rtlpriv = rtl_priv(hw); 90 struct rtl_priv *rtlpriv = rtl_priv(hw);
91 struct rt_firmware *pfirmware = NULL; 91 struct rt_firmware *pfirmware = NULL;
92 char *fw_name = "rtlwifi/rtl8192sefw.bin";
92 93
93 RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD, 94 RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
94 "Firmware callback routine entered!\n"); 95 "Firmware callback routine entered!\n");
95 complete(&rtlpriv->firmware_loading_complete); 96 complete(&rtlpriv->firmware_loading_complete);
96 if (!firmware) { 97 if (!firmware) {
97 pr_err("Firmware %s not available\n", rtlpriv->cfg->fw_name); 98 pr_err("Firmware %s not available\n", fw_name);
98 rtlpriv->max_fw_size = 0; 99 rtlpriv->max_fw_size = 0;
99 return; 100 return;
100 } 101 }
@@ -117,6 +118,7 @@ static int rtl92s_init_sw_vars(struct ieee80211_hw *hw)
117 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); 118 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
118 int err = 0; 119 int err = 0;
119 u16 earlyrxthreshold = 7; 120 u16 earlyrxthreshold = 7;
121 char *fw_name = "rtlwifi/rtl8192sefw.bin";
120 122
121 rtlpriv->dm.dm_initialgain_enable = true; 123 rtlpriv->dm.dm_initialgain_enable = true;
122 rtlpriv->dm.dm_flag = 0; 124 rtlpriv->dm.dm_flag = 0;
@@ -214,9 +216,9 @@ static int rtl92s_init_sw_vars(struct ieee80211_hw *hw)
214 rtlpriv->max_fw_size = RTL8190_MAX_FIRMWARE_CODE_SIZE*2 + 216 rtlpriv->max_fw_size = RTL8190_MAX_FIRMWARE_CODE_SIZE*2 +
215 sizeof(struct fw_hdr); 217 sizeof(struct fw_hdr);
216 pr_info("Driver for Realtek RTL8192SE/RTL8191SE\n" 218 pr_info("Driver for Realtek RTL8192SE/RTL8191SE\n"
217 "Loading firmware %s\n", rtlpriv->cfg->fw_name); 219 "Loading firmware %s\n", fw_name);
218 /* request fw */ 220 /* request fw */
219 err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, 221 err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
220 rtlpriv->io.dev, GFP_KERNEL, hw, 222 rtlpriv->io.dev, GFP_KERNEL, hw,
221 rtl92se_fw_cb); 223 rtl92se_fw_cb);
222 if (err) { 224 if (err) {
@@ -310,7 +312,6 @@ static const struct rtl_hal_cfg rtl92se_hal_cfg = {
310 .bar_id = 1, 312 .bar_id = 1,
311 .write_readback = false, 313 .write_readback = false,
312 .name = "rtl92s_pci", 314 .name = "rtl92s_pci",
313 .fw_name = "rtlwifi/rtl8192sefw.bin",
314 .ops = &rtl8192se_hal_ops, 315 .ops = &rtl8192se_hal_ops,
315 .mod_params = &rtl92se_mod_params, 316 .mod_params = &rtl92se_mod_params,
316 317
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c
index 89c828ad89f4..c51a9e8234e9 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c
@@ -94,6 +94,7 @@ int rtl8723e_init_sw_vars(struct ieee80211_hw *hw)
94 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); 94 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
95 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 95 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
96 int err = 0; 96 int err = 0;
97 char *fw_name = "rtlwifi/rtl8723fw.bin";
97 98
98 rtl8723e_bt_reg_init(hw); 99 rtl8723e_bt_reg_init(hw);
99 100
@@ -176,14 +177,12 @@ int rtl8723e_init_sw_vars(struct ieee80211_hw *hw)
176 return 1; 177 return 1;
177 } 178 }
178 179
179 if (IS_VENDOR_8723_A_CUT(rtlhal->version)) 180 if (IS_81xxC_VENDOR_UMC_B_CUT(rtlhal->version))
180 rtlpriv->cfg->fw_name = "rtlwifi/rtl8723fw.bin"; 181 fw_name = "rtlwifi/rtl8723fw_B.bin";
181 else if (IS_81xxC_VENDOR_UMC_B_CUT(rtlhal->version))
182 rtlpriv->cfg->fw_name = "rtlwifi/rtl8723fw_B.bin";
183 182
184 rtlpriv->max_fw_size = 0x6000; 183 rtlpriv->max_fw_size = 0x6000;
185 pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name); 184 pr_info("Using firmware %s\n", fw_name);
186 err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, 185 err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
187 rtlpriv->io.dev, GFP_KERNEL, hw, 186 rtlpriv->io.dev, GFP_KERNEL, hw,
188 rtl_fw_cb); 187 rtl_fw_cb);
189 if (err) { 188 if (err) {
@@ -280,7 +279,6 @@ static const struct rtl_hal_cfg rtl8723e_hal_cfg = {
280 .bar_id = 2, 279 .bar_id = 2,
281 .write_readback = true, 280 .write_readback = true,
282 .name = "rtl8723e_pci", 281 .name = "rtl8723e_pci",
283 .fw_name = "rtlwifi/rtl8723efw.bin",
284 .ops = &rtl8723e_hal_ops, 282 .ops = &rtl8723e_hal_ops,
285 .mod_params = &rtl8723e_mod_params, 283 .mod_params = &rtl8723e_mod_params,
286 .maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL, 284 .maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL,
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
index 20b53f035483..847644d1f5f5 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
@@ -91,6 +91,7 @@ int rtl8723be_init_sw_vars(struct ieee80211_hw *hw)
91 struct rtl_priv *rtlpriv = rtl_priv(hw); 91 struct rtl_priv *rtlpriv = rtl_priv(hw);
92 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); 92 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
93 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 93 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
94 char *fw_name = "rtlwifi/rtl8723befw.bin";
94 95
95 rtl8723be_bt_reg_init(hw); 96 rtl8723be_bt_reg_init(hw);
96 rtlpriv->btcoexist.btc_ops = rtl_btc_get_ops_pointer(); 97 rtlpriv->btcoexist.btc_ops = rtl_btc_get_ops_pointer();
@@ -184,8 +185,8 @@ int rtl8723be_init_sw_vars(struct ieee80211_hw *hw)
184 } 185 }
185 186
186 rtlpriv->max_fw_size = 0x8000; 187 rtlpriv->max_fw_size = 0x8000;
187 pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name); 188 pr_info("Using firmware %s\n", fw_name);
188 err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, 189 err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
189 rtlpriv->io.dev, GFP_KERNEL, hw, 190 rtlpriv->io.dev, GFP_KERNEL, hw,
190 rtl_fw_cb); 191 rtl_fw_cb);
191 if (err) { 192 if (err) {
@@ -280,7 +281,6 @@ static const struct rtl_hal_cfg rtl8723be_hal_cfg = {
280 .bar_id = 2, 281 .bar_id = 2,
281 .write_readback = true, 282 .write_readback = true,
282 .name = "rtl8723be_pci", 283 .name = "rtl8723be_pci",
283 .fw_name = "rtlwifi/rtl8723befw.bin",
284 .ops = &rtl8723be_hal_ops, 284 .ops = &rtl8723be_hal_ops,
285 .mod_params = &rtl8723be_mod_params, 285 .mod_params = &rtl8723be_mod_params,
286 .maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL, 286 .maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL,
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c
index 22f687b1f133..297938e0effd 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c
@@ -93,6 +93,7 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw)
93 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); 93 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
94 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 94 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
95 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); 95 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
96 char *fw_name, *wowlan_fw_name;
96 97
97 rtl8821ae_bt_reg_init(hw); 98 rtl8821ae_bt_reg_init(hw);
98 rtlpriv->btcoexist.btc_ops = rtl_btc_get_ops_pointer(); 99 rtlpriv->btcoexist.btc_ops = rtl_btc_get_ops_pointer();
@@ -203,17 +204,17 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw)
203 } 204 }
204 205
205 if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE) { 206 if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE) {
206 rtlpriv->cfg->fw_name = "rtlwifi/rtl8812aefw.bin"; 207 fw_name = "rtlwifi/rtl8812aefw.bin";
207 rtlpriv->cfg->wowlan_fw_name = "rtlwifi/rtl8812aefw_wowlan.bin"; 208 wowlan_fw_name = "rtlwifi/rtl8812aefw_wowlan.bin";
208 } else { 209 } else {
209 rtlpriv->cfg->fw_name = "rtlwifi/rtl8821aefw.bin"; 210 fw_name = "rtlwifi/rtl8821aefw.bin";
210 rtlpriv->cfg->wowlan_fw_name = "rtlwifi/rtl8821aefw_wowlan.bin"; 211 wowlan_fw_name = "rtlwifi/rtl8821aefw_wowlan.bin";
211 } 212 }
212 213
213 rtlpriv->max_fw_size = 0x8000; 214 rtlpriv->max_fw_size = 0x8000;
214 /*load normal firmware*/ 215 /*load normal firmware*/
215 pr_info("Using firmware %s\n", rtlpriv->cfg->fw_name); 216 pr_info("Using firmware %s\n", fw_name);
216 err = request_firmware_nowait(THIS_MODULE, 1, rtlpriv->cfg->fw_name, 217 err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
217 rtlpriv->io.dev, GFP_KERNEL, hw, 218 rtlpriv->io.dev, GFP_KERNEL, hw,
218 rtl_fw_cb); 219 rtl_fw_cb);
219 if (err) { 220 if (err) {
@@ -222,9 +223,9 @@ int rtl8821ae_init_sw_vars(struct ieee80211_hw *hw)
222 return 1; 223 return 1;
223 } 224 }
224 /*load wowlan firmware*/ 225 /*load wowlan firmware*/
225 pr_info("Using firmware %s\n", rtlpriv->cfg->wowlan_fw_name); 226 pr_info("Using firmware %s\n", wowlan_fw_name);
226 err = request_firmware_nowait(THIS_MODULE, 1, 227 err = request_firmware_nowait(THIS_MODULE, 1,
227 rtlpriv->cfg->wowlan_fw_name, 228 wowlan_fw_name,
228 rtlpriv->io.dev, GFP_KERNEL, hw, 229 rtlpriv->io.dev, GFP_KERNEL, hw,
229 rtl_wowlan_fw_cb); 230 rtl_wowlan_fw_cb);
230 if (err) { 231 if (err) {
@@ -320,7 +321,6 @@ static const struct rtl_hal_cfg rtl8821ae_hal_cfg = {
320 .bar_id = 2, 321 .bar_id = 2,
321 .write_readback = true, 322 .write_readback = true,
322 .name = "rtl8821ae_pci", 323 .name = "rtl8821ae_pci",
323 .fw_name = "rtlwifi/rtl8821aefw.bin",
324 .ops = &rtl8821ae_hal_ops, 324 .ops = &rtl8821ae_hal_ops,
325 .mod_params = &rtl8821ae_mod_params, 325 .mod_params = &rtl8821ae_mod_params,
326 .maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL, 326 .maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL,
diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h
index 595f7d5d091a..dafe486f8448 100644
--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h
+++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h
@@ -2278,9 +2278,7 @@ struct rtl_hal_cfg {
2278 u8 bar_id; 2278 u8 bar_id;
2279 bool write_readback; 2279 bool write_readback;
2280 char *name; 2280 char *name;
2281 char *fw_name;
2282 char *alt_fw_name; 2281 char *alt_fw_name;
2283 char *wowlan_fw_name;
2284 struct rtl_hal_ops *ops; 2282 struct rtl_hal_ops *ops;
2285 struct rtl_mod_params *mod_params; 2283 struct rtl_mod_params *mod_params;
2286 struct rtl_hal_usbint_cfg *usb_interface_cfg; 2284 struct rtl_hal_usbint_cfg *usb_interface_cfg;