b43: (un)initialize driver on the BCMA bus
[pandora-kernel.git] / drivers / net / wireless / iwlegacy / iwl-3945-debugfs.c
1 /******************************************************************************
2  *
3  * GPL LICENSE SUMMARY
4  *
5  * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
6  *
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.
10  *
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.
15  *
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,
19  * USA
20  *
21  * The full GNU General Public License is included in this distribution
22  * in the file called LICENSE.GPL.
23  *
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  *****************************************************************************/
28
29 #include "iwl-3945-debugfs.h"
30
31
32 static int iwl3945_statistics_flag(struct iwl_priv *priv, char *buf, int bufsz)
33 {
34         int p = 0;
35
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");
50         return p;
51 }
52
53 ssize_t iwl3945_ucode_rx_stats_read(struct file *file,
54                                     char __user *user_buf,
55                                     size_t count, loff_t *ppos)
56 {
57         struct iwl_priv *priv = file->private_data;
58         int pos = 0;
59         char *buf;
60         int bufsz = sizeof(struct iwl39_statistics_rx_phy) * 40 +
61                     sizeof(struct iwl39_statistics_rx_non_phy) * 40 + 400;
62         ssize_t ret;
63         struct iwl39_statistics_rx_phy *ofdm, *accum_ofdm, *delta_ofdm,
64                                         *max_ofdm;
65         struct iwl39_statistics_rx_phy *cck, *accum_cck, *delta_cck, *max_cck;
66         struct iwl39_statistics_rx_non_phy *general, *accum_general;
67         struct iwl39_statistics_rx_non_phy *delta_general, *max_general;
68
69         if (!iwl_legacy_is_alive(priv))
70                 return -EAGAIN;
71
72         buf = kzalloc(bufsz, GFP_KERNEL);
73         if (!buf) {
74                 IWL_ERR(priv, "Can not allocate Buffer\n");
75                 return -ENOMEM;
76         }
77
78         /*
79          * The statistic information display here is based on
80          * the last statistics notification from uCode
81          * might not reflect the current uCode activity
82          */
83         ofdm = &priv->_3945.statistics.rx.ofdm;
84         cck = &priv->_3945.statistics.rx.cck;
85         general = &priv->_3945.statistics.rx.general;
86         accum_ofdm = &priv->_3945.accum_statistics.rx.ofdm;
87         accum_cck = &priv->_3945.accum_statistics.rx.cck;
88         accum_general = &priv->_3945.accum_statistics.rx.general;
89         delta_ofdm = &priv->_3945.delta_statistics.rx.ofdm;
90         delta_cck = &priv->_3945.delta_statistics.rx.cck;
91         delta_general = &priv->_3945.delta_statistics.rx.general;
92         max_ofdm = &priv->_3945.max_delta.rx.ofdm;
93         max_cck = &priv->_3945.max_delta.rx.cck;
94         max_general = &priv->_3945.max_delta.rx.general;
95
96         pos += iwl3945_statistics_flag(priv, buf, bufsz);
97         pos += scnprintf(buf + pos, bufsz - pos, "%-32s     current"
98                          "acumulative       delta         max\n",
99                          "Statistics_Rx - OFDM:");
100         pos += scnprintf(buf + pos, bufsz - pos,
101                          "  %-30s %10u  %10u  %10u  %10u\n",
102                          "ina_cnt:", le32_to_cpu(ofdm->ina_cnt),
103                          accum_ofdm->ina_cnt,
104                          delta_ofdm->ina_cnt, max_ofdm->ina_cnt);
105         pos += scnprintf(buf + pos, bufsz - pos,
106                          "  %-30s %10u  %10u  %10u  %10u\n",
107                          "fina_cnt:",
108                          le32_to_cpu(ofdm->fina_cnt), accum_ofdm->fina_cnt,
109                          delta_ofdm->fina_cnt, max_ofdm->fina_cnt);
110         pos += scnprintf(buf + pos, bufsz - pos,
111                          "  %-30s %10u  %10u  %10u  %10u\n", "plcp_err:",
112                          le32_to_cpu(ofdm->plcp_err), accum_ofdm->plcp_err,
113                          delta_ofdm->plcp_err, max_ofdm->plcp_err);
114         pos += scnprintf(buf + pos, bufsz - pos,
115                          "  %-30s %10u  %10u  %10u  %10u\n",  "crc32_err:",
116                          le32_to_cpu(ofdm->crc32_err), accum_ofdm->crc32_err,
117                          delta_ofdm->crc32_err, max_ofdm->crc32_err);
118         pos += scnprintf(buf + pos, bufsz - pos,
119                          "  %-30s %10u  %10u  %10u  %10u\n", "overrun_err:",
120                          le32_to_cpu(ofdm->overrun_err),
121                          accum_ofdm->overrun_err, delta_ofdm->overrun_err,
122                          max_ofdm->overrun_err);
123         pos += scnprintf(buf + pos, bufsz - pos,
124                          "  %-30s %10u  %10u  %10u  %10u\n",
125                          "early_overrun_err:",
126                          le32_to_cpu(ofdm->early_overrun_err),
127                          accum_ofdm->early_overrun_err,
128                          delta_ofdm->early_overrun_err,
129                          max_ofdm->early_overrun_err);
130         pos += scnprintf(buf + pos, bufsz - pos,
131                          "  %-30s %10u  %10u  %10u  %10u\n",
132                          "crc32_good:", le32_to_cpu(ofdm->crc32_good),
133                          accum_ofdm->crc32_good, delta_ofdm->crc32_good,
134                          max_ofdm->crc32_good);
135         pos += scnprintf(buf + pos, bufsz - pos,
136                          "  %-30s %10u  %10u  %10u  %10u\n", "false_alarm_cnt:",
137                          le32_to_cpu(ofdm->false_alarm_cnt),
138                          accum_ofdm->false_alarm_cnt,
139                          delta_ofdm->false_alarm_cnt,
140                          max_ofdm->false_alarm_cnt);
141         pos += scnprintf(buf + pos, bufsz - pos,
142                          "  %-30s %10u  %10u  %10u  %10u\n",
143                          "fina_sync_err_cnt:",
144                          le32_to_cpu(ofdm->fina_sync_err_cnt),
145                          accum_ofdm->fina_sync_err_cnt,
146                          delta_ofdm->fina_sync_err_cnt,
147                          max_ofdm->fina_sync_err_cnt);
148         pos += scnprintf(buf + pos, bufsz - pos,
149                          "  %-30s %10u  %10u  %10u  %10u\n",
150                          "sfd_timeout:",
151                          le32_to_cpu(ofdm->sfd_timeout),
152                          accum_ofdm->sfd_timeout,
153                          delta_ofdm->sfd_timeout,
154                          max_ofdm->sfd_timeout);
155         pos += scnprintf(buf + pos, bufsz - pos,
156                          "  %-30s %10u  %10u  %10u  %10u\n",
157                          "fina_timeout:",
158                          le32_to_cpu(ofdm->fina_timeout),
159                          accum_ofdm->fina_timeout,
160                          delta_ofdm->fina_timeout,
161                          max_ofdm->fina_timeout);
162         pos += scnprintf(buf + pos, bufsz - pos,
163                          "  %-30s %10u  %10u  %10u  %10u\n",
164                          "unresponded_rts:",
165                          le32_to_cpu(ofdm->unresponded_rts),
166                          accum_ofdm->unresponded_rts,
167                          delta_ofdm->unresponded_rts,
168                          max_ofdm->unresponded_rts);
169         pos += scnprintf(buf + pos, bufsz - pos,
170                          "  %-30s %10u  %10u  %10u  %10u\n",
171                          "rxe_frame_lmt_ovrun:",
172                          le32_to_cpu(ofdm->rxe_frame_limit_overrun),
173                          accum_ofdm->rxe_frame_limit_overrun,
174                          delta_ofdm->rxe_frame_limit_overrun,
175                          max_ofdm->rxe_frame_limit_overrun);
176         pos += scnprintf(buf + pos, bufsz - pos,
177                          "  %-30s %10u  %10u  %10u  %10u\n",
178                          "sent_ack_cnt:",
179                          le32_to_cpu(ofdm->sent_ack_cnt),
180                          accum_ofdm->sent_ack_cnt,
181                          delta_ofdm->sent_ack_cnt,
182                          max_ofdm->sent_ack_cnt);
183         pos += scnprintf(buf + pos, bufsz - pos,
184                          "  %-30s %10u  %10u  %10u  %10u\n",
185                          "sent_cts_cnt:",
186                          le32_to_cpu(ofdm->sent_cts_cnt),
187                          accum_ofdm->sent_cts_cnt,
188                          delta_ofdm->sent_cts_cnt, max_ofdm->sent_cts_cnt);
189
190         pos += scnprintf(buf + pos, bufsz - pos, "%-32s     current"
191                          "acumulative       delta         max\n",
192                          "Statistics_Rx - CCK:");
193         pos += scnprintf(buf + pos, bufsz - pos,
194                          "  %-30s %10u  %10u  %10u  %10u\n",
195                          "ina_cnt:",
196                          le32_to_cpu(cck->ina_cnt), accum_cck->ina_cnt,
197                          delta_cck->ina_cnt, max_cck->ina_cnt);
198         pos += scnprintf(buf + pos, bufsz - pos,
199                          "  %-30s %10u  %10u  %10u  %10u\n",
200                          "fina_cnt:",
201                          le32_to_cpu(cck->fina_cnt), accum_cck->fina_cnt,
202                          delta_cck->fina_cnt, max_cck->fina_cnt);
203         pos += scnprintf(buf + pos, bufsz - pos,
204                          "  %-30s %10u  %10u  %10u  %10u\n",
205                          "plcp_err:",
206                          le32_to_cpu(cck->plcp_err), accum_cck->plcp_err,
207                          delta_cck->plcp_err, max_cck->plcp_err);
208         pos += scnprintf(buf + pos, bufsz - pos,
209                          "  %-30s %10u  %10u  %10u  %10u\n",
210                          "crc32_err:",
211                          le32_to_cpu(cck->crc32_err), accum_cck->crc32_err,
212                          delta_cck->crc32_err, max_cck->crc32_err);
213         pos += scnprintf(buf + pos, bufsz - pos,
214                          "  %-30s %10u  %10u  %10u  %10u\n",
215                          "overrun_err:",
216                          le32_to_cpu(cck->overrun_err),
217                          accum_cck->overrun_err,
218                          delta_cck->overrun_err, max_cck->overrun_err);
219         pos += scnprintf(buf + pos, bufsz - pos,
220                          "  %-30s %10u  %10u  %10u  %10u\n",
221                          "early_overrun_err:",
222                          le32_to_cpu(cck->early_overrun_err),
223                          accum_cck->early_overrun_err,
224                          delta_cck->early_overrun_err,
225                          max_cck->early_overrun_err);
226         pos += scnprintf(buf + pos, bufsz - pos,
227                          "  %-30s %10u  %10u  %10u  %10u\n",
228                          "crc32_good:",
229                          le32_to_cpu(cck->crc32_good), accum_cck->crc32_good,
230                          delta_cck->crc32_good,
231                          max_cck->crc32_good);
232         pos += scnprintf(buf + pos, bufsz - pos,
233                          "  %-30s %10u  %10u  %10u  %10u\n",
234                          "false_alarm_cnt:",
235                          le32_to_cpu(cck->false_alarm_cnt),
236                          accum_cck->false_alarm_cnt,
237                          delta_cck->false_alarm_cnt, max_cck->false_alarm_cnt);
238         pos += scnprintf(buf + pos, bufsz - pos,
239                          "  %-30s %10u  %10u  %10u  %10u\n",
240                          "fina_sync_err_cnt:",
241                          le32_to_cpu(cck->fina_sync_err_cnt),
242                          accum_cck->fina_sync_err_cnt,
243                          delta_cck->fina_sync_err_cnt,
244                          max_cck->fina_sync_err_cnt);
245         pos += scnprintf(buf + pos, bufsz - pos,
246                          "  %-30s %10u  %10u  %10u  %10u\n",
247                          "sfd_timeout:",
248                          le32_to_cpu(cck->sfd_timeout),
249                          accum_cck->sfd_timeout,
250                          delta_cck->sfd_timeout, max_cck->sfd_timeout);
251         pos += scnprintf(buf + pos, bufsz - pos,
252                          "  %-30s %10u  %10u  %10u  %10u\n",
253                          "fina_timeout:",
254                          le32_to_cpu(cck->fina_timeout),
255                          accum_cck->fina_timeout,
256                          delta_cck->fina_timeout, max_cck->fina_timeout);
257         pos += scnprintf(buf + pos, bufsz - pos,
258                          "  %-30s %10u  %10u  %10u  %10u\n",
259                          "unresponded_rts:",
260                          le32_to_cpu(cck->unresponded_rts),
261                          accum_cck->unresponded_rts,
262                          delta_cck->unresponded_rts,
263                          max_cck->unresponded_rts);
264         pos += scnprintf(buf + pos, bufsz - pos,
265                          "  %-30s %10u  %10u  %10u  %10u\n",
266                          "rxe_frame_lmt_ovrun:",
267                          le32_to_cpu(cck->rxe_frame_limit_overrun),
268                          accum_cck->rxe_frame_limit_overrun,
269                          delta_cck->rxe_frame_limit_overrun,
270                          max_cck->rxe_frame_limit_overrun);
271         pos += scnprintf(buf + pos, bufsz - pos,
272                          "  %-30s %10u  %10u  %10u  %10u\n",
273                          "sent_ack_cnt:",
274                          le32_to_cpu(cck->sent_ack_cnt),
275                          accum_cck->sent_ack_cnt,
276                          delta_cck->sent_ack_cnt,
277                          max_cck->sent_ack_cnt);
278         pos += scnprintf(buf + pos, bufsz - pos,
279                          "  %-30s %10u  %10u  %10u  %10u\n",
280                          "sent_cts_cnt:",
281                          le32_to_cpu(cck->sent_cts_cnt),
282                          accum_cck->sent_cts_cnt,
283                          delta_cck->sent_cts_cnt,
284                          max_cck->sent_cts_cnt);
285
286         pos += scnprintf(buf + pos, bufsz - pos, "%-32s     current"
287                          "acumulative       delta         max\n",
288                          "Statistics_Rx - GENERAL:");
289         pos += scnprintf(buf + pos, bufsz - pos,
290                          "  %-30s %10u  %10u  %10u  %10u\n",
291                          "bogus_cts:",
292                          le32_to_cpu(general->bogus_cts),
293                          accum_general->bogus_cts,
294                          delta_general->bogus_cts, max_general->bogus_cts);
295         pos += scnprintf(buf + pos, bufsz - pos,
296                          "  %-30s %10u  %10u  %10u  %10u\n",
297                          "bogus_ack:",
298                          le32_to_cpu(general->bogus_ack),
299                          accum_general->bogus_ack,
300                          delta_general->bogus_ack, max_general->bogus_ack);
301         pos += scnprintf(buf + pos, bufsz - pos,
302                          "  %-30s %10u  %10u  %10u  %10u\n",
303                          "non_bssid_frames:",
304                          le32_to_cpu(general->non_bssid_frames),
305                          accum_general->non_bssid_frames,
306                          delta_general->non_bssid_frames,
307                          max_general->non_bssid_frames);
308         pos += scnprintf(buf + pos, bufsz - pos,
309                          "  %-30s %10u  %10u  %10u  %10u\n",
310                          "filtered_frames:",
311                          le32_to_cpu(general->filtered_frames),
312                          accum_general->filtered_frames,
313                          delta_general->filtered_frames,
314                          max_general->filtered_frames);
315         pos += scnprintf(buf + pos, bufsz - pos,
316                          "  %-30s %10u  %10u  %10u  %10u\n",
317                          "non_channel_beacons:",
318                          le32_to_cpu(general->non_channel_beacons),
319                          accum_general->non_channel_beacons,
320                          delta_general->non_channel_beacons,
321                          max_general->non_channel_beacons);
322
323         ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
324         kfree(buf);
325         return ret;
326 }
327
328 ssize_t iwl3945_ucode_tx_stats_read(struct file *file,
329                                     char __user *user_buf,
330                                     size_t count, loff_t *ppos)
331 {
332         struct iwl_priv *priv = file->private_data;
333         int pos = 0;
334         char *buf;
335         int bufsz = (sizeof(struct iwl39_statistics_tx) * 48) + 250;
336         ssize_t ret;
337         struct iwl39_statistics_tx *tx, *accum_tx, *delta_tx, *max_tx;
338
339         if (!iwl_legacy_is_alive(priv))
340                 return -EAGAIN;
341
342         buf = kzalloc(bufsz, GFP_KERNEL);
343         if (!buf) {
344                 IWL_ERR(priv, "Can not allocate Buffer\n");
345                 return -ENOMEM;
346         }
347
348         /*
349          * The statistic information display here is based on
350          * the last statistics notification from uCode
351          * might not reflect the current uCode activity
352          */
353         tx = &priv->_3945.statistics.tx;
354         accum_tx = &priv->_3945.accum_statistics.tx;
355         delta_tx = &priv->_3945.delta_statistics.tx;
356         max_tx = &priv->_3945.max_delta.tx;
357         pos += iwl3945_statistics_flag(priv, buf, bufsz);
358         pos += scnprintf(buf + pos, bufsz - pos, "%-32s     current"
359                          "acumulative       delta         max\n",
360                          "Statistics_Tx:");
361         pos += scnprintf(buf + pos, bufsz - pos,
362                          "  %-30s %10u  %10u  %10u  %10u\n",
363                          "preamble:",
364                          le32_to_cpu(tx->preamble_cnt),
365                          accum_tx->preamble_cnt,
366                          delta_tx->preamble_cnt, max_tx->preamble_cnt);
367         pos += scnprintf(buf + pos, bufsz - pos,
368                          "  %-30s %10u  %10u  %10u  %10u\n",
369                          "rx_detected_cnt:",
370                          le32_to_cpu(tx->rx_detected_cnt),
371                          accum_tx->rx_detected_cnt,
372                          delta_tx->rx_detected_cnt, max_tx->rx_detected_cnt);
373         pos += scnprintf(buf + pos, bufsz - pos,
374                          "  %-30s %10u  %10u  %10u  %10u\n",
375                          "bt_prio_defer_cnt:",
376                          le32_to_cpu(tx->bt_prio_defer_cnt),
377                          accum_tx->bt_prio_defer_cnt,
378                          delta_tx->bt_prio_defer_cnt,
379                          max_tx->bt_prio_defer_cnt);
380         pos += scnprintf(buf + pos, bufsz - pos,
381                          "  %-30s %10u  %10u  %10u  %10u\n",
382                          "bt_prio_kill_cnt:",
383                          le32_to_cpu(tx->bt_prio_kill_cnt),
384                          accum_tx->bt_prio_kill_cnt,
385                          delta_tx->bt_prio_kill_cnt,
386                          max_tx->bt_prio_kill_cnt);
387         pos += scnprintf(buf + pos, bufsz - pos,
388                          "  %-30s %10u  %10u  %10u  %10u\n",
389                          "few_bytes_cnt:",
390                          le32_to_cpu(tx->few_bytes_cnt),
391                          accum_tx->few_bytes_cnt,
392                          delta_tx->few_bytes_cnt, max_tx->few_bytes_cnt);
393         pos += scnprintf(buf + pos, bufsz - pos,
394                          "  %-30s %10u  %10u  %10u  %10u\n",
395                          "cts_timeout:",
396                          le32_to_cpu(tx->cts_timeout), accum_tx->cts_timeout,
397                          delta_tx->cts_timeout, max_tx->cts_timeout);
398         pos += scnprintf(buf + pos, bufsz - pos,
399                          "  %-30s %10u  %10u  %10u  %10u\n",
400                          "ack_timeout:",
401                          le32_to_cpu(tx->ack_timeout),
402                          accum_tx->ack_timeout,
403                          delta_tx->ack_timeout, max_tx->ack_timeout);
404         pos += scnprintf(buf + pos, bufsz - pos,
405                          "  %-30s %10u  %10u  %10u  %10u\n",
406                          "expected_ack_cnt:",
407                          le32_to_cpu(tx->expected_ack_cnt),
408                          accum_tx->expected_ack_cnt,
409                          delta_tx->expected_ack_cnt,
410                          max_tx->expected_ack_cnt);
411         pos += scnprintf(buf + pos, bufsz - pos,
412                          "  %-30s %10u  %10u  %10u  %10u\n",
413                          "actual_ack_cnt:",
414                          le32_to_cpu(tx->actual_ack_cnt),
415                          accum_tx->actual_ack_cnt,
416                          delta_tx->actual_ack_cnt,
417                          max_tx->actual_ack_cnt);
418
419         ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
420         kfree(buf);
421         return ret;
422 }
423
424 ssize_t iwl3945_ucode_general_stats_read(struct file *file,
425                                          char __user *user_buf,
426                                          size_t count, loff_t *ppos)
427 {
428         struct iwl_priv *priv = file->private_data;
429         int pos = 0;
430         char *buf;
431         int bufsz = sizeof(struct iwl39_statistics_general) * 10 + 300;
432         ssize_t ret;
433         struct iwl39_statistics_general *general, *accum_general;
434         struct iwl39_statistics_general *delta_general, *max_general;
435         struct statistics_dbg *dbg, *accum_dbg, *delta_dbg, *max_dbg;
436         struct iwl39_statistics_div *div, *accum_div, *delta_div, *max_div;
437
438         if (!iwl_legacy_is_alive(priv))
439                 return -EAGAIN;
440
441         buf = kzalloc(bufsz, GFP_KERNEL);
442         if (!buf) {
443                 IWL_ERR(priv, "Can not allocate Buffer\n");
444                 return -ENOMEM;
445         }
446
447         /*
448          * The statistic information display here is based on
449          * the last statistics notification from uCode
450          * might not reflect the current uCode activity
451          */
452         general = &priv->_3945.statistics.general;
453         dbg = &priv->_3945.statistics.general.dbg;
454         div = &priv->_3945.statistics.general.div;
455         accum_general = &priv->_3945.accum_statistics.general;
456         delta_general = &priv->_3945.delta_statistics.general;
457         max_general = &priv->_3945.max_delta.general;
458         accum_dbg = &priv->_3945.accum_statistics.general.dbg;
459         delta_dbg = &priv->_3945.delta_statistics.general.dbg;
460         max_dbg = &priv->_3945.max_delta.general.dbg;
461         accum_div = &priv->_3945.accum_statistics.general.div;
462         delta_div = &priv->_3945.delta_statistics.general.div;
463         max_div = &priv->_3945.max_delta.general.div;
464         pos += iwl3945_statistics_flag(priv, buf, bufsz);
465         pos += scnprintf(buf + pos, bufsz - pos, "%-32s     current"
466                          "acumulative       delta         max\n",
467                          "Statistics_General:");
468         pos += scnprintf(buf + pos, bufsz - pos,
469                          "  %-30s %10u  %10u  %10u  %10u\n",
470                          "burst_check:",
471                          le32_to_cpu(dbg->burst_check),
472                          accum_dbg->burst_check,
473                          delta_dbg->burst_check, max_dbg->burst_check);
474         pos += scnprintf(buf + pos, bufsz - pos,
475                          "  %-30s %10u  %10u  %10u  %10u\n",
476                          "burst_count:",
477                          le32_to_cpu(dbg->burst_count),
478                          accum_dbg->burst_count,
479                          delta_dbg->burst_count, max_dbg->burst_count);
480         pos += scnprintf(buf + pos, bufsz - pos,
481                          "  %-30s %10u  %10u  %10u  %10u\n",
482                          "sleep_time:",
483                          le32_to_cpu(general->sleep_time),
484                          accum_general->sleep_time,
485                          delta_general->sleep_time, max_general->sleep_time);
486         pos += scnprintf(buf + pos, bufsz - pos,
487                          "  %-30s %10u  %10u  %10u  %10u\n",
488                          "slots_out:",
489                          le32_to_cpu(general->slots_out),
490                          accum_general->slots_out,
491                          delta_general->slots_out, max_general->slots_out);
492         pos += scnprintf(buf + pos, bufsz - pos,
493                          "  %-30s %10u  %10u  %10u  %10u\n",
494                          "slots_idle:",
495                          le32_to_cpu(general->slots_idle),
496                          accum_general->slots_idle,
497                          delta_general->slots_idle, max_general->slots_idle);
498         pos += scnprintf(buf + pos, bufsz - pos, "ttl_timestamp:\t\t\t%u\n",
499                          le32_to_cpu(general->ttl_timestamp));
500         pos += scnprintf(buf + pos, bufsz - pos,
501                          "  %-30s %10u  %10u  %10u  %10u\n",
502                          "tx_on_a:",
503                          le32_to_cpu(div->tx_on_a), accum_div->tx_on_a,
504                          delta_div->tx_on_a, max_div->tx_on_a);
505         pos += scnprintf(buf + pos, bufsz - pos,
506                          "  %-30s %10u  %10u  %10u  %10u\n",
507                          "tx_on_b:",
508                          le32_to_cpu(div->tx_on_b), accum_div->tx_on_b,
509                          delta_div->tx_on_b, max_div->tx_on_b);
510         pos += scnprintf(buf + pos, bufsz - pos,
511                          "  %-30s %10u  %10u  %10u  %10u\n",
512                          "exec_time:",
513                          le32_to_cpu(div->exec_time), accum_div->exec_time,
514                          delta_div->exec_time, max_div->exec_time);
515         pos += scnprintf(buf + pos, bufsz - pos,
516                          "  %-30s %10u  %10u  %10u  %10u\n",
517                          "probe_time:",
518                          le32_to_cpu(div->probe_time), accum_div->probe_time,
519                          delta_div->probe_time, max_div->probe_time);
520         ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
521         kfree(buf);
522         return ret;
523 }