int wl18xx_debugfs_add_files(struct wl1271 *wl, struct dentry *rootdir) { int ret = 0; struct dentry *entry, *stats, *moddir; moddir = debugfs_create_dir(KBUILD_MODNAME, rootdir); if (!moddir || IS_ERR(moddir)) { entry = moddir; goto err; } stats = debugfs_create_dir("fw_stats", moddir); if (!stats || IS_ERR(stats)) { entry = stats; goto err; } DEBUGFS_ADD(clear_fw_stats, stats); DEBUGFS_FWSTATS_ADD(debug, debug1); DEBUGFS_FWSTATS_ADD(debug, debug2); DEBUGFS_FWSTATS_ADD(debug, debug3); DEBUGFS_FWSTATS_ADD(debug, debug4); DEBUGFS_FWSTATS_ADD(debug, debug5); DEBUGFS_FWSTATS_ADD(debug, debug6); DEBUGFS_FWSTATS_ADD(error, error_frame_non_ctrl); DEBUGFS_FWSTATS_ADD(error, error_frame_ctrl); DEBUGFS_FWSTATS_ADD(error, error_frame_during_protection); DEBUGFS_FWSTATS_ADD(error, null_frame_tx_start); DEBUGFS_FWSTATS_ADD(error, null_frame_cts_start); DEBUGFS_FWSTATS_ADD(error, bar_retry); DEBUGFS_FWSTATS_ADD(error, num_frame_cts_nul_flid); DEBUGFS_FWSTATS_ADD(error, tx_abort_failure); DEBUGFS_FWSTATS_ADD(error, tx_resume_failure); DEBUGFS_FWSTATS_ADD(error, rx_cmplt_db_overflow_cnt); DEBUGFS_FWSTATS_ADD(error, elp_while_rx_exch); DEBUGFS_FWSTATS_ADD(error, elp_while_tx_exch); DEBUGFS_FWSTATS_ADD(error, elp_while_tx); DEBUGFS_FWSTATS_ADD(error, elp_while_nvic_pending); DEBUGFS_FWSTATS_ADD(error, rx_excessive_frame_len); DEBUGFS_FWSTATS_ADD(error, burst_mismatch); DEBUGFS_FWSTATS_ADD(error, tbc_exch_mismatch); DEBUGFS_FWSTATS_ADD(tx, tx_prepared_descs); DEBUGFS_FWSTATS_ADD(tx, tx_cmplt); DEBUGFS_FWSTATS_ADD(tx, tx_template_prepared); DEBUGFS_FWSTATS_ADD(tx, tx_data_prepared); DEBUGFS_FWSTATS_ADD(tx, tx_template_programmed); DEBUGFS_FWSTATS_ADD(tx, tx_data_programmed); DEBUGFS_FWSTATS_ADD(tx, tx_burst_programmed); DEBUGFS_FWSTATS_ADD(tx, tx_starts); DEBUGFS_FWSTATS_ADD(tx, tx_stop); DEBUGFS_FWSTATS_ADD(tx, tx_imm_resp); DEBUGFS_FWSTATS_ADD(tx, tx_start_templates); DEBUGFS_FWSTATS_ADD(tx, tx_start_int_templates); DEBUGFS_FWSTATS_ADD(tx, tx_start_fw_gen); DEBUGFS_FWSTATS_ADD(tx, tx_start_data); DEBUGFS_FWSTATS_ADD(tx, tx_start_null_frame); DEBUGFS_FWSTATS_ADD(tx, tx_exch); DEBUGFS_FWSTATS_ADD(tx, tx_retry_template); DEBUGFS_FWSTATS_ADD(tx, tx_retry_data); DEBUGFS_FWSTATS_ADD(tx, tx_retry_per_rate); DEBUGFS_FWSTATS_ADD(tx, tx_exch_pending); DEBUGFS_FWSTATS_ADD(tx, tx_exch_expiry); DEBUGFS_FWSTATS_ADD(tx, tx_done_template); DEBUGFS_FWSTATS_ADD(tx, tx_done_data); DEBUGFS_FWSTATS_ADD(tx, tx_done_int_template); DEBUGFS_FWSTATS_ADD(tx, tx_cfe1); DEBUGFS_FWSTATS_ADD(tx, tx_cfe2); DEBUGFS_FWSTATS_ADD(tx, frag_called); DEBUGFS_FWSTATS_ADD(tx, frag_mpdu_alloc_failed); DEBUGFS_FWSTATS_ADD(tx, frag_init_called); DEBUGFS_FWSTATS_ADD(tx, frag_in_process_called); DEBUGFS_FWSTATS_ADD(tx, frag_tkip_called); DEBUGFS_FWSTATS_ADD(tx, frag_key_not_found); DEBUGFS_FWSTATS_ADD(tx, frag_need_fragmentation); DEBUGFS_FWSTATS_ADD(tx, frag_bad_mblk_num); DEBUGFS_FWSTATS_ADD(tx, frag_failed); DEBUGFS_FWSTATS_ADD(tx, frag_cache_hit); DEBUGFS_FWSTATS_ADD(tx, frag_cache_miss); DEBUGFS_FWSTATS_ADD(rx, rx_beacon_early_term); DEBUGFS_FWSTATS_ADD(rx, rx_out_of_mpdu_nodes); DEBUGFS_FWSTATS_ADD(rx, rx_hdr_overflow); DEBUGFS_FWSTATS_ADD(rx, rx_dropped_frame); DEBUGFS_FWSTATS_ADD(rx, rx_done); DEBUGFS_FWSTATS_ADD(rx, rx_defrag); DEBUGFS_FWSTATS_ADD(rx, rx_defrag_end); DEBUGFS_FWSTATS_ADD(rx, rx_cmplt); DEBUGFS_FWSTATS_ADD(rx, rx_pre_complt); DEBUGFS_FWSTATS_ADD(rx, rx_cmplt_task); DEBUGFS_FWSTATS_ADD(rx, rx_phy_hdr); DEBUGFS_FWSTATS_ADD(rx, rx_timeout); DEBUGFS_FWSTATS_ADD(rx, rx_rts_timeout); DEBUGFS_FWSTATS_ADD(rx, rx_timeout_wa); DEBUGFS_FWSTATS_ADD(rx, rx_wa_density_dropped_frame); DEBUGFS_FWSTATS_ADD(rx, rx_wa_ba_not_expected); DEBUGFS_FWSTATS_ADD(rx, defrag_called); DEBUGFS_FWSTATS_ADD(rx, defrag_init_called); DEBUGFS_FWSTATS_ADD(rx, defrag_in_process_called); DEBUGFS_FWSTATS_ADD(rx, defrag_tkip_called); DEBUGFS_FWSTATS_ADD(rx, defrag_need_defrag); DEBUGFS_FWSTATS_ADD(rx, defrag_decrypt_failed); DEBUGFS_FWSTATS_ADD(rx, decrypt_key_not_found); DEBUGFS_FWSTATS_ADD(rx, defrag_need_decrypt); DEBUGFS_FWSTATS_ADD(rx, rx_tkip_replays); DEBUGFS_FWSTATS_ADD(rx, rx_xfr); DEBUGFS_FWSTATS_ADD(isr, irqs); DEBUGFS_FWSTATS_ADD(pwr, missing_bcns_cnt); DEBUGFS_FWSTATS_ADD(pwr, rcvd_bcns_cnt); DEBUGFS_FWSTATS_ADD(pwr, connection_out_of_sync); DEBUGFS_FWSTATS_ADD(pwr, cont_miss_bcns_spread); DEBUGFS_FWSTATS_ADD(pwr, rcvd_awake_bcns_cnt); DEBUGFS_FWSTATS_ADD(ps_poll, ps_poll_timeouts); DEBUGFS_FWSTATS_ADD(ps_poll, upsd_timeouts); DEBUGFS_FWSTATS_ADD(ps_poll, upsd_max_ap_turn); DEBUGFS_FWSTATS_ADD(ps_poll, ps_poll_max_ap_turn); DEBUGFS_FWSTATS_ADD(ps_poll, ps_poll_utilization); DEBUGFS_FWSTATS_ADD(ps_poll, upsd_utilization); DEBUGFS_FWSTATS_ADD(rx_filter, beacon_filter); DEBUGFS_FWSTATS_ADD(rx_filter, arp_filter); DEBUGFS_FWSTATS_ADD(rx_filter, mc_filter); DEBUGFS_FWSTATS_ADD(rx_filter, dup_filter); DEBUGFS_FWSTATS_ADD(rx_filter, data_filter); DEBUGFS_FWSTATS_ADD(rx_filter, ibss_filter); DEBUGFS_FWSTATS_ADD(rx_filter, protection_filter); DEBUGFS_FWSTATS_ADD(rx_filter, accum_arp_pend_requests); DEBUGFS_FWSTATS_ADD(rx_filter, max_arp_queue_dep); DEBUGFS_FWSTATS_ADD(rx_rate, rx_frames_per_rates); DEBUGFS_FWSTATS_ADD(aggr_size, tx_agg_rate); DEBUGFS_FWSTATS_ADD(aggr_size, tx_agg_len); DEBUGFS_FWSTATS_ADD(aggr_size, rx_size); DEBUGFS_FWSTATS_ADD(pipeline, hs_tx_stat_fifo_int); DEBUGFS_FWSTATS_ADD(pipeline, tcp_tx_stat_fifo_int); DEBUGFS_FWSTATS_ADD(pipeline, tcp_rx_stat_fifo_int); DEBUGFS_FWSTATS_ADD(pipeline, enc_tx_stat_fifo_int); DEBUGFS_FWSTATS_ADD(pipeline, enc_rx_stat_fifo_int); DEBUGFS_FWSTATS_ADD(pipeline, rx_complete_stat_fifo_int); DEBUGFS_FWSTATS_ADD(pipeline, pre_proc_swi); DEBUGFS_FWSTATS_ADD(pipeline, post_proc_swi); DEBUGFS_FWSTATS_ADD(pipeline, sec_frag_swi); DEBUGFS_FWSTATS_ADD(pipeline, pre_to_defrag_swi); DEBUGFS_FWSTATS_ADD(pipeline, defrag_to_csum_swi); DEBUGFS_FWSTATS_ADD(pipeline, csum_to_rx_xfer_swi); DEBUGFS_FWSTATS_ADD(pipeline, dec_packet_in); DEBUGFS_FWSTATS_ADD(pipeline, dec_packet_in_fifo_full); DEBUGFS_FWSTATS_ADD(pipeline, dec_packet_out); DEBUGFS_FWSTATS_ADD(pipeline, cs_rx_packet_in); DEBUGFS_FWSTATS_ADD(pipeline, cs_rx_packet_out); DEBUGFS_FWSTATS_ADD(pipeline, pipeline_fifo_full); DEBUGFS_FWSTATS_ADD(mem, rx_free_mem_blks); DEBUGFS_FWSTATS_ADD(mem, tx_free_mem_blks); DEBUGFS_FWSTATS_ADD(mem, fwlog_free_mem_blks); DEBUGFS_FWSTATS_ADD(mem, fw_gen_free_mem_blks); DEBUGFS_FWSTATS_ADD(thermal, irq_thr_low); DEBUGFS_FWSTATS_ADD(thermal, irq_thr_high); DEBUGFS_FWSTATS_ADD(thermal, tx_stop); DEBUGFS_FWSTATS_ADD(thermal, tx_resume); DEBUGFS_FWSTATS_ADD(thermal, false_irq); DEBUGFS_FWSTATS_ADD(thermal, adc_source_unexpected); DEBUGFS_FWSTATS_ADD(calib, fail_count); DEBUGFS_FWSTATS_ADD(calib, calib_count); DEBUGFS_FWSTATS_ADD(roaming, rssi_level); DEBUGFS_ADD(conf, moddir); DEBUGFS_ADD(radar_detection, moddir); DEBUGFS_ADD(radar_debug_mode, moddir); return 0; err: if (IS_ERR(entry)) ret = PTR_ERR(entry); else ret = -ENOMEM; return ret; }
static int wl1271_debugfs_add_files(struct wl1271 *wl, struct dentry *rootdir) { int ret = 0; struct dentry *entry, *stats; stats = debugfs_create_dir("fw-statistics", rootdir); if (!stats || IS_ERR(stats)) { entry = stats; goto err; } DEBUGFS_FWSTATS_ADD(tx, internal_desc_overflow); DEBUGFS_FWSTATS_ADD(rx, out_of_mem); DEBUGFS_FWSTATS_ADD(rx, hdr_overflow); DEBUGFS_FWSTATS_ADD(rx, hw_stuck); DEBUGFS_FWSTATS_ADD(rx, dropped); DEBUGFS_FWSTATS_ADD(rx, fcs_err); DEBUGFS_FWSTATS_ADD(rx, xfr_hint_trig); DEBUGFS_FWSTATS_ADD(rx, path_reset); DEBUGFS_FWSTATS_ADD(rx, reset_counter); DEBUGFS_FWSTATS_ADD(dma, rx_requested); DEBUGFS_FWSTATS_ADD(dma, rx_errors); DEBUGFS_FWSTATS_ADD(dma, tx_requested); DEBUGFS_FWSTATS_ADD(dma, tx_errors); DEBUGFS_FWSTATS_ADD(isr, cmd_cmplt); DEBUGFS_FWSTATS_ADD(isr, fiqs); DEBUGFS_FWSTATS_ADD(isr, rx_headers); DEBUGFS_FWSTATS_ADD(isr, rx_mem_overflow); DEBUGFS_FWSTATS_ADD(isr, rx_rdys); DEBUGFS_FWSTATS_ADD(isr, irqs); DEBUGFS_FWSTATS_ADD(isr, tx_procs); DEBUGFS_FWSTATS_ADD(isr, decrypt_done); DEBUGFS_FWSTATS_ADD(isr, dma0_done); DEBUGFS_FWSTATS_ADD(isr, dma1_done); DEBUGFS_FWSTATS_ADD(isr, tx_exch_complete); DEBUGFS_FWSTATS_ADD(isr, commands); DEBUGFS_FWSTATS_ADD(isr, rx_procs); DEBUGFS_FWSTATS_ADD(isr, hw_pm_mode_changes); DEBUGFS_FWSTATS_ADD(isr, host_acknowledges); DEBUGFS_FWSTATS_ADD(isr, pci_pm); DEBUGFS_FWSTATS_ADD(isr, wakeups); DEBUGFS_FWSTATS_ADD(isr, low_rssi); DEBUGFS_FWSTATS_ADD(wep, addr_key_count); DEBUGFS_FWSTATS_ADD(wep, default_key_count); /* skipping wep.reserved */ DEBUGFS_FWSTATS_ADD(wep, key_not_found); DEBUGFS_FWSTATS_ADD(wep, decrypt_fail); DEBUGFS_FWSTATS_ADD(wep, packets); DEBUGFS_FWSTATS_ADD(wep, interrupt); DEBUGFS_FWSTATS_ADD(pwr, ps_enter); DEBUGFS_FWSTATS_ADD(pwr, elp_enter); DEBUGFS_FWSTATS_ADD(pwr, missing_bcns); DEBUGFS_FWSTATS_ADD(pwr, wake_on_host); DEBUGFS_FWSTATS_ADD(pwr, wake_on_timer_exp); DEBUGFS_FWSTATS_ADD(pwr, tx_with_ps); DEBUGFS_FWSTATS_ADD(pwr, tx_without_ps); DEBUGFS_FWSTATS_ADD(pwr, rcvd_beacons); DEBUGFS_FWSTATS_ADD(pwr, power_save_off); DEBUGFS_FWSTATS_ADD(pwr, enable_ps); DEBUGFS_FWSTATS_ADD(pwr, disable_ps); DEBUGFS_FWSTATS_ADD(pwr, fix_tsf_ps); /* skipping cont_miss_bcns_spread for now */ DEBUGFS_FWSTATS_ADD(pwr, rcvd_awake_beacons); DEBUGFS_FWSTATS_ADD(mic, rx_pkts); DEBUGFS_FWSTATS_ADD(mic, calc_failure); DEBUGFS_FWSTATS_ADD(aes, encrypt_fail); DEBUGFS_FWSTATS_ADD(aes, decrypt_fail); DEBUGFS_FWSTATS_ADD(aes, encrypt_packets); DEBUGFS_FWSTATS_ADD(aes, decrypt_packets); DEBUGFS_FWSTATS_ADD(aes, encrypt_interrupt); DEBUGFS_FWSTATS_ADD(aes, decrypt_interrupt); DEBUGFS_FWSTATS_ADD(event, heart_beat); DEBUGFS_FWSTATS_ADD(event, calibration); DEBUGFS_FWSTATS_ADD(event, rx_mismatch); DEBUGFS_FWSTATS_ADD(event, rx_mem_empty); DEBUGFS_FWSTATS_ADD(event, rx_pool); DEBUGFS_FWSTATS_ADD(event, oom_late); DEBUGFS_FWSTATS_ADD(event, phy_transmit_error); DEBUGFS_FWSTATS_ADD(event, tx_stuck); DEBUGFS_FWSTATS_ADD(ps, pspoll_timeouts); DEBUGFS_FWSTATS_ADD(ps, upsd_timeouts); DEBUGFS_FWSTATS_ADD(ps, upsd_max_sptime); DEBUGFS_FWSTATS_ADD(ps, upsd_max_apturn); DEBUGFS_FWSTATS_ADD(ps, pspoll_max_apturn); DEBUGFS_FWSTATS_ADD(ps, pspoll_utilization); DEBUGFS_FWSTATS_ADD(ps, upsd_utilization); DEBUGFS_FWSTATS_ADD(rxpipe, rx_prep_beacon_drop); DEBUGFS_FWSTATS_ADD(rxpipe, descr_host_int_trig_rx_data); DEBUGFS_FWSTATS_ADD(rxpipe, beacon_buffer_thres_host_int_trig_rx_data); DEBUGFS_FWSTATS_ADD(rxpipe, missed_beacon_host_int_trig_rx_data); DEBUGFS_FWSTATS_ADD(rxpipe, tx_xfr_host_int_trig_rx_data); DEBUGFS_ADD(tx_queue_len, rootdir); DEBUGFS_ADD(retry_count, rootdir); DEBUGFS_ADD(excessive_retries, rootdir); DEBUGFS_ADD(gpio_power, rootdir); DEBUGFS_ADD(rx_streaming_interval, rootdir); DEBUGFS_ADD(driver_state, rootdir); DEBUGFS_ADD(rx_streaming_always, rootdir); return 0; err: if (IS_ERR(entry)) ret = PTR_ERR(entry); else ret = -ENOMEM; return ret; }
int wl18xx_debugfs_add_files(struct wl1271 *wl, struct dentry *rootdir) { int ret = 0; struct dentry *entry, *stats, *moddir; moddir = debugfs_create_dir(KBUILD_MODNAME, rootdir); if (!moddir || IS_ERR(moddir)) { entry = moddir; goto err; } stats = debugfs_create_dir("fw_stats", moddir); if (!stats || IS_ERR(stats)) { entry = stats; goto err; } DEBUGFS_FWSTATS_ADD(debug, debug1); DEBUGFS_FWSTATS_ADD(debug, debug2); DEBUGFS_FWSTATS_ADD(debug, debug3); DEBUGFS_FWSTATS_ADD(debug, debug4); DEBUGFS_FWSTATS_ADD(debug, debug5); DEBUGFS_FWSTATS_ADD(debug, debug6); DEBUGFS_FWSTATS_ADD(ring, prepared_descs); DEBUGFS_FWSTATS_ADD(ring, tx_cmplt); DEBUGFS_FWSTATS_ADD(tx, tx_template_prepared); DEBUGFS_FWSTATS_ADD(tx, tx_data_prepared); DEBUGFS_FWSTATS_ADD(tx, tx_template_programmed); DEBUGFS_FWSTATS_ADD(tx, tx_data_programmed); DEBUGFS_FWSTATS_ADD(tx, tx_burst_programmed); DEBUGFS_FWSTATS_ADD(tx, tx_starts); DEBUGFS_FWSTATS_ADD(tx, tx_imm_resp); DEBUGFS_FWSTATS_ADD(tx, tx_start_templates); DEBUGFS_FWSTATS_ADD(tx, tx_start_int_templates); DEBUGFS_FWSTATS_ADD(tx, tx_start_fw_gen); DEBUGFS_FWSTATS_ADD(tx, tx_start_data); DEBUGFS_FWSTATS_ADD(tx, tx_start_null_frame); DEBUGFS_FWSTATS_ADD(tx, tx_exch); DEBUGFS_FWSTATS_ADD(tx, tx_retry_template); DEBUGFS_FWSTATS_ADD(tx, tx_retry_data); DEBUGFS_FWSTATS_ADD(tx, tx_exch_pending); DEBUGFS_FWSTATS_ADD(tx, tx_exch_expiry); DEBUGFS_FWSTATS_ADD(tx, tx_done_template); DEBUGFS_FWSTATS_ADD(tx, tx_done_data); DEBUGFS_FWSTATS_ADD(tx, tx_done_int_template); DEBUGFS_FWSTATS_ADD(tx, tx_frame_checksum); DEBUGFS_FWSTATS_ADD(tx, tx_checksum_result); DEBUGFS_FWSTATS_ADD(tx, frag_called); DEBUGFS_FWSTATS_ADD(tx, frag_mpdu_alloc_failed); DEBUGFS_FWSTATS_ADD(tx, frag_init_called); DEBUGFS_FWSTATS_ADD(tx, frag_in_process_called); DEBUGFS_FWSTATS_ADD(tx, frag_tkip_called); DEBUGFS_FWSTATS_ADD(tx, frag_key_not_found); DEBUGFS_FWSTATS_ADD(tx, frag_need_fragmentation); DEBUGFS_FWSTATS_ADD(tx, frag_bad_mblk_num); DEBUGFS_FWSTATS_ADD(tx, frag_failed); DEBUGFS_FWSTATS_ADD(tx, frag_cache_hit); DEBUGFS_FWSTATS_ADD(tx, frag_cache_miss); DEBUGFS_FWSTATS_ADD(rx, rx_out_of_mem); DEBUGFS_FWSTATS_ADD(rx, rx_hdr_overflow); DEBUGFS_FWSTATS_ADD(rx, rx_dropped_frame); DEBUGFS_FWSTATS_ADD(rx, rx_done); DEBUGFS_FWSTATS_ADD(rx, rx_defrag); DEBUGFS_FWSTATS_ADD(rx, rx_defrag_end); DEBUGFS_FWSTATS_ADD(rx, rx_cmplt); DEBUGFS_FWSTATS_ADD(rx, rx_pre_complt); DEBUGFS_FWSTATS_ADD(rx, rx_cmplt_task); DEBUGFS_FWSTATS_ADD(rx, rx_phy_hdr); DEBUGFS_FWSTATS_ADD(rx, rx_timeout); DEBUGFS_FWSTATS_ADD(rx, rx_frame_checksum); DEBUGFS_FWSTATS_ADD(rx, rx_checksum_result); DEBUGFS_FWSTATS_ADD(rx, defrag_called); DEBUGFS_FWSTATS_ADD(rx, defrag_init_called); DEBUGFS_FWSTATS_ADD(rx, defrag_in_process_called); DEBUGFS_FWSTATS_ADD(rx, defrag_tkip_called); DEBUGFS_FWSTATS_ADD(rx, defrag_need_defrag); DEBUGFS_FWSTATS_ADD(rx, defrag_decrypt_failed); DEBUGFS_FWSTATS_ADD(rx, decrypt_key_not_found); DEBUGFS_FWSTATS_ADD(rx, defrag_need_decrypt); DEBUGFS_FWSTATS_ADD(isr, irqs); DEBUGFS_FWSTATS_ADD(pwr, missing_bcns_cnt); DEBUGFS_FWSTATS_ADD(pwr, rcvd_bcns_cnt); DEBUGFS_FWSTATS_ADD(pwr, connection_out_of_sync); DEBUGFS_FWSTATS_ADD(pwr, cont_miss_bcns_spread); DEBUGFS_FWSTATS_ADD(pwr, rcvd_awake_bcns_cnt); DEBUGFS_FWSTATS_ADD(event, calibration); DEBUGFS_FWSTATS_ADD(event, rx_mismatch); DEBUGFS_FWSTATS_ADD(event, rx_mem_empty); DEBUGFS_FWSTATS_ADD(ps_poll, ps_poll_timeouts); DEBUGFS_FWSTATS_ADD(ps_poll, upsd_timeouts); DEBUGFS_FWSTATS_ADD(ps_poll, upsd_max_ap_turn); DEBUGFS_FWSTATS_ADD(ps_poll, ps_poll_max_ap_turn); DEBUGFS_FWSTATS_ADD(ps_poll, ps_poll_utilization); DEBUGFS_FWSTATS_ADD(ps_poll, upsd_utilization); DEBUGFS_FWSTATS_ADD(rx_filter, beacon_filter); DEBUGFS_FWSTATS_ADD(rx_filter, arp_filter); DEBUGFS_FWSTATS_ADD(rx_filter, mc_filter); DEBUGFS_FWSTATS_ADD(rx_filter, dup_filter); DEBUGFS_FWSTATS_ADD(rx_filter, data_filter); DEBUGFS_FWSTATS_ADD(rx_filter, ibss_filter); DEBUGFS_FWSTATS_ADD(rx_filter, protection_filter); DEBUGFS_FWSTATS_ADD(rx_rate, rx_frames_per_rates); DEBUGFS_FWSTATS_ADD(aggr_size, tx_size); DEBUGFS_FWSTATS_ADD(aggr_size, rx_size); DEBUGFS_FWSTATS_ADD(pipeline, hs_tx_stat_fifo_int); DEBUGFS_FWSTATS_ADD(pipeline, tcp_tx_stat_fifo_int); DEBUGFS_FWSTATS_ADD(pipeline, tcp_rx_stat_fifo_int); DEBUGFS_FWSTATS_ADD(pipeline, enc_tx_stat_fifo_int); DEBUGFS_FWSTATS_ADD(pipeline, enc_rx_stat_fifo_int); DEBUGFS_FWSTATS_ADD(pipeline, rx_complete_stat_fifo_int); DEBUGFS_FWSTATS_ADD(pipeline, pre_proc_swi); DEBUGFS_FWSTATS_ADD(pipeline, post_proc_swi); DEBUGFS_FWSTATS_ADD(pipeline, sec_frag_swi); DEBUGFS_FWSTATS_ADD(pipeline, pre_to_defrag_swi); DEBUGFS_FWSTATS_ADD(pipeline, defrag_to_csum_swi); DEBUGFS_FWSTATS_ADD(pipeline, csum_to_rx_xfer_swi); DEBUGFS_FWSTATS_ADD(pipeline, dec_packet_in); DEBUGFS_FWSTATS_ADD(pipeline, dec_packet_in_fifo_full); DEBUGFS_FWSTATS_ADD(pipeline, dec_packet_out); DEBUGFS_FWSTATS_ADD(pipeline, cs_rx_packet_in); DEBUGFS_FWSTATS_ADD(pipeline, cs_rx_packet_out); DEBUGFS_FWSTATS_ADD(mem, rx_free_mem_blks); DEBUGFS_FWSTATS_ADD(mem, tx_free_mem_blks); DEBUGFS_FWSTATS_ADD(mem, fwlog_free_mem_blks); DEBUGFS_FWSTATS_ADD(mem, fw_gen_free_mem_blks); return 0; err: if (IS_ERR(entry)) ret = PTR_ERR(entry); else ret = -ENOMEM; return ret; }