forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/net/wireless/marvell/mwifiex/tdls.c
....@@ -1,9 +1,10 @@
1
-/* Marvell Wireless LAN device driver: TDLS handling
1
+/*
2
+ * NXP Wireless LAN device driver: TDLS handling
23 *
3
- * Copyright (C) 2014, Marvell International Ltd.
4
+ * Copyright 2011-2020 NXP
45 *
5
- * This software file (the "File") is distributed by Marvell International
6
- * 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
78 * (the "License"). You may use, redistribute and/or modify this File in
89 * accordance with the terms and conditions of the License, a copy of which
910 * is available on the worldwide web at
....@@ -33,12 +34,11 @@
3334 struct list_head *tid_list;
3435 struct sk_buff *skb, *tmp;
3536 struct mwifiex_txinfo *tx_info;
36
- unsigned long flags;
3737 u32 tid;
3838 u8 tid_down;
3939
4040 mwifiex_dbg(priv->adapter, DATA, "%s: %pM\n", __func__, mac);
41
- spin_lock_irqsave(&priv->wmm.ra_list_spinlock, flags);
41
+ spin_lock_bh(&priv->wmm.ra_list_spinlock);
4242
4343 skb_queue_walk_safe(&priv->tdls_txq, skb, tmp) {
4444 if (!ether_addr_equal(mac, skb->data))
....@@ -78,7 +78,7 @@
7878 atomic_inc(&priv->wmm.tx_pkts_queued);
7979 }
8080
81
- spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, flags);
81
+ spin_unlock_bh(&priv->wmm.ra_list_spinlock);
8282 return;
8383 }
8484
....@@ -88,11 +88,10 @@
8888 struct mwifiex_ra_list_tbl *ra_list;
8989 struct list_head *ra_list_head;
9090 struct sk_buff *skb, *tmp;
91
- unsigned long flags;
9291 int i;
9392
9493 mwifiex_dbg(priv->adapter, DATA, "%s: %pM\n", __func__, mac);
95
- spin_lock_irqsave(&priv->wmm.ra_list_spinlock, flags);
94
+ spin_lock_bh(&priv->wmm.ra_list_spinlock);
9695
9796 for (i = 0; i < MAX_NUM_TID; i++) {
9897 if (!list_empty(&priv->wmm.tid_tbl_ptr[i].ra_list)) {
....@@ -111,7 +110,7 @@
111110 }
112111 }
113112
114
- spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, flags);
113
+ spin_unlock_bh(&priv->wmm.ra_list_spinlock);
115114 return;
116115 }
117116
....@@ -733,7 +732,6 @@
733732 u16 status_code, struct sk_buff *skb)
734733 {
735734 struct ieee80211_mgmt *mgmt;
736
- u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
737735 int ret;
738736 u16 capab;
739737 struct ieee80211_ht_cap *ht_cap;
....@@ -767,7 +765,7 @@
767765 memmove(pos + ETH_ALEN, &mgmt->u.action.category,
768766 sizeof(mgmt->u.action.u.tdls_discover_resp));
769767 /* init address 4 */
770
- memcpy(pos, bc_addr, ETH_ALEN);
768
+ eth_broadcast_addr(pos);
771769
772770 ret = mwifiex_tdls_append_rates_ie(priv, skb);
773771 if (ret) {
....@@ -1109,7 +1107,6 @@
11091107 {
11101108 struct mwifiex_sta_node *sta_ptr;
11111109 struct mwifiex_ds_tdls_oper tdls_oper;
1112
- unsigned long flags;
11131110
11141111 memset(&tdls_oper, 0, sizeof(struct mwifiex_ds_tdls_oper));
11151112 sta_ptr = mwifiex_get_sta_entry(priv, peer);
....@@ -1117,11 +1114,9 @@
11171114 if (sta_ptr) {
11181115 if (sta_ptr->is_11n_enabled) {
11191116 mwifiex_11n_cleanup_reorder_tbl(priv);
1120
- spin_lock_irqsave(&priv->wmm.ra_list_spinlock,
1121
- flags);
1117
+ spin_lock_bh(&priv->wmm.ra_list_spinlock);
11221118 mwifiex_11n_delete_all_tx_ba_stream_tbl(priv);
1123
- spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock,
1124
- flags);
1119
+ spin_unlock_bh(&priv->wmm.ra_list_spinlock);
11251120 }
11261121 mwifiex_del_sta_entry(priv, peer);
11271122 }
....@@ -1139,7 +1134,6 @@
11391134 {
11401135 struct mwifiex_sta_node *sta_ptr;
11411136 struct ieee80211_mcs_info mcs;
1142
- unsigned long flags;
11431137 int i;
11441138
11451139 sta_ptr = mwifiex_get_sta_entry(priv, peer);
....@@ -1184,11 +1178,9 @@
11841178 "tdls: enable link %pM failed\n", peer);
11851179 if (sta_ptr) {
11861180 mwifiex_11n_cleanup_reorder_tbl(priv);
1187
- spin_lock_irqsave(&priv->wmm.ra_list_spinlock,
1188
- flags);
1181
+ spin_lock_bh(&priv->wmm.ra_list_spinlock);
11891182 mwifiex_11n_delete_all_tx_ba_stream_tbl(priv);
1190
- spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock,
1191
- flags);
1183
+ spin_unlock_bh(&priv->wmm.ra_list_spinlock);
11921184 mwifiex_del_sta_entry(priv, peer);
11931185 }
11941186 mwifiex_restore_tdls_packets(priv, peer, TDLS_LINK_TEARDOWN);
....@@ -1233,7 +1225,6 @@
12331225 struct mwifiex_sta_node *sta_ptr;
12341226 struct tdls_peer_info *peer = buf;
12351227 int count = 0;
1236
- unsigned long flags;
12371228
12381229 if (!ISSUPP_TDLS_ENABLED(priv->adapter->fw_cap_info))
12391230 return 0;
....@@ -1242,7 +1233,7 @@
12421233 if (!(priv->bss_type == MWIFIEX_BSS_TYPE_STA && priv->media_connected))
12431234 return 0;
12441235
1245
- spin_lock_irqsave(&priv->sta_list_spinlock, flags);
1236
+ spin_lock_bh(&priv->sta_list_spinlock);
12461237 list_for_each_entry(sta_ptr, &priv->sta_list, list) {
12471238 if (mwifiex_is_tdls_link_setup(sta_ptr->tdls_status)) {
12481239 ether_addr_copy(peer->peer_addr, sta_ptr->mac_addr);
....@@ -1252,7 +1243,7 @@
12521243 break;
12531244 }
12541245 }
1255
- spin_unlock_irqrestore(&priv->sta_list_spinlock, flags);
1246
+ spin_unlock_bh(&priv->sta_list_spinlock);
12561247
12571248 return count;
12581249 }
....@@ -1261,7 +1252,6 @@
12611252 {
12621253 struct mwifiex_sta_node *sta_ptr;
12631254 struct mwifiex_ds_tdls_oper tdls_oper;
1264
- unsigned long flags;
12651255
12661256 if (list_empty(&priv->sta_list))
12671257 return;
....@@ -1271,11 +1261,9 @@
12711261
12721262 if (sta_ptr->is_11n_enabled) {
12731263 mwifiex_11n_cleanup_reorder_tbl(priv);
1274
- spin_lock_irqsave(&priv->wmm.ra_list_spinlock,
1275
- flags);
1264
+ spin_lock_bh(&priv->wmm.ra_list_spinlock);
12761265 mwifiex_11n_delete_all_tx_ba_stream_tbl(priv);
1277
- spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock,
1278
- flags);
1266
+ spin_unlock_bh(&priv->wmm.ra_list_spinlock);
12791267 }
12801268
12811269 mwifiex_restore_tdls_packets(priv, sta_ptr->mac_addr,
....@@ -1295,12 +1283,11 @@
12951283 int mwifiex_tdls_check_tx(struct mwifiex_private *priv, struct sk_buff *skb)
12961284 {
12971285 struct mwifiex_auto_tdls_peer *peer;
1298
- unsigned long flags;
12991286 u8 mac[ETH_ALEN];
13001287
13011288 ether_addr_copy(mac, skb->data);
13021289
1303
- spin_lock_irqsave(&priv->auto_tdls_lock, flags);
1290
+ spin_lock_bh(&priv->auto_tdls_lock);
13041291 list_for_each_entry(peer, &priv->auto_tdls_list, list) {
13051292 if (!memcmp(mac, peer->mac_addr, ETH_ALEN)) {
13061293 if (peer->rssi <= MWIFIEX_TDLS_RSSI_HIGH &&
....@@ -1329,7 +1316,7 @@
13291316 }
13301317 }
13311318 }
1332
- spin_unlock_irqrestore(&priv->auto_tdls_lock, flags);
1319
+ spin_unlock_bh(&priv->auto_tdls_lock);
13331320
13341321 return 0;
13351322 }
....@@ -1337,33 +1324,31 @@
13371324 void mwifiex_flush_auto_tdls_list(struct mwifiex_private *priv)
13381325 {
13391326 struct mwifiex_auto_tdls_peer *peer, *tmp_node;
1340
- unsigned long flags;
13411327
1342
- spin_lock_irqsave(&priv->auto_tdls_lock, flags);
1328
+ spin_lock_bh(&priv->auto_tdls_lock);
13431329 list_for_each_entry_safe(peer, tmp_node, &priv->auto_tdls_list, list) {
13441330 list_del(&peer->list);
13451331 kfree(peer);
13461332 }
13471333
13481334 INIT_LIST_HEAD(&priv->auto_tdls_list);
1349
- spin_unlock_irqrestore(&priv->auto_tdls_lock, flags);
1335
+ spin_unlock_bh(&priv->auto_tdls_lock);
13501336 priv->check_tdls_tx = false;
13511337 }
13521338
13531339 void mwifiex_add_auto_tdls_peer(struct mwifiex_private *priv, const u8 *mac)
13541340 {
13551341 struct mwifiex_auto_tdls_peer *tdls_peer;
1356
- unsigned long flags;
13571342
13581343 if (!priv->adapter->auto_tdls)
13591344 return;
13601345
1361
- spin_lock_irqsave(&priv->auto_tdls_lock, flags);
1346
+ spin_lock_bh(&priv->auto_tdls_lock);
13621347 list_for_each_entry(tdls_peer, &priv->auto_tdls_list, list) {
13631348 if (!memcmp(tdls_peer->mac_addr, mac, ETH_ALEN)) {
13641349 tdls_peer->tdls_status = TDLS_SETUP_INPROGRESS;
13651350 tdls_peer->rssi_jiffies = jiffies;
1366
- spin_unlock_irqrestore(&priv->auto_tdls_lock, flags);
1351
+ spin_unlock_bh(&priv->auto_tdls_lock);
13671352 return;
13681353 }
13691354 }
....@@ -1380,19 +1365,18 @@
13801365 "Add auto TDLS peer= %pM to list\n", mac);
13811366 }
13821367
1383
- spin_unlock_irqrestore(&priv->auto_tdls_lock, flags);
1368
+ spin_unlock_bh(&priv->auto_tdls_lock);
13841369 }
13851370
13861371 void mwifiex_auto_tdls_update_peer_status(struct mwifiex_private *priv,
13871372 const u8 *mac, u8 link_status)
13881373 {
13891374 struct mwifiex_auto_tdls_peer *peer;
1390
- unsigned long flags;
13911375
13921376 if (!priv->adapter->auto_tdls)
13931377 return;
13941378
1395
- spin_lock_irqsave(&priv->auto_tdls_lock, flags);
1379
+ spin_lock_bh(&priv->auto_tdls_lock);
13961380 list_for_each_entry(peer, &priv->auto_tdls_list, list) {
13971381 if (!memcmp(peer->mac_addr, mac, ETH_ALEN)) {
13981382 if ((link_status == TDLS_NOT_SETUP) &&
....@@ -1405,19 +1389,18 @@
14051389 break;
14061390 }
14071391 }
1408
- spin_unlock_irqrestore(&priv->auto_tdls_lock, flags);
1392
+ spin_unlock_bh(&priv->auto_tdls_lock);
14091393 }
14101394
14111395 void mwifiex_auto_tdls_update_peer_signal(struct mwifiex_private *priv,
14121396 u8 *mac, s8 snr, s8 nflr)
14131397 {
14141398 struct mwifiex_auto_tdls_peer *peer;
1415
- unsigned long flags;
14161399
14171400 if (!priv->adapter->auto_tdls)
14181401 return;
14191402
1420
- spin_lock_irqsave(&priv->auto_tdls_lock, flags);
1403
+ spin_lock_bh(&priv->auto_tdls_lock);
14211404 list_for_each_entry(peer, &priv->auto_tdls_list, list) {
14221405 if (!memcmp(peer->mac_addr, mac, ETH_ALEN)) {
14231406 peer->rssi = nflr - snr;
....@@ -1425,14 +1408,13 @@
14251408 break;
14261409 }
14271410 }
1428
- spin_unlock_irqrestore(&priv->auto_tdls_lock, flags);
1411
+ spin_unlock_bh(&priv->auto_tdls_lock);
14291412 }
14301413
14311414 void mwifiex_check_auto_tdls(struct timer_list *t)
14321415 {
14331416 struct mwifiex_private *priv = from_timer(priv, t, auto_tdls_timer);
14341417 struct mwifiex_auto_tdls_peer *tdls_peer;
1435
- unsigned long flags;
14361418 u16 reason = WLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED;
14371419
14381420 if (WARN_ON_ONCE(!priv || !priv->adapter)) {
....@@ -1452,7 +1434,7 @@
14521434
14531435 priv->check_tdls_tx = false;
14541436
1455
- spin_lock_irqsave(&priv->auto_tdls_lock, flags);
1437
+ spin_lock_bh(&priv->auto_tdls_lock);
14561438 list_for_each_entry(tdls_peer, &priv->auto_tdls_list, list) {
14571439 if ((jiffies - tdls_peer->rssi_jiffies) >
14581440 (MWIFIEX_AUTO_TDLS_IDLE_TIME * HZ)) {
....@@ -1487,7 +1469,7 @@
14871469 tdls_peer->rssi);
14881470 }
14891471 }
1490
- spin_unlock_irqrestore(&priv->auto_tdls_lock, flags);
1472
+ spin_unlock_bh(&priv->auto_tdls_lock);
14911473
14921474 mod_timer(&priv->auto_tdls_timer,
14931475 jiffies + msecs_to_jiffies(MWIFIEX_TIMER_10S));