debug.c (27d7f47756f40fb1bc3159e09217f740f5c5b5b1) | debug.c (6e4d291eec82c682d82d02cd275a6ec511f9b203) |
---|---|
1/* 2 * Copyright (c) 2008-2011 Atheros Communications Inc. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES --- 55 unchanged lines hidden (view full) --- 64 char buf[32]; 65 ssize_t len; 66 67 len = min(count, sizeof(buf) - 1); 68 if (copy_from_user(buf, user_buf, len)) 69 return -EFAULT; 70 71 buf[len] = '\0'; | 1/* 2 * Copyright (c) 2008-2011 Atheros Communications Inc. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES --- 55 unchanged lines hidden (view full) --- 64 char buf[32]; 65 ssize_t len; 66 67 len = min(count, sizeof(buf) - 1); 68 if (copy_from_user(buf, user_buf, len)) 69 return -EFAULT; 70 71 buf[len] = '\0'; |
72 if (kstrtoul(buf, 0, &mask)) | 72 if (strict_strtoul(buf, 0, &mask)) |
73 return -EINVAL; 74 75 common->debug_mask = mask; 76 return count; 77} 78 79static const struct file_operations fops_debug = { 80 .read = read_file_debug, --- 28 unchanged lines hidden (view full) --- 109 char buf[32]; 110 ssize_t len; 111 112 len = min(count, sizeof(buf) - 1); 113 if (copy_from_user(buf, user_buf, len)) 114 return -EFAULT; 115 116 buf[len] = '\0'; | 73 return -EINVAL; 74 75 common->debug_mask = mask; 76 return count; 77} 78 79static const struct file_operations fops_debug = { 80 .read = read_file_debug, --- 28 unchanged lines hidden (view full) --- 109 char buf[32]; 110 ssize_t len; 111 112 len = min(count, sizeof(buf) - 1); 113 if (copy_from_user(buf, user_buf, len)) 114 return -EFAULT; 115 116 buf[len] = '\0'; |
117 if (kstrtoul(buf, 0, &mask)) | 117 if (strict_strtoul(buf, 0, &mask)) |
118 return -EINVAL; 119 120 ah->txchainmask = mask; 121 ah->caps.tx_chainmask = mask; 122 return count; 123} 124 125static const struct file_operations fops_tx_chainmask = { --- 26 unchanged lines hidden (view full) --- 152 char buf[32]; 153 ssize_t len; 154 155 len = min(count, sizeof(buf) - 1); 156 if (copy_from_user(buf, user_buf, len)) 157 return -EFAULT; 158 159 buf[len] = '\0'; | 118 return -EINVAL; 119 120 ah->txchainmask = mask; 121 ah->caps.tx_chainmask = mask; 122 return count; 123} 124 125static const struct file_operations fops_tx_chainmask = { --- 26 unchanged lines hidden (view full) --- 152 char buf[32]; 153 ssize_t len; 154 155 len = min(count, sizeof(buf) - 1); 156 if (copy_from_user(buf, user_buf, len)) 157 return -EFAULT; 158 159 buf[len] = '\0'; |
160 if (kstrtoul(buf, 0, &mask)) | 160 if (strict_strtoul(buf, 0, &mask)) |
161 return -EINVAL; 162 163 ah->rxchainmask = mask; 164 ah->caps.rx_chainmask = mask; 165 return count; 166} 167 168static const struct file_operations fops_rx_chainmask = { 169 .read = read_file_rx_chainmask, 170 .write = write_file_rx_chainmask, 171 .open = simple_open, 172 .owner = THIS_MODULE, 173 .llseek = default_llseek, 174}; 175 | 161 return -EINVAL; 162 163 ah->rxchainmask = mask; 164 ah->caps.rx_chainmask = mask; 165 return count; 166} 167 168static const struct file_operations fops_rx_chainmask = { 169 .read = read_file_rx_chainmask, 170 .write = write_file_rx_chainmask, 171 .open = simple_open, 172 .owner = THIS_MODULE, 173 .llseek = default_llseek, 174}; 175 |
176static ssize_t read_file_disable_ani(struct file *file, char __user *user_buf, | 176static ssize_t read_file_ani(struct file *file, char __user *user_buf, |
177 size_t count, loff_t *ppos) 178{ 179 struct ath_softc *sc = file->private_data; 180 struct ath_common *common = ath9k_hw_common(sc->sc_ah); | 177 size_t count, loff_t *ppos) 178{ 179 struct ath_softc *sc = file->private_data; 180 struct ath_common *common = ath9k_hw_common(sc->sc_ah); |
181 char buf[32]; 182 unsigned int len; | 181 struct ath_hw *ah = sc->sc_ah; 182 unsigned int len = 0, size = 1024; 183 ssize_t retval = 0; 184 char *buf; |
183 | 185 |
184 len = sprintf(buf, "%d\n", common->disable_ani); 185 return simple_read_from_buffer(user_buf, count, ppos, buf, len); | 186 buf = kzalloc(size, GFP_KERNEL); 187 if (buf == NULL) 188 return -ENOMEM; 189 190 if (common->disable_ani) { 191 len += snprintf(buf + len, size - len, "%s: %s\n", 192 "ANI", "DISABLED"); 193 goto exit; 194 } 195 196 len += snprintf(buf + len, size - len, "%15s: %s\n", 197 "ANI", "ENABLED"); 198 len += snprintf(buf + len, size - len, "%15s: %u\n", 199 "ANI RESET", ah->stats.ast_ani_reset); 200 len += snprintf(buf + len, size - len, "%15s: %u\n", 201 "SPUR UP", ah->stats.ast_ani_spurup); 202 len += snprintf(buf + len, size - len, "%15s: %u\n", 203 "SPUR DOWN", ah->stats.ast_ani_spurup); 204 len += snprintf(buf + len, size - len, "%15s: %u\n", 205 "OFDM WS-DET ON", ah->stats.ast_ani_ofdmon); 206 len += snprintf(buf + len, size - len, "%15s: %u\n", 207 "OFDM WS-DET OFF", ah->stats.ast_ani_ofdmoff); 208 len += snprintf(buf + len, size - len, "%15s: %u\n", 209 "MRC-CCK ON", ah->stats.ast_ani_ccklow); 210 len += snprintf(buf + len, size - len, "%15s: %u\n", 211 "MRC-CCK OFF", ah->stats.ast_ani_cckhigh); 212 len += snprintf(buf + len, size - len, "%15s: %u\n", 213 "FIR-STEP UP", ah->stats.ast_ani_stepup); 214 len += snprintf(buf + len, size - len, "%15s: %u\n", 215 "FIR-STEP DOWN", ah->stats.ast_ani_stepdown); 216 len += snprintf(buf + len, size - len, "%15s: %u\n", 217 "INV LISTENTIME", ah->stats.ast_ani_lneg_or_lzero); 218 len += snprintf(buf + len, size - len, "%15s: %u\n", 219 "OFDM ERRORS", ah->stats.ast_ani_ofdmerrs); 220 len += snprintf(buf + len, size - len, "%15s: %u\n", 221 "CCK ERRORS", ah->stats.ast_ani_cckerrs); 222exit: 223 if (len > size) 224 len = size; 225 226 retval = simple_read_from_buffer(user_buf, count, ppos, buf, len); 227 kfree(buf); 228 229 return retval; |
186} 187 | 230} 231 |
188static ssize_t write_file_disable_ani(struct file *file, 189 const char __user *user_buf, 190 size_t count, loff_t *ppos) | 232static ssize_t write_file_ani(struct file *file, 233 const char __user *user_buf, 234 size_t count, loff_t *ppos) |
191{ 192 struct ath_softc *sc = file->private_data; 193 struct ath_common *common = ath9k_hw_common(sc->sc_ah); | 235{ 236 struct ath_softc *sc = file->private_data; 237 struct ath_common *common = ath9k_hw_common(sc->sc_ah); |
194 unsigned long disable_ani; | 238 unsigned long ani; |
195 char buf[32]; 196 ssize_t len; 197 198 len = min(count, sizeof(buf) - 1); 199 if (copy_from_user(buf, user_buf, len)) 200 return -EFAULT; 201 202 buf[len] = '\0'; | 239 char buf[32]; 240 ssize_t len; 241 242 len = min(count, sizeof(buf) - 1); 243 if (copy_from_user(buf, user_buf, len)) 244 return -EFAULT; 245 246 buf[len] = '\0'; |
203 if (kstrtoul(buf, 0, &disable_ani)) | 247 if (strict_strtoul(buf, 0, &ani)) |
204 return -EINVAL; 205 | 248 return -EINVAL; 249 |
206 common->disable_ani = !!disable_ani; | 250 if (ani < 0 || ani > 1) 251 return -EINVAL; |
207 | 252 |
208 if (disable_ani) { | 253 common->disable_ani = !ani; 254 255 if (common->disable_ani) { |
209 clear_bit(SC_OP_ANI_RUN, &sc->sc_flags); 210 ath_stop_ani(sc); 211 } else { 212 ath_check_ani(sc); 213 } 214 215 return count; 216} 217 | 256 clear_bit(SC_OP_ANI_RUN, &sc->sc_flags); 257 ath_stop_ani(sc); 258 } else { 259 ath_check_ani(sc); 260 } 261 262 return count; 263} 264 |
218static const struct file_operations fops_disable_ani = { 219 .read = read_file_disable_ani, 220 .write = write_file_disable_ani, | 265static const struct file_operations fops_ani = { 266 .read = read_file_ani, 267 .write = write_file_ani, |
221 .open = simple_open, 222 .owner = THIS_MODULE, 223 .llseek = default_llseek, 224}; 225 226static ssize_t read_file_ant_diversity(struct file *file, char __user *user_buf, 227 size_t count, loff_t *ppos) 228{ --- 19 unchanged lines hidden (view full) --- 248 len = min(count, sizeof(buf) - 1); 249 if (copy_from_user(buf, user_buf, len)) 250 return -EFAULT; 251 252 if (!AR_SREV_9565(sc->sc_ah)) 253 goto exit; 254 255 buf[len] = '\0'; | 268 .open = simple_open, 269 .owner = THIS_MODULE, 270 .llseek = default_llseek, 271}; 272 273static ssize_t read_file_ant_diversity(struct file *file, char __user *user_buf, 274 size_t count, loff_t *ppos) 275{ --- 19 unchanged lines hidden (view full) --- 295 len = min(count, sizeof(buf) - 1); 296 if (copy_from_user(buf, user_buf, len)) 297 return -EFAULT; 298 299 if (!AR_SREV_9565(sc->sc_ah)) 300 goto exit; 301 302 buf[len] = '\0'; |
256 if (kstrtoul(buf, 0, &antenna_diversity)) | 303 if (strict_strtoul(buf, 0, &antenna_diversity)) |
257 return -EINVAL; 258 259 common->antenna_diversity = !!antenna_diversity; 260 ath9k_ps_wakeup(sc); 261 ath_ant_comb_update(sc); 262 ath_dbg(common, CONFIG, "Antenna diversity: %d\n", 263 common->antenna_diversity); 264 ath9k_ps_restore(sc); --- 468 unchanged lines hidden (view full) --- 733 734 return simple_read_from_buffer(user_buf, count, ppos, buf, len); 735} 736 737void ath_debug_stat_tx(struct ath_softc *sc, struct ath_buf *bf, 738 struct ath_tx_status *ts, struct ath_txq *txq, 739 unsigned int flags) 740{ | 304 return -EINVAL; 305 306 common->antenna_diversity = !!antenna_diversity; 307 ath9k_ps_wakeup(sc); 308 ath_ant_comb_update(sc); 309 ath_dbg(common, CONFIG, "Antenna diversity: %d\n", 310 common->antenna_diversity); 311 ath9k_ps_restore(sc); --- 468 unchanged lines hidden (view full) --- 780 781 return simple_read_from_buffer(user_buf, count, ppos, buf, len); 782} 783 784void ath_debug_stat_tx(struct ath_softc *sc, struct ath_buf *bf, 785 struct ath_tx_status *ts, struct ath_txq *txq, 786 unsigned int flags) 787{ |
741#define TX_SAMP_DBG(c) (sc->debug.bb_mac_samp[sc->debug.sampidx].ts\ 742 [sc->debug.tsidx].c) | |
743 int qnum = txq->axq_qnum; 744 745 TX_STAT_INC(qnum, tx_pkts_all); 746 sc->debug.stats.txstats[qnum].tx_bytes_all += bf->bf_mpdu->len; 747 748 if (bf_isampdu(bf)) { 749 if (flags & ATH_TX_ERROR) 750 TX_STAT_INC(qnum, a_xretries); --- 15 unchanged lines hidden (view full) --- 766 if (ts->ts_status & ATH9K_TXERR_TIMER_EXPIRED) 767 TX_STAT_INC(qnum, timer_exp); 768 if (ts->ts_flags & ATH9K_TX_DESC_CFG_ERR) 769 TX_STAT_INC(qnum, desc_cfg_err); 770 if (ts->ts_flags & ATH9K_TX_DATA_UNDERRUN) 771 TX_STAT_INC(qnum, data_underrun); 772 if (ts->ts_flags & ATH9K_TX_DELIM_UNDERRUN) 773 TX_STAT_INC(qnum, delim_underrun); | 788 int qnum = txq->axq_qnum; 789 790 TX_STAT_INC(qnum, tx_pkts_all); 791 sc->debug.stats.txstats[qnum].tx_bytes_all += bf->bf_mpdu->len; 792 793 if (bf_isampdu(bf)) { 794 if (flags & ATH_TX_ERROR) 795 TX_STAT_INC(qnum, a_xretries); --- 15 unchanged lines hidden (view full) --- 811 if (ts->ts_status & ATH9K_TXERR_TIMER_EXPIRED) 812 TX_STAT_INC(qnum, timer_exp); 813 if (ts->ts_flags & ATH9K_TX_DESC_CFG_ERR) 814 TX_STAT_INC(qnum, desc_cfg_err); 815 if (ts->ts_flags & ATH9K_TX_DATA_UNDERRUN) 816 TX_STAT_INC(qnum, data_underrun); 817 if (ts->ts_flags & ATH9K_TX_DELIM_UNDERRUN) 818 TX_STAT_INC(qnum, delim_underrun); |
774 775#ifdef CONFIG_ATH9K_MAC_DEBUG 776 spin_lock(&sc->debug.samp_lock); 777 TX_SAMP_DBG(jiffies) = jiffies; 778 TX_SAMP_DBG(rssi_ctl0) = ts->ts_rssi_ctl0; 779 TX_SAMP_DBG(rssi_ctl1) = ts->ts_rssi_ctl1; 780 TX_SAMP_DBG(rssi_ctl2) = ts->ts_rssi_ctl2; 781 TX_SAMP_DBG(rssi_ext0) = ts->ts_rssi_ext0; 782 TX_SAMP_DBG(rssi_ext1) = ts->ts_rssi_ext1; 783 TX_SAMP_DBG(rssi_ext2) = ts->ts_rssi_ext2; 784 TX_SAMP_DBG(rateindex) = ts->ts_rateindex; 785 TX_SAMP_DBG(isok) = !!(ts->ts_status & ATH9K_TXERR_MASK); 786 TX_SAMP_DBG(rts_fail_cnt) = ts->ts_shortretry; 787 TX_SAMP_DBG(data_fail_cnt) = ts->ts_longretry; 788 TX_SAMP_DBG(rssi) = ts->ts_rssi; 789 TX_SAMP_DBG(tid) = ts->tid; 790 TX_SAMP_DBG(qid) = ts->qid; 791 792 if (ts->ts_flags & ATH9K_TX_BA) { 793 TX_SAMP_DBG(ba_low) = ts->ba_low; 794 TX_SAMP_DBG(ba_high) = ts->ba_high; 795 } else { 796 TX_SAMP_DBG(ba_low) = 0; 797 TX_SAMP_DBG(ba_high) = 0; 798 } 799 800 sc->debug.tsidx = (sc->debug.tsidx + 1) % ATH_DBG_MAX_SAMPLES; 801 spin_unlock(&sc->debug.samp_lock); 802#endif 803 804#undef TX_SAMP_DBG | |
805} 806 807static const struct file_operations fops_xmit = { 808 .read = read_file_xmit, 809 .open = simple_open, 810 .owner = THIS_MODULE, 811 .llseek = default_llseek, 812}; --- 97 unchanged lines hidden (view full) --- 910 911#undef RXS_ERR 912#undef PHY_ERR 913} 914 915void ath_debug_stat_rx(struct ath_softc *sc, struct ath_rx_status *rs) 916{ 917#define RX_PHY_ERR_INC(c) sc->debug.stats.rxstats.phy_err_stats[c]++ | 819} 820 821static const struct file_operations fops_xmit = { 822 .read = read_file_xmit, 823 .open = simple_open, 824 .owner = THIS_MODULE, 825 .llseek = default_llseek, 826}; --- 97 unchanged lines hidden (view full) --- 924 925#undef RXS_ERR 926#undef PHY_ERR 927} 928 929void ath_debug_stat_rx(struct ath_softc *sc, struct ath_rx_status *rs) 930{ 931#define RX_PHY_ERR_INC(c) sc->debug.stats.rxstats.phy_err_stats[c]++ |
918#define RX_SAMP_DBG(c) (sc->debug.bb_mac_samp[sc->debug.sampidx].rs\ 919 [sc->debug.rsidx].c) | |
920 921 RX_STAT_INC(rx_pkts_all); 922 sc->debug.stats.rxstats.rx_bytes_all += rs->rs_datalen; 923 924 if (rs->rs_status & ATH9K_RXERR_CRC) 925 RX_STAT_INC(crc_err); 926 if (rs->rs_status & ATH9K_RXERR_DECRYPT) 927 RX_STAT_INC(decrypt_crc_err); --- 7 unchanged lines hidden (view full) --- 935 RX_STAT_INC(decrypt_busy_err); 936 937 if (rs->rs_status & ATH9K_RXERR_PHY) { 938 RX_STAT_INC(phy_err); 939 if (rs->rs_phyerr < ATH9K_PHYERR_MAX) 940 RX_PHY_ERR_INC(rs->rs_phyerr); 941 } 942 | 932 933 RX_STAT_INC(rx_pkts_all); 934 sc->debug.stats.rxstats.rx_bytes_all += rs->rs_datalen; 935 936 if (rs->rs_status & ATH9K_RXERR_CRC) 937 RX_STAT_INC(crc_err); 938 if (rs->rs_status & ATH9K_RXERR_DECRYPT) 939 RX_STAT_INC(decrypt_crc_err); --- 7 unchanged lines hidden (view full) --- 947 RX_STAT_INC(decrypt_busy_err); 948 949 if (rs->rs_status & ATH9K_RXERR_PHY) { 950 RX_STAT_INC(phy_err); 951 if (rs->rs_phyerr < ATH9K_PHYERR_MAX) 952 RX_PHY_ERR_INC(rs->rs_phyerr); 953 } 954 |
943#ifdef CONFIG_ATH9K_MAC_DEBUG 944 spin_lock(&sc->debug.samp_lock); 945 RX_SAMP_DBG(jiffies) = jiffies; 946 RX_SAMP_DBG(rssi_ctl0) = rs->rs_rssi_ctl0; 947 RX_SAMP_DBG(rssi_ctl1) = rs->rs_rssi_ctl1; 948 RX_SAMP_DBG(rssi_ctl2) = rs->rs_rssi_ctl2; 949 RX_SAMP_DBG(rssi_ext0) = rs->rs_rssi_ext0; 950 RX_SAMP_DBG(rssi_ext1) = rs->rs_rssi_ext1; 951 RX_SAMP_DBG(rssi_ext2) = rs->rs_rssi_ext2; 952 RX_SAMP_DBG(antenna) = rs->rs_antenna; 953 RX_SAMP_DBG(rssi) = rs->rs_rssi; 954 RX_SAMP_DBG(rate) = rs->rs_rate; 955 RX_SAMP_DBG(is_mybeacon) = rs->is_mybeacon; 956 957 sc->debug.rsidx = (sc->debug.rsidx + 1) % ATH_DBG_MAX_SAMPLES; 958 spin_unlock(&sc->debug.samp_lock); 959 960#endif 961 | |
962#undef RX_PHY_ERR_INC | 955#undef RX_PHY_ERR_INC |
963#undef RX_SAMP_DBG | |
964} 965 966static const struct file_operations fops_recv = { 967 .read = read_file_recv, 968 .open = simple_open, 969 .owner = THIS_MODULE, 970 .llseek = default_llseek, 971}; --- 301 unchanged lines hidden (view full) --- 1273 char buf[32]; 1274 ssize_t len; 1275 1276 len = min(count, sizeof(buf) - 1); 1277 if (copy_from_user(buf, user_buf, len)) 1278 return -EFAULT; 1279 1280 buf[len] = '\0'; | 956} 957 958static const struct file_operations fops_recv = { 959 .read = read_file_recv, 960 .open = simple_open, 961 .owner = THIS_MODULE, 962 .llseek = default_llseek, 963}; --- 301 unchanged lines hidden (view full) --- 1265 char buf[32]; 1266 ssize_t len; 1267 1268 len = min(count, sizeof(buf) - 1); 1269 if (copy_from_user(buf, user_buf, len)) 1270 return -EFAULT; 1271 1272 buf[len] = '\0'; |
1281 if (kstrtoul(buf, 0, ®idx)) | 1273 if (strict_strtoul(buf, 0, ®idx)) |
1282 return -EINVAL; 1283 1284 sc->debug.regidx = regidx; 1285 return count; 1286} 1287 1288static const struct file_operations fops_regidx = { 1289 .read = read_file_regidx, --- 28 unchanged lines hidden (view full) --- 1318 char buf[32]; 1319 ssize_t len; 1320 1321 len = min(count, sizeof(buf) - 1); 1322 if (copy_from_user(buf, user_buf, len)) 1323 return -EFAULT; 1324 1325 buf[len] = '\0'; | 1274 return -EINVAL; 1275 1276 sc->debug.regidx = regidx; 1277 return count; 1278} 1279 1280static const struct file_operations fops_regidx = { 1281 .read = read_file_regidx, --- 28 unchanged lines hidden (view full) --- 1310 char buf[32]; 1311 ssize_t len; 1312 1313 len = min(count, sizeof(buf) - 1); 1314 if (copy_from_user(buf, user_buf, len)) 1315 return -EFAULT; 1316 1317 buf[len] = '\0'; |
1326 if (kstrtoul(buf, 0, ®val)) | 1318 if (strict_strtoul(buf, 0, ®val)) |
1327 return -EINVAL; 1328 1329 ath9k_ps_wakeup(sc); 1330 REG_WRITE_D(ah, sc->debug.regidx, regval); 1331 ath9k_ps_restore(sc); 1332 return count; 1333} 1334 --- 145 unchanged lines hidden (view full) --- 1480 1481static const struct file_operations fops_modal_eeprom = { 1482 .read = read_file_modal_eeprom, 1483 .open = simple_open, 1484 .owner = THIS_MODULE, 1485 .llseek = default_llseek, 1486}; 1487 | 1319 return -EINVAL; 1320 1321 ath9k_ps_wakeup(sc); 1322 REG_WRITE_D(ah, sc->debug.regidx, regval); 1323 ath9k_ps_restore(sc); 1324 return count; 1325} 1326 --- 145 unchanged lines hidden (view full) --- 1472 1473static const struct file_operations fops_modal_eeprom = { 1474 .read = read_file_modal_eeprom, 1475 .open = simple_open, 1476 .owner = THIS_MODULE, 1477 .llseek = default_llseek, 1478}; 1479 |
1488#ifdef CONFIG_ATH9K_MAC_DEBUG 1489 1490void ath9k_debug_samp_bb_mac(struct ath_softc *sc) 1491{ 1492#define ATH_SAMP_DBG(c) (sc->debug.bb_mac_samp[sc->debug.sampidx].c) 1493 struct ath_hw *ah = sc->sc_ah; 1494 struct ath_common *common = ath9k_hw_common(ah); 1495 unsigned long flags; 1496 int i; 1497 1498 ath9k_ps_wakeup(sc); 1499 1500 spin_lock_bh(&sc->debug.samp_lock); 1501 1502 spin_lock_irqsave(&common->cc_lock, flags); 1503 ath_hw_cycle_counters_update(common); 1504 1505 ATH_SAMP_DBG(cc.cycles) = common->cc_ani.cycles; 1506 ATH_SAMP_DBG(cc.rx_busy) = common->cc_ani.rx_busy; 1507 ATH_SAMP_DBG(cc.rx_frame) = common->cc_ani.rx_frame; 1508 ATH_SAMP_DBG(cc.tx_frame) = common->cc_ani.tx_frame; 1509 spin_unlock_irqrestore(&common->cc_lock, flags); 1510 1511 ATH_SAMP_DBG(noise) = ah->noise; 1512 1513 REG_WRITE_D(ah, AR_MACMISC, 1514 ((AR_MACMISC_DMA_OBS_LINE_8 << AR_MACMISC_DMA_OBS_S) | 1515 (AR_MACMISC_MISC_OBS_BUS_1 << 1516 AR_MACMISC_MISC_OBS_BUS_MSB_S))); 1517 1518 for (i = 0; i < ATH9K_NUM_DMA_DEBUG_REGS; i++) 1519 ATH_SAMP_DBG(dma_dbg_reg_vals[i]) = REG_READ_D(ah, 1520 AR_DMADBG_0 + (i * sizeof(u32))); 1521 1522 ATH_SAMP_DBG(pcu_obs) = REG_READ_D(ah, AR_OBS_BUS_1); 1523 ATH_SAMP_DBG(pcu_cr) = REG_READ_D(ah, AR_CR); 1524 1525 memcpy(ATH_SAMP_DBG(nfCalHist), sc->caldata.nfCalHist, 1526 sizeof(ATH_SAMP_DBG(nfCalHist))); 1527 1528 sc->debug.sampidx = (sc->debug.sampidx + 1) % ATH_DBG_MAX_SAMPLES; 1529 spin_unlock_bh(&sc->debug.samp_lock); 1530 ath9k_ps_restore(sc); 1531 1532#undef ATH_SAMP_DBG 1533} 1534 1535static int open_file_bb_mac_samps(struct inode *inode, struct file *file) 1536{ 1537#define ATH_SAMP_DBG(c) bb_mac_samp[sampidx].c 1538 struct ath_softc *sc = inode->i_private; 1539 struct ath_hw *ah = sc->sc_ah; 1540 struct ath_common *common = ath9k_hw_common(ah); 1541 struct ieee80211_conf *conf = &common->hw->conf; 1542 struct ath_dbg_bb_mac_samp *bb_mac_samp; 1543 struct ath9k_nfcal_hist *h; 1544 int i, j, qcuOffset = 0, dcuOffset = 0; 1545 u32 *qcuBase, *dcuBase, size = 30000, len = 0; 1546 u32 sampidx = 0; 1547 u8 *buf; 1548 u8 chainmask = (ah->rxchainmask << 3) | ah->rxchainmask; 1549 u8 nread; 1550 1551 if (test_bit(SC_OP_INVALID, &sc->sc_flags)) 1552 return -EAGAIN; 1553 1554 buf = vmalloc(size); 1555 if (!buf) 1556 return -ENOMEM; 1557 bb_mac_samp = vmalloc(sizeof(*bb_mac_samp) * ATH_DBG_MAX_SAMPLES); 1558 if (!bb_mac_samp) { 1559 vfree(buf); 1560 return -ENOMEM; 1561 } 1562 /* Account the current state too */ 1563 ath9k_debug_samp_bb_mac(sc); 1564 1565 spin_lock_bh(&sc->debug.samp_lock); 1566 memcpy(bb_mac_samp, sc->debug.bb_mac_samp, 1567 sizeof(*bb_mac_samp) * ATH_DBG_MAX_SAMPLES); 1568 len += snprintf(buf + len, size - len, 1569 "Current Sample Index: %d\n", sc->debug.sampidx); 1570 spin_unlock_bh(&sc->debug.samp_lock); 1571 1572 len += snprintf(buf + len, size - len, 1573 "Raw DMA Debug Dump:\n"); 1574 len += snprintf(buf + len, size - len, "Sample |\t"); 1575 for (i = 0; i < ATH9K_NUM_DMA_DEBUG_REGS; i++) 1576 len += snprintf(buf + len, size - len, " DMA Reg%d |\t", i); 1577 len += snprintf(buf + len, size - len, "\n"); 1578 1579 for (sampidx = 0; sampidx < ATH_DBG_MAX_SAMPLES; sampidx++) { 1580 len += snprintf(buf + len, size - len, "%d\t", sampidx); 1581 1582 for (i = 0; i < ATH9K_NUM_DMA_DEBUG_REGS; i++) 1583 len += snprintf(buf + len, size - len, " %08x\t", 1584 ATH_SAMP_DBG(dma_dbg_reg_vals[i])); 1585 len += snprintf(buf + len, size - len, "\n"); 1586 } 1587 len += snprintf(buf + len, size - len, "\n"); 1588 1589 len += snprintf(buf + len, size - len, 1590 "Sample Num QCU: chain_st fsp_ok fsp_st DCU: chain_st\n"); 1591 for (sampidx = 0; sampidx < ATH_DBG_MAX_SAMPLES; sampidx++) { 1592 qcuBase = &ATH_SAMP_DBG(dma_dbg_reg_vals[0]); 1593 dcuBase = &ATH_SAMP_DBG(dma_dbg_reg_vals[4]); 1594 1595 for (i = 0; i < ATH9K_NUM_QUEUES; i++, 1596 qcuOffset += 4, dcuOffset += 5) { 1597 if (i == 8) { 1598 qcuOffset = 0; 1599 qcuBase++; 1600 } 1601 1602 if (i == 6) { 1603 dcuOffset = 0; 1604 dcuBase++; 1605 } 1606 if (!sc->debug.stats.txstats[i].queued) 1607 continue; 1608 1609 len += snprintf(buf + len, size - len, 1610 "%4d %7d %2x %1x %2x %2x\n", 1611 sampidx, i, 1612 (*qcuBase & (0x7 << qcuOffset)) >> qcuOffset, 1613 (*qcuBase & (0x8 << qcuOffset)) >> 1614 (qcuOffset + 3), 1615 ATH_SAMP_DBG(dma_dbg_reg_vals[2]) & 1616 (0x7 << (i * 3)) >> (i * 3), 1617 (*dcuBase & (0x1f << dcuOffset)) >> dcuOffset); 1618 } 1619 len += snprintf(buf + len, size - len, "\n"); 1620 } 1621 len += snprintf(buf + len, size - len, 1622 "samp qcu_sh qcu_fh qcu_comp dcu_comp dcu_arb dcu_fp " 1623 "ch_idle_dur ch_idle_dur_val txfifo_val0 txfifo_val1 " 1624 "txfifo_dcu0 txfifo_dcu1 pcu_obs AR_CR\n"); 1625 1626 for (sampidx = 0; sampidx < ATH_DBG_MAX_SAMPLES; sampidx++) { 1627 qcuBase = &ATH_SAMP_DBG(dma_dbg_reg_vals[0]); 1628 dcuBase = &ATH_SAMP_DBG(dma_dbg_reg_vals[4]); 1629 1630 len += snprintf(buf + len, size - len, "%4d %5x %5x ", sampidx, 1631 (ATH_SAMP_DBG(dma_dbg_reg_vals[3]) & 0x003c0000) >> 18, 1632 (ATH_SAMP_DBG(dma_dbg_reg_vals[3]) & 0x03c00000) >> 22); 1633 len += snprintf(buf + len, size - len, "%7x %8x ", 1634 (ATH_SAMP_DBG(dma_dbg_reg_vals[3]) & 0x1c000000) >> 26, 1635 (ATH_SAMP_DBG(dma_dbg_reg_vals[6]) & 0x3)); 1636 len += snprintf(buf + len, size - len, "%7x %7x ", 1637 (ATH_SAMP_DBG(dma_dbg_reg_vals[5]) & 0x06000000) >> 25, 1638 (ATH_SAMP_DBG(dma_dbg_reg_vals[5]) & 0x38000000) >> 27); 1639 len += snprintf(buf + len, size - len, "%7d %12d ", 1640 (ATH_SAMP_DBG(dma_dbg_reg_vals[6]) & 0x000003fc) >> 2, 1641 (ATH_SAMP_DBG(dma_dbg_reg_vals[6]) & 0x00000400) >> 10); 1642 len += snprintf(buf + len, size - len, "%12d %12d ", 1643 (ATH_SAMP_DBG(dma_dbg_reg_vals[6]) & 0x00000800) >> 11, 1644 (ATH_SAMP_DBG(dma_dbg_reg_vals[6]) & 0x00001000) >> 12); 1645 len += snprintf(buf + len, size - len, "%12d %12d ", 1646 (ATH_SAMP_DBG(dma_dbg_reg_vals[6]) & 0x0001e000) >> 13, 1647 (ATH_SAMP_DBG(dma_dbg_reg_vals[6]) & 0x001e0000) >> 17); 1648 len += snprintf(buf + len, size - len, "0x%07x 0x%07x\n", 1649 ATH_SAMP_DBG(pcu_obs), ATH_SAMP_DBG(pcu_cr)); 1650 } 1651 1652 len += snprintf(buf + len, size - len, 1653 "Sample ChNoise Chain privNF #Reading Readings\n"); 1654 for (sampidx = 0; sampidx < ATH_DBG_MAX_SAMPLES; sampidx++) { 1655 h = ATH_SAMP_DBG(nfCalHist); 1656 if (!ATH_SAMP_DBG(noise)) 1657 continue; 1658 1659 for (i = 0; i < NUM_NF_READINGS; i++) { 1660 if (!(chainmask & (1 << i)) || 1661 ((i >= AR5416_MAX_CHAINS) && !conf_is_ht40(conf))) 1662 continue; 1663 1664 nread = AR_PHY_CCA_FILTERWINDOW_LENGTH - 1665 h[i].invalidNFcount; 1666 len += snprintf(buf + len, size - len, 1667 "%4d %5d %4d\t %d\t %d\t", 1668 sampidx, ATH_SAMP_DBG(noise), 1669 i, h[i].privNF, nread); 1670 for (j = 0; j < nread; j++) 1671 len += snprintf(buf + len, size - len, 1672 " %d", h[i].nfCalBuffer[j]); 1673 len += snprintf(buf + len, size - len, "\n"); 1674 } 1675 } 1676 len += snprintf(buf + len, size - len, "\nCycle counters:\n" 1677 "Sample Total Rxbusy Rxframes Txframes\n"); 1678 for (sampidx = 0; sampidx < ATH_DBG_MAX_SAMPLES; sampidx++) { 1679 if (!ATH_SAMP_DBG(cc.cycles)) 1680 continue; 1681 len += snprintf(buf + len, size - len, 1682 "%4d %08x %08x %08x %08x\n", 1683 sampidx, ATH_SAMP_DBG(cc.cycles), 1684 ATH_SAMP_DBG(cc.rx_busy), 1685 ATH_SAMP_DBG(cc.rx_frame), 1686 ATH_SAMP_DBG(cc.tx_frame)); 1687 } 1688 1689 len += snprintf(buf + len, size - len, "Tx status Dump :\n"); 1690 len += snprintf(buf + len, size - len, 1691 "Sample rssi:- ctl0 ctl1 ctl2 ext0 ext1 ext2 comb " 1692 "isok rts_fail data_fail rate tid qid " 1693 "ba_low ba_high tx_before(ms)\n"); 1694 for (sampidx = 0; sampidx < ATH_DBG_MAX_SAMPLES; sampidx++) { 1695 for (i = 0; i < ATH_DBG_MAX_SAMPLES; i++) { 1696 if (!ATH_SAMP_DBG(ts[i].jiffies)) 1697 continue; 1698 len += snprintf(buf + len, size - len, "%-14d" 1699 "%-4d %-4d %-4d %-4d %-4d %-4d %-4d %-4d %-8d " 1700 "%-9d %-4d %-3d %-3d %08x %08x %-11d\n", 1701 sampidx, 1702 ATH_SAMP_DBG(ts[i].rssi_ctl0), 1703 ATH_SAMP_DBG(ts[i].rssi_ctl1), 1704 ATH_SAMP_DBG(ts[i].rssi_ctl2), 1705 ATH_SAMP_DBG(ts[i].rssi_ext0), 1706 ATH_SAMP_DBG(ts[i].rssi_ext1), 1707 ATH_SAMP_DBG(ts[i].rssi_ext2), 1708 ATH_SAMP_DBG(ts[i].rssi), 1709 ATH_SAMP_DBG(ts[i].isok), 1710 ATH_SAMP_DBG(ts[i].rts_fail_cnt), 1711 ATH_SAMP_DBG(ts[i].data_fail_cnt), 1712 ATH_SAMP_DBG(ts[i].rateindex), 1713 ATH_SAMP_DBG(ts[i].tid), 1714 ATH_SAMP_DBG(ts[i].qid), 1715 ATH_SAMP_DBG(ts[i].ba_low), 1716 ATH_SAMP_DBG(ts[i].ba_high), 1717 jiffies_to_msecs(jiffies - 1718 ATH_SAMP_DBG(ts[i].jiffies))); 1719 } 1720 } 1721 1722 len += snprintf(buf + len, size - len, "Rx status Dump :\n"); 1723 len += snprintf(buf + len, size - len, "Sample rssi:- ctl0 ctl1 ctl2 " 1724 "ext0 ext1 ext2 comb beacon ant rate rx_before(ms)\n"); 1725 for (sampidx = 0; sampidx < ATH_DBG_MAX_SAMPLES; sampidx++) { 1726 for (i = 0; i < ATH_DBG_MAX_SAMPLES; i++) { 1727 if (!ATH_SAMP_DBG(rs[i].jiffies)) 1728 continue; 1729 len += snprintf(buf + len, size - len, "%-14d" 1730 "%-4d %-4d %-4d %-4d %-4d %-4d %-4d %-9s %-2d %02x %-13d\n", 1731 sampidx, 1732 ATH_SAMP_DBG(rs[i].rssi_ctl0), 1733 ATH_SAMP_DBG(rs[i].rssi_ctl1), 1734 ATH_SAMP_DBG(rs[i].rssi_ctl2), 1735 ATH_SAMP_DBG(rs[i].rssi_ext0), 1736 ATH_SAMP_DBG(rs[i].rssi_ext1), 1737 ATH_SAMP_DBG(rs[i].rssi_ext2), 1738 ATH_SAMP_DBG(rs[i].rssi), 1739 ATH_SAMP_DBG(rs[i].is_mybeacon) ? 1740 "True" : "False", 1741 ATH_SAMP_DBG(rs[i].antenna), 1742 ATH_SAMP_DBG(rs[i].rate), 1743 jiffies_to_msecs(jiffies - 1744 ATH_SAMP_DBG(rs[i].jiffies))); 1745 } 1746 } 1747 1748 vfree(bb_mac_samp); 1749 file->private_data = buf; 1750 1751 return 0; 1752#undef ATH_SAMP_DBG 1753} 1754 1755static const struct file_operations fops_samps = { 1756 .open = open_file_bb_mac_samps, 1757 .read = ath9k_debugfs_read_buf, 1758 .release = ath9k_debugfs_release_buf, 1759 .owner = THIS_MODULE, 1760 .llseek = default_llseek, 1761}; 1762 1763#endif 1764 | |
1765#ifdef CONFIG_ATH9K_BTCOEX_SUPPORT 1766static ssize_t read_file_btcoex(struct file *file, char __user *user_buf, 1767 size_t count, loff_t *ppos) 1768{ 1769 struct ath_softc *sc = file->private_data; 1770 u32 len = 0, size = 1500; 1771 char *buf; 1772 size_t retval; --- 230 unchanged lines hidden (view full) --- 2003 2004 AWDATA_RX(phy_err_stats[ATH9K_PHYERR_RADAR]); 2005 AWDATA_RX(phy_err_stats[ATH9K_PHYERR_OFDM_TIMING]); 2006 AWDATA_RX(phy_err_stats[ATH9K_PHYERR_CCK_TIMING]); 2007 2008 WARN_ON(i != ATH9K_SSTATS_LEN); 2009} 2010 | 1480#ifdef CONFIG_ATH9K_BTCOEX_SUPPORT 1481static ssize_t read_file_btcoex(struct file *file, char __user *user_buf, 1482 size_t count, loff_t *ppos) 1483{ 1484 struct ath_softc *sc = file->private_data; 1485 u32 len = 0, size = 1500; 1486 char *buf; 1487 size_t retval; --- 230 unchanged lines hidden (view full) --- 1718 1719 AWDATA_RX(phy_err_stats[ATH9K_PHYERR_RADAR]); 1720 AWDATA_RX(phy_err_stats[ATH9K_PHYERR_OFDM_TIMING]); 1721 AWDATA_RX(phy_err_stats[ATH9K_PHYERR_CCK_TIMING]); 1722 1723 WARN_ON(i != ATH9K_SSTATS_LEN); 1724} 1725 |
2011void ath9k_deinit_debug(struct ath_softc *sc) 2012{ 2013 if (config_enabled(CONFIG_ATH9K_DEBUGFS) && sc->rfs_chan_spec_scan) { 2014 relay_close(sc->rfs_chan_spec_scan); 2015 sc->rfs_chan_spec_scan = NULL; 2016 } 2017} 2018 | |
2019int ath9k_init_debug(struct ath_hw *ah) 2020{ 2021 struct ath_common *common = ath9k_hw_common(ah); 2022 struct ath_softc *sc = (struct ath_softc *) common->priv; 2023 2024 sc->debug.debugfs_phy = debugfs_create_dir("ath9k", 2025 sc->hw->wiphy->debugfsdir); 2026 if (!sc->debug.debugfs_phy) --- 27 unchanged lines hidden (view full) --- 2054 debugfs_create_file("reset", S_IRUSR, sc->debug.debugfs_phy, sc, 2055 &fops_reset); 2056 debugfs_create_file("recv", S_IRUSR, sc->debug.debugfs_phy, sc, 2057 &fops_recv); 2058 debugfs_create_file("rx_chainmask", S_IRUSR | S_IWUSR, 2059 sc->debug.debugfs_phy, sc, &fops_rx_chainmask); 2060 debugfs_create_file("tx_chainmask", S_IRUSR | S_IWUSR, 2061 sc->debug.debugfs_phy, sc, &fops_tx_chainmask); | 1726int ath9k_init_debug(struct ath_hw *ah) 1727{ 1728 struct ath_common *common = ath9k_hw_common(ah); 1729 struct ath_softc *sc = (struct ath_softc *) common->priv; 1730 1731 sc->debug.debugfs_phy = debugfs_create_dir("ath9k", 1732 sc->hw->wiphy->debugfsdir); 1733 if (!sc->debug.debugfs_phy) --- 27 unchanged lines hidden (view full) --- 1761 debugfs_create_file("reset", S_IRUSR, sc->debug.debugfs_phy, sc, 1762 &fops_reset); 1763 debugfs_create_file("recv", S_IRUSR, sc->debug.debugfs_phy, sc, 1764 &fops_recv); 1765 debugfs_create_file("rx_chainmask", S_IRUSR | S_IWUSR, 1766 sc->debug.debugfs_phy, sc, &fops_rx_chainmask); 1767 debugfs_create_file("tx_chainmask", S_IRUSR | S_IWUSR, 1768 sc->debug.debugfs_phy, sc, &fops_tx_chainmask); |
2062 debugfs_create_file("disable_ani", S_IRUSR | S_IWUSR, 2063 sc->debug.debugfs_phy, sc, &fops_disable_ani); | 1769 debugfs_create_file("ani", S_IRUSR | S_IWUSR, 1770 sc->debug.debugfs_phy, sc, &fops_ani); |
2064 debugfs_create_bool("paprd", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, 2065 &sc->sc_ah->config.enable_paprd); 2066 debugfs_create_file("regidx", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, 2067 sc, &fops_regidx); 2068 debugfs_create_file("regval", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, 2069 sc, &fops_regval); 2070 debugfs_create_bool("ignore_extcca", S_IRUSR | S_IWUSR, 2071 sc->debug.debugfs_phy, --- 18 unchanged lines hidden (view full) --- 2090 &fops_spectral_short_repeat); 2091 debugfs_create_file("spectral_count", S_IRUSR | S_IWUSR, 2092 sc->debug.debugfs_phy, sc, &fops_spectral_count); 2093 debugfs_create_file("spectral_period", S_IRUSR | S_IWUSR, 2094 sc->debug.debugfs_phy, sc, &fops_spectral_period); 2095 debugfs_create_file("spectral_fft_period", S_IRUSR | S_IWUSR, 2096 sc->debug.debugfs_phy, sc, 2097 &fops_spectral_fft_period); | 1771 debugfs_create_bool("paprd", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, 1772 &sc->sc_ah->config.enable_paprd); 1773 debugfs_create_file("regidx", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, 1774 sc, &fops_regidx); 1775 debugfs_create_file("regval", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, 1776 sc, &fops_regval); 1777 debugfs_create_bool("ignore_extcca", S_IRUSR | S_IWUSR, 1778 sc->debug.debugfs_phy, --- 18 unchanged lines hidden (view full) --- 1797 &fops_spectral_short_repeat); 1798 debugfs_create_file("spectral_count", S_IRUSR | S_IWUSR, 1799 sc->debug.debugfs_phy, sc, &fops_spectral_count); 1800 debugfs_create_file("spectral_period", S_IRUSR | S_IWUSR, 1801 sc->debug.debugfs_phy, sc, &fops_spectral_period); 1802 debugfs_create_file("spectral_fft_period", S_IRUSR | S_IWUSR, 1803 sc->debug.debugfs_phy, sc, 1804 &fops_spectral_fft_period); |
2098 2099#ifdef CONFIG_ATH9K_MAC_DEBUG 2100 debugfs_create_file("samples", S_IRUSR, sc->debug.debugfs_phy, sc, 2101 &fops_samps); 2102#endif | |
2103 debugfs_create_u32("gpio_mask", S_IRUSR | S_IWUSR, 2104 sc->debug.debugfs_phy, &sc->sc_ah->gpio_mask); 2105 debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR, 2106 sc->debug.debugfs_phy, &sc->sc_ah->gpio_val); 2107 debugfs_create_file("diversity", S_IRUSR | S_IWUSR, 2108 sc->debug.debugfs_phy, sc, &fops_ant_diversity); 2109#ifdef CONFIG_ATH9K_BTCOEX_SUPPORT 2110 debugfs_create_file("btcoex", S_IRUSR, sc->debug.debugfs_phy, sc, 2111 &fops_btcoex); 2112#endif 2113 return 0; 2114} | 1805 debugfs_create_u32("gpio_mask", S_IRUSR | S_IWUSR, 1806 sc->debug.debugfs_phy, &sc->sc_ah->gpio_mask); 1807 debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR, 1808 sc->debug.debugfs_phy, &sc->sc_ah->gpio_val); 1809 debugfs_create_file("diversity", S_IRUSR | S_IWUSR, 1810 sc->debug.debugfs_phy, sc, &fops_ant_diversity); 1811#ifdef CONFIG_ATH9K_BTCOEX_SUPPORT 1812 debugfs_create_file("btcoex", S_IRUSR, sc->debug.debugfs_phy, sc, 1813 &fops_btcoex); 1814#endif 1815 return 0; 1816} |