1032
1038
return simple_read_from_buffer(user_buf, count, ppos, buf, pos);
1041
static const char *fmt_value = " %-30s %10u\n";
1042
static const char *fmt_hex = " %-30s 0x%02X\n";
1043
static const char *fmt_table = " %-30s %10u %10u %10u %10u\n";
1044
static const char *fmt_header =
1045
"%-32s current cumulative delta max\n";
1047
static int iwl_statistics_flag(struct iwl_priv *priv, char *buf, int bufsz)
1052
flag = le32_to_cpu(priv->statistics.flag);
1054
p += scnprintf(buf + p, bufsz - p, "Statistics Flag(0x%X):\n", flag);
1055
if (flag & UCODE_STATISTICS_CLEAR_MSK)
1056
p += scnprintf(buf + p, bufsz - p,
1057
"\tStatistics have been cleared\n");
1058
p += scnprintf(buf + p, bufsz - p, "\tOperational Frequency: %s\n",
1059
(flag & UCODE_STATISTICS_FREQUENCY_MSK)
1060
? "2.4 GHz" : "5.2 GHz");
1061
p += scnprintf(buf + p, bufsz - p, "\tTGj Narrow Band: %s\n",
1062
(flag & UCODE_STATISTICS_NARROW_BAND_MSK)
1063
? "enabled" : "disabled");
1035
1068
static ssize_t iwl_dbgfs_ucode_rx_stats_read(struct file *file,
1036
1069
char __user *user_buf,
1037
1070
size_t count, loff_t *ppos)
1039
1072
struct iwl_priv *priv = file->private_data;
1040
return priv->cfg->ops->lib->debugfs_ops.rx_stats_read(file,
1041
user_buf, count, ppos);
1075
int bufsz = sizeof(struct statistics_rx_phy) * 40 +
1076
sizeof(struct statistics_rx_non_phy) * 40 +
1077
sizeof(struct statistics_rx_ht_phy) * 40 + 400;
1079
struct statistics_rx_phy *ofdm, *accum_ofdm, *delta_ofdm, *max_ofdm;
1080
struct statistics_rx_phy *cck, *accum_cck, *delta_cck, *max_cck;
1081
struct statistics_rx_non_phy *general, *accum_general;
1082
struct statistics_rx_non_phy *delta_general, *max_general;
1083
struct statistics_rx_ht_phy *ht, *accum_ht, *delta_ht, *max_ht;
1085
if (!iwl_is_alive(priv))
1088
buf = kzalloc(bufsz, GFP_KERNEL);
1090
IWL_ERR(priv, "Can not allocate Buffer\n");
1095
* the statistic information display here is based on
1096
* the last statistics notification from uCode
1097
* might not reflect the current uCode activity
1099
ofdm = &priv->statistics.rx_ofdm;
1100
cck = &priv->statistics.rx_cck;
1101
general = &priv->statistics.rx_non_phy;
1102
ht = &priv->statistics.rx_ofdm_ht;
1103
accum_ofdm = &priv->accum_stats.rx_ofdm;
1104
accum_cck = &priv->accum_stats.rx_cck;
1105
accum_general = &priv->accum_stats.rx_non_phy;
1106
accum_ht = &priv->accum_stats.rx_ofdm_ht;
1107
delta_ofdm = &priv->delta_stats.rx_ofdm;
1108
delta_cck = &priv->delta_stats.rx_cck;
1109
delta_general = &priv->delta_stats.rx_non_phy;
1110
delta_ht = &priv->delta_stats.rx_ofdm_ht;
1111
max_ofdm = &priv->max_delta_stats.rx_ofdm;
1112
max_cck = &priv->max_delta_stats.rx_cck;
1113
max_general = &priv->max_delta_stats.rx_non_phy;
1114
max_ht = &priv->max_delta_stats.rx_ofdm_ht;
1116
pos += iwl_statistics_flag(priv, buf, bufsz);
1117
pos += scnprintf(buf + pos, bufsz - pos,
1118
fmt_header, "Statistics_Rx - OFDM:");
1119
pos += scnprintf(buf + pos, bufsz - pos,
1120
fmt_table, "ina_cnt:",
1121
le32_to_cpu(ofdm->ina_cnt),
1122
accum_ofdm->ina_cnt,
1123
delta_ofdm->ina_cnt, max_ofdm->ina_cnt);
1124
pos += scnprintf(buf + pos, bufsz - pos,
1125
fmt_table, "fina_cnt:",
1126
le32_to_cpu(ofdm->fina_cnt), accum_ofdm->fina_cnt,
1127
delta_ofdm->fina_cnt, max_ofdm->fina_cnt);
1128
pos += scnprintf(buf + pos, bufsz - pos,
1129
fmt_table, "plcp_err:",
1130
le32_to_cpu(ofdm->plcp_err), accum_ofdm->plcp_err,
1131
delta_ofdm->plcp_err, max_ofdm->plcp_err);
1132
pos += scnprintf(buf + pos, bufsz - pos,
1133
fmt_table, "crc32_err:",
1134
le32_to_cpu(ofdm->crc32_err), accum_ofdm->crc32_err,
1135
delta_ofdm->crc32_err, max_ofdm->crc32_err);
1136
pos += scnprintf(buf + pos, bufsz - pos,
1137
fmt_table, "overrun_err:",
1138
le32_to_cpu(ofdm->overrun_err),
1139
accum_ofdm->overrun_err, delta_ofdm->overrun_err,
1140
max_ofdm->overrun_err);
1141
pos += scnprintf(buf + pos, bufsz - pos,
1142
fmt_table, "early_overrun_err:",
1143
le32_to_cpu(ofdm->early_overrun_err),
1144
accum_ofdm->early_overrun_err,
1145
delta_ofdm->early_overrun_err,
1146
max_ofdm->early_overrun_err);
1147
pos += scnprintf(buf + pos, bufsz - pos,
1148
fmt_table, "crc32_good:",
1149
le32_to_cpu(ofdm->crc32_good),
1150
accum_ofdm->crc32_good, delta_ofdm->crc32_good,
1151
max_ofdm->crc32_good);
1152
pos += scnprintf(buf + pos, bufsz - pos,
1153
fmt_table, "false_alarm_cnt:",
1154
le32_to_cpu(ofdm->false_alarm_cnt),
1155
accum_ofdm->false_alarm_cnt,
1156
delta_ofdm->false_alarm_cnt,
1157
max_ofdm->false_alarm_cnt);
1158
pos += scnprintf(buf + pos, bufsz - pos,
1159
fmt_table, "fina_sync_err_cnt:",
1160
le32_to_cpu(ofdm->fina_sync_err_cnt),
1161
accum_ofdm->fina_sync_err_cnt,
1162
delta_ofdm->fina_sync_err_cnt,
1163
max_ofdm->fina_sync_err_cnt);
1164
pos += scnprintf(buf + pos, bufsz - pos,
1165
fmt_table, "sfd_timeout:",
1166
le32_to_cpu(ofdm->sfd_timeout),
1167
accum_ofdm->sfd_timeout, delta_ofdm->sfd_timeout,
1168
max_ofdm->sfd_timeout);
1169
pos += scnprintf(buf + pos, bufsz - pos,
1170
fmt_table, "fina_timeout:",
1171
le32_to_cpu(ofdm->fina_timeout),
1172
accum_ofdm->fina_timeout, delta_ofdm->fina_timeout,
1173
max_ofdm->fina_timeout);
1174
pos += scnprintf(buf + pos, bufsz - pos,
1175
fmt_table, "unresponded_rts:",
1176
le32_to_cpu(ofdm->unresponded_rts),
1177
accum_ofdm->unresponded_rts,
1178
delta_ofdm->unresponded_rts,
1179
max_ofdm->unresponded_rts);
1180
pos += scnprintf(buf + pos, bufsz - pos,
1181
fmt_table, "rxe_frame_lmt_ovrun:",
1182
le32_to_cpu(ofdm->rxe_frame_limit_overrun),
1183
accum_ofdm->rxe_frame_limit_overrun,
1184
delta_ofdm->rxe_frame_limit_overrun,
1185
max_ofdm->rxe_frame_limit_overrun);
1186
pos += scnprintf(buf + pos, bufsz - pos,
1187
fmt_table, "sent_ack_cnt:",
1188
le32_to_cpu(ofdm->sent_ack_cnt),
1189
accum_ofdm->sent_ack_cnt, delta_ofdm->sent_ack_cnt,
1190
max_ofdm->sent_ack_cnt);
1191
pos += scnprintf(buf + pos, bufsz - pos,
1192
fmt_table, "sent_cts_cnt:",
1193
le32_to_cpu(ofdm->sent_cts_cnt),
1194
accum_ofdm->sent_cts_cnt, delta_ofdm->sent_cts_cnt,
1195
max_ofdm->sent_cts_cnt);
1196
pos += scnprintf(buf + pos, bufsz - pos,
1197
fmt_table, "sent_ba_rsp_cnt:",
1198
le32_to_cpu(ofdm->sent_ba_rsp_cnt),
1199
accum_ofdm->sent_ba_rsp_cnt,
1200
delta_ofdm->sent_ba_rsp_cnt,
1201
max_ofdm->sent_ba_rsp_cnt);
1202
pos += scnprintf(buf + pos, bufsz - pos,
1203
fmt_table, "dsp_self_kill:",
1204
le32_to_cpu(ofdm->dsp_self_kill),
1205
accum_ofdm->dsp_self_kill,
1206
delta_ofdm->dsp_self_kill,
1207
max_ofdm->dsp_self_kill);
1208
pos += scnprintf(buf + pos, bufsz - pos,
1209
fmt_table, "mh_format_err:",
1210
le32_to_cpu(ofdm->mh_format_err),
1211
accum_ofdm->mh_format_err,
1212
delta_ofdm->mh_format_err,
1213
max_ofdm->mh_format_err);
1214
pos += scnprintf(buf + pos, bufsz - pos,
1215
fmt_table, "re_acq_main_rssi_sum:",
1216
le32_to_cpu(ofdm->re_acq_main_rssi_sum),
1217
accum_ofdm->re_acq_main_rssi_sum,
1218
delta_ofdm->re_acq_main_rssi_sum,
1219
max_ofdm->re_acq_main_rssi_sum);
1221
pos += scnprintf(buf + pos, bufsz - pos,
1222
fmt_header, "Statistics_Rx - CCK:");
1223
pos += scnprintf(buf + pos, bufsz - pos,
1224
fmt_table, "ina_cnt:",
1225
le32_to_cpu(cck->ina_cnt), accum_cck->ina_cnt,
1226
delta_cck->ina_cnt, max_cck->ina_cnt);
1227
pos += scnprintf(buf + pos, bufsz - pos,
1228
fmt_table, "fina_cnt:",
1229
le32_to_cpu(cck->fina_cnt), accum_cck->fina_cnt,
1230
delta_cck->fina_cnt, max_cck->fina_cnt);
1231
pos += scnprintf(buf + pos, bufsz - pos,
1232
fmt_table, "plcp_err:",
1233
le32_to_cpu(cck->plcp_err), accum_cck->plcp_err,
1234
delta_cck->plcp_err, max_cck->plcp_err);
1235
pos += scnprintf(buf + pos, bufsz - pos,
1236
fmt_table, "crc32_err:",
1237
le32_to_cpu(cck->crc32_err), accum_cck->crc32_err,
1238
delta_cck->crc32_err, max_cck->crc32_err);
1239
pos += scnprintf(buf + pos, bufsz - pos,
1240
fmt_table, "overrun_err:",
1241
le32_to_cpu(cck->overrun_err),
1242
accum_cck->overrun_err, delta_cck->overrun_err,
1243
max_cck->overrun_err);
1244
pos += scnprintf(buf + pos, bufsz - pos,
1245
fmt_table, "early_overrun_err:",
1246
le32_to_cpu(cck->early_overrun_err),
1247
accum_cck->early_overrun_err,
1248
delta_cck->early_overrun_err,
1249
max_cck->early_overrun_err);
1250
pos += scnprintf(buf + pos, bufsz - pos,
1251
fmt_table, "crc32_good:",
1252
le32_to_cpu(cck->crc32_good), accum_cck->crc32_good,
1253
delta_cck->crc32_good, max_cck->crc32_good);
1254
pos += scnprintf(buf + pos, bufsz - pos,
1255
fmt_table, "false_alarm_cnt:",
1256
le32_to_cpu(cck->false_alarm_cnt),
1257
accum_cck->false_alarm_cnt,
1258
delta_cck->false_alarm_cnt, max_cck->false_alarm_cnt);
1259
pos += scnprintf(buf + pos, bufsz - pos,
1260
fmt_table, "fina_sync_err_cnt:",
1261
le32_to_cpu(cck->fina_sync_err_cnt),
1262
accum_cck->fina_sync_err_cnt,
1263
delta_cck->fina_sync_err_cnt,
1264
max_cck->fina_sync_err_cnt);
1265
pos += scnprintf(buf + pos, bufsz - pos,
1266
fmt_table, "sfd_timeout:",
1267
le32_to_cpu(cck->sfd_timeout),
1268
accum_cck->sfd_timeout, delta_cck->sfd_timeout,
1269
max_cck->sfd_timeout);
1270
pos += scnprintf(buf + pos, bufsz - pos,
1271
fmt_table, "fina_timeout:",
1272
le32_to_cpu(cck->fina_timeout),
1273
accum_cck->fina_timeout, delta_cck->fina_timeout,
1274
max_cck->fina_timeout);
1275
pos += scnprintf(buf + pos, bufsz - pos,
1276
fmt_table, "unresponded_rts:",
1277
le32_to_cpu(cck->unresponded_rts),
1278
accum_cck->unresponded_rts, delta_cck->unresponded_rts,
1279
max_cck->unresponded_rts);
1280
pos += scnprintf(buf + pos, bufsz - pos,
1281
fmt_table, "rxe_frame_lmt_ovrun:",
1282
le32_to_cpu(cck->rxe_frame_limit_overrun),
1283
accum_cck->rxe_frame_limit_overrun,
1284
delta_cck->rxe_frame_limit_overrun,
1285
max_cck->rxe_frame_limit_overrun);
1286
pos += scnprintf(buf + pos, bufsz - pos,
1287
fmt_table, "sent_ack_cnt:",
1288
le32_to_cpu(cck->sent_ack_cnt),
1289
accum_cck->sent_ack_cnt, delta_cck->sent_ack_cnt,
1290
max_cck->sent_ack_cnt);
1291
pos += scnprintf(buf + pos, bufsz - pos,
1292
fmt_table, "sent_cts_cnt:",
1293
le32_to_cpu(cck->sent_cts_cnt),
1294
accum_cck->sent_cts_cnt, delta_cck->sent_cts_cnt,
1295
max_cck->sent_cts_cnt);
1296
pos += scnprintf(buf + pos, bufsz - pos,
1297
fmt_table, "sent_ba_rsp_cnt:",
1298
le32_to_cpu(cck->sent_ba_rsp_cnt),
1299
accum_cck->sent_ba_rsp_cnt,
1300
delta_cck->sent_ba_rsp_cnt,
1301
max_cck->sent_ba_rsp_cnt);
1302
pos += scnprintf(buf + pos, bufsz - pos,
1303
fmt_table, "dsp_self_kill:",
1304
le32_to_cpu(cck->dsp_self_kill),
1305
accum_cck->dsp_self_kill, delta_cck->dsp_self_kill,
1306
max_cck->dsp_self_kill);
1307
pos += scnprintf(buf + pos, bufsz - pos,
1308
fmt_table, "mh_format_err:",
1309
le32_to_cpu(cck->mh_format_err),
1310
accum_cck->mh_format_err, delta_cck->mh_format_err,
1311
max_cck->mh_format_err);
1312
pos += scnprintf(buf + pos, bufsz - pos,
1313
fmt_table, "re_acq_main_rssi_sum:",
1314
le32_to_cpu(cck->re_acq_main_rssi_sum),
1315
accum_cck->re_acq_main_rssi_sum,
1316
delta_cck->re_acq_main_rssi_sum,
1317
max_cck->re_acq_main_rssi_sum);
1319
pos += scnprintf(buf + pos, bufsz - pos,
1320
fmt_header, "Statistics_Rx - GENERAL:");
1321
pos += scnprintf(buf + pos, bufsz - pos,
1322
fmt_table, "bogus_cts:",
1323
le32_to_cpu(general->bogus_cts),
1324
accum_general->bogus_cts, delta_general->bogus_cts,
1325
max_general->bogus_cts);
1326
pos += scnprintf(buf + pos, bufsz - pos,
1327
fmt_table, "bogus_ack:",
1328
le32_to_cpu(general->bogus_ack),
1329
accum_general->bogus_ack, delta_general->bogus_ack,
1330
max_general->bogus_ack);
1331
pos += scnprintf(buf + pos, bufsz - pos,
1332
fmt_table, "non_bssid_frames:",
1333
le32_to_cpu(general->non_bssid_frames),
1334
accum_general->non_bssid_frames,
1335
delta_general->non_bssid_frames,
1336
max_general->non_bssid_frames);
1337
pos += scnprintf(buf + pos, bufsz - pos,
1338
fmt_table, "filtered_frames:",
1339
le32_to_cpu(general->filtered_frames),
1340
accum_general->filtered_frames,
1341
delta_general->filtered_frames,
1342
max_general->filtered_frames);
1343
pos += scnprintf(buf + pos, bufsz - pos,
1344
fmt_table, "non_channel_beacons:",
1345
le32_to_cpu(general->non_channel_beacons),
1346
accum_general->non_channel_beacons,
1347
delta_general->non_channel_beacons,
1348
max_general->non_channel_beacons);
1349
pos += scnprintf(buf + pos, bufsz - pos,
1350
fmt_table, "channel_beacons:",
1351
le32_to_cpu(general->channel_beacons),
1352
accum_general->channel_beacons,
1353
delta_general->channel_beacons,
1354
max_general->channel_beacons);
1355
pos += scnprintf(buf + pos, bufsz - pos,
1356
fmt_table, "num_missed_bcon:",
1357
le32_to_cpu(general->num_missed_bcon),
1358
accum_general->num_missed_bcon,
1359
delta_general->num_missed_bcon,
1360
max_general->num_missed_bcon);
1361
pos += scnprintf(buf + pos, bufsz - pos,
1362
fmt_table, "adc_rx_saturation_time:",
1363
le32_to_cpu(general->adc_rx_saturation_time),
1364
accum_general->adc_rx_saturation_time,
1365
delta_general->adc_rx_saturation_time,
1366
max_general->adc_rx_saturation_time);
1367
pos += scnprintf(buf + pos, bufsz - pos,
1368
fmt_table, "ina_detect_search_tm:",
1369
le32_to_cpu(general->ina_detection_search_time),
1370
accum_general->ina_detection_search_time,
1371
delta_general->ina_detection_search_time,
1372
max_general->ina_detection_search_time);
1373
pos += scnprintf(buf + pos, bufsz - pos,
1374
fmt_table, "beacon_silence_rssi_a:",
1375
le32_to_cpu(general->beacon_silence_rssi_a),
1376
accum_general->beacon_silence_rssi_a,
1377
delta_general->beacon_silence_rssi_a,
1378
max_general->beacon_silence_rssi_a);
1379
pos += scnprintf(buf + pos, bufsz - pos,
1380
fmt_table, "beacon_silence_rssi_b:",
1381
le32_to_cpu(general->beacon_silence_rssi_b),
1382
accum_general->beacon_silence_rssi_b,
1383
delta_general->beacon_silence_rssi_b,
1384
max_general->beacon_silence_rssi_b);
1385
pos += scnprintf(buf + pos, bufsz - pos,
1386
fmt_table, "beacon_silence_rssi_c:",
1387
le32_to_cpu(general->beacon_silence_rssi_c),
1388
accum_general->beacon_silence_rssi_c,
1389
delta_general->beacon_silence_rssi_c,
1390
max_general->beacon_silence_rssi_c);
1391
pos += scnprintf(buf + pos, bufsz - pos,
1392
fmt_table, "interference_data_flag:",
1393
le32_to_cpu(general->interference_data_flag),
1394
accum_general->interference_data_flag,
1395
delta_general->interference_data_flag,
1396
max_general->interference_data_flag);
1397
pos += scnprintf(buf + pos, bufsz - pos,
1398
fmt_table, "channel_load:",
1399
le32_to_cpu(general->channel_load),
1400
accum_general->channel_load,
1401
delta_general->channel_load,
1402
max_general->channel_load);
1403
pos += scnprintf(buf + pos, bufsz - pos,
1404
fmt_table, "dsp_false_alarms:",
1405
le32_to_cpu(general->dsp_false_alarms),
1406
accum_general->dsp_false_alarms,
1407
delta_general->dsp_false_alarms,
1408
max_general->dsp_false_alarms);
1409
pos += scnprintf(buf + pos, bufsz - pos,
1410
fmt_table, "beacon_rssi_a:",
1411
le32_to_cpu(general->beacon_rssi_a),
1412
accum_general->beacon_rssi_a,
1413
delta_general->beacon_rssi_a,
1414
max_general->beacon_rssi_a);
1415
pos += scnprintf(buf + pos, bufsz - pos,
1416
fmt_table, "beacon_rssi_b:",
1417
le32_to_cpu(general->beacon_rssi_b),
1418
accum_general->beacon_rssi_b,
1419
delta_general->beacon_rssi_b,
1420
max_general->beacon_rssi_b);
1421
pos += scnprintf(buf + pos, bufsz - pos,
1422
fmt_table, "beacon_rssi_c:",
1423
le32_to_cpu(general->beacon_rssi_c),
1424
accum_general->beacon_rssi_c,
1425
delta_general->beacon_rssi_c,
1426
max_general->beacon_rssi_c);
1427
pos += scnprintf(buf + pos, bufsz - pos,
1428
fmt_table, "beacon_energy_a:",
1429
le32_to_cpu(general->beacon_energy_a),
1430
accum_general->beacon_energy_a,
1431
delta_general->beacon_energy_a,
1432
max_general->beacon_energy_a);
1433
pos += scnprintf(buf + pos, bufsz - pos,
1434
fmt_table, "beacon_energy_b:",
1435
le32_to_cpu(general->beacon_energy_b),
1436
accum_general->beacon_energy_b,
1437
delta_general->beacon_energy_b,
1438
max_general->beacon_energy_b);
1439
pos += scnprintf(buf + pos, bufsz - pos,
1440
fmt_table, "beacon_energy_c:",
1441
le32_to_cpu(general->beacon_energy_c),
1442
accum_general->beacon_energy_c,
1443
delta_general->beacon_energy_c,
1444
max_general->beacon_energy_c);
1446
pos += scnprintf(buf + pos, bufsz - pos,
1447
fmt_header, "Statistics_Rx - OFDM_HT:");
1448
pos += scnprintf(buf + pos, bufsz - pos,
1449
fmt_table, "plcp_err:",
1450
le32_to_cpu(ht->plcp_err), accum_ht->plcp_err,
1451
delta_ht->plcp_err, max_ht->plcp_err);
1452
pos += scnprintf(buf + pos, bufsz - pos,
1453
fmt_table, "overrun_err:",
1454
le32_to_cpu(ht->overrun_err), accum_ht->overrun_err,
1455
delta_ht->overrun_err, max_ht->overrun_err);
1456
pos += scnprintf(buf + pos, bufsz - pos,
1457
fmt_table, "early_overrun_err:",
1458
le32_to_cpu(ht->early_overrun_err),
1459
accum_ht->early_overrun_err,
1460
delta_ht->early_overrun_err,
1461
max_ht->early_overrun_err);
1462
pos += scnprintf(buf + pos, bufsz - pos,
1463
fmt_table, "crc32_good:",
1464
le32_to_cpu(ht->crc32_good), accum_ht->crc32_good,
1465
delta_ht->crc32_good, max_ht->crc32_good);
1466
pos += scnprintf(buf + pos, bufsz - pos,
1467
fmt_table, "crc32_err:",
1468
le32_to_cpu(ht->crc32_err), accum_ht->crc32_err,
1469
delta_ht->crc32_err, max_ht->crc32_err);
1470
pos += scnprintf(buf + pos, bufsz - pos,
1471
fmt_table, "mh_format_err:",
1472
le32_to_cpu(ht->mh_format_err),
1473
accum_ht->mh_format_err,
1474
delta_ht->mh_format_err, max_ht->mh_format_err);
1475
pos += scnprintf(buf + pos, bufsz - pos,
1476
fmt_table, "agg_crc32_good:",
1477
le32_to_cpu(ht->agg_crc32_good),
1478
accum_ht->agg_crc32_good,
1479
delta_ht->agg_crc32_good, max_ht->agg_crc32_good);
1480
pos += scnprintf(buf + pos, bufsz - pos,
1481
fmt_table, "agg_mpdu_cnt:",
1482
le32_to_cpu(ht->agg_mpdu_cnt),
1483
accum_ht->agg_mpdu_cnt,
1484
delta_ht->agg_mpdu_cnt, max_ht->agg_mpdu_cnt);
1485
pos += scnprintf(buf + pos, bufsz - pos,
1486
fmt_table, "agg_cnt:",
1487
le32_to_cpu(ht->agg_cnt), accum_ht->agg_cnt,
1488
delta_ht->agg_cnt, max_ht->agg_cnt);
1489
pos += scnprintf(buf + pos, bufsz - pos,
1490
fmt_table, "unsupport_mcs:",
1491
le32_to_cpu(ht->unsupport_mcs),
1492
accum_ht->unsupport_mcs,
1493
delta_ht->unsupport_mcs, max_ht->unsupport_mcs);
1495
ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
1044
1500
static ssize_t iwl_dbgfs_ucode_tx_stats_read(struct file *file,
1046
1502
size_t count, loff_t *ppos)
1048
1504
struct iwl_priv *priv = file->private_data;
1049
return priv->cfg->ops->lib->debugfs_ops.tx_stats_read(file,
1050
user_buf, count, ppos);
1507
int bufsz = (sizeof(struct statistics_tx) * 48) + 250;
1509
struct statistics_tx *tx, *accum_tx, *delta_tx, *max_tx;
1511
if (!iwl_is_alive(priv))
1514
buf = kzalloc(bufsz, GFP_KERNEL);
1516
IWL_ERR(priv, "Can not allocate Buffer\n");
1520
/* the statistic information display here is based on
1521
* the last statistics notification from uCode
1522
* might not reflect the current uCode activity
1524
tx = &priv->statistics.tx;
1525
accum_tx = &priv->accum_stats.tx;
1526
delta_tx = &priv->delta_stats.tx;
1527
max_tx = &priv->max_delta_stats.tx;
1529
pos += iwl_statistics_flag(priv, buf, bufsz);
1530
pos += scnprintf(buf + pos, bufsz - pos,
1531
fmt_header, "Statistics_Tx:");
1532
pos += scnprintf(buf + pos, bufsz - pos,
1533
fmt_table, "preamble:",
1534
le32_to_cpu(tx->preamble_cnt),
1535
accum_tx->preamble_cnt,
1536
delta_tx->preamble_cnt, max_tx->preamble_cnt);
1537
pos += scnprintf(buf + pos, bufsz - pos,
1538
fmt_table, "rx_detected_cnt:",
1539
le32_to_cpu(tx->rx_detected_cnt),
1540
accum_tx->rx_detected_cnt,
1541
delta_tx->rx_detected_cnt, max_tx->rx_detected_cnt);
1542
pos += scnprintf(buf + pos, bufsz - pos,
1543
fmt_table, "bt_prio_defer_cnt:",
1544
le32_to_cpu(tx->bt_prio_defer_cnt),
1545
accum_tx->bt_prio_defer_cnt,
1546
delta_tx->bt_prio_defer_cnt,
1547
max_tx->bt_prio_defer_cnt);
1548
pos += scnprintf(buf + pos, bufsz - pos,
1549
fmt_table, "bt_prio_kill_cnt:",
1550
le32_to_cpu(tx->bt_prio_kill_cnt),
1551
accum_tx->bt_prio_kill_cnt,
1552
delta_tx->bt_prio_kill_cnt,
1553
max_tx->bt_prio_kill_cnt);
1554
pos += scnprintf(buf + pos, bufsz - pos,
1555
fmt_table, "few_bytes_cnt:",
1556
le32_to_cpu(tx->few_bytes_cnt),
1557
accum_tx->few_bytes_cnt,
1558
delta_tx->few_bytes_cnt, max_tx->few_bytes_cnt);
1559
pos += scnprintf(buf + pos, bufsz - pos,
1560
fmt_table, "cts_timeout:",
1561
le32_to_cpu(tx->cts_timeout), accum_tx->cts_timeout,
1562
delta_tx->cts_timeout, max_tx->cts_timeout);
1563
pos += scnprintf(buf + pos, bufsz - pos,
1564
fmt_table, "ack_timeout:",
1565
le32_to_cpu(tx->ack_timeout),
1566
accum_tx->ack_timeout,
1567
delta_tx->ack_timeout, max_tx->ack_timeout);
1568
pos += scnprintf(buf + pos, bufsz - pos,
1569
fmt_table, "expected_ack_cnt:",
1570
le32_to_cpu(tx->expected_ack_cnt),
1571
accum_tx->expected_ack_cnt,
1572
delta_tx->expected_ack_cnt,
1573
max_tx->expected_ack_cnt);
1574
pos += scnprintf(buf + pos, bufsz - pos,
1575
fmt_table, "actual_ack_cnt:",
1576
le32_to_cpu(tx->actual_ack_cnt),
1577
accum_tx->actual_ack_cnt,
1578
delta_tx->actual_ack_cnt,
1579
max_tx->actual_ack_cnt);
1580
pos += scnprintf(buf + pos, bufsz - pos,
1581
fmt_table, "dump_msdu_cnt:",
1582
le32_to_cpu(tx->dump_msdu_cnt),
1583
accum_tx->dump_msdu_cnt,
1584
delta_tx->dump_msdu_cnt,
1585
max_tx->dump_msdu_cnt);
1586
pos += scnprintf(buf + pos, bufsz - pos,
1587
fmt_table, "abort_nxt_frame_mismatch:",
1588
le32_to_cpu(tx->burst_abort_next_frame_mismatch_cnt),
1589
accum_tx->burst_abort_next_frame_mismatch_cnt,
1590
delta_tx->burst_abort_next_frame_mismatch_cnt,
1591
max_tx->burst_abort_next_frame_mismatch_cnt);
1592
pos += scnprintf(buf + pos, bufsz - pos,
1593
fmt_table, "abort_missing_nxt_frame:",
1594
le32_to_cpu(tx->burst_abort_missing_next_frame_cnt),
1595
accum_tx->burst_abort_missing_next_frame_cnt,
1596
delta_tx->burst_abort_missing_next_frame_cnt,
1597
max_tx->burst_abort_missing_next_frame_cnt);
1598
pos += scnprintf(buf + pos, bufsz - pos,
1599
fmt_table, "cts_timeout_collision:",
1600
le32_to_cpu(tx->cts_timeout_collision),
1601
accum_tx->cts_timeout_collision,
1602
delta_tx->cts_timeout_collision,
1603
max_tx->cts_timeout_collision);
1604
pos += scnprintf(buf + pos, bufsz - pos,
1605
fmt_table, "ack_ba_timeout_collision:",
1606
le32_to_cpu(tx->ack_or_ba_timeout_collision),
1607
accum_tx->ack_or_ba_timeout_collision,
1608
delta_tx->ack_or_ba_timeout_collision,
1609
max_tx->ack_or_ba_timeout_collision);
1610
pos += scnprintf(buf + pos, bufsz - pos,
1611
fmt_table, "agg ba_timeout:",
1612
le32_to_cpu(tx->agg.ba_timeout),
1613
accum_tx->agg.ba_timeout,
1614
delta_tx->agg.ba_timeout,
1615
max_tx->agg.ba_timeout);
1616
pos += scnprintf(buf + pos, bufsz - pos,
1617
fmt_table, "agg ba_resched_frames:",
1618
le32_to_cpu(tx->agg.ba_reschedule_frames),
1619
accum_tx->agg.ba_reschedule_frames,
1620
delta_tx->agg.ba_reschedule_frames,
1621
max_tx->agg.ba_reschedule_frames);
1622
pos += scnprintf(buf + pos, bufsz - pos,
1623
fmt_table, "agg scd_query_agg_frame:",
1624
le32_to_cpu(tx->agg.scd_query_agg_frame_cnt),
1625
accum_tx->agg.scd_query_agg_frame_cnt,
1626
delta_tx->agg.scd_query_agg_frame_cnt,
1627
max_tx->agg.scd_query_agg_frame_cnt);
1628
pos += scnprintf(buf + pos, bufsz - pos,
1629
fmt_table, "agg scd_query_no_agg:",
1630
le32_to_cpu(tx->agg.scd_query_no_agg),
1631
accum_tx->agg.scd_query_no_agg,
1632
delta_tx->agg.scd_query_no_agg,
1633
max_tx->agg.scd_query_no_agg);
1634
pos += scnprintf(buf + pos, bufsz - pos,
1635
fmt_table, "agg scd_query_agg:",
1636
le32_to_cpu(tx->agg.scd_query_agg),
1637
accum_tx->agg.scd_query_agg,
1638
delta_tx->agg.scd_query_agg,
1639
max_tx->agg.scd_query_agg);
1640
pos += scnprintf(buf + pos, bufsz - pos,
1641
fmt_table, "agg scd_query_mismatch:",
1642
le32_to_cpu(tx->agg.scd_query_mismatch),
1643
accum_tx->agg.scd_query_mismatch,
1644
delta_tx->agg.scd_query_mismatch,
1645
max_tx->agg.scd_query_mismatch);
1646
pos += scnprintf(buf + pos, bufsz - pos,
1647
fmt_table, "agg frame_not_ready:",
1648
le32_to_cpu(tx->agg.frame_not_ready),
1649
accum_tx->agg.frame_not_ready,
1650
delta_tx->agg.frame_not_ready,
1651
max_tx->agg.frame_not_ready);
1652
pos += scnprintf(buf + pos, bufsz - pos,
1653
fmt_table, "agg underrun:",
1654
le32_to_cpu(tx->agg.underrun),
1655
accum_tx->agg.underrun,
1656
delta_tx->agg.underrun, max_tx->agg.underrun);
1657
pos += scnprintf(buf + pos, bufsz - pos,
1658
fmt_table, "agg bt_prio_kill:",
1659
le32_to_cpu(tx->agg.bt_prio_kill),
1660
accum_tx->agg.bt_prio_kill,
1661
delta_tx->agg.bt_prio_kill,
1662
max_tx->agg.bt_prio_kill);
1663
pos += scnprintf(buf + pos, bufsz - pos,
1664
fmt_table, "agg rx_ba_rsp_cnt:",
1665
le32_to_cpu(tx->agg.rx_ba_rsp_cnt),
1666
accum_tx->agg.rx_ba_rsp_cnt,
1667
delta_tx->agg.rx_ba_rsp_cnt,
1668
max_tx->agg.rx_ba_rsp_cnt);
1670
if (tx->tx_power.ant_a || tx->tx_power.ant_b || tx->tx_power.ant_c) {
1671
pos += scnprintf(buf + pos, bufsz - pos,
1672
"tx power: (1/2 dB step)\n");
1673
if ((priv->cfg->valid_tx_ant & ANT_A) && tx->tx_power.ant_a)
1674
pos += scnprintf(buf + pos, bufsz - pos,
1675
fmt_hex, "antenna A:",
1676
tx->tx_power.ant_a);
1677
if ((priv->cfg->valid_tx_ant & ANT_B) && tx->tx_power.ant_b)
1678
pos += scnprintf(buf + pos, bufsz - pos,
1679
fmt_hex, "antenna B:",
1680
tx->tx_power.ant_b);
1681
if ((priv->cfg->valid_tx_ant & ANT_C) && tx->tx_power.ant_c)
1682
pos += scnprintf(buf + pos, bufsz - pos,
1683
fmt_hex, "antenna C:",
1684
tx->tx_power.ant_c);
1686
ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
1053
1691
static ssize_t iwl_dbgfs_ucode_general_stats_read(struct file *file,
1055
1693
size_t count, loff_t *ppos)
1057
1695
struct iwl_priv *priv = file->private_data;
1058
return priv->cfg->ops->lib->debugfs_ops.general_stats_read(file,
1059
user_buf, count, ppos);
1698
int bufsz = sizeof(struct statistics_general) * 10 + 300;
1700
struct statistics_general_common *general, *accum_general;
1701
struct statistics_general_common *delta_general, *max_general;
1702
struct statistics_dbg *dbg, *accum_dbg, *delta_dbg, *max_dbg;
1703
struct statistics_div *div, *accum_div, *delta_div, *max_div;
1705
if (!iwl_is_alive(priv))
1708
buf = kzalloc(bufsz, GFP_KERNEL);
1710
IWL_ERR(priv, "Can not allocate Buffer\n");
1714
/* the statistic information display here is based on
1715
* the last statistics notification from uCode
1716
* might not reflect the current uCode activity
1718
general = &priv->statistics.common;
1719
dbg = &priv->statistics.common.dbg;
1720
div = &priv->statistics.common.div;
1721
accum_general = &priv->accum_stats.common;
1722
accum_dbg = &priv->accum_stats.common.dbg;
1723
accum_div = &priv->accum_stats.common.div;
1724
delta_general = &priv->delta_stats.common;
1725
max_general = &priv->max_delta_stats.common;
1726
delta_dbg = &priv->delta_stats.common.dbg;
1727
max_dbg = &priv->max_delta_stats.common.dbg;
1728
delta_div = &priv->delta_stats.common.div;
1729
max_div = &priv->max_delta_stats.common.div;
1731
pos += iwl_statistics_flag(priv, buf, bufsz);
1732
pos += scnprintf(buf + pos, bufsz - pos,
1733
fmt_header, "Statistics_General:");
1734
pos += scnprintf(buf + pos, bufsz - pos,
1735
fmt_value, "temperature:",
1736
le32_to_cpu(general->temperature));
1737
pos += scnprintf(buf + pos, bufsz - pos,
1738
fmt_value, "temperature_m:",
1739
le32_to_cpu(general->temperature_m));
1740
pos += scnprintf(buf + pos, bufsz - pos,
1741
fmt_value, "ttl_timestamp:",
1742
le32_to_cpu(general->ttl_timestamp));
1743
pos += scnprintf(buf + pos, bufsz - pos,
1744
fmt_table, "burst_check:",
1745
le32_to_cpu(dbg->burst_check),
1746
accum_dbg->burst_check,
1747
delta_dbg->burst_check, max_dbg->burst_check);
1748
pos += scnprintf(buf + pos, bufsz - pos,
1749
fmt_table, "burst_count:",
1750
le32_to_cpu(dbg->burst_count),
1751
accum_dbg->burst_count,
1752
delta_dbg->burst_count, max_dbg->burst_count);
1753
pos += scnprintf(buf + pos, bufsz - pos,
1754
fmt_table, "wait_for_silence_timeout_count:",
1755
le32_to_cpu(dbg->wait_for_silence_timeout_cnt),
1756
accum_dbg->wait_for_silence_timeout_cnt,
1757
delta_dbg->wait_for_silence_timeout_cnt,
1758
max_dbg->wait_for_silence_timeout_cnt);
1759
pos += scnprintf(buf + pos, bufsz - pos,
1760
fmt_table, "sleep_time:",
1761
le32_to_cpu(general->sleep_time),
1762
accum_general->sleep_time,
1763
delta_general->sleep_time, max_general->sleep_time);
1764
pos += scnprintf(buf + pos, bufsz - pos,
1765
fmt_table, "slots_out:",
1766
le32_to_cpu(general->slots_out),
1767
accum_general->slots_out,
1768
delta_general->slots_out, max_general->slots_out);
1769
pos += scnprintf(buf + pos, bufsz - pos,
1770
fmt_table, "slots_idle:",
1771
le32_to_cpu(general->slots_idle),
1772
accum_general->slots_idle,
1773
delta_general->slots_idle, max_general->slots_idle);
1774
pos += scnprintf(buf + pos, bufsz - pos,
1775
fmt_table, "tx_on_a:",
1776
le32_to_cpu(div->tx_on_a), accum_div->tx_on_a,
1777
delta_div->tx_on_a, max_div->tx_on_a);
1778
pos += scnprintf(buf + pos, bufsz - pos,
1779
fmt_table, "tx_on_b:",
1780
le32_to_cpu(div->tx_on_b), accum_div->tx_on_b,
1781
delta_div->tx_on_b, max_div->tx_on_b);
1782
pos += scnprintf(buf + pos, bufsz - pos,
1783
fmt_table, "exec_time:",
1784
le32_to_cpu(div->exec_time), accum_div->exec_time,
1785
delta_div->exec_time, max_div->exec_time);
1786
pos += scnprintf(buf + pos, bufsz - pos,
1787
fmt_table, "probe_time:",
1788
le32_to_cpu(div->probe_time), accum_div->probe_time,
1789
delta_div->probe_time, max_div->probe_time);
1790
pos += scnprintf(buf + pos, bufsz - pos,
1791
fmt_table, "rx_enable_counter:",
1792
le32_to_cpu(general->rx_enable_counter),
1793
accum_general->rx_enable_counter,
1794
delta_general->rx_enable_counter,
1795
max_general->rx_enable_counter);
1796
pos += scnprintf(buf + pos, bufsz - pos,
1797
fmt_table, "num_of_sos_states:",
1798
le32_to_cpu(general->num_of_sos_states),
1799
accum_general->num_of_sos_states,
1800
delta_general->num_of_sos_states,
1801
max_general->num_of_sos_states);
1802
ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
1807
static ssize_t iwl_dbgfs_ucode_bt_stats_read(struct file *file,
1808
char __user *user_buf,
1809
size_t count, loff_t *ppos)
1811
struct iwl_priv *priv = (struct iwl_priv *)file->private_data;
1814
int bufsz = (sizeof(struct statistics_bt_activity) * 24) + 200;
1816
struct statistics_bt_activity *bt, *accum_bt;
1818
if (!iwl_is_alive(priv))
1821
if (!priv->bt_enable_flag)
1824
/* make request to uCode to retrieve statistics information */
1825
mutex_lock(&priv->mutex);
1826
ret = iwl_send_statistics_request(priv, CMD_SYNC, false);
1827
mutex_unlock(&priv->mutex);
1831
"Error sending statistics request: %zd\n", ret);
1834
buf = kzalloc(bufsz, GFP_KERNEL);
1836
IWL_ERR(priv, "Can not allocate Buffer\n");
1841
* the statistic information display here is based on
1842
* the last statistics notification from uCode
1843
* might not reflect the current uCode activity
1845
bt = &priv->statistics.bt_activity;
1846
accum_bt = &priv->accum_stats.bt_activity;
1848
pos += iwl_statistics_flag(priv, buf, bufsz);
1849
pos += scnprintf(buf + pos, bufsz - pos, "Statistics_BT:\n");
1850
pos += scnprintf(buf + pos, bufsz - pos,
1851
"\t\t\tcurrent\t\t\taccumulative\n");
1852
pos += scnprintf(buf + pos, bufsz - pos,
1853
"hi_priority_tx_req_cnt:\t\t%u\t\t\t%u\n",
1854
le32_to_cpu(bt->hi_priority_tx_req_cnt),
1855
accum_bt->hi_priority_tx_req_cnt);
1856
pos += scnprintf(buf + pos, bufsz - pos,
1857
"hi_priority_tx_denied_cnt:\t%u\t\t\t%u\n",
1858
le32_to_cpu(bt->hi_priority_tx_denied_cnt),
1859
accum_bt->hi_priority_tx_denied_cnt);
1860
pos += scnprintf(buf + pos, bufsz - pos,
1861
"lo_priority_tx_req_cnt:\t\t%u\t\t\t%u\n",
1862
le32_to_cpu(bt->lo_priority_tx_req_cnt),
1863
accum_bt->lo_priority_tx_req_cnt);
1864
pos += scnprintf(buf + pos, bufsz - pos,
1865
"lo_priority_tx_denied_cnt:\t%u\t\t\t%u\n",
1866
le32_to_cpu(bt->lo_priority_tx_denied_cnt),
1867
accum_bt->lo_priority_tx_denied_cnt);
1868
pos += scnprintf(buf + pos, bufsz - pos,
1869
"hi_priority_rx_req_cnt:\t\t%u\t\t\t%u\n",
1870
le32_to_cpu(bt->hi_priority_rx_req_cnt),
1871
accum_bt->hi_priority_rx_req_cnt);
1872
pos += scnprintf(buf + pos, bufsz - pos,
1873
"hi_priority_rx_denied_cnt:\t%u\t\t\t%u\n",
1874
le32_to_cpu(bt->hi_priority_rx_denied_cnt),
1875
accum_bt->hi_priority_rx_denied_cnt);
1876
pos += scnprintf(buf + pos, bufsz - pos,
1877
"lo_priority_rx_req_cnt:\t\t%u\t\t\t%u\n",
1878
le32_to_cpu(bt->lo_priority_rx_req_cnt),
1879
accum_bt->lo_priority_rx_req_cnt);
1880
pos += scnprintf(buf + pos, bufsz - pos,
1881
"lo_priority_rx_denied_cnt:\t%u\t\t\t%u\n",
1882
le32_to_cpu(bt->lo_priority_rx_denied_cnt),
1883
accum_bt->lo_priority_rx_denied_cnt);
1885
pos += scnprintf(buf + pos, bufsz - pos,
1886
"(rx)num_bt_kills:\t\t%u\t\t\t%u\n",
1887
le32_to_cpu(priv->statistics.num_bt_kills),
1888
priv->statistics.accum_num_bt_kills);
1890
ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
1895
static ssize_t iwl_dbgfs_reply_tx_error_read(struct file *file,
1896
char __user *user_buf,
1897
size_t count, loff_t *ppos)
1899
struct iwl_priv *priv = (struct iwl_priv *)file->private_data;
1902
int bufsz = (sizeof(struct reply_tx_error_statistics) * 24) +
1903
(sizeof(struct reply_agg_tx_error_statistics) * 24) + 200;
1906
if (!iwl_is_alive(priv))
1909
buf = kzalloc(bufsz, GFP_KERNEL);
1911
IWL_ERR(priv, "Can not allocate Buffer\n");
1915
pos += scnprintf(buf + pos, bufsz - pos, "Statistics_TX_Error:\n");
1916
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t\t%u\n",
1917
iwl_get_tx_fail_reason(TX_STATUS_POSTPONE_DELAY),
1918
priv->_agn.reply_tx_stats.pp_delay);
1919
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1920
iwl_get_tx_fail_reason(TX_STATUS_POSTPONE_FEW_BYTES),
1921
priv->_agn.reply_tx_stats.pp_few_bytes);
1922
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1923
iwl_get_tx_fail_reason(TX_STATUS_POSTPONE_BT_PRIO),
1924
priv->_agn.reply_tx_stats.pp_bt_prio);
1925
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1926
iwl_get_tx_fail_reason(TX_STATUS_POSTPONE_QUIET_PERIOD),
1927
priv->_agn.reply_tx_stats.pp_quiet_period);
1928
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1929
iwl_get_tx_fail_reason(TX_STATUS_POSTPONE_CALC_TTAK),
1930
priv->_agn.reply_tx_stats.pp_calc_ttak);
1931
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t%u\n",
1932
iwl_get_tx_fail_reason(
1933
TX_STATUS_FAIL_INTERNAL_CROSSED_RETRY),
1934
priv->_agn.reply_tx_stats.int_crossed_retry);
1935
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1936
iwl_get_tx_fail_reason(TX_STATUS_FAIL_SHORT_LIMIT),
1937
priv->_agn.reply_tx_stats.short_limit);
1938
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1939
iwl_get_tx_fail_reason(TX_STATUS_FAIL_LONG_LIMIT),
1940
priv->_agn.reply_tx_stats.long_limit);
1941
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1942
iwl_get_tx_fail_reason(TX_STATUS_FAIL_FIFO_UNDERRUN),
1943
priv->_agn.reply_tx_stats.fifo_underrun);
1944
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1945
iwl_get_tx_fail_reason(TX_STATUS_FAIL_DRAIN_FLOW),
1946
priv->_agn.reply_tx_stats.drain_flow);
1947
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1948
iwl_get_tx_fail_reason(TX_STATUS_FAIL_RFKILL_FLUSH),
1949
priv->_agn.reply_tx_stats.rfkill_flush);
1950
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1951
iwl_get_tx_fail_reason(TX_STATUS_FAIL_LIFE_EXPIRE),
1952
priv->_agn.reply_tx_stats.life_expire);
1953
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1954
iwl_get_tx_fail_reason(TX_STATUS_FAIL_DEST_PS),
1955
priv->_agn.reply_tx_stats.dest_ps);
1956
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1957
iwl_get_tx_fail_reason(TX_STATUS_FAIL_HOST_ABORTED),
1958
priv->_agn.reply_tx_stats.host_abort);
1959
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1960
iwl_get_tx_fail_reason(TX_STATUS_FAIL_BT_RETRY),
1961
priv->_agn.reply_tx_stats.pp_delay);
1962
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1963
iwl_get_tx_fail_reason(TX_STATUS_FAIL_STA_INVALID),
1964
priv->_agn.reply_tx_stats.sta_invalid);
1965
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1966
iwl_get_tx_fail_reason(TX_STATUS_FAIL_FRAG_DROPPED),
1967
priv->_agn.reply_tx_stats.frag_drop);
1968
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1969
iwl_get_tx_fail_reason(TX_STATUS_FAIL_TID_DISABLE),
1970
priv->_agn.reply_tx_stats.tid_disable);
1971
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1972
iwl_get_tx_fail_reason(TX_STATUS_FAIL_FIFO_FLUSHED),
1973
priv->_agn.reply_tx_stats.fifo_flush);
1974
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t%u\n",
1975
iwl_get_tx_fail_reason(
1976
TX_STATUS_FAIL_INSUFFICIENT_CF_POLL),
1977
priv->_agn.reply_tx_stats.insuff_cf_poll);
1978
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1979
iwl_get_tx_fail_reason(TX_STATUS_FAIL_PASSIVE_NO_RX),
1980
priv->_agn.reply_tx_stats.fail_hw_drop);
1981
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t%u\n",
1982
iwl_get_tx_fail_reason(
1983
TX_STATUS_FAIL_NO_BEACON_ON_RADAR),
1984
priv->_agn.reply_tx_stats.sta_color_mismatch);
1985
pos += scnprintf(buf + pos, bufsz - pos, "UNKNOWN:\t\t\t%u\n",
1986
priv->_agn.reply_tx_stats.unknown);
1988
pos += scnprintf(buf + pos, bufsz - pos,
1989
"\nStatistics_Agg_TX_Error:\n");
1991
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1992
iwl_get_agg_tx_fail_reason(AGG_TX_STATE_UNDERRUN_MSK),
1993
priv->_agn.reply_agg_tx_stats.underrun);
1994
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1995
iwl_get_agg_tx_fail_reason(AGG_TX_STATE_BT_PRIO_MSK),
1996
priv->_agn.reply_agg_tx_stats.bt_prio);
1997
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
1998
iwl_get_agg_tx_fail_reason(AGG_TX_STATE_FEW_BYTES_MSK),
1999
priv->_agn.reply_agg_tx_stats.few_bytes);
2000
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
2001
iwl_get_agg_tx_fail_reason(AGG_TX_STATE_ABORT_MSK),
2002
priv->_agn.reply_agg_tx_stats.abort);
2003
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t%u\n",
2004
iwl_get_agg_tx_fail_reason(
2005
AGG_TX_STATE_LAST_SENT_TTL_MSK),
2006
priv->_agn.reply_agg_tx_stats.last_sent_ttl);
2007
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t%u\n",
2008
iwl_get_agg_tx_fail_reason(
2009
AGG_TX_STATE_LAST_SENT_TRY_CNT_MSK),
2010
priv->_agn.reply_agg_tx_stats.last_sent_try);
2011
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t%u\n",
2012
iwl_get_agg_tx_fail_reason(
2013
AGG_TX_STATE_LAST_SENT_BT_KILL_MSK),
2014
priv->_agn.reply_agg_tx_stats.last_sent_bt_kill);
2015
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
2016
iwl_get_agg_tx_fail_reason(AGG_TX_STATE_SCD_QUERY_MSK),
2017
priv->_agn.reply_agg_tx_stats.scd_query);
2018
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t%u\n",
2019
iwl_get_agg_tx_fail_reason(
2020
AGG_TX_STATE_TEST_BAD_CRC32_MSK),
2021
priv->_agn.reply_agg_tx_stats.bad_crc32);
2022
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
2023
iwl_get_agg_tx_fail_reason(AGG_TX_STATE_RESPONSE_MSK),
2024
priv->_agn.reply_agg_tx_stats.response);
2025
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
2026
iwl_get_agg_tx_fail_reason(AGG_TX_STATE_DUMP_TX_MSK),
2027
priv->_agn.reply_agg_tx_stats.dump_tx);
2028
pos += scnprintf(buf + pos, bufsz - pos, "%s:\t\t\t%u\n",
2029
iwl_get_agg_tx_fail_reason(AGG_TX_STATE_DELAY_TX_MSK),
2030
priv->_agn.reply_agg_tx_stats.delay_tx);
2031
pos += scnprintf(buf + pos, bufsz - pos, "UNKNOWN:\t\t\t%u\n",
2032
priv->_agn.reply_agg_tx_stats.unknown);
2034
ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
1062
2039
static ssize_t iwl_dbgfs_sensitivity_read(struct file *file,