1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | /****************************************************************************** |
3 | * |
4 | * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. |
5 | * |
6 | * Contact Information: |
7 | * Intel Linux Wireless <ilw@linux.intel.com> |
8 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
9 | *****************************************************************************/ |
10 | |
11 | #include "common.h" |
12 | #include "3945.h" |
13 | |
14 | static int |
15 | il3945_stats_flag(struct il_priv *il, char *buf, int bufsz) |
16 | { |
17 | int p = 0; |
18 | |
19 | p += scnprintf(buf: buf + p, size: bufsz - p, fmt: "Statistics Flag(0x%X):\n" , |
20 | le32_to_cpu(il->_3945.stats.flag)); |
21 | if (le32_to_cpu(il->_3945.stats.flag) & UCODE_STATS_CLEAR_MSK) |
22 | p += scnprintf(buf: buf + p, size: bufsz - p, |
23 | fmt: "\tStatistics have been cleared\n" ); |
24 | p += scnprintf(buf: buf + p, size: bufsz - p, fmt: "\tOperational Frequency: %s\n" , |
25 | (le32_to_cpu(il->_3945.stats.flag) & |
26 | UCODE_STATS_FREQUENCY_MSK) ? "2.4 GHz" : "5.2 GHz" ); |
27 | p += scnprintf(buf: buf + p, size: bufsz - p, fmt: "\tTGj Narrow Band: %s\n" , |
28 | (le32_to_cpu(il->_3945.stats.flag) & |
29 | UCODE_STATS_NARROW_BAND_MSK) ? "enabled" : "disabled" ); |
30 | return p; |
31 | } |
32 | |
33 | static ssize_t |
34 | il3945_ucode_rx_stats_read(struct file *file, char __user *user_buf, |
35 | size_t count, loff_t *ppos) |
36 | { |
37 | struct il_priv *il = file->private_data; |
38 | int pos = 0; |
39 | char *buf; |
40 | int bufsz = |
41 | sizeof(struct iwl39_stats_rx_phy) * 40 + |
42 | sizeof(struct iwl39_stats_rx_non_phy) * 40 + 400; |
43 | ssize_t ret; |
44 | struct iwl39_stats_rx_phy *ofdm, *accum_ofdm, *delta_ofdm, *max_ofdm; |
45 | struct iwl39_stats_rx_phy *cck, *accum_cck, *delta_cck, *max_cck; |
46 | struct iwl39_stats_rx_non_phy *general, *accum_general; |
47 | struct iwl39_stats_rx_non_phy *delta_general, *max_general; |
48 | |
49 | if (!il_is_alive(il)) |
50 | return -EAGAIN; |
51 | |
52 | buf = kzalloc(size: bufsz, GFP_KERNEL); |
53 | if (!buf) { |
54 | IL_ERR("Can not allocate Buffer\n" ); |
55 | return -ENOMEM; |
56 | } |
57 | |
58 | /* |
59 | * The statistic information display here is based on |
60 | * the last stats notification from uCode |
61 | * might not reflect the current uCode activity |
62 | */ |
63 | ofdm = &il->_3945.stats.rx.ofdm; |
64 | cck = &il->_3945.stats.rx.cck; |
65 | general = &il->_3945.stats.rx.general; |
66 | accum_ofdm = &il->_3945.accum_stats.rx.ofdm; |
67 | accum_cck = &il->_3945.accum_stats.rx.cck; |
68 | accum_general = &il->_3945.accum_stats.rx.general; |
69 | delta_ofdm = &il->_3945.delta_stats.rx.ofdm; |
70 | delta_cck = &il->_3945.delta_stats.rx.cck; |
71 | delta_general = &il->_3945.delta_stats.rx.general; |
72 | max_ofdm = &il->_3945.max_delta.rx.ofdm; |
73 | max_cck = &il->_3945.max_delta.rx.cck; |
74 | max_general = &il->_3945.max_delta.rx.general; |
75 | |
76 | pos += il3945_stats_flag(il, buf, bufsz); |
77 | pos += |
78 | scnprintf(buf: buf + pos, size: bufsz - pos, |
79 | fmt: "%-32s current" |
80 | "accumulative delta max\n" , |
81 | "Statistics_Rx - OFDM:" ); |
82 | pos += |
83 | scnprintf(buf: buf + pos, size: bufsz - pos, |
84 | fmt: " %-30s %10u %10u %10u %10u\n" , "ina_cnt:" , |
85 | le32_to_cpu(ofdm->ina_cnt), accum_ofdm->ina_cnt, |
86 | delta_ofdm->ina_cnt, max_ofdm->ina_cnt); |
87 | pos += |
88 | scnprintf(buf: buf + pos, size: bufsz - pos, |
89 | fmt: " %-30s %10u %10u %10u %10u\n" , "fina_cnt:" , |
90 | le32_to_cpu(ofdm->fina_cnt), accum_ofdm->fina_cnt, |
91 | delta_ofdm->fina_cnt, max_ofdm->fina_cnt); |
92 | pos += |
93 | scnprintf(buf: buf + pos, size: bufsz - pos, |
94 | fmt: " %-30s %10u %10u %10u %10u\n" , "plcp_err:" , |
95 | le32_to_cpu(ofdm->plcp_err), accum_ofdm->plcp_err, |
96 | delta_ofdm->plcp_err, max_ofdm->plcp_err); |
97 | pos += |
98 | scnprintf(buf: buf + pos, size: bufsz - pos, |
99 | fmt: " %-30s %10u %10u %10u %10u\n" , "crc32_err:" , |
100 | le32_to_cpu(ofdm->crc32_err), accum_ofdm->crc32_err, |
101 | delta_ofdm->crc32_err, max_ofdm->crc32_err); |
102 | pos += |
103 | scnprintf(buf: buf + pos, size: bufsz - pos, |
104 | fmt: " %-30s %10u %10u %10u %10u\n" , "overrun_err:" , |
105 | le32_to_cpu(ofdm->overrun_err), accum_ofdm->overrun_err, |
106 | delta_ofdm->overrun_err, max_ofdm->overrun_err); |
107 | pos += |
108 | scnprintf(buf: buf + pos, size: bufsz - pos, |
109 | fmt: " %-30s %10u %10u %10u %10u\n" , "early_overrun_err:" , |
110 | le32_to_cpu(ofdm->early_overrun_err), |
111 | accum_ofdm->early_overrun_err, |
112 | delta_ofdm->early_overrun_err, |
113 | max_ofdm->early_overrun_err); |
114 | pos += |
115 | scnprintf(buf: buf + pos, size: bufsz - pos, |
116 | fmt: " %-30s %10u %10u %10u %10u\n" , "crc32_good:" , |
117 | le32_to_cpu(ofdm->crc32_good), accum_ofdm->crc32_good, |
118 | delta_ofdm->crc32_good, max_ofdm->crc32_good); |
119 | pos += |
120 | scnprintf(buf: buf + pos, size: bufsz - pos, |
121 | fmt: " %-30s %10u %10u %10u %10u\n" , "false_alarm_cnt:" , |
122 | le32_to_cpu(ofdm->false_alarm_cnt), |
123 | accum_ofdm->false_alarm_cnt, delta_ofdm->false_alarm_cnt, |
124 | max_ofdm->false_alarm_cnt); |
125 | pos += |
126 | scnprintf(buf: buf + pos, size: bufsz - pos, |
127 | fmt: " %-30s %10u %10u %10u %10u\n" , "fina_sync_err_cnt:" , |
128 | le32_to_cpu(ofdm->fina_sync_err_cnt), |
129 | accum_ofdm->fina_sync_err_cnt, |
130 | delta_ofdm->fina_sync_err_cnt, |
131 | max_ofdm->fina_sync_err_cnt); |
132 | pos += |
133 | scnprintf(buf: buf + pos, size: bufsz - pos, |
134 | fmt: " %-30s %10u %10u %10u %10u\n" , "sfd_timeout:" , |
135 | le32_to_cpu(ofdm->sfd_timeout), accum_ofdm->sfd_timeout, |
136 | delta_ofdm->sfd_timeout, max_ofdm->sfd_timeout); |
137 | pos += |
138 | scnprintf(buf: buf + pos, size: bufsz - pos, |
139 | fmt: " %-30s %10u %10u %10u %10u\n" , "fina_timeout:" , |
140 | le32_to_cpu(ofdm->fina_timeout), accum_ofdm->fina_timeout, |
141 | delta_ofdm->fina_timeout, max_ofdm->fina_timeout); |
142 | pos += |
143 | scnprintf(buf: buf + pos, size: bufsz - pos, |
144 | fmt: " %-30s %10u %10u %10u %10u\n" , "unresponded_rts:" , |
145 | le32_to_cpu(ofdm->unresponded_rts), |
146 | accum_ofdm->unresponded_rts, delta_ofdm->unresponded_rts, |
147 | max_ofdm->unresponded_rts); |
148 | pos += |
149 | scnprintf(buf: buf + pos, size: bufsz - pos, |
150 | fmt: " %-30s %10u %10u %10u %10u\n" , |
151 | "rxe_frame_lmt_ovrun:" , |
152 | le32_to_cpu(ofdm->rxe_frame_limit_overrun), |
153 | accum_ofdm->rxe_frame_limit_overrun, |
154 | delta_ofdm->rxe_frame_limit_overrun, |
155 | max_ofdm->rxe_frame_limit_overrun); |
156 | pos += |
157 | scnprintf(buf: buf + pos, size: bufsz - pos, |
158 | fmt: " %-30s %10u %10u %10u %10u\n" , "sent_ack_cnt:" , |
159 | le32_to_cpu(ofdm->sent_ack_cnt), accum_ofdm->sent_ack_cnt, |
160 | delta_ofdm->sent_ack_cnt, max_ofdm->sent_ack_cnt); |
161 | pos += |
162 | scnprintf(buf: buf + pos, size: bufsz - pos, |
163 | fmt: " %-30s %10u %10u %10u %10u\n" , "sent_cts_cnt:" , |
164 | le32_to_cpu(ofdm->sent_cts_cnt), accum_ofdm->sent_cts_cnt, |
165 | delta_ofdm->sent_cts_cnt, max_ofdm->sent_cts_cnt); |
166 | |
167 | pos += |
168 | scnprintf(buf: buf + pos, size: bufsz - pos, |
169 | fmt: "%-32s current" |
170 | "accumulative delta max\n" , |
171 | "Statistics_Rx - CCK:" ); |
172 | pos += |
173 | scnprintf(buf: buf + pos, size: bufsz - pos, |
174 | fmt: " %-30s %10u %10u %10u %10u\n" , "ina_cnt:" , |
175 | le32_to_cpu(cck->ina_cnt), accum_cck->ina_cnt, |
176 | delta_cck->ina_cnt, max_cck->ina_cnt); |
177 | pos += |
178 | scnprintf(buf: buf + pos, size: bufsz - pos, |
179 | fmt: " %-30s %10u %10u %10u %10u\n" , "fina_cnt:" , |
180 | le32_to_cpu(cck->fina_cnt), accum_cck->fina_cnt, |
181 | delta_cck->fina_cnt, max_cck->fina_cnt); |
182 | pos += |
183 | scnprintf(buf: buf + pos, size: bufsz - pos, |
184 | fmt: " %-30s %10u %10u %10u %10u\n" , "plcp_err:" , |
185 | le32_to_cpu(cck->plcp_err), accum_cck->plcp_err, |
186 | delta_cck->plcp_err, max_cck->plcp_err); |
187 | pos += |
188 | scnprintf(buf: buf + pos, size: bufsz - pos, |
189 | fmt: " %-30s %10u %10u %10u %10u\n" , "crc32_err:" , |
190 | le32_to_cpu(cck->crc32_err), accum_cck->crc32_err, |
191 | delta_cck->crc32_err, max_cck->crc32_err); |
192 | pos += |
193 | scnprintf(buf: buf + pos, size: bufsz - pos, |
194 | fmt: " %-30s %10u %10u %10u %10u\n" , "overrun_err:" , |
195 | le32_to_cpu(cck->overrun_err), accum_cck->overrun_err, |
196 | delta_cck->overrun_err, max_cck->overrun_err); |
197 | pos += |
198 | scnprintf(buf: buf + pos, size: bufsz - pos, |
199 | fmt: " %-30s %10u %10u %10u %10u\n" , "early_overrun_err:" , |
200 | le32_to_cpu(cck->early_overrun_err), |
201 | accum_cck->early_overrun_err, |
202 | delta_cck->early_overrun_err, max_cck->early_overrun_err); |
203 | pos += |
204 | scnprintf(buf: buf + pos, size: bufsz - pos, |
205 | fmt: " %-30s %10u %10u %10u %10u\n" , "crc32_good:" , |
206 | le32_to_cpu(cck->crc32_good), accum_cck->crc32_good, |
207 | delta_cck->crc32_good, max_cck->crc32_good); |
208 | pos += |
209 | scnprintf(buf: buf + pos, size: bufsz - pos, |
210 | fmt: " %-30s %10u %10u %10u %10u\n" , "false_alarm_cnt:" , |
211 | le32_to_cpu(cck->false_alarm_cnt), |
212 | accum_cck->false_alarm_cnt, delta_cck->false_alarm_cnt, |
213 | max_cck->false_alarm_cnt); |
214 | pos += |
215 | scnprintf(buf: buf + pos, size: bufsz - pos, |
216 | fmt: " %-30s %10u %10u %10u %10u\n" , "fina_sync_err_cnt:" , |
217 | le32_to_cpu(cck->fina_sync_err_cnt), |
218 | accum_cck->fina_sync_err_cnt, |
219 | delta_cck->fina_sync_err_cnt, max_cck->fina_sync_err_cnt); |
220 | pos += |
221 | scnprintf(buf: buf + pos, size: bufsz - pos, |
222 | fmt: " %-30s %10u %10u %10u %10u\n" , "sfd_timeout:" , |
223 | le32_to_cpu(cck->sfd_timeout), accum_cck->sfd_timeout, |
224 | delta_cck->sfd_timeout, max_cck->sfd_timeout); |
225 | pos += |
226 | scnprintf(buf: buf + pos, size: bufsz - pos, |
227 | fmt: " %-30s %10u %10u %10u %10u\n" , "fina_timeout:" , |
228 | le32_to_cpu(cck->fina_timeout), accum_cck->fina_timeout, |
229 | delta_cck->fina_timeout, max_cck->fina_timeout); |
230 | pos += |
231 | scnprintf(buf: buf + pos, size: bufsz - pos, |
232 | fmt: " %-30s %10u %10u %10u %10u\n" , "unresponded_rts:" , |
233 | le32_to_cpu(cck->unresponded_rts), |
234 | accum_cck->unresponded_rts, delta_cck->unresponded_rts, |
235 | max_cck->unresponded_rts); |
236 | pos += |
237 | scnprintf(buf: buf + pos, size: bufsz - pos, |
238 | fmt: " %-30s %10u %10u %10u %10u\n" , |
239 | "rxe_frame_lmt_ovrun:" , |
240 | le32_to_cpu(cck->rxe_frame_limit_overrun), |
241 | accum_cck->rxe_frame_limit_overrun, |
242 | delta_cck->rxe_frame_limit_overrun, |
243 | max_cck->rxe_frame_limit_overrun); |
244 | pos += |
245 | scnprintf(buf: buf + pos, size: bufsz - pos, |
246 | fmt: " %-30s %10u %10u %10u %10u\n" , "sent_ack_cnt:" , |
247 | le32_to_cpu(cck->sent_ack_cnt), accum_cck->sent_ack_cnt, |
248 | delta_cck->sent_ack_cnt, max_cck->sent_ack_cnt); |
249 | pos += |
250 | scnprintf(buf: buf + pos, size: bufsz - pos, |
251 | fmt: " %-30s %10u %10u %10u %10u\n" , "sent_cts_cnt:" , |
252 | le32_to_cpu(cck->sent_cts_cnt), accum_cck->sent_cts_cnt, |
253 | delta_cck->sent_cts_cnt, max_cck->sent_cts_cnt); |
254 | |
255 | pos += |
256 | scnprintf(buf: buf + pos, size: bufsz - pos, |
257 | fmt: "%-32s current" |
258 | "accumulative delta max\n" , |
259 | "Statistics_Rx - GENERAL:" ); |
260 | pos += |
261 | scnprintf(buf: buf + pos, size: bufsz - pos, |
262 | fmt: " %-30s %10u %10u %10u %10u\n" , "bogus_cts:" , |
263 | le32_to_cpu(general->bogus_cts), accum_general->bogus_cts, |
264 | delta_general->bogus_cts, max_general->bogus_cts); |
265 | pos += |
266 | scnprintf(buf: buf + pos, size: bufsz - pos, |
267 | fmt: " %-30s %10u %10u %10u %10u\n" , "bogus_ack:" , |
268 | le32_to_cpu(general->bogus_ack), accum_general->bogus_ack, |
269 | delta_general->bogus_ack, max_general->bogus_ack); |
270 | pos += |
271 | scnprintf(buf: buf + pos, size: bufsz - pos, |
272 | fmt: " %-30s %10u %10u %10u %10u\n" , "non_bssid_frames:" , |
273 | le32_to_cpu(general->non_bssid_frames), |
274 | accum_general->non_bssid_frames, |
275 | delta_general->non_bssid_frames, |
276 | max_general->non_bssid_frames); |
277 | pos += |
278 | scnprintf(buf: buf + pos, size: bufsz - pos, |
279 | fmt: " %-30s %10u %10u %10u %10u\n" , "filtered_frames:" , |
280 | le32_to_cpu(general->filtered_frames), |
281 | accum_general->filtered_frames, |
282 | delta_general->filtered_frames, |
283 | max_general->filtered_frames); |
284 | pos += |
285 | scnprintf(buf: buf + pos, size: bufsz - pos, |
286 | fmt: " %-30s %10u %10u %10u %10u\n" , |
287 | "non_channel_beacons:" , |
288 | le32_to_cpu(general->non_channel_beacons), |
289 | accum_general->non_channel_beacons, |
290 | delta_general->non_channel_beacons, |
291 | max_general->non_channel_beacons); |
292 | |
293 | ret = simple_read_from_buffer(to: user_buf, count, ppos, from: buf, available: pos); |
294 | kfree(objp: buf); |
295 | return ret; |
296 | } |
297 | |
298 | static ssize_t |
299 | il3945_ucode_tx_stats_read(struct file *file, char __user *user_buf, |
300 | size_t count, loff_t *ppos) |
301 | { |
302 | struct il_priv *il = file->private_data; |
303 | int pos = 0; |
304 | char *buf; |
305 | int bufsz = (sizeof(struct iwl39_stats_tx) * 48) + 250; |
306 | ssize_t ret; |
307 | struct iwl39_stats_tx *tx, *accum_tx, *delta_tx, *max_tx; |
308 | |
309 | if (!il_is_alive(il)) |
310 | return -EAGAIN; |
311 | |
312 | buf = kzalloc(size: bufsz, GFP_KERNEL); |
313 | if (!buf) { |
314 | IL_ERR("Can not allocate Buffer\n" ); |
315 | return -ENOMEM; |
316 | } |
317 | |
318 | /* |
319 | * The statistic information display here is based on |
320 | * the last stats notification from uCode |
321 | * might not reflect the current uCode activity |
322 | */ |
323 | tx = &il->_3945.stats.tx; |
324 | accum_tx = &il->_3945.accum_stats.tx; |
325 | delta_tx = &il->_3945.delta_stats.tx; |
326 | max_tx = &il->_3945.max_delta.tx; |
327 | pos += il3945_stats_flag(il, buf, bufsz); |
328 | pos += |
329 | scnprintf(buf: buf + pos, size: bufsz - pos, |
330 | fmt: "%-32s current" |
331 | "accumulative delta max\n" , |
332 | "Statistics_Tx:" ); |
333 | pos += |
334 | scnprintf(buf: buf + pos, size: bufsz - pos, |
335 | fmt: " %-30s %10u %10u %10u %10u\n" , "preamble:" , |
336 | le32_to_cpu(tx->preamble_cnt), accum_tx->preamble_cnt, |
337 | delta_tx->preamble_cnt, max_tx->preamble_cnt); |
338 | pos += |
339 | scnprintf(buf: buf + pos, size: bufsz - pos, |
340 | fmt: " %-30s %10u %10u %10u %10u\n" , "rx_detected_cnt:" , |
341 | le32_to_cpu(tx->rx_detected_cnt), |
342 | accum_tx->rx_detected_cnt, delta_tx->rx_detected_cnt, |
343 | max_tx->rx_detected_cnt); |
344 | pos += |
345 | scnprintf(buf: buf + pos, size: bufsz - pos, |
346 | fmt: " %-30s %10u %10u %10u %10u\n" , "bt_prio_defer_cnt:" , |
347 | le32_to_cpu(tx->bt_prio_defer_cnt), |
348 | accum_tx->bt_prio_defer_cnt, delta_tx->bt_prio_defer_cnt, |
349 | max_tx->bt_prio_defer_cnt); |
350 | pos += |
351 | scnprintf(buf: buf + pos, size: bufsz - pos, |
352 | fmt: " %-30s %10u %10u %10u %10u\n" , "bt_prio_kill_cnt:" , |
353 | le32_to_cpu(tx->bt_prio_kill_cnt), |
354 | accum_tx->bt_prio_kill_cnt, delta_tx->bt_prio_kill_cnt, |
355 | max_tx->bt_prio_kill_cnt); |
356 | pos += |
357 | scnprintf(buf: buf + pos, size: bufsz - pos, |
358 | fmt: " %-30s %10u %10u %10u %10u\n" , "few_bytes_cnt:" , |
359 | le32_to_cpu(tx->few_bytes_cnt), accum_tx->few_bytes_cnt, |
360 | delta_tx->few_bytes_cnt, max_tx->few_bytes_cnt); |
361 | pos += |
362 | scnprintf(buf: buf + pos, size: bufsz - pos, |
363 | fmt: " %-30s %10u %10u %10u %10u\n" , "cts_timeout:" , |
364 | le32_to_cpu(tx->cts_timeout), accum_tx->cts_timeout, |
365 | delta_tx->cts_timeout, max_tx->cts_timeout); |
366 | pos += |
367 | scnprintf(buf: buf + pos, size: bufsz - pos, |
368 | fmt: " %-30s %10u %10u %10u %10u\n" , "ack_timeout:" , |
369 | le32_to_cpu(tx->ack_timeout), accum_tx->ack_timeout, |
370 | delta_tx->ack_timeout, max_tx->ack_timeout); |
371 | pos += |
372 | scnprintf(buf: buf + pos, size: bufsz - pos, |
373 | fmt: " %-30s %10u %10u %10u %10u\n" , "expected_ack_cnt:" , |
374 | le32_to_cpu(tx->expected_ack_cnt), |
375 | accum_tx->expected_ack_cnt, delta_tx->expected_ack_cnt, |
376 | max_tx->expected_ack_cnt); |
377 | pos += |
378 | scnprintf(buf: buf + pos, size: bufsz - pos, |
379 | fmt: " %-30s %10u %10u %10u %10u\n" , "actual_ack_cnt:" , |
380 | le32_to_cpu(tx->actual_ack_cnt), accum_tx->actual_ack_cnt, |
381 | delta_tx->actual_ack_cnt, max_tx->actual_ack_cnt); |
382 | |
383 | ret = simple_read_from_buffer(to: user_buf, count, ppos, from: buf, available: pos); |
384 | kfree(objp: buf); |
385 | return ret; |
386 | } |
387 | |
388 | static ssize_t |
389 | il3945_ucode_general_stats_read(struct file *file, char __user *user_buf, |
390 | size_t count, loff_t *ppos) |
391 | { |
392 | struct il_priv *il = file->private_data; |
393 | int pos = 0; |
394 | char *buf; |
395 | int bufsz = sizeof(struct iwl39_stats_general) * 10 + 300; |
396 | ssize_t ret; |
397 | struct iwl39_stats_general *general, *accum_general; |
398 | struct iwl39_stats_general *delta_general, *max_general; |
399 | struct stats_dbg *dbg, *accum_dbg, *delta_dbg, *max_dbg; |
400 | struct iwl39_stats_div *div, *accum_div, *delta_div, *max_div; |
401 | |
402 | if (!il_is_alive(il)) |
403 | return -EAGAIN; |
404 | |
405 | buf = kzalloc(size: bufsz, GFP_KERNEL); |
406 | if (!buf) { |
407 | IL_ERR("Can not allocate Buffer\n" ); |
408 | return -ENOMEM; |
409 | } |
410 | |
411 | /* |
412 | * The statistic information display here is based on |
413 | * the last stats notification from uCode |
414 | * might not reflect the current uCode activity |
415 | */ |
416 | general = &il->_3945.stats.general; |
417 | dbg = &il->_3945.stats.general.dbg; |
418 | div = &il->_3945.stats.general.div; |
419 | accum_general = &il->_3945.accum_stats.general; |
420 | delta_general = &il->_3945.delta_stats.general; |
421 | max_general = &il->_3945.max_delta.general; |
422 | accum_dbg = &il->_3945.accum_stats.general.dbg; |
423 | delta_dbg = &il->_3945.delta_stats.general.dbg; |
424 | max_dbg = &il->_3945.max_delta.general.dbg; |
425 | accum_div = &il->_3945.accum_stats.general.div; |
426 | delta_div = &il->_3945.delta_stats.general.div; |
427 | max_div = &il->_3945.max_delta.general.div; |
428 | pos += il3945_stats_flag(il, buf, bufsz); |
429 | pos += |
430 | scnprintf(buf: buf + pos, size: bufsz - pos, |
431 | fmt: "%-32s current" |
432 | "accumulative delta max\n" , |
433 | "Statistics_General:" ); |
434 | pos += |
435 | scnprintf(buf: buf + pos, size: bufsz - pos, |
436 | fmt: " %-30s %10u %10u %10u %10u\n" , "burst_check:" , |
437 | le32_to_cpu(dbg->burst_check), accum_dbg->burst_check, |
438 | delta_dbg->burst_check, max_dbg->burst_check); |
439 | pos += |
440 | scnprintf(buf: buf + pos, size: bufsz - pos, |
441 | fmt: " %-30s %10u %10u %10u %10u\n" , "burst_count:" , |
442 | le32_to_cpu(dbg->burst_count), accum_dbg->burst_count, |
443 | delta_dbg->burst_count, max_dbg->burst_count); |
444 | pos += |
445 | scnprintf(buf: buf + pos, size: bufsz - pos, |
446 | fmt: " %-30s %10u %10u %10u %10u\n" , "sleep_time:" , |
447 | le32_to_cpu(general->sleep_time), |
448 | accum_general->sleep_time, delta_general->sleep_time, |
449 | max_general->sleep_time); |
450 | pos += |
451 | scnprintf(buf: buf + pos, size: bufsz - pos, |
452 | fmt: " %-30s %10u %10u %10u %10u\n" , "slots_out:" , |
453 | le32_to_cpu(general->slots_out), accum_general->slots_out, |
454 | delta_general->slots_out, max_general->slots_out); |
455 | pos += |
456 | scnprintf(buf: buf + pos, size: bufsz - pos, |
457 | fmt: " %-30s %10u %10u %10u %10u\n" , "slots_idle:" , |
458 | le32_to_cpu(general->slots_idle), |
459 | accum_general->slots_idle, delta_general->slots_idle, |
460 | max_general->slots_idle); |
461 | pos += |
462 | scnprintf(buf: buf + pos, size: bufsz - pos, fmt: "ttl_timestamp:\t\t\t%u\n" , |
463 | le32_to_cpu(general->ttl_timestamp)); |
464 | pos += |
465 | scnprintf(buf: buf + pos, size: bufsz - pos, |
466 | fmt: " %-30s %10u %10u %10u %10u\n" , "tx_on_a:" , |
467 | le32_to_cpu(div->tx_on_a), accum_div->tx_on_a, |
468 | delta_div->tx_on_a, max_div->tx_on_a); |
469 | pos += |
470 | scnprintf(buf: buf + pos, size: bufsz - pos, |
471 | fmt: " %-30s %10u %10u %10u %10u\n" , "tx_on_b:" , |
472 | le32_to_cpu(div->tx_on_b), accum_div->tx_on_b, |
473 | delta_div->tx_on_b, max_div->tx_on_b); |
474 | pos += |
475 | scnprintf(buf: buf + pos, size: bufsz - pos, |
476 | fmt: " %-30s %10u %10u %10u %10u\n" , "exec_time:" , |
477 | le32_to_cpu(div->exec_time), accum_div->exec_time, |
478 | delta_div->exec_time, max_div->exec_time); |
479 | pos += |
480 | scnprintf(buf: buf + pos, size: bufsz - pos, |
481 | fmt: " %-30s %10u %10u %10u %10u\n" , "probe_time:" , |
482 | le32_to_cpu(div->probe_time), accum_div->probe_time, |
483 | delta_div->probe_time, max_div->probe_time); |
484 | ret = simple_read_from_buffer(to: user_buf, count, ppos, from: buf, available: pos); |
485 | kfree(objp: buf); |
486 | return ret; |
487 | } |
488 | |
489 | const struct il_debugfs_ops il3945_debugfs_ops = { |
490 | .rx_stats_read = il3945_ucode_rx_stats_read, |
491 | .tx_stats_read = il3945_ucode_tx_stats_read, |
492 | .general_stats_read = il3945_ucode_general_stats_read, |
493 | }; |
494 | |