hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/wireless/ath/wil6210/netdev.c
....@@ -1,18 +1,7 @@
1
+// SPDX-License-Identifier: ISC
12 /*
23 * Copyright (c) 2012-2017 Qualcomm Atheros, Inc.
3
- * Copyright (c) 2018, The Linux Foundation. All rights reserved.
4
- *
5
- * Permission to use, copy, modify, and/or distribute this software for any
6
- * purpose with or without fee is hereby granted, provided that the above
7
- * copyright notice and this permission notice appear in all copies.
8
- *
9
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
4
+ * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
165 */
176
187 #include <linux/etherdevice.h>
....@@ -27,7 +16,7 @@
2716 struct wil6210_vif *vif;
2817 struct net_device *ndev_i;
2918
30
- for (i = 0; i < wil->max_vifs; i++) {
19
+ for (i = 0; i < GET_MAX_VIFS(wil); i++) {
3120 vif = wil->vifs[i];
3221 if (vif) {
3322 ndev_i = vif_to_ndev(vif);
....@@ -155,7 +144,7 @@
155144 struct wil6210_vif *vif;
156145
157146 if (!ring->va || !txdata->enabled ||
158
- txdata->mid >= wil->max_vifs)
147
+ txdata->mid >= GET_MAX_VIFS(wil))
159148 continue;
160149
161150 vif = wil->vifs[txdata->mid];
....@@ -218,6 +207,7 @@
218207 cancel_work_sync(&vif->p2p.delayed_listen_work);
219208 wil_probe_client_flush(vif);
220209 cancel_work_sync(&vif->probe_client_worker);
210
+ cancel_work_sync(&vif->enable_tx_key_worker);
221211 }
222212
223213 void wil_vif_free(struct wil6210_vif *vif)
....@@ -283,7 +273,9 @@
283273
284274 INIT_WORK(&vif->probe_client_worker, wil_probe_client_worker);
285275 INIT_WORK(&vif->disconnect_worker, wil_disconnect_worker);
276
+ INIT_WORK(&vif->p2p.discovery_expired_work, wil_p2p_listen_expired);
286277 INIT_WORK(&vif->p2p.delayed_listen_work, wil_p2p_delayed_listen_work);
278
+ INIT_WORK(&vif->enable_tx_key_worker, wil_enable_tx_key_worker);
287279
288280 INIT_LIST_HEAD(&vif->probe_client_pending);
289281
....@@ -294,7 +286,7 @@
294286 {
295287 u8 i;
296288
297
- for (i = 0; i < wil->max_vifs; i++) {
289
+ for (i = 0; i < GET_MAX_VIFS(wil); i++) {
298290 if (!wil->vifs[i])
299291 return i;
300292 }
....@@ -345,8 +337,7 @@
345337 ndev->ieee80211_ptr = wdev;
346338 ndev->hw_features = NETIF_F_HW_CSUM | NETIF_F_RXCSUM |
347339 NETIF_F_SG | NETIF_F_GRO |
348
- NETIF_F_TSO | NETIF_F_TSO6 |
349
- NETIF_F_RXHASH;
340
+ NETIF_F_TSO | NETIF_F_TSO6;
350341
351342 ndev->features |= ndev->hw_features;
352343 SET_NETDEV_DEV(ndev, wiphy_dev(wdev->wiphy));
....@@ -501,7 +492,7 @@
501492 bool any_active = wil_has_active_ifaces(wil, true, false);
502493
503494 ASSERT_RTNL();
504
- if (mid >= wil->max_vifs) {
495
+ if (mid >= GET_MAX_VIFS(wil)) {
505496 wil_err(wil, "invalid MID: %d\n", mid);
506497 return;
507498 }
....@@ -513,7 +504,7 @@
513504 }
514505
515506 mutex_lock(&wil->mutex);
516
- wil6210_disconnect(vif, NULL, WLAN_REASON_DEAUTH_LEAVING, false);
507
+ wil6210_disconnect(vif, NULL, WLAN_REASON_DEAUTH_LEAVING);
517508 mutex_unlock(&wil->mutex);
518509
519510 ndev = vif_to_ndev(vif);
....@@ -541,6 +532,7 @@
541532 cancel_work_sync(&vif->disconnect_worker);
542533 wil_probe_client_flush(vif);
543534 cancel_work_sync(&vif->probe_client_worker);
535
+ cancel_work_sync(&vif->enable_tx_key_worker);
544536 /* for VIFs, ndev will be freed by destructor after RTNL is unlocked.
545537 * the main interface will be freed in wil_if_free, we need to keep it
546538 * a bit longer so logging macros will work.