• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/drivers/net/wireless/iwlwifi/
1/******************************************************************************
2 *
3 * GPL LICENSE SUMMARY
4 *
5 * Copyright(c) 2008 - 2010 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
32static 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
53ssize_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, *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;
67
68	if (!iwl_is_alive(priv))
69		return -EAGAIN;
70
71	buf = kzalloc(bufsz, GFP_KERNEL);
72	if (!buf) {
73		IWL_ERR(priv, "Can not allocate Buffer\n");
74		return -ENOMEM;
75	}
76
77	/*
78	 * The statistic information display here is based on
79	 * the last statistics notification from uCode
80	 * might not reflect the current uCode activity
81	 */
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;
94
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),
102			 accum_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",
106			 "fina_cnt:",
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",
149			 "sfd_timeout:",
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",
156			 "fina_timeout:",
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",
163			 "unresponded_rts:",
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",
177			 "sent_ack_cnt:",
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",
184			 "sent_cts_cnt:",
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);
188
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",
194			 "ina_cnt:",
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",
199			 "fina_cnt:",
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",
204			 "plcp_err:",
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",
209			 "crc32_err:",
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",
214			 "overrun_err:",
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",
227			 "crc32_good:",
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",
233			 "false_alarm_cnt:",
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",
246			 "sfd_timeout:",
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",
252			 "fina_timeout:",
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",
258			 "unresponded_rts:",
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",
272			 "sent_ack_cnt:",
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",
279			 "sent_cts_cnt:",
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);
284
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",
290			 "bogus_cts:",
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",
296			 "bogus_ack:",
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",
302			 "non_bssid_frames:",
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",
309			 "filtered_frames:",
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);
321
322	ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
323	kfree(buf);
324	return ret;
325}
326
327ssize_t iwl3945_ucode_tx_stats_read(struct file *file,
328				    char __user *user_buf,
329				    size_t count, loff_t *ppos)
330{
331	struct iwl_priv *priv = file->private_data;
332	int pos = 0;
333	char *buf;
334	int bufsz = (sizeof(struct iwl39_statistics_tx) * 48) + 250;
335	ssize_t ret;
336	struct iwl39_statistics_tx *tx, *accum_tx, *delta_tx, *max_tx;
337
338	if (!iwl_is_alive(priv))
339		return -EAGAIN;
340
341	buf = kzalloc(bufsz, GFP_KERNEL);
342	if (!buf) {
343		IWL_ERR(priv, "Can not allocate Buffer\n");
344		return -ENOMEM;
345	}
346
347	/*
348	 * The statistic information display here is based on
349	 * the last statistics notification from uCode
350	 * might not reflect the current uCode activity
351	 */
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",
359			 "Statistics_Tx:");
360	pos += scnprintf(buf + pos, bufsz - pos,
361			 "  %-30s %10u  %10u  %10u  %10u\n",
362			 "preamble:",
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",
368			 "rx_detected_cnt:",
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",
381			 "bt_prio_kill_cnt:",
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",
388			 "few_bytes_cnt:",
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",
394			 "cts_timeout:",
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",
399			 "ack_timeout:",
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",
405			 "expected_ack_cnt:",
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",
412			 "actual_ack_cnt:",
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);
417
418	ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
419	kfree(buf);
420	return ret;
421}
422
423ssize_t iwl3945_ucode_general_stats_read(struct file *file,
424					 char __user *user_buf,
425					 size_t count, loff_t *ppos)
426{
427	struct iwl_priv *priv = file->private_data;
428	int pos = 0;
429	char *buf;
430	int bufsz = sizeof(struct iwl39_statistics_general) * 10 + 300;
431	ssize_t ret;
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;
436
437	if (!iwl_is_alive(priv))
438		return -EAGAIN;
439
440	buf = kzalloc(bufsz, GFP_KERNEL);
441	if (!buf) {
442		IWL_ERR(priv, "Can not allocate Buffer\n");
443		return -ENOMEM;
444	}
445
446	/*
447	 * The statistic information display here is based on
448	 * the last statistics notification from uCode
449	 * might not reflect the current uCode activity
450	 */
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",
469			 "burst_check:",
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",
475			 "burst_count:",
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",
481			 "sleep_time:",
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",
487			 "slots_out:",
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",
493			 "slots_idle:",
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",
501			 "tx_on_a:",
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",
506			 "tx_on_b:",
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",
511			 "exec_time:",
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",
516			 "probe_time:",
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);
520	kfree(buf);
521	return ret;
522}
523