forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-13 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e
kernel/drivers/net/wireless/marvell/mwifiex/main.c
....@@ -1,10 +1,10 @@
11 /*
2
- * Marvell Wireless LAN device driver: major functions
2
+ * NXP Wireless LAN device driver: major functions
33 *
4
- * Copyright (C) 2011-2014, Marvell International Ltd.
4
+ * Copyright 2011-2020 NXP
55 *
6
- * This software file (the "File") is distributed by Marvell International
7
- * Ltd. under the terms of the GNU General Public License Version 2, June 1991
6
+ * This software file (the "File") is distributed by NXP
7
+ * under the terms of the GNU General Public License Version 2, June 1991
88 * (the "License"). You may use, redistribute and/or modify this File in
99 * accordance with the terms and conditions of the License, a copy of which
1010 * is available by writing to the Free Software Foundation, Inc.,
....@@ -47,6 +47,8 @@
4747 bool aggr_ctrl;
4848 module_param(aggr_ctrl, bool, 0000);
4949 MODULE_PARM_DESC(aggr_ctrl, "usb tx aggregation enable:1, disable:0");
50
+
51
+const u16 mwifiex_1d_to_wmm_queue[8] = { 1, 0, 0, 1, 2, 2, 3, 3 };
5052
5153 /*
5254 * This function registers the device and performs all the necessary
....@@ -173,30 +175,27 @@
173175
174176 static void mwifiex_queue_rx_work(struct mwifiex_adapter *adapter)
175177 {
176
- unsigned long flags;
177
-
178
- spin_lock_irqsave(&adapter->rx_proc_lock, flags);
178
+ spin_lock_bh(&adapter->rx_proc_lock);
179179 if (adapter->rx_processing) {
180
- spin_unlock_irqrestore(&adapter->rx_proc_lock, flags);
180
+ spin_unlock_bh(&adapter->rx_proc_lock);
181181 } else {
182
- spin_unlock_irqrestore(&adapter->rx_proc_lock, flags);
182
+ spin_unlock_bh(&adapter->rx_proc_lock);
183183 queue_work(adapter->rx_workqueue, &adapter->rx_work);
184184 }
185185 }
186186
187187 static int mwifiex_process_rx(struct mwifiex_adapter *adapter)
188188 {
189
- unsigned long flags;
190189 struct sk_buff *skb;
191190 struct mwifiex_rxinfo *rx_info;
192191
193
- spin_lock_irqsave(&adapter->rx_proc_lock, flags);
192
+ spin_lock_bh(&adapter->rx_proc_lock);
194193 if (adapter->rx_processing || adapter->rx_locked) {
195
- spin_unlock_irqrestore(&adapter->rx_proc_lock, flags);
194
+ spin_unlock_bh(&adapter->rx_proc_lock);
196195 goto exit_rx_proc;
197196 } else {
198197 adapter->rx_processing = true;
199
- spin_unlock_irqrestore(&adapter->rx_proc_lock, flags);
198
+ spin_unlock_bh(&adapter->rx_proc_lock);
200199 }
201200
202201 /* Check for Rx data */
....@@ -219,9 +218,9 @@
219218 mwifiex_handle_rx_packet(adapter, skb);
220219 }
221220 }
222
- spin_lock_irqsave(&adapter->rx_proc_lock, flags);
221
+ spin_lock_bh(&adapter->rx_proc_lock);
223222 adapter->rx_processing = false;
224
- spin_unlock_irqrestore(&adapter->rx_proc_lock, flags);
223
+ spin_unlock_bh(&adapter->rx_proc_lock);
225224
226225 exit_rx_proc:
227226 return 0;
....@@ -634,6 +633,7 @@
634633
635634 mwifiex_drv_get_driver_version(adapter, fmt, sizeof(fmt) - 1);
636635 mwifiex_dbg(adapter, MSG, "driver_version = %s\n", fmt);
636
+ adapter->is_up = true;
637637 goto done;
638638
639639 err_add_intf:
....@@ -825,13 +825,12 @@
825825
826826 skb = skb_clone(skb, GFP_ATOMIC);
827827 if (skb) {
828
- unsigned long flags;
829828 int id;
830829
831
- spin_lock_irqsave(&priv->ack_status_lock, flags);
830
+ spin_lock_bh(&priv->ack_status_lock);
832831 id = idr_alloc(&priv->ack_status_frames, orig_skb,
833832 1, 0x10, GFP_ATOMIC);
834
- spin_unlock_irqrestore(&priv->ack_status_lock, flags);
833
+ spin_unlock_bh(&priv->ack_status_lock);
835834
836835 if (id >= 0) {
837836 tx_info = MWIFIEX_SKB_TXCB(skb);
....@@ -956,7 +955,7 @@
956955 } else {
957956 /* Internal mac address change */
958957 if (priv->bss_type == MWIFIEX_BSS_TYPE_ANY)
959
- return -ENOTSUPP;
958
+ return -EOPNOTSUPP;
960959
961960 mac_addr = old_mac_addr;
962961
....@@ -1023,7 +1022,7 @@
10231022 * CFG802.11 network device handler for transmission timeout.
10241023 */
10251024 static void
1026
-mwifiex_tx_timeout(struct net_device *dev)
1025
+mwifiex_tx_timeout(struct net_device *dev, unsigned int txqueue)
10271026 {
10281027 struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
10291028
....@@ -1282,8 +1281,7 @@
12821281
12831282 static u16
12841283 mwifiex_netdev_select_wmm_queue(struct net_device *dev, struct sk_buff *skb,
1285
- struct net_device *sb_dev,
1286
- select_queue_fallback_t fallback)
1284
+ struct net_device *sb_dev)
12871285 {
12881286 skb->priority = cfg80211_classify8021d(skb, NULL);
12891287 return mwifiex_1d_to_wmm_queue[skb->priority];
....@@ -1355,12 +1353,11 @@
13551353 */
13561354 int is_command_pending(struct mwifiex_adapter *adapter)
13571355 {
1358
- unsigned long flags;
13591356 int is_cmd_pend_q_empty;
13601357
1361
- spin_lock_irqsave(&adapter->cmd_pending_q_lock, flags);
1358
+ spin_lock_bh(&adapter->cmd_pending_q_lock);
13621359 is_cmd_pend_q_empty = list_empty(&adapter->cmd_pending_q);
1363
- spin_unlock_irqrestore(&adapter->cmd_pending_q_lock, flags);
1360
+ spin_unlock_bh(&adapter->cmd_pending_q_lock);
13641361
13651362 return !is_cmd_pend_q_empty;
13661363 }
....@@ -1477,6 +1474,7 @@
14771474 mwifiex_init_shutdown_fw(priv, MWIFIEX_FUNC_SHUTDOWN);
14781475
14791476 mwifiex_uninit_sw(adapter);
1477
+ adapter->is_up = false;
14801478
14811479 if (adapter->if_ops.down_dev)
14821480 adapter->if_ops.down_dev(adapter);
....@@ -1738,7 +1736,8 @@
17381736 if (!adapter)
17391737 return 0;
17401738
1741
- mwifiex_uninit_sw(adapter);
1739
+ if (adapter->is_up)
1740
+ mwifiex_uninit_sw(adapter);
17421741
17431742 if (adapter->irq_wakeup >= 0)
17441743 device_init_wakeup(adapter->dev, false);