2011-02-21 11:27:26 -08:00
/******************************************************************************
*
* GPL LICENSE SUMMARY
*
* Copyright ( c ) 2008 - 2011 Intel Corporation . All rights reserved .
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful , but
* WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 ,
* USA
*
* The full GNU General Public License is included in this distribution
* in the file called LICENSE . GPL .
*
* Contact Information :
* Intel Linux Wireless < ilw @ linux . intel . com >
* Intel Corporation , 5200 N . E . Elam Young Parkway , Hillsboro , OR 97124 - 6497
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2011-11-15 14:19:34 +01:00
# include "common.h"
2011-08-30 13:58:27 +02:00
# include "4965.h"
2011-02-21 11:27:26 -08:00
static const char * fmt_value = " %-30s %10u \n " ;
static const char * fmt_table = " %-30s %10u %10u %10u %10u \n " ;
static const char * fmt_header =
2011-11-15 14:45:59 +01:00
" %-32s current cumulative delta max \n " ;
2011-02-21 11:27:26 -08:00
2011-11-15 14:45:59 +01:00
static int
il4965_stats_flag ( struct il_priv * il , char * buf , int bufsz )
2011-02-21 11:27:26 -08:00
{
int p = 0 ;
u32 flag ;
2011-08-26 15:43:47 +02:00
flag = le32_to_cpu ( il - > _4965 . stats . flag ) ;
2011-02-21 11:27:26 -08:00
p + = scnprintf ( buf + p , bufsz - p , " Statistics Flag(0x%X): \n " , flag ) ;
2011-11-15 13:11:50 +01:00
if ( flag & UCODE_STATS_CLEAR_MSK )
2011-02-21 11:27:26 -08:00
p + = scnprintf ( buf + p , bufsz - p ,
2011-11-15 14:45:59 +01:00
" \t Statistics have been cleared \n " ) ;
2011-02-21 11:27:26 -08:00
p + = scnprintf ( buf + p , bufsz - p , " \t Operational Frequency: %s \n " ,
2011-11-15 14:45:59 +01:00
( flag & UCODE_STATS_FREQUENCY_MSK ) ? " 2.4 GHz " :
" 5.2 GHz " ) ;
2011-02-21 11:27:26 -08:00
p + = scnprintf ( buf + p , bufsz - p , " \t TGj Narrow Band: %s \n " ,
2011-11-15 14:45:59 +01:00
( flag & UCODE_STATS_NARROW_BAND_MSK ) ? " enabled " :
" disabled " ) ;
2011-02-21 11:27:26 -08:00
return p ;
}
2011-11-15 14:45:59 +01:00
ssize_t
2011-11-15 14:51:01 +01:00
il4965_ucode_rx_stats_read ( struct file * file , char __user * user_buf ,
size_t count , loff_t * ppos )
2011-02-21 11:27:26 -08:00
{
2011-10-24 16:49:25 +02:00
struct il_priv * il = file - > private_data ;
2011-02-21 11:27:26 -08:00
int pos = 0 ;
char * buf ;
2011-11-15 14:45:59 +01:00
int bufsz =
sizeof ( struct stats_rx_phy ) * 40 +
sizeof ( struct stats_rx_non_phy ) * 40 +
sizeof ( struct stats_rx_ht_phy ) * 40 + 400 ;
2011-02-21 11:27:26 -08:00
ssize_t ret ;
2011-08-26 15:43:47 +02:00
struct stats_rx_phy * ofdm , * accum_ofdm , * delta_ofdm , * max_ofdm ;
struct stats_rx_phy * cck , * accum_cck , * delta_cck , * max_cck ;
struct stats_rx_non_phy * general , * accum_general ;
struct stats_rx_non_phy * delta_general , * max_general ;
struct stats_rx_ht_phy * ht , * accum_ht , * delta_ht , * max_ht ;
2011-02-21 11:27:26 -08:00
2011-10-24 16:49:25 +02:00
if ( ! il_is_alive ( il ) )
2011-02-21 11:27:26 -08:00
return - EAGAIN ;
buf = kzalloc ( bufsz , GFP_KERNEL ) ;
if ( ! buf ) {
2011-08-18 22:07:57 +02:00
IL_ERR ( " Can not allocate Buffer \n " ) ;
2011-02-21 11:27:26 -08:00
return - ENOMEM ;
}
/*
* the statistic information display here is based on
2011-08-26 15:43:47 +02:00
* the last stats notification from uCode
2011-02-21 11:27:26 -08:00
* might not reflect the current uCode activity
*/
2011-08-26 15:43:47 +02:00
ofdm = & il - > _4965 . stats . rx . ofdm ;
cck = & il - > _4965 . stats . rx . cck ;
general = & il - > _4965 . stats . rx . general ;
ht = & il - > _4965 . stats . rx . ofdm_ht ;
accum_ofdm = & il - > _4965 . accum_stats . rx . ofdm ;
accum_cck = & il - > _4965 . accum_stats . rx . cck ;
accum_general = & il - > _4965 . accum_stats . rx . general ;
accum_ht = & il - > _4965 . accum_stats . rx . ofdm_ht ;
delta_ofdm = & il - > _4965 . delta_stats . rx . ofdm ;
delta_cck = & il - > _4965 . delta_stats . rx . cck ;
delta_general = & il - > _4965 . delta_stats . rx . general ;
delta_ht = & il - > _4965 . delta_stats . rx . ofdm_ht ;
2011-10-24 16:49:25 +02:00
max_ofdm = & il - > _4965 . max_delta . rx . ofdm ;
max_cck = & il - > _4965 . max_delta . rx . cck ;
max_general = & il - > _4965 . max_delta . rx . general ;
max_ht = & il - > _4965 . max_delta . rx . ofdm_ht ;
2011-02-21 11:27:26 -08:00
2011-08-26 15:43:47 +02:00
pos + = il4965_stats_flag ( il , buf , bufsz ) ;
2011-11-15 14:45:59 +01:00
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_header ,
" Statistics_Rx - OFDM: " ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " ina_cnt: " ,
le32_to_cpu ( ofdm - > ina_cnt ) , accum_ofdm - > ina_cnt ,
delta_ofdm - > ina_cnt , max_ofdm - > ina_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " fina_cnt: " ,
le32_to_cpu ( ofdm - > fina_cnt ) , accum_ofdm - > fina_cnt ,
delta_ofdm - > fina_cnt , max_ofdm - > fina_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " plcp_err: " ,
le32_to_cpu ( ofdm - > plcp_err ) , accum_ofdm - > plcp_err ,
delta_ofdm - > plcp_err , max_ofdm - > plcp_err ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " crc32_err: " ,
le32_to_cpu ( ofdm - > crc32_err ) , accum_ofdm - > crc32_err ,
delta_ofdm - > crc32_err , max_ofdm - > crc32_err ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " overrun_err: " ,
le32_to_cpu ( ofdm - > overrun_err ) , accum_ofdm - > overrun_err ,
delta_ofdm - > overrun_err , max_ofdm - > overrun_err ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " early_overrun_err: " ,
le32_to_cpu ( ofdm - > early_overrun_err ) ,
accum_ofdm - > early_overrun_err ,
delta_ofdm - > early_overrun_err ,
max_ofdm - > early_overrun_err ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " crc32_good: " ,
le32_to_cpu ( ofdm - > crc32_good ) , accum_ofdm - > crc32_good ,
delta_ofdm - > crc32_good , max_ofdm - > crc32_good ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " false_alarm_cnt: " ,
le32_to_cpu ( ofdm - > false_alarm_cnt ) ,
accum_ofdm - > false_alarm_cnt , delta_ofdm - > false_alarm_cnt ,
max_ofdm - > false_alarm_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " fina_sync_err_cnt: " ,
le32_to_cpu ( ofdm - > fina_sync_err_cnt ) ,
accum_ofdm - > fina_sync_err_cnt ,
delta_ofdm - > fina_sync_err_cnt ,
max_ofdm - > fina_sync_err_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " sfd_timeout: " ,
le32_to_cpu ( ofdm - > sfd_timeout ) , accum_ofdm - > sfd_timeout ,
delta_ofdm - > sfd_timeout , max_ofdm - > sfd_timeout ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " fina_timeout: " ,
le32_to_cpu ( ofdm - > fina_timeout ) , accum_ofdm - > fina_timeout ,
delta_ofdm - > fina_timeout , max_ofdm - > fina_timeout ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " unresponded_rts: " ,
le32_to_cpu ( ofdm - > unresponded_rts ) ,
accum_ofdm - > unresponded_rts , delta_ofdm - > unresponded_rts ,
max_ofdm - > unresponded_rts ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " rxe_frame_lmt_ovrun: " ,
le32_to_cpu ( ofdm - > rxe_frame_limit_overrun ) ,
accum_ofdm - > rxe_frame_limit_overrun ,
delta_ofdm - > rxe_frame_limit_overrun ,
max_ofdm - > rxe_frame_limit_overrun ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " sent_ack_cnt: " ,
le32_to_cpu ( ofdm - > sent_ack_cnt ) , accum_ofdm - > sent_ack_cnt ,
delta_ofdm - > sent_ack_cnt , max_ofdm - > sent_ack_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " sent_cts_cnt: " ,
le32_to_cpu ( ofdm - > sent_cts_cnt ) , accum_ofdm - > sent_cts_cnt ,
delta_ofdm - > sent_cts_cnt , max_ofdm - > sent_cts_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " sent_ba_rsp_cnt: " ,
le32_to_cpu ( ofdm - > sent_ba_rsp_cnt ) ,
accum_ofdm - > sent_ba_rsp_cnt , delta_ofdm - > sent_ba_rsp_cnt ,
max_ofdm - > sent_ba_rsp_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " dsp_self_kill: " ,
le32_to_cpu ( ofdm - > dsp_self_kill ) ,
accum_ofdm - > dsp_self_kill , delta_ofdm - > dsp_self_kill ,
max_ofdm - > dsp_self_kill ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " mh_format_err: " ,
le32_to_cpu ( ofdm - > mh_format_err ) ,
accum_ofdm - > mh_format_err , delta_ofdm - > mh_format_err ,
max_ofdm - > mh_format_err ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" re_acq_main_rssi_sum: " ,
le32_to_cpu ( ofdm - > re_acq_main_rssi_sum ) ,
accum_ofdm - > re_acq_main_rssi_sum ,
delta_ofdm - > re_acq_main_rssi_sum ,
max_ofdm - > re_acq_main_rssi_sum ) ;
2011-02-21 11:27:26 -08:00
2011-11-15 14:45:59 +01:00
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_header ,
" Statistics_Rx - CCK: " ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " ina_cnt: " ,
le32_to_cpu ( cck - > ina_cnt ) , accum_cck - > ina_cnt ,
delta_cck - > ina_cnt , max_cck - > ina_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " fina_cnt: " ,
le32_to_cpu ( cck - > fina_cnt ) , accum_cck - > fina_cnt ,
delta_cck - > fina_cnt , max_cck - > fina_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " plcp_err: " ,
le32_to_cpu ( cck - > plcp_err ) , accum_cck - > plcp_err ,
delta_cck - > plcp_err , max_cck - > plcp_err ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " crc32_err: " ,
le32_to_cpu ( cck - > crc32_err ) , accum_cck - > crc32_err ,
delta_cck - > crc32_err , max_cck - > crc32_err ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " overrun_err: " ,
le32_to_cpu ( cck - > overrun_err ) , accum_cck - > overrun_err ,
delta_cck - > overrun_err , max_cck - > overrun_err ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " early_overrun_err: " ,
le32_to_cpu ( cck - > early_overrun_err ) ,
accum_cck - > early_overrun_err ,
delta_cck - > early_overrun_err , max_cck - > early_overrun_err ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " crc32_good: " ,
le32_to_cpu ( cck - > crc32_good ) , accum_cck - > crc32_good ,
delta_cck - > crc32_good , max_cck - > crc32_good ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " false_alarm_cnt: " ,
le32_to_cpu ( cck - > false_alarm_cnt ) ,
accum_cck - > false_alarm_cnt , delta_cck - > false_alarm_cnt ,
max_cck - > false_alarm_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " fina_sync_err_cnt: " ,
le32_to_cpu ( cck - > fina_sync_err_cnt ) ,
accum_cck - > fina_sync_err_cnt ,
delta_cck - > fina_sync_err_cnt , max_cck - > fina_sync_err_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " sfd_timeout: " ,
le32_to_cpu ( cck - > sfd_timeout ) , accum_cck - > sfd_timeout ,
delta_cck - > sfd_timeout , max_cck - > sfd_timeout ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " fina_timeout: " ,
le32_to_cpu ( cck - > fina_timeout ) , accum_cck - > fina_timeout ,
delta_cck - > fina_timeout , max_cck - > fina_timeout ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " unresponded_rts: " ,
le32_to_cpu ( cck - > unresponded_rts ) ,
accum_cck - > unresponded_rts , delta_cck - > unresponded_rts ,
max_cck - > unresponded_rts ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " rxe_frame_lmt_ovrun: " ,
le32_to_cpu ( cck - > rxe_frame_limit_overrun ) ,
accum_cck - > rxe_frame_limit_overrun ,
delta_cck - > rxe_frame_limit_overrun ,
max_cck - > rxe_frame_limit_overrun ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " sent_ack_cnt: " ,
le32_to_cpu ( cck - > sent_ack_cnt ) , accum_cck - > sent_ack_cnt ,
delta_cck - > sent_ack_cnt , max_cck - > sent_ack_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " sent_cts_cnt: " ,
le32_to_cpu ( cck - > sent_cts_cnt ) , accum_cck - > sent_cts_cnt ,
delta_cck - > sent_cts_cnt , max_cck - > sent_cts_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " sent_ba_rsp_cnt: " ,
le32_to_cpu ( cck - > sent_ba_rsp_cnt ) ,
accum_cck - > sent_ba_rsp_cnt , delta_cck - > sent_ba_rsp_cnt ,
max_cck - > sent_ba_rsp_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " dsp_self_kill: " ,
le32_to_cpu ( cck - > dsp_self_kill ) , accum_cck - > dsp_self_kill ,
delta_cck - > dsp_self_kill , max_cck - > dsp_self_kill ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " mh_format_err: " ,
le32_to_cpu ( cck - > mh_format_err ) , accum_cck - > mh_format_err ,
delta_cck - > mh_format_err , max_cck - > mh_format_err ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" re_acq_main_rssi_sum: " ,
le32_to_cpu ( cck - > re_acq_main_rssi_sum ) ,
accum_cck - > re_acq_main_rssi_sum ,
delta_cck - > re_acq_main_rssi_sum ,
max_cck - > re_acq_main_rssi_sum ) ;
2011-02-21 11:27:26 -08:00
2011-11-15 14:45:59 +01:00
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_header ,
" Statistics_Rx - GENERAL: " ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " bogus_cts: " ,
le32_to_cpu ( general - > bogus_cts ) , accum_general - > bogus_cts ,
delta_general - > bogus_cts , max_general - > bogus_cts ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " bogus_ack: " ,
le32_to_cpu ( general - > bogus_ack ) , accum_general - > bogus_ack ,
delta_general - > bogus_ack , max_general - > bogus_ack ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " non_bssid_frames: " ,
le32_to_cpu ( general - > non_bssid_frames ) ,
accum_general - > non_bssid_frames ,
delta_general - > non_bssid_frames ,
max_general - > non_bssid_frames ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " filtered_frames: " ,
le32_to_cpu ( general - > filtered_frames ) ,
accum_general - > filtered_frames ,
delta_general - > filtered_frames ,
max_general - > filtered_frames ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " non_channel_beacons: " ,
le32_to_cpu ( general - > non_channel_beacons ) ,
accum_general - > non_channel_beacons ,
delta_general - > non_channel_beacons ,
max_general - > non_channel_beacons ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " channel_beacons: " ,
le32_to_cpu ( general - > channel_beacons ) ,
accum_general - > channel_beacons ,
delta_general - > channel_beacons ,
max_general - > channel_beacons ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " num_missed_bcon: " ,
le32_to_cpu ( general - > num_missed_bcon ) ,
accum_general - > num_missed_bcon ,
delta_general - > num_missed_bcon ,
max_general - > num_missed_bcon ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" adc_rx_saturation_time: " ,
le32_to_cpu ( general - > adc_rx_saturation_time ) ,
accum_general - > adc_rx_saturation_time ,
delta_general - > adc_rx_saturation_time ,
max_general - > adc_rx_saturation_time ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" ina_detect_search_tm: " ,
le32_to_cpu ( general - > ina_detection_search_time ) ,
accum_general - > ina_detection_search_time ,
delta_general - > ina_detection_search_time ,
max_general - > ina_detection_search_time ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" beacon_silence_rssi_a: " ,
le32_to_cpu ( general - > beacon_silence_rssi_a ) ,
accum_general - > beacon_silence_rssi_a ,
delta_general - > beacon_silence_rssi_a ,
max_general - > beacon_silence_rssi_a ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" beacon_silence_rssi_b: " ,
le32_to_cpu ( general - > beacon_silence_rssi_b ) ,
accum_general - > beacon_silence_rssi_b ,
delta_general - > beacon_silence_rssi_b ,
max_general - > beacon_silence_rssi_b ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" beacon_silence_rssi_c: " ,
le32_to_cpu ( general - > beacon_silence_rssi_c ) ,
accum_general - > beacon_silence_rssi_c ,
delta_general - > beacon_silence_rssi_c ,
max_general - > beacon_silence_rssi_c ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" interference_data_flag: " ,
le32_to_cpu ( general - > interference_data_flag ) ,
accum_general - > interference_data_flag ,
delta_general - > interference_data_flag ,
max_general - > interference_data_flag ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " channel_load: " ,
le32_to_cpu ( general - > channel_load ) ,
accum_general - > channel_load , delta_general - > channel_load ,
max_general - > channel_load ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " dsp_false_alarms: " ,
le32_to_cpu ( general - > dsp_false_alarms ) ,
accum_general - > dsp_false_alarms ,
delta_general - > dsp_false_alarms ,
max_general - > dsp_false_alarms ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " beacon_rssi_a: " ,
le32_to_cpu ( general - > beacon_rssi_a ) ,
accum_general - > beacon_rssi_a ,
delta_general - > beacon_rssi_a , max_general - > beacon_rssi_a ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " beacon_rssi_b: " ,
le32_to_cpu ( general - > beacon_rssi_b ) ,
accum_general - > beacon_rssi_b ,
delta_general - > beacon_rssi_b , max_general - > beacon_rssi_b ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " beacon_rssi_c: " ,
le32_to_cpu ( general - > beacon_rssi_c ) ,
accum_general - > beacon_rssi_c ,
delta_general - > beacon_rssi_c , max_general - > beacon_rssi_c ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " beacon_energy_a: " ,
le32_to_cpu ( general - > beacon_energy_a ) ,
accum_general - > beacon_energy_a ,
delta_general - > beacon_energy_a ,
max_general - > beacon_energy_a ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " beacon_energy_b: " ,
le32_to_cpu ( general - > beacon_energy_b ) ,
accum_general - > beacon_energy_b ,
delta_general - > beacon_energy_b ,
max_general - > beacon_energy_b ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " beacon_energy_c: " ,
le32_to_cpu ( general - > beacon_energy_c ) ,
accum_general - > beacon_energy_c ,
delta_general - > beacon_energy_c ,
max_general - > beacon_energy_c ) ;
2011-02-21 11:27:26 -08:00
2011-11-15 14:45:59 +01:00
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_header ,
" Statistics_Rx - OFDM_HT: " ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " plcp_err: " ,
le32_to_cpu ( ht - > plcp_err ) , accum_ht - > plcp_err ,
delta_ht - > plcp_err , max_ht - > plcp_err ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " overrun_err: " ,
le32_to_cpu ( ht - > overrun_err ) , accum_ht - > overrun_err ,
delta_ht - > overrun_err , max_ht - > overrun_err ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " early_overrun_err: " ,
le32_to_cpu ( ht - > early_overrun_err ) ,
accum_ht - > early_overrun_err , delta_ht - > early_overrun_err ,
max_ht - > early_overrun_err ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " crc32_good: " ,
le32_to_cpu ( ht - > crc32_good ) , accum_ht - > crc32_good ,
delta_ht - > crc32_good , max_ht - > crc32_good ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " crc32_err: " ,
le32_to_cpu ( ht - > crc32_err ) , accum_ht - > crc32_err ,
delta_ht - > crc32_err , max_ht - > crc32_err ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " mh_format_err: " ,
le32_to_cpu ( ht - > mh_format_err ) , accum_ht - > mh_format_err ,
delta_ht - > mh_format_err , max_ht - > mh_format_err ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " agg_crc32_good: " ,
le32_to_cpu ( ht - > agg_crc32_good ) , accum_ht - > agg_crc32_good ,
delta_ht - > agg_crc32_good , max_ht - > agg_crc32_good ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " agg_mpdu_cnt: " ,
le32_to_cpu ( ht - > agg_mpdu_cnt ) , accum_ht - > agg_mpdu_cnt ,
delta_ht - > agg_mpdu_cnt , max_ht - > agg_mpdu_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " agg_cnt: " ,
le32_to_cpu ( ht - > agg_cnt ) , accum_ht - > agg_cnt ,
delta_ht - > agg_cnt , max_ht - > agg_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " unsupport_mcs: " ,
le32_to_cpu ( ht - > unsupport_mcs ) , accum_ht - > unsupport_mcs ,
delta_ht - > unsupport_mcs , max_ht - > unsupport_mcs ) ;
2011-02-21 11:27:26 -08:00
ret = simple_read_from_buffer ( user_buf , count , ppos , buf , pos ) ;
kfree ( buf ) ;
return ret ;
}
2011-11-15 14:45:59 +01:00
ssize_t
2011-11-15 14:51:01 +01:00
il4965_ucode_tx_stats_read ( struct file * file , char __user * user_buf ,
size_t count , loff_t * ppos )
2011-02-21 11:27:26 -08:00
{
2011-10-24 16:49:25 +02:00
struct il_priv * il = file - > private_data ;
2011-02-21 11:27:26 -08:00
int pos = 0 ;
char * buf ;
2011-08-26 15:43:47 +02:00
int bufsz = ( sizeof ( struct stats_tx ) * 48 ) + 250 ;
2011-02-21 11:27:26 -08:00
ssize_t ret ;
2011-08-26 15:43:47 +02:00
struct stats_tx * tx , * accum_tx , * delta_tx , * max_tx ;
2011-02-21 11:27:26 -08:00
2011-10-24 16:49:25 +02:00
if ( ! il_is_alive ( il ) )
2011-02-21 11:27:26 -08:00
return - EAGAIN ;
buf = kzalloc ( bufsz , GFP_KERNEL ) ;
if ( ! buf ) {
2011-08-18 22:07:57 +02:00
IL_ERR ( " Can not allocate Buffer \n " ) ;
2011-02-21 11:27:26 -08:00
return - ENOMEM ;
}
/* the statistic information display here is based on
2011-11-15 14:45:59 +01:00
* the last stats notification from uCode
* might not reflect the current uCode activity
*/
2011-08-26 15:43:47 +02:00
tx = & il - > _4965 . stats . tx ;
accum_tx = & il - > _4965 . accum_stats . tx ;
delta_tx = & il - > _4965 . delta_stats . tx ;
2011-10-24 16:49:25 +02:00
max_tx = & il - > _4965 . max_delta . tx ;
2011-02-21 11:27:26 -08:00
2011-08-26 15:43:47 +02:00
pos + = il4965_stats_flag ( il , buf , bufsz ) ;
2011-11-15 14:45:59 +01:00
pos + = scnprintf ( buf + pos , bufsz - pos , fmt_header , " Statistics_Tx: " ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " preamble: " ,
le32_to_cpu ( tx - > preamble_cnt ) , accum_tx - > preamble_cnt ,
delta_tx - > preamble_cnt , max_tx - > preamble_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " rx_detected_cnt: " ,
le32_to_cpu ( tx - > rx_detected_cnt ) ,
accum_tx - > rx_detected_cnt , delta_tx - > rx_detected_cnt ,
max_tx - > rx_detected_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " bt_prio_defer_cnt: " ,
le32_to_cpu ( tx - > bt_prio_defer_cnt ) ,
accum_tx - > bt_prio_defer_cnt , delta_tx - > bt_prio_defer_cnt ,
max_tx - > bt_prio_defer_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " bt_prio_kill_cnt: " ,
le32_to_cpu ( tx - > bt_prio_kill_cnt ) ,
accum_tx - > bt_prio_kill_cnt , delta_tx - > bt_prio_kill_cnt ,
max_tx - > bt_prio_kill_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " few_bytes_cnt: " ,
le32_to_cpu ( tx - > few_bytes_cnt ) , accum_tx - > few_bytes_cnt ,
delta_tx - > few_bytes_cnt , max_tx - > few_bytes_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " cts_timeout: " ,
le32_to_cpu ( tx - > cts_timeout ) , accum_tx - > cts_timeout ,
delta_tx - > cts_timeout , max_tx - > cts_timeout ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " ack_timeout: " ,
le32_to_cpu ( tx - > ack_timeout ) , accum_tx - > ack_timeout ,
delta_tx - > ack_timeout , max_tx - > ack_timeout ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " expected_ack_cnt: " ,
le32_to_cpu ( tx - > expected_ack_cnt ) ,
accum_tx - > expected_ack_cnt , delta_tx - > expected_ack_cnt ,
max_tx - > expected_ack_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " actual_ack_cnt: " ,
le32_to_cpu ( tx - > actual_ack_cnt ) , accum_tx - > actual_ack_cnt ,
delta_tx - > actual_ack_cnt , max_tx - > actual_ack_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " dump_msdu_cnt: " ,
le32_to_cpu ( tx - > dump_msdu_cnt ) , accum_tx - > dump_msdu_cnt ,
delta_tx - > dump_msdu_cnt , max_tx - > dump_msdu_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" abort_nxt_frame_mismatch: " ,
le32_to_cpu ( tx - > burst_abort_next_frame_mismatch_cnt ) ,
accum_tx - > burst_abort_next_frame_mismatch_cnt ,
delta_tx - > burst_abort_next_frame_mismatch_cnt ,
max_tx - > burst_abort_next_frame_mismatch_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" abort_missing_nxt_frame: " ,
le32_to_cpu ( tx - > burst_abort_missing_next_frame_cnt ) ,
accum_tx - > burst_abort_missing_next_frame_cnt ,
delta_tx - > burst_abort_missing_next_frame_cnt ,
max_tx - > burst_abort_missing_next_frame_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" cts_timeout_collision: " ,
le32_to_cpu ( tx - > cts_timeout_collision ) ,
accum_tx - > cts_timeout_collision ,
delta_tx - > cts_timeout_collision ,
max_tx - > cts_timeout_collision ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" ack_ba_timeout_collision: " ,
le32_to_cpu ( tx - > ack_or_ba_timeout_collision ) ,
accum_tx - > ack_or_ba_timeout_collision ,
delta_tx - > ack_or_ba_timeout_collision ,
max_tx - > ack_or_ba_timeout_collision ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " agg ba_timeout: " ,
le32_to_cpu ( tx - > agg . ba_timeout ) , accum_tx - > agg . ba_timeout ,
delta_tx - > agg . ba_timeout , max_tx - > agg . ba_timeout ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" agg ba_resched_frames: " ,
le32_to_cpu ( tx - > agg . ba_reschedule_frames ) ,
accum_tx - > agg . ba_reschedule_frames ,
delta_tx - > agg . ba_reschedule_frames ,
max_tx - > agg . ba_reschedule_frames ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" agg scd_query_agg_frame: " ,
le32_to_cpu ( tx - > agg . scd_query_agg_frame_cnt ) ,
accum_tx - > agg . scd_query_agg_frame_cnt ,
delta_tx - > agg . scd_query_agg_frame_cnt ,
max_tx - > agg . scd_query_agg_frame_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" agg scd_query_no_agg: " ,
le32_to_cpu ( tx - > agg . scd_query_no_agg ) ,
accum_tx - > agg . scd_query_no_agg ,
delta_tx - > agg . scd_query_no_agg ,
max_tx - > agg . scd_query_no_agg ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " agg scd_query_agg: " ,
le32_to_cpu ( tx - > agg . scd_query_agg ) ,
accum_tx - > agg . scd_query_agg , delta_tx - > agg . scd_query_agg ,
max_tx - > agg . scd_query_agg ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" agg scd_query_mismatch: " ,
le32_to_cpu ( tx - > agg . scd_query_mismatch ) ,
accum_tx - > agg . scd_query_mismatch ,
delta_tx - > agg . scd_query_mismatch ,
max_tx - > agg . scd_query_mismatch ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " agg frame_not_ready: " ,
le32_to_cpu ( tx - > agg . frame_not_ready ) ,
accum_tx - > agg . frame_not_ready ,
delta_tx - > agg . frame_not_ready ,
max_tx - > agg . frame_not_ready ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " agg underrun: " ,
le32_to_cpu ( tx - > agg . underrun ) , accum_tx - > agg . underrun ,
delta_tx - > agg . underrun , max_tx - > agg . underrun ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " agg bt_prio_kill: " ,
le32_to_cpu ( tx - > agg . bt_prio_kill ) ,
accum_tx - > agg . bt_prio_kill , delta_tx - > agg . bt_prio_kill ,
max_tx - > agg . bt_prio_kill ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " agg rx_ba_rsp_cnt: " ,
le32_to_cpu ( tx - > agg . rx_ba_rsp_cnt ) ,
accum_tx - > agg . rx_ba_rsp_cnt , delta_tx - > agg . rx_ba_rsp_cnt ,
max_tx - > agg . rx_ba_rsp_cnt ) ;
2011-02-21 11:27:26 -08:00
ret = simple_read_from_buffer ( user_buf , count , ppos , buf , pos ) ;
kfree ( buf ) ;
return ret ;
}
ssize_t
2011-11-15 14:51:01 +01:00
il4965_ucode_general_stats_read ( struct file * file , char __user * user_buf ,
size_t count , loff_t * ppos )
2011-02-21 11:27:26 -08:00
{
2011-10-24 16:49:25 +02:00
struct il_priv * il = file - > private_data ;
2011-02-21 11:27:26 -08:00
int pos = 0 ;
char * buf ;
2011-08-26 15:43:47 +02:00
int bufsz = sizeof ( struct stats_general ) * 10 + 300 ;
2011-02-21 11:27:26 -08:00
ssize_t ret ;
2011-08-26 15:43:47 +02:00
struct stats_general_common * general , * accum_general ;
struct stats_general_common * delta_general , * max_general ;
struct stats_dbg * dbg , * accum_dbg , * delta_dbg , * max_dbg ;
struct stats_div * div , * accum_div , * delta_div , * max_div ;
2011-02-21 11:27:26 -08:00
2011-10-24 16:49:25 +02:00
if ( ! il_is_alive ( il ) )
2011-02-21 11:27:26 -08:00
return - EAGAIN ;
buf = kzalloc ( bufsz , GFP_KERNEL ) ;
if ( ! buf ) {
2011-08-18 22:07:57 +02:00
IL_ERR ( " Can not allocate Buffer \n " ) ;
2011-02-21 11:27:26 -08:00
return - ENOMEM ;
}
/* the statistic information display here is based on
2011-11-15 14:45:59 +01:00
* the last stats notification from uCode
* might not reflect the current uCode activity
*/
2011-08-26 15:43:47 +02:00
general = & il - > _4965 . stats . general . common ;
dbg = & il - > _4965 . stats . general . common . dbg ;
div = & il - > _4965 . stats . general . common . div ;
accum_general = & il - > _4965 . accum_stats . general . common ;
accum_dbg = & il - > _4965 . accum_stats . general . common . dbg ;
accum_div = & il - > _4965 . accum_stats . general . common . div ;
delta_general = & il - > _4965 . delta_stats . general . common ;
2011-10-24 16:49:25 +02:00
max_general = & il - > _4965 . max_delta . general . common ;
2011-08-26 15:43:47 +02:00
delta_dbg = & il - > _4965 . delta_stats . general . common . dbg ;
2011-10-24 16:49:25 +02:00
max_dbg = & il - > _4965 . max_delta . general . common . dbg ;
2011-08-26 15:43:47 +02:00
delta_div = & il - > _4965 . delta_stats . general . common . div ;
2011-10-24 16:49:25 +02:00
max_div = & il - > _4965 . max_delta . general . common . div ;
2011-02-21 11:27:26 -08:00
2011-08-26 15:43:47 +02:00
pos + = il4965_stats_flag ( il , buf , bufsz ) ;
2011-11-15 14:45:59 +01:00
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_header ,
" Statistics_General: " ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_value , " temperature: " ,
le32_to_cpu ( general - > temperature ) ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_value , " ttl_timestamp: " ,
le32_to_cpu ( general - > ttl_timestamp ) ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " burst_check: " ,
le32_to_cpu ( dbg - > burst_check ) , accum_dbg - > burst_check ,
delta_dbg - > burst_check , max_dbg - > burst_check ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " burst_count: " ,
le32_to_cpu ( dbg - > burst_count ) , accum_dbg - > burst_count ,
delta_dbg - > burst_count , max_dbg - > burst_count ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table ,
" wait_for_silence_timeout_count: " ,
le32_to_cpu ( dbg - > wait_for_silence_timeout_cnt ) ,
accum_dbg - > wait_for_silence_timeout_cnt ,
delta_dbg - > wait_for_silence_timeout_cnt ,
max_dbg - > wait_for_silence_timeout_cnt ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " sleep_time: " ,
le32_to_cpu ( general - > sleep_time ) ,
accum_general - > sleep_time , delta_general - > sleep_time ,
max_general - > sleep_time ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " slots_out: " ,
le32_to_cpu ( general - > slots_out ) , accum_general - > slots_out ,
delta_general - > slots_out , max_general - > slots_out ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " slots_idle: " ,
le32_to_cpu ( general - > slots_idle ) ,
accum_general - > slots_idle , delta_general - > slots_idle ,
max_general - > slots_idle ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " tx_on_a: " ,
le32_to_cpu ( div - > tx_on_a ) , accum_div - > tx_on_a ,
delta_div - > tx_on_a , max_div - > tx_on_a ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " tx_on_b: " ,
le32_to_cpu ( div - > tx_on_b ) , accum_div - > tx_on_b ,
delta_div - > tx_on_b , max_div - > tx_on_b ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " exec_time: " ,
le32_to_cpu ( div - > exec_time ) , accum_div - > exec_time ,
delta_div - > exec_time , max_div - > exec_time ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " probe_time: " ,
le32_to_cpu ( div - > probe_time ) , accum_div - > probe_time ,
delta_div - > probe_time , max_div - > probe_time ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " rx_enable_counter: " ,
le32_to_cpu ( general - > rx_enable_counter ) ,
accum_general - > rx_enable_counter ,
delta_general - > rx_enable_counter ,
max_general - > rx_enable_counter ) ;
pos + =
scnprintf ( buf + pos , bufsz - pos , fmt_table , " num_of_sos_states: " ,
le32_to_cpu ( general - > num_of_sos_states ) ,
accum_general - > num_of_sos_states ,
delta_general - > num_of_sos_states ,
max_general - > num_of_sos_states ) ;
2011-02-21 11:27:26 -08:00
ret = simple_read_from_buffer ( user_buf , count , ppos , buf , pos ) ;
kfree ( buf ) ;
return ret ;
}
2012-02-13 11:23:14 +01:00
const struct il_debugfs_ops il4965_debugfs_ops = {
. rx_stats_read = il4965_ucode_rx_stats_read ,
. tx_stats_read = il4965_ucode_tx_stats_read ,
. general_stats_read = il4965_ucode_general_stats_read ,
} ;