aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2015-01-14 09:54:18 -0500
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2015-01-22 10:54:07 -0500
commitd19ac5897163aacb9d485a435f4d98f6fb209d77 (patch)
tree68c350e89f1eccb8d5bf5c661e9671b284927b85
parent75e52472add9bb6aa219c491103d240c899cf432 (diff)
iwlwifi: mvm: move statistics API to new header file
Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/fw-api-stats.h277
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/fw-api.h209
2 files changed, 278 insertions, 208 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api-stats.h b/drivers/net/wireless/iwlwifi/mvm/fw-api-stats.h
new file mode 100644
index 000000000000..bda3a3691f20
--- /dev/null
+++ b/drivers/net/wireless/iwlwifi/mvm/fw-api-stats.h
@@ -0,0 +1,277 @@
1/******************************************************************************
2 *
3 * This file is provided under a dual BSD/GPLv2 license. When using or
4 * redistributing this file, you may do so under either license.
5 *
6 * GPL LICENSE SUMMARY
7 *
8 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
9 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of version 2 of the GNU General Public License as
13 * published by the Free Software Foundation.
14 *
15 * This program is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
23 * USA
24 *
25 * The full GNU General Public License is included in this distribution
26 * in the file called COPYING.
27 *
28 * Contact Information:
29 * Intel Linux Wireless <ilw@linux.intel.com>
30 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
31 *
32 * BSD LICENSE
33 *
34 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
35 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
36 * All rights reserved.
37 *
38 * Redistribution and use in source and binary forms, with or without
39 * modification, are permitted provided that the following conditions
40 * are met:
41 *
42 * * Redistributions of source code must retain the above copyright
43 * notice, this list of conditions and the following disclaimer.
44 * * Redistributions in binary form must reproduce the above copyright
45 * notice, this list of conditions and the following disclaimer in
46 * the documentation and/or other materials provided with the
47 * distribution.
48 * * Neither the name Intel Corporation nor the names of its
49 * contributors may be used to endorse or promote products derived
50 * from this software without specific prior written permission.
51 *
52 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
53 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
54 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
55 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
56 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
57 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
58 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
59 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
60 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
61 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
62 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
63 *
64 *****************************************************************************/
65
66#ifndef __fw_api_stats_h__
67#define __fw_api_stats_h__
68
69struct mvm_statistics_dbg {
70 __le32 burst_check;
71 __le32 burst_count;
72 __le32 wait_for_silence_timeout_cnt;
73 __le32 reserved[3];
74} __packed; /* STATISTICS_DEBUG_API_S_VER_2 */
75
76struct mvm_statistics_div {
77 __le32 tx_on_a;
78 __le32 tx_on_b;
79 __le32 exec_time;
80 __le32 probe_time;
81 __le32 rssi_ant;
82 __le32 reserved2;
83} __packed; /* STATISTICS_SLOW_DIV_API_S_VER_2 */
84
85struct mvm_statistics_rx_non_phy {
86 __le32 bogus_cts; /* CTS received when not expecting CTS */
87 __le32 bogus_ack; /* ACK received when not expecting ACK */
88 __le32 non_bssid_frames; /* number of frames with BSSID that
89 * doesn't belong to the STA BSSID */
90 __le32 filtered_frames; /* count frames that were dumped in the
91 * filtering process */
92 __le32 non_channel_beacons; /* beacons with our bss id but not on
93 * our serving channel */
94 __le32 channel_beacons; /* beacons with our bss id and in our
95 * serving channel */
96 __le32 num_missed_bcon; /* number of missed beacons */
97 __le32 adc_rx_saturation_time; /* count in 0.8us units the time the
98 * ADC was in saturation */
99 __le32 ina_detection_search_time;/* total time (in 0.8us) searched
100 * for INA */
101 __le32 beacon_silence_rssi_a; /* RSSI silence after beacon frame */
102 __le32 beacon_silence_rssi_b; /* RSSI silence after beacon frame */
103 __le32 beacon_silence_rssi_c; /* RSSI silence after beacon frame */
104 __le32 interference_data_flag; /* flag for interference data
105 * availability. 1 when data is
106 * available. */
107 __le32 channel_load; /* counts RX Enable time in uSec */
108 __le32 dsp_false_alarms; /* DSP false alarm (both OFDM
109 * and CCK) counter */
110 __le32 beacon_rssi_a;
111 __le32 beacon_rssi_b;
112 __le32 beacon_rssi_c;
113 __le32 beacon_energy_a;
114 __le32 beacon_energy_b;
115 __le32 beacon_energy_c;
116 __le32 num_bt_kills;
117 __le32 mac_id;
118 __le32 directed_data_mpdu;
119} __packed; /* STATISTICS_RX_NON_PHY_API_S_VER_3 */
120
121struct mvm_statistics_rx_phy {
122 __le32 ina_cnt;
123 __le32 fina_cnt;
124 __le32 plcp_err;
125 __le32 crc32_err;
126 __le32 overrun_err;
127 __le32 early_overrun_err;
128 __le32 crc32_good;
129 __le32 false_alarm_cnt;
130 __le32 fina_sync_err_cnt;
131 __le32 sfd_timeout;
132 __le32 fina_timeout;
133 __le32 unresponded_rts;
134 __le32 rxe_frame_limit_overrun;
135 __le32 sent_ack_cnt;
136 __le32 sent_cts_cnt;
137 __le32 sent_ba_rsp_cnt;
138 __le32 dsp_self_kill;
139 __le32 mh_format_err;
140 __le32 re_acq_main_rssi_sum;
141 __le32 reserved;
142} __packed; /* STATISTICS_RX_PHY_API_S_VER_2 */
143
144struct mvm_statistics_rx_ht_phy {
145 __le32 plcp_err;
146 __le32 overrun_err;
147 __le32 early_overrun_err;
148 __le32 crc32_good;
149 __le32 crc32_err;
150 __le32 mh_format_err;
151 __le32 agg_crc32_good;
152 __le32 agg_mpdu_cnt;
153 __le32 agg_cnt;
154 __le32 unsupport_mcs;
155} __packed; /* STATISTICS_HT_RX_PHY_API_S_VER_1 */
156
157struct mvm_statistics_tx_non_phy {
158 __le32 preamble_cnt;
159 __le32 rx_detected_cnt;
160 __le32 bt_prio_defer_cnt;
161 __le32 bt_prio_kill_cnt;
162 __le32 few_bytes_cnt;
163 __le32 cts_timeout;
164 __le32 ack_timeout;
165 __le32 expected_ack_cnt;
166 __le32 actual_ack_cnt;
167 __le32 dump_msdu_cnt;
168 __le32 burst_abort_next_frame_mismatch_cnt;
169 __le32 burst_abort_missing_next_frame_cnt;
170 __le32 cts_timeout_collision;
171 __le32 ack_or_ba_timeout_collision;
172} __packed; /* STATISTICS_TX_NON_PHY_API_S_VER_3 */
173
174#define MAX_CHAINS 3
175
176struct mvm_statistics_tx_non_phy_agg {
177 __le32 ba_timeout;
178 __le32 ba_reschedule_frames;
179 __le32 scd_query_agg_frame_cnt;
180 __le32 scd_query_no_agg;
181 __le32 scd_query_agg;
182 __le32 scd_query_mismatch;
183 __le32 frame_not_ready;
184 __le32 underrun;
185 __le32 bt_prio_kill;
186 __le32 rx_ba_rsp_cnt;
187 __s8 txpower[MAX_CHAINS];
188 __s8 reserved;
189 __le32 reserved2;
190} __packed; /* STATISTICS_TX_NON_PHY_AGG_API_S_VER_1 */
191
192struct mvm_statistics_tx_channel_width {
193 __le32 ext_cca_narrow_ch20[1];
194 __le32 ext_cca_narrow_ch40[2];
195 __le32 ext_cca_narrow_ch80[3];
196 __le32 ext_cca_narrow_ch160[4];
197 __le32 last_tx_ch_width_indx;
198 __le32 rx_detected_per_ch_width[4];
199 __le32 success_per_ch_width[4];
200 __le32 fail_per_ch_width[4];
201}; /* STATISTICS_TX_CHANNEL_WIDTH_API_S_VER_1 */
202
203struct mvm_statistics_tx {
204 struct mvm_statistics_tx_non_phy general;
205 struct mvm_statistics_tx_non_phy_agg agg;
206 struct mvm_statistics_tx_channel_width channel_width;
207} __packed; /* STATISTICS_TX_API_S_VER_4 */
208
209
210struct mvm_statistics_bt_activity {
211 __le32 hi_priority_tx_req_cnt;
212 __le32 hi_priority_tx_denied_cnt;
213 __le32 lo_priority_tx_req_cnt;
214 __le32 lo_priority_tx_denied_cnt;
215 __le32 hi_priority_rx_req_cnt;
216 __le32 hi_priority_rx_denied_cnt;
217 __le32 lo_priority_rx_req_cnt;
218 __le32 lo_priority_rx_denied_cnt;
219} __packed; /* STATISTICS_BT_ACTIVITY_API_S_VER_1 */
220
221struct mvm_statistics_general {
222 __le32 radio_temperature;
223 __le32 radio_voltage;
224 struct mvm_statistics_dbg dbg;
225 __le32 sleep_time;
226 __le32 slots_out;
227 __le32 slots_idle;
228 __le32 ttl_timestamp;
229 struct mvm_statistics_div slow_div;
230 __le32 rx_enable_counter;
231 /*
232 * num_of_sos_states:
233 * count the number of times we have to re-tune
234 * in order to get out of bad PHY status
235 */
236 __le32 num_of_sos_states;
237 __le32 beacon_filtered;
238 __le32 missed_beacons;
239 __s8 beacon_filter_average_energy;
240 __s8 beacon_filter_reason;
241 __s8 beacon_filter_current_energy;
242 __s8 beacon_filter_reserved;
243 __le32 beacon_filter_delta_time;
244 struct mvm_statistics_bt_activity bt_activity;
245} __packed; /* STATISTICS_GENERAL_API_S_VER_5 */
246
247struct mvm_statistics_rx {
248 struct mvm_statistics_rx_phy ofdm;
249 struct mvm_statistics_rx_phy cck;
250 struct mvm_statistics_rx_non_phy general;
251 struct mvm_statistics_rx_ht_phy ofdm_ht;
252} __packed; /* STATISTICS_RX_API_S_VER_3 */
253
254/*
255 * STATISTICS_NOTIFICATION = 0x9d (notification only, not a command)
256 *
257 * By default, uCode issues this notification after receiving a beacon
258 * while associated. To disable this behavior, set DISABLE_NOTIF flag in the
259 * REPLY_STATISTICS_CMD 0x9c, above.
260 *
261 * Statistics counters continue to increment beacon after beacon, but are
262 * cleared when changing channels or when driver issues REPLY_STATISTICS_CMD
263 * 0x9c with CLEAR_STATS bit set (see above).
264 *
265 * uCode also issues this notification during scans. uCode clears statistics
266 * appropriately so that each notification contains statistics for only the
267 * one channel that has just been scanned.
268 */
269
270struct iwl_notif_statistics {
271 __le32 flag;
272 struct mvm_statistics_rx rx;
273 struct mvm_statistics_tx tx;
274 struct mvm_statistics_general general;
275} __packed; /* STATISTICS_NTFY_API_S_VER_8 */
276
277#endif /* __fw_api_stats_h__ */
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api.h b/drivers/net/wireless/iwlwifi/mvm/fw-api.h
index 1a934a64b358..b56154fe8ec5 100644
--- a/drivers/net/wireless/iwlwifi/mvm/fw-api.h
+++ b/drivers/net/wireless/iwlwifi/mvm/fw-api.h
@@ -74,6 +74,7 @@
74#include "fw-api-d3.h" 74#include "fw-api-d3.h"
75#include "fw-api-coex.h" 75#include "fw-api-coex.h"
76#include "fw-api-scan.h" 76#include "fw-api-scan.h"
77#include "fw-api-stats.h"
77 78
78/* Tx queue numbers */ 79/* Tx queue numbers */
79enum { 80enum {
@@ -1384,214 +1385,6 @@ struct iwl_mvm_marker {
1384 __le32 metadata[0]; 1385 __le32 metadata[0];
1385} __packed; /* MARKER_API_S_VER_1 */ 1386} __packed; /* MARKER_API_S_VER_1 */
1386 1387
1387struct mvm_statistics_dbg {
1388 __le32 burst_check;
1389 __le32 burst_count;
1390 __le32 wait_for_silence_timeout_cnt;
1391 __le32 reserved[3];
1392} __packed; /* STATISTICS_DEBUG_API_S_VER_2 */
1393
1394struct mvm_statistics_div {
1395 __le32 tx_on_a;
1396 __le32 tx_on_b;
1397 __le32 exec_time;
1398 __le32 probe_time;
1399 __le32 rssi_ant;
1400 __le32 reserved2;
1401} __packed; /* STATISTICS_SLOW_DIV_API_S_VER_2 */
1402
1403struct mvm_statistics_rx_non_phy {
1404 __le32 bogus_cts; /* CTS received when not expecting CTS */
1405 __le32 bogus_ack; /* ACK received when not expecting ACK */
1406 __le32 non_bssid_frames; /* number of frames with BSSID that
1407 * doesn't belong to the STA BSSID */
1408 __le32 filtered_frames; /* count frames that were dumped in the
1409 * filtering process */
1410 __le32 non_channel_beacons; /* beacons with our bss id but not on
1411 * our serving channel */
1412 __le32 channel_beacons; /* beacons with our bss id and in our
1413 * serving channel */
1414 __le32 num_missed_bcon; /* number of missed beacons */
1415 __le32 adc_rx_saturation_time; /* count in 0.8us units the time the
1416 * ADC was in saturation */
1417 __le32 ina_detection_search_time;/* total time (in 0.8us) searched
1418 * for INA */
1419 __le32 beacon_silence_rssi_a; /* RSSI silence after beacon frame */
1420 __le32 beacon_silence_rssi_b; /* RSSI silence after beacon frame */
1421 __le32 beacon_silence_rssi_c; /* RSSI silence after beacon frame */
1422 __le32 interference_data_flag; /* flag for interference data
1423 * availability. 1 when data is
1424 * available. */
1425 __le32 channel_load; /* counts RX Enable time in uSec */
1426 __le32 dsp_false_alarms; /* DSP false alarm (both OFDM
1427 * and CCK) counter */
1428 __le32 beacon_rssi_a;
1429 __le32 beacon_rssi_b;
1430 __le32 beacon_rssi_c;
1431 __le32 beacon_energy_a;
1432 __le32 beacon_energy_b;
1433 __le32 beacon_energy_c;
1434 __le32 num_bt_kills;
1435 __le32 mac_id;
1436 __le32 directed_data_mpdu;
1437} __packed; /* STATISTICS_RX_NON_PHY_API_S_VER_3 */
1438
1439struct mvm_statistics_rx_phy {
1440 __le32 ina_cnt;
1441 __le32 fina_cnt;
1442 __le32 plcp_err;
1443 __le32 crc32_err;
1444 __le32 overrun_err;
1445 __le32 early_overrun_err;
1446 __le32 crc32_good;
1447 __le32 false_alarm_cnt;
1448 __le32 fina_sync_err_cnt;
1449 __le32 sfd_timeout;
1450 __le32 fina_timeout;
1451 __le32 unresponded_rts;
1452 __le32 rxe_frame_limit_overrun;
1453 __le32 sent_ack_cnt;
1454 __le32 sent_cts_cnt;
1455 __le32 sent_ba_rsp_cnt;
1456 __le32 dsp_self_kill;
1457 __le32 mh_format_err;
1458 __le32 re_acq_main_rssi_sum;
1459 __le32 reserved;
1460} __packed; /* STATISTICS_RX_PHY_API_S_VER_2 */
1461
1462struct mvm_statistics_rx_ht_phy {
1463 __le32 plcp_err;
1464 __le32 overrun_err;
1465 __le32 early_overrun_err;
1466 __le32 crc32_good;
1467 __le32 crc32_err;
1468 __le32 mh_format_err;
1469 __le32 agg_crc32_good;
1470 __le32 agg_mpdu_cnt;
1471 __le32 agg_cnt;
1472 __le32 unsupport_mcs;
1473} __packed; /* STATISTICS_HT_RX_PHY_API_S_VER_1 */
1474
1475struct mvm_statistics_tx_non_phy {
1476 __le32 preamble_cnt;
1477 __le32 rx_detected_cnt;
1478 __le32 bt_prio_defer_cnt;
1479 __le32 bt_prio_kill_cnt;
1480 __le32 few_bytes_cnt;
1481 __le32 cts_timeout;
1482 __le32 ack_timeout;
1483 __le32 expected_ack_cnt;
1484 __le32 actual_ack_cnt;
1485 __le32 dump_msdu_cnt;
1486 __le32 burst_abort_next_frame_mismatch_cnt;
1487 __le32 burst_abort_missing_next_frame_cnt;
1488 __le32 cts_timeout_collision;
1489 __le32 ack_or_ba_timeout_collision;
1490} __packed; /* STATISTICS_TX_NON_PHY_API_S_VER_3 */
1491
1492#define MAX_CHAINS 3
1493
1494struct mvm_statistics_tx_non_phy_agg {
1495 __le32 ba_timeout;
1496 __le32 ba_reschedule_frames;
1497 __le32 scd_query_agg_frame_cnt;
1498 __le32 scd_query_no_agg;
1499 __le32 scd_query_agg;
1500 __le32 scd_query_mismatch;
1501 __le32 frame_not_ready;
1502 __le32 underrun;
1503 __le32 bt_prio_kill;
1504 __le32 rx_ba_rsp_cnt;
1505 __s8 txpower[MAX_CHAINS];
1506 __s8 reserved;
1507 __le32 reserved2;
1508} __packed; /* STATISTICS_TX_NON_PHY_AGG_API_S_VER_1 */
1509
1510struct mvm_statistics_tx_channel_width {
1511 __le32 ext_cca_narrow_ch20[1];
1512 __le32 ext_cca_narrow_ch40[2];
1513 __le32 ext_cca_narrow_ch80[3];
1514 __le32 ext_cca_narrow_ch160[4];
1515 __le32 last_tx_ch_width_indx;
1516 __le32 rx_detected_per_ch_width[4];
1517 __le32 success_per_ch_width[4];
1518 __le32 fail_per_ch_width[4];
1519}; /* STATISTICS_TX_CHANNEL_WIDTH_API_S_VER_1 */
1520
1521struct mvm_statistics_tx {
1522 struct mvm_statistics_tx_non_phy general;
1523 struct mvm_statistics_tx_non_phy_agg agg;
1524 struct mvm_statistics_tx_channel_width channel_width;
1525} __packed; /* STATISTICS_TX_API_S_VER_4 */
1526
1527
1528struct mvm_statistics_bt_activity {
1529 __le32 hi_priority_tx_req_cnt;
1530 __le32 hi_priority_tx_denied_cnt;
1531 __le32 lo_priority_tx_req_cnt;
1532 __le32 lo_priority_tx_denied_cnt;
1533 __le32 hi_priority_rx_req_cnt;
1534 __le32 hi_priority_rx_denied_cnt;
1535 __le32 lo_priority_rx_req_cnt;
1536 __le32 lo_priority_rx_denied_cnt;
1537} __packed; /* STATISTICS_BT_ACTIVITY_API_S_VER_1 */
1538
1539struct mvm_statistics_general {
1540 __le32 radio_temperature;
1541 __le32 radio_voltage;
1542 struct mvm_statistics_dbg dbg;
1543 __le32 sleep_time;
1544 __le32 slots_out;
1545 __le32 slots_idle;
1546 __le32 ttl_timestamp;
1547 struct mvm_statistics_div slow_div;
1548 __le32 rx_enable_counter;
1549 /*
1550 * num_of_sos_states:
1551 * count the number of times we have to re-tune
1552 * in order to get out of bad PHY status
1553 */
1554 __le32 num_of_sos_states;
1555 __le32 beacon_filtered;
1556 __le32 missed_beacons;
1557 __s8 beacon_filter_average_energy;
1558 __s8 beacon_filter_reason;
1559 __s8 beacon_filter_current_energy;
1560 __s8 beacon_filter_reserved;
1561 __le32 beacon_filter_delta_time;
1562 struct mvm_statistics_bt_activity bt_activity;
1563} __packed; /* STATISTICS_GENERAL_API_S_VER_5 */
1564
1565struct mvm_statistics_rx {
1566 struct mvm_statistics_rx_phy ofdm;
1567 struct mvm_statistics_rx_phy cck;
1568 struct mvm_statistics_rx_non_phy general;
1569 struct mvm_statistics_rx_ht_phy ofdm_ht;
1570} __packed; /* STATISTICS_RX_API_S_VER_3 */
1571
1572/*
1573 * STATISTICS_NOTIFICATION = 0x9d (notification only, not a command)
1574 *
1575 * By default, uCode issues this notification after receiving a beacon
1576 * while associated. To disable this behavior, set DISABLE_NOTIF flag in the
1577 * REPLY_STATISTICS_CMD 0x9c, above.
1578 *
1579 * Statistics counters continue to increment beacon after beacon, but are
1580 * cleared when changing channels or when driver issues REPLY_STATISTICS_CMD
1581 * 0x9c with CLEAR_STATS bit set (see above).
1582 *
1583 * uCode also issues this notification during scans. uCode clears statistics
1584 * appropriately so that each notification contains statistics for only the
1585 * one channel that has just been scanned.
1586 */
1587
1588struct iwl_notif_statistics {
1589 __le32 flag;
1590 struct mvm_statistics_rx rx;
1591 struct mvm_statistics_tx tx;
1592 struct mvm_statistics_general general;
1593} __packed; /* STATISTICS_NTFY_API_S_VER_8 */
1594
1595/*********************************** 1388/***********************************
1596 * Smart Fifo API 1389 * Smart Fifo API
1597 ***********************************/ 1390 ***********************************/