diff options
Diffstat (limited to 'net/mac80211/sta_info.h')
-rw-r--r-- | net/mac80211/sta_info.h | 357 |
1 files changed, 257 insertions, 100 deletions
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h index 96fe3ed95038..f8c95bc9659c 100644 --- a/net/mac80211/sta_info.h +++ b/net/mac80211/sta_info.h | |||
@@ -12,160 +12,293 @@ | |||
12 | #include <linux/list.h> | 12 | #include <linux/list.h> |
13 | #include <linux/types.h> | 13 | #include <linux/types.h> |
14 | #include <linux/if_ether.h> | 14 | #include <linux/if_ether.h> |
15 | #include <linux/kref.h> | 15 | #include "key.h" |
16 | #include "ieee80211_key.h" | 16 | |
17 | 17 | /** | |
18 | /* Stations flags (struct sta_info::flags) */ | 18 | * enum ieee80211_sta_info_flags - Stations flags |
19 | #define WLAN_STA_AUTH BIT(0) | 19 | * |
20 | #define WLAN_STA_ASSOC BIT(1) | 20 | * These flags are used with &struct sta_info's @flags member. |
21 | #define WLAN_STA_PS BIT(2) | 21 | * |
22 | #define WLAN_STA_TIM BIT(3) /* TIM bit is on for PS stations */ | 22 | * @WLAN_STA_AUTH: Station is authenticated. |
23 | #define WLAN_STA_PERM BIT(4) /* permanent; do not remove entry on expiration */ | 23 | * @WLAN_STA_ASSOC: Station is associated. |
24 | #define WLAN_STA_AUTHORIZED BIT(5) /* If 802.1X is used, this flag is | 24 | * @WLAN_STA_PS: Station is in power-save mode |
25 | * controlling whether STA is authorized to | 25 | * @WLAN_STA_AUTHORIZED: Station is authorized to send/receive traffic. |
26 | * send and receive non-IEEE 802.1X frames | 26 | * This bit is always checked so needs to be enabled for all stations |
27 | */ | 27 | * when virtual port control is not in use. |
28 | #define WLAN_STA_SHORT_PREAMBLE BIT(7) | 28 | * @WLAN_STA_SHORT_PREAMBLE: Station is capable of receiving short-preamble |
29 | /* whether this is an AP that we are associated with as a client */ | 29 | * frames. |
30 | #define WLAN_STA_ASSOC_AP BIT(8) | 30 | * @WLAN_STA_ASSOC_AP: We're associated to that station, it is an AP. |
31 | #define WLAN_STA_WME BIT(9) | 31 | * @WLAN_STA_WME: Station is a QoS-STA. |
32 | #define WLAN_STA_WDS BIT(27) | 32 | * @WLAN_STA_WDS: Station is one of our WDS peers. |
33 | * @WLAN_STA_PSPOLL: Station has just PS-polled us. | ||
34 | * @WLAN_STA_CLEAR_PS_FILT: Clear PS filter in hardware (using the | ||
35 | * IEEE80211_TXCTL_CLEAR_PS_FILT control flag) when the next | ||
36 | * frame to this station is transmitted. | ||
37 | */ | ||
38 | enum ieee80211_sta_info_flags { | ||
39 | WLAN_STA_AUTH = 1<<0, | ||
40 | WLAN_STA_ASSOC = 1<<1, | ||
41 | WLAN_STA_PS = 1<<2, | ||
42 | WLAN_STA_AUTHORIZED = 1<<3, | ||
43 | WLAN_STA_SHORT_PREAMBLE = 1<<4, | ||
44 | WLAN_STA_ASSOC_AP = 1<<5, | ||
45 | WLAN_STA_WME = 1<<6, | ||
46 | WLAN_STA_WDS = 1<<7, | ||
47 | WLAN_STA_PSPOLL = 1<<8, | ||
48 | WLAN_STA_CLEAR_PS_FILT = 1<<9, | ||
49 | }; | ||
33 | 50 | ||
34 | #define STA_TID_NUM 16 | 51 | #define STA_TID_NUM 16 |
35 | #define ADDBA_RESP_INTERVAL HZ | 52 | #define ADDBA_RESP_INTERVAL HZ |
53 | #define HT_AGG_MAX_RETRIES (0x3) | ||
36 | 54 | ||
37 | #define HT_AGG_STATE_INITIATOR_SHIFT (4) | 55 | #define HT_AGG_STATE_INITIATOR_SHIFT (4) |
38 | 56 | ||
57 | #define HT_ADDBA_REQUESTED_MSK BIT(0) | ||
58 | #define HT_ADDBA_DRV_READY_MSK BIT(1) | ||
59 | #define HT_ADDBA_RECEIVED_MSK BIT(2) | ||
39 | #define HT_AGG_STATE_REQ_STOP_BA_MSK BIT(3) | 60 | #define HT_AGG_STATE_REQ_STOP_BA_MSK BIT(3) |
40 | 61 | #define HT_AGG_STATE_INITIATOR_MSK BIT(HT_AGG_STATE_INITIATOR_SHIFT) | |
41 | #define HT_AGG_STATE_IDLE (0x0) | 62 | #define HT_AGG_STATE_IDLE (0x0) |
42 | #define HT_AGG_STATE_OPERATIONAL (0x7) | 63 | #define HT_AGG_STATE_OPERATIONAL (HT_ADDBA_REQUESTED_MSK | \ |
64 | HT_ADDBA_DRV_READY_MSK | \ | ||
65 | HT_ADDBA_RECEIVED_MSK) | ||
66 | #define HT_AGG_STATE_DEBUGFS_CTL BIT(7) | ||
43 | 67 | ||
44 | /** | 68 | /** |
45 | * struct tid_ampdu_rx - TID aggregation information (Rx). | 69 | * struct tid_ampdu_tx - TID aggregation information (Tx). |
46 | * | 70 | * |
47 | * @state: TID's state in session state machine. | 71 | * @addba_resp_timer: timer for peer's response to addba request |
72 | * @ssn: Starting Sequence Number expected to be aggregated. | ||
48 | * @dialog_token: dialog token for aggregation session | 73 | * @dialog_token: dialog token for aggregation session |
74 | */ | ||
75 | struct tid_ampdu_tx { | ||
76 | struct timer_list addba_resp_timer; | ||
77 | u16 ssn; | ||
78 | u8 dialog_token; | ||
79 | }; | ||
80 | |||
81 | /** | ||
82 | * struct tid_ampdu_rx - TID aggregation information (Rx). | ||
83 | * | ||
84 | * @reorder_buf: buffer to reorder incoming aggregated MPDUs | ||
85 | * @session_timer: check if peer keeps Tx-ing on the TID (by timeout value) | ||
86 | * @head_seq_num: head sequence number in reordering buffer. | ||
87 | * @stored_mpdu_num: number of MPDUs in reordering buffer | ||
49 | * @ssn: Starting Sequence Number expected to be aggregated. | 88 | * @ssn: Starting Sequence Number expected to be aggregated. |
50 | * @buf_size: buffer size for incoming A-MPDUs | 89 | * @buf_size: buffer size for incoming A-MPDUs |
51 | * @timeout: reset timer value. | 90 | * @timeout: reset timer value. |
52 | * @head_seq_num: head sequence number in reordering buffer. | 91 | * @dialog_token: dialog token for aggregation session |
53 | * @stored_mpdu_num: number of MPDUs in reordering buffer | ||
54 | * @reorder_buf: buffer to reorder incoming aggregated MPDUs | ||
55 | * @session_timer: check if peer keeps Tx-ing on the TID (by timeout value) | ||
56 | */ | 92 | */ |
57 | struct tid_ampdu_rx { | 93 | struct tid_ampdu_rx { |
58 | u8 state; | 94 | struct sk_buff **reorder_buf; |
59 | u8 dialog_token; | 95 | struct timer_list session_timer; |
96 | u16 head_seq_num; | ||
97 | u16 stored_mpdu_num; | ||
60 | u16 ssn; | 98 | u16 ssn; |
61 | u16 buf_size; | 99 | u16 buf_size; |
62 | u16 timeout; | 100 | u16 timeout; |
63 | u16 head_seq_num; | 101 | u8 dialog_token; |
64 | u16 stored_mpdu_num; | 102 | }; |
65 | struct sk_buff **reorder_buf; | 103 | |
66 | struct timer_list session_timer; | 104 | /** |
105 | * enum plink_state - state of a mesh peer link finite state machine | ||
106 | * | ||
107 | * @PLINK_LISTEN: initial state, considered the implicit state of non existant | ||
108 | * mesh peer links | ||
109 | * @PLINK_OPN_SNT: mesh plink open frame has been sent to this mesh peer | ||
110 | * @PLINK_OPN_RCVD: mesh plink open frame has been received from this mesh peer | ||
111 | * @PLINK_CNF_RCVD: mesh plink confirm frame has been received from this mesh | ||
112 | * peer | ||
113 | * @PLINK_ESTAB: mesh peer link is established | ||
114 | * @PLINK_HOLDING: mesh peer link is being closed or cancelled | ||
115 | * @PLINK_BLOCKED: all frames transmitted from this mesh plink are discarded | ||
116 | */ | ||
117 | enum plink_state { | ||
118 | PLINK_LISTEN, | ||
119 | PLINK_OPN_SNT, | ||
120 | PLINK_OPN_RCVD, | ||
121 | PLINK_CNF_RCVD, | ||
122 | PLINK_ESTAB, | ||
123 | PLINK_HOLDING, | ||
124 | PLINK_BLOCKED | ||
67 | }; | 125 | }; |
68 | 126 | ||
69 | /** | 127 | /** |
70 | * struct sta_ampdu_mlme - STA aggregation information. | 128 | * struct sta_ampdu_mlme - STA aggregation information. |
71 | * | 129 | * |
72 | * @tid_agg_info_rx: aggregation info for Rx per TID | 130 | * @tid_state_rx: TID's state in Rx session state machine. |
131 | * @tid_rx: aggregation info for Rx per TID | ||
73 | * @ampdu_rx: for locking sections in aggregation Rx flow | 132 | * @ampdu_rx: for locking sections in aggregation Rx flow |
133 | * @tid_state_tx: TID's state in Tx session state machine. | ||
134 | * @tid_tx: aggregation info for Tx per TID | ||
135 | * @addba_req_num: number of times addBA request has been sent. | ||
136 | * @ampdu_tx: for locking sectionsi in aggregation Tx flow | ||
137 | * @dialog_token_allocator: dialog token enumerator for each new session; | ||
74 | */ | 138 | */ |
75 | struct sta_ampdu_mlme { | 139 | struct sta_ampdu_mlme { |
76 | struct tid_ampdu_rx tid_rx[STA_TID_NUM]; | 140 | /* rx */ |
141 | u8 tid_state_rx[STA_TID_NUM]; | ||
142 | struct tid_ampdu_rx *tid_rx[STA_TID_NUM]; | ||
77 | spinlock_t ampdu_rx; | 143 | spinlock_t ampdu_rx; |
144 | /* tx */ | ||
145 | u8 tid_state_tx[STA_TID_NUM]; | ||
146 | struct tid_ampdu_tx *tid_tx[STA_TID_NUM]; | ||
147 | u8 addba_req_num[STA_TID_NUM]; | ||
148 | spinlock_t ampdu_tx; | ||
149 | u8 dialog_token_allocator; | ||
78 | }; | 150 | }; |
79 | 151 | ||
152 | |||
153 | /* see __sta_info_unlink */ | ||
154 | #define STA_INFO_PIN_STAT_NORMAL 0 | ||
155 | #define STA_INFO_PIN_STAT_PINNED 1 | ||
156 | #define STA_INFO_PIN_STAT_DESTROY 2 | ||
157 | |||
158 | /** | ||
159 | * struct sta_info - STA information | ||
160 | * | ||
161 | * This structure collects information about a station that | ||
162 | * mac80211 is communicating with. | ||
163 | * | ||
164 | * @list: global linked list entry | ||
165 | * @hnext: hash table linked list pointer | ||
166 | * @local: pointer to the global information | ||
167 | * @addr: MAC address of this STA | ||
168 | * @aid: STA's unique AID (1..2007, 0 = not assigned yet), | ||
169 | * only used in AP (and IBSS?) mode | ||
170 | * @flags: STA flags, see &enum ieee80211_sta_info_flags | ||
171 | * @ps_tx_buf: buffer of frames to transmit to this station | ||
172 | * when it leaves power saving state | ||
173 | * @tx_filtered: buffer of frames we already tried to transmit | ||
174 | * but were filtered by hardware due to STA having entered | ||
175 | * power saving state | ||
176 | * @rx_packets: Number of MSDUs received from this STA | ||
177 | * @rx_bytes: Number of bytes received from this STA | ||
178 | * @supp_rates: Bitmap of supported rates (per band) | ||
179 | * @ht_info: HT capabilities of this STA | ||
180 | */ | ||
80 | struct sta_info { | 181 | struct sta_info { |
81 | struct kref kref; | 182 | /* General information, mostly static */ |
82 | struct list_head list; | 183 | struct list_head list; |
83 | struct sta_info *hnext; /* next entry in hash table list */ | 184 | struct sta_info *hnext; |
84 | |||
85 | struct ieee80211_local *local; | 185 | struct ieee80211_local *local; |
86 | 186 | struct ieee80211_sub_if_data *sdata; | |
87 | u8 addr[ETH_ALEN]; | ||
88 | u16 aid; /* STA's unique AID (1..2007), 0 = not yet assigned */ | ||
89 | u32 flags; /* WLAN_STA_ */ | ||
90 | |||
91 | struct sk_buff_head ps_tx_buf; /* buffer of TX frames for station in | ||
92 | * power saving state */ | ||
93 | int pspoll; /* whether STA has send a PS Poll frame */ | ||
94 | struct sk_buff_head tx_filtered; /* buffer of TX frames that were | ||
95 | * already given to low-level driver, | ||
96 | * but were filtered */ | ||
97 | int clear_dst_mask; | ||
98 | |||
99 | unsigned long rx_packets, tx_packets; /* number of RX/TX MSDUs */ | ||
100 | unsigned long rx_bytes, tx_bytes; | ||
101 | unsigned long tx_retry_failed, tx_retry_count; | ||
102 | unsigned long tx_filtered_count; | ||
103 | |||
104 | unsigned int wep_weak_iv_count; /* number of RX frames with weak IV */ | ||
105 | |||
106 | unsigned long last_rx; | ||
107 | u32 supp_rates; /* bitmap of supported rates in local->curr_rates */ | ||
108 | int txrate; /* index in local->curr_rates */ | ||
109 | int last_txrate; /* last rate used to send a frame to this STA */ | ||
110 | int last_nonerp_idx; | ||
111 | |||
112 | struct net_device *dev; /* which net device is this station associated | ||
113 | * to */ | ||
114 | |||
115 | struct ieee80211_key *key; | 187 | struct ieee80211_key *key; |
116 | |||
117 | u32 tx_num_consecutive_failures; | ||
118 | u32 tx_num_mpdu_ok; | ||
119 | u32 tx_num_mpdu_fail; | ||
120 | |||
121 | struct rate_control_ref *rate_ctrl; | 188 | struct rate_control_ref *rate_ctrl; |
122 | void *rate_ctrl_priv; | 189 | void *rate_ctrl_priv; |
190 | struct ieee80211_ht_info ht_info; | ||
191 | u64 supp_rates[IEEE80211_NUM_BANDS]; | ||
192 | u8 addr[ETH_ALEN]; | ||
193 | u16 aid; | ||
194 | u16 listen_interval; | ||
123 | 195 | ||
124 | /* last received seq/frag number from this STA (per RX queue) */ | 196 | /* |
125 | __le16 last_seq_ctrl[NUM_RX_DATA_QUEUES]; | 197 | * for use by the internal lifetime management, |
198 | * see __sta_info_unlink | ||
199 | */ | ||
200 | u8 pin_status; | ||
201 | |||
202 | /* frequently updated information, needs locking? */ | ||
203 | u32 flags; | ||
204 | |||
205 | /* | ||
206 | * STA powersave frame queues, no more than the internal | ||
207 | * locking required. | ||
208 | */ | ||
209 | struct sk_buff_head ps_tx_buf; | ||
210 | struct sk_buff_head tx_filtered; | ||
211 | |||
212 | /* Updated from RX path only, no locking requirements */ | ||
213 | unsigned long rx_packets, rx_bytes; | ||
214 | unsigned long wep_weak_iv_count; | ||
215 | unsigned long last_rx; | ||
126 | unsigned long num_duplicates; /* number of duplicate frames received | 216 | unsigned long num_duplicates; /* number of duplicate frames received |
127 | * from this STA */ | 217 | * from this STA */ |
128 | unsigned long tx_fragments; /* number of transmitted MPDUs */ | ||
129 | unsigned long rx_fragments; /* number of received MPDUs */ | 218 | unsigned long rx_fragments; /* number of received MPDUs */ |
130 | unsigned long rx_dropped; /* number of dropped MPDUs from this STA */ | 219 | unsigned long rx_dropped; /* number of dropped MPDUs from this STA */ |
131 | |||
132 | int last_rssi; /* RSSI of last received frame from this STA */ | 220 | int last_rssi; /* RSSI of last received frame from this STA */ |
133 | int last_signal; /* signal of last received frame from this STA */ | 221 | int last_signal; /* signal of last received frame from this STA */ |
134 | int last_noise; /* noise of last received frame from this STA */ | 222 | int last_noise; /* noise of last received frame from this STA */ |
135 | int last_ack_rssi[3]; /* RSSI of last received ACKs from this STA */ | 223 | /* last received seq/frag number from this STA (per RX queue) */ |
136 | unsigned long last_ack; | 224 | __le16 last_seq_ctrl[NUM_RX_DATA_QUEUES]; |
137 | int channel_use; | ||
138 | int channel_use_raw; | ||
139 | |||
140 | #ifdef CONFIG_MAC80211_DEBUG_COUNTERS | 225 | #ifdef CONFIG_MAC80211_DEBUG_COUNTERS |
141 | unsigned int wme_rx_queue[NUM_RX_DATA_QUEUES]; | 226 | unsigned int wme_rx_queue[NUM_RX_DATA_QUEUES]; |
227 | #endif | ||
228 | |||
229 | /* Updated from TX status path only, no locking requirements */ | ||
230 | unsigned long tx_filtered_count; | ||
231 | unsigned long tx_retry_failed, tx_retry_count; | ||
232 | /* TODO: update in generic code not rate control? */ | ||
233 | u32 tx_num_consecutive_failures; | ||
234 | u32 tx_num_mpdu_ok; | ||
235 | u32 tx_num_mpdu_fail; | ||
236 | /* moving percentage of failed MSDUs */ | ||
237 | unsigned int fail_avg; | ||
238 | |||
239 | /* Updated from TX path only, no locking requirements */ | ||
240 | unsigned long tx_packets; /* number of RX/TX MSDUs */ | ||
241 | unsigned long tx_bytes; | ||
242 | unsigned long tx_fragments; /* number of transmitted MPDUs */ | ||
243 | int txrate_idx; | ||
244 | int last_txrate_idx; | ||
245 | #ifdef CONFIG_MAC80211_DEBUG_COUNTERS | ||
142 | unsigned int wme_tx_queue[NUM_RX_DATA_QUEUES]; | 246 | unsigned int wme_tx_queue[NUM_RX_DATA_QUEUES]; |
143 | #endif /* CONFIG_MAC80211_DEBUG_COUNTERS */ | 247 | #endif |
144 | 248 | ||
145 | u16 listen_interval; | 249 | /* Debug counters, no locking doesn't matter */ |
250 | int channel_use; | ||
251 | int channel_use_raw; | ||
146 | 252 | ||
147 | struct ieee80211_ht_info ht_info; /* 802.11n HT capabilities | 253 | /* |
148 | of this STA */ | 254 | * Aggregation information, comes with own locking. |
255 | */ | ||
149 | struct sta_ampdu_mlme ampdu_mlme; | 256 | struct sta_ampdu_mlme ampdu_mlme; |
150 | u8 timer_to_tid[STA_TID_NUM]; /* convert timer id to tid */ | 257 | u8 timer_to_tid[STA_TID_NUM]; /* identity mapping to ID timers */ |
258 | u8 tid_to_tx_q[STA_TID_NUM]; /* map tid to tx queue */ | ||
259 | |||
260 | #ifdef CONFIG_MAC80211_MESH | ||
261 | /* | ||
262 | * Mesh peer link attributes | ||
263 | * TODO: move to a sub-structure that is referenced with pointer? | ||
264 | */ | ||
265 | __le16 llid; /* Local link ID */ | ||
266 | __le16 plid; /* Peer link ID */ | ||
267 | __le16 reason; /* Cancel reason on PLINK_HOLDING state */ | ||
268 | u8 plink_retries; /* Retries in establishment */ | ||
269 | bool ignore_plink_timer; | ||
270 | enum plink_state plink_state; | ||
271 | u32 plink_timeout; | ||
272 | struct timer_list plink_timer; | ||
273 | spinlock_t plink_lock; /* For peer_state reads / updates and other | ||
274 | updates in the structure. Ensures robust | ||
275 | transitions for the peerlink FSM */ | ||
276 | #endif | ||
151 | 277 | ||
152 | #ifdef CONFIG_MAC80211_DEBUGFS | 278 | #ifdef CONFIG_MAC80211_DEBUGFS |
153 | struct sta_info_debugfsdentries { | 279 | struct sta_info_debugfsdentries { |
154 | struct dentry *dir; | 280 | struct dentry *dir; |
155 | struct dentry *flags; | 281 | struct dentry *flags; |
156 | struct dentry *num_ps_buf_frames; | 282 | struct dentry *num_ps_buf_frames; |
157 | struct dentry *last_ack_rssi; | ||
158 | struct dentry *last_ack_ms; | ||
159 | struct dentry *inactive_ms; | 283 | struct dentry *inactive_ms; |
160 | struct dentry *last_seq_ctrl; | 284 | struct dentry *last_seq_ctrl; |
161 | #ifdef CONFIG_MAC80211_DEBUG_COUNTERS | 285 | #ifdef CONFIG_MAC80211_DEBUG_COUNTERS |
162 | struct dentry *wme_rx_queue; | 286 | struct dentry *wme_rx_queue; |
163 | struct dentry *wme_tx_queue; | 287 | struct dentry *wme_tx_queue; |
164 | #endif | 288 | #endif |
289 | struct dentry *agg_status; | ||
165 | } debugfs; | 290 | } debugfs; |
166 | #endif | 291 | #endif |
167 | }; | 292 | }; |
168 | 293 | ||
294 | static inline enum plink_state sta_plink_state(struct sta_info *sta) | ||
295 | { | ||
296 | #ifdef CONFIG_MAC80211_MESH | ||
297 | return sta->plink_state; | ||
298 | #endif | ||
299 | return PLINK_LISTEN; | ||
300 | } | ||
301 | |||
169 | 302 | ||
170 | /* Maximum number of concurrently registered stations */ | 303 | /* Maximum number of concurrently registered stations */ |
171 | #define MAX_STA_COUNT 2007 | 304 | #define MAX_STA_COUNT 2007 |
@@ -185,22 +318,46 @@ struct sta_info { | |||
185 | */ | 318 | */ |
186 | #define STA_INFO_CLEANUP_INTERVAL (10 * HZ) | 319 | #define STA_INFO_CLEANUP_INTERVAL (10 * HZ) |
187 | 320 | ||
188 | static inline void __sta_info_get(struct sta_info *sta) | 321 | /* |
189 | { | 322 | * Get a STA info, must have be under RCU read lock. |
190 | kref_get(&sta->kref); | 323 | */ |
191 | } | 324 | struct sta_info *sta_info_get(struct ieee80211_local *local, u8 *addr); |
325 | /* | ||
326 | * Get STA info by index, BROKEN! | ||
327 | */ | ||
328 | struct sta_info *sta_info_get_by_idx(struct ieee80211_local *local, int idx, | ||
329 | struct net_device *dev); | ||
330 | /* | ||
331 | * Create a new STA info, caller owns returned structure | ||
332 | * until sta_info_insert(). | ||
333 | */ | ||
334 | struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata, | ||
335 | u8 *addr, gfp_t gfp); | ||
336 | /* | ||
337 | * Insert STA info into hash table/list, returns zero or a | ||
338 | * -EEXIST if (if the same MAC address is already present). | ||
339 | * | ||
340 | * Calling this without RCU protection makes the caller | ||
341 | * relinquish its reference to @sta. | ||
342 | */ | ||
343 | int sta_info_insert(struct sta_info *sta); | ||
344 | /* | ||
345 | * Unlink a STA info from the hash table/list. | ||
346 | * This can NULL the STA pointer if somebody else | ||
347 | * has already unlinked it. | ||
348 | */ | ||
349 | void sta_info_unlink(struct sta_info **sta); | ||
350 | void __sta_info_unlink(struct sta_info **sta); | ||
351 | |||
352 | void sta_info_destroy(struct sta_info *sta); | ||
353 | void sta_info_set_tim_bit(struct sta_info *sta); | ||
354 | void sta_info_clear_tim_bit(struct sta_info *sta); | ||
192 | 355 | ||
193 | struct sta_info * sta_info_get(struct ieee80211_local *local, u8 *addr); | ||
194 | int sta_info_min_txrate_get(struct ieee80211_local *local); | ||
195 | void sta_info_put(struct sta_info *sta); | ||
196 | struct sta_info * sta_info_add(struct ieee80211_local *local, | ||
197 | struct net_device *dev, u8 *addr, gfp_t gfp); | ||
198 | void sta_info_remove(struct sta_info *sta); | ||
199 | void sta_info_free(struct sta_info *sta); | ||
200 | void sta_info_init(struct ieee80211_local *local); | 356 | void sta_info_init(struct ieee80211_local *local); |
201 | int sta_info_start(struct ieee80211_local *local); | 357 | int sta_info_start(struct ieee80211_local *local); |
202 | void sta_info_stop(struct ieee80211_local *local); | 358 | void sta_info_stop(struct ieee80211_local *local); |
203 | void sta_info_remove_aid_ptr(struct sta_info *sta); | 359 | int sta_info_flush(struct ieee80211_local *local, |
204 | void sta_info_flush(struct ieee80211_local *local, struct net_device *dev); | 360 | struct ieee80211_sub_if_data *sdata); |
361 | void sta_info_flush_delayed(struct ieee80211_sub_if_data *sdata); | ||
205 | 362 | ||
206 | #endif /* STA_INFO_H */ | 363 | #endif /* STA_INFO_H */ |