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