162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * This file is part of wl12xx 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2009 Nokia Corporation 662306a36Sopenharmony_ci * Copyright (C) 2011-2012 Texas Instruments 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include "../wlcore/debugfs.h" 1062306a36Sopenharmony_ci#include "../wlcore/wlcore.h" 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include "wl12xx.h" 1362306a36Sopenharmony_ci#include "acx.h" 1462306a36Sopenharmony_ci#include "debugfs.h" 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#define WL12XX_DEBUGFS_FWSTATS_FILE(a, b, c) \ 1762306a36Sopenharmony_ci DEBUGFS_FWSTATS_FILE(a, b, c, wl12xx_acx_statistics) 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(tx, internal_desc_overflow, "%u"); 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(rx, out_of_mem, "%u"); 2262306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(rx, hdr_overflow, "%u"); 2362306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(rx, hw_stuck, "%u"); 2462306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(rx, dropped, "%u"); 2562306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(rx, fcs_err, "%u"); 2662306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(rx, xfr_hint_trig, "%u"); 2762306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(rx, path_reset, "%u"); 2862306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(rx, reset_counter, "%u"); 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(dma, rx_requested, "%u"); 3162306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(dma, rx_errors, "%u"); 3262306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(dma, tx_requested, "%u"); 3362306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(dma, tx_errors, "%u"); 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, cmd_cmplt, "%u"); 3662306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, fiqs, "%u"); 3762306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, rx_headers, "%u"); 3862306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, rx_mem_overflow, "%u"); 3962306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, rx_rdys, "%u"); 4062306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, irqs, "%u"); 4162306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, tx_procs, "%u"); 4262306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, decrypt_done, "%u"); 4362306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, dma0_done, "%u"); 4462306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, dma1_done, "%u"); 4562306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, tx_exch_complete, "%u"); 4662306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, commands, "%u"); 4762306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, rx_procs, "%u"); 4862306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, hw_pm_mode_changes, "%u"); 4962306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, host_acknowledges, "%u"); 5062306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, pci_pm, "%u"); 5162306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, wakeups, "%u"); 5262306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(isr, low_rssi, "%u"); 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(wep, addr_key_count, "%u"); 5562306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(wep, default_key_count, "%u"); 5662306a36Sopenharmony_ci/* skipping wep.reserved */ 5762306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(wep, key_not_found, "%u"); 5862306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(wep, decrypt_fail, "%u"); 5962306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(wep, packets, "%u"); 6062306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(wep, interrupt, "%u"); 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(pwr, ps_enter, "%u"); 6362306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(pwr, elp_enter, "%u"); 6462306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(pwr, missing_bcns, "%u"); 6562306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(pwr, wake_on_host, "%u"); 6662306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(pwr, wake_on_timer_exp, "%u"); 6762306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(pwr, tx_with_ps, "%u"); 6862306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(pwr, tx_without_ps, "%u"); 6962306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(pwr, rcvd_beacons, "%u"); 7062306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(pwr, power_save_off, "%u"); 7162306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(pwr, enable_ps, "%u"); 7262306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(pwr, disable_ps, "%u"); 7362306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(pwr, fix_tsf_ps, "%u"); 7462306a36Sopenharmony_ci/* skipping cont_miss_bcns_spread for now */ 7562306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(pwr, rcvd_awake_beacons, "%u"); 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(mic, rx_pkts, "%u"); 7862306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(mic, calc_failure, "%u"); 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(aes, encrypt_fail, "%u"); 8162306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(aes, decrypt_fail, "%u"); 8262306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(aes, encrypt_packets, "%u"); 8362306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(aes, decrypt_packets, "%u"); 8462306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(aes, encrypt_interrupt, "%u"); 8562306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(aes, decrypt_interrupt, "%u"); 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(event, heart_beat, "%u"); 8862306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(event, calibration, "%u"); 8962306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(event, rx_mismatch, "%u"); 9062306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(event, rx_mem_empty, "%u"); 9162306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(event, rx_pool, "%u"); 9262306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(event, oom_late, "%u"); 9362306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(event, phy_transmit_error, "%u"); 9462306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(event, tx_stuck, "%u"); 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(ps, pspoll_timeouts, "%u"); 9762306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(ps, upsd_timeouts, "%u"); 9862306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(ps, upsd_max_sptime, "%u"); 9962306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(ps, upsd_max_apturn, "%u"); 10062306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(ps, pspoll_max_apturn, "%u"); 10162306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(ps, pspoll_utilization, "%u"); 10262306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(ps, upsd_utilization, "%u"); 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(rxpipe, rx_prep_beacon_drop, "%u"); 10562306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(rxpipe, descr_host_int_trig_rx_data, "%u"); 10662306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(rxpipe, beacon_buffer_thres_host_int_trig_rx_data, 10762306a36Sopenharmony_ci "%u"); 10862306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(rxpipe, missed_beacon_host_int_trig_rx_data, "%u"); 10962306a36Sopenharmony_ciWL12XX_DEBUGFS_FWSTATS_FILE(rxpipe, tx_xfr_host_int_trig_rx_data, "%u"); 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ciint wl12xx_debugfs_add_files(struct wl1271 *wl, 11262306a36Sopenharmony_ci struct dentry *rootdir) 11362306a36Sopenharmony_ci{ 11462306a36Sopenharmony_ci struct dentry *stats, *moddir; 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci moddir = debugfs_create_dir(KBUILD_MODNAME, rootdir); 11762306a36Sopenharmony_ci stats = debugfs_create_dir("fw_stats", moddir); 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(tx, internal_desc_overflow); 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(rx, out_of_mem); 12262306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(rx, hdr_overflow); 12362306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(rx, hw_stuck); 12462306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(rx, dropped); 12562306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(rx, fcs_err); 12662306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(rx, xfr_hint_trig); 12762306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(rx, path_reset); 12862306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(rx, reset_counter); 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(dma, rx_requested); 13162306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(dma, rx_errors); 13262306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(dma, tx_requested); 13362306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(dma, tx_errors); 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, cmd_cmplt); 13662306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, fiqs); 13762306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, rx_headers); 13862306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, rx_mem_overflow); 13962306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, rx_rdys); 14062306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, irqs); 14162306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, tx_procs); 14262306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, decrypt_done); 14362306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, dma0_done); 14462306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, dma1_done); 14562306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, tx_exch_complete); 14662306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, commands); 14762306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, rx_procs); 14862306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, hw_pm_mode_changes); 14962306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, host_acknowledges); 15062306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, pci_pm); 15162306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, wakeups); 15262306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(isr, low_rssi); 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(wep, addr_key_count); 15562306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(wep, default_key_count); 15662306a36Sopenharmony_ci /* skipping wep.reserved */ 15762306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(wep, key_not_found); 15862306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(wep, decrypt_fail); 15962306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(wep, packets); 16062306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(wep, interrupt); 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(pwr, ps_enter); 16362306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(pwr, elp_enter); 16462306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(pwr, missing_bcns); 16562306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(pwr, wake_on_host); 16662306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(pwr, wake_on_timer_exp); 16762306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(pwr, tx_with_ps); 16862306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(pwr, tx_without_ps); 16962306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(pwr, rcvd_beacons); 17062306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(pwr, power_save_off); 17162306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(pwr, enable_ps); 17262306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(pwr, disable_ps); 17362306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(pwr, fix_tsf_ps); 17462306a36Sopenharmony_ci /* skipping cont_miss_bcns_spread for now */ 17562306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(pwr, rcvd_awake_beacons); 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(mic, rx_pkts); 17862306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(mic, calc_failure); 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(aes, encrypt_fail); 18162306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(aes, decrypt_fail); 18262306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(aes, encrypt_packets); 18362306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(aes, decrypt_packets); 18462306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(aes, encrypt_interrupt); 18562306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(aes, decrypt_interrupt); 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(event, heart_beat); 18862306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(event, calibration); 18962306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(event, rx_mismatch); 19062306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(event, rx_mem_empty); 19162306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(event, rx_pool); 19262306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(event, oom_late); 19362306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(event, phy_transmit_error); 19462306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(event, tx_stuck); 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(ps, pspoll_timeouts); 19762306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(ps, upsd_timeouts); 19862306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(ps, upsd_max_sptime); 19962306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(ps, upsd_max_apturn); 20062306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(ps, pspoll_max_apturn); 20162306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(ps, pspoll_utilization); 20262306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(ps, upsd_utilization); 20362306a36Sopenharmony_ci 20462306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(rxpipe, rx_prep_beacon_drop); 20562306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(rxpipe, descr_host_int_trig_rx_data); 20662306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(rxpipe, beacon_buffer_thres_host_int_trig_rx_data); 20762306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(rxpipe, missed_beacon_host_int_trig_rx_data); 20862306a36Sopenharmony_ci DEBUGFS_FWSTATS_ADD(rxpipe, tx_xfr_host_int_trig_rx_data); 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_ci return 0; 21162306a36Sopenharmony_ci} 212