1 /******************************************************************************
5 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of version 2 of the GNU General Public License as
9 * published by the Free Software Foundation.
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
21 * The full GNU General Public License is included in this distribution
22 * in the file called LICENSE.GPL.
24 * Contact Information:
25 * Intel Linux Wireless <ilw@linux.intel.com>
26 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
27 *****************************************************************************/
33 il3945_stats_flag(struct il_priv
*il
, char *buf
, int bufsz
)
37 p
+= scnprintf(buf
+ p
, bufsz
- p
, "Statistics Flag(0x%X):\n",
38 le32_to_cpu(il
->_3945
.stats
.flag
));
39 if (le32_to_cpu(il
->_3945
.stats
.flag
) & UCODE_STATS_CLEAR_MSK
)
40 p
+= scnprintf(buf
+ p
, bufsz
- p
,
41 "\tStatistics have been cleared\n");
42 p
+= scnprintf(buf
+ p
, bufsz
- p
, "\tOperational Frequency: %s\n",
43 (le32_to_cpu(il
->_3945
.stats
.flag
) &
44 UCODE_STATS_FREQUENCY_MSK
) ? "2.4 GHz" : "5.2 GHz");
45 p
+= scnprintf(buf
+ p
, bufsz
- p
, "\tTGj Narrow Band: %s\n",
46 (le32_to_cpu(il
->_3945
.stats
.flag
) &
47 UCODE_STATS_NARROW_BAND_MSK
) ? "enabled" : "disabled");
52 il3945_ucode_rx_stats_read(struct file
*file
, char __user
*user_buf
,
53 size_t count
, loff_t
*ppos
)
55 struct il_priv
*il
= file
->private_data
;
59 sizeof(struct iwl39_stats_rx_phy
) * 40 +
60 sizeof(struct iwl39_stats_rx_non_phy
) * 40 + 400;
62 struct iwl39_stats_rx_phy
*ofdm
, *accum_ofdm
, *delta_ofdm
, *max_ofdm
;
63 struct iwl39_stats_rx_phy
*cck
, *accum_cck
, *delta_cck
, *max_cck
;
64 struct iwl39_stats_rx_non_phy
*general
, *accum_general
;
65 struct iwl39_stats_rx_non_phy
*delta_general
, *max_general
;
70 buf
= kzalloc(bufsz
, GFP_KERNEL
);
72 IL_ERR("Can not allocate Buffer\n");
77 * The statistic information display here is based on
78 * the last stats notification from uCode
79 * might not reflect the current uCode activity
81 ofdm
= &il
->_3945
.stats
.rx
.ofdm
;
82 cck
= &il
->_3945
.stats
.rx
.cck
;
83 general
= &il
->_3945
.stats
.rx
.general
;
84 accum_ofdm
= &il
->_3945
.accum_stats
.rx
.ofdm
;
85 accum_cck
= &il
->_3945
.accum_stats
.rx
.cck
;
86 accum_general
= &il
->_3945
.accum_stats
.rx
.general
;
87 delta_ofdm
= &il
->_3945
.delta_stats
.rx
.ofdm
;
88 delta_cck
= &il
->_3945
.delta_stats
.rx
.cck
;
89 delta_general
= &il
->_3945
.delta_stats
.rx
.general
;
90 max_ofdm
= &il
->_3945
.max_delta
.rx
.ofdm
;
91 max_cck
= &il
->_3945
.max_delta
.rx
.cck
;
92 max_general
= &il
->_3945
.max_delta
.rx
.general
;
94 pos
+= il3945_stats_flag(il
, buf
, bufsz
);
96 scnprintf(buf
+ pos
, bufsz
- pos
,
98 "acumulative delta max\n",
99 "Statistics_Rx - OFDM:");
101 scnprintf(buf
+ pos
, bufsz
- pos
,
102 " %-30s %10u %10u %10u %10u\n", "ina_cnt:",
103 le32_to_cpu(ofdm
->ina_cnt
), accum_ofdm
->ina_cnt
,
104 delta_ofdm
->ina_cnt
, max_ofdm
->ina_cnt
);
106 scnprintf(buf
+ pos
, bufsz
- pos
,
107 " %-30s %10u %10u %10u %10u\n", "fina_cnt:",
108 le32_to_cpu(ofdm
->fina_cnt
), accum_ofdm
->fina_cnt
,
109 delta_ofdm
->fina_cnt
, max_ofdm
->fina_cnt
);
111 scnprintf(buf
+ pos
, bufsz
- pos
,
112 " %-30s %10u %10u %10u %10u\n", "plcp_err:",
113 le32_to_cpu(ofdm
->plcp_err
), accum_ofdm
->plcp_err
,
114 delta_ofdm
->plcp_err
, max_ofdm
->plcp_err
);
116 scnprintf(buf
+ pos
, bufsz
- pos
,
117 " %-30s %10u %10u %10u %10u\n", "crc32_err:",
118 le32_to_cpu(ofdm
->crc32_err
), accum_ofdm
->crc32_err
,
119 delta_ofdm
->crc32_err
, max_ofdm
->crc32_err
);
121 scnprintf(buf
+ pos
, bufsz
- pos
,
122 " %-30s %10u %10u %10u %10u\n", "overrun_err:",
123 le32_to_cpu(ofdm
->overrun_err
), accum_ofdm
->overrun_err
,
124 delta_ofdm
->overrun_err
, max_ofdm
->overrun_err
);
126 scnprintf(buf
+ pos
, bufsz
- pos
,
127 " %-30s %10u %10u %10u %10u\n", "early_overrun_err:",
128 le32_to_cpu(ofdm
->early_overrun_err
),
129 accum_ofdm
->early_overrun_err
,
130 delta_ofdm
->early_overrun_err
,
131 max_ofdm
->early_overrun_err
);
133 scnprintf(buf
+ pos
, bufsz
- pos
,
134 " %-30s %10u %10u %10u %10u\n", "crc32_good:",
135 le32_to_cpu(ofdm
->crc32_good
), accum_ofdm
->crc32_good
,
136 delta_ofdm
->crc32_good
, max_ofdm
->crc32_good
);
138 scnprintf(buf
+ pos
, bufsz
- pos
,
139 " %-30s %10u %10u %10u %10u\n", "false_alarm_cnt:",
140 le32_to_cpu(ofdm
->false_alarm_cnt
),
141 accum_ofdm
->false_alarm_cnt
, delta_ofdm
->false_alarm_cnt
,
142 max_ofdm
->false_alarm_cnt
);
144 scnprintf(buf
+ pos
, bufsz
- pos
,
145 " %-30s %10u %10u %10u %10u\n", "fina_sync_err_cnt:",
146 le32_to_cpu(ofdm
->fina_sync_err_cnt
),
147 accum_ofdm
->fina_sync_err_cnt
,
148 delta_ofdm
->fina_sync_err_cnt
,
149 max_ofdm
->fina_sync_err_cnt
);
151 scnprintf(buf
+ pos
, bufsz
- pos
,
152 " %-30s %10u %10u %10u %10u\n", "sfd_timeout:",
153 le32_to_cpu(ofdm
->sfd_timeout
), accum_ofdm
->sfd_timeout
,
154 delta_ofdm
->sfd_timeout
, max_ofdm
->sfd_timeout
);
156 scnprintf(buf
+ pos
, bufsz
- pos
,
157 " %-30s %10u %10u %10u %10u\n", "fina_timeout:",
158 le32_to_cpu(ofdm
->fina_timeout
), accum_ofdm
->fina_timeout
,
159 delta_ofdm
->fina_timeout
, max_ofdm
->fina_timeout
);
161 scnprintf(buf
+ pos
, bufsz
- pos
,
162 " %-30s %10u %10u %10u %10u\n", "unresponded_rts:",
163 le32_to_cpu(ofdm
->unresponded_rts
),
164 accum_ofdm
->unresponded_rts
, delta_ofdm
->unresponded_rts
,
165 max_ofdm
->unresponded_rts
);
167 scnprintf(buf
+ pos
, bufsz
- pos
,
168 " %-30s %10u %10u %10u %10u\n",
169 "rxe_frame_lmt_ovrun:",
170 le32_to_cpu(ofdm
->rxe_frame_limit_overrun
),
171 accum_ofdm
->rxe_frame_limit_overrun
,
172 delta_ofdm
->rxe_frame_limit_overrun
,
173 max_ofdm
->rxe_frame_limit_overrun
);
175 scnprintf(buf
+ pos
, bufsz
- pos
,
176 " %-30s %10u %10u %10u %10u\n", "sent_ack_cnt:",
177 le32_to_cpu(ofdm
->sent_ack_cnt
), accum_ofdm
->sent_ack_cnt
,
178 delta_ofdm
->sent_ack_cnt
, max_ofdm
->sent_ack_cnt
);
180 scnprintf(buf
+ pos
, bufsz
- pos
,
181 " %-30s %10u %10u %10u %10u\n", "sent_cts_cnt:",
182 le32_to_cpu(ofdm
->sent_cts_cnt
), accum_ofdm
->sent_cts_cnt
,
183 delta_ofdm
->sent_cts_cnt
, max_ofdm
->sent_cts_cnt
);
186 scnprintf(buf
+ pos
, bufsz
- pos
,
188 "acumulative delta max\n",
189 "Statistics_Rx - CCK:");
191 scnprintf(buf
+ pos
, bufsz
- pos
,
192 " %-30s %10u %10u %10u %10u\n", "ina_cnt:",
193 le32_to_cpu(cck
->ina_cnt
), accum_cck
->ina_cnt
,
194 delta_cck
->ina_cnt
, max_cck
->ina_cnt
);
196 scnprintf(buf
+ pos
, bufsz
- pos
,
197 " %-30s %10u %10u %10u %10u\n", "fina_cnt:",
198 le32_to_cpu(cck
->fina_cnt
), accum_cck
->fina_cnt
,
199 delta_cck
->fina_cnt
, max_cck
->fina_cnt
);
201 scnprintf(buf
+ pos
, bufsz
- pos
,
202 " %-30s %10u %10u %10u %10u\n", "plcp_err:",
203 le32_to_cpu(cck
->plcp_err
), accum_cck
->plcp_err
,
204 delta_cck
->plcp_err
, max_cck
->plcp_err
);
206 scnprintf(buf
+ pos
, bufsz
- pos
,
207 " %-30s %10u %10u %10u %10u\n", "crc32_err:",
208 le32_to_cpu(cck
->crc32_err
), accum_cck
->crc32_err
,
209 delta_cck
->crc32_err
, max_cck
->crc32_err
);
211 scnprintf(buf
+ pos
, bufsz
- pos
,
212 " %-30s %10u %10u %10u %10u\n", "overrun_err:",
213 le32_to_cpu(cck
->overrun_err
), accum_cck
->overrun_err
,
214 delta_cck
->overrun_err
, max_cck
->overrun_err
);
216 scnprintf(buf
+ pos
, bufsz
- pos
,
217 " %-30s %10u %10u %10u %10u\n", "early_overrun_err:",
218 le32_to_cpu(cck
->early_overrun_err
),
219 accum_cck
->early_overrun_err
,
220 delta_cck
->early_overrun_err
, max_cck
->early_overrun_err
);
222 scnprintf(buf
+ pos
, bufsz
- pos
,
223 " %-30s %10u %10u %10u %10u\n", "crc32_good:",
224 le32_to_cpu(cck
->crc32_good
), accum_cck
->crc32_good
,
225 delta_cck
->crc32_good
, max_cck
->crc32_good
);
227 scnprintf(buf
+ pos
, bufsz
- pos
,
228 " %-30s %10u %10u %10u %10u\n", "false_alarm_cnt:",
229 le32_to_cpu(cck
->false_alarm_cnt
),
230 accum_cck
->false_alarm_cnt
, delta_cck
->false_alarm_cnt
,
231 max_cck
->false_alarm_cnt
);
233 scnprintf(buf
+ pos
, bufsz
- pos
,
234 " %-30s %10u %10u %10u %10u\n", "fina_sync_err_cnt:",
235 le32_to_cpu(cck
->fina_sync_err_cnt
),
236 accum_cck
->fina_sync_err_cnt
,
237 delta_cck
->fina_sync_err_cnt
, max_cck
->fina_sync_err_cnt
);
239 scnprintf(buf
+ pos
, bufsz
- pos
,
240 " %-30s %10u %10u %10u %10u\n", "sfd_timeout:",
241 le32_to_cpu(cck
->sfd_timeout
), accum_cck
->sfd_timeout
,
242 delta_cck
->sfd_timeout
, max_cck
->sfd_timeout
);
244 scnprintf(buf
+ pos
, bufsz
- pos
,
245 " %-30s %10u %10u %10u %10u\n", "fina_timeout:",
246 le32_to_cpu(cck
->fina_timeout
), accum_cck
->fina_timeout
,
247 delta_cck
->fina_timeout
, max_cck
->fina_timeout
);
249 scnprintf(buf
+ pos
, bufsz
- pos
,
250 " %-30s %10u %10u %10u %10u\n", "unresponded_rts:",
251 le32_to_cpu(cck
->unresponded_rts
),
252 accum_cck
->unresponded_rts
, delta_cck
->unresponded_rts
,
253 max_cck
->unresponded_rts
);
255 scnprintf(buf
+ pos
, bufsz
- pos
,
256 " %-30s %10u %10u %10u %10u\n",
257 "rxe_frame_lmt_ovrun:",
258 le32_to_cpu(cck
->rxe_frame_limit_overrun
),
259 accum_cck
->rxe_frame_limit_overrun
,
260 delta_cck
->rxe_frame_limit_overrun
,
261 max_cck
->rxe_frame_limit_overrun
);
263 scnprintf(buf
+ pos
, bufsz
- pos
,
264 " %-30s %10u %10u %10u %10u\n", "sent_ack_cnt:",
265 le32_to_cpu(cck
->sent_ack_cnt
), accum_cck
->sent_ack_cnt
,
266 delta_cck
->sent_ack_cnt
, max_cck
->sent_ack_cnt
);
268 scnprintf(buf
+ pos
, bufsz
- pos
,
269 " %-30s %10u %10u %10u %10u\n", "sent_cts_cnt:",
270 le32_to_cpu(cck
->sent_cts_cnt
), accum_cck
->sent_cts_cnt
,
271 delta_cck
->sent_cts_cnt
, max_cck
->sent_cts_cnt
);
274 scnprintf(buf
+ pos
, bufsz
- pos
,
276 "acumulative delta max\n",
277 "Statistics_Rx - GENERAL:");
279 scnprintf(buf
+ pos
, bufsz
- pos
,
280 " %-30s %10u %10u %10u %10u\n", "bogus_cts:",
281 le32_to_cpu(general
->bogus_cts
), accum_general
->bogus_cts
,
282 delta_general
->bogus_cts
, max_general
->bogus_cts
);
284 scnprintf(buf
+ pos
, bufsz
- pos
,
285 " %-30s %10u %10u %10u %10u\n", "bogus_ack:",
286 le32_to_cpu(general
->bogus_ack
), accum_general
->bogus_ack
,
287 delta_general
->bogus_ack
, max_general
->bogus_ack
);
289 scnprintf(buf
+ pos
, bufsz
- pos
,
290 " %-30s %10u %10u %10u %10u\n", "non_bssid_frames:",
291 le32_to_cpu(general
->non_bssid_frames
),
292 accum_general
->non_bssid_frames
,
293 delta_general
->non_bssid_frames
,
294 max_general
->non_bssid_frames
);
296 scnprintf(buf
+ pos
, bufsz
- pos
,
297 " %-30s %10u %10u %10u %10u\n", "filtered_frames:",
298 le32_to_cpu(general
->filtered_frames
),
299 accum_general
->filtered_frames
,
300 delta_general
->filtered_frames
,
301 max_general
->filtered_frames
);
303 scnprintf(buf
+ pos
, bufsz
- pos
,
304 " %-30s %10u %10u %10u %10u\n",
305 "non_channel_beacons:",
306 le32_to_cpu(general
->non_channel_beacons
),
307 accum_general
->non_channel_beacons
,
308 delta_general
->non_channel_beacons
,
309 max_general
->non_channel_beacons
);
311 ret
= simple_read_from_buffer(user_buf
, count
, ppos
, buf
, pos
);
317 il3945_ucode_tx_stats_read(struct file
*file
, char __user
*user_buf
,
318 size_t count
, loff_t
*ppos
)
320 struct il_priv
*il
= file
->private_data
;
323 int bufsz
= (sizeof(struct iwl39_stats_tx
) * 48) + 250;
325 struct iwl39_stats_tx
*tx
, *accum_tx
, *delta_tx
, *max_tx
;
327 if (!il_is_alive(il
))
330 buf
= kzalloc(bufsz
, GFP_KERNEL
);
332 IL_ERR("Can not allocate Buffer\n");
337 * The statistic information display here is based on
338 * the last stats notification from uCode
339 * might not reflect the current uCode activity
341 tx
= &il
->_3945
.stats
.tx
;
342 accum_tx
= &il
->_3945
.accum_stats
.tx
;
343 delta_tx
= &il
->_3945
.delta_stats
.tx
;
344 max_tx
= &il
->_3945
.max_delta
.tx
;
345 pos
+= il3945_stats_flag(il
, buf
, bufsz
);
347 scnprintf(buf
+ pos
, bufsz
- pos
,
349 "acumulative delta max\n",
352 scnprintf(buf
+ pos
, bufsz
- pos
,
353 " %-30s %10u %10u %10u %10u\n", "preamble:",
354 le32_to_cpu(tx
->preamble_cnt
), accum_tx
->preamble_cnt
,
355 delta_tx
->preamble_cnt
, max_tx
->preamble_cnt
);
357 scnprintf(buf
+ pos
, bufsz
- pos
,
358 " %-30s %10u %10u %10u %10u\n", "rx_detected_cnt:",
359 le32_to_cpu(tx
->rx_detected_cnt
),
360 accum_tx
->rx_detected_cnt
, delta_tx
->rx_detected_cnt
,
361 max_tx
->rx_detected_cnt
);
363 scnprintf(buf
+ pos
, bufsz
- pos
,
364 " %-30s %10u %10u %10u %10u\n", "bt_prio_defer_cnt:",
365 le32_to_cpu(tx
->bt_prio_defer_cnt
),
366 accum_tx
->bt_prio_defer_cnt
, delta_tx
->bt_prio_defer_cnt
,
367 max_tx
->bt_prio_defer_cnt
);
369 scnprintf(buf
+ pos
, bufsz
- pos
,
370 " %-30s %10u %10u %10u %10u\n", "bt_prio_kill_cnt:",
371 le32_to_cpu(tx
->bt_prio_kill_cnt
),
372 accum_tx
->bt_prio_kill_cnt
, delta_tx
->bt_prio_kill_cnt
,
373 max_tx
->bt_prio_kill_cnt
);
375 scnprintf(buf
+ pos
, bufsz
- pos
,
376 " %-30s %10u %10u %10u %10u\n", "few_bytes_cnt:",
377 le32_to_cpu(tx
->few_bytes_cnt
), accum_tx
->few_bytes_cnt
,
378 delta_tx
->few_bytes_cnt
, max_tx
->few_bytes_cnt
);
380 scnprintf(buf
+ pos
, bufsz
- pos
,
381 " %-30s %10u %10u %10u %10u\n", "cts_timeout:",
382 le32_to_cpu(tx
->cts_timeout
), accum_tx
->cts_timeout
,
383 delta_tx
->cts_timeout
, max_tx
->cts_timeout
);
385 scnprintf(buf
+ pos
, bufsz
- pos
,
386 " %-30s %10u %10u %10u %10u\n", "ack_timeout:",
387 le32_to_cpu(tx
->ack_timeout
), accum_tx
->ack_timeout
,
388 delta_tx
->ack_timeout
, max_tx
->ack_timeout
);
390 scnprintf(buf
+ pos
, bufsz
- pos
,
391 " %-30s %10u %10u %10u %10u\n", "expected_ack_cnt:",
392 le32_to_cpu(tx
->expected_ack_cnt
),
393 accum_tx
->expected_ack_cnt
, delta_tx
->expected_ack_cnt
,
394 max_tx
->expected_ack_cnt
);
396 scnprintf(buf
+ pos
, bufsz
- pos
,
397 " %-30s %10u %10u %10u %10u\n", "actual_ack_cnt:",
398 le32_to_cpu(tx
->actual_ack_cnt
), accum_tx
->actual_ack_cnt
,
399 delta_tx
->actual_ack_cnt
, max_tx
->actual_ack_cnt
);
401 ret
= simple_read_from_buffer(user_buf
, count
, ppos
, buf
, pos
);
407 il3945_ucode_general_stats_read(struct file
*file
, char __user
*user_buf
,
408 size_t count
, loff_t
*ppos
)
410 struct il_priv
*il
= file
->private_data
;
413 int bufsz
= sizeof(struct iwl39_stats_general
) * 10 + 300;
415 struct iwl39_stats_general
*general
, *accum_general
;
416 struct iwl39_stats_general
*delta_general
, *max_general
;
417 struct stats_dbg
*dbg
, *accum_dbg
, *delta_dbg
, *max_dbg
;
418 struct iwl39_stats_div
*div
, *accum_div
, *delta_div
, *max_div
;
420 if (!il_is_alive(il
))
423 buf
= kzalloc(bufsz
, GFP_KERNEL
);
425 IL_ERR("Can not allocate Buffer\n");
430 * The statistic information display here is based on
431 * the last stats notification from uCode
432 * might not reflect the current uCode activity
434 general
= &il
->_3945
.stats
.general
;
435 dbg
= &il
->_3945
.stats
.general
.dbg
;
436 div
= &il
->_3945
.stats
.general
.div
;
437 accum_general
= &il
->_3945
.accum_stats
.general
;
438 delta_general
= &il
->_3945
.delta_stats
.general
;
439 max_general
= &il
->_3945
.max_delta
.general
;
440 accum_dbg
= &il
->_3945
.accum_stats
.general
.dbg
;
441 delta_dbg
= &il
->_3945
.delta_stats
.general
.dbg
;
442 max_dbg
= &il
->_3945
.max_delta
.general
.dbg
;
443 accum_div
= &il
->_3945
.accum_stats
.general
.div
;
444 delta_div
= &il
->_3945
.delta_stats
.general
.div
;
445 max_div
= &il
->_3945
.max_delta
.general
.div
;
446 pos
+= il3945_stats_flag(il
, buf
, bufsz
);
448 scnprintf(buf
+ pos
, bufsz
- pos
,
450 "acumulative delta max\n",
451 "Statistics_General:");
453 scnprintf(buf
+ pos
, bufsz
- pos
,
454 " %-30s %10u %10u %10u %10u\n", "burst_check:",
455 le32_to_cpu(dbg
->burst_check
), accum_dbg
->burst_check
,
456 delta_dbg
->burst_check
, max_dbg
->burst_check
);
458 scnprintf(buf
+ pos
, bufsz
- pos
,
459 " %-30s %10u %10u %10u %10u\n", "burst_count:",
460 le32_to_cpu(dbg
->burst_count
), accum_dbg
->burst_count
,
461 delta_dbg
->burst_count
, max_dbg
->burst_count
);
463 scnprintf(buf
+ pos
, bufsz
- pos
,
464 " %-30s %10u %10u %10u %10u\n", "sleep_time:",
465 le32_to_cpu(general
->sleep_time
),
466 accum_general
->sleep_time
, delta_general
->sleep_time
,
467 max_general
->sleep_time
);
469 scnprintf(buf
+ pos
, bufsz
- pos
,
470 " %-30s %10u %10u %10u %10u\n", "slots_out:",
471 le32_to_cpu(general
->slots_out
), accum_general
->slots_out
,
472 delta_general
->slots_out
, max_general
->slots_out
);
474 scnprintf(buf
+ pos
, bufsz
- pos
,
475 " %-30s %10u %10u %10u %10u\n", "slots_idle:",
476 le32_to_cpu(general
->slots_idle
),
477 accum_general
->slots_idle
, delta_general
->slots_idle
,
478 max_general
->slots_idle
);
480 scnprintf(buf
+ pos
, bufsz
- pos
, "ttl_timestamp:\t\t\t%u\n",
481 le32_to_cpu(general
->ttl_timestamp
));
483 scnprintf(buf
+ pos
, bufsz
- pos
,
484 " %-30s %10u %10u %10u %10u\n", "tx_on_a:",
485 le32_to_cpu(div
->tx_on_a
), accum_div
->tx_on_a
,
486 delta_div
->tx_on_a
, max_div
->tx_on_a
);
488 scnprintf(buf
+ pos
, bufsz
- pos
,
489 " %-30s %10u %10u %10u %10u\n", "tx_on_b:",
490 le32_to_cpu(div
->tx_on_b
), accum_div
->tx_on_b
,
491 delta_div
->tx_on_b
, max_div
->tx_on_b
);
493 scnprintf(buf
+ pos
, bufsz
- pos
,
494 " %-30s %10u %10u %10u %10u\n", "exec_time:",
495 le32_to_cpu(div
->exec_time
), accum_div
->exec_time
,
496 delta_div
->exec_time
, max_div
->exec_time
);
498 scnprintf(buf
+ pos
, bufsz
- pos
,
499 " %-30s %10u %10u %10u %10u\n", "probe_time:",
500 le32_to_cpu(div
->probe_time
), accum_div
->probe_time
,
501 delta_div
->probe_time
, max_div
->probe_time
);
502 ret
= simple_read_from_buffer(user_buf
, count
, ppos
, buf
, pos
);
507 const struct il_debugfs_ops il3945_debugfs_ops
= {
508 .rx_stats_read
= il3945_ucode_rx_stats_read
,
509 .tx_stats_read
= il3945_ucode_tx_stats_read
,
510 .general_stats_read
= il3945_ucode_general_stats_read
,