1 /******************************************************************************
5 * Copyright(c) 2008 - 2010 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 *****************************************************************************/
29 #include "iwl-3945-debugfs.h"
32 static int iwl3945_statistics_flag(struct iwl_priv
*priv
, char *buf
, int bufsz
)
36 p
+= scnprintf(buf
+ p
, bufsz
- p
, "Statistics Flag(0x%X):\n",
37 le32_to_cpu(priv
->_3945
.statistics
.flag
));
38 if (le32_to_cpu(priv
->_3945
.statistics
.flag
) &
39 UCODE_STATISTICS_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(priv
->_3945
.statistics
.flag
) &
44 UCODE_STATISTICS_FREQUENCY_MSK
)
45 ? "2.4 GHz" : "5.2 GHz");
46 p
+= scnprintf(buf
+ p
, bufsz
- p
, "\tTGj Narrow Band: %s\n",
47 (le32_to_cpu(priv
->_3945
.statistics
.flag
) &
48 UCODE_STATISTICS_NARROW_BAND_MSK
)
49 ? "enabled" : "disabled");
53 ssize_t
iwl3945_ucode_rx_stats_read(struct file
*file
,
54 char __user
*user_buf
,
55 size_t count
, loff_t
*ppos
)
57 struct iwl_priv
*priv
= file
->private_data
;
60 int bufsz
= sizeof(struct iwl39_statistics_rx_phy
) * 40 +
61 sizeof(struct iwl39_statistics_rx_non_phy
) * 40 + 400;
63 struct iwl39_statistics_rx_phy
*ofdm
, *accum_ofdm
, *delta_ofdm
, *max_ofdm
;
64 struct iwl39_statistics_rx_phy
*cck
, *accum_cck
, *delta_cck
, *max_cck
;
65 struct iwl39_statistics_rx_non_phy
*general
, *accum_general
;
66 struct iwl39_statistics_rx_non_phy
*delta_general
, *max_general
;
68 if (!iwl_is_alive(priv
))
71 buf
= kzalloc(bufsz
, GFP_KERNEL
);
73 IWL_ERR(priv
, "Can not allocate Buffer\n");
78 * The statistic information display here is based on
79 * the last statistics notification from uCode
80 * might not reflect the current uCode activity
82 ofdm
= &priv
->_3945
.statistics
.rx
.ofdm
;
83 cck
= &priv
->_3945
.statistics
.rx
.cck
;
84 general
= &priv
->_3945
.statistics
.rx
.general
;
85 accum_ofdm
= &priv
->_3945
.accum_statistics
.rx
.ofdm
;
86 accum_cck
= &priv
->_3945
.accum_statistics
.rx
.cck
;
87 accum_general
= &priv
->_3945
.accum_statistics
.rx
.general
;
88 delta_ofdm
= &priv
->_3945
.delta_statistics
.rx
.ofdm
;
89 delta_cck
= &priv
->_3945
.delta_statistics
.rx
.cck
;
90 delta_general
= &priv
->_3945
.delta_statistics
.rx
.general
;
91 max_ofdm
= &priv
->_3945
.max_delta
.rx
.ofdm
;
92 max_cck
= &priv
->_3945
.max_delta
.rx
.cck
;
93 max_general
= &priv
->_3945
.max_delta
.rx
.general
;
95 pos
+= iwl3945_statistics_flag(priv
, buf
, bufsz
);
96 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
, "%-32s current"
97 "acumulative delta max\n",
98 "Statistics_Rx - OFDM:");
99 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
100 " %-30s %10u %10u %10u %10u\n",
101 "ina_cnt:", le32_to_cpu(ofdm
->ina_cnt
),
103 delta_ofdm
->ina_cnt
, max_ofdm
->ina_cnt
);
104 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
105 " %-30s %10u %10u %10u %10u\n",
107 le32_to_cpu(ofdm
->fina_cnt
), accum_ofdm
->fina_cnt
,
108 delta_ofdm
->fina_cnt
, max_ofdm
->fina_cnt
);
109 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
110 " %-30s %10u %10u %10u %10u\n", "plcp_err:",
111 le32_to_cpu(ofdm
->plcp_err
), accum_ofdm
->plcp_err
,
112 delta_ofdm
->plcp_err
, max_ofdm
->plcp_err
);
113 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
114 " %-30s %10u %10u %10u %10u\n", "crc32_err:",
115 le32_to_cpu(ofdm
->crc32_err
), accum_ofdm
->crc32_err
,
116 delta_ofdm
->crc32_err
, max_ofdm
->crc32_err
);
117 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
118 " %-30s %10u %10u %10u %10u\n", "overrun_err:",
119 le32_to_cpu(ofdm
->overrun_err
),
120 accum_ofdm
->overrun_err
, delta_ofdm
->overrun_err
,
121 max_ofdm
->overrun_err
);
122 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
123 " %-30s %10u %10u %10u %10u\n",
124 "early_overrun_err:",
125 le32_to_cpu(ofdm
->early_overrun_err
),
126 accum_ofdm
->early_overrun_err
,
127 delta_ofdm
->early_overrun_err
,
128 max_ofdm
->early_overrun_err
);
129 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
130 " %-30s %10u %10u %10u %10u\n",
131 "crc32_good:", le32_to_cpu(ofdm
->crc32_good
),
132 accum_ofdm
->crc32_good
, delta_ofdm
->crc32_good
,
133 max_ofdm
->crc32_good
);
134 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
135 " %-30s %10u %10u %10u %10u\n", "false_alarm_cnt:",
136 le32_to_cpu(ofdm
->false_alarm_cnt
),
137 accum_ofdm
->false_alarm_cnt
,
138 delta_ofdm
->false_alarm_cnt
,
139 max_ofdm
->false_alarm_cnt
);
140 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
141 " %-30s %10u %10u %10u %10u\n",
142 "fina_sync_err_cnt:",
143 le32_to_cpu(ofdm
->fina_sync_err_cnt
),
144 accum_ofdm
->fina_sync_err_cnt
,
145 delta_ofdm
->fina_sync_err_cnt
,
146 max_ofdm
->fina_sync_err_cnt
);
147 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
148 " %-30s %10u %10u %10u %10u\n",
150 le32_to_cpu(ofdm
->sfd_timeout
),
151 accum_ofdm
->sfd_timeout
,
152 delta_ofdm
->sfd_timeout
,
153 max_ofdm
->sfd_timeout
);
154 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
155 " %-30s %10u %10u %10u %10u\n",
157 le32_to_cpu(ofdm
->fina_timeout
),
158 accum_ofdm
->fina_timeout
,
159 delta_ofdm
->fina_timeout
,
160 max_ofdm
->fina_timeout
);
161 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
162 " %-30s %10u %10u %10u %10u\n",
164 le32_to_cpu(ofdm
->unresponded_rts
),
165 accum_ofdm
->unresponded_rts
,
166 delta_ofdm
->unresponded_rts
,
167 max_ofdm
->unresponded_rts
);
168 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
169 " %-30s %10u %10u %10u %10u\n",
170 "rxe_frame_lmt_ovrun:",
171 le32_to_cpu(ofdm
->rxe_frame_limit_overrun
),
172 accum_ofdm
->rxe_frame_limit_overrun
,
173 delta_ofdm
->rxe_frame_limit_overrun
,
174 max_ofdm
->rxe_frame_limit_overrun
);
175 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
176 " %-30s %10u %10u %10u %10u\n",
178 le32_to_cpu(ofdm
->sent_ack_cnt
),
179 accum_ofdm
->sent_ack_cnt
,
180 delta_ofdm
->sent_ack_cnt
,
181 max_ofdm
->sent_ack_cnt
);
182 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
183 " %-30s %10u %10u %10u %10u\n",
185 le32_to_cpu(ofdm
->sent_cts_cnt
),
186 accum_ofdm
->sent_cts_cnt
,
187 delta_ofdm
->sent_cts_cnt
, max_ofdm
->sent_cts_cnt
);
189 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
, "%-32s current"
190 "acumulative delta max\n",
191 "Statistics_Rx - CCK:");
192 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
193 " %-30s %10u %10u %10u %10u\n",
195 le32_to_cpu(cck
->ina_cnt
), accum_cck
->ina_cnt
,
196 delta_cck
->ina_cnt
, max_cck
->ina_cnt
);
197 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
198 " %-30s %10u %10u %10u %10u\n",
200 le32_to_cpu(cck
->fina_cnt
), accum_cck
->fina_cnt
,
201 delta_cck
->fina_cnt
, max_cck
->fina_cnt
);
202 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
203 " %-30s %10u %10u %10u %10u\n",
205 le32_to_cpu(cck
->plcp_err
), accum_cck
->plcp_err
,
206 delta_cck
->plcp_err
, max_cck
->plcp_err
);
207 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
208 " %-30s %10u %10u %10u %10u\n",
210 le32_to_cpu(cck
->crc32_err
), accum_cck
->crc32_err
,
211 delta_cck
->crc32_err
, max_cck
->crc32_err
);
212 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
213 " %-30s %10u %10u %10u %10u\n",
215 le32_to_cpu(cck
->overrun_err
),
216 accum_cck
->overrun_err
,
217 delta_cck
->overrun_err
, max_cck
->overrun_err
);
218 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
219 " %-30s %10u %10u %10u %10u\n",
220 "early_overrun_err:",
221 le32_to_cpu(cck
->early_overrun_err
),
222 accum_cck
->early_overrun_err
,
223 delta_cck
->early_overrun_err
,
224 max_cck
->early_overrun_err
);
225 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
226 " %-30s %10u %10u %10u %10u\n",
228 le32_to_cpu(cck
->crc32_good
), accum_cck
->crc32_good
,
229 delta_cck
->crc32_good
,
230 max_cck
->crc32_good
);
231 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
232 " %-30s %10u %10u %10u %10u\n",
234 le32_to_cpu(cck
->false_alarm_cnt
),
235 accum_cck
->false_alarm_cnt
,
236 delta_cck
->false_alarm_cnt
, max_cck
->false_alarm_cnt
);
237 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
238 " %-30s %10u %10u %10u %10u\n",
239 "fina_sync_err_cnt:",
240 le32_to_cpu(cck
->fina_sync_err_cnt
),
241 accum_cck
->fina_sync_err_cnt
,
242 delta_cck
->fina_sync_err_cnt
,
243 max_cck
->fina_sync_err_cnt
);
244 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
245 " %-30s %10u %10u %10u %10u\n",
247 le32_to_cpu(cck
->sfd_timeout
),
248 accum_cck
->sfd_timeout
,
249 delta_cck
->sfd_timeout
, max_cck
->sfd_timeout
);
250 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
251 " %-30s %10u %10u %10u %10u\n",
253 le32_to_cpu(cck
->fina_timeout
),
254 accum_cck
->fina_timeout
,
255 delta_cck
->fina_timeout
, max_cck
->fina_timeout
);
256 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
257 " %-30s %10u %10u %10u %10u\n",
259 le32_to_cpu(cck
->unresponded_rts
),
260 accum_cck
->unresponded_rts
,
261 delta_cck
->unresponded_rts
,
262 max_cck
->unresponded_rts
);
263 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
264 " %-30s %10u %10u %10u %10u\n",
265 "rxe_frame_lmt_ovrun:",
266 le32_to_cpu(cck
->rxe_frame_limit_overrun
),
267 accum_cck
->rxe_frame_limit_overrun
,
268 delta_cck
->rxe_frame_limit_overrun
,
269 max_cck
->rxe_frame_limit_overrun
);
270 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
271 " %-30s %10u %10u %10u %10u\n",
273 le32_to_cpu(cck
->sent_ack_cnt
),
274 accum_cck
->sent_ack_cnt
,
275 delta_cck
->sent_ack_cnt
,
276 max_cck
->sent_ack_cnt
);
277 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
278 " %-30s %10u %10u %10u %10u\n",
280 le32_to_cpu(cck
->sent_cts_cnt
),
281 accum_cck
->sent_cts_cnt
,
282 delta_cck
->sent_cts_cnt
,
283 max_cck
->sent_cts_cnt
);
285 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
, "%-32s current"
286 "acumulative delta max\n",
287 "Statistics_Rx - GENERAL:");
288 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
289 " %-30s %10u %10u %10u %10u\n",
291 le32_to_cpu(general
->bogus_cts
),
292 accum_general
->bogus_cts
,
293 delta_general
->bogus_cts
, max_general
->bogus_cts
);
294 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
295 " %-30s %10u %10u %10u %10u\n",
297 le32_to_cpu(general
->bogus_ack
),
298 accum_general
->bogus_ack
,
299 delta_general
->bogus_ack
, max_general
->bogus_ack
);
300 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
301 " %-30s %10u %10u %10u %10u\n",
303 le32_to_cpu(general
->non_bssid_frames
),
304 accum_general
->non_bssid_frames
,
305 delta_general
->non_bssid_frames
,
306 max_general
->non_bssid_frames
);
307 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
308 " %-30s %10u %10u %10u %10u\n",
310 le32_to_cpu(general
->filtered_frames
),
311 accum_general
->filtered_frames
,
312 delta_general
->filtered_frames
,
313 max_general
->filtered_frames
);
314 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
315 " %-30s %10u %10u %10u %10u\n",
316 "non_channel_beacons:",
317 le32_to_cpu(general
->non_channel_beacons
),
318 accum_general
->non_channel_beacons
,
319 delta_general
->non_channel_beacons
,
320 max_general
->non_channel_beacons
);
322 ret
= simple_read_from_buffer(user_buf
, count
, ppos
, buf
, pos
);
327 ssize_t
iwl3945_ucode_tx_stats_read(struct file
*file
,
328 char __user
*user_buf
,
329 size_t count
, loff_t
*ppos
)
331 struct iwl_priv
*priv
= file
->private_data
;
334 int bufsz
= (sizeof(struct iwl39_statistics_tx
) * 48) + 250;
336 struct iwl39_statistics_tx
*tx
, *accum_tx
, *delta_tx
, *max_tx
;
338 if (!iwl_is_alive(priv
))
341 buf
= kzalloc(bufsz
, GFP_KERNEL
);
343 IWL_ERR(priv
, "Can not allocate Buffer\n");
348 * The statistic information display here is based on
349 * the last statistics notification from uCode
350 * might not reflect the current uCode activity
352 tx
= &priv
->_3945
.statistics
.tx
;
353 accum_tx
= &priv
->_3945
.accum_statistics
.tx
;
354 delta_tx
= &priv
->_3945
.delta_statistics
.tx
;
355 max_tx
= &priv
->_3945
.max_delta
.tx
;
356 pos
+= iwl3945_statistics_flag(priv
, buf
, bufsz
);
357 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
, "%-32s current"
358 "acumulative delta max\n",
360 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
361 " %-30s %10u %10u %10u %10u\n",
363 le32_to_cpu(tx
->preamble_cnt
),
364 accum_tx
->preamble_cnt
,
365 delta_tx
->preamble_cnt
, max_tx
->preamble_cnt
);
366 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
367 " %-30s %10u %10u %10u %10u\n",
369 le32_to_cpu(tx
->rx_detected_cnt
),
370 accum_tx
->rx_detected_cnt
,
371 delta_tx
->rx_detected_cnt
, max_tx
->rx_detected_cnt
);
372 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
373 " %-30s %10u %10u %10u %10u\n",
374 "bt_prio_defer_cnt:",
375 le32_to_cpu(tx
->bt_prio_defer_cnt
),
376 accum_tx
->bt_prio_defer_cnt
,
377 delta_tx
->bt_prio_defer_cnt
,
378 max_tx
->bt_prio_defer_cnt
);
379 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
380 " %-30s %10u %10u %10u %10u\n",
382 le32_to_cpu(tx
->bt_prio_kill_cnt
),
383 accum_tx
->bt_prio_kill_cnt
,
384 delta_tx
->bt_prio_kill_cnt
,
385 max_tx
->bt_prio_kill_cnt
);
386 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
387 " %-30s %10u %10u %10u %10u\n",
389 le32_to_cpu(tx
->few_bytes_cnt
),
390 accum_tx
->few_bytes_cnt
,
391 delta_tx
->few_bytes_cnt
, max_tx
->few_bytes_cnt
);
392 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
393 " %-30s %10u %10u %10u %10u\n",
395 le32_to_cpu(tx
->cts_timeout
), accum_tx
->cts_timeout
,
396 delta_tx
->cts_timeout
, max_tx
->cts_timeout
);
397 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
398 " %-30s %10u %10u %10u %10u\n",
400 le32_to_cpu(tx
->ack_timeout
),
401 accum_tx
->ack_timeout
,
402 delta_tx
->ack_timeout
, max_tx
->ack_timeout
);
403 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
404 " %-30s %10u %10u %10u %10u\n",
406 le32_to_cpu(tx
->expected_ack_cnt
),
407 accum_tx
->expected_ack_cnt
,
408 delta_tx
->expected_ack_cnt
,
409 max_tx
->expected_ack_cnt
);
410 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
411 " %-30s %10u %10u %10u %10u\n",
413 le32_to_cpu(tx
->actual_ack_cnt
),
414 accum_tx
->actual_ack_cnt
,
415 delta_tx
->actual_ack_cnt
,
416 max_tx
->actual_ack_cnt
);
418 ret
= simple_read_from_buffer(user_buf
, count
, ppos
, buf
, pos
);
423 ssize_t
iwl3945_ucode_general_stats_read(struct file
*file
,
424 char __user
*user_buf
,
425 size_t count
, loff_t
*ppos
)
427 struct iwl_priv
*priv
= file
->private_data
;
430 int bufsz
= sizeof(struct iwl39_statistics_general
) * 10 + 300;
432 struct iwl39_statistics_general
*general
, *accum_general
;
433 struct iwl39_statistics_general
*delta_general
, *max_general
;
434 struct statistics_dbg
*dbg
, *accum_dbg
, *delta_dbg
, *max_dbg
;
435 struct iwl39_statistics_div
*div
, *accum_div
, *delta_div
, *max_div
;
437 if (!iwl_is_alive(priv
))
440 buf
= kzalloc(bufsz
, GFP_KERNEL
);
442 IWL_ERR(priv
, "Can not allocate Buffer\n");
447 * The statistic information display here is based on
448 * the last statistics notification from uCode
449 * might not reflect the current uCode activity
451 general
= &priv
->_3945
.statistics
.general
;
452 dbg
= &priv
->_3945
.statistics
.general
.dbg
;
453 div
= &priv
->_3945
.statistics
.general
.div
;
454 accum_general
= &priv
->_3945
.accum_statistics
.general
;
455 delta_general
= &priv
->_3945
.delta_statistics
.general
;
456 max_general
= &priv
->_3945
.max_delta
.general
;
457 accum_dbg
= &priv
->_3945
.accum_statistics
.general
.dbg
;
458 delta_dbg
= &priv
->_3945
.delta_statistics
.general
.dbg
;
459 max_dbg
= &priv
->_3945
.max_delta
.general
.dbg
;
460 accum_div
= &priv
->_3945
.accum_statistics
.general
.div
;
461 delta_div
= &priv
->_3945
.delta_statistics
.general
.div
;
462 max_div
= &priv
->_3945
.max_delta
.general
.div
;
463 pos
+= iwl3945_statistics_flag(priv
, buf
, bufsz
);
464 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
, "%-32s current"
465 "acumulative delta max\n",
466 "Statistics_General:");
467 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
468 " %-30s %10u %10u %10u %10u\n",
470 le32_to_cpu(dbg
->burst_check
),
471 accum_dbg
->burst_check
,
472 delta_dbg
->burst_check
, max_dbg
->burst_check
);
473 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
474 " %-30s %10u %10u %10u %10u\n",
476 le32_to_cpu(dbg
->burst_count
),
477 accum_dbg
->burst_count
,
478 delta_dbg
->burst_count
, max_dbg
->burst_count
);
479 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
480 " %-30s %10u %10u %10u %10u\n",
482 le32_to_cpu(general
->sleep_time
),
483 accum_general
->sleep_time
,
484 delta_general
->sleep_time
, max_general
->sleep_time
);
485 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
486 " %-30s %10u %10u %10u %10u\n",
488 le32_to_cpu(general
->slots_out
),
489 accum_general
->slots_out
,
490 delta_general
->slots_out
, max_general
->slots_out
);
491 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
492 " %-30s %10u %10u %10u %10u\n",
494 le32_to_cpu(general
->slots_idle
),
495 accum_general
->slots_idle
,
496 delta_general
->slots_idle
, max_general
->slots_idle
);
497 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
, "ttl_timestamp:\t\t\t%u\n",
498 le32_to_cpu(general
->ttl_timestamp
));
499 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
500 " %-30s %10u %10u %10u %10u\n",
502 le32_to_cpu(div
->tx_on_a
), accum_div
->tx_on_a
,
503 delta_div
->tx_on_a
, max_div
->tx_on_a
);
504 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
505 " %-30s %10u %10u %10u %10u\n",
507 le32_to_cpu(div
->tx_on_b
), accum_div
->tx_on_b
,
508 delta_div
->tx_on_b
, max_div
->tx_on_b
);
509 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
510 " %-30s %10u %10u %10u %10u\n",
512 le32_to_cpu(div
->exec_time
), accum_div
->exec_time
,
513 delta_div
->exec_time
, max_div
->exec_time
);
514 pos
+= scnprintf(buf
+ pos
, bufsz
- pos
,
515 " %-30s %10u %10u %10u %10u\n",
517 le32_to_cpu(div
->probe_time
), accum_div
->probe_time
,
518 delta_div
->probe_time
, max_div
->probe_time
);
519 ret
= simple_read_from_buffer(user_buf
, count
, ppos
, buf
, pos
);