diff options
-rw-r--r-- | net/mac80211/debugfs_netdev.c | 9 | ||||
-rw-r--r-- | net/mac80211/debugfs_sta.c | 1 | ||||
-rw-r--r-- | net/mac80211/ieee80211_i.h | 32 | ||||
-rw-r--r-- | net/mac80211/rx.c | 62 | ||||
-rw-r--r-- | net/mac80211/sta_info.h | 4 | ||||
-rw-r--r-- | net/mac80211/tx.c | 73 |
6 files changed, 12 insertions, 169 deletions
diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c index 3ae5493d728b..b2089b2da48a 100644 --- a/net/mac80211/debugfs_netdev.c +++ b/net/mac80211/debugfs_netdev.c | |||
@@ -155,7 +155,6 @@ static const struct file_operations name##_ops = { \ | |||
155 | __IEEE80211_IF_WFILE(name) | 155 | __IEEE80211_IF_WFILE(name) |
156 | 156 | ||
157 | /* common attributes */ | 157 | /* common attributes */ |
158 | IEEE80211_IF_FILE(channel_use, channel_use, DEC); | ||
159 | IEEE80211_IF_FILE(drop_unencrypted, drop_unencrypted, DEC); | 158 | IEEE80211_IF_FILE(drop_unencrypted, drop_unencrypted, DEC); |
160 | 159 | ||
161 | /* STA/IBSS attributes */ | 160 | /* STA/IBSS attributes */ |
@@ -248,7 +247,6 @@ IEEE80211_IF_WFILE(min_discovery_timeout, | |||
248 | 247 | ||
249 | static void add_sta_files(struct ieee80211_sub_if_data *sdata) | 248 | static void add_sta_files(struct ieee80211_sub_if_data *sdata) |
250 | { | 249 | { |
251 | DEBUGFS_ADD(channel_use, sta); | ||
252 | DEBUGFS_ADD(drop_unencrypted, sta); | 250 | DEBUGFS_ADD(drop_unencrypted, sta); |
253 | DEBUGFS_ADD(state, sta); | 251 | DEBUGFS_ADD(state, sta); |
254 | DEBUGFS_ADD(bssid, sta); | 252 | DEBUGFS_ADD(bssid, sta); |
@@ -269,7 +267,6 @@ static void add_sta_files(struct ieee80211_sub_if_data *sdata) | |||
269 | 267 | ||
270 | static void add_ap_files(struct ieee80211_sub_if_data *sdata) | 268 | static void add_ap_files(struct ieee80211_sub_if_data *sdata) |
271 | { | 269 | { |
272 | DEBUGFS_ADD(channel_use, ap); | ||
273 | DEBUGFS_ADD(drop_unencrypted, ap); | 270 | DEBUGFS_ADD(drop_unencrypted, ap); |
274 | DEBUGFS_ADD(num_sta_ps, ap); | 271 | DEBUGFS_ADD(num_sta_ps, ap); |
275 | DEBUGFS_ADD(dtim_count, ap); | 272 | DEBUGFS_ADD(dtim_count, ap); |
@@ -281,14 +278,12 @@ static void add_ap_files(struct ieee80211_sub_if_data *sdata) | |||
281 | 278 | ||
282 | static void add_wds_files(struct ieee80211_sub_if_data *sdata) | 279 | static void add_wds_files(struct ieee80211_sub_if_data *sdata) |
283 | { | 280 | { |
284 | DEBUGFS_ADD(channel_use, wds); | ||
285 | DEBUGFS_ADD(drop_unencrypted, wds); | 281 | DEBUGFS_ADD(drop_unencrypted, wds); |
286 | DEBUGFS_ADD(peer, wds); | 282 | DEBUGFS_ADD(peer, wds); |
287 | } | 283 | } |
288 | 284 | ||
289 | static void add_vlan_files(struct ieee80211_sub_if_data *sdata) | 285 | static void add_vlan_files(struct ieee80211_sub_if_data *sdata) |
290 | { | 286 | { |
291 | DEBUGFS_ADD(channel_use, vlan); | ||
292 | DEBUGFS_ADD(drop_unencrypted, vlan); | 287 | DEBUGFS_ADD(drop_unencrypted, vlan); |
293 | } | 288 | } |
294 | 289 | ||
@@ -376,7 +371,6 @@ static void add_files(struct ieee80211_sub_if_data *sdata) | |||
376 | 371 | ||
377 | static void del_sta_files(struct ieee80211_sub_if_data *sdata) | 372 | static void del_sta_files(struct ieee80211_sub_if_data *sdata) |
378 | { | 373 | { |
379 | DEBUGFS_DEL(channel_use, sta); | ||
380 | DEBUGFS_DEL(drop_unencrypted, sta); | 374 | DEBUGFS_DEL(drop_unencrypted, sta); |
381 | DEBUGFS_DEL(state, sta); | 375 | DEBUGFS_DEL(state, sta); |
382 | DEBUGFS_DEL(bssid, sta); | 376 | DEBUGFS_DEL(bssid, sta); |
@@ -397,7 +391,6 @@ static void del_sta_files(struct ieee80211_sub_if_data *sdata) | |||
397 | 391 | ||
398 | static void del_ap_files(struct ieee80211_sub_if_data *sdata) | 392 | static void del_ap_files(struct ieee80211_sub_if_data *sdata) |
399 | { | 393 | { |
400 | DEBUGFS_DEL(channel_use, ap); | ||
401 | DEBUGFS_DEL(drop_unencrypted, ap); | 394 | DEBUGFS_DEL(drop_unencrypted, ap); |
402 | DEBUGFS_DEL(num_sta_ps, ap); | 395 | DEBUGFS_DEL(num_sta_ps, ap); |
403 | DEBUGFS_DEL(dtim_count, ap); | 396 | DEBUGFS_DEL(dtim_count, ap); |
@@ -409,14 +402,12 @@ static void del_ap_files(struct ieee80211_sub_if_data *sdata) | |||
409 | 402 | ||
410 | static void del_wds_files(struct ieee80211_sub_if_data *sdata) | 403 | static void del_wds_files(struct ieee80211_sub_if_data *sdata) |
411 | { | 404 | { |
412 | DEBUGFS_DEL(channel_use, wds); | ||
413 | DEBUGFS_DEL(drop_unencrypted, wds); | 405 | DEBUGFS_DEL(drop_unencrypted, wds); |
414 | DEBUGFS_DEL(peer, wds); | 406 | DEBUGFS_DEL(peer, wds); |
415 | } | 407 | } |
416 | 408 | ||
417 | static void del_vlan_files(struct ieee80211_sub_if_data *sdata) | 409 | static void del_vlan_files(struct ieee80211_sub_if_data *sdata) |
418 | { | 410 | { |
419 | DEBUGFS_DEL(channel_use, vlan); | ||
420 | DEBUGFS_DEL(drop_unencrypted, vlan); | 411 | DEBUGFS_DEL(drop_unencrypted, vlan); |
421 | } | 412 | } |
422 | 413 | ||
diff --git a/net/mac80211/debugfs_sta.c b/net/mac80211/debugfs_sta.c index a2cc0284c9d0..79a062782d52 100644 --- a/net/mac80211/debugfs_sta.c +++ b/net/mac80211/debugfs_sta.c | |||
@@ -66,7 +66,6 @@ STA_FILE(tx_retry_count, tx_retry_count, LU); | |||
66 | STA_FILE(last_signal, last_signal, D); | 66 | STA_FILE(last_signal, last_signal, D); |
67 | STA_FILE(last_qual, last_qual, D); | 67 | STA_FILE(last_qual, last_qual, D); |
68 | STA_FILE(last_noise, last_noise, D); | 68 | STA_FILE(last_noise, last_noise, D); |
69 | STA_FILE(channel_use, channel_use, D); | ||
70 | STA_FILE(wep_weak_iv_count, wep_weak_iv_count, LU); | 69 | STA_FILE(wep_weak_iv_count, wep_weak_iv_count, LU); |
71 | 70 | ||
72 | static ssize_t sta_flags_read(struct file *file, char __user *userbuf, | 71 | static ssize_t sta_flags_read(struct file *file, char __user *userbuf, |
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index 7d614cdcefcb..3f8601cafffb 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
@@ -201,7 +201,6 @@ struct ieee80211_rx_data { | |||
201 | unsigned int flags; | 201 | unsigned int flags; |
202 | int sent_ps_buffered; | 202 | int sent_ps_buffered; |
203 | int queue; | 203 | int queue; |
204 | int load; | ||
205 | u32 tkip_iv32; | 204 | u32 tkip_iv32; |
206 | u16 tkip_iv16; | 205 | u16 tkip_iv16; |
207 | }; | 206 | }; |
@@ -448,14 +447,11 @@ struct ieee80211_sub_if_data { | |||
448 | struct ieee80211_if_sta sta; | 447 | struct ieee80211_if_sta sta; |
449 | u32 mntr_flags; | 448 | u32 mntr_flags; |
450 | } u; | 449 | } u; |
451 | int channel_use; | ||
452 | int channel_use_raw; | ||
453 | 450 | ||
454 | #ifdef CONFIG_MAC80211_DEBUGFS | 451 | #ifdef CONFIG_MAC80211_DEBUGFS |
455 | struct dentry *debugfsdir; | 452 | struct dentry *debugfsdir; |
456 | union { | 453 | union { |
457 | struct { | 454 | struct { |
458 | struct dentry *channel_use; | ||
459 | struct dentry *drop_unencrypted; | 455 | struct dentry *drop_unencrypted; |
460 | struct dentry *state; | 456 | struct dentry *state; |
461 | struct dentry *bssid; | 457 | struct dentry *bssid; |
@@ -474,7 +470,6 @@ struct ieee80211_sub_if_data { | |||
474 | struct dentry *num_beacons_sta; | 470 | struct dentry *num_beacons_sta; |
475 | } sta; | 471 | } sta; |
476 | struct { | 472 | struct { |
477 | struct dentry *channel_use; | ||
478 | struct dentry *drop_unencrypted; | 473 | struct dentry *drop_unencrypted; |
479 | struct dentry *num_sta_ps; | 474 | struct dentry *num_sta_ps; |
480 | struct dentry *dtim_count; | 475 | struct dentry *dtim_count; |
@@ -484,12 +479,10 @@ struct ieee80211_sub_if_data { | |||
484 | struct dentry *num_buffered_multicast; | 479 | struct dentry *num_buffered_multicast; |
485 | } ap; | 480 | } ap; |
486 | struct { | 481 | struct { |
487 | struct dentry *channel_use; | ||
488 | struct dentry *drop_unencrypted; | 482 | struct dentry *drop_unencrypted; |
489 | struct dentry *peer; | 483 | struct dentry *peer; |
490 | } wds; | 484 | } wds; |
491 | struct { | 485 | struct { |
492 | struct dentry *channel_use; | ||
493 | struct dentry *drop_unencrypted; | 486 | struct dentry *drop_unencrypted; |
494 | } vlan; | 487 | } vlan; |
495 | struct { | 488 | struct { |
@@ -661,9 +654,6 @@ struct ieee80211_local { | |||
661 | assoc_led_name[32], radio_led_name[32]; | 654 | assoc_led_name[32], radio_led_name[32]; |
662 | #endif | 655 | #endif |
663 | 656 | ||
664 | u32 channel_use; | ||
665 | u32 channel_use_raw; | ||
666 | |||
667 | #ifdef CONFIG_MAC80211_DEBUGFS | 657 | #ifdef CONFIG_MAC80211_DEBUGFS |
668 | struct work_struct sta_debugfs_add; | 658 | struct work_struct sta_debugfs_add; |
669 | #endif | 659 | #endif |
@@ -861,28 +851,6 @@ u32 ieee80211_handle_ht(struct ieee80211_local *local, int enable_ht, | |||
861 | 851 | ||
862 | /* ieee80211_ioctl.c */ | 852 | /* ieee80211_ioctl.c */ |
863 | extern const struct iw_handler_def ieee80211_iw_handler_def; | 853 | extern const struct iw_handler_def ieee80211_iw_handler_def; |
864 | |||
865 | |||
866 | /* Least common multiple of the used rates (in 100 kbps). This is used to | ||
867 | * calculate rate_inv values for each rate so that only integers are needed. */ | ||
868 | #define CHAN_UTIL_RATE_LCM 95040 | ||
869 | /* 1 usec is 1/8 * (95040/10) = 1188 */ | ||
870 | #define CHAN_UTIL_PER_USEC 1188 | ||
871 | /* Amount of bits to shift the result right to scale the total utilization | ||
872 | * to values that will not wrap around 32-bit integers. */ | ||
873 | #define CHAN_UTIL_SHIFT 9 | ||
874 | /* Theoretical maximum of channel utilization counter in 10 ms (stat_time=1): | ||
875 | * (CHAN_UTIL_PER_USEC * 10000) >> CHAN_UTIL_SHIFT = 23203. So dividing the | ||
876 | * raw value with about 23 should give utilization in 10th of a percentage | ||
877 | * (1/1000). However, utilization is only estimated and not all intervals | ||
878 | * between frames etc. are calculated. 18 seems to give numbers that are closer | ||
879 | * to the real maximum. */ | ||
880 | #define CHAN_UTIL_PER_10MS 18 | ||
881 | #define CHAN_UTIL_HDR_LONG (202 * CHAN_UTIL_PER_USEC) | ||
882 | #define CHAN_UTIL_HDR_SHORT (40 * CHAN_UTIL_PER_USEC) | ||
883 | |||
884 | |||
885 | /* ieee80211_ioctl.c */ | ||
886 | int ieee80211_set_freq(struct ieee80211_local *local, int freq); | 854 | int ieee80211_set_freq(struct ieee80211_local *local, int freq); |
887 | /* ieee80211_sta.c */ | 855 | /* ieee80211_sta.c */ |
888 | void ieee80211_sta_timer(unsigned long data); | 856 | void ieee80211_sta_timer(unsigned long data); |
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index cf0de3b0fe24..9400a9766a77 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -387,51 +387,9 @@ static void ieee80211_verify_ip_alignment(struct ieee80211_rx_data *rx) | |||
387 | } | 387 | } |
388 | 388 | ||
389 | 389 | ||
390 | static u32 ieee80211_rx_load_stats(struct ieee80211_local *local, | ||
391 | struct sk_buff *skb, | ||
392 | struct ieee80211_rx_status *status, | ||
393 | struct ieee80211_rate *rate) | ||
394 | { | ||
395 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; | ||
396 | u32 load = 0, hdrtime; | ||
397 | |||
398 | /* Estimate total channel use caused by this frame */ | ||
399 | |||
400 | /* 1 bit at 1 Mbit/s takes 1 usec; in channel_use values, | ||
401 | * 1 usec = 1/8 * (1080 / 10) = 13.5 */ | ||
402 | |||
403 | if (status->band == IEEE80211_BAND_5GHZ || | ||
404 | (status->band == IEEE80211_BAND_5GHZ && | ||
405 | rate->flags & IEEE80211_RATE_ERP_G)) | ||
406 | hdrtime = CHAN_UTIL_HDR_SHORT; | ||
407 | else | ||
408 | hdrtime = CHAN_UTIL_HDR_LONG; | ||
409 | |||
410 | load = hdrtime; | ||
411 | if (!is_multicast_ether_addr(hdr->addr1)) | ||
412 | load += hdrtime; | ||
413 | |||
414 | /* TODO: optimise again */ | ||
415 | load += skb->len * CHAN_UTIL_RATE_LCM / rate->bitrate; | ||
416 | |||
417 | /* Divide channel_use by 8 to avoid wrapping around the counter */ | ||
418 | load >>= CHAN_UTIL_SHIFT; | ||
419 | |||
420 | return load; | ||
421 | } | ||
422 | |||
423 | /* rx handlers */ | 390 | /* rx handlers */ |
424 | 391 | ||
425 | static ieee80211_rx_result | 392 | static ieee80211_rx_result |
426 | ieee80211_rx_h_if_stats(struct ieee80211_rx_data *rx) | ||
427 | { | ||
428 | if (rx->sta) | ||
429 | rx->sta->channel_use_raw += rx->load; | ||
430 | rx->sdata->channel_use_raw += rx->load; | ||
431 | return RX_CONTINUE; | ||
432 | } | ||
433 | |||
434 | static ieee80211_rx_result | ||
435 | ieee80211_rx_h_passive_scan(struct ieee80211_rx_data *rx) | 393 | ieee80211_rx_h_passive_scan(struct ieee80211_rx_data *rx) |
436 | { | 394 | { |
437 | struct ieee80211_local *local = rx->local; | 395 | struct ieee80211_local *local = rx->local; |
@@ -1780,7 +1738,6 @@ static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx) | |||
1780 | typedef ieee80211_rx_result (*ieee80211_rx_handler)(struct ieee80211_rx_data *); | 1738 | typedef ieee80211_rx_result (*ieee80211_rx_handler)(struct ieee80211_rx_data *); |
1781 | static ieee80211_rx_handler ieee80211_rx_handlers[] = | 1739 | static ieee80211_rx_handler ieee80211_rx_handlers[] = |
1782 | { | 1740 | { |
1783 | ieee80211_rx_h_if_stats, | ||
1784 | ieee80211_rx_h_passive_scan, | 1741 | ieee80211_rx_h_passive_scan, |
1785 | ieee80211_rx_h_check, | 1742 | ieee80211_rx_h_check, |
1786 | ieee80211_rx_h_decrypt, | 1743 | ieee80211_rx_h_decrypt, |
@@ -1939,7 +1896,6 @@ static int prepare_for_handlers(struct ieee80211_sub_if_data *sdata, | |||
1939 | static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw, | 1896 | static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw, |
1940 | struct sk_buff *skb, | 1897 | struct sk_buff *skb, |
1941 | struct ieee80211_rx_status *status, | 1898 | struct ieee80211_rx_status *status, |
1942 | u32 load, | ||
1943 | struct ieee80211_rate *rate) | 1899 | struct ieee80211_rate *rate) |
1944 | { | 1900 | { |
1945 | struct ieee80211_local *local = hw_to_local(hw); | 1901 | struct ieee80211_local *local = hw_to_local(hw); |
@@ -1958,7 +1914,6 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw, | |||
1958 | rx.local = local; | 1914 | rx.local = local; |
1959 | 1915 | ||
1960 | rx.status = status; | 1916 | rx.status = status; |
1961 | rx.load = load; | ||
1962 | rx.rate = rate; | 1917 | rx.rate = rate; |
1963 | rx.fc = le16_to_cpu(hdr->frame_control); | 1918 | rx.fc = le16_to_cpu(hdr->frame_control); |
1964 | type = rx.fc & IEEE80211_FCTL_FTYPE; | 1919 | type = rx.fc & IEEE80211_FCTL_FTYPE; |
@@ -2067,7 +2022,6 @@ u8 ieee80211_sta_manage_reorder_buf(struct ieee80211_hw *hw, | |||
2067 | struct ieee80211_rx_status status; | 2022 | struct ieee80211_rx_status status; |
2068 | u16 head_seq_num, buf_size; | 2023 | u16 head_seq_num, buf_size; |
2069 | int index; | 2024 | int index; |
2070 | u32 pkt_load; | ||
2071 | struct ieee80211_supported_band *sband; | 2025 | struct ieee80211_supported_band *sband; |
2072 | struct ieee80211_rate *rate; | 2026 | struct ieee80211_rate *rate; |
2073 | 2027 | ||
@@ -2102,12 +2056,9 @@ u8 ieee80211_sta_manage_reorder_buf(struct ieee80211_hw *hw, | |||
2102 | sizeof(status)); | 2056 | sizeof(status)); |
2103 | sband = local->hw.wiphy->bands[status.band]; | 2057 | sband = local->hw.wiphy->bands[status.band]; |
2104 | rate = &sband->bitrates[status.rate_idx]; | 2058 | rate = &sband->bitrates[status.rate_idx]; |
2105 | pkt_load = ieee80211_rx_load_stats(local, | ||
2106 | tid_agg_rx->reorder_buf[index], | ||
2107 | &status, rate); | ||
2108 | __ieee80211_rx_handle_packet(hw, | 2059 | __ieee80211_rx_handle_packet(hw, |
2109 | tid_agg_rx->reorder_buf[index], | 2060 | tid_agg_rx->reorder_buf[index], |
2110 | &status, pkt_load, rate); | 2061 | &status, rate); |
2111 | tid_agg_rx->stored_mpdu_num--; | 2062 | tid_agg_rx->stored_mpdu_num--; |
2112 | tid_agg_rx->reorder_buf[index] = NULL; | 2063 | tid_agg_rx->reorder_buf[index] = NULL; |
2113 | } | 2064 | } |
@@ -2149,11 +2100,8 @@ u8 ieee80211_sta_manage_reorder_buf(struct ieee80211_hw *hw, | |||
2149 | sizeof(status)); | 2100 | sizeof(status)); |
2150 | sband = local->hw.wiphy->bands[status.band]; | 2101 | sband = local->hw.wiphy->bands[status.band]; |
2151 | rate = &sband->bitrates[status.rate_idx]; | 2102 | rate = &sband->bitrates[status.rate_idx]; |
2152 | pkt_load = ieee80211_rx_load_stats(local, | ||
2153 | tid_agg_rx->reorder_buf[index], | ||
2154 | &status, rate); | ||
2155 | __ieee80211_rx_handle_packet(hw, tid_agg_rx->reorder_buf[index], | 2103 | __ieee80211_rx_handle_packet(hw, tid_agg_rx->reorder_buf[index], |
2156 | &status, pkt_load, rate); | 2104 | &status, rate); |
2157 | tid_agg_rx->stored_mpdu_num--; | 2105 | tid_agg_rx->stored_mpdu_num--; |
2158 | tid_agg_rx->reorder_buf[index] = NULL; | 2106 | tid_agg_rx->reorder_buf[index] = NULL; |
2159 | tid_agg_rx->head_seq_num = seq_inc(tid_agg_rx->head_seq_num); | 2107 | tid_agg_rx->head_seq_num = seq_inc(tid_agg_rx->head_seq_num); |
@@ -2232,7 +2180,6 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, | |||
2232 | struct ieee80211_rx_status *status) | 2180 | struct ieee80211_rx_status *status) |
2233 | { | 2181 | { |
2234 | struct ieee80211_local *local = hw_to_local(hw); | 2182 | struct ieee80211_local *local = hw_to_local(hw); |
2235 | u32 pkt_load; | ||
2236 | struct ieee80211_rate *rate = NULL; | 2183 | struct ieee80211_rate *rate = NULL; |
2237 | struct ieee80211_supported_band *sband; | 2184 | struct ieee80211_supported_band *sband; |
2238 | 2185 | ||
@@ -2272,11 +2219,8 @@ void __ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb, | |||
2272 | return; | 2219 | return; |
2273 | } | 2220 | } |
2274 | 2221 | ||
2275 | pkt_load = ieee80211_rx_load_stats(local, skb, status, rate); | ||
2276 | local->channel_use_raw += pkt_load; | ||
2277 | |||
2278 | if (!ieee80211_rx_reorder_ampdu(local, skb)) | 2222 | if (!ieee80211_rx_reorder_ampdu(local, skb)) |
2279 | __ieee80211_rx_handle_packet(hw, skb, status, pkt_load, rate); | 2223 | __ieee80211_rx_handle_packet(hw, skb, status, rate); |
2280 | 2224 | ||
2281 | rcu_read_unlock(); | 2225 | rcu_read_unlock(); |
2282 | } | 2226 | } |
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h index f592290e42b9..95753f860acf 100644 --- a/net/mac80211/sta_info.h +++ b/net/mac80211/sta_info.h | |||
@@ -245,10 +245,6 @@ struct sta_info { | |||
245 | unsigned int wme_tx_queue[NUM_RX_DATA_QUEUES]; | 245 | unsigned int wme_tx_queue[NUM_RX_DATA_QUEUES]; |
246 | #endif | 246 | #endif |
247 | 247 | ||
248 | /* Debug counters, no locking doesn't matter */ | ||
249 | int channel_use; | ||
250 | int channel_use_raw; | ||
251 | |||
252 | /* | 248 | /* |
253 | * Aggregation information, locked with lock. | 249 | * Aggregation information, locked with lock. |
254 | */ | 250 | */ |
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 9273651d3d7c..baa1be0671e5 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
@@ -761,73 +761,18 @@ ieee80211_tx_h_encrypt(struct ieee80211_tx_data *tx) | |||
761 | static ieee80211_tx_result | 761 | static ieee80211_tx_result |
762 | ieee80211_tx_h_stats(struct ieee80211_tx_data *tx) | 762 | ieee80211_tx_h_stats(struct ieee80211_tx_data *tx) |
763 | { | 763 | { |
764 | struct ieee80211_local *local = tx->local; | 764 | int i; |
765 | struct sk_buff *skb = tx->skb; | ||
766 | struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; | ||
767 | u32 load = 0, hdrtime; | ||
768 | struct ieee80211_rate *rate; | ||
769 | struct ieee80211_supported_band *sband; | ||
770 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); | ||
771 | |||
772 | sband = tx->local->hw.wiphy->bands[tx->channel->band]; | ||
773 | rate = &sband->bitrates[tx->rate_idx]; | ||
774 | |||
775 | /* TODO: this could be part of tx_status handling, so that the number | ||
776 | * of retries would be known; TX rate should in that case be stored | ||
777 | * somewhere with the packet */ | ||
778 | |||
779 | /* Estimate total channel use caused by this frame */ | ||
780 | |||
781 | /* 1 bit at 1 Mbit/s takes 1 usec; in channel_use values, | ||
782 | * 1 usec = 1/8 * (1080 / 10) = 13.5 */ | ||
783 | |||
784 | if (tx->channel->band == IEEE80211_BAND_5GHZ || | ||
785 | (tx->channel->band == IEEE80211_BAND_2GHZ && | ||
786 | rate->flags & IEEE80211_RATE_ERP_G)) | ||
787 | hdrtime = CHAN_UTIL_HDR_SHORT; | ||
788 | else | ||
789 | hdrtime = CHAN_UTIL_HDR_LONG; | ||
790 | |||
791 | load = hdrtime; | ||
792 | if (!is_multicast_ether_addr(hdr->addr1)) | ||
793 | load += hdrtime; | ||
794 | |||
795 | if (info->flags & IEEE80211_TX_CTL_USE_RTS_CTS) | ||
796 | load += 2 * hdrtime; | ||
797 | else if (info->flags & IEEE80211_TX_CTL_USE_CTS_PROTECT) | ||
798 | load += hdrtime; | ||
799 | 765 | ||
800 | /* TODO: optimise again */ | 766 | if (!tx->sta) |
801 | load += skb->len * CHAN_UTIL_RATE_LCM / rate->bitrate; | 767 | return TX_CONTINUE; |
802 | 768 | ||
769 | tx->sta->tx_packets++; | ||
770 | tx->sta->tx_fragments++; | ||
771 | tx->sta->tx_bytes += tx->skb->len; | ||
803 | if (tx->extra_frag) { | 772 | if (tx->extra_frag) { |
804 | int i; | 773 | tx->sta->tx_fragments += tx->num_extra_frag; |
805 | for (i = 0; i < tx->num_extra_frag; i++) { | 774 | for (i = 0; i < tx->num_extra_frag; i++) |
806 | load += 2 * hdrtime; | 775 | tx->sta->tx_bytes += tx->extra_frag[i]->len; |
807 | load += tx->extra_frag[i]->len * | ||
808 | rate->bitrate; | ||
809 | } | ||
810 | } | ||
811 | |||
812 | /* Divide channel_use by 8 to avoid wrapping around the counter */ | ||
813 | load >>= CHAN_UTIL_SHIFT; | ||
814 | local->channel_use_raw += load; | ||
815 | if (tx->sta) | ||
816 | tx->sta->channel_use_raw += load; | ||
817 | tx->sdata->channel_use_raw += load; | ||
818 | |||
819 | if (tx->sta) { | ||
820 | tx->sta->tx_packets++; | ||
821 | tx->sta->tx_fragments++; | ||
822 | tx->sta->tx_bytes += tx->skb->len; | ||
823 | if (tx->extra_frag) { | ||
824 | int i; | ||
825 | tx->sta->tx_fragments += tx->num_extra_frag; | ||
826 | for (i = 0; i < tx->num_extra_frag; i++) { | ||
827 | tx->sta->tx_bytes += | ||
828 | tx->extra_frag[i]->len; | ||
829 | } | ||
830 | } | ||
831 | } | 776 | } |
832 | 777 | ||
833 | return TX_CONTINUE; | 778 | return TX_CONTINUE; |