diff options
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/Makefile | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/cfg80211.c | 52 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/common.h | 83 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/core.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/init.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/node.c | 234 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/wmi.c | 37 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath6kl/wmi.h | 8 |
8 files changed, 0 insertions, 422 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/Makefile b/drivers/net/wireless/ath/ath6kl/Makefile index 5fe092046d3e..8f7a0d1c290c 100644 --- a/drivers/net/wireless/ath/ath6kl/Makefile +++ b/drivers/net/wireless/ath/ath6kl/Makefile | |||
@@ -31,7 +31,6 @@ ath6kl-y += init.o | |||
31 | ath6kl-y += main.o | 31 | ath6kl-y += main.o |
32 | ath6kl-y += txrx.o | 32 | ath6kl-y += txrx.o |
33 | ath6kl-y += wmi.o | 33 | ath6kl-y += wmi.o |
34 | ath6kl-y += node.o | ||
35 | ath6kl-y += sdio.o | 34 | ath6kl-y += sdio.o |
36 | ath6kl-$(CONFIG_NL80211_TESTMODE) += testmode.o | 35 | ath6kl-$(CONFIG_NL80211_TESTMODE) += testmode.o |
37 | 36 | ||
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c index 5ede3d2f1f2a..b32843779c5f 100644 --- a/drivers/net/wireless/ath/ath6kl/cfg80211.c +++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c | |||
@@ -626,55 +626,6 @@ void ath6kl_cfg80211_disconnect_event(struct ath6kl *ar, u8 reason, | |||
626 | ar->sme_state = SME_DISCONNECTED; | 626 | ar->sme_state = SME_DISCONNECTED; |
627 | } | 627 | } |
628 | 628 | ||
629 | static inline bool is_ch_11a(u16 ch) | ||
630 | { | ||
631 | return (!((ch >= 2412) && (ch <= 2484))); | ||
632 | } | ||
633 | |||
634 | /* struct ath6kl_node_table::nt_nodelock is locked when calling this */ | ||
635 | void ath6kl_cfg80211_scan_node(struct wiphy *wiphy, struct bss *ni) | ||
636 | { | ||
637 | struct ieee80211_mgmt *mgmt; | ||
638 | struct ieee80211_channel *channel; | ||
639 | struct ieee80211_supported_band *band; | ||
640 | struct ath6kl_common_ie *cie; | ||
641 | s32 signal; | ||
642 | int freq; | ||
643 | |||
644 | cie = &ni->ni_cie; | ||
645 | |||
646 | if (is_ch_11a(cie->ie_chan)) | ||
647 | band = wiphy->bands[IEEE80211_BAND_5GHZ]; /* 11a */ | ||
648 | else if ((cie->ie_erp) || (cie->ie_xrates)) | ||
649 | band = wiphy->bands[IEEE80211_BAND_2GHZ]; /* 11g */ | ||
650 | else | ||
651 | band = wiphy->bands[IEEE80211_BAND_2GHZ]; /* 11b */ | ||
652 | |||
653 | freq = cie->ie_chan; | ||
654 | channel = ieee80211_get_channel(wiphy, freq); | ||
655 | signal = ni->ni_snr * 100; | ||
656 | |||
657 | ath6kl_dbg(ATH6KL_DBG_WLAN_CFG, | ||
658 | "%s: bssid %pM ch %d freq %d size %d\n", __func__, | ||
659 | ni->ni_macaddr, channel->hw_value, freq, ni->ni_framelen); | ||
660 | /* | ||
661 | * Both Beacon and Probe Response frames have same payload structure, | ||
662 | * so it is fine to share the parser for both. | ||
663 | */ | ||
664 | if (ni->ni_framelen < 8 + 2 + 2) | ||
665 | return; | ||
666 | mgmt = (struct ieee80211_mgmt *) (ni->ni_buf - | ||
667 | offsetof(struct ieee80211_mgmt, u)); | ||
668 | cfg80211_inform_bss(wiphy, channel, ni->ni_macaddr, | ||
669 | le64_to_cpu(mgmt->u.beacon.timestamp), | ||
670 | le16_to_cpu(mgmt->u.beacon.capab_info), | ||
671 | le16_to_cpu(mgmt->u.beacon.beacon_int), | ||
672 | mgmt->u.beacon.variable, | ||
673 | ni->ni_buf + ni->ni_framelen - | ||
674 | mgmt->u.beacon.variable, | ||
675 | signal, GFP_ATOMIC); | ||
676 | } | ||
677 | |||
678 | static int ath6kl_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev, | 629 | static int ath6kl_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev, |
679 | struct cfg80211_scan_request *request) | 630 | struct cfg80211_scan_request *request) |
680 | { | 631 | { |
@@ -768,9 +719,6 @@ void ath6kl_cfg80211_scan_complete_event(struct ath6kl *ar, int status) | |||
768 | goto out; | 719 | goto out; |
769 | } | 720 | } |
770 | 721 | ||
771 | /* Translate data to cfg80211 mgmt format */ | ||
772 | wlan_iterate_nodes(&ar->scan_table, ar->wdev->wiphy); | ||
773 | |||
774 | cfg80211_scan_done(ar->scan_req, false); | 722 | cfg80211_scan_done(ar->scan_req, false); |
775 | 723 | ||
776 | if (ar->scan_req->n_ssids && ar->scan_req->ssids[0].ssid_len) { | 724 | if (ar->scan_req->n_ssids && ar->scan_req->ssids[0].ssid_len) { |
diff --git a/drivers/net/wireless/ath/ath6kl/common.h b/drivers/net/wireless/ath/ath6kl/common.h index 6b0d45642fe3..b92f0e5d2336 100644 --- a/drivers/net/wireless/ath/ath6kl/common.h +++ b/drivers/net/wireless/ath/ath6kl/common.h | |||
@@ -75,94 +75,11 @@ enum crypto_type { | |||
75 | AES_CRYPT = 0x08, | 75 | AES_CRYPT = 0x08, |
76 | }; | 76 | }; |
77 | 77 | ||
78 | #define ATH6KL_NODE_HASHSIZE 32 | ||
79 | /* simple hash is enough for variation of macaddr */ | ||
80 | #define ATH6KL_NODE_HASH(addr) \ | ||
81 | (((const u8 *)(addr))[ETH_ALEN - 1] % \ | ||
82 | ATH6KL_NODE_HASHSIZE) | ||
83 | |||
84 | /* | ||
85 | * Table of ath6kl_node instances. Each ieee80211com | ||
86 | * has at least one for holding the scan candidates. | ||
87 | * When operating as an access point or in ibss mode there | ||
88 | * is a second table for associated stations or neighbors. | ||
89 | */ | ||
90 | struct ath6kl_node_table { | ||
91 | spinlock_t nt_nodelock; /* on node table */ | ||
92 | struct bss *nt_node_first; /* information of all nodes */ | ||
93 | struct bss *nt_node_last; /* information of all nodes */ | ||
94 | struct bss *nt_hash[ATH6KL_NODE_HASHSIZE]; | ||
95 | const char *nt_name; /* for debugging */ | ||
96 | u32 nt_node_age; /* node aging time */ | ||
97 | }; | ||
98 | |||
99 | #define WLAN_NODE_INACT_TIMEOUT_MSEC 120000 | ||
100 | #define WLAN_NODE_INACT_CNT 4 | ||
101 | |||
102 | struct ath6kl_common_ie { | ||
103 | u16 ie_chan; | ||
104 | u8 *ie_tstamp; | ||
105 | u8 *ie_ssid; | ||
106 | u8 *ie_rates; | ||
107 | u8 *ie_xrates; | ||
108 | u8 *ie_country; | ||
109 | u8 *ie_wpa; | ||
110 | u8 *ie_rsn; | ||
111 | u8 *ie_wmm; | ||
112 | u8 *ie_ath; | ||
113 | u16 ie_capInfo; | ||
114 | u16 ie_beaconInt; | ||
115 | u8 *ie_tim; | ||
116 | u8 *ie_chswitch; | ||
117 | u8 ie_erp; | ||
118 | u8 *ie_wsc; | ||
119 | u8 *ie_htcap; | ||
120 | u8 *ie_htop; | ||
121 | }; | ||
122 | |||
123 | struct bss { | ||
124 | u8 ni_macaddr[ETH_ALEN]; | ||
125 | u8 ni_snr; | ||
126 | s16 ni_rssi; | ||
127 | struct bss *ni_list_next; | ||
128 | struct bss *ni_list_prev; | ||
129 | struct bss *ni_hash_next; | ||
130 | struct bss *ni_hash_prev; | ||
131 | struct ath6kl_common_ie ni_cie; | ||
132 | u8 *ni_buf; | ||
133 | u16 ni_framelen; | ||
134 | struct ath6kl_node_table *ni_table; | ||
135 | u32 ni_refcnt; | ||
136 | |||
137 | u32 ni_tstamp; | ||
138 | u32 ni_actcnt; | ||
139 | }; | ||
140 | |||
141 | struct htc_endpoint_credit_dist; | 78 | struct htc_endpoint_credit_dist; |
142 | struct ath6kl; | 79 | struct ath6kl; |
143 | enum htc_credit_dist_reason; | 80 | enum htc_credit_dist_reason; |
144 | struct htc_credit_state_info; | 81 | struct htc_credit_state_info; |
145 | 82 | ||
146 | struct bss *wlan_node_alloc(int wh_size); | ||
147 | void wlan_node_free(struct bss *ni); | ||
148 | void wlan_setup_node(struct ath6kl_node_table *nt, struct bss *ni, | ||
149 | const u8 *mac_addr); | ||
150 | struct bss *wlan_find_node(struct ath6kl_node_table *nt, | ||
151 | const u8 *mac_addr); | ||
152 | void wlan_node_reclaim(struct ath6kl_node_table *nt, struct bss *ni); | ||
153 | void wlan_free_allnodes(struct ath6kl_node_table *nt); | ||
154 | void wlan_iterate_nodes(struct ath6kl_node_table *nt, void *arg); | ||
155 | |||
156 | void wlan_node_table_init(struct ath6kl_node_table *nt); | ||
157 | void wlan_node_table_cleanup(struct ath6kl_node_table *nt); | ||
158 | |||
159 | void wlan_refresh_inactive_nodes(struct ath6kl *ar); | ||
160 | |||
161 | struct bss *wlan_find_ssid_node(struct ath6kl_node_table *nt, u8 *ssid, | ||
162 | u32 ssid_len, bool is_wpa2, bool match_ssid); | ||
163 | |||
164 | void wlan_node_return(struct ath6kl_node_table *nt, struct bss *ni); | ||
165 | |||
166 | int ath6k_setup_credit_dist(void *htc_handle, | 83 | int ath6k_setup_credit_dist(void *htc_handle, |
167 | struct htc_credit_state_info *cred_info); | 84 | struct htc_credit_state_info *cred_info); |
168 | void ath6k_credit_distribute(struct htc_credit_state_info *cred_inf, | 85 | void ath6k_credit_distribute(struct htc_credit_state_info *cred_inf, |
diff --git a/drivers/net/wireless/ath/ath6kl/core.h b/drivers/net/wireless/ath/ath6kl/core.h index a9b3b17ef3ef..9e6abb85fc50 100644 --- a/drivers/net/wireless/ath/ath6kl/core.h +++ b/drivers/net/wireless/ath/ath6kl/core.h | |||
@@ -503,7 +503,6 @@ struct ath6kl { | |||
503 | 503 | ||
504 | struct workqueue_struct *ath6kl_wq; | 504 | struct workqueue_struct *ath6kl_wq; |
505 | 505 | ||
506 | struct ath6kl_node_table scan_table; | ||
507 | struct dentry *debugfs_phy; | 506 | struct dentry *debugfs_phy; |
508 | 507 | ||
509 | u32 send_action_id; | 508 | u32 send_action_id; |
@@ -626,5 +625,4 @@ void aggr_recv_addba_req_evt(struct ath6kl *ar, u8 tid, u16 seq_no, | |||
626 | void ath6kl_wakeup_event(void *dev); | 625 | void ath6kl_wakeup_event(void *dev); |
627 | void ath6kl_target_failure(struct ath6kl *ar); | 626 | void ath6kl_target_failure(struct ath6kl *ar); |
628 | 627 | ||
629 | void ath6kl_cfg80211_scan_node(struct wiphy *wiphy, struct bss *ni); | ||
630 | #endif /* CORE_H */ | 628 | #endif /* CORE_H */ |
diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c index 1834e9af5799..7e10f712ae4d 100644 --- a/drivers/net/wireless/ath/ath6kl/init.c +++ b/drivers/net/wireless/ath/ath6kl/init.c | |||
@@ -1418,8 +1418,6 @@ static int ath6kl_init(struct net_device *dev) | |||
1418 | 1418 | ||
1419 | ath6kl_dbg(ATH6KL_DBG_TRC, "%s: got wmi @ 0x%p.\n", __func__, ar->wmi); | 1419 | ath6kl_dbg(ATH6KL_DBG_TRC, "%s: got wmi @ 0x%p.\n", __func__, ar->wmi); |
1420 | 1420 | ||
1421 | wlan_node_table_init(&ar->scan_table); | ||
1422 | |||
1423 | /* | 1421 | /* |
1424 | * The reason we have to wait for the target here is that the | 1422 | * The reason we have to wait for the target here is that the |
1425 | * driver layer has to init BMI in order to set the host block | 1423 | * driver layer has to init BMI in order to set the host block |
@@ -1501,7 +1499,6 @@ err_rxbuf_cleanup: | |||
1501 | err_cleanup_scatter: | 1499 | err_cleanup_scatter: |
1502 | ath6kl_hif_cleanup_scatter(ar); | 1500 | ath6kl_hif_cleanup_scatter(ar); |
1503 | err_node_cleanup: | 1501 | err_node_cleanup: |
1504 | wlan_node_table_cleanup(&ar->scan_table); | ||
1505 | ath6kl_wmi_shutdown(ar->wmi); | 1502 | ath6kl_wmi_shutdown(ar->wmi); |
1506 | clear_bit(WMI_ENABLED, &ar->flag); | 1503 | clear_bit(WMI_ENABLED, &ar->flag); |
1507 | ar->wmi = NULL; | 1504 | ar->wmi = NULL; |
@@ -1658,8 +1655,6 @@ void ath6kl_destroy(struct net_device *dev, unsigned int unregister) | |||
1658 | 1655 | ||
1659 | free_netdev(dev); | 1656 | free_netdev(dev); |
1660 | 1657 | ||
1661 | wlan_node_table_cleanup(&ar->scan_table); | ||
1662 | |||
1663 | kfree(ar->fw_board); | 1658 | kfree(ar->fw_board); |
1664 | kfree(ar->fw_otp); | 1659 | kfree(ar->fw_otp); |
1665 | kfree(ar->fw); | 1660 | kfree(ar->fw); |
diff --git a/drivers/net/wireless/ath/ath6kl/node.c b/drivers/net/wireless/ath/ath6kl/node.c deleted file mode 100644 index 131205c610b9..000000000000 --- a/drivers/net/wireless/ath/ath6kl/node.c +++ /dev/null | |||
@@ -1,234 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2004-2011 Atheros Communications Inc. | ||
3 | * | ||
4 | * Permission to use, copy, modify, and/or distribute this software for any | ||
5 | * purpose with or without fee is hereby granted, provided that the above | ||
6 | * copyright notice and this permission notice appear in all copies. | ||
7 | * | ||
8 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
9 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
10 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
11 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
12 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
13 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
14 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
15 | */ | ||
16 | |||
17 | #include "htc.h" | ||
18 | #include "wmi.h" | ||
19 | #include "debug.h" | ||
20 | |||
21 | struct bss *wlan_node_alloc(int wh_size) | ||
22 | { | ||
23 | struct bss *ni; | ||
24 | |||
25 | ni = kzalloc(sizeof(struct bss), GFP_ATOMIC); | ||
26 | |||
27 | if ((ni != NULL) && wh_size) { | ||
28 | ni->ni_buf = kmalloc(wh_size, GFP_ATOMIC); | ||
29 | if (ni->ni_buf == NULL) { | ||
30 | kfree(ni); | ||
31 | return NULL; | ||
32 | } | ||
33 | } | ||
34 | |||
35 | return ni; | ||
36 | } | ||
37 | |||
38 | void wlan_node_free(struct bss *ni) | ||
39 | { | ||
40 | kfree(ni->ni_buf); | ||
41 | kfree(ni); | ||
42 | } | ||
43 | |||
44 | void wlan_setup_node(struct ath6kl_node_table *nt, struct bss *ni, | ||
45 | const u8 *mac_addr) | ||
46 | { | ||
47 | int hash; | ||
48 | |||
49 | memcpy(ni->ni_macaddr, mac_addr, ETH_ALEN); | ||
50 | hash = ATH6KL_NODE_HASH(mac_addr); | ||
51 | ni->ni_refcnt = 1; | ||
52 | |||
53 | ni->ni_tstamp = jiffies_to_msecs(jiffies); | ||
54 | ni->ni_actcnt = WLAN_NODE_INACT_CNT; | ||
55 | |||
56 | spin_lock_bh(&nt->nt_nodelock); | ||
57 | |||
58 | /* insert at the end of the node list */ | ||
59 | ni->ni_list_next = NULL; | ||
60 | ni->ni_list_prev = nt->nt_node_last; | ||
61 | if (nt->nt_node_last != NULL) | ||
62 | nt->nt_node_last->ni_list_next = ni; | ||
63 | |||
64 | nt->nt_node_last = ni; | ||
65 | if (nt->nt_node_first == NULL) | ||
66 | nt->nt_node_first = ni; | ||
67 | |||
68 | /* insert into the hash list */ | ||
69 | ni->ni_hash_next = nt->nt_hash[hash]; | ||
70 | if (ni->ni_hash_next != NULL) | ||
71 | nt->nt_hash[hash]->ni_hash_prev = ni; | ||
72 | |||
73 | ni->ni_hash_prev = NULL; | ||
74 | nt->nt_hash[hash] = ni; | ||
75 | |||
76 | spin_unlock_bh(&nt->nt_nodelock); | ||
77 | } | ||
78 | |||
79 | struct bss *wlan_find_node(struct ath6kl_node_table *nt, | ||
80 | const u8 *mac_addr) | ||
81 | { | ||
82 | struct bss *ni, *found_ni = NULL; | ||
83 | int hash; | ||
84 | |||
85 | spin_lock_bh(&nt->nt_nodelock); | ||
86 | |||
87 | hash = ATH6KL_NODE_HASH(mac_addr); | ||
88 | for (ni = nt->nt_hash[hash]; ni; ni = ni->ni_hash_next) { | ||
89 | if (memcmp(ni->ni_macaddr, mac_addr, ETH_ALEN) == 0) { | ||
90 | ni->ni_refcnt++; | ||
91 | found_ni = ni; | ||
92 | break; | ||
93 | } | ||
94 | } | ||
95 | |||
96 | spin_unlock_bh(&nt->nt_nodelock); | ||
97 | |||
98 | return found_ni; | ||
99 | } | ||
100 | |||
101 | void wlan_node_reclaim(struct ath6kl_node_table *nt, struct bss *ni) | ||
102 | { | ||
103 | int hash; | ||
104 | |||
105 | spin_lock_bh(&nt->nt_nodelock); | ||
106 | |||
107 | if (ni->ni_list_prev == NULL) | ||
108 | /* fix list head */ | ||
109 | nt->nt_node_first = ni->ni_list_next; | ||
110 | else | ||
111 | ni->ni_list_prev->ni_list_next = ni->ni_list_next; | ||
112 | |||
113 | if (ni->ni_list_next == NULL) | ||
114 | /* fix list tail */ | ||
115 | nt->nt_node_last = ni->ni_list_prev; | ||
116 | else | ||
117 | ni->ni_list_next->ni_list_prev = ni->ni_list_prev; | ||
118 | |||
119 | if (ni->ni_hash_prev == NULL) { | ||
120 | /* first in list so fix the list head */ | ||
121 | hash = ATH6KL_NODE_HASH(ni->ni_macaddr); | ||
122 | nt->nt_hash[hash] = ni->ni_hash_next; | ||
123 | } else { | ||
124 | ni->ni_hash_prev->ni_hash_next = ni->ni_hash_next; | ||
125 | } | ||
126 | |||
127 | if (ni->ni_hash_next != NULL) | ||
128 | ni->ni_hash_next->ni_hash_prev = ni->ni_hash_prev; | ||
129 | |||
130 | wlan_node_free(ni); | ||
131 | |||
132 | spin_unlock_bh(&nt->nt_nodelock); | ||
133 | } | ||
134 | |||
135 | static void wlan_node_dec_free(struct bss *ni) | ||
136 | { | ||
137 | if ((ni->ni_refcnt--) == 1) | ||
138 | wlan_node_free(ni); | ||
139 | } | ||
140 | |||
141 | void wlan_free_allnodes(struct ath6kl_node_table *nt) | ||
142 | { | ||
143 | struct bss *ni; | ||
144 | |||
145 | while ((ni = nt->nt_node_first) != NULL) | ||
146 | wlan_node_reclaim(nt, ni); | ||
147 | } | ||
148 | |||
149 | void wlan_iterate_nodes(struct ath6kl_node_table *nt, void *arg) | ||
150 | { | ||
151 | struct bss *ni; | ||
152 | |||
153 | spin_lock_bh(&nt->nt_nodelock); | ||
154 | for (ni = nt->nt_node_first; ni; ni = ni->ni_list_next) { | ||
155 | ni->ni_refcnt++; | ||
156 | ath6kl_cfg80211_scan_node(arg, ni); | ||
157 | wlan_node_dec_free(ni); | ||
158 | } | ||
159 | spin_unlock_bh(&nt->nt_nodelock); | ||
160 | } | ||
161 | |||
162 | void wlan_node_table_init(struct ath6kl_node_table *nt) | ||
163 | { | ||
164 | ath6kl_dbg(ATH6KL_DBG_WLAN_NODE, "node table = 0x%lx\n", | ||
165 | (unsigned long)nt); | ||
166 | |||
167 | memset(nt, 0, sizeof(struct ath6kl_node_table)); | ||
168 | |||
169 | spin_lock_init(&nt->nt_nodelock); | ||
170 | |||
171 | nt->nt_node_age = WLAN_NODE_INACT_TIMEOUT_MSEC; | ||
172 | } | ||
173 | |||
174 | void wlan_refresh_inactive_nodes(struct ath6kl *ar) | ||
175 | { | ||
176 | struct ath6kl_node_table *nt = &ar->scan_table; | ||
177 | struct bss *bss; | ||
178 | u32 now; | ||
179 | |||
180 | now = jiffies_to_msecs(jiffies); | ||
181 | bss = nt->nt_node_first; | ||
182 | while (bss != NULL) { | ||
183 | /* refresh all nodes except the current bss */ | ||
184 | if (memcmp(ar->bssid, bss->ni_macaddr, ETH_ALEN) != 0) { | ||
185 | if (((now - bss->ni_tstamp) > nt->nt_node_age) | ||
186 | || --bss->ni_actcnt == 0) { | ||
187 | wlan_node_reclaim(nt, bss); | ||
188 | } | ||
189 | } | ||
190 | bss = bss->ni_list_next; | ||
191 | } | ||
192 | } | ||
193 | |||
194 | void wlan_node_table_cleanup(struct ath6kl_node_table *nt) | ||
195 | { | ||
196 | wlan_free_allnodes(nt); | ||
197 | } | ||
198 | |||
199 | struct bss *wlan_find_ssid_node(struct ath6kl_node_table *nt, u8 * ssid, | ||
200 | u32 ssid_len, bool is_wpa2, bool match_ssid) | ||
201 | { | ||
202 | struct bss *ni, *found_ni = NULL; | ||
203 | u8 *ie_ssid; | ||
204 | |||
205 | spin_lock_bh(&nt->nt_nodelock); | ||
206 | |||
207 | for (ni = nt->nt_node_first; ni; ni = ni->ni_list_next) { | ||
208 | |||
209 | ie_ssid = ni->ni_cie.ie_ssid; | ||
210 | |||
211 | if ((ie_ssid[1] <= IEEE80211_MAX_SSID_LEN) && | ||
212 | (memcmp(ssid, &ie_ssid[2], ssid_len) == 0)) { | ||
213 | |||
214 | if (match_ssid || | ||
215 | (is_wpa2 && ni->ni_cie.ie_rsn != NULL) || | ||
216 | (!is_wpa2 && ni->ni_cie.ie_wpa != NULL)) { | ||
217 | ni->ni_refcnt++; | ||
218 | found_ni = ni; | ||
219 | break; | ||
220 | } | ||
221 | } | ||
222 | } | ||
223 | |||
224 | spin_unlock_bh(&nt->nt_nodelock); | ||
225 | |||
226 | return found_ni; | ||
227 | } | ||
228 | |||
229 | void wlan_node_return(struct ath6kl_node_table *nt, struct bss *ni) | ||
230 | { | ||
231 | spin_lock_bh(&nt->nt_nodelock); | ||
232 | wlan_node_dec_free(ni); | ||
233 | spin_unlock_bh(&nt->nt_nodelock); | ||
234 | } | ||
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c index ff13e0bc646b..3ade9a17c0eb 100644 --- a/drivers/net/wireless/ath/ath6kl/wmi.c +++ b/drivers/net/wireless/ath/ath6kl/wmi.c | |||
@@ -2457,43 +2457,6 @@ s32 ath6kl_wmi_get_rate(s8 rate_index) | |||
2457 | return wmi_rate_tbl[(u32) rate_index][0]; | 2457 | return wmi_rate_tbl[(u32) rate_index][0]; |
2458 | } | 2458 | } |
2459 | 2459 | ||
2460 | void ath6kl_wmi_node_return(struct wmi *wmi, struct bss *bss) | ||
2461 | { | ||
2462 | if (bss) | ||
2463 | wlan_node_return(&wmi->parent_dev->scan_table, bss); | ||
2464 | } | ||
2465 | |||
2466 | struct bss *ath6kl_wmi_find_ssid_node(struct wmi *wmi, u8 * ssid, | ||
2467 | u32 ssid_len, bool is_wpa2, | ||
2468 | bool match_ssid) | ||
2469 | { | ||
2470 | struct bss *node = NULL; | ||
2471 | |||
2472 | node = wlan_find_ssid_node(&wmi->parent_dev->scan_table, ssid, | ||
2473 | ssid_len, is_wpa2, match_ssid); | ||
2474 | return node; | ||
2475 | } | ||
2476 | |||
2477 | struct bss *ath6kl_wmi_find_node(struct wmi *wmi, const u8 * mac_addr) | ||
2478 | { | ||
2479 | struct bss *ni = NULL; | ||
2480 | |||
2481 | ni = wlan_find_node(&wmi->parent_dev->scan_table, mac_addr); | ||
2482 | |||
2483 | return ni; | ||
2484 | } | ||
2485 | |||
2486 | void ath6kl_wmi_node_free(struct wmi *wmi, const u8 * mac_addr) | ||
2487 | { | ||
2488 | struct bss *ni = NULL; | ||
2489 | |||
2490 | ni = wlan_find_node(&wmi->parent_dev->scan_table, mac_addr); | ||
2491 | if (ni != NULL) | ||
2492 | wlan_node_reclaim(&wmi->parent_dev->scan_table, ni); | ||
2493 | |||
2494 | return; | ||
2495 | } | ||
2496 | |||
2497 | static int ath6kl_wmi_get_pmkid_list_event_rx(struct wmi *wmi, u8 *datap, | 2460 | static int ath6kl_wmi_get_pmkid_list_event_rx(struct wmi *wmi, u8 *datap, |
2498 | u32 len) | 2461 | u32 len) |
2499 | { | 2462 | { |
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.h b/drivers/net/wireless/ath/ath6kl/wmi.h index f036e78522ab..f65bc0d6dbef 100644 --- a/drivers/net/wireless/ath/ath6kl/wmi.h +++ b/drivers/net/wireless/ath/ath6kl/wmi.h | |||
@@ -2181,8 +2181,6 @@ int ath6kl_wmi_implicit_create_pstream(struct wmi *wmi, struct sk_buff *skb, | |||
2181 | u8 *ac); | 2181 | u8 *ac); |
2182 | 2182 | ||
2183 | int ath6kl_wmi_control_rx(struct wmi *wmi, struct sk_buff *skb); | 2183 | int ath6kl_wmi_control_rx(struct wmi *wmi, struct sk_buff *skb); |
2184 | struct bss *ath6kl_wmi_find_node(struct wmi *wmi, const u8 *mac_addr); | ||
2185 | void ath6kl_wmi_node_free(struct wmi *wmi, const u8 *mac_addr); | ||
2186 | 2184 | ||
2187 | int ath6kl_wmi_cmd_send(struct wmi *wmi, struct sk_buff *skb, | 2185 | int ath6kl_wmi_cmd_send(struct wmi *wmi, struct sk_buff *skb, |
2188 | enum wmi_cmd_id cmd_id, enum wmi_sync_flag sync_flag); | 2186 | enum wmi_cmd_id cmd_id, enum wmi_sync_flag sync_flag); |
@@ -2253,12 +2251,6 @@ s32 ath6kl_wmi_get_rate(s8 rate_index); | |||
2253 | int ath6kl_wmi_set_ip_cmd(struct wmi *wmi, struct wmi_set_ip_cmd *ip_cmd); | 2251 | int ath6kl_wmi_set_ip_cmd(struct wmi *wmi, struct wmi_set_ip_cmd *ip_cmd); |
2254 | int ath6kl_wmi_set_roam_lrssi_cmd(struct wmi *wmi, u8 lrssi); | 2252 | int ath6kl_wmi_set_roam_lrssi_cmd(struct wmi *wmi, u8 lrssi); |
2255 | 2253 | ||
2256 | struct bss *ath6kl_wmi_find_ssid_node(struct wmi *wmi, u8 *ssid, | ||
2257 | u32 ssid_len, bool is_wpa2, | ||
2258 | bool match_ssid); | ||
2259 | |||
2260 | void ath6kl_wmi_node_return(struct wmi *wmi, struct bss *bss); | ||
2261 | |||
2262 | /* AP mode */ | 2254 | /* AP mode */ |
2263 | int ath6kl_wmi_ap_profile_commit(struct wmi *wmip, struct wmi_connect_cmd *p); | 2255 | int ath6kl_wmi_ap_profile_commit(struct wmi *wmip, struct wmi_connect_cmd *p); |
2264 | 2256 | ||