/******************************************************************************
*
* 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
*****************************************************************************/
#include "common.h"
#include "4965.h"

static const char *fmt_value = "  %-30s %10u\n";
static const char *fmt_table = "  %-30s %10u  %10u  %10u  %10u\n";
static const char *fmt_header =
    "%-32s    current  cumulative       delta         max\n";

static int
il4965_stats_flag(struct il_priv *il, char *buf, int bufsz)
{
	int p = 0;
	u32 flag;

	flag = le32_to_cpu(il->_4965.stats.flag);

	p += scnprintf(buf + p, bufsz - p, "Statistics Flag(0x%X):\n", flag);
	if (flag & UCODE_STATS_CLEAR_MSK)
		p += scnprintf(buf + p, bufsz - p,
			       "\tStatistics have been cleared\n");
	p += scnprintf(buf + p, bufsz - p, "\tOperational Frequency: %s\n",
		       (flag & UCODE_STATS_FREQUENCY_MSK) ? "2.4 GHz" :
		       "5.2 GHz");
	p += scnprintf(buf + p, bufsz - p, "\tTGj Narrow Band: %s\n",
		       (flag & UCODE_STATS_NARROW_BAND_MSK) ? "enabled" :
		       "disabled");

	return p;
}

ssize_t
il4965_ucode_rx_stats_read(struct file *file, char __user *user_buf,
			   size_t count, loff_t *ppos)
{
	struct il_priv *il = file->private_data;
	int pos = 0;
	char *buf;
	int bufsz =
	    sizeof(struct stats_rx_phy) * 40 +
	    sizeof(struct stats_rx_non_phy) * 40 +
	    sizeof(struct stats_rx_ht_phy) * 40 + 400;
	ssize_t ret;
	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;

	if (!il_is_alive(il))
		return -EAGAIN;

	buf = kzalloc(bufsz, GFP_KERNEL);
	if (!buf) {
		IL_ERR("Can not allocate Buffer\n");
		return -ENOMEM;
	}

	/*
	 * the statistic information display here is based on
	 * the last stats notification from uCode
	 * might not reflect the current uCode activity
	 */
	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;
	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;

	pos += il4965_stats_flag(il, buf, bufsz);
	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);

	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);

	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);

	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);

	ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
	kfree(buf);
	return ret;
}

ssize_t
il4965_ucode_tx_stats_read(struct file *file, char __user *user_buf,
			   size_t count, loff_t *ppos)
{
	struct il_priv *il = file->private_data;
	int pos = 0;
	char *buf;
	int bufsz = (sizeof(struct stats_tx) * 48) + 250;
	ssize_t ret;
	struct stats_tx *tx, *accum_tx, *delta_tx, *max_tx;

	if (!il_is_alive(il))
		return -EAGAIN;

	buf = kzalloc(bufsz, GFP_KERNEL);
	if (!buf) {
		IL_ERR("Can not allocate Buffer\n");
		return -ENOMEM;
	}

	/* the statistic information display here is based on
	 * the last stats notification from uCode
	 * might not reflect the current uCode activity
	 */
	tx = &il->_4965.stats.tx;
	accum_tx = &il->_4965.accum_stats.tx;
	delta_tx = &il->_4965.delta_stats.tx;
	max_tx = &il->_4965.max_delta.tx;

	pos += il4965_stats_flag(il, buf, bufsz);
	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);

	ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
	kfree(buf);
	return ret;
}

ssize_t
il4965_ucode_general_stats_read(struct file *file, char __user *user_buf,
				size_t count, loff_t *ppos)
{
	struct il_priv *il = file->private_data;
	int pos = 0;
	char *buf;
	int bufsz = sizeof(struct stats_general) * 10 + 300;
	ssize_t ret;
	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;

	if (!il_is_alive(il))
		return -EAGAIN;

	buf = kzalloc(bufsz, GFP_KERNEL);
	if (!buf) {
		IL_ERR("Can not allocate Buffer\n");
		return -ENOMEM;
	}

	/* the statistic information display here is based on
	 * the last stats notification from uCode
	 * might not reflect the current uCode activity
	 */
	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;
	max_general = &il->_4965.max_delta.general.common;
	delta_dbg = &il->_4965.delta_stats.general.common.dbg;
	max_dbg = &il->_4965.max_delta.general.common.dbg;
	delta_div = &il->_4965.delta_stats.general.common.div;
	max_div = &il->_4965.max_delta.general.common.div;

	pos += il4965_stats_flag(il, buf, bufsz);
	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);
	ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
	kfree(buf);
	return ret;
}

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,
};
